CMS 3D CMS Logo

List of all members | Public Member Functions | Private Types | Private Member Functions | Private Attributes
CandIsoDepositProducer Class Reference

#include <CandIsoDepositProducer.h>

Inheritance diagram for CandIsoDepositProducer:
edm::stream::EDProducer<>

Public Member Functions

 CandIsoDepositProducer (const edm::ParameterSet &)
 constructor with config More...
 
void produce (edm::Event &, const edm::EventSetup &) override
 build deposits More...
 
 ~CandIsoDepositProducer () override
 destructor More...
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
bool hasAbilityToProduceInLumis () const final
 
bool hasAbilityToProduceInRuns () const final
 

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::EDGetTokenT< edm::View< reco::Candidate > > theCandCollectionToken
 
edm::ParameterSet theConfig
 
std::vector< std::string > theDepositNames
 
std::unique_ptr< reco::isodeposit::IsoDepositExtractortheExtractor
 
bool theMultipleDepositsFlag
 
TrackType theTrackType
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
typedef CacheContexts< T... > CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T... > HasAbility
 
typedef CacheTypes::LuminosityBlockCache LuminosityBlockCache
 
typedef LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCacheLuminosityBlockContext
 
typedef CacheTypes::LuminosityBlockSummaryCache LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache, GlobalCacheRunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 

Detailed Description

Definition at line 20 of file CandIsoDepositProducer.h.

Member Enumeration Documentation

Constructor & Destructor Documentation

CandIsoDepositProducer::CandIsoDepositProducer ( const edm::ParameterSet par)

constructor with config

Definition at line 33 of file CandIsoDepositProducer.cc.

References BestT, CandidateT, CombinedMuonT, Exception, FakeT, reco::get(), edm::ParameterSet::getParameter(), GsfT, LogDebug, StandAloneMuonT, AlCaHLTBitMon_QueryRunRegistry::string, theConfig, theDepositNames, theExtractor, theMultipleDepositsFlag, theTrackType, TrackT, and tkIsoDeposits_cff::trackType.

33  :
34  theConfig(par),
36  theDepositNames(std::vector<std::string>(1,"")),
37  theMultipleDepositsFlag(par.getParameter<bool>("MultipleDepositsFlag"))
38  {
39  LogDebug("PhysicsTools|MuonIsolation")<<" CandIsoDepositProducer CTOR";
40 
41  edm::ParameterSet extractorPSet = theConfig.getParameter<edm::ParameterSet>("ExtractorPSet");
42  std::string extractorName = extractorPSet.getParameter<std::string>("ComponentName");
43  theExtractor = std::unique_ptr<reco::isodeposit::IsoDepositExtractor>{IsoDepositExtractorFactory::get()->create( extractorName, extractorPSet, consumesCollector())};
44 
45  if (! theMultipleDepositsFlag) produces<reco::IsoDepositMap>();
46  else {
47  theDepositNames = extractorPSet.getParameter<std::vector<std::string> >("DepositInstanceLabels");
48  if (theDepositNames.size() > 10) throw cms::Exception("Configuration Error") << "This module supports only up to 10 deposits";
49  for (unsigned int iDep=0; iDep<theDepositNames.size(); ++iDep){
50  produces<reco::IsoDepositMap>(theDepositNames[iDep]);
51  }
52  }
53 
54  std::string trackType = par.getParameter<std::string>("trackType");
55  if (trackType == "fake") theTrackType = FakeT;
56  else if (trackType == "best") theTrackType = BestT;
57  else if (trackType == "standAloneMuon") theTrackType = StandAloneMuonT;
58  else if (trackType == "combinedMuon") theTrackType = CombinedMuonT;
59  else if (trackType == "trackerMuon") theTrackType = TrackT;
60  else if (trackType == "track") theTrackType = TrackT;
61  else if (trackType == "gsf") theTrackType = GsfT;
62  else if (trackType == "candidate") theTrackType = CandidateT;
63  else throw cms::Exception("Error") << "Track type " << trackType << " not valid.";
64 }
#define LogDebug(id)
T getParameter(std::string const &) const
std::vector< std::string > theDepositNames
std::unique_ptr< reco::isodeposit::IsoDepositExtractor > theExtractor
edm::EDGetTokenT< edm::View< reco::Candidate > > theCandCollectionToken
T get(const Candidate &c)
Definition: component.h:55
CandIsoDepositProducer::~CandIsoDepositProducer ( )
override

destructor

Definition at line 67 of file CandIsoDepositProducer.cc.

References LogDebug.

67  {
68  LogDebug("PhysicsTools/CandIsoDepositProducer")<<" CandIsoDepositProducer DTOR";
69 }
#define LogDebug(id)

Member Function Documentation

const reco::Track * CandIsoDepositProducer::extractTrack ( const reco::Candidate cand,
reco::Track dummyStorage 
) const
inlineprivate

Definition at line 71 of file CandIsoDepositProducer.cc.

References BestT, reco::RecoCandidate::bestTrack(), EnergyCorrector::c, CandidateT, reco::Candidate::charge(), reco::RecoCandidate::combinedMuon(), CombinedMuonT, Exception, FakeT, edm::Ref< C, T, F >::get(), GsfT, reco::RecoCandidate::gsfTrack(), reco::Candidate::momentum(), reco::RecoCandidate::standAloneMuon(), StandAloneMuonT, theTrackType, reco::RecoCandidate::track(), TrackT, and reco::Candidate::vertex().

Referenced by produce().

71  {
72  if (theTrackType == CandidateT) {
73  return nullptr;
74  } else if (theTrackType == FakeT) {
75  *dummy = Track(10,10,c.vertex(),c.momentum(),c.charge(), reco::Track::CovarianceMatrix());
76  return dummy;
77  } else {
78  const RecoCandidate *rc = dynamic_cast<const RecoCandidate *>(&c);
79  if (rc == nullptr) throw cms::Exception("Error") << " Candidate is not RecoCandidate: can't get a real track from it!";
80  switch (theTrackType) {
81  case FakeT: break; // to avoid warning
82  case CandidateT: break; // to avoid warning
83  case BestT: return rc->bestTrack(); break;
84  case StandAloneMuonT: return &*rc->standAloneMuon(); break;
85  case CombinedMuonT: return &*rc->combinedMuon(); break;
86  case TrackT: return &*rc->track(); break;
87  case GsfT: return static_cast<const Track*>(rc->gsfTrack().get()); break;
88  }
89  return nullptr;
90  }
91 }
virtual reco::GsfTrackRef gsfTrack() const
reference to a GsfTrack
virtual reco::TrackRef standAloneMuon() const
reference to a stand-alone muon Track
virtual reco::TrackRef track() const
reference to a Track
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:243
const Track * bestTrack() const override
best track pointer
math::Error< dimension >::type CovarianceMatrix
5 parameter covariance matrix
Definition: TrackBase.h:77
virtual reco::TrackRef combinedMuon() const
reference to a stand-alone muon Track
void CandIsoDepositProducer::produce ( edm::Event event,
const edm::EventSetup eventSetup 
)
override

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)

Definition at line 94 of file CandIsoDepositProducer.cc.

References begin, EnergyCorrector::c, CandidateT, DEFINE_FWK_MODULE, symbols::deps, end, extractTrack(), objects.autophobj::filler, mps_fire::i, LogTrace, metname, eostools::move(), jets_cff::nMuons, AlCaHLTBitMon_QueryRunRegistry::string, theCandCollectionToken, theDepositNames, theExtractor, theMultipleDepositsFlag, theTrackType, and HiIsolationCommonParameters_cff::track.

94  {
95  static const std::string metname = "CandIsoDepositProducer";
96 
98  event.getByToken(theCandCollectionToken, hCands);
99 
100  unsigned int nDeps = theMultipleDepositsFlag ? theDepositNames.size() : 1;
101 
102  static const unsigned int MAX_DEPS=10;
103 
104  if (nDeps >MAX_DEPS ) LogError(metname)<<"Unable to handle more than 10 input deposits";
105 
109  size_t nMuons = hCands->size();
110  std::vector<std::vector<IsoDeposit> > deps2D(nDeps, std::vector<IsoDeposit>(nMuons));
111 
112  if (nMuons > 0){
113  theExtractor->initEvent(event, eventSetup);
114 
115  Track dummy;
116  for (size_t i=0; i< nMuons; ++i) {
117  const Candidate &c = (*hCands)[i];
118  const Track *track = extractTrack(c, &dummy);
119  if ((theTrackType != CandidateT) && (!track)) {
120  edm::LogWarning("CandIsoDepositProducer") << "Candidate #"<<i<<" has no bestTrack(), it will produce no deposit";
121  reco::IsoDeposit emptyDep;
122  for (size_t iDep=0;iDep<nDeps;++iDep) {
123  deps2D[iDep][i] = emptyDep;
124  }
125  continue;
126  }
128  deps2D[0][i] = ( ( theTrackType == CandidateT )
129  ? theExtractor->deposit(event, eventSetup, c)
130  : theExtractor->deposit(event, eventSetup, *track) );
131  } else {
132  std::vector<IsoDeposit> deps = ( ( theTrackType == CandidateT )
133  ? theExtractor->deposits(event, eventSetup, c)
134  : theExtractor->deposits(event, eventSetup, *track) );
135  for (unsigned int iDep=0; iDep < nDeps; ++iDep){ deps2D[iDep][i] = deps[iDep]; }
136  }
137  }
138  }//if (nMuons>0)
139 
141  for (unsigned int iDep=0; iDep < nDeps; ++iDep){
143  for (unsigned int iMu = 0; iMu< nMuons; ++iMu){
144  LogTrace(metname)<<"Contents of "<<theDepositNames[iDep]
145  <<" for a muon at index "<<iMu;
146  LogTrace(metname)<<deps2D[iDep][iMu].print();
147  }
148 
150  auto depMap = std::make_unique<reco::IsoDepositMap>();
152  filler.insert(hCands, deps2D[iDep].begin(), deps2D[iDep].end());
153  deps2D[iDep].clear();
154  filler.fill();
155  event.put(std::move(depMap), theDepositNames[iDep]);
156  }
157 
158 }
const std::string metname
std::vector< std::string > theDepositNames
const reco::Track * extractTrack(const reco::Candidate &cand, reco::Track *dummyStorage) const
#define end
Definition: vmac.h:39
std::unique_ptr< reco::isodeposit::IsoDepositExtractor > theExtractor
#define LogTrace(id)
edm::EDGetTokenT< edm::View< reco::Candidate > > theCandCollectionToken
#define begin
Definition: vmac.h:32
def move(src, dest)
Definition: eostools.py:511

Member Data Documentation

edm::EDGetTokenT< edm::View<reco::Candidate> > CandIsoDepositProducer::theCandCollectionToken
private

Definition at line 33 of file CandIsoDepositProducer.h.

Referenced by produce().

edm::ParameterSet CandIsoDepositProducer::theConfig
private

Definition at line 32 of file CandIsoDepositProducer.h.

Referenced by CandIsoDepositProducer().

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

Definition at line 35 of file CandIsoDepositProducer.h.

Referenced by CandIsoDepositProducer(), and produce().

std::unique_ptr<reco::isodeposit::IsoDepositExtractor> CandIsoDepositProducer::theExtractor
private

Definition at line 37 of file CandIsoDepositProducer.h.

Referenced by CandIsoDepositProducer(), and produce().

bool CandIsoDepositProducer::theMultipleDepositsFlag
private

Definition at line 36 of file CandIsoDepositProducer.h.

Referenced by CandIsoDepositProducer(), and produce().

TrackType CandIsoDepositProducer::theTrackType
private

Definition at line 34 of file CandIsoDepositProducer.h.

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