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", "READOUT", "MON", "$ALICE_ROOT/TOF/ShuttleInput/Readout.root");
41 shuttle->AddInputFile(AliTestShuttle::kDAQ, "TOF", "DELAYS", "MON", "$ALICE_ROOT/TOF/ShuttleInput/Total.root");
42 shuttle->AddInputFile(AliTestShuttle::kDAQ, "TOF", "RUNLevel", "MON", "$ALICE_ROOT/TOF/ShuttleInput/Partial.root");
43 shuttle->AddInputFile(AliTestShuttle::kDCS, "TOF", "TofFeeLightMap", "", "$ALICE_ROOT/TOF/ShuttleInput/TOFFEElight.20101028.133932.8000");
44 shuttle->AddInputFile(AliTestShuttle::kDCS, "TOF", "TofFeeMap", "", "$ALICE_ROOT/TOF/ShuttleInput/TOFFEE.20091217.194708.105517");
51 for (Int_t iLDC=0;iLDC<2;iLDC++){
52 filename.Form("$ALICE_ROOT/TOF/ShuttleInput/TOFoutPulserLDC_%02i.root",iLDC*2);
53 LDCname.Form("LDC%i",iLDC*2);
54 shuttle->AddInputFile(AliTestShuttle::kDAQ, "TOF", "PULSER", LDCname, filename);
55 filename.Form("$ALICE_ROOT/TOF/ShuttleInput/TOFoutNoiseLDC_%02i.root",iLDC*2);
56 LDCname.Form("LDC%i",iLDC*2);
57 shuttle->AddInputFile(AliTestShuttle::kDAQ, "TOF", "NOISE", LDCname, filename);
61 // instantiation of the preprocessor
62 AliPreprocessor* pp = new AliTOFPreprocessor(shuttle);
65 gBenchmark->Start("process");
67 gBenchmark->Stop("process");
68 gBenchmark->Print("process");
74 TMap* CreateDCSAliasMap()
76 // Creates a DCS structure
77 // The structure is the following:
78 // TMap (key --> value)
79 // <DCSAlias> --> <valueList>
80 // <DCSAlias> is a string
81 // <valueList> is a TObjArray of AliDCSValue
82 // An AliDCSValue consists of timestamp and a value in form of a AliSimpleValue
84 // In this example 6 aliases exists: DCSAlias1 ... DCSAlias6
85 // Each contains 1000 values randomly generated by TRandom::Gaus + 5*nAlias
87 TMap* aliasMap = new TMap;
88 aliasMap->SetOwner(1);
92 TDatime *datime = new TDatime();
93 Int_t time = datime->GetTime();
94 Int_t date = datime->GetDate();
95 Int_t pid = gSystem->GetPid();
97 Int_t iseed = TMath::Abs(10000 * pid + time - date);
101 Float_t tentHVv=6500, tentHVi=80;
102 Float_t sigmaHVv=10, sigmaHVi=10;
104 Float_t tent=0, sigma=0;//, thr=0;
105 // to have all the aliases, decomment the following line:
106 Int_t NAliases=360, NHV=90;
109 // if not all the aliases are there, use this:
110 //Int_t NAliases=120, NHV=90;
115 for(int nAlias=0;nAlias<NAliases;nAlias++) {
117 TObjArray* valueSet = new TObjArray;
118 valueSet->SetOwner(1);
121 aliasName = "tof_hv_vp_";
122 sindex.Form("%02i",nAlias);
124 //aliasName += nAlias;
129 else if (nAlias<NHV*2){
130 // aliasName = "HVvneg";
131 //aliasName += nAlias-NHV;
132 aliasName = "tof_hv_vn_";
133 sindex.Form("%02i",nAlias-NHV);
139 else if (nAlias<NHV*3){
140 // aliasName = "HVcpos";
141 //aliasName += nAlias-2*NHV;
142 aliasName = "tof_hv_ip_";
143 sindex.Form("%02i",nAlias-2*NHV);
149 else if (nAlias<NHV*4){
150 // aliasName = "HVcneg";
151 //aliasName += nAlias-3*NHV;
152 aliasName = "tof_hv_in_";
153 sindex.Form("%02i",nAlias-3*NHV);
159 // gauss generation of values
160 for (int timeStamp=0;timeStamp<6000;timeStamp+=10){
161 //for (int timeStamp=0;timeStamp<1;timeStamp++){
162 Float_t gaussvalue = (Float_t) (random.Gaus(tent,sigma));
163 if (TMath::Abs(gaussvalue-tent)>sigma){
164 AliDCSValue* dcsVal = new AliDCSValue(gaussvalue, timeStamp);
165 valueSet->Add(dcsVal);
169 aliasMap->Add(new TObjString(aliasName), valueSet);
176 const Int_t kNsectors = 18;
177 const Int_t kNplates = 5;
180 UInt_t oldBaseWord = 0;
182 for(int i=0;i<kNsectors;i++)
183 for(int j=0;j<kNplates;j++) {
185 TObjArray* valueSetHV = new TObjArray;
186 valueSetHV->SetOwner(1);
188 aliasName = "TOF_HVSTATUS_";
189 sindex.Form("SM%02dMOD%1d",i,j);
193 //for (int timeStamp=0;timeStamp<6000;timeStamp+=600) {
194 for (int timeStamp=0;timeStamp<1201;timeStamp+=600) {
195 if (timeStamp==0 /*|| timeStamp==1200*/) {
196 baseWord = CreateHVword(i,j, kTRUE);
197 oldBaseWord = baseWord;
198 AliDCSValue* dcsVal = new AliDCSValue(baseWord, timeStamp);
199 valueSetHV->Add(dcsVal);
202 if (random.Uniform(0.,1.)>=0.5) {
203 baseWord = CreateHVword(i,j, kFALSE);
204 if (baseWord<=oldBaseWord) {
205 oldBaseWord = baseWord;
206 AliDCSValue* dcsVal = new AliDCSValue(baseWord, timeStamp);
207 valueSetHV->Add(dcsVal);
210 AliDCSValue* dcsVal = new AliDCSValue(oldBaseWord, timeStamp);
211 valueSetHV->Add(dcsVal);
213 //Info(Form(" %2d %1d %s %d %d",i,j,aliasName,timeStamp,baseWord));
219 baseWord = CreateHVword(i,j, kTRUE);
220 AliDCSValue* dcsVal0 = new AliDCSValue(baseWord, 0);
221 valueSetHV->Add(dcsVal0);
223 if ((i==0 && j==2) || (i==9 && j==4)) {
224 baseWord = CreateHVword(i,j, kFALSE);
225 AliDCSValue* dcsVal1 = new AliDCSValue(baseWord, 600);
226 valueSetHV->Add(dcsVal1);
229 baseWord = CreateHVword(i,j, kTRUE);
230 AliDCSValue* dcsVal2 = new AliDCSValue(baseWord, 1200);
231 valueSetHV->Add(dcsVal2);
234 aliasMap->Add(new TObjString(aliasName), valueSetHV);
239 const Int_t kNddl = 72;
243 for(int i=0;i<kNddl;i++) {
245 TObjArray* valueSetLV = new TObjArray;
246 valueSetLV->SetOwner(1);
248 aliasName = "TOF_FEACSTATUS_";
249 sindex.Form("%02d",i);
253 //for (int timeStamp=0;timeStamp<6000;timeStamp+=600) {
254 for (int timeStamp=0;timeStamp<1201;timeStamp+=400) {
255 if (timeStamp==0 /*|| timeStamp==1200*/) {
256 baseWord = CreateLVword(kTRUE);
257 AliDCSValue* dcsVal = new AliDCSValue(baseWord, timeStamp);
258 valueSetLV->Add(dcsVal);
259 oldBaseWord = baseWord;
260 //Info(Form(" %2d %s %d %d",i,aliasName,timeStamp,baseWord));
263 if (random.Uniform(0.,1.)>=0.5) {
264 baseWord = CreateLVword(kFALSE);
265 if (baseWord<=oldBaseWord) {
266 oldBaseWord = baseWord;
267 AliDCSValue* dcsVal = new AliDCSValue(baseWord, timeStamp);
268 valueSetLV->Add(dcsVal);
271 AliDCSValue* dcsVal = new AliDCSValue(oldBaseWord, timeStamp);
272 valueSetLV->Add(dcsVal);
274 //Info(Form(" %2d %1d %s %d %d",i,j,aliasName,timeStamp,baseWord));
280 baseWord = CreateLVword(kTRUE);
281 AliDCSValue* dcsVal0 = new AliDCSValue(baseWord, 0);
282 valueSetLV->Add(dcsVal0);
285 baseWord = CreateLVword(kFALSE);
286 AliDCSValue* dcsVal1 = new AliDCSValue(baseWord, 400);
287 valueSetLV->Add(dcsVal1);
289 else if (i==50 || i==35) {
290 baseWord = CreateLVword(kFALSE);
291 AliDCSValue* dcsVal2 = new AliDCSValue(baseWord, 800);
292 valueSetLV->Add(dcsVal2);
295 baseWord = CreateLVword(kTRUE);
296 AliDCSValue* dcsVal3 = new AliDCSValue(baseWord, 1200);
297 valueSetLV->Add(dcsVal3);
300 aliasMap->Add(new TObjString(aliasName), valueSetLV);
309 UInt_t CreateHVword(Int_t nSector, Int_t nPlate, Bool_t isAtBorder) {
318 for (Int_t iStrip=0; iStrip<AliTOFGeometry::NStrip(nPlate); iStrip++) {
322 if (nPlate==2 && nSector>=13 && nSector<=15)
326 random.Uniform(0.,1.)<0.5 ? word = 0 : word = 1;
327 if (nPlate==2 && nSector>=13 && nSector<=15)
332 AliBitPacking::PackWord(word,baseWord,iStrip,iStrip);
340 UInt_t CreateLVword(Bool_t isAtBorder) {
349 for (Int_t iFeac=0; iFeac<8; iFeac++) {
354 random.Uniform(0.,1.)<0.5 ? word = 0 : word = 1;
358 AliBitPacking::PackWord(word,baseWord,iFeac,iFeac);
366 TMap* ReadDCSAliasMap()
368 // Open a file that contains DCS input data
369 // The CDB framework is used to open the file, this means the file is located
370 // in $ALICE_ROOT/SHUTTLE/TestShuttle/TestCDB/<detector>/DCS/Data
371 // The file contains an AliCDBEntry that contains a TMap with the DCS structure.
372 // An explanation of the structure can be found in CreateDCSAliasMap()
374 AliCDBEntry *entry = AliCDBManager::Instance()->Get("TOF/DCS/Data", 0);
375 return dynamic_cast<TMap*> (entry->GetObject());
378 void WriteDCSAliasMap()
380 // This writes the output from CreateDCSAliasMap to a CDB file
382 TMap* dcsAliasMap = CreateDCSAliasMap();
384 AliCDBMetaData metaData;
385 metaData.SetBeamPeriod(0);
386 metaData.SetResponsible("Chiara");
387 metaData.SetComment("Test object for TOFPreprocessor.C");
389 AliCDBId id("TOF/DCS/Data", 0, 0);
391 // initialize location of CDB
392 AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT/OCDB/SHUTTLE/TestShuttle/TestCDB");
394 AliCDBManager::Instance()->Put(dcsAliasMap, id, &metaData);