Input Files: argument list
Output Files: RESULT_FILE=EMCALLED.root, to be exported to the DAQ FXS
fileId: FILE_ID=EMCALLED
- Trigger types used: CALIBRATION_EVENT (temporarily also PHYSICS_EVENT to start with)
- [When we have real data files later, we should only use CALIBRATION_EVENT]
+ Trigger types used: CALIBRATION_EVENT
*/
/*
This process reads RAW data from the files provided as command line arguments
*/
#define RESULT_FILE "EMCALLED.root"
-#define FILE_ID "EMCALLED"
+#define FILE_ID "signal"
#define AliDebugLevel() -1
-#define FILE_PEDClassName "emcCalibPedestal"
#define FILE_SIGClassName "emcCalibSignal"
const int kNRCU = 4;
/* LOCAL_DEBUG is used to bypass daq* calls that do not work locally */
#include "AliCaloRawStreamV3.h"
#include "AliCaloAltroMapping.h"
#include "AliLog.h"
+#include "AliDAQ.h"
//
// EMC calibration-helper algorithm includes
//
-#include "AliCaloCalibPedestal.h"
#include "AliCaloCalibSignal.h"
/*
"TStreamerInfo",
"RIO",
"TStreamerInfo()");
-
+
int i, status;
-
+
/* log start of process */
printf("EMCAL DA started - %s\n",__FILE__);
+
+ Int_t emcID = AliDAQ::DetectorID("EMCAL"); // bit 18..
/* declare monitoring program */
status=monitorDeclareMp( __FILE__ );
/* define wait event timeout - 1s max */
monitorSetNowait();
monitorSetNoWaitNetworkTimeout(1000);
-
+
/* Retrieve mapping files from DAQ DB */
- const char* mapFiles[kNRCU] = {"RCU0A.data","RCU1A.data","RCU0C.data","RCU1C.data"};
-
+ const char* mapFiles[kNRCU] = {"RCU0A.data","RCU1A.data","RCU0C.data","RCU1C.data"};
+
for(Int_t iFile=0; iFile<kNRCU; iFile++) {
int failed = daqDA_DB_getFile(mapFiles[iFile], mapFiles[iFile]);
if(failed) {
TString path = "./";
path += "RCU";
TString path2;
-TString side[] = {"A","C"};//+ and - pseudorapidity supermodules
- for(Int_t j = 0; j < 2; j++){
- for(Int_t i = 0; i < 2; i++) {
- path2 = path;
- path2 += i;
- path2 += side[j];
- path2 += ".data";
- mapping[i] = new AliCaloAltroMapping(path2.Data());
+ TString side[] = {"A","C"};//+ and - pseudorapidity supermodules
+ for(Int_t j = 0; j < 2; j++){
+ for(Int_t i = 0; i < 2; i++) {
+ path2 = path;
+ path2 += i;
+ path2 += side[j];
+ path2 += ".data";
+ mapping[j*2 + i] = new AliCaloAltroMapping(path2.Data());
+ }
}
- }
-
+
+ /* Retrieve cut=parameter file from DAQ DB */
+ const char* parameterFile = {"EMCALLEDda.dat"};
+
+ int failed = daqDA_DB_getFile(parameterFile, parameterFile);
+ if (failed) {
+ printf("Cannot retrieve file : %s from DAQ DB. Exit now..\n",
+ parameterFile);
+#ifdef LOCAL_DEBUG
+#else
+ return -1;
+#endif
+ }
+
/* set up our analysis classes */
- AliCaloCalibPedestal * calibPedestal = new AliCaloCalibPedestal(AliCaloCalibPedestal::kEmCal);
- calibPedestal->SetAltroMapping( mapping );
AliCaloCalibSignal * calibSignal = new AliCaloCalibSignal(AliCaloCalibSignal::kEmCal);
calibSignal->SetAltroMapping( mapping );
-
+ calibSignal->SetParametersFromFile( parameterFile );
+
AliRawReader *rawReader = NULL;
int nevents=0;
-
+
/* loop over RAW data files */
for ( i=1; i<argc; i++ ) {
-
+
/* define data source : this is argument i */
printf("Processing file %s\n", argv[i]);
status=monitorSetDataSource( argv[i] );
printf("monitorSetDataSource() failed. Error=%s. Exiting ...\n", monitorDecodeError(status));
return -1;
}
-
+
/* read until EOF */
struct eventHeaderStruct *event;
eventTypeType eventT;
for ( ; ; ) { // infinite loop
-
+
/* check shutdown condition */
if (daqDA_checkShutdown()) {break;}
-
+
/* get next event (blocking call until timeout) */
status=monitorGetEventDynamic((void **)&event);
if (status==MON_ERR_EOF) {
printf("monitorGetEventDynamic() failed : %s\n",monitorDecodeError(status));
break;
}
-
+
/* retry if got no event */
if (event==NULL) {
continue;
}
eventT = event->eventType; /* just convenient shorthand */
-
- /* skip start/end of run events */
- if ( (eventT != physicsEvent) && (eventT != calibrationEvent) ) {
+ /* only look at calibration events */
+ if ( eventT != calibrationEvent ) {
+ free(event);
+ continue;
+ }
+
+ /* only look at events where EMCAL was included */
+ if (! TEST_DETECTOR_IN_PATTERN(event->eventDetectorPattern, emcID) ) {
+ free(event);
continue;
}
nevents++; // count how many acceptable events we have
-
+
// Signal calibration
rawReader = new AliRawReaderDate((void*)event);
+ calibSignal->SetRunNumber(event->eventRunNb);
calibSignal->ProcessEvent(rawReader);
- rawReader->Reset();
- calibPedestal->ProcessEvent(rawReader);
delete rawReader;
-
+
/* free resources */
free(event);
-
+
} //until EOF
} // loop over files
-
+
// calculate average values also, for the LED info
calibSignal->SetUseAverage(kTRUE);
calibSignal->Analyze();
-
+
// by default, we only save the full info in debug mode
#ifdef LOCAL_DEBUG
#else
calibSignal->GetTreeAmpVsTime()->Reset();
calibSignal->GetTreeLEDAmpVsTime()->Reset();
#endif
-
+
//
// write class to rootfile
//
-
- printf ("%d physics/calibration events processed.\n",nevents);
-
+
+ printf ("%d calibration events processed.\n",nevents);
+
TFile f(RESULT_FILE, "recreate");
if (!f.IsZombie()) {
f.cd();
- calibPedestal->Write(FILE_PEDClassName);
calibSignal->Write(FILE_SIGClassName);
f.Close();
- printf("Objects saved to file \"%s\" as \"%s\" and \"%s\".\n",
- RESULT_FILE, FILE_PEDClassName, FILE_SIGClassName);
+ printf("Objects saved to file \"%s\" as \"%s\".\n",
+ RESULT_FILE, FILE_SIGClassName);
}
else {
printf("Could not save the object to file \"%s\".\n",
RESULT_FILE);
}
-
+
//
// closing down; see if we can delete our analysis helper(s) also
//
- delete calibPedestal;
delete calibSignal;
- /* // AliCaloAltroMapping no longer appears to be delete-able
for(Int_t iFile=0; iFile<kNRCU; iFile++) {
if (mapping[iFile]) delete mapping[iFile];
}
- */
-
+
/* store the result file on FES */
#ifdef LOCAL_DEBUG
#else
status = daqDA_FES_storeFile(RESULT_FILE, FILE_ID);
#endif
-
+
return status;
}