new digitization and reconstruction corresponded to new data format
[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
31 UInt_t AliSTARTRawReader::UnpackWord(UInt_t packedWord, Int_t startBit, Int_t stopBit)
32 {
33   //This method unpacks a words of StopBit-StartBit+1 bits starting from "StopBits"  
34   UInt_t word;
35   UInt_t offSet;
36   Int_t length;
37   length=stopBit-startBit+1;
38   offSet=(UInt_t)TMath::Power(2,length)-1;
39   offSet<<=startBit;
40   word=packedWord&offSet;
41   word>>=startBit;
42   return word;
43 }
44 //---------------------------------------------------------------------------------------
45 void AliSTARTRawReader::NextThing()
46 {
47 // read the next raw digit
48 // returns kFALSE if there is no digit left
49   AliBitPacking *pack ;
50
51   UInt_t word, unpackword; 
52   Int_t time, adc, pmt;
53   TArrayI *timeTDC1 = new TArrayI(24);
54   TArrayI * chargeTDC1 = new TArrayI(24);
55   TArrayI *timeTDC2 = new TArrayI(24);
56   TArrayI *chargeTDC2 = new TArrayI(24);
57
58   fRawReader->Reset();
59   fRawReader->Select(13);
60  
61   if (!fRawReader->ReadHeader()){
62     Error("ReadSTARTRaw","Couldn't read header");
63     return;
64   }
65   AliSTARTdigit *fDigits = new AliSTARTdigit(); 
66   fTree->Branch("START","AliSTARTdigit",&fDigits,400,1);
67
68   fRawReader->ReadNextInt(word);
69   for (Int_t i=0; i<24; i++) //time LED
70     {
71       word=0;
72       unpackword=0;
73       fRawReader->ReadNextInt(word);
74       unpackword=pack->UnpackWord(word,0,5);
75       pmt=unpackword; 
76       word=0;
77       unpackword=0;
78       fRawReader->ReadNextInt(word);
79       unpackword=pack->UnpackWord(word,8,31);
80       time=unpackword;
81       timeTDC1->AddAt(time,pmt);
82       cout<<i<<" Led "<<time<<" ";
83       word=0;
84       unpackword=0;
85     }
86   cout<<endl;
87   for (Int_t i=0; i<24; i++) //time CFD
88     {
89       word=0;
90       unpackword=0;
91       fRawReader->ReadNextInt(word);
92       unpackword=pack->UnpackWord(word,0,5);
93       pmt=unpackword;
94       word=0;
95       unpackword=0;
96       fRawReader->ReadNextInt(word);
97       unpackword=pack->UnpackWord(word,8,31);
98       time=unpackword;
99       timeTDC2->AddAt(time,pmt);
100       cout<<i<<" CFD "<<time<<" ";
101       word=0;
102       unpackword=0;
103     } 
104   cout<<endl;
105
106   for (Int_t i=0; i<24; i++)
107     {
108       //  QTC
109       word=0;
110       unpackword=0;
111       fRawReader->ReadNextInt(word);
112       unpackword=pack->UnpackWord(word,0,5);
113       pmt=unpackword;
114       word=0;
115       unpackword=0;
116       fRawReader->ReadNextInt(word);
117       unpackword= pack->UnpackWord(word,8,31);
118       adc=unpackword; //
119       chargeTDC1->AddAt(adc,pmt);
120       cout<<i<<" amp1 "<<adc<<" ";
121
122       word=0;
123       unpackword=0;
124     }
125   cout<<endl;
126   
127    for (Int_t i=0; i<24; i++)   //QTC amplified
128      {
129       word=0;
130       unpackword=0;
131     
132       fRawReader->ReadNextInt(word);
133       unpackword=pack->UnpackWord(word,0,5);
134       pmt=unpackword;
135       word=0;
136       unpackword=0;
137       fRawReader->ReadNextInt(word);
138       unpackword= pack->UnpackWord(word,8,31);
139       adc=unpackword;  
140       chargeTDC2->AddAt(adc,pmt);
141        cout<<i<<" amp amp "<<adc<<" ";
142      }
143    cout<<endl;
144    fDigits->SetTime(*timeTDC2);
145    fDigits->SetADC(*chargeTDC1);
146  
147    fDigits->SetTimeAmp(*timeTDC1);
148    fDigits->SetADCAmp(*chargeTDC2);
149
150    word=0;
151    unpackword=0;
152     
153    fRawReader->ReadNextInt(word);
154    unpackword=pack->UnpackWord(word,0,5);
155    pmt=unpackword;
156
157    word=0;
158    unpackword=0;
159    
160    fRawReader->ReadNextInt(word);
161    unpackword=pack->UnpackWord(word,8,31);
162    time=unpackword;
163    fDigits->SetMeanTime(time);   
164     
165    // Best time right &left  
166    word=0;
167    unpackword=0;
168    
169    fRawReader->ReadNextInt(word);
170    unpackword=pack->UnpackWord(word,0,5);
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->SetTimeBestRight(time);   
180  
181
182    // best time left 
183    word=0;
184    unpackword=0;
185      
186    fRawReader->ReadNextInt(word);
187    unpackword=pack->UnpackWord(word,0,5);
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->SetTimeBestLeft(time);   
197    
198
199    // best time differece  
200     word=0;
201    unpackword=0;
202    
203    fRawReader->ReadNextInt(word);
204    unpackword=pack->UnpackWord(word,0,5);
205    pmt=unpackword;
206
207    word=0;
208    unpackword=0;
209    
210    fRawReader->ReadNextInt(word);
211    unpackword=pack->UnpackWord(word,8,31);
212    time=unpackword;
213    fDigits->SetDiffTime(time);   
214  
215  //  multiplicity 
216    word=0;
217    unpackword=0;
218    fRawReader->ReadNextInt(word);
219    unpackword=pack->UnpackWord(word,0,5);
220    pmt=unpackword;
221    word=0;
222    unpackword=0;
223    fRawReader->ReadNextInt(word);
224    unpackword=pack->UnpackWord(word,8,31);
225    time=unpackword;
226    fDigits->SetSumMult(time);   
227    
228     fTree->Fill();
229
230 }
231