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