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

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

//
// Class to visualize the TOF digit information
// in TOF sector frame
//
// Author: A. De Caro (email: decaro@sa.infn.t)
//

#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)
{
  // ctr

  //fGeoManager = AliEveEventManager::AssertGeometry();
  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)
{
  // ctr

  //if (!fGeoManager) printf("ERROR: no TGeo\n");

  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)
{
  // ctr

  InitModule();

}
/* ************************************************************************ */

AliEveTOFStrip::~AliEveTOFStrip()
{
  // dtr

  fGeoManager = 0x0;
  delete fGeoManager;

  fTOFarray = 0x0;
  delete fTOFarray;

}

/* ************************************************************************ */
/*
void AliEveTOFStrip::SetDigitsInfo(AliEveTOFDigitsInfo* info)
{
  if(fInfo) fInfo->DecRefCount();
  fInfo = info;
  if(fInfo) fInfo->IncRefCount();

}
*/
/* ************************************************************************ */
void AliEveTOFStrip::InitStatics()
{
  //
  // To initialize statistic variables
  //

  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, 2048); // TOT
  //fgTOFstripPalette  = new TEveRGBAPalette(0, 192); // TDC
  fgTOFstripPalette  = new TEveRGBAPalette(0, 100000); // TDC
  fgTOFstripPalette->SetOverflowAction(2);
  fgTOFstripPalette->SetUnderflowAction(2);
  fgTOFstripPalette->IncRefCount();

  fgStaticInitDone = kTRUE;
}

/* ************************************************************************ */
void AliEveTOFStrip::InitModule()
{
  //
  // To initialize TOF strip frame variables
  //

  fDx = fTOFgeometry->XPad()*fTOFgeometry->NpadX();
  fDz = fTOFgeometry->ZPad()*fTOFgeometry->NpadZ();

  if (!fgStaticInitDone) InitStatics();

  SetFrame(fgTOFstripFrameBox);
  SetPalette(fgTOFstripPalette);
  //fFrame   = fgTOFstripFrameBox;
  //fPalette = fgTOFstripPalette;

  LoadQuads();
  ComputeBBox();
  SetTrans();

}

/* ************************************************************************ */
void AliEveTOFStrip::LoadQuads()
{
  //
  // Load TOF digit as illuminated pad
  //

  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;

  //printf(" fTOFarray->GetEntries() = %4i \n",fTOFarray->GetEntries());

  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();

    //if (fSector==4 && fPlate==2 && fStrip==0) printf(" %2i  %1i\n", iPadX, iPadZ);
    //if (iPadX==23 || iPadX==24) printf(" %2i  %1i %2i \n", fSector, fPlate, fStrip);

    fTOFgeometry->DetToStripRF(iPadX, iPadZ, x, z);

    AddQuad(x, z, 2.5, 3.5);
    //AddQuad(-2.5*0.5, -3.5*0.5, 2.5, 3.5);

    // In principle could have color based on number of neigbours. We
    // can insert the time-of-flight value for each pad
    //QuadValue((Int_t)tot);
    QuadValue((Int_t)tdc);
    QuadId(tofDigit);

    //if (fSector==4 && fPlate==2  && fStrip==0) printf("  %1i   %2i    %f  %f \n", iPadZ, iPadX, x, z);

  }

  RefitPlex();

}

/* ************************************************************ */
void AliEveTOFStrip::SetTrans()
{
  //
  // Set the translation matrix for TOF sector
  //

  //Int_t det[5] = {fSector, fPlate, fStrip, -1, -1};
  Char_t path[200];
  //fTOFgeometry->GetVolumePath(det,path);
  fTOFgeometry->GetVolumePath(fSector, fPlate, fStrip, path);

  fGeoManager->cd(path);
  SetTransMatrix(*fGeoManager->GetCurrentMatrix());
}

/******************************************************************************/
void AliEveTOFStrip::SetThreshold(Short_t t)
{
  //
  // Set visualization threshold
  //

  fThreshold = TMath::Min(t, (Short_t)(fMaxVal - 1));
  // ClearColorArray();
}

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

void AliEveTOFStrip::SetMaxVal(Int_t mv)
{
  //
  // Set visualization max value
  //

  fMaxVal = TMath::Max(mv, (Int_t)(fThreshold + 1));
  //ClearColorArray();
}

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

void AliEveTOFStrip::DigitSelected(Int_t idx)
{
  //
  // Printout infos for TOF digit number idx
  //

  // Override control-click from TEveQuadSet

  TObject* obj = GetId(idx);
  AliTOFdigit* digs = dynamic_cast<AliTOFdigit*>(obj);
  // printf("AliEveTOFStrip::QuadSelected "); Print();

  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");

}

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