Line data Source code
1 : #ifndef ALITOFCLUSTERFINDERV1_H
2 : #define ALITOFCLUSTERFINDERV1_H
3 : /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 : * See cxx source for full Copyright notice */
5 : // AliTOFClusterFinderV1 Class
6 : // Task: Transform digits/raw data to TOF Clusters, to fill TOF RecPoints
7 : // and feed TOF tracking
8 :
9 : #include "TObject.h"
10 : #include "TTask.h"
11 :
12 : #include "AliTOFGeometry.h"
13 : #include "AliTOFRawStream.h"
14 :
15 : class TClonesArray;
16 : class TTree;
17 :
18 : class AliRunLoader;
19 : class AliRawReader;
20 :
21 : class AliTOFcluster;
22 : class AliTOFcalib;
23 : class AliTOFDigitMap;
24 : class AliTOFRecoParam;
25 :
26 0 : class AliTOFselectedDigit : public TObject {
27 : public:
28 : AliTOFselectedDigit() :
29 : fTDC(0.),fADC(0.),fTOT(0.),fWeight(0.),fIndex(-1) {
30 : for (Int_t ii=0; ii<5; ii++) fDetectorIndex[ii]=-1;
31 : for (Int_t ii=0; ii<3; ii++) fTrackLabel[ii]=-1;
32 : };
33 : AliTOFselectedDigit(Int_t * const ind, Double_t h1, Double_t h2, Double_t h3, Double_t h4, Int_t idx, Int_t * const l):
34 0 : TObject(),
35 0 : fTDC(h1),fADC(h2),fTOT(h3),fWeight(h4),fIndex(idx) {
36 0 : for (Int_t ii=0; ii<5; ii++) fDetectorIndex[ii]=ind[ii];
37 0 : for (Int_t ii=0; ii<3; ii++) fTrackLabel[ii]=l[ii];
38 0 : };
39 : AliTOFselectedDigit(const AliTOFselectedDigit & source) :
40 : TObject(source),
41 : fTDC(source.fTDC),fADC(source.fADC),fTOT(source.fTOT),fWeight(source.fWeight),fIndex(source.fIndex)
42 : {
43 : for (Int_t ii=0; ii<5; ii++) fDetectorIndex[ii]=source.fDetectorIndex[ii];
44 : for (Int_t ii=0; ii<3; ii++) fTrackLabel[ii]=source.fTrackLabel[ii];
45 : };
46 : AliTOFselectedDigit & operator=(const AliTOFselectedDigit & source)
47 : { if (this == &source) return *this;
48 : TObject::operator=(source);
49 : for (Int_t ii=0; ii<5; ii++) fDetectorIndex[ii]=source.fDetectorIndex[ii];
50 : fTDC=source.fTDC;fADC=source.fADC;fTOT=source.fTOT;fWeight=source.fWeight;fIndex=source.fIndex;
51 : for (Int_t ii=0; ii<3; ii++) fTrackLabel[ii]=source.fTrackLabel[ii];
52 : return *this; };
53 :
54 0 : Double_t GetTDC() const {return fTDC;} // digit TOF
55 0 : Double_t GetADC() const {return fADC;} // digit ADC
56 0 : Double_t GetTOT() const {return fTOT;} // digit TOT
57 0 : Double_t GetWeight() const {return fWeight;} // digit weight
58 0 : Int_t GetTrackLabel(Int_t n) const {return fTrackLabel[n];} // Labels of tracks in digit
59 0 : Int_t GetDetectorIndex(Int_t n) const {return fDetectorIndex[n];} // Digit Detector Index n
60 0 : Int_t GetIndex() const {return fIndex;} // Digit Index
61 :
62 : private:
63 :
64 : Int_t fDetectorIndex[5]; //digit detector indices (sector, plate, strip, padX, padZ)
65 : Double_t fTDC; //TDC count
66 : Double_t fADC; //ADC count
67 : Double_t fTOT; //TOT count
68 : Double_t fWeight; //weight
69 : Int_t fIndex; //index of the digit in the TOF digit tree
70 : Int_t fTrackLabel[3]; //track labels
71 :
72 : };
73 :
74 :
75 : class AliTOFClusterFinderV1 : public TTask
76 : {
77 :
78 : enum {kTofMaxCluster=77777}; //maximal number of the TOF clusters
79 :
80 : public:
81 :
82 : AliTOFClusterFinderV1(AliTOFcalib *calib);
83 : AliTOFClusterFinderV1(const AliTOFClusterFinderV1 &source); // copy constructor
84 : AliTOFClusterFinderV1& operator=(const AliTOFClusterFinderV1 &source); // ass. op.
85 : virtual ~AliTOFClusterFinderV1();
86 :
87 : void Digits2RecPoints(TTree* digitsTree, TTree* clusterTree);
88 : void Digits2RecPoints(AliRawReader *rawReader, TTree *clustersTree);
89 : void Raw2Digits(AliRawReader *rawReader, TTree* digitsTree);
90 :
91 : AliTOFClusterFinderV1(AliRunLoader* runLoader, AliTOFcalib *calib);
92 : void Digits2RecPoints(Int_t iEvent);
93 : void Digits2RecPoints(Int_t ievt, AliRawReader *rawReader);
94 : void Raw2Digits(Int_t ievt, AliRawReader *rawReader);
95 :
96 : void FillRecPoint();
97 : void ResetRecpoint();
98 : void ResetDigits();
99 0 : void SetVerbose(Int_t Verbose){fVerbose=Verbose;} // To set the verbose level
100 4 : void SetDecoderVersion(Int_t version){fDecoderVersion=version;} // To set the decoder version
101 0 : Bool_t GetDecoderVersion() const {return fDecoderVersion;} // To get the decoder version
102 : //UShort_t GetClusterVolIndex(Int_t *ind) const; //Volume Id getter
103 : void GetClusterPars(Int_t *ind, Double_t *pos, Double_t *cov) const; //cluster par getter
104 : void GetClusterPars(/*Bool_t check,*/ Int_t counter, Int_t **ind, Double_t *weight,
105 : Double_t *pos, Double_t *cov) const; //cluster par getter
106 :
107 : void FindOnePadClusterPerStrip(Int_t nSector, Int_t nPlate, Int_t nStrip);
108 : void FindClustersWithoutTOT(Int_t nSector, Int_t nPlate, Int_t nStrip);
109 : void FindClustersPerStrip(Int_t nSector, Int_t nPlate, Int_t nStrip, Int_t group);
110 :
111 : void FindClusters34(Int_t nSector, Int_t nPlate, Int_t nStrip);
112 : void FindClusters23(Int_t nSector, Int_t nPlate, Int_t nStrip);
113 : void FindClusters24(Int_t nSector, Int_t nPlate, Int_t nStrip);
114 :
115 0 : void SetMaxDeltaTime(Int_t a) {fMaxDeltaTime = a;}; // to set deltaTime [bin number]
116 0 : void SetMaxDeltaTime(Float_t a) {fMaxDeltaTime = (Int_t)(a/AliTOFGeometry::TdcBinWidth());}; // to set deltaTime [ps]
117 0 : Int_t GetMaxDeltaTime() const {return fMaxDeltaTime;};
118 0 : Int_t GetNumberOfTOFclusters() const {return fNumberOfTofClusters;}
119 0 : Int_t GetNumberOfTOFtrgPads() const {return fNumberOfTofTrgPads;}
120 :
121 :
122 0 : void SetCalibrateFlag(Bool_t dummy) {fCalibrateTOFtimes = dummy;};
123 0 : Bool_t GetCalibrateFlag() const {return fCalibrateTOFtimes;};
124 :
125 : protected:
126 :
127 : AliRunLoader *fRunLoader; // Pointer to Run Loader
128 : AliTOFcluster *fTofClusters[kTofMaxCluster]; // pointers to the TOF clusters
129 : TClonesArray *fDigits; // List of digits
130 : TClonesArray *fRecPoints; // List of reconstructed points
131 : Int_t fNumberOfTofClusters; // Number of TOF Clusters
132 : Int_t fNumberOfTofDigits; // Number of TOF Digits
133 : Int_t fNumberOfTofTrgPads; // Number of TOF trigger pads
134 :
135 : private:
136 :
137 : const AliTOFRecoParam* fkRecoParam; // pointer to TOF reconstruction parameters
138 :
139 : Int_t fMaxDeltaTime; // max time difference in between two tof
140 : // measurements for two neighbouring pads
141 :
142 : Int_t InsertCluster(AliTOFcluster *tofCluster); // Fills TofClusters Array
143 : Int_t FindClusterIndex(Double_t z) const; // Returns cluster index
144 : Bool_t MakeSlewingCorrection(Int_t *detectorIndex, Int_t tofDigitToT, Int_t tofDigitTdc,
145 : Int_t &tdcCorr);
146 : void TOFclusterError(/*Bool_t check,*/ Int_t counter, Int_t **ind, Double_t *weight,
147 : Double_t ppos[], Double_t cov[]) const;
148 :
149 : void AverageCalculations(Int_t number, Float_t *interestingX,
150 : Float_t *interestingY, Float_t *interestingZ,
151 : Double_t *interestingTOF, Double_t *interestingTOT,
152 : Double_t *interestingADC, Double_t *interestingWeight,
153 : Int_t *parTOF, Double_t *posClus, Bool_t &check);
154 :
155 : Int_t fVerbose; // Verbose level (0:no msg, 1:msg, 2:digits in txt files)
156 : Bool_t fDecoderVersion; // setting whether to use the new decoder version
157 : // -true -> new version
158 : // -false ->old version (default value!!)
159 : AliTOFcalib *fTOFcalib; // pointer to the TOF calibration info
160 : AliTOFDigitMap* fTOFdigitMap; // TOF digit map pointer
161 : AliTOFGeometry *fTOFGeometry; // pointer to the TOF geometry
162 : TTree *fTOFdigits; // pointer to the TOF digit tree
163 :
164 : AliTOFRawStream fTOFRawStream; // AliTOFRawStream variable
165 :
166 : Bool_t fCalibrateTOFtimes; // used for check
167 :
168 30 : ClassDef(AliTOFClusterFinderV1,6) // To run TOF clustering
169 : };
170 : #endif
171 :
|