1 |
#ifndef TRootSuperCluster_h
|
2 |
#define TRootSuperCluster_h
|
3 |
|
4 |
/************************************************************************************************************************************
|
5 |
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 |
************************************************************************************************************************************/
|
22 |
|
23 |
#include <string>
|
24 |
#include <iostream>
|
25 |
#include <vector>
|
26 |
|
27 |
#include "Rtypes.h"
|
28 |
|
29 |
#include "../interface/TRootCluster.h"
|
30 |
|
31 |
using namespace std;
|
32 |
|
33 |
class TRootPhoton;
|
34 |
class TRootElectron;
|
35 |
|
36 |
class TRootSuperCluster : public TRootCluster
|
37 |
{
|
38 |
|
39 |
public:
|
40 |
|
41 |
TRootSuperCluster() :
|
42 |
TRootCluster()
|
43 |
,rawEnergy_(-1.)
|
44 |
,preshowerEnergy_(-1.)
|
45 |
,nBasicClusters_(-1)
|
46 |
,subBasicClusterUIDVector_()
|
47 |
,subBasicClusterIndexVector_()
|
48 |
,seedBasicClusterVectorIndex_(-1)
|
49 |
,subBasicClusterRefVector_()
|
50 |
,seedBasicCluster_(0)
|
51 |
,photonIndex_(-1)
|
52 |
,photon_(0)
|
53 |
,electronIndex_(-1)
|
54 |
,electron_(0)
|
55 |
{;}
|
56 |
|
57 |
TRootSuperCluster(const TRootSuperCluster& cluster) :
|
58 |
TRootCluster(cluster)
|
59 |
,rawEnergy_(cluster.rawEnergy_)
|
60 |
,preshowerEnergy_(cluster.preshowerEnergy_)
|
61 |
,nBasicClusters_(cluster.nBasicClusters_)
|
62 |
,subBasicClusterUIDVector_(cluster.subBasicClusterUIDVector_)
|
63 |
,subBasicClusterIndexVector_(cluster.subBasicClusterIndexVector_)
|
64 |
,seedBasicClusterVectorIndex_(cluster.seedBasicClusterVectorIndex_)
|
65 |
,subBasicClusterRefVector_(cluster.subBasicClusterRefVector_)
|
66 |
,seedBasicCluster_(cluster.seedBasicCluster_)
|
67 |
,photonIndex_(cluster.photonIndex_)
|
68 |
,photon_(cluster.photon_)
|
69 |
,electronIndex_(cluster.electronIndex_)
|
70 |
,electron_(cluster.photon_)
|
71 |
{;}
|
72 |
|
73 |
TRootSuperCluster(Double_t energy, Double_t eta, Double_t phi) :
|
74 |
TRootCluster(energy, eta, phi)
|
75 |
,rawEnergy_(0.)
|
76 |
,preshowerEnergy_(0.)
|
77 |
,nBasicClusters_(0)
|
78 |
,subBasicClusterUIDVector_()
|
79 |
,subBasicClusterIndexVector_()
|
80 |
,seedBasicClusterVectorIndex_(-1)
|
81 |
,subBasicClusterRefVector_()
|
82 |
,seedBasicCluster_(0)
|
83 |
,photonIndex_(-1)
|
84 |
,photon_(0)
|
85 |
,electronIndex_(-1)
|
86 |
,electron_(0)
|
87 |
{;}
|
88 |
|
89 |
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 |
,rawEnergy_(0.)
|
92 |
,preshowerEnergy_(0.)
|
93 |
,nBasicClusters_(0)
|
94 |
,subBasicClusterUIDVector_()
|
95 |
,subBasicClusterIndexVector_()
|
96 |
,seedBasicClusterVectorIndex_(-1)
|
97 |
,subBasicClusterRefVector_()
|
98 |
,seedBasicCluster_(0)
|
99 |
,photonIndex_(-1)
|
100 |
,photon_(0)
|
101 |
,electronIndex_(-1)
|
102 |
,electron_(0)
|
103 |
{;}
|
104 |
|
105 |
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 |
,rawEnergy_(0.)
|
108 |
,preshowerEnergy_(0.)
|
109 |
,nBasicClusters_(0)
|
110 |
,subBasicClusterUIDVector_()
|
111 |
,subBasicClusterIndexVector_()
|
112 |
,seedBasicClusterVectorIndex_(-1)
|
113 |
,subBasicClusterRefVector_()
|
114 |
,seedBasicCluster_(0)
|
115 |
,photonIndex_(-1)
|
116 |
,photon_(0)
|
117 |
,electronIndex_(-1)
|
118 |
,electron_(0)
|
119 |
{;}
|
120 |
|
121 |
~TRootSuperCluster() {;}
|
122 |
|
123 |
// ECAL Raw Energy
|
124 |
Float_t rawEnergy() const { return rawEnergy_; }
|
125 |
|
126 |
// Preshower Energy
|
127 |
Float_t preshowerEnergy() const { return preshowerEnergy_; }
|
128 |
|
129 |
// Number of Basic Cluster constituents
|
130 |
Int_t nBasicClusters() const { return nBasicClusters_; }
|
131 |
|
132 |
// UIDs of the Basic Cluster constituents
|
133 |
std::vector<UInt_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 |
{
|
141 |
if( Int_t(subBasicClusterIndexVector_.size())>seedBasicClusterVectorIndex_)
|
142 |
{
|
143 |
return subBasicClusterIndexVector_.at(seedBasicClusterVectorIndex_);
|
144 |
}
|
145 |
else
|
146 |
{
|
147 |
cout << "No seed BasicCluster in this SuperCluster...." << endl;
|
148 |
return -1;
|
149 |
}
|
150 |
}
|
151 |
|
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 |
|
186 |
// is associated to an electron ?
|
187 |
Bool_t isElectron() const { return ( electron_.GetObject() == 0 ? false : true); }
|
188 |
|
189 |
// 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 |
void setNBasicClusters(Int_t nBasicClusters) { nBasicClusters_ = nBasicClusters; }
|
207 |
void addSubBasicClusterUID(UInt_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 |
void setPhoton(TObject* photon) { photon_ = photon; }
|
217 |
void setElectronIndex(Int_t electronIndex) { electronIndex_ = electronIndex; }
|
218 |
void setElectron(TObject* electron) { electron_ = electron; }
|
219 |
|
220 |
|
221 |
friend std::ostream& operator<< (std::ostream& stream, const TRootSuperCluster& clus)
|
222 |
{
|
223 |
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 |
|
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 |
|
238 |
|
239 |
protected:
|
240 |
|
241 |
Float_t rawEnergy_;
|
242 |
Float_t preshowerEnergy_;
|
243 |
Int_t nBasicClusters_;
|
244 |
std::vector<UInt_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 |
TRef photon_;
|
251 |
Int_t electronIndex_;
|
252 |
TRef electron_;
|
253 |
|
254 |
ClassDef (TRootSuperCluster,6);
|
255 |
|
256 |
};
|
257 |
|
258 |
#endif
|