//----------------------------------------------------------- // File and Version Information: // $Id$ // // Description: // Implementation of class PndTpcPSATask // see PndTpcPSATask.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 "PndTpcPSATask.h" // C/C++ Headers ---------------------- #include #include // Collaborating Class Headers -------- #include "CbmRootManager.h" #include "TClonesArray.h" #include "PndTpcSample.h" #include "PndTpcDigi.h" #include "PndTpcDigiAge.h" #include "PndTpcFrontend.h" #include "PndTpcSimplePSAStrategy.h" // Class Member definitions ----------- PndTpcPSATask::PndTpcPSATask() : CbmTask("TPC Pulse shape analyser"), _persistence(kFALSE) { _sampleBranchName = "PndTpcSample"; } PndTpcPSATask::~PndTpcPSATask() { if(_frontend!=0)delete _frontend; if(_psa!=0)delete _psa; } InitStatus PndTpcPSATask::Init() { //Get ROOT Manager CbmRootManager* ioman= CbmRootManager::Instance(); if(ioman==0) { Error("PndTpcPSATask::Init","RootManager not instantiated!"); return kERROR; } // Get input collection _sampleArray=(TClonesArray*) ioman->GetObject(_sampleBranchName); if(_sampleArray==0) { Error("PndTpcPSATask::Init","Sample-array not found!"); return kERROR; } // create and register output array _digiArray = new TClonesArray("PndTpcDigi"); ioman->Register("PndTpcDigi","PndTpc",_digiArray,_persistence); //TODO: Get this from Database! _frontend= new PndTpcFrontend(100, // AdcThreshold 100000, // adcmax 10, // adcbits 40, // SamplingFreq_Mhz -60000, // t0 30, // timebits 10); // PSAthreshold _psa= new PndTpcSimplePSAStrategy(10); // threshold (in adc channels) return kSUCCESS; } void PndTpcPSATask::Exec(Option_t* opt) { std::cout<<"PndTpcPSATask::Exec"<Delete(); std::vector samplev; std::vector digis; Int_t ns=_sampleArray->GetEntriesFast(); if(ns>0){ for(Int_t is=0;isProcessNext((PndTpcSample*)_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(),PndTpcDigiAge()); std::cout<<"finished"<GetEntriesFast()<<" Digis created"<