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 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, StreamID const &)
 
bool doPileUp (int BX)
 
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, std::string sourcename, double averageNumber, TH1F *const histo, const bool playback)
 
template<typename T >
void playOldFormatPileUp (std::vector< edm::EventID >::const_iterator begin, std::vector< edm::EventID >::const_iterator end, std::vector< edm::SecondaryEventIDAndFileInfo > &ids, T eventOperator)
 
template<typename T >
void playPileUp (std::vector< edm::SecondaryEventIDAndFileInfo >::const_iterator begin, std::vector< edm::SecondaryEventIDAndFileInfo >::const_iterator end, std::vector< edm::SecondaryEventIDAndFileInfo > &ids, T eventOperator)
 
bool poisson () const
 
template<typename T >
void readPileUp (edm::EventID const &signal, std::vector< edm::SecondaryEventIDAndFileInfo > &ids, T eventOperator, int const NumPU, StreamID const &)
 
void reload (const edm::EventSetup &setup)
 
void setupPileUpEvent (const edm::EventSetup &setup)
 
 ~PileUp ()
 

Private Member Functions

std::unique_ptr
< CLHEP::RandPoisson > const & 
poissonDistr_OOT (StreamID const &streamID)
 
std::unique_ptr
< CLHEP::RandPoissonQ > const & 
poissonDistribution (StreamID const &streamID)
 
CLHEP::HepRandomEngine * randomEngine (StreamID const &streamID)
 

Private Attributes

double averageNumber_
 
std::unique_ptr< EventPrincipaleventPrincipal_
 
size_t fileNameHash_
 
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_
 
std::shared_ptr
< LuminosityBlockPrincipal
lumiPrincipal_
 
bool manage_OOT_
 
int maxBunch_cosmics_
 
int minBunch_cosmics_
 
bool none_
 
bool playback_
 
bool poisson_
 
bool poisson_OOT_
 
TFile * probFileHisto
 
bool probFunctionDistribution_
 
std::shared_ptr
< ProcessConfiguration
processConfiguration_
 
std::shared_ptr< ProductRegistryproductRegistry_
 
std::unique_ptr
< SecondaryEventProvider
provider_
 
bool PU_Study_
 
std::vector
< CLHEP::HepRandomEngine * > 
randomEngines_
 
std::shared_ptr< RunPrincipalrunPrincipal_
 
bool samelumi_
 
int seed_
 
bool sequential_
 
std::string Source_type_
 
std::string Study_type_
 
std::string type_
 
std::vector< std::unique_ptr
< CLHEP::RandPoisson > > 
vPoissonDistr_OOT_
 
std::vector< std::unique_ptr
< CLHEP::RandPoissonQ > > 
vPoissonDistribution_
 

Detailed Description

Definition at line 30 of file PileUp.h.

Constructor & Destructor Documentation

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

Definition at line 33 of file PileUp.cc.

References dqmPostProcessing_online::DB, edm::ParameterSet::emptyParameterSetID(), eventPrincipal_, Exception, edm::ParameterSet::exists(), edm::ParameterSet::existsAs(), fixed_, fixed_OOT_, edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), histoDistribution_, input_, intFixed_ITPU_, intFixed_OOT_, edm::Service< T >::isAvailable(), manage_OOT_, maxBunch_cosmics_, minBunch_cosmics_, edm::RandomNumberGenerator::mySeed(), none_, poisson_, poisson_OOT_, probFunctionDistribution_, processConfiguration_, HLT_25ns14e33_v1_cff::producers, productRegistry_, provider_, PU_Study_, seed_, Source_type_, AlCaHLTBitMon_QueryRunRegistry::string, Study_type_, and type_.

33  :
34  type_(pset.getParameter<std::string>("type")),
35  Source_type_(sourcename),
37  intAverage_(static_cast<int>(averageNumber)),
38  histo_(histo),
39  histoDistribution_(type_ == "histo"),
40  probFunctionDistribution_(type_ == "probFunction"),
41  poisson_(type_ == "poisson"),
42  fixed_(type_ == "fixed"),
43  none_(type_ == "none"),
44  fileNameHash_(0U),
46  input_(VectorInputSourceFactory::get()->makeVectorInputSource(pset, InputSourceDescription(
47  ModuleDescription(),
49  std::make_shared<BranchIDListHelper>(),
50  std::make_shared<ThinnedAssociationsHelper>(),
51  std::make_shared<ActivityRegistry>(),
52  -1, -1, -1,
53  PreallocationConfiguration()
54  )).release()),
55  processConfiguration_(new ProcessConfiguration(std::string("@MIXING"), getReleaseVersion(), getPassID())),
58  runPrincipal_(),
59  provider_(),
64  sequential_(pset.getUntrackedParameter<bool>("sequential", false)),
65  samelumi_(pset.getUntrackedParameter<bool>("sameLumiBlock", false)),
66  seed_(0) {
67 
68  // Use the empty parameter set for the parameter set ID of our "@MIXING" process.
70 
71  if(pset.existsAs<std::vector<ParameterSet> >("producers", true)) {
72  std::vector<ParameterSet> producers = pset.getParameter<std::vector<ParameterSet> >("producers");
73  provider_.reset(new SecondaryEventProvider(producers, *productRegistry_, processConfiguration_));
74  }
75 
76  productRegistry_->setFrozen();
77 
78  // A modified HistoryAppender must be used for unscheduled processing.
79  eventPrincipal_.reset(new EventPrincipal(input_->productRegistry(),
80  input_->branchIDListHelper(),
81  input_->thinnedAssociationsHelper(),
83  nullptr));
84 
85  if (pset.exists("nbPileupEvents")) {
86  seed_=pset.getParameter<edm::ParameterSet>("nbPileupEvents").getUntrackedParameter<int>("seed",0);
87  }
88 
89  bool DB=type_=="readDB";
90 
92  if (!rng.isAvailable()) {
93  throw cms::Exception("Configuration")
94  << "PileUp requires the RandomNumberGeneratorService\n"
95  "which is not present in the configuration file. You must add the service\n"
96  "in the configuration file or remove the modules that require it.";
97  }
98 
99  // Get seed for the case when using user histogram or probability function
100  // RANDOM_NUMBER_ERROR
101  // Random number should be generated by the engines from the
102  // RandomNumberGeneratorService. This appears to use the global
103  // engine in ROOT. This is not thread safe unless the module using
104  // it is a one module and declares a shared resource and all
105  // other modules using it also declare the same shared resource.
106  // This also breaks replay.
108  if(seed_ !=0) {
109  gRandom->SetSeed(seed_);
110  LogInfo("MixingModule") << " Change seed for " << type_ << " mode. The seed is set to " << seed_;
111  }
112  else {
113  gRandom->SetSeed(rng->mySeed());
114  }
115  }
116 
118  throw cms::Exception("Illegal parameter value","PileUp::PileUp(ParameterSet const& pset)")
119  << "'type' parameter (a string) has a value of '" << type_ << "'.\n"
120  << "Legal values are 'poisson', 'fixed', or 'none'\n";
121  }
122 
123  if (!DB){
124  manage_OOT_ = pset.getUntrackedParameter<bool>("manage_OOT", false);
125 
126  // Check for string describing special processing. Add these here for individual cases
127 
128  PU_Study_ = false;
129  Study_type_ = "";
130 
131  Study_type_ = pset.getUntrackedParameter<std::string>("Special_Pileup_Studies", "");
132 
133  if(Study_type_ == "Fixed_ITPU_Vary_OOTPU") {
134 
135  PU_Study_ = true;
136  intFixed_ITPU_ = pset.getUntrackedParameter<int>("intFixed_ITPU", 0);
137 
138  }
139 
140  if(manage_OOT_) { // figure out what the parameters are
141 
142  // if (playback_) throw cms::Exception("Illegal parameter clash","PileUp::PileUp(ParameterSet const& pset)")
143  // << " manage_OOT option not allowed with playback ";
144 
145  std::string OOT_type = pset.getUntrackedParameter<std::string>("OOT_type");
146 
147  if(OOT_type == "Poisson" || OOT_type == "poisson") {
148  poisson_OOT_ = true;
149  }
150  else if(OOT_type == "Fixed" || OOT_type == "fixed") {
151  fixed_OOT_ = true;
152  // read back the fixed number requested out-of-time
153  intFixed_OOT_ = pset.getUntrackedParameter<int>("intFixed_OOT", -1);
154  if(intFixed_OOT_ < 0) {
155  throw cms::Exception("Illegal parameter value","PileUp::PileUp(ParameterSet const& pset)")
156  << " Fixed out-of-time pileup requested, but no fixed value given ";
157  }
158  }
159  else {
160  throw cms::Exception("Illegal parameter value","PileUp::PileUp(ParameterSet const& pset)")
161  << "'OOT_type' parameter (a string) has a value of '" << OOT_type << "'.\n"
162  << "Legal values are 'poisson' or 'fixed'\n";
163  }
164  edm::LogInfo("MixingModule") <<" Out-of-time pileup will be generated with a " << OOT_type << " distribution. " ;
165  }
166  }
167 
168  if(Source_type_ == "cosmics") { // allow for some extra flexibility for mixing
169  minBunch_cosmics_ = pset.getUntrackedParameter<int>("minBunch_cosmics", -1000);
170  maxBunch_cosmics_ = pset.getUntrackedParameter<int>("maxBunch_cosmics", 1000);
171  }
172 
173 
174 
175  } // end of constructor
bool manage_OOT_
Definition: PileUp.h:96
size_t fileNameHash_
Definition: PileUp.h:110
std::string getPassID()
Definition: GetPassID.h:8
std::unique_ptr< SecondaryEventProvider > provider_
Definition: PileUp.h:117
std::shared_ptr< ProcessConfiguration > processConfiguration_
Definition: PileUp.h:113
TH1F * histo_
Definition: PileUp.h:90
bool fixed_
Definition: PileUp.h:94
std::vector< CLHEP::HepRandomEngine * > randomEngines_
Definition: PileUp.h:120
int const intAverage_
Definition: PileUp.h:89
bool probFunctionDistribution_
Definition: PileUp.h:92
int maxBunch_cosmics_
Definition: PileUp.h:108
std::string Study_type_
Definition: PileUp.h:101
bool histoDistribution_
Definition: PileUp.h:91
bool poisson_
Definition: PileUp.h:93
double averageNumber() const
Definition: PileUp.h:44
bool playback_
Definition: PileUp.h:127
virtual std::uint32_t mySeed() const =0
std::vector< std::unique_ptr< CLHEP::RandPoissonQ > > vPoissonDistribution_
Definition: PileUp.h:118
bool samelumi_
Definition: PileUp.h:133
std::unique_ptr< VectorInputSource > const input_
Definition: PileUp.h:112
bool poisson_OOT_
Definition: PileUp.h:97
bool isAvailable() const
Definition: Service.h:46
int intFixed_ITPU_
Definition: PileUp.h:105
bool PU_Study_
Definition: PileUp.h:100
bool fixed_OOT_
Definition: PileUp.h:98
int minBunch_cosmics_
Definition: PileUp.h:107
std::string getReleaseVersion()
std::shared_ptr< LuminosityBlockPrincipal > lumiPrincipal_
Definition: PileUp.h:115
std::string type_
Definition: PileUp.h:86
std::shared_ptr< ProductRegistry > productRegistry_
Definition: PileUp.h:111
bool sequential_
Definition: PileUp.h:130
std::string Source_type_
Definition: PileUp.h:87
int seed_
Definition: PileUp.h:136
bool none_
Definition: PileUp.h:95
std::vector< std::unique_ptr< CLHEP::RandPoisson > > vPoissonDistr_OOT_
Definition: PileUp.h:119
int intFixed_OOT_
Definition: PileUp.h:104
std::unique_ptr< EventPrincipal > eventPrincipal_
Definition: PileUp.h:114
std::shared_ptr< RunPrincipal > runPrincipal_
Definition: PileUp.h:116
static VectorInputSourceFactory const * get()
static ParameterSetID emptyParameterSetID()
double averageNumber_
Definition: PileUp.h:88
edm::PileUp::~PileUp ( )

Definition at line 326 of file PileUp.cc.

326  {
327  }

Member Function Documentation

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

Definition at line 44 of file PileUp.h.

References averageNumber_.

Referenced by reload().

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

Definition at line 181 of file PileUp.cc.

References input_, productRegistry_, and provider_.

181  {
182  input_->doBeginJob();
183  if (provider_.get() != nullptr) {
184  provider_->beginJob(*productRegistry_);
185  }
186  }
std::unique_ptr< SecondaryEventProvider > provider_
Definition: PileUp.h:117
std::unique_ptr< VectorInputSource > const input_
Definition: PileUp.h:112
std::shared_ptr< ProductRegistry > productRegistry_
Definition: PileUp.h:111
void edm::PileUp::beginLuminosityBlock ( const edm::LuminosityBlock lumi,
const edm::EventSetup setup 
)

Definition at line 202 of file PileUp.cc.

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

202  {
203  if (provider_.get() != nullptr) {
204  auto aux = std::make_shared<LuminosityBlockAuxiliary>(lumi.luminosityBlockAuxiliary());
205  lumiPrincipal_.reset(new LuminosityBlockPrincipal(aux, productRegistry_, *processConfiguration_, nullptr, 0));
206  lumiPrincipal_->setRunPrincipal(runPrincipal_);
207  provider_->beginLuminosityBlock(*lumiPrincipal_, setup, lumi.moduleCallingContext());
208  }
209  }
std::unique_ptr< SecondaryEventProvider > provider_
Definition: PileUp.h:117
std::shared_ptr< ProcessConfiguration > processConfiguration_
Definition: PileUp.h:113
ModuleCallingContext const * moduleCallingContext() const
std::shared_ptr< LuminosityBlockPrincipal > lumiPrincipal_
Definition: PileUp.h:115
LuminosityBlockAuxiliary const & luminosityBlockAuxiliary() const
std::shared_ptr< ProductRegistry > productRegistry_
Definition: PileUp.h:111
std::shared_ptr< RunPrincipal > runPrincipal_
Definition: PileUp.h:116
void edm::PileUp::beginRun ( const edm::Run run,
const edm::EventSetup setup 
)

Definition at line 195 of file PileUp.cc.

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

195  {
196  if (provider_.get() != nullptr) {
197  auto aux = std::make_shared<RunAuxiliary>(run.runAuxiliary());
198  runPrincipal_.reset(new RunPrincipal(aux, productRegistry_, *processConfiguration_, nullptr, 0));
199  provider_->beginRun(*runPrincipal_, setup, run.moduleCallingContext());
200  }
201  }
std::unique_ptr< SecondaryEventProvider > provider_
Definition: PileUp.h:117
std::shared_ptr< ProcessConfiguration > processConfiguration_
Definition: PileUp.h:113
RunAuxiliary const & runAuxiliary() const
Definition: Run.h:55
std::shared_ptr< ProductRegistry > productRegistry_
Definition: PileUp.h:111
ModuleCallingContext const * moduleCallingContext() const
Definition: Run.h:143
std::shared_ptr< RunPrincipal > runPrincipal_
Definition: PileUp.h:116
void edm::PileUp::CalculatePileup ( int  MinBunch,
int  MaxBunch,
std::vector< int > &  PileupSelection,
std::vector< float > &  TrueNumInteractions,
StreamID const &  streamID 
)

Definition at line 375 of file PileUp.cc.

References averageNumber_, ztail::d, fixed_, histo_, histoDistribution_, intAverage_, intFixed_ITPU_, intFixed_OOT_, manage_OOT_, none_, poisson_, poisson_OOT_, poissonDistr_OOT(), poissonDistribution(), probFunctionDistribution_, PU_Study_, and Study_type_.

375  {
376 
377  // if we are managing the distribution of out-of-time pileup separately, select the distribution for bunch
378  // crossing zero first, save it for later.
379 
380  int nzero_crossing = -1;
381  double Fnzero_crossing = -1;
382 
383  if(manage_OOT_) {
384  if (none_){
385  nzero_crossing = 0;
386  }else if (poisson_){
387  nzero_crossing = poissonDistribution(streamID)->fire() ;
388  }else if (fixed_){
389  nzero_crossing = intAverage_ ;
391  // RANDOM_NUMBER_ERROR
392  // Random number should be generated by the engines from the
393  // RandomNumberGeneratorService. This appears to use the global
394  // engine in ROOT. This is not thread safe unless the module using
395  // it is a one module and declares a shared resource and all
396  // other modules using it also declare the same shared resource.
397  // This also breaks replay.
398  double d = histo_->GetRandom();
399  //n = (int) floor(d + 0.5); // incorrect for bins with integer edges
400  Fnzero_crossing = d;
401  nzero_crossing = int(d);
402  }
403 
404  }
405 
406  for(int bx = MinBunch; bx < MaxBunch+1; ++bx) {
407 
408  if(manage_OOT_) {
409  if(bx==0 && !poisson_OOT_) {
410  PileupSelection.push_back(nzero_crossing) ;
411  TrueNumInteractions.push_back( nzero_crossing );
412  }
413  else{
414  if(poisson_OOT_) {
415  if(PU_Study_ && (Study_type_ == "Fixed_ITPU_Vary_OOTPU" ) && bx==0 ) {
416  PileupSelection.push_back(intFixed_ITPU_) ;
417  }
418  else{
419  PileupSelection.push_back(poissonDistr_OOT(streamID)->fire(Fnzero_crossing)) ;
420  }
421  TrueNumInteractions.push_back( Fnzero_crossing );
422  }
423  else {
424  PileupSelection.push_back(intFixed_OOT_) ;
425  TrueNumInteractions.push_back( intFixed_OOT_ );
426  }
427  }
428  }
429  else {
430  if (none_){
431  PileupSelection.push_back(0);
432  TrueNumInteractions.push_back( 0. );
433  }else if (poisson_){
434  PileupSelection.push_back(poissonDistribution(streamID)->fire());
435  TrueNumInteractions.push_back( averageNumber_ );
436  }else if (fixed_){
437  PileupSelection.push_back(intAverage_);
438  TrueNumInteractions.push_back( intAverage_ );
440  // RANDOM_NUMBER_ERROR
441  // Random number should be generated by the engines from the
442  // RandomNumberGeneratorService. This appears to use the global
443  // engine in ROOT. This is not thread safe unless the module using
444  // it is a one module and declares a shared resource and all
445  // other modules using it also declare the same shared resource.
446  // This also breaks replay.
447  double d = histo_->GetRandom();
448  PileupSelection.push_back(int(d));
449  TrueNumInteractions.push_back( d );
450  }
451  }
452 
453  }
454  }
bool manage_OOT_
Definition: PileUp.h:96
TH1F * histo_
Definition: PileUp.h:90
bool fixed_
Definition: PileUp.h:94
int const intAverage_
Definition: PileUp.h:89
bool probFunctionDistribution_
Definition: PileUp.h:92
std::string Study_type_
Definition: PileUp.h:101
tuple d
Definition: ztail.py:151
bool histoDistribution_
Definition: PileUp.h:91
bool poisson_
Definition: PileUp.h:93
bool poisson_OOT_
Definition: PileUp.h:97
int intFixed_ITPU_
Definition: PileUp.h:105
std::unique_ptr< CLHEP::RandPoissonQ > const & poissonDistribution(StreamID const &streamID)
Definition: PileUp.cc:329
bool PU_Study_
Definition: PileUp.h:100
std::unique_ptr< CLHEP::RandPoisson > const & poissonDistr_OOT(StreamID const &streamID)
Definition: PileUp.cc:344
bool none_
Definition: PileUp.h:95
int intFixed_OOT_
Definition: PileUp.h:104
double averageNumber_
Definition: PileUp.h:88
bool edm::PileUp::doPileUp ( int  BX)
inline

Definition at line 46 of file PileUp.h.

References averageNumber_, maxBunch_cosmics_, minBunch_cosmics_, none_, and Source_type_.

46  {
47  if(Source_type_ != "cosmics") {
48  return none_ ? false : averageNumber_>0.;
49  }
50  else {
51  return ( BX >= minBunch_cosmics_ && BX <= maxBunch_cosmics_);
52  }
53  }
int maxBunch_cosmics_
Definition: PileUp.h:108
int minBunch_cosmics_
Definition: PileUp.h:107
std::string Source_type_
Definition: PileUp.h:87
bool none_
Definition: PileUp.h:95
double averageNumber_
Definition: PileUp.h:88
void edm::PileUp::dropUnwantedBranches ( std::vector< std::string > const &  wantedBranches)
inline

Definition at line 54 of file PileUp.h.

References input_.

54  {
55  input_->dropUnwantedBranches(wantedBranches);
56  }
std::unique_ptr< VectorInputSource > const input_
Definition: PileUp.h:112
void edm::PileUp::endJob ( void  )

Definition at line 188 of file PileUp.cc.

References input_, and provider_.

188  {
189  if (provider_.get() != nullptr) {
190  provider_->endJob();
191  }
192  input_->doEndJob();
193  }
std::unique_ptr< SecondaryEventProvider > provider_
Definition: PileUp.h:117
std::unique_ptr< VectorInputSource > const input_
Definition: PileUp.h:112
void edm::PileUp::endLuminosityBlock ( const edm::LuminosityBlock lumi,
const edm::EventSetup setup 
)

Definition at line 216 of file PileUp.cc.

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

216  {
217  if (provider_.get() != nullptr) {
218  provider_->endLuminosityBlock(*lumiPrincipal_, setup, lumi.moduleCallingContext());
219  }
220  }
std::unique_ptr< SecondaryEventProvider > provider_
Definition: PileUp.h:117
ModuleCallingContext const * moduleCallingContext() const
std::shared_ptr< LuminosityBlockPrincipal > lumiPrincipal_
Definition: PileUp.h:115
void edm::PileUp::endRun ( const edm::Run run,
const edm::EventSetup setup 
)

Definition at line 211 of file PileUp.cc.

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

211  {
212  if (provider_.get() != nullptr) {
213  provider_->endRun(*runPrincipal_, setup, run.moduleCallingContext());
214  }
215  }
std::unique_ptr< SecondaryEventProvider > provider_
Definition: PileUp.h:117
ModuleCallingContext const * moduleCallingContext() const
Definition: Run.h:143
std::shared_ptr< RunPrincipal > runPrincipal_
Definition: PileUp.h:116
const unsigned int& edm::PileUp::input ( ) const
inline

Definition at line 76 of file PileUp.h.

References inputType_.

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

Definition at line 77 of file PileUp.h.

References inputType_, and alignCSCRings::s.

77 {inputType_=s;}
unsigned int inputType_
Definition: PileUp.h:85
template<typename T >
void edm::PileUp::playOldFormatPileUp ( std::vector< edm::EventID >::const_iterator  begin,
std::vector< edm::EventID >::const_iterator  end,
std::vector< edm::SecondaryEventIDAndFileInfo > &  ids,
T  eventOperator 
)

Definition at line 205 of file PileUp.h.

References eventPrincipal_, fileNameHash_, and input_.

205  {
206  //TrueNumInteractions.push_back( end - begin ) ;
207  RecordEventID<T> recorder(ids, eventOperator);
208  input_->loopSpecified(*eventPrincipal_, fileNameHash_, begin, end, recorder);
209  }
size_t fileNameHash_
Definition: PileUp.h:110
std::unique_ptr< VectorInputSource > const input_
Definition: PileUp.h:112
#define end
Definition: vmac.h:37
#define begin
Definition: vmac.h:30
std::unique_ptr< EventPrincipal > eventPrincipal_
Definition: PileUp.h:114
template<typename T >
void edm::PileUp::playPileUp ( std::vector< edm::SecondaryEventIDAndFileInfo >::const_iterator  begin,
std::vector< edm::SecondaryEventIDAndFileInfo >::const_iterator  end,
std::vector< edm::SecondaryEventIDAndFileInfo > &  ids,
T  eventOperator 
)

Definition at line 197 of file PileUp.h.

References eventPrincipal_, fileNameHash_, and input_.

197  {
198  //TrueNumInteractions.push_back( end - begin ) ;
199  RecordEventID<T> recorder(ids, eventOperator);
200  input_->loopSpecified(*eventPrincipal_, fileNameHash_, begin, end, recorder);
201  }
size_t fileNameHash_
Definition: PileUp.h:110
std::unique_ptr< VectorInputSource > const input_
Definition: PileUp.h:112
#define end
Definition: vmac.h:37
#define begin
Definition: vmac.h:30
std::unique_ptr< EventPrincipal > eventPrincipal_
Definition: PileUp.h:114
bool edm::PileUp::poisson ( ) const
inline

Definition at line 45 of file PileUp.h.

References poisson_.

45 {return poisson_;}
bool poisson_
Definition: PileUp.h:93
std::unique_ptr< CLHEP::RandPoisson > const & edm::PileUp::poissonDistr_OOT ( StreamID const &  streamID)
private

Definition at line 344 of file PileUp.cc.

References cmsHarvester::index, randomEngine(), edm::StreamID::value(), and vPoissonDistr_OOT_.

Referenced by CalculatePileup().

344  {
345  unsigned int index = streamID.value();
346  if(index >= vPoissonDistr_OOT_.size()) {
347  // This resizing is not thread safe and only works because
348  // this is used by a "one" type module
349  vPoissonDistr_OOT_.resize(index + 1);
350  }
351  std::unique_ptr<CLHEP::RandPoisson>& ptr = vPoissonDistr_OOT_[index];
352  if(!ptr) {
353  CLHEP::HepRandomEngine& engine = *randomEngine(streamID);
354  ptr.reset(new CLHEP::RandPoisson(engine));
355  }
356  return ptr;
357  }
CLHEP::HepRandomEngine * randomEngine(StreamID const &streamID)
Definition: PileUp.cc:359
std::vector< std::unique_ptr< CLHEP::RandPoisson > > vPoissonDistr_OOT_
Definition: PileUp.h:119
std::unique_ptr< CLHEP::RandPoissonQ > const & edm::PileUp::poissonDistribution ( StreamID const &  streamID)
private

Definition at line 329 of file PileUp.cc.

References averageNumber_, cmsHarvester::index, randomEngine(), edm::StreamID::value(), and vPoissonDistribution_.

Referenced by CalculatePileup().

329  {
330  unsigned int index = streamID.value();
331  if(index >= vPoissonDistribution_.size()) {
332  // This resizing is not thread safe and only works because
333  // this is used by a "one" type module
334  vPoissonDistribution_.resize(index + 1);
335  }
336  std::unique_ptr<CLHEP::RandPoissonQ>& ptr = vPoissonDistribution_[index];
337  if(!ptr) {
338  CLHEP::HepRandomEngine& engine = *randomEngine(streamID);
339  ptr.reset(new CLHEP::RandPoissonQ(engine, averageNumber_));
340  }
341  return ptr;
342  }
std::vector< std::unique_ptr< CLHEP::RandPoissonQ > > vPoissonDistribution_
Definition: PileUp.h:118
CLHEP::HepRandomEngine * randomEngine(StreamID const &streamID)
Definition: PileUp.cc:359
double averageNumber_
Definition: PileUp.h:88
CLHEP::HepRandomEngine * edm::PileUp::randomEngine ( StreamID const &  streamID)
private

Definition at line 359 of file PileUp.cc.

References cmsHarvester::index, randomEngines_, and edm::StreamID::value().

Referenced by poissonDistr_OOT(), poissonDistribution(), and readPileUp().

359  {
360  unsigned int index = streamID.value();
361  if(index >= randomEngines_.size()) {
362  // This resizing is not thread safe and only works because
363  // this is used by a "one" type module
364  randomEngines_.resize(index + 1, nullptr);
365  }
366  CLHEP::HepRandomEngine* ptr = randomEngines_[index];
367  if(!ptr) {
369  ptr = &rng->getEngine(streamID);
370  randomEngines_[index] = ptr;
371  }
372  return ptr;
373  }
std::vector< CLHEP::HepRandomEngine * > randomEngines_
Definition: PileUp.h:120
template<typename T >
void edm::PileUp::readPileUp ( edm::EventID const &  signal,
std::vector< edm::SecondaryEventIDAndFileInfo > &  ids,
T  eventOperator,
int const  pileEventCnt,
StreamID const &  streamID 
)

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 170 of file PileUp.h.

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

171  {
172 
173  // One reason PileUp is responsible for recording event IDs is
174  // that it is the one that knows how many events will be read.
175  ids.reserve(pileEventCnt);
176  RecordEventID<T> recorder(ids,eventOperator);
177  int read;
178  if (samelumi_) {
179  const edm::LuminosityBlockID lumi(signal.run(), signal.luminosityBlock());
180  if (sequential_)
181  read = input_->loopSequentialWithID(*eventPrincipal_, fileNameHash_, lumi, pileEventCnt, recorder);
182  else
183  read = input_->loopRandomWithID(*eventPrincipal_, fileNameHash_, lumi, pileEventCnt, recorder, randomEngine(streamID));
184  } else {
185  if (sequential_) {
186  read = input_->loopSequential(*eventPrincipal_, fileNameHash_, pileEventCnt, recorder);
187  } else {
188  read = input_->loopRandom(*eventPrincipal_, fileNameHash_, pileEventCnt, recorder, randomEngine(streamID));
189  }
190  }
191  if (read != pileEventCnt)
192  edm::LogWarning("PileUp") << "Could not read enough pileup events: only " << read << " out of " << pileEventCnt << " requested.";
193  }
size_t fileNameHash_
Definition: PileUp.h:110
tuple lumi
Definition: fjr2json.py:35
bool samelumi_
Definition: PileUp.h:133
std::unique_ptr< VectorInputSource > const input_
Definition: PileUp.h:112
bool sequential_
Definition: PileUp.h:130
CLHEP::HepRandomEngine * randomEngine(StreamID const &streamID)
Definition: PileUp.cc:359
std::unique_ptr< EventPrincipal > eventPrincipal_
Definition: PileUp.h:114
void edm::PileUp::reload ( const edm::EventSetup setup)

Definition at line 231 of file PileUp.cc.

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

231  {
232  //get the required parameters from DB.
234  setup.get<MixingRcd>().get(configM);
235 
236  const MixingInputConfig & config=configM->config(inputType_);
237 
238  //get the type
239  type_=config.type();
240  //set booleans
241  histoDistribution_=type_ == "histo";
242  probFunctionDistribution_=type_ == "probFunction";
243  poisson_=type_ == "poisson";
244  fixed_=type_ == "fixed";
245  none_=type_ == "none";
246 
247  if (histoDistribution_) edm::LogError("MisConfiguration")<<"type histo cannot be reloaded from DB, yet";
248 
249  if (fixed_){
251  }
252  else if (poisson_)
253  {
254  averageNumber_=config.averageNumber();
255  for(auto & distribution : vPoissonDistribution_) {
256  if(distribution) {
257  distribution.reset(new CLHEP::RandPoissonQ(distribution->engine(), averageNumber_));
258  }
259  }
260  }
261  else if (probFunctionDistribution_)
262  {
263  //need to reload the histogram from DB
264  const std::vector<int> & dataProbFunctionVar = config.probFunctionVariable();
265  std::vector<double> dataProb = config.probValue();
266 
267  int varSize = (int) dataProbFunctionVar.size();
268  int probSize = (int) dataProb.size();
269 
270  if ((dataProbFunctionVar[0] != 0) || (dataProbFunctionVar[varSize - 1] != (varSize - 1)))
271  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;
272 
273  // Complete the vector containing the probability function data
274  // with the values "0"
275  if (probSize < varSize){
276  edm::LogWarning("MixingModule") << " The probability function data will be completed with " <<(varSize - probSize) <<" values 0.";
277 
278  for (int i=0; i<(varSize - probSize); i++) dataProb.push_back(0);
279 
280  probSize = dataProb.size();
281  edm::LogInfo("MixingModule") << " The number of the P(x) data set after adding the values 0 is " << probSize;
282  }
283 
284  // Create an histogram with the data from the probability function provided by the user
285  int xmin = (int) dataProbFunctionVar[0];
286  int xmax = (int) dataProbFunctionVar[varSize-1]+1; // need upper edge to be one beyond last value
287  int numBins = varSize;
288 
289  edm::LogInfo("MixingModule") << "An histogram will be created with " << numBins << " bins in the range ("<< xmin << "," << xmax << ")." << std::endl;
290 
291  if (histo_) delete histo_;
292  histo_ = new TH1F("h","Histo from the user's probability function",numBins,xmin,xmax);
293 
294  LogDebug("MixingModule") << "Filling histogram with the following data:" << std::endl;
295 
296  for (int j=0; j < numBins ; j++){
297  LogDebug("MixingModule") << " x = " << dataProbFunctionVar[j ]<< " P(x) = " << dataProb[j];
298  histo_->Fill(dataProbFunctionVar[j]+0.5,dataProb[j]); // assuming integer values for the bins, fill bin centers, not edges
299  }
300 
301  // Check if the histogram is normalized
302  if ( ((histo_->Integral() - 1) > 1.0e-02) && ((histo_->Integral() - 1) < -1.0e-02)){
303  throw cms::Exception("BadProbFunction") << "The probability function should be normalized!!! " << std::endl;
304  }
305  averageNumber_=histo_->GetMean();
306  }
307 
308  int oot=config.outOfTime();
309  manage_OOT_=false;
310  if (oot==1)
311  {
312  manage_OOT_=true;
313  poisson_OOT_ = false;
314  fixed_OOT_ = true;
315  intFixed_OOT_=config.fixedOutOfTime();
316  }
317  else if (oot==2)
318  {
319  manage_OOT_=true;
320  poisson_OOT_ = true;
321  fixed_OOT_ = false;
322  }
323 
324 
325  }
#define LogDebug(id)
bool manage_OOT_
Definition: PileUp.h:96
int i
Definition: DBlmapReader.cc:9
unsigned int inputType_
Definition: PileUp.h:85
const int fixedOutOfTime() const
TH1F * histo_
Definition: PileUp.h:90
bool fixed_
Definition: PileUp.h:94
const std::vector< double > & probValue() const
const double averageNumber() const
bool probFunctionDistribution_
Definition: PileUp.h:92
bool histoDistribution_
Definition: PileUp.h:91
bool poisson_
Definition: PileUp.h:93
double averageNumber() const
Definition: PileUp.h:44
const int outOfTime() const
std::vector< std::unique_ptr< CLHEP::RandPoissonQ > > vPoissonDistribution_
Definition: PileUp.h:118
bool poisson_OOT_
Definition: PileUp.h:97
int j
Definition: DBlmapReader.cc:9
bool fixed_OOT_
Definition: PileUp.h:98
std::string type_
Definition: PileUp.h:86
const T & get() const
Definition: EventSetup.h:55
const std::vector< int > & probFunctionVariable() const
bool none_
Definition: PileUp.h:95
int intFixed_OOT_
Definition: PileUp.h:104
std::string type() const
double averageNumber_
Definition: PileUp.h:88
void edm::PileUp::setupPileUpEvent ( const edm::EventSetup setup)

Definition at line 222 of file PileUp.cc.

References eventPrincipal_, lumiPrincipal_, and provider_.

222  {
223  if (provider_.get() != nullptr) {
224  // note: run and lumi numbers must be modified to match lumiPrincipal_
225  eventPrincipal_->setLuminosityBlockPrincipal(lumiPrincipal_);
226  eventPrincipal_->setRunAndLumiNumber(lumiPrincipal_->run(), lumiPrincipal_->luminosityBlock());
227  provider_->setupPileUpEvent(*eventPrincipal_, setup);
228  }
229  }
std::unique_ptr< SecondaryEventProvider > provider_
Definition: PileUp.h:117
std::shared_ptr< LuminosityBlockPrincipal > lumiPrincipal_
Definition: PileUp.h:115
std::unique_ptr< EventPrincipal > eventPrincipal_
Definition: PileUp.h:114

Member Data Documentation

double edm::PileUp::averageNumber_
private

Definition at line 88 of file PileUp.h.

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

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

Definition at line 114 of file PileUp.h.

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

size_t edm::PileUp::fileNameHash_
private

Definition at line 110 of file PileUp.h.

Referenced by playOldFormatPileUp(), playPileUp(), and readPileUp().

bool edm::PileUp::fixed_
private

Definition at line 94 of file PileUp.h.

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

bool edm::PileUp::fixed_OOT_
private

Definition at line 98 of file PileUp.h.

Referenced by PileUp(), and reload().

TH1F* edm::PileUp::h1f
private

Definition at line 122 of file PileUp.h.

TH1F* edm::PileUp::histo_
private

Definition at line 90 of file PileUp.h.

Referenced by CalculatePileup(), and reload().

bool edm::PileUp::histoDistribution_
private

Definition at line 91 of file PileUp.h.

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

TH1F* edm::PileUp::hprobFunction
private

Definition at line 123 of file PileUp.h.

std::unique_ptr<VectorInputSource> const edm::PileUp::input_
private
unsigned int edm::PileUp::inputType_
private

Definition at line 85 of file PileUp.h.

Referenced by input(), and reload().

int const edm::PileUp::intAverage_
private

Definition at line 89 of file PileUp.h.

Referenced by CalculatePileup().

int edm::PileUp::intFixed_ITPU_
private

Definition at line 105 of file PileUp.h.

Referenced by CalculatePileup(), and PileUp().

int edm::PileUp::intFixed_OOT_
private

Definition at line 104 of file PileUp.h.

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

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

Definition at line 115 of file PileUp.h.

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

bool edm::PileUp::manage_OOT_
private

Definition at line 96 of file PileUp.h.

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

int edm::PileUp::maxBunch_cosmics_
private

Definition at line 108 of file PileUp.h.

Referenced by doPileUp(), and PileUp().

int edm::PileUp::minBunch_cosmics_
private

Definition at line 107 of file PileUp.h.

Referenced by doPileUp(), and PileUp().

bool edm::PileUp::none_
private

Definition at line 95 of file PileUp.h.

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

bool edm::PileUp::playback_
private

Definition at line 127 of file PileUp.h.

bool edm::PileUp::poisson_
private

Definition at line 93 of file PileUp.h.

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

bool edm::PileUp::poisson_OOT_
private

Definition at line 97 of file PileUp.h.

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

TFile* edm::PileUp::probFileHisto
private

Definition at line 124 of file PileUp.h.

bool edm::PileUp::probFunctionDistribution_
private

Definition at line 92 of file PileUp.h.

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

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

Definition at line 113 of file PileUp.h.

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

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

Definition at line 111 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 100 of file PileUp.h.

Referenced by CalculatePileup(), and PileUp().

std::vector<CLHEP::HepRandomEngine*> edm::PileUp::randomEngines_
private

Definition at line 120 of file PileUp.h.

Referenced by randomEngine().

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

Definition at line 116 of file PileUp.h.

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

bool edm::PileUp::samelumi_
private

Definition at line 133 of file PileUp.h.

Referenced by readPileUp().

int edm::PileUp::seed_
private

Definition at line 136 of file PileUp.h.

Referenced by PileUp().

bool edm::PileUp::sequential_
private

Definition at line 130 of file PileUp.h.

Referenced by readPileUp().

std::string edm::PileUp::Source_type_
private

Definition at line 87 of file PileUp.h.

Referenced by doPileUp(), and PileUp().

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

Definition at line 101 of file PileUp.h.

Referenced by CalculatePileup(), and PileUp().

std::string edm::PileUp::type_
private
std::vector<std::unique_ptr<CLHEP::RandPoisson> > edm::PileUp::vPoissonDistr_OOT_
private

Definition at line 119 of file PileUp.h.

Referenced by poissonDistr_OOT().

std::vector<std::unique_ptr<CLHEP::RandPoissonQ> > edm::PileUp::vPoissonDistribution_
private

Definition at line 118 of file PileUp.h.

Referenced by poissonDistribution(), and reload().