]> git.uio.no Git - u/mrichter/AliRoot.git/blame - T0/AliT0RawReader.cxx
reconstruction with lookup table
[u/mrichter/AliRoot.git] / T0 / AliT0RawReader.cxx
CommitLineData
dc7ca31d 1#include "AliT0RawReader.h"
e0bba6cc 2#include "AliT0Parameters.h"
dc7ca31d 3#include "AliBitPacking.h"
4#include "TBits.h"
5
6#include <Riostream.h>
7#include "TMath.h"
8#include "TH1F.h"
9#include "TArrayI.h"
10#include "AliLog.h"
11
12ClassImp(AliT0RawReader)
13
e0bba6cc 14 AliT0RawReader::AliT0RawReader (AliRawReader *rawReader)
dc7ca31d 15 : TTask("T0RawReader","read raw T0 data"),
dc7ca31d 16 fRawReader(rawReader),
17 fData(NULL),
18 fPosition(0)
19{
20 //
21// create an object to read T0raw digits
22 AliDebug(1,"Start ");
dc7ca31d 23
24 fRawReader->Reset();
25 fRawReader->Select("T0");
26
27
28}
29 AliT0RawReader::~AliT0RawReader ()
30{
31 //
32}
33
34Bool_t AliT0RawReader::Next()
35{
36// read the next raw digit
37// returns kFALSE if there is no digit left
38//"LookUpTable":
39// Amplitude LED TRM=0; chain=0; TDC 0 -5 channel 0,2,4,6
40// Time CFD TRM=0; chain=0; TDC 6 - 11 channel 0,2,4,6
41// mean time TRM=0; chain=0; TDC 12 channel 0
42// T0A TRM=0; chain=0; TDC 12 channel 2
43// T0C TRM=0; chain=0; TDC 12 channel 4
44// vertex TRM=0; chain=0; TDC 12 channel 6
45// mult QTC0 TRM=0; chain=0; TDC 13 channel 0
46// mult QTC1 TRM=0; chain=0; TDC 13 channel 2
47
48// Charge QTC0 TRM=1; chain=0; TDC 0 -5 channel 0,2,4,6
49// Charge QTC1 TRM=1; chain=0; TDC 6 - 11 channel 0,2,4,6
50// T0A trigger TRM=1; chain=0; TDC 12 channel 0
51// T0C trigger TRM=1; chain=0; TDC 12 channel 2
52// vertex trigger TRM=1; chain=0; TDC 12 channel 4
53// trigger central TRM=1; chain=0; TDC 13 channel 0
54// tigger semicenral TRM=1; chain=0; TDC 13 channel 2
55//
56// allData array collect data from all channels in one :
57// allData[0] - allData[23] 24 CFD channels
58// allData[24] - allData[47] 24 LED channels
59// allData[48] mean (T0) signal
60// allData[49] time difference (vertex)
61
e0bba6cc 62
63 // if (fDigits == 0x0) fDigits = new AliT0digit();
64 // fTree->Branch("T0","AliT0digit",&fDigits,405,1);
65
dc7ca31d 66 UInt_t word;
67 Int_t time=0, itdc=0, ichannel=0;
68 Int_t numberOfWordsInTRM=0, iTRM=0;
e0bba6cc 69 Int_t tdcTime, koef,hit, meanTime, timeDiff ;
dc7ca31d 70
e0bba6cc 71
72
73 AliT0Parameters* param = AliT0Parameters::Instance(); //-->Zhenya
74 param->Init();
75
76 for ( Int_t k=0; k<110; k++) {
77 for ( Int_t jj=0; jj<5; jj++) {
78 fAllData[k][jj]=0;
79 }
80 }
81 do {
dc7ca31d 82 if (!fRawReader->ReadNextData(fData)) return kFALSE;
83 } while (fRawReader->GetDataSize() == 0);
84
85 // fPosition = GetPosition();
86 fPosition = 0;
87
88 //DRM header
89 for (Int_t i=0; i<4; i++) {
90 word = GetNextWord();
91 }
92 //TRMheader
93 word = GetNextWord();
94 numberOfWordsInTRM=AliBitPacking::UnpackWord(word,4,16);
95 iTRM=AliBitPacking::UnpackWord(word,0,3);
96
97 //chain header
e0bba6cc 98 Int_t ichain=0;
dc7ca31d 99 word = GetNextWord();
100
101 for (Int_t i=0; i<numberOfWordsInTRM; i++) {
102 word = GetNextWord();
103 tdcTime = AliBitPacking::UnpackWord(word,31,31);
104
105 if ( tdcTime == 1)
106 {
107 itdc=AliBitPacking::UnpackWord(word,24,27);
108 ichannel=AliBitPacking::UnpackWord(word,21,23);
109 time=AliBitPacking::UnpackWord(word,0,20);
e0bba6cc 110 // koef = itdc*4 + ichannel/2;
111 koef = param->GetChannel(iTRM,itdc,ichain,ichannel);
112 // cout<<" RawReader::Next ::"<<iTRM<<" "<<itdc<<" "<<ichain<<" "<<ichannel<<" "<< koef<<" "<<time<<endl;
113 if(fAllData[koef][0] == 0) fAllData[koef][0]=time; // yield only 1st particle
114
dc7ca31d 115 }
116 }
117 word = GetNextWord(); //chain trailer
118 word = GetNextWord(); //TRM trailer
119
120 //TRMheader
121 word = GetNextWord();
122 numberOfWordsInTRM=AliBitPacking::UnpackWord(word,4,16);
123 iTRM=AliBitPacking::UnpackWord(word,0,3);
e0bba6cc 124
dc7ca31d 125 //chain header
126 word = GetNextWord();
127
128 for (Int_t iword=0; iword<numberOfWordsInTRM; iword++) {
129 word = GetNextWord();
130 tdcTime = AliBitPacking::UnpackWord(word,31,31);
131
132 if ( tdcTime == 1)
133 {
134 itdc=AliBitPacking::UnpackWord(word,24,27);
135 ichannel=AliBitPacking::UnpackWord(word,21,23);
136 time=AliBitPacking::UnpackWord(word,0,20);
e0bba6cc 137 // koef = itdc*4 + ichannel/2;
138 koef = param->GetChannel(iTRM,itdc,ichain,ichannel);
139
140 if(fAllData[koef][0] == 0) fAllData[koef][0]=time;
141 // if(allData[koef+55] == 0) allData[koef+55]=time; // yield only 1st particle
dc7ca31d 142 }
143 }
e0bba6cc 144 meanTime = fAllData[49][0]; // T0 !!!!!!
145 timeDiff = fAllData[50][0];
dc7ca31d 146
147 word = GetNextWord();
148 word = GetNextWord();
dc7ca31d 149 return kTRUE;
150}
151//_____________________________________________________________________________
dc7ca31d 152Int_t AliT0RawReader::GetPosition()
153{
154 // Sets the position in the
155 // input stream
156 if (((fRawReader->GetDataSize() * 8) % 32) != 0)
157 AliFatal(Form("Incorrect raw data size ! %d words are found !",fRawReader->GetDataSize()));
158 return (fRawReader->GetDataSize() * 8) / 32;
159}
160//_____________________________________________________________________________
161UInt_t AliT0RawReader::GetNextWord()
162{
163 // Read the next 32 bit word in backward direction
164 // The input stream access is given by fData and fPosition
165
166
167 // fPosition--;
168 Int_t iBit = fPosition * 32;
169 Int_t iByte = iBit / 8;
170
171 UInt_t word = 0;
172 word = fData[iByte+3]<<24;
173 word |= fData[iByte+2]<<16;
174 word |= fData[iByte+1]<<8;
175 word |= fData[iByte];
176 fPosition++;
177
178 return word;
179
180}
181