5 // This class runs the test TOF preprocessor
6 // It uses AliTestShuttle to simulate a full Shuttle process
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
13 extern TBenchmark *gBenchmark;
14 void TOFPreprocessor(Char_t * RunType="PHYSICS")
16 gSystem->Load("$ALICE_ROOT/SHUTTLE/TestShuttle/libTestShuttle.so");
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");
23 // create AliTestShuttle instance
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);
31 // Generation of "fake" input DCS data
32 TMap* dcsAliasMap = CreateDCSAliasMap();
34 // now give the alias map to the shuttle
35 shuttle->SetDCSInput(dcsAliasMap);
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");
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);
60 // instantiation of the preprocessor
61 AliPreprocessor* pp = new AliTOFPreprocessor(shuttle);
64 gBenchmark->Start("process");
66 gBenchmark->Stop("process");
67 gBenchmark->Print("process");
73 TMap* CreateDCSAliasMap()
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
83 // In this example 6 aliases exists: DCSAlias1 ... DCSAlias6
84 // Each contains 1000 values randomly generated by TRandom::Gaus + 5*nAlias
86 TMap* aliasMap = new TMap;
87 aliasMap->SetOwner(1);
91 TDatime *datime = new TDatime();
92 Int_t time = datime->GetTime();
93 Int_t date = datime->GetDate();
94 Int_t pid = gSystem->GetPid();
96 Int_t iseed = TMath::Abs(10000 * pid + time - date);
100 Float_t tentHVv=6500, tentHVi=80;
101 Float_t sigmaHVv=10, sigmaHVi=10;
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;
108 // if not all the aliases are there, use this:
109 //Int_t NAliases=120, NHV=90;
114 for(int nAlias=0;nAlias<NAliases;nAlias++) {
116 TObjArray* valueSet = new TObjArray;
117 valueSet->SetOwner(1);
120 aliasName = "tof_hv_vp_";
121 sindex.Form("%02i",nAlias);
123 //aliasName += nAlias;
128 else if (nAlias<NHV*2){
129 // aliasName = "HVvneg";
130 //aliasName += nAlias-NHV;
131 aliasName = "tof_hv_vn_";
132 sindex.Form("%02i",nAlias-NHV);
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);
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);
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);
168 aliasMap->Add(new TObjString(aliasName), valueSet);
175 const Int_t kNsectors = 18;
176 const Int_t kNplates = 5;
179 UInt_t oldBaseWord = 0;
181 for(int i=0;i<kNsectors;i++)
182 for(int j=0;j<kNplates;j++) {
184 TObjArray* valueSetHV = new TObjArray;
185 valueSetHV->SetOwner(1);
187 aliasName = "TOF_HVSTATUS_";
188 sindex.Form("SM%02dMOD%1d",i,j);
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);
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);
209 AliDCSValue* dcsVal = new AliDCSValue(oldBaseWord, timeStamp);
210 valueSetHV->Add(dcsVal);
212 //Info(Form(" %2d %1d %s %d %d",i,j,aliasName,timeStamp,baseWord));
218 baseWord = CreateHVword(i,j, kTRUE);
219 AliDCSValue* dcsVal0 = new AliDCSValue(baseWord, 0);
220 valueSetHV->Add(dcsVal0);
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);
228 baseWord = CreateHVword(i,j, kTRUE);
229 AliDCSValue* dcsVal2 = new AliDCSValue(baseWord, 1200);
230 valueSetHV->Add(dcsVal2);
233 aliasMap->Add(new TObjString(aliasName), valueSetHV);
238 const Int_t kNddl = 72;
242 for(int i=0;i<kNddl;i++) {
244 TObjArray* valueSetLV = new TObjArray;
245 valueSetLV->SetOwner(1);
247 aliasName = "TOF_FEACSTATUS_";
248 sindex.Form("%02d",i);
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));
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);
270 AliDCSValue* dcsVal = new AliDCSValue(oldBaseWord, timeStamp);
271 valueSetLV->Add(dcsVal);
273 //Info(Form(" %2d %1d %s %d %d",i,j,aliasName,timeStamp,baseWord));
279 baseWord = CreateLVword(kTRUE);
280 AliDCSValue* dcsVal0 = new AliDCSValue(baseWord, 0);
281 valueSetLV->Add(dcsVal0);
284 baseWord = CreateLVword(kFALSE);
285 AliDCSValue* dcsVal1 = new AliDCSValue(baseWord, 400);
286 valueSetLV->Add(dcsVal1);
288 else if (i==50 || i==35) {
289 baseWord = CreateLVword(kFALSE);
290 AliDCSValue* dcsVal2 = new AliDCSValue(baseWord, 800);
291 valueSetLV->Add(dcsVal2);
294 baseWord = CreateLVword(kTRUE);
295 AliDCSValue* dcsVal3 = new AliDCSValue(baseWord, 1200);
296 valueSetLV->Add(dcsVal3);
299 aliasMap->Add(new TObjString(aliasName), valueSetLV);
308 UInt_t CreateHVword(Int_t nSector, Int_t nPlate, Bool_t isAtBorder) {
317 for (Int_t iStrip=0; iStrip<AliTOFGeometry::NStrip(nPlate); iStrip++) {
321 if (nPlate==2 && nSector>=13 && nSector<=15)
325 random.Uniform(0.,1.)<0.5 ? word = 0 : word = 1;
326 if (nPlate==2 && nSector>=13 && nSector<=15)
331 AliBitPacking::PackWord(word,baseWord,iStrip,iStrip);
339 UInt_t CreateLVword(Bool_t isAtBorder) {
348 for (Int_t iFeac=0; iFeac<8; iFeac++) {
353 random.Uniform(0.,1.)<0.5 ? word = 0 : word = 1;
357 AliBitPacking::PackWord(word,baseWord,iFeac,iFeac);
365 TMap* ReadDCSAliasMap()
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()
373 AliCDBEntry *entry = AliCDBManager::Instance()->Get("TOF/DCS/Data", 0);
374 return dynamic_cast<TMap*> (entry->GetObject());
377 void WriteDCSAliasMap()
379 // This writes the output from CreateDCSAliasMap to a CDB file
381 TMap* dcsAliasMap = CreateDCSAliasMap();
383 AliCDBMetaData metaData;
384 metaData.SetBeamPeriod(0);
385 metaData.SetResponsible("Chiara");
386 metaData.SetComment("Test object for TOFPreprocessor.C");
388 AliCDBId id("TOF/DCS/Data", 0, 0);
390 // initialize location of CDB
391 AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT/OCDB/SHUTTLE/TestShuttle/TestCDB");
393 AliCDBManager::Instance()->Put(dcsAliasMap, id, &metaData);