/* $Id$ */ // This class runs the test TOF preprocessor // It uses AliTestShuttle to simulate a full Shuttle process // The input data is created in the functions // CreateDCSAliasMap() creates input that would in the same way come from DCS // ReadDCSAliasMap() reads from a file // CreateInputFilesMap() creates a list of local files, that can be accessed by the shuttle extern TBenchmark *gBenchmark; void TOFPreprocessor(Char_t * RunType="PHYSICS") { gSystem->Load("$ALICE_ROOT/SHUTTLE/TestShuttle/libTestShuttle"); AliLog::SetClassDebugLevel("AliTOFPreprocessor",2); // initialize location of CDB AliTestShuttle::SetMainCDB("local://$ALICE_ROOT/OCDB/SHUTTLE/TestShuttle/TestCDB"); AliTestShuttle::SetMainRefStorage("local://$ALICE_ROOT/OCDB/SHUTTLE/TestShuttle/TestReference"); // create AliTestShuttle instance Int_t nrun = 104892; AliTestShuttle* shuttle = new AliTestShuttle(nrun, 30, 980); //setting run type to physiscs shuttle->SetInputRunType(RunType); shuttle->SetTimeCreated(20); shuttle->SetDCSQueryOffset(20); // Generation of "fake" input DCS data TMap* dcsAliasMap = CreateDCSAliasMap(); // now give the alias map to the shuttle shuttle->SetDCSInput(dcsAliasMap); // processing files. for the time being, the files are local. shuttle->AddInputFile(AliTestShuttle::kDAQ, "TOF", "HITS", "MON", "$ALICE_ROOT/TOF/ShuttleInput/Hits.root"); shuttle->AddInputFile(AliTestShuttle::kDAQ, "TOF", "CALIB", "MON", "$ALICE_ROOT/TOF/ShuttleInput/Calib.root"); shuttle->AddInputFile(AliTestShuttle::kDAQ, "TOF", "READOUT", "MON", "$ALICE_ROOT/TOF/ShuttleInput/Readout.root"); shuttle->AddInputFile(AliTestShuttle::kDAQ, "TOF", "DELAYS", "MON", "$ALICE_ROOT/TOF/ShuttleInput/Total.root"); shuttle->AddInputFile(AliTestShuttle::kDAQ, "TOF", "RUNLevel", "MON", "$ALICE_ROOT/TOF/ShuttleInput/Partial.root"); shuttle->AddInputFile(AliTestShuttle::kDCS, "TOF", "TofFeeLightMap", "", "$ALICE_ROOT/TOF/ShuttleInput/TOFFEElight.20101028.133932.8000"); shuttle->AddInputFile(AliTestShuttle::kDCS, "TOF", "TofFeeMap", "", "$ALICE_ROOT/TOF/ShuttleInput/TOFFEE.20091217.194708.105517"); TString filename; TString LDCname; //char filename[100]; //char LDCname[5]; for (Int_t iLDC=0;iLDC<2;iLDC++){ filename.Form("$ALICE_ROOT/TOF/ShuttleInput/TOFoutPulserLDC_%02i.root",iLDC*2); LDCname.Form("LDC%i",iLDC*2); shuttle->AddInputFile(AliTestShuttle::kDAQ, "TOF", "PULSER", LDCname, filename); filename.Form("$ALICE_ROOT/TOF/ShuttleInput/TOFoutNoiseLDC_%02i.root",iLDC*2); LDCname.Form("LDC%i",iLDC*2); shuttle->AddInputFile(AliTestShuttle::kDAQ, "TOF", "NOISE", LDCname, filename); } // instantiation of the preprocessor AliPreprocessor* pp = new AliTOFPreprocessor(shuttle); // preprocessing gBenchmark->Start("process"); shuttle->Process(); gBenchmark->Stop("process"); gBenchmark->Print("process"); } TMap* CreateDCSAliasMap() { // Creates a DCS structure // The structure is the following: // TMap (key --> value) // --> // is a string // is a TObjArray of AliDCSValue // An AliDCSValue consists of timestamp and a value in form of a AliSimpleValue // In this example 6 aliases exists: DCSAlias1 ... DCSAlias6 // Each contains 1000 values randomly generated by TRandom::Gaus + 5*nAlias TMap* aliasMap = new TMap; aliasMap->SetOwner(1); TRandom random; /* TDatime *datime = new TDatime(); Int_t time = datime->GetTime(); Int_t date = datime->GetDate(); Int_t pid = gSystem->GetPid(); delete datime; Int_t iseed = TMath::Abs(10000 * pid + time - date); */ Float_t tentHVv=6500, tentHVi=80; Float_t sigmaHVv=10, sigmaHVi=10; Float_t tent=0, sigma=0;//, thr=0; // to have all the aliases, decomment the following line: Int_t NAliases=360, NHV=90; // if not all the aliases are there, use this: //Int_t NAliases=120, NHV=90; TString sindex; TString aliasName; for(int nAlias=0;nAliasSetOwner(1); if (nAliassigma){ AliDCSValue* dcsVal = new AliDCSValue(gaussvalue, timeStamp); valueSet->Add(dcsVal); } } aliasMap->Add(new TObjString(aliasName), valueSet); } const Int_t kNsectors = 18; const Int_t kNplates = 5; UInt_t baseWord = 0; UInt_t oldBaseWord = 0; for(int i=0;iSetOwner(1); aliasName = "TOF_HVSTATUS_"; sindex.Form("SM%02dMOD%1d",i,j); aliasName += sindex; //for (int timeStamp=0;timeStamp<6000;timeStamp+=600) { for (int timeStamp=0;timeStamp<1201;timeStamp+=600) { if (timeStamp==0 /*|| timeStamp==1200*/) { baseWord = CreateHVword(i,j, kTRUE); oldBaseWord = baseWord; AliDCSValue* dcsVal = new AliDCSValue(baseWord, timeStamp); valueSetHV->Add(dcsVal); } else { if (random.Uniform(0.,1.)>=0.5) { baseWord = CreateHVword(i,j, kFALSE); if (baseWord<=oldBaseWord) { oldBaseWord = baseWord; AliDCSValue* dcsVal = new AliDCSValue(baseWord, timeStamp); valueSetHV->Add(dcsVal); } else { AliDCSValue* dcsVal = new AliDCSValue(oldBaseWord, timeStamp); valueSetHV->Add(dcsVal); } //Info(Form(" %2d %1d %s %d %d",i,j,aliasName,timeStamp,baseWord)); } } } /* baseWord = CreateHVword(i,j, kTRUE); AliDCSValue* dcsVal0 = new AliDCSValue(baseWord, 0); valueSetHV->Add(dcsVal0); if ((i==0 && j==2) || (i==9 && j==4)) { baseWord = CreateHVword(i,j, kFALSE); AliDCSValue* dcsVal1 = new AliDCSValue(baseWord, 600); valueSetHV->Add(dcsVal1); } baseWord = CreateHVword(i,j, kTRUE); AliDCSValue* dcsVal2 = new AliDCSValue(baseWord, 1200); valueSetHV->Add(dcsVal2); */ aliasMap->Add(new TObjString(aliasName), valueSetHV); } const Int_t kNddl = 72; baseWord = 0; oldBaseWord = 0; for(int i=0;iSetOwner(1); aliasName = "TOF_FEACSTATUS_"; sindex.Form("%02d",i); aliasName += sindex; //for (int timeStamp=0;timeStamp<6000;timeStamp+=600) { for (int timeStamp=0;timeStamp<1201;timeStamp+=400) { if (timeStamp==0 /*|| timeStamp==1200*/) { baseWord = CreateLVword(kTRUE); AliDCSValue* dcsVal = new AliDCSValue(baseWord, timeStamp); valueSetLV->Add(dcsVal); oldBaseWord = baseWord; //Info(Form(" %2d %s %d %d",i,aliasName,timeStamp,baseWord)); } else { if (random.Uniform(0.,1.)>=0.5) { baseWord = CreateLVword(kFALSE); if (baseWord<=oldBaseWord) { oldBaseWord = baseWord; AliDCSValue* dcsVal = new AliDCSValue(baseWord, timeStamp); valueSetLV->Add(dcsVal); } else { AliDCSValue* dcsVal = new AliDCSValue(oldBaseWord, timeStamp); valueSetLV->Add(dcsVal); } //Info(Form(" %2d %1d %s %d %d",i,j,aliasName,timeStamp,baseWord)); } } } /* baseWord = CreateLVword(kTRUE); AliDCSValue* dcsVal0 = new AliDCSValue(baseWord, 0); valueSetLV->Add(dcsVal0); if (i==7 || i==9) { baseWord = CreateLVword(kFALSE); AliDCSValue* dcsVal1 = new AliDCSValue(baseWord, 400); valueSetLV->Add(dcsVal1); } else if (i==50 || i==35) { baseWord = CreateLVword(kFALSE); AliDCSValue* dcsVal2 = new AliDCSValue(baseWord, 800); valueSetLV->Add(dcsVal2); } baseWord = CreateLVword(kTRUE); AliDCSValue* dcsVal3 = new AliDCSValue(baseWord, 1200); valueSetLV->Add(dcsVal3); */ aliasMap->Add(new TObjString(aliasName), valueSetLV); } return aliasMap; } UInt_t CreateHVword(Int_t nSector, Int_t nPlate, Bool_t isAtBorder) { // // // UInt_t baseWord = 0; UInt_t word = 0; TRandom random; for (Int_t iStrip=0; iStrip=13 && nSector<=15) word = 0; } else { random.Uniform(0.,1.)<0.5 ? word = 0 : word = 1; if (nPlate==2 && nSector>=13 && nSector<=15) word = 0; word = 0; } AliBitPacking::PackWord(word,baseWord,iStrip,iStrip); } return baseWord; } UInt_t CreateLVword(Bool_t isAtBorder) { // // // UInt_t baseWord = 0; UInt_t word = 0; TRandom random; for (Int_t iFeac=0; iFeac<8; iFeac++) { if (isAtBorder) word = 1; else { random.Uniform(0.,1.)<0.5 ? word = 0 : word = 1; word = 0; } AliBitPacking::PackWord(word,baseWord,iFeac,iFeac); } return baseWord; } TMap* ReadDCSAliasMap() { // Open a file that contains DCS input data // The CDB framework is used to open the file, this means the file is located // in $ALICE_ROOT/SHUTTLE/TestShuttle/TestCDB//DCS/Data // The file contains an AliCDBEntry that contains a TMap with the DCS structure. // An explanation of the structure can be found in CreateDCSAliasMap() AliCDBEntry *entry = AliCDBManager::Instance()->Get("TOF/DCS/Data", 0); return dynamic_cast (entry->GetObject()); } void WriteDCSAliasMap() { // This writes the output from CreateDCSAliasMap to a CDB file TMap* dcsAliasMap = CreateDCSAliasMap(); AliCDBMetaData metaData; metaData.SetBeamPeriod(0); metaData.SetResponsible("Chiara"); metaData.SetComment("Test object for TOFPreprocessor.C"); AliCDBId id("TOF/DCS/Data", 0, 0); // initialize location of CDB AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT/OCDB/SHUTTLE/TestShuttle/TestCDB"); AliCDBManager::Instance()->Put(dcsAliasMap, id, &metaData); }