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