Added virtual function Init for setting the slice, patch and n_eta_seg information...
[u/mrichter/AliRoot.git] / HLT / programs / read.cxx
1 // $Id$
2
3 // Author: Constantin Loizides <mailto: loizides@ikf.physik.uni-frankfurt.de
4
5
6 #include <stream.h>
7 #include <libgen.h>
8 #include "AliL3RootTypes.h"
9 #include "AliL3Logger.h"
10 #include "AliL3MemHandler.h"
11 #include "AliL3AltroMemHandler.h"
12 #include "AliL3DigitData.h"
13 #include "AliL3Transform.h"
14 #include "AliL3Logging.h"
15 #include "AliL3Logger.h"
16
17 /**
18 Example program how to open and read a raw datafile.
19 In addition it shows, how to store (and read) the
20 digits in an Altro like data format. 
21 */
22
23 int main(int argc,char **argv)
24 {
25   Int_t slice=0;
26   Int_t patch=0;
27   Bool_t altroout=kFALSE;
28   FILE *afile=0;
29   
30   AliL3Logger l;
31   l.Set(AliL3Logger::kAll);
32   //l.UseStderr();
33   //l.UseStdout();
34   //l.UseStream();
35
36   if(argc<2)
37     {
38       cout<<"Usage: read datafile [slice] [patch] [altrodatfile]"<<endl;
39       exit(1);
40     }
41   if (argc>2) {
42     slice=atoi(argv[2]);
43   }
44   if (argc>3) {
45     patch=atoi(argv[3]);
46   }
47   if (argc>4) {
48     altroout=kTRUE;
49     afile=fopen(argv[4],"w");
50   }
51   
52   //Loading all specific aliroot version quantities, needed.
53   Char_t fname[1024];
54   strcpy(fname,argv[1]);
55   AliL3Transform::Init(dirname(fname));
56   strcpy(fname,argv[1]);
57
58   //Filehandler object:
59   AliL3MemHandler file;
60
61   //Give slice and patch information (see filename convention)
62   if((patch>=0)&&(patch<6)) file.Init(slice,patch);
63   else {
64     Int_t srows[2]={0,175};
65     patch=0;
66     file.Init(slice,patch,srows);
67   }
68
69   //Open the data file:
70   if(!file.SetBinaryInput(argv[1]))
71     {
72       cerr<<"Error opening file "<<argv[1]<<endl;
73       return -1;
74     }
75
76   //Create an RowData object to access the data
77   AliL3DigitRowData *digits=0;
78   UInt_t nrows=0;
79   
80   //Read the file, and store the data in memory. Return value is a pointer to the data.
81   digits = file.CompBinary2Memory(nrows);
82
83   //Create an ALtroMemHandler object
84   AliL3AltroMemHandler altromem;
85   if(altroout) altroout=altromem.SetASCIIOutput(afile);
86
87   UShort_t time,charge;
88   UChar_t pad;
89   Int_t row=file.GetRowMin()-1,crows=0,lrow=row;
90
91   for(UInt_t r=0; r<nrows; r++) //Loop over padrows
92     {
93       //Get the data on this padrow:
94       AliL3DigitData *dataPt = (AliL3DigitData*)digits->fDigitData;
95       row++;
96       if(lrow+1==row) crows++;
97       
98       //Loop over all digits on this padrow:
99       for(UInt_t ndig=0; ndig<digits->fNDigit; ndig++)
100         {
101           lrow=row;
102           pad = dataPt[ndig].fPad;
103           time = dataPt[ndig].fTime;
104           charge = dataPt[ndig].fCharge;
105           cout << "Padrow " << row << " pad " << (int)pad << " time " <<(int) time << " charge " << (int)charge << endl;
106           if(altroout) altromem.Write(row,pad,time,charge);
107         }
108       
109       //Move the pointer to the next padrow:
110       file.UpdateRowPointer(digits);
111     }
112   
113   if(afile) {
114     altromem.WriteFinal();
115     fclose(afile);
116     
117 #if 0
118     //test Altro read
119     UShort_t rrow=0,rtime=0,rcharge=0;
120     UChar_t rpad=0;
121     afile=fopen(argv[4],"r");
122     altromem.SetASCIIInput(afile);
123     while(altromem.Read(rrow,rpad,rtime,rcharge)){
124       cout << "Padrow " << (int)rrow << " pad " << (int)rpad << " time " <<(int)rtime << " charge " << (int)rcharge << endl;
125     }
126     fclose(afile);  
127 #endif
128 #if 0
129     //test Altro read sequence
130     UShort_t rrow=0,rtime=0;
131     UChar_t rpad=0,n=100,i=100;
132     UShort_t *charges=new UShort_t[100];
133     afile=fopen(argv[4],"r");
134     altromem.SetASCIIInput(afile);
135     while(altromem.ReadSequence(rrow,rpad,rtime,i,&charges)){
136       cout << "Padrow " << (int)rrow << " pad " << (int)rpad << " time " <<(int)rtime << " charges ";
137       for(UChar_t ii=0;ii<i;ii++) cout << (int)charges[ii] << " ";
138       cout << endl;
139       i=n;
140     }
141     fclose(afile);  
142 #endif
143   }
144
145   //cerr << "Rows: " << (file.GetRowMax()-file.GetRowMin()+1) << " Consecutive: " << crows << endl;
146   return 0;
147 }
148
149