FairRoot/PandaRoot
PndPidDskInfo.cxx
Go to the documentation of this file.
1 #include "PndPidCorrelator.h"
2 #include "PndDskParticle.h"
3 
4 #include <cmath>
5 //_________________________________________________________________
6 Bool_t PndPidCorrelator::GetDskInfo(FairTrackParH* helix, PndPidCandidate* pidCand) {
7  if (helix->GetZ()<165.) return kFALSE; // consider tracks only from last gem plane
8  //---
9  PndDskParticle *dskParticle = NULL;
10  Int_t dskEntries = fDskParticle->GetEntriesFast();
11  Int_t dskIndex = -1, dskPhot = 0;
12  Float_t dskThetaC = -1000,dskGLength = -1000; //dskThetaCErr = 0, //[R.K. 01/2017] unused variable
13  Float_t dskQuality = 1000000;
14  Float_t x_p = -1000;
15 
16  TVector3 vertex(0., 0., 0.);
17  TVector3 dskPos(0., 0., 0.);
18  TVector3 momentum(0., 0., 0.);
19 
20  if (fGeanePro) // Overwrites vertex if Geane is used
21  {
22  fGeanePropagator->PropagateToVolume("Plate",0,1);
23  vertex.SetXYZ(-10000, -10000, -10000); // reset vertex
24  FairTrackParH *fRes= new FairTrackParH();
25  Bool_t rc = fGeanePropagator->Propagate(helix, fRes, fPidHyp*pidCand->GetCharge());
26  if (!rc) return kFALSE;
27  vertex.SetXYZ(fRes->GetX(), fRes->GetY(), fRes->GetZ());
28  dskGLength = fGeanePropagator->GetLengthAtPCA();
29  x_p = fRes->GetMomentum().Mag();
30  }
31 
32  for (Int_t dd = 0; dd<dskEntries; dd++)
33  {
34  dskParticle = (PndDskParticle*)fDskParticle->At(dd);
35  if ( fIdeal && (dskParticle->GetTrackID() !=pidCand->GetMcIndex()) ) continue;
36  dskParticle->Position(dskPos);
37 
38  Float_t dist = (vertex-dskPos).Mag2();
39  if ( dskQuality > dist)
40  {
41  dskIndex = dd;
42  dskQuality = dist;
43  dskThetaC = dskParticle->GetThetaC();
44  //dskThetaCErr = dskParticle->GetErrThetaC();
45  dskPhot = 0; // ** to be filled **
46  }
47  if (fDebugMode)
48  {
49  Float_t ntuple[] = {static_cast<Float_t>(vertex.X()), static_cast<Float_t>(vertex.Y()), static_cast<Float_t>(vertex.Z()), static_cast<Float_t>(vertex.Phi()),
50  static_cast<Float_t>(helix->GetMomentum().Mag()), static_cast<Float_t>(helix->GetQ()), static_cast<Float_t>(helix->GetMomentum().Theta()), static_cast<Float_t>(helix->GetZ()),
51  static_cast<Float_t>(dskPos.X()), static_cast<Float_t>(dskPos.Y()), static_cast<Float_t>(dskPos.Z()), static_cast<Float_t>(dskPos.Phi()),
52  dist, static_cast<Float_t>(dskParticle->GetThetaC()), 0., static_cast<Float_t>(vertex.DeltaPhi(dskPos)), dskGLength,
53  static_cast<Float_t>(helix->GetX()), static_cast<Float_t>(helix->GetY()), static_cast<Float_t>(helix->GetZ()), x_p, static_cast<Float_t>(pidCand->GetFitStatus())
54  };
55  // Float_t ntuple[] = {vertex.X(), vertex.Y(), vertex.Z(), vertex.Phi(),
56  // helix->GetMomentum().Mag(), helix->GetQ(), helix->GetMomentum().Theta(), helix->GetZ(),
57  // dskPos.X(), dskPos.Y(), dskPos.Z(), dskPos.Phi(),
58  // dist, dskParticle->GetThetaC(), 0., vertex.DeltaPhi(dskPos), dskGLength,
59  // helix->GetX(), helix->GetY(), helix->GetZ(), x_p, pidCand->GetFitStatus()
60  // };
61  dskCorr->Fill(ntuple);
62  }
63  }
64 
65  if ((dskQuality<fCorrPar->GetDskCut()) || (fIdeal && dskIndex!=-1))
66  {
67  pidCand->SetDiscQuality(dskQuality);
68  pidCand->SetDiscThetaC(dskThetaC);
69  //pidCand->SetDskThetaCErr(dskThetaCErr);
70  pidCand->SetDiscNumberOfPhotons(dskPhot);
71  pidCand->SetDiscIndex(dskIndex);
72  }
73  return kTRUE;
74 }
75 
76 
Int_t GetCharge() const
TClonesArray * fDskParticle
PndDrcHit TCA.
void SetDiscQuality(Double_t val)
Double_t x_p
void SetDiscThetaC(Double_t val)
Int_t GetMcIndex() const
void SetDiscIndex(Int_t val)
FairGeanePro * fGeanePropagator
Refitter for MDT tracks.
void SetDiscNumberOfPhotons(Int_t val)
ClassImp(PndAnaContFact)
Bool_t GetDskInfo(FairTrackParH *helix, PndPidCandidate *pid)
Double_t GetThetaC() const
Int_t GetFitStatus() const