#include <PhysicsTools/IsolationAlgos/plugins/CandIsoDepositProducer.h>
Public Member Functions | |
CandIsoDepositProducer (const edm::ParameterSet &) | |
constructor with config | |
virtual void | produce (edm::Event &, const edm::EventSetup &) |
build deposits | |
virtual | ~CandIsoDepositProducer () |
destructor | |
Private Types | |
enum | TrackType { FakeT, BestT, StandAloneMuonT, CombinedMuonT, TrackT, GsfT, CandidateT } |
Private Member Functions | |
const reco::Track * | extractTrack (const reco::Candidate &cand, reco::Track *dummyStorage) const |
Private Attributes | |
edm::InputTag | theCandCollectionTag |
edm::ParameterSet | theConfig |
std::vector< std::string > | theDepositNames |
reco::isodeposit::IsoDepositExtractor * | theExtractor |
bool | theMultipleDepositsFlag |
TrackType | theTrackType |
Definition at line 19 of file CandIsoDepositProducer.h.
enum CandIsoDepositProducer::TrackType [private] |
Definition at line 30 of file CandIsoDepositProducer.h.
00030 { FakeT, BestT, StandAloneMuonT, CombinedMuonT, TrackT, GsfT, CandidateT };
CandIsoDepositProducer::CandIsoDepositProducer | ( | const edm::ParameterSet & | par | ) |
constructor with config
Definition at line 34 of file CandIsoDepositProducer.cc.
References BestT, CandidateT, CombinedMuonT, Exception, FakeT, DBSPlugin::get(), edm::ParameterSet::getParameter(), GsfT, LogDebug, StandAloneMuonT, theConfig, theDepositNames, theExtractor, theMultipleDepositsFlag, theTrackType, and TrackT.
00034 : 00035 theConfig(par), 00036 theCandCollectionTag(par.getParameter<edm::InputTag>("src")), 00037 theDepositNames(std::vector<std::string>(1,"")), 00038 theMultipleDepositsFlag(par.getParameter<bool>("MultipleDepositsFlag")), 00039 theExtractor(0) 00040 { 00041 LogDebug("PhysicsTools|MuonIsolation")<<" CandIsoDepositProducer CTOR"; 00042 00043 edm::ParameterSet extractorPSet = theConfig.getParameter<edm::ParameterSet>("ExtractorPSet"); 00044 std::string extractorName = extractorPSet.getParameter<std::string>("ComponentName"); 00045 theExtractor = IsoDepositExtractorFactory::get()->create( extractorName, extractorPSet); 00046 00047 if (! theMultipleDepositsFlag) produces<reco::IsoDepositMap>(); 00048 else { 00049 theDepositNames = extractorPSet.getParameter<std::vector<std::string> >("DepositInstanceLabels"); 00050 if (theDepositNames.size() > 10) throw cms::Exception("Configuration Error") << "This module supports only up to 10 deposits"; 00051 for (uint iDep=0; iDep<theDepositNames.size(); ++iDep){ 00052 produces<reco::IsoDepositMap>(theDepositNames[iDep]); 00053 } 00054 } 00055 00056 std::string trackType = par.getParameter<std::string>("trackType"); 00057 if (trackType == "fake") theTrackType = FakeT; 00058 else if (trackType == "best") theTrackType = BestT; 00059 else if (trackType == "standAloneMuon") theTrackType = StandAloneMuonT; 00060 else if (trackType == "combinedMuon") theTrackType = CombinedMuonT; 00061 else if (trackType == "trackerMuon") theTrackType = TrackT; 00062 else if (trackType == "track") theTrackType = TrackT; 00063 else if (trackType == "gsf") theTrackType = GsfT; 00064 else if (trackType == "candidate") theTrackType = CandidateT; 00065 else throw cms::Exception("Error") << "Track type " << trackType << " not valid."; 00066 }
CandIsoDepositProducer::~CandIsoDepositProducer | ( | ) | [virtual] |
destructor
Definition at line 69 of file CandIsoDepositProducer.cc.
References LogDebug, and theExtractor.
00069 { 00070 LogDebug("PhysicsTools/CandIsoDepositProducer")<<" CandIsoDepositProducer DTOR"; 00071 delete theExtractor; 00072 }
const reco::Track * CandIsoDepositProducer::extractTrack | ( | const reco::Candidate & | cand, | |
reco::Track * | dummyStorage | |||
) | const [inline, private] |
Definition at line 74 of file CandIsoDepositProducer.cc.
References BestT, reco::RecoCandidate::bestTrack(), CandidateT, reco::Particle::charge(), reco::RecoCandidate::combinedMuon(), CombinedMuonT, Exception, FakeT, edm::Ref< C, T, F >::get(), GsfT, reco::RecoCandidate::gsfTrack(), reco::Particle::momentum(), reco::RecoCandidate::standAloneMuon(), StandAloneMuonT, theTrackType, reco::RecoCandidate::track(), TrackT, and reco::Particle::vertex().
Referenced by produce().
00074 { 00075 if (theTrackType == CandidateT) { 00076 return 0; 00077 } else if (theTrackType == FakeT) { 00078 *dummy = Track(10,10,c.vertex(),c.momentum(),c.charge(), reco::Track::CovarianceMatrix()); 00079 return dummy; 00080 } else { 00081 const RecoCandidate *rc = dynamic_cast<const RecoCandidate *>(&c); 00082 if (rc == 0) throw cms::Exception("Error") << " Candidate is not RecoCandidate: can't get a real track from it!"; 00083 switch (theTrackType) { 00084 case FakeT: break; // to avoid warning 00085 case CandidateT: break; // to avoid warning 00086 case BestT: return rc->bestTrack(); break; 00087 case StandAloneMuonT: return &*rc->standAloneMuon(); break; 00088 case CombinedMuonT: return &*rc->combinedMuon(); break; 00089 case TrackT: return &*rc->track(); break; 00090 case GsfT: return static_cast<const Track*>(rc->gsfTrack().get()); break; 00091 } 00092 return 0; 00093 } 00094 }
void CandIsoDepositProducer::produce | ( | edm::Event & | event, | |
const edm::EventSetup & | eventSetup | |||
) | [virtual] |
build deposits
OK, now we know how many deps for how many muons each we will create might linearize this at some point (lazy) do it in case some muons are there only
well, it is empty already by construction, but still
for(i<nMuons)
now fill in selectively
some debugging stuff
fill the maps here
for(iDep<nDeps)
if (nMuons>0)
Implements edm::EDProducer.
Definition at line 97 of file CandIsoDepositProducer.cc.
References begin, c, CandidateT, reco::isodeposit::IsoDepositExtractor::deposit(), reco::isodeposit::IsoDepositExtractor::deposits(), dummy, end, extractTrack(), edm::helper::Filler< Map >::fill(), i, edm::helper::Filler< Map >::insert(), LogTrace, edm::Event::put(), theCandCollectionTag, theDepositNames, theExtractor, theMultipleDepositsFlag, theTrackType, and track.
00097 { 00098 static const std::string metname = "CandIsoDepositProducer"; 00099 00100 edm::Handle< edm::View<reco::Candidate> > hCands; 00101 event.getByLabel(theCandCollectionTag, hCands); 00102 00103 uint nDeps = theMultipleDepositsFlag ? theDepositNames.size() : 1; 00104 00105 static const uint MAX_DEPS=10; 00106 std::auto_ptr<reco::IsoDepositMap> depMaps[MAX_DEPS]; 00107 00108 if (nDeps >10 ) LogError(metname)<<"Unable to handle more than 10 input deposits"; 00109 for (uint i =0;i<nDeps; ++i){ // check if nDeps > 10?? 00110 depMaps[i] = std::auto_ptr<reco::IsoDepositMap>(new reco::IsoDepositMap()); 00111 } 00112 00116 size_t nMuons = hCands->size(); 00117 if (nMuons > 0){ 00118 std::vector<std::vector<IsoDeposit> > deps2D(nDeps, std::vector<IsoDeposit>(nMuons)); 00119 00120 00121 Track dummy; 00122 for (size_t i=0; i< nMuons; ++i) { 00123 const Candidate &c = (*hCands)[i]; 00124 const Track *track = extractTrack(c, &dummy); 00125 if ((theTrackType != CandidateT) && (!track)) { 00126 edm::LogWarning("CandIsoDepositProducer") << "Candidate #"<<i<<" has no bestTrack(), it will produce no deposit"; 00127 reco::IsoDeposit emptyDep; 00128 for (size_t iDep=0;iDep<nDeps;++iDep) { 00129 deps2D[iDep][i] = emptyDep; 00130 } 00131 continue; 00132 } 00133 if (!theMultipleDepositsFlag){ 00134 IsoDeposit dep = ( ( theTrackType == CandidateT ) 00135 ? theExtractor->deposit(event, eventSetup, c) 00136 : theExtractor->deposit(event, eventSetup, *track) ); 00137 deps2D[0][i] = dep; 00138 } else { 00139 std::vector<IsoDeposit> deps = ( ( theTrackType == CandidateT ) 00140 ? theExtractor->deposits(event, eventSetup, c) 00141 : theExtractor->deposits(event, eventSetup, *track) ); 00142 for (uint iDep=0; iDep < nDeps; ++iDep){ deps2D[iDep][i] = deps[iDep]; } 00143 } 00144 } 00145 00146 00148 for (uint iDep=0; iDep < nDeps; ++iDep){ 00150 for (uint iMu = 0; iMu< nMuons; ++iMu){ 00151 LogTrace(metname)<<"Contents of "<<theDepositNames[iDep] 00152 <<" for a muon at index "<<iMu; 00153 LogTrace(metname)<<deps2D[iDep][iMu].print(); 00154 } 00155 00157 reco::IsoDepositMap::Filler filler(*depMaps[iDep]); 00158 filler.insert(hCands, deps2D[iDep].begin(), deps2D[iDep].end()); 00159 filler.fill(); 00160 } 00161 } 00162 00163 for (uint iMap = 0; iMap < nDeps; ++iMap) event.put(depMaps[iMap], theDepositNames[iMap]); 00164 }
std::vector<std::string> CandIsoDepositProducer::theDepositNames [private] |
Definition at line 34 of file CandIsoDepositProducer.h.
Referenced by CandIsoDepositProducer(), and produce().
Definition at line 36 of file CandIsoDepositProducer.h.
Referenced by CandIsoDepositProducer(), produce(), and ~CandIsoDepositProducer().
Definition at line 35 of file CandIsoDepositProducer.h.
Referenced by CandIsoDepositProducer(), and produce().
Definition at line 33 of file CandIsoDepositProducer.h.
Referenced by CandIsoDepositProducer(), extractTrack(), and produce().