ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/Morgan/interface/TRootElectron.h
Revision: 1.11
Committed: Mon Jun 29 14:37:21 2009 UTC (15 years, 10 months ago) by lethuill
Content type: text/plain
Branch: MAIN
CVS Tags: all_2_2_9_02
Changes since 1.10: +109 -4 lines
Log Message:
Add SC association and more shape variables

File Contents

# User Rev Content
1 mlethuil 1.1 #ifndef TRootElectron_h
2     #define TRootElectron_h
3    
4 lethuill 1.4 #include <map>
5    
6 mlethuil 1.1 #include "../interface/TRootParticle.h"
7    
8     using namespace std;
9    
10 lethuill 1.11 class TRootSuperCluster;
11    
12 mlethuil 1.1 class TRootElectron : public TRootParticle
13     {
14 lethuill 1.3
15 lethuill 1.10 public:
16 lethuill 1.3
17 lethuill 1.10 TRootElectron() :
18     TRootParticle()
19     ,classification_(-9999)
20     ,caloEnergy_(-9999.)
21     ,caloEnergyError_(-9999.)
22     ,trackMomentum_(-9999.)
23     ,trackMomentumError_(-9999.)
24     ,hadOverEm_(-9999.)
25     ,deltaEtaIn_(-9999.)
26     ,deltaPhiIn_(-9999.)
27     ,energySuperClusterOverPin_(-9999.)
28     ,deltaEtaOut_(-9999.)
29     ,deltaPhiOut_(-9999.)
30     ,energySeedClusterOverPout_(-9999.)
31     ,energyScaleCorrected_(false)
32     ,momentumCorrected_(false)
33     ,pixelLayersWithMeasurement_(-1)
34     ,stripLayersWithMeasurement_(-1)
35     ,d0_(-9999.)
36     ,d0Error_(-9999.)
37     ,dsz_(-9999.)
38     ,dszError_(-9999.)
39     ,normalizedChi2_(-9999.)
40     ,ptError_(-9999.)
41     ,etaError_(-9999.)
42     ,phiError_(-9999.)
43     ,ip3DSignificance_(-9999.)
44     ,nbClusters_(-9999)
45     ,superClusterRawEnergy_(-9999.)
46     ,preshowerEnergy_(-9999.)
47     ,caloPosition_(-9999.,-9999.,-9999.)
48 lethuill 1.11 ,scIndex_()
49 lethuill 1.10 ,scRef_()
50     ,clusterAlgo_(-9999)
51     ,caloConeSize_(-9999.)
52     ,e2x2_(-9999.)
53     ,e3x3_(-9999.)
54     ,e5x5_(-9999.)
55     ,eMax_(-9999.)
56     ,isoR01_sumPt_(-9999.)
57     ,isoR01_nTracks_(-9999)
58     ,isoR02_sumPt_(-9999.)
59     ,isoR02_nTracks_(-9999)
60     ,isoR03_emEt_(-9999.)
61     ,isoR03_hadEt_(-9999.)
62     ,isoR03_sumPt_(-9999.)
63     ,isoR03_nTracks_(-9999)
64     ,isoR05_emEt_(-9999.)
65     ,isoR05_hadEt_(-9999.)
66     ,isoR05_sumPt_(-9999.)
67     ,isoR05_nTracks_(-9999)
68     ,idCutBasedFixedThresholdLoose_(-1)
69     ,idCutBasedFixedThresholdTight_(-1)
70     ,idCutBasedFixedThresholdHighEnergy_(-1)
71     ,idCutBasedCategorizedLoose_(-1)
72     ,idCutBasedCategorizedTight_(-1)
73     ,idLikelihood_(-9999.)
74     ,idNeuralNet_(-9999.)
75     {;}
76    
77     TRootElectron(const TRootElectron& electron) :
78     TRootParticle(electron)
79     ,classification_(electron.classification_)
80     ,caloEnergy_(electron.caloEnergy_)
81     ,caloEnergyError_(electron.caloEnergyError_)
82     ,trackMomentum_(electron.trackMomentum_)
83     ,trackMomentumError_(electron.trackMomentumError_)
84     ,hadOverEm_(electron.hadOverEm_)
85     ,deltaEtaIn_(electron.deltaEtaIn_)
86     ,deltaPhiIn_(electron.deltaPhiIn_)
87     ,energySuperClusterOverPin_(electron.energySuperClusterOverPin_)
88     ,deltaEtaOut_(electron.deltaEtaOut_)
89     ,deltaPhiOut_(electron.deltaPhiOut_)
90     ,energySeedClusterOverPout_(electron.energySeedClusterOverPout_)
91     ,energyScaleCorrected_(electron.energyScaleCorrected_)
92     ,momentumCorrected_(electron.momentumCorrected_)
93     ,pixelLayersWithMeasurement_(electron.pixelLayersWithMeasurement_)
94     ,stripLayersWithMeasurement_(electron.stripLayersWithMeasurement_)
95     ,d0_(electron.d0_)
96     ,d0Error_(electron.d0Error_)
97     ,dsz_(electron.dsz_)
98     ,dszError_(electron.dszError_)
99     ,normalizedChi2_(electron.normalizedChi2_)
100     ,ptError_(electron.ptError_)
101     ,etaError_(electron.etaError_)
102     ,phiError_(electron.phiError_)
103     ,ip3DSignificance_(electron.ip3DSignificance_)
104     ,nbClusters_(electron.nbClusters_)
105     ,superClusterRawEnergy_(electron.superClusterRawEnergy_)
106     ,preshowerEnergy_(electron.preshowerEnergy_)
107     ,caloPosition_(electron.caloPosition_)
108 lethuill 1.11 ,scIndex_(electron.scIndex_)
109 lethuill 1.10 ,scRef_(electron.scRef_)
110     ,clusterAlgo_(electron.clusterAlgo_)
111     ,caloConeSize_(electron.caloConeSize_)
112     ,e2x2_(electron.e2x2_)
113     ,e3x3_(electron.e3x3_)
114     ,e5x5_(electron.e5x5_)
115     ,eMax_(electron.eMax_)
116     ,isoR01_sumPt_(electron.isoR01_sumPt_)
117     ,isoR01_nTracks_(electron.isoR01_nTracks_)
118     ,isoR02_sumPt_(electron.isoR02_sumPt_)
119     ,isoR02_nTracks_(electron.isoR02_nTracks_)
120     ,isoR03_emEt_(electron.isoR03_emEt_)
121     ,isoR03_hadEt_(electron.isoR03_hadEt_)
122     ,isoR03_sumPt_(electron.isoR03_sumPt_)
123     ,isoR03_nTracks_(electron.isoR03_nTracks_)
124     ,isoR05_emEt_(electron.isoR05_emEt_)
125     ,isoR05_hadEt_(electron.isoR05_hadEt_)
126     ,isoR05_sumPt_(electron.isoR05_sumPt_)
127     ,isoR05_nTracks_(electron.isoR05_nTracks_)
128     ,idCutBasedFixedThresholdLoose_(electron.idCutBasedFixedThresholdLoose_)
129     ,idCutBasedFixedThresholdTight_(electron.idCutBasedFixedThresholdTight_)
130     ,idCutBasedFixedThresholdHighEnergy_(electron.idCutBasedFixedThresholdHighEnergy_)
131     ,idCutBasedCategorizedLoose_(electron.idCutBasedCategorizedLoose_)
132     ,idCutBasedCategorizedTight_(electron.idCutBasedCategorizedTight_)
133     ,idLikelihood_(electron.idLikelihood_)
134     ,idNeuralNet_(electron.idNeuralNet_)
135     {;}
136    
137     TRootElectron(Double_t px, Double_t py, Double_t pz, Double_t e) :
138     TRootParticle(px,py,pz,e)
139     ,classification_(-9999)
140     ,caloEnergy_(-9999.)
141     ,caloEnergyError_(-9999.)
142     ,trackMomentum_(-9999.)
143     ,trackMomentumError_(-9999.)
144     ,hadOverEm_(-9999.)
145     ,deltaEtaIn_(-9999.)
146     ,deltaPhiIn_(-9999.)
147     ,energySuperClusterOverPin_(-9999.)
148     ,deltaEtaOut_(-9999.)
149     ,deltaPhiOut_(-9999.)
150     ,energySeedClusterOverPout_(-9999.)
151     ,energyScaleCorrected_(false)
152     ,momentumCorrected_(false)
153     ,pixelLayersWithMeasurement_(-1)
154     ,stripLayersWithMeasurement_(-1)
155     ,d0_(-9999.)
156     ,d0Error_(-9999.)
157     ,dsz_(-9999.)
158     ,dszError_(-9999.)
159     ,normalizedChi2_(-9999.)
160     ,ptError_(-9999.)
161     ,etaError_(-9999.)
162     ,phiError_(-9999.)
163     ,ip3DSignificance_(-9999.)
164     ,nbClusters_(-9999)
165     ,superClusterRawEnergy_(-9999.)
166     ,preshowerEnergy_(-9999.)
167     ,caloPosition_(-9999.,-9999.,-9999.)
168 lethuill 1.11 ,scIndex_()
169 lethuill 1.10 ,scRef_()
170     ,clusterAlgo_(-9999)
171     ,caloConeSize_(-9999.)
172     ,e2x2_(-9999.)
173     ,e3x3_(-9999.)
174     ,e5x5_(-9999.)
175     ,eMax_(-9999.)
176     ,isoR01_sumPt_(-9999.)
177     ,isoR01_nTracks_(-9999)
178     ,isoR02_sumPt_(-9999.)
179     ,isoR02_nTracks_(-9999)
180     ,isoR03_emEt_(-9999.)
181     ,isoR03_hadEt_(-9999.)
182     ,isoR03_sumPt_(-9999.)
183     ,isoR03_nTracks_(-9999)
184     ,isoR05_emEt_(-9999.)
185     ,isoR05_hadEt_(-9999.)
186     ,isoR05_sumPt_(-9999.)
187     ,isoR05_nTracks_(-9999)
188     ,idCutBasedFixedThresholdLoose_(-1)
189     ,idCutBasedFixedThresholdTight_(-1)
190     ,idCutBasedFixedThresholdHighEnergy_(-1)
191     ,idCutBasedCategorizedLoose_(-1)
192     ,idCutBasedCategorizedTight_(-1)
193     ,idLikelihood_(-9999.)
194     ,idNeuralNet_(-9999.)
195     {;}
196    
197     TRootElectron(Double_t px, Double_t py, Double_t pz, Double_t e, Double_t vtx_x, Double_t vtx_y, Double_t vtx_z) :
198     TRootParticle(px,py,pz,e,vtx_x,vtx_y,vtx_z)
199     ,classification_(-9999)
200     ,caloEnergy_(-9999.)
201     ,caloEnergyError_(-9999.)
202     ,trackMomentum_(-9999.)
203     ,trackMomentumError_(-9999.)
204     ,hadOverEm_(-9999.)
205     ,deltaEtaIn_(-9999.)
206     ,deltaPhiIn_(-9999.)
207     ,energySuperClusterOverPin_(-9999.)
208     ,deltaEtaOut_(-9999.)
209     ,deltaPhiOut_(-9999.)
210     ,energySeedClusterOverPout_(-9999.)
211     ,energyScaleCorrected_(false)
212     ,momentumCorrected_(false)
213     ,pixelLayersWithMeasurement_(-1)
214     ,stripLayersWithMeasurement_(-1)
215     ,d0_(-9999.)
216     ,d0Error_(-9999.)
217     ,dsz_(-9999.)
218     ,dszError_(-9999.)
219     ,normalizedChi2_(-9999.)
220     ,ptError_(-9999.)
221     ,etaError_(-9999.)
222     ,phiError_(-9999.)
223     ,ip3DSignificance_(-9999.)
224     ,nbClusters_(-9999)
225     ,superClusterRawEnergy_(-9999.)
226     ,preshowerEnergy_(-9999.)
227     ,caloPosition_(-9999.,-9999.,-9999.)
228 lethuill 1.11 ,scIndex_()
229 lethuill 1.10 ,scRef_()
230     ,clusterAlgo_(-9999)
231     ,caloConeSize_(-9999.)
232     ,e2x2_(-9999.)
233     ,e3x3_(-9999.)
234     ,e5x5_(-9999.)
235     ,eMax_(-9999.)
236     ,isoR01_sumPt_(-9999.)
237     ,isoR01_nTracks_(-9999)
238     ,isoR02_sumPt_(-9999.)
239     ,isoR02_nTracks_(-9999)
240     ,isoR03_emEt_(-9999.)
241     ,isoR03_hadEt_(-9999.)
242     ,isoR03_sumPt_(-9999.)
243     ,isoR03_nTracks_(-9999)
244     ,isoR05_emEt_(-9999.)
245     ,isoR05_hadEt_(-9999.)
246     ,isoR05_sumPt_(-9999.)
247     ,isoR05_nTracks_(-9999)
248     ,idCutBasedFixedThresholdLoose_(-1)
249     ,idCutBasedFixedThresholdTight_(-1)
250     ,idCutBasedFixedThresholdHighEnergy_(-1)
251     ,idCutBasedCategorizedLoose_(-1)
252     ,idCutBasedCategorizedTight_(-1)
253     ,idLikelihood_(-9999.)
254     ,idNeuralNet_(-9999.)
255     {;}
256    
257     TRootElectron(Double_t px, Double_t py, Double_t pz, Double_t e, Double_t vtx_x, Double_t vtx_y, Double_t vtx_z, Int_t type, Float_t charge) :
258     TRootParticle(px,py,pz,e,vtx_x,vtx_y,vtx_z,type,charge)
259     ,classification_(-9999)
260     ,caloEnergy_(-9999.)
261     ,caloEnergyError_(-9999.)
262     ,trackMomentum_(-9999.)
263     ,trackMomentumError_(-9999.)
264     ,hadOverEm_(-9999.)
265     ,deltaEtaIn_(-9999.)
266     ,deltaPhiIn_(-9999.)
267     ,energySuperClusterOverPin_(-9999.)
268     ,deltaEtaOut_(-9999.)
269     ,deltaPhiOut_(-9999.)
270     ,energySeedClusterOverPout_(-9999.)
271     ,energyScaleCorrected_(false)
272     ,momentumCorrected_(false)
273     ,pixelLayersWithMeasurement_(-1)
274     ,stripLayersWithMeasurement_(-1)
275     ,d0_(-9999.)
276     ,d0Error_(-9999.)
277     ,dsz_(-9999.)
278     ,dszError_(-9999.)
279     ,normalizedChi2_(-9999.)
280     ,ptError_(-9999.)
281     ,etaError_(-9999.)
282     ,phiError_(-9999.)
283     ,ip3DSignificance_(-9999.)
284     ,nbClusters_(-9999)
285     ,superClusterRawEnergy_(-9999.)
286     ,preshowerEnergy_(-9999.)
287     ,caloPosition_(-9999.,-9999.,-9999.)
288 lethuill 1.11 ,scIndex_()
289 lethuill 1.10 ,scRef_()
290     ,clusterAlgo_(-9999)
291     ,caloConeSize_(-9999.)
292     ,e2x2_(-9999.)
293     ,e3x3_(-9999.)
294     ,e5x5_(-9999.)
295     ,eMax_(-9999.)
296     ,isoR01_sumPt_(-9999.)
297     ,isoR01_nTracks_(-9999)
298     ,isoR02_sumPt_(-9999.)
299     ,isoR02_nTracks_(-9999)
300     ,isoR03_emEt_(-9999.)
301     ,isoR03_hadEt_(-9999.)
302     ,isoR03_sumPt_(-9999.)
303     ,isoR03_nTracks_(-9999)
304     ,isoR05_emEt_(-9999.)
305     ,isoR05_hadEt_(-9999.)
306     ,isoR05_sumPt_(-9999.)
307     ,isoR05_nTracks_(-9999)
308     ,idCutBasedFixedThresholdLoose_(-1)
309     ,idCutBasedFixedThresholdTight_(-1)
310     ,idCutBasedFixedThresholdHighEnergy_(-1)
311     ,idCutBasedCategorizedLoose_(-1)
312     ,idCutBasedCategorizedTight_(-1)
313     ,idLikelihood_(-9999.)
314     ,idNeuralNet_(-9999.)
315     {;}
316    
317     TRootElectron(const TLorentzVector &momentum) :
318     TRootParticle(momentum)
319     ,classification_(-9999)
320     ,caloEnergy_(-9999.)
321     ,caloEnergyError_(-9999.)
322     ,trackMomentum_(-9999.)
323     ,trackMomentumError_(-9999.)
324     ,hadOverEm_(-9999.)
325     ,deltaEtaIn_(-9999.)
326     ,deltaPhiIn_(-9999.)
327     ,energySuperClusterOverPin_(-9999.)
328     ,deltaEtaOut_(-9999.)
329     ,deltaPhiOut_(-9999.)
330     ,energySeedClusterOverPout_(-9999.)
331     ,energyScaleCorrected_(false)
332     ,momentumCorrected_(false)
333     ,pixelLayersWithMeasurement_(-1)
334     ,stripLayersWithMeasurement_(-1)
335     ,d0_(-9999.)
336     ,d0Error_(-9999.)
337     ,dsz_(-9999.)
338     ,dszError_(-9999.)
339     ,normalizedChi2_(-9999.)
340     ,ptError_(-9999.)
341     ,etaError_(-9999.)
342     ,phiError_(-9999.)
343     ,ip3DSignificance_(-9999.)
344     ,nbClusters_(-9999)
345     ,superClusterRawEnergy_(-9999.)
346     ,preshowerEnergy_(-9999.)
347     ,caloPosition_(-9999.,-9999.,-9999.)
348 lethuill 1.11 ,scIndex_()
349 lethuill 1.10 ,scRef_()
350     ,clusterAlgo_(-9999)
351     ,caloConeSize_(-9999.)
352     ,e2x2_(-9999.)
353     ,e3x3_(-9999.)
354     ,e5x5_(-9999.)
355     ,eMax_(-9999.)
356     ,isoR01_sumPt_(-9999.)
357     ,isoR01_nTracks_(-9999)
358     ,isoR02_sumPt_(-9999.)
359     ,isoR02_nTracks_(-9999)
360     ,isoR03_emEt_(-9999.)
361     ,isoR03_hadEt_(-9999.)
362     ,isoR03_sumPt_(-9999.)
363     ,isoR03_nTracks_(-9999)
364     ,isoR05_emEt_(-9999.)
365     ,isoR05_hadEt_(-9999.)
366     ,isoR05_sumPt_(-9999.)
367     ,isoR05_nTracks_(-9999)
368     ,idCutBasedFixedThresholdLoose_(-1)
369     ,idCutBasedFixedThresholdTight_(-1)
370     ,idCutBasedFixedThresholdHighEnergy_(-1)
371     ,idCutBasedCategorizedLoose_(-1)
372     ,idCutBasedCategorizedTight_(-1)
373     ,idLikelihood_(-9999.)
374     ,idNeuralNet_(-9999.)
375     {;}
376    
377     TRootElectron(const TLorentzVector &momentum, const TVector3 &vertex, Int_t type, Float_t charge) :
378     TRootParticle(momentum, vertex, type, charge)
379     ,classification_(-9999)
380     ,caloEnergy_(-9999.)
381     ,caloEnergyError_(-9999.)
382     ,trackMomentum_(-9999.)
383     ,trackMomentumError_(-9999.)
384     ,hadOverEm_(-9999.)
385     ,deltaEtaIn_(-9999.)
386     ,deltaPhiIn_(-9999.)
387     ,energySuperClusterOverPin_(-9999.)
388     ,deltaEtaOut_(-9999.)
389     ,deltaPhiOut_(-9999.)
390     ,energySeedClusterOverPout_(-9999.)
391     ,energyScaleCorrected_(false)
392     ,momentumCorrected_(false)
393     ,pixelLayersWithMeasurement_(-1)
394     ,stripLayersWithMeasurement_(-1)
395     ,d0_(-9999.)
396     ,d0Error_(-9999.)
397     ,dsz_(-9999.)
398     ,dszError_(-9999.)
399     ,normalizedChi2_(-9999.)
400     ,ptError_(-9999.)
401     ,etaError_(-9999.)
402     ,phiError_(-9999.)
403     ,ip3DSignificance_(-9999.)
404     ,nbClusters_(-9999)
405     ,superClusterRawEnergy_(-9999.)
406     ,preshowerEnergy_(-9999.)
407     ,caloPosition_(-9999.,-9999.,-9999.)
408 lethuill 1.11 ,scIndex_()
409 lethuill 1.10 ,scRef_()
410     ,clusterAlgo_(-9999)
411     ,caloConeSize_(-9999.)
412     ,e2x2_(-9999.)
413     ,e3x3_(-9999.)
414     ,e5x5_(-9999.)
415     ,eMax_(-9999.)
416     ,isoR01_sumPt_(-9999.)
417     ,isoR01_nTracks_(-9999)
418     ,isoR02_sumPt_(-9999.)
419     ,isoR02_nTracks_(-9999)
420     ,isoR03_emEt_(-9999.)
421     ,isoR03_hadEt_(-9999.)
422     ,isoR03_sumPt_(-9999.)
423     ,isoR03_nTracks_(-9999)
424     ,isoR05_emEt_(-9999.)
425     ,isoR05_hadEt_(-9999.)
426     ,isoR05_sumPt_(-9999.)
427     ,isoR05_nTracks_(-9999)
428     ,idCutBasedFixedThresholdLoose_(-1)
429     ,idCutBasedFixedThresholdTight_(-1)
430     ,idCutBasedFixedThresholdHighEnergy_(-1)
431     ,idCutBasedCategorizedLoose_(-1)
432     ,idCutBasedCategorizedTight_(-1)
433     ,idLikelihood_(-9999.)
434     ,idNeuralNet_(-9999.)
435     {;}
436    
437     ~TRootElectron() {;}
438    
439    
440     Int_t classification() const { return classification_ ;}
441     Float_t caloEnergy() const { return caloEnergy_ ;}
442     Float_t caloEnergyError() const { return caloEnergyError_ ;}
443     Float_t trackMomentum() const { return trackMomentum_ ;}
444     Float_t trackMomentumError() const { return trackMomentumError_ ;}
445     Float_t hadOverEm() const { return hadOverEm_ ;}
446     Float_t deltaEtaIn() const { return deltaEtaIn_ ;}
447     Float_t deltaPhiIn() const { return deltaPhiIn_ ;}
448     Float_t energySuperClusterOverPin() const { return energySuperClusterOverPin_ ;}
449     Float_t deltaEtaOut() const { return deltaEtaOut_ ;}
450     Float_t deltaPhiOut() const { return deltaPhiOut_ ;}
451     Float_t energySeedClusterOverPout() const { return energySeedClusterOverPout_ ;}
452     Bool_t energyScaleCorrected() const { return energyScaleCorrected_ ;}
453     Bool_t momentumCorrected() const { return momentumCorrected_ ;}
454    
455     Int_t pixelLayersWithMeasurement() const { return pixelLayersWithMeasurement_; }
456     Int_t stripLayersWithMeasurement() const { return stripLayersWithMeasurement_; }
457     Float_t d0() const { return d0_ ;}
458     Float_t d0Error() const { return d0Error_ ;}
459     Float_t dsz() const { return dsz_ ;}
460     Float_t dszError() const { return dszError_ ;}
461     Float_t normalizedChi2() const { return normalizedChi2_ ;}
462     Float_t ptError() const { return ptError_ ;}
463     Float_t etaError() const { return etaError_ ;}
464     Float_t phiError() const { return phiError_ ;}
465     Float_t ip3DSignificance() const { return ip3DSignificance_ ;}
466    
467     Int_t nbClusters() const { return nbClusters_ ;}
468     Float_t superClusterRawEnergy() const { return superClusterRawEnergy_ ;}
469     Float_t preshowerEnergy() const { return preshowerEnergy_ ;}
470     TVector3 caloPosition() const { return caloPosition_ ;}
471 lethuill 1.11 map<Int_t,Int_t> scIndexMap() const { return scIndex_; }
472 lethuill 1.10 map<Int_t,TRef> scRef() const { return scRef_ ;}
473 lethuill 1.11 Int_t nSuperClusters() const { return scRef_.size();}
474    
475     // Get index in TCloneArray of the supercluster associated by default
476     // Default SC collection for electron producer defined in
477     // RecoEgamma/EgammaElectronProducers/python/pixelMatchGsfElectrons_cfi
478     Int_t scIndex()
479     {
480     // 0=island or multi5x5, 1=hybrid
481     //if ( clusterAlgo_== 0 ) return scIndexOfType(122);
482     if ( clusterAlgo_== 0 ) return scIndexOfType(322);
483     else if ( clusterAlgo_== 1 ) return scIndexOfType(211);
484     else return -1;
485     }
486    
487     // Get ith element in map scIndex_
488     Int_t scIndexAt(UInt_t index)
489     {
490     if ( index>=scIndex_.size())
491     {
492     return -1;
493     }
494     else
495     {
496     map<Int_t,Int_t>::iterator it=scIndex_.begin();
497     for (UInt_t i=0; i<index; ++i) it++;
498     return ( (*it).second );
499     }
500     }
501    
502     // Get index in TCloneArray of the seed supercluster of type "type"
503     Int_t scIndexOfType(Int_t type)
504     {
505     map<Int_t,Int_t>::iterator it=scIndex_.find(type);
506     return ( it ==scIndex_.end() ? -1 : (*it).second );
507     }
508    
509     // Get supercluster associated by default
510     // Default SC collection for electron producer defined in
511     // RecoEgamma/EgammaElectronProducers/python/pixelMatchGsfElectrons_cfi
512     TRootSuperCluster* superCluster()
513     {
514     // 0=island or multi5x5, 1=hybrid
515     //if ( clusterAlgo_== 0 ) return superClusterOfType(122);
516     if ( clusterAlgo_== 0 ) return superClusterOfType(322);
517     else if ( clusterAlgo_== 1 ) return superClusterOfType(211);
518     else return 0;
519     }
520    
521     // Get ith element in map scRef_
522     TRootSuperCluster* superClusterAt(UInt_t index)
523     {
524     if ( index>=scRef_.size())
525     {
526     return 0;
527     }
528     else
529     {
530     map<Int_t,TRef>::iterator it=scRef_.begin();
531     for (UInt_t i=0; i<index; ++i) it++;
532     return ( (TRootSuperCluster*)(*it).second.GetObject() );
533     }
534     }
535    
536     // Get the seed supercluster of type "type"
537     TRootSuperCluster* superClusterOfType(Int_t type)
538     {
539     map<Int_t,TRef>::iterator it=scRef_.find(type);
540     return ( it ==scRef_.end() ? 0 : (TRootSuperCluster*) (*it).second.GetObject() );
541     }
542    
543 lethuill 1.10 Int_t clusterAlgo() const { return clusterAlgo_ ;}
544     Float_t caloConeSize() const { return caloConeSize_ ;}
545     Float_t e2x2() const { return e2x2_ ;}
546     Float_t e3x3() const { return e3x3_ ;}
547     Float_t e5x5() const { return e5x5_ ;}
548     Float_t eMax() const { return eMax_ ;}
549 lethuill 1.11 Float_t r19() const { return ( e3x3_ == 0. ? -1. : eMax_/e3x3_ ); } // ratio of Emax/E(3x3)
550     // FIXME - Check definition of r9... include preshowerEnergy as in SimplePhotonAnalyzer.cc ?
551     Float_t r9() const { return ( superClusterRawEnergy_ == 0. ? -1. : e3x3_/superClusterRawEnergy_ ); } // ratio of E(3x3)/ESC
552 lethuill 1.10 Float_t isoR01_sumPt() const { return isoR01_sumPt_ ;}
553     Int_t isoR01_nTracks() const { return isoR01_nTracks_ ;}
554     Float_t isoR02_sumPt() const { return isoR02_sumPt_ ;}
555     Int_t isoR02_nTracks() const { return isoR02_nTracks_ ;}
556     Float_t isoR03_emEt() const { return isoR03_emEt_ ;}
557     Float_t isoR03_hadEt() const { return isoR03_hadEt_ ;}
558     Float_t isoR03_sumPt() const { return isoR03_sumPt_ ;}
559     Int_t isoR03_nTracks() const { return isoR03_nTracks_ ;}
560     Float_t isoR05_emEt() const { return isoR05_emEt_ ;}
561     Float_t isoR05_hadEt() const { return isoR05_hadEt_ ;}
562     Float_t isoR05_sumPt() const { return isoR05_sumPt_ ;}
563     Int_t isoR05_nTracks() const { return isoR05_nTracks_ ;}
564     Int_t idCutBasedFixedThresholdLoose() const { return idCutBasedFixedThresholdLoose_ ;}
565     Int_t idCutBasedFixedThresholdTight() const { return idCutBasedFixedThresholdTight_ ;}
566     Int_t idCutBasedFixedThresholdHighEnergy() const { return idCutBasedFixedThresholdHighEnergy_ ;}
567     Int_t idCutBasedCategorizedLoose() const { return idCutBasedCategorizedLoose_ ;}
568     Int_t idCutBasedCategorizedTight() const { return idCutBasedCategorizedTight_ ;}
569     Float_t idLikelihood() const { return idLikelihood_ ;}
570     Float_t idNeuralNet() const { return idNeuralNet_ ;}
571    
572     /* TODO - isBarrel / isEndcap / isCrack
573 lethuill 1.4 if (fabs (eta) <= 1.4442) {
574 lethuill 1.10 localElectron.setPosition (1);
575 lethuill 1.4 }
576     else if (fabs (eta) > 1.4442 & fabs (eta) < 1.5560) {
577 lethuill 1.10 localElectron.setPosition (0);
578 lethuill 1.4 }
579     else if (fabs (eta) >= 1.5560) {
580 lethuill 1.10 localElectron.setPosition (-1);
581 lethuill 1.4 }
582 lethuill 1.10 */
583    
584     virtual TString typeName() const { return "TRootElectron"; }
585    
586    
587     void setClassification(Int_t classification) { classification_ = classification; }
588     void setCaloEnergy(Float_t caloEnergy) { caloEnergy_ = caloEnergy; }
589     void setCaloEnergyError(Float_t caloEnergyError) { caloEnergyError_ = caloEnergyError; }
590     void setTrackMomentum(Float_t trackMomentum) { trackMomentum_ = trackMomentum; }
591     void setTrackMomentumError(Float_t trackMomentumError) { trackMomentumError_ = trackMomentumError; }
592     void setHadOverEm(Float_t hadOverEm) { hadOverEm_ = hadOverEm; }
593     void setDeltaEtaIn(Float_t deltaEtaIn) { deltaEtaIn_ = deltaEtaIn; }
594     void setDeltaPhiIn(Float_t deltaPhiIn) { deltaPhiIn_ = deltaPhiIn; }
595     void setEnergySuperClusterOverPin(Float_t energySuperClusterOverPin) { energySuperClusterOverPin_ = energySuperClusterOverPin; }
596     void setDeltaEtaOut(Float_t deltaEtaOut) { deltaEtaOut_ = deltaEtaOut; }
597     void setDeltaPhiOut(Float_t deltaPhiOut) { deltaPhiOut_ = deltaPhiOut; }
598     void setEnergySeedClusterOverPout(Float_t energySeedClusterOverPout) { energySeedClusterOverPout_ = energySeedClusterOverPout; }
599     void setEnergyScaleCorrected(Bool_t energyScaleCorrected) { energyScaleCorrected_ = energyScaleCorrected; }
600     void setMomentumCorrected(Bool_t momentumCorrected) { momentumCorrected_ = momentumCorrected; }
601    
602     void setPixelLayersWithMeasurement(Int_t pixelLayersWithMeasurement) { pixelLayersWithMeasurement_ = pixelLayersWithMeasurement; }
603     void setStripLayersWithMeasurement(Int_t stripLayersWithMeasurement) { stripLayersWithMeasurement_ = stripLayersWithMeasurement; }
604     void setD0(Float_t d0) { d0_ = d0; }
605     void setD0Error(Float_t d0Error) { d0Error_ = d0Error; }
606     void setDsz(Float_t dsz) { dsz_ = dsz; }
607     void setDszError(Float_t dszError) { dszError_ = dszError; }
608     void setNormalizedChi2(Float_t normalizedChi2) { normalizedChi2_ = normalizedChi2; }
609     void setPtError(Float_t ptError) { ptError_ = ptError; }
610     void setEtaError(Float_t etaError) { etaError_ = etaError; }
611     void setPhiError(Float_t phiError) { phiError_ = phiError; }
612     void setIP3DSignificance(Float_t ip3DSignificance) { ip3DSignificance_ = ip3DSignificance; }
613    
614     void setNbClusters(Int_t nbClusters) { nbClusters_ = nbClusters; }
615     void setSuperClusterRawEnergy(Float_t superClusterRawEnergy) { superClusterRawEnergy_ = superClusterRawEnergy; }
616     void setPreshowerEnergy(Float_t preshowerEnergy) { preshowerEnergy_ = preshowerEnergy; }
617     void setCaloPosition(TVector3 caloPosition) { caloPosition_ = caloPosition; }
618     void setCaloPosition(Double_t x, Double_t y, Double_t z) { caloPosition_.SetXYZ(x, y ,z); }
619 lethuill 1.11 void setSCIndex(Int_t type, Int_t index) { scIndex_[type]=index; }
620     void setSCRef(Int_t type, TObject* superCluster) { scRef_[type]=superCluster; }
621 lethuill 1.10 void setClusterAlgo(Int_t clusterAlgo) { clusterAlgo_ = clusterAlgo; }
622     void setCaloConeSize(Float_t caloConeSize) { caloConeSize_ = caloConeSize; }
623     void setE2x2(Float_t e2x2) { e2x2_ = e2x2; }
624     void setE3x3(Float_t e3x3) { e3x3_ = e3x3; }
625     void setE5x5(Float_t e5x5) { e5x5_ = e5x5; }
626     void setEMax(Float_t eMax) { eMax_ = eMax; }
627     void setIsoR01_sumPt(Float_t isoR01_sumPt) { isoR01_sumPt_ = isoR01_sumPt; }
628     void setIsoR01_nTracks(Int_t isoR01_nTracks) { isoR01_nTracks_ = isoR01_nTracks; }
629     void setIsoR02_sumPt(Float_t isoR02_sumPt) { isoR02_sumPt_ = isoR02_sumPt; }
630     void setIsoR02_nTracks(Int_t isoR02_nTracks) { isoR02_nTracks_ = isoR02_nTracks; }
631     void setIsoR03_emEt(Float_t isoR03_emEt) { isoR03_emEt_ = isoR03_emEt; }
632     void setIsoR03_hadEt(Float_t isoR03_hadEt) { isoR03_hadEt_ = isoR03_hadEt; }
633     void setIsoR03_sumPt(Float_t isoR03_sumPt) { isoR03_sumPt_ = isoR03_sumPt; }
634     void setIsoR03_nTracks(Int_t isoR03_nTracks) { isoR03_nTracks_ = isoR03_nTracks; }
635     void setIsoR05_emEt(Float_t isoR05_emEt) { isoR05_emEt_ = isoR05_emEt; }
636     void setIsoR05_hadEt(Float_t isoR05_hadEt) { isoR05_hadEt_ = isoR05_hadEt; }
637     void setIsoR05_sumPt(Float_t isoR05_sumPt) { isoR05_sumPt_ = isoR05_sumPt; }
638     void setIsoR05_nTracks(Int_t isoR05_nTracks) { isoR05_nTracks_ = isoR05_nTracks; }
639     void setIDCutBasedFixedThresholdLoose(Int_t idCutBasedFixedThresholdLoose) { idCutBasedFixedThresholdLoose_ = idCutBasedFixedThresholdLoose; }
640     void setIDCutBasedFixedThresholdTight(Int_t idCutBasedFixedThresholdTight) { idCutBasedFixedThresholdTight_ = idCutBasedFixedThresholdTight; }
641     void setIDCutBasedFixedThresholdHighEnergy(Int_t idCutBasedFixedThresholdHighEnergy) { idCutBasedFixedThresholdHighEnergy_ = idCutBasedFixedThresholdHighEnergy; }
642     void setIDCutBasedCategorizedLoose(Int_t idCutBasedCategorizedLoose) { idCutBasedCategorizedLoose_ = idCutBasedCategorizedLoose; }
643     void setIDCutBasedCategorizedTight(Int_t idCutBasedCategorizedTight) { idCutBasedCategorizedTight_ = idCutBasedCategorizedTight; }
644     void setIDLikelihood(Float_t idLikelihood) { idLikelihood_ = idLikelihood; }
645     void setIDNeuralNet(Float_t idNeuralNet) { idNeuralNet_ = idNeuralNet; }
646    
647 lethuill 1.11 friend std::ostream& operator<< (std::ostream& stream, const TRootElectron& electron)
648     {
649     stream << "TRootElectron - Charge=" << electron.charge() << " (E,Et,eta,phi)=("<< electron.Energy() <<","<< electron.Et() <<","<< electron.Eta() <<","<< electron.Phi() << ")"
650 lethuill 1.10 << " vertex(x,y,z)=("<< electron.vx() <<","<< electron.vy() <<","<< electron.vz() << ")";
651     return stream;
652     };
653    
654 lethuill 1.11 void Print()
655     {
656     std::cout << "TRootElectron - Charge=" << this->charge() << " (E,Et,eta,phi)=("<< this->Energy() <<","<< this->Et() <<","<< this->Eta() <<","<< this->Phi() << ")"
657     << " vertex=("<< this->vx() <<","<< this->vy() <<","<< this->vz() << ")"
658     << " caloPosition=(" << this->caloPosition().X() << "," << this->caloPosition().Y() << "," << this->caloPosition().Z() << ")" << endl
659     << " trackMomentum=" << this->trackMomentum() << "+-" << this->trackMomentumError() << " nPixels=" << this->pixelLayersWithMeasurement()
660     << " nStrips=" << this->stripLayersWithMeasurement() << " d0=" << this->d0() << "+-" << this->d0Error()<< " dsz=" << this->dsz() << "+-" << this->dszError() << endl
661     << " algo=" << this->clusterAlgo() << " nBC=" << this->nbClusters() << " caloEnergy=" << this->caloEnergy() << "+-" << this->caloEnergyError()
662     << " scRawEnergy=" << this->superClusterRawEnergy() << " preshEnergy=" << this->preshowerEnergy()
663     << " E2x2=" << this->e2x2() <<" E3x3=" << this->e3x3() <<" E5x5=" << this->e5x5() <<" Emax=" << this->eMax()
664     << " R19=" << this->r19() <<" R9=" << this->r9() << endl
665     <<" H/E=" << this->hadOverEm() <<" deltaEtaIn=" << this->deltaEtaIn() <<" deltaPhiIn=" << this->deltaPhiIn() <<" deltaEtaOut=" << this->deltaEtaOut() <<" deltaPhiOut=" << this->deltaPhiOut() <<" E/p in=" << this->energySuperClusterOverPin() <<" E/p out=" << this->energySeedClusterOverPout() << endl
666     << " iso03 ecal="<< this->isoR03_emEt() << " hcal=" << this->isoR03_hadEt() << " tracker=" << this->isoR03_sumPt() << " ntracks=" << this->isoR03_nTracks()
667     << " iso05 ecal="<< this->isoR05_emEt() << " hcal=" << this->isoR05_hadEt() << " tracker=" << this->isoR05_sumPt() << " ntracks=" << this->isoR05_nTracks() << endl
668     <<" ID: Fixed-Threshold(Loose,Tight,HighEnergy)=(" << this->idCutBasedFixedThresholdLoose() << "," << this->idCutBasedFixedThresholdTight() << "," << this->idCutBasedFixedThresholdHighEnergy() << ")"
669     <<" Categorized(Loose,Tight)=(" << this->idCutBasedCategorizedLoose() << "," << this->idCutBasedCategorizedTight() << ")"
670     <<" LH=" << this->idLikelihood() << " NN=" << this->idNeuralNet();
671     };
672    
673 lethuill 1.10
674     private:
675    
676     // Variables from reco::GsfElectron
677    
678     // Classification:
679     // barrel : 0: golden, 10: bigbrem, 20: narrow, 30-34: showering, 40: crack
680     // (30: showering nbrem=0, 31: showering nbrem=1, 32: showering nbrem=2 ,33: showering nbrem=3, 34: showering nbrem>=4)
681     // endcaps : 100: golden, 110: bigbrem, 120: narrow, 130-134: showering
682     // (130: showering nbrem=0, 131: showering nbrem=1, 132: showering nbrem=2 ,133: showering nbrem=3, 134: showering nbrem>=4)
683    
684     Int_t classification_; // Electron classification
685    
686     Float_t caloEnergy_; // SuperCluster energy corrected by EnergyScaleFactor
687     Float_t caloEnergyError_; // Error on caloEnergy_
688     Float_t trackMomentum_; // Track momentum at vertex
689     Float_t trackMomentumError_; // Error on trackMomentum_
690    
691     Float_t hadOverEm_; // hadronic over electromagnetic fraction
692    
693     Float_t deltaEtaIn_; // Supercluster eta - Track eta from helix extrapolation from impact point
694     Float_t deltaPhiIn_; // Supercluster phi - Track phi from helix extrapolation from impact point
695     Float_t energySuperClusterOverPin_; // supercluster energy / track momentum at impact point
696    
697     Float_t deltaEtaOut_; // SeedCluster eta - Track eta at calo from outermost state
698     Float_t deltaPhiOut_; // SeedCluster phi - Track phi at calo from outermost state
699     Float_t energySeedClusterOverPout_; // SeedCluster energy / track momentum at calo from outermost state
700    
701     Bool_t energyScaleCorrected_; // Has Energy Scale been applied ?
702     Bool_t momentumCorrected_; // Tell if class dependant E-p combination has been determined
703    
704    
705     // Variables from reco::GsfTrack
706    
707     /* cf: http://cmslxr.fnal.gov/lxr/source/DataFormats/TrackReco/interface/TrackBase.h
708     For tracks reconstructed in the CMS Tracker, the reference position is the point of closest approach to the centre
709     of CMS. For muons, this is not necessarily true. Parameters associated to the 5D curvilinear covariance matrix:
710     qoverp = q / abs(p) = signed inverse of momentum [1/GeV]
711     lambda = pi/2 - polar angle at the given point
712     phi = azimuth angle at the given point
713     dxy = -vx*sin(phi) + vy*cos(phi) [cm]
714     dsz = vz*cos(lambda) - (vx*cos(phi)+vy*sin(phi))*sin(lambda) [cm]
715    
716     Geometrically, dxy is the signed distance in the XY plane between the straight line passing through (vx,vy) with
717     azimuthal angle phi and the point (0,0). The dsz parameter is the signed distance in the SZ plane between the straight
718     line passing through (vx,vy,vz) with angles (phi, lambda) and the point (s=0,z=0). The S axis is defined by the projection
719     of the straight line onto the XY plane. The convention is to assign the S coordinate for (vx,vy) as the value
720     vx*cos(phi)+vy*sin(phi). This value is zero when (vx,vy) is the point of minimum transverse distance to (0,0).
721    
722     Note that dxy and dsz provide sensible estimates of the distance from the true particle trajectory to (0,0,0) ONLY
723     in two cases:
724     - When (vx,vy,vz) already correspond to the point of minimum transverse distance to (0,0,0) or is close to it
725     (so that the differences between considering the exact trajectory or a straight line in this range are negligible).
726     This is usually true for Tracker tracks.
727     - When the track has infinite or extremely high momentum */
728    
729     Int_t pixelLayersWithMeasurement_; // Number of pixel layers with at least one valid hit
730     Int_t stripLayersWithMeasurement_; // Number of strip layers with at least one valid hit
731    
732     Float_t d0_; // d0=-dxy
733     Float_t d0Error_; // error on d0_
734     Float_t dsz_; // dsz parameter
735     Float_t dszError_; // error on dsz_
736     Float_t normalizedChi2_; // chi-squared divided by n.d.o.f. of track fit
737    
738     Float_t ptError_; // needed ? ptError()
739     Float_t etaError_; // needed ? etaError()
740     Float_t phiError_; // needed ? phiError()
741    
742     Float_t ip3DSignificance_; // Significance of the impact parameter wrt to the selected primary vertex
743    
744    
745     // Variables from reco::SuperCluster
746     Int_t nbClusters_; // Number of related brem clusters
747     Float_t superClusterRawEnergy_;
748     Float_t preshowerEnergy_;
749     TVector3 caloPosition_; // SuperCluster centroid position
750 lethuill 1.11 map<Int_t,Int_t> scIndex_; // indexes of the seed SuperClusters (one per SC tytpe)
751 lethuill 1.10 map<Int_t,TRef> scRef_; // references to the seed SuperClusters (one per SC tytpe)
752    
753    
754     // Cluster Shape variables
755     // need reco::SuperCluster and reco::BasicCluster
756     Int_t clusterAlgo_; // reco::BasicCluster::algo() island = 0, hybrid = 1, fixedMatrix = 2, dynamicHybrid = 3, multi5x5 = 4
757     Float_t caloConeSize_; // Delta_R of the cone centered on the reco::GsfElectron and containing all its basic clusters constituents
758     // need reco::SuperCluster and reco::BasicCluster and reduced Ecal RecHits Collections for EcalClusterLazyTools
759     Float_t e2x2_;
760     Float_t e3x3_;
761     Float_t e5x5_;
762     Float_t eMax_;
763    
764    
765     // pat::Electron Isolation
766     Float_t isoR01_sumPt_;
767     Int_t isoR01_nTracks_;
768    
769     Float_t isoR02_sumPt_;
770     Int_t isoR02_nTracks_;
771    
772     Float_t isoR03_emEt_;
773     Float_t isoR03_hadEt_;
774     Float_t isoR03_sumPt_;
775     Int_t isoR03_nTracks_;
776    
777     Float_t isoR05_emEt_;
778     Float_t isoR05_hadEt_;
779     Float_t isoR05_sumPt_; // Pt sum of tracks in a DR=0.5 cone around the electron
780     Int_t isoR05_nTracks_; // Tracks multiplicity in a DR=0.5 cone around the electron
781    
782    
783     // pat::Electron ID (cf https://twiki.cern.ch/twiki/bin/view/CMS/SWGuideElectronID)
784     // By default in 2.2.X, only cut based identification is available in pat (https://twiki.cern.ch/twiki/bin/view/CMS/SWGuideCutBasedElectronID
785     Int_t idCutBasedFixedThresholdLoose_; // Simple cut based ID (aka 'robust') - Loose Thresholds on H/E, DeltaEta, DeltaPhi, SigmaEtaEta
786     Int_t idCutBasedFixedThresholdTight_; // Simple cut based ID (default in EWK group) - Tight Thresholds on H/E, DeltaEta, DeltaPhi, SigmaEtaEta
787     Int_t idCutBasedFixedThresholdHighEnergy_; // Simple cut based ID - Thresholds optimized for high energy electron (~TeV)
788     Int_t idCutBasedCategorizedLoose_; // Category based ID - Different loose thresholds on H/E, DeltaEta, DeltaPhi, SigmaEtaEta, eSeedOverPin for differents regions in the E/p vs fBrem plane
789     Int_t idCutBasedCategorizedTight_; // Category based ID - Different tight thresholds on H/E, DeltaEta, DeltaPhi, SigmaEtaEta, eSeedOverPin for differents regions in the E/p vs fBrem plane
790     Float_t idLikelihood_; // Lieklihood ID - not activated by default in 2.2.X
791     Float_t idNeuralNet_; // NN ID - not activated by default in 2.2.X
792    
793    
794     // Matched genParticle
795     TLorentzVector momentumMCElectron_;
796     TVector3 vertexMCElectron_;
797     Int_t pdgIdMCElectron_;
798    
799     // needed ?
800     //Float_t sigmaEtaEta_;
801     //Float_t sigmaPhiPhi_;
802 lethuill 1.4
803    
804 lethuill 1.11 ClassDef (TRootElectron,4);
805 lethuill 1.3
806 mlethuil 1.1 };
807    
808     #endif