CMS 3D CMS Logo

CandIsoDepositProducer Class Reference

#include <PhysicsTools/IsolationAlgos/plugins/CandIsoDepositProducer.h>

Inheritance diagram for CandIsoDepositProducer:

edm::EDProducer edm::ProducerBase edm::ProductRegistryHelper

List of all members.

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::TrackextractTrack (const reco::Candidate &cand, reco::Track *dummyStorage) const

Private Attributes

edm::InputTag theCandCollectionTag
edm::ParameterSet theConfig
std::vector< std::string > theDepositNames
reco::isodeposit::IsoDepositExtractortheExtractor
bool theMultipleDepositsFlag
TrackType theTrackType


Detailed Description

Definition at line 19 of file CandIsoDepositProducer.h.


Member Enumeration Documentation

enum CandIsoDepositProducer::TrackType [private]

Enumerator:
FakeT 
BestT 
StandAloneMuonT 
CombinedMuonT 
TrackT 
GsfT 
CandidateT 

Definition at line 30 of file CandIsoDepositProducer.h.


Constructor & Destructor Documentation

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 }


Member Function Documentation

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 }


Member Data Documentation

edm::InputTag CandIsoDepositProducer::theCandCollectionTag [private]

Definition at line 32 of file CandIsoDepositProducer.h.

Referenced by produce().

edm::ParameterSet CandIsoDepositProducer::theConfig [private]

Definition at line 31 of file CandIsoDepositProducer.h.

Referenced by CandIsoDepositProducer().

std::vector<std::string> CandIsoDepositProducer::theDepositNames [private]

Definition at line 34 of file CandIsoDepositProducer.h.

Referenced by CandIsoDepositProducer(), and produce().

reco::isodeposit::IsoDepositExtractor* CandIsoDepositProducer::theExtractor [private]

Definition at line 36 of file CandIsoDepositProducer.h.

Referenced by CandIsoDepositProducer(), produce(), and ~CandIsoDepositProducer().

bool CandIsoDepositProducer::theMultipleDepositsFlag [private]

Definition at line 35 of file CandIsoDepositProducer.h.

Referenced by CandIsoDepositProducer(), and produce().

TrackType CandIsoDepositProducer::theTrackType [private]

Definition at line 33 of file CandIsoDepositProducer.h.

Referenced by CandIsoDepositProducer(), extractTrack(), and produce().


The documentation for this class was generated from the following files:
Generated on Tue Jun 9 18:16:04 2009 for CMSSW by  doxygen 1.5.4