// Panda Headers ---------------------- #include "CbmRootManager.h" #include "PndDchKalmanTask.h" #include "Track.h" #include "PndDchRecoHit.h" #include "PndDchCylinderHit.h" #include "LSLTrackRep.h" #include "GeaneTrackRep.h" #include "RecoHitFactory.h" #include "Kalman.h" #include "FitterExceptions.h" // C/C++ Headers ---------------------- #include #include #include // ROOT Headers -------- #include "TClonesArray.h" #include "TH1D.h" #include "TFile.h" #include "TGeoTrack.h" #include "TGeoManager.h" // Class Member definitions ----------- PndDchKalmanTask::PndDchKalmanTask() : CbmTask("Kalman Filter"), fPersistence(kFALSE),fSmooth(kFALSE), fEvtCount(0) { fTrackBranchName = "Track"; } PndDchKalmanTask::~PndDchKalmanTask() { if(fhP!=NULL) delete fhP; if(fhChi2!=NULL) delete fhChi2; } InitStatus PndDchKalmanTask::Init() { //Get ROOT Manager CbmRootManager* ioman= CbmRootManager::Instance(); if(ioman==0) { Error("PndDchKalmanTask::Init","RootManager not instantiated!"); return kERROR; } // Get input collection fTrackArray=(TClonesArray*) ioman->GetObject(fTrackBranchName); if(fTrackArray==0) { Error("PndDchKalmanTask::Init","Track array not found!"); return kERROR; } // Build hit factory ----------------------------- fTheRecoHitFactory = new RecoHitFactory(); TClonesArray* ar=(TClonesArray*) ioman->GetObject("PndDchCylinderHit"); if(ar==0){ Error("PndDchKalmanTask::Init","PndDchCylinderHit array not found!"); } else{ fTheRecoHitFactory->addProducer(1,new RecoHitProducer(ar)); } // "1" stands here for kind of detector number // setup histograms fhP = new TH1D("preco","preco",200,0.9,1.1); fhChi2 = new TH1D("chi2","chi2",100,0,20); return kSUCCESS; } void PndDchKalmanTask::Exec(Option_t* opt) { std::cout<<"\n\n-------------------------------------------------------"<GetEntriesFast(); // Fitting ---------------- can go to another task! Kalman fitter; for(Int_t itr=0; itrAt(itr); // Load RecoHits try { std::cout<<"Creating reco hits..."<addHitVector(fTheRecoHitFactory->createMany(trk->getCand())); std::cout<<"\t"<getNumHits()<<" hits in track " <getTrackRep(0)->getStatusFlag()==0){ trk->getCardinalRep()->Print(); fhP->Fill(trk->getMom().Mag()); double chi2 = trk->getChiSqu(); fhChi2->Fill(trk->getChiSqu()); ++fTrackCount; } } return; } void PndDchKalmanTask::WriteHistograms(){ TFile* file = CbmRootManager::Instance()->GetOutFile(); file->cd(); file->mkdir("DchKalman"); file->cd("DchKalman"); fhP->Write(); delete fhP; fhP = NULL; fhChi2->Write(); delete fhChi2; fhChi2 = NULL; } void PndDchKalmanTask::Finish(){ WriteHistograms(); } ClassImp(PndDchKalmanTask)