]>
Commit | Line | Data |
---|---|---|
c3e34498 | 1 | // EMCAL event display |
2 | // Visualization of an EMCAL super module. | |
3 | // | |
4 | // Author: Magali Estienne (magali.estienne@cern.ch) | |
5 | // June 30 2008 | |
c3e34498 | 6 | |
345a46b0 | 7 | #include "AliEveEMCALSModule.h" |
8 | ||
9 | //#include <vector> | |
c3e34498 | 10 | |
c3e34498 | 11 | #include <TEveFrameBox.h> |
12 | #include <TEveQuadSet.h> | |
13 | #include <TEvePointSet.h> | |
c3e34498 | 14 | #include <TEveRGBAPalette.h> |
15 | ||
c3e34498 | 16 | |
345a46b0 | 17 | class Riostream; |
18 | //class vector; | |
19 | class TEveTrans; | |
20 | class TEveElement; | |
21 | class TClonesArray; | |
22 | class TStyle; | |
23 | class TBuffer3DTypes; | |
24 | class TBuffer3D; | |
25 | class TVirtualPad; | |
26 | class TVirtualViewer3D; | |
27 | class AliEveEMCALData; | |
28 | class AliEMCALHit; | |
29 | class AliEMCALDigit; | |
30 | class AliEveEMCALSModuleData; | |
c3e34498 | 31 | |
32 | ClassImp(AliEveEMCALSModule) | |
33 | ||
345a46b0 | 34 | Bool_t AliEveEMCALSModule::fgStaticInit = kFALSE; |
ebedba59 | 35 | Float_t AliEveEMCALSModule::fgSMBigBBox[3]; |
36 | Float_t AliEveEMCALSModule::fgSMSmallBBox[3]; | |
37 | TEveFrameBox* AliEveEMCALSModule::fgFrameBigBox = 0; | |
38 | TEveFrameBox* AliEveEMCALSModule::fgFrameSmallBox = 0; | |
39 | TEveRGBAPalette* AliEveEMCALSModule::fgFrameDigPalette = 0; | |
40 | TEveRGBAPalette* AliEveEMCALSModule::fgFrameCluPalette = 0; | |
c3e34498 | 41 | |
42 | AliEveEMCALSModule::AliEveEMCALSModule(Int_t smid, const Text_t* n, const Text_t* t) : | |
43 | TEveElement(fFrameColor), | |
44 | TNamed(n,t), | |
a312477b | 45 | TAtt3D(), |
c3e34498 | 46 | fEMCALData(0), |
47 | fEMCALSModuleData(0), | |
48 | fFrameColor((Color_t)10), | |
c3e34498 | 49 | fSModuleID(smid), |
50 | fQuadSet(new TEveQuadSet(n,t)), | |
51 | fQuadSet2(new TEveQuadSet(n,t)), | |
52 | fPointSet(new TEvePointSet(n)), | |
c3e34498 | 53 | fClusterSize(5), |
54 | fHitSize(5), | |
c3e34498 | 55 | fDebug(0) |
56 | { | |
57 | // Constructor. | |
58 | Char_t name[256]; | |
59 | if (smid < 10) { | |
60 | sprintf(name,"Full Super Module %02d",smid); | |
61 | } else { | |
62 | sprintf(name,"Half Super Module %02d",smid); | |
63 | } | |
64 | SetName(name); | |
65 | ||
c3e34498 | 66 | // Hits |
67 | fPointSet->IncDenyDestroy(); | |
68 | AddElement(fPointSet); | |
69 | // Digits | |
70 | fQuadSet->IncDenyDestroy(); | |
71 | AddElement(fQuadSet); | |
72 | // Clusters | |
73 | fQuadSet2->IncDenyDestroy(); | |
74 | AddElement(fQuadSet2); | |
75 | ||
76 | } | |
77 | ||
78 | AliEveEMCALSModule::AliEveEMCALSModule(const AliEveEMCALSModule &esm) : | |
79 | TEveElement(fFrameColor), | |
80 | TNamed(), | |
a312477b | 81 | TAtt3D(), |
c3e34498 | 82 | fEMCALData(esm.fEMCALData), |
83 | fEMCALSModuleData(esm.fEMCALSModuleData), | |
84 | fFrameColor(esm.fFrameColor), | |
c3e34498 | 85 | fSModuleID(esm.fSModuleID), |
86 | fQuadSet(esm.fQuadSet), | |
87 | fQuadSet2(esm.fQuadSet2), | |
88 | fPointSet(esm.fPointSet), | |
c3e34498 | 89 | fClusterSize(esm.fClusterSize), |
90 | fHitSize(esm.fHitSize), | |
c3e34498 | 91 | fDebug(esm.fDebug) |
92 | { | |
a312477b | 93 | // Copy constructor. |
c3e34498 | 94 | Char_t name[256]; |
95 | if (fSModuleID < 10) { | |
96 | sprintf(name,"Full Super Module %02d",fSModuleID); | |
97 | } else { | |
98 | sprintf(name,"Half Super Module %02d",fSModuleID); | |
99 | } | |
100 | SetName(name); | |
101 | ||
c3e34498 | 102 | // Hits |
103 | fPointSet->IncDenyDestroy(); | |
104 | AddElement(fPointSet); | |
105 | // Digits | |
106 | fQuadSet->IncDenyDestroy(); | |
107 | AddElement(fQuadSet); | |
108 | // Clusters | |
109 | fQuadSet2->IncDenyDestroy(); | |
110 | AddElement(fQuadSet2); | |
111 | ||
112 | } | |
113 | ||
114 | AliEveEMCALSModule::~AliEveEMCALSModule() | |
115 | { | |
116 | // | |
117 | // Destructor. | |
118 | // | |
119 | ||
120 | fPointSet->DecDenyDestroy(); | |
121 | fQuadSet->DecDenyDestroy(); | |
ef3891ac | 122 | fQuadSet2->DecDenyDestroy(); |
c3e34498 | 123 | |
124 | if(fEMCALData) fEMCALData->DecRefCount(); | |
c3e34498 | 125 | } |
126 | ||
127 | //______________________________________________________________________________ | |
345a46b0 | 128 | void AliEveEMCALSModule::DropData() const |
c3e34498 | 129 | { |
130 | // | |
131 | // release the sm data | |
132 | // | |
133 | ||
134 | // fNDigits = 0; | |
135 | // fNClusters = 0; | |
136 | // fNHits = 0; | |
137 | ||
138 | return; | |
139 | ||
140 | } | |
141 | ||
142 | //______________________________________________________________________________ | |
ebedba59 | 143 | void AliEveEMCALSModule::InitStatics(AliEveEMCALSModuleData* md) |
c3e34498 | 144 | { |
145 | // | |
a312477b | 146 | // Bounding box, Framebox and Palette |
c3e34498 | 147 | // |
148 | ||
345a46b0 | 149 | if (fgStaticInit) return; |
150 | fgStaticInit = kTRUE; | |
c3e34498 | 151 | |
ebedba59 | 152 | md->GetSModuleBigBox(fgSMBigBBox[0],fgSMBigBBox[1], fgSMBigBBox[2]); |
153 | md->GetSModuleSmallBox(fgSMSmallBBox[0],fgSMSmallBBox[1], fgSMSmallBBox[2]); | |
154 | ||
155 | fgFrameBigBox = new TEveFrameBox(); | |
156 | fgFrameBigBox->SetAABoxCenterHalfSize(0, 0, 0, fgSMBigBBox[0], fgSMBigBBox[1], fgSMBigBBox[2]); | |
157 | fgFrameBigBox->SetFrameColor((Color_t)10); | |
158 | fgFrameBigBox->IncRefCount(); | |
159 | fgFrameDigPalette = new TEveRGBAPalette(0,512); | |
160 | fgFrameDigPalette->SetLimits(0, 1024); | |
161 | fgFrameDigPalette->IncRefCount(); | |
162 | ||
163 | fgFrameSmallBox = new TEveFrameBox(); | |
164 | fgFrameSmallBox->SetAABoxCenterHalfSize(0, 0, 0, fgSMSmallBBox[0], fgSMSmallBBox[1], fgSMSmallBBox[2]); | |
165 | fgFrameSmallBox->SetFrameColor((Color_t)10); | |
166 | fgFrameSmallBox->IncRefCount(); | |
167 | fgFrameCluPalette = new TEveRGBAPalette(0,512); | |
168 | fgFrameCluPalette->SetLimits(0, 1024); | |
169 | fgFrameCluPalette->IncRefCount(); | |
c3e34498 | 170 | } |
171 | ||
c3e34498 | 172 | //______________________________________________________________________________ |
173 | void AliEveEMCALSModule::SetClusterSize(Int_t size) | |
174 | { | |
175 | // | |
a312477b | 176 | // Cluster point size |
c3e34498 | 177 | // |
178 | ||
179 | fClusterSize = TMath::Max(1, size); | |
c3e34498 | 180 | } |
181 | ||
182 | //______________________________________________________________________________ | |
183 | void AliEveEMCALSModule::SetHitSize(Int_t size) | |
184 | { | |
185 | // | |
186 | // hit point size | |
187 | // | |
188 | ||
189 | fHitSize = TMath::Max(1, size); | |
c3e34498 | 190 | } |
191 | ||
192 | //______________________________________________________________________________ | |
345a46b0 | 193 | void AliEveEMCALSModule::SetDataSource(AliEveEMCALData* const data) |
c3e34498 | 194 | { |
a312477b | 195 | // |
c3e34498 | 196 | // Set source of data. |
a312477b | 197 | // |
c3e34498 | 198 | |
199 | if (data == fEMCALData) return; | |
200 | if(fEMCALData) fEMCALData->DecRefCount(); | |
201 | fEMCALData = data; | |
202 | if(fEMCALData) fEMCALData->IncRefCount(); | |
203 | ||
a312477b | 204 | // Get pointer on SM data |
c3e34498 | 205 | fEMCALSModuleData = GetSModuleData(); |
c3e34498 | 206 | } |
207 | ||
208 | //______________________________________________________________________________ | |
209 | AliEveEMCALSModuleData* AliEveEMCALSModule::GetSModuleData() const | |
210 | { | |
a312477b | 211 | // |
c3e34498 | 212 | // Return source of data. |
a312477b | 213 | // |
c3e34498 | 214 | |
215 | return fEMCALData ? fEMCALData->GetSModuleData(fSModuleID) : 0; | |
216 | } | |
217 | ||
218 | //______________________________________________________________________________ | |
219 | void AliEveEMCALSModule::UpdateQuads() | |
220 | { | |
a312477b | 221 | // |
c3e34498 | 222 | // Update hit/digit/cluster representation. |
a312477b | 223 | // |
c3e34498 | 224 | |
a312477b | 225 | vector< vector<Double_t> > bufferDigit; |
226 | vector< vector<Double_t> > bufferCluster; | |
c3e34498 | 227 | vector< vector<Float_t> > bufferHit; |
a312477b | 228 | Int_t nDigits, nClusters, nHits, oldSize; |
c3e34498 | 229 | Float_t hitX, hitY, hitZ; |
230 | Int_t smId = fEMCALSModuleData->GetSmId(); | |
231 | ||
232 | //-------------------------- | |
233 | // Hits from runloader | |
234 | //-------------------------- | |
235 | fPointSet->Reset(); | |
236 | ||
a312477b | 237 | /* |
c3e34498 | 238 | TEvePointSet* points = fEMCALData->GetPointSetData(); |
239 | char form[1000]; | |
240 | if(points){ | |
241 | sprintf(form,"N=%d", points->Size()); | |
242 | points->SetTitle(form); | |
243 | points->SetMarkerSize(.5); | |
244 | points->SetMarkerColor((Color_t)2); | |
245 | fPointSet->AddElement(points); | |
246 | } | |
247 | else {printf("There is no hits in Runloader \n"); } | |
248 | ||
a312477b | 249 | */ |
250 | ||
c3e34498 | 251 | if (fEMCALSModuleData != 0) { |
ebedba59 | 252 | |
345a46b0 | 253 | if (!fgStaticInit) |
ebedba59 | 254 | InitStatics(fEMCALSModuleData); |
255 | ||
c3e34498 | 256 | // digits ------------------------ |
a312477b | 257 | |
258 | // Define TEveQuadSet for digits | |
c3e34498 | 259 | fQuadSet->SetOwnIds(kTRUE); |
260 | fQuadSet->Reset(TEveQuadSet::kQT_RectangleYZFixedDimX, kFALSE, 32); | |
261 | fQuadSet->SetDefWidth (fEMCALSModuleData->GetPhiTileSize()); | |
262 | fQuadSet->SetDefHeight(fEMCALSModuleData->GetEtaTileSize()); | |
263 | fQuadSet->RefMainTrans().SetFrom(*fEMCALSModuleData->GetSModuleMatrix()); | |
ebedba59 | 264 | fQuadSet->SetPalette(fgFrameDigPalette); |
c3e34498 | 265 | if(smId<fEMCALSModuleData->GetNsmf()) |
ebedba59 | 266 | fQuadSet->SetFrame(fgFrameBigBox); |
267 | else fQuadSet->SetFrame(fgFrameSmallBox); | |
c3e34498 | 268 | |
a312477b | 269 | // Get the digit information from the buffer |
c3e34498 | 270 | bufferDigit = fEMCALSModuleData->GetDigitBuffer(); |
271 | if(!bufferDigit.empty()) | |
272 | { | |
273 | nDigits = fEMCALSModuleData->GetNDigits(); | |
274 | if(fDebug>1) cout << "nDigits: " << nDigits << endl; | |
275 | // loop over digits | |
276 | for (Int_t id = 0; id < nDigits; id++) { | |
a312477b | 277 | // Int_t iid = (Int_t)bufferDigit[id][0]; |
278 | // Int_t isupMod = (Int_t)bufferDigit[id][1]; | |
279 | Double_t iamp = bufferDigit[id][2]; | |
280 | Int_t amp = (Int_t)(iamp+0.5); | |
281 | // Double_t ix = bufferDigit[id][3]; | |
282 | Double_t iy = bufferDigit[id][4]; | |
283 | Double_t iz = bufferDigit[id][5]; | |
c3e34498 | 284 | |
a312477b | 285 | // Add digit information to the TEveQuadSet |
c3e34498 | 286 | fQuadSet->AddQuad(iy, iz); |
a312477b | 287 | fQuadSet->QuadValue(amp); |
c3e34498 | 288 | } // end digits loop |
289 | } | |
ef3891ac | 290 | else { if (fDebug) printf("There is no digits in SM %d \n", smId); } |
c3e34498 | 291 | |
292 | // hits -------------------------- | |
a312477b | 293 | bufferHit = fEMCALSModuleData->GetHitBuffer(); |
c3e34498 | 294 | if(!bufferHit.empty()) |
295 | { | |
a312477b | 296 | char form[1000]; |
c3e34498 | 297 | nHits = fEMCALSModuleData->GetNHits(); |
298 | if(fDebug>1) cout << "nHits: " << nHits << endl; | |
299 | oldSize = fPointSet->GrowFor(nHits); | |
300 | // Loop over hits | |
301 | for (Int_t ih = 0; ih < nHits; ih++) { | |
a312477b | 302 | hitX = bufferHit[ih][3]; |
303 | hitY = bufferHit[ih][4]; | |
304 | hitZ = bufferHit[ih][5]; | |
c3e34498 | 305 | fPointSet->SetPoint(ih,hitX,hitY,hitZ); |
a312477b | 306 | sprintf(form,"N=%d", fPointSet->Size()); |
307 | fPointSet->SetTitle(form); | |
308 | fPointSet->SetMarkerSize(.5); | |
309 | fPointSet->SetMarkerColor((Color_t)2); | |
c3e34498 | 310 | } |
311 | } | |
ef3891ac | 312 | else { if (fDebug) printf("There is no hits in SM %d \n", smId); } |
c3e34498 | 313 | |
314 | // clusters ------------------------ | |
a312477b | 315 | |
316 | // Define TEveQuadSet for clusters | |
c3e34498 | 317 | fQuadSet2->SetOwnIds(kTRUE); |
318 | fQuadSet2->Reset(TEveQuadSet::kQT_RectangleYZFixedDimX, kFALSE, 32); | |
319 | fQuadSet2->SetDefWidth (fEMCALSModuleData->GetPhiTileSize()); | |
320 | fQuadSet2->SetDefHeight(fEMCALSModuleData->GetEtaTileSize()); | |
321 | fQuadSet2->RefMainTrans().SetFrom(*fEMCALSModuleData->GetSModuleMatrix()); | |
ebedba59 | 322 | fQuadSet2->SetPalette(fgFrameCluPalette); |
c3e34498 | 323 | if(smId<fEMCALSModuleData->GetNsmf()) |
ebedba59 | 324 | fQuadSet2->SetFrame(fgFrameBigBox); |
325 | else fQuadSet2->SetFrame(fgFrameSmallBox); | |
c3e34498 | 326 | |
a312477b | 327 | // Get the cluster information from the buffer |
c3e34498 | 328 | bufferCluster = fEMCALSModuleData->GetClusterBuffer(); |
329 | if(!bufferCluster.empty()) | |
330 | { | |
331 | nClusters = fEMCALSModuleData->GetNClusters(); | |
332 | if(fDebug>1) cout << "nClusters: " << nClusters << endl; | |
333 | // loop over clusters | |
334 | for (Int_t id = 0; id < nClusters; id++) { | |
335 | if(fDebug>1) { | |
336 | cout << "bufferCluster[" << id << "][0]: " << bufferCluster[id][0] << endl; | |
337 | cout << "bufferCluster[" << id << "][1]: " << bufferCluster[id][1] << endl; | |
338 | cout << "bufferCluster[" << id << "][2]: " << bufferCluster[id][2] << endl; | |
339 | cout << "bufferCluster[" << id << "][3]: " << bufferCluster[id][3] << endl; | |
340 | cout << "bufferCluster[" << id << "][4]: " << bufferCluster[id][4] << endl; | |
341 | } | |
a312477b | 342 | // Int_t isupMod = (Int_t)bufferCluster[id][0]; |
343 | Double_t iamp = bufferCluster[id][1]; | |
344 | Int_t amp = (Int_t)(iamp+0.5); | |
345 | // Double_t ix = bufferCluster[id][2]; | |
346 | Double_t iy = bufferCluster[id][3]; | |
347 | Double_t iz = bufferCluster[id][4]; | |
c3e34498 | 348 | |
a312477b | 349 | // Add cluster information to the TEveQuadSet |
c3e34498 | 350 | fQuadSet2->AddQuad(iy, iz); |
a312477b | 351 | fQuadSet2->QuadValue(amp); |
c3e34498 | 352 | // fQuadSet2->QuadId(iid); |
353 | ||
354 | } // end clusters loop | |
355 | } | |
ef3891ac | 356 | else { if (fDebug) printf("There is no clusters in SM %d \n", smId); } |
c3e34498 | 357 | |
358 | } // end if (fEMCALSModuleData != 0) | |
359 | ||
360 | } | |
361 | ||
362 | //______________________________________________________________________________ | |
363 | void AliEveEMCALSModule::SetSModuleID(Int_t id) | |
364 | { | |
a312477b | 365 | // |
366 | // Set id of the SM to display. | |
367 | // | |
c3e34498 | 368 | |
369 | if (id < 0) id = 0; | |
370 | if (id > 12) id = 12; | |
371 | ||
372 | fSModuleID = id; | |
c3e34498 | 373 | } |