ee74718b |
1 | #include "AliSTARTRawReader.h" |
2 | #include "AliSTARTRawData.h" |
3 | #include "AliRawReaderFile.h" |
4 | |
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 (): TTask("STARTRawReader","read raw data"), |
15 | fPMTId(-1), |
16 | fTimeTDC1(0), |
17 | fChargeADC1(0), |
18 | fTimeTDC2(0), |
19 | fChargeADC2(0) |
20 | { |
21 | // |
22 | // create an object to read STARTraw digits |
23 | AliDebug(1,"Start "); |
24 | fTimeTDC1 = new TArrayI(24); |
25 | fChargeADC1 = new TArrayI(24); |
26 | fTimeTDC2 = new TArrayI(24); |
27 | fChargeADC2 = new TArrayI(24); |
28 | |
29 | } |
30 | AliSTARTRawReader::~AliSTARTRawReader () |
31 | { |
32 | delete fTimeTDC1; |
33 | delete fTimeTDC2; |
34 | delete fChargeADC1 ; |
35 | delete fChargeADC2; |
36 | |
37 | } |
38 | //------------------------------------------------------------------------------------------------ |
39 | |
40 | UInt_t AliSTARTRawReader::UnpackWord(UInt_t packedWord, Int_t startBit, Int_t stopBit) |
41 | { |
42 | //This method unpacks a words of StopBit-StartBit+1 bits starting from "StopBits" |
43 | UInt_t word; |
44 | UInt_t offSet; |
45 | Int_t length; |
46 | length=stopBit-startBit+1; |
47 | offSet=(UInt_t)TMath::Power(2,length)-1; |
48 | offSet<<=startBit; |
49 | word=packedWord&offSet; |
50 | word>>=startBit; |
51 | return word; |
52 | } |
53 | //--------------------------------------------------------------------------------------- |
54 | Bool_t AliSTARTRawReader::NextThing( AliRawReader *fRawReader) |
55 | { |
56 | // read the next raw digit |
57 | // returns kFALSE if there is no digit left |
58 | |
59 | UInt_t word, unpackword; |
60 | UInt_t fADC, fTime; |
61 | fRawReader->Select(13); |
62 | |
63 | if (!fRawReader->ReadNextInt(fData)) return kFALSE; |
64 | |
65 | |
66 | Int_t size=fRawReader->GetDataSize(); |
67 | for (Int_t i=0; i<size/32; i++) |
68 | { |
69 | word=0; |
70 | unpackword=0; |
71 | fRawReader->ReadNextInt(word); |
72 | unpackword=UnpackWord(word,0,5); |
73 | fPMTId=unpackword; |
74 | word=0; |
75 | unpackword=0; |
76 | |
77 | fRawReader->ReadNextInt(word); |
78 | unpackword=UnpackWord(word,8,31); |
79 | fTime=unpackword; |
80 | fTimeTDC1->AddAt(fTime,fPMTId); |
81 | word=0; |
82 | unpackword=0; |
83 | |
84 | fRawReader->ReadNextInt(word); |
85 | unpackword=UnpackWord(word,0,5); |
86 | fPMTId=unpackword; |
87 | word=0; |
88 | unpackword=0; |
89 | |
90 | fRawReader->ReadNextInt(word); |
91 | |
92 | unpackword=UnpackWord(word,8,31); |
93 | fTime=unpackword; |
94 | fTimeTDC2->AddAt(fTime,fPMTId); |
95 | |
96 | word=0; |
97 | unpackword=0; |
98 | fRawReader->ReadNextInt(word); |
99 | unpackword=UnpackWord(word,0,5); |
100 | fPMTId=unpackword; |
101 | word=0; |
102 | unpackword=0; |
103 | |
104 | fRawReader->ReadNextInt(word); |
105 | unpackword= UnpackWord(word,8,31); |
106 | fADC=unpackword; |
107 | fChargeADC1 -> AddAt(fADC, fPMTId); |
108 | |
109 | word=0; |
110 | unpackword=0; |
111 | |
112 | fRawReader->ReadNextInt(word); |
113 | unpackword=UnpackWord(word,0,5); |
114 | fPMTId=unpackword; |
115 | |
116 | word=0; |
117 | unpackword=0; |
118 | fRawReader->ReadNextInt(word); |
119 | |
120 | unpackword= UnpackWord(word,8,31); |
121 | fADC=unpackword; |
122 | fChargeADC2 -> AddAt(fADC, fPMTId); |
123 | } |
124 | return kTRUE; |
125 | |
126 | } |
127 | |
128 | //-------------------------------------------- |
129 | void AliSTARTRawReader::GetTime (TArrayI &o) |
130 | { |
131 | // |
132 | Int_t i; |
133 | for (i=0; i<24; i++) |
134 | { |
135 | o[i]=fTimeTDC1->At(i); |
136 | } |
137 | } |
138 | //-------------------------------------------- |
139 | //-------------------------------------------- |
140 | void AliSTARTRawReader::GetADC (TArrayI &o) |
141 | { |
142 | // |
143 | Int_t i; |
144 | for (i=0; i<24; i++) |
145 | { |
146 | o[i]=fChargeADC1->At(i); |
147 | } |
148 | } |