]>
Commit | Line | Data |
---|---|---|
f67db810 | 1 | |
223dda26 | 2 | #include <Riostream.h> |
f67db810 | 3 | #include <sstream> |
4 | #include <string> | |
5 | #include "TFile.h" | |
6 | #include "daqDA.h" | |
223dda26 | 7 | #include "event.h" |
8 | #include "AliRawReaderDate.h" | |
f67db810 | 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 | } | |
223dda26 | 106 | rawreaderdate->SelectEvents(-1); |
107 | while (rawreaderdate->NextEvent()) { | |
108 | if ((rawreaderdate->GetType() != PHYSICS_EVENT) && (rawreaderdate->GetType() != CALIBRATION_EVENT)) continue; | |
f67db810 | 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 | } |