X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TPC%2FTPCQAda.cxx;h=2410442f24627514d39986c295ff3140bed932b9;hb=0ad1a1231cc7546ce615ac3a5c261fff137eb050;hp=d50e4df25b0a3246edfc903c4c81e3bfcaa53688;hpb=f113dfeb209c16be20309ad550fa074cf54b6c24;p=u%2Fmrichter%2FAliRoot.git diff --git a/TPC/TPCQAda.cxx b/TPC/TPCQAda.cxx index d50e4df25b0..2410442f246 100644 --- a/TPC/TPCQAda.cxx +++ b/TPC/TPCQAda.cxx @@ -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,13 +52,13 @@ and save results in a file (named from RESULT_FILE define - see below). #include #include #include +#include // //AliRoot includes // #include "AliRawReader.h" #include "AliRawReaderDate.h" #include "AliTPCmapper.h" -#include "AliTPCRawStream.h" #include "AliTPCROC.h" #include "AliTPCCalROC.h" #include "AliTPCCalPad.h" @@ -80,32 +81,45 @@ 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", "RIO", "TStreamerInfo()"); - AliLog::SetClassDebugLevel("AliTPCRawStream",-5); AliLog::SetClassDebugLevel("AliRawReaderDate",-5); 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 +130,108 @@ 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"); + TString monitorAttributes=Form("%d",ATTR_ORIGINAL_EVENT); + Bool_t skipAmore=kFALSE; + + //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("TPCQAda: 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("TPCQAda: Force laser trigger Id: %s.\n",forceLaserTriggerId.Data()); + } + //skip the amore part + if ( config.GetConfigurationMap()->GetValue("SkipAmore") ) { + skipAmore=((TObjString*)config.GetConfigurationMap()->GetValue("SkipAmore"))->GetString().Atoi(); + printf("TPCQAda: Skip Amore set in config\n"); + } + //monitoring Attributes + if ( config.GetConfigurationMap()->GetValue("MonitorAttributes") ) { + monitorAttributes=config.GetConfigurationMap()->GetValue("MonitorAttributes")->GetName(); + printf("TPCQAda: Monitor attributes set in config: %s\n",monitorAttributes.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(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<50; ++iclassId){ + if (iclassId==classId) continue; //exclude laser trigger + triggerClasses+=Form("%u|",(unsigned int)iclassId); + } + triggerClasses.Chop(); + char *table[5] = {"PHY", + "Y", + const_cast(monitorAttributes.Data()), + const_cast(triggerClasses.Data()),NULL}; + monitorDeclareTableExtended(table); + printf("TPCQAda: Using laser trigger class Id: %u\n",(unsigned int)classId); + printf("TPCQAda: Accepted trigger class Ids: %s\n",triggerClasses.Data()); + printf("TPCQAda: Monitor attributes used: %s\n",monitorAttributes.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;ieventRunNb; // 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); + if (!skipAmore) SendToAmoreDB(&calibQA,runNb); stopWatch.Start(); } else { stopWatch.Continue(); @@ -226,12 +280,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,8 +296,10 @@ int main(int argc, char **argv) { // //Send objects to the AMORE DB // - printf ("AMORE part\n"); - SendToAmoreDB(&calibQA, runNb); + if (!skipAmore){ + printf ("TPCQAda: AMORE part\n"); + SendToAmoreDB(&calibQA, runNb); + } return status; } @@ -264,14 +320,14 @@ void SendToAmoreDB(TObject *o, unsigned long32 runNb) // // end cheet TDatime time; - TObjString info(Form("Run: %u; Date: %s",runNb,time.AsString())); + TObjString info(Form("Run: %u; Date: %s",runNb,time.AsSQLString())); 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"); + 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); }