Public Member Functions | |
void | operator() (PFTau &) const |
RecoTauElectronRejectionPlugin (const edm::ParameterSet &pset) | |
virtual | ~RecoTauElectronRejectionPlugin () |
Private Attributes | |
std::string | DataType_ |
double | EcalStripSumE_deltaEta_ |
double | EcalStripSumE_deltaPhiOverQ_maxValue_ |
double | EcalStripSumE_deltaPhiOverQ_minValue_ |
double | EcalStripSumE_minClusEnergy_ |
double | ElecPreIDLeadTkMatch_maxDR_ |
double | maximumForElectrionPreIDOutput_ |
Definition at line 24 of file RecoTauElectronRejectionPlugin.cc.
reco::tau::RecoTauElectronRejectionPlugin::RecoTauElectronRejectionPlugin | ( | const edm::ParameterSet & | pset | ) | [explicit] |
Definition at line 39 of file RecoTauElectronRejectionPlugin.cc.
References DataType_, EcalStripSumE_deltaEta_, EcalStripSumE_deltaPhiOverQ_maxValue_, EcalStripSumE_deltaPhiOverQ_minValue_, EcalStripSumE_minClusEnergy_, ElecPreIDLeadTkMatch_maxDR_, edm::ParameterSet::getParameter(), and maximumForElectrionPreIDOutput_.
:RecoTauModifierPlugin(pset) { // Load parameters ElecPreIDLeadTkMatch_maxDR_ = pset.getParameter<double>("ElecPreIDLeadTkMatch_maxDR"); EcalStripSumE_minClusEnergy_ = pset.getParameter<double>("EcalStripSumE_minClusEnergy"); EcalStripSumE_deltaEta_ = pset.getParameter<double>("EcalStripSumE_deltaEta"); EcalStripSumE_deltaPhiOverQ_minValue_ = pset.getParameter<double>("EcalStripSumE_deltaPhiOverQ_minValue"); EcalStripSumE_deltaPhiOverQ_maxValue_ = pset.getParameter<double>("EcalStripSumE_deltaPhiOverQ_maxValue"); maximumForElectrionPreIDOutput_ = pset.getParameter<double>("maximumForElectrionPreIDOutput"); DataType_ = pset.getParameter<std::string>("DataType"); }
virtual reco::tau::RecoTauElectronRejectionPlugin::~RecoTauElectronRejectionPlugin | ( | ) | [inline, virtual] |
Definition at line 27 of file RecoTauElectronRejectionPlugin.cc.
{}
void reco::tau::RecoTauElectronRejectionPlugin::operator() | ( | PFTau & | tau | ) | const [virtual] |
Implements reco::tau::RecoTauModifierPlugin.
Definition at line 70 of file RecoTauElectronRejectionPlugin.cc.
References abs, edm::RefVector< C, T, F >::begin(), Association::block, edm::RefVector< C, T, F >::clear(), filterCSVwithJSON::copy, DataType_, HLTFastRecoForTau_cff::deltaEta, reco::deltaPhi(), reco::deltaR(), ECAL, EcalStripSumE_deltaEta_, EcalStripSumE_deltaPhiOverQ_maxValue_, EcalStripSumE_deltaPhiOverQ_minValue_, EcalStripSumE_minClusEnergy_, reco::PFBlock::elements(), asciidump::elements, edm::RefVector< C, T, F >::end(), HCAL, i, edm::Ref< C, T, F >::isNonnull(), reco::PFTau::isolationPFCands(), reco::PFTau::leadPFChargedHadrCand(), maximumForElectrionPreIDOutput_, edm::RefVector< C, T, F >::reserve(), reco::PFTau::setecalStripSumEOverPLead(), reco::PFTau::setelectronPreIDDecision(), reco::PFTau::setelectronPreIDOutput(), reco::PFTau::setelectronPreIDTrack(), reco::PFTau::setemFraction(), reco::PFTau::sethcal3x3OverPLead(), reco::PFTau::sethcalMaxOverPLead(), reco::PFTau::sethcalTotOverPLead(), reco::PFTau::setmaximumHCALPFClusterEt(), reco::PFTau::signalPFCands(), funct::sin(), edm::OwnVector< T, P >::size(), and edm::RefVector< C, T, F >::size().
{ // copy pasted from PFRecoTauAlgorithm... double myECALenergy = 0.; double myHCALenergy = 0.; double myHCALenergy3x3 = 0.; double myMaximumHCALPFClusterE = 0.; double myMaximumHCALPFClusterEt = 0.; double myStripClusterE = 0.; double myEmfrac = -1.; double myElectronPreIDOutput = -1111.; bool myElecPreid = false; reco::TrackRef myElecTrk; typedef std::pair<reco::PFBlockRef, unsigned> ElementInBlock; typedef std::vector< ElementInBlock > ElementsInBlocks; PFCandidateRef myleadPFChargedCand = tau.leadPFChargedHadrCand(); // Build list of PFCands in tau PFCandidateRefVector myPFCands; myPFCands.reserve(tau.isolationPFCands().size()+tau.signalPFCands().size()); std::copy(tau.isolationPFCands().begin(), tau.isolationPFCands().end(), std::back_inserter(myPFCands)); std::copy(tau.signalPFCands().begin(), tau.signalPFCands().end(), std::back_inserter(myPFCands)); //Use the electron rejection only in case there is a charged leading pion if(myleadPFChargedCand.isNonnull()){ myElectronPreIDOutput = myleadPFChargedCand->mva_e_pi(); math::XYZPointF myElecTrkEcalPos = myleadPFChargedCand->positionAtECALEntrance(); myElecTrk = myleadPFChargedCand->trackRef();//Electron candidate if(myElecTrk.isNonnull()) { //FROM AOD if(DataType_ == "AOD"){ // Corrected Cluster energies for(int i=0;i<(int)myPFCands.size();i++){ myHCALenergy += myPFCands[i]->hcalEnergy(); myECALenergy += myPFCands[i]->ecalEnergy(); math::XYZPointF candPos; if (myPFCands[i]->particleId()==1 || myPFCands[i]->particleId()==2)//if charged hadron or electron candPos = myPFCands[i]->positionAtECALEntrance(); else candPos = math::XYZPointF(myPFCands[i]->px(),myPFCands[i]->py(),myPFCands[i]->pz()); double deltaR = ROOT::Math::VectorUtil::DeltaR(myElecTrkEcalPos,candPos); double deltaPhi = ROOT::Math::VectorUtil::DeltaPhi(myElecTrkEcalPos,candPos); double deltaEta = abs(myElecTrkEcalPos.eta()-candPos.eta()); double deltaPhiOverQ = deltaPhi/(double)myElecTrk->charge(); if (myPFCands[i]->ecalEnergy() >= EcalStripSumE_minClusEnergy_ && deltaEta < EcalStripSumE_deltaEta_ && deltaPhiOverQ > EcalStripSumE_deltaPhiOverQ_minValue_ && deltaPhiOverQ < EcalStripSumE_deltaPhiOverQ_maxValue_) { myStripClusterE += myPFCands[i]->ecalEnergy(); } if (deltaR<0.184) { myHCALenergy3x3 += myPFCands[i]->hcalEnergy(); } if (myPFCands[i]->hcalEnergy()>myMaximumHCALPFClusterE) { myMaximumHCALPFClusterE = myPFCands[i]->hcalEnergy(); } if ((myPFCands[i]->hcalEnergy()*fabs(sin(candPos.Theta())))>myMaximumHCALPFClusterEt) { myMaximumHCALPFClusterEt = (myPFCands[i]->hcalEnergy()*fabs(sin(candPos.Theta()))); } } } else if(DataType_ == "RECO"){ //From RECO // Against double counting of clusters std::vector<math::XYZPoint> hcalPosV; hcalPosV.clear(); std::vector<math::XYZPoint> ecalPosV; ecalPosV.clear(); for(int i=0;i<(int)myPFCands.size();i++){ const ElementsInBlocks& elts = myPFCands[i]->elementsInBlocks(); for(ElementsInBlocks::const_iterator it=elts.begin(); it!=elts.end(); ++it) { const reco::PFBlock& block = *(it->first); unsigned indexOfElementInBlock = it->second; const edm::OwnVector< reco::PFBlockElement >& elements = block.elements(); assert(indexOfElementInBlock<elements.size()); const reco::PFBlockElement& element = elements[indexOfElementInBlock]; if(element.type()==reco::PFBlockElement::HCAL) { math::XYZPoint clusPos = element.clusterRef()->position(); double en = (double)element.clusterRef()->energy(); double et = (double)element.clusterRef()->energy()*fabs(sin(clusPos.Theta())); if (en>myMaximumHCALPFClusterE) { myMaximumHCALPFClusterE = en; } if (et>myMaximumHCALPFClusterEt) { myMaximumHCALPFClusterEt = et; } if (!checkPos(hcalPosV,clusPos)) { hcalPosV.push_back(clusPos); myHCALenergy += en; double deltaR = ROOT::Math::VectorUtil::DeltaR(myElecTrkEcalPos,clusPos); if (deltaR<0.184) { myHCALenergy3x3 += en; } } } else if(element.type()==reco::PFBlockElement::ECAL) { double en = (double)element.clusterRef()->energy(); math::XYZPoint clusPos = element.clusterRef()->position(); if (!checkPos(ecalPosV,clusPos)) { ecalPosV.push_back(clusPos); myECALenergy += en; double deltaPhi = ROOT::Math::VectorUtil::DeltaPhi(myElecTrkEcalPos,clusPos); double deltaEta = abs(myElecTrkEcalPos.eta()-clusPos.eta()); double deltaPhiOverQ = deltaPhi/(double)myElecTrk->charge(); if (en >= EcalStripSumE_minClusEnergy_ && deltaEta<EcalStripSumE_deltaEta_ && deltaPhiOverQ > EcalStripSumE_deltaPhiOverQ_minValue_ && deltaPhiOverQ < EcalStripSumE_deltaPhiOverQ_maxValue_) { myStripClusterE += en; } } } } //end elements in blocks } //end loop over PFcands } //end RECO case } // end check for null electrk } // end check for null pfChargedHadrCand if ((myHCALenergy+myECALenergy)>0.) myEmfrac = myECALenergy/(myHCALenergy+myECALenergy); tau.setemFraction((float)myEmfrac); // scale the appropriate quantities by the momentum of the electron if it exists if (myElecTrk.isNonnull()) { float myElectronMomentum = (float)myElecTrk->p(); if (myElectronMomentum > 0.) { myHCALenergy /= myElectronMomentum; myMaximumHCALPFClusterE /= myElectronMomentum; myHCALenergy3x3 /= myElectronMomentum; myStripClusterE /= myElectronMomentum; } } tau.sethcalTotOverPLead((float)myHCALenergy); tau.sethcalMaxOverPLead((float)myMaximumHCALPFClusterE); tau.sethcal3x3OverPLead((float)myHCALenergy3x3); tau.setecalStripSumEOverPLead((float)myStripClusterE); tau.setmaximumHCALPFClusterEt(myMaximumHCALPFClusterEt); tau.setelectronPreIDOutput(myElectronPreIDOutput); if (myElecTrk.isNonnull()) tau.setelectronPreIDTrack(myElecTrk); if (myElectronPreIDOutput > maximumForElectrionPreIDOutput_) myElecPreid = true; tau.setelectronPreIDDecision(myElecPreid); // These need to be filled! //tau.setbremsRecoveryEOverPLead(my...); /* End elecron rejection */ }
std::string reco::tau::RecoTauElectronRejectionPlugin::DataType_ [private] |
Definition at line 36 of file RecoTauElectronRejectionPlugin.cc.
Referenced by operator()(), and RecoTauElectronRejectionPlugin().
double reco::tau::RecoTauElectronRejectionPlugin::EcalStripSumE_deltaEta_ [private] |
Definition at line 32 of file RecoTauElectronRejectionPlugin.cc.
Referenced by operator()(), and RecoTauElectronRejectionPlugin().
Definition at line 34 of file RecoTauElectronRejectionPlugin.cc.
Referenced by operator()(), and RecoTauElectronRejectionPlugin().
Definition at line 33 of file RecoTauElectronRejectionPlugin.cc.
Referenced by operator()(), and RecoTauElectronRejectionPlugin().
Definition at line 31 of file RecoTauElectronRejectionPlugin.cc.
Referenced by operator()(), and RecoTauElectronRejectionPlugin().
Definition at line 30 of file RecoTauElectronRejectionPlugin.cc.
Referenced by RecoTauElectronRejectionPlugin().
Definition at line 35 of file RecoTauElectronRejectionPlugin.cc.
Referenced by operator()(), and RecoTauElectronRejectionPlugin().