CMS 3D CMS Logo

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

#include <PileUp.h>

Public Member Functions

double averageNumber () const
 
void beginJob ()
 
void beginLuminosityBlock (const edm::LuminosityBlock &lumi, const edm::EventSetup &setup)
 
void beginRun (const edm::Run &run, const edm::EventSetup &setup)
 
void CalculatePileup (int MinBunch, int MaxBunch, std::vector< int > &PileupSelection, std::vector< float > &TrueNumInteractions)
 
bool doPileUp ()
 
void dropUnwantedBranches (std::vector< std::string > const &wantedBranches)
 
void endJob ()
 
void endLuminosityBlock (const edm::LuminosityBlock &lumi, const edm::EventSetup &setup)
 
void endRun (const edm::Run &run, const edm::EventSetup &setup)
 
const unsigned int & input () const
 
void input (unsigned int s)
 
 PileUp (ParameterSet const &pset, double averageNumber, TH1F *const histo, const bool playback)
 
template<typename T >
void playPileUp (const std::vector< edm::EventID > &ids, T eventOperator)
 
bool poisson () const
 
template<typename T >
void readPileUp (edm::EventID const &signal, std::vector< edm::EventID > &ids, T eventOperator, const int NumPU)
 
void reload (const edm::EventSetup &setup)
 
void setupPileUpEvent (const edm::EventSetup &setup)
 
 ~PileUp ()
 

Private Attributes

double averageNumber_
 
std::unique_ptr< EventPrincipaleventPrincipal_
 
bool fixed_
 
bool fixed_OOT_
 
TH1F * h1f
 
TH1F * histo_
 
bool histoDistribution_
 
TH1F * hprobFunction
 
std::unique_ptr
< VectorInputSource > const 
input_
 
unsigned int inputType_
 
int const intAverage_
 
int intFixed_ITPU_
 
int intFixed_OOT_
 
boost::shared_ptr
< LuminosityBlockPrincipal
lumiPrincipal_
 
bool manage_OOT_
 
bool none_
 
bool playback_
 
bool poisson_
 
bool poisson_OOT_
 
std::unique_ptr
< CLHEP::RandPoisson > 
poissonDistr_OOT_
 
std::unique_ptr
< CLHEP::RandPoissonQ > 
poissonDistribution_
 
TFile * probFileHisto
 
bool probFunctionDistribution_
 
boost::shared_ptr
< ProcessConfiguration
processConfiguration_
 
boost::shared_ptr
< ProductRegistry
productRegistry_
 
std::unique_ptr
< SecondaryEventProvider
provider_
 
bool PU_Study_
 
boost::shared_ptr< RunPrincipalrunPrincipal_
 
bool samelumi_
 
int seed_
 
bool sequential_
 
std::string Study_type_
 
std::string type_
 

Detailed Description

Definition at line 36 of file PileUp.h.

Constructor & Destructor Documentation

edm::PileUp::PileUp ( ParameterSet const &  pset,
double  averageNumber,
TH1F *const  histo,
const bool  playback 
)
explicit

Definition at line 29 of file PileUp.cc.

References averageNumber_, edm::ParameterSet::emptyParameterSetID(), eventPrincipal_, edm::hlt::Exception, edm::ParameterSet::exists(), edm::ParameterSet::existsAs(), fixed_, fixed_OOT_, edm::RandomNumberGenerator::getEngine(), edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), histoDistribution_, input_, intFixed_ITPU_, intFixed_OOT_, edm::Service< T >::isAvailable(), manage_OOT_, none_, poisson_, poisson_OOT_, poissonDistr_OOT_, poissonDistribution_, probFunctionDistribution_, processConfiguration_, productRegistry_, provider_, PU_Study_, seed_, AlCaHLTBitMon_QueryRunRegistry::string, Study_type_, and type_.

29  :
30  type_(pset.getParameter<std::string>("type")),
32  intAverage_(static_cast<int>(averageNumber)),
33  histo_(histo),
34  histoDistribution_(type_ == "histo"),
35  probFunctionDistribution_(type_ == "probFunction"),
36  poisson_(type_ == "poisson"),
37  fixed_(type_ == "fixed"),
38  none_(type_ == "none"),
40  input_(VectorInputSourceFactory::get()->makeVectorInputSource(pset, InputSourceDescription(
41  ModuleDescription(),
43  boost::shared_ptr<BranchIDListHelper>(new BranchIDListHelper),
44  boost::shared_ptr<ActivityRegistry>(new ActivityRegistry),
45  -1, -1,
46  PreallocationConfiguration()
47  )).release()),
48  processConfiguration_(new ProcessConfiguration(std::string("@MIXING"), getReleaseVersion(), getPassID())),
51  runPrincipal_(),
52  provider_(),
56  sequential_(pset.getUntrackedParameter<bool>("sequential", false)),
57  samelumi_(pset.getUntrackedParameter<bool>("sameLumiBlock", false)),
58  seed_(0) {
59 
60  // Use the empty parameter set for the parameter set ID of our "@MIXING" process.
62 
63  if(pset.existsAs<std::vector<ParameterSet> >("producers", true)) {
64  std::vector<ParameterSet> producers = pset.getParameter<std::vector<ParameterSet> >("producers");
65  provider_.reset(new SecondaryEventProvider(producers, *productRegistry_, processConfiguration_));
66  }
67 
68  productRegistry_->setFrozen();
69 
70  // A modified HistoryAppender must be used for unscheduled processing.
71  eventPrincipal_.reset(new EventPrincipal(input_->productRegistry(),
72  input_->branchIDListHelper(),
74  nullptr));
75 
76  if (pset.exists("nbPileupEvents")) {
77  seed_=pset.getParameter<edm::ParameterSet>("nbPileupEvents").getUntrackedParameter<int>("seed",0);
78  }
79 
80  bool DB=type_=="readDB";
81 
83  if (!rng.isAvailable()) {
84  throw cms::Exception("Configuration")
85  << "PileUp requires the RandomNumberGeneratorService\n"
86  "which is not present in the configuration file. You must add the service\n"
87  "in the configuration file or remove the modules that require it.";
88  }
89 
90  CLHEP::HepRandomEngine& engine = rng->getEngine();
91  poissonDistribution_.reset(new CLHEP::RandPoissonQ(engine, averageNumber_));
92 
93  // Get seed for the case when using user histogram or probability function
95  if(seed_ !=0) {
96  gRandom->SetSeed(seed_);
97  LogInfo("MixingModule") << " Change seed for " << type_ << " mode. The seed is set to " << seed_;
98  }
99  else {
100  gRandom->SetSeed(engine.getSeed());
101  }
102  }
103 
104 
106  throw cms::Exception("Illegal parameter value","PileUp::PileUp(ParameterSet const& pset)")
107  << "'type' parameter (a string) has a value of '" << type_ << "'.\n"
108  << "Legal values are 'poisson', 'fixed', or 'none'\n";
109  }
110 
111  if (!DB){
112  manage_OOT_ = pset.getUntrackedParameter<bool>("manage_OOT", false);
113 
114  // Check for string describing special processing. Add these here for individual cases
115 
116  PU_Study_ = false;
117  Study_type_ = "";
118 
119  Study_type_ = pset.getUntrackedParameter<std::string>("Special_Pileup_Studies", "");
120 
121  if(Study_type_ == "Fixed_ITPU_Vary_OOTPU") {
122 
123  PU_Study_ = true;
124  intFixed_ITPU_ = pset.getUntrackedParameter<int>("intFixed_ITPU", 0);
125 
126  }
127 
128  if(manage_OOT_) { // figure out what the parameters are
129 
130  // if (playback_) throw cms::Exception("Illegal parameter clash","PileUp::PileUp(ParameterSet const& pset)")
131  // << " manage_OOT option not allowed with playback ";
132 
133  std::string OOT_type = pset.getUntrackedParameter<std::string>("OOT_type");
134 
135  if(OOT_type == "Poisson" || OOT_type == "poisson") {
136  poisson_OOT_ = true;
137  poissonDistr_OOT_.reset(new CLHEP::RandPoisson(engine));
138  }
139  else if(OOT_type == "Fixed" || OOT_type == "fixed") {
140  fixed_OOT_ = true;
141  // read back the fixed number requested out-of-time
142  intFixed_OOT_ = pset.getUntrackedParameter<int>("intFixed_OOT", -1);
143  if(intFixed_OOT_ < 0) {
144  throw cms::Exception("Illegal parameter value","PileUp::PileUp(ParameterSet const& pset)")
145  << " Fixed out-of-time pileup requested, but no fixed value given ";
146  }
147  }
148  else {
149  throw cms::Exception("Illegal parameter value","PileUp::PileUp(ParameterSet const& pset)")
150  << "'OOT_type' parameter (a string) has a value of '" << OOT_type << "'.\n"
151  << "Legal values are 'poisson' or 'fixed'\n";
152  }
153  edm::LogInfo("MixingModule") <<" Out-of-time pileup will be generated with a " << OOT_type << " distribution. " ;
154  }
155  }
156 
157  }
boost::shared_ptr< RunPrincipal > runPrincipal_
Definition: PileUp.h:101
bool manage_OOT_
Definition: PileUp.h:86
std::string getPassID()
Definition: GetPassID.h:8
std::unique_ptr< SecondaryEventProvider > provider_
Definition: PileUp.h:102
std::unique_ptr< CLHEP::RandPoisson > poissonDistr_OOT_
Definition: PileUp.h:104
TH1F * histo_
Definition: PileUp.h:80
bool fixed_
Definition: PileUp.h:84
int const intAverage_
Definition: PileUp.h:79
bool probFunctionDistribution_
Definition: PileUp.h:82
std::string Study_type_
Definition: PileUp.h:91
boost::shared_ptr< LuminosityBlockPrincipal > lumiPrincipal_
Definition: PileUp.h:100
bool histoDistribution_
Definition: PileUp.h:81
bool poisson_
Definition: PileUp.h:83
double averageNumber() const
Definition: PileUp.h:47
bool playback_
Definition: PileUp.h:112
bool samelumi_
Definition: PileUp.h:118
std::unique_ptr< VectorInputSource > const input_
Definition: PileUp.h:97
bool poisson_OOT_
Definition: PileUp.h:87
bool isAvailable() const
Definition: Service.h:46
int intFixed_ITPU_
Definition: PileUp.h:94
virtual CLHEP::HepRandomEngine & getEngine() const =0
Use this to get the random number engine, this is the only function most users should call...
bool PU_Study_
Definition: PileUp.h:90
bool fixed_OOT_
Definition: PileUp.h:88
std::string getReleaseVersion()
std::string type_
Definition: PileUp.h:77
boost::shared_ptr< ProductRegistry > productRegistry_
Definition: PileUp.h:96
boost::shared_ptr< ProcessConfiguration > processConfiguration_
Definition: PileUp.h:98
bool sequential_
Definition: PileUp.h:115
std::unique_ptr< CLHEP::RandPoissonQ > poissonDistribution_
Definition: PileUp.h:103
int seed_
Definition: PileUp.h:121
bool none_
Definition: PileUp.h:85
tuple playback
Definition: Playback_cff.py:20
int intFixed_OOT_
Definition: PileUp.h:93
std::unique_ptr< EventPrincipal > eventPrincipal_
Definition: PileUp.h:99
static VectorInputSourceFactory const * get()
static ParameterSetID emptyParameterSetID()
double averageNumber_
Definition: PileUp.h:78
edm::PileUp::~PileUp ( )

Definition at line 308 of file PileUp.cc.

308  {
309  }

Member Function Documentation

double edm::PileUp::averageNumber ( ) const
inline

Definition at line 47 of file PileUp.h.

References averageNumber_.

Referenced by reload().

47 {return averageNumber_;}
double averageNumber_
Definition: PileUp.h:78
void edm::PileUp::beginJob ( void  )

Definition at line 158 of file PileUp.cc.

References input_, productRegistry_, and provider_.

158  {
159  input_->doBeginJob();
160  if (provider_.get() != nullptr) {
161  provider_->beginJob(*productRegistry_);
162  }
163  }
std::unique_ptr< SecondaryEventProvider > provider_
Definition: PileUp.h:102
std::unique_ptr< VectorInputSource > const input_
Definition: PileUp.h:97
boost::shared_ptr< ProductRegistry > productRegistry_
Definition: PileUp.h:96
void edm::PileUp::beginLuminosityBlock ( const edm::LuminosityBlock lumi,
const edm::EventSetup setup 
)

Definition at line 179 of file PileUp.cc.

References printConversionInfo::aux, edm::LuminosityBlock::luminosityBlockAuxiliary(), lumiPrincipal_, edm::LuminosityBlock::moduleCallingContext(), processConfiguration_, productRegistry_, provider_, and runPrincipal_.

179  {
180  if (provider_.get() != nullptr) {
181  boost::shared_ptr<LuminosityBlockAuxiliary> aux(new LuminosityBlockAuxiliary(lumi.luminosityBlockAuxiliary()));
182  lumiPrincipal_.reset(new LuminosityBlockPrincipal(aux, productRegistry_, *processConfiguration_, nullptr, 0));
183  lumiPrincipal_->setRunPrincipal(runPrincipal_);
184  provider_->beginLuminosityBlock(*lumiPrincipal_, setup, lumi.moduleCallingContext());
185  }
186  }
boost::shared_ptr< RunPrincipal > runPrincipal_
Definition: PileUp.h:101
std::unique_ptr< SecondaryEventProvider > provider_
Definition: PileUp.h:102
ModuleCallingContext const * moduleCallingContext() const
boost::shared_ptr< LuminosityBlockPrincipal > lumiPrincipal_
Definition: PileUp.h:100
LuminosityBlockAuxiliary const & luminosityBlockAuxiliary() const
boost::shared_ptr< ProductRegistry > productRegistry_
Definition: PileUp.h:96
boost::shared_ptr< ProcessConfiguration > processConfiguration_
Definition: PileUp.h:98
void edm::PileUp::beginRun ( const edm::Run run,
const edm::EventSetup setup 
)

Definition at line 172 of file PileUp.cc.

References printConversionInfo::aux, edm::Run::moduleCallingContext(), processConfiguration_, productRegistry_, provider_, edm::Run::runAuxiliary(), and runPrincipal_.

172  {
173  if (provider_.get() != nullptr) {
174  boost::shared_ptr<RunAuxiliary> aux(new RunAuxiliary(run.runAuxiliary()));
175  runPrincipal_.reset(new RunPrincipal(aux, productRegistry_, *processConfiguration_, nullptr, 0));
176  provider_->beginRun(*runPrincipal_, setup, run.moduleCallingContext());
177  }
178  }
boost::shared_ptr< RunPrincipal > runPrincipal_
Definition: PileUp.h:101
std::unique_ptr< SecondaryEventProvider > provider_
Definition: PileUp.h:102
boost::shared_ptr< ProductRegistry > productRegistry_
Definition: PileUp.h:96
RunAuxiliary const & runAuxiliary() const
Definition: Run.h:55
boost::shared_ptr< ProcessConfiguration > processConfiguration_
Definition: PileUp.h:98
ModuleCallingContext const * moduleCallingContext() const
Definition: Run.h:135
void edm::PileUp::CalculatePileup ( int  MinBunch,
int  MaxBunch,
std::vector< int > &  PileupSelection,
std::vector< float > &  TrueNumInteractions 
)

Definition at line 311 of file PileUp.cc.

References averageNumber_, fixed_, histo_, histoDistribution_, intAverage_, intFixed_ITPU_, intFixed_OOT_, manage_OOT_, none_, poisson_, poisson_OOT_, poissonDistr_OOT_, poissonDistribution_, probFunctionDistribution_, PU_Study_, and Study_type_.

311  {
312 
313  // if we are managing the distribution of out-of-time pileup separately, select the distribution for bunch
314  // crossing zero first, save it for later.
315 
316  int nzero_crossing = -1;
317  double Fnzero_crossing = -1;
318 
319  if(manage_OOT_) {
320  if (none_){
321  nzero_crossing = 0;
322  }else if (poisson_){
323  nzero_crossing = poissonDistribution_->fire() ;
324  }else if (fixed_){
325  nzero_crossing = intAverage_ ;
327  double d = histo_->GetRandom();
328  //n = (int) floor(d + 0.5); // incorrect for bins with integer edges
329  Fnzero_crossing = d;
330  nzero_crossing = int(d);
331  }
332 
333  }
334 
335  for(int bx = MinBunch; bx < MaxBunch+1; ++bx) {
336 
337  if(manage_OOT_) {
338  if(bx==0 && !poisson_OOT_) {
339  PileupSelection.push_back(nzero_crossing) ;
340  TrueNumInteractions.push_back( nzero_crossing );
341  }
342  else{
343  if(poisson_OOT_) {
344  if(PU_Study_ && (Study_type_ == "Fixed_ITPU_Vary_OOTPU" ) && bx==0 ) {
345  PileupSelection.push_back(intFixed_ITPU_) ;
346  }
347  else{
348  PileupSelection.push_back(poissonDistr_OOT_->fire(Fnzero_crossing)) ;
349  }
350  TrueNumInteractions.push_back( Fnzero_crossing );
351  }
352  else {
353  PileupSelection.push_back(intFixed_OOT_) ;
354  TrueNumInteractions.push_back( intFixed_OOT_ );
355  }
356  }
357  }
358  else {
359  if (none_){
360  PileupSelection.push_back(0);
361  TrueNumInteractions.push_back( 0. );
362  }else if (poisson_){
363  PileupSelection.push_back(poissonDistribution_->fire());
364  TrueNumInteractions.push_back( averageNumber_ );
365  }else if (fixed_){
366  PileupSelection.push_back(intAverage_);
367  TrueNumInteractions.push_back( intAverage_ );
369  double d = histo_->GetRandom();
370  PileupSelection.push_back(int(d));
371  TrueNumInteractions.push_back( d );
372  }
373  }
374 
375  }
376  }
bool manage_OOT_
Definition: PileUp.h:86
std::unique_ptr< CLHEP::RandPoisson > poissonDistr_OOT_
Definition: PileUp.h:104
TH1F * histo_
Definition: PileUp.h:80
bool fixed_
Definition: PileUp.h:84
int const intAverage_
Definition: PileUp.h:79
bool probFunctionDistribution_
Definition: PileUp.h:82
std::string Study_type_
Definition: PileUp.h:91
bool histoDistribution_
Definition: PileUp.h:81
bool poisson_
Definition: PileUp.h:83
bool poisson_OOT_
Definition: PileUp.h:87
int intFixed_ITPU_
Definition: PileUp.h:94
bool PU_Study_
Definition: PileUp.h:90
std::unique_ptr< CLHEP::RandPoissonQ > poissonDistribution_
Definition: PileUp.h:103
bool none_
Definition: PileUp.h:85
int intFixed_OOT_
Definition: PileUp.h:93
double averageNumber_
Definition: PileUp.h:78
bool edm::PileUp::doPileUp ( )
inline

Definition at line 49 of file PileUp.h.

References averageNumber_, and none_.

49 {return none_ ? false : averageNumber_>0.;}
bool none_
Definition: PileUp.h:85
double averageNumber_
Definition: PileUp.h:78
void edm::PileUp::dropUnwantedBranches ( std::vector< std::string > const &  wantedBranches)
inline

Definition at line 50 of file PileUp.h.

References input_.

50  {
51  input_->dropUnwantedBranches(wantedBranches);
52  }
std::unique_ptr< VectorInputSource > const input_
Definition: PileUp.h:97
void edm::PileUp::endJob ( void  )

Definition at line 165 of file PileUp.cc.

References input_, and provider_.

165  {
166  if (provider_.get() != nullptr) {
167  provider_->endJob();
168  }
169  input_->doEndJob();
170  }
std::unique_ptr< SecondaryEventProvider > provider_
Definition: PileUp.h:102
std::unique_ptr< VectorInputSource > const input_
Definition: PileUp.h:97
void edm::PileUp::endLuminosityBlock ( const edm::LuminosityBlock lumi,
const edm::EventSetup setup 
)

Definition at line 193 of file PileUp.cc.

References lumiPrincipal_, edm::LuminosityBlock::moduleCallingContext(), and provider_.

193  {
194  if (provider_.get() != nullptr) {
195  provider_->endLuminosityBlock(*lumiPrincipal_, setup, lumi.moduleCallingContext());
196  }
197  }
std::unique_ptr< SecondaryEventProvider > provider_
Definition: PileUp.h:102
ModuleCallingContext const * moduleCallingContext() const
boost::shared_ptr< LuminosityBlockPrincipal > lumiPrincipal_
Definition: PileUp.h:100
void edm::PileUp::endRun ( const edm::Run run,
const edm::EventSetup setup 
)

Definition at line 188 of file PileUp.cc.

References edm::Run::moduleCallingContext(), provider_, and runPrincipal_.

188  {
189  if (provider_.get() != nullptr) {
190  provider_->endRun(*runPrincipal_, setup, run.moduleCallingContext());
191  }
192  }
boost::shared_ptr< RunPrincipal > runPrincipal_
Definition: PileUp.h:101
std::unique_ptr< SecondaryEventProvider > provider_
Definition: PileUp.h:102
ModuleCallingContext const * moduleCallingContext() const
Definition: Run.h:135
const unsigned int& edm::PileUp::input ( ) const
inline

Definition at line 72 of file PileUp.h.

References inputType_.

72 {return inputType_;}
unsigned int inputType_
Definition: PileUp.h:76
void edm::PileUp::input ( unsigned int  s)
inline

Definition at line 73 of file PileUp.h.

References inputType_, and alignCSCRings::s.

73 {inputType_=s;}
unsigned int inputType_
Definition: PileUp.h:76
template<typename T >
void edm::PileUp::playPileUp ( const std::vector< edm::EventID > &  ids,
T  eventOperator 
)

Definition at line 196 of file PileUp.h.

References eventPrincipal_, and input_.

196  {
197  //TrueNumInteractions.push_back( ids.size() ) ;
198  input_->loopSpecified(*eventPrincipal_,ids,eventOperator);
199  }
std::unique_ptr< VectorInputSource > const input_
Definition: PileUp.h:97
std::unique_ptr< EventPrincipal > eventPrincipal_
Definition: PileUp.h:99
bool edm::PileUp::poisson ( ) const
inline

Definition at line 48 of file PileUp.h.

References poisson_.

48 {return poisson_;}
bool poisson_
Definition: PileUp.h:83
template<typename T >
void edm::PileUp::readPileUp ( edm::EventID const &  signal,
std::vector< edm::EventID > &  ids,
T  eventOperator,
const int  pileEventCnt 
)

Generates events from a VectorInputSource. This function decides which method of VectorInputSource to call: sequential, random, or pre-specified. The ids are either ids to read or ids to store while reading. eventOperator has a type that matches the eventOperator in VectorInputSource::loopRandom.

The "signal" event is optionally used to restrict the secondary events used for pileup and mixing.

Definition at line 155 of file PileUp.h.

References eventPrincipal_, input_, fjr2json::lumi, edm::EventID::luminosityBlock(), SiPixelLorentzAngle_cfi::read, edm::EventID::run(), samelumi_, and sequential_.

155  {
156 
157  // One reason PileUp is responsible for recording event IDs is
158  // that it is the one that knows how many events will be read.
159  ids.reserve(pileEventCnt);
160  RecordEventID<T> recorder(ids,eventOperator);
161  int read;
162  if (samelumi_) {
163  const edm::LuminosityBlockID lumi(signal.run(), signal.luminosityBlock());
164  if (sequential_)
165  read = input_->loopSequentialWithID(*eventPrincipal_, lumi, pileEventCnt, recorder);
166  else
167  read = input_->loopRandomWithID(*eventPrincipal_, lumi, pileEventCnt, recorder);
168  } else {
169  if (sequential_) {
170  // boost::bind creates a functor from recordEventForPlayback
171  // so that recordEventForPlayback can insert itself before
172  // the original eventOperator.
173 
174  read = input_->loopSequential(*eventPrincipal_, pileEventCnt, recorder);
175  //boost::bind(&PileUp::recordEventForPlayback<T>,
176  // boost::ref(*this), _1, boost::ref(ids),
177  // boost::ref(eventOperator))
178  // );
179 
180  } else {
181  read = input_->loopRandom(*eventPrincipal_, pileEventCnt, recorder);
182  // boost::bind(&PileUp::recordEventForPlayback<T>,
183  // boost::ref(*this), _1, boost::ref(ids),
184  // boost::ref(eventOperator))
185  // );
186  }
187  }
188  if (read != pileEventCnt)
189  edm::LogWarning("PileUp") << "Could not read enough pileup events: only " << read << " out of " << pileEventCnt << " requested.";
190  }
tuple lumi
Definition: fjr2json.py:35
bool samelumi_
Definition: PileUp.h:118
std::unique_ptr< VectorInputSource > const input_
Definition: PileUp.h:97
bool sequential_
Definition: PileUp.h:115
std::unique_ptr< EventPrincipal > eventPrincipal_
Definition: PileUp.h:99
void edm::PileUp::reload ( const edm::EventSetup setup)

Definition at line 208 of file PileUp.cc.

References MixingInputConfig::averageNumber(), averageNumber(), averageNumber_, HDQMDatabaseProducer::config, alignCSCRings::e, edm::hlt::Exception, fixed_, fixed_OOT_, MixingInputConfig::fixedOutOfTime(), edm::EventSetup::get(), edm::RandomNumberGenerator::getEngine(), histo_, histoDistribution_, i, inputType_, intFixed_OOT_, j, LogDebug, manage_OOT_, none_, MixingInputConfig::outOfTime(), poisson_, poisson_OOT_, poissonDistr_OOT_, poissonDistribution_, probFunctionDistribution_, MixingInputConfig::probFunctionVariable(), MixingInputConfig::probValue(), MixingInputConfig::type(), type_, SiStripMonitorClusterAlca_cfi::xmax, and SiStripMonitorClusterAlca_cfi::xmin.

208  {
209  //get the required parameters from DB.
211  setup.get<MixingRcd>().get(configM);
212 
213  const MixingInputConfig & config=configM->config(inputType_);
214 
215  //get the type
216  type_=config.type();
217  //set booleans
218  histoDistribution_=type_ == "histo";
219  probFunctionDistribution_=type_ == "probFunction";
220  poisson_=type_ == "poisson";
221  fixed_=type_ == "fixed";
222  none_=type_ == "none";
223 
224  if (histoDistribution_) edm::LogError("MisConfiguration")<<"type histo cannot be reloaded from DB, yet";
225 
226  if (fixed_){
228  }
229  else if (poisson_)
230  {
231  averageNumber_=config.averageNumber();
233  CLHEP::HepRandomEngine& engine = rng->getEngine();
234  poissonDistribution_.reset(new CLHEP::RandPoissonQ(engine, averageNumber_));
235  }
236  else if (probFunctionDistribution_)
237  {
238  //need to reload the histogram from DB
239  const std::vector<int> & dataProbFunctionVar = config.probFunctionVariable();
240  std::vector<double> dataProb = config.probValue();
241 
242  int varSize = (int) dataProbFunctionVar.size();
243  int probSize = (int) dataProb.size();
244 
245  if ((dataProbFunctionVar[0] != 0) || (dataProbFunctionVar[varSize - 1] != (varSize - 1)))
246  throw cms::Exception("BadProbFunction") << "Please, check the variables of the probability function! The first variable should be 0 and the difference between two variables should be 1." << std::endl;
247 
248  // Complete the vector containing the probability function data
249  // with the values "0"
250  if (probSize < varSize){
251  edm::LogWarning("MixingModule") << " The probability function data will be completed with " <<(varSize - probSize) <<" values 0.";
252 
253  for (int i=0; i<(varSize - probSize); i++) dataProb.push_back(0);
254 
255  probSize = dataProb.size();
256  edm::LogInfo("MixingModule") << " The number of the P(x) data set after adding the values 0 is " << probSize;
257  }
258 
259  // Create an histogram with the data from the probability function provided by the user
260  int xmin = (int) dataProbFunctionVar[0];
261  int xmax = (int) dataProbFunctionVar[varSize-1]+1; // need upper edge to be one beyond last value
262  int numBins = varSize;
263 
264  edm::LogInfo("MixingModule") << "An histogram will be created with " << numBins << " bins in the range ("<< xmin << "," << xmax << ")." << std::endl;
265 
266  if (histo_) delete histo_;
267  histo_ = new TH1F("h","Histo from the user's probability function",numBins,xmin,xmax);
268 
269  LogDebug("MixingModule") << "Filling histogram with the following data:" << std::endl;
270 
271  for (int j=0; j < numBins ; j++){
272  LogDebug("MixingModule") << " x = " << dataProbFunctionVar[j ]<< " P(x) = " << dataProb[j];
273  histo_->Fill(dataProbFunctionVar[j]+0.5,dataProb[j]); // assuming integer values for the bins, fill bin centers, not edges
274  }
275 
276  // Check if the histogram is normalized
277  if ( ((histo_->Integral() - 1) > 1.0e-02) && ((histo_->Integral() - 1) < -1.0e-02)){
278  throw cms::Exception("BadProbFunction") << "The probability function should be normalized!!! " << std::endl;
279  }
280  averageNumber_=histo_->GetMean();
281  }
282 
283  int oot=config.outOfTime();
284  manage_OOT_=false;
285  if (oot==1)
286  {
287  manage_OOT_=true;
288  poisson_OOT_ = false;
289  if (poissonDistr_OOT_){poissonDistr_OOT_.reset(); }
290  fixed_OOT_ = true;
291  intFixed_OOT_=config.fixedOutOfTime();
292  }
293  else if (oot==2)
294  {
295  manage_OOT_=true;
296  poisson_OOT_ = true;
297  fixed_OOT_ = false;
298  if (!poissonDistr_OOT_) {
299  //no need to trash the previous one if already there
301  CLHEP::HepRandomEngine& engine = rng->getEngine();
302  poissonDistr_OOT_.reset(new CLHEP::RandPoisson(engine));
303  }
304  }
305 
306 
307  }
#define LogDebug(id)
bool manage_OOT_
Definition: PileUp.h:86
int i
Definition: DBlmapReader.cc:9
unsigned int inputType_
Definition: PileUp.h:76
std::unique_ptr< CLHEP::RandPoisson > poissonDistr_OOT_
Definition: PileUp.h:104
const int fixedOutOfTime() const
TH1F * histo_
Definition: PileUp.h:80
bool fixed_
Definition: PileUp.h:84
const std::vector< double > & probValue() const
const double averageNumber() const
bool probFunctionDistribution_
Definition: PileUp.h:82
bool histoDistribution_
Definition: PileUp.h:81
bool poisson_
Definition: PileUp.h:83
double averageNumber() const
Definition: PileUp.h:47
const int outOfTime() const
bool poisson_OOT_
Definition: PileUp.h:87
int j
Definition: DBlmapReader.cc:9
virtual CLHEP::HepRandomEngine & getEngine() const =0
Use this to get the random number engine, this is the only function most users should call...
bool fixed_OOT_
Definition: PileUp.h:88
std::string type_
Definition: PileUp.h:77
const T & get() const
Definition: EventSetup.h:55
const std::vector< int > & probFunctionVariable() const
std::unique_ptr< CLHEP::RandPoissonQ > poissonDistribution_
Definition: PileUp.h:103
bool none_
Definition: PileUp.h:85
int intFixed_OOT_
Definition: PileUp.h:93
std::string type() const
double averageNumber_
Definition: PileUp.h:78
void edm::PileUp::setupPileUpEvent ( const edm::EventSetup setup)

Definition at line 199 of file PileUp.cc.

References eventPrincipal_, lumiPrincipal_, and provider_.

199  {
200  if (provider_.get() != nullptr) {
201  // note: run and lumi numbers must be modified to match lumiPrincipal_
202  eventPrincipal_->setLuminosityBlockPrincipal(lumiPrincipal_);
203  eventPrincipal_->setRunAndLumiNumber(lumiPrincipal_->run(), lumiPrincipal_->luminosityBlock());
204  provider_->setupPileUpEvent(*eventPrincipal_, setup);
205  }
206  }
std::unique_ptr< SecondaryEventProvider > provider_
Definition: PileUp.h:102
boost::shared_ptr< LuminosityBlockPrincipal > lumiPrincipal_
Definition: PileUp.h:100
std::unique_ptr< EventPrincipal > eventPrincipal_
Definition: PileUp.h:99

Member Data Documentation

double edm::PileUp::averageNumber_
private

Definition at line 78 of file PileUp.h.

Referenced by averageNumber(), CalculatePileup(), doPileUp(), PileUp(), and reload().

std::unique_ptr<EventPrincipal> edm::PileUp::eventPrincipal_
private

Definition at line 99 of file PileUp.h.

Referenced by PileUp(), playPileUp(), readPileUp(), and setupPileUpEvent().

bool edm::PileUp::fixed_
private

Definition at line 84 of file PileUp.h.

Referenced by CalculatePileup(), PileUp(), and reload().

bool edm::PileUp::fixed_OOT_
private

Definition at line 88 of file PileUp.h.

Referenced by PileUp(), and reload().

TH1F* edm::PileUp::h1f
private

Definition at line 107 of file PileUp.h.

TH1F* edm::PileUp::histo_
private

Definition at line 80 of file PileUp.h.

Referenced by CalculatePileup(), and reload().

bool edm::PileUp::histoDistribution_
private

Definition at line 81 of file PileUp.h.

Referenced by CalculatePileup(), PileUp(), and reload().

TH1F* edm::PileUp::hprobFunction
private

Definition at line 108 of file PileUp.h.

std::unique_ptr<VectorInputSource> const edm::PileUp::input_
private

Definition at line 97 of file PileUp.h.

Referenced by beginJob(), dropUnwantedBranches(), endJob(), PileUp(), playPileUp(), and readPileUp().

unsigned int edm::PileUp::inputType_
private

Definition at line 76 of file PileUp.h.

Referenced by input(), and reload().

int const edm::PileUp::intAverage_
private

Definition at line 79 of file PileUp.h.

Referenced by CalculatePileup().

int edm::PileUp::intFixed_ITPU_
private

Definition at line 94 of file PileUp.h.

Referenced by CalculatePileup(), and PileUp().

int edm::PileUp::intFixed_OOT_
private

Definition at line 93 of file PileUp.h.

Referenced by CalculatePileup(), PileUp(), and reload().

boost::shared_ptr<LuminosityBlockPrincipal> edm::PileUp::lumiPrincipal_
private

Definition at line 100 of file PileUp.h.

Referenced by beginLuminosityBlock(), endLuminosityBlock(), and setupPileUpEvent().

bool edm::PileUp::manage_OOT_
private

Definition at line 86 of file PileUp.h.

Referenced by CalculatePileup(), PileUp(), and reload().

bool edm::PileUp::none_
private

Definition at line 85 of file PileUp.h.

Referenced by CalculatePileup(), doPileUp(), PileUp(), and reload().

bool edm::PileUp::playback_
private

Definition at line 112 of file PileUp.h.

bool edm::PileUp::poisson_
private

Definition at line 83 of file PileUp.h.

Referenced by CalculatePileup(), PileUp(), poisson(), and reload().

bool edm::PileUp::poisson_OOT_
private

Definition at line 87 of file PileUp.h.

Referenced by CalculatePileup(), PileUp(), and reload().

std::unique_ptr<CLHEP::RandPoisson> edm::PileUp::poissonDistr_OOT_
private

Definition at line 104 of file PileUp.h.

Referenced by CalculatePileup(), PileUp(), and reload().

std::unique_ptr<CLHEP::RandPoissonQ> edm::PileUp::poissonDistribution_
private

Definition at line 103 of file PileUp.h.

Referenced by CalculatePileup(), PileUp(), and reload().

TFile* edm::PileUp::probFileHisto
private

Definition at line 109 of file PileUp.h.

bool edm::PileUp::probFunctionDistribution_
private

Definition at line 82 of file PileUp.h.

Referenced by CalculatePileup(), PileUp(), and reload().

boost::shared_ptr<ProcessConfiguration> edm::PileUp::processConfiguration_
private

Definition at line 98 of file PileUp.h.

Referenced by beginLuminosityBlock(), beginRun(), and PileUp().

boost::shared_ptr<ProductRegistry> edm::PileUp::productRegistry_
private

Definition at line 96 of file PileUp.h.

Referenced by beginJob(), beginLuminosityBlock(), beginRun(), and PileUp().

std::unique_ptr<SecondaryEventProvider> edm::PileUp::provider_
private
bool edm::PileUp::PU_Study_
private

Definition at line 90 of file PileUp.h.

Referenced by CalculatePileup(), and PileUp().

boost::shared_ptr<RunPrincipal> edm::PileUp::runPrincipal_
private

Definition at line 101 of file PileUp.h.

Referenced by beginLuminosityBlock(), beginRun(), and endRun().

bool edm::PileUp::samelumi_
private

Definition at line 118 of file PileUp.h.

Referenced by readPileUp().

int edm::PileUp::seed_
private

Definition at line 121 of file PileUp.h.

Referenced by PileUp().

bool edm::PileUp::sequential_
private

Definition at line 115 of file PileUp.h.

Referenced by readPileUp().

std::string edm::PileUp::Study_type_
private

Definition at line 91 of file PileUp.h.

Referenced by CalculatePileup(), and PileUp().

std::string edm::PileUp::type_
private