#include "PndMvdRiemannTrackFinderTask.h" #include // Root includes #include "TROOT.h" #include "TString.h" #include "TClonesArray.h" #include "TParticlePDG.h" // framework includes #include "CbmRootManager.h" #include "PndMvdIdealTrackingTask.h" #include "CbmRunAna.h" #include "CbmRuntimeDb.h" #include "CbmMCTrack.h" // PndMvd includes #include "PndMvdRecoHit.h" // #include "PndMvdTrackCand.h" #include "Track.h" #include "TrackCand.h" #include "PndMvdHit.h" #include "PndMvdMCPoint.h" #include "PndMvdCluster.h" #include "PndMvdDigi.h" #include "PndRiemannTrackFinder.h" PndMvdRiemannTrackFinderTask::PndMvdRiemannTrackFinderTask() : CbmTask("MVD Riemann Track Finder") { fHitBranch = "MVDHitsPixel"; fHitBranch2 = "MVDHitsStrip"; //fTrackBranch = "MCTrack"; } PndMvdRiemannTrackFinderTask::~PndMvdRiemannTrackFinderTask() { } void PndMvdRiemannTrackFinderTask::SetParContainers() { // Get Base Container /* CbmRunAna* ana = CbmRunAna::Instance(); CbmRuntimeDb* rtdb=ana->GetRuntimeDb(); fGeoPar = (PndMvdGeoPar*)(rtdb->getContainer("PndMvdGeoPar")); */ } InitStatus PndMvdRiemannTrackFinderTask::ReInit() { InitStatus stat=kERROR; return stat; /* CbmRunAna* ana = CbmRunAna::Instance(); CbmRuntimeDb* rtdb=ana->GetRuntimeDb(); fGeoPar=(PndMvdGeoPar*)(rtdb->getContainer("PndMvdGeoPar")); return kSUCCESS; */ } // ----- Public method Init -------------------------------------------- InitStatus PndMvdRiemannTrackFinderTask::Init() { CbmRootManager* ioman = CbmRootManager::Instance(); if ( ! ioman ) { std::cout << "-E- PndMvdIdealTrackFinderTask::Init: " << "RootManager not instantiated!" << std::endl; return kFATAL; } // Get input array fHitArray = (TClonesArray*) ioman->GetObject(fHitBranch); if ( !fHitArray){ std::cout << "-W- PndMvdIdealTrackFinderTask::Init: " << "No hitArray!" << std::endl; return kERROR; } fHitArray2 = (TClonesArray*) ioman->GetObject(fHitBranch2); if ( !fHitArray2){ std::cout << "-W- PndMvdIdealTrackFinderTask::Init: " << "No hitArray2!" << std::endl; return kERROR; } fTrackCandArray = new TClonesArray("TrackCand"); ioman->Register("MVDTrackCand", "MVD", fTrackCandArray, kTRUE); std::cout << "-I- PndMvdIdealTrackFinderTask: Initialisation successfull" << std::endl; return kSUCCESS; } // ----- Public method Exec -------------------------------------------- void PndMvdRiemannTrackFinderTask::Exec(Option_t* opt) { // Reset output array if ( ! fTrackCandArray ) Fatal("Exec", "No trackCandArray"); fTrackCandArray->Clear(); PndRiemannTrackFinder trackFinder; trackFinder.AddHits(fHitArray); trackFinder.AddHits(fHitArray2); trackFinder.FindTracks(0.1); std::cout << "Found Tracks: " << trackFinder.NTracks() << std::endl; std::vector myCand = trackFinder.GetTrackCand(); for (int i = 0; i < myCand.size(); i++){ //new (fTrackCandArray[i]) //std::cout << "TrackCand: " << myCand[i].getCurv() << " " << myCand[i].getDip() << std::endl; new ((*fTrackCandArray)[i])TrackCand(myCand[i].getCurv(), myCand[i].getDip(), myCand[i].inverted(), myCand[i].getDetIDs(), myCand[i].getHitIDs()); } } ClassImp(PndMvdRiemannTrackFinderTask);