//----------------------------------------------------------- // File and Version Information: // $Id$ // // Description: // Implementation of class PndTpcGenfitTestTask // see PndTpcGenfitTestTask.hh for details // // Environment: // Software developed for the PANDA Detector at FAIR. // // Author List: // Christian Hoeppner TUM // // //----------------------------------------------------------- // Panda Headers ---------------------- // This Class' Header ------------------ #include "PndTpcGenfitTestTask.h" #include // C/C++ Headers ---------------------- #include #include // Collaborating Class Headers -------- #include "FairRootManager.h" #include "TClonesArray.h" #include "GFTrack.h" #include "PndTpcCluster.h" #include "PndTpcDigiMapper.h" #include "PndTpcFrontend.h" #include "PndTpcSPHit.h" #include "PndTpcTestPlanarHit.h" #include "PndMCTrack.h" #include "PndTpcPoint.h" #include "FairRunAna.h" #include "FairRuntimeDb.h" #include "PndTpcDigiPar.h" #include "GeaneTrackRep.h" #include "RKTrackRep.h" #include "GFAbsTrackRep.h" #include "GFRecoHitFactory.h" #include "GFKalman.h" #include "GFException.h" #include "GFTrack.h" #include "TFile.h" #include "GFDetPlane.h" #include "GFAbsRecoHit.h" #include "GFFieldManager.h" #include"PndFieldAdaptor.h" #include "TVector3.h" #include "TGeoManager.h" #include #include // for comparing GEANE and RK //#define GEANE 1 #define PDGID 11 #define CHARGE -1 // Class Member definitions ----------- PndTpcGenfitTestTask::PndTpcGenfitTestTask() : FairTask("GENFIT test Task") { } PndTpcGenfitTestTask::~PndTpcGenfitTestTask() { } InitStatus PndTpcGenfitTestTask::Init() { //Get ROOT Manager FairRootManager* ioman= FairRootManager::Instance(); if(ioman==0) { Error("PndTpcGenfitTestTask::Init","RootManager not instantiated!"); return kERROR; } // Get input collection _pointArray=(TClonesArray*) ioman->GetObject("PndTpcPoint"); if(_pointArray==0) { Error("PndTpcGenfitTestTask::Init","Point-array not found!"); return kERROR; } #ifndef GEANE stMCT = new TMatrixT(5,1); // RK covMCT = new TMatrixT(5,5); stREC = new TMatrixT(5,1); covREC = new TMatrixT(5,5); #endif #ifdef GEANE stMCT = new TMatrixT(5,1); // GEANE covMCT = new TMatrixT(5,5); stREC = new TMatrixT(5,1); covREC = new TMatrixT(5,5); #endif outfile = TFile::Open("out.root","RECREATE"); outtree = new TTree("t","example output"); outtree->Branch("stMCT","TMatrixT",&stMCT); outtree->Branch("covMCT","TMatrixT",&covMCT); outtree->Branch("stREC","TMatrixT",&stREC); outtree->Branch("covREC","TMatrixT",&covREC); outtree->Branch("chi2",&chi2,"chi2/D"); outtree->Branch("ndf",&ndf,"ndf/I"); outtree->Branch("nfail",&nfail,"nfail/I"); //get the magnetic field for curvature seeding FairField* field=FairRunAna::Instance()->GetField(); GFFieldManager::getInstance()->init(new PndFieldAdaptor(field)); _geanePro=new FairGeanePro(); gGeoManager->Print(); return kSUCCESS; } void PndTpcGenfitTestTask::SetParContainers() { // Get run and runtime database FairRun* run = FairRun::Instance(); if ( ! run ) Fatal("SetParContainers", "No analysis run"); FairRuntimeDb* db = run->GetRuntimeDb(); if ( ! db ) Fatal("SetParContainers", "No runtime database"); } void PndTpcGenfitTestTask::Exec(Option_t* opt) { static int counter(0); std::cout << "PndTpcGenfitTestTask::Exec " << counter++ << std::endl; std::vector pointlist; //loop over MC points and collect for(int p=0; p<_pointArray->GetEntriesFast(); ++p) { int id = ((PndTpcPoint*)_pointArray->At(p))->GetTrackID(); if(id==0) //only primary tracks pointlist.push_back((PndTpcPoint*)_pointArray->At(p)); } std::vector vecList; double rho(0.); TVector3 mom; for(unsigned int i=0;iPrint(); TVector3 vec; pointlist.at(i)->Position(vec); if(i==0) pointlist.at(i)->Momentum(mom); if(vec.Mag() vecList2; TVector3 before(0.,0.,0.); static const double minDist(2.); for(unsigned int i=0;iminDist){ before=vecList.at(i); vecList2.push_back(vecList.at(i)); //vecList.at(i).Print(); } } if(vecList2.size()<4.) return; GFDetPlane pl(vecList2.at(0)-1./mom.Mag()*mom,mom); GFDetPlane plRef(vecList2.at(0),vecList2.at(1)-vecList2.at(0)); #ifndef GEANE GFAbsTrackRep *rep = new RKTrackRep(vecList2.at(0)-1./mom.Mag()*mom, mom, TVector3(1.,1.,1.), TVector3(.2,.2,.2), PDGID); #endif #ifdef GEANE GFAbsTrackRep *rep = new GeaneTrackRep(_geanePro, pl, mom, TVector3(1.,1.,1.), TVector3(.2,.2,.2), CHARGE, PDGID); #endif GFAbsTrackRep *repRef = new GeaneTrackRep(_geanePro, plRef, mom, TVector3(1.,1.,1.), TVector3(.2,.2,.2), CHARGE, PDGID); //std::cout << rep << std::endl; GFTrack trk(rep); for(unsigned int i=0;igetCov())[0][0] << std::endl; *stMCT = repRef->getState(); *covMCT = repRef->getCov(); delete repRef; if (rep->getReferencePlane()!=plRef) return;//abort if extrap to last failed *stREC = rep->getState(); *covREC = rep->getCov(); //std::cout << "reconstructed charge: " << (*stREC)[0][0]/fabs((*stREC)[0][0]) << std::endl; chi2 = rep->getChiSqu(); ndf = rep->getNDF(); nfail = trk.getFailedHits(); static int fillCounter(0); std::cout << "filling # " << fillCounter++ << std::endl; outtree->Fill(); } void PndTpcGenfitTestTask::WriteTree(){ std::cout << "$$$$$$$$$$$$$$$$$$$$ WriteTree" << std::endl; outfile->cd(); outtree->Write(); outfile->Close(); } ClassImp(PndTpcGenfitTestTask)