CMS 3D CMS Logo

CalibratedPhotonProducersRun2.cc
Go to the documentation of this file.
1 #ifndef CalibratedPhotonProducer_h
2 #define CalibratedPhotonProducer_h
3 
10 
14 
15 #include <memory>
16 
17 #include <TRandom2.h>
18 #include <random>
19 #include <vector>
20 
21 template <typename T>
23 public:
26  void produce(edm::Event &, const edm::EventSetup &) override;
27 
28 private:
31  std::unique_ptr<TRandom> theSemiDeterministicRng;
32 };
33 
34 template <typename T>
36  : thePhotonToken(consumes<edm::View<T> >(conf.getParameter<edm::InputTag>("photons"))),
37  theEnCorrectorRun2(conf.getParameter<bool>("isMC"),
38  conf.getParameter<bool>("isSynchronization"),
39  conf.getParameter<std::string>("correctionFile")) {
40  if (conf.existsAs<bool>("semiDeterministic") && conf.getParameter<bool>("semiDeterministic")) {
41  theSemiDeterministicRng = std::make_unique<TRandom2>();
43  }
44  produces<std::vector<T> >();
45 }
46 
47 template <typename T>
49 
50 template <typename T>
53  iEvent.getByToken(thePhotonToken, in);
54 
55  if (theSemiDeterministicRng && !in->empty()) { // no need to set a seed if in is empty
56  const auto &first = in->front();
57  std::seed_seq seeder = {int(iEvent.id().event()),
58  int(iEvent.id().luminosityBlock()),
59  int(iEvent.id().run()),
60  int(in->size()),
61  int(std::numeric_limits<int>::max() * first.phi() / M_PI) & 0xFFF,
62  int(first.pdgId())};
63  uint32_t seed = 0, tries = 10;
64  do {
65  seeder.generate(&seed, &seed + 1);
66  tries++;
67  } while (seed == 0 && tries < 10);
68  theSemiDeterministicRng->SetSeed(seed ? seed : iEvent.id().event());
69  }
70 
71  std::unique_ptr<std::vector<T> > out(new std::vector<T>());
72  out->reserve(in->size());
73 
74  for (const T &ele : *in) {
75  out->push_back(ele);
76  theEnCorrectorRun2.calibrate(out->back(), iEvent.id().run(), iEvent.streamID());
77  }
78 
79  iEvent.put(std::move(out));
80 }
81 
84 
86 
89 
90 #endif
PhotonEnergyCalibratorRun2.h
Handle.h
electrons_cff.bool
bool
Definition: electrons_cff.py:366
ESHandle.h
sistrip::View
View
Definition: ConstantsForView.h:26
edm::EDGetTokenT
Definition: EDGetToken.h:33
edm
HLT enums.
Definition: AlignableModifier.h:19
Photon.h
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89285
EDProducer.h
CalibratedPhotonProducerRun2T::theSemiDeterministicRng
std::unique_ptr< TRandom > theSemiDeterministicRng
Definition: CalibratedPhotonProducersRun2.cc:31
edm::ParameterSet::existsAs
bool existsAs(std::string const &parameterName, bool trackiness=true) const
checks if a parameter exists as a given type
Definition: ParameterSet.h:171
edm::Handle
Definition: AssociativeIterator.h:50
fileCollector.seed
seed
Definition: fileCollector.py:127
MakerMacros.h
Photon.h
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
CalibratedPhotonProducerRun2T::produce
void produce(edm::Event &, const edm::EventSetup &) override
Definition: CalibratedPhotonProducersRun2.cc:51
PhotonEnergyCalibratorRun2
Definition: PhotonEnergyCalibratorRun2.h:11
first
auto first
Definition: CAHitNtupletGeneratorKernelsImpl.h:112
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
edm::ParameterSet
Definition: ParameterSet.h:47
Event.h
SiStripPI::max
Definition: SiStripPayloadInspectorHelper.h:169
recoMuon::in
Definition: RecoMuonEnumerators.h:6
createfilelist.int
int
Definition: createfilelist.py:10
iEvent
int iEvent
Definition: GenABIO.cc:224
M_PI
#define M_PI
Definition: BXVectorInputProducer.cc:49
edm::stream::EDProducer
Definition: EDProducer.h:38
edm::EventSetup
Definition: EventSetup.h:58
CalibratedPhotonProducerRun2T::~CalibratedPhotonProducerRun2T
~CalibratedPhotonProducerRun2T() override
Definition: CalibratedPhotonProducersRun2.cc:48
CalibratedPhotonProducerRun2T
Definition: CalibratedPhotonProducersRun2.cc:22
CalibratedPhotonProducerRun2T::theEnCorrectorRun2
PhotonEnergyCalibratorRun2 theEnCorrectorRun2
Definition: CalibratedPhotonProducersRun2.cc:30
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
T
long double T
Definition: Basic3DVectorLD.h:48
EventSetup.h
CalibratedPhotonProducerRun2
CalibratedPhotonProducerRun2T< reco::Photon > CalibratedPhotonProducerRun2
Definition: CalibratedPhotonProducersRun2.cc:82
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
MillePedeFileConverter_cfg.out
out
Definition: MillePedeFileConverter_cfg.py:31
ParameterSet.h
CalibratedPhotonProducerRun2T::CalibratedPhotonProducerRun2T
CalibratedPhotonProducerRun2T(const edm::ParameterSet &)
Definition: CalibratedPhotonProducersRun2.cc:35
edm::Event
Definition: Event.h:73
CalibratedPhotonProducerRun2T::thePhotonToken
edm::EDGetTokenT< edm::View< T > > thePhotonToken
Definition: CalibratedPhotonProducersRun2.cc:29
PhotonEnergyCalibratorRun2::initPrivateRng
void initPrivateRng(TRandom *rnd)
Definition: PhotonEnergyCalibratorRun2.cc:24
CalibratedPatPhotonProducerRun2
CalibratedPhotonProducerRun2T< pat::Photon > CalibratedPatPhotonProducerRun2
Definition: CalibratedPhotonProducersRun2.cc:83