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.                                                 *
 **************************************************************************/

#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 "UPGRADE/AliITSUDigitPix.h"

#include <AliITSUGeomTGeo.h>
#include <AliITSsegmentation.h>
#include <AliITSUDigitPix.h>
//______________________________________________________________________________
//
// Visualization of an ITS Upgrade module.

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)
{
  // Constructor.
  
}

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

  // 
  // constructor
  //
  fGM = gm; // ITSU Geometry Manager
  fgStaticInitDone = kFALSE; 
  fSegm = fGM->GetSegmentation(layer);
  fDpx = fSegm->Dpx(0);  // pixel pitch in x
  fDpz = fSegm->Dpz(0);  // pixel pitch in z
  SetID(id);
  //
}

AliEveITSUModule::~AliEveITSUModule()
{
  // Destructor.

 
}

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

void AliEveITSUModule::InitStatics()
{
  // Initialize static variables.
  //
  // Warning all sensor sizes are cm
  // In Eve half-lengths/widths are used, hence 1/2.

  if (fgStaticInitDone) return;
  fgStaticInitDone = kTRUE;

  Float_t dx =  fSegm->Dx(); // dimension in x in cm
  Float_t dz =  fSegm->Dz(); // dimension in y in cm
  Float_t dy =  0;// ? eventuelly a few 100 micron, right?

  {
    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)
{
  // Set detector id.

  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)
{
  // Sets a digit from source in a visualization structure - called quads.


  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()
{
  // Set transformation matrix 
   
  const TGeoHMatrix *mat = fGM->GetMatrixSens(fID);
  fMainTrans->SetFrom(*mat);

}


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

void AliEveITSUModule::Print(Option_t* ) const
{
  // Print object summary information.

  printf("AliEveITSUModule: ModuleId: %d, layer %d, ladder %d, detector %d\n",
         fID, fkLayer, fkLadder, fkDetector);

}

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

void AliEveITSUModule::DigitSelected(Int_t idx)
{
  // Override secondary select (alt-click) from TEveQuadSet.
 
  //  for (Int_t i=0;i<7;i++) {
  //    idx=i;
  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");
  }
  
} 
 AliEveITSUModule.cxx:1
 AliEveITSUModule.cxx:2
 AliEveITSUModule.cxx:3
 AliEveITSUModule.cxx:4
 AliEveITSUModule.cxx:5
 AliEveITSUModule.cxx:6
 AliEveITSUModule.cxx:7
 AliEveITSUModule.cxx:8
 AliEveITSUModule.cxx:9
 AliEveITSUModule.cxx:10
 AliEveITSUModule.cxx:11
 AliEveITSUModule.cxx:12
 AliEveITSUModule.cxx:13
 AliEveITSUModule.cxx:14
 AliEveITSUModule.cxx:15
 AliEveITSUModule.cxx:16
 AliEveITSUModule.cxx:17
 AliEveITSUModule.cxx:18
 AliEveITSUModule.cxx:19
 AliEveITSUModule.cxx:20
 AliEveITSUModule.cxx:21
 AliEveITSUModule.cxx:22
 AliEveITSUModule.cxx:23
 AliEveITSUModule.cxx:24
 AliEveITSUModule.cxx:25
 AliEveITSUModule.cxx:26
 AliEveITSUModule.cxx:27
 AliEveITSUModule.cxx:28
 AliEveITSUModule.cxx:29
 AliEveITSUModule.cxx:30
 AliEveITSUModule.cxx:31
 AliEveITSUModule.cxx:32
 AliEveITSUModule.cxx:33
 AliEveITSUModule.cxx:34
 AliEveITSUModule.cxx:35
 AliEveITSUModule.cxx:36
 AliEveITSUModule.cxx:37
 AliEveITSUModule.cxx:38
 AliEveITSUModule.cxx:39
 AliEveITSUModule.cxx:40
 AliEveITSUModule.cxx:41
 AliEveITSUModule.cxx:42
 AliEveITSUModule.cxx:43
 AliEveITSUModule.cxx:44
 AliEveITSUModule.cxx:45
 AliEveITSUModule.cxx:46
 AliEveITSUModule.cxx:47
 AliEveITSUModule.cxx:48
 AliEveITSUModule.cxx:49
 AliEveITSUModule.cxx:50
 AliEveITSUModule.cxx:51
 AliEveITSUModule.cxx:52
 AliEveITSUModule.cxx:53
 AliEveITSUModule.cxx:54
 AliEveITSUModule.cxx:55
 AliEveITSUModule.cxx:56
 AliEveITSUModule.cxx:57
 AliEveITSUModule.cxx:58
 AliEveITSUModule.cxx:59
 AliEveITSUModule.cxx:60
 AliEveITSUModule.cxx:61
 AliEveITSUModule.cxx:62
 AliEveITSUModule.cxx:63
 AliEveITSUModule.cxx:64
 AliEveITSUModule.cxx:65
 AliEveITSUModule.cxx:66
 AliEveITSUModule.cxx:67
 AliEveITSUModule.cxx:68
 AliEveITSUModule.cxx:69
 AliEveITSUModule.cxx:70
 AliEveITSUModule.cxx:71
 AliEveITSUModule.cxx:72
 AliEveITSUModule.cxx:73
 AliEveITSUModule.cxx:74
 AliEveITSUModule.cxx:75
 AliEveITSUModule.cxx:76
 AliEveITSUModule.cxx:77
 AliEveITSUModule.cxx:78
 AliEveITSUModule.cxx:79
 AliEveITSUModule.cxx:80
 AliEveITSUModule.cxx:81
 AliEveITSUModule.cxx:82
 AliEveITSUModule.cxx:83
 AliEveITSUModule.cxx:84
 AliEveITSUModule.cxx:85
 AliEveITSUModule.cxx:86
 AliEveITSUModule.cxx:87
 AliEveITSUModule.cxx:88
 AliEveITSUModule.cxx:89
 AliEveITSUModule.cxx:90
 AliEveITSUModule.cxx:91
 AliEveITSUModule.cxx:92
 AliEveITSUModule.cxx:93
 AliEveITSUModule.cxx:94
 AliEveITSUModule.cxx:95
 AliEveITSUModule.cxx:96
 AliEveITSUModule.cxx:97
 AliEveITSUModule.cxx:98
 AliEveITSUModule.cxx:99
 AliEveITSUModule.cxx:100
 AliEveITSUModule.cxx:101
 AliEveITSUModule.cxx:102
 AliEveITSUModule.cxx:103
 AliEveITSUModule.cxx:104
 AliEveITSUModule.cxx:105
 AliEveITSUModule.cxx:106
 AliEveITSUModule.cxx:107
 AliEveITSUModule.cxx:108
 AliEveITSUModule.cxx:109
 AliEveITSUModule.cxx:110
 AliEveITSUModule.cxx:111
 AliEveITSUModule.cxx:112
 AliEveITSUModule.cxx:113
 AliEveITSUModule.cxx:114
 AliEveITSUModule.cxx:115
 AliEveITSUModule.cxx:116
 AliEveITSUModule.cxx:117
 AliEveITSUModule.cxx:118
 AliEveITSUModule.cxx:119
 AliEveITSUModule.cxx:120
 AliEveITSUModule.cxx:121
 AliEveITSUModule.cxx:122
 AliEveITSUModule.cxx:123
 AliEveITSUModule.cxx:124
 AliEveITSUModule.cxx:125
 AliEveITSUModule.cxx:126
 AliEveITSUModule.cxx:127
 AliEveITSUModule.cxx:128
 AliEveITSUModule.cxx:129
 AliEveITSUModule.cxx:130
 AliEveITSUModule.cxx:131
 AliEveITSUModule.cxx:132
 AliEveITSUModule.cxx:133
 AliEveITSUModule.cxx:134
 AliEveITSUModule.cxx:135
 AliEveITSUModule.cxx:136
 AliEveITSUModule.cxx:137
 AliEveITSUModule.cxx:138
 AliEveITSUModule.cxx:139
 AliEveITSUModule.cxx:140
 AliEveITSUModule.cxx:141
 AliEveITSUModule.cxx:142
 AliEveITSUModule.cxx:143
 AliEveITSUModule.cxx:144
 AliEveITSUModule.cxx:145
 AliEveITSUModule.cxx:146
 AliEveITSUModule.cxx:147
 AliEveITSUModule.cxx:148
 AliEveITSUModule.cxx:149
 AliEveITSUModule.cxx:150
 AliEveITSUModule.cxx:151
 AliEveITSUModule.cxx:152
 AliEveITSUModule.cxx:153
 AliEveITSUModule.cxx:154
 AliEveITSUModule.cxx:155
 AliEveITSUModule.cxx:156
 AliEveITSUModule.cxx:157
 AliEveITSUModule.cxx:158
 AliEveITSUModule.cxx:159
 AliEveITSUModule.cxx:160
 AliEveITSUModule.cxx:161
 AliEveITSUModule.cxx:162
 AliEveITSUModule.cxx:163
 AliEveITSUModule.cxx:164
 AliEveITSUModule.cxx:165
 AliEveITSUModule.cxx:166
 AliEveITSUModule.cxx:167
 AliEveITSUModule.cxx:168
 AliEveITSUModule.cxx:169
 AliEveITSUModule.cxx:170
 AliEveITSUModule.cxx:171
 AliEveITSUModule.cxx:172
 AliEveITSUModule.cxx:173
 AliEveITSUModule.cxx:174
 AliEveITSUModule.cxx:175
 AliEveITSUModule.cxx:176
 AliEveITSUModule.cxx:177
 AliEveITSUModule.cxx:178
 AliEveITSUModule.cxx:179
 AliEveITSUModule.cxx:180
 AliEveITSUModule.cxx:181
 AliEveITSUModule.cxx:182
 AliEveITSUModule.cxx:183
 AliEveITSUModule.cxx:184
 AliEveITSUModule.cxx:185
 AliEveITSUModule.cxx:186
 AliEveITSUModule.cxx:187
 AliEveITSUModule.cxx:188
 AliEveITSUModule.cxx:189
 AliEveITSUModule.cxx:190
 AliEveITSUModule.cxx:191
 AliEveITSUModule.cxx:192
 AliEveITSUModule.cxx:193
 AliEveITSUModule.cxx:194
 AliEveITSUModule.cxx:195
 AliEveITSUModule.cxx:196
 AliEveITSUModule.cxx:197
 AliEveITSUModule.cxx:198
 AliEveITSUModule.cxx:199
 AliEveITSUModule.cxx:200
 AliEveITSUModule.cxx:201
 AliEveITSUModule.cxx:202
 AliEveITSUModule.cxx:203
 AliEveITSUModule.cxx:204
 AliEveITSUModule.cxx:205
 AliEveITSUModule.cxx:206
 AliEveITSUModule.cxx:207
 AliEveITSUModule.cxx:208
 AliEveITSUModule.cxx:209
 AliEveITSUModule.cxx:210
 AliEveITSUModule.cxx:211
 AliEveITSUModule.cxx:212
 AliEveITSUModule.cxx:213
 AliEveITSUModule.cxx:214
 AliEveITSUModule.cxx:215
 AliEveITSUModule.cxx:216
 AliEveITSUModule.cxx:217
 AliEveITSUModule.cxx:218
 AliEveITSUModule.cxx:219
 AliEveITSUModule.cxx:220
 AliEveITSUModule.cxx:221
 AliEveITSUModule.cxx:222
 AliEveITSUModule.cxx:223