additional RecPoints implemented
[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        fTree(tree),
17        fRawReader(rawReader)
18 {
19   //
20 // create an object to read STARTraw digits
21   AliDebug(1,"Start ");
22
23  
24 }
25  AliSTARTRawReader::~AliSTARTRawReader ()
26 {
27   // 
28 }
29
30 Bool_t  AliSTARTRawReader::Next()
31 {
32 // read the next raw digit
33 // returns kFALSE if there is no digit left
34   AliBitPacking *pack ;
35
36   UInt_t word, unpackword; 
37   Int_t time, adc, pmt;
38   TArrayI *timeTDC1 = new TArrayI(24);
39   TArrayI * chargeTDC1 = new TArrayI(24);
40   TArrayI *timeTDC2 = new TArrayI(24);
41   TArrayI *chargeTDC2 = new TArrayI(24);
42
43   fRawReader->Reset();
44   fRawReader->Select(13,0,1);
45  
46   
47   if (!fRawReader->ReadHeader()){
48     Error("ReadSTARTRaw","Couldn't read header");
49     return kFALSE;
50   }
51   AliSTARTdigit *fDigits = new AliSTARTdigit(); 
52   fTree->Branch("START","AliSTARTdigit",&fDigits,400,1);
53   if (!fRawReader->ReadNextInt(word)) return kFALSE;
54    
55   for (Int_t i=0; i<24; i++) //time LED
56     {
57       word=0;
58       unpackword=0;
59       fRawReader->ReadNextInt(word);
60        unpackword=pack->UnpackWord(word,0,8);
61       pmt=unpackword; 
62      
63       word=0;
64       unpackword=0;
65       fRawReader->ReadNextInt(word);
66       unpackword=pack->UnpackWord(word,8,31);
67       time=unpackword;
68       timeTDC1->AddAt(time,i);
69       word=0;
70       unpackword=0;
71     }
72   cout<<endl;
73   for (Int_t i=0; i<24; i++) //time CFD
74     {
75       word=0;
76       unpackword=0;
77       fRawReader->ReadNextInt(word);
78       unpackword=pack->UnpackWord(word,0,8);
79       pmt=unpackword;
80       word=0;
81       unpackword=0;
82       fRawReader->ReadNextInt(word);
83       unpackword=pack->UnpackWord(word,8,31);
84       time=unpackword;
85       timeTDC2->AddAt(time,pmt-24);
86       word=0;
87       unpackword=0;
88     } 
89   cout<<endl;
90
91   for (Int_t i=0; i<24; i++)
92     {
93       //  QTC
94       word=0;
95       unpackword=0;
96       fRawReader->ReadNextInt(word);
97       unpackword=pack->UnpackWord(word,0,8);
98       pmt=unpackword;
99       word=0;
100       unpackword=0;
101       fRawReader->ReadNextInt(word);
102       unpackword= pack->UnpackWord(word,8,31);
103       adc=unpackword; //
104       chargeTDC1->AddAt(adc,pmt-48);
105
106       word=0;
107       unpackword=0;
108     }
109   cout<<endl;
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    cout<<endl;
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