]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ITS/AliITSspdTestBeam.h
Bug fix for SDD Test Beam simulation
[u/mrichter/AliRoot.git] / ITS / AliITSspdTestBeam.h
CommitLineData
37c3bb97 1#include <Rtypes.h>
5590a2e3 2#ifndef ALIITSSPDTESTBEAM_H
3#define ALIITSSPDTESTBEAM_H
4
5/* Copyright (c) 1998-2001, ALICE Experiment at CERN, All rights reserved *
6 * See cxx source for full Copyright notice */
7
8#include <TTask.h>
9
10//class ifstream;
11class AliITS;
12class AliITSspdTestBeamHeader;
13class AliITSspdTestBeamTail;
14class AliITSspdTestBeamBurst;
15class AliITSspdTestBeamData;
16
17class AliITSspdTestBeam : public TTask{
18 public:
19 AliITSspdTestBeam();
20 AliITSspdTestBeam(const Char_t *filename,const Char_t *opt="2002",
21 AliITS *its=0);
22 virtual ~AliITSspdTestBeam();
23 //
24 virtual Int_t OpenInputFile(const Char_t *filename,Int_t start=0,
25 Int_t end=-1);
26 virtual Int_t Read(Int_t i=0);
27 virtual Int_t Decode();
28 virtual Int_t GetNumberOfPilots(){return 3;}
29 private:
30 void SetTerminationWord(){fTermination=0xffffd9f0;}
31 //
32 AliITSspdTestBeamHeader *fRH; //! Run Header
33 AliITSspdTestBeamTail *fRT; //! Run Trailer
34 Int_t fNBrst; //! Number of burts (size of array).
35 Int_t **fBrstSize; //! Size of each burst for each pilot
36 AliITSspdTestBeamBurst **fBrst; //! Array of bursts.
37 Int_t **fNData; //! array of the number of data points
38 AliITSspdTestBeamData ***fData; //! Data
39 AliITSspdTestBeamData ***fHData; //! pointer to headers
40 AliITSspdTestBeamData ***fTData; //! pointer to Tail and Aborts
41 UInt_t fTermination; //! Termination word
42 Int_t fNEvents; // Number of events in file
43 Int_t fBuffSize; // Read Buffere Size
44 UChar_t *fBuff; // Read buffer
45 AliITS *fITS; // Pointer to the ITS.
46 Int_t fNfiles; // Number of input files to read from
47 Int_t fMaxFiles; // The size of the pointer array fFiles.
48 ifstream **fFiles; //! Array of Pointer to the input streams
49 Int_t *fNeventsStart; // Starting event number for each file
50 Int_t *fNeventsEnd; // Ending number of events for each file.
51 ClassDef(AliITSspdTestBeam,1) // Task to read SPD test beam data
52};
53#endif
37c3bb97 54//======================================================================
55#ifndef ALIITSTESTBEAMDATA_H
56#define ALIITSTESTBEAMDATA_H
57
58/* Copyright (c) 1998-2001, ALICE Experiment at CERN, All rights reserved *
59 * See cxx source for full Copyright notice */
60
61/*
62 $Id$
63 */
64
65// Pure virtual class, no data
66class AliITSTestBeamData{
67 public:
68 AliITSTestBeamData(){};
69 virtual ~AliITSTestBeamData(){};
70 virtual Int_t SizeOf(){return 0;}
37c3bb97 71 enum {kData,kHead,kTail,kAbort,kFail};
72 private:
73};
74
75#endif
76//======================================================================
77#ifndef ALIITSSPDTESTBEAMHEADER_H
78#define ALIITSSPDTESTBEAMHEADER_H
79
80//class ostream;
81
82/* Copyright (c) 1998-2001, ALICE Experiment at CERN, All rights reserved *
83 * See cxx source for full Copyright notice */
84
85class AliITSspdTestBeamHeader : public AliITSTestBeamData{
86 public:
5590a2e3 87 AliITSspdTestBeamHeader(){};
88 virtual ~AliITSspdTestBeamHeader(){};
37c3bb97 89 virtual void Print(ostream *os);
5590a2e3 90 virtual Int_t GetNumberOfEvents(){return fUnion.fHead.fNEvents;};
91 virtual Int_t GetBurstSize(Int_t i=0){return fUnion.fHead.fBuffSize[i];};
92 virtual Int_t SizeOf(){return sizeof(AliITSspdTestBeamHeader);};
37c3bb97 93 private:
94 union headder{
95 struct {
96 // Double_t must be 8 bytes long, Char_t 1 byte long,
97 // Int_t 4 bytes long. 8*1+4*26+1*(2*12+3*20+3*44+3*8192)=24904 by
98 Double_t fVersion; // Version number
99 Char_t fDate[12];// Date Field
100 Char_t fTime[12];// Time Field
101 UInt_t fBuffSize[3]; // Buffer Sizes
102 UInt_t fTestPulse; // Test Pulse flag
103 UInt_t fTrigger[3]; // Array of triggers
104 UInt_t fTriggerMode; // Trigger mode flag
105 UInt_t fBurstSize; // Burst Size
106 UInt_t fNEvents; // Number of event to write
107 UInt_t fRes[16]; //
108 UChar_t fMBDACS[3][20]; //
109 UChar_t fA1DACS[3][44]; //
110 UChar_t fA12Matrix[3][8192]; //
111 } fHead;
112 UChar_t fBuf[24904];
5590a2e3 113 } fUnion;
37c3bb97 114};
115ostream &operator<<(ostream &os,AliITSspdTestBeamHeader &source);
116#endif
117//----------------------------------------------------------------------
118#ifndef ALIITSSPDTESTBEAMTAIL_H
119#define ALIITSSPDTESTBEAMTAIL_H
120
121/* Copyright (c) 1998-2001, ALICE Experiment at CERN, All rights reserved *
122 * See cxx source for full Copyright notice */
123//class ostream;
124
125class AliITSspdTestBeamTail : public AliITSTestBeamData{
126 public:
5590a2e3 127 AliITSspdTestBeamTail(){};
128 virtual ~AliITSspdTestBeamTail(){};
129 virtual Int_t SizeOf(){return sizeof(AliITSspdTestBeamTail);}
37c3bb97 130 virtual void Print(ostream *os);
37c3bb97 131 private:
132 union tail{
133 struct {
134 // Char_t 1 byte long,
135 // UInt_t 4 bytes long. size = 4+4+12*1+12*1 = 32 bytes
136 UInt_t fEvents; // number of events written
137 UInt_t fTermMode;// Termination flag
138 Char_t fDate[12];// Date Field
139 Char_t fTime[12];// Time Field
140 } fTail;
141 UChar_t fBuf[32];
5590a2e3 142 } fUnion;
37c3bb97 143};
144ostream &operator<<(ostream &os,AliITSspdTestBeamTail &source);
145#endif
146//----------------------------------------------------------------------
147#ifndef ALIITSSPDTESTBEAMBURST_H
148#define ALIITSSPDTESTBEAMBURST_H
149
150/* Copyright (c) 1998-2001, ALICE Experiment at CERN, All rights reserved *
151 * See cxx source for full Copyright notice */
152//class ostream;
153
154class AliITSspdTestBeamBurst : public AliITSTestBeamData{
155 public:
5590a2e3 156 AliITSspdTestBeamBurst(){};
157 virtual ~AliITSspdTestBeamBurst(){};
158 virtual Int_t SizeOf(){return sizeof(AliITSspdTestBeamBurst);}
37c3bb97 159 virtual void Print(ostream *os);
37c3bb97 160 private:
161 union tail{
162 struct {
163 // UInt_t 4 bytes long.
164 UInt_t fNumber; // Burst Number
165 UInt_t fTransfers;// Number of Transfers
166 } fBrst;
167 ULong64_t fBuf; // a strictly 64 bit long unsinged int
5590a2e3 168 } fUnion;
37c3bb97 169};
170ostream &operator<<(ostream &os,AliITSspdTestBeamBurst &source);
171#endif
172//----------------------------------------------------------------------
173#ifndef ALIITSSPDTESTBEAMDATA_H
174#define ALIITSSPDTESTBEAMDATA_H
175
176/* Copyright (c) 1998-2001, ALICE Experiment at CERN, All rights reserved *
177 * See cxx source for full Copyright notice */
178//class ostream;
179
180class AliITSspdTestBeamData : public AliITSTestBeamData {
181 public:
182 //
5590a2e3 183 AliITSspdTestBeamData(){};
184 //AliITSspdTestBeamData(UInt_t *i){SetAddress(i);}
185 virtual Int_t SizeOf(){return sizeof(AliITSspdTestBeamData);}
37c3bb97 186 virtual ~AliITSspdTestBeamData(){};
187 //
5590a2e3 188 virtual Bool_t IsHeader(){return (fUnion.fDataH.fFlag==2||
189 fUnion.fDataH.fFlag==3);}
190 virtual Bool_t IsData(){return (fUnion.fDataD.fFlag>3)&&
191 (fUnion.fDataD.fFlag<8);}
192 virtual Bool_t IsTrailer(){return (fUnion.fDataT.fFlag==0);}
193 virtual Bool_t IsAbort(){return (fUnion.fDataA.fFlag==1);}
194 virtual Int_t Mode(){if(IsData()) return kData;
195 else if(IsHeader()) return kHead;
196 else if(IsTrailer()) return kTail;
197 else if(IsAbort()) return kAbort;
37c3bb97 198 else return kFail;}
199 virtual Int_t TransWordCount(){if(IsTrailer()||IsAbort())
5590a2e3 200 return fUnion.fDataT.fTrans;
37c3bb97 201 else return -1;}
202 virtual Int_t EventCounter(){
5590a2e3 203 if(IsHeader()) return fUnion.fDataH.fEventSync;else return -1;}
204 virtual Int_t Chip(){if(IsData()) return fUnion.fDataD.fChip;else return -1;}
205 virtual Int_t Row() {if(IsData()) return fUnion.fDataD.fRow; else return -1;}
206 virtual Int_t Colm(){if(IsData()) return fUnion.fDataD.fColm;else return -1;}
207 virtual void Data(Int_t &ch,Int_t &rw,Int_t &cl){ch=Chip();rw=Row();
208 cl=Colm();}
209 virtual void Print(ostream *os);
37c3bb97 210 private:
211 union data{
5590a2e3 212 struct {
213 unsigned fDate:12; // Not Used
37c3bb97 214 unsigned fEventSync:6;// Event syncronization counter
215 unsigned fFlag:3; // =2or3 Header
216 unsigned fPadding:12; // Not used
217 } fDataH;
5590a2e3 218 struct {
37c3bb97 219 unsigned fColm:5; // Pixel (Hit) Column Address
220 unsigned fRow:8; // Pixel Row Adress
221 unsigned fChip:4; // Pixel Chip Address
222 unsigned fFlag:3; // =4or5or6or7 Data
223 unsigned fPadding:12; // Not used
224 } fDataD;
5590a2e3 225 struct {
37c3bb97 226 unsigned fTrans:17; // Transmitted word count
227 unsigned fFlag:3; // =0 Trialer
228 unsigned fPadding:12; // Not used
229 } fDataT;
5590a2e3 230 struct {
37c3bb97 231 unsigned fTrans:17; // Transmitted word count
232 unsigned fFlag:3; // =1 Abort
233 unsigned fPadding:12; // Not used
234 } fDataA;
235 UChar_t fBuf[4];
5590a2e3 236 } fUnion;
37c3bb97 237};
238ostream &operator<<(ostream &os,AliITSspdTestBeamData &source);
239#endif