From a69c8ba0de95e8bceca88dff0544fa1a39013c95 Mon Sep 17 00:00:00 2001 From: masera Date: Thu, 6 Dec 2007 18:00:48 +0000 Subject: [PATCH] Updated version of SSD Detector Algorithms (S. Borysov) --- ITS/AliITSChannelDaSSD.cxx | 38 +++++++++++++---- ITS/AliITSHandleDaSSD.cxx | 65 +++++++++++++++++++++++----- ITS/AliITSHandleDaSSD.h | 4 +- ITS/AliITSModuleDaSSD.cxx | 87 +++++++++++++++++++++++++++++++++++--- ITS/AliITSModuleDaSSD.h | 2 +- ITS/ITSSSDPEDda.cxx | 84 ++++++++++++++++++++---------------- 6 files changed, 216 insertions(+), 64 deletions(-) diff --git a/ITS/AliITSChannelDaSSD.cxx b/ITS/AliITSChannelDaSSD.cxx index eda6039786f..4f81d2359eb 100644 --- a/ITS/AliITSChannelDaSSD.cxx +++ b/ITS/AliITSChannelDaSSD.cxx @@ -100,15 +100,23 @@ AliITSChannelDaSSD::AliITSChannelDaSSD(const AliITSChannelDaSSD& strip) : TObject(strip), fStripId(strip.fStripId), fEventsNumber(strip.fEventsNumber), - fSignal(strip.fSignal), + fSignal(NULL), fPedestal(strip.fPedestal), fNoise(strip.fNoise), fNoiseCM(strip.fNoiseCM), fNOverflowEv(strip.fNOverflowEv) { // copy constructor - - AliFatal("AliITSChannelDaSSD, copy constructor not implemented"); + if ((strip.fEventsNumber > 0) && (strip.fSignal)) { + fSignal = new (nothrow) Short_t[strip.fEventsNumber]; + if (fSignal) { + memcpy(fSignal, strip.fSignal, (strip.fEventsNumber * sizeof(Short_t))); + } else { + AliError(Form("AliITSChannelDaSSD: Error allocating memory for %i Short_t objects!", strip.fEventsNumber)); + fSignal = NULL; + fEventsNumber = 0; + } + } } @@ -117,8 +125,23 @@ AliITSChannelDaSSD::AliITSChannelDaSSD(const AliITSChannelDaSSD& strip) : AliITSChannelDaSSD& AliITSChannelDaSSD::operator = (const AliITSChannelDaSSD& strip) { // assignment operator - - AliFatal("operator =, assignment operator not implemented"); + if (this == &strip) return *this; + if (fSignal) { delete [] fSignal; fSignal = NULL; } + fStripId = strip.fStripId; + fEventsNumber = strip.fEventsNumber; + fPedestal = strip.fPedestal; + fNoise = strip.fNoise; + fNoiseCM = strip.fNoiseCM; + fNOverflowEv = strip.fNOverflowEv; + if ((strip.fEventsNumber > 0) && (strip.fSignal)) fSignal = new (nothrow) Short_t[strip.fEventsNumber]; + else return *this; + if (fSignal) { + memcpy(fSignal, strip.fSignal, (strip.fEventsNumber * sizeof(Short_t))); + } else { + AliError(Form("AliITSChannelDaSSD: Error allocating memory for %i Short_t objects!", strip.fEventsNumber)); + fSignal = NULL; + fEventsNumber = 0; + } return *this; } @@ -127,10 +150,7 @@ AliITSChannelDaSSD& AliITSChannelDaSSD::operator = (const AliITSChannelDaSSD& st AliITSChannelDaSSD::~AliITSChannelDaSSD() { // Destructor - if (fSignal) - { - delete [] fSignal; - } + if (fSignal) delete [] fSignal; } diff --git a/ITS/AliITSHandleDaSSD.cxx b/ITS/AliITSHandleDaSSD.cxx index 63c82b01da9..f1a7a1b31f6 100644 --- a/ITS/AliITSHandleDaSSD.cxx +++ b/ITS/AliITSHandleDaSSD.cxx @@ -87,7 +87,7 @@ AliITSHandleDaSSD::AliITSHandleDaSSD(const AliITSHandleDaSSD& ssdadldc) : TObject(ssdadldc), fRawDataFileName(ssdadldc.fRawDataFileName), fNumberOfModules(ssdadldc.fNumberOfModules), - fModules(ssdadldc.fModules), + fModules(NULL), fModIndProcessed(ssdadldc.fModIndProcessed), fModIndRead(ssdadldc.fModIndRead), fNumberOfEvents(ssdadldc.fNumberOfEvents), @@ -97,8 +97,27 @@ AliITSHandleDaSSD::AliITSHandleDaSSD(const AliITSHandleDaSSD& ssdadldc) : fCmThresholdFactor(ssdadldc.fCmThresholdFactor) { // copy constructor - - AliFatal("AliITSHandleDaSSD, copy constructor not implemented"); + if ((ssdadldc.fNumberOfModules > 0) && (ssdadldc.fModules)) { + fModules = new (nothrow) AliITSModuleDaSSD* [ssdadldc.fNumberOfModules]; + if (fModules) { + for (Int_t modind = 0; modind < ssdadldc.fNumberOfModules; modind++) { + if (ssdadldc.fModules[modind]) { + fModules[modind] = new AliITSModuleDaSSD(*(ssdadldc.fModules[modind])); + if (!fModules[modind]) { + AliError("AliITSHandleDaSSD: Error copy constructor"); + for (Int_t i = (modind - 1); i >= 0; i--) delete fModules[modind]; + delete [] fModules; + fModules = NULL; + break; + } + } else fModules[modind] = NULL; + } + } else { + AliError(Form("AliITSHandleDaSSD: Error allocating memory for %i AliITSModulesDaSSD* objects!", ssdadldc.fNumberOfModules)); + fNumberOfModules = 0; + fModules = NULL; + } + } } @@ -106,8 +125,33 @@ AliITSHandleDaSSD::AliITSHandleDaSSD(const AliITSHandleDaSSD& ssdadldc) : AliITSHandleDaSSD& AliITSHandleDaSSD::operator = (const AliITSHandleDaSSD& ssdadldc) { // assignment operator - - AliFatal("operator =, assignment operator not implemented"); + if (this == &ssdadldc) return *this; + if (fModules) { + for (Int_t i = 0; i < fNumberOfModules; i++) if (fModules[i]) delete fModules[i]; + delete [] fModules; + fModules = NULL; + } + if ((ssdadldc.fNumberOfModules > 0) && (ssdadldc.fModules)) { + fModules = new (nothrow) AliITSModuleDaSSD* [ssdadldc.fNumberOfModules]; + if (fModules) { + for (Int_t modind = 0; modind < ssdadldc.fNumberOfModules; modind++) { + if (ssdadldc.fModules[modind]) { + fModules[modind] = new AliITSModuleDaSSD(*(ssdadldc.fModules[modind])); + if (!fModules[modind]) { + AliError("AliITSHandleDaSSD: Error assignment operator"); + for (Int_t i = (modind - 1); i >= 0; i--) delete fModules[modind]; + delete [] fModules; + fModules = NULL; + break; + } + } else fModules[modind] = NULL; + } + } else { + AliError(Form("AliITSHandleDaSSD: Error allocating memory for %i AliITSModulesDaSSD* objects!", ssdadldc.fNumberOfModules)); + fNumberOfModules = 0; + fModules = NULL; + } + } return *this; } @@ -203,7 +247,7 @@ Bool_t AliITSHandleDaSSD::Init(Char_t *rdfname, const Char_t *configfname) fNumberOfEvents = physeventind; fRawDataFileName = rdfname; if (SetNumberOfModules(fgkNumberOfSSDModules)) { - TString str = Form("Max number of equipment: %i, max number of channels: %i\n", eqn, strn); + TString str = TString::Format("Max number of equipment: %i, max number of channels: %i\n", eqn, strn); DumpInitData(str.Data()); return kTRUE; } @@ -526,7 +570,7 @@ Bool_t AliITSHandleDaSSD::CalculatePedestal(AliITSModuleDaSSD *const module) //______________________________________________________________________________ -Bool_t AliITSHandleDaSSD::CalculateNoise(AliITSModuleDaSSD *const module, const Bool_t CorrectCM) +Bool_t AliITSHandleDaSSD::CalculateNoise(AliITSModuleDaSSD *const module) { // Calculates Noise AliITSChannelDaSSD *strip; @@ -679,6 +723,7 @@ Bool_t AliITSHandleDaSSD::ProcessRawData(const Int_t nmread) CalculateNoiseCM(fModules[modind]); } DeleteSignal(); +// DeleteCM(); fModIndProcessed = fModIndRead; cout << fModIndProcessed << " - done" << endl; } @@ -744,9 +789,9 @@ Bool_t AliITSHandleDaSSD::SaveCalibrationSSDLDC(Char_t*& dafname) const ldcc->AddAt(modcalibobj, i); } ldcc->Compress(); - if (dafname) dadatafilename = Form("%s/", dafname); - dadatafilename.Append(Form("ITSSSDda_%i_%i.root", fLdcId, fRunId)); - tmpfname = new Char_t[dadatafilename.Length()]; + if (dafname) dadatafilename.Form("%s/", dafname); + dadatafilename += TString::Format("ITSSSDda_%i_%i.root", fLdcId, fRunId); + tmpfname = new Char_t[dadatafilename.Length()+1]; dafname = strcpy(tmpfname, dadatafilename.Data()); TFile *fileRun = new TFile (dadatafilename.Data(),"RECREATE"); if (fileRun->IsZombie()) { diff --git a/ITS/AliITSHandleDaSSD.h b/ITS/AliITSHandleDaSSD.h index 3aa6903402b..2a6e201571e 100644 --- a/ITS/AliITSHandleDaSSD.h +++ b/ITS/AliITSHandleDaSSD.h @@ -49,7 +49,7 @@ class AliITSHandleDaSSD : public TObject { Int_t ReadModuleRawData (const Int_t modulesnumber); virtual Bool_t CalculatePedestal(AliITSModuleDaSSD *const module); - virtual Bool_t CalculateNoise(AliITSModuleDaSSD *const module, const Bool_t CorrectCM = kFALSE); + virtual Bool_t CalculateNoise(AliITSModuleDaSSD *const module); virtual Bool_t CalculateNoiseCM(AliITSModuleDaSSD *const module); virtual Bool_t CalculateCM(AliITSModuleDaSSD *const module); virtual Bool_t ProcessRawData(const Int_t nmread = fgkNumberOfSSDModulesPerDdl); @@ -63,6 +63,8 @@ class AliITSHandleDaSSD : public TObject { void DumpInitData(const Char_t *str = "") const; void DeleteSignalAll() { if (fModules) for (Int_t i = 0; i < fNumberOfModules; i++) if (fModules[i]) fModules[i]->DeleteSignal();} void DeleteSignal() { if (fModules) for (Int_t i = fModIndProcessed; i < fModIndRead; i++) if (fModules[i]) fModules[i]->DeleteSignal();} + void DeleteCMAll() { if (fModules) for (Int_t i = 0; i < fNumberOfModules; i++) if (fModules[i]) fModules[i]->DeleteCM();} + void DeleteCM() { if (fModules) for (Int_t i = fModIndProcessed; i < fModIndRead; i++) if (fModules[i]) fModules[i]->DeleteCM();} static Int_t GetNumberOfSSDModulesConst() { return fgkNumberOfSSDModules; } diff --git a/ITS/AliITSModuleDaSSD.cxx b/ITS/AliITSModuleDaSSD.cxx index 698acdb7353..3be79ece2c6 100644 --- a/ITS/AliITSModuleDaSSD.cxx +++ b/ITS/AliITSModuleDaSSD.cxx @@ -151,14 +151,43 @@ AliITSModuleDaSSD::AliITSModuleDaSSD(const AliITSModuleDaSSD& module) : fAdc(module.fAdc), fModuleId(module.fModuleId), fNumberOfStrips(module.fNumberOfStrips), - fStrips(module.fStrips), + fStrips(NULL), fNumberOfChips(module.fNumberOfChips), - fCm(module.fCm), + fCm(NULL), fEventsNumber(module.fEventsNumber) { // copy constructor - - AliFatal("AliITSModuleDaSSD, copy constructor not implemented"); + if ((module.fNumberOfStrips > 0) && (module.fStrips)) { + fStrips = new (nothrow) AliITSChannelDaSSD* [module.fNumberOfStrips]; + if (fStrips) { + for (Int_t strind = 0; strind < module.fNumberOfStrips; strind++) { + if (module.fStrips[strind]) { + fStrips[strind] = new AliITSChannelDaSSD(*(module.fStrips[strind])); + if (!fStrips[strind]) { + AliError("AliITSModuleDaSSD: Error copy constructor"); + for (Int_t i = (strind - 1); i >= 0; i--) delete fStrips[strind]; + delete [] fStrips; + fStrips = NULL; + break; + } + } else fStrips[strind] = NULL; + } + } else { + AliError(Form("AliITSModuleDaSSD: Error allocating memory for %i AliITSChannelDaSSD* objects!", module.fNumberOfStrips)); + fNumberOfStrips = 0; + fStrips = NULL; + } + } + if (module.fCm) { + fCm = new (nothrow) TArrayF [module.fNumberOfChips]; + if (fCm) { + for (Int_t chind = 0; chind < module.fNumberOfChips; chind++) fCm[chind] = module.fCm[chind]; + } else { + AliError(Form("AliITSModuleDaSSD: Error allocating memory for %i TArrayF objects!", module.fNumberOfChips)); + fNumberOfChips = 0; + fCm = NULL; + } + } } @@ -167,8 +196,54 @@ AliITSModuleDaSSD::AliITSModuleDaSSD(const AliITSModuleDaSSD& module) : AliITSModuleDaSSD& AliITSModuleDaSSD::operator = (const AliITSModuleDaSSD& module) { // assignment operator - - AliFatal("AliITSModuleDaSSD: operator =, assignment operator not implemented"); + if (this == &module) return *this; + if (fStrips) { + for (Long_t i = 0; i < fNumberOfStrips; i++) if (fStrips[i]) delete fStrips[i]; + delete [] fStrips; + } + fEquipId = module.fEquipId; + fEquipType = module.fEquipType; + fDdlId = module.fDdlId; + fAd = module.fAd; + fAdc = module.fAdc; + fModuleId = module.fModuleId; + fNumberOfStrips = module.fNumberOfStrips; + fStrips = NULL; + fNumberOfChips = module.fNumberOfChips; + fCm = NULL; + fEventsNumber = module.fEventsNumber; + if ((module.fNumberOfStrips > 0) && (module.fStrips)) { + fStrips = new (nothrow) AliITSChannelDaSSD* [module.fNumberOfStrips]; + if (fStrips) { + for (Int_t strind = 0; strind < module.fNumberOfStrips; strind++) { + if (module.fStrips[strind]) { + fStrips[strind] = new AliITSChannelDaSSD(*(module.fStrips[strind])); + if (!fStrips[strind]) { + AliError("AliITSModuleDaSSD: Error copy constructor"); + for (Int_t i = (strind - 1); i >= 0; i--) delete fStrips[strind]; + delete [] fStrips; + fStrips = NULL; + break; + } + } else fStrips[strind] = NULL; + } + } else { + AliError(Form("AliITSModuleDaSSD: Error allocating memory for %i AliITSChannelDaSSD* objects!", module.fNumberOfStrips)); + fNumberOfStrips = 0; + fStrips = NULL; + } + } + if (fCm) delete [] fCm; + if (module.fCm) { + fCm = new (nothrow) TArrayF [module.fNumberOfChips]; + if (fCm) { + for (Int_t chind = 0; chind < module.fNumberOfChips; chind++) fCm[chind] = module.fCm[chind]; + } else { + AliError(Form("AliITSModuleDaSSD: Error allocating memory for %i TArrayF objects!", module.fNumberOfChips)); + fNumberOfChips = 0; + fCm = NULL; + } + } return *this; } diff --git a/ITS/AliITSModuleDaSSD.h b/ITS/AliITSModuleDaSSD.h index a86e9dd958d..ed6f5c59dcc 100644 --- a/ITS/AliITSModuleDaSSD.h +++ b/ITS/AliITSModuleDaSSD.h @@ -54,7 +54,7 @@ class AliITSModuleDaSSD : public TObject { void SetStrip(AliITSChannelDaSSD* strip, const Int_t strID) { if ((fStrips) && (strID <= fNumberOfStrips)) fStrips[strID] = strip; } void SetCM (Float_t* cm, const Int_t chipn) { if (chipn < fNumberOfChips) fCm[chipn].Set(fCm[chipn].GetSize(), cm); } Bool_t SetCM (const Float_t cm, const Int_t chipn, const Int_t evn); - void DeleteCM () {if (fCm) delete [] fCm; fCm = NULL; } + void DeleteCM () {if (fCm) { delete [] fCm; fNumberOfChips = 0; fCm = NULL; } } void DeleteSignal() {if (fStrips) for (Int_t i = 0; i < fNumberOfStrips; i++) if (fStrips[i]) fStrips[i]->DeleteSignal(); fEventsNumber = 0; } static Int_t GetStripsPerModuleConst() { return fgkStripsPerModule; } diff --git a/ITS/ITSSSDPEDda.cxx b/ITS/ITSSSDPEDda.cxx index 7a712b9be86..c09d2d93623 100644 --- a/ITS/ITSSSDPEDda.cxx +++ b/ITS/ITSSSDPEDda.cxx @@ -1,18 +1,13 @@ /************************************************************************** -- "Contact": - Oleksandr Borysov, aborysov@ts.infnf.it -- "Link:" - link to test files: /afs/infn.it/ts/user/aborysov/public/C23_run387.000.raw -- "Run Type:" - run type (exactly as defined in the ECS) -- "DA Type:" - LDC -- "Number of events needed:" at least 500 - -- "Input Files:" - config file: ssdpeddaconfig - previous result files: - data source: raw data file on LDC - -- "Output Files:" - local names $DA_TEST_DIR/ssddaldc__.root - FXS name: ITSSSDda__.root, - local files are persistent over runs: data source -- "Trigger types used:" +- 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__.root, FXS_name=ITSSSDda__.root + local files are persistent over runs: data source +- Trigger types used: **************************************************************************/ @@ -34,7 +29,7 @@ int main( int argc, char** argv ) /* 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; } @@ -44,39 +39,54 @@ int main( int argc, char** argv ) if (ssddaldc->IsZombie()) return -1; if (!ssddaldc->ProcessRawData()) { - cout << "Error !ssddaldc->ProcessRawData()" << endl; + cerr << "Error !ssddaldc->ProcessRawData()" << endl; delete ssddaldc; return -1; } daqDA_progressReport(90); if (!system(NULL)) { - cout << "Error: the call system(NULL) in main() returned NULL!" << endl; + cerr << "Error: the call system(NULL) in main() returned NULL!" << endl; return -1; } dadaqdir = getenv ("DA_TEST_DIR"); - if (dadaqdir) { - dafname = dadaqdir; - if (!(ssddaldc->SaveCalibrationSSDLDC(dafname))) - cout << "Error saving DA data to the file! Probably $DA_TEST_DIR defined incorrectly!" << endl; - else cout << "SSDDA data are saved in " << dafname << 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"); - ssddaldc->Write(); - fileRun->Close(); - delete fileRun; + if (!dadaqdir) { + cerr << "Error: DA_TEST_DIR is not defined, DA data are not saved!" << endl; + delete ssddaldc; + daqDA_progressReport(100); + return 1; + } + dafname = dadaqdir; + if (ssddaldc->SaveCalibrationSSDLDC(dafname)) { + cout << "SSDDA data are saved in " << dafname << endl; status = daqDA_FES_storeFile(dafname, "DASSD_DB_results"); - if (status) printf("Failed to export file : %d\n",status); + 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; - if (getenv("DATE_DB_DIR")) { - cmddbsave = Form("$DATE_DB_DIR/daqDetDB_store ssddaldc.root %s", feefname.Data()); - status = system(cmddbsave.Data()); - if (status) printf("Failed to export file to the detector db: %d\n",status); - } else cout << "Error main(): $DATE_DB_DIR is not defined!" << endl; - } - else cout << "Error: DA_TEST_DIR is not defined, DA data are not saved!" << endl; delete ssddaldc; daqDA_progressReport(100); return 0; -} \ No newline at end of file +} -- 2.43.5