ROOT logo
// $Id$
// Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007

/**************************************************************************
 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
 * full copyright notice.                                                 *
 **************************************************************************/

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// The main AliEVE drawing module for the T0 detector                   //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#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)
{
  //
  // Default constructor
  //
}

void AliEveT0Module::PrintEventInfo()
{
  printf("Z-vertex = %f\n", fZVertex);
}

/******************************************************************************/

void AliEveT0Module::LoadRaw(AliRawReader* reader)
{
  // Load raw-data from file.

  AliT0digit *digits = 0;

  // ??? How / when is this called during reco from raw?
  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;
  //std::cout<<"zvertex= "<< zvertex <<endl;

  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); // Set proper raw time range.
  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)
{
  // Make modules for digits.

  TArrayI adc(24);
  TArrayI tdc(24);

  digits->GetQT1(adc);
  digits->GetTimeCFD(tdc);
  // printf("%3d\n",besttimeright);
  // for (Int_t i=0;i<24; i++) {
  //   printf("%3d %3d\n  ",adc[i], tdc[i]);
  // }

  TEveRGBAPalette* adcPalette  = new TEveRGBAPalette(5, 1024);
  adcPalette->SetLimits(1, 1024); // Set proper ADC range.
  TEveRGBAPalette* tdcPalette  = new TEveRGBAPalette(0, 9999);
  tdcPalette->SetLimits(1, 9999); // Set proper TDC range.

  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]);
    //    qa->QuadId(new TNamed(Form("PMT   with idx=%d", i), "PMT's aplitude in side A."));

    qat->AddHexagon(x, y, 0, 1.0);
    qat->QuadValue(tdc[i+12]);
    //    qat->QuadId(new TNamed(Form("Quad with idx=%d", i), "PMT's time in side A."));

    qc->AddHexagon(x, y, 0, 1.0);
    qc->QuadValue(adc[i]);
    // qc->QuadId(new TNamed(Form("Quad with idx=%d", i), "PMT's amplitude in side C."));

    qct->AddHexagon(x, y, 0, 1.0);
    qct->QuadValue(tdc[i]);
    // qct->QuadId(new TNamed(Form("Quad with idx=%d", i), "PMT's time in side C."));
  }

  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)
{
  // Override control-click from TEveQuadSet

  DigitBase_t* qb   = GetDigit(idx);
  if (fSigType == 0) { //ADC
    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);

  }
}
 AliEveT0Module.cxx:1
 AliEveT0Module.cxx:2
 AliEveT0Module.cxx:3
 AliEveT0Module.cxx:4
 AliEveT0Module.cxx:5
 AliEveT0Module.cxx:6
 AliEveT0Module.cxx:7
 AliEveT0Module.cxx:8
 AliEveT0Module.cxx:9
 AliEveT0Module.cxx:10
 AliEveT0Module.cxx:11
 AliEveT0Module.cxx:12
 AliEveT0Module.cxx:13
 AliEveT0Module.cxx:14
 AliEveT0Module.cxx:15
 AliEveT0Module.cxx:16
 AliEveT0Module.cxx:17
 AliEveT0Module.cxx:18
 AliEveT0Module.cxx:19
 AliEveT0Module.cxx:20
 AliEveT0Module.cxx:21
 AliEveT0Module.cxx:22
 AliEveT0Module.cxx:23
 AliEveT0Module.cxx:24
 AliEveT0Module.cxx:25
 AliEveT0Module.cxx:26
 AliEveT0Module.cxx:27
 AliEveT0Module.cxx:28
 AliEveT0Module.cxx:29
 AliEveT0Module.cxx:30
 AliEveT0Module.cxx:31
 AliEveT0Module.cxx:32
 AliEveT0Module.cxx:33
 AliEveT0Module.cxx:34
 AliEveT0Module.cxx:35
 AliEveT0Module.cxx:36
 AliEveT0Module.cxx:37
 AliEveT0Module.cxx:38
 AliEveT0Module.cxx:39
 AliEveT0Module.cxx:40
 AliEveT0Module.cxx:41
 AliEveT0Module.cxx:42
 AliEveT0Module.cxx:43
 AliEveT0Module.cxx:44
 AliEveT0Module.cxx:45
 AliEveT0Module.cxx:46
 AliEveT0Module.cxx:47
 AliEveT0Module.cxx:48
 AliEveT0Module.cxx:49
 AliEveT0Module.cxx:50
 AliEveT0Module.cxx:51
 AliEveT0Module.cxx:52
 AliEveT0Module.cxx:53
 AliEveT0Module.cxx:54
 AliEveT0Module.cxx:55
 AliEveT0Module.cxx:56
 AliEveT0Module.cxx:57
 AliEveT0Module.cxx:58
 AliEveT0Module.cxx:59
 AliEveT0Module.cxx:60
 AliEveT0Module.cxx:61
 AliEveT0Module.cxx:62
 AliEveT0Module.cxx:63
 AliEveT0Module.cxx:64
 AliEveT0Module.cxx:65
 AliEveT0Module.cxx:66
 AliEveT0Module.cxx:67
 AliEveT0Module.cxx:68
 AliEveT0Module.cxx:69
 AliEveT0Module.cxx:70
 AliEveT0Module.cxx:71
 AliEveT0Module.cxx:72
 AliEveT0Module.cxx:73
 AliEveT0Module.cxx:74
 AliEveT0Module.cxx:75
 AliEveT0Module.cxx:76
 AliEveT0Module.cxx:77
 AliEveT0Module.cxx:78
 AliEveT0Module.cxx:79
 AliEveT0Module.cxx:80
 AliEveT0Module.cxx:81
 AliEveT0Module.cxx:82
 AliEveT0Module.cxx:83
 AliEveT0Module.cxx:84
 AliEveT0Module.cxx:85
 AliEveT0Module.cxx:86
 AliEveT0Module.cxx:87
 AliEveT0Module.cxx:88
 AliEveT0Module.cxx:89
 AliEveT0Module.cxx:90
 AliEveT0Module.cxx:91
 AliEveT0Module.cxx:92
 AliEveT0Module.cxx:93
 AliEveT0Module.cxx:94
 AliEveT0Module.cxx:95
 AliEveT0Module.cxx:96
 AliEveT0Module.cxx:97
 AliEveT0Module.cxx:98
 AliEveT0Module.cxx:99
 AliEveT0Module.cxx:100
 AliEveT0Module.cxx:101
 AliEveT0Module.cxx:102
 AliEveT0Module.cxx:103
 AliEveT0Module.cxx:104
 AliEveT0Module.cxx:105
 AliEveT0Module.cxx:106
 AliEveT0Module.cxx:107
 AliEveT0Module.cxx:108
 AliEveT0Module.cxx:109
 AliEveT0Module.cxx:110
 AliEveT0Module.cxx:111
 AliEveT0Module.cxx:112
 AliEveT0Module.cxx:113
 AliEveT0Module.cxx:114
 AliEveT0Module.cxx:115
 AliEveT0Module.cxx:116
 AliEveT0Module.cxx:117
 AliEveT0Module.cxx:118
 AliEveT0Module.cxx:119
 AliEveT0Module.cxx:120
 AliEveT0Module.cxx:121
 AliEveT0Module.cxx:122
 AliEveT0Module.cxx:123
 AliEveT0Module.cxx:124
 AliEveT0Module.cxx:125
 AliEveT0Module.cxx:126
 AliEveT0Module.cxx:127
 AliEveT0Module.cxx:128
 AliEveT0Module.cxx:129
 AliEveT0Module.cxx:130
 AliEveT0Module.cxx:131
 AliEveT0Module.cxx:132
 AliEveT0Module.cxx:133
 AliEveT0Module.cxx:134
 AliEveT0Module.cxx:135
 AliEveT0Module.cxx:136
 AliEveT0Module.cxx:137
 AliEveT0Module.cxx:138
 AliEveT0Module.cxx:139
 AliEveT0Module.cxx:140
 AliEveT0Module.cxx:141
 AliEveT0Module.cxx:142
 AliEveT0Module.cxx:143
 AliEveT0Module.cxx:144
 AliEveT0Module.cxx:145
 AliEveT0Module.cxx:146
 AliEveT0Module.cxx:147
 AliEveT0Module.cxx:148
 AliEveT0Module.cxx:149
 AliEveT0Module.cxx:150
 AliEveT0Module.cxx:151
 AliEveT0Module.cxx:152
 AliEveT0Module.cxx:153
 AliEveT0Module.cxx:154
 AliEveT0Module.cxx:155
 AliEveT0Module.cxx:156
 AliEveT0Module.cxx:157
 AliEveT0Module.cxx:158
 AliEveT0Module.cxx:159
 AliEveT0Module.cxx:160
 AliEveT0Module.cxx:161
 AliEveT0Module.cxx:162
 AliEveT0Module.cxx:163
 AliEveT0Module.cxx:164
 AliEveT0Module.cxx:165
 AliEveT0Module.cxx:166
 AliEveT0Module.cxx:167
 AliEveT0Module.cxx:168
 AliEveT0Module.cxx:169
 AliEveT0Module.cxx:170
 AliEveT0Module.cxx:171
 AliEveT0Module.cxx:172
 AliEveT0Module.cxx:173
 AliEveT0Module.cxx:174
 AliEveT0Module.cxx:175
 AliEveT0Module.cxx:176
 AliEveT0Module.cxx:177
 AliEveT0Module.cxx:178
 AliEveT0Module.cxx:179
 AliEveT0Module.cxx:180
 AliEveT0Module.cxx:181
 AliEveT0Module.cxx:182
 AliEveT0Module.cxx:183
 AliEveT0Module.cxx:184
 AliEveT0Module.cxx:185
 AliEveT0Module.cxx:186
 AliEveT0Module.cxx:187
 AliEveT0Module.cxx:188
 AliEveT0Module.cxx:189
 AliEveT0Module.cxx:190
 AliEveT0Module.cxx:191
 AliEveT0Module.cxx:192
 AliEveT0Module.cxx:193
 AliEveT0Module.cxx:194
 AliEveT0Module.cxx:195
 AliEveT0Module.cxx:196
 AliEveT0Module.cxx:197
 AliEveT0Module.cxx:198
 AliEveT0Module.cxx:199
 AliEveT0Module.cxx:200
 AliEveT0Module.cxx:201
 AliEveT0Module.cxx:202
 AliEveT0Module.cxx:203
 AliEveT0Module.cxx:204
 AliEveT0Module.cxx:205
 AliEveT0Module.cxx:206
 AliEveT0Module.cxx:207
 AliEveT0Module.cxx:208
 AliEveT0Module.cxx:209
 AliEveT0Module.cxx:210
 AliEveT0Module.cxx:211
 AliEveT0Module.cxx:212
 AliEveT0Module.cxx:213
 AliEveT0Module.cxx:214
 AliEveT0Module.cxx:215
 AliEveT0Module.cxx:216
 AliEveT0Module.cxx:217
 AliEveT0Module.cxx:218
 AliEveT0Module.cxx:219
 AliEveT0Module.cxx:220
 AliEveT0Module.cxx:221
 AliEveT0Module.cxx:222
 AliEveT0Module.cxx:223
 AliEveT0Module.cxx:224
 AliEveT0Module.cxx:225
 AliEveT0Module.cxx:226
 AliEveT0Module.cxx:227
 AliEveT0Module.cxx:228
 AliEveT0Module.cxx:229
 AliEveT0Module.cxx:230
 AliEveT0Module.cxx:231
 AliEveT0Module.cxx:232
 AliEveT0Module.cxx:233
 AliEveT0Module.cxx:234
 AliEveT0Module.cxx:235
 AliEveT0Module.cxx:236
 AliEveT0Module.cxx:237
 AliEveT0Module.cxx:238
 AliEveT0Module.cxx:239
 AliEveT0Module.cxx:240
 AliEveT0Module.cxx:241
 AliEveT0Module.cxx:242
 AliEveT0Module.cxx:243
 AliEveT0Module.cxx:244
 AliEveT0Module.cxx:245
 AliEveT0Module.cxx:246
 AliEveT0Module.cxx:247
 AliEveT0Module.cxx:248
 AliEveT0Module.cxx:249
 AliEveT0Module.cxx:250
 AliEveT0Module.cxx:251
 AliEveT0Module.cxx:252
 AliEveT0Module.cxx:253
 AliEveT0Module.cxx:254
 AliEveT0Module.cxx:255
 AliEveT0Module.cxx:256
 AliEveT0Module.cxx:257
 AliEveT0Module.cxx:258
 AliEveT0Module.cxx:259
 AliEveT0Module.cxx:260
 AliEveT0Module.cxx:261
 AliEveT0Module.cxx:262
 AliEveT0Module.cxx:263
 AliEveT0Module.cxx:264
 AliEveT0Module.cxx:265
 AliEveT0Module.cxx:266
 AliEveT0Module.cxx:267
 AliEveT0Module.cxx:268
 AliEveT0Module.cxx:269
 AliEveT0Module.cxx:270
 AliEveT0Module.cxx:271
 AliEveT0Module.cxx:272
 AliEveT0Module.cxx:273
 AliEveT0Module.cxx:274
 AliEveT0Module.cxx:275
 AliEveT0Module.cxx:276
 AliEveT0Module.cxx:277
 AliEveT0Module.cxx:278
 AliEveT0Module.cxx:279
 AliEveT0Module.cxx:280
 AliEveT0Module.cxx:281
 AliEveT0Module.cxx:282
 AliEveT0Module.cxx:283
 AliEveT0Module.cxx:284
 AliEveT0Module.cxx:285