.. _program_listing_file_Root_PhotonContainer.cxx: Program Listing for File PhotonContainer.cxx ============================================ |exhale_lsh| :ref:`Return to documentation for file ` (``Root/PhotonContainer.cxx``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #include "xAODAnaHelpers/PhotonContainer.h" #include using namespace xAH; using std::vector; using std::string; PhotonContainer::PhotonContainer(const std::string& name, const std::string& detailStr, float units, bool mc) : ParticleContainer(name, detailStr, units, mc, true) { if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "20") != m_infoSwitch.m_isoCones.end()){ m_ptcone20 = new std::vector (); m_ptvarcone20 = new std::vector (); m_topoetcone20 = new std::vector (); m_isIsolated_Cone20 = new std::vector (); } if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "30") != m_infoSwitch.m_isoCones.end()){ m_ptcone30 = new std::vector (); m_ptvarcone30 = new std::vector (); m_topoetcone30 = new std::vector (); } if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "40") != m_infoSwitch.m_isoCones.end()){ m_ptcone40 = new std::vector (); m_ptvarcone40 = new std::vector (); m_topoetcone40 = new std::vector (); m_isIsolated_Cone40CaloOnly = new std::vector (); m_isIsolated_Cone40 = new std::vector (); } // PID if(m_infoSwitch.m_PID){ m_n_IsLoose = 0; m_n_IsMedium = 0; m_n_IsTight = 0; m_IsLoose = new std::vector (); m_IsMedium = new std::vector (); m_IsTight = new std::vector (); } if(m_infoSwitch.m_purity){ //Purity m_radhad1 = new std::vector (); m_radhad = new std::vector (); m_e277 = new std::vector (); m_reta = new std::vector (); m_rphi = new std::vector (); m_weta2 = new std::vector (); m_f1 = new std::vector (); m_wtot = new std::vector (); m_deltae = new std::vector (); m_eratio = new std::vector (); //std::vector m_w1 } if(m_infoSwitch.m_effSF && m_mc){ m_LooseEffSF =new std::vector(); m_MediumEffSF=new std::vector(); m_TightEffSF =new std::vector(); m_LooseEffSF_Error =new std::vector(); m_MediumEffSF_Error=new std::vector(); m_TightEffSF_Error =new std::vector(); } if(m_infoSwitch.m_trigger){ m_trigMatched=new std::vector >(); } } PhotonContainer::~PhotonContainer() { if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "20") != m_infoSwitch.m_isoCones.end()){ delete m_ptcone20; delete m_ptvarcone20; delete m_topoetcone20; delete m_isIsolated_Cone20; } if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "30") != m_infoSwitch.m_isoCones.end()){ delete m_ptcone30; delete m_ptvarcone30; delete m_topoetcone30; } if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "40") != m_infoSwitch.m_isoCones.end()){ delete m_ptcone40; delete m_ptvarcone40; delete m_topoetcone40; delete m_isIsolated_Cone40; delete m_isIsolated_Cone40CaloOnly; } // PID if(m_infoSwitch.m_PID){ delete m_IsLoose; delete m_IsMedium; delete m_IsTight; } if(m_infoSwitch.m_purity){ delete m_radhad1; delete m_radhad ; delete m_e277 ; delete m_reta ; delete m_rphi ; delete m_weta2 ; delete m_f1 ; delete m_wtot ; delete m_deltae; delete m_eratio; //std::vector m_w1 } if(m_infoSwitch.m_effSF && m_mc){ delete m_LooseEffSF; delete m_MediumEffSF; delete m_TightEffSF; delete m_LooseEffSF_Error; delete m_MediumEffSF_Error; delete m_TightEffSF_Error; } if(m_infoSwitch.m_trigger){ delete m_trigMatched; } } void PhotonContainer::setTree(TTree *tree) { // // Connect branches ParticleContainer::setTree(tree); tree->SetBranchStatus ("nph" , 1); tree->SetBranchAddress ("nph" , &m_n); if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "20") != m_infoSwitch.m_isoCones.end()){ connectBranch(tree, "ptcone20", &m_ptcone20 ); connectBranch(tree, "ptvarcone20", &m_ptvarcone20 ); connectBranch(tree, "topoetcone20", &m_topoetcone20 ); connectBranch (tree, "isIsolated_Cone20", &m_isIsolated_Cone20 ); } if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "30") != m_infoSwitch.m_isoCones.end()){ connectBranch(tree, "ptcone30", &m_ptcone30 ); connectBranch(tree, "ptvarcone30", &m_ptvarcone30 ); connectBranch(tree, "topoetcone30", &m_topoetcone30 ); } if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "40") != m_infoSwitch.m_isoCones.end()){ connectBranch(tree, "ptcone40", &m_ptcone40 ); connectBranch(tree, "ptvarcone40", &m_ptvarcone40 ); connectBranch(tree, "topoetcone40", &m_topoetcone40 ); connectBranch (tree, "isIsolated_Cone40CaloOnly", &m_isIsolated_Cone40CaloOnly ); connectBranch (tree, "isIsolated_Cone40", &m_isIsolated_Cone40 ); } // PID if(m_infoSwitch.m_PID){ tree->SetBranchStatus (("n"+m_name+"_IsLoose").c_str(), 1); tree->SetBranchAddress(("n"+m_name+"_IsLoose").c_str(), &m_n_IsLoose); connectBranch(tree, "IsLoose" , &m_IsLoose ); tree->SetBranchStatus (("n"+m_name+"_IsMedium").c_str(), 1); tree->SetBranchAddress(("n"+m_name+"_IsMedium").c_str(), &m_n_IsMedium); connectBranch(tree, "IsMedium" , &m_IsMedium); tree->SetBranchStatus (("n"+m_name+"_IsTight").c_str(), 1); tree->SetBranchAddress(("n"+m_name+"_IsTight").c_str(), &m_n_IsTight); connectBranch(tree, "IsTight" , &m_IsTight ); } if(m_infoSwitch.m_purity){ connectBranch(tree,"radhad1", &m_radhad1); connectBranch(tree,"radhad" , &m_radhad ); connectBranch(tree,"e277" , &m_e277 ); connectBranch(tree,"reta" , &m_reta ); connectBranch(tree,"rphi" , &m_rphi ); connectBranch(tree,"weta2" , &m_weta2 ); connectBranch(tree,"f1" , &m_f1 ); connectBranch(tree,"wtot" , &m_wtot ); connectBranch(tree,"deltae" , &m_deltae ); connectBranch(tree,"eratio" , &m_eratio ); } if(m_infoSwitch.m_effSF && m_mc) { connectBranch(tree, "LooseEffSF", &m_LooseEffSF); connectBranch(tree, "MediumEffSF",&m_MediumEffSF); connectBranch(tree, "TightEffSF", &m_TightEffSF); connectBranch(tree, "LooseEffSF_Error", &m_LooseEffSF_Error); connectBranch(tree, "MediumEffSF_Error",&m_MediumEffSF_Error); connectBranch(tree, "TightEffSF_Error", &m_TightEffSF_Error); } if(m_infoSwitch.m_trigger) { connectBranch >(tree, "trigMatched", &m_trigMatched); } } void PhotonContainer::updateParticle(uint idx, Photon& photon) { ParticleContainer::updateParticle(idx,photon); if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "20") != m_infoSwitch.m_isoCones.end()){ photon.ptcone20 = m_ptcone20 ->at(idx); photon.topoetcone20 = m_topoetcone20 ->at(idx); photon.ptvarcone20 = m_ptvarcone20 ->at(idx); photon.isIsolated_Cone20 = m_isIsolated_Cone20 ->at(idx); } if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "30") != m_infoSwitch.m_isoCones.end()){ photon.ptcone30 = m_ptcone30 ->at(idx); photon.topoetcone30 = m_topoetcone30 ->at(idx); photon.ptvarcone30 = m_ptvarcone30 ->at(idx); } if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "40") != m_infoSwitch.m_isoCones.end()){ photon.ptcone40 = m_ptcone40 ->at(idx); photon.ptvarcone40 = m_ptvarcone40 ->at(idx); photon.topoetcone40 = m_topoetcone40 ->at(idx); photon.isIsolated_Cone40CaloOnly = m_isIsolated_Cone40CaloOnly ->at(idx); photon.isIsolated_Cone40 = m_isIsolated_Cone40 ->at(idx); } // PID if(m_infoSwitch.m_PID){ photon.IsLoose = m_IsLoose ->at(idx); photon.IsMedium = m_IsMedium->at(idx); photon.IsTight = m_IsTight ->at(idx); } if(m_infoSwitch.m_purity){ photon.radhad1 = m_radhad1->at(idx); photon.radhad = m_radhad ->at(idx); photon.e277 = m_e277 ->at(idx); photon.reta = m_reta ->at(idx); photon.rphi = m_rphi ->at(idx); photon.weta2 = m_weta2 ->at(idx); photon.f1 = m_f1 ->at(idx); photon.wtot = m_wtot ->at(idx); photon.deltae = m_deltae ->at(idx); photon.eratio = m_eratio ->at(idx); } if(m_infoSwitch.m_effSF && m_mc){ photon.LooseEffSF =m_LooseEffSF ->at(idx); photon.MediumEffSF=m_MediumEffSF->at(idx); photon.TightEffSF =m_TightEffSF ->at(idx); photon.LooseEffSF_Error =m_LooseEffSF_Error ->at(idx); photon.MediumEffSF_Error=m_MediumEffSF_Error->at(idx); photon.TightEffSF_Error =m_TightEffSF_Error ->at(idx); } if(m_infoSwitch.m_trigger){ photon.trigMatched =m_trigMatched->at(idx); } } void PhotonContainer::setBranches(TTree *tree) { ParticleContainer::setBranches(tree); if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "20") != m_infoSwitch.m_isoCones.end()){ setBranch(tree, "ptcone20", m_ptcone20 ); setBranch(tree, "ptvarcone20", m_ptvarcone20 ); setBranch(tree, "topoetcone20", m_topoetcone20 ); setBranch (tree, "isIsolated_Cone20", m_isIsolated_Cone20 ); } if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "30") != m_infoSwitch.m_isoCones.end()){ setBranch(tree, "ptcone30", m_ptcone30 ); setBranch(tree, "ptvarcone30", m_ptvarcone30 ); setBranch(tree, "topoetcone30", m_topoetcone30 ); } if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "40") != m_infoSwitch.m_isoCones.end()){ setBranch(tree, "ptcone40", m_ptcone40 ); setBranch(tree, "ptvarcone40", m_ptvarcone40 ); setBranch(tree, "topoetcone40", m_topoetcone40 ); setBranch (tree, "isIsolated_Cone40CaloOnly", m_isIsolated_Cone40CaloOnly ); setBranch (tree, "isIsolated_Cone40", m_isIsolated_Cone40 ); } // PID if(m_infoSwitch.m_PID){ tree->Branch(("n"+m_name+"_IsLoose").c_str(), &m_n_IsLoose); setBranch(tree, "IsLoose" , m_IsLoose ); tree->Branch(("n"+m_name+"_IsMedium").c_str(), &m_n_IsMedium); setBranch(tree, "IsMedium" , m_IsMedium); tree->Branch(("n"+m_name+"_IsTight").c_str(), &m_n_IsTight); setBranch(tree, "IsTight" , m_IsTight ); } // purity if(m_infoSwitch.m_purity){ setBranch(tree,"radhad1", m_radhad1); setBranch(tree,"radhad" , m_radhad ); setBranch(tree,"e277" , m_e277 ); setBranch(tree,"reta" , m_reta ); setBranch(tree,"rphi" , m_rphi ); setBranch(tree,"weta2" , m_weta2 ); setBranch(tree,"f1" , m_f1 ); setBranch(tree,"wtot" , m_wtot ); setBranch(tree,"deltae" , m_deltae ); setBranch(tree,"eratio" , m_eratio ); } // effSF if(m_infoSwitch.m_effSF && m_mc){ setBranch(tree, "LooseEffSF" , m_LooseEffSF); setBranch(tree, "MediumEffSF", m_MediumEffSF); setBranch(tree, "TightEffSF" , m_TightEffSF); setBranch(tree, "LooseEffSF_Error" , m_LooseEffSF_Error); setBranch(tree, "MediumEffSF_Error", m_MediumEffSF_Error); setBranch(tree, "TightEffSF_Error" , m_TightEffSF_Error); } // trigger if(m_infoSwitch.m_trigger){ setBranch >(tree, "trigMatched", m_trigMatched); } return; } void PhotonContainer::clear() { ParticleContainer::clear(); if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "20") != m_infoSwitch.m_isoCones.end()){ m_ptcone20 -> clear() ; m_ptvarcone20 -> clear() ; m_topoetcone20 -> clear() ; m_isIsolated_Cone20 -> clear() ; } if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "30") != m_infoSwitch.m_isoCones.end()){ m_ptcone30 -> clear() ; m_ptvarcone30 -> clear() ; m_topoetcone30 -> clear() ; } if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "40") != m_infoSwitch.m_isoCones.end()){ m_ptcone40 -> clear() ; m_ptvarcone40 -> clear() ; m_topoetcone40 -> clear(); m_isIsolated_Cone40CaloOnly-> clear(); m_isIsolated_Cone40 -> clear() ; } // PID if(m_infoSwitch.m_PID){ m_n_IsLoose = 0; m_IsLoose -> clear(); m_n_IsMedium = 0; m_IsMedium-> clear(); m_n_IsTight = 0; m_IsTight -> clear(); } // purity if(m_infoSwitch.m_purity){ m_radhad1-> clear(); m_radhad -> clear(); m_e277 -> clear() ; m_reta -> clear() ; m_rphi -> clear() ; m_weta2 -> clear() ; m_f1 -> clear() ; m_wtot -> clear() ; m_deltae -> clear(); m_eratio -> clear(); //std::vector m_w1 } // effSF if(m_infoSwitch.m_effSF && m_mc){ m_LooseEffSF ->clear(); m_MediumEffSF->clear(); m_TightEffSF ->clear(); m_LooseEffSF_Error ->clear(); m_MediumEffSF_Error->clear(); m_TightEffSF_Error ->clear(); } // trigger if(m_infoSwitch.m_trigger){ m_trigMatched->clear(); } } void PhotonContainer::FillPhoton( const xAOD::Photon* photon ){ return FillPhoton(static_cast(photon)); } void PhotonContainer::FillPhoton( const xAOD::IParticle* particle ) { ParticleContainer::FillParticle(particle); const xAOD::Photon* photon=dynamic_cast(particle); if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "20") != m_infoSwitch.m_isoCones.end()){ m_ptcone20 -> push_back( photon->isolation( xAOD::Iso::ptcone20 ) / m_units ); m_ptvarcone20 -> push_back( photon->isolation( xAOD::Iso::ptvarcone20 ) / m_units ); m_topoetcone20 -> push_back( photon->isolation( xAOD::Iso::topoetcone20) / m_units ); static SG::AuxElement::Accessor isIsoCone20Acc ("isIsolated_FixedCutLoose"); safeFill(photon, isIsoCone20Acc, m_isIsolated_Cone20, -1); } if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "30") != m_infoSwitch.m_isoCones.end()){ m_ptcone30 -> push_back( photon->isolation( xAOD::Iso::ptcone30 ) / m_units ); m_ptvarcone30 -> push_back( photon->isolation( xAOD::Iso::ptvarcone30 ) / m_units ); m_topoetcone30 -> push_back( photon->isolation( xAOD::Iso::topoetcone30) / m_units ); } if(m_infoSwitch.m_isolation || std::find(m_infoSwitch.m_isoCones.begin(), m_infoSwitch.m_isoCones.end(), "40") != m_infoSwitch.m_isoCones.end()){ m_ptcone40 -> push_back( photon->isolation( xAOD::Iso::ptcone40 ) / m_units ); m_ptvarcone40 -> push_back( photon->isolation( xAOD::Iso::ptvarcone40 ) / m_units ); m_topoetcone40 -> push_back( photon->isolation( xAOD::Iso::topoetcone40) / m_units ); static SG::AuxElement::Accessor isIsoCone40CaloOnlyAcc ("isIsolated_FixedCutTightCaloOnly"); safeFill(photon, isIsoCone40CaloOnlyAcc, m_isIsolated_Cone40CaloOnly, -1); static SG::AuxElement::Accessor isIsoCone40Acc ("isIsolated_FixedCutTight"); safeFill(photon, isIsoCone40Acc, m_isIsolated_Cone40, -1); } if ( m_infoSwitch.m_PID ) { static SG::AuxElement::Accessor phLooseAcc ("PhotonID_Loose"); safeFill(photon, phLooseAcc, m_IsLoose, -1); static SG::AuxElement::Accessor phMediumAcc ("PhotonID_Medium"); safeFill(photon, phMediumAcc, m_IsMedium, -1); static SG::AuxElement::Accessor phTightAcc ("PhotonID_Tight"); safeFill(photon, phTightAcc, m_IsTight, -1); } if (m_infoSwitch.m_purity) { static SG::AuxElement::Accessor radhad1 ("Rhad1" ); static SG::AuxElement::Accessor radhad ("Rhad" ); static SG::AuxElement::Accessor e277 ("e277" ); static SG::AuxElement::Accessor reta ("Reta" ); static SG::AuxElement::Accessor rphi ("Rphi" ); static SG::AuxElement::Accessor weta2 ("weta2" ); static SG::AuxElement::Accessor f1 ("f1" ); static SG::AuxElement::Accessor wtot ("wtots1" ); //static SG::AuxElement::Accessor w1 ("w1" ); static SG::AuxElement::Accessor deltae ("DeltaE" ); static SG::AuxElement::Accessor eratio ("Eratio" ); m_radhad1 -> push_back( radhad1(*photon) ); m_radhad -> push_back( radhad (*photon) ); m_e277 -> push_back( e277 (*photon) ); m_reta -> push_back( reta (*photon) ); m_rphi -> push_back( rphi (*photon) ); m_weta2 -> push_back( weta2 (*photon) ); m_f1 -> push_back( f1 (*photon) ); m_wtot -> push_back( wtot (*photon) ); m_deltae -> push_back( deltae (*photon) ); m_eratio -> push_back( eratio (*photon) ); } if (m_infoSwitch.m_effSF && m_mc) { static SG::AuxElement::Accessor PhotonID_Tight_EffSF ("PhotonID_Tight_EffSF" ); static SG::AuxElement::Accessor PhotonID_Medium_EffSF ("PhotonID_Medium_EffSF" ); static SG::AuxElement::Accessor PhotonID_Loose_EffSF ("PhotonID_Loose_EffSF" ); static SG::AuxElement::Accessor PhotonID_Tight_EffSF_Error ("PhotonID_Tight_EffSF_Error" ); static SG::AuxElement::Accessor PhotonID_Medium_EffSF_Error ("PhotonID_Medium_EffSF_Error" ); static SG::AuxElement::Accessor PhotonID_Loose_EffSF_Error ("PhotonID_Loose_EffSF_Error" ); m_TightEffSF ->push_back( PhotonID_Tight_EffSF (*photon) ); m_MediumEffSF ->push_back( PhotonID_Medium_EffSF(*photon) ); m_LooseEffSF ->push_back( PhotonID_Loose_EffSF (*photon) ); m_TightEffSF_Error ->push_back( PhotonID_Tight_EffSF_Error (*photon) ); m_MediumEffSF_Error ->push_back( PhotonID_Medium_EffSF_Error(*photon) ); m_LooseEffSF_Error ->push_back( PhotonID_Loose_EffSF_Error (*photon) ); } if (m_infoSwitch.m_trigger) { static SG::AuxElement::Accessor< std::vector< std::string> > trigMatched("trigMatched"); m_trigMatched ->push_back( trigMatched(*photon) ); } return; }