]> git.uio.no Git - u/mrichter/AliRoot.git/blob - START/AliSTARTRawReader.cxx
Bugfix (C.Cheshkov)
[u/mrichter/AliRoot.git] / START / AliSTARTRawReader.cxx
1 #include "AliSTARTRawReader.h"
2 #include "AliSTARTRawData.h"
3 #include "AliSTARTdigit.h"
4 #include "AliBitPacking.h"
5
6 #include <Riostream.h>
7 #include "TMath.h"
8 #include "TH1F.h"
9 #include "TArrayI.h"
10 #include "AliLog.h"
11  
12 ClassImp(AliSTARTRawReader)
13   
14   AliSTARTRawReader::AliSTARTRawReader (AliRawReader *rawReader, TTree* tree)
15     :  TTask("STARTRawReader","read raw START data"),
16        fDigits(NULL),
17        fTree(tree),
18        fRawReader(rawReader)
19 {
20   //
21 // create an object to read STARTraw digits
22   AliDebug(1,"Start ");
23
24  
25 }
26  AliSTARTRawReader::~AliSTARTRawReader ()
27 {
28   // 
29 }
30
31 Bool_t  AliSTARTRawReader::Next()
32 {
33 // read the next raw digit
34 // returns kFALSE if there is no digit left
35   AliBitPacking *pack ;
36
37   UInt_t word, unpackword; 
38   Int_t time, adc, pmt;
39   TArrayI *timeTDC1 = new TArrayI(24);
40   TArrayI * chargeTDC1 = new TArrayI(24);
41   TArrayI *timeTDC2 = new TArrayI(24);
42   TArrayI *chargeTDC2 = new TArrayI(24);
43
44   fRawReader->Reset();
45   fRawReader->Select(13,0,1);
46  
47   
48   if (!fRawReader->ReadHeader()){
49     Error("ReadSTARTRaw","Couldn't read header");
50     return kFALSE;
51   }
52   if (fDigits == 0x0) fDigits = new AliSTARTdigit(); 
53   fTree->Branch("START","AliSTARTdigit",&fDigits,405,1);
54   if (!fRawReader->ReadNextInt(word)) return kFALSE;
55    
56   for (Int_t i=0; i<24; i++) //time LED
57     {
58       word=0;
59       unpackword=0;
60       fRawReader->ReadNextInt(word);
61        unpackword=pack->UnpackWord(word,0,8);
62       pmt=unpackword; 
63      
64       word=0;
65       unpackword=0;
66       fRawReader->ReadNextInt(word);
67       unpackword=pack->UnpackWord(word,8,31);
68       time=unpackword;
69       timeTDC1->AddAt(time,i);
70       word=0;
71       unpackword=0;
72     }
73
74   for (Int_t i=0; i<24; i++) //time CFD
75     {
76       word=0;
77       unpackword=0;
78       fRawReader->ReadNextInt(word);
79       unpackword=pack->UnpackWord(word,0,8);
80       pmt=unpackword;
81       word=0;
82       unpackword=0;
83       fRawReader->ReadNextInt(word);
84       unpackword=pack->UnpackWord(word,8,31);
85       time=unpackword;
86       timeTDC2->AddAt(time,pmt-24);
87       word=0;
88       unpackword=0;
89     } 
90
91
92   for (Int_t i=0; i<24; i++)
93     {
94       //  QTC
95       word=0;
96       unpackword=0;
97       fRawReader->ReadNextInt(word);
98       unpackword=pack->UnpackWord(word,0,8);
99       pmt=unpackword;
100       word=0;
101       unpackword=0;
102       fRawReader->ReadNextInt(word);
103       unpackword= pack->UnpackWord(word,8,31);
104       adc=unpackword; //
105       chargeTDC1->AddAt(adc,pmt-48);
106
107       word=0;
108       unpackword=0;
109     }
110   
111    for (Int_t i=0; i<24; i++)   //QTC amplified
112      {
113       word=0;
114       unpackword=0;
115     
116       fRawReader->ReadNextInt(word);
117       unpackword=pack->UnpackWord(word,0,8);
118       pmt=unpackword;
119       word=0;
120       unpackword=0;
121       fRawReader->ReadNextInt(word);
122       unpackword= pack->UnpackWord(word,8,31);
123       adc=unpackword;  
124       chargeTDC2->AddAt(adc,pmt-72);
125      }
126
127    fDigits->SetTime(*timeTDC2);
128    fDigits->SetADC(*chargeTDC1);
129  
130    fDigits->SetTimeAmp(*timeTDC1);
131    fDigits->SetADCAmp(*chargeTDC2);
132
133    word=0;
134    unpackword=0;
135     
136    fRawReader->ReadNextInt(word);
137    unpackword=pack->UnpackWord(word,0,8);
138    pmt=unpackword;
139
140    word=0;
141    unpackword=0;
142    
143    fRawReader->ReadNextInt(word);
144    unpackword=pack->UnpackWord(word,8,31);
145    time=unpackword;
146    fDigits->SetMeanTime(time);   
147     
148    // Best time right &left  
149    word=0;
150    unpackword=0;
151    
152    fRawReader->ReadNextInt(word);
153    unpackword=pack->UnpackWord(word,0,8);
154    pmt=unpackword;
155
156    word=0;
157    unpackword=0;
158
159    fRawReader->ReadNextInt(word);
160    unpackword=pack->UnpackWord(word,8,31);
161    time=unpackword;
162    fDigits->SetTimeBestRight(time);   
163  
164
165    // best time left 
166    word=0;
167    unpackword=0;
168      
169    fRawReader->ReadNextInt(word);
170    unpackword=pack->UnpackWord(word,0,8);
171    pmt=unpackword;
172
173    word=0;
174    unpackword=0;
175    
176    fRawReader->ReadNextInt(word);
177    unpackword=pack->UnpackWord(word,8,31);
178    time=unpackword;
179    fDigits->SetTimeBestLeft(time);   
180    
181
182    // best time differece  
183     word=0;
184    unpackword=0;
185    
186    fRawReader->ReadNextInt(word);
187    unpackword=pack->UnpackWord(word,0,8);
188    pmt=unpackword;
189
190    word=0;
191    unpackword=0;
192    
193    fRawReader->ReadNextInt(word);
194    unpackword=pack->UnpackWord(word,8,31);
195    time=unpackword;
196    fDigits->SetDiffTime(time);   
197  
198  //  multiplicity 
199    word=0;
200    unpackword=0;
201    fRawReader->ReadNextInt(word);
202    unpackword=pack->UnpackWord(word,0,8);
203    pmt=unpackword;
204    word=0;
205    unpackword=0;
206    fRawReader->ReadNextInt(word);
207    unpackword=pack->UnpackWord(word,8,31);
208    time=unpackword;
209    fDigits->SetSumMult(time);   
210       
211     fTree->Fill();
212
213     return kTRUE;
214 }
215