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