CMS 3D CMS Logo

TestMixedSource.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: TestMixedSource
4 // Class: TestMixedSource
5 //
13 //
14 // Original Author: Emilia Lubenova Becheva
15 // Created: Wed May 20 16:46:58 CEST 2009
16 //
17 //
18 
19 // system include files
20 #include <memory>
21 
22 // user include files
24 
27 
29 
33 
38 
39 #include "TH1I.h"
40 #include "TFile.h"
41 
42 #include "TestMixedSource.h"
43 
44 #include <iostream>
45 #include <fstream>
46 
47 //
48 // constructors and destructor
49 //
50 namespace edm {
52  : fileName_(iConfig.getParameter<std::string>("fileName")),
53  minbunch_(iConfig.getParameter<int>("minBunch")),
54  maxbunch_(iConfig.getParameter<int>("maxBunch")) {
56  new TH1I("histoTrackSignal", "Bunchcrossings", maxbunch_ - minbunch_ + 1, minbunch_, maxbunch_ + 1);
58  new TH1I("histoTrackPileups", "Bunchcrossings", maxbunch_ - minbunch_ + 1, minbunch_, maxbunch_ + 1);
59 
60  // Vertex
61  histVertex_bunch_ = new TH1I("histoVertex", "Bunchcrossings", maxbunch_ - minbunch_ + 1, minbunch_, maxbunch_ + 1);
62 
63  // PCaloHit
65  new TH1I("histoPCaloHit", "Bunchcrossings", maxbunch_ - minbunch_ + 1, minbunch_, maxbunch_ + 1);
66 
67  // PSimHit
68  histPSimHit_bunchSignal_TrackerHitsTECHighTof_ = new TH1I("histoPSimHitTrackerHitsTECHighTofSignal",
69  "Bunchcrossings",
70  maxbunch_ - minbunch_ + 1,
71  minbunch_,
72  maxbunch_ + 1);
73  histPSimHit_bunchPileups_TrackerHitsTECHighTof_ = new TH1I("histoPSimHitTrackerHitsTECHighTofPileups",
74  "Bunchcrossings",
75  maxbunch_ - minbunch_ + 1,
76  minbunch_,
77  maxbunch_ + 1);
79  "histoPSimHitMuonCSCHitsSignal", "Bunchcrossings", maxbunch_ - minbunch_ + 1, minbunch_, maxbunch_ + 1);
81  "histoPSimHitMuonCSCHitsPileups", "Bunchcrossings", maxbunch_ - minbunch_ + 1, minbunch_, maxbunch_ + 1);
82 
83  int bsp = 25; //bunchspace
84  tofhist_ =
85  new TH1I("TrackerHit_Tof_bcr", "TrackerHit_ToF", 100, float(bsp * minbunch_), float(bsp * maxbunch_) + 50.);
86  tofhist_sig_ = new TH1I(
87  "SignalTrackerHit_Tof_bcr", "TrackerHit_ToF", 100, float(bsp * minbunch_), float(bsp * maxbunch_) + 50.);
88 
89  // HepMCProduct
91  new TH1I("histoHepMCProduct", "Bunchcrossings", maxbunch_ - minbunch_ + 1, minbunch_, maxbunch_ + 1);
92 
93  // Tokens
94 
95  edm::InputTag tag = edm::InputTag("mix", "g4SimHits");
96 
97  SimTrackToken_ = consumes<CrossingFrame<SimTrack>>(tag);
98  SimVertexToken_ = consumes<CrossingFrame<SimVertex>>(tag);
99 
100  tag = edm::InputTag("mix", "g4SimHitsTrackerHitsTECHighTof");
101  TrackerToken0_ = consumes<CrossingFrame<PSimHit>>(tag);
102 
103  tag = edm::InputTag("mix", "g4SimHitsEcalHitsEB");
104  CaloToken1_ = consumes<CrossingFrame<PCaloHit>>(tag);
105 
106  tag = edm::InputTag("mix", "g4SimHitsMuonCSCHits");
107  MuonToken_ = consumes<CrossingFrame<PSimHit>>(tag);
108 
109  tag = edm::InputTag("mix", "generatorSmeared");
110  HepMCToken_ = consumes<CrossingFrame<edm::HepMCProduct>>(tag);
111  }
112 
113  TestMixedSource::~TestMixedSource() { std::cout << " Destructor TestMixed" << std::endl; }
114 
115  //
116  // member functions
117  //
118 
119  // ------------ method called to for each event ------------
121  // test SimTracks
122  //----------------------
124  bool gotTracks = iEvent.getByToken(SimTrackToken_, cf_simtrack);
125  if (!gotTracks)
126  outputFile << " Could not read SimTracks!!!!"
127  << " Please, check if the object SimTracks has been declared in the"
128  << " MixingModule configuration file." << std::endl;
129 
130  if (gotTracks) {
131  outputFile << "\n=================== Starting SimTrack access ===================" << std::endl;
132 
133  std::unique_ptr<MixCollection<SimTrack>> col1(new MixCollection<SimTrack>(cf_simtrack.product()));
135  int count1 = 0;
136  std::cout << " \nWe got " << col1->sizeSignal() << " signal tracks and " << col1->sizePileup()
137  << " pileup tracks, total: " << col1->size() << std::endl;
138  for (cfi1 = col1->begin(); cfi1 != col1->end(); cfi1++) {
139  //std::cout << " BUNCH cfi1.bunch() = " << cfi1.bunch() << std::endl;
140  if (cfi1.getTrigger() == 0) {
141  histTrack_bunchPileups_->Fill(cfi1.bunch());
142  }
143 
144  if (cfi1.getTrigger() == 1) {
145  histTrack_bunchSignal_->Fill(cfi1.bunch());
146  }
147 
148  int a = count1 % 4;
149  if (a == 3) {
150  outputFile << " SimTrack " << count1 << " has genpart index " << cfi1->genpartIndex() << " vertex Index "
151  << cfi1->vertIndex() << " bunchcr " << cfi1.bunch() << " trigger " << cfi1.getTrigger()
152  << ", from EncodedEventId: " << cfi1->eventId().bunchCrossing() << " " << cfi1->eventId().event()
153  << std::endl;
154  }
155  count1++;
156  }
157  }
158 
159  // test SimVertices
160  //---------------------
162  bool gotSimVertex = iEvent.getByToken(SimVertexToken_, cf_simvtx);
163  if (!gotSimVertex)
164  outputFile << " Could not read Simvertices !!!!" << std::endl;
165  else {
166  outputFile << "\n=================== Starting SimVertex access ===================" << std::endl;
167  std::unique_ptr<MixCollection<SimVertex>> col2(new MixCollection<SimVertex>(cf_simvtx.product()));
169  int count2 = 0;
170  outputFile << " \nWe got " << col2->sizeSignal() << " signal vertices and " << col2->sizePileup()
171  << " pileup vertices, total: " << col2->size() << std::endl;
172  for (cfi2 = col2->begin(); cfi2 != col2->end(); cfi2++) {
173  histVertex_bunch_->Fill(cfi2.bunch());
174  int b = count2 % 4;
175  if (count2 == 0 || b == 3) {
176  //outputFile<<" SimVertex "<<count2<<" has parent index "<<cfi2->parentIndex()<<" bunchcr "<<cfi2.bunch()<<" trigger "<<cfi2.getTrigger()<<", from EncodedEventId: "<<cfi2->eventId().bunchCrossing() <<" "<<cfi2->eventId().event() <<std::endl;
177  }
178  //SimVertex myvtx=(*cfi2);
179  //outputFile<<"Same with op*: "<<count2<<" has parent index "<<myvtx.parentIndex()<<" bunchcr "<<cfi2.bunch()<<" trigger "<<cfi2.getTrigger()<<", from EncodedEventId: "<<myvtx.eventId().bunchCrossing() <<" "<<myvtx.eventId().event() <<std::endl;
180  count2++;
181  }
182  }
183 
184  //test HepMCProducts
185  //------------------------------------
187  bool gotHepMCP = iEvent.getByToken(HepMCToken_, cf_hepmc);
188  if (!gotHepMCP)
189  std::cout << " Could not read HepMCProducts!!!!" << std::endl;
190  else {
191  outputFile << "\n=================== Starting HepMCProduct access ===================" << std::endl;
192  std::unique_ptr<MixCollection<edm::HepMCProduct>> colhepmc(
193  new MixCollection<edm::HepMCProduct>(cf_hepmc.product()));
195 
196  int count3 = 0;
197  outputFile << " \nWe got " << colhepmc->sizeSignal() << " signal hepmc products and " << colhepmc->sizePileup()
198  << " pileup hepmcs, total: " << colhepmc->size() << std::endl;
199  for (cfihepmc = colhepmc->begin(); cfihepmc != colhepmc->end(); cfihepmc++) {
200  histHepMCProduct_bunch_->Fill(cfihepmc.bunch());
201  int c = count3 % 4;
202  if (count3 == 0 || c == 3) {
203  //outputFile<<" edm::HepMCProduct "<<count3<<" has event number "<<cfihepmc->GetEvent()->event_number()<<", "<< cfihepmc->GetEvent()->particles_size()<<" particles and "<<cfihepmc->GetEvent()->vertices_size()<<" vertices, bunchcr= "<<cfihepmc.bunch()<<" trigger= "<<cfihepmc.getTrigger() <<" sourcetype= "<<cfihepmc.getSourceType()<<std::endl;
204  }
205  HepMCProduct myprod = colhepmc->getObject(count3);
206  //outputFile<<"same with getObject:hepmc product "<<count3<<" has event number "<<myprod.GetEvent()->event_number()<<", "<<myprod.GetEvent()->particles_size()<<" particles and "<<myprod.GetEvent()->vertices_size()<<" vertices"<<std::endl;
207  count3++;
208  }
209  }
210 
211  // test CaloHits
212  //--------------------------
213  const std::string subdetcalo("g4SimHitsEcalHitsEB");
215  bool gotPCaloHit = iEvent.getByToken(CaloToken1_, cf_calo);
216  if (!gotPCaloHit)
217  outputFile << " Could not read CaloHits with label " << subdetcalo << "!!!!" << std::endl;
218  else {
219  outputFile << "\n\n=================== Starting CaloHit access, subdet " << subdetcalo
220  << " ===================" << std::endl;
221  std::unique_ptr<MixCollection<PCaloHit>> colcalo(new MixCollection<PCaloHit>(cf_calo.product()));
222  //outputFile<<*(colcalo.get())<<std::endl;
224  int count4 = 0;
225  for (cficalo = colcalo->begin(); cficalo != colcalo->end(); cficalo++) {
226  histPCaloHit_bunch_->Fill(cficalo.bunch());
227  int d = count4 % 4;
228  if (count4 == 0 || d == 3) {
229  //outputFile<<" CaloHit "<<count4<<" has tof "<<cficalo->time()<<" trackid "<<cficalo->geantTrackId() <<" bunchcr "<<cficalo.bunch()<<" trigger "<<cficalo.getTrigger()<<", from EncodedEventId: "<<cficalo->eventId().bunchCrossing()<<" " <<cficalo->eventId().event() <<std::endl;
230  }
231  count4++;
232  }
233  }
234 
235  // test PSimHit for one particular subdet
236  //---------------------------------------
237 
238  const std::string subdet("g4SimHitsTrackerHitsTECHighTof");
240  bool gotPSimHit = iEvent.getByToken(TrackerToken0_, cf_simhit);
241  if (!gotPSimHit)
242  outputFile << " Could not read SimHits with label " << subdet << "!!!!" << std::endl;
243  else {
244  outputFile << "\n\n=================== Starting SimHit access, subdet " << subdet
245  << " ===================" << std::endl;
246 
247  std::unique_ptr<MixCollection<PSimHit>> col(new MixCollection<PSimHit>(cf_simhit.product()));
248  //outputFile<<*(col.get())<<std::endl;
250  int count5 = 0;
251  for (cfi = col->begin(); cfi != col->end(); cfi++) {
252  // Signal
253  if (cfi.getTrigger() == 1) {
255  tofhist_sig_->Fill(cfi->timeOfFlight());
256  }
257 
258  // Pileups
259  if (cfi.getTrigger() == 0) {
261  std::cout << " cfi->timeOfFlight() = " << cfi->timeOfFlight() << std::endl;
262  tofhist_->Fill(cfi->timeOfFlight());
263  }
264 
265  int e = count5 % 4;
266  if (e == 3) {
267  outputFile << " Hit " << count5 << " has tof " << cfi->timeOfFlight() << " trackid " << cfi->trackId()
268  << " bunchcr " << cfi.bunch() << " trigger " << cfi.getTrigger()
269  << ", from EncodedEventId: " << cfi->eventId().bunchCrossing() << " " << cfi->eventId().event()
270  << " bcr from MixCol " << cfi.bunch() << std::endl;
271  }
272  count5++;
273  }
274  }
275 
276  const std::string subdet1("g4SimHitsMuonCSCHits");
278  bool gotPSimHit1 = iEvent.getByToken(MuonToken_, cf_simhit1);
279  if (!gotPSimHit1)
280  outputFile << " Could not read SimHits with label " << subdet1 << "!!!!" << std::endl;
281  else {
282  outputFile << "\n\n=================== Starting SimHit access, subdet " << subdet1
283  << " ===================" << std::endl;
284 
285  std::unique_ptr<MixCollection<PSimHit>> col(new MixCollection<PSimHit>(cf_simhit1.product()));
286  //outputFile<<*(col.get())<<std::endl;
288  int count5 = 0;
289  for (cfi = col->begin(); cfi != col->end(); cfi++) {
290  if (cfi.getTrigger() == 1)
292 
293  if (cfi.getTrigger() == 0)
295 
296  int e = count5 % 4;
297  if (e == 3) {
298  outputFile << " Hit " << count5 << " has tof " << cfi->timeOfFlight() << " trackid " << cfi->trackId()
299  << " bunchcr " << cfi.bunch() << " trigger " << cfi.getTrigger()
300  << ", from EncodedEventId: " << cfi->eventId().bunchCrossing() << " " << cfi->eventId().event()
301  << " bcr from MixCol " << cfi.bunch() << std::endl;
302  }
303  count5++;
304  }
305  }
306  }
307 
308  // ------------ method called once each job just before starting event loop ------------
310  outputFile.open("test.log");
311  if (!outputFile.is_open()) {
312  std::cout << "Unable to open file!" << std::endl;
313  }
314  }
315 
316  // ------------ method called once each job just after ending the event loop ------------
318  outputFile.close();
319 
320  char t[30];
321  sprintf(t, "%s", fileName_.c_str());
322  std::cout << " fileName = " << t << std::endl;
323  histFile_ = new TFile(t, "RECREATE");
324  histTrack_bunchPileups_->Write();
325  histTrack_bunchSignal_->Write();
326  histVertex_bunch_->Write();
327  histPCaloHit_bunch_->Write();
330  tofhist_sig_->Write();
331  tofhist_->Write();
334  histHepMCProduct_bunch_->Write();
335  histFile_->Write();
336  histFile_->Close();
337  }
338 } // namespace edm
TH1I * histPSimHit_bunchPileups_TrackerHitsTECHighTof_
TH1I * histPSimHit_bunchSignal_MuonCSCHits_
TH1I * histPSimHit_bunchPileups_MuonCSCHits_
edm::EDGetTokenT< CrossingFrame< PSimHit > > TrackerToken0_
edm::EDGetTokenT< CrossingFrame< SimTrack > > SimTrackToken_
TH1I * histPSimHit_bunchSignal_TrackerHitsTECHighTof_
T const * product() const
Definition: Handle.h:70
edm::EDGetTokenT< CrossingFrame< PSimHit > > MuonToken_
int iEvent
Definition: GenABIO.cc:224
d
Definition: ztail.py:151
bool getTrigger() const
Definition: MixCollection.h:97
edm::EDGetTokenT< CrossingFrame< PCaloHit > > CaloToken1_
edm::EDGetTokenT< CrossingFrame< SimVertex > > SimVertexToken_
double b
Definition: hdecay.h:120
std::ofstream outputFile
HLT enums.
double a
Definition: hdecay.h:121
edm::EDGetTokenT< CrossingFrame< edm::HepMCProduct > > HepMCToken_
col
Definition: cuy.py:1009
void analyze(const edm::Event &, const edm::EventSetup &) override
void endJob() override
TestMixedSource(const edm::ParameterSet &)
void beginJob() override