#include <TStyle.h>
#include <TGeoManager.h>
#include <TClonesArray.h>
#include <TEveManager.h>
#include <TEveRGBAPalette.h>
#include <TEveFrameBox.h>
#include <AliTOFdigit.h>
#include <AliTOFGeometry.h>
#include "AliEveTOFStrip.h"
Bool_t AliEveTOFStrip::fgStaticInitDone = kFALSE;
TEveFrameBox* AliEveTOFStrip::fgTOFstripFrameBox = 0;
TEveRGBAPalette* AliEveTOFStrip::fgTOFstripPalette = 0;
ClassImp(AliEveTOFStrip)
AliEveTOFStrip::AliEveTOFStrip(const Text_t* n, const Text_t* t) :
TEveQuadSet(n, t),
fTOFgeometry(new AliTOFGeometry()),
fTOFarray(0),
fThreshold (5), fMaxVal (80),
fSector(-1), fPlate(-1), fStrip(-1),
fDx(0), fDz(0),
fGeoManager(0)
{
if (!fGeoManager) printf("ERROR: no TGeo\n");
}
AliEveTOFStrip::AliEveTOFStrip(TGeoManager *localGeoManager,
Int_t nSector, Int_t nPlate, Int_t nStrip) :
TEveQuadSet(Form("Strip%i", nStrip)),
fTOFgeometry(new AliTOFGeometry()),
fTOFarray(0),
fThreshold (5), fMaxVal (80),
fSector(nSector), fPlate(nPlate), fStrip(nStrip),
fDx(0), fDz(0),
fGeoManager(localGeoManager)
{
InitModule();
}
AliEveTOFStrip::AliEveTOFStrip(TGeoManager *localGeoManager,
Int_t nSector, Int_t nPlate, Int_t nStrip,
TClonesArray *tofArray) :
TEveQuadSet(Form("Strip%i", nStrip)),
fTOFgeometry(new AliTOFGeometry()),
fTOFarray(tofArray),
fThreshold (5), fMaxVal (80),
fSector(nSector), fPlate(nPlate), fStrip(nStrip),
fDx(0), fDz(0),
fGeoManager(localGeoManager)
{
InitModule();
}
AliEveTOFStrip::~AliEveTOFStrip()
{
fGeoManager = 0x0;
delete fGeoManager;
fTOFarray = 0x0;
delete fTOFarray;
}
void AliEveTOFStrip::InitStatics()
{
if (fgStaticInitDone) return;
Float_t dx = 2.5*48;
Float_t dz = 3.5*2;
fgTOFstripFrameBox = new TEveFrameBox();
fgTOFstripFrameBox->SetAAQuadXZ(-dx*0.5, 0, -dz*0.5, dx, dz);
fgTOFstripFrameBox->SetFrameColor(Color_t(32));
fgTOFstripFrameBox->IncRefCount();
fgTOFstripPalette = new TEveRGBAPalette(0, 100000);
fgTOFstripPalette->SetOverflowAction(2);
fgTOFstripPalette->SetUnderflowAction(2);
fgTOFstripPalette->IncRefCount();
fgStaticInitDone = kTRUE;
}
void AliEveTOFStrip::InitModule()
{
fDx = fTOFgeometry->XPad()*fTOFgeometry->NpadX();
fDz = fTOFgeometry->ZPad()*fTOFgeometry->NpadZ();
if (!fgStaticInitDone) InitStatics();
SetFrame(fgTOFstripFrameBox);
SetPalette(fgTOFstripPalette);
LoadQuads();
ComputeBBox();
SetTrans();
}
void AliEveTOFStrip::LoadQuads()
{
Int_t iPadX = -1;
Int_t iPadZ = -1;
Int_t tdc = -1;
Int_t tot = -1;
Float_t x = -1;
Float_t z = -1;
Reset(kQT_RectangleXZFixedY, kFALSE, 32);
AliTOFdigit *tofDigit;
for (Int_t ii=0; ii<fTOFarray->GetEntries(); ii++) {
tofDigit = (AliTOFdigit*)fTOFarray->UncheckedAt(ii);
iPadX = tofDigit->GetPadx();
iPadZ = tofDigit->GetPadz();
tot = tofDigit->GetToT();
tdc = tofDigit->GetTdc();
fTOFgeometry->DetToStripRF(iPadX, iPadZ, x, z);
AddQuad(x, z, 2.5, 3.5);
QuadValue((Int_t)tdc);
QuadId(tofDigit);
}
RefitPlex();
}
void AliEveTOFStrip::SetTrans()
{
Char_t path[200];
fTOFgeometry->GetVolumePath(fSector, fPlate, fStrip, path);
fGeoManager->cd(path);
SetTransMatrix(*fGeoManager->GetCurrentMatrix());
}
void AliEveTOFStrip::SetThreshold(Short_t t)
{
fThreshold = TMath::Min(t, (Short_t)(fMaxVal - 1));
}
void AliEveTOFStrip::SetMaxVal(Int_t mv)
{
fMaxVal = TMath::Max(mv, (Int_t)(fThreshold + 1));
}
void AliEveTOFStrip::DigitSelected(Int_t idx)
{
TObject* obj = GetId(idx);
AliTOFdigit* digs = dynamic_cast<AliTOFdigit*>(obj);
if (digs)
printf("\n Sector = %2i Plate = %1i Strip = %2i PadZ = %1i PadX = %2i ToT = %3i Tof = %5i\n",
fSector , fPlate, fStrip, digs->GetPadz(), digs->GetPadx(), digs->GetToT(), digs->GetTdc());
else printf("\n");
}