CMS 3D CMS Logo

MixingWorker.h
Go to the documentation of this file.
1 #ifndef MixingWorker_h
2 #define MixingWorker_h
3 
19 
24 
29 
30 #include <memory>
31 #include <vector>
32 #include <string>
33 #include <typeinfo>
34 #include "MixingWorkerBase.h"
35 
36 class SimTrack;
37 class SimVertex;
38 namespace edm {
39  template <class T>
40  class MixingWorker : public MixingWorkerBase {
41  public:
43  explicit MixingWorker()
44  : minBunch_(-5),
45  maxBunch_(3),
46  bunchSpace_(75),
47  subdet_(std::string(" ")),
48  label_(std::string(" ")),
49  labelCF_(std::string(" ")),
50  maxNbSources_(5),
52  tag_(),
53  tagSignal_(),
54  allTags_(),
55  crFrame_(nullptr) {}
56 
57  /*Normal constructor*/
59  int maxBunch,
60  int bunchSpace,
61  std::string subdet,
63  std::string labelCF,
64  int maxNbSources,
65  InputTag &tag,
66  InputTag &tagCF,
67  bool makePCrossingFrame = false)
68  : MixingWorkerBase(),
71  bunchSpace_(bunchSpace),
72  subdet_(subdet),
73  label_(label),
74  labelCF_(labelCF),
75  maxNbSources_(maxNbSources),
76  makePCrossingFrame_(makePCrossingFrame),
77  tag_(tag),
78  tagSignal_(tagCF),
79  allTags_(),
80  crFrame_(nullptr) {}
81 
82  /*constructor for HepMCproduct case*/
84  int maxBunch,
85  int bunchSpace,
86  std::string subdet,
88  std::string labelCF,
89  int maxNbSources,
90  InputTag &tag,
91  InputTag &tagCF,
92  std::vector<InputTag> const &tags)
93  : MixingWorkerBase(),
96  bunchSpace_(bunchSpace),
97  subdet_(subdet),
98  label_(label),
99  labelCF_(labelCF),
100  maxNbSources_(maxNbSources),
102  tag_(tag),
103  tagSignal_(tagCF),
104  allTags_(tags),
105  crFrame_(nullptr) {}
106 
108  ~MixingWorker() override { ; }
109 
110  public:
111  void reload(const edm::EventSetup &setup) override {
112  // TODO for esConsumes migration: assume for now this function is mostly unused
113  //get the required parameters from DB.
114  // watch the label/tag
116  setup.get<MixingRcd>().get(config);
117  minBunch_ = config->minBunch();
118  maxBunch_ = config->maxBunch();
119  bunchSpace_ = config->bunchSpace();
120  }
121 
122  bool checkSignal(const edm::Event &e) override {
123  bool got;
124  InputTag t;
125  edm::Handle<std::vector<T> > result_t;
126  got = e.getByLabel(tag_, result_t);
127  t = InputTag(tag_.label(), tag_.instance());
128 
129  if (got)
130  LogInfo("MixingModule") << " Will create a CrossingFrame for " << typeid(T).name()
131  << " with InputTag= " << t.encode();
132 
133  return got;
134  }
135 
136  void createnewEDProduct() override {
137  crFrame_ = std::make_unique<CrossingFrame<T> >(minBunch_, maxBunch_, bunchSpace_, subdet_, maxNbSources_);
138  }
139 
140  void addSignals(const edm::Event &e) override {
141  edm::Handle<std::vector<T> > result_t;
142  bool got = e.getByLabel(tag_, result_t);
143  if (got) {
144  LogDebug("MixingModule") << " adding " << result_t.product()->size() << " signal objects for "
145  << typeid(T).name() << " with " << tag_;
146  crFrame_->addSignals(result_t.product(), e.id());
147  } else {
148  LogInfo("MixingModule") << "!!!!!!! Did not get any signal data for " << typeid(T).name() << ", with " << tag_;
149  }
150  }
151 
152  void addPileups(const EventPrincipal &ep, ModuleCallingContext const *, unsigned int eventNr) override;
153 
154  void setBcrOffset() override { crFrame_->setBcrOffset(); }
155  void setSourceOffset(const unsigned int s) override { crFrame_->setSourceOffset(s); }
156 
157  void setTof() override;
158 
159  void put(edm::Event &e) override {
160  if (makePCrossingFrame_) {
161  e.put(std::make_unique<PCrossingFrame<T> >(*crFrame_), label_);
162  }
163  e.put(std::move(crFrame_), label_);
164  LogDebug("MixingModule") << " CF was put for type " << typeid(T).name() << " with " << label_;
165  }
166 
167  // When using mixed secondary source
168  // Copy the data from the PCrossingFrame to the CrossingFrame
169  virtual void copyPCrossingFrame(const PCrossingFrame<T> *PCF);
170 
171  private:
178  unsigned int const maxNbSources_;
182  std::vector<InputTag> allTags_; // for HepMCProduct
183 
184  std::unique_ptr<CrossingFrame<T> > crFrame_;
185  };
186 
187  template <typename T>
188  void MixingWorker<T>::addPileups(const EventPrincipal &ep, ModuleCallingContext const *mcc, unsigned int eventNr) {
189  std::shared_ptr<Wrapper<std::vector<T> > const> shPtr = getProductByTag<std::vector<T> >(ep, tag_, mcc);
190  if (shPtr) {
191  LogDebug("MixingModule") << shPtr->product()->size() << " pileup objects added, eventNr " << eventNr;
192  crFrame_->setPileupPtr(shPtr);
193  crFrame_->addPileups(*shPtr->product());
194  }
195  }
196  //=============== template specializations ====================================================================================
197 
198  template <>
200  ModuleCallingContext const *,
201  unsigned int eventNr);
202 
203  template <class T>
205  ;
206  }
207 
208  template <class T>
210  crFrame_->setBunchRange(PCF->getBunchRange());
211  crFrame_->setBunchSpace(PCF->getBunchSpace());
212  crFrame_->setMaxNbSources(PCF->getMaxNbSources());
213  crFrame_->setSubDet(PCF->getSubDet());
214  crFrame_->setPileupOffsetsBcr(PCF->getPileupOffsetsBcr());
215  crFrame_->setPileupOffsetsSource(PCF->getPileupOffsetsSource());
216  crFrame_->setPileups(PCF->getPileups());
217 
218  // For playback option
219  crFrame_->setPileupFileNr(PCF->getPileupFileNr());
220  crFrame_->setIdFirstPileup(PCF->getIdFirstPileup());
221  }
222 
223 } // namespace edm
224 
225 #endif
edm::MixingWorker::MixingWorker
MixingWorker()
Definition: MixingWorker.h:43
Handle.h
edm::MixingWorker::setSourceOffset
void setSourceOffset(const unsigned int s) override
Definition: MixingWorker.h:155
MixingRcd
Definition: MixingRcd.h:24
edm::MixingWorker::~MixingWorker
~MixingWorker() override
Definition: MixingWorker.h:108
SimVertex
Definition: SimVertex.h:5
PCrossingFrame::getBunchSpace
int getBunchSpace() const
Definition: PCrossingFrame.h:37
funct::false
false
Definition: Factorize.h:29
edm::Handle::product
T const * product() const
Definition: Handle.h:70
edm::InputTag::instance
std::string const & instance() const
Definition: InputTag.h:37
ESHandle.h
MixingModule_cfi.maxBunch
maxBunch
Definition: MixingModule_cfi.py:42
edm::MixingWorker::tag_
InputTag tag_
Definition: MixingWorker.h:180
edm::MixingWorker::tagSignal_
InputTag tagSignal_
Definition: MixingWorker.h:181
MixingModuleConfig.h
edm
HLT enums.
Definition: AlignableModifier.h:19
CrossingFrame.h
PSimHitContainer.h
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89301
PCrossingFrame
Definition: CrossingFrame.h:27
edm::MixingWorker::maxBunch_
int maxBunch_
Definition: MixingWorker.h:173
edm::MixingWorker::labelCF_
const std::string labelCF_
Definition: MixingWorker.h:177
edm::MixingWorker::setBcrOffset
void setBcrOffset() override
Definition: MixingWorker.h:154
edm::MixingWorker::createnewEDProduct
void createnewEDProduct() override
Definition: MixingWorker.h:136
edm::LogInfo
Log< level::Info, false > LogInfo
Definition: MessageLogger.h:125
edm::Handle
Definition: AssociativeIterator.h:50
edm::MixingWorker
Definition: MixingWorker.h:40
singleTopDQM_cfi.setup
setup
Definition: singleTopDQM_cfi.py:37
PCrossingFrame::getMaxNbSources
unsigned int getMaxNbSources() const
Definition: PCrossingFrame.h:38
edm::MixingWorker::subdet_
const std::string subdet_
Definition: MixingWorker.h:175
edm::MixingWorker::setTof
void setTof() override
Definition: MixingWorker.h:204
config
Definition: config.py:1
edm::InputTag::label
std::string const & label() const
Definition: InputTag.h:36
edm::MixingWorker::addSignals
void addSignals(const edm::Event &e) override
Definition: MixingWorker.h:140
alignCSCRings.s
s
Definition: alignCSCRings.py:92
edm::MixingWorker::makePCrossingFrame_
const bool makePCrossingFrame_
Definition: MixingWorker.h:179
edm::MixingWorker::crFrame_
std::unique_ptr< CrossingFrame< T > > crFrame_
Definition: MixingWorker.h:184
edm::EventPrincipal
Definition: EventPrincipal.h:48
EventPrincipal.h
PCrossingFrame::getPileupFileNr
unsigned int getPileupFileNr() const
Definition: PCrossingFrame.h:40
submitPVResolutionJobs.config
config
parse the configuration file
Definition: submitPVResolutionJobs.py:281
PCrossingFrame::getBunchRange
std::pair< int, int > getBunchRange() const
Definition: PCrossingFrame.h:46
edm::ESHandle
Definition: DTSurvey.h:22
PCrossingFrame::getPileupOffsetsBcr
const std::vector< unsigned int > & getPileupOffsetsBcr() const
Definition: PCrossingFrame.h:42
edm::MixingWorker::MixingWorker
MixingWorker(int minBunch, int maxBunch, int bunchSpace, std::string subdet, std::string label, std::string labelCF, int maxNbSources, InputTag &tag, InputTag &tagCF, std::vector< InputTag > const &tags)
Definition: MixingWorker.h:83
edm::MixingWorker::put
void put(edm::Event &e) override
Definition: MixingWorker.h:159
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:233
Event.h
makeGlobalPositionRcd_cfg.tag
tag
Definition: makeGlobalPositionRcd_cfg.py:6
PCrossingFrame.h
edm::get
T const & get(Event const &event, InputTag const &tag) noexcept(false)
Definition: Event.h:679
MixingRcd.h
MixingWorkerBase.h
edm::MixingWorker::bunchSpace_
int bunchSpace_
Definition: MixingWorker.h:174
edm::MixingWorker::minBunch_
int minBunch_
Definition: MixingWorker.h:172
PCrossingFrame::getSubDet
std::string getSubDet() const
Definition: PCrossingFrame.h:39
edm::EventSetup
Definition: EventSetup.h:58
PCrossingFrame::getIdFirstPileup
edm::EventID getIdFirstPileup() const
Definition: PCrossingFrame.h:41
edm::MixingWorker::label_
const std::string label_
Definition: MixingWorker.h:176
AlCaHLTBitMon_QueryRunRegistry.string
string string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
edm::MixingWorker::reload
void reload(const edm::EventSetup &setup) override
Definition: MixingWorker.h:111
InputTag.h
edm::MixingWorker::copyPCrossingFrame
virtual void copyPCrossingFrame(const PCrossingFrame< T > *PCF)
Definition: MixingWorker.h:209
Wrapper.h
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
edm::MixingWorkerBase
Definition: MixingWorkerBase.h:28
edm::MixingWorker::allTags_
std::vector< InputTag > allTags_
Definition: MixingWorker.h:182
SimTrack
Definition: SimTrack.h:9
T
long double T
Definition: Basic3DVectorLD.h:48
PCrossingFrame::getPileups
std::vector< const T * > getPileups() const
Definition: PCrossingFrame.h:30
Skims_PA_cff.name
name
Definition: Skims_PA_cff.py:17
EventSetup.h
MixingModule_cfi.minBunch
minBunch
Definition: MixingModule_cfi.py:43
edm::MixingWorker::checkSignal
bool checkSignal(const edm::Event &e) override
Definition: MixingWorker.h:122
triggerMatcherToHLTDebug_cfi.tags
tags
Definition: triggerMatcherToHLTDebug_cfi.py:9
edm::MixingWorker::maxNbSources_
unsigned const int maxNbSources_
Definition: MixingWorker.h:178
edm::MixingWorker::MixingWorker
MixingWorker(int minBunch, int maxBunch, int bunchSpace, std::string subdet, std::string label, std::string labelCF, int maxNbSources, InputTag &tag, InputTag &tagCF, bool makePCrossingFrame=false)
Definition: MixingWorker.h:58
edm::MixingWorker::addPileups
void addPileups(const EventPrincipal &ep, ModuleCallingContext const *, unsigned int eventNr) override
Definition: MixingWorker.h:188
edm::Event
Definition: Event.h:73
submitPVValidationJobs.t
string t
Definition: submitPVValidationJobs.py:644
PCrossingFrame::getPileupOffsetsSource
const std::vector< std::vector< unsigned int > > & getPileupOffsetsSource() const
Definition: PCrossingFrame.h:43
SiStripBadComponentsDQMServiceTemplate_cfg.ep
ep
Definition: SiStripBadComponentsDQMServiceTemplate_cfg.py:86
edm::InputTag
Definition: InputTag.h:15
label
const char * label
Definition: PFTauDecayModeTools.cc:11
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37
edm::ModuleCallingContext
Definition: ModuleCallingContext.h:29