File indexing completed on 2026-11-04 09:11:23
0001 #include "RICHIRT.h"
0002 #include <stdexcept>
0003
0004 RICHIRT::RICHIRT(){
0005 std::cout<<"RICH IRT Called\n"<<std::endl;
0006 }
0007
0008 void RICHIRT::SetCollections(){
0009 m_IrtRadiatorInfo = get_irtRICH()+"IrtRadiatorInfo";
0010 m_IrtParticleCollection = get_irtRICH()+"IrtParticles";
0011 m_Tracks = get_irtRICH()+"Tracks";
0012 m_MCParticles = "MCParticles";
0013 m_CentralCKFTracks="CentralCKFTracks";
0014 }
0015
0016 void RICHIRT::Process(){
0017 auto reader = podio::makeReader(get_inFile());
0018 std::cout << "Events in file: " << reader.getEvents() << std::endl;
0019
0020 std::vector<int> mc_truth;
0021 for (size_t evt = 0; evt <reader.getEvents(); ++evt) {
0022 auto frame = reader.readEvent(evt);
0023
0024
0025 const auto& mcParts = frame.get<edm4hep::MCParticleCollection>(m_MCParticles);
0026
0027 const auto& irtRads = frame.get<edm4eic::IrtRadiatorInfoCollection>(m_IrtRadiatorInfo);
0028 const auto& irtParts = frame.get<edm4eic::IrtParticleCollection>(m_IrtParticleCollection);
0029 const auto& tracks = frame.get<edm4eic::TrackSegmentCollection>(m_Tracks);
0030
0031 const auto& cCKFTracks=frame.get<edm4eic::TrackCollection>(m_CentralCKFTracks);
0032
0033 for(auto mcpart: mcParts){
0034 if(mcpart.getGeneratorStatus()!=1) continue;
0035 mc_truth.push_back(PDGToBin(mcpart.getPDG()));
0036 }
0037
0038 TVector3 p3;
0039 for(auto trs: tracks){
0040
0041 auto tr = trs.getTrack();
0042 if(tr.isAvailable()){
0043 auto p = tr.getMomentum();
0044 p3 = TVector3 (p.x,p.y,p.z);
0045 m_RICH_Mom->Fill(p3.Mag());
0046 m_RICH_Eta->Fill(p3.PseudoRapidity());
0047
0048 }else std::cerr<<"DEBUG No Track "<<std::endl;
0049 }
0050 int idx =0;
0051
0052 for(auto part: irtParts){
0053 int recPDG = part.getPDG();
0054 int recNp = part.getNpe();
0055
0056
0057 int rec = PDGToBin(part.getPDG());
0058 int truth = mc_truth.at(idx); idx++;
0059 FillConfusion(rec,truth);
0060
0061
0062
0063 if(m_Rad_Npe.size()!= part.getRadiators().size()){
0064 throw std::runtime_error("Radiator size (" + std::to_string(part.getRadiators().size())
0065 + ") and histogram assignment (" + std::to_string(m_Rad_Npe.size())
0066 + ") mismatch");
0067 }
0068 for (const auto& rad : part.getRadiators()) {
0069 auto id = rad.id();
0070
0071 m_Rad_Theta[id.index]->Fill(rad.getAngle());
0072 m_Rad_Npe[id.index]->Fill(rad.getNpe());
0073 m_Rad_NHits[id.index]->Fill(rad.getNhits());
0074 m_Theta_Mom[id.index]->Fill(p3.Mag(),rad.getAngle());
0075
0076
0077 }
0078 }
0079 }
0080 BookHistos();
0081 }
0082 void RICHIRT::BookHistos(){
0083 m_OutRootFile->cd();
0084 m_RICH_Mom->Write();
0085 m_RICH_Eta->Write();
0086 for(auto& h: m_Rad_Theta) h->Write();
0087 for(auto& h: m_Rad_Npe) h->Write();
0088 for(auto& h: m_Rad_NHits) h->Write();
0089 for(auto& h: m_Theta_Mom) h->Write();
0090 BookConfusionMatrix();
0091 m_OutRootFile->Write();
0092 m_OutRootFile->Close();
0093
0094 }
0095 RICHIRT::~RICHIRT(){
0096 std::cout<<"RICH IRT Destroyed\n"<<std::endl;
0097 }