/* * PndTrackSelector.cxx * * Created on: 27.06.2013 * Author: simone */ #include "examples/PndTrackSelector.h" #include #include "PndTrack.h" #include "PndSdsHit.h" PndTrackSelector::PndTrackSelector(): FairTask("PndTrackSelector"),fPersistence(kTRUE),fIncludeLambdaDisk(true), fInputBranchNameTrack(" "),fOutputBranchName("SelectedTracks"),fFilterForTrackFitterFlag(kFALSE) { fSelectedTrack= new TClonesArray("PndTrack"); } PndTrackSelector::~PndTrackSelector() { // TODO Auto-generated destructor stub } void PndTrackSelector::Register() { FairRootManager::Instance()->Register(fOutputBranchName,"SttMvdGemFtsIdealTrk", fSelectedTrack, fPersistence); //FairRootManager::Instance()->Register(fOutputBranchName+"Cand","SttMvdGemFtsIdealTrk", fSelectedTrackCand, fPersistence); if(fVerbose>3) Info("Register","Done."); } void PndTrackSelector::SetParContainers() { fGeoH = PndGeoHandling::Instance(); fGeoH->SetParContainers(); } InitStatus PndTrackSelector::Init() { if(fVerbose>1) Info("Init","Start initialisation of PndTrackSelector."); FairRootManager *fManager = FairRootManager::Instance(); if (!fManager) { std::cout << "-E- PndTrackSelector::Init: " << "RootManager not instantiated!" << std::endl; return kFATAL; } fStripHit = (TClonesArray*)fManager->GetObject("MVDHitsStrip"); std::cout << "fStripHit >>" << fStripHit << "<<" <>" << fInputBranchNameTrack.Data() << "<<" <GetObject(fInputBranchNameTrack.Data()); std::cout << "fInputBranchNameTrack >>" << fInputTrack << "<<" <>"<< fInputBranchNameTrack << "<< found! aborting" << std::endl; return kFATAL; } if(fVerbose>1) Info("Init","End initialisation PndTrackSelector."); Register(); return kSUCCESS; } void PndTrackSelector::Exec(Option_t* opt) { if(fVerbose>1) Info("Exec","Start eventloop PndTrackSelector"); FairRootManager* ioman = FairRootManager::Instance(); fSelectedTrack->Delete(); int mvdstriplambdahits=0; int mvdstriphits=0; int gemhits=0; int stthits=0; int ftshits=0; int mvdpixelhits=0; int size=0; PndTrack* myTrack; PndTrackCand myTrackCand; for(int z=0; zGetEntries();z++) { mvdstriplambdahits=0; mvdstriphits=0; gemhits=0; stthits=0; ftshits=0; mvdpixelhits=0; myTrack=(PndTrack*)fInputTrack->At(z); myTrackCand=myTrack->GetTrackCand(); FairMultiLinkedData GEMlinks = myTrackCand.GetLinksWithType(ioman->GetBranchId("GEMHit")); // Get all Links to GEM Hits which belong to the IdealTrack FairMultiLinkedData MVDStriplinks = myTrackCand.GetLinksWithType(ioman->GetBranchId("MVDHitsStrip")); FairMultiLinkedData MVDPixellinks = myTrackCand.GetLinksWithType(ioman->GetBranchId("MVDHitsPixel")); FairMultiLinkedData STTlinks = myTrackCand.GetLinksWithType(ioman->GetBranchId("STTHit")); FairMultiLinkedData FTSlinks = myTrackCand.GetLinksWithType(ioman->GetBranchId("FTSHit")); stthits= STTlinks.GetNLinks(); ftshits=FTSlinks.GetNLinks(); mvdpixelhits=MVDPixellinks.GetNLinks(); gemhits=GEMlinks.GetNLinks(); if(fVerbose>2) { std::cout << "Track nr (TCA position) " << z << "\n"; std::cout << "Number of GEM Links in Track " << GEMlinks.GetNLinks()<< "\n"; std::cout << "Number of MVD Strip Links in Track " << MVDStriplinks.GetNLinks()<< "\n"; std::cout << "Number of MVD Pixel Links in Track " << MVDPixellinks.GetNLinks()<< "\n"; std::cout << "Number of STT Links in Track " << STTlinks.GetNLinks()<< "\n"; std::cout << "Number of FTS Links in Track " << FTSlinks.GetNLinks()<< "\n"; } for(int h=0;h < MVDStriplinks.GetNLinks();h++) // Loop over all MVD Strip hits to count the hits from the Lambda Disks { PndSdsHit* myStripHit = (PndSdsHit*)fStripHit->At(MVDStriplinks.GetLink(h).GetIndex()); if(fGeoH->GetPath(myStripHit->GetSensorID()).Contains("LambdaDisk") || fGeoH->GetPath(myStripHit->GetSensorID()).Contains("AddDisk")) { //std::cout <<"fGeoH->GetPath(myStripHit->GetSensorID())" << fGeoH->GetPath(myStripHit->GetSensorID()) << std::endl; mvdstriplambdahits++; } else { mvdstriphits++; //std::cout <<"fGeoH->GetPath(myStripHit->GetSensorID())" << fGeoH->GetPath(myStripHit->GetSensorID()) << std::endl; } } if(fIncludeLambdaDisk) { if(CutCriteria(ftshits,stthits,gemhits,mvdstriphits+mvdpixelhits+mvdstriplambdahits)) { if(fFilterForTrackFitterFlag==kTRUE) { if(myTrack->GetFlag()>0) { TClonesArray &selectedtracks = *fSelectedTrack; PndTrack* pndTrack = new(selectedtracks[size]) PndTrack(myTrack->GetParamFirst(), myTrack->GetParamLast(), myTrack->GetTrackCand(), myTrack->GetFlag(), myTrack->GetChi2(), myTrack->GetNDF(), myTrack->GetPidHypo(), z, FairRootManager::Instance()->GetBranchId(fInputBranchNameTrack)); std::cout << "++++++++++++Track " << z<< " will be added to next branch " << std::endl; size++; } } else { TClonesArray &selectedtracks = *fSelectedTrack; PndTrack* pndTrack = new(selectedtracks[size]) PndTrack(myTrack->GetParamFirst(), myTrack->GetParamLast(), myTrack->GetTrackCand(), myTrack->GetFlag(), myTrack->GetChi2(), myTrack->GetNDF(), myTrack->GetPidHypo(), z, FairRootManager::Instance()->GetBranchId(fInputBranchNameTrack)); std::cout << "++++++++++++Track " << z<< " will be added to next branch " << std::endl; size++; } } } else { if(CutCriteria(ftshits,stthits,gemhits,mvdstriphits+mvdpixelhits)) { if(fFilterForTrackFitterFlag==kTRUE) { if(myTrack->GetFlag()>0) { TClonesArray &selectedtracks = *fSelectedTrack; PndTrack* pndTrack = new(selectedtracks[size]) PndTrack(myTrack->GetParamFirst(), myTrack->GetParamLast(), myTrack->GetTrackCand(), myTrack->GetFlag(), myTrack->GetChi2(), myTrack->GetNDF(), myTrack->GetPidHypo(), z, FairRootManager::Instance()->GetBranchId(fInputBranchNameTrack)); std::cout << "++++++++++++Track " << z<< " will be added to next branch " << std::endl; size++; } } else { TClonesArray &selectedtracks = *fSelectedTrack; PndTrack* pndTrack = new(selectedtracks[size]) PndTrack(myTrack->GetParamFirst(), myTrack->GetParamLast(), myTrack->GetTrackCand(), myTrack->GetFlag(), myTrack->GetChi2(), myTrack->GetNDF(), myTrack->GetPidHypo(), z, FairRootManager::Instance()->GetBranchId(fInputBranchNameTrack)); std::cout << "++++++++++++Track " << z<< " will be added to next branch " << std::endl; size++; } } } } } void PndTrackSelector::FinishEvent() { std::cout << "Number of Tracks " << fSelectedTrack->GetEntriesFast() << std::endl; } bool PndTrackSelector::CutCriteria(int fts, int stt, int gem, int mvd) { if ((mvd>fNumberOfMVDHits&& fts+stt+gem>0 )|| fts+stt+gem+mvd >fNumberOfTotalHits) { return true; } else { return false; } } void PndTrackSelector::Finish() { } ClassImp(PndTrackSelector);