#include "PndTorinoDetectorTimeRecoTask.h" #include "PndTorinoDetectorHit.h" #include "PndTorinoDetectorDigi.h" #include "FairRootManager.h" #include "FairRunAna.h" #include "TMath.h" #include using namespace std; // ----- Default constructor ------------------------------------------- PndTorinoDetectorTimeRecoTask::PndTorinoDetectorTimeRecoTask(): fFunctor(0) { } // ------------------------------------------------------------------------- // ----- Standard constructor ------------------------------------------ PndTorinoDetectorTimeRecoTask::PndTorinoDetectorTimeRecoTask(Int_t verbose) { } // ------------------------------------------------------------------------- // ----- Destructor ---------------------------------------------------- PndTorinoDetectorTimeRecoTask::~PndTorinoDetectorTimeRecoTask() { } // ------------------------------------------------------------------------- // ----- Public method Init (abstract in base class) -------------------- InitStatus PndTorinoDetectorTimeRecoTask::Init() { FairRootManager* ioman = FairRootManager::Instance(); if (!ioman) { std::cout << "-E- PndTorinoDetectorTimeRecoTask::Init: " ///todo replace with logger! << "RootManager not instantiated!" << std::endl; return kFATAL; } fDigiArray = (TClonesArray*) ioman->GetObject("PndTorinoDetectorSortedDigi"); if (!fDigiArray) { std::cout << "-W- PndTorinoDetectorTimeRecoTask::Init: " << "No Point array!" << std::endl; return kERROR; } fFunctor = new StopTime(); // Create and register output array fHitArray = new TClonesArray("PndTorinoDetectorHit"); ioman->Register("PndTorinoDetectorHit", "PndTorinoDetector", fHitArray, kTRUE); return kSUCCESS; } // ----- Public method Exec -------------------------------------------- void PndTorinoDetectorTimeRecoTask::Exec(Option_t* opt) { fHitArray->Delete(); if (FairRunAna::Instance()->IsTimeStamp()) { fDigiArray = FairRootManager::Instance()->GetData("PndTorinoDetectorSortedDigi", fFunctor, FairRootManager::Instance()->GetEventTime() + 200); // std::cout << "EventTime: " << FairRootManager::Instance()->GetEventTime() << std::endl; } // fill the map for(int ipnt = 0; ipnt < fDigiArray->GetEntries(); ipnt++) { PndTorinoDetectorDigi* digi = (PndTorinoDetectorDigi*) fDigiArray->At(ipnt); if(!digi){ std::cout << "-W- No digi!"; continue; } Double_t timestamp = digi->GetTimeStamp(); TVector3 pos(digi->GetX()+0.5, digi->GetY()+0.5, digi->GetZ()+0.5); TVector3 dpos(1/TMath::Sqrt(12), 1/TMath::Sqrt(12), 1/TMath::Sqrt(12)); PndTorinoDetectorHit* hit = new ((*fHitArray)[ipnt]) PndTorinoDetectorHit(-1, -1, pos, dpos); hit->SetTimeStamp(digi->GetTimeStamp()); hit->SetTimeStampError(digi->GetTimeStampError()); hit->SetLink(FairLink("PndTorinoDetectorDigi", ipnt)); fHitArray->Sort(); } fDigiArray->Delete(); } // ------------------------------------------------------------------------- ClassImp(PndTorinoDetectorTimeRecoTask)