//----------------------------------------------------------- // File and Version Information: // $Id$ // // Description: // Implementation of class TpcClusterFinderTask // see TpcClusterFinderTask.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 "TpcClusterFinderTask.h" // C/C++ Headers ---------------------- #include #include // Collaborating Class Headers -------- #include "CbmRootManager.h" #include "TClonesArray.h" #include "TpcDigi.h" #include "TpcDigiAge.h" #include "TpcFrontend.h" #include "TpcPadPlane.h" #include "TpcDigiMapper.h" #include "RecoHitFactory.h" #include "TpcClusterFinder.h" // Class Member definitions ----------- TpcClusterFinderTask::TpcClusterFinderTask() : CbmTask("TPC Cluster Finder"), _persistence(kFALSE),_timeslice(2) { _digiBranchName = "TpcDigi"; } TpcClusterFinderTask::~TpcClusterFinderTask() { if(_frontend!=0)delete _frontend; } InitStatus TpcClusterFinderTask::Init() { //Get ROOT Manager CbmRootManager* ioman= CbmRootManager::Instance(); if(ioman==0) { Error("TpcClusterFinderTask::Init","RootManager not instantiated!"); return kERROR; } // Get input collection _digiArray=(TClonesArray*) ioman->GetObject(_digiBranchName); if(_digiArray==0) { Error("TpcClusterFinderTask::Init","Digi-array not found!"); return kERROR; } // create and register output array _clusterArray = new TClonesArray("TpcCluster"); ioman->Register("TpcCluster","Tpc",_clusterArray,_persistence); //TODO: Get this from Database! _frontend= new TpcFrontend(100, // AdcThreshold 100000, // adcmax 10, // adcbits 40, // SamplingFreq_Mhz -60000, // t0 30, // timebits 10); // PSAthreshold _cluster_buffer=new std::vector; _finder=new TpcClusterFinder(TpcDigiMapper::getInstance()->getPadPlane(), _cluster_buffer, _timeslice); std::cout<getPadPlane()->GetNPads()<checkConsistency(); //_finder->setTrivialClustering(); return kSUCCESS; } void TpcClusterFinderTask::Exec(Option_t* opt) { std::cout<<"TpcClusterFinderTask::Exec"<Delete(); _finder->reset(); //for sorting std::vectordigis; // For now: trivial clustering; Int_t ndigis=_digiArray->GetEntriesFast(); for(Int_t i=0;iAt(i); digis.push_back(digi); } _finder->process(digis); //sort(digis.begin(),digis.end(),TpcDigiAge()); /*for(Int_t i=0;imap(digi,pos); TpcCluster* c=new((*_clusterArray)[i]) TpcCluster(pos,digi->amp()); c->SetMcId(digi->mcId().DominantID()); }*/ // put clusters into array and clean up buffer unsigned int ncl=_cluster_buffer->size(); for(unsigned int icl=0;iclSetIndex(icl); delete (*_cluster_buffer)[icl]; } std::cout<<_clusterArray->GetEntriesFast()<<" cluster created"<clear(); digis.clear(); return; } ClassImp(TpcClusterFinderTask)