1 |
mlethuil |
1.1 |
#ifndef TRootSuperCluster_h
|
2 |
|
|
#define TRootSuperCluster_h
|
3 |
|
|
|
4 |
|
|
/************************************************************************************************************************************
|
5 |
lethuill |
1.6 |
SuperCluster Type: ijk
|
6 |
|
|
i = algo => 1=Island , 2=Hybrid, 3=multi5x5
|
7 |
|
|
j = detector => 1=ECAL Barrel , 2=ECAL Endcap
|
8 |
|
|
k = corrections => 0=nopreshower / uncorrected , 1=no preshower / standard CMSSW corections
|
9 |
|
|
2=preshower / standard CMSSW corections , 3= preshower / uncorrected
|
10 |
|
|
|
11 |
|
|
110 => Island Barrel SuperClusters
|
12 |
|
|
120 => Island Endcap SuperClusters
|
13 |
|
|
121 => Corrected Island Endcap SuperClusters (standard CMSSW corrections)
|
14 |
|
|
122 => Corrected Island Endcap SuperClusters with Preshower (standard CMSSW corrections)
|
15 |
|
|
210 => Hybrid Barrel SuperClusters
|
16 |
|
|
211 => Corrected Hybrid Barrel SuperClusters (standard CMSSW corrections)
|
17 |
|
|
320 => Multi5x5 Endcap SuperClusters
|
18 |
|
|
322 => Corrected Multi5x5 Endcap SuperClusters with Preshower (standard CMSSW corrections)
|
19 |
|
|
323 => Multi5x5 Endcap SuperClusters with Preshower
|
20 |
|
|
|
21 |
mlethuil |
1.1 |
************************************************************************************************************************************/
|
22 |
|
|
|
23 |
|
|
#include <string>
|
24 |
|
|
#include <iostream>
|
25 |
lethuill |
1.2 |
#include <vector>
|
26 |
mlethuil |
1.1 |
|
27 |
|
|
#include "Rtypes.h"
|
28 |
|
|
|
29 |
|
|
#include "../interface/TRootCluster.h"
|
30 |
|
|
|
31 |
|
|
using namespace std;
|
32 |
|
|
|
33 |
lethuill |
1.7 |
class TRootPhoton;
|
34 |
|
|
class TRootElectron;
|
35 |
|
|
|
36 |
mlethuil |
1.1 |
class TRootSuperCluster : public TRootCluster
|
37 |
|
|
{
|
38 |
|
|
|
39 |
lethuill |
1.6 |
public:
|
40 |
|
|
|
41 |
|
|
TRootSuperCluster() :
|
42 |
|
|
TRootCluster()
|
43 |
lethuill |
1.7 |
,rawEnergy_(-1.)
|
44 |
|
|
,preshowerEnergy_(-1.)
|
45 |
|
|
,nBasicClusters_(-1)
|
46 |
|
|
,subBasicClusterUIDVector_()
|
47 |
|
|
,subBasicClusterIndexVector_()
|
48 |
|
|
,seedBasicClusterVectorIndex_(-1)
|
49 |
|
|
,subBasicClusterRefVector_()
|
50 |
|
|
,seedBasicCluster_(0)
|
51 |
|
|
,photonIndex_(-1)
|
52 |
lethuill |
1.6 |
,photon_(0)
|
53 |
lethuill |
1.7 |
,electronIndex_(-1)
|
54 |
lethuill |
1.6 |
,electron_(0)
|
55 |
|
|
{;}
|
56 |
|
|
|
57 |
|
|
TRootSuperCluster(const TRootSuperCluster& cluster) :
|
58 |
|
|
TRootCluster(cluster)
|
59 |
lethuill |
1.7 |
,rawEnergy_(cluster.rawEnergy_)
|
60 |
|
|
,preshowerEnergy_(cluster.preshowerEnergy_)
|
61 |
lethuill |
1.6 |
,nBasicClusters_(cluster.nBasicClusters_)
|
62 |
lethuill |
1.7 |
,subBasicClusterUIDVector_(cluster.subBasicClusterUIDVector_)
|
63 |
|
|
,subBasicClusterIndexVector_(cluster.subBasicClusterIndexVector_)
|
64 |
|
|
,seedBasicClusterVectorIndex_(cluster.seedBasicClusterVectorIndex_)
|
65 |
|
|
,subBasicClusterRefVector_(cluster.subBasicClusterRefVector_)
|
66 |
|
|
,seedBasicCluster_(cluster.seedBasicCluster_)
|
67 |
|
|
,photonIndex_(cluster.photonIndex_)
|
68 |
lethuill |
1.6 |
,photon_(cluster.photon_)
|
69 |
lethuill |
1.7 |
,electronIndex_(cluster.electronIndex_)
|
70 |
lethuill |
1.6 |
,electron_(cluster.photon_)
|
71 |
|
|
{;}
|
72 |
|
|
|
73 |
|
|
TRootSuperCluster(Double_t energy, Double_t eta, Double_t phi) :
|
74 |
|
|
TRootCluster(energy, eta, phi)
|
75 |
lethuill |
1.7 |
,rawEnergy_(0.)
|
76 |
|
|
,preshowerEnergy_(0.)
|
77 |
lethuill |
1.6 |
,nBasicClusters_(0)
|
78 |
lethuill |
1.7 |
,subBasicClusterUIDVector_()
|
79 |
|
|
,subBasicClusterIndexVector_()
|
80 |
|
|
,seedBasicClusterVectorIndex_(-1)
|
81 |
|
|
,subBasicClusterRefVector_()
|
82 |
|
|
,seedBasicCluster_(0)
|
83 |
|
|
,photonIndex_(-1)
|
84 |
lethuill |
1.6 |
,photon_(0)
|
85 |
lethuill |
1.7 |
,electronIndex_(-1)
|
86 |
lethuill |
1.6 |
,electron_(0)
|
87 |
|
|
{;}
|
88 |
lethuill |
1.7 |
|
89 |
lethuill |
1.6 |
TRootSuperCluster(Double_t energy, Double_t eta, Double_t phi, Double_t x, Double_t y, Double_t z) :
|
90 |
|
|
TRootCluster(energy, eta, phi, x, y, z)
|
91 |
lethuill |
1.7 |
,rawEnergy_(0.)
|
92 |
|
|
,preshowerEnergy_(0.)
|
93 |
lethuill |
1.6 |
,nBasicClusters_(0)
|
94 |
lethuill |
1.7 |
,subBasicClusterUIDVector_()
|
95 |
|
|
,subBasicClusterIndexVector_()
|
96 |
|
|
,seedBasicClusterVectorIndex_(-1)
|
97 |
|
|
,subBasicClusterRefVector_()
|
98 |
|
|
,seedBasicCluster_(0)
|
99 |
|
|
,photonIndex_(-1)
|
100 |
lethuill |
1.6 |
,photon_(0)
|
101 |
lethuill |
1.7 |
,electronIndex_(-1)
|
102 |
lethuill |
1.6 |
,electron_(0)
|
103 |
|
|
{;}
|
104 |
lethuill |
1.7 |
|
105 |
lethuill |
1.6 |
TRootSuperCluster(Double_t energy, Double_t eta, Double_t phi, Double_t x, Double_t y, Double_t z, Int_t det) :
|
106 |
|
|
TRootCluster(energy, eta, phi, x, y, z, det)
|
107 |
lethuill |
1.7 |
,rawEnergy_(0.)
|
108 |
|
|
,preshowerEnergy_(0.)
|
109 |
lethuill |
1.6 |
,nBasicClusters_(0)
|
110 |
lethuill |
1.7 |
,subBasicClusterUIDVector_()
|
111 |
|
|
,subBasicClusterIndexVector_()
|
112 |
|
|
,seedBasicClusterVectorIndex_(-1)
|
113 |
|
|
,subBasicClusterRefVector_()
|
114 |
|
|
,seedBasicCluster_(0)
|
115 |
|
|
,photonIndex_(-1)
|
116 |
lethuill |
1.6 |
,photon_(0)
|
117 |
lethuill |
1.7 |
,electronIndex_(-1)
|
118 |
lethuill |
1.6 |
,electron_(0)
|
119 |
|
|
{;}
|
120 |
lethuill |
1.7 |
|
121 |
lethuill |
1.6 |
~TRootSuperCluster() {;}
|
122 |
lethuill |
1.7 |
|
123 |
|
|
// ECAL Raw Energy
|
124 |
|
|
Float_t rawEnergy() const { return rawEnergy_; }
|
125 |
lethuill |
1.6 |
|
126 |
lethuill |
1.7 |
// Preshower Energy
|
127 |
|
|
Float_t preshowerEnergy() const { return preshowerEnergy_; }
|
128 |
lethuill |
1.6 |
|
129 |
lethuill |
1.7 |
// Number of Basic Cluster constituents
|
130 |
lethuill |
1.6 |
Int_t nBasicClusters() const { return nBasicClusters_; }
|
131 |
lethuill |
1.7 |
|
132 |
|
|
// UIDs of the Basic Cluster constituents
|
133 |
|
|
std::vector<Int_t> subBasicClusterUIDVector() const { return subBasicClusterUIDVector_; }
|
134 |
|
|
|
135 |
|
|
// Indexes in TCloneArray ("BasicClusters" branch) of the Basic Cluster constituents
|
136 |
|
|
std::vector<Int_t> subBasicClusterIndexVector() const { return subBasicClusterIndexVector_; }
|
137 |
|
|
|
138 |
|
|
// Index in TCloneArray ("BasicClusters" branch) of the seed Basic Cluster
|
139 |
|
|
Int_t seedBasicClusterIndex() const
|
140 |
lethuill |
1.6 |
{
|
141 |
lethuill |
1.7 |
if( Int_t(subBasicClusterIndexVector_.size())>seedBasicClusterVectorIndex_)
|
142 |
lethuill |
1.6 |
{
|
143 |
lethuill |
1.7 |
return subBasicClusterIndexVector_.at(seedBasicClusterVectorIndex_);
|
144 |
lethuill |
1.6 |
}
|
145 |
|
|
else
|
146 |
|
|
{
|
147 |
|
|
cout << "No seed BasicCluster in this SuperCluster...." << endl;
|
148 |
|
|
return -1;
|
149 |
|
|
}
|
150 |
|
|
}
|
151 |
lethuill |
1.7 |
|
152 |
|
|
// Get the ith Basic Cluster constituent stocked in subBasicClusterRefVector_
|
153 |
|
|
TRootCluster* subBasicClusterAt(UInt_t index) const
|
154 |
|
|
{
|
155 |
|
|
if ( index>=subBasicClusterRefVector_.size())
|
156 |
|
|
{
|
157 |
|
|
return 0;
|
158 |
|
|
}
|
159 |
|
|
else
|
160 |
|
|
{
|
161 |
|
|
return (TRootCluster*) subBasicClusterRefVector_.at(index).GetObject();
|
162 |
|
|
}
|
163 |
|
|
}
|
164 |
|
|
|
165 |
|
|
// Get the vector containing the references to Basic Cluster constituent
|
166 |
|
|
std::vector<TRef> subBasicClusterRefVector() const { return subBasicClusterRefVector_; }
|
167 |
|
|
|
168 |
|
|
// Get the seed Basic Cluster
|
169 |
|
|
TRootCluster* seedBasicCluster() const { return (TRootCluster*) seedBasicCluster_.GetObject();}
|
170 |
|
|
|
171 |
|
|
// Index in TCloneArray ("Photons" branch) of the possible associated photon
|
172 |
|
|
Int_t photonIndex() const { return photonIndex_; }
|
173 |
|
|
|
174 |
|
|
// Get possible associated photon
|
175 |
|
|
TRootPhoton* photon() const { return (TRootPhoton*) photon_.GetObject();}
|
176 |
|
|
|
177 |
|
|
// Index in TCloneArray ("Electrons" branch) of the possible associated electron
|
178 |
|
|
Int_t electronIndex() const { return electronIndex_; }
|
179 |
|
|
|
180 |
|
|
// Get possible associated electron
|
181 |
|
|
TRootElectron* electron() const { return (TRootElectron*) electron_.GetObject();}
|
182 |
|
|
|
183 |
|
|
// is associated to a photon ?
|
184 |
|
|
Bool_t isPhoton() const { return ( photon_.GetObject() == 0 ? false : true); }
|
185 |
lethuill |
1.6 |
|
186 |
lethuill |
1.7 |
// is associated to an electron ?
|
187 |
lethuill |
1.6 |
Bool_t isElectron() const { return ( electron_.GetObject() == 0 ? false : true); }
|
188 |
|
|
|
189 |
lethuill |
1.7 |
// Name of the clustering algorithm
|
190 |
|
|
TString typeName() const
|
191 |
|
|
{
|
192 |
|
|
if ( det_==110 ) return "Island Barrel SC";
|
193 |
|
|
else if ( det_==120 ) return "Island Endcap SC";
|
194 |
|
|
else if ( det_==121 ) return "Corrected Island Endcap SC";
|
195 |
|
|
else if ( det_==122 ) return "Corrected Island Endcap with Preshower SC";
|
196 |
|
|
else if ( det_==210 ) return "Hybrid Barrel SC";
|
197 |
|
|
else if ( det_==211 ) return "Corrected Hybrid Barrel SC";
|
198 |
|
|
else if ( det_==320 ) return "Multi5x5 Endcap SC";
|
199 |
|
|
else if ( det_==322 ) return "Corrected Multi5x5 Endcap with Preshower SC";
|
200 |
|
|
else if ( det_==323 ) return "Multi5x5 Endcap with Preshower SC";
|
201 |
|
|
else return "Unknown type SC";
|
202 |
|
|
}
|
203 |
|
|
|
204 |
|
|
void setRawEnergy(Float_t rawEnergy) { rawEnergy_ = rawEnergy; }
|
205 |
|
|
void setPreshowerEnergy(Float_t preshowerEnergy) { preshowerEnergy_ = preshowerEnergy; }
|
206 |
lethuill |
1.6 |
void setNBasicClusters(Int_t nBasicClusters) { nBasicClusters_ = nBasicClusters; }
|
207 |
lethuill |
1.7 |
void addSubBasicClusterUID(Int_t uid) { subBasicClusterUIDVector_.push_back(uid); }
|
208 |
|
|
void clearSubBasicClusterUID() { subBasicClusterUIDVector_.clear(); }
|
209 |
|
|
void addSubBasicClusterIndex(Int_t idx) { subBasicClusterIndexVector_.push_back(idx); }
|
210 |
|
|
void clearSubBasicClusterIndex() { subBasicClusterIndexVector_.clear(); }
|
211 |
|
|
void setSeedBasicClusterVectorIndex(Int_t seedBasicClusterVectorIndex) { seedBasicClusterVectorIndex_ = seedBasicClusterVectorIndex; }
|
212 |
|
|
void addSubBasicCluster(TObject* subBasicCluster) { subBasicClusterRefVector_.push_back(subBasicCluster); }
|
213 |
|
|
void clearSubBasicCluster() { subBasicClusterRefVector_.clear(); }
|
214 |
|
|
void setSeedBasicCluster(TObject* seedBasicCluster) { seedBasicCluster_ = seedBasicCluster; }
|
215 |
|
|
void setPhotonIndex(Int_t photonIndex) { photonIndex_ = photonIndex; }
|
216 |
lethuill |
1.6 |
void setPhoton(TObject* photon) { photon_ = photon; }
|
217 |
lethuill |
1.7 |
void setElectronIndex(Int_t electronIndex) { electronIndex_ = electronIndex; }
|
218 |
lethuill |
1.6 |
void setElectron(TObject* electron) { electron_ = electron; }
|
219 |
lethuill |
1.7 |
|
220 |
|
|
|
221 |
|
|
friend std::ostream& operator<< (std::ostream& stream, const TRootSuperCluster& clus)
|
222 |
|
|
{
|
223 |
lethuill |
1.6 |
stream << "TRootSuperCluster - Type=" << clus.det_ << " (E,Et,eta,phi)=(" << clus.Mag() <<"," << clus.Pt() <<"," << clus.Eta() <<"," << clus.Phi() << ")"
|
224 |
|
|
<< " Calo position (x,y,z)=(" << clus.calX() << "," << clus.calY() << "," << clus.calZ() << ")"
|
225 |
|
|
<< " nBasicClusters=" << clus.nBasicClusters() << " e3x3=" << clus.e3x3() << " e5x5=" << clus.e5x5() << " eMax=" << clus.eMax()<< " e2nd=" << clus.e2nd()
|
226 |
|
|
<< " nXtals=" << clus.nXtals() << " preshowerEnergy=" << clus.preshowerEnergy() << " rawEnergy=" << clus.rawEnergy();
|
227 |
|
|
return stream;
|
228 |
|
|
};
|
229 |
lethuill |
1.7 |
|
230 |
|
|
void Print()
|
231 |
|
|
{
|
232 |
|
|
std::cout << "TRootSuperCluster - Type=" << this->det_ << " (E,Et,eta,phi)=(" << this->Mag() <<"," << this->Pt() <<"," << this->Eta() <<"," << this->Phi() << ")"
|
233 |
|
|
<< " Calo position (x,y,z)=(" << this->calX() << "," << this->calY() << "," << this->calZ() << ")"
|
234 |
|
|
<< " nBasicClusters=" << this->nBasicClusters() << " e3x3=" << this->e3x3() << " e5x5=" << this->e5x5() << " eMax=" << this->eMax()<< " e2nd=" << this->e2nd()
|
235 |
|
|
<< " nXtals=" << this->nXtals() << " preshowerEnergy=" << this->preshowerEnergy() << " rawEnergy=" << this->rawEnergy();
|
236 |
|
|
};
|
237 |
lethuill |
1.6 |
|
238 |
lethuill |
1.7 |
|
239 |
lethuill |
1.6 |
protected:
|
240 |
lethuill |
1.7 |
|
241 |
|
|
Float_t rawEnergy_;
|
242 |
|
|
Float_t preshowerEnergy_;
|
243 |
lethuill |
1.6 |
Int_t nBasicClusters_;
|
244 |
lethuill |
1.7 |
std::vector<Int_t> subBasicClusterUIDVector_;
|
245 |
|
|
std::vector<Int_t> subBasicClusterIndexVector_;
|
246 |
|
|
Int_t seedBasicClusterVectorIndex_; // position in subBasicClusterIndexVector_ and subBasicClusterRefVector_ of the seedBasicCluster
|
247 |
|
|
std::vector<TRef> subBasicClusterRefVector_;
|
248 |
|
|
TRef seedBasicCluster_;
|
249 |
|
|
Int_t photonIndex_;
|
250 |
lethuill |
1.6 |
TRef photon_;
|
251 |
lethuill |
1.7 |
Int_t electronIndex_;
|
252 |
lethuill |
1.6 |
TRef electron_;
|
253 |
lethuill |
1.7 |
|
254 |
|
|
ClassDef (TRootSuperCluster,6);
|
255 |
|
|
|
256 |
mlethuil |
1.1 |
};
|
257 |
|
|
|
258 |
|
|
#endif
|