38 #define RESULT_FILE "tpcCE.root" 40 #define MAPPING_FILE "tpcMapping.root" 41 #define CONFIG_FILE "TPCCEda.conf" 54 #include "TPluginManager.h" 57 #include "TObjString.h" 59 #include "TStopwatch.h" 66 #include "AliRawReader.h" 67 #include "AliRawReaderDate.h" 91 int main(
int argc,
char **argv) {
96 printf(
"TPCCEda: DA started - %s\n",__FILE__);
99 printf(
"TPCCEda: Wrong number of arguments\n");
107 gROOT->GetPluginManager()->AddHandler(
"TVirtualStreamerInfo",
115 status=monitorDeclareMp( __FILE__ );
117 printf(
"TPCCEda: monitorDeclareMp() failed : %s\n",monitorDecodeError(status));
121 monitorSetNoWaitNetworkTimeout(1000);
126 unsigned long32 runNb=0;
136 printf(
"TPCCEda: Failed to get configuration file (%s) from DAQdetDB, status=%d\n",
CONFIG_FILE, status);
141 TString laserTriggerName(
"C0LSR-ABCE-NOPF-CENT");
142 TString monitoringType(
"YES");
143 Int_t forceTriggerId=-1;
145 Bool_t skipAmore=kFALSE;
149 printf(
"TPCCEda: Laser trigger class name set to: %s.\n",laserTriggerName.Data());
154 printf(
"TPCCEda: Monitoring type set to: %s.\n",monitoringType.Data());
158 forceTriggerId=TMath::Nint(config.
GetValue(
"ForceLaserTriggerId"));
159 printf(
"TPCCEda: Only processing triggers with Id: %d.\n",forceTriggerId);
163 saveOption=TMath::Nint(config.
GetValue(
"SaveOption"));
164 printf(
"TPCCEda: Saving option set to: %d.\n",saveOption);
168 skipAmore=((TObjString*)config.
GetConfigurationMap()->GetValue(
"SkipAmore"))->GetString().Atoi();
169 printf(
"TPCCEda: Skip Amore set in config\n");
176 unsigned char classIdptr=0;
177 int retClassId=daqDA_getClassIdFromName(laserTriggerName.Data(),&classIdptr);
182 snprintf(c,
sizeof(c),
"%u",(
unsigned int)classIdptr);
183 char *table[5] = {
"PHY",
const_cast<char*
>(monitoringType.Data()),
"*",c,NULL};
184 monitorDeclareTableExtended(table);
185 printf(
"TPCCEda: Using monitoring table: (PHY, %s, *, %s)\n",monitoringType.Data(),c);
186 }
else if (retClassId==-1){
189 printf(
"TPCCEda: Laser trigger class '%s' was not found among trigger class names. Will stop processing.\n",laserTriggerName.Data());
191 }
else if (retClassId==-2){
193 char *table[5] = {
"PHY",
"Y",
"*",
"*",NULL};
194 monitorDeclareTableExtended(table);
195 printf(
"TPCCEda: Using all trigger class Ids\n");
197 printf(
"TPCCEda: Unknown return value of 'daqDA_getClassIdFromName': %d\n",retClassId);
202 if (forceTriggerId>-1){
204 sprintf(c,
"%d",forceTriggerId);
205 char *table[5] = {
"PHY",
"Y",
"*",c,NULL};
206 monitorDeclareTableExtended(table);
216 printf(
"TPCCEda: Failed to get mapping file (%s) from DAQdetDB, status=%d\n",
MAPPING_FILE, status);
222 mapping = (
AliTPCmapper*) fileMapping->Get(
"tpcMapping");
239 Double_t updateInterval=300;
240 Double_t valConf=config.
GetValue(
"AmoreUpdateInterval");
241 if ( valConf>0 ) updateInterval=valConf;
243 TStopwatch stopWatch;
251 for ( i=1; i<argc; i++) {
254 printf(
"TPCCEda: Processing file %s\n", argv[i]);
255 status=monitorSetDataSource( argv[i] );
257 printf(
"TPCCEda: monitorSetDataSource() failed : %s\n",monitorDecodeError(status));
261 Bool_t hasNewData=kFALSE;
264 struct eventHeaderStruct *event;
267 if (daqDA_checkShutdown()) {
break;}
270 status=monitorGetEventDynamic((
void **)&event);
271 if (status==MON_ERR_EOF) {
272 printf (
"TPCCEda: End of File %d detected\n",i);
277 printf(
"TPCCEda: monitorGetEventDynamic() failed : %s\n",monitorDecodeError(status));
285 if (stopWatch.RealTime()>updateInterval && hasNewData){
290 stopWatch.Continue();
293 if (nevents>neventsOld){
302 if ( (event->eventType != physicsEvent) && (
event->eventType != calibrationEvent) ){
309 runNb =
event->eventRunNb;
337 printf(
"TPCCEda: Amore part\n");
351 const char *amoreDANameorig=gSystem->Getenv(
"AMORE_DA_NAME");
359 gSystem->Setenv(
"AMORE_DA_NAME",Form(
"TPC-%s",
FILE_ID));
365 TObjString
info(Form(
"Run: %u; Date: %s",runNb,time.AsSQLString()));
366 amore::da::AmoreDA amoreDA(amore::da::AmoreDA::kSender);
368 statusDA+=amoreDA.Send(
"CET0",calibCE->
GetCalPadT0());
369 statusDA+=amoreDA.Send(
"CEQ",calibCE->
GetCalPadQ());
370 statusDA+=amoreDA.Send(
"CERMS",calibCE->
GetCalPadRMS());
371 statusDA+=amoreDA.Send(
"DriftA",grA);
372 statusDA+=amoreDA.Send(
"DriftC",grC);
373 statusDA+=amoreDA.Send(
"Info",&info);
375 printf(
"TPCCEda: Waring: Failed to write one of the calib objects to the AMORE database\n");
377 if (amoreDANameorig) gSystem->Setenv(
"AMORE_DA_NAME",amoreDANameorig);
printf("Chi2/npoints = %f\n", TMath::Sqrt(chi2/npoints))
const TObjArray * GetCalPadRMS() const
static void SetClassDebugLevel(const char *className, Int_t level)
const TMap * GetConfigurationMap() const
const TObjArray * GetCalPadT0() const
Bool_t ProcessEvent(AliTPCRawStreamV3 *const rawStreamV3)
virtual void DumpToFile(const Char_t *filename, const Char_t *dir="", Bool_t append=kFALSE)
Float_t GetValue(const char *name) const
Int_t GetNeventsProcessed() const
static void SetModuleDebugLevel(const char *module, Int_t level)
Class for Parsing simple text configuration files.
const TObjArray * GetCalPadQ() const
Implementation of the TPC Central Electrode calibration.
AliTPCAltroMapping ** GetAltroMapping()
void SetAltroMapping(AliTPCAltroMapping **mapp)
int main(int argc, char **argv)
TGraph * MakeGraphTimeCE(Int_t sector, Int_t xVariable=0, Int_t fitType=0, Int_t fitParameter=0)
void SendToAmoreDB(AliTPCCalibCE *calibCE, unsigned long32 runNb)