6 #include "CAFAna/Core/Binning.h" 7 #include "CAFAna/Core/Cut.h" 40 #include "TGraphAsymmErrors.h" 41 #include "TFeldmanCousins.h" 44 #include "/nova/app/users/asutton/3Flavor/Ana2020/BoxOpening_br_ana/plotting_header.h" 55 TGraphAsymmErrors* gr =
new TGraphAsymmErrors(h);
57 TFeldmanCousins
fc(0.6827);
59 std::vector<int> removePoints;
60 for(
int i = 0;
i < h->GetNbinsX(); ++
i){
62 gr->GetPoint(
i, x, y);
64 if ( (drawEmptyBins && h2->GetBinContent(
i+1) > 0.05) || y>=1 ){
65 if ( y < 50 ) gr->SetPointEYlow(
i, y-fc.CalculateLowerLimit(y,0));
66 else gr->SetPointEYlow(
i,
sqrt(y));
67 if ( y < 30 ) gr->SetPointEYhigh(
i,fc.CalculateUpperLimit(y,0)-
y);
68 else gr->SetPointEYhigh(
i,
sqrt(y));
70 removePoints.push_back(
i);
74 gr->SetPointEXlow(
i, 0);
75 gr->SetPointEXhigh(
i, 0);
80 for (
uint i = 0;
i < removePoints.size(); ++
i)
81 gr->RemovePoint(removePoints[
i]-
i);
97 std::cout <<
"PeriodFromHeader(): Unknown detector " 182 return ( HadE / TruE );
233 const std::map< std::pair<std::string, std::string >,
Variable >
vars =
239 {
std::make_pair(
"muonE" ,
"Reconstructed muon energy (GeV)" ), {
kMuE , LowEnBins } },
Near Detector underground.
T max(const caf::Proxy< T > &a, T b)
Far Detector at Ash River.
Represent the binning of a Spectrum's x-axis.
Cuts and Vars for the 2020 FD DiF Study.
const Var kMaxKalYPos([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-10.0f;return std::max(sr->trk.kalman.tracks[0].start.Y()/100, sr->trk.kalman.tracks[0].stop.Y()/100);})
const Var kSlcMaxZ([](const caf::SRProxy *sr){return sr->slc.boxmax.Z()/100.;})
const Var kSlcMaxY([](const caf::SRProxy *sr){return sr->slc.boxmax.Y()/100.;})
caf::Proxy< size_t > ntracks
caf::Proxy< caf::SRHeader > hdr
Struct to hold prediction information.
caf::Proxy< unsigned int > firstcell
caf::Proxy< caf::SRContain > contain
Proxy for caf::StandardRecord.
const Var kMinCellEdg([](const caf::SRProxy *sr){return std::min((sr->sel.contain.kalfwdcell+sr->sel.contain.kalbakcell), (sr->sel.contain.cosfwdcell+sr->sel.contain.cosbakcell));})
const Var kTrkStartY([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-10.0f;return sr->trk.kalman.tracks[0].start.Y()/100;})
const Var kFirstCell([](const caf::SRProxy *sr){return sr->slc.firstcell;})
const Var kSliceTime([](const caf::SRProxy *sr){return sr->slc.meantime/1000;})
const Var kTrueHFrE([](const caf::SRProxy *sr){float HadE=kTrueHadE(sr);float TruE=kTrueE(sr);return(HadE/TruE);})
const Var kLastCell([](const caf::SRProxy *sr){return sr->slc.lastcell;})
caf::Proxy< int > cosfwdcell
const Var kTrkCalEPerNHit([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return 0.f;return sr->trk.kalman.tracks[0].calE/sr->trk.kalman.tracks[0].nhit;})
std::pair< Spectrum *, CheatDecomp * > make_pair(SpectrumLoaderBase &loader_data, SpectrumLoaderBase &loader_mc, HistAxis *axis, Cut *cut, const SystShifts &shift, const Var &wei)
caf::Proxy< int > cosbakcell
const Var kKalFwdCell([](const caf::SRProxy *sr){return sr->sel.contain.kalfwdcell;})
const Var kTrkLength([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-5.f;return sr->trk.kalman.tracks[0].len/100;})
const Var kScattTrLen([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-10.0f;return(float)((float) sr->sel.cosrej.scatt/(float) sr->trk.kalman.tracks[0].len);})
const Var kSlcMinX([](const caf::SRProxy *sr){return sr->slc.boxmin.X()/100.;})
const Var kHadEPerNHit([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return 0.0f;int nHit=sr->slc.nhit-sr->trk.kalman.tracks[0].nhit;if(nHit<=0) return 0.0f;float hadE=sr->energy.numu.hadcalE;return hadE/nHit;})
const Var kSlcMaxX([](const caf::SRProxy *sr){return sr->slc.boxmax.X()/100.;})
unsigned int PeriodFromRunFD(int run)
: Helper function to compute the period given a run number for the FD.
caf::Proxy< caf::SRCosRej > cosrej
const Var kSlcMinY([](const caf::SRProxy *sr){return sr->slc.boxmin.Y()/100.;})
caf::Proxy< unsigned int > lastcell
const Var kTrueE([](const caf::SRProxy *sr){assert(sr->mc.nnu==1);return sr->mc.nu[0].E;})
caf::Proxy< unsigned int > nhit
const Var kRatOfKalHi([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-10.0f;return(float)((float) sr->trk.kalman.tracks[0].nhit/(float) sr->slc.nhit);})
caf::Proxy< float > scatt
caf::Proxy< caf::SRTrackBranch > trk
const Var kTrkStartZ([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-10.0f;return sr->trk.kalman.tracks[0].start.Z()/100;})
TGraphAsymmErrors * GraphWithPoissonErrors2(const TH1 *h, const TH1 *h2, bool noErrorsXaxis, bool drawEmptyBins)
Same as above but use a reference histogram to determine which empty bins to draw.
int PeriodFromHeader(const caf::SRHeaderProxy &hdr)
const Var kTrkStartX([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-10.0f;return sr->trk.kalman.tracks[0].start.X()/100;})
const Var kTrkEndZ([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-10.0f;return sr->trk.kalman.tracks[0].stop.Z()/100;})
const Var kTrkLenXY([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-10.0f;float XLen=(sr->trk.kalman.tracks[0].start.X()-sr->trk.kalman.tracks[0].stop.X())/100;float YLen=(sr->trk.kalman.tracks[0].start.Y()-sr->trk.kalman.tracks[0].stop.Y())/100;return XLen-YLen;})
caf::Proxy< int > kalbakcell
caf::Proxy< int > kalfwdcell
caf::Proxy< caf::SRKalman > kalman
const Var kKalBakCell([](const caf::SRProxy *sr){return sr->sel.contain.kalbakcell;})
caf::Proxy< caf::SRSlice > slc
const Var kTrkEndY([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-10.0f;return sr->trk.kalman.tracks[0].stop.Y()/100;})
const Var kTrkEndX([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-10.0f;return sr->trk.kalman.tracks[0].stop.X()/100;})
const Var kTrueMuonE([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return 0.f;if(sr->mc.nu[0].prim.empty()) return 0.f;if(std::abs(sr->mc.nu[0].prim[0].pdg)!=13) return 0.f;return float(sr->mc.nu[0].prim[0].p.E);})
const Binning kNumuCCEOptimisedBinning
Optimised binning for numuCCE from L. Vinton. See docdb 16332. This was close to 'custC' in that talk...
Standard interface to all prediction techniques.
const Var kMaxKalZPos([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-10.0f;return std::max(sr->trk.kalman.tracks[0].start.Z()/100, sr->trk.kalman.tracks[0].stop.Z()/100);})
caf::Proxy< std::vector< caf::SRKalmanTrack > > tracks
caf::Proxy< caf::SRIDBranch > sel
T min(const caf::Proxy< T > &a, T b)
static Binning Simple(int n, double lo, double hi, const std::vector< std::string > &labels={})
const Var kCosNumi([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks > 0 &&sr->trk.kalman.idxremid!=999){if(sr->hdr.det==1){return sr->trk.kalman.tracks[0].dir.Dot(beamDirND);}if(sr->hdr.det==2){return sr->trk.kalman.tracks[0].dir.Dot(beamDirFD);}}return-5.f;})
unsigned int PeriodFromRunND(int run)
: Helper function to compute the period given a run number for the ND.
const Var kSlcMinZ([](const caf::SRProxy *sr){return sr->slc.boxmin.Z()/100.;})
const Var kTrkNhits([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return 65535;return int(sr->trk.kalman.tracks[0].nhit);})