1 #ifndef NeutrinoShowerEff_Module 2 #define NeutrinoShowerEff_Module 34 #include "TDirectory.h" 36 #include "TEfficiency.h" 37 #include "TGraphAsymmErrors.h" 39 #define MAX_SHOWERS 1000 60 void processEff(
const art::Event& evt,
bool &isFiducial);
63 bool insideFV(
double vertex[4]);
64 void doEfficiencies();
113 TEfficiency* h_Eff_Ev = 0;
114 TEfficiency* h_Eff_Ev_dEdx = 0;
115 TEfficiency* h_Eff_Ee = 0;
116 TEfficiency* h_Eff_Ee_dEdx = 0;
117 TEfficiency* h_Eff_Pe = 0;
118 TEfficiency* h_Eff_theta = 0;
218 double MC_incoming_P[4];
219 double MC_lepton_startMomentum[4];
220 double MC_lepton_endMomentum[4];
221 double MC_lepton_startXYZT[4];
222 double MC_lepton_endXYZT[4];
275 : EDAnalyzer(parameterSet)
304 cout<<
"job begin..."<<endl;
307 auto const*
geo = lar::providerFrom<geo::Geometry>();
316 for (
size_t i = 0; i<
geo->NTPC(); ++i){
317 double local[3] = {0.,0.,0.};
318 double world[3] = {0.,0.,0.};
321 if (minx>world[0]-
geo->DetHalfWidth(i))
322 minx = world[0]-
geo->DetHalfWidth(i);
323 if (maxx<world[0]+
geo->DetHalfWidth(i))
324 maxx = world[0]+
geo->DetHalfWidth(i);
325 if (miny>world[1]-
geo->DetHalfHeight(i))
326 miny = world[1]-
geo->DetHalfHeight(i);
327 if (maxy<world[1]+
geo->DetHalfHeight(i))
328 maxy = world[1]+
geo->DetHalfHeight(i);
329 if (minz>world[2]-
geo->DetLength(i)/2.)
330 minz = world[2]-
geo->DetLength(i)/2.;
331 if (maxz<world[2]+
geo->DetLength(i)/2.)
332 maxz = world[2]+
geo->DetLength(i)/2.;
342 std::cout<<
"Fiducial volume:"<<
"\n" 350 double E_bins[21] ={0,0.5,1.0,1.5,2.0,2.5,3.0,3.5,4,4.5,5.0,5.5,6.0,7.0,8.0,10.0,12.0,14.0,17.0,20.0,25.0};
351 double theta_bin[44]= { 0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,22.,24.,26.,28.,30.,32.,34.,36.,38.,40.,42.,44.,46.,48.,50.,55.,60.,65.,70.,75.,80.,85.,90.};
355 h_Ev_den = tfs->
make<TH1D>(
"h_Ev_den",
"Neutrino Energy; Neutrino Energy (GeV); Shower Reconstruction Efficiency",20,E_bins);
357 h_Ev_num = tfs->
make<TH1D>(
"h_Ev_num",
"Neutrino Energy; Neutrino Energy (GeV); Shower Reconstruction Efficiency",20,E_bins);
359 h_Ev_num_dEdx = tfs->
make<TH1D>(
"h_Ev_num_dEdx",
"Neutrino Energy; Neutrino Energy (GeV); Shower Reconstruction Efficiency",20,E_bins);
362 h_Ee_den = tfs->
make<TH1D>(
"h_Ee_den",
"Electron Energy; Electron Energy (GeV); Shower Reconstruction Efficiency",20,E_bins);
364 h_Ee_num = tfs->
make<TH1D>(
"h_Ee_num",
"Electron Energy; Electron Energy (GeV); Shower Reconstruction Efficiency",20,E_bins);
366 h_Ee_num_dEdx = tfs->
make<TH1D>(
"h_Ee_num_dEdx",
"Electron Energy; Electron Energy (GeV); Shower Reconstruction Efficiency",20,E_bins);
369 h_Pe_den = tfs->
make<TH1D>(
"h_Pe_den",
"Electron Momentum; Electron Momentum (GeV); Shower reconstruction Efficiency",20,E_bins);
371 h_Pe_num = tfs->
make<TH1D>(
"h_Pe_num",
"Electron Momentum; Electron Momentum (GeV); Shower reconstruction Efficiency",20,E_bins);
374 h_theta_den = tfs->
make<TH1D>(
"h_theta_den",
"CosTheta; CosTheta w.r.t beam direction (Degrees); Shower reconstruction Efficiency",43,theta_bin);
376 h_theta_num = tfs->
make<TH1D>(
"h_theta_num",
"CosTheta; CosTheta w.r.t beam direction (Degrees); Shower reconstruction Efficiency",43,theta_bin);
381 h_Efrac_shPurity = tfs->
make<TH1D>(
"h_Efrac_shPurity",
"Efrac Lepton; Energy fraction (Purity);",60,0,1.2);
383 h_Ecomplet_lepton = tfs->
make<TH1D>(
"h_Ecomplet_lepton",
"Ecomplet Lepton; Shower Completeness;",60,0,1.2);
394 h_Ecomplet_NueCC= tfs->
make<TH1D>(
"h_Ecomplet_NueCC",
"Ecomplet NueCC; Shower Completeness;",60,0,1.2);
398 h_Efrac_bkgPurity= tfs->
make<TH1D>(
"h_Efrac_bkgPurity",
"Efrac bkg; Energy fraction (Purity);",60,0,1.2);
400 h_Ecomplet_bkg= tfs->
make<TH1D>(
"h_Ecomplet_bkg",
"Ecomplet bkg; Shower Completeness;",60,0,1.2);
410 h_dEdX_photon_NC=tfs->
make<TH1D>(
"h_dEdX_photon_NC",
"dE/dX; photon dE/dX (MeV/cm);",100,0.0,15.0);
412 h_dEdX_proton_NC=tfs->
make<TH1D>(
"h_dEdX_proton_NC",
"dE/dX; proton dE/dX (MeV/cm);",100,0.0,15.0);
414 h_dEdX_neutron_NC=tfs->
make<TH1D>(
"h_dEdX_neutron_NC",
"dE/dX; neutron dE/dX (MeV/cm);",100,0.0,15.0);
426 h_mpi0_photon_NC=tfs->
make<TH1D>(
"h_mpi0_photon_NC",
"m(#gamma#gamma); Electron or Positron dE/dX (MeV/cm);",100,0,1);
449 h_mpi0_photon_NC->Sumw2();
451 h_trklike_em = tfs->
make<TH1D>(
"h_trklike_em",
"EM hits; Track-like Score;",100,0,1);
452 h_trklike_nonem = tfs->
make<TH1D>(
"h_trklike_nonem",
"Non-EM hits; Track-like Score;",100,0,1);
515 h_CosThetaShDirwrtTrueparticle_electronorpositron_NueCC->Sumw2();
574 fEventTree =
new TTree(
"Event",
"Event Tree from Sim & Reco");
625 mf::LogInfo(
"NeutrinoShowerEff")<<
"begin run..."<<endl;
632 Event =
event.id().event();
635 bool isFiducial =
false;
647 std::vector<art::Ptr<simb::MCTruth>> MCtruthlist;
652 int MCinteractions = MCtruthlist.size();
653 for(
int i =0; i<MCinteractions; i++){
654 MCtruth = MCtruthlist[i];
665 const TLorentzVector& nu_momentum = nu.
Nu().
Momentum(0);
682 particle = ipar->second;
684 const TLorentzVector& lepton_momentum =particle->
Momentum(0);
685 const TLorentzVector& lepton_position =particle->
Position(0);
686 const TLorentzVector& lepton_positionEnd = particle->
EndPosition();
687 const TLorentzVector& lepton_momentumEnd = particle->
EndMomentum();
698 if( !isFiducial )
return;
702 theta_e *= (180.0/3.14159);
708 h_Ee_den->Fill(MC_lepton_startMomentum[3]);
724 std::vector<art::Ptr<recob::Shower>> showerlist;
728 std::vector<art::Ptr<recob::Hit>> all_hits;
737 double Efrac_contamination= 999.0;
738 double Efrac_contaminationNueCC= 999.0;
740 double Ecomplet_lepton =0.0;
741 double Ecomplet_NueCC =0.0;
742 int ParticlePDG_HighestShHits=0;
743 int shower_bestplane=0;
744 double Showerparticlededx_inbestplane=0.0;
745 double dEdxasymm_largestshw = -1.;
747 int showerPDGwithHighestHitsforFillingdEdX=0;
750 double ShAngle=-9999.0,ShVxTrueParticleVxDiff=-9999.0,ShVyTrueParticleVyDiff=-9999.0,ShVzTrueParticleVzDiff=-9999.0, ShStartVxTrueParticleEndVxDiff=-9999.0,ShStartVyTrueParticleEndVyDiff=-9999.0,ShStartVzTrueParticleEndVzDiff=-9999.0;
772 for(
size_t j =0; j<shower->
dEdx().size(); j++)
sh_dEdx[i][j] = shower->
dEdx()[j];
774 double dEdxasymm = -1;
781 for (
int j = 0; j<3; ++j){
783 if (j>=
int(shower->
Energy().size()))
continue;
785 maxE = shower->
Energy()[j];
786 dEdx1 = shower->
dEdx()[j];
790 dEdxasymm = std::abs(dEdx0-dEdx1)/(dEdx0+dEdx1);
815 std::vector<art::Ptr<recob::Hit>> sh_hits = sh_hitsAll.at(i);
817 if (!sh_hits.size()){
821 std::vector<art::Ptr<recob::PFParticle> > pfps;
826 std::vector<art::Ptr<recob::Cluster> > clusters;
833 std::vector<art::Ptr<recob::PFParticle>> pfs = fmps.at(i);
834 for (
size_t ipf = 0; ipf<pfs.size(); ++ipf){
836 std::vector<art::Ptr<recob::Cluster>> clus = fmcp.at(pfs[ipf].key());
837 for (
size_t iclu = 0; iclu<clus.size(); ++iclu){
839 std::vector<art::Ptr<recob::Hit>>
hits = fmhc.at(clus[iclu].key());
840 for (
size_t ihit = 0; ihit<hits.size(); ++ihit){
841 sh_hits.push_back(hits[ihit]);
853 double tmpEfrac_contamination = 0.0;
854 double tmpEcomplet =0;
856 int tmp_nHits = sh_hits.size();
859 truthMatcher( all_hits, sh_hits, particle, tmpEfrac_contamination,tmpEcomplet);
861 if (!particle)
continue;
864 sh_purity[i] = 1 - tmpEfrac_contamination;
871 if( tmp_nHits > nHits ){
873 dEdxasymm_largestshw = dEdxasymm;
875 Ecomplet_NueCC =tmpEcomplet;
876 Efrac_contaminationNueCC = tmpEfrac_contamination;
887 if (ShVxTrueParticleVxDiff > 5) ShVxTrueParticleVxDiff = 4.99;
888 else if (ShVxTrueParticleVxDiff < -5) ShVxTrueParticleVxDiff = -5;
889 if (ShVyTrueParticleVyDiff > 5) ShVyTrueParticleVyDiff = 4.99;
890 else if (ShVyTrueParticleVyDiff < -5) ShVyTrueParticleVyDiff = -5;
891 if (ShVzTrueParticleVzDiff > 5) ShVzTrueParticleVzDiff = 4.99;
892 else if (ShVzTrueParticleVzDiff < -5) ShVzTrueParticleVzDiff = -5;
900 if(std::abs(particle->
PdgCode())==11){
901 ParticlePDG_HighestShHits=1;
902 }
else if(particle->
PdgCode()==22){
903 ParticlePDG_HighestShHits=2;
905 ParticlePDG_HighestShHits=3;
913 if (shower_bestplane<0 || shower_bestplane>=
int(shower->
dEdx().size())){
915 for (
size_t i = 0; i<shower->
dEdx().size(); ++i){
916 if (shower->
dEdx()[i]){
917 shower_bestplane = i;
922 if (shower_bestplane<0 || shower_bestplane>=
int(shower->
dEdx().size())){
924 shower_bestplane = 0;
927 if (shower_bestplane>=0 and shower_bestplane<
int(shower->
dEdx().size()))
928 Showerparticlededx_inbestplane=shower->
dEdx()[shower_bestplane];
930 if(std::abs(particle->
PdgCode())==11){
931 showerPDGwithHighestHitsforFillingdEdX=1;
932 }
else if(particle->
PdgCode()==22){
933 showerPDGwithHighestHitsforFillingdEdX=2;
934 }
else if(particle->
PdgCode()==2212){
935 showerPDGwithHighestHitsforFillingdEdX=3;
936 }
else if(particle->
PdgCode()==2112){
937 showerPDGwithHighestHitsforFillingdEdX=4;
938 }
else if(std::abs(particle->
PdgCode())==211){
939 showerPDGwithHighestHitsforFillingdEdX=5;
940 }
else if(particle->
PdgCode()==111){
941 showerPDGwithHighestHitsforFillingdEdX=6;
943 showerPDGwithHighestHitsforFillingdEdX=7;
961 if(tmpEcomplet>Ecomplet_lepton){
963 Ecomplet_lepton = tmpEcomplet;
965 Efrac_contamination = tmpEfrac_contamination;
966 MClepton_reco = particle;
973 if (p1.Mag()&&p2.Mag()){
974 sh_mpi0 = sqrt(pow(p1.Mag()+p2.Mag(),2)-(p1+p2).Mag2());
978 if( MClepton_reco && MClepton ){
989 h_Ee_num->Fill(MC_lepton_startMomentum[3]);
992 if (Showerparticlededx_inbestplane > 1 && Showerparticlededx_inbestplane < 3) {
1006 if(ParticlePDG_HighestShHits>0){
1011 if(showerPDGwithHighestHitsforFillingdEdX==1)
1026 }
else if(showerPDGwithHighestHitsforFillingdEdX==2)
1041 }
else if(showerPDGwithHighestHitsforFillingdEdX==3)
1051 }
else if(showerPDGwithHighestHitsforFillingdEdX==4)
1055 }
else if(showerPDGwithHighestHitsforFillingdEdX==5)
1063 }
else if(showerPDGwithHighestHitsforFillingdEdX==6)
1066 }
else if(showerPDGwithHighestHitsforFillingdEdX==7)
1077 if(ParticlePDG_HighestShHits>0){
1083 if(showerPDGwithHighestHitsforFillingdEdX==1)
1094 }
else if(showerPDGwithHighestHitsforFillingdEdX==2)
1112 }
else if(showerPDGwithHighestHitsforFillingdEdX==3)
1124 }
else if(showerPDGwithHighestHitsforFillingdEdX==4)
1127 }
else if(showerPDGwithHighestHitsforFillingdEdX==5)
1136 }
else if(showerPDGwithHighestHitsforFillingdEdX==6)
1139 }
else if(showerPDGwithHighestHitsforFillingdEdX==7)
1146 checkCNNtrkshw<4>(event, all_hits);
1158 std::map<int,double> trkID_E;
1159 for(
size_t j = 0; j < shower_hits.size(); ++j){
1164 for(
size_t k = 0; k < TrackIDs.size(); k++){
1165 if (trkID_E.find(std::abs(TrackIDs[k].trackID))==trkID_E.end()) trkID_E[std::abs(TrackIDs[k].trackID)] = 0;
1166 trkID_E[std::abs(TrackIDs[k].trackID)] += TrackIDs[k].energy;
1169 double max_E = -999.0;
1170 double total_E = 0.0;
1172 double partial_E=0.0;
1174 if( !trkID_E.size() )
return;
1176 total_E += ii->second;
1177 if((ii->second)>max_E){
1178 partial_E = ii->second;
1180 TrackID = ii->first;
1193 Efrac = 1-(partial_E/total_E);
1196 double totenergy =0;
1197 for(
size_t k = 0; k < all_hits.size(); ++k){
1200 for(
size_t l = 0; l < TrackIDs.size(); ++l){
1201 if(std::abs(TrackIDs[l].trackID)==
TrackID) {
1202 totenergy += TrackIDs[l].energy;
1206 Ecomplet = partial_E/totenergy;
1214 double x = vertex[0];
1215 double y = vertex[1];
1216 double z = vertex[2];
1241 TGraphAsymmErrors *grEff_Ev =
h_Eff_Ev->CreateGraph();
1242 grEff_Ev->Write(
"grEff_Ev");
1248 TGraphAsymmErrors *grEff_Ev_dEdx =
h_Eff_Ev_dEdx->CreateGraph();
1249 grEff_Ev_dEdx->Write(
"grEff_Ev_dEdx");
1255 TGraphAsymmErrors *grEff_Ee =
h_Eff_Ee->CreateGraph();
1256 grEff_Ee->Write(
"grEff_Ee");
1262 TGraphAsymmErrors *grEff_Ee_dEdx =
h_Eff_Ee_dEdx->CreateGraph();
1263 grEff_Ee_dEdx->Write(
"grEff_Ee_dEdx");
1269 TGraphAsymmErrors *grEff_Pe =
h_Eff_Pe->CreateGraph();
1270 grEff_Pe->Write(
"grEff_Pe");
1275 TGraphAsymmErrors *grEff_theta =
h_Eff_theta->CreateGraph();
1276 grEff_theta->Write(
"grEff_theta");
1294 int trkLikeIdx = hitResults->getIndex(
"track");
1295 int emLikeIdx = hitResults->getIndex(
"em");
1296 if ((trkLikeIdx < 0) || (emLikeIdx < 0)){
1297 throw cet::exception(
"NeutrinoShowerEff") <<
"No em/track labeled columns in MVA data products." << std::endl;
1300 for (
size_t i = 0; i<all_hits.size(); ++i){
1302 bool isEMparticle =
false;
1305 if (!TrackIDs.size())
continue;
1315 int trkid = INT_MAX;
1317 for(
size_t k = 0; k < TrackIDs.size(); k++){
1318 if (TrackIDs[k].
energy>maxE){
1319 maxE = TrackIDs[k].energy;
1320 trkid = TrackIDs[k].trackID;
1323 if (trkid!=INT_MAX){
1327 if (std::abs(pdg)==11||
1330 isEMparticle =
true;
1334 auto vout = hitResults->getOutput(all_hits[i]);
1336 double trk_like = -1, trk_or_em = vout[trkLikeIdx] + vout[emLikeIdx];
1338 trk_like = vout[trkLikeIdx] / trk_or_em;
1354 std::cout<<
"Couldn't get hitResults."<<std::endl;
1387 for(
int j=0; j<3; j++){
1403 #endif // NeutrinoShowerEff_Module
Store parameters for running LArG4.
const simb::MCParticle * TrackIdToParticle_P(int const &id)
double sh_length[MAX_SHOWERS]
TH1D * h_ShStartXwrtTrueparticleStartXDiff_electronorpositron_NC
const TVector3 & ShowerStart() const
const TLorentzVector & Position(const int i=0) const
const simb::MCNeutrino & GetNeutrino() const
TH1D * h_CosThetaShDirwrtTrueparticle_photon_NC
TH1D * h_ShStartZwrtTrueparticleStartZDiff_proton_NueCC
TH1D * h_ShStartXwrtTrueparticleEndXDiff_photon_NC
double Py(const int i=0) const
double sh_energy[MAX_SHOWERS][3]
TH1D * h_dEdX_electronorpositron_NueCC
const TLorentzVector & EndPosition() const
TH1D * h_ShStartXwrtTrueparticleStartXDiff_chargedpion_NC
void truthMatcher(std::vector< art::Ptr< recob::Hit >>all_hits, std::vector< art::Ptr< recob::Hit >> shower_hits, const simb::MCParticle *&MCparticle, double &Efrac, double &Ecomplet)
TH1D * h_ShStartYwrtTrueparticleEndYDiff_photon_NC
double sh_direction_X[MAX_SHOWERS]
TH1D * h_dEdX_everythingelse_NC
MaybeLogger_< ELseverityLevel::ELsev_info, false > LogInfo
std::vector< TrackID > TrackIDs
void analyze(const art::Event &evt)
TH1D * h_dEdX_neutron_NueCC
TH1D * h_CosThetaShDirwrtTrueparticle_proton_NC
const simb::MCParticle & Nu() const
TH1D * h_ShStartYwrtTrueparticleStartYDiff_electronorpositron_NC
list_type::const_iterator const_iterator
Geometry information for a single TPC.
const std::vector< double > & Energy() const
TH1D * h_HighestHitsProducedParticlePDG_NueCC
double Px(const int i=0) const
double sh_dEdx[MAX_SHOWERS][3]
art::InputTag fMCTruthModuleLabel
TH1D * h_ShStartZwrtTrueparticleEndZDiff_photon_NueCC
TH1D * h_dEdXasymm_photon_NC
TH1D * h_ShStartXwrtTrueparticleStartXDiff_chargedpion_NueCC
TH1D * h_ShStartZwrtTrueparticleStartZDiff_chargedpion_NC
void beginRun(const art::Run &run)
MaybeLogger_< ELseverityLevel::ELsev_error, false > LogError
TH1D * h_ShStartXwrtTrueparticleStartXDiff_electronorpositron_NueCC
TH1D * h_mpi0_electronorpositron_NueCC
void processEff(const art::Event &evt, bool &isFiducial)
TH1D * h_CosThetaShDirwrtTrueparticle_electronorpositron_NC
TH1D * h_ShStartXwrtTrueparticleStartXDiff_proton_NC
TH1D * h_ShStartXwrtTrueparticleStartXDiff_photon_NueCC
TH1D * h_CosThetaShDirwrtTrueparticle_photon_NueCC
TH1D * h_ShStartYwrtTrueparticleStartYDiff_electronorpositron_NueCC
TH1D * h_ShStartYwrtTrueparticleStartYDiff_proton_NueCC
TEfficiency * h_Eff_Ev_dEdx
auto vector(Vector const &v)
Returns a manipulator which will print the specified array.
int InteractionType() const
TH1D * h_ShStartZwrtTrueparticleStartZDiff_chargedpion_NueCC
TH1D * h_dEdX_chargedpion_NueCC
const simb::MCParticle & Lepton() const
TH1D * h_ShStartYwrtTrueparticleEndYDiff_photon_NueCC
const std::vector< double > & dEdx() const
#define DEFINE_ART_MODULE(klass)
Provides recob::Track data product.
const std::vector< double > & MIPEnergy() const
TH1D * h_ShStartZwrtTrueparticleStartZDiff_photon_NC
double sh_purity[MAX_SHOWERS]
TH1D * h_ShStartZwrtTrueparticleStartZDiff_proton_NC
double sh_completeness[MAX_SHOWERS]
art::InputTag fShowerModuleLabel
double P(const int i=0) const
T get(std::string const &key) const
art::InputTag fHitModuleLabel
int sh_bestplane[MAX_SHOWERS]
int sh_hasPrimary_e[MAX_SHOWERS]
double sh_dEdxasymm[MAX_SHOWERS]
art::ServiceHandle< geo::Geometry > geom
double sh_direction_Z[MAX_SHOWERS]
TH1D * h_esh_bestplane_NC
double sh_start_Y[MAX_SHOWERS]
TEfficiency * h_Eff_Ee_dEdx
bool insideFV(double vertex[4])
double sh_direction_Y[MAX_SHOWERS]
const TVector3 & Direction() const
double sh_start_X[MAX_SHOWERS]
TH1D * h_CosThetaShDirwrtTrueparticle_proton_NueCC
TH1D * h_ShStartYwrtTrueparticleStartYDiff_photon_NueCC
Declaration of cluster object.
TH1D * h_ShStartZwrtTrueparticleStartZDiff_photon_NueCC
TH1D * h_CosThetaShDirwrtTrueparticle_chargedpion_NC
void checkCNNtrkshw(const art::Event &evt, std::vector< art::Ptr< recob::Hit >>all_hits)
Definition of data types for geometry description.
TH1D * h_ShStartYwrtTrueparticleStartYDiff_chargedpion_NC
TH1D * h_CosThetaShDirwrtTrueparticle_chargedpion_NueCC
Detector simulation of raw signals on wires.
double sh_start_Z[MAX_SHOWERS]
double MC_lepton_endMomentum[4]
TH1D * h_dEdX_neutralpion_NueCC
TH1D * h_ShStartZwrtTrueparticleStartZDiff_electronorpositron_NueCC
TH1D * h_dEdX_neutralpion_NC
TH1D * h_Efrac_NueCCPurity
double Vx(const int i=0) const
double MC_lepton_startMomentum[4]
void reconfigure(fhicl::ParameterSet const &pset)
T * make(ARGS...args) const
TH1D * h_ShStartXwrtTrueparticleEndXDiff_photon_NueCC
TH1D * h_HighestHitsProducedParticlePDG_bkg
TH1D * h_ShStartYwrtTrueparticleStartYDiff_chargedpion_NueCC
TH1D * h_dEdX_electronorpositron_NC
art::InputTag fCNNEMModuleLabel
const std::vector< sim::TrackIDE > HitToEveTrackIDEs(recob::Hit const &hit)
bool getByLabel(std::string const &label, std::string const &productInstanceName, Handle< PROD > &result) const
TH1D * h_ShStartXwrtTrueparticleStartXDiff_proton_NueCC
double MC_lepton_startXYZT[4]
TH1D * h_ShStartYwrtTrueparticleStartYDiff_proton_NC
const TLorentzVector & Momentum(const int i=0) const
double Pz(const int i=0) const
TH1D * h_dEdXasymm_electronorpositron_NueCC
double Vz(const int i=0) const
TH1D * h_esh_bestplane_NueCC
TH1D * h_dEdX_chargedpion_NC
const sim::ParticleList & ParticleList()
TH1D * h_dEdX_proton_NueCC
void fill_ptr_vector(std::vector< Ptr< T >> &ptrs, H const &h)
TH1D * h_ShStartXwrtTrueparticleStartXDiff_photon_NC
TH1D * h_ShStartYwrtTrueparticleStartYDiff_photon_NC
TH1D * h_Efrac_shContamination
double sh_Efrac_contamination[MAX_SHOWERS]
TH1D * h_ShStartZwrtTrueparticleStartZDiff_electronorpositron_NC
Event generator information.
Namespace collecting geometry-related classes utilities.
double sh_MIPenergy[MAX_SHOWERS][3]
TEfficiency * h_Eff_theta
TH1D * h_dEdX_photon_NueCC
TH1D * h_dEdX_everythingelse_NueCC
const TLorentzVector & EndMomentum() const
void LocalToWorld(const double *tpc, double *world) const
Transform point from local TPC frame to world frame.
static std::unique_ptr< MVAReader > create(const art::Event &evt, const art::InputTag &tag)
double Vy(const int i=0) const
cet::coded_exception< error, detail::translate > exception
TH1D * h_ShStartZwrtTrueparticleEndZDiff_photon_NC
Event finding and building.
TH1D * h_CosThetaShDirwrtTrueparticle_electronorpositron_NueCC
int sh_nHits[MAX_SHOWERS]
virtual ~NeutrinoShowerEff()
double MC_lepton_endXYZT[4]