Coding conventions
[u/mrichter/AliRoot.git] / ITS / ITSSSDPEDda.cxx
1
2 #include <Riostream.h>
3 #include <sstream>
4 #include <string>
5 #include "TFile.h"
6 #include "daqDA.h"
7 #include "event.h"
8 #include "AliRawReaderDate.h" 
9 #include "AliITSHandleDaSSD.h" 
10
11 using namespace std;
12
13 Bool_t GetRunSettings (const char *datafilename, Long_t &eventsnumber, Long_t &stripsnumber);
14
15 int main( int argc, char** argv )
16 {
17   AliITSHandleDaSSD  *ssddaldc;
18   ostringstream       feefname;
19   Int_t               status;
20   string              dafname;
21   Char_t             *dadaqdir = NULL;
22
23   /* check that we got some arguments = list of files */
24   if (argc<2) {
25     printf("Wrong number of arguments\n");
26     return -1;
27   }
28
29   char *datafilename = argv[1];
30
31   Long_t strn, evn;
32   if (!GetRunSettings (datafilename, evn, strn))
33   {
34     cout << "Error GetRunSettings (datafilename, evn, strn)!" << endl;
35     return -1;
36   }
37   cout << "Pysics events : " << evn << ";   Total strip number : " << strn 
38        << ";   Modules number: " << strn / AliITSModuleDaSSD::GetStripsPerModuleConst() << endl;
39   
40   ssddaldc = new AliITSHandleDaSSD();
41 //  if (!ssddaldc->SetNumberOfModules((Int_t)(strn / AliITSModuleDaSSD::GetStripsPerModuleConst())))
42   if (!ssddaldc->SetNumberOfModules(AliITSHandleDaSSD::GetNumberOfSSDModulesConst()))
43   {
44      cout << "Error ssddaldc->SetNumberOfModules" << endl;
45      delete ssddaldc;
46      return -1;
47   }  
48   if (!ssddaldc->ReadCalibrationDataFile(datafilename, evn))
49   {
50      cout << "Error !ssddaldc->ReadCalibrationDataFile" << endl;
51      delete ssddaldc;
52      return -1;
53   }  
54   daqDA_progressReport(30);
55 //  if (daqDA_checkShutdown() == 1) {
56 //    cout << "Shutdown has been requested!" << endl;
57 //    delete ssddaldc;
58 //    return -1;
59 //  }
60
61   if (!ssddaldc->CalculatePedestal()) {
62     cout << "Error, ssddaldc->CalculatePedestal()";
63     return 1; 
64   } 
65   daqDA_progressReport(50);
66   if (!ssddaldc->CalculateNoiseCM()) {
67     cout << "Error, ssddaldc->CalculateNoiseCM()";
68     return 2; 
69   } 
70   ssddaldc->DeleteSignal();
71   daqDA_progressReport(90);
72   dadaqdir = getenv ("DAQDA_TEST_DIR");
73   if (dadaqdir) {
74     dafname = dadaqdir;
75     if (!(ssddaldc->SaveCalibrationSSDLDC(dafname))) 
76       cout << "Error saving DA data to the file! Probably $DAQDA_TEST_DIR defined incorrectly!" << endl;
77     else cout << "SSDDA data are saved in " << dafname << endl;
78       feefname << dadaqdir << "/ssddaldc.root";
79     cout << "Saving feessdda data in " << feefname.str() << endl;
80     TFile *fileRun = new TFile (feefname.str().data(),"RECREATE");
81     ssddaldc->Write();
82     fileRun->Close();
83     delete fileRun;
84     status = daqDA_FES_storeFile(dafname.data(),"DASSD_DB_results");
85     if (status) printf("Failed to export file : %d\n",status);
86   }
87   else cout << "Error: DAQDA_TEST_DIR is not defined, DA data are not saved!" << endl;
88   delete ssddaldc;
89   daqDA_progressReport(100);
90   return 0;
91 }
92
93
94
95 Bool_t GetRunSettings (const char *datafilename, Long_t &eventsnumber, Long_t &stripsnumber)
96 {
97   Long_t physeventind = 0, strn = 0, strneq = 0;
98   AliRawReaderDate  *rawreaderdate = NULL;
99   Int_t *data = NULL;
100   Long_t datasize = 0, eqdatasize = 0, eqbelsize = 1;
101   rawreaderdate = new AliRawReaderDate(datafilename, 0);
102   if (!rawreaderdate) {
103     cout << "GetRunSettings : Error  new DARawReader(datafilename, 0);" << endl;
104     return kFALSE;
105   }  
106   rawreaderdate->SelectEvents(-1);
107   while (rawreaderdate->NextEvent()) {
108     if ((rawreaderdate->GetType() != PHYSICS_EVENT) && (rawreaderdate->GetType() != CALIBRATION_EVENT)) continue;
109     physeventind += 1;
110     datasize = 0;
111     strn = 0;
112     while (rawreaderdate->ReadNextData((UChar_t*&)data)) {
113       eqdatasize = rawreaderdate->GetDataSize();
114       eqbelsize = rawreaderdate->GetEquipmentElementSize();
115       if ( (eqdatasize % eqbelsize) || (eqbelsize != sizeof(long32)) ) {
116         cout << "Error ReadCalibrationDataFile: equipment event data size " << eqdatasize  
117              << " is not an integer of equipment data size "      << eqbelsize << endl;
118         rawreaderdate->DumpData();
119         return kFALSE;
120       }
121       strneq = eqdatasize / eqbelsize;
122       datasize += eqdatasize;
123       strn += strneq;
124     }  
125     if ((strn * eqbelsize != datasize)) {
126       if (physeventind != 1) {
127         cout << "Something is wrong with data file, strip number changes from event to event! Ev = " << physeventind << endl;
128         rawreaderdate->DumpData();
129         return kFALSE;
130       }
131       if ((datasize % eqbelsize)) {
132         cout << "Wrong number :  (datasize % eqbelsize) != 0" << endl;
133         rawreaderdate->DumpData();
134         return kFALSE;
135       }
136       strneq = datasize / eqbelsize;
137     }
138   }
139   delete rawreaderdate;
140   if ((physeventind > 0) && (strn > 0))
141   {
142     eventsnumber = physeventind;
143     stripsnumber = strn;
144     return kTRUE;
145   }
146   return kFALSE;
147 }