]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TOF/TOFPreprocessor.C
Major fixes in the digits and raw-data reco. Now both are equivalent. To be propagate...
[u/mrichter/AliRoot.git] / TOF / TOFPreprocessor.C
CommitLineData
ccc28861 1/*
2$Id$
3*/
4
5// This class runs the test TOF preprocessor
6// It uses AliTestShuttle to simulate a full Shuttle process
7
8// The input data is created in the functions
9// CreateDCSAliasMap() creates input that would in the same way come from DCS
10// ReadDCSAliasMap() reads from a file
11// CreateInputFilesMap() creates a list of local files, that can be accessed by the shuttle
12
27a53fea 13extern TBenchmark *gBenchmark;
7fffa85b 14void TOFPreprocessor(Char_t * RunType="PHYSICS")
ccc28861 15{
db83b789 16 gSystem->Load("$ALICE_ROOT/SHUTTLE/TestShuttle/libTestShuttle.so");
ccc28861 17
17149e6b 18 AliLog::SetClassDebugLevel("AliTOFPreprocessor",2);
ccc28861 19 // initialize location of CDB
162637e4 20 AliTestShuttle::SetMainCDB("local://$ALICE_ROOT/OCDB/SHUTTLE/TestShuttle/TestCDB");
21 AliTestShuttle::SetMainRefStorage("local://$ALICE_ROOT/OCDB/SHUTTLE/TestShuttle/TestReference");
58f7f59a 22
ccc28861 23 // create AliTestShuttle instance
104ba366 24 Int_t nrun = 104892;
ff326f84 25 AliTestShuttle* shuttle = new AliTestShuttle(nrun, 30, 980);
7fffa85b 26 //setting run type to physiscs
27 shuttle->SetInputRunType(RunType);
ff326f84 28 shuttle->SetTimeCreated(20);
29 shuttle->SetDCSQueryOffset(20);
ccc28861 30
31 // Generation of "fake" input DCS data
27a53fea 32 TMap* dcsAliasMap = CreateDCSAliasMap();
ccc28861 33
34 // now give the alias map to the shuttle
27a53fea 35 shuttle->SetDCSInput(dcsAliasMap);
ccc28861 36
37 // processing files. for the time being, the files are local.
104ba366 38 shuttle->AddInputFile(AliTestShuttle::kDAQ, "TOF", "HITS", "MON", "$ALICE_ROOT/TOF/ShuttleInput/Hits.root");
f04b3a69 39 shuttle->AddInputFile(AliTestShuttle::kDAQ, "TOF", "CALIB", "MON", "$ALICE_ROOT/TOF/ShuttleInput/Calib.root");
5abdf772 40 shuttle->AddInputFile(AliTestShuttle::kDAQ, "TOF", "DELAYS", "MON", "$ALICE_ROOT/TOF/ShuttleInput/Total.root");
41 shuttle->AddInputFile(AliTestShuttle::kDAQ, "TOF", "RUNLevel", "MON", "$ALICE_ROOT/TOF/ShuttleInput/Partial.root");
fceb731d 42 shuttle->AddInputFile(AliTestShuttle::kDCS, "TOF", "TofFeeLightMap", "", "$ALICE_ROOT/TOF/ShuttleInput/TOFFEElight.20090616.102605.8000");
69355034 43 shuttle->AddInputFile(AliTestShuttle::kDCS, "TOF", "TofFeeMap", "", "$ALICE_ROOT/TOF/ShuttleInput/TOFFEE.20091217.194708.105517");
013ac2dd 44
45 TString filename;
46 TString LDCname;
47 //char filename[100];
48 //char LDCname[5];
7fffa85b 49
4541173c 50 for (Int_t iLDC=0;iLDC<2;iLDC++){
013ac2dd 51 filename.Form("$ALICE_ROOT/TOF/ShuttleInput/TOFoutPulserLDC_%02i.root",iLDC*2);
52 LDCname.Form("LDC%i",iLDC*2);
4541173c 53 shuttle->AddInputFile(AliTestShuttle::kDAQ, "TOF", "PULSER", LDCname, filename);
013ac2dd 54 filename.Form("$ALICE_ROOT/TOF/ShuttleInput/TOFoutNoiseLDC_%02i.root",iLDC*2);
55 LDCname.Form("LDC%i",iLDC*2);
4541173c 56 shuttle->AddInputFile(AliTestShuttle::kDAQ, "TOF", "NOISE", LDCname, filename);
57 }
013ac2dd 58
ccc28861 59
60 // instantiation of the preprocessor
124a2863 61 AliPreprocessor* pp = new AliTOFPreprocessor(shuttle);
ccc28861 62
63 // preprocessing
27a53fea 64 gBenchmark->Start("process");
ccc28861 65 shuttle->Process();
27a53fea 66 gBenchmark->Stop("process");
67 gBenchmark->Print("process");
ccc28861 68
ccc28861 69
70}
71
104ba366 72
ccc28861 73TMap* CreateDCSAliasMap()
74{
75 // Creates a DCS structure
76 // The structure is the following:
27a53fea 77 // TMap (key --> value)
78 // <DCSAlias> --> <valueList>
79 // <DCSAlias> is a string
80 // <valueList> is a TObjArray of AliDCSValue
81 // An AliDCSValue consists of timestamp and a value in form of a AliSimpleValue
ccc28861 82
27a53fea 83 // In this example 6 aliases exists: DCSAlias1 ... DCSAlias6
84 // Each contains 1000 values randomly generated by TRandom::Gaus + 5*nAlias
ccc28861 85
86 TMap* aliasMap = new TMap;
87 aliasMap->SetOwner(1);
88
89 TRandom random;
104ba366 90 /*
ccc28861 91 TDatime *datime = new TDatime();
92 Int_t time = datime->GetTime();
93 Int_t date = datime->GetDate();
94 Int_t pid = gSystem->GetPid();
95 delete datime;
96 Int_t iseed = TMath::Abs(10000 * pid + time - date);
104ba366 97 */
ccc28861 98
27a53fea 99
d202b31a 100 Float_t tentHVv=6500, tentHVi=80;
101 Float_t sigmaHVv=10, sigmaHVi=10;
ccc28861 102
104ba366 103 Float_t tent=0, sigma=0;//, thr=0;
d202b31a 104 // to have all the aliases, decomment the following line:
105 Int_t NAliases=360, NHV=90;
7fffa85b 106
104ba366 107
7fffa85b 108 // if not all the aliases are there, use this:
d202b31a 109 //Int_t NAliases=120, NHV=90;
ccc28861 110
104ba366 111 TString sindex;
112 TString aliasName;
113
ccc28861 114 for(int nAlias=0;nAlias<NAliases;nAlias++) {
115
116 TObjArray* valueSet = new TObjArray;
117 valueSet->SetOwner(1);
118
ccc28861 119 if (nAlias<NHV){
124a2863 120 aliasName = "tof_hv_vp_";
121 sindex.Form("%02i",nAlias);
122 aliasName += sindex;
123 //aliasName += nAlias;
ccc28861 124 tent=tentHVv;
125 sigma=sigmaHVv;
126 // thr=thrHVv;
127 }
128 else if (nAlias<NHV*2){
124a2863 129 // aliasName = "HVvneg";
130 //aliasName += nAlias-NHV;
131 aliasName = "tof_hv_vn_";
132 sindex.Form("%02i",nAlias-NHV);
133 aliasName += sindex;
ccc28861 134 tent=-tentHVv;
135 sigma=-sigmaHVv;
136 //thr=-thrHVv;
137 }
138 else if (nAlias<NHV*3){
124a2863 139 // aliasName = "HVcpos";
140 //aliasName += nAlias-2*NHV;
141 aliasName = "tof_hv_ip_";
142 sindex.Form("%02i",nAlias-2*NHV);
143 aliasName += sindex;
144 tent=tentHVi;
145 sigma=sigmaHVi;
ccc28861 146 //thr=thrHVc;
147 }
148 else if (nAlias<NHV*4){
124a2863 149 // aliasName = "HVcneg";
150 //aliasName += nAlias-3*NHV;
151 aliasName = "tof_hv_in_";
152 sindex.Form("%02i",nAlias-3*NHV);
153 aliasName += sindex;
154 tent=-tentHVi;
155 sigma=-sigmaHVi;
ccc28861 156 //thr=-thrHVc;
157 }
ccc28861 158 // gauss generation of values
104ba366 159 for (int timeStamp=0;timeStamp<6000;timeStamp+=10){
db83b789 160 //for (int timeStamp=0;timeStamp<1;timeStamp++){
ccc28861 161 Float_t gaussvalue = (Float_t) (random.Gaus(tent,sigma));
162 if (TMath::Abs(gaussvalue-tent)>sigma){
163 AliDCSValue* dcsVal = new AliDCSValue(gaussvalue, timeStamp);
164 valueSet->Add(dcsVal);
165 }
166 }
167
168 aliasMap->Add(new TObjString(aliasName), valueSet);
104ba366 169
170 }
171
172
173
174
175 const Int_t kNsectors = 18;
176 const Int_t kNplates = 5;
177
178 UInt_t baseWord = 0;
179 UInt_t oldBaseWord = 0;
180
181 for(int i=0;i<kNsectors;i++)
182 for(int j=0;j<kNplates;j++) {
183
184 TObjArray* valueSetHV = new TObjArray;
185 valueSetHV->SetOwner(1);
186
187 aliasName = "TOF_HVSTATUS_";
188 sindex.Form("SM%02dMOD%1d",i,j);
189 aliasName += sindex;
190
191
192 //for (int timeStamp=0;timeStamp<6000;timeStamp+=600) {
193 for (int timeStamp=0;timeStamp<1201;timeStamp+=600) {
194 if (timeStamp==0 /*|| timeStamp==1200*/) {
195 baseWord = CreateHVword(i,j, kTRUE);
196 oldBaseWord = baseWord;
197 AliDCSValue* dcsVal = new AliDCSValue(baseWord, timeStamp);
198 valueSetHV->Add(dcsVal);
199 }
200 else {
201 if (random.Uniform(0.,1.)>=0.5) {
202 baseWord = CreateHVword(i,j, kFALSE);
203 if (baseWord<=oldBaseWord) {
204 oldBaseWord = baseWord;
205 AliDCSValue* dcsVal = new AliDCSValue(baseWord, timeStamp);
206 valueSetHV->Add(dcsVal);
207 }
208 else {
209 AliDCSValue* dcsVal = new AliDCSValue(oldBaseWord, timeStamp);
210 valueSetHV->Add(dcsVal);
211 }
212 //Info(Form(" %2d %1d %s %d %d",i,j,aliasName,timeStamp,baseWord));
213 }
214 }
215 }
216
217 /*
218 baseWord = CreateHVword(i,j, kTRUE);
219 AliDCSValue* dcsVal0 = new AliDCSValue(baseWord, 0);
220 valueSetHV->Add(dcsVal0);
221
222 if ((i==0 && j==2) || (i==9 && j==4)) {
223 baseWord = CreateHVword(i,j, kFALSE);
224 AliDCSValue* dcsVal1 = new AliDCSValue(baseWord, 600);
225 valueSetHV->Add(dcsVal1);
226 }
227
228 baseWord = CreateHVword(i,j, kTRUE);
229 AliDCSValue* dcsVal2 = new AliDCSValue(baseWord, 1200);
230 valueSetHV->Add(dcsVal2);
231 */
232
233 aliasMap->Add(new TObjString(aliasName), valueSetHV);
234
235 }
236
237
238 const Int_t kNddl = 72;
239 baseWord = 0;
240 oldBaseWord = 0;
241
242 for(int i=0;i<kNddl;i++) {
243
244 TObjArray* valueSetLV = new TObjArray;
245 valueSetLV->SetOwner(1);
246
247 aliasName = "TOF_FEACSTATUS_";
248 sindex.Form("%02d",i);
249 aliasName += sindex;
250
251
252 //for (int timeStamp=0;timeStamp<6000;timeStamp+=600) {
253 for (int timeStamp=0;timeStamp<1201;timeStamp+=400) {
254 if (timeStamp==0 /*|| timeStamp==1200*/) {
255 baseWord = CreateLVword(kTRUE);
256 AliDCSValue* dcsVal = new AliDCSValue(baseWord, timeStamp);
257 valueSetLV->Add(dcsVal);
258 oldBaseWord = baseWord;
259 //Info(Form(" %2d %s %d %d",i,aliasName,timeStamp,baseWord));
260 }
261 else {
262 if (random.Uniform(0.,1.)>=0.5) {
263 baseWord = CreateLVword(kFALSE);
264 if (baseWord<=oldBaseWord) {
265 oldBaseWord = baseWord;
266 AliDCSValue* dcsVal = new AliDCSValue(baseWord, timeStamp);
267 valueSetLV->Add(dcsVal);
268 }
269 else {
270 AliDCSValue* dcsVal = new AliDCSValue(oldBaseWord, timeStamp);
271 valueSetLV->Add(dcsVal);
272 }
273 //Info(Form(" %2d %1d %s %d %d",i,j,aliasName,timeStamp,baseWord));
274 }
275 }
276 }
277
278 /*
279 baseWord = CreateLVword(kTRUE);
280 AliDCSValue* dcsVal0 = new AliDCSValue(baseWord, 0);
281 valueSetLV->Add(dcsVal0);
282
283 if (i==7 || i==9) {
284 baseWord = CreateLVword(kFALSE);
285 AliDCSValue* dcsVal1 = new AliDCSValue(baseWord, 400);
286 valueSetLV->Add(dcsVal1);
287 }
288 else if (i==50 || i==35) {
289 baseWord = CreateLVword(kFALSE);
290 AliDCSValue* dcsVal2 = new AliDCSValue(baseWord, 800);
291 valueSetLV->Add(dcsVal2);
292 }
293
294 baseWord = CreateLVword(kTRUE);
295 AliDCSValue* dcsVal3 = new AliDCSValue(baseWord, 1200);
296 valueSetLV->Add(dcsVal3);
297 */
298
299 aliasMap->Add(new TObjString(aliasName), valueSetLV);
300
ccc28861 301 }
302
104ba366 303
ccc28861 304 return aliasMap;
305}
306
104ba366 307
308UInt_t CreateHVword(Int_t nSector, Int_t nPlate, Bool_t isAtBorder) {
309 //
310 //
311 //
312
313 UInt_t baseWord = 0;
314 UInt_t word = 0;
315 TRandom random;
316
317 for (Int_t iStrip=0; iStrip<AliTOFGeometry::NStrip(nPlate); iStrip++) {
318
319 if (isAtBorder) {
320 word = 1;
321 if (nPlate==2 && nSector>=13 && nSector<=15)
322 word = 0;
323 }
324 else {
325 random.Uniform(0.,1.)<0.5 ? word = 0 : word = 1;
326 if (nPlate==2 && nSector>=13 && nSector<=15)
327 word = 0;
328 word = 0;
329 }
330
331 AliBitPacking::PackWord(word,baseWord,iStrip,iStrip);
332 }
333
334 return baseWord;
335
336}
337
338
339UInt_t CreateLVword(Bool_t isAtBorder) {
340 //
341 //
342 //
343
344 UInt_t baseWord = 0;
345 UInt_t word = 0;
346 TRandom random;
347
348 for (Int_t iFeac=0; iFeac<8; iFeac++) {
349
350 if (isAtBorder)
351 word = 1;
352 else {
353 random.Uniform(0.,1.)<0.5 ? word = 0 : word = 1;
354 word = 0;
355 }
356
357 AliBitPacking::PackWord(word,baseWord,iFeac,iFeac);
358 }
359
360 return baseWord;
361
362}
363
364
ccc28861 365TMap* ReadDCSAliasMap()
366{
367 // Open a file that contains DCS input data
368 // The CDB framework is used to open the file, this means the file is located
369 // in $ALICE_ROOT/SHUTTLE/TestShuttle/TestCDB/<detector>/DCS/Data
370 // The file contains an AliCDBEntry that contains a TMap with the DCS structure.
371 // An explanation of the structure can be found in CreateDCSAliasMap()
372
373 AliCDBEntry *entry = AliCDBManager::Instance()->Get("TOF/DCS/Data", 0);
374 return dynamic_cast<TMap*> (entry->GetObject());
375}
376
377void WriteDCSAliasMap()
378{
379 // This writes the output from CreateDCSAliasMap to a CDB file
380
381 TMap* dcsAliasMap = CreateDCSAliasMap();
382
383 AliCDBMetaData metaData;
384 metaData.SetBeamPeriod(0);
385 metaData.SetResponsible("Chiara");
386 metaData.SetComment("Test object for TOFPreprocessor.C");
387
388 AliCDBId id("TOF/DCS/Data", 0, 0);
389
390 // initialize location of CDB
162637e4 391 AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT/OCDB/SHUTTLE/TestShuttle/TestCDB");
ccc28861 392
393 AliCDBManager::Instance()->Put(dcsAliasMap, id, &metaData);
394}
104ba366 395
396