TPCCEda.cxx.diff Allow to change the monitoring type from the config file...
authormarian <marian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 3 Feb 2010 13:48:01 +0000 (13:48 +0000)
committermarian <marian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 3 Feb 2010 13:48:01 +0000 (13:48 +0000)
TPCQAda.cxx.diff        Exclude laser triggered events. Necessary in interleaved mode
TPCRAWda.cxx.diff       Exclude laser triggered events. Necessary in interleaved
(Jens)

TPC/TPCCEda.cxx
TPC/TPCQAda.cxx
TPC/TPCRAWda.cxx

index 2e7da68..cd1f38b 100644 (file)
@@ -88,10 +88,10 @@ void SendToAmoreDB(AliTPCCalibCE &calibCE, unsigned long32 runNb);
 */
 int main(int argc, char **argv) {
   /* log start of process */
-  printf("TPC CE DA started - %s\n",__FILE__);
+  printf("TPCCEda: DA started - %s\n",__FILE__);
   
   if (argc<2) {
-    printf("Wrong number of arguments\n");
+    printf("TPCCEda: Wrong number of arguments\n");
     return -1;
   }
   
@@ -110,7 +110,7 @@ int main(int argc, char **argv) {
   int i,status;
   status=monitorDeclareMp( __FILE__ );
   if (status!=0) {
-    printf("monitorDeclareMp() failed : %s\n",monitorDecodeError(status));
+    printf("TPCCEda: monitorDeclareMp() failed : %s\n",monitorDecodeError(status));
     return -1;
   }
   monitorSetNowait();
@@ -129,25 +129,28 @@ int main(int argc, char **argv) {
   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);
+    printf("TPCCEda: Failed to get configuration file (%s) from DAQdetDB, status=%d\n", CONFIG_FILE, status);
     return -1;
   }
   AliTPCConfigDA config(CONFIG_FILE);
   // check configuration options
   TString laserTriggerName("C0LSR-ABCE-NOPF-CENT");
-  size_t  bufferSize=30;
+  TString monitoringType("YES");
   Int_t   forceTriggerId=-1;
-  Int_t   forceNeventsStandalone=-1;
-  Bool_t  forceBufferEndsGlobal=kTRUE;
-//   Bool_t  forceBufferEndsGlobalDummy=kFALSE;  
+  
   if ( config.GetConfigurationMap()->GetValue("LaserTriggerName") ) {
     laserTriggerName=config.GetConfigurationMap()->GetValue("LaserTriggerName")->GetName();
-    printf("Laser trigger class name set to: %s.\n",laserTriggerName.Data());
+    printf("TPCCEda: Laser trigger class name set to: %s.\n",laserTriggerName.Data());
   }
-    
-  if ( config.GetConfigurationMap()->GetValue("ForceTriggerId") ) {
-    forceTriggerId=TMath::Nint(config.GetValue("ForceTriggerId"));
-    printf("Only processing triggers with Id: %d.\n",forceTriggerId);
+
+  if ( config.GetConfigurationMap()->GetValue("MonitoringType") ) {
+    monitoringType=config.GetConfigurationMap()->GetValue("MonitoringType")->GetName();
+    printf("TPCCEda: Monitoring type set to: %s.\n",monitoringType.Data());
+  }
+
+  if ( config.GetConfigurationMap()->GetValue("ForceLaserTriggerId") ) {
+    forceTriggerId=TMath::Nint(config.GetValue("ForceLaserTriggerId"));
+    printf("TPCCEda: Only processing triggers with Id: %d.\n",forceTriggerId);
   }
   
   
@@ -162,21 +165,21 @@ int main(int argc, char **argv) {
     //select proper trigger class id
     char c[5];
     snprintf(c,sizeof(c),"%u",(unsigned int)classIdptr);
-    char *table[5] = {"PHY","Y","*",c,NULL};
+    char *table[5] = {"PHY",const_cast<char*>(monitoringType.Data()),"*",c,NULL};
     monitorDeclareTableExtended(table);
-    printf("Using trigger class Id: %s\n",c);
+    printf("TPCCEda: Using monitoring table: (PHY, %s, *, %s)\n",monitoringType.Data(),c);
   } else if (retClassId==-1){
     //global partition without laser triggered events
     //the DA should exit properly without processing
-    printf("Laser trigger class '%s' was not found among trigger class names. Will stop processing.\n",laserTriggerName.Data());
+    printf("TPCCEda: Laser trigger class '%s' was not found among trigger class names. Will stop processing.\n",laserTriggerName.Data());
     return 0;
   } else if (retClassId==-2){
     //standalone case, accept all physics events
     char *table[5] = {"PHY","Y","*","*",NULL};
     monitorDeclareTableExtended(table);
-    printf("Using all trigger class Ids\n");
+    printf("TPCCEda: Using all trigger class Ids\n");
   } else {
-    printf("Unknown return value of 'daqDA_getClassIdFromName': %d\n",retClassId);
+    printf("TPCCEda: Unknown return value of 'daqDA_getClassIdFromName': %d\n",retClassId);
     return -2;
   }
 
@@ -186,7 +189,6 @@ int main(int argc, char **argv) {
     sprintf(c,"%d",forceTriggerId);
     char *table[5] = {"PHY","Y","*",c,NULL};
     monitorDeclareTableExtended(table);
-//     forceBufferEndsGlobal=forceBufferEndsGlobalDummy;
   }
   
   
@@ -196,7 +198,7 @@ int main(int argc, char **argv) {
     sprintf(localfile,"./%s",MAPPING_FILE);
     status = daqDA_DB_getFile(MAPPING_FILE,localfile);
     if (status) {
-      printf("Failed to get mapping file (%s) from DAQdetDB, status=%d\n", MAPPING_FILE, status);
+      printf("TPCCEda: Failed to get mapping file (%s) from DAQdetDB, status=%d\n", MAPPING_FILE, status);
       return -1;
     }
     
@@ -207,10 +209,10 @@ int main(int argc, char **argv) {
   }
   
   if (mapping == 0) {
-    printf("Failed to get mapping object from %s.  ...\n", MAPPING_FILE);
+    printf("TPCCEda: Failed to get mapping object from %s.  ...\n", MAPPING_FILE);
     return -1;
   } else {
-    printf("Got mapping object from %s\n", MAPPING_FILE);
+    printf("TPCCEda: Got mapping object from %s\n", MAPPING_FILE);
   }
   
     
@@ -229,14 +231,15 @@ int main(int argc, char **argv) {
   // loop over RAW data files //
   //==========================//
   int nevents=0;
+  int neventsOld=0;
   size_t counter=0;
   for ( i=1; i<argc; i++) {
     
     /* define data source : this is argument i */
-    printf("Processing file %s\n", argv[i]);
+    printf("TPCCEda: Processing file %s\n", argv[i]);
     status=monitorSetDataSource( argv[i] );
     if (status!=0) {
-      printf("monitorSetDataSource() failed : %s\n",monitorDecodeError(status));
+      printf("TPCCEda: monitorSetDataSource() failed : %s\n",monitorDecodeError(status));
       return -1;
     }
 
@@ -251,18 +254,34 @@ int main(int argc, char **argv) {
       /* get next event (blocking call until timeout) */
       status=monitorGetEventDynamic((void **)&event);
       if (status==MON_ERR_EOF) {
-        printf ("End of File %d detected\n",i);
+        printf ("TPCCEda: End of File %d detected\n",i);
         break; /* end of monitoring file has been reached */
       }
       
       if (status!=0) {
-        printf("monitorGetEventDynamic() failed : %s\n",monitorDecodeError(status));
+        printf("TPCCEda: monitorGetEventDynamic() failed : %s\n",monitorDecodeError(status));
         break;
       }
       
         /* retry if got no event */
-      if (event==NULL)
+      if (event==NULL){
+        //use time in between bursts to
+        // send the data to AMOREdb
+        if (stopWatch.RealTime()>updateInterval){
+          calibCE.Analyse();
+          SendToAmoreDB(calibCE,runNb);
+          stopWatch.Start();
+        } else {
+          stopWatch.Continue();
+        }
+        //debug output
+        if (nevents>neventsOld){
+          printf ("TPCCEda: %d events processed, %d used\n",nevents,calibCE.GetNeventsProcessed());
+          neventsOld=nevents;
+        }
+        
         continue;
+      }
       
       /* skip start/end of run events */
       if ( (event->eventType != physicsEvent) && (event->eventType != calibrationEvent) ){
@@ -277,14 +296,6 @@ int main(int argc, char **argv) {
       // CE calibration
       calibCE.ProcessEvent(event);
       
-      // sending to AMOREdb
-      if (stopWatch.RealTime()>updateInterval){
-        SendToAmoreDB(calibCE,runNb);
-        stopWatch.Start();
-      } else {
-        stopWatch.Continue();
-      }
-      
       /* free resources */
       free(event);
       ++nevents;
@@ -295,12 +306,12 @@ int main(int argc, char **argv) {
   // Analyse CE data and write them to rootfile
   //
   calibCE.Analyse();
-  printf ("%d events processed, %d used\n",nevents,calibCE.GetNeventsProcessed());
+  printf ("TPCCEda: %d events processed, %d used\n",nevents,calibCE.GetNeventsProcessed());
   
   TFile * fileTPC = new TFile (RESULT_FILE,"recreate");
   calibCE.Write("tpcCalibCE");
   delete fileTPC;
-  printf("Wrote %s\n",RESULT_FILE);
+  printf("TPCCEda: Wrote %s\n",RESULT_FILE);
   
   /* store the result file on FES */
   
@@ -343,7 +354,7 @@ void SendToAmoreDB(AliTPCCalibCE &calibCE, unsigned long32 runNb)
   statusDA+=amoreDA.Send("DriftC",grC);
   statusDA+=amoreDA.Send("Info",&info);
   if ( statusDA!=0 )
-    printf("Waring: Failed to write one of the calib objects to the AMORE database\n");
+    printf("TPCCEda: 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);
   if (grA) delete grA;
index 8ea8bb0..4031b38 100644 (file)
@@ -22,8 +22,9 @@ TPCQAda.cxx - algorithm for TPC RAW QA
 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
+26/01/2010  Jens.Wiechula@cern.ch:     Exclude laser triggers when running in a global partition
 
+contact: marian.ivanov@cern.ch, peter.christiansen@hep.lu.se
 
 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).
@@ -51,6 +52,7 @@ and save results in a file (named from RESULT_FILE define - see below).
 #include <TSystem.h>
 #include <TStopwatch.h>
 #include <TObject.h>
+#include <TMap.h>
 //
 //AliRoot includes
 //
@@ -80,7 +82,14 @@ void SendToAmoreDB(TObject *o, unsigned long32 runNb);
       Arguments: list of DATE raw data files
 */
 int main(int argc, char **argv) {
-
+  /* log start of process */
+  printf("TPCQAda: DA started - %s\n",__FILE__);
+  
+  if (argc<2) {
+    printf("TPCQAda: Wrong number of arguments\n");
+    return -1;
+  }
+  
  gROOT->GetPluginManager()->AddHandler("TVirtualStreamerInfo",
                                          "*",
                                          "TStreamerInfo",
@@ -92,20 +101,27 @@ int main(int argc, char **argv) {
   AliLog::SetClassDebugLevel("AliTPCAltroMapping",-5);
   AliLog::SetModuleDebugLevel("RAW",-5);
 
-  //variables 
-  int i,status;
+  /* declare monitoring program */
+  int status=monitorDeclareMp( __FILE__ );
+  if (status!=0) {
+    printf("TPCQAda: monitorDeclareMp() failed : %s\n",monitorDecodeError(status));
+    return -1;
+  }
+  //Set network timeout
+  monitorSetNowait();
+  monitorSetNoWaitNetworkTimeout(1000);
+  
+  //variables
   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 
+  // if  test setup get parameters from $DAQDA_TEST_DIR
   
   if (!mapping){
     /* copy locally the mapping file from daq detector config db */
     status = daqDA_DB_getFile(MAPPING_FILE,"./tpcMapping.root");
     if (status) {
-      printf("Failed to get mapping file (%s) from DAQdetDB, status=%d\n", MAPPING_FILE, status);
-      printf("Continue anyway ... maybe it works?\n");              // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+      printf("TPCQAda: Failed to get mapping file (%s) from DAQdetDB, status=%d\n", MAPPING_FILE, status);
+//       printf("Continue anyway ... maybe it works?\n");              // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       return -1;   // temporarily uncommented for testing on pcald47 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     }
 
@@ -116,68 +132,93 @@ int main(int argc, char **argv) {
   }
 
   if (mapping == 0) {
-    printf("Failed to get mapping object from %s.  ...\n", MAPPING_FILE);
+    printf("TPCQAda: Failed to get mapping object from %s.  ...\n", MAPPING_FILE);
     //return -1;
   } else {
-    printf("Got mapping object from %s\n", MAPPING_FILE);
+    printf("TPCQAda: Got mapping object from %s\n", MAPPING_FILE);
   }
- //retrieve configuration file
+  //
+  // DA configuration from configuration file
+  //
+  //retrieve configuration file
   char localfile[255];
   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);
+    printf("TPCQAda: Failed to get configuration file (%s) from DAQdetDB, status=%d\n", CONFIG_FILE, status);
     return -1;
   }
   AliTPCConfigDA config(CONFIG_FILE);
-  // check configuration options
-  if ( (Int_t)config.GetValue("UseFastDecoder") == 1 ) {
-    printf("Info: The fast decoder will be used for the processing.\n");
-    fastDecoding=kTRUE;
-  }
-
-
-  AliTPCdataQA calibQA(config.GetConfigurationMap());   // qa object
-
-  if (argc<2) {
-    printf("Wrong number of arguments\n");
-    return -1;
-  }
-
-
-  /* log start of process */
-  printf("TPC QA DA started - %s\n",__FILE__);
 
-
-  /* set time bin range */
-  // calibQA.SetRangeTime(0,1000); // should be done in the configuration file now
-  calibQA.SetAltroMapping(mapping->GetAltroMapping()); // Use altro mapping we got from daqDetDb
-
-  /* declare monitoring program */
-  status=monitorDeclareMp( __FILE__ );
-  if (status!=0) {
-    printf("monitorDeclareMp() failed : %s\n",monitorDecodeError(status));
-    return -1;
-  }
-  //amore update interval
+  // set default configuration options
   Double_t updateInterval=30; //seconds
+  TString laserTriggerName("C0LSR-ABCE-NOPF-CENT");
+  TString forceLaserTriggerId("-1");
+  
+  //amore update interval
   Double_t valConf=config.GetValue("AmoreUpdateInterval");
   if ( valConf>0 ) updateInterval=valConf;
+  
+  //laser trigger class name
+  if ( config.GetConfigurationMap()->GetValue("LaserTriggerName") ) {
+    laserTriggerName=config.GetConfigurationMap()->GetValue("LaserTriggerName")->GetName();
+    printf("TPCRAWda: Laser trigger class name set to: %s.\n",laserTriggerName.Data());
+  }
+  //force laser trigger id
+  if ( config.GetConfigurationMap()->GetValue("ForceLaserTriggerId") ) {
+    forceLaserTriggerId=config.GetConfigurationMap()->GetValue("ForceLaserTriggerId")->GetName();
+    printf("TPCRAWda: Force laser trigger Id: %s.\n",forceLaserTriggerId.Data());
+  }
+  
+  
+  //reject laser triggers in a global partition if we have interleaved laser events
+  unsigned char classId=0;
+  int retClassId=daqDA_getClassIdFromName(laserTriggerName.Data(),&classId);
+  //chek if we shall force the laser trigger id. Mainly for test purposes
+  if (forceLaserTriggerId!="-1"){
+    retClassId=0;
+    classId=static_cast<unsigned char>(forceLaserTriggerId.Atoi());
+  }
+  //create trigger mask
+  if (retClassId==0){
+    //interleaved laser in physics runs
+    //reject laser triggered events
+    TString triggerClasses;
+    //TODO
+    //TODO: in the next release of daq put 49 back to 50!!!
+    //TODO
+    for (unsigned char iclassId=0; iclassId<49; ++iclassId){
+      if (iclassId==classId) continue; //exclude laser trigger
+      triggerClasses+=Form("%u|",(unsigned int)iclassId);
+    }
+    triggerClasses.Chop();
+    char *table[5] = {"PHY","Y","*",const_cast<char*>(triggerClasses.Data()),NULL};
+    monitorDeclareTableExtended(table);
+    printf("TPCRAWda: Using laser trigger class Id: %u\n",(unsigned int)classId);
+    printf("TPCRAWda: Accepted trigger class Ids: %s\n",triggerClasses.Data());
+  }
+  
+  //
+  // create calibration object
+  //
+  AliTPCdataQA calibQA(config.GetConfigurationMap());   // qa object
+  calibQA.SetAltroMapping(mapping->GetAltroMapping()); // Use altro mapping we got from daqDetDb
+  
   //timer
   TStopwatch stopWatch;
   
-  monitorSetNowait();
-  monitorSetNoWaitNetworkTimeout(1000);
-
-  /* loop over RAW data files */
+  //===========================//
+  // loop over RAW data files //
+  //==========================//
   int nevents=0;
-  for(i=1;i<argc;i++) {
+  for(int i=1;i<argc;i++) {
 
     /* define data source : this is argument i */
-    printf("Processing file %s\n", argv[i]);
+    printf("TPCQAda: Processing file %s\n", argv[i]);
     status=monitorSetDataSource( argv[i] );
     if (status!=0) {
-      printf("monitorSetDataSource() failed : %s\n",monitorDecodeError(status));
+      printf("TPCQAda: monitorSetDataSource() failed : %s\n",monitorDecodeError(status));
       return -1;
     }
 
@@ -191,12 +232,12 @@ int main(int argc, char **argv) {
       /* get next event (blocking call until timeout) */
       status=monitorGetEventDynamic((void **)&event);
       if (status==MON_ERR_EOF) {
-        printf ("End of File %d detected\n",i);
+        printf ("TPCQAda: End of File %d detected\n",i);
         break; /* end of monitoring file has been reached */
       }
 
       if (status!=0) {
-        printf("monitorGetEventDynamic() failed : %s\n",monitorDecodeError(status));
+        printf("TPCQAda: monitorGetEventDynamic() failed : %s\n",monitorDecodeError(status));
         break;
       }
 
@@ -209,9 +250,9 @@ int main(int argc, char **argv) {
       runNb = event->eventRunNb;
       //  QA
       AliRawReader *rawReader = new AliRawReaderDate((void*)event);
-      if ( fastDecoding ) calibQA.ProcessEventFast(rawReader);   
-      else calibQA.ProcessEvent(rawReader);
+      calibQA.ProcessEvent(rawReader);
       delete rawReader;
+      
       // sending to AMOREdb
       if (stopWatch.RealTime()>updateInterval){
         SendToAmoreDB(&calibQA,runNb);
@@ -226,12 +267,12 @@ int main(int argc, char **argv) {
   }
 
   calibQA.Analyse(); 
-  printf ("%d events processed\n",nevents);
+  printf ("TPCQAda: %d events processed\n",nevents);
 
   TFile * fileTPC = new TFile (RESULT_FILE,"recreate");
   calibQA.Write("tpcCalibQA");
   delete fileTPC;
-  printf("Wrote %s\n",RESULT_FILE);
+  printf("TPCQAda: Wrote %s\n",RESULT_FILE);
 
   /* store the result file on FXS */
 
@@ -242,7 +283,7 @@ int main(int argc, char **argv) {
   //
   //Send objects to the AMORE DB
   //
-  printf ("AMORE part\n");
+  printf ("TPCQAda: AMORE part\n");
   SendToAmoreDB(&calibQA, runNb);
   
   return status;
@@ -271,7 +312,7 @@ void SendToAmoreDB(TObject *o, unsigned long32 runNb)
   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");
+    printf("TPCQAda: 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 d21f8d7..6b199f1 100644 (file)
@@ -20,6 +20,7 @@ TPCRAWda.cxx - calibration algorithm for L1 phase monitoring and drift velocity
 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
+26/01/2010  Jens.Wiechula@cern.ch:     Exclude laser triggers when running in a global partition
 
 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).
@@ -50,6 +51,7 @@ and save results in a file (named from RESULT_FILE define - see below).
 #include <TDatime.h>
 #include <TStopwatch.h>
 #include <TObject.h>
+#include <TMap.h>
 //
 //AliRoot includes
 //
@@ -82,10 +84,10 @@ void SendToAmoreDB(TObject *o, unsigned long32 runNb);
 */
 int main(int argc, char **argv) {
   /* log start of process */
-  printf("TPC RAW DA started - %s\n",__FILE__);
+  printf("TPCRAWda: DA started - %s\n",__FILE__);
 
   if (argc<2) {
-    printf("Wrong number of arguments\n");
+    printf("TPCRAWda: Wrong number of arguments\n");
     return -1;
   }
   AliLog::SetClassDebugLevel("AliRawReaderDate",-5);
@@ -100,10 +102,9 @@ int main(int argc, char **argv) {
 
 
   /* declare monitoring program */
-  int i,status;
-  status=monitorDeclareMp( __FILE__ );
+  int status=monitorDeclareMp( __FILE__ );
   if (status!=0) {
-    printf("monitorDeclareMp() failed : %s\n",monitorDecodeError(status));
+    printf("TPCRAWda: monitorDeclareMp() failed : %s\n",monitorDecodeError(status));
     return -1;
   }
   //Set network timeout
@@ -114,16 +115,14 @@ int main(int argc, char **argv) {
   AliTPCmapper *mapping = 0;   // The TPC mapping
   char localfile[255];
   unsigned long32 runNb=0;      //run number
-  // configuration options 
-  Bool_t fastDecoding = kFALSE;
-  // if  test setup get parameters from $DAQDA_TEST_DIR 
+  // if  test setup get parameters from $DAQDA_TEST_DIR
    
   if (!mapping){
     /* copy locally the mapping file from daq detector config db */
     sprintf(localfile,"./%s",MAPPING_FILE);
     status = daqDA_DB_getFile(MAPPING_FILE,localfile);
     if (status) {
-      printf("Failed to get mapping file (%s) from DAQdetDB, status=%d\n", MAPPING_FILE, status);
+      printf("TPCRAWda: Failed to get mapping file (%s) from DAQdetDB, status=%d\n", MAPPING_FILE, status);
       return -1;
     }
 
@@ -134,45 +133,92 @@ int main(int argc, char **argv) {
   }
 
   if (mapping == 0) {
-    printf("Failed to get mapping object from %s.  ...\n", MAPPING_FILE);
+    printf("TPCRAWda: Failed to get mapping object from %s.  ...\n", MAPPING_FILE);
     return -1;
   } else {
-    printf("Got mapping object from %s\n", MAPPING_FILE);
+    printf("TPCRAWda: Got mapping object from %s\n", MAPPING_FILE);
   }
 
   //
   // DA configuration from configuration file
   //
- //retrieve 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);
+    printf("TPCRAWda: Failed to get configuration file (%s) from DAQdetDB, status=%d\n", CONFIG_FILE, status);
     return -1;
   }
   AliTPCConfigDA config(CONFIG_FILE);
+  
+  //set default configuration options
+  Double_t updateInterval=30; //seconds
+  TString laserTriggerName("C0LSR-ABCE-NOPF-CENT");
+  TString forceLaserTriggerId("-1");
+  
+  //amore update interval
+  Double_t valConf=config.GetValue("AmoreUpdateInterval");
+  if ( valConf>0 ) updateInterval=valConf;
 
+  //laser trigger class name
+  if ( config.GetConfigurationMap()->GetValue("LaserTriggerName") ) {
+    laserTriggerName=config.GetConfigurationMap()->GetValue("LaserTriggerName")->GetName();
+    printf("TPCRAWda: Laser trigger class name set to: %s.\n",laserTriggerName.Data());
+  }
+  //force laser trigger id
+  if ( config.GetConfigurationMap()->GetValue("ForceLaserTriggerId") ) {
+    forceLaserTriggerId=config.GetConfigurationMap()->GetValue("ForceLaserTriggerId")->GetName();
+    printf("TPCRAWda: Force laser trigger Id: %s.\n",forceLaserTriggerId.Data());
+  }
+  
+  
+  //reject laser triggers in a global partition if we have interleaved laser events
+  unsigned char classId=0;
+  int retClassId=daqDA_getClassIdFromName(laserTriggerName.Data(),&classId);
+  //chek if we shall force the laser trigger id. Mainly for test purposes
+  if (forceLaserTriggerId!="-1"){
+    retClassId=0;
+    classId=static_cast<unsigned char>(forceLaserTriggerId.Atoi());
+  }
+  //create trigger mask
+  if (retClassId==0){
+    //interleaved laser in physics runs
+    //reject laser triggered events
+    TString triggerClasses;
+    //TODO
+    //TODO: in the next release of daq put 49 back to 50!!!
+    //TODO
+    for (unsigned char iclassId=0; iclassId<49; ++iclassId){
+      if (iclassId==classId) continue; //exclude laser trigger
+      triggerClasses+=Form("%u|",(unsigned int)iclassId);
+    }
+    triggerClasses.Chop();
+    char *table[5] = {"PHY","Y","*",const_cast<char*>(triggerClasses.Data()),NULL};
+    monitorDeclareTableExtended(table);
+    printf("TPCRAWda: Using laser trigger class Id: %u\n",(unsigned int)classId);
+    printf("TPCRAWda: Accepted trigger class Ids: %s\n",triggerClasses.Data());
+  }
+
+  //
   // create calibration object
+  //
   AliTPCCalibRaw calibRaw(config.GetConfigurationMap());   // raw 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 //
   //==========================//
   int nevents=0;
-  for(i=1;i<argc;i++) {
+  for(int i=1;i<argc;i++) {
 
     /* define data source : this is argument i */
-    printf("Processing file %s\n", argv[i]);
+    printf("TPCRAWda: Processing file %s\n", argv[i]);
     status=monitorSetDataSource( argv[i] );
     if (status!=0) {
-      printf("monitorSetDataSource() failed : %s\n",monitorDecodeError(status));
+      printf("TPCRAWda: monitorSetDataSource() failed : %s\n",monitorDecodeError(status));
       return -1;
     }
 
@@ -186,12 +232,12 @@ int main(int argc, char **argv) {
       /* get next event (blocking call until timeout) */
       status=monitorGetEventDynamic((void **)&event);
       if (status==MON_ERR_EOF) {
-        printf ("End of File %d detected\n",i);
+        printf ("TPCRAWda: End of File %d detected\n",i);
         break; /* end of monitoring file has been reached */
       }
 
       if (status!=0) {
-        printf("monitorGetEventDynamic() failed : %s\n",monitorDecodeError(status));
+        printf("TPCRAWda: monitorGetEventDynamic() failed : %s\n",monitorDecodeError(status));
         break;
       }
 
@@ -221,12 +267,12 @@ int main(int argc, char **argv) {
   // Analyse pulser data and write them to rootfile
   //
   calibRaw.Analyse();
-  printf ("%d events processed\n",nevents);
+  printf ("TPCRAWda: %d events processed\n",nevents);
 
   TFile * fileTPC = new TFile (RESULT_FILE,"recreate");
   calibRaw.Write("tpcCalibRaw");
   delete fileTPC;
-  printf("Wrote %s\n",RESULT_FILE);
+  printf("TPCRAWda: Wrote %s\n",RESULT_FILE);
 
   /* store the result file on FES */
 
@@ -237,7 +283,7 @@ int main(int argc, char **argv) {
   //
   //Send objects to the AMORE DB
   //
-  printf ("AMORE part\n");
+  printf ("TPCRAWda: AMORE part\n");
   SendToAmoreDB(&calibRaw, runNb);
   
   return status;
@@ -266,7 +312,7 @@ void SendToAmoreDB(TObject *o, unsigned long32 runNb)
   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");
+    printf("TPCRAWda: 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);
 }