//----------------------------------------------------------- // File and Version Information: // $Id$ // // Description: // Chi2 cleanup of "failed" GF fits due to outliers // // Environment: // Software developed for the PANDA Detector at FAIR. // // Author List: // Felix Boehmer TUM (original author) // // //----------------------------------------------------------- // Panda Headers ---------------------- // This Class' Header ------------------ #include "Chi2CleanupTask.h" // C/C++ Headers ---------------------- // Collaborating Class Headers -------- #include "FairRootManager.h" #include "FairRun.h" #include "FairRuntimeDb.h" #include "TClonesArray.h" #include "TError.h" #include "GFTrack.h" #include "GFTools.h" // Class Member definitions ----------- ClassImp(Chi2CleanupTask) Chi2CleanupTask::Chi2CleanupTask() : FairTask("Chi2-based GENFIT track cleanup"), fNDF(2), fnRep(0), fWindowInit(false), fCutInit(false) { ; } InitStatus Chi2CleanupTask::Init() { //Get ROOT Manager FairRootManager* ioman= FairRootManager::Instance(); // Get input data FairRun* run = FairRun::Instance(); if ( ! run ) Fatal("SetParContainers", "No analysis run"); FairRuntimeDb* db = run->GetRuntimeDb(); if ( ! db ) Fatal("SetParContainers", "No runtime database"); TpcDigiPar* fpar= (TpcDigiPar*) db->getContainer("TpcDigiPar"); if (! fpar ) Fatal("SetParContainers", "TpcDigiPar not found"); if(ioman==0) { Error("Chi2CleanupTask::Init","RootManager not instantiated!"); return kERROR; } // Get input collection fTrackArr=(TClonesArray*) ioman->GetObject(fTrackBranchName); if(fTrackArr==0) { Error("Chi2CleanupTask::Init","Cluster-array not found!"); return kERROR; } return kSUCCESS; } void Chi2CleanupTask::SetParContainers() { std::cout<<"Chi2CleanupTask::SetParContainers"<GetRuntimeDb(); if ( ! db ) Fatal("SetParContainers", "No runtime database"); // Get Tpc digitisation parameter container fPar= (TpcDigiPar*) db->getContainer("TpcDigiPar"); if (! fPar ) Fatal("SetParContainers", "TpcDigiPar not found"); } void Chi2CleanupTask::Exec(Option_t* opt) { if(!(fWindowInit && fCutInit)) Fatal("Chi2CleanupTask::Exec", "Not properly initialised!"); Int_t nt=fTrackArr->GetEntriesFast(); double factor = 1./fNDF; for(unsigned int id=0; idAt(id); if(track->getTrackRep(fnRep)->getStatusFlag() != 0) continue; unsigned int nHits = track->getNumHits(); std::vector selection; unsigned int lowID = nHits*fFracL; while(lowID <= nHits -1 && lowIDlow && chi2diffgetTrackRep(fnRep)->setStatusFlag(2); } } return; } ClassImp(Chi2CleanupTask)