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