]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TOF/TOFPreprocessor.C
updates on TOF code to add and use new calibration object
[u/mrichter/AliRoot.git] / TOF / TOFPreprocessor.C
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
13 extern TBenchmark *gBenchmark;
14 void TOFPreprocessor(Char_t * RunType="PHYSICS")
15 {
16   gSystem->Load("$ALICE_ROOT/SHUTTLE/TestShuttle/libTestShuttle.so");
17
18   AliLog::SetClassDebugLevel("AliTOFPreprocessor",2);
19   // initialize location of CDB
20   AliTestShuttle::SetMainCDB("local://$ALICE_ROOT/OCDB/SHUTTLE/TestShuttle/TestCDB");
21   AliTestShuttle::SetMainRefStorage("local://$ALICE_ROOT/OCDB/SHUTTLE/TestShuttle/TestReference");
22
23   // create AliTestShuttle instance
24   Int_t nrun = 104892;
25   AliTestShuttle* shuttle = new AliTestShuttle(nrun, 30, 980);
26   //setting run type to physiscs
27   shuttle->SetInputRunType(RunType);
28   shuttle->SetTimeCreated(20);
29   shuttle->SetDCSQueryOffset(20);
30
31   // Generation of "fake" input DCS data
32   TMap* dcsAliasMap = CreateDCSAliasMap();  
33
34   // now give the alias map to the shuttle
35   shuttle->SetDCSInput(dcsAliasMap);   
36
37   // processing files. for the time being, the files are local.
38   shuttle->AddInputFile(AliTestShuttle::kDAQ, "TOF", "HITS", "MON", "$ALICE_ROOT/TOF/ShuttleInput/Hits.root");
39   shuttle->AddInputFile(AliTestShuttle::kDAQ, "TOF", "CALIB", "MON", "$ALICE_ROOT/TOF/ShuttleInput/Calib.root");
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");
42   shuttle->AddInputFile(AliTestShuttle::kDCS, "TOF", "TofFeeLightMap", "", "$ALICE_ROOT/TOF/ShuttleInput/TOFFEElight.20090616.102605.8000");
43   shuttle->AddInputFile(AliTestShuttle::kDCS, "TOF", "TofFeeMap", "", "$ALICE_ROOT/TOF/ShuttleInput/TOFFEE.20091217.194708.105517");
44
45   TString filename;
46   TString LDCname;
47   //char filename[100];
48   //char LDCname[5];
49
50   for (Int_t iLDC=0;iLDC<2;iLDC++){
51     filename.Form("$ALICE_ROOT/TOF/ShuttleInput/TOFoutPulserLDC_%02i.root",iLDC*2);
52     LDCname.Form("LDC%i",iLDC*2);
53     shuttle->AddInputFile(AliTestShuttle::kDAQ, "TOF", "PULSER", LDCname, filename);
54     filename.Form("$ALICE_ROOT/TOF/ShuttleInput/TOFoutNoiseLDC_%02i.root",iLDC*2);
55     LDCname.Form("LDC%i",iLDC*2);
56     shuttle->AddInputFile(AliTestShuttle::kDAQ, "TOF", "NOISE", LDCname, filename);
57   }
58   
59
60   // instantiation of the preprocessor
61   AliPreprocessor* pp = new AliTOFPreprocessor(shuttle);
62
63   // preprocessing
64   gBenchmark->Start("process");
65   shuttle->Process();
66   gBenchmark->Stop("process");
67   gBenchmark->Print("process");
68
69   
70 }
71
72
73 TMap* CreateDCSAliasMap()
74 {
75   // Creates a DCS structure
76   // The structure is the following:
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
82
83   // In this example 6 aliases exists: DCSAlias1 ... DCSAlias6
84   // Each contains 1000 values randomly generated by TRandom::Gaus + 5*nAlias
85
86   TMap* aliasMap = new TMap;
87   aliasMap->SetOwner(1);
88
89   TRandom random;
90   /*
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); 
97   */
98
99
100   Float_t tentHVv=6500, tentHVi=80;
101   Float_t sigmaHVv=10, sigmaHVi=10;
102
103   Float_t tent=0, sigma=0;//, thr=0;
104   // to have all the aliases, decomment the following line:
105   Int_t NAliases=360, NHV=90;
106
107
108   // if not all the aliases are there, use this:
109   //Int_t NAliases=120, NHV=90;
110
111   TString sindex;
112   TString aliasName;
113
114   for(int nAlias=0;nAlias<NAliases;nAlias++) {
115
116     TObjArray* valueSet = new TObjArray;
117     valueSet->SetOwner(1);
118
119     if (nAlias<NHV){
120       aliasName = "tof_hv_vp_";
121       sindex.Form("%02i",nAlias);
122       aliasName += sindex;
123       //aliasName += nAlias;
124       tent=tentHVv;
125       sigma=sigmaHVv;
126       //      thr=thrHVv;
127     }
128     else if (nAlias<NHV*2){
129       //      aliasName = "HVvneg";
130       //aliasName += nAlias-NHV;
131       aliasName = "tof_hv_vn_";
132       sindex.Form("%02i",nAlias-NHV);
133       aliasName += sindex;
134       tent=-tentHVv;
135       sigma=-sigmaHVv;
136       //thr=-thrHVv;
137     }
138     else if (nAlias<NHV*3){
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;
146       //thr=thrHVc;
147     }
148     else if (nAlias<NHV*4){
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;
156       //thr=-thrHVc;
157     }
158     // gauss generation of values 
159     for (int timeStamp=0;timeStamp<6000;timeStamp+=10){
160     //for (int timeStamp=0;timeStamp<1;timeStamp++){
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);
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
301   }
302
303
304   return aliasMap;
305 }
306
307
308 UInt_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
339 UInt_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
365 TMap* 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
377 void 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
391   AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT/OCDB/SHUTTLE/TestShuttle/TestCDB");
392
393   AliCDBManager::Instance()->Put(dcsAliasMap, id, &metaData);
394 }
395
396