#include <AliEveITSUModule.h>
#include <TGeoMatrix.h>
#include <TEveTrans.h>
#include <TClonesArray.h>
#include <TStyle.h>
#include "AliLog.h"
#include <TEveManager.h>
#include <TGeoManager.h>
#include <AliEveEventManager.h>
#include <AliGeomManager.h>
#include <AliITSUGeomTGeo.h>
#include <AliITSsegmentation.h>
#include <AliITSUDigitPix.h>
ClassImp(AliEveITSUModule)
Bool_t AliEveITSUModule::fgStaticInitDone = 0;
TEveFrameBox* AliEveITSUModule::fgITSUFrameBox = 0;
TEveFrameBox* AliEveITSUModule::fgITSUFrameBoxDead = 0;
TEveRGBAPalette* AliEveITSUModule::fgITSUPalette = 0;
AliITSUGeomTGeo* fGM = 0;
const AliITSsegmentation* 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)
{
}
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)
{
fGM = gm;
fgStaticInitDone = kFALSE;
fSegm = fGM->GetSegmentation(layer);
fDpx = fSegm->Dpx(0);
fDpz = fSegm->Dpz(0);
SetID(id);
}
AliEveITSUModule::~AliEveITSUModule()
{
}
void AliEveITSUModule::InitStatics()
{
if (fgStaticInitDone) return;
fgStaticInitDone = kTRUE;
Float_t dx = fSegm->Dx();
Float_t dz = fSegm->Dz();
Float_t dy = 0;
{
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)
{
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)
{
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()<intSignal) {
fgITSUPalette->SetMax(intSignal);
fgITSUPalette->MinMaxValChanged();
}
}
void AliEveITSUModule::SetTrans()
{
const TGeoHMatrix *mat = fGM->GetMatrixSens(fID);
fMainTrans->SetFrom(*mat);
}
void AliEveITSUModule::Print(Option_t* ) const
{
printf("AliEveITSUModule: ModuleId: %d, layer %d, ladder %d, detector %d\n",
fID, fkLayer, fkLadder, fkDetector);
}
void AliEveITSUModule::DigitSelected(Int_t idx)
{
DigitBase_t *qb = GetDigit(idx);
TObject *obj = GetId(idx);
AliITSUDigitPix *pDig = dynamic_cast<AliITSUDigitPix*>(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;itr<pDig->GetNTracks();itr++)
if (pDig->GetTrack(itr)>=0) printf(" %5d",pDig->GetTrack(itr)); printf("\n");
}
}