//----------------------------------------------------------- // File and Version Information: // $Id$ // // Description: // Implementation of class KalmanTask // see KalmanTask.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 "KalmanTask.h" // C/C++ Headers ---------------------- #include #include #include // Collaborating Class Headers -------- #include "CbmRootManager.h" #include "TClonesArray.h" #include "Track.h" #include "TpcCluster.h" #include "TpcPlanarRecoHit.h" #include "LSLTrackRep.h" #include "RecoHitFactory.h" #include "Kalman.h" #include "FitterExceptions.h" #include "TH1D.h" #include "TFile.h" #include "TGeoTrack.h" #include "TGeoManager.h" #include "TLorentzVector.h" #include "DetPlane.h" // Class Member definitions ----------- KalmanTask::KalmanTask() : CbmTask("Kalman Filter"), _persistence(kFALSE) { _trackBranchName = "TrackPreFit"; } KalmanTask::~KalmanTask() { if(_pH!=NULL)delete _pH; if(_chi2H!=NULL)delete _chi2H; } InitStatus KalmanTask::Init() { //Get ROOT Manager CbmRootManager* ioman= CbmRootManager::Instance(); if(ioman==0) { Error("KalmanTask::Init","RootManager not instantiated!"); return kERROR; } // Get input collection _trackArray=(TClonesArray*) ioman->GetObject(_trackBranchName); if(_trackArray==0) { Error("KalmanTask::Init","track-array not found!"); return kERROR; } // Build hit factory ----------------------------- _theRecoHitFactory = new RecoHitFactory(); TClonesArray* ar=(TClonesArray*) ioman->GetObject("TpcCluster"); if(ar==0){ Error("KalmanTask::Init","TpcCluster array not found"); } else{ _theRecoHitFactory->addProducer(2,new RecoHitProducer(ar)); } // setup histograms _pH=new TH1D("pH","p",100,0.4,0.6); _chi2H=new TH1D("chi2H","chi2",100,0,20); _massV0=new TH1D("massV0","massV0",100,0,5); _massETAC=new TH1D("massEta","massEta",100,2.5,3.5); return kSUCCESS; } void KalmanTask::Exec(Option_t* opt) { std::cout<<"KalmanTask::Exec"<Delete(); Int_t ntracks=_trackArray->GetEntriesFast(); if(ntracks>20){ std::cout<<"ntracks="< particles; std::vector signs; for(Int_t itr=0;itrAt(itr); // Load RecoHits try { trk->addHitVector(_theRecoHitFactory->createMany(trk->getCand())); std::cout<getNumHits()<<" hits in track " <getTrackRep(0)->getStatusFlag()==0){ //trk->getTrackRep(0)->Print(); DetPlane plane(TVector3(0,0,0.1),TVector3(1,0,0),TVector3(0,1,0)); TVector3 p3=trk->getTrackRep(0)->getMom(plane); double p=trk->getMom().Mag(); _pH->Fill(p); TLorentzVector* p4=new TLorentzVector(); p4->SetXYZM(p3.X(),p3.Y(),p3.Z(),0.493677); particles.push_back(p4); signs.push_back(trk->getTrackRep(0)->getCharge()); double chi2=trk->getChiSqu(); _chi2H->Fill(chi2); } } std::cout<<"Fitting done"<20)return; std::cout<<"Starting Analysis"< V0s; // try to reconstruct V0s for(int i=0;iFill(v0.M()); } } delete particles[i]; } double mphi=1.020; // try to build a etac for(int i=0;i0.03)continue; for(int j=i+1;j0.03)continue; TLorentzVector v0=(V0s[i])+(V0s[j]); _massETAC->Fill(v0.M()); } } V0s.clear(); signs.clear(); particles.clear(); return; } void KalmanTask::WriteHistograms(const TString& filename){ TFile* file = new TFile(filename,"UPDATE"); file->mkdir("Kalman"); file->cd("Kalman"); _pH->Write(); delete _pH; _pH=NULL; _chi2H->Write(); delete _chi2H; _chi2H=NULL; _massV0->Write(); delete _massV0; _massV0=NULL; _massETAC->Write(); delete _massETAC; _massETAC=NULL; file->Close(); delete file; } ClassImp(KalmanTask)