//----------------------------------------------------------- // File and Version Information: // $Id$ // // Description: // pad-wise correction of Digi amplitudes // // Environment: // Software developed for the PANDA Detector at FAIR. // // Author List: // Felix Boehmer TUM (original author) // // //----------------------------------------------------------- // Panda Headers ---------------------- // This Class' Header ------------------ #include "TpcDigiAmpCorrectionTask.h" // C/C++ Headers ---------------------- #include #include // Collaborating Class Headers -------- #include "FairRootManager.h" #include "FairRun.h" #include "FairRuntimeDb.h" #include "TClonesArray.h" #include "TpcDigi.h" #include "TpcDigiPar.h" #include "TError.h" // Class Member definitions ----------- ClassImp(TpcDigiAmpCorrectionTask) TpcDigiAmpCorrectionTask::TpcDigiAmpCorrectionTask() : FairTask("Digi Amplitude Correction"), fPersistence(kFALSE), fInputSet(kFALSE), fVerbose(kFALSE), fAsciiInput("") { fDigiBranchName = "TpcDigi"; } InitStatus TpcDigiAmpCorrectionTask::Init() { //Get ROOT Manager FairRootManager* ioman= FairRootManager::Instance(); // Get input data FairRun* run = FairRun::Instance(); if ( ! run ) Fatal("SetParContainers", "No analysis run"); FairRuntimeDb* db = run->GetRuntimeDb(); if ( ! db ) Fatal("SetParContainers", "No runtime database"); TpcDigiPar* fpar= (TpcDigiPar*) db->getContainer("TpcDigiPar"); if (! fpar ) Fatal("SetParContainers", "TpcDigiPar not found"); TString corrfile=fpar->getGainCorrFile(); std::cout<<"TpcDigiAmpCorrectionTask::Init: gain calib file: "<GetObject(fDigiBranchName); if(fDigiArr==0) { Error("TpcDigiAmpCorrectionTask::Init","Cluster-array not found!"); return kERROR; } fInputSet=true; readFile(); return kSUCCESS; } void TpcDigiAmpCorrectionTask::SetParContainers() { std::cout<<"TpcDigiAmpCorrectionTask::SetParContainers"<GetRuntimeDb(); if ( ! db ) Fatal("SetParContainers", "No runtime database"); // Get Tpc digitisation parameter container fPar= (TpcDigiPar*) db->getContainer("TpcDigiPar"); if (! fPar ) Fatal("SetParContainers", "TpcDigiPar not found"); } void TpcDigiAmpCorrectionTask::Exec(Option_t* opt) { Int_t nd=fDigiArr->GetEntriesFast(); for(unsigned int id=0; idAt(id); double amp = digi->amp(); int padID = digi->padId(); if(padID<0) { std::cout<<"WARNING: TpcDigiAmpCorrectionTask::Exec()" <<" Invalid PadID - skipping digi"<amp(amp*corr); } return; } void TpcDigiAmpCorrectionTask::readFile() { ifstream instr; instr.open(fAsciiInput.Data()); int padID; double corr; if (instr.is_open()) std::cout<<"opened file for gain correction: "<>padID>>corr; if(instr.eof()) break; if(padID < 0) { Fatal("TpcDigiAmpCorrectionTask::readFile()", "Invalid PadID. Aborting"); return; } if(fCorrMap.find(padID) != fCorrMap.end()) { Fatal("TpcDigiAmpCorrectionTask::readFile()", "Inconsistent Input file: ambiguous padID. Aborting"); return; } fCorrMap[padID] = corr; } std::cout<<"TpcDigiAmpCorrectionTask::readFile() \n" <<" ...done. Correction map has "<