CMS 3D CMS Logo

SiStripElectronAnalyzer.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: RecoEgamma/Examples
4 // Class : SiStripElectronAnalyzer
5 //
6 // Implementation:
7 // <Notes on implementation>
8 //
9 // Original Author: Jim Pivarski
10 // Created: Fri May 26 16:49:38 EDT 2006
11 //
12 
13 // system include files
14 #include <memory>
15 
16 // user include files
18 
22 
30 
37 
38 // for Si hits
54 
55 //
56 // constants, enums and typedefs
57 //
58 
59 //
60 // static data member definitions
61 //
62 
63 //
64 // constructors and destructor
65 //
67  //now do what ever initialization is needed
68  fileName_ = iConfig.getParameter<std::string>("fileName");
69 
70  file_ = new TFile(fileName_.c_str(), "RECREATE");
71  numCand_ = new TH1F("numCandidates", "Number of candidates found", 10, -0.5, 9.5);
72  numElectrons_ = new TH1F("numElectrons", "Number of Electrons found", 10, -0.5, 9.5);
73  numSuperClusters_ = new TH1F("numSuperClusters", "Number of Ecal SuperClusters", 50, 0, 50);
74 
75  energySuperClusters_ = new TH1F("energySuperClusters", "Super Cluster Energy - all ", 200, 0, 2000.);
76  energySuperClustersEl_ = new TH1F("energySuperClustersEl", "Super Cluster Energy - Electron Cands ", 200, 0., 2000.);
77 
78  sizeSuperClusters_ = new TH1F("sizeSuperClusters", "Super Cluster Size - all ", 20, 0, 19);
79  sizeSuperClustersEl_ = new TH1F("sizeSuperClustersEl", "Super Cluster Size - Electron Cands ", 20, 0, 19);
80 
81  emaxSuperClusters_ = new TH1F("emaxSuperClusters", "Super Cluster Emax - all ", 200, 0, 2000.);
82  emaxSuperClustersEl_ = new TH1F("emaxSuperClustersEl", "Super Cluster Emax - Electron Cands ", 200, 0, 2000.);
83 
84  phiWidthSuperClusters_ = new TH1F("phiWidthSuperClusters", "Super Cluster Width - all ", 20, 0., 0.05);
85  phiWidthSuperClustersEl_ = new TH1F("phiWidthSuperClustersEl", "Super Cluster Width - Electron Cands ", 20, 0., 0.05);
86 
87  ptDiff = new TH1F("ptDiff", " ptDiff ", 20, -10., 10.);
88  pDiff = new TH1F("pDiff", " pDiff ", 100, -50., 50.);
89 
90  pElectronFailed = new TH1F("pElectronFailed", " pElectronFailed ", 55, 0., 110.);
91  ptElectronFailed = new TH1F("ptElectronFailed", " ptElectronFailed ", 55, 0., 110.);
92 
93  pElectronPassed = new TH1F("pElectronPassed", " pElectronPassed ", 55, 0., 110.);
94  ptElectronPassed = new TH1F("ptElectronPassed", " ptElectronPassed ", 55, 0., 110.);
95 
96  sizeSuperClustersFailed = new TH1F("sizeSuperClustersFailed", "Super Cluster Size - Failed ", 20, 0, 19);
97  sizeSuperClustersPassed = new TH1F("sizeSuperClustersPassed", "Super Cluster Size - Passed ", 20, 0, 19);
98 
99  energySuperClustersPassed = new TH1F("energySuperClustersPassed", "Super Cluster Energy - Passed ", 125, 0, 250.);
100  energySuperClustersFailed = new TH1F("energySuperClustersFailed", "Super Cluster Energy - Failed ", 125, 0, 250.);
101 
102  eOverPFailed = new TH1F("eOverPFailed", " E over P - Failed ", 50, 0, 10.);
103  eOverPPassed = new TH1F("eOverPPassed", " E over P - Passed ", 50, 0, 10.);
104 
105  numSiStereoHits_ = new TH1F("numSiStereoHits", "Number of Si StereoHits", 100, 0, 1000);
106  numSiMonoHits_ = new TH1F("numSiMonoHits", "Number of Si MonoHits", 100, 0, 1000);
107  numSiMatchedHits_ = new TH1F("numSiMatchedHits", "Number of Si MatchedHits", 100, 0, 1000);
108 
110 
111  mctruthProducer_ = iConfig.getParameter<std::string>("mctruthProducer");
112  mctruthCollection_ = iConfig.getParameter<std::string>("mctruthCollection");
113 
114  superClusterProducer_ = iConfig.getParameter<std::string>("superClusterProducer");
115  superClusterCollection_ = iConfig.getParameter<std::string>("superClusterCollection");
116 
117  eBRecHitProducer_ = iConfig.getParameter<std::string>("recHitProducer");
118  eBRecHitCollection_ = iConfig.getParameter<std::string>("recHitCollection");
119 
120  siElectronProducer_ = iConfig.getParameter<std::string>("siElectronProducer");
121  siElectronCollection_ = iConfig.getParameter<std::string>("siElectronCollection");
122 
123  electronProducer_ = iConfig.getParameter<std::string>("electronProducer");
124  electronCollection_ = iConfig.getParameter<std::string>("electronCollection");
125 
126  siHitProducer_ = iConfig.getParameter<std::string>("siHitProducer");
127  siRphiHitCollection_ = iConfig.getParameter<std::string>("siRphiHitCollection");
128  siStereoHitCollection_ = iConfig.getParameter<std::string>("siStereoHitCollection");
129  siMatchedHitCollection_ = iConfig.getParameter<std::string>("siMatchedHitCollection");
130 }
131 
132 // SiStripElectronAnalyzer::SiStripElectronAnalyzer(const SiStripElectronAnalyzer& rhs)
133 // {
134 // // do actual copying here;
135 // }
136 
138  // do anything here that needs to be done at desctruction time
139  // (e.g. close files, deallocate resources etc.)
140 
141  file_->Write();
142  file_->Close();
143 }
144 
145 //
146 // assignment operators
147 //
148 // const SiStripElectronAnalyzer& SiStripElectronAnalyzer::operator=(const SiStripElectronAnalyzer& rhs)
149 // {
150 // //An exception safe implementation is
151 // SiStripElectronAnalyzer temp(rhs);
152 // swap(rhs);
153 //
154 // return *this;
155 // }
156 
157 //
158 // member functions
159 //
160 // init for TTree
162  myTree_ = new TTree("myTree", "my first Tree example");
163 
164  myTree_->Branch("NShowers", &NShowers_, "NShowers/I");
165 
166  // first specify the ECAL clusters
167  // need to explicitly include array length.
168  myTree_->Branch("EShower", &EShower_, "EShower[1000]/F");
169  myTree_->Branch("XShower", &XShower_, "XShower[1000]/F");
170  myTree_->Branch("YShower", &YShower_, "YShower[1000]/F");
171  myTree_->Branch("ZShower", &ZShower_, "ZShower[1000]/F");
172 
173  // second specify the Si Stereo Hits
174  myTree_->Branch("NStereoHits", &NStereoHits_, "NStereoHits/I");
175  myTree_->Branch("StereoHitX", &StereoHitX_, "StereoHitX[1000]/F");
176  myTree_->Branch("StereoHitY", &StereoHitY_, "StereoHitY[1000]/F");
177  myTree_->Branch("StereoHitZ", &StereoHitZ_, "StereoHitZ[1000]/F");
178 
179  myTree_->Branch("StereoHitR", &StereoHitR_, "StereoHitR[1000]/F");
180  myTree_->Branch("StereoHitPhi", &StereoHitPhi_, "StereoHitPhi[1000]/F");
181  myTree_->Branch("StereoHitTheta", &StereoHitTheta_, "StereoHitTheta[1000]/F");
182 
183  myTree_->Branch("StereoHitSigX", &StereoHitSigX_, "StereoHitSigX[1000]/F");
184  myTree_->Branch("StereoHitSigY", &StereoHitSigY_, "StereoHitSigY[1000]/F");
185  myTree_->Branch("StereoHitCorr", &StereoHitCorr_, "StereoHitCorr[1000]/F");
186 
187  myTree_->Branch("StereoHitSignal", &StereoHitSignal_, "StereoHitSignal[1000]/F");
188  myTree_->Branch("StereoHitNoise", &StereoHitNoise_, "StereoHitNoise[1000]/F");
189  myTree_->Branch("StereoHitWidth", &StereoHitWidth_, "StereoHitWidth[1000]/I");
190 
191  myTree_->Branch("StereoDetector", &StereoDetector_, "StereoDetector[1000]/I");
192  myTree_->Branch("StereoLayer", &StereoLayer_, "StereoLayer[1000]/I");
193 
194  // specify the Si mono (rphi) hits
195  myTree_->Branch("NMonoHits", &NMonoHits_, "NMonoHits/I");
196  myTree_->Branch("MonoHitX", &MonoHitX_, "MonoHitX[1000]/F");
197  myTree_->Branch("MonoHitY", &MonoHitY_, "MonoHitY[1000]/F");
198  myTree_->Branch("MonoHitZ", &MonoHitZ_, "MonoHitZ[1000]/F");
199 
200  myTree_->Branch("MonoHitR", &MonoHitR_, "MonoHitR[1000]/F");
201  myTree_->Branch("MonoHitPhi", &MonoHitPhi_, "MonoHitPhi[1000]/F");
202  myTree_->Branch("MonoHitTheta", &MonoHitTheta_, "MonoHitTheta[1000]/F");
203 
204  myTree_->Branch("MonoHitSigX", &MonoHitSigX_, "MonoHitSigX[1000]/F");
205  myTree_->Branch("MonoHitSigY", &MonoHitSigY_, "MonoHitSigY[1000]/F");
206  myTree_->Branch("MonoHitCorr", &MonoHitCorr_, "MonoHitCorr[1000]/F");
207 
208  myTree_->Branch("MonoHitSignal", &MonoHitSignal_, "MonoHitSignal[1000]/F");
209  myTree_->Branch("MonoHitNoise", &MonoHitNoise_, "MonoHitNoise[1000]/F");
210  myTree_->Branch("MonoHitWidth", &MonoHitWidth_, "MonoHitWidth[1000]/I");
211 
212  myTree_->Branch("MonoDetector", &MonoDetector_, "MonoDetector[1000]/I");
213  myTree_->Branch("MonoLayer", &MonoLayer_, "MonoLayer[1000]/I");
214 
215  // specify the Si matched (rphi) hits
216  myTree_->Branch("NMatchedHits", &NMatchedHits_, "NMatchedHits/I");
217  myTree_->Branch("MatchedHitX", &MatchedHitX_, "MatchedHitX[1000]/F");
218  myTree_->Branch("MatchedHitY", &MatchedHitY_, "MatchedHitY[1000]/F");
219  myTree_->Branch("MatchedHitZ", &MatchedHitZ_, "MatchedHitZ[1000]/F");
220 
221  myTree_->Branch("MatchedHitR", &MatchedHitR_, "MatchedHitR[1000]/F");
222  myTree_->Branch("MatchedHitPhi", &MatchedHitPhi_, "MatchedHitPhi[1000]/F");
223  myTree_->Branch("MatchedHitTheta", &MatchedHitTheta_, "MatchedHitTheta[1000]/F");
224 
225  myTree_->Branch("MatchedHitSigX", &MatchedHitSigX_, "MatchedHitSigX[1000]/F");
226  myTree_->Branch("MatchedHitSigY", &MatchedHitSigY_, "MatchedHitSigY[1000]/F");
227  myTree_->Branch("MatchedHitCorr", &MatchedHitCorr_, "MatchedHitCorr[1000]/F");
228 
229  myTree_->Branch("MatchedHitSignal", &MatchedHitSignal_, "MatchedHitSignal[1000]/F");
230  myTree_->Branch("MatchedHitNoise", &MatchedHitNoise_, "MatchedHitNoise[1000]/F");
231  myTree_->Branch("MatchedHitWidth", &MatchedHitWidth_, "MatchedHitWidth[1000]/I");
232 
233  myTree_->Branch("MatchedDetector", &MatchedDetector_, "MatchedDetector[1000]/I");
234  myTree_->Branch("MatchedLayer", &MatchedLayer_, "MatchedLayer[1000]/I");
235 }
236 
238  LogDebug("") << " In initNtuple ";
239 
240  NShowers_ = -999;
241  for (int init = 0; init < myMaxHits; ++init) {
242  EShower_[init] = -999.;
243  XShower_[init] = -999.;
244  YShower_[init] = -999.;
245  ZShower_[init] = -999.;
246  }
247  NStereoHits_ = -999;
248 
249  for (int init = 0; init < myMaxHits; ++init) {
250  StereoHitX_[init] = -999.;
251  StereoHitY_[init] = -999.;
252  StereoHitZ_[init] = -999.;
253  StereoHitR_[init] = -999.;
254  StereoHitPhi_[init] = -999.;
255  StereoHitTheta_[init] = -999.;
256 
257  StereoHitSignal_[init] = -999.;
258  StereoHitNoise_[init] = -999.;
259  StereoHitWidth_[init] = -999;
260  ;
261  }
262 
263  NMonoHits_ = -999;
264  for (int init = 0; init < myMaxHits; ++init) {
265  MonoHitX_[init] = -999.;
266  MonoHitY_[init] = -999.;
267  MonoHitZ_[init] = -999.;
268  MonoHitR_[init] = -999.;
269  MonoHitPhi_[init] = -999.;
270  MonoHitTheta_[init] = -999.;
271 
272  MonoHitSignal_[init] = -999.;
273  MonoHitNoise_[init] = -999.;
274  MonoHitWidth_[init] = -999;
275  ;
276  }
277 
278  NMatchedHits_ = -999;
279  for (int init = 0; init < myMaxHits; ++init) {
280  MatchedHitX_[init] = -999.;
281  MatchedHitY_[init] = -999.;
282  MatchedHitZ_[init] = -999.;
283  MatchedHitR_[init] = -999.;
284  MatchedHitPhi_[init] = -999.;
285  MatchedHitTheta_[init] = -999.;
286 
287  MatchedHitSignal_[init] = -999.;
288  MatchedHitNoise_[init] = -999.;
289  MatchedHitWidth_[init] = -999;
290  ;
291  }
292 }
293 
294 // ------------ method called to produce the data ------------
296  //Retrieve tracker topology from geometry
298  iSetup.get<TrackerTopologyRcd>().get(tTopo);
299 
300  using namespace std; // so you can say "cout" and "endl"
301 
302  initNtuple();
303 
304  // http://cmsdoc.cern.ch/swdev/lxr/CMSSW/source/clhep/CLHEP/HepMC/GenParticle.h
305  // http://cmsdoc.cern.ch/swdev/lxr/CMSSW/source/clhep/CLHEP/HepMC/GenVertex.h
306  // removed by JED - causes trouble in release post 0_9_0
307  // edm::Handle<edm::HepMCProduct> mctruthHandle;
308  // iEvent.getByLabel(mctruthProducer_, mctruthCollection_, mctruthHandle);
309  // HepMC::GenEvent mctruth = mctruthHandle->getHepMCData();
310 
311  // for (HepMC::GenEvent::particle_const_iterator partIter = mctruth.particles_begin();
312  // partIter != mctruth.particles_end();
313  // ++partIter) {
314  // // for (HepMC::GenEvent::vertex_const_iterator vertIter = mctruth.vertices_begin();
315  // // vertIter != mctruth.vertices_end();
316  // // ++vertIter) {
317  // CLHEP::HepLorentzVector creation = (*partIter)->CreationVertex();
318  // CLHEP::HepLorentzVector momentum = (*partIter)->Momentum();
319  // HepPDT::ParticleID id = (*partIter)->particleID(); // electrons and positrons are 11 and -11
320  // edm::LogInfo("") << "MC particle id " << id.pid() << ", creationVertex " << creation << " cm, initialMomentum " << momentum << " GeV/c" << endl;
321  // }
322 
323  // load the rechits for the Ecal
325  iEvent.getByLabel(eBRecHitProducer_, eBRecHitCollection_, pRecHits);
326  // Create a pointer to the RecHits - unused for now
327  // const EcalRecHitCollection *hitCollection = pRecHits.product();
328 
329  // http://cmsdoc.cern.ch/swdev/lxr/CMSSW/source/self/DataFormats/EgammaReco/interface/SuperCluster.h
331  iEvent.getByLabel(superClusterProducer_, superClusterCollection_, clusterHandle);
332 
335 
336  LogDebug("") << " Start loop over " << clusterHandle->end() - clusterHandle->begin() << " superClusters ";
337 
338  for (reco::SuperClusterCollection::const_iterator clusterIter = clusterHandle->begin();
339  clusterIter != clusterHandle->end();
340  ++clusterIter) {
341  double energy = clusterIter->energy();
342  math::XYZPoint position = clusterIter->position();
343  std::ostringstream str;
344 
345  str << " SuperCluster " << energy << " GeV, position " << position << " cm"
346  << "\n";
347 
349  sizeSuperClusters_->Fill(clusterIter->clustersSize());
350  // this only makes sense for hybrid superclusters
351 
352  // try to point to the constituent clusters for this SuperCluster
353 
354  str << "About to loop over basicClusters"
355  << "\n";
356 
357  double emaxSuperCluster = 0.;
358  double phibar = 0.;
359  double phi2bar = 0.;
360  double eTotSuperCluster = 0.;
361 
362  for (reco::CaloCluster_iterator basicClusterIter = clusterIter->clustersBegin();
363  basicClusterIter != clusterIter->clustersEnd();
364  ++basicClusterIter) {
365  //std::vector<DetId> theIds= (*basicClusterIter)->getHitsByDetId();
366 
367  str << " basicCluster Energy " << (*basicClusterIter)->energy() << " Position " << (*basicClusterIter)->position()
368  << " \n"
369  << " Position phi " << (*basicClusterIter)->position().phi() << " recHits "
370  << (*basicClusterIter)->size() << " \n";
371 
372  double eCluster = (*basicClusterIter)->energy();
373  if (eCluster > emaxSuperCluster) {
374  emaxSuperCluster = eCluster;
375  }
376  eTotSuperCluster += eCluster;
377  double phiCluster = (*basicClusterIter)->position().phi();
378  phibar += eCluster * phiCluster;
379  phi2bar += eCluster * phiCluster * phiCluster;
380 
381  } // end of basicClusterIter loop
382 
383  phibar = phibar / eTotSuperCluster;
384  phi2bar = phi2bar / eTotSuperCluster;
385  double phiWidth = phi2bar - phibar * phibar;
386  if (phiWidth > 0.) {
387  phiWidth = std::pow(phiWidth, 0.5);
388  } else {
389  phiWidth = 0.;
390  }
391  str << " SuperCluster stats "
392  << "\n";
393  str << "phibar " << phibar << " phi2bar " << phi2bar << " eTotSuperCluster " << eTotSuperCluster << " phiWidth "
394  << phiWidth << std::endl;
395 
396  phiWidthSuperClusters_->Fill(phiWidth);
397 
398  emaxSuperClusters_->Fill(emaxSuperCluster);
399 
400  str << " Done with this SuperCluster " << std::endl;
401 
402  LogDebug("") << str.str();
403 
404  } // end of loop over superClusters
405 
406  LogDebug("") << " End loop over superClusters ";
407 
410 
412  //
413  // loop over all EcalRecHits and print out their x,y,z,E
414  // edm::LogInfo("") << " Dumping all recHits in this event " << endl ;
415  // for(EcalRecHitCollection::const_iterator _blah = hitCollection->begin();
416  // _blah != hitCollection->end() ; ++_blah ) {
417  // edm::LogInfo("") << "Ecal RecHit Energy: " << _blah->energy() << endl ;
418  // // " Position " << _blah.position() << endl ;
419  // }
420  //
421  // edm::LogInfo("") << "Dump finished " << endl ;
422  //
424 
425  // DataFormats/EgammaCandidates/src/SiStripElectron.cc
426  edm::Handle<reco::SiStripElectronCollection> siStripElectronHandle;
427  iEvent.getByLabel(siElectronProducer_, siElectronCollection_, siStripElectronHandle);
428 
430 
431  LogDebug("") << " Dumping Algo's guess of SiStripElectron Candidate Info ";
432  int numberOfElectrons = 0;
433  // need to check if fit succeeded
434  LogDebug("") << " Number of SiStripElectrons " << siStripElectronHandle->size();
435 
436  for (reco::SiStripElectronCollection::const_iterator electronIter = siStripElectronHandle->begin();
437  electronIter != siStripElectronHandle->end();
438  ++electronIter) {
439  LogDebug("") << "about to get stuff from electroncandidate " << numberOfElectrons << "\n"
440  << "supercluster energy = " << electronIter->superCluster()->energy() << "\n"
441  << "fit results are phi(r) = " << electronIter->phiAtOrigin() << " + " << electronIter->phiVsRSlope()
442  << "*r"
443  << "\n"
444  << " chi2 " << electronIter->chi2() << " ndof " << electronIter->ndof() << "\n"
445  << " Pt " << electronIter->pt() << "\n"
446  << "P, Px, Py, Pz " << electronIter->p() << " " << electronIter->px() << " " << electronIter->py()
447  << " " << electronIter->pz() << "\n"
448  << "you get the idea...";
449 
450  // make plots for supercluster that an electron has been associ w/. here
451  energySuperClustersEl_->Fill(electronIter->superCluster()->energy());
452  sizeSuperClustersEl_->Fill(electronIter->superCluster()->clustersSize());
453 
454  // loop over basicClusters to get energy
455  double emaxSuperCluster = 0.;
456  double phibar = 0.;
457  double phi2bar = 0.;
458  double eTotSuperCluster = 0.;
459 
460  for (reco::CaloCluster_iterator basicClusterIter = electronIter->superCluster()->clustersBegin();
461  basicClusterIter != electronIter->superCluster()->clustersEnd();
462  ++basicClusterIter) {
463  //std::vector<DetId> theIds= (*basicClusterIter)->getHitsByDetId();
464 
465  double eCluster = (*basicClusterIter)->energy();
466  if (eCluster > emaxSuperCluster) {
467  emaxSuperCluster = eCluster;
468  }
469  eTotSuperCluster += eCluster;
470  double phiCluster = (*basicClusterIter)->position().phi();
471  phibar += eCluster * phiCluster;
472  phi2bar += eCluster * phiCluster * phiCluster;
473  }
474 
475  phibar = phibar / eTotSuperCluster;
476  phi2bar = phi2bar / eTotSuperCluster;
477  double phiWidth = phi2bar - phibar * phibar;
478  if (phiWidth > 0.) {
479  phiWidth = std::pow(phiWidth, 0.5);
480  } else {
481  phiWidth = 0.;
482  }
483 
484  phiWidthSuperClustersEl_->Fill(phiWidth);
485 
486  emaxSuperClustersEl_->Fill(emaxSuperCluster);
487 
488  numberOfElectrons++;
489  }
490 
491  numCand_->Fill(siStripElectronHandle->size());
492 
494 
495  // Now loop over the electrons (ie the fitted things.)
496 
497  LogDebug("") << " About to check Electrons";
498 
501 
502  numElectrons_->Fill(electrons->end() - electrons->begin());
503 
504  // set up vector of bool for SiStrips having or not having Electrons
505  // this causes a warning because of variable array size at compilation time ;
506  // BAD bool hasElectron_[siStripElectronHandle->end()- siStripElectronHandle->begin()] ;
507  bool* hasElectron_ = new bool[siStripElectronHandle->end() - siStripElectronHandle->begin()];
508  for (int icount = 0; icount < siStripElectronHandle->end() - siStripElectronHandle->begin(); ++icount) {
509  hasElectron_[icount] = false;
510  }
511 
512  // also set up a counter to associate the ith electron to the jth strippy
513  // Electron_to_strippy[i] = j: i-th Electron is j-th strippy
514  // BAD unsigned int Electron_to_strippy[electrons->end()- electrons->begin()];
515  unsigned int* Electron_to_strippy = new unsigned int[electrons->end() - electrons->begin()];
516  for (int icount = 0; icount < electrons->end() - electrons->begin(); ++icount) {
517  Electron_to_strippy[icount] = 0;
518  }
519 
520  unsigned int ecount = 0;
521  for (reco::ElectronCollection::const_iterator electronIter = electrons->begin(); electronIter != electrons->end();
522  ++electronIter) {
523  LogDebug("") << " Associating Electrons to Strippies ";
524  LogDebug("") << " PT is " << electronIter->track()->pt();
525 
526  reco::TrackRef tr = (*electronIter).track();
527  uint32_t id = (*electronIter->track()->recHitsBegin())->geographicalId().rawId();
528  LocalPoint pos = (*electronIter->track()->recHitsBegin())->localPosition();
529 
530  unsigned int icount = 0;
531  LogDebug("") << " About to loop over Strippies "
532  << " \n "
533  << " icount " << icount << " max " << siStripElectronHandle->end() - siStripElectronHandle->begin();
534 
535  for (reco::SiStripElectronCollection::const_iterator strippyiter = siStripElectronHandle->begin();
536  strippyiter != siStripElectronHandle->end();
537  ++strippyiter) {
538  bool hitInCommon = false;
539  // loop over rphi hits
540  for (std::vector<SiStripRecHit2D>::const_iterator hiter = strippyiter->rphiRecHits().begin();
541  hiter != strippyiter->rphiRecHits().end();
542  ++hiter) {
543  if (hiter->geographicalId().rawId() == id && (hiter->localPosition() - pos).mag() < 1e-10) {
544  hitInCommon = true;
545  break;
546  }
547  }
548 
549  for (std::vector<SiStripRecHit2D>::const_iterator hiter = strippyiter->stereoRecHits().begin();
550  hiter != strippyiter->stereoRecHits().end();
551  ++hiter) {
552  if (hiter->geographicalId().rawId() == id && (hiter->localPosition() - pos).mag() < 1e-10) {
553  hitInCommon = true;
554  break;
555  }
556  }
557  if (hitInCommon) { //this Electron belongs to this SiStripElectron.
558  hasElectron_[icount] = true;
559  Electron_to_strippy[ecount] = icount;
560  ptDiff->Fill(std::abs(electronIter->track()->pt()) - std::abs(strippyiter->pt()));
561  pDiff->Fill(std::abs(electronIter->track()->p()) - std::abs(strippyiter->p()));
562  }
563  icount++;
564  } // Sistrip loop
565  ecount++;
566  } // Electrons
567 
568  LogDebug("") << " Done looping over Electrons ";
569 
570  unsigned int counter = 0;
571  for (reco::SiStripElectronCollection::const_iterator strippyIter = siStripElectronHandle->begin();
572  strippyIter != siStripElectronHandle->end();
573  ++strippyIter) {
574  bool skipThis = !hasElectron_[counter];
575  if (skipThis) {
576  // plot stuff for SIStripElectrons that don't have fits associated
577 
578  LogDebug("") << " SiStrip Failed Electron "
579  << " \n "
580  << " p " << strippyIter->p() << " \n "
581  << " pt " << strippyIter->pt() << " \n "
582  << " SuperClust size " << strippyIter->superCluster()->clustersSize();
583 
584  pElectronFailed->Fill(std::abs(strippyIter->p()));
585  ptElectronFailed->Fill(std::abs(strippyIter->pt()));
586  sizeSuperClustersFailed->Fill(strippyIter->superCluster()->clustersSize());
587  LogDebug("") << " done filling Failed histos ";
588  // energySuperClustersFailed->Fill(strippyIter->superCluster()->energy());
589  // if(strippyIter->p()>0.) {
590  // eOverPFailed->Fill(strippyIter->superCluster()->energy()/strippyIter->p());
591  // }else {
592  // eOverPFailed->Fill(-1.0);
593  // }
594 
595  } else {
596  LogDebug("") << " SiStrip Passed Electron "
597  << " \n "
598  << " p " << strippyIter->p() << " \n "
599  << " pt " << strippyIter->pt() << " \n "
600  << " SuperClust size " << strippyIter->superCluster()->clustersSize();
601  pElectronPassed->Fill(std::abs(strippyIter->p()));
602  ptElectronPassed->Fill(std::abs(strippyIter->pt()));
603  sizeSuperClustersPassed->Fill(strippyIter->superCluster()->clustersSize());
604  LogDebug("") << " done filling passed histos ";
605  // energySuperClustersPassed->Fill(strippyIter->superCluster()->energy());
606  // if(strippyIter->p()>0.) {
607  // eOverPPassed->Fill(strippyIter->superCluster()->energy()/strippyIter->p());
608  // }else {
609  // eOverPPassed->Fill(-1.0);
610  // }
611 
612  } // skipThis
613  counter++;
614  }
615 
616  LogDebug("") << "Dump info for all electrons ";
617 
618  for (reco::ElectronCollection::const_iterator electronIter1 = electrons->begin(); electronIter1 != electrons->end();
619  ++electronIter1) {
620  reco::TrackRef tr1 = (*electronIter1).track();
621  // let's find its associated SiStripElectron and SuperCluster
622  unsigned int ecount1 = electronIter1 - electrons->begin();
623  unsigned int stripCount1 = 0;
624  reco::SiStripElectronCollection::const_iterator strippyIter1;
625  for (reco::SiStripElectronCollection::const_iterator strippyIter = siStripElectronHandle->begin();
626  strippyIter != siStripElectronHandle->end();
627  ++strippyIter) {
628  if (Electron_to_strippy[ecount1] == stripCount1) {
629  strippyIter1 = strippyIter;
630  break;
631  }
632  stripCount1++;
633  } // strippy loop
634  ecount1++;
635 
636  std::ostringstream str;
637 
638  str << " SiStripElect p , px, py, pz " << strippyIter1->p() << " " << strippyIter1->px() << " "
639  << strippyIter1->py() << " " << strippyIter1->pz() << "\n " << std::endl;
640 
641  str << " Electron p px, py, pz, = " << tr1->p() << " " << tr1->px() << " " << tr1->py() << " " << tr1->pz()
642  << "\n"
643  << std::endl;
644 
645  double EClust1 = strippyIter1->superCluster()->energy();
646  double XClust1 = strippyIter1->superCluster()->x();
647  double YClust1 = strippyIter1->superCluster()->y();
648  double ZClust1 = strippyIter1->superCluster()->z();
649 
650  double rho1 = sqrt(XClust1 * XClust1 + YClust1 * YClust1 + ZClust1 * ZClust1);
651  double costheta1 = ZClust1 / rho1;
652  double sintheta1 = sqrt(1 - costheta1 * costheta1);
653  if (ZClust1 < 0) {
654  sintheta1 = -sintheta1;
655  }
656  double cosphi1 = XClust1 / sqrt(XClust1 * XClust1 + YClust1 * YClust1);
657  double sinphi1 = YClust1 / sqrt(XClust1 * XClust1 + YClust1 * YClust1);
658 
659  str << " Ecal for electron E, px, py, pz " << EClust1 << " " << EClust1 * sintheta1 * cosphi1 << " "
660  << EClust1 * sintheta1 * sinphi1 << " " << EClust1 * costheta1 << "\n"
661  << std::endl;
662 
663  LogDebug("") << str.str();
664 
665  } // loop over electrons
666  LogDebug("") << "Done Dumping info for all electrons ";
667 
669  // LogDebug("")<< " Checking Electrons" ;
670  // LogDebug("")<< " PT is " << electronIter->track()->pt() ;
671  // reco::TrackRef tr =(*electronIter).track();
673  if (electrons->end() - electrons->begin() > 1) {
674  edm::LogInfo("") << " Two electrons in this event " << std::endl;
675  for (reco::ElectronCollection::const_iterator electronIter1 = electrons->begin();
676  electronIter1 != electrons->end() - 1;
677  ++electronIter1) {
678  reco::TrackRef tr1 = (*electronIter1).track();
679 
680  // let's find its associated SiStripElectron and SuperCluster
681  // use the Electron_to_strippy[] array
682  unsigned int ecount1 = electronIter1 - electrons->begin();
683  // loop over strippies to find the corresponding one
684  unsigned int stripCount1 = 0;
685  reco::SiStripElectronCollection::const_iterator strippyIter1;
686  for (reco::SiStripElectronCollection::const_iterator strippyIter = siStripElectronHandle->begin();
687  strippyIter != siStripElectronHandle->end();
688  ++strippyIter) {
689  if (Electron_to_strippy[ecount1] == stripCount1) {
690  strippyIter1 = strippyIter;
691  break;
692  }
693  stripCount1++;
694  } // strippy loop
695 
696  double EClust1 = strippyIter1->superCluster()->energy();
697  double XClust1 = strippyIter1->superCluster()->x();
698  double YClust1 = strippyIter1->superCluster()->y();
699  double ZClust1 = strippyIter1->superCluster()->z();
700 
701  for (reco::ElectronCollection::const_iterator electronIter2 = electronIter1 + 1;
702  electronIter2 != electrons->end();
703  ++electronIter2) {
704  reco::TrackRef tr2 = (*electronIter2).track();
705 
706  unsigned int ecount2 = electronIter2 - electrons->begin();
707  unsigned int stripCount2 = 0;
708  reco::SiStripElectronCollection::const_iterator strippyIter2;
709  for (reco::SiStripElectronCollection::const_iterator strippyIter = siStripElectronHandle->begin();
710  strippyIter != siStripElectronHandle->end();
711  ++strippyIter) {
712  if (Electron_to_strippy[ecount2] == stripCount2) {
713  strippyIter2 = strippyIter;
714  break;
715  }
716  stripCount2++;
717  } // strippy loop
718 
719  double EClust2 = strippyIter2->superCluster()->energy();
720  double XClust2 = strippyIter2->superCluster()->x();
721  double YClust2 = strippyIter2->superCluster()->y();
722  double ZClust2 = strippyIter2->superCluster()->z();
723 
724  // now get supercluster from this:
725 
726  edm::LogInfo("") << " Electron p1 = " << tr1->p() << " p1x " << tr1->px() << " p1y " << tr1->py() << " p1z "
727  << tr1->pz() << std::endl;
728 
729  edm::LogInfo("") << " Electron p2 = " << tr2->p() << " p2x " << tr2->px() << " p2y " << tr2->py() << " p2z "
730  << tr2->pz() << std::endl;
731 
732  // combine the two in an (e,e) pair
733  double Zpx = tr1->px() + tr2->px();
734  double Zpy = tr1->py() + tr2->py();
735  double Zpz = tr1->pz() + tr2->pz();
736  double Ze = std::abs(tr1->p()) + std::abs(tr2->p());
737  edm::LogInfo("") << " Z mass " << sqrt(Ze * Ze - Zpx * Zpx - Zpy * Zpy - Zpz * Zpz) << std::endl;
738 
739  // combine the SuperClusts into a Z
740  double rho1 = sqrt(XClust1 * XClust1 + YClust1 * YClust1 + ZClust1 * ZClust1);
741  double costheta1 = ZClust1 / rho1;
742  double sintheta1 = sqrt(1 - costheta1 * costheta1);
743  if (ZClust1 < 0) {
744  sintheta1 = -sintheta1;
745  }
746  double cosphi1 = XClust1 / sqrt(XClust1 * XClust1 + YClust1 * YClust1);
747  double sinphi1 = YClust1 / sqrt(XClust1 * XClust1 + YClust1 * YClust1);
748 
749  double rho2 = sqrt(XClust2 * XClust2 + YClust2 * YClust2 + ZClust2 * ZClust2);
750  double costheta2 = ZClust2 / rho2;
751  double sintheta2 = sqrt(1 - costheta2 * costheta2);
752  if (ZClust2 < 0) {
753  sintheta2 = -sintheta2;
754  }
755  double cosphi2 = XClust2 / sqrt(XClust2 * XClust2 + YClust2 * YClust2);
756  double sinphi2 = YClust2 / sqrt(XClust2 * XClust2 + YClust2 * YClust2);
757 
758  edm::LogInfo("") << "Energy of supercluster for 1st electron " << EClust1 << " "
759  << EClust1 * sintheta1 * cosphi1 << " " << EClust1 * sintheta1 * sinphi1 << " "
760  << EClust1 * costheta1 << " " << std::endl;
761 
762  edm::LogInfo("") << "Energy of supercluster for 2nd electron " << EClust2 << " "
763  << EClust2 * sintheta2 * cosphi2 << " " << EClust2 * sintheta2 * sinphi2 << " "
764  << EClust2 * costheta2 << " " << std::endl;
765 
766  // get the supercluster pair
767  double Zgpx = EClust1 * sintheta1 * cosphi1 + EClust2 * sintheta2 * cosphi2;
768  double Zgpy = EClust1 * sintheta1 * sinphi1 + EClust2 * sintheta2 * sinphi2;
769  double Zgpz = EClust1 * costheta1 + EClust2 * costheta2;
770  double ZgE = EClust1 + EClust2;
771 
772  edm::LogInfo("") << " Z mass from ECAL " << sqrt(ZgE * ZgE - Zgpx * Zgpx - Zgpy * Zgpy - Zgpz * Zgpz)
773  << std::endl;
774 
775  } //inner loop
776  } // outer loop
777  } // m(ee) loop
778 
779  delete[] hasElectron_;
780  delete[] Electron_to_strippy;
781 
785  LogDebug("") << " About to dump tracker info ";
786 
787  edm::ESHandle<TrackerGeometry> trackerHandle;
788  iSetup.get<TrackerDigiGeometryRecord>().get(trackerHandle);
789 
791  iEvent.getByLabel(siHitProducer_, siRphiHitCollection_, rphiHitsHandle);
792 
794  iEvent.getByLabel(siHitProducer_, siStereoHitCollection_, stereoHitsHandle);
795 
797  iEvent.getByLabel(siHitProducer_, siMatchedHitCollection_, matchedHitsHandle);
798 
800 
802  NShowers_ = 0;
803  for (reco::SuperClusterCollection::const_iterator clusterIter = clusterHandle->begin();
804  clusterIter != clusterHandle->end();
805  ++clusterIter) {
806  double energy = clusterIter->energy();
807  math::XYZPoint position = clusterIter->position();
808  if (NShowers_ < myMaxHits) {
810  XShower_[NShowers_] = position.x();
811  YShower_[NShowers_] = position.y();
812  ZShower_[NShowers_] = position.z();
813  ++NShowers_;
814  }
815  // Loop over all crystals in this supercluster - see
816  // RecoEcal/EgamaClusterProducers/src/EgammaSimpleAnalyzer.cc
817  // Look also at DataFormats/EgammaReco/interface/SuperCluster.h
818  }
821 
822  LogDebug("") << " Looping over stereo hits ";
823 
825  int myHits = 0;
826  for (SiStripRecHit2DCollection::DataContainer::const_iterator hit = stereoHitsHandle->data().begin(),
827  hitend = stereoHitsHandle->data().end();
828  hit != hitend;
829  ++hit) {
830  DetId id(hit->geographicalId());
831  if ((hit->geographicalId()).subdetId() == StripSubdetector::TIB ||
832  (hit->geographicalId()).subdetId() == StripSubdetector::TOB) {
833  GlobalPoint position = trackerHandle->idToDet(hit->geographicalId())->surface().toGlobal(hit->localPosition());
834  //from RecoLocalTracker/SiStripClusterizer/test/TestCluster.cc
835  // cf also TrackHitAssociator.cc SiStripRecHitMatcher.cc SiStrip1DMeasurementTransformator.cc (KalmanUpdators)
836  SiStripRecHit2D const rechit = *hit;
837  // LocalPoint myposition = rechit.localPosition() ;
838  LocalError myerror = rechit.localPositionError();
839 
840  // Get layer and subdetector ID here for this hit
841  // see SiStripRecHitConverter/test/ValHit.cc
842  Int_t siLayerNum = 0;
843  Int_t siDetNum = 0;
844  string siDetName = "";
845  if ((hit->geographicalId()).subdetId() == StripSubdetector::TIB) {
846  // siLayerNum = tTopo->tibLayer(rechit->geographicalID());
847  siLayerNum = tTopo->tibLayer(id);
848  siDetNum = 1;
849  siDetName = "TIB";
850  } else if ((hit->geographicalId()).subdetId() == StripSubdetector::TOB) {
851  siLayerNum = tTopo->tobLayer(id);
852  siDetNum = 2;
853  siDetName = "TOB";
854  // } else if ( (hit->geographicalId()).subdetId() == StripSubdetector::TID ){
855  // // should we use side/wheel/ring/module/stereo() ?
856  // siLayerNum = tTopo->tidWheel(id);
857  // siDetNum = 3 ;
858  // siDetName = "TID" ;
859  // }else if ( (hit->geographicalId()).subdetId() == StripSubdetector::TEC ){
860  // //choices are side/petal/wheel/ring/module/glued/stereo
861  // siLayerNum = tTopo->tecWheel(id);
862  // siDetNum = 4 ;
863  // siDetName = "TEC" ;
864  } else {
865  siLayerNum = -999;
866  siDetNum = -999;
867  siDetName = "NULL";
868  }
869  // LogDebug("") << siDetName << " " << siLayerNum ;
870 
871  const SiStripRecHit2D::ClusterRef& clust = rechit.cluster();
872  double Signal = 0;
873  double Noise2 = 0;
874  int StripCount = 0;
875  if (clust.isNonnull()) {
876  // LogDebug("") << " barycenter " << clust->barycenter() ;
877  // const std::vector<uint16_t> amplitudes=clust->amplitudes();
878  const auto& amplitudes = clust->amplitudes();
879  for (size_t i = 0; i < amplitudes.size(); i++) {
880  Signal += amplitudes[i];
881  //ignore for now Noise2 +=SiStripNoiseService_.getNoise(detid,clust->firstStrip()+i)*SiStripNoiseService_.getNoise(detid,clust->firstStrip()+i);
882  StripCount++;
883  }
884  } else {
885  LogDebug("") << " null cluster ";
886  }
887  // LogDebug("") << "Signal " << Signal << " Noise2 " << Noise2 << " StripCount " << StripCount ;
888  // Dump position
889  // LogDebug("") << " Stereo "
890  // << "local position: "<<myposition.x()<<" "
891  // << myposition.y()<<" "<<myposition.z()<<"\n"
892  // << "local error: "<<myerror.xx()<<" "
893  // << myerror.xy()<<" "<<myerror.yy() << "\n"
894  // << "global position: " << position.x() << " "
895  // << position.y()<<" "<< position.z()<<"\n"
896  // << " siDetNum " << siDetNum
897  // << " siLayerNum " << siLayerNum ;
898 
899  if (myHits < myMaxHits) {
900  StereoHitX_[myHits] = position.x();
901  StereoHitY_[myHits] = position.y();
902  StereoHitZ_[myHits] = position.z();
903 
904  StereoHitR_[myHits] = position.perp();
905  StereoHitPhi_[myHits] = position.phi();
906  StereoHitTheta_[myHits] = position.theta();
907 
908  StereoHitSigX_[myHits] = sqrt(myerror.xx());
909  StereoHitSigY_[myHits] = sqrt(myerror.yy());
910  StereoHitCorr_[myHits] = myerror.xy() / sqrt(myerror.xx() * myerror.yy());
911 
912  StereoHitSignal_[myHits] = Signal;
913  StereoHitNoise_[myHits] = Noise2;
914  StereoHitWidth_[myHits] = StripCount;
915 
916  StereoDetector_[myHits] = siDetNum;
917  StereoLayer_[myHits] = siLayerNum;
918 
919  ++myHits;
920  }
921  } // end if this is the right subdetector
922  } // end loop over hits
923  NStereoHits_ = myHits;
924 
926 
929 
930  LogDebug("") << " Looping over Mono Hits ";
932  myHits = 0;
933  for (SiStripRecHit2DCollection::DataContainer::const_iterator hit = rphiHitsHandle->data().begin(),
934  hitend = rphiHitsHandle->data().end();
935  hit != hitend;
936  ++hit) {
937  DetId id(hit->geographicalId());
938 
939  if ((hit->geographicalId()).subdetId() == StripSubdetector::TIB ||
940  (hit->geographicalId()).subdetId() == StripSubdetector::TOB) {
941  GlobalPoint position = trackerHandle->idToDet(hit->geographicalId())->surface().toGlobal(hit->localPosition());
942  //from RecoLocalTracker/SiStripClusterizer/test/TestCluster.cc
943  // cf also TrackHitAssociator.cc SiStripRecHitMatcher.cc SiStrip1DMeasurementTransformator.cc (KalmanUpdators)
944  SiStripRecHit2D const rechit = *hit;
945  // LocalPoint myposition = rechit.localPosition() ;
946  LocalError myerror = rechit.localPositionError();
947 
948  // Get layer and subdetector ID here for this hit
949  // see SiStripRecHitConverter/test/ValHit.cc
950  Int_t siLayerNum = 0;
951  Int_t siDetNum = 0;
952  string siDetName = "";
953  if ((hit->geographicalId()).subdetId() == StripSubdetector::TIB) {
954  // siLayerNum = tTopo->tibLayer(rechit->geographicalID());
955  siLayerNum = tTopo->tibLayer(id);
956  siDetNum = 1;
957  siDetName = "TIB";
958  } else if ((hit->geographicalId()).subdetId() == StripSubdetector::TOB) {
959  siLayerNum = tTopo->tobLayer(id);
960  siDetNum = 2;
961  siDetName = "TOB";
962  // } else if ( (hit->geographicalId()).subdetId() == StripSubdetector::TID ){
963  // // should we use side/wheel/ring/module/stereo() ?
964  // siLayerNum = tTopo->tidWheel(id);
965  // siDetNum = 3 ;
966  // siDetName = "TID" ;
967  // }else if ( (hit->geographicalId()).subdetId() == StripSubdetector::TEC ){
968  // //choices are side/petal/wheel/ring/module/glued/stereo
969  // siLayerNum = tTopo->tecWheel(id);
970  // siDetNum = 4 ;
971  // siDetName = "TEC"
972  ;
973  } else {
974  siLayerNum = -999;
975  siDetNum = -999;
976  siDetName = "NULL";
977  }
978  // LogDebug("") << siDetName << " " << siLayerNum ;
979  const SiStripRecHit2D::ClusterRef& clust = rechit.cluster();
980  double Signal = 0;
981  double Noise2 = 0;
982  int StripCount = 0;
983  if (clust.isNonnull()) {
984  // LogDebug("") << " barycenter " << clust->barycenter() ;
985  // const std::vector<uint16_t> amplitudes=clust->amplitudes();
986  const auto& amplitudes = clust->amplitudes();
987  for (size_t i = 0; i < amplitudes.size(); i++) {
988  Signal += amplitudes[i];
989  //ignore for now Noise2 +=SiStripNoiseService_.getNoise(detid,clust->firstStrip()+i)*SiStripNoiseService_.getNoise(detid,clust->firstStrip()+i);
990  StripCount++;
991  }
992  } else {
993  LogDebug("") << " null cluster ";
994  }
995  // LogDebug("") << "Signal " << Signal << " Noise2 " << Noise2 << " StripCount " << StripCount ;
996 
997  // Dump position info
998  // LogDebug("") << " Mono "
999  // << "local position: "<<myposition.x()<<" "
1000  // << myposition.y()<<" "<<myposition.z()<<"\n"
1001  // <<"local error: "<<myerror.xx()<<" "
1002  // << myerror.xy()<<" "<<myerror.yy() << "\n"
1003  // << "global position: " << position.x() << " "
1004  // << position.y()<<" "<< position.z()<<"\n"
1005  // << " siDetNum " << siDetNum
1006  // << " siLayerNum " << siLayerNum ;
1007 
1008  if (myHits < myMaxHits) {
1009  MonoHitX_[myHits] = position.x();
1010  MonoHitY_[myHits] = position.y();
1011  MonoHitZ_[myHits] = position.z();
1012 
1013  MonoHitR_[myHits] = position.perp();
1014  MonoHitPhi_[myHits] = position.phi();
1015  MonoHitTheta_[myHits] = position.theta();
1016 
1017  MonoHitSigX_[myHits] = sqrt(myerror.xx());
1018  MonoHitSigY_[myHits] = sqrt(myerror.yy());
1019  MonoHitCorr_[myHits] = myerror.xy() / sqrt(myerror.xx() * myerror.yy());
1020 
1021  MonoHitSignal_[myHits] = Signal;
1022  MonoHitNoise_[myHits] = Noise2;
1023  MonoHitWidth_[myHits] = StripCount;
1024 
1025  MonoDetector_[myHits] = siDetNum;
1026  MonoLayer_[myHits] = siLayerNum;
1027 
1028  ++myHits;
1029  } // of if(myHits < myMaxHits)
1030  // LogDebug("")<< "end of myHits < myMaxHits " ;
1031  } // end if this is the right subdetector
1032  // LogDebug("")<< "end of TIB/TOB check " ;
1033  } // end loop over hits
1034  // LogDebug("")<< " end of loop over hits " ;
1035  NMonoHits_ = myHits;
1036 
1037  numSiMonoHits_->Fill(NMonoHits_);
1038 
1041 
1042  LogDebug("") << " Loop over Matched Hits ";
1043 
1045  myHits = 0;
1046  for (SiStripMatchedRecHit2DCollection::DataContainer::const_iterator hit = matchedHitsHandle->data().begin(),
1047  hitend = matchedHitsHandle->data().end();
1048  hit != hitend;
1049  ++hit) {
1050  DetId id(hit->geographicalId());
1051  if ((hit->geographicalId()).subdetId() == StripSubdetector::TIB ||
1052  (hit->geographicalId()).subdetId() == StripSubdetector::TOB) {
1053  GlobalPoint position = trackerHandle->idToDet(hit->geographicalId())->surface().toGlobal(hit->localPosition());
1054  SiStripMatchedRecHit2D const rechit = *hit;
1055  // LocalPoint myposition = rechit.localPosition() ;
1056  LocalError myerror = rechit.localPositionError();
1057 
1058  // Get layer and subdetector ID here for this hit
1059  // see SiStripRecHitConverter/test/ValHit.cc
1060  Int_t siLayerNum = 0;
1061  Int_t siDetNum = 0;
1062  string siDetName = "";
1063  if ((hit->geographicalId()).subdetId() == StripSubdetector::TIB) {
1064  siLayerNum = tTopo->tibLayer(id);
1065  siDetNum = 1;
1066  siDetName = "TIB";
1067  } else if ((hit->geographicalId()).subdetId() == StripSubdetector::TOB) {
1068  siLayerNum = tTopo->tobLayer(id);
1069  siDetNum = 2;
1070  siDetName = "TOB";
1071  // } else if ( (hit->geographicalId()).subdetId() == StripSubdetector::TID ){
1072  // // should we use side/wheel/ring/module/stereo() ?
1073  // siLayerNum = tTopo->tidWheel(id);
1074  // siDetNum = 3 ;
1075  // siDetName = "TID" ;
1076  // }else if ( (hit->geographicalId()).subdetId() == StripSubdetector::TEC ){
1077  // //choices are side/petal/wheel/ring/module/glued/stereo
1078  // siLayerNum = tTopo->tecWheel(id);
1079  // siDetNum = 4 ;
1080  // siDetName = "TEC" ;
1081  } else {
1082  siLayerNum = -999;
1083  siDetNum = -999;
1084  siDetName = "NULL";
1085  }
1086  // const edm::Ref<edm::DetSetVector<SiStripCluster>, SiStripCluster, edm::refhelper::FindForDetSetVector<SiStripCluster> > clust=rechit.cluster();
1087  double Signal = 0;
1088  double Noise2 = 0;
1089  int StripCount = 0;
1090  // if(clust.isNonnull()) {
1091  // LogDebug("") << " barycenter " << clust->barycenter() ;
1092  // const std::vector<uint16_t> amplitudes=clust->amplitudes();
1093  // for(size_t i = 0 ; i<amplitudes.size(); i++ ){
1094  // Signal +=amplitudes[i] ;
1095  // //ignore for now Noise2 +=SiStripNoiseService_.getNoise(detid,clust->firstStrip()+i)*SiStripNoiseService_.getNoise(detid,clust->firstStrip()+i);
1096  // StripCount++;
1097  // }
1098  // } else {
1099  // LogDebug("") << " null cluster " ;
1100  // }
1101  // LogDebug("") << "Signal " << Signal << " Noise2 " << Noise2 << " StripCount " << StripCount ;
1102 
1103  // Dump position info
1104  // LogDebug("") << " Matched "
1105  // << "local position: "<<myposition.x()<<" "
1106  // << myposition.y()<<" "<<myposition.z()<<"\n"
1107  // << "local error: "<<myerror.xx()<<" "
1108  // << myerror.xy()<<" "<<myerror.yy() << "\n"
1109  // << "global position: " << position.x() << " "
1110  // << position.y()<<" "<< position.z()<<"\n"
1111  // << " siDetNum " << siDetNum
1112  // << " siLayerNum " << siLayerNum ;
1113 
1114  if (myHits < myMaxHits) {
1115  MatchedHitX_[myHits] = position.x();
1116  MatchedHitY_[myHits] = position.y();
1117  MatchedHitZ_[myHits] = position.z();
1118 
1119  MatchedHitR_[myHits] = position.perp();
1120  MatchedHitPhi_[myHits] = position.phi();
1121  MatchedHitTheta_[myHits] = position.theta();
1122 
1123  MatchedHitSigX_[myHits] = sqrt(myerror.xx());
1124  MatchedHitSigY_[myHits] = sqrt(myerror.yy());
1125  MatchedHitCorr_[myHits] = myerror.xy() / sqrt(myerror.xx() * myerror.yy());
1126 
1127  MatchedHitSignal_[myHits] = Signal;
1128  MatchedHitNoise_[myHits] = Noise2;
1129  MatchedHitWidth_[myHits] = StripCount;
1130 
1131  MatchedDetector_[myHits] = siDetNum;
1132  MatchedLayer_[myHits] = siLayerNum;
1133 
1134  ++myHits;
1135  }
1136  } // end if this is the right subdetector (TIB/TOB)
1137  } // end loop over hits
1138  NMatchedHits_ = myHits;
1139 
1141 
1143 
1146  LogDebug("") << "Writing to myTree with " << NShowers_ << " Showers " << NStereoHits_ << " Si StereoHits "
1147  << NMonoHits_ << " Si MonoHits " << NMatchedHits_ << " Si MatchedHits ";
1148 
1149  myTree_->Fill();
1150 
1151 } // end of Analyzer
1152 
1154  LogDebug("") << "Entering endJob ";
1155  file_->cd();
1156  numCand_->Write();
1157  numElectrons_->Write();
1158  numSuperClusters_->Write();
1159 
1160  energySuperClusters_->Write();
1161  sizeSuperClusters_->Write();
1162  emaxSuperClusters_->Write();
1163  phiWidthSuperClusters_->Write();
1164 
1165  energySuperClustersEl_->Write();
1166  sizeSuperClustersEl_->Write();
1167  emaxSuperClustersEl_->Write();
1168  phiWidthSuperClustersEl_->Write();
1169 
1170  ptDiff->Write();
1171  pDiff->Write();
1172  pElectronFailed->Write();
1173  ptElectronFailed->Write();
1174  pElectronPassed->Write();
1175  ptElectronPassed->Write();
1176  sizeSuperClustersPassed->Write();
1177  sizeSuperClustersFailed->Write();
1178  // energySuperClustersPassed->Write();
1179  // energySuperClustersFailed->Write();
1180  // eOverPPassed->Write();
1181  // eOverPFailed->Write();
1182 
1183  numSiStereoHits_->Write();
1184  numSiMonoHits_->Write();
1185  numSiMatchedHits_->Write();
1186 
1187  // disable for large dataset
1188  LogDebug("") << " Writing out ntuple is disabled for now ";
1189  myTree_->Write();
1190 
1191  file_->Close();
1192 }
1193 
1194 //
1195 // const member functions
1196 //
1197 
1198 //
1199 // static member functions
1200 //
TrackerGeometry::idToDet
const TrackerGeomDet * idToDet(DetId) const override
Definition: TrackerGeometry.cc:193
SiStripElectronAnalyzer::NShowers_
int NShowers_
Definition: SiStripElectronAnalyzer.h:103
SiStripElectronAnalyzer::MonoHitR_
float MonoHitR_[1000]
Definition: SiStripElectronAnalyzer.h:136
SiStripElectronAnalyzer::MonoHitTheta_
float MonoHitTheta_[1000]
Definition: SiStripElectronAnalyzer.h:138
counter
Definition: counter.py:1
Handle.h
SiStripRecHit2D::cluster
ClusterRef cluster() const
Definition: SiStripRecHit2D.h:22
init
int init
Definition: HydjetWrapper.h:64
mps_fire.i
i
Definition: mps_fire.py:428
PositionCalc.h
SiStripElectronAnalyzer::MonoLayer_
int MonoLayer_[1000]
Definition: SiStripElectronAnalyzer.h:150
SiStripElectronAnalyzer::sizeSuperClustersEl_
TH1F * sizeSuperClustersEl_
Definition: SiStripElectronAnalyzer.h:80
muonRPCDigis_cfi.Signal
Signal
Definition: muonRPCDigis_cfi.py:29
MessageLogger.h
TrackerGeometry.h
ESHandle.h
LocalError::xy
float xy() const
Definition: LocalError.h:23
SiStripElectronAnalyzer::NMonoHits_
int NMonoHits_
Definition: SiStripElectronAnalyzer.h:131
SiStripMatchedRecHit2DCollection.h
SiStripElectronAnalyzer::~SiStripElectronAnalyzer
~SiStripElectronAnalyzer() override
Definition: SiStripElectronAnalyzer.cc:137
SiStripElectronAnalyzer::numSuperClusters_
TH1F * numSuperClusters_
Definition: SiStripElectronAnalyzer.h:73
BasicCluster.h
SiStripElectronAnalyzer::MatchedHitSigY_
float MatchedHitSigY_[1000]
Definition: SiStripElectronAnalyzer.h:164
myMaxHits
#define myMaxHits
Definition: SiStripElectronAnalyzer.h:40
SiStripElectron.h
SiStripElectronAnalyzer::MatchedHitTheta_
float MatchedHitTheta_[1000]
Definition: SiStripElectronAnalyzer.h:160
SiStripElectronAnalyzer::MatchedHitPhi_
float MatchedHitPhi_[1000]
Definition: SiStripElectronAnalyzer.h:159
pos
Definition: PixelAliasList.h:18
SiStripElectronAnalyzer::numCand_
TH1F * numCand_
Definition: SiStripElectronAnalyzer.h:71
edmNew::DetSetVector::const_iterator
boost::transform_iterator< IterHelp, const_IdIter > const_iterator
Definition: DetSetVectorNew.h:197
SiStripElectronAnalyzer::StereoHitZ_
float StereoHitZ_[1000]
Definition: SiStripElectronAnalyzer.h:112
GeomDetType.h
SiStripElectronAnalyzer::MonoHitY_
float MonoHitY_[1000]
Definition: SiStripElectronAnalyzer.h:133
edm::PtrVectorItr
Definition: PtrVector.h:51
SiStripElectronAnalyzer::superClusterCollection_
std::string superClusterCollection_
Definition: SiStripElectronAnalyzer.h:177
SiStripElectronAnalyzer::eOverPFailed
TH1F * eOverPFailed
Definition: SiStripElectronAnalyzer.h:94
SiStripElectronAnalyzer::siElectronCollection_
std::string siElectronCollection_
Definition: SiStripElectronAnalyzer.h:183
SiStripRecHit2D
Definition: SiStripRecHit2D.h:7
SiStripElectronAnalyzer::beginJob
void beginJob() override
Definition: SiStripElectronAnalyzer.cc:161
SiStripElectronAnalyzer::MatchedDetector_
int MatchedDetector_[1000]
Definition: SiStripElectronAnalyzer.h:171
edm::LogInfo
Log< level::Info, false > LogInfo
Definition: MessageLogger.h:125
Signal
SiStripElectronAnalyzer::StereoHitSignal_
float StereoHitSignal_[1000]
Definition: SiStripElectronAnalyzer.h:123
SiStripElectronAnalyzer::myTree_
TTree * myTree_
Definition: SiStripElectronAnalyzer.h:101
SiStripElectronAnalyzer::MonoHitSigX_
float MonoHitSigX_[1000]
Definition: SiStripElectronAnalyzer.h:141
edm::Handle
Definition: AssociativeIterator.h:50
SiStripElectronAnalyzer::sizeSuperClustersPassed
TH1F * sizeSuperClustersPassed
Definition: SiStripElectronAnalyzer.h:90
SiStripElectronAnalyzer::initNtuple
virtual void initNtuple(void)
Definition: SiStripElectronAnalyzer.cc:237
edm::Ref< TrackCollection >
SiStripElectronAnalyzer::NStereoHits_
int NStereoHits_
Definition: SiStripElectronAnalyzer.h:109
SiStripElectronAnalyzer::ptDiff
TH1F * ptDiff
Definition: SiStripElectronAnalyzer.h:84
SiStripElectronAnalyzer::ptElectronFailed
TH1F * ptElectronFailed
Definition: SiStripElectronAnalyzer.h:87
SiStripElectronAnalyzer::SiStripElectronAnalyzer
SiStripElectronAnalyzer(const edm::ParameterSet &)
Definition: SiStripElectronAnalyzer.cc:66
DetId
Definition: DetId.h:17
TrackerTopology.h
SiStripElectronAnalyzer::energySuperClusters_
TH1F * energySuperClusters_
Definition: SiStripElectronAnalyzer.h:74
SiStripElectronAnalyzer::numSiMonoHits_
TH1F * numSiMonoHits_
Definition: SiStripElectronAnalyzer.h:98
SiStripElectronAnalyzer::StereoDetector_
int StereoDetector_[1000]
Definition: SiStripElectronAnalyzer.h:127
SiStripElectronAnalyzer::MonoHitSignal_
float MonoHitSignal_[1000]
Definition: SiStripElectronAnalyzer.h:145
SiStripElectronAnalyzer::MonoHitPhi_
float MonoHitPhi_[1000]
Definition: SiStripElectronAnalyzer.h:137
SiStripElectronAnalyzer::ptElectronPassed
TH1F * ptElectronPassed
Definition: SiStripElectronAnalyzer.h:89
TrackerTopologyRcd.h
Track.h
edm::EventSetup::get
T get() const
Definition: EventSetup.h:80
LocalError::xx
float xx() const
Definition: LocalError.h:22
SiStripElectronAnalyzer::numElectrons_
TH1F * numElectrons_
Definition: SiStripElectronAnalyzer.h:72
edmScanValgrind.skipThis
skipThis
Definition: edmScanValgrind.py:203
SiStripElectronAnalyzer::mctruthCollection_
std::string mctruthCollection_
Definition: SiStripElectronAnalyzer.h:175
TrackerDigiGeometryRecord
Definition: TrackerDigiGeometryRecord.h:15
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
SiStripElectronAnalyzer::eBRecHitProducer_
std::string eBRecHitProducer_
Definition: SiStripElectronAnalyzer.h:180
str
#define str(s)
Definition: TestProcessor.cc:51
edm::ESHandle< TrackerTopology >
SiStripElectronAnalyzer::MonoHitWidth_
int MonoHitWidth_[1000]
Definition: SiStripElectronAnalyzer.h:147
SiStripElectronFwd.h
CaloClusterFwd.h
StripSubdetector::TIB
static constexpr auto TIB
Definition: StripSubdetector.h:16
HCALHighEnergyHPDFilter_cfi.energy
energy
Definition: HCALHighEnergyHPDFilter_cfi.py:5
SiStripElectronAnalyzer::YShower_
float YShower_[1000]
Definition: SiStripElectronAnalyzer.h:106
SiStripElectronAnalyzer::energySuperClustersEl_
TH1F * energySuperClustersEl_
Definition: SiStripElectronAnalyzer.h:79
Point3DBase< float, LocalTag >
SiStripElectronAnalyzer::StereoHitR_
float StereoHitR_[1000]
Definition: SiStripElectronAnalyzer.h:114
SiStripElectronAnalyzer::pElectronPassed
TH1F * pElectronPassed
Definition: SiStripElectronAnalyzer.h:88
SiStripElectronAnalyzer::StereoLayer_
int StereoLayer_[1000]
Definition: SiStripElectronAnalyzer.h:128
BaseTrackerRecHit::localPositionError
LocalError localPositionError() const override
Definition: BaseTrackerRecHit.h:61
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
SiStripElectronAnalyzer::StereoHitX_
float StereoHitX_[1000]
Definition: SiStripElectronAnalyzer.h:110
SiStripElectronAnalyzer::MatchedHitZ_
float MatchedHitZ_[1000]
Definition: SiStripElectronAnalyzer.h:156
SiStripElectronAnalyzer::StereoHitSigY_
float StereoHitSigY_[1000]
Definition: SiStripElectronAnalyzer.h:120
TrackerDigiGeometryRecord.h
ElectronFwd.h
GeomDet::toGlobal
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
Definition: GeomDet.h:49
SiStripElectronAnalyzer::superClusterProducer_
std::string superClusterProducer_
Definition: SiStripElectronAnalyzer.h:176
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:223
edm::ParameterSet
Definition: ParameterSet.h:47
math::XYZPoint
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
SiStripElectronAnalyzer::StereoHitY_
float StereoHitY_[1000]
Definition: SiStripElectronAnalyzer.h:111
Event.h
SiStripElectronAnalyzer.h
SiStripElectronAnalyzer::pDiff
TH1F * pDiff
Definition: SiStripElectronAnalyzer.h:85
LocalError
Definition: LocalError.h:12
SiStripElectronAnalyzer::StereoHitTheta_
float StereoHitTheta_[1000]
Definition: SiStripElectronAnalyzer.h:116
SiStripElectronAnalyzer::siStereoHitCollection_
std::string siStereoHitCollection_
Definition: SiStripElectronAnalyzer.h:188
edm::Ref::isNonnull
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:238
SiStripElectronAnalyzer::MonoHitZ_
float MonoHitZ_[1000]
Definition: SiStripElectronAnalyzer.h:134
SiStripElectronAnalyzer::siRphiHitCollection_
std::string siRphiHitCollection_
Definition: SiStripElectronAnalyzer.h:187
position
static int position[264][3]
Definition: ReadPGInfo.cc:289
SiStripElectronAnalyzer::eBRecHitCollection_
std::string eBRecHitCollection_
Definition: SiStripElectronAnalyzer.h:181
SiStripElectronAnalyzer::sizeSuperClustersFailed
TH1F * sizeSuperClustersFailed
Definition: SiStripElectronAnalyzer.h:91
iEvent
int iEvent
Definition: GenABIO.cc:224
SiStripElectronAnalyzer::phiWidthSuperClusters_
TH1F * phiWidthSuperClusters_
Definition: SiStripElectronAnalyzer.h:77
SiStripRecHit2DCollection.h
SiStripElectronAnalyzer::StereoHitWidth_
int StereoHitWidth_[1000]
Definition: SiStripElectronAnalyzer.h:125
SiStripElectronAnalyzer::MatchedHitWidth_
int MatchedHitWidth_[1000]
Definition: SiStripElectronAnalyzer.h:169
SiStripElectronAnalyzer::ZShower_
float ZShower_[1000]
Definition: SiStripElectronAnalyzer.h:107
counter
static std::atomic< unsigned int > counter
Definition: SharedResourceNames.cc:17
edm::EventSetup
Definition: EventSetup.h:57
SiStripElectronAnalyzer::energySuperClustersFailed
TH1F * energySuperClustersFailed
Definition: SiStripElectronAnalyzer.h:93
SiStripElectronAnalyzer::emaxSuperClustersEl_
TH1F * emaxSuperClustersEl_
Definition: SiStripElectronAnalyzer.h:81
SiStripElectronAnalyzer::numSiMatchedHits_
TH1F * numSiMatchedHits_
Definition: SiStripElectronAnalyzer.h:99
get
#define get
SiStripElectronAnalyzer::MonoHitNoise_
float MonoHitNoise_[1000]
Definition: SiStripElectronAnalyzer.h:146
SiStripElectronAnalyzer::MatchedHitCorr_
float MatchedHitCorr_[1000]
Definition: SiStripElectronAnalyzer.h:165
SiStripElectronAnalyzer::endJob
void endJob(void) override
Definition: SiStripElectronAnalyzer.cc:1153
SiStripElectronAnalyzer::XShower_
float XShower_[1000]
Definition: SiStripElectronAnalyzer.h:105
SiStripElectronAnalyzer::MonoHitSigY_
float MonoHitSigY_[1000]
Definition: SiStripElectronAnalyzer.h:142
SiStripElectronAnalyzer::MonoHitX_
float MonoHitX_[1000]
Definition: SiStripElectronAnalyzer.h:132
SiStripElectronAnalyzer::StereoHitNoise_
float StereoHitNoise_[1000]
Definition: SiStripElectronAnalyzer.h:124
SiStripElectronAnalyzer::mctruthProducer_
std::string mctruthProducer_
Definition: SiStripElectronAnalyzer.h:174
SiStripElectronAnalyzer::siMatchedHitCollection_
std::string siMatchedHitCollection_
Definition: SiStripElectronAnalyzer.h:189
mag
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
Definition: Basic3DVectorLD.h:127
GeomDet.h
TrackerTopology::tobLayer
unsigned int tobLayer(const DetId &id) const
Definition: TrackerTopology.h:147
Electron.h
std
Definition: JetResolutionObject.h:76
SiStripElectronAnalyzer::siHitProducer_
std::string siHitProducer_
Definition: SiStripElectronAnalyzer.h:186
init
Definition: init.py:1
edmNew::DetSetVector::data
data_type const * data(size_t cell) const
Definition: DetSetVectorNew.h:560
SiStripElectronAnalyzer::StereoHitCorr_
float StereoHitCorr_[1000]
Definition: SiStripElectronAnalyzer.h:121
pwdgSkimBPark_cfi.electrons
electrons
Definition: pwdgSkimBPark_cfi.py:6
SiStripElectronAnalyzer::MatchedHitNoise_
float MatchedHitNoise_[1000]
Definition: SiStripElectronAnalyzer.h:168
SiStripMatchedRecHit2D
Definition: SiStripMatchedRecHit2D.h:8
DetId.h
SiStripElectronAnalyzer::MatchedHitX_
float MatchedHitX_[1000]
Definition: SiStripElectronAnalyzer.h:154
triggerObjects_cff.id
id
Definition: triggerObjects_cff.py:31
SiStripElectronAnalyzer::numSiStereoHits_
TH1F * numSiStereoHits_
Definition: SiStripElectronAnalyzer.h:97
SiStripElectronAnalyzer::MatchedHitSigX_
float MatchedHitSigX_[1000]
Definition: SiStripElectronAnalyzer.h:163
SiStripElectronAnalyzer::MatchedHitSignal_
float MatchedHitSignal_[1000]
Definition: SiStripElectronAnalyzer.h:167
SiStripElectronAnalyzer::sizeSuperClusters_
TH1F * sizeSuperClusters_
Definition: SiStripElectronAnalyzer.h:75
SuperCluster.h
StripSubdetector::TOB
static constexpr auto TOB
Definition: StripSubdetector.h:18
Point3D.h
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
SiStripElectronAnalyzer::electronCollection_
std::string electronCollection_
Definition: SiStripElectronAnalyzer.h:185
GeomDetEnumerators.h
SiStripElectronAnalyzer::electronProducer_
std::string electronProducer_
Definition: SiStripElectronAnalyzer.h:184
SiStripElectronAnalyzer::phiWidthSuperClustersEl_
TH1F * phiWidthSuperClustersEl_
Definition: SiStripElectronAnalyzer.h:82
funct::pow
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:29
SiStripElectronAnalyzer::NMatchedHits_
int NMatchedHits_
Definition: SiStripElectronAnalyzer.h:153
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
SiStripElectronAnalyzer::StereoHitPhi_
float StereoHitPhi_[1000]
Definition: SiStripElectronAnalyzer.h:115
TrackerTopologyRcd
Definition: TrackerTopologyRcd.h:10
ParameterSet.h
SiStripMatchedRecHit2D.h
HepMCProduct.h
SiStripElectronAnalyzer::file_
TFile * file_
Definition: SiStripElectronAnalyzer.h:70
SiStripElectronAnalyzer::eOverPPassed
TH1F * eOverPPassed
Definition: SiStripElectronAnalyzer.h:95
SiStripElectronAnalyzer::siElectronProducer_
std::string siElectronProducer_
Definition: SiStripElectronAnalyzer.h:182
SiStripElectronAnalyzer::EShower_
float EShower_[1000]
Definition: SiStripElectronAnalyzer.h:104
edm::Event
Definition: Event.h:73
SiStripElectronAnalyzer::MatchedHitR_
float MatchedHitR_[1000]
Definition: SiStripElectronAnalyzer.h:158
SiStripElectronAnalyzer::MonoHitCorr_
float MonoHitCorr_[1000]
Definition: SiStripElectronAnalyzer.h:143
SiStripElectronAnalyzer::MatchedHitY_
float MatchedHitY_[1000]
Definition: SiStripElectronAnalyzer.h:155
SiStripElectronAnalyzer::analyze
void analyze(const edm::Event &, const edm::EventSetup &) override
Definition: SiStripElectronAnalyzer.cc:295
SiStripRecHit2D.h
GlobalPoint.h
StripSubdetector.h
SiStripElectronAnalyzer::energySuperClustersPassed
TH1F * energySuperClustersPassed
Definition: SiStripElectronAnalyzer.h:92
LocalError::yy
float yy() const
Definition: LocalError.h:24
SiStripElectronAnalyzer::MonoDetector_
int MonoDetector_[1000]
Definition: SiStripElectronAnalyzer.h:149
SiStripElectronAnalyzer::StereoHitSigX_
float StereoHitSigX_[1000]
Definition: SiStripElectronAnalyzer.h:119
SiStripElectronAnalyzer::fileName_
std::string fileName_
Definition: SiStripElectronAnalyzer.h:68
SiStripElectronAnalyzer::MatchedLayer_
int MatchedLayer_[1000]
Definition: SiStripElectronAnalyzer.h:172
SiStripElectronAnalyzer::pElectronFailed
TH1F * pElectronFailed
Definition: SiStripElectronAnalyzer.h:86
hit
Definition: SiStripHitEffFromCalibTree.cc:88
SiStripElectronAnalyzer::emaxSuperClusters_
TH1F * emaxSuperClusters_
Definition: SiStripElectronAnalyzer.h:76
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37
TrackerTopology::tibLayer
unsigned int tibLayer(const DetId &id) const
Definition: TrackerTopology.h:150