2 /**************************************************************************
3 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
4 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for *
5 * full copyright notice. *
6 **************************************************************************/
8 #include <AliEveITSUModule.h>
9 #include <TGeoMatrix.h>
10 #include <TEveTrans.h>
11 #include <TClonesArray.h>
15 #include <TEveManager.h>
16 #include <TGeoManager.h>
17 #include <AliEveEventManager.h>
18 #include <AliGeomManager.h>
20 //#include "UPGRADE/AliITSUDigitPix.h"
22 #include <AliITSUGeomTGeo.h>
23 #include <AliITSUSegmentationPix.h>
24 #include <AliITSUDigitPix.h>
25 //______________________________________________________________________________
27 // Visualization of an ITS Upgrade module.
29 ClassImp(AliEveITSUModule)
31 Bool_t AliEveITSUModule::fgStaticInitDone = 0;
33 TEveFrameBox* AliEveITSUModule::fgITSUFrameBox = 0;
34 TEveFrameBox* AliEveITSUModule::fgITSUFrameBoxDead = 0;
35 TEveRGBAPalette* AliEveITSUModule::fgITSUPalette = 0;
37 AliITSUGeomTGeo* fGM = 0;
38 AliITSUSegmentationPix * fSegm = 0;
40 /******************************************************************************/
42 AliEveITSUModule::AliEveITSUModule(const Text_t* n, const Text_t* t) :
49 fAtLeastOneDigit(kFALSE)
55 AliEveITSUModule::AliEveITSUModule(AliITSUGeomTGeo *gm, Int_t id, Int_t layer, Int_t ladder, Int_t detector) :
56 TEveQuadSet(Form("ITSU module %d; (lay,lad,det)=(%d,%d,%d)", id,layer,ladder,detector),Form("%d",id)),
62 fAtLeastOneDigit(kFALSE)
69 fGM = gm; // ITSU Geometry Manager
71 fgStaticInitDone = kFALSE;
74 AliITSUSegmentationPix::LoadSegmentations(&segmArr, AliITSUGeomTGeo::GetITSsegmentationFileName());
76 int detType = fGM->GetModuleDetTypeID(id);
77 fSegm = (AliITSUSegmentationPix*)segmArr.At(detType);
79 fDpx = fSegm->Dpx(); // pixel pitch in x
80 fDpz = fSegm->Dpz(0); // pixel pitch in z
87 AliEveITSUModule::~AliEveITSUModule()
94 /******************************************************************************/
96 void AliEveITSUModule::InitStatics()
98 // Initialize static variables.
100 // Warning all sensor sizes are cm
101 // In Eve half-lengths/widths are used, hence 1/2.
103 if (fgStaticInitDone) return;
104 fgStaticInitDone = kTRUE;
106 Float_t dx = fSegm->Dpx() * fSegm->GetNRow(); // dimension in x in cm
107 Float_t dz = fSegm->Dpz(0)* fSegm->GetNCol(); // dimension in y in cm
108 Float_t dy = 0;// ? eventuelly a few 100 micron, right?
111 fgITSUFrameBox = new TEveFrameBox();
112 fgITSUFrameBox->SetAAQuadXZ(-dx/2, dy, -dz/2, dx, dz);
113 fgITSUFrameBox->SetFrameColor(kBlue-4);
114 fgITSUFrameBox->SetFrameFill(kTRUE);
115 fgITSUFrameBox->IncRefCount();
117 fgITSUPalette = new TEveRGBAPalette(0,1);
118 fgITSUPalette->IncRefCount();
120 fgITSUFrameBoxDead = new TEveFrameBox();
121 fgITSUFrameBoxDead->SetAAQuadXZ(-dx/2, dy, -dz/2, dx, dz);
122 fgITSUFrameBoxDead->SetFrameColor(kRed);
123 fgITSUFrameBoxDead->SetFrameFill(kTRUE);
124 fgITSUFrameBoxDead->IncRefCount();
131 /******************************************************************************/
133 void AliEveITSUModule::SetID(Int_t gid, Bool_t trans)
137 static const TEveException kEH("AliEveITSUModule::SetID ");
140 if (!fgStaticInitDone)
145 SetFrame(fgITSUFrameBox);
146 SetPalette(fgITSUPalette);
156 /******************************************************************************/
158 void AliEveITSUModule::SetDigitInQuad(AliITSUDigitPix *pDig)
160 // Sets a digit from source in a visualization structure - called quads.
163 if (!fAtLeastOneDigit) {
164 Reset(kQT_RectangleXZFixedY, kFALSE, 32);
165 fAtLeastOneDigit = kTRUE;
169 fSegm->DetToLocal(pDig->GetCoord2(),pDig->GetCoord1(),x,z);
171 AddQuad(x-fDpx/2, z-fDpz/2, fDpx, fDpz);
174 Int_t intSignal = pDig->GetSignalPix();
175 QuadValue(intSignal);
176 if (fgITSUPalette->GetMaxVal()<intSignal) {
177 fgITSUPalette->SetMax(intSignal);
178 fgITSUPalette->MinMaxValChanged();
184 /******************************************************************************/
186 void AliEveITSUModule::SetTrans()
188 // Set transformation matrix
190 const TGeoHMatrix *mat = fGM->GetMatrixSens(fID);
191 fMainTrans->SetFrom(*mat);
196 /******************************************************************************/
198 void AliEveITSUModule::Print(Option_t* ) const
200 // Print object summary information.
202 printf("AliEveITSUModule: ModuleId: %d, layer %d, ladder %d, detector %d\n",
203 fID, fkLayer, fkLadder, fkDetector);
207 /******************************************************************************/
209 void AliEveITSUModule::DigitSelected(Int_t idx)
211 // Override secondary select (alt-click) from TEveQuadSet.
213 // for (Int_t i=0;i<7;i++) {
215 DigitBase_t *qb = GetDigit(idx);
216 TObject *obj = GetId(idx);
217 AliITSUDigitPix *pDig = dynamic_cast<AliITSUDigitPix*>(obj);
218 printf("AliEveITSUModule::QuadSelected ");
219 printf(" idx=%d, value=%d, obj=0x%lx, digit=0x%lx\n",
220 idx, qb->fValue, (ULong_t)obj, (ULong_t)pDig);
223 fSegm->DetToLocal(pDig->GetCoord2(),pDig->GetCoord1(),x,z);
224 printf(" Digit info: mod|lay/lad/det=%d|%d/%d/%d; row/col=%3d/%4d; \n",
225 fID,fkLayer,fkLadder,fkDetector,
226 pDig->GetCoord2(),pDig->GetCoord1());
227 printf(" local (x,z)=(%.4lf,%.4lf)cm; signal:%5d e-; generated by tracks ",
228 x,z,pDig->GetSignalPix());
229 for (int itr=0;itr<pDig->GetNTracks();itr++)
230 if (pDig->GetTrack(itr)>=0) printf(" %5d",pDig->GetTrack(itr)); printf("\n");