//----------------------------------------------------------- // File and Version Information: // $Id$ // // Description: // Implementation of class TpcPSATask // see TpcPSATask.hh for details // // Environment: // Software developed for the PANDA Detector at FAIR. // // Author List: // Sebastian Neubert TUM (original author) // // //----------------------------------------------------------- // Panda Headers ---------------------- // This Class' Header ------------------ #include "TpcPSATask.h" // C/C++ Headers ---------------------- #include #include // Collaborating Class Headers -------- #include "CbmRootManager.h" #include "TClonesArray.h" #include "TpcSample.h" #include "TpcDigi.h" #include "TpcDigiAge.h" #include "TpcFrontend.h" #include "TpcSimplePSAStrategy.h" // Class Member definitions ----------- TpcPSATask::TpcPSATask() : CbmTask("TPC Pulse shape analyser"), _persistence(kFALSE) { _sampleBranchName = "TpcSample"; } TpcPSATask::~TpcPSATask() { if(_frontend!=0)delete _frontend; if(_psa!=0)delete _psa; } InitStatus TpcPSATask::Init() { //Get ROOT Manager CbmRootManager* ioman= CbmRootManager::Instance(); if(ioman==0) { Error("TpcPSATask::Init","RootManager not instantiated!"); return kERROR; } // Get input collection _sampleArray=(TClonesArray*) ioman->GetObject(_sampleBranchName); if(_sampleArray==0) { Error("TpcPSATask::Init","Sample-array not found!"); return kERROR; } // create and register output array _digiArray = new TClonesArray("TpcDigi"); ioman->Register("TpcDigi","Tpc",_digiArray,_persistence); //TODO: Get this from Database! _frontend= new TpcFrontend(100, // AdcThreshold 100000, // adcmax 10, // adcbits 40, // SamplingFreq_Mhz -60000, // t0 30, // timebits 10); // PSAthreshold _psa= new TpcSimplePSAStrategy(10); // threshold (in adc channels) return kSUCCESS; } void TpcPSATask::Exec(Option_t* opt) { std::cout<<"TpcPSATask::Exec"<Delete(); std::vector samplev; std::vector digis; Int_t ns=_sampleArray->GetEntriesFast(); if(ns>0){ for(Int_t is=0;isProcessNext((TpcSample*)_sampleArray->At(is)); if(digi!=0)digis.push_back(digi); } } //sort digis in time; std::cout<<"sort Digis in time ... "; sort(digis.begin(),digis.end(),TpcDigiAge()); std::cout<<"finished"<GetEntriesFast()<<" Digis created"<