CMS 3D CMS Logo

CosMuoGenProducer.cc
Go to the documentation of this file.
1 
4 
8 
10 
12  : //RanS(pset.getParameter<int>("RanSeed", 123456)), //get seed now from Framework
13  MinP(pset.getParameter<double>("MinP")),
14  MinP_CMS(pset.getParameter<double>("MinP_CMS")),
15  MaxP(pset.getParameter<double>("MaxP")),
16  MinT(pset.getParameter<double>("MinTheta")),
17  MaxT(pset.getParameter<double>("MaxTheta")),
18  MinPh(pset.getParameter<double>("MinPhi")),
19  MaxPh(pset.getParameter<double>("MaxPhi")),
20  MinS(pset.getParameter<double>("MinT0")),
21  MaxS(pset.getParameter<double>("MaxT0")),
22  ELSF(pset.getParameter<double>("ElossScaleFactor")),
23  RTarget(pset.getParameter<double>("RadiusOfTarget")),
24  ZTarget(pset.getParameter<double>("ZDistOfTarget")),
25  ZCTarget(pset.getParameter<double>("ZCentrOfTarget")),
26  TrackerOnly(pset.getParameter<bool>("TrackerOnly")),
27  MultiMuon(pset.getParameter<bool>("MultiMuon")),
28  MultiMuonFileName(pset.getParameter<std::string>("MultiMuonFileName")),
29  MultiMuonFileFirstEvent(pset.getParameter<int>("MultiMuonFileFirstEvent")),
30  MultiMuonNmin(pset.getParameter<int>("MultiMuonNmin")),
31  TIFOnly_constant(pset.getParameter<bool>("TIFOnly_constant")),
32  TIFOnly_linear(pset.getParameter<bool>("TIFOnly_linear")),
33  MTCCHalf(pset.getParameter<bool>("MTCCHalf")),
34  PlugVtx(pset.getParameter<double>("PlugVx")),
35  PlugVtz(pset.getParameter<double>("PlugVz")),
36  VarRhoAir(pset.getParameter<double>("RhoAir")),
37  VarRhoWall(pset.getParameter<double>("RhoWall")),
38  VarRhoRock(pset.getParameter<double>("RhoRock")),
39  VarRhoClay(pset.getParameter<double>("RhoClay")),
40  VarRhoPlug(pset.getParameter<double>("RhoPlug")),
41  ClayLayerWidth(pset.getParameter<double>("ClayWidth")),
42  MinEn(pset.getParameter<double>("MinEnu")),
43  MaxEn(pset.getParameter<double>("MaxEnu")),
44  NuPrdAlt(pset.getParameter<double>("NuProdAlt")),
45  AllMu(pset.getParameter<bool>("AcptAllMu")),
46  extCrossSect(pset.getUntrackedParameter<double>("crossSection", -1.)),
47  extFilterEff(pset.getUntrackedParameter<double>("filterEfficiency", -1.)),
48  cmVerbosity_(pset.getParameter<bool>("Verbosity")),
49  isInitialized_(false) {
50  //if not specified (i.e. negative) then use MinP also for MinP_CMS
51  if (MinP_CMS < 0)
52  MinP_CMS = MinP;
53 
54  // set up the generator
55  CosMuoGen = std::make_unique<CosmicMuonGenerator>();
56  // Begin JMM change
57  // CosMuoGen->setNumberOfEvents(numberEventsInRun());
58  CosMuoGen->setNumberOfEvents(999999999);
59  // End of JMM change
60  CosMuoGen->setRanSeed(RanS);
61  CosMuoGen->setMinP(MinP);
62  CosMuoGen->setMinP_CMS(MinP_CMS);
63  CosMuoGen->setMaxP(MaxP);
64  CosMuoGen->setMinTheta(MinT);
65  CosMuoGen->setMaxTheta(MaxT);
66  CosMuoGen->setMinPhi(MinPh);
67  CosMuoGen->setMaxPhi(MaxPh);
68  CosMuoGen->setMinT0(MinS);
69  CosMuoGen->setMaxT0(MaxS);
70  CosMuoGen->setElossScaleFactor(ELSF);
71  CosMuoGen->setRadiusOfTarget(RTarget);
72  CosMuoGen->setZDistOfTarget(ZTarget);
73  CosMuoGen->setZCentrOfTarget(ZCTarget);
74  CosMuoGen->setTrackerOnly(TrackerOnly);
75  CosMuoGen->setMultiMuon(MultiMuon);
76  CosMuoGen->setMultiMuonFileName(MultiMuonFileName);
77  CosMuoGen->setMultiMuonFileFirstEvent(MultiMuonFileFirstEvent);
78  CosMuoGen->setMultiMuonNmin(MultiMuonNmin);
79  CosMuoGen->setTIFOnly_constant(TIFOnly_constant);
80  CosMuoGen->setTIFOnly_linear(TIFOnly_linear);
81  CosMuoGen->setMTCCHalf(MTCCHalf);
82  CosMuoGen->setPlugVx(PlugVtx);
83  CosMuoGen->setPlugVz(PlugVtz);
84  CosMuoGen->setRhoAir(VarRhoAir);
85  CosMuoGen->setRhoWall(VarRhoWall);
86  CosMuoGen->setRhoRock(VarRhoRock);
87  CosMuoGen->setRhoClay(VarRhoClay);
88  CosMuoGen->setRhoPlug(VarRhoPlug);
89  CosMuoGen->setClayWidth(ClayLayerWidth);
90  CosMuoGen->setMinEnu(MinEn);
91  CosMuoGen->setMaxEnu(MaxEn);
92  CosMuoGen->setNuProdAlt(NuPrdAlt);
93  CosMuoGen->setAcptAllMu(AllMu);
94  produces<HepMCProduct>("unsmeared");
95  produces<GenEventInfoProduct>();
96  produces<GenRunInfoProduct, edm::Transition::EndRun>();
97 }
98 
100 
102  if (!isInitialized_) {
103  isInitialized_ = true;
104  RandomEngineSentry<CosmicMuonGenerator> randomEngineSentry(CosMuoGen.get(), lumi.index());
105  CosMuoGen->initialize(randomEngineSentry.randomEngine());
106  }
107 }
108 
110  std::unique_ptr<GenRunInfoProduct> genRunInfo(new GenRunInfoProduct());
111 
112  double cs = CosMuoGen->getRate(); // flux in Hz, not s^-1m^-2
113  if (MultiMuon)
114  genRunInfo->setInternalXSec(0.);
115  else
116  genRunInfo->setInternalXSec(cs);
117  genRunInfo->setExternalXSecLO(extCrossSect);
118  genRunInfo->setFilterEfficiency(extFilterEff);
119 
120  run.put(std::move(genRunInfo));
121 
122  CosMuoGen->terminate();
123 }
124 
126 
128  RandomEngineSentry<CosmicMuonGenerator> randomEngineSentry(CosMuoGen.get(), e.streamID());
129 
130  // generate event
131  if (!MultiMuon) {
132  CosMuoGen->nextEvent();
133  } else {
134  bool success = CosMuoGen->nextMultiEvent();
135  if (!success)
136  std::cout << "CosMuoGenProducer.cc: CosMuoGen->nextMultiEvent() failed!" << std::endl;
137  }
138 
139  if (Debug) {
140  std::cout << "CosMuoGenProducer.cc: CosMuoGen->EventWeight=" << CosMuoGen->EventWeight
141  << " CosMuoGen: Nmuons=" << CosMuoGen->Id_sf.size() << std::endl;
142  std::cout << "CosMuoGen->Id_at=" << CosMuoGen->Id_at << " CosMuoGen->Vx_at=" << CosMuoGen->Vx_at
143  << " CosMuoGen->Vy_at=" << CosMuoGen->Vy_at << " CosMuoGen->Vz_at=" << CosMuoGen->Vz_at
144  << " CosMuoGen->T0_at=" << CosMuoGen->T0_at << std::endl;
145  std::cout << " Px=" << CosMuoGen->Px_at << " Py=" << CosMuoGen->Py_at << " Pz=" << CosMuoGen->Pz_at << std::endl;
146  for (unsigned int i = 0; i < CosMuoGen->Id_sf.size(); ++i) {
147  std::cout << "Id_sf[" << i << "]=" << CosMuoGen->Id_sf[i] << " Vx_sf[" << i << "]=" << CosMuoGen->Vx_sf[i]
148  << " Vy_sf=" << CosMuoGen->Vy_sf[i] << " Vz_sf=" << CosMuoGen->Vz_sf[i]
149  << " T0_sf=" << CosMuoGen->T0_sf[i] << " Px_sf=" << CosMuoGen->Px_sf[i]
150  << " Py_sf=" << CosMuoGen->Py_sf[i] << " Pz_sf=" << CosMuoGen->Pz_sf[i] << std::endl;
151  std::cout << "phi_sf=" << atan2(CosMuoGen->Px_sf[i], CosMuoGen->Pz_sf[i]) << std::endl;
152  std::cout << "Id_ug[" << i << "]=" << CosMuoGen->Id_ug[i] << " Vx_ug[" << i << "]=" << CosMuoGen->Vx_ug[i]
153  << " Vy_ug=" << CosMuoGen->Vy_ug[i] << " Vz_ug=" << CosMuoGen->Vz_ug[i]
154  << " T0_ug=" << CosMuoGen->T0_ug[i] << " Px_ug=" << CosMuoGen->Px_ug[i]
155  << " Py_ug=" << CosMuoGen->Py_ug[i] << " Pz_ug=" << CosMuoGen->Pz_ug[i] << std::endl;
156  std::cout << "phi_ug=" << atan2(CosMuoGen->Px_ug[i], CosMuoGen->Pz_ug[i]) << std::endl;
157  ;
158  }
159  }
160 
161  auto fEvt = std::make_unique<HepMC::GenEvent>();
162 
163  HepMC::GenVertex* Vtx_at = new HepMC::GenVertex(HepMC::FourVector(CosMuoGen->Vx_at, //[mm]
164  CosMuoGen->Vy_at, //[mm]
165  CosMuoGen->Vz_at, //[mm]
166  CosMuoGen->T0_at)); //[mm]
167  //cout << "CosMuoGenProducer.cc: Vy_at=" << CosMuoGen->Vy_at << endl;
168  HepMC::FourVector p_at(CosMuoGen->Px_at, CosMuoGen->Py_at, CosMuoGen->Pz_at, CosMuoGen->E_at);
169  HepMC::GenParticle* Part_at = new HepMC::GenParticle(p_at, CosMuoGen->Id_at, 3); //Comment mother particle in
170  Vtx_at->add_particle_in(Part_at);
171 
172  //loop here in case of multi muon events (else just one iteration)
173  for (unsigned int i = 0; i < CosMuoGen->Id_sf.size(); ++i) {
174  HepMC::FourVector p_sf(CosMuoGen->Px_sf[i], CosMuoGen->Py_sf[i], CosMuoGen->Pz_sf[i], CosMuoGen->E_sf[i]);
175  HepMC::GenParticle* Part_sf_in = new HepMC::GenParticle(p_sf, CosMuoGen->Id_sf[i], 3); //Comment daughter particle
176  Vtx_at->add_particle_out(Part_sf_in);
177 
178  HepMC::GenVertex* Vtx_sf = new HepMC::GenVertex(
179  HepMC::FourVector(CosMuoGen->Vx_sf[i], CosMuoGen->Vy_sf[i], CosMuoGen->Vz_sf[i], CosMuoGen->T0_sf[i])); //[mm]
180  HepMC::GenParticle* Part_sf_out = new HepMC::GenParticle(p_sf, CosMuoGen->Id_sf[i], 3); //Comment daughter particle
181 
182  Vtx_sf->add_particle_in(Part_sf_in);
183  Vtx_sf->add_particle_out(Part_sf_out);
184 
185  fEvt->add_vertex(Vtx_sf); //one per muon
186 
187  HepMC::GenVertex* Vtx_ug = new HepMC::GenVertex(
188  HepMC::FourVector(CosMuoGen->Vx_ug[i], CosMuoGen->Vy_ug[i], CosMuoGen->Vz_ug[i], CosMuoGen->T0_ug[i])); //[mm]
189 
190  HepMC::FourVector p_ug(CosMuoGen->Px_ug[i], CosMuoGen->Py_ug[i], CosMuoGen->Pz_ug[i], CosMuoGen->E_ug[i]);
191  HepMC::GenParticle* Part_ug = new HepMC::GenParticle(p_ug, CosMuoGen->Id_ug[i], 1); //Final state daughter particle
192 
193  Vtx_ug->add_particle_in(Part_sf_out);
194  Vtx_ug->add_particle_out(Part_ug);
195 
196  fEvt->add_vertex(Vtx_ug); //one per muon
197  }
198 
199  fEvt->add_vertex(Vtx_at);
200  fEvt->set_signal_process_vertex(Vtx_at);
201 
202  fEvt->set_event_number(e.id().event());
203  fEvt->set_signal_process_id(13);
204 
205  fEvt->weights().push_back(CosMuoGen->EventWeight); // just one event weight
206  fEvt->weights().push_back(CosMuoGen->Trials); // int Trials number (unweighted)
207 
208  if (cmVerbosity_)
209  fEvt->print();
210 
211  std::unique_ptr<GenEventInfoProduct> genEventInfo(new GenEventInfoProduct(fEvt.get()));
212  e.put(std::move(genEventInfo));
213 
214  //This causes fEvt to be deleted
215  std::unique_ptr<HepMCProduct> CMProduct(new HepMCProduct());
216  CMProduct->addHepMCData(fEvt.release());
217  e.put(std::move(CMProduct), "unsmeared");
218 }
GenEventInfoProduct
Definition: GenEventInfoProduct.h:17
edm::CosMuoGenProducer::VarRhoClay
double VarRhoClay
Definition: CosMuoGenProducer.h:69
edm::CosMuoGenProducer::VarRhoAir
double VarRhoAir
Definition: CosMuoGenProducer.h:66
electrons_cff.bool
bool
Definition: electrons_cff.py:393
mps_fire.i
i
Definition: mps_fire.py:428
CMSCGENproducer_cfi.MultiMuon
MultiMuon
Definition: CMSCGENproducer_cfi.py:34
funct::false
false
Definition: Factorize.h:29
CMSCGENproducer_cfi.MinP_CMS
MinP_CMS
Definition: CMSCGENproducer_cfi.py:19
CMSCGENproducer_cfi.MinP
MinP
Definition: CMSCGENproducer_cfi.py:14
fwrapper::cs
unique_ptr< ClusterSequence > cs
Definition: fastjetfortran_madfks.cc:47
edm::LuminosityBlock
Definition: LuminosityBlock.h:50
edm::CosMuoGenProducer::TIFOnly_constant
bool TIFOnly_constant
Definition: CosMuoGenProducer.h:56
edm::Run
Definition: Run.h:45
ZgammaFilter_cfi.HepMCProduct
HepMCProduct
Definition: ZgammaFilter_cfi.py:9
gather_cfg.cout
cout
Definition: gather_cfg.py:144
edm::CosMuoGenProducer::MaxPh
double MaxPh
Definition: CosMuoGenProducer.h:43
edm::CosMuoGenProducer::MultiMuonFileName
std::string MultiMuonFileName
Definition: CosMuoGenProducer.h:53
edm::CosMuoGenProducer::MaxT
double MaxT
Definition: CosMuoGenProducer.h:41
edm::CosMuoGenProducer::~CosMuoGenProducer
~CosMuoGenProducer() override
Definition: CosMuoGenProducer.cc:99
edm::CosMuoGenProducer::MinP_CMS
double MinP_CMS
Definition: CosMuoGenProducer.h:38
GenRunInfoProduct.h
edm::CosMuoGenProducer::PlugVtz
double PlugVtz
Definition: CosMuoGenProducer.h:63
edm::CosMuoGenProducer::MinEn
double MinEn
Definition: CosMuoGenProducer.h:74
CosMuoGenProducer.h
VtxSmearedParameters_cfi.MaxT
MaxT
Definition: VtxSmearedParameters_cfi.py:94
edm::CosMuoGenProducer::VarRhoPlug
double VarRhoPlug
Definition: CosMuoGenProducer.h:70
Debug
const bool Debug
Definition: CosmicMuonParameters.h:12
edm::CosMuoGenProducer::ZCTarget
double ZCTarget
Definition: CosMuoGenProducer.h:50
edm::CosMuoGenProducer::MaxP
double MaxP
Definition: CosMuoGenProducer.h:39
edm::CosMuoGenProducer::ZTarget
double ZTarget
Definition: CosMuoGenProducer.h:48
edm::CosMuoGenProducer::MinP
double MinP
Definition: CosMuoGenProducer.h:37
edm::CosMuoGenProducer::TIFOnly_linear
bool TIFOnly_linear
Definition: CosMuoGenProducer.h:57
edm::CosMuoGenProducer::VarRhoWall
double VarRhoWall
Definition: CosMuoGenProducer.h:67
Run.h
summarizeEdmComparisonLogfiles.success
success
Definition: summarizeEdmComparisonLogfiles.py:115
edm::CosMuoGenProducer::AllMu
bool AllMu
Definition: CosMuoGenProducer.h:78
edm::CosMuoGenProducer::RTarget
double RTarget
Definition: CosMuoGenProducer.h:47
CMSCGENproducer_cfi.TIFOnly_linear
TIFOnly_linear
Definition: CMSCGENproducer_cfi.py:6
CMSCGENproducer_cfi.MultiMuonFileFirstEvent
MultiMuonFileFirstEvent
Definition: CMSCGENproducer_cfi.py:37
GenRunInfoProduct
Definition: GenRunInfoProduct.h:8
edm::CosMuoGenProducer::clear
void clear()
Definition: CosMuoGenProducer.cc:125
CMSCGENproducer_cfi.MultiMuonNmin
MultiMuonNmin
Definition: CMSCGENproducer_cfi.py:38
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
edm::CosMuoGenProducer::VarRhoRock
double VarRhoRock
Definition: CosMuoGenProducer.h:68
edm::ParameterSet
Definition: ParameterSet.h:47
clear
void clear(HadCaloObj &c)
Definition: data.h:124
edm::CosMuoGenProducer::endRunProduce
void endRunProduce(Run &r, const EventSetup &es) override
Definition: CosMuoGenProducer.cc:109
GenEventInfoProduct.h
edm::CosMuoGenProducer::NuPrdAlt
double NuPrdAlt
Definition: CosMuoGenProducer.h:76
edm::CosMuoGenProducer::MinT
double MinT
Definition: CosMuoGenProducer.h:40
edm::CosMuoGenProducer::ELSF
double ELSF
Definition: CosMuoGenProducer.h:46
CMSCGENproducer_cfi.MaxP
MaxP
negative means MinP_CMS = MinP.
Definition: CMSCGENproducer_cfi.py:21
edm::CosMuoGenProducer::RanS
int32_t RanS
Definition: CosMuoGenProducer.h:36
edm::CosMuoGenProducer::CosMuoGen
std::unique_ptr< CosmicMuonGenerator > CosMuoGen
Definition: CosMuoGenProducer.h:84
createfilelist.int
int
Definition: createfilelist.py:10
edm::CosMuoGenProducer::PlugVtx
double PlugVtx
Definition: CosMuoGenProducer.h:62
edm::CosMuoGenProducer::ClayLayerWidth
double ClayLayerWidth
Definition: CosMuoGenProducer.h:71
edm::EventSetup
Definition: EventSetup.h:57
CMSCGENproducer_cfi.MTCCHalf
MTCCHalf
Definition: CMSCGENproducer_cfi.py:16
CMSCGENproducer_cfi.TrackerOnly
TrackerOnly
Definition: CMSCGENproducer_cfi.py:17
edm::CosMuoGenProducer::MaxEn
double MaxEn
Definition: CosMuoGenProducer.h:75
edm::CosMuoGenProducer::MultiMuonNmin
int32_t MultiMuonNmin
Definition: CosMuoGenProducer.h:55
edm::CosMuoGenProducer::MinS
double MinS
Definition: CosMuoGenProducer.h:44
GenParticle.GenParticle
GenParticle
Definition: GenParticle.py:18
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
writedatasetfile.run
run
Definition: writedatasetfile.py:27
RandomEngineSentry.h
genParticles2HepMC_cfi.genEventInfo
genEventInfo
Definition: genParticles2HepMC_cfi.py:6
edm::RandomEngineSentry
Definition: RandomEngineSentry.h:28
edm::CosMuoGenProducer::CosMuoGenProducer
CosMuoGenProducer(const ParameterSet &)
Definition: CosMuoGenProducer.cc:11
edm::CosMuoGenProducer::TrackerOnly
bool TrackerOnly
Definition: CosMuoGenProducer.h:51
CMSCGENproducer_cfi.MultiMuonFileName
MultiMuonFileName
Definition: CMSCGENproducer_cfi.py:36
edm::CosMuoGenProducer::MTCCHalf
bool MTCCHalf
Definition: CosMuoGenProducer.h:58
edm::CosMuoGenProducer::MinPh
double MinPh
Definition: CosMuoGenProducer.h:42
edm::CosMuoGenProducer::beginLuminosityBlock
void beginLuminosityBlock(LuminosityBlock const &, EventSetup const &) override
Definition: CosMuoGenProducer.cc:101
VtxSmearedParameters_cfi.MinT
MinT
Definition: VtxSmearedParameters_cfi.py:95
HepMCProduct.h
edm::CosMuoGenProducer::produce
void produce(Event &e, const EventSetup &es) override
Definition: CosMuoGenProducer.cc:127
edm::Event
Definition: Event.h:73
lumi
Definition: LumiSectionData.h:20
edm::CosMuoGenProducer::MaxS
double MaxS
Definition: CosMuoGenProducer.h:45
CMSCGENproducer_cfi.TIFOnly_constant
TIFOnly_constant
Definition: CMSCGENproducer_cfi.py:5
muonDTDigis_cfi.pset
pset
Definition: muonDTDigis_cfi.py:27
edm::CosMuoGenProducer::MultiMuon
bool MultiMuon
Definition: CosMuoGenProducer.h:52
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37
edm::CosMuoGenProducer::MultiMuonFileFirstEvent
int32_t MultiMuonFileFirstEvent
Definition: CosMuoGenProducer.h:54