#include <SUSYBSMAnalysis/HSCParticleProducer/src/HSCParticleProducer.cc>
Public Member Functions | |
HSCParticleProducer (const edm::ParameterSet &) | |
~HSCParticleProducer () | |
Private Member Functions | |
virtual void | beginJob () |
virtual void | endJob () |
virtual bool | filter (edm::Event &, const edm::EventSetup &) |
std::vector< HSCParticle > | getHSCPSeedCollection (edm::Handle< reco::TrackCollection > &trackCollectionHandle, edm::Handle< reco::MuonCollection > &muonCollectionHandle) |
Private Attributes | |
BetaCalculatorECAL * | beta_calculator_ECAL |
BetaCalculatorMUON * | beta_calculator_MUON |
BetaCalculatorRPC * | beta_calculator_RPC |
BetaCalculatorTK * | beta_calculator_TK |
bool | Filter_ |
edm::InputTag | m_muonsTag |
edm::InputTag | m_trackIsoTag |
edm::InputTag | m_trackTag |
float | maxInvPtDiff |
float | maxTkChi2 |
float | minDR |
float | minMuP |
unsigned int | minTkHits |
float | minTkP |
std::vector< CandidateSelector * > | Selectors |
bool | useBetaFromEcal |
bool | useBetaFromMuon |
bool | useBetaFromRpc |
bool | useBetaFromTk |
Description: Producer for HSCP candidates, merging tracker dt information and rpc information
Implementation: <Notes on="" implementation>="">
Definition at line 57 of file HSCParticleProducer.h.
HSCParticleProducer::HSCParticleProducer | ( | const edm::ParameterSet & | iConfig | ) | [explicit] |
Definition at line 24 of file HSCParticleProducer.cc.
References beta_calculator_ECAL, beta_calculator_MUON, beta_calculator_RPC, beta_calculator_TK, Filter_, edm::ParameterSet::getParameter(), i, m_muonsTag, m_trackIsoTag, m_trackTag, maxInvPtDiff, maxTkChi2, minDR, minMuP, minTkHits, minTkP, Selectors, useBetaFromEcal, useBetaFromMuon, useBetaFromRpc, and useBetaFromTk.
{ using namespace edm; using namespace std; // the Act as Event filter Filter_ = iConfig.getParameter<bool> ("filter"); // the input collections m_trackTag = iConfig.getParameter<edm::InputTag>("tracks"); m_muonsTag = iConfig.getParameter<edm::InputTag>("muons"); m_trackIsoTag = iConfig.getParameter<edm::InputTag>("tracksIsolation"); useBetaFromTk = iConfig.getParameter<bool> ("useBetaFromTk" ); useBetaFromMuon = iConfig.getParameter<bool> ("useBetaFromMuon"); useBetaFromRpc = iConfig.getParameter<bool> ("useBetaFromRpc" ); useBetaFromEcal = iConfig.getParameter<bool> ("useBetaFromEcal"); // the parameters minTkP = iConfig.getParameter<double> ("minTkP"); // 30 maxTkChi2 = iConfig.getParameter<double> ("maxTkChi2"); // 5 minTkHits = iConfig.getParameter<uint32_t>("minTkHits"); // 9 minMuP = iConfig.getParameter<double> ("minMuP"); // 30 minDR = iConfig.getParameter<double> ("minDR"); // 0.1 maxInvPtDiff = iConfig.getParameter<double> ("maxInvPtDiff"); // 0.005 if(useBetaFromTk )beta_calculator_TK = new BetaCalculatorTK (iConfig); if(useBetaFromMuon)beta_calculator_MUON = new BetaCalculatorMUON(iConfig); if(useBetaFromRpc )beta_calculator_RPC = new BetaCalculatorRPC (iConfig); if(useBetaFromEcal)beta_calculator_ECAL = new BetaCalculatorECAL(iConfig); // Load all the selections std::vector<edm::ParameterSet> SelectionParameters = iConfig.getParameter<std::vector<edm::ParameterSet> >("SelectionParameters"); for(unsigned int i=0;i<SelectionParameters.size();i++){ Selectors.push_back(new CandidateSelector(SelectionParameters[i]) ); } // what I produce produces<susybsm::HSCParticleCollection >(); if(useBetaFromEcal)produces<susybsm::HSCPCaloInfoCollection >(); }
HSCParticleProducer::~HSCParticleProducer | ( | ) |
Definition at line 66 of file HSCParticleProducer.cc.
{ // do anything here that needs to be done at desctruction time // (e.g. close files, deallocate resources etc.) }
void HSCParticleProducer::beginJob | ( | void | ) | [private, virtual] |
void HSCParticleProducer::endJob | ( | void | ) | [private, virtual] |
bool HSCParticleProducer::filter | ( | edm::Event & | iEvent, |
const edm::EventSetup & | iSetup | ||
) | [private, virtual] |
Implements edm::EDFilter.
Definition at line 77 of file HSCParticleProducer.cc.
References BetaCalculatorECAL::addInfoToCandidate(), BetaCalculatorMUON::addInfoToCandidate(), BetaCalculatorRPC::addInfoToCandidate(), BetaCalculatorTK::addInfoToCandidate(), beta_calculator_ECAL, beta_calculator_MUON, beta_calculator_RPC, beta_calculator_TK, deltaR(), Filter_, newFWLiteAna::found, edm::Event::getByLabel(), getHSCPSeedCollection(), i, edm::Ref< C, T, F >::isNull(), m_muonsTag, m_trackIsoTag, m_trackTag, maxInvPtDiff, minDR, edm::Event::put(), dt_offlineAnalysis_common_cff::reco, query::result, asciidump::s, Selectors, matplotRender::t, ExpressReco_HICollisions_FallBack::track, useBetaFromEcal, useBetaFromMuon, useBetaFromRpc, and useBetaFromTk.
{ using namespace edm; using namespace reco; using namespace std; using namespace susybsm; // information from the muons edm::Handle<reco::MuonCollection> muonCollectionHandle; iEvent.getByLabel(m_muonsTag,muonCollectionHandle); // information from the tracks edm::Handle<reco::TrackCollection> trackCollectionHandle; iEvent.getByLabel(m_trackTag,trackCollectionHandle); // information from the tracks iso edm::Handle<reco::TrackCollection> trackIsoCollectionHandle; iEvent.getByLabel(m_trackIsoTag,trackIsoCollectionHandle); // creates the output collection susybsm::HSCParticleCollection* hscp = new susybsm::HSCParticleCollection; std::auto_ptr<susybsm::HSCParticleCollection> result(hscp); susybsm::HSCPCaloInfoCollection* caloInfoColl = new susybsm::HSCPCaloInfoCollection; std::auto_ptr<susybsm::HSCPCaloInfoCollection> caloInfoCollaptr(caloInfoColl); // Fill the output collection with HSCP Candidate (the candiate only contains ref to muon AND/OR track object) *hscp = getHSCPSeedCollection(trackCollectionHandle, muonCollectionHandle); // find the track ref for isolation purposed (main track is supposed to be the Iso track after refitting) for(susybsm::HSCParticleCollection::iterator hscpcandidate = hscp->begin(); hscpcandidate != hscp->end(); ++hscpcandidate) { // Matching is needed because input track collection and muon inner track may lightly differs due to track refit reco::TrackRef track = hscpcandidate->trackRef(); if(track.isNull())continue; float dRMin=1000; int found = -1; for(unsigned int t=0; t<trackIsoCollectionHandle->size();t++) { reco::TrackRef Isotrack = reco::TrackRef( trackIsoCollectionHandle, t ); if( fabs( (1.0/track->pt())-(1.0/Isotrack->pt())) > maxInvPtDiff) continue; float dR = deltaR(track->momentum(), Isotrack->momentum()); if(dR <= minDR && dR < dRMin){ dRMin=dR; found = t;} } if(found>=0)hscpcandidate->setTrackIso(reco::TrackRef( trackIsoCollectionHandle, found )); } // compute the TRACKER contribution if(useBetaFromTk){ for(susybsm::HSCParticleCollection::iterator hscpcandidate = hscp->begin(); hscpcandidate != hscp->end(); ++hscpcandidate) { beta_calculator_TK->addInfoToCandidate(*hscpcandidate, iEvent,iSetup); }} // compute the MUON contribution if(useBetaFromMuon){ for(susybsm::HSCParticleCollection::iterator hscpcandidate = hscp->begin(); hscpcandidate != hscp->end(); ++hscpcandidate) { beta_calculator_MUON->addInfoToCandidate(*hscpcandidate, iEvent,iSetup); }} // compute the RPC contribution if(useBetaFromRpc){ for(susybsm::HSCParticleCollection::iterator hscpcandidate = hscp->begin(); hscpcandidate != hscp->end(); ++hscpcandidate) { beta_calculator_RPC->addInfoToCandidate(*hscpcandidate, iEvent, iSetup); }} // compute the ECAL contribution // auto_ptr<ValueMap<HSCPCaloInfo> > CaloInfoMap(new ValueMap<HSCPCaloInfo> ); // ValueMap<HSCPCaloInfo>::Filler filler(*CaloInfoMap); // std::vector<HSCPCaloInfo> CaloInfoColl(hscp->size()); if(useBetaFromEcal){ int Index=0; caloInfoColl->resize(hscp->size()); for(susybsm::HSCParticleCollection::iterator hscpcandidate = hscp->begin(); hscpcandidate != hscp->end(); ++hscpcandidate, Index++) { beta_calculator_ECAL->addInfoToCandidate(*hscpcandidate,trackCollectionHandle,iEvent,iSetup, (*caloInfoColl)[Index]); }} // cleanup the collection based on the input selection for(int i=0;i<(int)hscp->size();i++) { susybsm::HSCParticleCollection::iterator hscpcandidate = hscp->begin() + i; bool decision = false; for(unsigned int s=0;s<Selectors.size();s++){decision |= Selectors[s]->isSelected(*hscpcandidate);} if(!decision){ hscp->erase(hscpcandidate); if(useBetaFromEcal)caloInfoColl->erase(caloInfoColl->begin() + i); i--; } } bool filterResult = !Filter_ || (Filter_ && hscp->size()>=1); // output result if(useBetaFromEcal){ edm::OrphanHandle<susybsm::HSCPCaloInfoCollection> caloInfoHandle= iEvent.put(caloInfoCollaptr); // adding the reftoCaloInfoObject to the HSCP Object for(int i=0;i<(int)hscp->size();i++) { susybsm::HSCParticleCollection::iterator hscpcandidate = hscp->begin() + i; hscpcandidate->setCaloInfo(HSCPCaloInfoRef(caloInfoHandle,i)); } } // output result edm::OrphanHandle<susybsm::HSCParticleCollection> putHandle = iEvent.put(result); // if(useBetaFromEcal){ // edm::RefProd<susybsm::HSCParticleCollection> hscpCollectionHandle = iEvent.getRefBeforePut<susybsm::HSCParticleCollection>(); // filler.insert(putHandle, CaloInfoColl.begin(), CaloInfoColl.end()); // filler.fill(); // iEvent.put(CaloInfoMap); // } return filterResult; }
std::vector< HSCParticle > HSCParticleProducer::getHSCPSeedCollection | ( | edm::Handle< reco::TrackCollection > & | trackCollectionHandle, |
edm::Handle< reco::MuonCollection > & | muonCollectionHandle | ||
) | [private] |
Definition at line 203 of file HSCParticleProducer.cc.
References deltaR(), newFWLiteAna::found, i, edm::Ref< C, T, F >::isNonnull(), edm::Ref< C, T, F >::isNull(), m, maxInvPtDiff, maxTkChi2, minDR, minMuP, minTkHits, minTkP, metsig::muon, susybsm::HSCParticle::setMuon(), susybsm::HSCParticle::setTrack(), matplotRender::t, ExpressReco_HICollisions_FallBack::track, and testEve_cfg::tracks.
Referenced by filter().
{ std::vector<HSCParticle> HSCPCollection; // Store a local vector of track ref (that can be modified if matching) std::vector<reco::TrackRef> tracks; for(unsigned int i=0; i<trackCollectionHandle->size(); i++){ TrackRef track = reco::TrackRef( trackCollectionHandle, i ); if(track->p()<minTkP || (track->chi2()/track->ndof())>maxTkChi2 || track->found()<minTkHits)continue; tracks.push_back( track ); } // Loop on muons with inner track ref and create Muon HSCP Candidate for(unsigned int m=0; m<muonCollectionHandle->size(); m++){ reco::MuonRef muon = reco::MuonRef( muonCollectionHandle, m ); if(muon->p()<minMuP )continue; TrackRef innertrack = muon->innerTrack(); if(innertrack.isNull())continue; // Check if the inner track match any track in order to create a Muon+Track HSCP Candidate // Matching is needed because input track collection and muon inner track may lightly differs due to track refit float dRMin=1000; int found = -1; for(unsigned int t=0; t<tracks.size();t++) { reco::TrackRef track = tracks[t]; if( fabs( (1.0/innertrack->pt())-(1.0/track->pt())) > maxInvPtDiff) continue; float dR = deltaR(innertrack->momentum(), track->momentum()); if(dR <= minDR && dR < dRMin){ dRMin=dR; found = t;} } HSCParticle candidate; candidate.setMuon(muon); if(found>=0){ // printf("MUON with Inner Track Matching --> DR = %6.2f (%6.2f %+6.2f %+6.2f):(%6.2f %+6.2f %+6.2f) vs (%6.2f %+6.2f %+6.2f)\n",dRMin,muon->pt(), muon->eta(), muon->phi(), innertrack->pt(), innertrack->eta(), innertrack->phi(), tracks[found]->pt(), tracks[found]->eta(), tracks[found]->phi() ); candidate.setTrack(tracks[found]); tracks.erase(tracks.begin()+found); } HSCPCollection.push_back(candidate); } // Loop on muons without inner tracks and create Muon HSCP Candidate for(unsigned int m=0; m<muonCollectionHandle->size(); m++){ reco::MuonRef muon = reco::MuonRef( muonCollectionHandle, m ); if(muon->p()<minMuP)continue; TrackRef innertrack = muon->innerTrack(); if(innertrack.isNonnull())continue; // Check if the muon match any track in order to create a Muon+Track HSCP Candidate float dRMin=1000; int found = -1; for(unsigned int t=0; t<tracks.size();t++) { reco::TrackRef track = tracks[t]; if( fabs( (1.0/muon->pt())-(1.0/track->pt())) > maxInvPtDiff) continue; float dR = deltaR(muon->momentum(), track->momentum()); if(dR <= minDR && dR < dRMin){ dRMin=dR; found = t;} } HSCParticle candidate; candidate.setMuon(muon); if(found>=0){ // printf("MUON without Inner Track Matching --> DR = %6.2f (%6.2f %+6.2f %+6.2f) vs (%6.2f %+6.2f %+6.2f)\n",dRMin,muon->pt(), muon->eta(), muon->phi(), tracks[found]->pt(), tracks[found]->eta(), tracks[found]->phi() ); candidate.setTrack(tracks[found]); tracks.erase(tracks.begin()+found); } HSCPCollection.push_back(candidate); } // Loop on tracks not matching muon and create Track HSCP Candidate for(unsigned int i=0; i<tracks.size(); i++){ HSCParticle candidate; candidate.setTrack(tracks[i]); HSCPCollection.push_back(candidate); } return HSCPCollection; }
Definition at line 91 of file HSCParticleProducer.h.
Referenced by filter(), and HSCParticleProducer().
Definition at line 89 of file HSCParticleProducer.h.
Referenced by filter(), and HSCParticleProducer().
Definition at line 90 of file HSCParticleProducer.h.
Referenced by filter(), and HSCParticleProducer().
Definition at line 88 of file HSCParticleProducer.h.
Referenced by filter(), and HSCParticleProducer().
bool HSCParticleProducer::Filter_ [private] |
Definition at line 70 of file HSCParticleProducer.h.
Referenced by filter(), and HSCParticleProducer().
edm::InputTag HSCParticleProducer::m_muonsTag [private] |
Definition at line 74 of file HSCParticleProducer.h.
Referenced by filter(), and HSCParticleProducer().
Definition at line 73 of file HSCParticleProducer.h.
Referenced by filter(), and HSCParticleProducer().
edm::InputTag HSCParticleProducer::m_trackTag [private] |
Definition at line 72 of file HSCParticleProducer.h.
Referenced by filter(), and HSCParticleProducer().
float HSCParticleProducer::maxInvPtDiff [private] |
Definition at line 86 of file HSCParticleProducer.h.
Referenced by filter(), getHSCPSeedCollection(), and HSCParticleProducer().
float HSCParticleProducer::maxTkChi2 [private] |
Definition at line 82 of file HSCParticleProducer.h.
Referenced by getHSCPSeedCollection(), and HSCParticleProducer().
float HSCParticleProducer::minDR [private] |
Definition at line 85 of file HSCParticleProducer.h.
Referenced by filter(), getHSCPSeedCollection(), and HSCParticleProducer().
float HSCParticleProducer::minMuP [private] |
Definition at line 84 of file HSCParticleProducer.h.
Referenced by getHSCPSeedCollection(), and HSCParticleProducer().
unsigned int HSCParticleProducer::minTkHits [private] |
Definition at line 83 of file HSCParticleProducer.h.
Referenced by getHSCPSeedCollection(), and HSCParticleProducer().
float HSCParticleProducer::minTkP [private] |
Definition at line 81 of file HSCParticleProducer.h.
Referenced by getHSCPSeedCollection(), and HSCParticleProducer().
std::vector<CandidateSelector*> HSCParticleProducer::Selectors [private] |
Definition at line 93 of file HSCParticleProducer.h.
Referenced by filter(), and HSCParticleProducer().
bool HSCParticleProducer::useBetaFromEcal [private] |
Definition at line 79 of file HSCParticleProducer.h.
Referenced by filter(), and HSCParticleProducer().
bool HSCParticleProducer::useBetaFromMuon [private] |
Definition at line 77 of file HSCParticleProducer.h.
Referenced by filter(), and HSCParticleProducer().
bool HSCParticleProducer::useBetaFromRpc [private] |
Definition at line 78 of file HSCParticleProducer.h.
Referenced by filter(), and HSCParticleProducer().
bool HSCParticleProducer::useBetaFromTk [private] |
Definition at line 76 of file HSCParticleProducer.h.
Referenced by filter(), and HSCParticleProducer().