#include "AliEveT0Module.h"
#include <EveBase/AliEveEventManager.h>
#include <AliT0digit.h>
#include <AliRawReader.h>
#include <AliRawReaderRoot.h>
#include <AliT0RawReader.h>
#include <AliCDBStorage.h>
#include <TEveTrans.h>
#include <TEveManager.h>
#include <TTree.h>
#include <TArrayI.h>
#include <TStyle.h>
#include <TMath.h>
#include <TRandom.h>
ClassImp(AliEveT0Module)
AliEveT0Module::AliEveT0Module(const Text_t* n, Int_t sigType,
AliT0digit *digits, AliT0RawReader *start,
Double_t zvertex) :
TEveQuadSet(n), fSigType(sigType),
fDigits(digits), fStart(start),
fZVertex(zvertex)
{
}
void AliEveT0Module::PrintEventInfo()
{
printf("Z-vertex = %f\n", fZVertex);
}
void AliEveT0Module::LoadRaw(AliRawReader* reader)
{
AliT0digit *digits = 0;
reader->LoadEquipmentIdsMap("T0map.txt");
reader->RequireHeader(kTRUE);
AliT0RawReader *start = new AliT0RawReader(reader);
Int_t allData[110][5];
Float_t angle = 2 * TMath::Pi() / 12;
start->Next();
for (Int_t i=0; i<110; i++)
{
for (Int_t iHit=0; iHit<5; iHit++)
{
allData[i][iHit]= start->GetData(i,iHit);
}
}
Double_t zvertex = (allData[51][0] - allData[52][0])/2*25*2.99752/100;
TEveRGBAPalette *rawPalette = new TEveRGBAPalette(0, 3000);
TEveRGBAPalette *vertexPalette = new TEveRGBAPalette(-100, 100);
TEveFrameBox *box = new TEveFrameBox();
{
Float_t frame[3*36];
Float_t *p = frame;
for (Int_t i = 0; i < 36; ++i, p += 3) {
p[0] = 8.0f * TMath::Cos(TMath::TwoPi()*i/36);
p[1] = 8.0f * TMath::Sin(TMath::TwoPi()*i/36);
p[2] = 0;
}
box->SetQuadByPoints(frame, 36);
}
box->SetFrameColor(kGray);
rawPalette->SetLimits(1, 3000);
TEveQuadSet* rawA = new AliEveT0Module("T0_RAW_A", 2, digits, start, zvertex);
rawA->SetPalette(rawPalette);
rawA->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
rawA->SetFrame(box);
TEveQuadSet* rawC = new AliEveT0Module("T0_RAW_C", 3, digits, start, zvertex);
rawC->SetPalette(rawPalette);
rawC->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
rawC->SetFrame(box);
TEveQuadSet* vertexT0 = new AliEveT0Module("T0_Vertex", 5, digits, start, zvertex);
vertexT0->SetPalette(vertexPalette);
vertexT0->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
for (Int_t i=0; i<12; i++)
{
Float_t x = 6.5 * TMath::Sin(i * angle);
Float_t y = 6.5 * TMath::Cos(i * angle);
rawA->AddHexagon(x, y, 0, 1.0);
rawA->QuadValue(start->GetData(i+37,0)-start->GetData(0,0));
rawC->AddHexagon(x, y, 0, 1.0);
rawC->QuadValue(start->GetData(i+25,0)-start->GetData(0,0));
}
vertexT0->AddHexagon(0, 0, 0, 1);
vertexT0->QuadValue(TMath::Nint(zvertex));
rawA->RefitPlex();
rawC->RefitPlex();
vertexT0->RefitPlex();
TEveTrans& taA = rawA->RefMainTrans();
taA.SetPos(0, 0, 373);
TEveTrans& tcC = rawC->RefMainTrans();
tcC.SetPos(0, 0, -69.7);
TEveTrans& tver = vertexT0->RefMainTrans();
tver.SetPos(0, 0, zvertex);
gEve->AddElement(rawA);
gEve->AddElement(rawC);
gEve->AddElement(vertexT0);
gEve->Redraw3D();
}
void AliEveT0Module::MakeModules(AliT0digit *digits)
{
TArrayI adc(24);
TArrayI tdc(24);
digits->GetQT1(adc);
digits->GetTimeCFD(tdc);
TEveRGBAPalette* adcPalette = new TEveRGBAPalette(5, 1024);
adcPalette->SetLimits(1, 1024);
TEveRGBAPalette* tdcPalette = new TEveRGBAPalette(0, 9999);
tdcPalette->SetLimits(1, 9999);
TEveQuadSet* qa = new AliEveT0Module("T0A_ADC", 0, digits); qa->SetPalette(adcPalette);
TEveQuadSet* qc = new AliEveT0Module("T0C_ADC", 0, digits); qc->SetPalette(adcPalette);
TEveQuadSet* qat = new AliEveT0Module("T0A_TDC", 1, digits); qat->SetPalette(tdcPalette);
TEveQuadSet* qct = new AliEveT0Module("T0C_TDC", 1, digits); qct->SetPalette(tdcPalette);
Float_t angle = 2 * TMath::Pi() / 12;
qa->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
qc->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
qat->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
qct->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
for (Int_t i=0; i<12; i++) {
Float_t x = 6.5 * TMath::Sin(i * angle);
Float_t y = 6.5 * TMath::Cos(i * angle);
qa->AddHexagon(x, y, 0, 1.0);
qa->QuadValue(adc[i+12]);
qat->AddHexagon(x, y, 0, 1.0);
qat->QuadValue(tdc[i+12]);
qc->AddHexagon(x, y, 0, 1.0);
qc->QuadValue(adc[i]);
qct->AddHexagon(x, y, 0, 1.0);
qct->QuadValue(tdc[i]);
}
qa->RefitPlex();
qc->RefitPlex();
qat->RefitPlex();
qct->RefitPlex();
TEveTrans& ta = qa->RefMainTrans();
ta.SetPos(0, 0, 373);
TEveTrans& tc = qc->RefMainTrans();
tc.SetPos(0, 0, -69.7);
TEveTrans& tat = qat->RefMainTrans();
tat.SetPos(0, 0, 373);
TEveTrans& tct = qct->RefMainTrans();
tct.SetPos(0, 0, -69.7);
gEve->AddElement(qa);
gEve->AddElement(qc);
gEve->AddElement(qat);
gEve->AddElement(qct);
gEve->Redraw3D();
}
void AliEveT0Module::DigitSelected(Int_t idx)
{
DigitBase_t* qb = GetDigit(idx);
if (fSigType == 0) {
printf("adc====================\n");
Int_t besttimeright = fDigits->BestTimeA();
Int_t besttimeleft = fDigits->BestTimeC();
Int_t meantime = fDigits->MeanTime();
Int_t timediff = fDigits->TimeDiff();
Int_t summult = fDigits->SumMult();
printf("besttimeA = %3d\n", besttimeright);
printf("besttimeC = %3d\n", besttimeleft);
printf("meantime = %3d\n", meantime);
printf("timediff = %3d\n", timediff);
printf("summult = %3d\n", summult);
printf(" idx=%d, amplitude=%d\n", idx, qb->fValue);
}
if (fSigType == 1) {
printf("tdc====================\n");
Int_t besttimeright = fDigits->BestTimeA();
Int_t besttimeleft = fDigits->BestTimeC();
Int_t meantime = fDigits->MeanTime();
Int_t timediff = fDigits->TimeDiff();
Int_t summult = fDigits->SumMult();
printf("besttimeA = %3d\n",besttimeright);
printf("besttimeC = %3d\n",besttimeleft);
printf("meantime = %3d\n",meantime);
printf("timediff = %3d\n",timediff);
printf("summult = %3d\n",summult);
printf(" idx=%d, amplitude=%d\n", idx, qb->fValue);
}
if (fSigType == 2) {
printf("raw====================\n");
printf("besttimeA = %3d\n",fStart->GetData(51,0)-fStart->GetData(0,0));
printf("besttimeC = %3d\n",fStart->GetData(52,0)-fStart->GetData(0,0));
printf("meantime = %3d\n",fStart->GetData(49,0)-fStart->GetData(0,0));
printf("amplitude = %3d\n",fStart->GetData(idx+1,0));
printf(" idx=%d, time %d\n", idx, qb->fValue);
}
if (fSigType == 3) {
printf("raw====================\n");
printf("besttimeA = %3d\n",fStart->GetData(51,0)-fStart->GetData(0,0));
printf("besttimeC = %3d\n",fStart->GetData(52,0)-fStart->GetData(0,0));
printf("meantime = %3d\n",fStart->GetData(49,0)-fStart->GetData(0,0));
printf("amplitude = %3d\n",fStart->GetData(idx+13,0));
printf(" idx=%d, time %d\n", idx, qb->fValue);
}
if (fSigType == 5) {
printf("vertex====================\n");
printf(" idx=%d, zvertex pozition %d\n", idx, qb->fValue);
}
}