2 //======================================================================
3 #ifndef ALIITSTESTBEAMDATA_H
4 #define ALIITSTESTBEAMDATA_H
6 /* Copyright (c) 1998-2001, ALICE Experiment at CERN, All rights reserved *
7 * See cxx source for full Copyright notice */
13 // Pure virtual class, no data
14 class AliITSTestBeamData{
16 AliITSTestBeamData(){};
17 virtual ~AliITSTestBeamData(){};
18 virtual Int_t SizeOf(){return 0;}
19 virtual Double_t Swap(Double_t a){union{Double_t b;UChar_t c[8];}d;d.b=a;
20 Swapit(8,d.c);return d.b;};
21 virtual UInt_t Swap(UInt_t a){union{UInt_t b;UChar_t c[4];}d;d.b=a;
22 Swapit(4,d.c);return d.b;};
23 static void Swapit(Int_t i,UChar_t *a);
24 enum {kData,kHead,kTail,kAbort,kFail};
29 //======================================================================
30 #ifndef ALIITSSPDTESTBEAMHEADER_H
31 #define ALIITSSPDTESTBEAMHEADER_H
35 /* Copyright (c) 1998-2001, ALICE Experiment at CERN, All rights reserved *
36 * See cxx source for full Copyright notice */
38 class AliITSspdTestBeamHeader : public AliITSTestBeamData{
40 AliITSspdTestBeamHeader(){fUnion=0;};
41 AliITSspdTestBeamHeader(UChar_t *f){SetBuffer(f);}
42 virtual ~AliITSspdTestBeamHeader(){fUnion=0;};
43 virtual void Print(ostream *os);
44 virtual Int_t GetNumberOfEvents(){return Swap(fUnion->fHead.fNEvents);};
45 virtual Int_t GetBuffSize(Int_t i=0){
46 return Swap(fUnion->fHead.fBuffSize[i]);};
47 virtual Int_t GetTestPulse(){return Swap(fUnion->fHead.fTestPulse);};
48 virtual Int_t GetTrigger(Int_t i=0){
49 return Swap(fUnion->fHead.fTrigger[i]);};
50 virtual Int_t GetTriggerMode(){return Swap(fUnion->fHead.fTriggerMode);};
51 virtual Int_t GetBurstSize(){return Swap(fUnion->fHead.fBurstSize);};
52 virtual Double_t GetVersion(){return Swap(fUnion->fHead.fVersion);}
53 virtual Int_t SizeOf(){return sizeof(union headder);};
54 virtual void SetBuffer(UChar_t *f){
55 fUnion=(AliITSspdTestBeamHeader::headder*)f;}
56 virtual UChar_t *GetBuffer(){return fUnion->fBuf;}
57 virtual Char_t *GetDate(){return fUnion->fHead.fDate;}
58 virtual Char_t *GetTime(){return fUnion->fHead.fTime;}
62 // Double_t must be 8 bytes long, Char_t 1 byte long,
63 // Int_t 4 bytes long. 8*1+4*26+1*(2*12+3*20+3*44+3*8192)=24904 by
64 Double_t fVersion; // Version number
65 Char_t fDate[12];// Date Field
66 Char_t fTime[12];// Time Field
67 UInt_t fBuffSize[3]; // Buffer Sizes
68 UInt_t fTestPulse; // Test Pulse flag
69 UInt_t fTrigger[3]; // Array of triggers
70 UInt_t fTriggerMode; // Trigger mode flag
71 UInt_t fBurstSize; // Burst Size
72 UInt_t fNEvents; // Number of event to write
74 UChar_t fMBDACS[3][20]; //
75 UChar_t fA1DACS[3][44]; //
76 UChar_t fA12Matrix[3][8192]; //
81 ostream &operator<<(ostream &os,AliITSspdTestBeamHeader &source);
83 //----------------------------------------------------------------------
84 #ifndef ALIITSSPDTESTBEAMTAIL_H
85 #define ALIITSSPDTESTBEAMTAIL_H
87 /* Copyright (c) 1998-2001, ALICE Experiment at CERN, All rights reserved *
88 * See cxx source for full Copyright notice */
91 class AliITSspdTestBeamTail : public AliITSTestBeamData{
93 AliITSspdTestBeamTail(){fUnion=0;};
94 AliITSspdTestBeamTail(UChar_t *f){SetBuffer(f);}
95 virtual ~AliITSspdTestBeamTail(){fUnion=0;};
96 virtual Int_t GetNumberOfEvents(){return Swap(fUnion->fTail.fEvents);};
97 virtual Int_t GetTermMode(){return Swap(fUnion->fTail.fTermMode);};
98 virtual Int_t SizeOf(){return sizeof(union tail);}
99 virtual void Print(ostream *os);
100 virtual void SetBuffer(UChar_t *f){fUnion=(AliITSspdTestBeamTail::tail*)f;}
104 // Char_t 1 byte long,
105 // UInt_t 4 bytes long. size = 4+4+12*1+12*1 = 32 bytes
106 UInt_t fEvents; // number of events written
107 UInt_t fTermMode;// Termination flag
108 Char_t fDate[12];// Date Field
109 Char_t fTime[12];// Time Field
114 ostream &operator<<(ostream &os,AliITSspdTestBeamTail &source);
116 //----------------------------------------------------------------------
117 #ifndef ALIITSSPDTESTBEAMBURST_H
118 #define ALIITSSPDTESTBEAMBURST_H
120 /* Copyright (c) 1998-2001, ALICE Experiment at CERN, All rights reserved *
121 * See cxx source for full Copyright notice */
124 class AliITSspdTestBeamBurst : public AliITSTestBeamData{
126 AliITSspdTestBeamBurst(){fUnion=0;};
127 AliITSspdTestBeamBurst(UChar_t *f){SetBuffer(f);}
128 virtual ~AliITSspdTestBeamBurst(){fUnion=0;};
129 virtual Int_t GetEventNumber(){return Swap(fUnion->fBrst.fNumber);};
130 virtual Int_t GetTransfers(){return Swap(fUnion->fBrst.fTransfers);};
131 virtual Int_t SizeOf(){return sizeof(union tail);}
132 virtual void Print(ostream *os);
133 virtual void SetBuffer(UChar_t *f){
134 fUnion=(AliITSspdTestBeamBurst::tail*)f;}
138 // UInt_t 4 bytes long.
139 UInt_t fNumber; // Burst Number
140 UInt_t fTransfers;// Number of Transfers
142 ULong64_t fBuf; // a strictly 64 bit long unsinged int
145 ostream &operator<<(ostream &os,AliITSspdTestBeamBurst &source);
147 //----------------------------------------------------------------------
148 #ifndef ALIITSSPDTESTBEAMDATA_H
149 #define ALIITSSPDTESTBEAMDATA_H
151 /* Copyright (c) 1998-2001, ALICE Experiment at CERN, All rights reserved *
152 * See cxx source for full Copyright notice */
155 class AliITSspdTestBeamData : public AliITSTestBeamData {
158 AliITSspdTestBeamData(){fUnion=0;};
159 AliITSspdTestBeamData(UChar_t *f){SetBuffer(f);}
160 virtual Int_t SizeOf(){return sizeof(union data);}
161 virtual ~AliITSspdTestBeamData(){};
163 virtual Bool_t IsHeader(Int_t i=0){return ((fUnion+i)->fDataH.fFlag==2||
164 (fUnion+i)->fDataH.fFlag==3);}
165 virtual Bool_t IsData(Int_t i=0){return ((fUnion+i)->fDataD.fFlag>3)&&
166 ((fUnion+i)->fDataD.fFlag<8);}
167 virtual Bool_t IsTrailer(Int_t i=0){return ((fUnion+i)->fDataT.fFlag==0);}
168 virtual Bool_t IsAbort(Int_t i=0){return ((fUnion+i)->fDataA.fFlag==1);}
169 virtual Int_t Mode(Int_t i=0){if(IsData(i)) return kData;
170 else if(IsHeader(i)) return kHead;
171 else if(IsTrailer(i)) return kTail;
172 else if(IsAbort(i)) return kAbort;
174 virtual Int_t TransWordCount(){if(IsTrailer()||IsAbort())
175 return fUnion->fDataT.fTrans;
177 virtual Int_t EventCounter(){
178 if(IsHeader()) return fUnion->fDataH.fEventSync;else return -1;}
179 virtual Int_t Chip(Int_t i=0){if(IsData())
180 return (fUnion+i)->fDataD.fChip; else return -1;}
181 virtual Int_t Row(Int_t i=0) {if(IsData())
182 return (fUnion+i)->fDataD.fRow; else return -1;}
183 virtual Int_t Colm(Int_t i=0){if(IsData())
184 return (fUnion+i)->fDataD.fColm;else return -1;}
185 virtual void Data(Int_t &ch,Int_t &rw,Int_t &cl,Int_t i=0){
186 ch=Chip(i);rw=Row(i);cl=Colm(i);}
187 virtual void Print(ostream *os,Int_t i=0);
188 virtual void SetBuffer(UChar_t *f){fUnion=(AliITSspdTestBeamData::data*)f;}
191 struct { // Definingthe fDataH bit field
192 unsigned fDate:11; // Not Used
193 unsigned fEventSync:6;// Event syncronization counter
194 unsigned fFlag:3; // =2or3 Header
195 unsigned fPadding:12; // Not used
197 struct { // Definingthe fDataD bit field
198 unsigned fColm:5; // Pixel (Hit) Column Address
199 unsigned fRow:8; // Pixel Row Adress
200 unsigned fChip:4; // Pixel Chip Address
201 unsigned fFlag:3; // =4or5or6or7 Data
202 unsigned fPadding:12; // Not used
204 struct { // Definingthe fDataT bit field
205 unsigned fTrans:17; // Transmitted word count
206 unsigned fFlag:3; // =0 Trialer
207 unsigned fPadding:12; // Not used
209 struct { // Definingthe fDataA bit field
210 unsigned fTrans:17; // Transmitted word count
211 unsigned fFlag:3; // =1 Abort
212 unsigned fPadding:12; // Not used
218 ostream &operator<<(ostream &os,AliITSspdTestBeamData &source);
220 //======================================================================
221 #ifndef ALIITSSPDTESTBEAM_H
222 #define ALIITSSPDTESTBEAM_H
224 /* Copyright (c) 1998-2001, ALICE Experiment at CERN, All rights reserved *
225 * See cxx source for full Copyright notice */
231 class AliITSspdTestBeamHeader;
232 class AliITSspdTestBeamTail;
233 class AliITSspdTestBeamBurst;
234 class AliITSspdTestBeamData;
237 class AliITSspdTestBeam : public TTask{
240 AliITSspdTestBeam(const Char_t *filename,const Char_t *opt="2002",
242 virtual ~AliITSspdTestBeam();
244 virtual Int_t OpenInputFile(const Char_t *filename,Int_t start=0,
246 virtual Int_t Read(Int_t i=0);
247 virtual Int_t Decode();
248 virtual Int_t DecodeModule(Int_t pilot,Int_t Chip);
249 virtual Int_t DecodeColumn(Int_t pilot,Int_t Chip,Int_t Colm);
250 virtual void Digitize(Int_t evnt);
251 virtual void SetLoader(AliLoader *loader) {fLoader = loader;}
252 virtual void SetITS(AliITS *its) {fITS = its;}
253 virtual Int_t GetNumberOfPilots(){return 3;}
254 virtual Int_t GetNumberOfEvents(){return fNEvents;}
255 virtual void PrintHeadder(ostream *os = &cout);
256 virtual void PrintTrailer(ostream *os = &cout);
257 virtual void PrintBurstInfo(Int_t i,ostream *os=&cout);
258 virtual void PrintEventData(Int_t i,ostream *os=&cout);
259 virtual void PrintEventHead(Int_t i,ostream *os=&cout);
260 virtual void PrintEventTail(Int_t i,ostream *os=&cout);
262 void SetTerminationWord(){fTermination=0xf0d8ffff;}
269 void DeletefBrstSize();
270 void DeletefBuff(){delete[] fBuff;};
271 void DeletefITS(){fITS=0;}
272 void DeletefNeventsStart(){delete[] fNeventsStart;}
273 void DeletefNeventsEnd(){delete[] fNeventsEnd;}
275 AliITSspdTestBeamHeader fRH; //! Run Header
276 AliITSspdTestBeamTail fRT; //! Run Trailer
277 Int_t fNBrst; //! Number of burts (size of array).
278 Int_t **fBrstSize; //! Size of each burst for each pilot
279 AliITSspdTestBeamBurst **fBrst; //! Array of bursts.
280 Int_t **fNData; //! array of the number of data points
281 AliITSspdTestBeamData ***fData; //! Data
282 AliITSspdTestBeamData ***fHData; //! pointer to headers
283 AliITSspdTestBeamData ***fTData; //! pointer to Tail and Aborts
284 UInt_t fTermination; //! Termination word
285 Int_t fNEvents; // Number of events in file
286 Int_t fBuffSize; // Read Buffere Size
287 UChar_t *fBuff; // Read buffer
288 Int_t fVersion; // Test Beam Version number
289 AliITS *fITS; // Pointer to the ITS.
290 AliLoader *fLoader; //! Pointer to AliITSLoader.
291 Int_t fNfiles; // Number of input files to read from
292 Int_t fMaxFiles; // The size of the pointer array fFiles.
293 ifstream **fFiles; //! Array of Pointer to the input streams
294 Int_t *fNeventsStart; // Starting event number for each file
295 Int_t *fNeventsEnd; // Ending number of events for each file.
296 ClassDef(AliITSspdTestBeam,1) // Task to read SPD test beam data