TPCQAda.cxx.diff Change export to amore db. Updated after a given time interval.
authormarian <marian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sat, 12 Sep 2009 12:56:42 +0000 (12:56 +0000)
committermarian <marian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sat, 12 Sep 2009 12:56:42 +0000 (12:56 +0000)
TPCRAWda.cxx.diff Change export to amore db. Updated after a given time interval.
AliTPCCalibRaw.cxx.diff Add constructor using configuration map
AliTPCCalibRaw.h.diff Add constructor using configuration map

TPC/AliTPCCalibRaw.cxx
TPC/AliTPCCalibRaw.h
TPC/TPCQAda.cxx
TPC/TPCRAWda.cxx

index 77538c8..c580b37 100644 (file)
@@ -62,12 +62,13 @@ h2f->Draw("col");
 
 //Root includes
 #include <TH2C.h>
+#include <TMap.h>
+#include <TObjString.h>
 
 //AliRoot includes
 #include "AliTPCCalROC.h"
 #include "AliAltroRawStream.h"
 #include "AliLog.h"
-
 //class header
 #include "AliTPCCalibRaw.h"
 
@@ -104,9 +105,46 @@ AliTPCCalibRaw::AliTPCCalibRaw() :
   SetNameTitle("AliTPCCalibRaw","AliTPCCalibRaw");
   CreateDVhist();
   fFirstTimeBin=850;
-  fLastTimeBin=1000;
+  fLastTimeBin=1020;
 }
 //_____________________________________________________________________
+AliTPCCalibRaw::AliTPCCalibRaw(const TMap *config) :
+AliTPCCalibRawBase(),
+fPeakDetMinus(1),
+fPeakDetPlus(2),
+fNFailL1Phase(0),
+fFirstTimeStamp(0),
+fNSecTime(600), //default 10 minutes
+fNBinsTime(60), //default 60*10 minutes = 10 hours
+fPadProcessed(kFALSE),
+fCurrentChannel(-1),
+fCurrentSector(-1),
+fLastSector(-2),
+fCurrentRow(-1),
+fCurrentPad(-1),
+fLastTimeBinProc(0),
+fPeakTimeBin(0),
+fLastSignal(0),
+fNOkPlus(0),
+fNOkMinus(0),
+fArrCurrentPhaseDist(4),
+fArrALTROL1Phase(1000),
+fArrALTROL1PhaseEvent(216),
+fArrALTROL1PhaseFailEvent(216),
+fHnDrift(0x0)
+{
+  //
+  // Default ctor
+  //
+  SetNameTitle("AliTPCCalibRaw","AliTPCCalibRaw");
+  CreateDVhist();
+  fFirstTimeBin=850;
+  fLastTimeBin=1020;
+  if (config->GetValue("FirstTimeBin")) fFirstTimeBin = ((TObjString*)config->GetValue("FirstTimeBin"))->GetString().Atoi();
+  if (config->GetValue("LastTimeBin")) fLastTimeBin = ((TObjString*)config->GetValue("LastTimeBin"))->GetString().Atoi();
+}
+
+//_____________________________________________________________________
 AliTPCCalibRaw::~AliTPCCalibRaw()
 {
   //
@@ -317,9 +355,9 @@ void AliTPCCalibRaw::CreateDVhist()
   if (fHnDrift) return;
   //HnSparse bins
   //time bin, roc, time
-  Int_t    bins[kHnBinsDV] = {1000, 72, fNBinsTime};
-  Double_t xmin[kHnBinsDV] = {0,0,0};
-  Double_t xmax[kHnBinsDV] = {1000,72,fNBinsTime};
+  Int_t    bins[kHnBinsDV] = {fLastTimeBin-fFirstTimeBin, 72, fNBinsTime};
+  Double_t xmin[kHnBinsDV] = {fFirstTimeBin,0,0};
+  Double_t xmax[kHnBinsDV] = {fLastTimeBin,72,fNBinsTime};
   fHnDrift=new THnSparseI("fHnDrift",Form("Drift velocity using last time bin;time bin[#times 100ns];ROC;Time bin [#times %us]",fNSecTime),kHnBinsDV, bins, xmin, xmax);
     
 }
index bad07b6..10e07af 100644 (file)
 #include "AliTPCROC.h"
 
 class TH2C;
+class TMap;
 
 class AliTPCCalibRaw : public AliTPCCalibRawBase {
 public:
   AliTPCCalibRaw();
+  AliTPCCalibRaw(const TMap *config);
   
   virtual ~AliTPCCalibRaw();
 
index c4d7a24..d50e4df 100644 (file)
@@ -21,6 +21,7 @@ TPCQAda.cxx - algorithm for TPC RAW QA
 06/12/2007  haavard.helstrup@cern.ch  :  created CE DA based on pulser code
 09/06/2008  peter.christiansen@hep.lu.se and haavard.helstrup@cern.ch  :  created QA DA based on AliTPCdataQA code
 
+10/09/2009  Jens.Wiechula@cern.ch:     Export object to AMOREdb after a defined update interval for QA
 contact: marian.ivanov@cern.ch, peter.christiansen@hep.lu.se
 
 
@@ -45,9 +46,11 @@ and save results in a file (named from RESULT_FILE define - see below).
 //Root includes
 //
 #include <TFile.h>
-#include "TROOT.h"
-#include "TPluginManager.h"
-#include "TSystem.h"
+#include <TROOT.h>
+#include <TPluginManager.h>
+#include <TSystem.h>
+#include <TStopwatch.h>
+#include <TObject.h>
 //
 //AliRoot includes
 //
@@ -61,12 +64,18 @@ and save results in a file (named from RESULT_FILE define - see below).
 #include "TTreeStream.h"
 #include "AliLog.h"
 #include "AliTPCConfigDA.h"
-
+//
+//AMORE
+//
+#include <AmoreDA.h>
 //
 // TPC calibration algorithm includes
 //
 #include "AliTPCdataQA.h"
 
+//functios, implementation below
+void SendToAmoreDB(TObject *o, unsigned long32 runNb);
+
 /* Main routine
       Arguments: list of DATE raw data files
 */
@@ -86,6 +95,7 @@ int main(int argc, char **argv) {
   //variables 
   int i,status;
   AliTPCmapper *mapping = 0;   // The TPC mapping
+  unsigned long32 runNb=0;      //run number
   // configuration options
   Bool_t fastDecoding = kFALSE;
  // if  test setup get parameters from $DAQDA_TEST_DIR 
@@ -127,7 +137,7 @@ int main(int argc, char **argv) {
   }
 
 
-  AliTPCdataQA calibQA(config.GetConfigurationMap());   // pedestal and noise calibration
+  AliTPCdataQA calibQA(config.GetConfigurationMap());   // qa object
 
   if (argc<2) {
     printf("Wrong number of arguments\n");
@@ -149,7 +159,13 @@ int main(int argc, char **argv) {
     printf("monitorDeclareMp() failed : %s\n",monitorDecodeError(status));
     return -1;
   }
-
+  //amore update interval
+  Double_t updateInterval=30; //seconds
+  Double_t valConf=config.GetValue("AmoreUpdateInterval");
+  if ( valConf>0 ) updateInterval=valConf;
+  //timer
+  TStopwatch stopWatch;
+  
   monitorSetNowait();
   monitorSetNoWaitNetworkTimeout(1000);
 
@@ -189,14 +205,21 @@ int main(int argc, char **argv) {
         continue;
       }
       nevents++;
-
-      //  Pulser calibration
-
+      // get the run number
+      runNb = event->eventRunNb;
+      //  QA
       AliRawReader *rawReader = new AliRawReaderDate((void*)event);
       if ( fastDecoding ) calibQA.ProcessEventFast(rawReader);   
       else calibQA.ProcessEvent(rawReader);
       delete rawReader;
-
+      // sending to AMOREdb
+      if (stopWatch.RealTime()>updateInterval){
+        SendToAmoreDB(&calibQA,runNb);
+        stopWatch.Start();
+      } else {
+        stopWatch.Continue();
+      }
+      
       /* free resources */
       free(event);
     }
@@ -216,6 +239,39 @@ int main(int argc, char **argv) {
   if (status) {
     status = -2;
   }
-
+  //
+  //Send objects to the AMORE DB
+  //
+  printf ("AMORE part\n");
+  SendToAmoreDB(&calibQA, runNb);
+  
   return status;
 }
+
+void SendToAmoreDB(TObject *o, unsigned long32 runNb)
+{
+  //AMORE
+  const char *amoreDANameorig=gSystem->Getenv("AMORE_DA_NAME");
+  //cheet a little -- temporary solution (hopefully)
+  //
+  //currently amoreDA uses the environment variable AMORE_DA_NAME to create the mysql
+  //table in which the calib objects are stored. This table is dropped each time AmoreDA
+  //is initialised. This of course makes a problem if we would like to store different
+  //calibration entries in the AMORE DB. Therefore in each DA which writes to the AMORE DB
+  //the AMORE_DA_NAME env variable is overwritten.
+  
+  gSystem->Setenv("AMORE_DA_NAME","TPC-dataQA");
+  //
+  // end cheet
+  TDatime time;
+  TObjString info(Form("Run: %u; Date: %s",runNb,time.AsString()));
+  
+  amore::da::AmoreDA amoreDA(amore::da::AmoreDA::kSender);
+  Int_t statusDA=0;
+  statusDA+=amoreDA.Send("DataQA",o);
+  statusDA+=amoreDA.Send("Info",&info);
+  if ( statusDA!=0 )
+    printf("Waring: Failed to write one of the calib objects to the AMORE database\n");
+  // reset env var
+  if (amoreDANameorig) gSystem->Setenv("AMORE_DA_NAME",amoreDANameorig);
+}
index d23b9b8..9682092 100644 (file)
@@ -15,10 +15,11 @@ Trigger types used: PHYSICS_EVENT
 
 /*
 
-TPCRAWda.cxx - calibration algorithm for TPC pulser events
-
-30/09/2009  J.Wiechula@gsi.de:     First implementation. 
+TPCRAWda.cxx - calibration algorithm for L1 phase monitoring and drift velocity from last time bin determination
 
+30/07/2009  Jens.Wiechula@cern.ch:     First implementation.
+10/09/2009  Jens.Wiechula@cern.ch:     Add configuration file support. Export object to AMOREdb
+                                       after a defined update interval for QA
 
 This process reads RAW data from the files provided as command line arguments
 and save results in a file (named from RESULT_FILE define - see below).
@@ -42,11 +43,13 @@ and save results in a file (named from RESULT_FILE define - see below).
 //Root includes
 //
 #include <TFile.h>
-#include "TROOT.h"
-#include "TPluginManager.h"
-#include "TString.h"
-#include "TObjString.h"
-#include "TDatime.h"
+#include <TROOT.h>
+#include <TPluginManager.h>
+#include <TString.h>
+#include <TObjString.h>
+#include <TDatime.h>
+#include <TStopwatch.h>
+#include <TObject.h>
 //
 //AliRoot includes
 //
@@ -60,7 +63,7 @@ and save results in a file (named from RESULT_FILE define - see below).
 #include "TTreeStream.h"
 #include "AliLog.h"
 #include "TSystem.h"
-// #include "AliTPCConfigDA.h"
+#include "AliTPCConfigDA.h"
 //
 //AMORE
 //
@@ -70,6 +73,10 @@ and save results in a file (named from RESULT_FILE define - see below).
 //
 #include "AliTPCCalibRaw.h"
 
+
+//functions, implementation below
+void SendToAmoreDB(TObject *o, unsigned long32 runNb);
+
 /* Main routine
       Arguments: list of DATE raw data files
 */
@@ -137,19 +144,25 @@ int main(int argc, char **argv) {
   // DA configuration from configuration file
   //
  //retrieve configuration file
-//   sprintf(localfile,"./%s",CONFIG_FILE);
-//   status = daqDA_DB_getFile(CONFIG_FILE,localfile);
-//   if (status) {
-//     printf("Failed to get configuration file (%s) from DAQdetDB, status=%d\n", CONFIG_FILE, status);
-//     return -1;
-//   }
-//   AliTPCConfigDA config(CONFIG_FILE);
+  sprintf(localfile,"./%s",CONFIG_FILE);
+  status = daqDA_DB_getFile(CONFIG_FILE,localfile);
+  if (status) {
+    printf("Failed to get configuration file (%s) from DAQdetDB, status=%d\n", CONFIG_FILE, status);
+    return -1;
+  }
+  AliTPCConfigDA config(CONFIG_FILE);
 
   // create calibration object
 //   AliTPCCalibRaw calibRaw(config.GetConfigurationMap());   // pulser calibration algorithm
-  AliTPCCalibRaw calibRaw;   // pulser calibration algorithm
+  AliTPCCalibRaw calibRaw(config.GetConfigurationMap());   // pulser calibration algorithm
   calibRaw.SetAltroMapping(mapping->GetAltroMapping()); // Use altro mapping we got from daqDetDb
-
+  
+  //amore update interval
+  Double_t updateInterval=30; //seconds
+  Double_t valConf=config.GetValue("AmoreUpdateInterval");
+  if ( valConf>0 ) updateInterval=valConf;
+  //timer
+  TStopwatch stopWatch;
   //===========================//
   // loop over RAW data files //
   //==========================//
@@ -192,7 +205,14 @@ int main(int argc, char **argv) {
       runNb = event->eventRunNb;
       //  Raw calibration
       calibRaw.ProcessEvent(event);
-
+      // sending to AMOREdb
+      if (stopWatch.RealTime()>updateInterval){
+        SendToAmoreDB(&calibRaw,runNb);
+        stopWatch.Start();
+      } else {
+        stopWatch.Continue();
+      }
+        
       /* free resources */
       free(event);
     }
@@ -219,29 +239,35 @@ int main(int argc, char **argv) {
   //Send objects to the AMORE DB
   //
   printf ("AMORE part\n");
+  SendToAmoreDB(&calibRaw, runNb);
+  
+  return status;
+}
+
+void SendToAmoreDB(TObject *o, unsigned long32 runNb)
+{
+  //AMORE
   const char *amoreDANameorig=gSystem->Getenv("AMORE_DA_NAME");
   //cheet a little -- temporary solution (hopefully)
-  // 
+  //
   //currently amoreDA uses the environment variable AMORE_DA_NAME to create the mysql
   //table in which the calib objects are stored. This table is dropped each time AmoreDA
   //is initialised. This of course makes a problem if we would like to store different
   //calibration entries in the AMORE DB. Therefore in each DA which writes to the AMORE DB
-  //the AMORE_DA_NAME env variable is overwritten.  
+  //the AMORE_DA_NAME env variable is overwritten.
+  
   gSystem->Setenv("AMORE_DA_NAME","TPC-RAW");
-  // 
+  //
   // end cheet
   TDatime time;
   TObjString info(Form("Run: %u; Date: %s",runNb,time.AsString()));
-    
+  
   amore::da::AmoreDA amoreDA(amore::da::AmoreDA::kSender);
-  Int_t statusDA=0;  
-  statusDA+=amoreDA.Send("CalibRaw",&calibRaw);
+  Int_t statusDA=0;
+  statusDA+=amoreDA.Send("CalibRaw",o);
   statusDA+=amoreDA.Send("Info",&info);
   if ( statusDA!=0 )
     printf("Waring: Failed to write one of the calib objects to the AMORE database\n");
-  // reset env var  
+  // reset env var
   if (amoreDANameorig) gSystem->Setenv("AMORE_DA_NAME",amoreDANameorig);
-
-  return status;
 }