Test Macro for TOF Shuttle Preprocessor (C.Zampolli)
authorarcelli <arcelli@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 26 Oct 2006 09:15:11 +0000 (09:15 +0000)
committerarcelli <arcelli@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 26 Oct 2006 09:15:11 +0000 (09:15 +0000)
TOF/TOFPreprocessor.C [new file with mode: 0644]

diff --git a/TOF/TOFPreprocessor.C b/TOF/TOFPreprocessor.C
new file mode 100644 (file)
index 0000000..4238492
--- /dev/null
@@ -0,0 +1,210 @@
+/* 
+$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
+
+void TOFPreprocessor()
+{
+  gSystem->Load("$ALICE/SHUTTLE/TestShuttle/libTestShuttle.so");
+
+  // initialize location of CDB
+  AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT/SHUTTLE/TestShuttle/TestCDB");
+
+  // create AliTestShuttle instance
+  AliTestShuttle* shuttle = new AliTestShuttle(0, 0, 1000);
+
+  // 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", "DELAYS", "MON", "$ALICE_ROOT/TOF/TestShuttle/Total.root");
+  shuttle->AddInputFile(AliTestShuttle::kDAQ, "TOF", "RUNLevel", "MON", "$ALICE_ROOT/TOF/TestShuttle/Partial.root");
+
+  // instantiation of the preprocessor
+  AliPreprocessor* pp = new AliTOFPreprocessor("TOF", shuttle);
+
+  // preprocessing
+  shuttle->Process();
+
+  // checking the file which should have been created  
+  AliCDBEntry* entry = AliCDBManager::Instance()->Get("TOF/Calib/OnlineDelay", 0);
+  if (!entry)
+  {
+    printf("The file is not there. Something went wrong.\n");
+    return;
+  }
+
+  AliTOFDataDCS* output = dynamic_cast<AliTOFDataDCS*> (entry->GetObject());
+  // If everything went fine, draw the result
+  if (output)
+    output->Draw();
+  
+}
+
+TMap* CreateDCSAliasMap()
+{
+  // Creates a DCS structure
+  // The structure is the following:
+  //   TMap (key --> value)
+  //     <DCSAlias> --> <valueList>
+  //     <DCSAlias> is a string
+  //     <valueList> 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 thrHVv=7.75, thrHVc=3, thrLVv=2.75, thrLVc=2.5,
+  //thrFEEthr=1.5, thrFEEt=10, thrTemp=35, thrPress=1000;
+  Float_t tentHVv=6.75, tentHVc=2, tentLVv=1.75, tentLVc=1.5,
+    tentFEEthr=0.5, tentFEEt=20, tentTemp=25, tentPress=900;
+  Float_t sigmaHVv=1, sigmaHVc=0.25, sigmaLVv=0.25, sigmaLVc=0.25,
+    sigmaFEEthr=0.05, sigmaFEEt=5, sigmaTemp=1, sigmaPress=10;
+
+  Float_t tent=0, sigma=0, thr=0;
+  Int_t NAliases=10442, NHV=90, NLV=576, NFEEthr=1152, NFEEt=7776, NT=1, NP=1;
+
+  for(int nAlias=0;nAlias<NAliases;nAlias++) {
+
+    TObjArray* valueSet = new TObjArray;
+    valueSet->SetOwner(1);
+
+    TString aliasName;
+    if (nAlias<NHV){
+      aliasName = "HVvpos";
+      aliasName += nAlias;
+      tent=tentHVv;
+      sigma=sigmaHVv;
+      //      thr=thrHVv;
+    }
+    else if (nAlias<NHV*2){
+      aliasName = "HVvneg";
+      aliasName += nAlias-NHV;
+      tent=-tentHVv;
+      sigma=-sigmaHVv;
+      //thr=-thrHVv;
+    }
+    else if (nAlias<NHV*3){
+      aliasName = "HVcpos";
+      aliasName += nAlias-2*NHV;
+      tent=tentHVc;
+      sigma=sigmaHVc;
+      //thr=thrHVc;
+    }
+    else if (nAlias<NHV*4){
+      aliasName = "HVcneg";
+      aliasName += nAlias-3*NHV;
+      tent=-tentHVc;
+      sigma=-sigmaHVc;
+      //thr=-thrHVc;
+    }
+    else if (nAlias<NHV*4+NLV){
+      aliasName = "LVv";
+      aliasName += nAlias-4*NHV;
+      tent=tentLVv;
+      sigma=sigmaLVv;
+      //thr=thrLVv;
+    }
+    else if (nAlias<NHV*4+2*NLV){
+      aliasName = "LVc";
+      aliasName += nAlias-(4*NHV+NLV);
+      tent=tentLVc;
+      sigma=sigmaLVc;
+      //thr=thrLVc;
+    }
+    else if (nAlias<NHV*4+2*NLV+NFEEthr){
+      aliasName = "FEEthr";
+      aliasName += nAlias-(4*NHV+2*NLV);
+      tent=tentFEEthr;
+      sigma=sigmaFEEthr;
+      //thr=thrFEEthr;
+    }
+    else if (nAlias<NHV*4+2*NLV+NFEEthr+NFEEt){
+      //cout << " nalias fee temp = " << nAlias << endl;
+      aliasName = "FEEt";
+      aliasName += nAlias-(4*NHV+2*NLV+NFEEthr);
+      //cout << " nalias fee temp name = " << aliasName << endl;
+      tent=tentFEEt;
+      sigma=sigmaFEEt;
+      //thr=thrFEEthr;
+    }
+    else if (nAlias<NHV*4+2*NLV+NFEEthr+NFEEt+1){
+      aliasName = "Temperature";
+      tent=tentTemp;
+      sigma=sigmaTemp;
+      //thr=thrTemp;
+    }
+    else if (nAlias<NHV*4+2*NLV+NFEEthr+NFEEt+2){
+      aliasName = "Pressure";
+      tent=tentPress;
+      sigma=sigmaPress;
+      //thr=thrPress;
+    }
+
+
+    // gauss generation of values 
+    for (int timeStamp=0;timeStamp<1000;timeStamp+=10){
+      Float_t gaussvalue = (Float_t) (random.Gaus(tent,sigma));
+      if (TMath::Abs(gaussvalue-tent)>sigma){
+       AliDCSValue* dcsVal = new AliDCSValue(gaussvalue, timeStamp);
+       valueSet->Add(dcsVal);
+      }
+    }
+
+    aliasMap->Add(new TObjString(aliasName), valueSet);
+  }
+
+  return aliasMap;
+}
+
+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/<detector>/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<TMap*> (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/SHUTTLE/TestShuttle/TestCDB");
+
+  AliCDBManager::Instance()->Put(dcsAliasMap, id, &metaData);
+}