9 #include <TMatrixDSym.h>
10 #include "TClonesArray.h"
16 #include "FairBaseParSet.h"
18 #include "FairRootManager.h"
20 #include "FairRunAna.h"
21 #include "FairRuntimeDb.h"
22 #include "FairTrackParH.h"
37 : FairTask(
"Cleaning Tracks Task for PANDA Lmd"),
46 : FairTask(
"Cleaning Tracks Task for PANDA Lmd"),
52 cout <<
"Beam Momentum in this run is " <<
fPbeam << endl;
53 hResponse =
new TH1D(
"hResponse",
"", 1e3, -1, 1);
63 FairRootManager* ioman = FairRootManager::Instance();
65 std::cout <<
"-E- PndLmdSigCleanTask::Init: "
66 <<
"RootManager not instantiated!" << std::endl;
70 fTrkArray = (TClonesArray*)ioman->GetObject(
"LMDPndTrackFilt");
72 std::cout <<
"-W- PndLmdTrkQTask::Init: "
74 <<
" array!" << std::endl;
79 fRecBPTracks = (TClonesArray*)ioman->GetObject(
"GeaneTrackFinal");
81 std::cout <<
"-W- PndLmdSigCleanTask::Init: "
82 <<
"No Track after back-propagation"
83 <<
" array!" << std::endl;
98 TMVA::Tools::Instance();
101 reader =
new TMVA::Reader(
"!Color:!Silent");
115 TString prefix =
"TMVAClassification";
133 std::map<int, std::vector<int> > mcHitMap;
137 cout <<
" ---- Info: " <<
fEventNr << endl;
143 Int_t counterSigTrk = 0;
144 for (Int_t iN = 0; iN < nGeaneTrks;
146 FairTrackParH* fRes = (FairTrackParH*)
fRecBPTracks->At(iN);
152 isCleanCand =
CheckXY(&fFittedTrkP);
157 bool isClean =
Check(fRes);
158 if (isClean == kTRUE && isCleanCand == kTRUE) {
159 new ((*fTrackParFinal)[counterSigTrk])
160 FairTrackParH(*(fRes));
162 if (
fVerbose > 2) cout <<
"***** isClean TRUE *****" << endl;
164 new ((*fTrackParFinal)[counterSigTrk]) FairTrackParH();
166 if (
fVerbose > 2) cout <<
"***** isClean FALSE *****" << endl;
169 if (
fVerbose > 2) cout <<
"PndLmdSigCleanTask::Exec END!" << endl;
175 FairTrackParH* fTrk) {
181 TVector3 MomRecBP = fTrk->GetMomentum();
182 double prec = MomRecBP.Mag();
190 if (abs(prec -
fPbeam) > 3e-4)
200 TVector3 PosRecBP = fTrk->GetPosition();
203 azrec = float(PosRecBP.Z());
204 TVector3 MomRecBP = fTrk->GetMomentum();
205 aprec = float(MomRecBP.Mag());
206 Double_t lyambda = fTrk->GetLambda();
208 aphrec = float(fTrk->GetPhi());
231 TVector3 MomRecLMD(fFittedTrkP->GetPx(), fFittedTrkP->GetPy(),
232 fFittedTrkP->GetPz());
233 MomRecLMD *= 1. / MomRecLMD.Mag();
236 if (
fVerbose > 0) cout <<
"!XThFilt!" << endl;
237 double Xref = -19.1 + 1.12 * 1e3 * MomRecLMD.Theta() +
fdX;
238 double diffX = abs(fFittedTrkP->GetX() - Xref);
240 cout <<
"fFittedTrkP.GetX() = " << fFittedTrkP->GetX() <<
" Xref = " << Xref
241 <<
" diffX = " << diffX << endl;
242 if (diffX > 3.0) dirOKx =
false;
243 if (
fVerbose > 0) cout <<
"!YPhFilt!" << endl;
244 double Yref = -0.00651 + 0.045 * 1e3 * MomRecLMD.Phi() +
fdY;
245 double diffY = abs(fFittedTrkP->GetY() - Yref);
247 cout <<
"fFittedTrkP.GetY() = " << fFittedTrkP->GetY() <<
" Yref = " << Yref
248 <<
" diffY = " << diffY << endl;
249 if (diffY > 4.0) dirOKy =
false;
252 if (dirOKx && dirOKy) res =
true;
virtual InitStatus Init()
TClonesArray * fRecBPTracks
bool CheckXY(FairTrackParP *fTrk)
virtual void Exec(Option_t *opt)
bool Check(FairTrackParH *fTrk)
TClonesArray * fTrackParFinal
bool CheckMom(double prec)
virtual void SetParContainers()
friend F32vec4 fabs(const F32vec4 &a)
static PndGeoHandling * Instance()
bool CheckMVA(FairTrackParH *fTrk)
FairTrackParP GetParamFirst()