// ------------------------------------------------------------------------- // ----- PndLmdSigCleanTask source file ----- // ----- Created 26/02/14 by A.Karavdina ----- // ------------------------------------------------------------------------- // libc includes #include // Root includes #include "TROOT.h" #include "TClonesArray.h" #include "TVector3.h" #include "TTree.h" #include // framework includes #include "FairRootManager.h" #include "PndLmdSigCleanTask.h" #include "FairRun.h" #include "FairRuntimeDb.h" #include "FairHit.h" #include "PndMCTrack.h" #include "FairBaseParSet.h" #include "TGeant3.h" #include "FairTrackParH.h" #include "PndTrack.h" #include "FairRunAna.h" // PndSds includes #include "PndSdsMCPoint.h" #include "PndSdsHit.h" #include "PndSdsMergedHit.h" //PndLmd includes #include #include // ----- Default constructor ------------------------------------------- PndLmdSigCleanTask::PndLmdSigCleanTask() : FairTask("Cleaning Tracks Task for PANDA Lmd"), fEventNr(0) { //tprop = new TNtuple(); } // ------------------------------------------------------------------------- PndLmdSigCleanTask::PndLmdSigCleanTask(Double_t pBeam, TString dir): FairTask("Cleaning Tracks Task for PANDA Lmd"), fEventNr(0) { fdir = dir; fPbeam = pBeam; cout<<"Beam Momentum in this run is "<GetObject("LMDPoint"); if ( !fMCHits) { std::cout << "-W- PndLmdSigCleanTask::Init: "<< "No LMDPoint"<<" array!" << std::endl; return kERROR; } //Get MC tracks fMCTracks = (TClonesArray*) ioman->GetObject("MCTrack"); if ( !fMCTracks) { std::cout << "-W- PndLmdTrkQTask::Init: "<< "No MCTrack"<<" array!" << std::endl; return kERROR; } // // fTracks = (TClonesArray*) ioman->GetObject("LMDTrack"); // fTracks = (TClonesArray*) ioman->GetObject("LMDPndTrack"); // if (!fTracks){ // std::cout << "-W- PndLmdSigCleanTask::Init: "<< "No Track" << " array!" << std::endl; // return kERROR; // } //Get rec.tracks after back propagation fRecBPTracks = (TClonesArray*) ioman->GetObject("GeaneTrackFinal"); if (!fRecBPTracks){ std::cout << "-W- PndLmdSigCleanTask::Init: "<< "No Track after back-propagation" << " array!" << std::endl; return kERROR; } fTrackParFinal = new TClonesArray("FairTrackParH"); ioman->Register("LMDCleanTrack","PndLmd", fTrackParFinal, kTRUE); fGeoH = PndGeoHandling::Instance(); FairRun* fRun = FairRun::Instance(); FairRuntimeDb* rtdb = fRun->GetRuntimeDb(); //TMVA ----------------------------------------------------- // This loads the library if(fabs(fPbeam-1.5)<1e-1){ TMVA::Tools::Instance(); // TMVA::Reader * reader = new TMVA::Reader( "!Color:!Silent" ); // Create a set of variables and declare them to the reader // - the variable names MUST corresponds in name and type to those given in the weight file(s) used reader->AddVariable( "axrec", &axrec); reader->AddVariable( "ayrec", &ayrec); reader->AddVariable( "azrec", &azrec); reader->AddVariable( "aprec", &aprec); reader->AddVariable( "athrec", &athrec); reader->AddVariable( "aphrec", &aphrec); // TString dir = "weights/"; TString prefix = "TMVAClassification"; fmethodName = "BDT method"; TString weightfile = fdir + prefix + TString("_BDT") + TString(".weights.xml"); reader->BookMVA( fmethodName, weightfile ); } //------------------------------------------------------ return kSUCCESS; } // ------------------------------------------------------------------------- void PndLmdSigCleanTask::SetParContainers() { // Get Base Container /// FairRun* ana = FairRun::Instance(); // FairRuntimeDb* rtdb=ana->GetRuntimeDb(); } // ----- Public method Exec -------------------------------------------- void PndLmdSigCleanTask::Exec(Option_t* opt) { // if(fVerbose>5){ // if((fTracks->GetEntries())!=(fMCTracks->GetEntries())) // return; // } // cout<<"PndLmdSigCleanTask::Exec starts!"< > mcHitMap;//Track -> MCHits fTrackParFinal->Delete(); if(fVerbose>2){ cout<<" ---- Info: "<< fEventNr<GetEntriesFast(); Int_t counterSigTrk = 0; for (Int_t iN=0; iNAt(iN); // TVector3 PosRecBP = fRes->GetPosition(); // TVector3 MomRecBP = fRes->GetMomentum(); bool isClean = Check(fRes); if(isClean == kTRUE){ new((*fTrackParFinal)[counterSigTrk]) FairTrackParH(*(fRes)); //save Track counterSigTrk++; if(fVerbose>2) cout<<"***** isClean TRUE *****"<2) cout<<"***** isClean FALSE *****"<2) cout<<"PndLmdSigCleanTask::Exec END!"<GetMomentum(); double prec = MomRecBP.Mag(); res = CheckMom(prec); } return res; } bool PndLmdSigCleanTask::CheckMom(double prec){ bool res; if(abs(prec-fPbeam)>3e-4) res=false; else res=true; return res; } bool PndLmdSigCleanTask::CheckMVA(FairTrackParH* fTrk){ // cout<<"Yes, TMVA game!"<GetPosition(); axrec = float(PosRecBP.X()); ayrec = float(PosRecBP.Y()); azrec = float(PosRecBP.Z()); TVector3 MomRecBP = fTrk->GetMomentum(); aprec = float(MomRecBP.Mag()); Double_t lyambda = fTrk->GetLambda(); athrec = float(TMath::Pi()/2. - lyambda); aphrec = float(fTrk->GetPhi()); double mva_response = reader->EvaluateMVA(fmethodName); hResponse->Fill(mva_response); // if(mva_response>-0.0599) res=true; //BDT if(mva_response<0){ // if(mva_response<-0.1452){ // if(mva_response<-0.156){ // if(mva_response<-0.01){ res=false; //BDT //TEST // cout<<"BDT="<