b4eee9fce1bec1d21b1018b8287284928d5af900
[u/mrichter/AliRoot.git] / EVE / EveDet / AliEveITSDigitsInfo.h
1 // $Id$
2 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
3
4 /**************************************************************************
5  * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
6  * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
7  * full copyright notice.                                                 *
8  **************************************************************************/
9
10 #ifndef ALIEVE_ITSDigitsInfo_H
11 #define ALIEVE_ITSDigitsInfo_H
12
13 #include <TEveUtil.h>
14
15 #include <map>
16 #include <vector>
17
18 #include <TObject.h>
19 #include <TClonesArray.h>
20 #include <TTree.h>
21
22 #include <AliITS.h>
23 #include <AliITSgeom.h>
24 #include <AliITSsegmentationSPD.h>
25 #include <AliITSsegmentationSDD.h>
26 #include <AliITSsegmentationSSD.h>
27
28 class AliRawReader;
29
30 /******************************************************************************/
31 // AliEveITSModuleSelection
32 /******************************************************************************/
33 class AliEveITSModuleSelection
34 {
35 protected:
36   Int_t    fType;      // Type of modules: 0 - SPD, 1 - SDD, 2 - SSD.
37   Int_t    fLayer;     // Layer, 0 - inner SPD, 5 - outer SSD.
38   Float_t  fMinPhi;    // Min phi.
39   Float_t  fMaxPhi;    // Max phi.
40   Float_t  fMinTheta;  // Min theta.
41   Float_t  fMaxTheta;  // Max theta.
42
43 public:
44   AliEveITSModuleSelection();
45   virtual ~AliEveITSModuleSelection() {}
46
47   Int_t   GetType() const        { return fType;     }
48   void    SetType(Int_t x)       { fType = x;        }
49   Int_t   GetLayer() const       { return fLayer;    }
50   void    SetLayer(Int_t x)      { fLayer = x;       }
51   Float_t GetMinPhi() const      { return fMinPhi;   }
52   void    SetMinPhi(Float_t x)   { fMinPhi = x;      }
53   Float_t GetMaxPhi() const      { return fMaxPhi;   }
54   void    SetMaxPhi(Float_t x)   { fMaxPhi = x;      }
55   Float_t GetMinTheta() const    { return fMinTheta; }
56   void    SetMinTheta(Float_t x) { fMinTheta = x;    }
57   Float_t GetMaxTheta() const    { return fMaxTheta; }
58   void    SetMaxTheta(Float_t x) { fMaxTheta = x;    }
59
60   void    SetPhiRange  (Float_t x, Float_t y) { fMinPhi   = x; fMaxPhi   = y; }
61   void    SetThetaRange(Float_t x, Float_t y) { fMinTheta = x; fMaxTheta = y; }
62
63   ClassDef(AliEveITSModuleSelection, 1); // Helper for selecting a range of ITS modules by type, layer, phi and theta.
64 };
65
66 /******************************************************************************/
67 // AliEveITSDigitsInfo
68 /******************************************************************************/
69
70 class AliEveITSDigitsInfo : public TObject, public TEveRefCnt
71 {
72   AliEveITSDigitsInfo(const AliEveITSDigitsInfo&);            // Not implemented
73   AliEveITSDigitsInfo& operator=(const AliEveITSDigitsInfo&); // Not implemented
74
75 private:
76   Float_t fSPDZCoord[192];                // Precalculated z-coordinates for positions of digits.
77
78   void InitInternals();
79
80 protected:
81   std::map<Int_t,  TClonesArray*> fSPDmap;     // Map from module-id to SPD data.
82   std::map<Int_t,  TClonesArray*> fSDDmap;     // Map from module-id to SDD data.
83   std::map<Int_t,  TClonesArray*> fSSDmap;     // Map from module-id to SSD data.
84
85   void        SetITSSegmentation();
86
87 public:
88   TTree*                   fTree;         // Tree from which the digits are read.
89
90   AliITSgeom*              fGeom;         // Provides mapping from module-id to transforamtion-matrix.
91   AliITSsegmentationSPD*   fSegSPD;       // Segmentation of SPD.
92   AliITSsegmentationSDD*   fSegSDD;       // Segmentation of SDD.
93   AliITSsegmentationSSD*   fSegSSD;       // Segmentation of SSD.
94
95   Int_t                    fSPDMinVal;    // Default lower limit for display of SPD digits.
96   Int_t                    fSSDMinVal;    // Default lower limit for display of SSD digits.
97   Int_t                    fSDDMinVal;    // Default lower limit for display of SDD digits.
98   Int_t                    fSPDMaxVal;    // Default high  limit for display of SPD digits.
99   Int_t                    fSSDMaxVal;    // Default high  limit for display of SSD digits.
100   Int_t                    fSDDMaxVal;    // Default high  limit for display of SDD digits.
101
102   Int_t                    fSPDHighLim;   // Maximum value of SPD digits.
103   Int_t                    fSDDHighLim;   // Maximum value of SDD digits.
104   Int_t                    fSSDHighLim;   // Maximum value of SSD digits.
105
106   Int_t                    fSPDScaleX[5]; // SPD cell-sizes along X for display of scaled-digits.
107   Int_t                    fSPDScaleZ[5]; // SPD cell-sizes along Z for display of scaled-digits.
108   Int_t                    fSDDScaleX[5]; // SDD cell-sizes along X for display of scaled-digits.
109   Int_t                    fSDDScaleZ[5]; // SDD cell-sizes along Z for display of scaled-digits.
110   Int_t                    fSSDScale [5]; // SSD cell-sizes for display of scaled-digits.
111
112   AliEveITSDigitsInfo();
113   virtual ~AliEveITSDigitsInfo();
114
115   void SetTree(TTree* tree);
116   void ReadRaw(AliRawReader* raw, Int_t mode);
117
118   TClonesArray* GetDigits(Int_t moduleID, Int_t detector);
119
120   void GetSPDLocalZ(Int_t j, Float_t& z);
121
122   void GetModuleIDs(AliEveITSModuleSelection* sel, std::vector<UInt_t>& ids);
123
124   virtual void Print(Option_t* opt="") const;
125
126   ClassDef(AliEveITSDigitsInfo, 1); // Stores ITS geometry information and event-data in format suitable for visualization.
127 }; // endclass AliEveITSDigitsInfo
128
129 inline void AliEveITSDigitsInfo::GetSPDLocalZ(Int_t j, Float_t& z)
130 {
131   z = fSPDZCoord[j];
132 }
133
134 #endif