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

#ifndef AliEveITSDigitsInfo_H
#define AliEveITSDigitsInfo_H

#include <TEveUtil.h>
#include <TObject.h>

#include <map>
#include <vector>

class TClonesArray;
class TTree;

class AliITSsegmentationSPD;
class AliITSsegmentationSDD;
class AliITSsegmentationSSD;
class AliITSDDLModuleMapSDD;

class AliRawReader;

/******************************************************************************/
// AliEveITSModuleSelection
/******************************************************************************/

class AliEveITSModuleSelection
{
public:
  AliEveITSModuleSelection();
  virtual ~AliEveITSModuleSelection() {}

  Int_t   GetType() const        { return fType;     }
  void    SetType(Int_t x)       { fType = x;        }
  Int_t   GetLayer() const       { return fLayer;    }
  void    SetLayer(Int_t x)      { fLayer = x;       }
  Float_t GetMinPhi() const      { return fMinPhi;   }
  void    SetMinPhi(Float_t x)   { fMinPhi = x;      }
  Float_t GetMaxPhi() const      { return fMaxPhi;   }
  void    SetMaxPhi(Float_t x)   { fMaxPhi = x;      }
  Float_t GetMinTheta() const    { return fMinTheta; }
  void    SetMinTheta(Float_t x) { fMinTheta = x;    }
  Float_t GetMaxTheta() const    { return fMaxTheta; }
  void    SetMaxTheta(Float_t x) { fMaxTheta = x;    }

  void    SetPhiRange  (Float_t x, Float_t y) { fMinPhi   = x; fMaxPhi   = y; }
  void    SetThetaRange(Float_t x, Float_t y) { fMinTheta = x; fMaxTheta = y; }

protected:
  Int_t    fType;      // Type of modules: 0 - SPD, 1 - SDD, 2 - SSD.
  Int_t    fLayer;     // Layer, 0 - inner SPD, 5 - outer SSD.
  Float_t  fMinPhi;    // Min phi.
  Float_t  fMaxPhi;    // Max phi.
  Float_t  fMinTheta;  // Min theta.
  Float_t  fMaxTheta;  // Max theta.

  ClassDef(AliEveITSModuleSelection, 0); // Helper for selecting a range of ITS modules by type, layer, phi and theta.
};


/******************************************************************************/
// AliEveITSDigitsInfo
/******************************************************************************/

class AliEveITSDigitsInfo : public TObject, public TEveRefCnt
{
public:
  TTree*                   fTree;         // Tree from which the digits are read.

  AliITSsegmentationSPD*   fSegSPD;       // Segmentation of SPD.
  AliITSsegmentationSDD*   fSegSDD;       // Segmentation of SDD.
  AliITSsegmentationSSD*   fSegSSD;       // Segmentation of SSD.

  Int_t                    fSPDMinVal;    // Default low  limit for display of SPD digits.
  Int_t                    fSSDMinVal;    // Default low  limit for display of SSD digits.
  Int_t                    fSDDMinVal;    // Default low  limit for display of SDD digits.
  Int_t                    fSPDMaxVal;    // Default high limit for display of SPD digits.
  Int_t                    fSSDMaxVal;    // Default high limit for display of SSD digits.
  Int_t                    fSDDMaxVal;    // Default high limit for display of SDD digits.

  Int_t                    fSPDHighLim;   // Maximum value of SPD digits.
  Int_t                    fSDDHighLim;   // Maximum value of SDD digits.
  Int_t                    fSSDHighLim;   // Maximum value of SSD digits.

  Int_t                    fSPDScaleX[5]; // SPD cell-sizes along X for display of scaled-digits.
  Int_t                    fSPDScaleZ[5]; // SPD cell-sizes along Z for display of scaled-digits.
  Int_t                    fSDDScaleX[5]; // SDD cell-sizes along X for display of scaled-digits.
  Int_t                    fSDDScaleZ[5]; // SDD cell-sizes along Z for display of scaled-digits.
  Int_t                    fSSDScale [5]; // SSD cell-sizes for display of scaled-digits.

  static AliITSDDLModuleMapSDD *fgDDLMapSDD;  // Mapping DDL/module to SDD-module number.

  static TObjArray             *fgDeadModSPD; // Dead modules of SPD.
  static TObjArray             *fgDeadModSDD; // Dead modules of SDD.
  static TObjArray             *fgDeadModSSD; // Dead modules of SSD.

  AliEveITSDigitsInfo();
  virtual ~AliEveITSDigitsInfo();

  void SetTree(TTree* tree);
  void ReadRaw(AliRawReader* raw, Int_t mode);

  TClonesArray* GetDigits(Int_t moduleID, Int_t detector) const;

  void GetSPDLocalZ(Int_t j, Float_t& z) const;

  void GetModuleIDs(AliEveITSModuleSelection* sel, std::vector<UInt_t>& ids) const;

  Bool_t HasData(Int_t module, Int_t det_id) const;
  Bool_t IsDead (Int_t module, Int_t det_id) const;

  virtual void Print(Option_t* opt="") const;

protected:
  mutable std::map<Int_t,  TClonesArray*> fSPDmap; // Map from module-id to SPD data.
  mutable std::map<Int_t,  TClonesArray*> fSDDmap; // Map from module-id to SDD data.
  mutable std::map<Int_t,  TClonesArray*> fSSDmap; // Map from module-id to SSD data.

  void SetITSSegmentation();

private:
  Float_t fSPDZCoord[192]; // Precalculated z-coordinates for positions of digits.

  void InitInternals();

  AliEveITSDigitsInfo(const AliEveITSDigitsInfo&);            // Not implemented
  AliEveITSDigitsInfo& operator=(const AliEveITSDigitsInfo&); // Not implemented

  ClassDef(AliEveITSDigitsInfo, 0); // Stores ITS geometry information and event-data in format suitable for visualization.
};


inline void AliEveITSDigitsInfo::GetSPDLocalZ(Int_t j, Float_t& z) const
{
  z = fSPDZCoord[j];
}

#endif
 AliEveITSDigitsInfo.h:1
 AliEveITSDigitsInfo.h:2
 AliEveITSDigitsInfo.h:3
 AliEveITSDigitsInfo.h:4
 AliEveITSDigitsInfo.h:5
 AliEveITSDigitsInfo.h:6
 AliEveITSDigitsInfo.h:7
 AliEveITSDigitsInfo.h:8
 AliEveITSDigitsInfo.h:9
 AliEveITSDigitsInfo.h:10
 AliEveITSDigitsInfo.h:11
 AliEveITSDigitsInfo.h:12
 AliEveITSDigitsInfo.h:13
 AliEveITSDigitsInfo.h:14
 AliEveITSDigitsInfo.h:15
 AliEveITSDigitsInfo.h:16
 AliEveITSDigitsInfo.h:17
 AliEveITSDigitsInfo.h:18
 AliEveITSDigitsInfo.h:19
 AliEveITSDigitsInfo.h:20
 AliEveITSDigitsInfo.h:21
 AliEveITSDigitsInfo.h:22
 AliEveITSDigitsInfo.h:23
 AliEveITSDigitsInfo.h:24
 AliEveITSDigitsInfo.h:25
 AliEveITSDigitsInfo.h:26
 AliEveITSDigitsInfo.h:27
 AliEveITSDigitsInfo.h:28
 AliEveITSDigitsInfo.h:29
 AliEveITSDigitsInfo.h:30
 AliEveITSDigitsInfo.h:31
 AliEveITSDigitsInfo.h:32
 AliEveITSDigitsInfo.h:33
 AliEveITSDigitsInfo.h:34
 AliEveITSDigitsInfo.h:35
 AliEveITSDigitsInfo.h:36
 AliEveITSDigitsInfo.h:37
 AliEveITSDigitsInfo.h:38
 AliEveITSDigitsInfo.h:39
 AliEveITSDigitsInfo.h:40
 AliEveITSDigitsInfo.h:41
 AliEveITSDigitsInfo.h:42
 AliEveITSDigitsInfo.h:43
 AliEveITSDigitsInfo.h:44
 AliEveITSDigitsInfo.h:45
 AliEveITSDigitsInfo.h:46
 AliEveITSDigitsInfo.h:47
 AliEveITSDigitsInfo.h:48
 AliEveITSDigitsInfo.h:49
 AliEveITSDigitsInfo.h:50
 AliEveITSDigitsInfo.h:51
 AliEveITSDigitsInfo.h:52
 AliEveITSDigitsInfo.h:53
 AliEveITSDigitsInfo.h:54
 AliEveITSDigitsInfo.h:55
 AliEveITSDigitsInfo.h:56
 AliEveITSDigitsInfo.h:57
 AliEveITSDigitsInfo.h:58
 AliEveITSDigitsInfo.h:59
 AliEveITSDigitsInfo.h:60
 AliEveITSDigitsInfo.h:61
 AliEveITSDigitsInfo.h:62
 AliEveITSDigitsInfo.h:63
 AliEveITSDigitsInfo.h:64
 AliEveITSDigitsInfo.h:65
 AliEveITSDigitsInfo.h:66
 AliEveITSDigitsInfo.h:67
 AliEveITSDigitsInfo.h:68
 AliEveITSDigitsInfo.h:69
 AliEveITSDigitsInfo.h:70
 AliEveITSDigitsInfo.h:71
 AliEveITSDigitsInfo.h:72
 AliEveITSDigitsInfo.h:73
 AliEveITSDigitsInfo.h:74
 AliEveITSDigitsInfo.h:75
 AliEveITSDigitsInfo.h:76
 AliEveITSDigitsInfo.h:77
 AliEveITSDigitsInfo.h:78
 AliEveITSDigitsInfo.h:79
 AliEveITSDigitsInfo.h:80
 AliEveITSDigitsInfo.h:81
 AliEveITSDigitsInfo.h:82
 AliEveITSDigitsInfo.h:83
 AliEveITSDigitsInfo.h:84
 AliEveITSDigitsInfo.h:85
 AliEveITSDigitsInfo.h:86
 AliEveITSDigitsInfo.h:87
 AliEveITSDigitsInfo.h:88
 AliEveITSDigitsInfo.h:89
 AliEveITSDigitsInfo.h:90
 AliEveITSDigitsInfo.h:91
 AliEveITSDigitsInfo.h:92
 AliEveITSDigitsInfo.h:93
 AliEveITSDigitsInfo.h:94
 AliEveITSDigitsInfo.h:95
 AliEveITSDigitsInfo.h:96
 AliEveITSDigitsInfo.h:97
 AliEveITSDigitsInfo.h:98
 AliEveITSDigitsInfo.h:99
 AliEveITSDigitsInfo.h:100
 AliEveITSDigitsInfo.h:101
 AliEveITSDigitsInfo.h:102
 AliEveITSDigitsInfo.h:103
 AliEveITSDigitsInfo.h:104
 AliEveITSDigitsInfo.h:105
 AliEveITSDigitsInfo.h:106
 AliEveITSDigitsInfo.h:107
 AliEveITSDigitsInfo.h:108
 AliEveITSDigitsInfo.h:109
 AliEveITSDigitsInfo.h:110
 AliEveITSDigitsInfo.h:111
 AliEveITSDigitsInfo.h:112
 AliEveITSDigitsInfo.h:113
 AliEveITSDigitsInfo.h:114
 AliEveITSDigitsInfo.h:115
 AliEveITSDigitsInfo.h:116
 AliEveITSDigitsInfo.h:117
 AliEveITSDigitsInfo.h:118
 AliEveITSDigitsInfo.h:119
 AliEveITSDigitsInfo.h:120
 AliEveITSDigitsInfo.h:121
 AliEveITSDigitsInfo.h:122
 AliEveITSDigitsInfo.h:123
 AliEveITSDigitsInfo.h:124
 AliEveITSDigitsInfo.h:125
 AliEveITSDigitsInfo.h:126
 AliEveITSDigitsInfo.h:127
 AliEveITSDigitsInfo.h:128
 AliEveITSDigitsInfo.h:129
 AliEveITSDigitsInfo.h:130
 AliEveITSDigitsInfo.h:131
 AliEveITSDigitsInfo.h:132
 AliEveITSDigitsInfo.h:133
 AliEveITSDigitsInfo.h:134
 AliEveITSDigitsInfo.h:135
 AliEveITSDigitsInfo.h:136
 AliEveITSDigitsInfo.h:137
 AliEveITSDigitsInfo.h:138
 AliEveITSDigitsInfo.h:139
 AliEveITSDigitsInfo.h:140
 AliEveITSDigitsInfo.h:141
 AliEveITSDigitsInfo.h:142
 AliEveITSDigitsInfo.h:143
 AliEveITSDigitsInfo.h:144