]>
Commit | Line | Data |
---|---|---|
1 | #ifndef ALITPC_H | |
2 | #define ALITPC_H | |
3 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
4 | * See cxx source for full Copyright notice */ | |
5 | ||
6 | /* $Id$ */ | |
7 | ||
8 | //////////////////////////////////////////////// | |
9 | // Manager class for TPC // | |
10 | //////////////////////////////////////////////// | |
11 | ||
12 | class TFile; | |
13 | class TTree; | |
14 | #include <Htypes.h> | |
15 | #include <TMatrixFfwd.h> | |
16 | #include <TVector.h> | |
17 | ||
18 | class AliTPCDigitsArray; | |
19 | class AliTPCLoader; | |
20 | class AliTPCParam; | |
21 | class AliTPCTrackHitsV2; // M.I. | |
22 | class AliRawReader; | |
23 | class TTreeSRedirector; | |
24 | ||
25 | #include "AliDetector.h" | |
26 | #include "AliDigit.h" | |
27 | #include "AliHit.h" | |
28 | ||
29 | ||
30 | class AliTPC : public AliDetector { | |
31 | ||
32 | public: | |
33 | AliTPC(); | |
34 | AliTPC(const char *name, const char *title); | |
35 | ||
36 | virtual AliLoader* MakeLoader(const char* topfoldername); | |
37 | ||
38 | virtual ~AliTPC(); | |
39 | virtual void AddHit(Int_t a1, Int_t *a2, Float_t *a3); | |
40 | virtual void CreateGeometry() {} | |
41 | virtual void CreateMaterials(); | |
42 | virtual void AddAlignableVolumes() const {} | |
43 | ||
44 | virtual AliDigitizer* CreateDigitizer(AliRunDigitizer* manager) const; | |
45 | virtual void SDigits2Digits(){;} //MI change -cycling to production | |
46 | virtual void SDigits2Digits2(Int_t eventnumber=0); | |
47 | ||
48 | virtual void Hits2SDigits(); // MI - cycling around | |
49 | virtual void Hits2SDigits2(Int_t eventnumber=0); | |
50 | ||
51 | virtual void Hits2Digits(); | |
52 | virtual void Hits2Digits(Int_t eventnumber); //MI change | |
53 | virtual void Hits2DigitsSector(Int_t isec); //MI change | |
54 | virtual void Init(); | |
55 | virtual Int_t IsVersion() const =0; | |
56 | virtual void Digits2Raw(); | |
57 | virtual Bool_t Raw2SDigits(AliRawReader* rawReader); | |
58 | Int_t GetNsectors() const {return fNsectors;} | |
59 | virtual void ResetDigits(); | |
60 | virtual void SetSens(Int_t sens); | |
61 | virtual void SetSide(Float_t side); | |
62 | ||
63 | ||
64 | virtual void StepManager()=0; | |
65 | virtual void DrawDetector() const {} | |
66 | AliTPCDigitsArray* GetDigitsArray() {return fDigitsArray;} //MI change | |
67 | AliTPCParam *GetParam(){return fTPCParam;} // M.K, M.I changes | |
68 | void SetParam(AliTPCParam *param){fTPCParam=param;} // M.K, M.I changes | |
69 | void SetDigitsArray(AliTPCDigitsArray* param) {fDigitsArray=param;} //MI change | |
70 | ||
71 | // additional function neccesary for the new hits | |
72 | virtual void MakeBranch(Option_t *opt=" "); // | |
73 | virtual void SetTreeAddress(); | |
74 | virtual void SetTreeAddress2(); | |
75 | virtual void AddHit2(Int_t a1, Int_t *a2, Float_t *a3); // | |
76 | virtual void ResetHits(); | |
77 | virtual void ResetHits2(); | |
78 | virtual AliHit* FirstHit(Int_t track); | |
79 | virtual AliHit* NextHit(); | |
80 | virtual AliHit* FirstHit2(Int_t track); | |
81 | virtual AliHit* NextHit2(); | |
82 | virtual void FinishPrimary(); | |
83 | virtual void RemapTrackHitIDs(Int_t *map); | |
84 | void SetHitType(Int_t type){fHitType =type;} //set type of hit container | |
85 | void SetDigitsSwitch(Int_t sw){fDigitsSwitch = sw;} | |
86 | void SetDefSwitch(Int_t def){fDefaults = def;} | |
87 | Float_t GetNoise(); //get Current noise | |
88 | void GenerNoise(Int_t tablasize); // make noise table | |
89 | Bool_t IsSectorActive(Int_t sec) const; // check if the sector is active | |
90 | void SetActiveSectors(Int_t * sectors, Int_t n); //set active sectors | |
91 | Int_t GetHitType() const {return fHitType;} | |
92 | void SetActiveSectors(Int_t flag=1); //loop over al hits and set active only hitted sectors | |
93 | Bool_t TrackInVolume(Int_t id,Int_t track); //return true if current track is in volume | |
94 | void SetPrimaryIonisation(Bool_t flag = kTRUE) {fPrimaryIonisation = flag;} | |
95 | void SetGainFactor(Float_t gain){fGainFactor=gain;} //gas gain scaling factor | |
96 | Float_t GetGainFactor()const {return fGainFactor;}//gas gain scaling factor | |
97 | // static functions | |
98 | static AliTPCParam* LoadTPCParam(TFile *file); | |
99 | protected: | |
100 | Int_t fDefaults; // defaults switch | |
101 | Int_t fSens; // ISENS | |
102 | Int_t fNsectors; // Number of sectors in TPC | |
103 | //MI changes | |
104 | AliTPCDigitsArray * fDigitsArray; //! detector digit object | |
105 | AliTPCParam *fTPCParam; // pointer to TPC parameters | |
106 | AliTPCTrackHitsV2 *fTrackHits; //! hits for given track M.I. | |
107 | // AliTPCTrackHits *fTrackHitsOld; //! hits for given track M.I. MIold - | |
108 | ||
109 | Int_t fHitType; // if fNewHit = 1 old data structure if 2 new hits if 4 old MI stucture | |
110 | // 3 both types | |
111 | Int_t fDigitsSwitch; // digits type, 0->normal, 1->summable | |
112 | ||
113 | //MK changes | |
114 | ||
115 | Float_t fSide; // selects left(-1), right(+1), or both(0) sides of the TPC | |
116 | Bool_t fPrimaryIonisation; //switch between Fluka(true) and geant3(false) | |
117 | private: | |
118 | AliTPC(const AliTPC& t); | |
119 | AliTPC &operator = (const AliTPC & param); | |
120 | // | |
121 | void SetDefaults(); | |
122 | void DigitizeRow(Int_t irow,Int_t isec,TObjArray **rowTriplet); | |
123 | Float_t GetSignal(TObjArray *p1, Int_t ntr, TMatrixF *m1, | |
124 | TMatrixF *m2,Int_t *IndexRange); | |
125 | void GetList (Float_t label,Int_t np,TMatrixF *m,Int_t *IndexRange, | |
126 | Float_t **pList); | |
127 | void MakeSector(Int_t isec,Int_t nrows,TTree *TH,Stat_t ntracks,TObjArray **row); | |
128 | void TransportElectron(Float_t *xyz, Int_t *index); | |
129 | Int_t fCurrentIndex[4];// index[0] indicates coordinate system, | |
130 | // index[1] sector number, | |
131 | // index[2] pad row number | |
132 | // index[3] pad row number for which signal is calculated | |
133 | Int_t fNoiseDepth; //! noise table | |
134 | Float_t * fNoiseTable; //! table with noise | |
135 | Int_t fCurrentNoise; //! index of the noise in the noise table | |
136 | Bool_t* fActiveSectors; //! bool indicating which sectors are active | |
137 | Float_t fGainFactor; // scaling factor | |
138 | TTreeSRedirector *fDebugStreamer; //!debug streamer | |
139 | ClassDef(AliTPC,13) // Time Projection Chamber class | |
140 | }; | |
141 | ||
142 | ||
143 | //_____________________________________________________________________________ | |
144 | ||
145 | class AliTPChit : public AliHit { | |
146 | public: | |
147 | Int_t fSector; //sector number | |
148 | Int_t fPadRow; //Pad Row number | |
149 | Float_t fQ ; //charge | |
150 | Float_t fTime; //hit time | |
151 | ||
152 | public: | |
153 | AliTPChit(); | |
154 | AliTPChit(Int_t shunt, Int_t track, Int_t *vol, Float_t *hits); | |
155 | virtual ~AliTPChit() {} | |
156 | void SetX(Float_t x){fX = x;} | |
157 | void SetY(Float_t y){fY = y;} | |
158 | void SetZ(Float_t z){fZ = z;} | |
159 | ||
160 | Float_t Time() const {return fTime;} | |
161 | ||
162 | ClassDef(AliTPChit,3) // Time Projection Chamber hits | |
163 | }; | |
164 | ||
165 | ||
166 | #endif | |
167 | ||
168 | ||
169 | ||
170 | ||
171 | ||
172 | ||
173 | ||
174 | ||
175 |