ROOT logo
//
// EMCAL event display
// Store the data related to each Super Module (SM)
// Possible storage of hits, digits and clusters per SM
//
//  Author: Magali Estienne (magali.estienne@cern.ch)
//  June 30 2008
//

#include <TGeoBBox.h>


#include "AliEMCALGeometry.h"
#include "AliEveEMCALSModuleData.h"

class Riostream;
class TClonesArray;
class TGeoNode;
class TGeoMatrix;
class TVector2;
class AliEveEventManager;

ClassImp(AliEveEMCALSModuleData)

Float_t AliEveEMCALSModuleData::fgSModuleBigBox0 = 0.;
Float_t AliEveEMCALSModuleData::fgSModuleBigBox1 = 0.;
Float_t AliEveEMCALSModuleData::fgSModuleBigBox2 = 0.;
Float_t AliEveEMCALSModuleData::fgSModuleSmallBox0 = 0.;
Float_t AliEveEMCALSModuleData::fgSModuleSmallBox1 = 0.;
Float_t AliEveEMCALSModuleData::fgSModuleSmallBox2 = 0.;
Float_t AliEveEMCALSModuleData::fgSModuleCenter0 = 0.;
Float_t AliEveEMCALSModuleData::fgSModuleCenter1 = 0.;
Float_t AliEveEMCALSModuleData::fgSModuleCenter2 = 0.;

//______________________________________________________________________________
AliEveEMCALSModuleData::AliEveEMCALSModuleData(Int_t sm,AliEMCALGeometry* geom, TGeoNode* node, TGeoHMatrix* m) :
  TObject(),
  fGeom(geom),
  fNode(node),
  fSmId(sm),
  fNsm(0),
  fNsmfull(0),
  fNsmhalf(0),
  fNDigits(0),
  fNClusters(0),
  fNHits(0),
  fPhiTileSize(0), fEtaTileSize(0),
  fHitArray(0),
  fDigitArray(0),
  fClusterArray(0),
  fMatrix(0),
  fHMatrix(m)
{
  //
  // Constructor
  //

  Init(sm);

}

//______________________________________________________________________________
  AliEveEMCALSModuleData::AliEveEMCALSModuleData(const AliEveEMCALSModuleData &esmdata) :
  TObject(),
  fGeom(esmdata.fGeom),
  fNode(esmdata.fNode),
  fSmId(esmdata.fSmId),
  fNsm(esmdata.fNsm),
  fNsmfull(esmdata.fNsmfull),
  fNsmhalf(esmdata.fNsmhalf),
  fNDigits(esmdata.fNDigits),
  fNClusters(esmdata.fNClusters),
  fNHits(esmdata.fNHits),
  fPhiTileSize(esmdata.fPhiTileSize), fEtaTileSize(esmdata.fEtaTileSize),
  fHitArray(esmdata.fHitArray),
  fDigitArray(esmdata.fDigitArray),
  fClusterArray(esmdata.fClusterArray),
  fMatrix(esmdata.fMatrix),
  fHMatrix(esmdata.fHMatrix)
{
  //
  // Copy constructor
  //

  Init(esmdata.fNsm);

}

//______________________________________________________________________________
AliEveEMCALSModuleData::~AliEveEMCALSModuleData()
{
  //
  // Destructor
  //

  if(!fHitArray.empty()){
    fHitArray.clear();
  }
  if(!fDigitArray.empty()){
    fDigitArray.clear();
  }
  if(!fClusterArray.empty()){
    fClusterArray.clear();
  }

}

//______________________________________________________________________________
void AliEveEMCALSModuleData::DropData()
{
  //
  // Release the SM data
  //

  fNDigits   = 0;
  fNClusters = 0;
  fNHits     = 0;

  if(!fHitArray.empty())
    fHitArray.clear();

  if(!fDigitArray.empty())
    fDigitArray.clear();

  if(!fClusterArray.empty())
    fClusterArray.clear();

  return;

}

// ______________________________________________________________________________
void AliEveEMCALSModuleData::Init(Int_t sm)
{

  //
  // Initialize parameters
  //

  fNsm = 12;
  fNsmfull = 10;
  fNsmhalf = 2;

  fPhiTileSize = fGeom->GetPhiTileSize();
  fEtaTileSize = fGeom->GetPhiTileSize();

  TGeoBBox* bbbox = (TGeoBBox*) fNode->GetDaughter(0) ->GetVolume()->GetShape();
  TGeoBBox* sbbox = (TGeoBBox*) fNode->GetDaughter(10)->GetVolume()->GetShape();

  fMatrix = (TGeoMatrix*) fNode->GetDaughter(sm)->GetMatrix();

  if(sm<fNsmfull)
    {
      fgSModuleBigBox0 = bbbox->GetDX();
      fgSModuleBigBox1 = bbbox->GetDY();
      fgSModuleBigBox2 = bbbox->GetDZ();
    }
  else 
    {
      fgSModuleSmallBox0 = sbbox->GetDX();
      fgSModuleSmallBox1 = sbbox->GetDY();
      fgSModuleSmallBox2 = sbbox->GetDZ();
    }
}


// ______________________________________________________________________________
void AliEveEMCALSModuleData::RegisterDigit(Int_t AbsId, Int_t isupMod, Double_t iamp, Double_t ix, Double_t iy, Double_t iz)
{
  //
  // Add a digit to this SM
  //

  std::vector<Double_t> bufDig(6);
  bufDig[0] = AbsId;
  bufDig[1] = isupMod;
  bufDig[2] = iamp;
  bufDig[3] = ix;
  bufDig[4] = iy;
  bufDig[5] = iz;

  fDigitArray.push_back(bufDig);

  fNDigits++;

}

// ______________________________________________________________________________
void AliEveEMCALSModuleData::RegisterHit(Int_t AbsId, Int_t isupMod, Double_t iamp, Double_t ix, Double_t iy, Double_t iz)
{
  //
  // Add a hit to this SM
  //

  std::vector<Float_t> bufHit(6);
  bufHit[0] = AbsId;
  bufHit[1] = isupMod;
  bufHit[2] = iamp;
  bufHit[3] = ix;
  bufHit[4] = iy;
  bufHit[5] = iz;

  fHitArray.push_back(bufHit);

  fNHits++;

}

// ______________________________________________________________________________
void AliEveEMCALSModuleData::RegisterCluster(Int_t isupMod, Double_t iamp, Double_t ix, Double_t iy, Double_t iz)
{
  //
  // Add a cluster to this SM
  //

  std::vector<Double_t> bufClu(5);
  bufClu[0] = isupMod;
  bufClu[1] = iamp;
  bufClu[2] = ix;
  bufClu[3] = iy;
  bufClu[4] = iz;

  fClusterArray.push_back(bufClu);

  fNClusters++;

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