//////////////////////////////////////////////////////////////////////// // Class: RecoEfficiency // Plugin Type: analyzer (art v2_05_01) // File: RecoEfficiency_module.cc // // Generated at Tue Nov 13 10:31:21 2018 by Avinay Bhat using cetskelgen // from cetlib version v1_21_00. //////////////////////////////////////////////////////////////////////// #include #include #include #include #include using namespace std; #include "art/Framework/Core/EDAnalyzer.h" #include "art/Framework/Core/EDProducer.h" #include "art/Framework/Core/ModuleMacros.h" #include "art/Framework/Principal/Event.h" #include "art/Framework/Principal/Handle.h" #include "art/Framework/Principal/Run.h" #include "art/Framework/Principal/SubRun.h" #include "canvas/Utilities/InputTag.h" #include "canvas/Persistency/Common/FindMany.h" #include "canvas/Persistency/Common/FindManyP.h" #include "art/Persistency/Common/PtrMaker.h" #include "canvas/Persistency/Common/FindOne.h" //#include "canvas/Persistency/Common/Assns.h" #include "fhiclcpp/ParameterSet.h" #include "messagefacility/MessageLogger/MessageLogger.h" #include #include // Services #include "art/Framework/Services/Optional/TFileService.h" #include "larcore/Geometry/Geometry.h" //#include "larcore/Geometry/GeometryCore.h" #include "lardata/Utilities/GeometryUtilities.h" #include "lardata/DetectorInfoServices/DetectorPropertiesService.h" #include "lardataobj/MCBase/MCTrack.h" #include "lardataobj/RecoBase/Cluster.h" #include "lardataobj/RecoBase/Hit.h" #include "lardata/Utilities/AssociationUtil.h" #include "lardataobj/RecoBase/Track.h" #include "lardataobj/AnalysisBase/BackTrackerMatchingData.h" #include "lardataobj/AnalysisBase/Calorimetry.h" #include "nusimdata/SimulationBase/MCParticle.h" #include "nusimdata/SimulationBase/MCTruth.h" #include "nusimdata/SimulationBase/MCFlux.h" #include "lardataobj/RecoBase/Vertex.h" // ROOT #include "TInterpreter.h" #include "TROOT.h" #include "TH1F.h" #include "TH2D.h" #include "TH1D.h" #include "TFile.h" #include "TCanvas.h" #include "TStyle.h" #include "TStopwatch.h" #include "TTree.h" #include "TBranch.h" #include "TVector3.h" #include "TGraph.h" #include "TStopwatch.h" class RecoEfficiency; class RecoEfficiency : public art::EDAnalyzer { public: explicit RecoEfficiency(fhicl::ParameterSet const & p); // The compiler-generated destructor is fine for non-base // classes without bare pointers or other resource use. // Plugins should not be copied or assigned. RecoEfficiency(RecoEfficiency const &) = delete; RecoEfficiency(RecoEfficiency &&) = delete; RecoEfficiency & operator = (RecoEfficiency const &) = delete; RecoEfficiency & operator = (RecoEfficiency &&) = delete; // Required functions. void analyze(art::Event const & e) override; // Selected optional functions. void beginJob() override; void endJob() override; private: // Declare member data here. Int_t fEvent; std::string fMC_track_tag,fReco_track_tag,fHit_tag,fMatch_tag; Int_t pdg=0; Double_t MC_Track_StartX_det=0.0; Double_t MC_Track_StartY_det=0.0; Double_t MC_Track_StartZ_det=0.0; Double_t MC_Track_EndX_det=0.0; Double_t MC_Track_EndY_det=0.0; Double_t MC_Track_EndZ_det=0.0; Double_t MC_Track_Length=0.0; Double_t XZangle=0.0; Double_t Yangle=0.0; Double_t MC_Particle_Energy=0; Double_t Reco_Track_StartX=0.0; Double_t Reco_Track_StartY=0.0; Double_t Reco_Track_StartZ=0.0; Double_t Reco_Track_EndX=0.0; Double_t Reco_Track_EndY=0.0; Double_t Reco_Track_EndZ=0.0; Double_t Reco_Track_Length=0.0; Double_t Reco_Track_StartX_match=0.0; Double_t Reco_Track_StartY_match=0.0; Double_t Reco_Track_StartZ_match=0.0; Double_t Reco_Track_EndX_match=0.0; Double_t Reco_Track_EndY_match=0.0; Double_t Reco_Track_EndZ_match=0.0; Double_t Reco_Track_Length_match=0.0; Double_t ratio_largest; Int_t recotrackcounter_largestratio; // art::ServiceHandle tfs; // TTree *Tracktree = new TTree("Tracktree","Tracktree"); // TTree *Matchtree = new TTree("Matchtree","Matchtree"); TTree *RecoTracktree; TTree *Matchtree; }; RecoEfficiency::RecoEfficiency(fhicl::ParameterSet const & p) : EDAnalyzer(p) // , // More initializers here. { fMC_track_tag = p.get("mctrack_tag"); fReco_track_tag = p.get("recotrack_tag"); fHit_tag = p.get("hit_tag"); fMatch_tag = p.get("match_tag"); } void RecoEfficiency::analyze(art::Event const & e) { fEvent= e.id().event(); // Implementation of required member function here. art::Handle > mctrack_handle; e.getByLabel(fMC_track_tag,mctrack_handle); if (!mctrack_handle.isValid()) return; art::Handle > recotrack_handle; e.getByLabel(fReco_track_tag,recotrack_handle); art::Handle > hit_handle; e.getByLabel(fHit_tag,hit_handle); art::FindManyP track_hit_assn_v(recotrack_handle, e, fReco_track_tag); art::FindMany backtrack_handle(hit_handle,e,fMatch_tag); // cout <<"Event: "<size()==0) {cout<<"*************ZERO RECO TRACKS FOUND"< > hit_v = track_hit_assn_v.at(i_t); Double_t hitcounter=0.0; Double_t backtrackedhitcounter=0.0; Double_t ratio=0.0; for (art::Ptr hit : hit_v){//START HIT FOR LOOP hitcounter++; auto hitidx = hit.key(); std::vector particle_vec; std::vector match_vec; backtrack_handle.get(hitidx, particle_vec, match_vec); for(size_t i_p=0; i_pPdgCode(); auto mcparticleid = particle_vec.at(i_p)->TrackId(); MC_Particle_Energy= particle_vec.at(i_p)->E(); if (abs(pdg_particle)!=13 || (int)mcparticleid!=(int)mctrackid || match_vec[i_p]->isMaxIDE!=1 ) continue; // cout<<"PARTICLE ID: "<ratio_largest){ recotrackcounter_largestratio=recotrackcounter; ratio_largest=ratio; Reco_Track_StartX_match=Reco_Track_StartX; Reco_Track_StartY_match=Reco_Track_StartY; Reco_Track_StartZ_match=Reco_Track_StartZ; Reco_Track_EndX_match=Reco_Track_EndX; Reco_Track_EndY_match=Reco_Track_EndY; Reco_Track_EndZ_match=Reco_Track_EndZ; Reco_Track_Length_match=Reco_Track_Length; // cout<<"**********************************ratio: "<Fill(); /* if (ratio_largest==0){ cout<<"MC TRACK # "<Integral(); cluster_charge += charge; cluster_energy += charge* 0.009558; }//END CLUSTER HIT LOOP */ }//END MCTRACK FOR LOOP for (size_t i_t = 0; i_t < recotrack_vec.size(); ++i_t) {//START RECOTRACK FOR LOOP //cout<<"RecoTrack Counter: "<Fill(); } } void RecoEfficiency::beginJob() { // get detector specific properties /* auto const* geom = ::lar::providerFrom(); auto const* detp = lar::providerFrom(); wire2cm = geom->WirePitch(0,1,0); time2cm = detp->SamplingRate() / 1000.0 * detp->DriftVelocity( detp->Efield(), detp->Temperature() ); art::ServiceHandle tfs; Matchtree->Branch("Z_reco",&Z_reco,"Z_reco/D"); Matchtree->Branch("X_reco",&X_reco,"X_reco/D"); // Matchtree->Branch("pointdistance_smallest",&pointdistance_smallest,"pointdistance_smallest/D"); Matchtree->Branch("distance_smallest",&distance_smallest,"distance_smallest/D"); */ art::ServiceHandle tfs; Matchtree = tfs->make("Matchtree", "Matchtree"); RecoTracktree = tfs->make("RecoTracktree", "RecoTracktree"); Matchtree->Branch("MC_Track_StartX_det",&MC_Track_StartX_det,"MC_Track_StartX_det/D"); Matchtree->Branch("MC_Track_StartY_det",&MC_Track_StartY_det,"MC_Track_StartY_det/D"); Matchtree->Branch("MC_Track_StartZ_det",&MC_Track_StartZ_det,"MC_Track_StartZ_det/D"); Matchtree->Branch("MC_Track_EndX_det",&MC_Track_EndX_det,"MC_Track_EndX_det/D"); Matchtree->Branch("MC_Track_EndY_det",&MC_Track_EndY_det,"MC_Track_EndY_det/D"); Matchtree->Branch("MC_Track_EndZ_det",&MC_Track_EndZ_det,"MC_Track_EndZ_det/D"); Matchtree->Branch("XZangle",&XZangle,"XZangle/D"); Matchtree->Branch("Yangle",&Yangle,"Yangle/D"); Matchtree->Branch("MC_Particle_Energy",&MC_Particle_Energy,"MC_Particle_Energy/D"); Matchtree->Branch("pdg",&pdg,"pdg/I"); Matchtree->Branch("Reco_Track_StartX_match",&Reco_Track_StartX_match,"Reco_Track_StartX_match/D"); Matchtree->Branch("Reco_Track_StartY_match",&Reco_Track_StartY_match,"Reco_Track_StartY_match/D"); Matchtree->Branch("Reco_Track_StartZ_match",&Reco_Track_StartZ_match,"Reco_Track_StartZ_match/D"); Matchtree->Branch("Reco_Track_EndX_match",&Reco_Track_EndX_match,"Reco_Track_EndX_match/D"); Matchtree->Branch("Reco_Track_EndY_match",&Reco_Track_EndY_match,"Reco_Track_EndY_match/D"); Matchtree->Branch("Reco_Track_EndZ_match",&Reco_Track_EndZ_match,"Reco_Track_EndZ_match/D"); Matchtree->Branch("Reco_Track_Length_match",&Reco_Track_Length_match,"Reco_Track_Length_match/D"); Matchtree->Branch("ratio_largest",&ratio_largest,"ratio_largest/D"); RecoTracktree->Branch("Reco_Track_StartX",&Reco_Track_StartX,"Reco_Track_StartX/D"); RecoTracktree->Branch("Reco_Track_StartY",&Reco_Track_StartY,"Reco_Track_StartY/D"); RecoTracktree->Branch("Reco_Track_StartZ",&Reco_Track_StartZ,"Reco_Track_StartZ/D"); RecoTracktree->Branch("Reco_Track_EndX",&Reco_Track_EndX,"Reco_Track_EndX/D"); RecoTracktree->Branch("Reco_Track_EndY",&Reco_Track_EndY,"Reco_Track_EndY/D"); RecoTracktree->Branch("Reco_Track_EndZ",&Reco_Track_EndZ,"Reco_Track_EndZ/D"); } void RecoEfficiency::endJob() { // Implementation of optional member function here. } DEFINE_ART_MODULE(RecoEfficiency)