From: shahoian Date: Thu, 25 Oct 2012 21:43:29 +0000 (+0000) Subject: Added ITSUModule (Stefan R.) X-Git-Url: http://git.uio.no/git/?p=u%2Fmrichter%2FAliRoot.git;a=commitdiff_plain;h=88dca5fead197694186dd7deb0d4188b68aa00d6;hp=b69620f828e6f039aa390a6c50e4422f86c74878;ds=sidebyside Added ITSUModule (Stefan R.) --- diff --git a/EVE/EveDet/AliEveITSUModule.cxx b/EVE/EveDet/AliEveITSUModule.cxx new file mode 100644 index 00000000000..1b8891bdd3d --- /dev/null +++ b/EVE/EveDet/AliEveITSUModule.cxx @@ -0,0 +1,233 @@ + +/************************************************************************** + * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. * + * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for * + * full copyright notice. * + **************************************************************************/ + +#include +#include +#include +#include +#include +#include "AliLog.h" + +#include +#include +#include +#include + +//#include "UPGRADE/AliITSUDigitPix.h" + +#include +#include +#include +//______________________________________________________________________________ +// +// Visualization of an ITS Upgrade module. + +ClassImp(AliEveITSUModule) + +Bool_t AliEveITSUModule::fgStaticInitDone = 0; + +TEveFrameBox* AliEveITSUModule::fgITSUFrameBox = 0; +TEveFrameBox* AliEveITSUModule::fgITSUFrameBoxDead = 0; +TEveRGBAPalette* AliEveITSUModule::fgITSUPalette = 0; + +AliITSUGeomTGeo* fGM = 0; +AliITSUSegmentationPix * fSegm = 0; + +/******************************************************************************/ + +AliEveITSUModule::AliEveITSUModule(const Text_t* n, const Text_t* t) : + TEveQuadSet(n, t), + fID(0), + fkLayer(0), + fkLadder(0), + fkDetector(0), + fDpx(0), fDpz(0), + fAtLeastOneDigit(kFALSE) +{ + // Constructor. + +} + +AliEveITSUModule::AliEveITSUModule(AliITSUGeomTGeo *gm, Int_t id, Int_t layer, Int_t ladder, Int_t detector) : + TEveQuadSet(Form("ITSU module %d; (lay,lad,det)=(%d,%d,%d)", id,layer,ladder,detector),Form("%d",id)), + fID(id), + fkLayer(layer), + fkLadder(ladder), + fkDetector(detector), + fDpx(0), fDpz(0), + fAtLeastOneDigit(kFALSE) +{ + + // + // constructor + // + + fGM = gm; // ITSU Geometry Manager + + fgStaticInitDone = kFALSE; + + TObjArray segmArr; + AliITSUSegmentationPix::LoadSegmentations(&segmArr, AliITSUGeomTGeo::GetITSsegmentationFileName()); + + int detType = fGM->GetModuleDetTypeID(id); + fSegm = (AliITSUSegmentationPix*)segmArr.At(detType); + + fDpx = fSegm->Dpx(); // pixel pitch in x + fDpz = fSegm->Dpz(0); // pixel pitch in z + + SetID(id); + + +} + +AliEveITSUModule::~AliEveITSUModule() +{ + // Destructor. + + +} + +/******************************************************************************/ + +void AliEveITSUModule::InitStatics() +{ + // Initialize static variables. + // + // Warning all sensor sizes are cm + // In Eve half-lengths/widths are used, hence 1/2. + + if (fgStaticInitDone) return; + fgStaticInitDone = kTRUE; + + Float_t dx = fSegm->Dpx() * fSegm->GetNRow(); // dimension in x in cm + Float_t dz = fSegm->Dpz(0)* fSegm->GetNCol(); // dimension in y in cm + Float_t dy = 0;// ? eventuelly a few 100 micron, right? + + { + fgITSUFrameBox = new TEveFrameBox(); + fgITSUFrameBox->SetAAQuadXZ(-dx/2, dy, -dz/2, dx, dz); + fgITSUFrameBox->SetFrameColor(kBlue-4); + fgITSUFrameBox->SetFrameFill(kTRUE); + fgITSUFrameBox->IncRefCount(); + + fgITSUPalette = new TEveRGBAPalette(0,1); + fgITSUPalette->IncRefCount(); + + fgITSUFrameBoxDead = new TEveFrameBox(); + fgITSUFrameBoxDead->SetAAQuadXZ(-dx/2, dy, -dz/2, dx, dz); + fgITSUFrameBoxDead->SetFrameColor(kRed); + fgITSUFrameBoxDead->SetFrameFill(kTRUE); + fgITSUFrameBoxDead->IncRefCount(); + } + + +} + + +/******************************************************************************/ + +void AliEveITSUModule::SetID(Int_t gid, Bool_t trans) +{ + // Set detector id. + + static const TEveException kEH("AliEveITSUModule::SetID "); + + fID = gid; + if (!fgStaticInitDone) + { + InitStatics(); + } + + SetFrame(fgITSUFrameBox); + SetPalette(fgITSUPalette); + + RefitPlex(); + ComputeBBox(); + InitMainTrans(); + if (trans) + SetTrans(); + +} + +/******************************************************************************/ + +void AliEveITSUModule::SetDigitInQuad(AliITSUDigitPix *pDig) +{ + // Sets a digit from source in a visualization structure - called quads. + + + if (!fAtLeastOneDigit) { + Reset(kQT_RectangleXZFixedY, kFALSE, 32); + fAtLeastOneDigit = kTRUE; + } + + Float_t x,z; + fSegm->DetToLocal(pDig->GetCoord2(),pDig->GetCoord1(),x,z); + + AddQuad(x-fDpx/2, z-fDpz/2, fDpx, fDpz); + QuadId(pDig); + + Int_t intSignal = pDig->GetSignalPix(); + QuadValue(intSignal); + if (fgITSUPalette->GetMaxVal()SetMax(intSignal); + fgITSUPalette->MinMaxValChanged(); + } + + +} + +/******************************************************************************/ + +void AliEveITSUModule::SetTrans() +{ + // Set transformation matrix + + const TGeoHMatrix *mat = fGM->GetMatrixSens(fID); + fMainTrans->SetFrom(*mat); + +} + + +/******************************************************************************/ + +void AliEveITSUModule::Print(Option_t* ) const +{ + // Print object summary information. + + printf("AliEveITSUModule: ModuleId: %d, layer %d, ladder %d, detector %d\n", + fID, fkLayer, fkLadder, fkDetector); + +} + +/******************************************************************************/ + +void AliEveITSUModule::DigitSelected(Int_t idx) +{ + // Override secondary select (alt-click) from TEveQuadSet. + + // for (Int_t i=0;i<7;i++) { + // idx=i; + DigitBase_t *qb = GetDigit(idx); + TObject *obj = GetId(idx); + AliITSUDigitPix *pDig = dynamic_cast(obj); + printf("AliEveITSUModule::QuadSelected "); + printf(" idx=%d, value=%d, obj=0x%lx, digit=0x%lx\n", + idx, qb->fValue, (ULong_t)obj, (ULong_t)pDig); + if (pDig) { + Float_t x,z; + fSegm->DetToLocal(pDig->GetCoord2(),pDig->GetCoord1(),x,z); + printf(" Digit info: mod|lay/lad/det=%d|%d/%d/%d; row/col=%3d/%4d; \n", + fID,fkLayer,fkLadder,fkDetector, + pDig->GetCoord2(),pDig->GetCoord1()); + printf(" local (x,z)=(%.4lf,%.4lf)cm; signal:%5d e-; generated by tracks ", + x,z,pDig->GetSignalPix()); + for (int itr=0;itrGetNTracks();itr++) + if (pDig->GetTrack(itr)>=0) printf(" %5d",pDig->GetTrack(itr)); printf("\n"); + } + +} diff --git a/EVE/EveDet/AliEveITSUModule.h b/EVE/EveDet/AliEveITSUModule.h new file mode 100644 index 00000000000..735681c8cf7 --- /dev/null +++ b/EVE/EveDet/AliEveITSUModule.h @@ -0,0 +1,62 @@ + +/************************************************************************** + * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. * + * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for * + * full copyright notice. * + **************************************************************************/ + +#ifndef ALI_EVE_ITS_U_MODULE_H +#define ALI_EVE_ITS_U_MODULE_H + +#include +class AliITSUGeomTGeo; +class AliITSUDigitPix; + +class AliEveITSUModule : public TEveQuadSet +{ +public: + + AliEveITSUModule(const Text_t* n="AliEveITSUModule", const Text_t* t=0); + AliEveITSUModule(AliITSUGeomTGeo *gm,Int_t id, Int_t layer, Int_t ladder, Int_t detector); + virtual ~AliEveITSUModule(); + + static void InitStatics(); + + void SetDigitInQuad(AliITSUDigitPix *pDig); + void SetTrans(); + void DigitSelected(Int_t idx); + + virtual void Print(Option_t* opt="") const; + + // virtual void LoadQuads() {}; + // virtual void DigitSelected(Int_t idx) {}; + + Int_t GetID() const { return fID; } + void SetID(Int_t gid, Bool_t trans=kTRUE); + +protected: + + static TEveFrameBox *fgITSUFrameBox; // Module frame for ITS Upgrade. + static TEveFrameBox *fgITSUFrameBoxDead; // Dead-module frame for ITS Upgrade. + static TEveRGBAPalette *fgITSUPalette; // Signal to color mapping for ITS Upgrade. + + Int_t fID; // Module id. + const Int_t fkLayer; // which layer + Int_t fkLadder; // which ladder + Int_t fkDetector; // which detector (module within ladder) + + Float_t fDpx; // Digit size in x. + Float_t fDpz; // Digit size in z. + + Bool_t fAtLeastOneDigit; // is there already a digit put into the geometry? + + static Bool_t fgStaticInitDone; // Flag for static variable initialization. + +private: + AliEveITSUModule(const AliEveITSUModule&); // Not implemented + AliEveITSUModule& operator=(const AliEveITSUModule&); // Not implemented + + ClassDef(AliEveITSUModule, 0); // Visualization of an ITS Upgrade module. +}; + +#endif