+/**************************************************************************
+- Contact: Oleksandr_Borysov aborysov@ts.infnf.it
+- Link: /afs/infn.it/ts/user/efragiac/public/testCosm3125.001
+- Run Type:
+- DA Type: LDC
+- Number of events needed: >=500
+- Input Files: ssdpeddaconfig, raw_data_file_on_LDC
+- Output Files: $DA_TEST_DIR/ssddaldc_<LDCID>_<RunID>.root, FXS_name=ITSSSDda_<LDCID>_<RunID>.root
+ local files are persistent over runs: data source
+- Trigger types used:
+ **************************************************************************/
-#include <Riostream.h>
-#include <sstream>
-#include <string>
+
+#include <iostream>
+#include "TString.h"
#include "TFile.h"
#include "daqDA.h"
-#include "event.h"
-#include "AliRawReaderDate.h"
#include "AliITSHandleDaSSD.h"
+#include "TROOT.h"
+#include "TPluginManager.h"
using namespace std;
-Bool_t GetRunSettings (const char *datafilename, Long_t &eventsnumber, Long_t &stripsnumber);
int main( int argc, char** argv )
{
AliITSHandleDaSSD *ssddaldc;
- ostringstream feefname;
+ TString feefname, cmddbsave;
Int_t status;
- string dafname;
- Char_t *dadaqdir = NULL;
+ Char_t *dafname = NULL, *dadaqdir = NULL;
+
+
+ gROOT->GetPluginManager()->AddHandler("TVirtualStreamerInfo",
+ "*",
+ "TStreamerInfo",
+ "RIO",
+ "TStreamerInfo()");
+
+
/* check that we got some arguments = list of files */
if (argc<2) {
- printf("Wrong number of arguments\n");
+ fprintf(stderr, "Wrong number of arguments\n");
return -1;
}
char *datafilename = argv[1];
- Long_t strn, evn;
- if (!GetRunSettings (datafilename, evn, strn))
- {
- cout << "Error GetRunSettings (datafilename, evn, strn)!" << endl;
- return -1;
- }
- cout << "Pysics events : " << evn << "; Total strip number : " << strn
- << "; Modules number: " << strn / AliITSModuleDaSSD::GetStripsPerModuleConst() << endl;
-
- ssddaldc = new AliITSHandleDaSSD();
-// if (!ssddaldc->SetNumberOfModules((Int_t)(strn / AliITSModuleDaSSD::GetStripsPerModuleConst())))
- if (!ssddaldc->SetNumberOfModules(AliITSHandleDaSSD::GetNumberOfSSDModulesConst()))
+ ssddaldc = new AliITSHandleDaSSD(datafilename);
+ if (ssddaldc->IsZombie()) return -1;
+ if (!ssddaldc->ProcessRawData())
{
- cout << "Error ssddaldc->SetNumberOfModules" << endl;
+ cerr << "Error !ssddaldc->ProcessRawData()" << endl;
delete ssddaldc;
return -1;
}
- if (!ssddaldc->ReadCalibrationDataFile(datafilename, evn))
- {
- cout << "Error !ssddaldc->ReadCalibrationDataFile" << endl;
- delete ssddaldc;
- return -1;
- }
- daqDA_progressReport(30);
-// if (daqDA_checkShutdown() == 1) {
-// cout << "Shutdown has been requested!" << endl;
-// delete ssddaldc;
-// return -1;
-// }
-
- if (!ssddaldc->CalculatePedestal()) {
- cout << "Error, ssddaldc->CalculatePedestal()";
- return 1;
- }
- daqDA_progressReport(50);
- if (!ssddaldc->CalculateNoiseCM()) {
- cout << "Error, ssddaldc->CalculateNoiseCM()";
- return 2;
- }
- ssddaldc->DeleteSignal();
daqDA_progressReport(90);
- dadaqdir = getenv ("DAQDA_TEST_DIR");
- if (dadaqdir) {
- dafname = dadaqdir;
- if (!(ssddaldc->SaveCalibrationSSDLDC(dafname)))
- cout << "Error saving DA data to the file! Probably $DAQDA_TEST_DIR defined incorrectly!" << endl;
- else cout << "SSDDA data are saved in " << dafname << endl;
- feefname << dadaqdir << "/ssddaldc.root";
- cout << "Saving feessdda data in " << feefname.str() << endl;
- TFile *fileRun = new TFile (feefname.str().data(),"RECREATE");
- ssddaldc->Write();
- fileRun->Close();
- delete fileRun;
- status = daqDA_FES_storeFile(dafname.data(),"DASSD_DB_results");
- if (status) printf("Failed to export file : %d\n",status);
+
+ if (!system(NULL)) {
+ cerr << "Error: the call system(NULL) in main() returned NULL!" << endl;
+ return -1;
+ }
+ dadaqdir = getenv ("DA_TEST_DIR");
+ if (!dadaqdir) {
+ cerr << "Error: DA_TEST_DIR is not defined, DA data are not saved!" << endl;
+ delete ssddaldc;
+ daqDA_progressReport(100);
+ return 1;
}
- else cout << "Error: DAQDA_TEST_DIR is not defined, DA data are not saved!" << endl;
+ dafname = dadaqdir;
+ if (ssddaldc->SaveCalibrationSSDLDC(dafname)) {
+ cout << "SSDDA data are saved in " << dafname << endl;
+ status = daqDA_FES_storeFile(dafname, "DASSD_DB_results");
+ if (status) fprintf(stderr, "Failed to export file : %d\n", status);
+ } else cerr << "Error saving DA data to the file! Probably $DA_TEST_DIR defined incorrectly!" << endl;
+ feefname.Form("%s/ssddaldc_%i_%i.root", dadaqdir, ssddaldc->GetLdcId(), ssddaldc->GetRunId());
+ cout << "Saving feessdda data in " << feefname << endl;
+ TFile *fileRun = new TFile (feefname.Data(),"RECREATE");
+ if (fileRun->IsZombie()) {
+ cerr << "Error open file " << feefname << endl;
+ delete ssddaldc;
+ delete fileRun;
+ return 2;
+ }
+ ssddaldc->Write();
+ fileRun->Close();
+ delete fileRun;
+
+ if (getenv("DATE_DB_DIR")) {
+ cmddbsave.Form("$DATE_DB_DIR/daqDetDB_store ssddaldc_%i.root %s", ssddaldc->GetLdcId(), feefname.Data());
+ status = system(cmddbsave.Data());
+ if (status) fprintf(stderr, "Failed to export file to the detector db: %d, %s \n",status, cmddbsave.Data());
+ cmddbsave.Form("$DATE_DB_DIR/daqDetDB_store ssddaldc_%i_%i.root %s",
+ ssddaldc->GetLdcId(), ssddaldc->GetRunId(), feefname.Data());
+ status = system(cmddbsave.Data());
+ if (status) fprintf(stderr, "Failed to export file to the detector db: %d, %s \n",status, cmddbsave.Data());
+ } else cerr << "Error main(): $DATE_DB_DIR is not defined!" << endl;
+
delete ssddaldc;
daqDA_progressReport(100);
return 0;
}
-
-
-
-Bool_t GetRunSettings (const char *datafilename, Long_t &eventsnumber, Long_t &stripsnumber)
-{
- Long_t physeventind = 0, strn = 0, strneq = 0;
- AliRawReaderDate *rawreaderdate = NULL;
- Int_t *data = NULL;
- Long_t datasize = 0, eqdatasize = 0, eqbelsize = 1;
- rawreaderdate = new AliRawReaderDate(datafilename, 0);
- if (!rawreaderdate) {
- cout << "GetRunSettings : Error new DARawReader(datafilename, 0);" << endl;
- return kFALSE;
- }
- rawreaderdate->SelectEvents(-1);
- while (rawreaderdate->NextEvent()) {
- if ((rawreaderdate->GetType() != PHYSICS_EVENT) && (rawreaderdate->GetType() != CALIBRATION_EVENT)) continue;
- physeventind += 1;
- datasize = 0;
- strn = 0;
- while (rawreaderdate->ReadNextData((UChar_t*&)data)) {
- eqdatasize = rawreaderdate->GetDataSize();
- eqbelsize = rawreaderdate->GetEquipmentElementSize();
- if ( (eqdatasize % eqbelsize) || (eqbelsize != sizeof(long32)) ) {
- cout << "Error ReadCalibrationDataFile: equipment event data size " << eqdatasize
- << " is not an integer of equipment data size " << eqbelsize << endl;
- rawreaderdate->DumpData();
- return kFALSE;
- }
- strneq = eqdatasize / eqbelsize;
- datasize += eqdatasize;
- strn += strneq;
- }
- if ((strn * eqbelsize != datasize)) {
- if (physeventind != 1) {
- cout << "Something is wrong with data file, strip number changes from event to event! Ev = " << physeventind << endl;
- rawreaderdate->DumpData();
- return kFALSE;
- }
- if ((datasize % eqbelsize)) {
- cout << "Wrong number : (datasize % eqbelsize) != 0" << endl;
- rawreaderdate->DumpData();
- return kFALSE;
- }
- strneq = datasize / eqbelsize;
- }
- }
- delete rawreaderdate;
- if ((physeventind > 0) && (strn > 0))
- {
- eventsnumber = physeventind;
- stripsnumber = strn;
- return kTRUE;
- }
- return kFALSE;
-}