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