CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Types | Public Member Functions | Private Member Functions | Private Attributes
edm::MixingModule Class Reference

#include <MixingModule.h>

Inheritance diagram for edm::MixingModule:
edm::BMixingModule edm::one::EDProducer< edm::one::SharedResources, edm::one::WatchRuns, edm::one::WatchLuminosityBlocks > edm::one::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Types

typedef std::vector
< DigiAccumulatorMixMod * > 
Accumulators
 
- Public Types inherited from edm::one::EDProducerBase
typedef EDProducerBase ModuleType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 

Public Member Functions

void accumulateEvent (Event const &event, EventSetup const &setup)
 
void accumulateEvent (PileUpEventPrincipal const &event, EventSetup const &setup, edm::StreamID const &)
 
virtual void beginJob ()
 
virtual void beginLuminosityBlock (LuminosityBlock const &l1, EventSetup const &c) override
 
virtual void beginRun (Run const &r1, EventSetup const &c) override
 
virtual void endLuminosityBlock (LuminosityBlock const &l1, EventSetup const &c) override
 
virtual void endRun (Run const &r1, EventSetup const &c) override
 
void finalizeEvent (Event &event, EventSetup const &setup)
 
void initializeEvent (Event const &event, EventSetup const &setup)
 
 MixingModule (const edm::ParameterSet &ps)
 
virtual void reload (const edm::EventSetup &)
 
virtual ~MixingModule ()
 
- Public Member Functions inherited from edm::BMixingModule
virtual void addPileups (const int bcr, EventPrincipal *ep, unsigned int eventId, unsigned int worker, const edm::EventSetup &c)
 
double averageNumber () const
 
 BMixingModule (const edm::ParameterSet &ps)
 
bool poisson () const
 
virtual void produce (edm::Event &e1, const edm::EventSetup &c) override
 
virtual void setBcrOffset ()
 
virtual void setSourceOffset (const unsigned int s)
 
virtual ~BMixingModule ()
 
- Public Member Functions inherited from edm::one::EDProducer< edm::one::SharedResources, edm::one::WatchRuns, edm::one::WatchLuminosityBlocks >
 EDProducer ()=default
 
- Public Member Functions inherited from edm::one::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
virtual ~EDProducerBase ()
 
- Public Member Functions inherited from edm::ProducerBase
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription
const &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
virtual ~ProducerBase ()
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
 EDConsumerBase ()
 
ProductHolderIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
std::vector
< ProductHolderIndexAndSkipBit >
const & 
itemsToGetFromEvent () const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesDependentUpon (const std::string &iProcessName, std::vector< const char * > &oModuleLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
bool registeredToConsume (ProductHolderIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductHolderIndexHelper const &)
 
virtual ~EDConsumerBase ()
 

Private Member Functions

virtual void addSignals (const edm::Event &e, const edm::EventSetup &es)
 
virtual void branchesActivate (const std::string &friendlyName, const std::string &subdet, InputTag &tag, std::string &label)
 
virtual void checkSignal (const edm::Event &e)
 
void createDigiAccumulators (const edm::ParameterSet &mixingPSet, edm::ConsumesCollector &iC)
 
virtual void createnewEDProduct ()
 
virtual void doPileUp (edm::Event &e, const edm::EventSetup &es) override
 
void pileAllWorkers (EventPrincipal const &ep, ModuleCallingContext const *, int bcr, int id, int &offset, const edm::EventSetup &setup, edm::StreamID const &)
 
virtual void put (edm::Event &e, const edm::EventSetup &es)
 

Private Attributes

std::vector< AdjusterBase * > adjusters_
 
std::vector< AdjusterBase * > adjustersObjects_
 
Accumulators digiAccumulators_
 
InputTag inputTagPlayback_
 
bool mixProdStep1_
 
bool mixProdStep2_
 
CrossingFramePlaybackInfoNewplaybackInfo_
 
bool useCurrentProcessOnly_
 
std::vector< std::string > wantedBranches_
 
std::vector< MixingWorkerBase * > workers_
 
std::vector< MixingWorkerBase * > workersObjects_
 

Additional Inherited Members

- Static Public Member Functions inherited from edm::one::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::BMixingModule
void dropUnwantedBranches (std::vector< std::string > const &wantedBranches)
 
virtual void endJob () override
 
void setupPileUpEvent (const edm::EventSetup &setup)
 
void update (edm::EventSetup const &)
 
- Protected Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
- Protected Attributes inherited from edm::BMixingModule
int bunchSpace_
 
bool checktof_
 
bool doit_ [4]
 
unsigned int eventId_
 
std::vector< std::shared_ptr
< PileUp > > 
inputSources_
 
int maxBunch_
 
int minBunch_
 
bool const mixProdStep1_
 
bool const mixProdStep2_
 
edm::ESWatcher< MixingRcdparameterWatcher_
 
bool playback_
 
bool readDB_
 
std::vector< std::string > sourceNames_
 
std::vector< float > TrueNumInteractions_
 
int vertexOffset_
 
- Static Protected Attributes inherited from edm::BMixingModule
static const unsigned int maxNbSources_ =4
 

Detailed Description

Definition at line 49 of file MixingModule.h.

Member Typedef Documentation

Definition at line 51 of file MixingModule.h.

Constructor & Destructor Documentation

MixingModule::MixingModule ( const edm::ParameterSet ps)
explicit

standard constructor

Definition at line 40 of file MixingModule.cc.

References adjustersObjects_, edm::binary_search_all(), branchesActivate(), edm::BMixingModule::bunchSpace_, edm::EDConsumerBase::consumesCollector(), createDigiAccumulators(), edm::BMixingModule::dropUnwantedBranches(), edm::InputTag::encode(), edm::ParameterSet::exists(), edm::ParameterSet::getParameter(), edm::ParameterSet::getParameterNames(), edm::ParameterSet::getUntrackedParameter(), cuy::ii, HLT_25ns14e33_v1_cff::InputTag, inputTagPlayback_, edm::InputTag::instance(), edm::InputTag::kSkipCurrentProcess, diffTwoXMLs::label, LogDebug, edm::BMixingModule::maxBunch_, edm::BMixingModule::maxNbSources_, edm::BMixingModule::minBunch_, mixProdStep1_, mixProdStep2_, cscdqm::h::names, edm::BMixingModule::playback_, edm::sort_all(), AlCaHLTBitMon_QueryRunRegistry::string, subdets, GlobalPosition_Frontier_DevDB_cff::tag, o2o::tags, useCurrentProcessOnly_, wantedBranches_, and workersObjects_.

40  :
41  BMixingModule(ps_mix),
43  mixProdStep2_(ps_mix.getParameter<bool>("mixProdStep2")),
44  mixProdStep1_(ps_mix.getParameter<bool>("mixProdStep1")),
46  {
47  if (!mixProdStep1_ && !mixProdStep2_) LogInfo("MixingModule") << " The MixingModule was run in the Standard mode.";
48  if (mixProdStep1_) LogInfo("MixingModule") << " The MixingModule was run in the Step1 mode. It produces a mixed secondary source.";
49  if (mixProdStep2_) LogInfo("MixingModule") << " The MixingModule was run in the Step2 mode. It uses a mixed secondary source.";
50 
52  if (ps_mix.exists("useCurrentProcessOnly")) {
53  useCurrentProcessOnly_=ps_mix.getParameter<bool>("useCurrentProcessOnly");
54  LogInfo("MixingModule") <<" using given Parameter 'useCurrentProcessOnly' ="<<useCurrentProcessOnly_;
55  }
56  std::string labelPlayback;
57  if (ps_mix.exists("LabelPlayback")) {
58  labelPlayback = ps_mix.getParameter<std::string>("LabelPlayback");
59  }
60  if (labelPlayback.empty()) {
61  labelPlayback = ps_mix.getParameter<std::string>("@module_label");
62  }
63  if (playback_) {
65  consumes<CrossingFramePlaybackInfoNew>(inputTagPlayback_);
66  }
67 
68  ParameterSet ps=ps_mix.getParameter<ParameterSet>("mixObjects");
69  std::vector<std::string> names = ps.getParameterNames();
70  for(std::vector<std::string>::iterator it=names.begin();it!= names.end();++it) {
71  ParameterSet pset=ps.getParameter<ParameterSet>((*it));
72  if (!pset.exists("type")) continue; //to allow replacement by empty pset
73  std::string object = pset.getParameter<std::string>("type");
74  std::vector<InputTag> tags=pset.getParameter<std::vector<InputTag> >("input");
75 
76  //if (!mixProdStep2_) {
77 
78  InputTag tagCF = InputTag();
79  std::string labelCF = " ";
80 
81  if (object=="SimTrack") {
82  InputTag tag;
83  if (tags.size()>0) tag=tags[0];
85 
86  branchesActivate(TypeID(typeid(std::vector<SimTrack>)).friendlyClassName(),std::string(""),tag,label);
87  adjustersObjects_.push_back(new Adjuster<SimTrack>(tag));
88  bool makeCrossingFrame = pset.getUntrackedParameter<bool>("makeCrossingFrame", false);
89  if(makeCrossingFrame) {
91  produces<CrossingFrame<SimTrack> >(label);
92  consumes<std::vector<SimTrack> >(tag);
93  }
94 
95  LogInfo("MixingModule") <<"Will mix "<<object<<"s with InputTag= "<<tag.encode()<<", label will be "<<label;
96  // std::cout <<"Will mix "<<object<<"s with InputTag= "<<tag.encode()<<", label will be "<<label<<std::endl;
97 
98  } else if (object=="RecoTrack") {
99  InputTag tag;
100  if (tags.size()>0) tag=tags[0];
102 
103  branchesActivate(TypeID(typeid(std::vector<reco::Track>)).friendlyClassName(),std::string(""),tag,label);
104  branchesActivate(TypeID(typeid(std::vector<reco::TrackExtra>)).friendlyClassName(),std::string(""),tag,label);
105  branchesActivate(TypeID(typeid(edm::OwnVector<TrackingRecHit,edm::ClonePolicy<TrackingRecHit> >)).friendlyClassName(),std::string(""),tag,label);
106  // note: no crossing frame is foreseen to be used for this object type
107 
108  LogInfo("MixingModule") <<"Will mix "<<object<<"s with InputTag= "<<tag.encode()<<", label will be "<<label;
109  //std::cout <<"Will mix "<<object<<"s with InputTag= "<<tag.encode()<<", label will be "<<label<<std::endl;
110 
111  } else if (object=="SimVertex") {
112  InputTag tag;
113  if (tags.size()>0) tag=tags[0];
115 
116  branchesActivate(TypeID(typeid(std::vector<SimVertex>)).friendlyClassName(),std::string(""),tag,label);
117  adjustersObjects_.push_back(new Adjuster<SimVertex>(tag));
118  bool makeCrossingFrame = pset.getUntrackedParameter<bool>("makeCrossingFrame", false);
119  if(makeCrossingFrame) {
121  produces<CrossingFrame<SimVertex> >(label);
122  consumes<std::vector<SimVertex> >(tag);
123  }
124 
125  LogInfo("MixingModule") <<"Will mix "<<object<<"s with InputTag "<<tag.encode()<<", label will be "<<label;
126  // std::cout <<"Will mix "<<object<<"s with InputTag "<<tag.encode()<<", label will be "<<label<<std::endl;
127 
128  } else if (object=="HepMCProduct") {
129  InputTag tag;
130  if (tags.size()>0) tag=tags[0];
132 
133  branchesActivate(TypeID(typeid(HepMCProduct)).friendlyClassName(),std::string(""),tag,label);
134  bool makeCrossingFrame = pset.getUntrackedParameter<bool>("makeCrossingFrame", false);
135  if(makeCrossingFrame) {
137  produces<CrossingFrame<HepMCProduct> >(label);
138  }
139  consumes<HepMCProduct>(tag);
140 
141  LogInfo("MixingModule") <<"Will mix "<<object<<"s with InputTag= "<<tag.encode()<<", label will be "<<label;
142  // std::cout <<"Will mix "<<object<<"s with InputTag= "<<tag.encode()<<", label will be "<<label<<std::endl;
143 
144  } else if (object=="PCaloHit") {
145  std::vector<std::string> subdets=pset.getParameter<std::vector<std::string> >("subdets");
146  std::vector<std::string> crossingFrames=pset.getUntrackedParameter<std::vector<std::string> >("crossingFrames", std::vector<std::string>());
147  sort_all(crossingFrames);
148  for (unsigned int ii=0;ii<subdets.size();++ii) {
149  InputTag tag;
150  if (tags.size()==1) tag=tags[0];
151  else if(tags.size()>1) tag=tags[ii];
153 
154  branchesActivate(TypeID(typeid(std::vector<PCaloHit>)).friendlyClassName(),subdets[ii],tag,label);
155  adjustersObjects_.push_back(new Adjuster<PCaloHit>(tag));
156  if(binary_search_all(crossingFrames, tag.instance())) {
158  produces<CrossingFrame<PCaloHit> >(label);
159  consumes<std::vector<PCaloHit> >(tag);
160  }
161 
162  LogInfo("MixingModule") <<"Will mix "<<object<<"s with InputTag= "<<tag.encode()<<", label will be "<<label;
163  // std::cout <<"Will mix "<<object<<"s with InputTag= "<<tag.encode()<<", label will be "<<label<<std::endl;
164 
165  }
166 
167  } else if (object=="PSimHit") {
168  std::vector<std::string> subdets=pset.getParameter<std::vector<std::string> >("subdets");
169  std::vector<std::string> crossingFrames=pset.getUntrackedParameter<std::vector<std::string> >("crossingFrames", std::vector<std::string>());
170  sort_all(crossingFrames);
171  for (unsigned int ii=0;ii<subdets.size();++ii) {
172  InputTag tag;
173  if (tags.size()==1) tag=tags[0];
174  else if(tags.size()>1) tag=tags[ii];
176 
177  branchesActivate(TypeID(typeid(std::vector<PSimHit>)).friendlyClassName(),subdets[ii],tag,label);
178  adjustersObjects_.push_back(new Adjuster<PSimHit>(tag));
179  if(binary_search_all(crossingFrames, tag.instance())) {
181  produces<CrossingFrame<PSimHit> >(label);
182  consumes<std::vector<PSimHit> >(tag);
183  }
184 
185  LogInfo("MixingModule") <<"Will mix "<<object<<"s with InputTag= "<<tag.encode()<<", label will be "<<label;
186  // std::cout <<"Will mix "<<object<<"s with InputTag= "<<tag.encode()<<", label will be "<<label<<std::endl;
187  }
188  } else {
189  LogWarning("MixingModule") <<"You have asked to mix an unknown type of object("<<object<<").\n If you want to include it in mixing, please contact the authors of the MixingModule!";
190  }
191  //} //if for mixProdStep2
192  }//while over the mixObjects parameters
193 
195  for (unsigned int branch=0;branch<wantedBranches_.size();++branch) LogDebug("MixingModule")<<"Will keep branch "<<wantedBranches_[branch]<<" for mixing ";
196 
198 
199  produces<PileupMixingContent>();
200 
201  produces<CrossingFramePlaybackInfoNew>();
202 
204  // Create and configure digitizers
205  createDigiAccumulators(ps_mix, iC);
206  }
#define LogDebug(id)
T getParameter(std::string const &) const
static const HistoName names[]
void createDigiAccumulators(const edm::ParameterSet &mixingPSet, edm::ConsumesCollector &iC)
BMixingModule(const edm::ParameterSet &ps)
int ii
Definition: cuy.py:588
Accumulators digiAccumulators_
Definition: MixingModule.h:103
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
static const std::string kSkipCurrentProcess
Definition: InputTag.h:56
static const unsigned int maxNbSources_
Definition: BMixingModule.h:86
std::vector< MixingWorkerBase * > workersObjects_
Definition: MixingModule.h:98
char const * subdets[11]
virtual void branchesActivate(const std::string &friendlyName, const std::string &subdet, InputTag &tag, std::string &label)
tuple tags
Definition: o2o.py:248
void sort_all(RandomAccessSequence &s)
wrappers for std::sort
Definition: Algorithms.h:120
std::vector< std::string > wantedBranches_
Definition: MixingModule.h:99
std::vector< AdjusterBase * > adjustersObjects_
Definition: MixingModule.h:96
InputTag inputTagPlayback_
Definition: MixingModule.h:90
bool binary_search_all(ForwardSequence const &s, Datum const &d)
wrappers for std::binary_search
Definition: Algorithms.h:76
void dropUnwantedBranches(std::vector< std::string > const &wantedBranches)
MixingModule::~MixingModule ( )
virtual

Default destructor

Definition at line 276 of file MixingModule.cc.

References adjustersObjects_, digiAccumulators_, and workersObjects_.

276  {
277  for (auto& worker : workersObjects_) {
278  delete worker;
279  }
280 
281  for (auto& adjuster : adjustersObjects_) {
282  delete adjuster;
283  }
284 
285  for (auto& digiAccumulator : digiAccumulators_) {
286  delete digiAccumulator;
287  }
288  }
Accumulators digiAccumulators_
Definition: MixingModule.h:103
std::vector< MixingWorkerBase * > workersObjects_
Definition: MixingModule.h:98
std::vector< AdjusterBase * > adjustersObjects_
Definition: MixingModule.h:96

Member Function Documentation

void MixingModule::accumulateEvent ( edm::Event const &  event,
edm::EventSetup const &  setup 
)

Definition at line 542 of file MixingModule.cc.

References digiAccumulators_.

Referenced by addSignals(), and pileAllWorkers().

542  {
543  for(Accumulators::const_iterator accItr = digiAccumulators_.begin(), accEnd = digiAccumulators_.end(); accItr != accEnd; ++accItr) {
544  (*accItr)->accumulate(event, setup);
545  }
546  }
Accumulators digiAccumulators_
Definition: MixingModule.h:103
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")
void MixingModule::accumulateEvent ( PileUpEventPrincipal const &  event,
edm::EventSetup const &  setup,
edm::StreamID const &  streamID 
)

Definition at line 549 of file MixingModule.cc.

References digiAccumulators_.

549  {
550  for(Accumulators::const_iterator accItr = digiAccumulators_.begin(), accEnd = digiAccumulators_.end(); accItr != accEnd; ++accItr) {
551  (*accItr)->accumulate(event, setup, streamID);
552  }
553  }
Accumulators digiAccumulators_
Definition: MixingModule.h:103
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")
void MixingModule::addSignals ( const edm::Event e,
const edm::EventSetup es 
)
privatevirtual

Reimplemented from edm::BMixingModule.

Definition at line 290 of file MixingModule.cc.

References accumulateEvent(), edm::EventBase::id(), cuy::ii, LogDebug, and workers_.

290  {
291 
292  LogDebug("MixingModule")<<"===============> adding signals for "<<e.id();
293 
295  // fill in signal part of CrossingFrame
296  for (unsigned int ii=0;ii<workers_.size();++ii) {
297  workers_[ii]->addSignals(e);
298  }
299  }
#define LogDebug(id)
int ii
Definition: cuy.py:588
std::vector< MixingWorkerBase * > workers_
Definition: MixingModule.h:97
edm::EventID id() const
Definition: EventBase.h:60
void accumulateEvent(Event const &event, EventSetup const &setup)
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")
virtual void edm::MixingModule::beginJob ( void  )
inlinevirtual

Reimplemented from edm::BMixingModule.

Definition at line 59 of file MixingModule.h.

59 {}
void MixingModule::beginLuminosityBlock ( edm::LuminosityBlock const &  lumi,
edm::EventSetup const &  setup 
)
overridevirtual

Reimplemented from edm::BMixingModule.

Definition at line 520 of file MixingModule.cc.

References edm::BMixingModule::beginLuminosityBlock(), and digiAccumulators_.

520  {
521  for(Accumulators::const_iterator accItr = digiAccumulators_.begin(), accEnd = digiAccumulators_.end(); accItr != accEnd; ++accItr) {
522  (*accItr)->beginLuminosityBlock(lumi, setup);
523  }
525  }
tuple lumi
Definition: fjr2json.py:35
Accumulators digiAccumulators_
Definition: MixingModule.h:103
virtual void beginLuminosityBlock(const edm::LuminosityBlock &l, const edm::EventSetup &setup) override
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")
void MixingModule::beginRun ( edm::Run const &  run,
edm::EventSetup const &  setup 
)
overridevirtual

Reimplemented from edm::BMixingModule.

Definition at line 506 of file MixingModule.cc.

References edm::BMixingModule::beginRun(), and digiAccumulators_.

506  {
507  for(Accumulators::const_iterator accItr = digiAccumulators_.begin(), accEnd = digiAccumulators_.end(); accItr != accEnd; ++accItr) {
508  (*accItr)->beginRun(run, setup);
509  }
511  }
virtual void beginRun(const edm::Run &r, const edm::EventSetup &setup) override
Accumulators digiAccumulators_
Definition: MixingModule.h:103
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")
void MixingModule::branchesActivate ( const std::string &  friendlyName,
const std::string &  subdet,
InputTag tag,
std::string &  label 
)
privatevirtual

Definition at line 235 of file MixingModule.cc.

References EgammaHLTValidationUtils::getProcessName(), HLT_25ns14e33_v1_cff::InputTag, edm::InputTag::instance(), edm::InputTag::label(), FSQHLTOfflineSource_cfi::processName, AlCaHLTBitMon_QueryRunRegistry::string, useCurrentProcessOnly_, and wantedBranches_.

Referenced by MixingModule().

235  {
236 
237  label=tag.label()+tag.instance();
238  wantedBranches_.push_back(friendlyName + '_' +
239  tag.label() + '_' +
240  tag.instance());
241 
242  //if useCurrentProcessOnly, we have to change the input tag
245  tag = InputTag(tag.label(),tag.instance(),processName);
246  }
247  }
std::string friendlyName(std::string const &iFullName)
std::vector< std::string > wantedBranches_
Definition: MixingModule.h:99
void MixingModule::checkSignal ( const edm::Event e)
privatevirtual

Reimplemented from edm::BMixingModule.

Definition at line 249 of file MixingModule.cc.

References adjusters_, adjustersObjects_, workers_, and workersObjects_.

249  {
250  if (adjusters_.empty()){
251  for (auto const& adjuster : adjustersObjects_) {
252  if (adjuster->checkSignal(e)){
253  adjusters_.push_back(adjuster);
254  }
255  }
256  }
257  if (workers_.empty()){
258  for (auto const& worker : workersObjects_) {
259  if (worker->checkSignal(e)){
260  workers_.push_back(worker);
261  }
262  }
263  }
264  }
std::vector< MixingWorkerBase * > workers_
Definition: MixingModule.h:97
std::vector< AdjusterBase * > adjusters_
Definition: MixingModule.h:95
std::vector< MixingWorkerBase * > workersObjects_
Definition: MixingModule.h:98
std::vector< AdjusterBase * > adjustersObjects_
Definition: MixingModule.h:96
void MixingModule::createDigiAccumulators ( const edm::ParameterSet mixingPSet,
edm::ConsumesCollector iC 
)
private

Definition at line 209 of file MixingModule.cc.

References digiAccumulators_, edm::DigiAccumulatorMixModFactory::get(), edm::ParameterSet::getParameterNames(), edm::ParameterSet::getParameterSet(), and edm::DigiAccumulatorMixModFactory::makeDigiAccumulator().

Referenced by MixingModule().

209  {
210  ParameterSet const& digiPSet = mixingPSet.getParameterSet("digitizers");
211  std::vector<std::string> digiNames = digiPSet.getParameterNames();
212  for(auto const& digiName : digiNames) {
213  ParameterSet const& pset = digiPSet.getParameterSet(digiName);
214  std::auto_ptr<DigiAccumulatorMixMod> accumulator = std::auto_ptr<DigiAccumulatorMixMod>(DigiAccumulatorMixModFactory::get()->makeDigiAccumulator(pset, *this, iC));
215  // Create appropriate DigiAccumulator
216  if(accumulator.get() != 0) {
217  digiAccumulators_.push_back(accumulator.release());
218  }
219  }
220  }
std::auto_ptr< DigiAccumulatorMixMod > makeDigiAccumulator(ParameterSet const &, one::EDProducerBase &, ConsumesCollector &) const
Accumulators digiAccumulators_
Definition: MixingModule.h:103
ParameterSet const & getParameterSet(std::string const &) const
static DigiAccumulatorMixModFactory const * get()
void MixingModule::createnewEDProduct ( )
privatevirtual

Reimplemented from edm::BMixingModule.

Definition at line 266 of file MixingModule.cc.

References cuy::ii, edm::BMixingModule::maxBunch_, edm::BMixingModule::maxNbSources_, edm::BMixingModule::minBunch_, playbackInfo_, and workers_.

266  {
267  //create playback info
269  //and CrossingFrames
270  for (unsigned int ii=0;ii<workers_.size();++ii){
271  workers_[ii]->createnewEDProduct();
272  }
273  }
int ii
Definition: cuy.py:588
std::vector< MixingWorkerBase * > workers_
Definition: MixingModule.h:97
static const unsigned int maxNbSources_
Definition: BMixingModule.h:86
CrossingFramePlaybackInfoNew * playbackInfo_
Definition: MixingModule.h:93
void MixingModule::doPileUp ( edm::Event e,
const edm::EventSetup es 
)
overrideprivatevirtual

Reimplemented from edm::BMixingModule.

Definition at line 327 of file MixingModule.cc.

References begin, edm::BMixingModule::bunchSpace_, digiAccumulators_, end, edm::hlt::Exception, edm::Event::getByLabel(), edm::EventBase::id(), cuy::ii, edm::BMixingModule::inputSources_, inputTagPlayback_, edm::BMixingModule::maxBunch_, edm::BMixingModule::maxNbSources_, edm::BMixingModule::minBunch_, edm::Event::moduleCallingContext(), pileAllWorkers(), edm::BMixingModule::playback_, playbackInfo_, edm::Event::put(), CrossingFramePlaybackInfoNew::setInfo(), edm::source(), edm::Event::streamID(), edm::BMixingModule::TrueNumInteractions_, and workers_.

327  {
328  using namespace std::placeholders;
329 
330  // Don't allocate because PileUp will do it for us.
331  std::vector<edm::SecondaryEventIDAndFileInfo> recordEventID;
332  std::vector<size_t> sizes;
333  sizes.reserve(maxNbSources_*(maxBunch_ + 1 - minBunch_));
334  size_t playbackCounter = 0U;
336  edm::Handle<CrossingFramePlaybackInfoExtended> oldFormatPlaybackInfo_H;
337  bool oldFormatPlayback = false;
338  if (playback_) {
339  bool got = e.getByLabel(inputTagPlayback_, playbackInfo_H);
340  if (!got) {
341  bool gotOld = e.getByLabel(inputTagPlayback_, oldFormatPlaybackInfo_H);
342  if (!gotOld) {
343  throw cms::Exception("MixingProductNotFound") << " No "
344  "CrossingFramePlaybackInfoNew on the input file, but playback "
345  "option set!!!!! Please change the input file if you really want "
346  "playback!!!!!!" << std::endl;
347  }
348  oldFormatPlayback = true;
349  }
350  }
351 
352  // source[0] is "real" pileup. Check to see that this is what we are doing.
353 
354  std::vector<int> PileupList;
355  PileupList.clear();
356  TrueNumInteractions_.clear();
357 
358  std::shared_ptr<PileUp> source0 = inputSources_[0];
359 
360  if((source0 && source0->doPileUp(0) ) && !playback_) {
361  // if((!inputSources_[0] || !inputSources_[0]->doPileUp()) && !playback_ )
362 
363  // Pre-calculate all pileup distributions before we go fishing for events
364 
365  source0->CalculatePileup(minBunch_, maxBunch_, PileupList, TrueNumInteractions_, e.streamID());
366 
367  }
368 
369  // for (int bunchIdx = minBunch_; bunchIdx <= maxBunch_; ++bunchIdx) {
370  // std::cout << " bunch ID, Pileup, True " << bunchIdx << " " << PileupList[bunchIdx-minBunch_] << " " << TrueNumInteractions_[bunchIdx-minBunch_] << std::endl;
371  //}
372 
373  for (int bunchIdx = minBunch_; bunchIdx <= maxBunch_; ++bunchIdx) {
374  for (size_t setBcrIdx=0; setBcrIdx<workers_.size(); ++setBcrIdx) {
375  workers_[setBcrIdx]->setBcrOffset();
376  }
377  for(Accumulators::const_iterator accItr = digiAccumulators_.begin(), accEnd = digiAccumulators_.end(); accItr != accEnd; ++accItr) {
378  (*accItr)->initializeBunchCrossing(e, setup, bunchIdx);
379  }
380 
381  for (size_t readSrcIdx=0; readSrcIdx<maxNbSources_; ++readSrcIdx) {
382  std::shared_ptr<PileUp> source = inputSources_[readSrcIdx]; // this looks like we create
383  // new PileUp objects for each
384  // source for each event?
385  // Why?
386  for (size_t setSrcIdx=0; setSrcIdx<workers_.size(); ++setSrcIdx) {
387  workers_[setSrcIdx]->setSourceOffset(readSrcIdx);
388  }
389 
390  if (!source || !source->doPileUp(bunchIdx)) {
391  sizes.push_back(0U);
392  if(playback_ && !oldFormatPlayback) {
393  playbackCounter += playbackInfo_H->getNumberOfEvents(bunchIdx, readSrcIdx);
394  }
395  continue;
396  }
397 
398  // int eventId = 0;
399  int vertexOffset = 0;
400 
401  ModuleCallingContext const* mcc = e.moduleCallingContext();
402  if (!playback_) {
403  // non-minbias pileup only gets one event for now. Fix later if desired.
404  int numberOfEvents = (readSrcIdx == 0 ? PileupList[bunchIdx - minBunch_] : 1);
405  sizes.push_back(numberOfEvents);
406  inputSources_[readSrcIdx]->readPileUp(e.id(), recordEventID,
407  std::bind(&MixingModule::pileAllWorkers, std::ref(*this), _1, mcc, bunchIdx,
408  _2, vertexOffset, std::ref(setup), e.streamID()), numberOfEvents, e.streamID());
409  } else if(oldFormatPlayback) {
410  std::vector<edm::EventID> const& playEventID = oldFormatPlaybackInfo_H->getStartEventId(readSrcIdx, bunchIdx);
411  size_t numberOfEvents = playEventID.size();
412  if(readSrcIdx == 0) {
413  PileupList.push_back(numberOfEvents);
414  TrueNumInteractions_.push_back(numberOfEvents);
415  }
416  sizes.push_back(numberOfEvents);
417  std::vector<EventID>::const_iterator begin = playEventID.begin();
418  std::vector<EventID>::const_iterator end = playEventID.end();
419  inputSources_[readSrcIdx]->playOldFormatPileUp(
420  begin, end, recordEventID,
421  std::bind(&MixingModule::pileAllWorkers, std::ref(*this), _1, mcc, bunchIdx,
422  _2, vertexOffset, std::ref(setup), e.streamID()));
423  } else {
424  size_t numberOfEvents = playbackInfo_H->getNumberOfEvents(bunchIdx, readSrcIdx);
425  if(readSrcIdx == 0) {
426  PileupList.push_back(numberOfEvents);
427  TrueNumInteractions_.push_back(numberOfEvents);
428  }
429  sizes.push_back(numberOfEvents);
430  std::vector<SecondaryEventIDAndFileInfo>::const_iterator begin = playbackInfo_H->getEventId(playbackCounter);
431  playbackCounter += numberOfEvents;
432  std::vector<SecondaryEventIDAndFileInfo>::const_iterator end = playbackInfo_H->getEventId(playbackCounter);
433  inputSources_[readSrcIdx]->playPileUp(
434  begin, end, recordEventID,
435  std::bind(&MixingModule::pileAllWorkers, std::ref(*this), _1, mcc, bunchIdx,
436  _2, vertexOffset, std::ref(setup), e.streamID()));
437  }
438  }
439  for(Accumulators::const_iterator accItr = digiAccumulators_.begin(), accEnd = digiAccumulators_.end(); accItr != accEnd; ++accItr) {
440  (*accItr)->finalizeBunchCrossing(e, setup, bunchIdx);
441  }
442  }
443  // Save playback information
444 
445  std::vector<edm::EventID> eventInfoList;
446  for (auto const item : recordEventID) {
447  eventInfoList.emplace_back(item.eventID());
448  }
449 
450  // setInfo swaps recordEventID, so recordEventID is useless (empty) after the call.
451  playbackInfo_->setInfo(recordEventID, sizes);
452 
453  // Keep track of pileup accounting...
454 
455  std::auto_ptr<PileupMixingContent> PileupMixing_;
456 
457  std::vector<int> numInteractionList;
458  std::vector<int> bunchCrossingList;
459  std::vector<float> TrueInteractionList;
460 
461  //Makin' a list: Basically, we don't care about the "other" sources at this point.
462  for (int bunchCrossing=minBunch_;bunchCrossing<=maxBunch_;++bunchCrossing) {
463  bunchCrossingList.push_back(bunchCrossing);
464  if(!inputSources_[0] || !inputSources_[0]->doPileUp(0)) {
465  numInteractionList.push_back(0);
466  TrueInteractionList.push_back(0);
467  }
468  else {
469  numInteractionList.push_back(PileupList[bunchCrossing-minBunch_]);
470  TrueInteractionList.push_back((TrueNumInteractions_)[bunchCrossing-minBunch_]);
471  }
472  }
473 
474  for(Accumulators::const_iterator accItr = digiAccumulators_.begin(), accEnd = digiAccumulators_.end(); accItr != accEnd; ++accItr) {
475  (*accItr)->StorePileupInformation( bunchCrossingList,
476  numInteractionList,
477  TrueInteractionList,
478  eventInfoList,
479  bunchSpace_);
480  }
481 
482 
483  PileupMixing_ = std::auto_ptr<PileupMixingContent>(new PileupMixingContent(bunchCrossingList,
484  numInteractionList,
485  TrueInteractionList,
486  eventInfoList,
487  bunchSpace_));
488 
489  e.put(PileupMixing_);
490 
491  // we have to do the ToF transformation for PSimHits once all pileup has been added
492  for (unsigned int ii=0;ii<workers_.size();++ii) {
493  workers_[ii]->setTof();
494  workers_[ii]->put(e);
495  }
496  }
void setInfo(std::vector< edm::SecondaryEventIDAndFileInfo > &eventInfo, std::vector< size_t > &sizes)
static std::string const source("source")
std::vector< float > TrueNumInteractions_
Definition: BMixingModule.h:89
int ii
Definition: cuy.py:588
ModuleCallingContext const * moduleCallingContext() const
Definition: Event.h:217
std::vector< MixingWorkerBase * > workers_
Definition: MixingModule.h:97
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:113
Accumulators digiAccumulators_
Definition: MixingModule.h:103
static const unsigned int maxNbSources_
Definition: BMixingModule.h:86
#define end
Definition: vmac.h:37
CrossingFramePlaybackInfoNew * playbackInfo_
Definition: MixingModule.h:93
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:405
InputTag inputTagPlayback_
Definition: MixingModule.h:90
edm::EventID id() const
Definition: EventBase.h:60
#define begin
Definition: vmac.h:30
std::vector< std::shared_ptr< PileUp > > inputSources_
Definition: BMixingModule.h:94
StreamID streamID() const
Definition: Event.h:72
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")
virtual void doPileUp(edm::Event &e, const edm::EventSetup &es) override
void pileAllWorkers(EventPrincipal const &ep, ModuleCallingContext const *, int bcr, int id, int &offset, const edm::EventSetup &setup, edm::StreamID const &)
void MixingModule::endLuminosityBlock ( edm::LuminosityBlock const &  lumi,
edm::EventSetup const &  setup 
)
overridevirtual

Reimplemented from edm::BMixingModule.

Definition at line 527 of file MixingModule.cc.

References digiAccumulators_, and edm::BMixingModule::endLuminosityBlock().

527  {
528  for(Accumulators::const_iterator accItr = digiAccumulators_.begin(), accEnd = digiAccumulators_.end(); accItr != accEnd; ++accItr) {
529  (*accItr)->endLuminosityBlock(lumi, setup);
530  }
532  }
tuple lumi
Definition: fjr2json.py:35
Accumulators digiAccumulators_
Definition: MixingModule.h:103
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")
virtual void endLuminosityBlock(const edm::LuminosityBlock &l, const edm::EventSetup &setup) override
void MixingModule::endRun ( edm::Run const &  run,
edm::EventSetup const &  setup 
)
overridevirtual

Reimplemented from edm::BMixingModule.

Definition at line 513 of file MixingModule.cc.

References digiAccumulators_, and edm::BMixingModule::endRun().

513  {
514  for(Accumulators::const_iterator accItr = digiAccumulators_.begin(), accEnd = digiAccumulators_.end(); accItr != accEnd; ++accItr) {
515  (*accItr)->endRun(run, setup);
516  }
518  }
virtual void endRun(const edm::Run &r, const edm::EventSetup &setup) override
Accumulators digiAccumulators_
Definition: MixingModule.h:103
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")
void MixingModule::finalizeEvent ( edm::Event event,
edm::EventSetup const &  setup 
)
virtual

Reimplemented from edm::BMixingModule.

Definition at line 556 of file MixingModule.cc.

References digiAccumulators_.

556  {
557  for(Accumulators::const_iterator accItr = digiAccumulators_.begin(), accEnd = digiAccumulators_.end(); accItr != accEnd; ++accItr) {
558  (*accItr)->finalizeEvent(event, setup);
559  }
560  }
Accumulators digiAccumulators_
Definition: MixingModule.h:103
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")
void MixingModule::initializeEvent ( edm::Event const &  event,
edm::EventSetup const &  setup 
)
virtual

Reimplemented from edm::BMixingModule.

Definition at line 535 of file MixingModule.cc.

References digiAccumulators_.

535  {
536  for(Accumulators::const_iterator accItr = digiAccumulators_.begin(), accEnd = digiAccumulators_.end(); accItr != accEnd; ++accItr) {
537  (*accItr)->initializeEvent(event, setup);
538  }
539  }
Accumulators digiAccumulators_
Definition: MixingModule.h:103
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")
void MixingModule::pileAllWorkers ( EventPrincipal const &  ep,
ModuleCallingContext const *  mcc,
int  bcr,
int  id,
int &  offset,
const edm::EventSetup setup,
edm::StreamID const &  streamID 
)
private

Definition at line 301 of file MixingModule.cc.

References accumulateEvent(), adjusters_, edm::BMixingModule::bunchSpace_, edm::EventPrincipal::id(), LogDebug, edm::one::EDProducerBase::moduleDescription(), and workers_.

Referenced by doPileUp().

306  {
307 
308  InternalContext internalContext(eventPrincipal.id(), mcc);
309  ParentContext parentContext(&internalContext);
310  ModuleCallingContext moduleCallingContext(&moduleDescription());
311  ModuleContextSentry moduleContextSentry(&moduleCallingContext, parentContext);
312 
313  for (auto const& adjuster : adjusters_) {
314  adjuster->doOffset(bunchSpace_, bunchCrossing, eventPrincipal, &moduleCallingContext, eventId, vertexOffset);
315  }
316  PileUpEventPrincipal pep(eventPrincipal, &moduleCallingContext, bunchCrossing);
317  accumulateEvent(pep, setup, streamID);
318 
319  for (auto const& worker : workers_) {
320  LogDebug("MixingModule") <<" merging Event: id " << eventPrincipal.id();
321  // std::cout <<"PILEALLWORKERS merging Event: id " << eventPrincipal.id() << std::endl;
322 
323  worker->addPileups(eventPrincipal, &moduleCallingContext, eventId);
324  }
325  }
#define LogDebug(id)
ModuleDescription const & moduleDescription() const
std::vector< MixingWorkerBase * > workers_
Definition: MixingModule.h:97
std::vector< AdjusterBase * > adjusters_
Definition: MixingModule.h:95
void accumulateEvent(Event const &event, EventSetup const &setup)
void MixingModule::put ( edm::Event e,
const edm::EventSetup es 
)
privatevirtual

Reimplemented from edm::BMixingModule.

Definition at line 498 of file MixingModule.cc.

References playbackInfo_, and edm::Event::put().

498  {
499 
500  if (playbackInfo_) {
501  std::auto_ptr<CrossingFramePlaybackInfoNew> pOut(playbackInfo_);
502  e.put(pOut);
503  }
504  }
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:113
CrossingFramePlaybackInfoNew * playbackInfo_
Definition: MixingModule.h:93
void MixingModule::reload ( const edm::EventSetup setup)
virtual

Reimplemented from edm::BMixingModule.

Definition at line 222 of file MixingModule.cc.

References edm::BMixingModule::bunchSpace_, HDQMDatabaseProducer::config, edm::EventSetup::get(), cuy::ii, edm::BMixingModule::maxBunch_, edm::BMixingModule::minBunch_, and workersObjects_.

222  {
223  //change the basic parameters.
225  setup.get<MixingRcd>().get(config);
226  minBunch_=config->minBunch();
227  maxBunch_=config->maxBunch();
228  bunchSpace_=config->bunchSpace();
229  //propagate to change the workers
230  for (unsigned int ii=0;ii<workersObjects_.size();++ii){
231  workersObjects_[ii]->reload(setup);
232  }
233  }
int ii
Definition: cuy.py:588
std::vector< MixingWorkerBase * > workersObjects_
Definition: MixingModule.h:98
const T & get() const
Definition: EventSetup.h:55

Member Data Documentation

std::vector<AdjusterBase *> edm::MixingModule::adjusters_
private

Definition at line 95 of file MixingModule.h.

Referenced by checkSignal(), and pileAllWorkers().

std::vector<AdjusterBase *> edm::MixingModule::adjustersObjects_
private

Definition at line 96 of file MixingModule.h.

Referenced by checkSignal(), MixingModule(), and ~MixingModule().

Accumulators edm::MixingModule::digiAccumulators_
private
InputTag edm::MixingModule::inputTagPlayback_
private

Definition at line 90 of file MixingModule.h.

Referenced by doPileUp(), and MixingModule().

bool edm::MixingModule::mixProdStep1_
private

Definition at line 92 of file MixingModule.h.

Referenced by MixingModule().

bool edm::MixingModule::mixProdStep2_
private

Definition at line 91 of file MixingModule.h.

Referenced by MixingModule().

CrossingFramePlaybackInfoNew* edm::MixingModule::playbackInfo_
private

Definition at line 93 of file MixingModule.h.

Referenced by createnewEDProduct(), doPileUp(), and put().

bool edm::MixingModule::useCurrentProcessOnly_
private

Definition at line 100 of file MixingModule.h.

Referenced by branchesActivate(), and MixingModule().

std::vector<std::string> edm::MixingModule::wantedBranches_
private

Definition at line 99 of file MixingModule.h.

Referenced by branchesActivate(), and MixingModule().

std::vector<MixingWorkerBase *> edm::MixingModule::workers_
private

Definition at line 97 of file MixingModule.h.

Referenced by addSignals(), checkSignal(), createnewEDProduct(), doPileUp(), and pileAllWorkers().

std::vector<MixingWorkerBase *> edm::MixingModule::workersObjects_
private

Definition at line 98 of file MixingModule.h.

Referenced by checkSignal(), MixingModule(), reload(), and ~MixingModule().