FairRoot/PandaRoot
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
PndPidCorrelator Class Reference

#include <PndPidCorrelator.h>

Inheritance diagram for PndPidCorrelator:

Public Member Functions

virtual void Exec (Option_t *option)
 
virtual InitStatus Init ()
 
void Register ()
 
void Reset ()
 
void ResetEmcQ ()
 
 PndPidCorrelator (const char *name, const char *title="Pnd Task")
 
 PndPidCorrelator ()
 
virtual ~PndPidCorrelator ()
 
void SetOption (Option_t *option=" ")
 
void SetDebugMode (Bool_t debug)
 
void SetDebugFilename (TString filename)
 
void SetMdtRefit (Bool_t mdt)
 
void SetMixMode (Bool_t mix)
 
void SetBarrelTrackBranch (TString branch)
 
void SetForwardTrackBranch (TString branch)
 
void SetOutputBranch (TString branch)
 
void SetSimulation (Bool_t sim)
 
void SetIdeal (Bool_t id)
 
void SetFast (Bool_t fast)
 
void SetCorrErrProp (Bool_t err)
 
void SetGeanePro (Bool_t gea=kTRUE)
 
void SetPidHyp (Int_t pid)
 
void SetIdealHyp (Bool_t opt=kTRUE)
 
void SetFlagCut (Bool_t opt=kTRUE)
 
void SetBackPropagate (Bool_t opt=kTRUE)
 
void SetMvdMode (Short_t mode)
 
void SetSttMode (Short_t mode)
 
void SetFtsMode (Short_t mode)
 
void SetTofMode (Short_t mode)
 
void SetFtofMode (Short_t mode)
 
void SetEmcMode (Short_t mode)
 
void SetMdtMode (Short_t mode)
 
void SetDrcMode (Short_t mode)
 
void SetDskMode (Short_t mode)
 
virtual void SetParContainers ()
 
virtual void Finish ()
 

Protected Member Functions

void ConstructChargedCandidate ()
 
void ConstructNeutralCandidate ()
 
PndPidCandidateAddChargedCandidate (PndPidCandidate *cand)
 
PndPidCandidateAddNeutralCandidate (PndPidCandidate *cand)
 
PndTrackAddMdtTrack (PndTrack *track)
 
Bool_t GetTrackInfo (PndTrack *track, PndPidCandidate *pid)
 
Bool_t GetMvdInfo (PndTrack *track, PndPidCandidate *pid)
 
Bool_t GetSttInfo (PndTrack *track, PndPidCandidate *pid)
 
Bool_t GetFtsInfo (PndTrack *track, PndPidCandidate *pid)
 
Bool_t GetGemInfo (PndTrack *track, PndPidCandidate *pid)
 
Bool_t GetTofInfo (FairTrackParH *helix, PndPidCandidate *pid)
 
Bool_t GetFtofInfo (FairTrackParH *helix, PndPidCandidate *pid)
 
Bool_t GetEmcInfo (FairTrackParH *helix, PndPidCandidate *pid)
 
Bool_t GetFscInfo (FairTrackParH *helix, PndPidCandidate *pid)
 
Bool_t GetMdtInfo (PndTrack *track, PndPidCandidate *pid)
 
Bool_t GetDrcInfo (FairTrackParH *helix, PndPidCandidate *pid)
 
Bool_t GetDskInfo (FairTrackParH *helix, PndPidCandidate *pid)
 
Bool_t GetMdt2Info (FairTrackParH *helix, PndPidCandidate *pid)
 
Bool_t GetFMdtInfo (FairTrackParP *helix, PndPidCandidate *pid)
 
Bool_t GetRichInfo (FairTrackParH *helix, PndPidCandidate *pid)
 
Bool_t MdtMapping ()
 
Bool_t MdtGeometry ()
 

Protected Attributes

TClonesArray * fMcTrack
 
TClonesArray * fTrack
 PndMCTrack TCA. More...
 
TClonesArray * fTrackID
 PndTrack TCA. More...
 
TClonesArray * fTrack2
 PndTrackID TCA. More...
 
TClonesArray * fTrackID2
 2nd PndTrack TCA More...
 
TClonesArray * fPidChargedCand
 2nd PndTrackID TCA More...
 
TClonesArray * fPidNeutralCand
 PndPidCandidate TCA for charged particles. More...
 
TClonesArray * fMdtTrack
 PndPidCandidate TCA for neutral particles. More...
 
TClonesArray * fMvdHitsStrip
 PndTrack TCA for MDT refit. More...
 
TClonesArray * fMvdHitsPixel
 PndSdsHit TCA for strip. More...
 
TClonesArray * fTofHit
 PndSdsHit TCA for pixel. More...
 
TClonesArray * fTofPoint
 PndTofHit TCA. More...
 
TClonesArray * fFtofHit
 PndTofPoint TCA. More...
 
TClonesArray * fFtofPoint
 PndFtofHit TCA. More...
 
TClonesArray * fEmcCluster
 PndFtofPoint TCA. More...
 
TClonesArray * fEmcBump
 PndEmcCluster TCA. More...
 
TClonesArray * fEmcDigi
 PndEmcBump TCA. More...
 
TClonesArray * fMdtPoint
 PndEmcDigi TCA. More...
 
TClonesArray * fMdtHit
 PndMdtPoint TCA. More...
 
TClonesArray * fMdtTrk
 PndMdtHit TCA. More...
 
TClonesArray * fDrcPoint
 PndMdtTrk TCA. More...
 
TClonesArray * fDrcHit
 PndDrcBarPoint TCA. More...
 
TClonesArray * fDskParticle
 PndDrcHit TCA. More...
 
TClonesArray * fSttHit
 PndDskParticle TCA //need to change to PndDskHit in future. More...
 
TClonesArray * fFtsHit
 PndSttHit TCA. More...
 
TClonesArray * fRichPoint
 PndFtsHit TCA. More...
 
TClonesArray * fRichHit
 PndRichBarPoint TCA. More...
 
PndPidCorrParfCorrPar
 PndRichHit TCA. More...
 
PndEmcGeoParfEmcGeoPar
 Correlation parameters. More...
 
PndEmcErrorMatrixParfEmcErrorMatrixPar
 EMC geometry parameters. More...
 
PndEmcErrorMatrixfEmcErrorMatrix
 EMC error matrix parameters. More...
 
PndGeoSttParfSttParameters
 EMC error matrix. More...
 
PndGeoFtsParfFtsParameters
 STT geometry parameters. More...
 
PndEmcAbsClusterCalibratorfEmcCalibrator
 FTS geometry parameters. More...
 
Short_t fDebugMode
 
Short_t fMvdMode
 
Short_t fSttMode
 
Short_t fFtsMode
 
Short_t fTofMode
 
Short_t fFtofMode
 
Short_t fEmcMode
 
Short_t fMdtMode
 
Short_t fDrcMode
 
Short_t fDskMode
 
Short_t fRichMode
 
Int_t fEmcClstCount
 
Int_t fFscClstCount
 
Double_t fMvdELoss
 
Double_t fMvdPath
 
Int_t fMvdHitCount
 
map< Int_t, vector< Int_t > > mapMdtBarrel
 
map< Int_t, vector< Int_t > > mapMdtEndcap
 
map< Int_t, vector< Int_t > > mapMdtForward
 
Float_t mdtLayerPos [3][20]
 
Float_t mdtIronThickness [3][20]
 
map< Int_t, Bool_tfClusterList
 
map< Int_t, Double_tfClusterQ
 
TString fTrackBranch
 
TString fTrackBranch2
 
TString fTrackOutBranch
 
Bool_t fSimulation
 
Bool_t fGeanePro
 
Bool_t fMdtRefit
 
Bool_t fIdeal
 
Bool_t fCorrErrorProp
 
Bool_t fMixMode
 
Int_t fEventCounter
 
Int_t fPidHyp
 
Bool_t fIdealHyp
 
Bool_t fFast
 
Bool_t fFlagCut
 
Bool_t fBackPropagate
 
PndGeoHandlingfGeoH
 
PndRecoKalmanFitfFitter
 Object to retrieve MVD geometry. More...
 
FairGeanePro * fGeanePropagator
 Refitter for MDT tracks. More...
 
TFile * r
 Geane propagator. More...
 
TNtuple * tofCorr
 
TNtuple * ftofCorr
 
TNtuple * emcCorr
 
TNtuple * fscCorr
 
TNtuple * mdtCorr
 
TNtuple * drcCorr
 
TNtuple * dskCorr
 
TNtuple * richCorr
 
TString sDir
 
TString sFile
 

Detailed Description

Definition at line 42 of file PndPidCorrelator.h.

Constructor & Destructor Documentation

PndPidCorrelator::PndPidCorrelator ( const char *  name,
const char *  title = "Pnd Task" 
)

Definition at line 117 of file PndPidCorrelator.cxx.

References fGeoH, fPidChargedCand, fPidNeutralCand, PndGeoHandling::Instance(), mdtIronThickness, mdtLayerPos, mm, Reset(), sDir, SetTitle(), and sFile.

117  :
118  FairTask(name),
121  fMvdMode(-1),
122  fSttMode(-1),
123  fFtsMode(-1),
124  fTofMode(-1),
125  fFtofMode(-1),
126  fEmcMode(-1),
127  fMdtMode(-1),
128  fDrcMode(-1),
129  fDskMode(-1),
130  fRichMode(-1),
131  fEmcClstCount(0),
132  fFscClstCount(0),
133  mapMdtBarrel(),
134  mapMdtEndcap(),
135  mapMdtForward(),
136  fClusterList(),
137  fClusterQ(),
138  fTrackBranch(""),
139  fTrackBranch2(""),
140  fTrackOutBranch(""),
141  fSimulation(kFALSE),
142  fGeanePro(kTRUE),
143  fMdtRefit(kFALSE),
144  fIdeal(kFALSE),
145  fCorrErrorProp(kTRUE),
146  fMixMode(kFALSE),
147  fPidHyp(0),
148  fIdealHyp(kFALSE),
149  fFast(kFALSE),
150  fFlagCut(kTRUE),
151  fBackPropagate(kTRUE),
152  fGeoH(NULL),
153  fGeanePropagator(NULL),
154  tofCorr(0),
155  emcCorr(0),
156  fscCorr(0),
157  drcCorr(0),
158  dskCorr(0),
159  richCorr(0),
160  sDir(""),
161  sFile("")
162 {
163  //---
164  fPidChargedCand = new TClonesArray("PndPidCandidate");
165  fPidNeutralCand = new TClonesArray("PndPidCandidate");
166  sDir = "./";
167  sFile = "./pidcorrelator.root";
169 
170  // Resetting MDT geometry parameters
171  for (Int_t mm=0; mm<3; mm++)
172  for (Int_t ll=0; ll<20;ll++)
173  {
174  mdtLayerPos[mm][ll] = -1;
175  mdtIronThickness[mm][ll] = -1;
176  }
177  SetTitle(title);
178  Reset();
179 }
map< Int_t, vector< Int_t > > mapMdtBarrel
TClonesArray * fMdtHit
PndMdtPoint TCA.
TClonesArray * fPidNeutralCand
PndPidCandidate TCA for charged particles.
Float_t mdtLayerPos[3][20]
PndEmcErrorMatrix * fEmcErrorMatrix
EMC error matrix parameters.
TClonesArray * fDskParticle
PndDrcHit TCA.
PndEmcErrorMatrixPar * fEmcErrorMatrixPar
EMC geometry parameters.
PndPidCorrPar * fCorrPar
PndRichHit TCA.
map< Int_t, Bool_t > fClusterList
TClonesArray * fMdtTrack
PndPidCandidate TCA for neutral particles.
TClonesArray * fFtsHit
PndSttHit TCA.
TClonesArray * fRichHit
PndRichBarPoint TCA.
TClonesArray * fMdtTrk
PndMdtHit TCA.
h_MC_angle SetTitle("MC truth: opening angle of #pi^{0}")
TClonesArray * fSttHit
PndDskParticle TCA //need to change to PndDskHit in future.
TClonesArray * fMvdHitsPixel
PndSdsHit TCA for strip.
TClonesArray * fDrcHit
PndDrcBarPoint TCA.
map< Int_t, vector< Int_t > > mapMdtForward
TClonesArray * fTrack2
PndTrackID TCA.
map< Int_t, Double_t > fClusterQ
TClonesArray * fEmcDigi
PndEmcBump TCA.
static PndGeoHandling * Instance()
FairGeanePro * fGeanePropagator
Refitter for MDT tracks.
TString name
PndGeoSttPar * fSttParameters
EMC error matrix.
TClonesArray * fMdtPoint
PndEmcDigi TCA.
TClonesArray * fMvdHitsStrip
PndTrack TCA for MDT refit.
TClonesArray * fFtofPoint
PndFtofHit TCA.
TClonesArray * fTofPoint
PndTofHit TCA.
TClonesArray * fPidChargedCand
2nd PndTrackID TCA
Float_t mdtIronThickness[3][20]
Double_t const mm
TClonesArray * fEmcBump
PndEmcCluster TCA.
TClonesArray * fDrcPoint
PndMdtTrk TCA.
TClonesArray * fMcTrack
Calculate Error Matrix for the given EmcCluster with parametrization defined by the given parameter P...
PndGeoHandling * fGeoH
PndEmcGeoPar * fEmcGeoPar
Correlation parameters.
TClonesArray * fTrack
PndMCTrack TCA.
TClonesArray * fRichPoint
PndFtsHit TCA.
TClonesArray * fFtofHit
PndTofPoint TCA.
map< Int_t, vector< Int_t > > mapMdtEndcap
TClonesArray * fTofHit
PndSdsHit TCA for pixel.
TClonesArray * fEmcCluster
PndFtofPoint TCA.
PndPidCorrelator::PndPidCorrelator ( )

Definition at line 52 of file PndPidCorrelator.cxx.

References fGeoH, fPidChargedCand, fPidNeutralCand, PndGeoHandling::Instance(), mdtIronThickness, mdtLayerPos, mm, Reset(), sDir, and sFile.

52  :
55  fDebugMode(kFALSE),
56  fMvdMode(-1),
57  fSttMode(-1),
58  fFtsMode(-1),
59  fTofMode(-1),
60  fFtofMode(-1),
61  fEmcMode(-1),
62  fMdtMode(-1),
63  fDrcMode(-1),
64  fDskMode(-1),
65  fRichMode(-1),
66  fEmcClstCount(0),
67  fFscClstCount(0),
68  mapMdtBarrel(),
69  mapMdtEndcap(),
70  mapMdtForward(),
71  fClusterList(),
72  fClusterQ(),
73  fTrackBranch(""),
74  fTrackBranch2(""),
75  fTrackOutBranch(""),
76  fSimulation(kFALSE),
77  fGeanePro(kTRUE),
78  fMdtRefit(kFALSE),
79  fIdeal(kFALSE),
80  fCorrErrorProp(kTRUE),
81  fMixMode(kFALSE),
82  fPidHyp(0),
83  fIdealHyp(kFALSE),
84  fFast(kFALSE),
85  fFlagCut(kTRUE),
86  fBackPropagate(kTRUE),
87  fGeoH(NULL),
88  fGeanePropagator(NULL),
89  tofCorr(0),
90  emcCorr(0),
91  fscCorr(0),
92  drcCorr(0),
93  dskCorr(0),
94  richCorr(0),
95  sDir(""),
96  sFile("")
97 {
98  //---
99  fPidChargedCand = new TClonesArray("PndPidCandidate");
100  fPidNeutralCand = new TClonesArray("PndPidCandidate");
101  sDir = "./";
102  sFile = "./pidcorrelator.root";
104 
105  // Resetting MDT geometry parameters
106  for (Int_t mm=0; mm<3; mm++)
107  for (Int_t ll=0; ll<20;ll++)
108  {
109  mdtLayerPos[mm][ll] = -1;
110  mdtIronThickness[mm][ll] = -1;
111  }
112 
113  Reset();
114 }
map< Int_t, vector< Int_t > > mapMdtBarrel
TClonesArray * fMdtHit
PndMdtPoint TCA.
TClonesArray * fPidNeutralCand
PndPidCandidate TCA for charged particles.
Float_t mdtLayerPos[3][20]
PndEmcErrorMatrix * fEmcErrorMatrix
EMC error matrix parameters.
TClonesArray * fDskParticle
PndDrcHit TCA.
PndEmcErrorMatrixPar * fEmcErrorMatrixPar
EMC geometry parameters.
PndPidCorrPar * fCorrPar
PndRichHit TCA.
map< Int_t, Bool_t > fClusterList
TClonesArray * fMdtTrack
PndPidCandidate TCA for neutral particles.
TClonesArray * fFtsHit
PndSttHit TCA.
TClonesArray * fRichHit
PndRichBarPoint TCA.
TClonesArray * fMdtTrk
PndMdtHit TCA.
PndEmcAbsClusterCalibrator * fEmcCalibrator
FTS geometry parameters.
TClonesArray * fSttHit
PndDskParticle TCA //need to change to PndDskHit in future.
TClonesArray * fMvdHitsPixel
PndSdsHit TCA for strip.
TClonesArray * fDrcHit
PndDrcBarPoint TCA.
map< Int_t, vector< Int_t > > mapMdtForward
TClonesArray * fTrack2
PndTrackID TCA.
map< Int_t, Double_t > fClusterQ
TClonesArray * fEmcDigi
PndEmcBump TCA.
static PndGeoHandling * Instance()
FairGeanePro * fGeanePropagator
Refitter for MDT tracks.
PndGeoSttPar * fSttParameters
EMC error matrix.
TClonesArray * fMdtPoint
PndEmcDigi TCA.
TClonesArray * fMvdHitsStrip
PndTrack TCA for MDT refit.
TClonesArray * fFtofPoint
PndFtofHit TCA.
TClonesArray * fTofPoint
PndTofHit TCA.
TClonesArray * fPidChargedCand
2nd PndTrackID TCA
Float_t mdtIronThickness[3][20]
Double_t const mm
TClonesArray * fEmcBump
PndEmcCluster TCA.
TClonesArray * fDrcPoint
PndMdtTrk TCA.
TClonesArray * fMcTrack
Calculate Error Matrix for the given EmcCluster with parametrization defined by the given parameter P...
PndGeoHandling * fGeoH
PndEmcGeoPar * fEmcGeoPar
Correlation parameters.
TClonesArray * fTrack
PndMCTrack TCA.
TClonesArray * fRichPoint
PndFtsHit TCA.
TClonesArray * fFtofHit
PndTofPoint TCA.
map< Int_t, vector< Int_t > > mapMdtEndcap
TClonesArray * fTofHit
PndSdsHit TCA for pixel.
TClonesArray * fEmcCluster
PndFtofPoint TCA.
PndPidCorrelator::~PndPidCorrelator ( )
virtual

Definition at line 43 of file PndPidCorrelator.cxx.

References fEmcErrorMatrix.

44 {
45  //
46  FairRootManager *fManager =FairRootManager::Instance();
47  fManager->Write();
48  delete fEmcErrorMatrix;
49 }
PndEmcErrorMatrix * fEmcErrorMatrix
EMC error matrix parameters.

Member Function Documentation

PndPidCandidate * PndPidCorrelator::AddChargedCandidate ( PndPidCandidate cand)
protected

Definition at line 1135 of file PndPidCorrelator.cxx.

References fPidChargedCand.

Referenced by ConstructChargedCandidate().

1135  {
1136  // Creates a new hit in the TClonesArray.
1137 
1138  TClonesArray& pidRef = *fPidChargedCand;
1139  Int_t size = pidRef.GetEntriesFast();
1140  return new(pidRef[size]) PndPidCandidate(*cand);
1141 }
TClonesArray * fPidChargedCand
2nd PndTrackID TCA
PndTrack * PndPidCorrelator::AddMdtTrack ( PndTrack track)
protected

Definition at line 1153 of file PndPidCorrelator.cxx.

References fMdtTrack.

1153  {
1154  // Creates a new hit in the TClonesArray.
1155 
1156  TClonesArray& pidRef = *fMdtTrack;
1157  Int_t size = pidRef.GetEntriesFast();
1158  return new(pidRef[size]) PndTrack(*track);
1159 }
TClonesArray * fMdtTrack
PndPidCandidate TCA for neutral particles.
PndPidCandidate * PndPidCorrelator::AddNeutralCandidate ( PndPidCandidate cand)
protected

Definition at line 1144 of file PndPidCorrelator.cxx.

References fPidNeutralCand.

Referenced by ConstructNeutralCandidate().

1144  {
1145  // Creates a new hit in the TClonesArray.
1146 
1147  TClonesArray& pidRef = *fPidNeutralCand;
1148  Int_t size = pidRef.GetEntriesFast();
1149  return new(pidRef[size]) PndPidCandidate(*cand);
1150 }
TClonesArray * fPidNeutralCand
PndPidCandidate TCA for charged particles.
void PndPidCorrelator::ConstructChargedCandidate ( )
protected

Definition at line 740 of file PndPidCorrelator.cxx.

References AddChargedCandidate(), fDrcHit, fDrcMode, fDskMode, fDskParticle, fEmcClstCount, fEmcMode, fFast, fFlagCut, fFscClstCount, fFtofHit, fFtofMode, fFtsHit, fFtsMode, fIdealHyp, fMcTrack, fMdtHit, fMdtMode, fMdtRefit, fMdtTrack, fMvdHitsPixel, fMvdHitsStrip, fMvdMode, fPidChargedCand, fPidHyp, fRichMode, fSttHit, fSttMode, fTofHit, fTofMode, fTrack, fTrack2, fTrackBranch, fTrackBranch2, GetDrcInfo(), GetDskInfo(), GetEmcInfo(), GetEntriesFast(), PndTrack::GetFlag(), GetFMdtInfo(), GetFscInfo(), GetFtofInfo(), GetFtsInfo(), GetGemInfo(), GetMdtInfo(), GetMvdInfo(), PndTrack::GetParamLast(), PndMCTrack::GetPdgCode(), GetRichInfo(), GetSttInfo(), GetTofInfo(), GetTrackInfo(), i, mapMdtForward, MdtMapping(), par, PndPidCandidate::SetFitStatus(), PndPidCandidate::SetMcIndex(), PndPidCandidate::SetPidHypo(), PndPidCandidate::SetTrackBranch(), PndPidCandidate::SetTrackIndex(), and track.

Referenced by Exec().

740  {
741  //-
742  //FIXME: Use Clear() to save time.
743  //Call Delete() only for too busy events to save Memory
744  fPidChargedCand->Delete();
745  if (fMdtRefit) fMdtTrack->Delete();
746  if (fMdtMode>0) MdtMapping();
747 
748  Int_t nTracks = fTrack->GetEntriesFast();
749  for (Int_t i = 0; i < nTracks; i++) {
750  PndTrack* track = (PndTrack*) fTrack->At(i);
751  PndPidCandidate* dummyCand = new PndPidCandidate();
752  dummyCand->SetFitStatus(-99);
753  Int_t ierr = 0;
754  FairTrackParP par = track->GetParamLast();
755  if ((par.GetMomentum().Mag()<0.05) || (par.GetMomentum().Mag()>15.) ) {
756  AddChargedCandidate(dummyCand);
757  continue; // cut low and high momenta
758  }
759  if ((fFlagCut) && (track->GetFlag()<=0)) {
760  AddChargedCandidate(dummyCand);
761  continue; // cut flag<=0
762  }
763  FairTrackParH *helix = new FairTrackParH(&par, ierr);
764 
765  PndPidCandidate* pidCand = new PndPidCandidate();
766 
767  pidCand->SetPidHypo(fPidHyp); //Walter added
768  // if (fTrackIDBranch!="")
769  // {
770  // PndTrackID* trackID = (PndTrackID*) fTrackID->At(i);
771  std::vector<FairLink> mcTrackLinks = track->GetSortedMCTracks();
772  if (mcTrackLinks.size() > 0) {
773  pidCand->SetMcIndex(mcTrackLinks[0].GetIndex());//todo: replace with GetCloneOfLinke for time-based operation
774  if (fIdealHyp) {
775  PndMCTrack *mcTrack = (PndMCTrack*) fMcTrack->At(
776  mcTrackLinks[0].GetIndex());
777  if (!mcTrack) {
778  fPidHyp = 211;
779  cout
780  << "-I- PndPidCorrelator::ConstructChargedCandidate: PndMCTrack does not exist!! (why?) -> let's try with pion hyp "
781  << endl;
782  } else {
783  fPidHyp = abs(mcTrack->GetPdgCode());
784  }
785  if (fPidHyp >= 100000000) {
786  fPidHyp = 211;
787  std::cout
788  << "-I- PndPidCorrelator::ConstructChargedCandidate: Track is an ion (PDGCode>100000000) -> let's try with pion hyp"
789  << std::endl;
790  }
791 
792  if (abs(fPidHyp) == 13)
793  fPidHyp = -13;
794  if (abs(fPidHyp) == 11)
795  fPidHyp = -11;
796  }
797  }
798  // } else { // added for PndAnalysis, TODO: remove after Fairlinks work with Associators
799  // PndTrackCand trackCand = track->GetTrackCand();
800  // pidCand->SetMcIndex(trackCand.getMcTrackId());
801  // }
802  pidCand->SetTrackIndex(i);
803  pidCand->SetTrackBranch(FairRootManager::Instance()->GetBranchId(fTrackBranch));
804  pidCand->AddLink(FairLink(fTrackBranch, i));
805  if (!GetTrackInfo(track, pidCand)) {
806  AddChargedCandidate(dummyCand);
807  continue;
808  }
809  if ( (fMvdMode==2) && ((fMvdHitsStrip->GetEntriesFast()+fMvdHitsPixel->GetEntriesFast())>0) ) GetMvdInfo(track, pidCand);
810  if ( (fSttMode == 2) && (fSttHit ->GetEntriesFast()>0) ) GetSttInfo(track, pidCand);
811  GetGemInfo(track, pidCand);
812  if (!fFast)
813  {
814  if ( (fTofMode==2) && (fTofHit ->GetEntriesFast()>0) ) GetTofInfo(helix, pidCand);
815  if ( (fEmcMode>0) && (fEmcClstCount>0) ) GetEmcInfo(helix, pidCand);
816  if ( (fMdtMode>0) && (fMdtHit ->GetEntriesFast()>0) ) GetMdtInfo(track, pidCand);
817  if ( (fDrcMode>0) && (fDrcHit ->GetEntriesFast()>0) ) GetDrcInfo(helix, pidCand);
818  if ( (fDskMode>0) && (fDskParticle->GetEntriesFast()>0)) GetDskInfo(helix, pidCand);
819  }
820  AddChargedCandidate(pidCand);
821  }
822 
823  if (fTrackBranch2!="")
824  {
825  Int_t nTracks2 = fTrack2->GetEntriesFast();
826  for (Int_t i = 0; i < nTracks2; i++) {
827  PndTrack* track = (PndTrack*) fTrack2->At(i);
828  PndPidCandidate* dummyCand = new PndPidCandidate();
829  dummyCand->SetFitStatus(-99);
830  Int_t ierr = 0;
831  FairTrackParP par = track->GetParamLast();
832  if ((par.GetMomentum().Mag()<0.1) || (par.GetMomentum().Mag()>20.) ) {
833  AddChargedCandidate(dummyCand);
834  continue; // cut low and high momenta
835  }
836  if ((fFlagCut) && (track->GetFlag()<=0)) {
837  AddChargedCandidate(dummyCand);
838  continue; // cut flag<=0
839  }
840  FairTrackParH *helix = new FairTrackParH(&par, ierr);
841 
842  PndPidCandidate* pidCand = new PndPidCandidate();
843  pidCand->SetPidHypo(fPidHyp); //Walter added
844 
845  // if (fTrackIDBranch2!="")
846  // {
847  std::vector<FairLink> mcTrackLinks = track->GetSortedMCTracks();
848  if (mcTrackLinks.size() > 0) {
849  pidCand->SetMcIndex(mcTrackLinks[0].GetIndex());
850  if (fIdealHyp) {
851  PndMCTrack *mcTrack = (PndMCTrack*) fMcTrack->At(
852  mcTrackLinks[0].GetIndex());
853  if (!mcTrack) {
854  fPidHyp = 211;
855  cout
856  << "-I- PndPidCorrelator::ConstructChargedCandidate: PndMCTrack does not exist!! (why?) -> let's try with pion hyp "
857  << endl;
858  } else {
859  fPidHyp = abs(mcTrack->GetPdgCode());
860  }
861  if (fPidHyp >= 100000000) {
862  fPidHyp = 211;
863  std::cout
864  << "-I- PndPidCorrelator::ConstructChargedCandidate: Track is an ion (PDGCode>100000000) -> let's try with pion hyp"
865  << std::endl;
866  }
867 
868  if (abs(fPidHyp) == 13)
869  fPidHyp = -13;
870  if (abs(fPidHyp) == 11)
871  fPidHyp = -11;
872  }
873  }
874  // } else { // added for PndAnalysis, TODO: remove after Fairlinks work with Associators
875  // PndTrackCand trackCand = track->GetTrackCand();
876  // pidCand->SetMcIndex(trackCand.getMcTrackId());
877  // }
878  pidCand->SetTrackIndex(i);
879  pidCand->SetTrackBranch(FairRootManager::Instance()->GetBranchId(fTrackBranch2));
880  pidCand->AddLink(FairLink(fTrackBranch2, i));
881  if (!GetTrackInfo(track, pidCand)) {
882  AddChargedCandidate(dummyCand);
883  continue;
884  }
885  if ( (fMvdMode==2) && ((fMvdHitsStrip->GetEntriesFast()+fMvdHitsPixel->GetEntriesFast())>0) ) GetMvdInfo(track, pidCand);
886  if ( (fFtsMode == 2) && (fFtsHit ->GetEntriesFast()>0) ) GetFtsInfo(track, pidCand);
887  GetGemInfo(track, pidCand);
888  if (!fFast)
889  {
890  if ( (fFtofMode==2) && (fFtofHit->GetEntriesFast()>0) ) GetFtofInfo(helix, pidCand);
891  if ( (fEmcMode>0) && (fFscClstCount>0) ) GetFscInfo(helix, pidCand);
892  //if ( (fMdtMode>0) && (fMdtHit ->GetEntriesFast()>0) ) GetMdtInfo(track, pidCand);
893  if (mapMdtForward.size()>0) GetFMdtInfo(&par, pidCand);
894  if ( (fRichMode>0) ) GetRichInfo(helix, pidCand);
895  } // end of fast mode
896  AddChargedCandidate(pidCand);
897  }
898  }
899 
900 }
void SetTrackIndex(int idx)
Int_t i
Definition: run_full.C:25
TClonesArray * fMdtHit
PndMdtPoint TCA.
PndRiemannTrack track
Definition: RiemannTest.C:33
Bool_t GetFMdtInfo(FairTrackParP *helix, PndPidCandidate *pid)
Bool_t GetMvdInfo(PndTrack *track, PndPidCandidate *pid)
Int_t GetPdgCode() const
Definition: PndMCTrack.h:73
Int_t GetFlag() const
Definition: PndTrack.h:33
TClonesArray * fDskParticle
PndDrcHit TCA.
Double_t par[3]
void SetMcIndex(int idx)
Bool_t GetMdtInfo(PndTrack *track, PndPidCandidate *pid)
cout<< "POINTs for new FwEndCap == "<< tsim-> GetEntriesFast()
TClonesArray * fMdtTrack
PndPidCandidate TCA for neutral particles.
Bool_t GetSttInfo(PndTrack *track, PndPidCandidate *pid)
TClonesArray * fFtsHit
PndSttHit TCA.
Bool_t GetTofInfo(FairTrackParH *helix, PndPidCandidate *pid)
void SetTrackBranch(int idx)
Bool_t GetFscInfo(FairTrackParH *helix, PndPidCandidate *pid)
Bool_t GetRichInfo(FairTrackParH *helix, PndPidCandidate *pid)
Bool_t GetFtofInfo(FairTrackParH *helix, PndPidCandidate *pid)
TClonesArray * fSttHit
PndDskParticle TCA //need to change to PndDskHit in future.
TClonesArray * fMvdHitsPixel
PndSdsHit TCA for strip.
Bool_t GetDrcInfo(FairTrackParH *helix, PndPidCandidate *pid)
PndPidCandidate * AddChargedCandidate(PndPidCandidate *cand)
FairTrackParP GetParamLast()
Definition: PndTrack.h:50
TClonesArray * fDrcHit
PndDrcBarPoint TCA.
map< Int_t, vector< Int_t > > mapMdtForward
Bool_t GetGemInfo(PndTrack *track, PndPidCandidate *pid)
TClonesArray * fTrack2
PndTrackID TCA.
TClonesArray * fMvdHitsStrip
PndTrack TCA for MDT refit.
TClonesArray * fPidChargedCand
2nd PndTrackID TCA
void SetFitStatus(Int_t val)
TClonesArray * fMcTrack
Bool_t GetDskInfo(FairTrackParH *helix, PndPidCandidate *pid)
Bool_t GetTrackInfo(PndTrack *track, PndPidCandidate *pid)
void SetPidHypo(int hyp)
Bool_t GetFtsInfo(PndTrack *track, PndPidCandidate *pid)
TClonesArray * fTrack
PndMCTrack TCA.
TClonesArray * fFtofHit
PndTofPoint TCA.
TClonesArray * fTofHit
PndSdsHit TCA for pixel.
Bool_t GetEmcInfo(FairTrackParH *helix, PndPidCandidate *pid)
void PndPidCorrelator::ConstructNeutralCandidate ( )
protected

Definition at line 903 of file PndPidCorrelator.cxx.

References AddNeutralCandidate(), Bool_t, PndEmcClusterEnergySums::E1(), PndEmcClusterEnergySums::E25(), PndEmcClusterEnergySums::E9(), PndEmcAbsClusterCalibrator::Energy(), PndEmcCluster::energy(), fCorrPar, fEmcBump, fEmcCalibrator, fEmcCluster, fEmcDigi, fEmcErrorMatrix, fEmcMode, fGeanePro, fGeanePropagator, fPidHyp, fPidNeutralCand, fTrack, fTrack2, fTrackBranch2, PndEmcErrorMatrix::Get4MomentumErrorMatrix(), PndEmcBump::GetClusterIndex(), PndPidCorrPar::GetEmcNeutralQCut(), PndEmcErrorMatrix::GetErrorP7(), PndEmcCluster::GetMcList(), PndEmcCluster::GetModule(), PndTrack::GetParamLast(), PndPidCorrPar::GetZLastPlane(), i, PndEmcCluster::LatMom(), mclist, PndEmcCluster::NBumps(), PndEmcCluster::NumberOfDigis(), par, PndPidCandidate::SetCov7(), PndPidCandidate::SetEmcCalEnergy(), PndPidCandidate::SetEmcClusterE1(), PndPidCandidate::SetEmcClusterE25(), PndPidCandidate::SetEmcClusterE9(), PndPidCandidate::SetEmcClusterLat(), PndPidCandidate::SetEmcClusterZ20(), PndPidCandidate::SetEmcClusterZ53(), PndPidCandidate::SetEmcIndex(), PndPidCandidate::SetEmcModule(), PndPidCandidate::SetEmcNumberOfBumps(), PndPidCandidate::SetEmcNumberOfCrystals(), PndPidCandidate::SetEmcQuality(), PndPidCandidate::SetEmcRawEnergy(), PndPidCandidate::SetEmcTimeStamp(), PndPidCandidate::SetFitStatus(), PndPidCandidate::SetLastHit(), PndPidCandidate::SetMcIndex(), PndPidCandidate::SetP4Cov(), track, TString, v1, PndEmcCluster::where(), PndEmcCluster::Z20(), and PndEmcCluster::Z53().

Referenced by Exec().

903  {
904  //-
905  fPidNeutralCand->Delete();
906  TString emcType;
907 
908  Int_t nBumps = 0;
909  if (fEmcMode == 2)
910  {
911  nBumps = fEmcCluster->GetEntriesFast();
912  emcType = "EmcCluster";
913  }
914  else if(fEmcMode == 3)
915  {
916  nBumps = fEmcBump->GetEntriesFast();
917  emcType = "EmcBump";
918  }
919 
920  for (Int_t i = 0; i < nBumps; i++)
921  {
922  PndPidCandidate* dummyCand = new PndPidCandidate();
923  dummyCand->SetFitStatus(-99);
924  PndEmcBump* bump;
925  PndEmcCluster *clu;
926  //Float_t quality = -1.;
927  if (fEmcMode==2)
928  {
929  //if (fClusterList[i]) continue;
930  bump = (PndEmcBump*) fEmcCluster->At(i);
931  clu = (PndEmcBump*) fEmcCluster->At(i);
932  //quality = fClusterQ[i];
933  }
934  else if(fEmcMode == 3)
935  {
936  bump = (PndEmcBump*) fEmcBump->At(i);
937  //if (fClusterList[bump->GetClusterIndex()]) continue; // skip correlated clusters
938  clu = (PndEmcCluster*)fEmcCluster->At(bump->GetClusterIndex());
939  //quality = fClusterQ[bump->GetClusterIndex()];
940  }
941 
942  TVector3 vtx(0,0,0);
943  TVector3 v1=bump->where();
944  TVector3 p3;
945  p3.SetMagThetaPhi(fEmcCalibrator->Energy(bump), v1.Theta(), v1.Phi());
946  TLorentzVector lv(p3,p3.Mag());
948  TMatrixD covP7=fEmcErrorMatrix->GetErrorP7(*clu);
949 
950  Float_t emcQuality = 1000000;
951  TVector3 vertex(0., 0., 0.);
952 
953  Int_t nTracks = 0;
954  if (bump->GetModule()>5) {
955  AddNeutralCandidate(dummyCand);
956  continue; // kick non valid emc modules
957  }
958  if (bump->GetModule()<5) // barrel
959  {
960  nTracks = fTrack->GetEntriesFast();
961  }
962  else // forward
963  {
964  if (fTrackBranch2!="") nTracks = fTrack2->GetEntriesFast();
965  }
966 
967  for (Int_t tt = 0; tt < nTracks; tt++)
968  {
969  PndTrack* track;
970  if (bump->GetModule()<5) // barrel
971  {
972  track = (PndTrack*) fTrack->At(tt);
973  }
974  else // forward
975  {
976  track = (PndTrack*) fTrack2->At(tt);
977  }
978 
979  Int_t ierr = 0;
980  FairTrackParP par = track->GetParamLast();
981  FairTrackParH *helix = new FairTrackParH(&par, ierr);
982 
983  if (bump->GetModule()<5) // barrel
984  {
985  if ((bump->GetModule()<3) && (helix->GetZ()>150.) ) continue; // not consider tracks after emc barrel for BARREL
986  if ((bump->GetModule()==3) && (helix->GetZ()<165.) ) continue; // consider tracks only from last gem plane for FWD
987  if ((bump->GetModule()==4) && (helix->GetZ()>-30.) ) continue; // consider tracks only ending at the back of STT for BKW
988  }
989  else // forward
990  {
991  if (helix->GetZ() < fCorrPar->GetZLastPlane()) continue; // consider tracks only from last fts plane for FSC
992  }
993 
994  if (fGeanePro)
995  { // Overwrites vertex if Geane is used
996  fGeanePropagator->SetPoint(v1);
997  fGeanePropagator->PropagateToPCA(1, 1);
998  vertex.SetXYZ(-10000, -10000, -10000); // reset vertex
999  FairTrackParH *fRes= new FairTrackParH();
1000  Bool_t rc = fGeanePropagator->Propagate(helix, fRes, fPidHyp*par.GetQ()); // First propagation at module
1001  if (!rc) continue;
1002  vertex.SetXYZ(fRes->GetX(), fRes->GetY(), fRes->GetZ());
1003  }
1004 
1005  Float_t dist = (v1-vertex).Mag2();
1006  if ( emcQuality > dist )
1007  {
1008  emcQuality = dist;
1009  }
1010  } // end of track correlation
1011 
1012  if ( emcQuality > fCorrPar->GetEmcNeutralQCut() )
1013  {
1014  PndPidCandidate* pidCand = new PndPidCandidate(0, vtx, lv);
1015  pidCand->SetP4Cov(covP4);
1016  pidCand->SetCov7(covP7);
1017  pidCand->SetEmcRawEnergy(bump->energy());
1018  pidCand->SetEmcCalEnergy(fEmcCalibrator->Energy(bump));
1019  pidCand->SetEmcIndex(i);
1020  pidCand->SetEmcModule(bump->GetModule());
1021  pidCand->SetEmcNumberOfCrystals(bump->NumberOfDigis());
1022  pidCand->SetEmcNumberOfBumps(clu->NBumps());
1023  pidCand->SetEmcQuality(emcQuality);
1024  pidCand->SetLastHit(v1);
1025 
1026  pidCand->SetEmcClusterZ20(bump->Z20());
1027  pidCand->SetEmcClusterZ53(bump->Z53());
1028  pidCand->SetEmcClusterLat(bump->LatMom());
1029  pidCand->SetEmcTimeStamp(bump->GetTimeStamp());
1030  if (fEmcDigi)
1031  {
1032  PndEmcClusterEnergySums esum(*clu, fEmcDigi);
1033  pidCand->SetEmcClusterE1(esum.E1());
1034  pidCand->SetEmcClusterE9(esum.E9());
1035  pidCand->SetEmcClusterE25(esum.E25());
1036  }
1037  pidCand->SetLink(FairLink(emcType, i));
1038 
1039  std::vector<Int_t> mclist = clu->GetMcList();
1040  if (mclist.size()>0)
1041  {
1042  pidCand->SetMcIndex(mclist[0]);
1043  }
1044  AddNeutralCandidate(pidCand);
1045  } else {
1046  AddNeutralCandidate(dummyCand);
1047  }
1048  }
1049 }
void SetEmcNumberOfCrystals(Int_t val)
void SetP4Cov(const TMatrixD &covP4)
CandList mclist
TVector3 where() const
void SetEmcNumberOfBumps(Int_t val)
Int_t i
Definition: run_full.C:25
Short_t GetModule() const
void SetEmcModule(Int_t val)
PndRiemannTrack track
Definition: RiemannTest.C:33
TClonesArray * fPidNeutralCand
PndPidCandidate TCA for charged particles.
PndPidCandidate * AddNeutralCandidate(PndPidCandidate *cand)
void SetEmcClusterE1(Double_t val)
PndEmcErrorMatrix * fEmcErrorMatrix
EMC error matrix parameters.
void SetEmcCalEnergy(Double_t val)
void SetCov7(const TMatrixD &cov7)
Double_t par[3]
PndPidCorrPar * fCorrPar
PndRichHit TCA.
void SetMcIndex(int idx)
void SetEmcQuality(Double_t val)
virtual Double_t Energy(PndEmcCluster *clust, Int_t pid=22)=0
Float_t GetEmcNeutralQCut()
Definition: PndPidCorrPar.h:16
const std::vector< Int_t > & GetMcList() const
TMatrixD GetErrorP7(const PndEmcCluster &cluster) const
PndEmcAbsClusterCalibrator * fEmcCalibrator
FTS geometry parameters.
Double_t Z53() const
Definition: PndEmcCluster.h:69
Double_t Z20() const
Definition: PndEmcCluster.h:67
void SetEmcClusterE9(Double_t val)
void SetEmcIndex(Int_t val)
FairTrackParP GetParamLast()
Definition: PndTrack.h:50
Double_t LatMom() const
Definition: PndEmcCluster.h:71
TMatrixD Get4MomentumErrorMatrix(const PndEmcCluster &cluster) const
a cluster (group of neighboring crystals) of hit emc crystals
Definition: PndEmcCluster.h:29
TClonesArray * fTrack2
PndTrackID TCA.
TClonesArray * fEmcDigi
PndEmcBump TCA.
FairGeanePro * fGeanePropagator
Refitter for MDT tracks.
void SetEmcClusterE25(Double_t val)
Int_t NumberOfDigis() const
void SetFitStatus(Int_t val)
void SetEmcClusterLat(Double_t val)
Int_t NBumps() const
Int_t GetClusterIndex()
Definition: PndEmcBump.h:54
TVector3 v1
Definition: bump_analys.C:40
TClonesArray * fEmcBump
PndEmcCluster TCA.
virtual Double_t energy() const
void SetEmcTimeStamp(Double_t val)
void SetLastHit(TVector3 &pos)
void SetEmcClusterZ20(Double_t val)
void SetEmcClusterZ53(Double_t val)
TClonesArray * fTrack
PndMCTrack TCA.
represents a reconstructed (splitted) emc cluster
Definition: PndEmcBump.h:34
void SetEmcRawEnergy(Double_t val)
TMatrixT< double > TMatrixD
Definition: PndLmdDim.h:52
TClonesArray * fEmcCluster
PndFtofPoint TCA.
Float_t GetZLastPlane()
Definition: PndPidCorrPar.h:22
void PndPidCorrelator::Exec ( Option_t *  option)
virtual

Definition at line 697 of file PndPidCorrelator.cxx.

References ConstructChargedCandidate(), ConstructNeutralCandidate(), fEmcClstCount, fEmcCluster, fEmcMode, fEventCounter, fFast, fFscClstCount, fTrack, fTrack2, PndEmcCluster::GetModule(), i, Reset(), and ResetEmcQ().

697  {
698  //-
699  Reset();
700  cout << " ===== PndPidCorrelator - Event: " << fEventCounter;
701  Int_t nTracksTot=0;
702  if (fTrack)
703  {
704  nTracksTot += fTrack->GetEntriesFast();
705  }
706  if (fTrack2)
707  {
708  nTracksTot += fTrack2->GetEntriesFast();
709  }
710 
711  cout << " - Number of tracks for pid " << nTracksTot;
712  if (fEmcMode>0)
713  {
714  PndEmcCluster *tmp_cluster;
715  for(Int_t i=0; i < fEmcCluster->GetEntriesFast();i++)
716  {
717  tmp_cluster = (PndEmcCluster*)fEmcCluster->At(i);
718  if(tmp_cluster->GetModule() < 5 && tmp_cluster->GetModule() >0)
719  {
720  fEmcClstCount++;
721  }
722  if(tmp_cluster->GetModule() == 5)
723  {
724  fFscClstCount++;
725  }
726  }
727  ResetEmcQ();
728  cout << " - Number of Clusters for pid: ";
729  cout << " EMC: " << fEmcClstCount;
730  cout << " FSC: " << fFscClstCount;
731  }
732  cout<<endl;
733 
735  if ((fEmcMode>0) && (!fFast)) ConstructNeutralCandidate();
736  fEventCounter++;
737 }
Int_t i
Definition: run_full.C:25
Short_t GetModule() const
a cluster (group of neighboring crystals) of hit emc crystals
Definition: PndEmcCluster.h:29
TClonesArray * fTrack2
PndTrackID TCA.
TClonesArray * fTrack
PndMCTrack TCA.
TClonesArray * fEmcCluster
PndFtofPoint TCA.
void PndPidCorrelator::Finish ( )
virtual

Definition at line 1082 of file PndPidCorrelator.cxx.

References drcCorr, dskCorr, emcCorr, fDebugMode, fscCorr, ftofCorr, mdtCorr, r, and tofCorr.

1082  {
1083  //---
1084  if (fDebugMode)
1085  {
1086  //TFile *r = TFile::Open(sDir+sFile,"RECREATE");
1087  r->cd();
1088  tofCorr->Write();
1089  ftofCorr->Write();
1090  emcCorr->Write();
1091  fscCorr->Write();
1092  mdtCorr->Write();
1093  drcCorr->Write();
1094  dskCorr->Write();
1095 
1096  r->Save();
1097 
1098  tofCorr->Delete();
1099  ftofCorr->Delete();
1100  emcCorr->Delete();
1101  fscCorr->Delete();
1102  mdtCorr->Delete();
1103  drcCorr->Delete();
1104  dskCorr->Delete();
1105 
1106  tofCorr = 0;
1107  ftofCorr = 0;
1108  emcCorr = 0;
1109  fscCorr = 0;
1110  mdtCorr = 0;
1111  drcCorr = 0;
1112  dskCorr = 0;
1113 
1114  r->Close();
1115  r->Delete();
1116  }
1117 
1118 }
TFile * r
Geane propagator.
Bool_t PndPidCorrelator::GetDrcInfo ( FairTrackParH *  helix,
PndPidCandidate pid 
)
protected

Definition at line 8 of file PndPidDrcInfo.cxx.

References Bool_t, ClassImp(), drcCorr, fDebugMode, fDrcHit, fDrcPoint, fGeanePro, fGeanePropagator, fIdeal, fPidHyp, PndPidCandidate::GetCharge(), PndDrcHit::GetErrThetaC(), PndPidCandidate::GetFitStatus(), PndPidCandidate::GetMcIndex(), PndDrcHit::GetRefIndex(), PndDrcHit::GetThetaC(), PndPidCandidate::SetDrcIndex(), PndPidCandidate::SetDrcNumberOfPhotons(), PndPidCandidate::SetDrcQuality(), PndPidCandidate::SetDrcThetaC(), and PndPidCandidate::SetDrcThetaCErr().

Referenced by ConstructChargedCandidate().

8  {
9  if (helix->GetZ()>120.) return kFALSE; // cut fwd endcap tracks
10  //---
11  PndDrcHit *drcHit = NULL;
12  Int_t drcEntries = fDrcHit->GetEntriesFast();
13  Int_t drcIndex = -1, drcPhot = 0;
14  Float_t drcThetaC = -1000, drcThetaCErr = 0, drcGLength = -1000;
15  Float_t drcQuality = 1000000;
16 
17  TVector3 vertex(0., 0., 0.);
18  //Float_t vertex_z = -1000; //[R.K.03/2017] unused variable
19  TVector3 drcPos(0., 0., 0.);
20  TVector3 momentum(0., 0., 0.);
21 
22  if (fGeanePro) // Overwrites vertex if Geane is used
23  {
24  fGeanePropagator->PropagateToVolume("DrcBarSensor",0,1);
25 // fGeanePropagator->PropagateToVolume("BarrelDIRC",0,1);
26  vertex.SetXYZ(-10000, -10000, -10000); // reset vertex
27  FairTrackParH *fRes= new FairTrackParH();
28  Bool_t rc = fGeanePropagator->Propagate(helix, fRes, fPidHyp*pidCand->GetCharge());
29  if (!rc) return kFALSE;
30  vertex.SetXYZ(fRes->GetX(), fRes->GetY(), 0.);
31  //vertex_z = fRes->GetZ(); //[R.K.03/2017] unused variable
32  drcGLength = fGeanePropagator->GetLengthAtPCA();
33  if (drcGLength>30.) return kFALSE; // additional cut on extrapolation distance to avoid fake correlations
34  }
35  for (Int_t dd = 0; dd<drcEntries; dd++)
36  {
37  drcHit = (PndDrcHit*)fDrcHit->At(dd);
38  if ( fIdeal && ( ((PndDrcBarPoint*)fDrcPoint->At(drcHit->GetRefIndex()))->GetTrackID() !=pidCand->GetMcIndex()) ) continue;
39  drcHit->Position(drcPos);
40 
41  Float_t dphi = vertex.DeltaPhi(drcPos);
42  Float_t dist = dphi * dphi;
43  if (drcQuality > dist)
44  {
45  drcIndex = dd;
46  drcQuality = dist;
47  drcThetaC = drcHit->GetThetaC();
48  drcThetaCErr = drcHit->GetErrThetaC();
49  drcPhot = 0; // ** to be filled **
50  }
51  if (fDebugMode)
52  {
53  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()),
54  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()),
55  static_cast<Float_t>(drcPos.X()), static_cast<Float_t>(drcPos.Y()), static_cast<Float_t>(drcPos.Phi()),
56  dist, static_cast<Float_t>(drcHit->GetThetaC()), 0., static_cast<Float_t>(vertex.DeltaPhi(drcPos)), drcGLength,
57  static_cast<Float_t>(pidCand->GetFitStatus())
58  };
59  // Float_t ntuple[] = {vertex.X(), vertex.Y(), vertex_z, vertex.Phi(),
60  // helix->GetMomentum().Mag(), helix->GetQ(), helix->GetMomentum().Theta(), helix->GetZ(),
61  // drcPos.X(), drcPos.Y(), drcPos.Phi(),
62  // dist, drcHit->GetThetaC(), 0., vertex.DeltaPhi(drcPos), drcGLength,
63  // pidCand->GetFitStatus()
64  // };
65  drcCorr->Fill(ntuple);
66  }
67  }
68  if ((drcQuality<fCorrPar->GetDrcCut()) || (fIdeal && drcIndex!=-1))
69  {
70  pidCand->SetDrcQuality(drcQuality);
71  pidCand->SetDrcThetaC(drcThetaC);
72  pidCand->SetDrcThetaCErr(drcThetaCErr);
73  pidCand->SetDrcNumberOfPhotons(drcPhot);
74  pidCand->SetDrcIndex(drcIndex);
75  }
76  return kTRUE;
77 }
virtual Double_t GetErrThetaC()
Definition: PndDrcHit.h:43
TClonesArray * fDrcHit
PndDrcBarPoint TCA.
FairGeanePro * fGeanePropagator
Refitter for MDT tracks.
TClonesArray * fDrcPoint
PndMdtTrk TCA.
virtual Int_t GetRefIndex()
Definition: PndDrcHit.h:44
virtual Double_t GetThetaC()
Definition: PndDrcHit.h:42
Bool_t PndPidCorrelator::GetDskInfo ( FairTrackParH *  helix,
PndPidCandidate pid 
)
protected

Definition at line 6 of file PndPidDskInfo.cxx.

References Bool_t, ClassImp(), dskCorr, fDebugMode, fDskParticle, fGeanePro, fGeanePropagator, fIdeal, fPidHyp, PndPidCandidate::GetCharge(), PndPidCandidate::GetFitStatus(), PndPidCandidate::GetMcIndex(), PndDskParticle::GetThetaC(), PndPidCandidate::SetDiscIndex(), PndPidCandidate::SetDiscNumberOfPhotons(), PndPidCandidate::SetDiscQuality(), PndPidCandidate::SetDiscThetaC(), and x_p.

Referenced by ConstructChargedCandidate().

6  {
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 }
TClonesArray * fDskParticle
PndDrcHit TCA.
Double_t x_p
FairGeanePro * fGeanePropagator
Refitter for MDT tracks.
Double_t GetThetaC() const
Bool_t PndPidCorrelator::GetEmcInfo ( FairTrackParH *  helix,
PndPidCandidate pid 
)
protected

Definition at line 6 of file PndPidEmcInfo.cxx.

References Bool_t, ClassImp(), Double_t, PndEmcClusterEnergySums::E1(), PndEmcClusterEnergySums::E25(), PndEmcClusterEnergySums::E9(), emcCorr, PndEmcAbsClusterCalibrator::Energy(), PndEmcCluster::energy(), fClusterList, fClusterQ, fCorrPar, fDebugMode, fEmcCalibrator, fEmcCluster, fEmcDigi, fGeanePro, fGeanePropagator, fIdeal, fPidHyp, PndPidCandidate::GetCharge(), PndPidCorrPar::GetEmc12Thr(), PndPidCandidate::GetMcIndex(), PndEmcCluster::GetMcList(), PndEmcCluster::GetModule(), PndEmcCluster::LatMom(), mclist, PndEmcCluster::NBumps(), PndEmcCluster::NumberOfDigis(), PndPidCandidate::SetEmcCalEnergy(), PndPidCandidate::SetEmcClusterE1(), PndPidCandidate::SetEmcClusterE25(), PndPidCandidate::SetEmcClusterE9(), PndPidCandidate::SetEmcClusterLat(), PndPidCandidate::SetEmcClusterZ20(), PndPidCandidate::SetEmcClusterZ53(), PndPidCandidate::SetEmcIndex(), PndPidCandidate::SetEmcModule(), PndPidCandidate::SetEmcNumberOfBumps(), PndPidCandidate::SetEmcNumberOfCrystals(), PndPidCandidate::SetEmcQuality(), PndPidCandidate::SetEmcRawEnergy(), PndPidCandidate::SetEmcTimeStamp(), PndEmcCluster::where(), PndEmcCluster::Z20(), and PndEmcCluster::Z53().

Referenced by ConstructChargedCandidate().

7  {
8  if (!helix) {
9  std::cerr
10  << "<Error> PndPidCorrelator EMCINFO: FairTrackParH NULL pointer parameter."
11  << std::endl;
12  return kFALSE;
13  }
14  if (!pidCand) {
15  std::cerr
16  << "<Error> PndPidCorrelator EMCINFO: pidCand NULL pointer parameter."
17  << std::endl;
18  return kFALSE;
19  }
20  //---
21  //Float_t trackTheta = helix->GetMomentum().Theta() * TMath::RadToDeg(); //[R.K. 01/2017] unused variable
22 
23  Int_t emcEntries = fEmcCluster->GetEntriesFast();
24  Int_t emcIndex = -1, emcModuleCorr = -1, emcNCrystals = -1, emcNBumps = -1;
25  Float_t emcEloss = 0., emcElossCorr = 0., emcGLength = -1000;
26  Float_t emcQuality = 1000000;
27  //Float_t chi2 = 0; //[R.K. 01/2017] unused variable
28  TVector3 vertex(0., 0., 0.);
29  TVector3 emcPos(0., 0., 0.); // TVector3 momentum(0., 0., 0.);
30  Double_t emcTimeStamp(-1.);
31 
32  // Cluster zenike moments
33  Double_t Z20 = 0.0, Z53 = 0.0, secLatM = 0.00, E1 = 0., E9 = 0., E25 = 0.;
34 
35  for (Int_t ee = 0; ee < emcEntries; ee++) {
36  PndEmcCluster *emcHit = (PndEmcCluster*) fEmcCluster->At(ee);
37 
38  if (fIdeal) {
39  std::vector<Int_t> mclist = emcHit->GetMcList();
40  if (mclist.size() == 0)
41  continue;
42  if (mclist[0] != pidCand->GetMcIndex())
43  continue;
44  }
45 
46  if (emcHit->energy() < fCorrPar->GetEmc12Thr())
47  continue;
48  Int_t emcModule = emcHit->GetModule();
49 
50  if (emcModule > 4)
51  continue; // skip FSC
52  if ((emcModule < 3) && (helix->GetZ() > 150.))
53  continue; // not consider tracks after emc barrel for BARREL
54  if ((emcModule == 3) && (helix->GetZ() < 165.))
55  continue; // consider tracks only from last gem plane for FWD
56  if ((emcModule == 4) && (helix->GetZ() > -30.))
57  continue; // consider tracks only ending at the back of STT for BKW
58 
59  emcTimeStamp = emcHit->GetTimeStamp(); //Do we need to correct the time stamp measured by the emc by the flight path?
60 
61  emcPos = emcHit->where();
62  if (fGeanePro) { // Overwrites vertex if Geane is used
63  fGeanePropagator->SetPoint(emcPos);
64  fGeanePropagator->PropagateToPCA(1, 1);
65  vertex.SetXYZ(-10000, -10000, -10000); // reset vertex
66  FairTrackParH *fRes = new FairTrackParH();
67  Bool_t rc = fGeanePropagator->Propagate(helix, fRes,
68  fPidHyp * pidCand->GetCharge()); // First propagation at module
69  if (!rc)
70  continue;
71 
72  emcGLength = fGeanePropagator->GetLengthAtPCA();
73  vertex.SetXYZ(fRes->GetX(), fRes->GetY(), fRes->GetZ());
74  //std::map<PndEmcTwoCoordIndex*, PndEmcXtal*> tciXtalMap=PndEmcStructure::Instance()->GetTciXtalMap();
75  //PndEmcDigi *lDigi= (PndEmcDigi*)emcHit->Maxima();
76  //PndEmcXtal* xtal = tciXtalMap[lDigi->GetTCI()];
77  //emcPos = xtal->frontCentre();
78  }
79 
80  Float_t dist = (emcPos - vertex).Mag2();
81  if (emcQuality > dist) {
82  emcIndex = ee;
83  emcQuality = dist;
84  emcEloss = emcHit->energy();
85  emcElossCorr = fEmcCalibrator->Energy(emcHit);
86  emcModuleCorr = emcModule;
87  emcNCrystals = emcHit->NumberOfDigis();
88  emcNBumps = emcHit->NBumps();
89  Z20 = emcHit->Z20(); // Z_{n = 2}^{m = 0}
90  Z53 = emcHit->Z53(); // Z_{n = 5}^{m = 3}
91  secLatM = emcHit->LatMom();
92  if (fEmcDigi) {
93  PndEmcClusterEnergySums esum(*emcHit, fEmcDigi);
94  E1 = esum.E1();
95  E9 = esum.E9();
96  E25 = esum.E25();
97  }
98  }
99 
100  if ((fClusterQ[ee] < 0) || (dist < fClusterQ[ee]))
101  // If the track-emc distance is less than the previous stored value (or still not initialized)
102  {
103  fClusterQ[ee] = dist; // update the param
104  }
105 
106  if (fDebugMode) {
107  Float_t ntuple[] = { static_cast<Float_t>(vertex.X()),
108  static_cast<Float_t>(vertex.Y()),
109  static_cast<Float_t>(vertex.Z()),
110  static_cast<Float_t>(vertex.Phi()),
111  static_cast<Float_t>(helix->GetMomentum().Mag()),
112  static_cast<Float_t>(helix->GetQ()),
113  static_cast<Float_t>(helix->GetMomentum().Theta()),
114  static_cast<Float_t>(helix->GetZ()),
115  static_cast<Float_t>(emcPos.X()),
116  static_cast<Float_t>(emcPos.Y()),
117  static_cast<Float_t>(emcPos.Z()),
118  static_cast<Float_t>(emcPos.Phi()), dist,
119  static_cast<Float_t>(vertex.DeltaPhi(emcPos)),
120  static_cast<Float_t>(emcHit->energy()), emcGLength,
121  static_cast<Float_t>(emcModule),
122  static_cast<Float_t>(emcTimeStamp)
123  };
124  // Float_t ntuple[] = {vertex.X(), vertex.Y(), vertex.Z(), vertex.Phi(),
125  // helix->GetMomentum().Mag(), helix->GetQ(), helix->GetMomentum().Theta(), helix->GetZ(),
126  // emcPos.X(), emcPos.Y(), emcPos.Z(), emcPos.Phi(),
127  // dist, vertex.DeltaPhi(emcPos), emcHit->energy(), emcGLength, emcModule};
128  emcCorr->Fill(ntuple);
129  }
130  } // End for(ee = 0;)
131 
132  if ((emcQuality < fCorrPar->GetEmc12Cut()) || (fIdeal && emcIndex != -1)) {
133  fClusterList[emcIndex] = kTRUE;
134  pidCand->SetEmcQuality(emcQuality);
135  pidCand->SetEmcRawEnergy(emcEloss);
136  pidCand->SetEmcCalEnergy(emcElossCorr);
137  pidCand->SetEmcIndex(emcIndex);
138  pidCand->SetEmcModule(emcModuleCorr);
139  pidCand->SetEmcNumberOfCrystals(emcNCrystals);
140  pidCand->SetEmcNumberOfBumps(emcNBumps);
141  pidCand->SetEmcTimeStamp(emcTimeStamp);
142  //=======
143  pidCand->SetEmcClusterZ20(Z20);
144  pidCand->SetEmcClusterZ53(Z53);
145  pidCand->SetEmcClusterLat(secLatM);
146  pidCand->SetEmcClusterE1(E1);
147  pidCand->SetEmcClusterE9(E9);
148  pidCand->SetEmcClusterE25(E25);
149  //=====
150  pidCand->AddLink(FairLink(-1, FairRootManager::Instance()->GetEntryNr(), "EmcCluster", emcIndex));
151  }
152 
153  return kTRUE;
154 }
CandList mclist
TVector3 where() const
Short_t GetModule() const
PndPidCorrPar * fCorrPar
PndRichHit TCA.
virtual Double_t Energy(PndEmcCluster *clust, Int_t pid=22)=0
map< Int_t, Bool_t > fClusterList
const std::vector< Int_t > & GetMcList() const
PndEmcAbsClusterCalibrator * fEmcCalibrator
FTS geometry parameters.
Double_t Z53() const
Definition: PndEmcCluster.h:69
Double_t Z20() const
Definition: PndEmcCluster.h:67
Double_t
Double_t LatMom() const
Definition: PndEmcCluster.h:71
a cluster (group of neighboring crystals) of hit emc crystals
Definition: PndEmcCluster.h:29
map< Int_t, Double_t > fClusterQ
TClonesArray * fEmcDigi
PndEmcBump TCA.
FairGeanePro * fGeanePropagator
Refitter for MDT tracks.
Int_t NumberOfDigis() const
Int_t NBumps() const
Float_t GetEmc12Thr()
Definition: PndPidCorrPar.h:13
virtual Double_t energy() const
TClonesArray * fEmcCluster
PndFtofPoint TCA.
Bool_t PndPidCorrelator::GetFMdtInfo ( FairTrackParP *  helix,
PndPidCandidate pid 
)
protected

Definition at line 241 of file PndPidMdtInfo.cxx.

References Bool_t, ClassImp(), fCorrErrorProp, fCorrPar, fDebugMode, fGeanePro, fIdeal, fMdtHit, fMdtPoint, fPidHyp, fVerbose, PndPidCandidate::GetCharge(), PndPidCandidate::GetMcIndex(), PndMdtHit::GetModule(), PndPidCorrPar::GetZLastPlane(), jj, mapMdtForward, mdtCorr, mdtIronThickness, mdtLayerPos, mm, PndPidCandidate::SetMuoHits(), PndPidCandidate::SetMuoIndex(), PndPidCandidate::SetMuoIron(), PndPidCandidate::SetMuoModule(), PndPidCandidate::SetMuoMomentumIn(), PndPidCandidate::SetMuoNumberOfLayers(), PndPidCandidate::SetMuoQuality(), and CAMath::Sqrt().

Referenced by ConstructChargedCandidate().

241  {
242 
243  if(!helix)
244  {
245  std::cerr << "<Error> PndPidCorrelator::GetFMdtInfo: FairTrackParH NULL pointer parameter."<<std::endl;
246  return kFALSE;
247  }
248  if(!pidCand)
249  {
250  std::cerr << "<Error> PndPidCorrelator::GetFMdtInfo: pidCand NULL pointer parameter."<<std::endl;
251  return kFALSE;
252  }
253 
254  if(helix->GetZ() < fCorrPar->GetZLastPlane())
255  {
256  if (fVerbose>0) std::cout << "-W- PndPidCorrelator::GetFMdtInfo: Skipping tracks not reaching the last FTS layer" << std::endl;
257  return kFALSE;
258  }
259 
260  if(helix->GetPz() <= 0.)
261  {
262  std::cout << "-W- PndPidCorrelator::GetFMdtInfo: Skipping tracks going backward" << std::endl;
263  return kFALSE;
264  }
265 
266  FairGeanePro *fProMdt = new FairGeanePro();
267  if (!fCorrErrorProp) fProMdt->PropagateOnlyParameters();
268 
269  PndMdtHit *mdtHit = NULL;
270 
271  Int_t mdtIndex = -1;
272  Float_t mdtGLength = -1000;
273  Float_t mdtQuality = 1000000;
274 
275  //Float_t chi2 = 0; //[R.K. 01/2017] unused variable
276  TVector3 mdtPos(0., 0., 0.);
277  TVector3 momentum(0., 0., 0.);
278  TVector3 vertex(0., 0., 0.);
279  TVector3 vertexD(0., 0., 0.);
280  Float_t prop0Z = mdtLayerPos[2][0] ;
281  Float_t prop0X = helix->GetX() + (prop0Z - helix->GetZ()) * helix->GetPx() / helix->GetPz();
282  Float_t prop0Y = helix->GetY() + (prop0Z - helix->GetZ()) * helix->GetPy() / helix->GetPz();
283 
284  vertex.SetXYZ(prop0X, prop0Y, prop0Z);
285  mdtGLength = (vertex-helix->GetPosition()).Mag();
286 
287  if (fGeanePro && !fIdeal) // Overwrites vertex if Geane is used
288  {
289  TVector3 jj(1,0,0), kk(0,1,0);
290  fProMdt->PropagateFromPlane(jj, kk);
291  fProMdt->PropagateToPlane(vertex, jj, kk);
292  //fProMdt->PropagateToVolume("MDT4s0l0b0w0",0,1);
293  FairTrackParP *fRes= new FairTrackParP();
294  Bool_t rc = fProMdt->Propagate(helix, fRes, fPidHyp*pidCand->GetCharge());
295  if (rc)
296  {
297  mdtGLength = fProMdt->GetLengthAtPCA();
298  vertex.SetXYZ(fRes->GetX(), fRes->GetY(), fRes->GetZ());
299  momentum.SetXYZ(fRes->GetPx(), fRes->GetPy(), fRes->GetPz());
300  vertexD.SetXYZ(fRes->GetDX(), fRes->GetDY(), fRes->GetDZ());
301  }
302  else
303  {
304  std::cout << "-W- PndPidCorrelator::GetFMdtInfo: Propagation failed" << std::endl;
305  }
306  }
307 
308  vector<Int_t>vecMdt0 = mapMdtForward[0]; // hit in layer0
309  TVector3 oldPos(0., 0., 0.);
310  for (size_t mm0 = 0; mm0< vecMdt0.size(); mm0++)
311  {
312  mdtHit = (PndMdtHit*)fMdtHit->At(vecMdt0[mm0]);
313  if ( fIdeal && ( ((PndMdtPoint*)fMdtPoint->At(mdtHit->GetRefIndex()))->GetTrackID() !=pidCand->GetMcIndex()) ) continue;
314  mdtHit->Position(mdtPos);
315  Float_t dist = (mdtPos-vertex).Mag2();
316 
317  if ( mdtQuality > dist)
318  {
319  mdtIndex = mm0;
320  mdtQuality = dist;
321  oldPos = mdtPos;
322  }
323 
324  if (fDebugMode)
325  {
326  Int_t mdtLayer = 0, mdtHits = 1; // dummy values to fill the ntuple
327  Float_t ntuple[] = {static_cast<Float_t>(vertex.X()), static_cast<Float_t>(vertex.Y()), static_cast<Float_t>(vertex.Z()),
328  static_cast<Float_t>(vertexD.X()), static_cast<Float_t>(vertexD.Y()), static_cast<Float_t>(vertexD.Z()),
329  static_cast<Float_t>(vertex.Phi()),
330  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()),
331  static_cast<Float_t>(mdtPos.X()), static_cast<Float_t>(mdtPos.Y()), static_cast<Float_t>(mdtPos.Z()), static_cast<Float_t>(mdtPos.Phi()), static_cast<Float_t>(momentum.Mag()),
332  dist, static_cast<Float_t>(mdtHit->GetModule()), static_cast<Float_t>(vertex.DeltaPhi(mdtPos)), mdtGLength, static_cast<Float_t>(mdtLayer), static_cast<Float_t>(mdtHits) };
333  // Float_t ntuple[] = {vertex.X(), vertex.Y(), vertex.Z(),
334  // vertexD.X(), vertexD.Y(), vertexD.Z(),
335  // vertex.Phi(),
336  // helix->GetMomentum().Mag(), helix->GetQ(), helix->GetMomentum().Theta(), helix->GetZ(),
337  // mdtPos.X(), mdtPos.Y(), mdtPos.Z(), mdtPos.Phi(), momentum.Mag(),
338  // dist, mdtHit->GetModule(), vertex.DeltaPhi(mdtPos), mdtGLength, mdtLayer, mdtHits};
339  mdtCorr->Fill(ntuple);
340  }
341  } // end of layer0 loop
342 
343  if ( (mdtQuality<fCorrPar->GetFMdtCut()) || (fIdeal && mdtIndex!=-1) )
344  {
345  pidCand->SetMuoQuality(mdtQuality);
346  pidCand->SetMuoIndex(mdtIndex);
347  pidCand->SetMuoModule(4);
348  pidCand->SetMuoMomentumIn(momentum.Mag());
349 
350  // MUON TRACKING
351  Int_t layerCount = 0, lastLayer = 0, mdtHits = 1;
352  Float_t ironDist = 0.;
353 
354  for (Int_t ll=1; ll<17; ll++)
355  {
356  vector<Int_t>vecMdt = mapMdtForward[ll]; // hit in layer ll
357  if (vecMdt.size()==0) continue;
358 
359  // extrapolation w/o genfit
360  Float_t propZ = mdtLayerPos[2][ll] ;
361  Float_t propX = helix->GetX() + (propZ - helix->GetZ()) * helix->GetPx() / helix->GetPz();
362  Float_t propY = helix->GetY() + (propZ - helix->GetZ()) * helix->GetPy() / helix->GetPz();
363  vertex.SetXYZ(propX, propY, propZ);
364 
365  Float_t corrDist = -1, corrHitDist = -1; //mdtLQuality = 1000000, //[R.K. 01/2017] unused variable
366  Int_t layerMult = 0; // mdtLIndex = -1, hitLCounts = 0, //[R.K. 01/2017] unused variable
367  TVector3 corrPos(0., 0., 0.);
368  for (size_t mm = 0; mm< vecMdt.size(); mm++)
369  {
370  mdtHit = (PndMdtHit*)fMdtHit->At(vecMdt[mm]);
371  if ( fIdeal && ( ((PndMdtPoint*)fMdtPoint->At(mdtHit->GetRefIndex()))->GetTrackID() !=pidCand->GetMcIndex()) ) continue;
372  mdtHit->Position(mdtPos);
373  Float_t dist = (mdtPos-vertex).Mag2();
374  Float_t hitDist = (mdtPos-oldPos).Mag2();
375  if ( (corrDist<0) || (dist<corrDist) )
376  {
377  //mdtLIndex = vecMdt[mm]; //[R.K.03/2017] unused variable
378  corrDist = dist;
379  corrHitDist = hitDist;
380  corrPos = mdtPos;
381  }
382  if ( (dist>0.) && (TMath::Sqrt(dist) < 20) ) layerMult++;
383  } // end of mdtHit loop per layer
384 
385  if ( (corrDist>0.) && (TMath::Sqrt(corrDist) < 20) )
386  {
387  ironDist = ironDist + mdtIronThickness[2][ll] * TMath::Sqrt(corrHitDist)/(mdtLayerPos[2][ll] - mdtLayerPos[2][lastLayer]);
388  mdtHits = mdtHits + layerMult;
389  layerCount++;
390  lastLayer = ll;
391  oldPos = corrPos; // reset position for next mdt layer
392  }
393 
394  } // end of internal layers loop
395 
396  //pidCand->SetMuoNumberOfLayers(layerCount);
397  pidCand->SetMuoNumberOfLayers(lastLayer);
398  pidCand->SetMuoIron(ironDist);
399  pidCand->SetMuoHits(mdtHits);
400  }
401 
402  return kTRUE;
403 }
int fVerbose
Definition: poormantracks.C:24
TClonesArray * fMdtHit
PndMdtPoint TCA.
static T Sqrt(const T &x)
Definition: PndCAMath.h:37
Float_t mdtLayerPos[3][20]
PndPidCorrPar * fCorrPar
PndRichHit TCA.
map< Int_t, vector< Int_t > > mapMdtForward
TClonesArray * fMdtPoint
PndEmcDigi TCA.
Float_t mdtIronThickness[3][20]
Double_t const mm
Short_t GetModule() const
Definition: PndMdtHit.h:32
Float_t GetZLastPlane()
Definition: PndPidCorrPar.h:22
Bool_t PndPidCorrelator::GetFscInfo ( FairTrackParH *  helix,
PndPidCandidate pid 
)
protected

Definition at line 22 of file PndPidFscInfo.cxx.

References Bool_t, Double_t, PndEmcClusterEnergySums::E1(), PndEmcClusterEnergySums::E25(), PndEmcClusterEnergySums::E9(), PndEmcAbsClusterCalibrator::Energy(), PndEmcCluster::energy(), fClusterList, fClusterQ, fCorrPar, fDebugMode, fEmcCalibrator, fEmcCluster, fEmcDigi, fGeanePro, fGeanePropagator, fIdeal, fPidHyp, fscCorr, fVerbose, PndPidCandidate::GetCharge(), PndPidCorrPar::GetEmc12Thr(), PndPidCandidate::GetMcIndex(), PndEmcCluster::GetMcList(), PndEmcCluster::GetModule(), PndPidCorrPar::GetZLastPlane(), PndEmcCluster::LatMom(), mclist, PndEmcCluster::NumberOfDigis(), PndPidCandidate::SetEmcCalEnergy(), PndPidCandidate::SetEmcClusterE1(), PndPidCandidate::SetEmcClusterE25(), PndPidCandidate::SetEmcClusterE9(), PndPidCandidate::SetEmcClusterLat(), PndPidCandidate::SetEmcClusterZ20(), PndPidCandidate::SetEmcClusterZ53(), PndPidCandidate::SetEmcIndex(), PndPidCandidate::SetEmcModule(), PndPidCandidate::SetEmcNumberOfCrystals(), PndPidCandidate::SetEmcQuality(), PndPidCandidate::SetEmcRawEnergy(), PndEmcCluster::where(), PndEmcCluster::Z20(), and PndEmcCluster::Z53().

Referenced by ConstructChargedCandidate().

23 {
24  if(!helix)
25  {
26  std::cerr << "<Error> PndPidCorrelator FSCINFO: FairTrackParH NULL pointer parameter."<<std::endl;
27  return kFALSE;
28  }
29  if(!pidCand)
30  {
31  std::cerr << "<Error> PndPidCorrelator FSCINFO: pidCand NULL pointer parameter."<<std::endl;
32  return kFALSE;
33  }
34  if(helix->GetZ() < fCorrPar->GetZLastPlane())
35  {
36  if (fVerbose>0) std::cout << "-W- PndPidCorrelator::GetFscInfo :: Skipping forward tracks propagation in forward direction" << std::endl;
37  return kFALSE;
38  }
39  //---
40  //Float_t trackTheta = helix->GetMomentum().Theta()*TMath::RadToDeg(); //[R.K. 01/2017] unused variable
41 
42  Int_t fscEntries = fEmcCluster->GetEntriesFast();
43  Int_t emcIndex = -1, emcModuleCorr = -1, emcNCrystals = -1;
44  Float_t emcEloss = 0., emcElossCorr = 0., emcGLength = -1000;
45  Float_t emcQuality = 1000000;
46  //Float_t chi2 = 0; //[R.K. 01/2017] unused variable
47  TVector3 vertex(0., 0., 0.); TVector3 emcPos(0., 0., 0.);// TVector3 momentum(0., 0., 0.);
48 
49  // Cluster zenike moment
50  Double_t Z20 = 0.0, Z53 = 0.0, secLatM = 0.00, E1 = 0., E9 = 0., E25 = 0.;
51 
52  for (Int_t ee = 0; ee<fscEntries; ee++)
53  {
54  PndEmcCluster *fscHit = (PndEmcCluster*)fEmcCluster->At(ee);
55  Int_t emcModule = fscHit->GetModule();
56  if (emcModule!=5) continue;
57 
58  if (fIdeal)
59  {
60  std::vector<Int_t> mclist = fscHit->GetMcList();
61  if (mclist.size()==0) continue;
62  if (mclist[0]!=pidCand->GetMcIndex()) continue;
63  }
64 
65  if (fscHit->energy() < fCorrPar->GetEmc12Thr()) continue;
66 
67  emcPos = fscHit->where();
68  if (fGeanePro)
69  { // Overwrites vertex if Geane is used
70  fGeanePropagator->SetPoint(emcPos);
71  fGeanePropagator->PropagateToPCA(1, 1);
72  vertex.SetXYZ(-10000, -10000, -10000); // reset vertex
73  FairTrackParH *fRes= new FairTrackParH();
74  Bool_t rc = fGeanePropagator->Propagate(helix, fRes, fPidHyp*pidCand->GetCharge()); // First propagation at module
75  if (!rc) continue;
76 
77  emcGLength = fGeanePropagator->GetLengthAtPCA();
78  vertex.SetXYZ(fRes->GetX(), fRes->GetY(), fRes->GetZ());
79  //std::map<PndEmcTwoCoordIndex*, PndEmcXtal*> tciXtalMap=PndEmcStructure::Instance()->GetTciXtalMap();
80  //PndEmcDigi *lDigi= (PndEmcDigi*)emcHit->Maxima();
81  //PndEmcXtal* xtal = tciXtalMap[lDigi->GetTCI()];
82  //emcPos = xtal->frontCentre();
83  }
84 
85  Float_t dist = (emcPos-vertex).Mag2();
86  if ( emcQuality > dist )
87  {
88  emcIndex = ee;
89  emcQuality = dist;
90  emcEloss = fscHit->energy();
91  emcElossCorr = fEmcCalibrator->Energy(fscHit);
92  emcModuleCorr = emcModule;
93  emcNCrystals = fscHit->NumberOfDigis();
94  Z20 = fscHit->Z20();// Z_{n = 2}^{m = 0}
95  Z53 = fscHit->Z53();// Z_{n = 5}^{m = 3}
96  secLatM = fscHit->LatMom();
97  if (fEmcDigi)
98  {
99  PndEmcClusterEnergySums esum(*fscHit, fEmcDigi);
100  E1 = esum.E1();
101  E9 = esum.E9();
102  E25 = esum.E25();
103  }
104  }
105 
106  if ((fClusterQ[ee]<0) || (dist < fClusterQ[ee]))
107  // If the track-fsc distance is less than the previous stored value (or still not initialized)
108  {
109  fClusterQ[ee] = dist; // update the param
110  }
111 
112  if (fDebugMode)
113  {
114  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()),
115  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()),
116  static_cast<Float_t>(emcPos.X()), static_cast<Float_t>(emcPos.Y()), static_cast<Float_t>(emcPos.Z()), static_cast<Float_t>(emcPos.Phi()),
117  dist, static_cast<Float_t>(vertex.DeltaPhi(emcPos)), static_cast<Float_t>(fscHit->energy()), emcGLength, static_cast<Float_t>(emcModule)};
118  // Float_t ntuple[] = {vertex.X(), vertex.Y(), vertex.Z(), vertex.Phi(),
119  // helix->GetMomentum().Mag(), helix->GetQ(), helix->GetMomentum().Theta(), helix->GetZ(),
120  // emcPos.X(), emcPos.Y(), emcPos.Z(), emcPos.Phi(),
121  // dist, vertex.DeltaPhi(emcPos), fscHit->energy(), emcGLength, emcModule};
122  fscCorr->Fill(ntuple);
123  }
124  }// End for(ee = 0;)
125 
126  if ((emcQuality < fCorrPar->GetEmc12Cut()) || (fIdeal && emcIndex!=-1))
127  {
128  fClusterList[emcIndex] = kTRUE;
129  pidCand->SetEmcQuality(emcQuality);
130  pidCand->SetEmcRawEnergy(emcEloss);
131  pidCand->SetEmcCalEnergy(emcElossCorr);
132  pidCand->SetEmcIndex(emcIndex);
133  pidCand->SetEmcModule(emcModuleCorr);
134  pidCand->SetEmcNumberOfCrystals(emcNCrystals);
135  //=======
136  pidCand->SetEmcClusterZ20(Z20);
137  pidCand->SetEmcClusterZ53(Z53);
138  pidCand->SetEmcClusterLat(secLatM);
139  pidCand->SetEmcClusterE1(E1);
140  pidCand->SetEmcClusterE9(E9);
141  pidCand->SetEmcClusterE25(E25);
142  //=====
143  }
144 
145  return kTRUE;
146 }
CandList mclist
int fVerbose
Definition: poormantracks.C:24
TVector3 where() const
Short_t GetModule() const
PndPidCorrPar * fCorrPar
PndRichHit TCA.
virtual Double_t Energy(PndEmcCluster *clust, Int_t pid=22)=0
map< Int_t, Bool_t > fClusterList
const std::vector< Int_t > & GetMcList() const
PndEmcAbsClusterCalibrator * fEmcCalibrator
FTS geometry parameters.
Double_t Z53() const
Definition: PndEmcCluster.h:69
Double_t Z20() const
Definition: PndEmcCluster.h:67
Double_t
Double_t LatMom() const
Definition: PndEmcCluster.h:71
a cluster (group of neighboring crystals) of hit emc crystals
Definition: PndEmcCluster.h:29
map< Int_t, Double_t > fClusterQ
TClonesArray * fEmcDigi
PndEmcBump TCA.
FairGeanePro * fGeanePropagator
Refitter for MDT tracks.
Int_t NumberOfDigis() const
Float_t GetEmc12Thr()
Definition: PndPidCorrPar.h:13
virtual Double_t energy() const
TClonesArray * fEmcCluster
PndFtofPoint TCA.
Float_t GetZLastPlane()
Definition: PndPidCorrPar.h:22
Bool_t PndPidCorrelator::GetFtofInfo ( FairTrackParH *  helix,
PndPidCandidate pid 
)
protected

Definition at line 17 of file PndPidFtofInfo.cxx.

References Bool_t, fCorrPar, fDebugMode, fFtofHit, fFtofPoint, fGeanePro, fGeanePropagator, fIdeal, fPidHyp, ftofCorr, fVerbose, PndPidCandidate::GetCharge(), PndPidCorrPar::GetFtofZ(), PndPidCandidate::GetMcIndex(), PndFtofHit::GetTime(), PndPidCorrPar::GetZLastPlane(), PndPidCandidate::SetTofIndex(), PndPidCandidate::SetTofM2(), PndPidCandidate::SetTofQuality(), PndPidCandidate::SetTofStopTime(), and PndPidCandidate::SetTofTrackLength().

Referenced by ConstructChargedCandidate().

18 {
19  if(!helix)
20  {
21  std::cerr << "<Error> PndPidCorrelator::GetFtofInfo: FairTrackParH NULL pointer parameter."<<std::endl;
22  return kFALSE;
23  }
24  if(!pidCand)
25  {
26  std::cerr << "<Error> PndPidCorrelator::GetFtofInfo: pidCand NULL pointer parameter."<<std::endl;
27  return kFALSE;
28  }
29 
30  if(helix->GetZ() < fCorrPar->GetZLastPlane())
31  {
32  if (fVerbose>0) std::cout << "-W- PndPidCorrelator::GetFtofInfo: Skipping tracks not reaching the last FTS layer" << std::endl;
33  return kFALSE;
34  }
35 
36  if(helix->GetPz() <= 0.)
37  {
38  std::cout << "-W- PndPidCorrelator::GetFtofInfo: Skipping tracks going backward" << std::endl;
39  return kFALSE;
40  }
41 
42  PndFtofHit *tofHit = NULL;
43  Int_t tofEntries = fFtofHit->GetEntriesFast();
44  Int_t tofIndex = -1;
45  Float_t tofTof = 0., tofLength = -1000, tofGLength = -1000, tofTrackLength = -1000;;
46  Float_t tofQuality = 1000000;
47 
48  //Float_t chi2 = 0; //[R.K. 01/2017] unused variable
49  TVector3 vertex(0., 0., -10000.);
50  TVector3 vertexrec(0., 0., -10000.);
51  TVector3 momrec(0., 0., -10000.);
52  TVector3 tofPos(0., 0., 0.);
53  TVector3 momentum(0., 0., 0.);
54 
55  if (fGeanePro) // Overwrites vertex if Geane is used
56  {
57  // calculates track length from (0,0,0) to last point
58  fGeanePropagator->SetPoint(TVector3(0,0,0));
59  fGeanePropagator->PropagateToPCA(1, -1);
60  FairTrackParH *fRes= new FairTrackParH();
61  Bool_t rc = fGeanePropagator->Propagate(helix, fRes, fPidHyp*pidCand->GetCharge());
62  if (rc)
63  {
64  tofTrackLength = fGeanePropagator->GetLengthAtPCA();
65  vertexrec.SetXYZ(fRes->GetX(), fRes->GetY(), fRes->GetZ());
66  momrec.SetXYZ(fRes->GetPx(), fRes->GetPy(), fRes->GetPz());
67  }
68  }
69 
70  for (Int_t tt = 0; tt<tofEntries; tt++)
71  {
72  tofHit = (PndFtofHit*)fFtofHit->At(tt);
73  if ( fIdeal && ( ((PndFtofPoint*)fFtofPoint->At(tofHit->GetRefIndex()))->GetTrackID() !=pidCand->GetMcIndex()) ) continue;
74  tofHit->Position(tofPos);
75 
76  Float_t propX = helix->GetX() + (fCorrPar->GetFtofZ() - helix->GetZ()) * helix->GetPx() / helix->GetPz();
77  Float_t propY = helix->GetY() + (fCorrPar->GetFtofZ() - helix->GetZ()) * helix->GetPy() / helix->GetPz();
78  Float_t propZ = fCorrPar->GetFtofZ();
79  vertex.SetXYZ(propX, propY, propZ);
80  tofGLength = (vertex-helix->GetPosition()).Mag();
81 
82  if (fGeanePro) // Overwrites vertex if Geane is used
83  {
84  fGeanePropagator->SetPoint(tofPos);
85  fGeanePropagator->PropagateToPCA(1, 1);
86  FairTrackParH *fRes= new FairTrackParH();
87  Bool_t rc = fGeanePropagator->Propagate(helix, fRes, fPidHyp*pidCand->GetCharge());
88  if (!rc) continue;
89  tofGLength = fGeanePropagator->GetLengthAtPCA();
90  vertex.SetXYZ(fRes->GetX(), fRes->GetY(), fRes->GetZ());
91  }
92 
93  Float_t dist = (tofPos-vertex).Mag2();
94 
95  if ( tofQuality > dist)
96  {
97  tofIndex = tt;
98  tofQuality = dist;
99  tofTof = tofHit->GetTime();
100  tofLength = tofTrackLength+tofGLength;
101  }
102 
103  if (fDebugMode)
104  {
105  Float_t ntuple[] = {static_cast<Float_t>(vertex.X()), static_cast<Float_t>(vertex.Y()), static_cast<Float_t>(vertex.Z()),
106  static_cast<Float_t>(vertexrec.X()), static_cast<Float_t>(vertexrec.Y()), static_cast<Float_t>(vertexrec.Z()),
107  static_cast<Float_t>(momrec.X()), static_cast<Float_t>(momrec.Y()), static_cast<Float_t>(momrec.Z()),
108  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()),
109  static_cast<Float_t>(tofPos.X()), static_cast<Float_t>(tofPos.Y()), static_cast<Float_t>(tofPos.Z()),
110  dist, tofLength, tofGLength, tofTrackLength};
111  // Float_t ntuple[] = {vertex.X(), vertex.Y(), vertex.Z(),
112  // vertexrec.X(), vertexrec.Y(), vertexrec.Z(),
113  // momrec.X(), momrec.Y(), momrec.Z(),
114  // helix->GetMomentum().Mag(), helix->GetQ(), helix->GetMomentum().Theta(), helix->GetZ(),
115  // tofPos.X(), tofPos.Y(), tofPos.Z(),
116  // dist, tofLength, tofGLength,tofTrackLength};
117  ftofCorr->Fill(ntuple);
118  }
119  }
120 
121  if ( (tofQuality<fCorrPar->GetFTofCut()) || (fIdeal && tofIndex!=-1) )
122  {
123  pidCand->SetTofQuality(tofQuality);
124  pidCand->SetTofStopTime(tofTof);
125  pidCand->SetTofTrackLength(tofLength);
126  pidCand->SetTofIndex(tofIndex);
127  if (tofLength>0.)
128  {
129  // mass^2 = p^2 * ( 1/beta^2 - 1 )
130  Float_t mass2 = helix->GetMomentum().Mag()*helix->GetMomentum().Mag()*(30.*30.*tofTof*tofTof/tofLength/tofLength-1.);
131  pidCand->SetTofM2(mass2);
132  }
133  }
134 
135  return kTRUE;
136 }
Double_t GetTime()
Definition: PndFtofHit.h:60
int fVerbose
Definition: poormantracks.C:24
PndPidCorrPar * fCorrPar
PndRichHit TCA.
Float_t GetFtofZ()
Definition: PndPidCorrPar.h:23
FairGeanePro * fGeanePropagator
Refitter for MDT tracks.
TClonesArray * fFtofPoint
PndFtofHit TCA.
TClonesArray * fFtofHit
PndTofPoint TCA.
Float_t GetZLastPlane()
Definition: PndPidCorrPar.h:22
Bool_t PndPidCorrelator::GetFtsInfo ( PndTrack track,
PndPidCandidate pid 
)
protected

Definition at line 7 of file PndPidFtsInfo.cxx.

References Double_t, fFtsHit, fMixMode, PndTrackCandHit::GetDetId(), PndTrackCandHit::GetHitId(), PndTrackCand::GetNHits(), PndTrackCand::GetSortedHit(), PndTrack::GetTrackCand(), m, PndPidCandidate::SetSttHits(), and PndPidCandidate::SetSttMeanDEDX().

Referenced by ConstructChargedCandidate().

7  {
8 
9  std::vector<Double_t> dedxvec;
10  dedxvec.clear();
11 
12  //Double_t tuberadius = fFtsParameters->GetTubeInRad(); //[R.K. 01/2017] unused variable
13 
14  Int_t ftsCounts = 0, ftsRawCounts = 0;
15  PndTrackCand trackCand = track->GetTrackCand();
16  for (size_t ii=0; ii<trackCand.GetNHits(); ii++)
17  {
18  PndTrackCandHit candHit = trackCand.GetSortedHit(ii);
19  Double_t dedx = 0.;
20 
21  if ( ( candHit.GetDetId()!=FairRootManager::Instance()->GetBranchId("FTSHit") && fMixMode==kFALSE) ||
22  ( candHit.GetDetId()!=FairRootManager::Instance()->GetBranchId("FTSHitMix") && fMixMode==kTRUE) ) continue;
23  PndFtsHit *ftsHit = (PndFtsHit*) fFtsHit->At(candHit.GetHitId());
24  if(!ftsHit) continue;
25  ftsRawCounts++;
26 
27  // compute dE/dx
28  //dedx = ftsHit->ComputedEdx(track, tuberadius);
29 
30  if(dedx != 0)
31  {
32  dedxvec.push_back(dedx);
33  ftsCounts++;
34  }
35  }
36 
37  if( ftsCounts > 0) {
38  // truncated mean
39  Double_t perc = 0.70;
40  // sort
41  std::sort(dedxvec.begin(), dedxvec.end());
42 
43  //truncated mean
44  Double_t sum = 0;
45  Int_t endnum = int(floor(ftsCounts * perc));
46 
47  // ****************************************
48  // CUT on n of hits: to have a meaningful
49  // truncated mean we require not to have less
50  // than 5 hits (in the already truncated list)
51  // ****************************************
52  if(endnum > 5) {
53  for(Int_t m = 0; m < endnum; m++) sum += dedxvec[m];
54  pidCand->SetSttMeanDEDX(sum/(Double_t) endnum); // else default in pidCand is SttDEDXMean = 0
55  }
56  }
57 
58  pidCand->SetSttHits(ftsRawCounts);
59  return kTRUE;
60 }
__m128 m
Definition: P4_F32vec4.h:28
PndTrackCandHit GetSortedHit(UInt_t i)
Definition: PndTrackCand.h:54
TClonesArray * fFtsHit
PndSttHit TCA.
PndTrackCand GetTrackCand()
Definition: PndTrack.h:47
Double_t
UInt_t GetNHits() const
Definition: PndTrackCand.h:59
Int_t GetHitId() const
Int_t GetDetId() const
Bool_t PndPidCorrelator::GetGemInfo ( PndTrack track,
PndPidCandidate pid 
)
protected

Definition at line 4 of file PndPidGemInfo.cxx.

References fMixMode, PndTrackCandHit::GetDetId(), PndTrackCand::GetNHits(), PndTrackCand::GetSortedHit(), PndTrack::GetTrackCand(), and PndPidCandidate::SetGemHits().

Referenced by ConstructChargedCandidate().

4  {
5 
6  Int_t gemCounts = 0;
7  PndTrackCand trackCand = track->GetTrackCand();
8  for (size_t ii=0; ii<trackCand.GetNHits(); ii++)
9  {
10  PndTrackCandHit candHit = trackCand.GetSortedHit(ii);
11 
12  if ( ( candHit.GetDetId()!=FairRootManager::Instance()->GetBranchId("GEMHit") && fMixMode==kFALSE) ||
13  ( candHit.GetDetId()!=FairRootManager::Instance()->GetBranchId("GEMHitMix") && fMixMode==kTRUE) ) continue;
14 
15  gemCounts++;
16 
17  }
18 
19  pidCand->SetGemHits(gemCounts);
20  return kTRUE;
21 }
PndTrackCandHit GetSortedHit(UInt_t i)
Definition: PndTrackCand.h:54
PndTrackCand GetTrackCand()
Definition: PndTrack.h:47
UInt_t GetNHits() const
Definition: PndTrackCand.h:59
Int_t GetDetId() const
Bool_t PndPidCorrelator::GetMdt2Info ( FairTrackParH *  helix,
PndPidCandidate pid 
)
protected

Definition at line 235 of file PndPidMdtInfo.cxx.

235  { // helix pidCand //[R.K.03/2017] unused variable(s)
236 
237  return kTRUE;
238 }
Bool_t PndPidCorrelator::GetMdtInfo ( PndTrack track,
PndPidCandidate pid 
)
protected

Definition at line 10 of file PndPidMdtInfo.cxx.

References Bool_t, fDebugMode, fGeanePro, fGeanePropagator, fIdeal, fMdtHit, fMdtMode, fMdtPoint, fMdtTrk, fPidHyp, PndPidCandidate::GetCharge(), PndMdtTrk::GetHitIndex(), PndMdtTrk::GetHitMult(), PndMdtTrk::GetIronDist(), PndMdtTrk::GetLayerCount(), PndMdtHit::GetLayerID(), PndPidCandidate::GetMcIndex(), PndMdtHit::GetModule(), PndMdtTrk::GetModule(), PndTrack::GetParamLast(), mdtCorr, mm, par, PndPidCandidate::SetMuoHits(), PndPidCandidate::SetMuoIndex(), PndPidCandidate::SetMuoIron(), PndPidCandidate::SetMuoModule(), PndPidCandidate::SetMuoMomentumIn(), PndPidCandidate::SetMuoNumberOfLayers(), and PndPidCandidate::SetMuoQuality().

Referenced by ConstructChargedCandidate().

10  {
11  //---
12  FairTrackParP par = track->GetParamLast();
13  Int_t ierr = 0;
14  FairTrackParH *helix = new FairTrackParH(&par, ierr);
15 
16  map<Int_t, Int_t>mapMdtTrk;
17 
18  if (fMdtMode == 3)
19  {
20  for (Int_t tt = 0; tt<fMdtTrk->GetEntriesFast(); tt++)
21  {
22  PndMdtTrk *mdtTrk = (PndMdtTrk*)fMdtTrk->At(tt);
23  mapMdtTrk[mdtTrk->GetHitIndex(0)] = tt;
24  }
25  }
26  PndMdtHit *mdtHit = NULL;
27  Int_t mdtEntries = fMdtHit->GetEntriesFast();
28  Int_t mdtIndex = -1, mdtMod = 0, mdtLayer = 0, mdtHits = 0;
29  Float_t mdtGLength = -1000;
30  Float_t mdtQuality = 1000000;
31  Float_t mdtIron = 0., mdtMom = 0, mdtTempMom = 0;
32 
33  //Float_t chi2 = 0; //[R.K. 01/2017] unused variable
34  TVector3 vertex(0., 0., 0.);
35  TVector3 vertexD(0., 0., 0.);
36  TVector3 mdtPos(0., 0., 0.);
37  TVector3 momentum(0., 0., 0.);
38  for (Int_t mm = 0; mm<mdtEntries; mm++)
39  {
40  mdtHit = (PndMdtHit*)fMdtHit->At(mm);
41  if ( fIdeal && ( ((PndMdtPoint*)fMdtPoint->At(mdtHit->GetRefIndex()))->GetTrackID() !=pidCand->GetMcIndex()) ) continue;
42  if (mdtHit->GetLayerID()!=0) continue;
43  if (mdtHit->GetModule()>2) continue;
44  mdtHit->Position(mdtPos);
45  if (fGeanePro) // Overwrites vertex if Geane is used
46  {
47  fGeanePropagator->SetPoint(mdtPos);
48  fGeanePropagator->PropagateToPCA(1, 1);
49  vertex.SetXYZ(-10000, -10000, -10000); // reset vertex
50  vertexD.SetXYZ(-10000, -10000, -10000); // reset vertex
51  FairTrackParH *fRes= new FairTrackParH();
52  Bool_t rc = fGeanePropagator->Propagate(helix, fRes, fPidHyp*pidCand->GetCharge());
53  if (!rc) continue;
54  mdtTempMom = fRes->GetMomentum().Mag();
55  vertex.SetXYZ(fRes->GetX(), fRes->GetY(), fRes->GetZ());
56  vertexD.SetXYZ(fRes->GetDX(), fRes->GetDY(), fRes->GetDZ());
57  mdtGLength = fGeanePropagator->GetLengthAtPCA();
58  }
59 
60  Float_t dist;
61  if (mdtHit->GetModule()==1)
62  {
63  dist = (mdtPos-vertex).Mag2();
64  }
65  else
66  {
67  dist = (vertex.X()-mdtPos.X())*(vertex.X()-mdtPos.X())+(vertex.Y()-mdtPos.Y())*(vertex.Y()-mdtPos.Y());
68  }
69 
70  if ( mdtQuality > dist)
71  {
72  mdtIndex = mm;
73  mdtQuality = dist;
74  mdtMod = mdtHit->GetModule();
75  mdtMom = mdtTempMom;
76  mdtLayer = 1;
77  if (fMdtMode==3)
78  {
79  PndMdtTrk *mdtTrk = (PndMdtTrk*)fMdtTrk->At(mapMdtTrk[mdtIndex]);
80  mdtIndex = mapMdtTrk[mm];
81  mdtLayer = mdtTrk->GetLayerCount();
82  mdtIron = mdtTrk->GetIronDist();
83  mdtMod = mdtTrk->GetModule();
84  mdtHits = 0;
85  for (Int_t iLayer=0; iLayer<mdtLayer; iLayer++)
86  {
87  mdtHits = mdtHits + mdtTrk->GetHitMult(iLayer);
88  //std::cout << iLayer << "\t" << mdtTrk->GetHitMult(iLayer) << "\t" << mdtHits << std::endl;
89  }
90  }
91  }
92  if (fDebugMode)
93  {
94  Float_t ntuple[] = {static_cast<Float_t>(vertex.X()), static_cast<Float_t>(vertex.Y()), static_cast<Float_t>(vertex.Z()),
95  static_cast<Float_t>(vertexD.X()), static_cast<Float_t>(vertexD.Y()), static_cast<Float_t>(vertexD.Z()), static_cast<Float_t>(vertex.Phi()),
96  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()),
97  static_cast<Float_t>(mdtPos.X()), static_cast<Float_t>(mdtPos.Y()), static_cast<Float_t>(mdtPos.Z()), static_cast<Float_t>(mdtPos.Phi()),mdtTempMom,
98  dist, static_cast<Float_t>(mdtHit->GetModule()), static_cast<Float_t>(vertex.DeltaPhi(mdtPos)), mdtGLength, static_cast<Float_t>(mdtLayer), static_cast<Float_t>(mdtHits) };
99  // Float_t ntuple[] = {vertex.X(), vertex.Y(), vertex.Z(),
100  // vertexD.X(), vertexD.Y(), vertexD.Z(), vertex.Phi(),
101  // helix->GetMomentum().Mag(), helix->GetQ(), helix->GetMomentum().Theta(), helix->GetZ(),
102  // mdtPos.X(), mdtPos.Y(), mdtPos.Z(), mdtPos.Phi(), mdtTempMom,
103  // dist, mdtHit->GetModule(), vertex.DeltaPhi(mdtPos), mdtGLength, mdtLayer, mdtHits};
104  mdtCorr->Fill(ntuple);
105  }
106  }
107 
108  if ((mdtQuality<fCorrPar->GetMdtCut()) || ( fIdeal && mdtIndex!=-1))
109  {
110  pidCand->SetMuoIndex(mdtIndex);
111  pidCand->SetMuoQuality(mdtQuality);
112  pidCand->SetMuoIron(mdtIron);
113  pidCand->SetMuoMomentumIn(mdtMom);
114  pidCand->SetMuoModule(mdtMod);
115  pidCand->SetMuoNumberOfLayers(mdtLayer);
116  pidCand->SetMuoHits(mdtHits);
117  }
118 
119  // if (fMdtRefit && (mdtIndex!=-1) && (mdtMom>0.) )
120  // {
121  // PndMdtTrk *mdtTrk = (PndMdtTrk*)fMdtTrk->At(mdtIndex);
122  // PndTrack *mdtTrack = new PndTrack(*track);
123  // PndTrackCand *oldCand = track->GetTrackCandPtr();
124  // PndTrackCand *newCand = mdtTrk->AddTrackCand(oldCand);
125  // mdtTrack->SetTrackCand(*newCand);
126  // Int_t fCharge= mdtTrack->GetParamFirst().GetQ();
127  // Int_t PDGCode = fPidHyp*fCharge;
128 
129  // PndTrack *fitTrack = new PndTrack();
130  // fitTrack = fFitter->Fit(mdtTrack, PDGCode);
131  // PndTrack* pndTrack = new PndTrack(fitTrack->GetParamFirst(), fitTrack->GetParamLast(), fitTrack->GetTrackCand(),
132  // fitTrack->GetFlag(), fitTrack->GetChi2(), fitTrack->GetNDF(), fitTrack->GetPidHypo(), fitTrack->GetRefIndex(), kLheTrack);
133  // AddMdtTrack(pndTrack);
134  // }
135  return kTRUE;
136 }
Float_t GetIronDist() const
Definition: PndMdtTrk.h:42
Short_t GetLayerID() const
Definition: PndMdtHit.h:34
void GetHitMult(Int_t *hit)
Definition: PndMdtTrk.h:34
TClonesArray * fMdtHit
PndMdtPoint TCA.
Double_t par[3]
TClonesArray * fMdtTrk
PndMdtHit TCA.
Int_t GetModule() const
Definition: PndMdtTrk.h:48
FairTrackParP GetParamLast()
Definition: PndTrack.h:50
Int_t GetLayerCount() const
Definition: PndMdtTrk.h:44
FairGeanePro * fGeanePropagator
Refitter for MDT tracks.
TClonesArray * fMdtPoint
PndEmcDigi TCA.
Int_t GetHitIndex(Int_t lay) const
Definition: PndMdtTrk.h:37
Double_t const mm
Short_t GetModule() const
Definition: PndMdtHit.h:32
Bool_t PndPidCorrelator::GetMvdInfo ( PndTrack track,
PndPidCandidate pid 
)
protected

Definition at line 24 of file PndPidMvdInfo.cxx.

References Bool_t, CAMath::Cos(), cos(), Double_t, fabs(), fFast, fGeanePro, fGeanePropagator, fGeoH, fMixMode, fMvdHitCount, fMvdHitsPixel, fMvdHitsStrip, fPidHyp, fVerbose, PndPidCandidate::GetCharge(), PndTrackCandHit::GetDetId(), PndSdsHit::GetEloss(), PndTrackCandHit::GetHitId(), PndGeoHandling::GetMatrixPath(), PndTrackCand::GetNHits(), PndTrack::GetParamFirst(), PndGeoHandling::GetPath(), PndGeoHandling::GetSensorDimensionsShortId(), PndSdsHit::GetSensorID(), PndTrackCand::GetSortedHit(), PndTrack::GetTrackCand(), par, PndPidCandidate::SetMvdDEDX(), PndPidCandidate::SetMvdHits(), and thickness.

Referenced by ConstructChargedCandidate().

25 {
26  Float_t mvdELoss = 0.; // total energy lost in MVD;
27  Float_t mvdPath = 0.; // total thickness crossed in MVD
28  Int_t mvdCounts = 0;
29  Float_t SensorThickness=0;
30  PndTrackCand trackCand = track->GetTrackCand();
31  FairTrackParP par = track->GetParamFirst();
32  Int_t ierr = 0;
33  FairTrackParH *helix = new FairTrackParH(&par, ierr); // This will be used for propagation
34 
35  for (size_t ii=0; ii<trackCand.GetNHits(); ii++)
36  {
37  PndSdsHit *mvdHit = NULL;
38  PndTrackCandHit candHit = trackCand.GetSortedHit(ii);
39  if (fMixMode==kFALSE)
40  if ( (candHit.GetDetId()!=FairRootManager::Instance()->GetBranchId("MVDHitsPixel")) && (candHit.GetDetId()!=FairRootManager::Instance()->GetBranchId("MVDHitsStrip")) ) continue;
41  if (fMixMode==kTRUE)
42  if ( (candHit.GetDetId()!=FairRootManager::Instance()->GetBranchId("MVDHitsPixelMix")) && (candHit.GetDetId()!=FairRootManager::Instance()->GetBranchId("MVDHitsStripMix")) ) continue;
43 
44  if ( (candHit.GetDetId()==FairRootManager::Instance()->GetBranchId("MVDHitsPixel") && !fMixMode) ||
45  (candHit.GetDetId()==FairRootManager::Instance()->GetBranchId("MVDHitsPixelMix") && fMixMode) )
46  mvdHit = (PndSdsHit*)fMvdHitsPixel->At(candHit.GetHitId());
47  if ( (candHit.GetDetId()==FairRootManager::Instance()->GetBranchId("MVDHitsStrip") && !fMixMode) ||
48  (candHit.GetDetId()==FairRootManager::Instance()->GetBranchId("MVDHitsStripMix") && fMixMode))
49  mvdHit = (PndSdsHit*)fMvdHitsStrip->At(candHit.GetHitId());
50  if (mvdHit==0) continue;
51  TVector3 mvdPos;
52  mvdHit->Position(mvdPos);
53  mvdCounts++;
54  if (fFast) continue;
55  TVector3 SensorDim=fGeoH->GetSensorDimensionsShortId(mvdHit->GetSensorID());//sensor dimension
56  SensorThickness = SensorDim.Z();
57 
58  TGeoHMatrix *matrix = fGeoH->GetMatrixPath(fGeoH->GetPath(mvdHit->GetSensorID()));
59  const Double_t *rotM = matrix->GetRotationMatrix();
60  TVector3 zaxis(rotM[2], rotM[5], rotM[8]); // Z axis in the detector frame
61  TVector3 momentum(0., 0., 0.);
62 
63  Double_t cos = 0.;
64  if (ii==0) // If the MVD hit is the first, no need of propagation
65  {
66  cos = TMath::Cos(helix->GetMomentum().Angle(zaxis));
67  }
68  else
69  {
70  if (fGeanePro)
71  {
72  fGeanePropagator->SetPoint(mvdPos);
73  fGeanePropagator->PropagateToPCA(1, 1);
74  FairTrackParH *fRes= new FairTrackParH();
75  Bool_t rc = fGeanePropagator->Propagate(helix, fRes, fPidHyp*pidCand->GetCharge()); // First propagation at module
76  if (rc)
77  {
78  cos = TMath::Cos(fRes->GetMomentum().Angle(zaxis));
79  helix = fRes; //updates of helix params to propagate from the pervious hit to the next one
80  }
81  else
82  {
83  cos = 0.;
84  }
85  }
86  } // end of "if (ii==0) else"
87 
88  Float_t thickness = 0.; //projection of the momentum on the zaxis of the detector frame
89 
90  if (fabs(cos)<0.000001)
91  {
92  std::cout << "-W- PndPidCorrelator::GetMvdInfo: Track perpendicular to MVD strip/pixel! Not added to MVD eloss" << std::endl;
93  }
94  else
95  {
96  thickness = SensorThickness*2./fabs(cos);
97  mvdELoss += mvdHit->GetEloss();
98  mvdPath += thickness;
99  fMvdHitCount++;
100  }
101  if (fVerbose>1) std::cout << mvdHit->GetSensorID() << "\t" << mvdHit->GetEloss() << "\t" << thickness << std::endl;
102  }
103 
104  if (mvdPath>0.) pidCand->SetMvdDEDX(mvdELoss/mvdPath);
105  pidCand->SetMvdHits(mvdCounts);
106 
107  return kTRUE;
108 }
int fVerbose
Definition: poormantracks.C:24
friend F32vec4 cos(const F32vec4 &a)
Definition: P4_F32vec4.h:112
TGeoHMatrix * GetMatrixPath(TString path)
PndTrackCandHit GetSortedHit(UInt_t i)
Definition: PndTrackCand.h:54
Double_t par[3]
Double_t GetEloss() const
Definition: PndSdsHit.h:97
Double_t thickness
static T Cos(const T &x)
Definition: PndCAMath.h:43
TString GetPath(Int_t shortID)
for a given shortID the path is returned
TVector3 GetSensorDimensionsShortId(Int_t shortId)
PndTrackCand GetTrackCand()
Definition: PndTrack.h:47
Double_t
TClonesArray * fMvdHitsPixel
PndSdsHit TCA for strip.
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
FairGeanePro * fGeanePropagator
Refitter for MDT tracks.
TClonesArray * fMvdHitsStrip
PndTrack TCA for MDT refit.
UInt_t GetNHits() const
Definition: PndTrackCand.h:59
Int_t GetSensorID() const
Definition: PndSdsHit.h:90
Int_t GetHitId() const
PndGeoHandling * fGeoH
Int_t GetDetId() const
FairTrackParP GetParamFirst()
Definition: PndTrack.h:49
Bool_t PndPidCorrelator::GetRichInfo ( FairTrackParH *  helix,
PndPidCandidate pid 
)
protected

Definition at line 21 of file PndPidRichInfo.cxx.

References Bool_t, fCorrPar, fDebugMode, fGeanePro, fGeanePropagator, fIdeal, fPidHyp, fRichHit, fRichPoint, fVerbose, PndPidCandidate::GetCharge(), PndRichHit::GetErrThetaC(), PndPidCandidate::GetFitStatus(), PndPidCandidate::GetMcIndex(), PndRichHit::GetRefIndex(), PndRichHit::GetThetaC(), PndPidCorrPar::GetZLastPlane(), richCorr, PndPidCandidate::SetRichIndex(), PndPidCandidate::SetRichNumberOfPhotons(), PndPidCandidate::SetRichQuality(), PndPidCandidate::SetRichThetaC(), PndPidCandidate::SetRichThetaCErr(), and sqrt().

Referenced by ConstructChargedCandidate().

22 {
23  if(!helix)
24  {
25  std::cerr << "<Error> PndPidCorrelator::GetRichInfo: FairTrackParH NULL pointer parameter."<<std::endl;
26  return kFALSE;
27  }
28  if(!pidCand)
29  {
30  std::cerr << "<Error> PndPidCorrelator::GetRichInfo: pidCand NULL pointer parameter."<<std::endl;
31  return kFALSE;
32  }
33 
34  if(helix->GetZ() < fCorrPar->GetZLastPlane())
35  {
36  if (fVerbose>0) std::cout << "-W- PndPidCorrelator::GetRichInfo: Skipping tracks not reaching the last FTS layer" << std::endl;
37  return kFALSE;
38  }
39 
40  if(helix->GetPz() <= 0.)
41  {
42  std::cout << "-W- PndPidCorrelator::GetRichInfo: Skipping tracks going backward" << std::endl;
43  return kFALSE;
44  }
45 
46  Int_t richIndex = -1, richPhot = 0;
47  Float_t richThetaC = -1000, richThetaCErr = 0, richGLength = -1000;
48  Float_t richQuality = 1000000;
49 
50  TVector3 vertex(0., 0., -10000.);
51  TVector3 momentum(0., 0., 0.);
52 
53  if (fGeanePro) // Overwrites vertex if Geane is used
54  {
55  // calculates track length from (0,0,0) to last point
56  fGeanePropagator->PropagateToVolume("RichAerogelSensor",0,1);
57  fGeanePropagator->SetPoint(TVector3(0,0,0));
58  FairTrackParH *fRes= new FairTrackParH();
59  Bool_t rc = fGeanePropagator->Propagate(helix, fRes, fPidHyp*pidCand->GetCharge());
60  if (!rc) return kFALSE;
61  //richGLength = fGeanePropagator->GetLengthAtPCA();
62  vertex.SetXYZ(fRes->GetX(), fRes->GetY(), fRes->GetZ());
63  momentum.SetXYZ(fRes->GetPx(), fRes->GetPy(), fRes->GetPz());
64  }
65 
66  PndRichHit *richHit = NULL;
67  Int_t richEntries = fRichHit->GetEntriesFast();
68  TVector3 richPos(0., 0., 0.);
69 
70  for (Int_t dd = 0; dd<richEntries; dd++)
71  {
72  richHit = (PndRichHit*)fRichHit->At(dd);
73  if ( fIdeal && ( ((PndRichBarPoint*)fRichPoint->At(richHit->GetRefIndex()))->GetTrackID() != pidCand->GetMcIndex()) ) continue;
74 
75  richHit->Position(richPos);
76 
77  Float_t dX = vertex.X()-richPos.X();
78  Float_t dY = vertex.Y()-richPos.Y();
79  Float_t dist = dX*dX + dY*dY;
80  if (richQuality > dist)
81  {
82  richIndex = dd;
83  richQuality = dist;
84  // inside richThetaC is value of beta
85  richThetaC = richHit->GetThetaC();
86  richThetaCErr = richHit->GetErrThetaC();
87  richPhot = 0;
88  }
89  if (fDebugMode)
90  {
91  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()),
92  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()),
93  static_cast<Float_t>(richPos.X()), static_cast<Float_t>(richPos.Y()), static_cast<Float_t>(richPos.Phi()),
94  dist, static_cast<Float_t>(richHit->GetThetaC()), 0., static_cast<Float_t>(vertex.DeltaPhi(richPos)), richGLength,
95  static_cast<Float_t>(pidCand->GetFitStatus())
96  };
97  richCorr->Fill(ntuple);
98  }
99  }
100  richQuality = std::sqrt(richQuality);
101 
102  if (richIndex!=-1)
103  {
104  pidCand->SetRichQuality(richQuality);
105  pidCand->SetRichThetaC(richThetaC);
106  pidCand->SetRichThetaCErr(richThetaCErr);
107  pidCand->SetRichNumberOfPhotons(richPhot);
108  pidCand->SetRichIndex(richIndex);
109  }
110 
111  return kTRUE;
112 }
virtual Int_t GetRefIndex()
Definition: PndRichHit.h:44
int fVerbose
Definition: poormantracks.C:24
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
PndPidCorrPar * fCorrPar
PndRichHit TCA.
virtual Double_t GetErrThetaC()
Definition: PndRichHit.h:43
virtual Double_t GetThetaC()
Definition: PndRichHit.h:42
TClonesArray * fRichHit
PndRichBarPoint TCA.
FairGeanePro * fGeanePropagator
Refitter for MDT tracks.
TClonesArray * fRichPoint
PndFtsHit TCA.
Float_t GetZLastPlane()
Definition: PndPidCorrPar.h:22
Bool_t PndPidCorrelator::GetSttInfo ( PndTrack track,
PndPidCandidate pid 
)
protected

Definition at line 7 of file PndPidSttInfo.cxx.

References PndSttHit::ComputedEdx(), Double_t, fMixMode, fSttHit, fSttParameters, PndTrackCandHit::GetDetId(), PndTrackCandHit::GetHitId(), PndTrackCand::GetNHits(), PndTrackCand::GetSortedHit(), PndTrack::GetTrackCand(), PndGeoSttPar::GetTubeInRad(), m, PndPidCandidate::SetSttHits(), and PndPidCandidate::SetSttMeanDEDX().

Referenced by ConstructChargedCandidate().

7  {
8 
9  std::vector<Double_t> dedxvec;
10  dedxvec.clear();
11 
12  Double_t tuberadius = fSttParameters->GetTubeInRad();
13  Int_t sttCounts = 0, sttRawCounts = 0;
14  PndTrackCand trackCand = track->GetTrackCand();
15  for (size_t ii=0; ii<trackCand.GetNHits(); ii++)
16  {
17  PndTrackCandHit candHit = trackCand.GetSortedHit(ii);
18  Double_t dedx = 0.;
19 
20  if ( ( candHit.GetDetId()!=FairRootManager::Instance()->GetBranchId("STTHit") && fMixMode==kFALSE) ||
21  ( candHit.GetDetId()!=FairRootManager::Instance()->GetBranchId("STTHitMix") && fMixMode==kTRUE) ) continue;
22  PndSttHit *sttHit = (PndSttHit*) fSttHit->At(candHit.GetHitId());
23  if(!sttHit) continue;
24  sttRawCounts++;
25  // compute dE/dx
26  dedx = sttHit->ComputedEdx(track, tuberadius);
27 
28  if(dedx != 0)
29  {
30  dedxvec.push_back(dedx);
31  sttCounts++;
32  }
33  }
34 
35  if( sttCounts > 0) {
36  // truncated mean
37  Double_t perc = 0.70;
38  // sort
39  std::sort(dedxvec.begin(), dedxvec.end());
40 
41  //truncated mean
42  Double_t sum = 0;
43  Int_t endnum = int(floor(sttCounts * perc));
44 
45  // ****************************************
46  // CUT on n of hits: to have a meaningful
47  // truncated mean we require not to have less
48  // than 5 hits (in the already truncated list)
49  // ****************************************
50  if(endnum > 5) {
51  for(Int_t m = 0; m < endnum; m++) sum += dedxvec[m];
52  pidCand->SetSttMeanDEDX(sum/(Double_t) endnum); // else default in pidCand is SttDEDXMean = 0
53  }
54  }
55 
56  pidCand->SetSttHits(sttRawCounts);
57  return kTRUE;
58 }
__m128 m
Definition: P4_F32vec4.h:28
PndTrackCandHit GetSortedHit(UInt_t i)
Definition: PndTrackCand.h:54
TClonesArray * fSttHit
PndDskParticle TCA //need to change to PndDskHit in future.
PndTrackCand GetTrackCand()
Definition: PndTrack.h:47
Double_t
PndGeoSttPar * fSttParameters
EMC error matrix.
Double_t ComputedEdx(PndTrack *track, Double_t tuberadius)
Definition: PndSttHit.cxx:52
Double_t GetTubeInRad()
Definition: PndGeoSttPar.h:29
UInt_t GetNHits() const
Definition: PndTrackCand.h:59
Int_t GetHitId() const
Int_t GetDetId() const
Bool_t PndPidCorrelator::GetTofInfo ( FairTrackParH *  helix,
PndPidCandidate pid 
)
protected

Definition at line 8 of file PndPidTofInfo.cxx.

References Bool_t, ClassImp(), fDebugMode, fGeanePro, fGeanePropagator, fIdeal, fPidHyp, fTofHit, fTofPoint, PndPidCandidate::GetCharge(), PndPidCandidate::GetMcIndex(), PndSciTHit::GetTime(), PndPidCandidate::SetTofIndex(), PndPidCandidate::SetTofM2(), PndPidCandidate::SetTofQuality(), PndPidCandidate::SetTofStopTime(), PndPidCandidate::SetTofTrackLength(), and tofCorr.

Referenced by ConstructChargedCandidate().

8  {
9 
10  if (!fIdeal)
11  {
12  if ((helix->GetMomentum().Theta()*TMath::RadToDeg())<20.) return kFALSE;
13  if ((helix->GetMomentum().Theta()*TMath::RadToDeg())>150.) return kFALSE;
14  }
15  //---
16  PndSciTHit *tofHit = NULL;
17  Int_t tofEntries = fTofHit->GetEntriesFast();
18  Int_t tofIndex = -1;
19  Float_t tofTof = 0., tofLength = -1000, tofGLength = -1000, tofLengthTemp = -1000;
20  Float_t tofQuality = 1000000;
21 
22  //Float_t chi2 = 0; //[R.K. 01/2017] unused variable
23  TVector3 vertex(0., 0., 0.);
24  TVector3 tofPos(0., 0., 0.);
25  TVector3 momentum(0., 0., 0.);
26  for (Int_t tt = 0; tt<tofEntries; tt++)
27  {
28  tofHit = (PndSciTHit*)fTofHit->At(tt);
29  if ( fIdeal && ( ((PndSciTPoint*)fTofPoint->At(tofHit->GetRefIndex()))->GetTrackID() !=pidCand->GetMcIndex()) ) continue;
30  tofHit->Position(tofPos);
31 
32  if (fGeanePro) // Overwrites vertex if Geane is used
33  {
34  fGeanePropagator->SetPoint(tofPos);
35  fGeanePropagator->PropagateToPCA(1, 1);
36  FairTrackParH *fRes= new FairTrackParH();
37  Bool_t rc = fGeanePropagator->Propagate(helix, fRes, fPidHyp*pidCand->GetCharge());
38  if (!rc) continue;
39 
40  vertex.SetXYZ(fRes->GetX(), fRes->GetY(), fRes->GetZ());
41 
42  fGeanePropagator->SetPoint(TVector3(0,0,0));
43  fGeanePropagator->PropagateToPCA(1, -1);
44  FairTrackParH *fRes2= new FairTrackParH();
45  Bool_t rc2 = fGeanePropagator->Propagate(fRes, fRes2, fPidHyp*pidCand->GetCharge());
46  if (rc2) tofLengthTemp = fGeanePropagator->GetLengthAtPCA();
47  }
48 
49  Float_t dist = (tofPos-vertex).Mag2();
50 
51  if ( tofQuality > dist)
52  {
53  tofIndex = tt;
54  tofQuality = dist;
55  tofTof = tofHit->GetTime();
56  tofLength = tofLengthTemp; // abs(phi * track->GetRadius() / TMath::Sin(track->GetMomentum().Theta()));
57  }
58  if (fDebugMode)
59  {
60  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()),
61  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()),
62  static_cast<Float_t>(tofPos.X()), static_cast<Float_t>(tofPos.Y()), static_cast<Float_t>(tofPos.Z()), static_cast<Float_t>(tofPos.Phi()),
63  dist, static_cast<Float_t>(vertex.DeltaPhi(tofPos)), tofLength, tofGLength};
64 
65  // Float_t ntuple[] = {vertex.X(), vertex.Y(), vertex.Z(), vertex.Phi(),
66  // helix->GetMomentum().Mag(), helix->GetQ(), helix->GetMomentum().Theta(), helix->GetZ(),
67  // tofPos.X(), tofPos.Y(), tofPos.Z(), tofPos.Phi(),
68  // dist, vertex.DeltaPhi(tofPos), tofLength, tofGLength};
69  tofCorr->Fill(ntuple);
70  }
71  }
72 
73  if ( (tofQuality<fCorrPar->GetTofCut()) || (fIdeal && tofIndex!=-1) )
74  {
75  pidCand->SetTofQuality(tofQuality);
76  pidCand->SetTofStopTime(tofTof);
77  pidCand->SetTofTrackLength(tofLength);
78  pidCand->SetTofIndex(tofIndex);
79  if (tofLength>0.)
80  {
81  // mass^2 = p^2 * ( 1/beta^2 - 1 )
82  Float_t mass2 = helix->GetMomentum().Mag()*helix->GetMomentum().Mag()*(30.*30.*tofTof*tofTof/tofLength/tofLength-1.);
83  pidCand->SetTofM2(mass2);
84  }
85  }
86 
87  return kTRUE;
88 }
FairGeanePro * fGeanePropagator
Refitter for MDT tracks.
TClonesArray * fTofPoint
PndTofHit TCA.
Double_t GetTime()
Definition: PndSciTHit.h:62
TClonesArray * fTofHit
PndSdsHit TCA for pixel.
Bool_t PndPidCorrelator::GetTrackInfo ( PndTrack track,
PndPidCandidate pid 
)
protected

Definition at line 15 of file PndPidTrackInfo.cxx.

References Bool_t, cos(), Double_t, energy, fBackPropagate, fGeanePro, fGeanePropagator, fPidHyp, fVerbose, PndTrack::GetChi2(), RhoCalculationTools::GetConverted7(), RhoCalculationTools::GetFitError(), PndTrack::GetFlag(), PndTrack::GetNDF(), PndTrack::GetParamFirst(), PndTrack::GetParamLast(), jj, Mass, par, pnt, PndPidCandidate::SetCharge(), PndPidCandidate::SetChiSquared(), PndPidCandidate::SetCov7(), PndPidCandidate::SetDegreesOfFreedom(), PndPidCandidate::SetEnergy(), PndPidCandidate::SetFirstHit(), PndPidCandidate::SetFitStatus(), PndPidCandidate::SetHelixCov(), PndPidCandidate::SetHelixParams(), PndPidCandidate::SetLastHit(), PndPidCandidate::SetMomentum(), and PndPidCandidate::SetPosition().

Referenced by ConstructChargedCandidate().

16 {
17  Int_t charge = TMath::Sign(1, track->GetParamFirst().GetQ());
18  pidCand->SetCharge(charge);
19 
20  TVector3 first(track->GetParamFirst().GetX(),
21  track->GetParamFirst().GetY(),
22  track->GetParamFirst().GetZ());
23  TVector3 last(track->GetParamLast().GetX(),
24  track->GetParamLast().GetY(),
25  track->GetParamLast().GetZ());
26  FairTrackParP par = track->GetParamFirst();
27  Int_t ierr = 0;
28  FairTrackParH *fRes;
29  TVector3 momentum, startpos;
30 
31  if (fGeanePro && fBackPropagate) // Overwrites vertex if Geane is used and if backpropagation
32  {
33  FairTrackParH *helix = new FairTrackParH(&par, ierr);
34  fRes= new FairTrackParH();
35 
36  // track back to Origin
37  // [ralfk: changed to propagate to z axis - 03/2011]
38  //fPro0->SetPoint(TVector3(0,0,0));
39  //fPro0->PropagateToPCA(1, -1);
40  // Propagatetrack back to z Axis
41  fGeanePropagator->PropagateToPCA(2, -1);// track back to z axis
42  TVector3 ex1(0.,0.,-50.); // virtual wire, dimensions chosen arbitrarily
43  TVector3 ex2(0.,0.,100.); // we expect fast decaying tracks to be close to that
44  fGeanePropagator->SetWire(ex1,ex2);
45 
46  Bool_t rc = fGeanePropagator->Propagate(helix, fRes, fPidHyp*charge);
47  if (!rc)
48  {
49  std::cout << "-W- PndPidCorrelator::GetTrackInfo :: Failed backward propagation" << std::endl;
50  if (fVerbose>0) helix->Print();
51  return kFALSE;
52  }
53  }
54  else
55  {
56  // If no backpropagation, use the first params
57  fRes = new FairTrackParH(&par, ierr);
58  }
59  startpos.SetXYZ(fRes->GetX(), fRes->GetY(), fRes->GetZ()); //cm
60  momentum = fRes->GetMomentum();
61 
62  // ******** this block replaces
63  TVector3 di = momentum;
64  di.SetMag(1.);
65  TVector3 dj = di.Orthogonal();
66  TVector3 dk = di.Cross(dj);
67  FairTrackParP *fParab = new FairTrackParP(fRes, dj, dk, ierr);
68  // ******* that line (recipe by Lia)
69  //FairTrackParP *fParab = new FairTrackParP(fRes, TVector3(1.,0.,0.), TVector3(0.,1.,0.), ierr);
70  // ******* that line (recipe by Lia)
71 
72  Double_t globalCov[6][6];
73  fParab->GetMARSCov(globalCov);
74 
75  Int_t ii,jj;
76  TMatrixD err(6,6);
77  for (ii=0;ii<6;ii++) for(jj=0;jj<6;jj++) err[ii][jj]=globalCov[ii][jj];
78 
79  //err.Print();
80 
81  TLorentzVector lv;
82  lv.SetVectM(momentum, TDatabasePDG::Instance()->GetParticle(fPidHyp)->Mass()); // set mass hypothesis
83  Float_t energy = lv.E();
85 
86  pidCand->SetPosition(startpos);
87  pidCand->SetMomentum(momentum);
88  pidCand->SetEnergy(energy);
89  pidCand->SetCov7(mat);
90 
91  // Adding the helix parameters to the candidate (TFitParams)
92  // It is nice to know at analysis stage
93  //rho helix: (D0,Phi0,rho(omega),Z0,tan(dip))
94  //fair helix: (q/p,lambda, phi, y_perp, z_perp)
95  Double_t Q=fRes->GetQ();
96  //if(0==Q) ??? break/return?;
97  Double_t pnt[3], Bf[3];
98  pnt[0]=startpos.X();
99  pnt[1]=startpos.Y();
100  pnt[2]=startpos.Z();
101  if(FairRun::Instance()->IsAna()){
102  FairRunAna::Instance()->GetField()->GetFieldValue(pnt, Bf); //[kGs]
103  }else{
104  FairRunSim::Instance()->GetField()->GetFieldValue(pnt, Bf); //[kGs]
105  }
106  //Double_t B = sqrt(Bf[0]*Bf[0]+Bf[1]*Bf[1]+Bf[2]*Bf[2]);
107  Double_t B = Bf[2];
108  Double_t qBc = -0.000299792458*B*Q;
109  Double_t icL = 1. / cos(fRes->GetLambda()); // inverted for practical reasons (better to multiply than to divide)
110  Double_t icLs = icL*icL;
111  Double_t helixparams[5];
112  //helixparams[0]=startpos.Perp(); //D0
113  helixparams[0]=fRes->GetY_sc() ; //D0
114  //helixparams[1]=fRes->GetPhi(); //phi0
115  helixparams[1]=fRes->GetMomentum().Phi(); //phi0
116  helixparams[2]=qBc/(fRes->GetMomentum().Perp()); //omega=rho=1/R[cm]=-2.998e-4*B[kGs]*Q[e]/p_perp[GeV/c]
117  //helixparams[3]=startpos.Z(); //z0
118  helixparams[3]=fRes->GetZ_sc()*icL; //z0
119  helixparams[4]=tan(fRes->GetLambda()); //lambda(averey)=cot(theta)=tan(lambda(geane))
120  pidCand->SetHelixParams(helixparams);
121  Double_t fairhelixcov[15];
122  fRes->GetCov(fairhelixcov);
123  Double_t rhohelixcov[15];
124  // in the poca to z axis yperp=D0, x_perp^2+z_perp^2 = z_perp/cos(Lambda)= Z0
125  rhohelixcov[0] = fairhelixcov[12]; // sigma^2 D0
126  rhohelixcov[1] = fairhelixcov[10]; // cov D0 - Phi0
127  rhohelixcov[2] = fairhelixcov[3] * qBc * icL; // cov D0 - rho
128  rhohelixcov[3] = fairhelixcov[13] * icL; // cov D0 - Z0
129  rhohelixcov[4] = fairhelixcov[7] * icLs; // cov D0 - tan(dip)
130  rhohelixcov[5] = fairhelixcov[9]; // sigma^2 Phi0
131  rhohelixcov[6] = fairhelixcov[2] * qBc * icL; // cov Phi0 - rho
132  rhohelixcov[7] = fairhelixcov[11] * icL; // cov Phi0 - Z0
133  rhohelixcov[8] = fairhelixcov[6] * icLs; // cov Phi0 - tan(dip)
134  rhohelixcov[9] = fairhelixcov[0] * qBc * qBc * icLs; // sigma^2 rho
135  rhohelixcov[10] = fairhelixcov[4] * qBc * icLs; // cov rho - Z0
136  rhohelixcov[11] = fairhelixcov[1] * qBc * icL * icLs; // cov rho - tan(dip)
137  rhohelixcov[12] = fairhelixcov[14] * icLs; // sigma^2 Z0
138  rhohelixcov[13] = fairhelixcov[8] * icL * icLs; //cov Z0 - tan(dip)
139  rhohelixcov[14] = fairhelixcov[5] * icLs * icLs; // sigma^2 tan(dip) - from
140  pidCand->SetHelixCov(rhohelixcov);
141 
142  pidCand->SetFirstHit(first);
143  pidCand->SetLastHit(last);
144  pidCand->SetDegreesOfFreedom(track->GetNDF());
145  pidCand->SetFitStatus(track->GetFlag());
146  pidCand->SetChiSquared(track->GetChi2());
147 
148  return kTRUE;
149 }
int fVerbose
Definition: poormantracks.C:24
friend F32vec4 cos(const F32vec4 &a)
Definition: P4_F32vec4.h:112
Int_t GetFlag() const
Definition: PndTrack.h:33
TClonesArray * pnt
Double_t par[3]
Double_t
Int_t GetNDF() const
Definition: PndTrack.h:35
FairTrackParP GetParamLast()
Definition: PndTrack.h:50
static TMatrixD GetConverted7(TMatrixD)
FairGeanePro * fGeanePropagator
Refitter for MDT tracks.
Double_t GetChi2() const
Definition: PndTrack.h:34
static TMatrixDSym GetFitError(TMatrixDSym)
FairTrackParP GetParamFirst()
Definition: PndTrack.h:49
TMatrixT< double > TMatrixD
Definition: PndLmdDim.h:52
Double_t energy
Definition: plot_dirc.C:15
InitStatus PndPidCorrelator::Init ( )
virtual

Definition at line 182 of file PndPidCorrelator.cxx.

References drcCorr, dskCorr, emcCorr, fCorrErrorProp, fCorrPar, fDebugMode, fDrcHit, fDrcMode, fDrcPoint, fDskMode, fDskParticle, fEmcBump, fEmcCalibrator, fEmcCluster, fEmcDigi, fEmcErrorMatrix, fEmcErrorMatrixPar, fEmcGeoPar, fEmcMode, fEventCounter, fFast, fFitter, fFtofHit, fFtofMode, fFtofPoint, fFtsHit, fFtsMode, fGeanePro, fGeanePropagator, fIdeal, fIdealHyp, fMcTrack, fMdtHit, fMdtMode, fMdtPoint, fMdtRefit, fMdtTrk, fMixMode, fMvdHitsPixel, fMvdHitsStrip, fMvdMode, fPidHyp, fRichHit, fRichMode, fRichPoint, fscCorr, fSttHit, fSttMode, ftofCorr, fTofHit, fTofMode, fTofPoint, fTrack, fTrack2, fTrackBranch, fTrackBranch2, PndEmcGeoPar::GetGeometryVersion(), PndEmcErrorMatrix::GetParObject(), PndEmcErrorMatrixPar::GetParObject(), PndEmcErrorMatrix::Init(), PndRecoKalmanFit::Init(), PndEmcErrorMatrix::InitFromFile(), PndEmcErrorMatrixPar::IsValid(), PndEmcClusterCalibrator::MakeEmcClusterCalibrator(), mdtCorr, MdtGeometry(), r, Register(), richCorr, sDir, PndEmcErrorMatrixPar::SetErrorMatrixObject(), PndRecoKalmanFit::SetGeane(), PndRecoKalmanFit::SetNumIterations(), sFile, and tofCorr.

182  {
183 
184  // cout << "InitStatus PndPidCorrelator::Init()" << endl;
185 
186  FairRootManager *fManager =FairRootManager::Instance();
187 
188  fTrack = dynamic_cast<TClonesArray *> (fManager->GetObject(fTrackBranch));
189  if ( ! fTrack ) {
190  cout << "-I- PndPidCorrelator::Init: No PndTrack array!" << endl;
191  return kERROR;
192  }
193 
194  // if (fTrackIDBranch!="")
195  // {
196  // fTrackID = dynamic_cast<TClonesArray *> (fManager->GetObject(fTrackIDBranch));
197  // if ( ! fTrackID ) {
198  // cout << "-I- PndPidCorrelator::Init: No PndTrackID array! Switching MC propagation OFF" << endl;
199  // fTrackIDBranch = "";
200  // }
201  // }
202 
203  if (fTrackBranch2!="")
204  {
205  fTrack2 = dynamic_cast<TClonesArray *> (fManager->GetObject(fTrackBranch2));
206  if ( ! fTrack2 ) {
207  cout << "-I- PndPidCorrelator::Init: No 2nd PndTrack array!" << endl;
208  return kERROR;
209  }
210  }
211 
212  // if (fTrackIDBranch2!="")
213  // {
214  // fTrackID2 = dynamic_cast<TClonesArray *> (fManager->GetObject(fTrackIDBranch2));
215  // if ( ! fTrackID2 ) {
216  // cout << "-I- PndPidCorrelator::Init: No 2nd PndTrackID array! Switching MC propagation OFF" << endl;
217  // fTrackIDBranch2 = "";
218  // }
219  // }
220 
221  // *** STT ***
222  if (fSttMode)
223  {
224  if (fMixMode==kFALSE)
225  {
226  fSttHit = dynamic_cast<TClonesArray *> ( fManager->GetObject("STTHit"));
227  if ( fSttHit )
228  {
229  cout << "-I- PndPidCorrelator::Init: Using STTHit" << endl;
230  fSttMode = 2;
231  }
232  else
233  {
234  cout << "-W- PndPidCorrelator::Init: No STT hits array! Switching STT OFF" << endl;
235  fSttMode = 0;
236  }
237  }
238  else
239  {
240  fSttHit = dynamic_cast<TClonesArray *> (fManager->GetObject("STTHitMix"));
241  if ( fSttHit )
242  {
243  cout << "-I- PndPidCorrelator::Init: Using STTHitMix" << endl;
244  fSttMode = 2;
245  }
246  else
247  {
248  cout << "-W- PndPidCorrelator::Init: No STT hits mix array! Switching STT OFF" << endl;
249  fSttMode = 0;
250  }
251  }
252  }
253 
254  // *** FTS ***
255  if (fFtsMode)
256  {
257  if (fMixMode==kFALSE)
258  {
259  fFtsHit =dynamic_cast<TClonesArray *>( fManager->GetObject("FTSHit"));
260  if ( fFtsHit )
261  {
262  cout << "-I- PndPidCorrelator::Init: Using FTSHit" << endl;
263  fFtsMode = 2;
264  }
265  else
266  {
267  cout << "-W- PndPidCorrelator::Init: No FTS hits array! Switching FTS OFF" << endl;
268  fFtsMode = 0;
269  }
270  }
271  else
272  {
273  fFtsHit =dynamic_cast<TClonesArray *> (fManager->GetObject("FTSHitMix"));
274  if ( fFtsHit )
275  {
276  cout << "-I- PndPidCorrelator::Init: Using FTSHitMix" << endl;
277  fFtsMode = 2;
278  }
279  else
280  {
281  cout << "-W- PndPidCorrelator::Init: No FTS hits mix array! Switching FTS OFF" << endl;
282  fFtsMode = 0;
283  }
284  }
285  }
286 
287  // *** MVD ***
288  if (fMvdMode)
289  {
290  if (fMixMode==kFALSE)
291  {
292  fMvdHitsStrip = dynamic_cast<TClonesArray *> ( fManager->GetObject("MVDHitsStrip"));
293  if ( ! fMvdHitsStrip )
294  {
295  cout << "-W- PndPidCorrelator::Init: No MVDHitsStrip array!" << endl;
296  }
297  else fMvdMode = 2;
298 
299  fMvdHitsPixel = dynamic_cast<TClonesArray *> ( fManager->GetObject("MVDHitsPixel"));
300  if ( ! fMvdHitsPixel )
301  {
302  cout << "-W- PndPidCorrelator::Init: No MVDHitsPixel array!" << endl;
303  }
304  else fMvdMode = 2;
305  }
306  else
307  {
308  fMvdHitsStrip = dynamic_cast<TClonesArray *> ( fManager->GetObject("MVDHitsStripMix"));
309  if ( ! fMvdHitsStrip )
310  {
311  cout << "-W- PndPidCorrelator::Init: No MVDHitsStripMix array!" << endl;
312  }
313  else fMvdMode = 2;
314 
315  fMvdHitsPixel = dynamic_cast<TClonesArray *> (fManager->GetObject("MVDHitsPixelMix"));
316  if ( ! fMvdHitsPixel )
317  {
318  cout << "-W- PndPidCorrelator::Init: No MVDHitsPixelMix array!" << endl;
319  }
320  else fMvdMode = 2;
321  }
322 
323  if (( ! fMvdHitsStrip ) && ( ! fMvdHitsPixel ))
324  {
325  cout << "-W- PndPidCorrelator::Init: No MVD hits array! Switching MVD OFF" << endl;
326  fMvdMode = 0;
327  }
328  else
329  {
330  cout << "-I- PndPidCorrelator::Init: Using MVDHit" << endl;
331  }
332  }
333 
334  // *** TOF ***
335  if (fTofMode)
336  {
337  fTofHit = dynamic_cast<TClonesArray *> (fManager->GetObject("SciTHit"));
338  if ( ! fTofHit )
339  {
340  cout << "-W- PndPidCorrelator::Init: No SciTHit array!" << endl;
341  fTofMode = 0;
342  }
343  else
344  {
345  cout << "-I- PndPidCorrelator::Init: Using SciTHit" << endl;
346  fTofMode = 2;
347  }
348  if (fIdeal)
349  {
350  fTofPoint = dynamic_cast<TClonesArray *> (fManager->GetObject("SciTPoint"));
351  if ( ! fTofPoint )
352  {
353  cout << "-W- PndPidCorrelator::Init: No SciTPoint array!" << endl;
354  fTofMode = 0;
355  }
356  }
357  }
358 
359  // *** FTOF ***
360  if (fFtofMode)
361  {
362  fFtofHit = dynamic_cast<TClonesArray *> ( fManager->GetObject("FtofHit"));
363  if ( ! fFtofHit )
364  {
365  cout << "-W- PndPidCorrelator::Init: No FtofHit array!" << endl;
366  fFtofMode = 0;
367  }
368  else
369  {
370  cout << "-I- PndPidCorrelator::Init: Using FtofHit" << endl;
371  fFtofMode = 2;
372  }
373  if (fIdeal)
374  {
375  fFtofPoint = dynamic_cast<TClonesArray *> (fManager->GetObject("FtofPoint"));
376  if ( ! fFtofPoint )
377  {
378  cout << "-W- PndPidCorrelator::Init: No FtofPoint array!" << endl;
379  fFtofMode = 0;
380  }
381  }
382  }
383 
384  // *** EMC ***
385  if (fEmcMode)
386  {
387  fEmcCluster = dynamic_cast<TClonesArray *> ( fManager->GetObject("EmcCluster"));
388  if ( ! fEmcCluster )
389  {
390  cout << "-W- PndPidCorrelator::Init: No EmcCluster array!" << endl;
391  fEmcMode = 0;
392  }
393  else
394  {
395  cout << "-I- PndPidCorrelator::Init: Using EmcCluster" << endl;
396  fEmcMode = 2;
397  }
398 
399  fEmcBump = dynamic_cast<TClonesArray *> (fManager->GetObject("EmcBump"));
400  if ( ! fEmcBump )
401  {
402  cout << "-W- PndPidCorrelator::Init: No EmcBump array!" << endl;
403  }
404  else
405  {
406  cout << "-I- PndPidCorrelator::Init: Using EmcBump" << endl;
407  fEmcMode = 3;
408  }
409 
410  fEmcDigi = dynamic_cast<TClonesArray *> ( fManager->GetObject("EmcDigi"));
411  if ( ! fEmcDigi)
412  {
413  cout << "-W- PndPidCorrelator::Init: No EmcDigi array! No EMC E1/E9/E25 information is propagated!" << endl;
414  }
415  }
416 
417  // *** DRC ***
418  if (fDrcMode)
419  {
420  fDrcHit = dynamic_cast<TClonesArray *> (fManager->GetObject("DrcHit"));
421  if ( ! fDrcHit )
422  {
423  cout << "-W- PndPidCorrelator::Init: No DrcHit array!" << endl;
424  fDrcMode = 0;
425  }
426  else
427  {
428  cout << "-I- PndPidCorrelator::Init: Using DrcHit" << endl;
429  fDrcMode = 2;
430  }
431  }
432 
433  // *** DSK ***
434  if (fDskMode)
435  {
436  fDskParticle = dynamic_cast<TClonesArray *> ( fManager->GetObject("DskParticle"));
437  if ( ! fDskParticle )
438  {
439  cout << "-W- PndPidCorrelator::Init: No DskParticle array!" << endl;
440  fDskMode = 0;
441  }
442  else
443  {
444  cout << "-I- PndPidCorrelator::Init: Using DskParticle" << endl;
445  fDskMode = 2;
446  }
447  }
448 
449  // *** MDT ***
450  if (fMdtMode)
451  {
452  fMdtHit = dynamic_cast<TClonesArray *> (fManager->GetObject("MdtHit"));
453  if ( ! fMdtHit )
454  {
455  cout << "-W- PndPidCorrelator::Init: No MdtHit array!" << endl;
456  fMdtMode = 0;
457  }
458  else
459  {
460  cout << "-I- PndPidCorrelator::Init: Using MdtHit" << endl;
461  fMdtMode = 2;
462  }
463  fMdtTrk = dynamic_cast<TClonesArray *> (fManager->GetObject("MdtTrk"));
464  if ( ! fMdtTrk )
465  {
466  cout << "-W- PndPidCorrelator::Init: No MdtTrk array!" << endl;
467  }
468  else
469  {
470  cout << "-I- PndPidCorrelator::Init: Using MdtTrk" << endl;
471  fMdtMode = 3;
472  }
473  }
474 
475  // *** RICH ***
476  if (fRichMode)
477  {
478  fRichHit = dynamic_cast<TClonesArray *> (fManager->GetObject("RichHit"));
479  if ( ! fRichHit )
480  {
481  cout << "-W- PndPidCorrelator::Init: No RichHit array!" << endl;
482  fRichMode = 0;
483  }
484  else
485  {
486  cout << "-I- PndPidCorrelator::Init: Using RichHit" << endl;
487  fRichMode = 2;
488  }
489  }
490 
491  if (fIdeal)
492  {
493  cout << "-I- PndPidCorrelator::Init: Using MonteCarlo correlation" << endl;
494  fTofPoint =dynamic_cast<TClonesArray *> ( fManager->GetObject("TofPoint"));
495  if ( ! fTofPoint )
496  {
497  cout << "-W- PndPidCorrelator::Init: No TofPoint array!" << endl;
498  fTofMode = 0;
499  }
500  else
501  {
502  cout << "-I- PndPidCorrelator::Init: Using TofPoint" << endl;
503  }
504  fDrcPoint = dynamic_cast<TClonesArray *> (fManager->GetObject("DrcBarPoint"));
505  if ( ! fDrcPoint )
506  {
507  cout << "-W- PndPidCorrelator::Init: No DrcBarPoint array!" << endl;
508  fDrcMode = 0;
509  }
510  else
511  {
512  cout << "-I- PndPidCorrelator::Init: Using DrcPoint" << endl;
513  }
514  fMdtPoint = dynamic_cast<TClonesArray *> ( fManager->GetObject("MdtPoint"));
515  if ( ! fMdtPoint )
516  {
517  cout << "-W- PndPidCorrelator::Init: No MdtPoint array!" << endl;
518  fMdtMode = 0;
519  }
520  else
521  {
522  cout << "-I- PndPidCorrelator::Init: Using MdtPoint" << endl;
523  }
524  fRichPoint = dynamic_cast<TClonesArray *> (fManager->GetObject("RichBarPoint"));
525  if ( ! fRichPoint )
526  {
527  cout << "-W- PndPidCorrelator::Init: No RichBarPoint array!" << endl;
528  fRichMode = 0;
529  }
530  else
531  {
532  cout << "-I- PndPidCorrelator::Init: Using RichBarPoint" << endl;
533  }
534  }
535 
536  Register();
537 
538  fCorrPar->printParams();
539 
540  if (fGeanePro)
541  {
542  cout << "-I- PndPidCorrelator::Init: Using Geane for Track propagation" << endl;
543  fGeanePropagator = new FairGeanePro();
544 
545  if (!fCorrErrorProp)
546  {
547  cout << "-I- PndPidCorrelator::Init: Switching OFF Geane error propagation" << endl;
548  fGeanePropagator->PropagateOnlyParameters();
549  }
550  if (fIdealHyp)
551  {
552  fMcTrack = dynamic_cast<TClonesArray *> (fManager->GetObject("MCTrack"));
553  if ( ! fMcTrack ) {
554  cout << "-I- PndPidCorrelator::Init: No PndMcTrack array! No ideal pid hypothesis is possible!" << endl;
555  return kERROR;
556  }
557  // if (fTrackIDBranch=="") {
558  // cout << "-I- PndPidCorrelator::Init: No TrackID Branch name! No ideal pid hypothesis is possible!" << endl;
559  // return kERROR;
560  // }
561  }
562  else
563  {
564  switch (abs(fPidHyp))
565  {
566  case 0:
567  cout << "-I- PndPidCorrelator::Init: No PID set -> Using default PION hypothesis" << endl;
568  fPidHyp = 211;
569  break;
570 
571  case 11:
572  cout << "-I- PndPidCorrelator::Init: Using ELECTRON hypothesis" << endl;
573  fPidHyp = -11;
574  break;
575 
576  case 13:
577  cout << "-I- PndPidCorrelator::Init: Using MUON hypothesis" << endl;
578  fPidHyp = -13;
579  break;
580 
581  case 211:
582  cout << "-I- PndPidCorrelator::Init: Using PION hypothesis" << endl;
583  fPidHyp = 211;
584  break;
585 
586  case 321:
587  cout << "-I- PndPidCorrelator::Init: Using KAON hypothesis" << endl;
588  fPidHyp = 321;
589  break;
590 
591  case 2212:
592  cout << "-I- PndPidCorrelator::Init: Using PROTON hypothesis" << endl;
593  fPidHyp = 2212;
594  break;
595 
596  default:
597  cout << "-I- PndPidCorrelator::Init: Not recognised PID set -> Using default PION hypothesis" << endl;
598  fPidHyp = 211;
599  break;
600  }
601  }
602  }
603  else
604  {
605  return kFATAL;
606  }
607 
608  if (fMdtMode>0)
609  {
610  if (!MdtGeometry())
611  {
612  cout << "-W- PndPidCorrelator::Init: No MDT geometry ???" << endl;
613  fMdtMode = 0;
614  }
615  }
616 
617  if (fMdtRefit)
618  {
619  fFitter = new PndRecoKalmanFit();
622  if (!fFitter->Init()) return kFATAL;
623  }
624 
625  if (fDebugMode)
626  {
627  r = TFile::Open(sDir+sFile,"RECREATE");
628 
629  tofCorr = new TNtuple("tofCorr","TRACK-TOF Correlation",
630  "track_x:track_y:track_z:track_phi:track_p:track_charge:track_theta:track_z0:tof_x:tof_y:tof_z:tof_phi:chi2:dphi:len:glen");
631  ftofCorr = new TNtuple("ftofCorr","TRACK-FTOF Correlation",
632  "track_x:track_y:track_z:ver_x:ver_y:ver_z:ver_px:ver_py:ver_pz:track_p:track_charge:track_theta:track_z0:tof_x:tof_y:tof_z:chi2:len:glen:tlen");
633  emcCorr = new TNtuple("emcCorr","TRACK-EMC Correlation",
634  "track_x:track_y:track_z:track_phi:track_p:track_charge:track_theta:track_z0:emc_x:emc_y:emc_z:emc_phi:chi2:dphi:emc_ene:glen:emc_mod");
635  fscCorr = new TNtuple("fscCorr","TRACK-FSC Correlation",
636  "track_x:track_y:track_z:track_phi:track_p:track_charge:track_theta:track_z0:emc_x:emc_y:emc_z:emc_phi:chi2:dphi:emc_ene:glen:emc_mod");
637  mdtCorr = new TNtuple("mdtCorr","TRACK-MDT Correlation",
638  "track_x:track_y:track_z:track_dx:track_dy:track_dz:track_phi:track_p:track_charge:track_theta:track_z0:mdt_x:mdt_y:mdt_z:mdt_phi:mdt_p:chi2:mdt_mod:dphi:glen:mdt_count:nhits");
639  drcCorr = new TNtuple("drcCorr","TRACK-DRC Correlation",
640  "track_x:track_y:track_z:track_phi:track_p:track_charge:track_theta:track_z0:drc_x:drc_y:drc_phi:chi2:drc_thetac:drc_nphot:dphi:glen:flag");
641  dskCorr = new TNtuple("dskCorr","TRACK-DSK Correlation",
642  "track_x:track_y:track_z:track_phi:track_p:track_charge:track_theta:track_z0:dsk_x:dsk_y:dsk_z:dsk_phi:chi2:dsk_thetac:dsk_nphot:dphi:glen:track_lx:track_ly:track_lz:track_xp:flag");
643  richCorr = new TNtuple("richCorr","TRACK-RICH Correlation",
644  "track_x:track_y:track_z:track_phi:track_p:track_charge:track_theta:track_z0:rich_x:rich_y:rich_phi:chi2:rich_thetac:rich_nphot:dphi:glen:flag");
645  cout << "-I- PndPidCorrelator::Init: Filling Debug histograms" << endl;
646 
647  }
648 
649  // Set Parameters for Emc error matrix
650  if (fEmcMode>0)
651  {
653  {
655  //std::cout<<"PndPidCorrelator: Emc error matrix is read from RTDB"<<std::endl;
656  } else
657  {
658  Int_t emcGeomVersion=fEmcGeoPar->GetGeometryVersion();
659  fEmcErrorMatrix->InitFromFile(emcGeomVersion);
661  //std::cout<<"PndPidCorrelator: Emc error matrix is read from file"<<std::endl;
662  }
664  }
665 
666  if (fFast) cout << "-W- PndPidCorrelator::Init: Using fast correlator!!" << endl;
667 
668  cout << "-I- PndPidCorrelator::Init: Success!" << endl;
669  fEventCounter = 1;
670  return kSUCCESS;
671 }
void Init(PndEmcErrorMatrixParObject *par)
PndRecoKalmanFit * fFitter
Object to retrieve MVD geometry.
TClonesArray * fMdtHit
PndMdtPoint TCA.
PndEmcErrorMatrix * fEmcErrorMatrix
EMC error matrix parameters.
TClonesArray * fDskParticle
PndDrcHit TCA.
TFile * r
Geane propagator.
PndEmcErrorMatrixPar * fEmcErrorMatrixPar
EMC geometry parameters.
PndPidCorrPar * fCorrPar
PndRichHit TCA.
void SetErrorMatrixObject(PndEmcErrorMatrixParObject *ParObject)
TClonesArray * fFtsHit
PndSttHit TCA.
TClonesArray * fRichHit
PndRichBarPoint TCA.
TClonesArray * fMdtTrk
PndMdtHit TCA.
PndEmcAbsClusterCalibrator * fEmcCalibrator
FTS geometry parameters.
void InitFromFile(Int_t geomVersion)
TClonesArray * fSttHit
PndDskParticle TCA //need to change to PndDskHit in future.
TClonesArray * fMvdHitsPixel
PndSdsHit TCA for strip.
static PndEmcAbsClusterCalibrator * MakeEmcClusterCalibrator(Int_t method, Int_t version=1)
PndEmcErrorMatrixParObject * GetParObject()
TClonesArray * fDrcHit
PndDrcBarPoint TCA.
TClonesArray * fTrack2
PndTrackID TCA.
void SetGeane(Bool_t opt=kTRUE)
TClonesArray * fEmcDigi
PndEmcBump TCA.
FairGeanePro * fGeanePropagator
Refitter for MDT tracks.
TClonesArray * fMdtPoint
PndEmcDigi TCA.
TClonesArray * fMvdHitsStrip
PndTrack TCA for MDT refit.
TClonesArray * fFtofPoint
PndFtofHit TCA.
TClonesArray * fTofPoint
PndTofHit TCA.
Int_t GetGeometryVersion()
Definition: PndEmcGeoPar.h:25
TClonesArray * fEmcBump
PndEmcCluster TCA.
TClonesArray * fDrcPoint
PndMdtTrk TCA.
PndEmcErrorMatrixParObject * GetParObject()
TClonesArray * fMcTrack
void SetNumIterations(Int_t num)
PndEmcGeoPar * fEmcGeoPar
Correlation parameters.
TClonesArray * fTrack
PndMCTrack TCA.
TClonesArray * fRichPoint
PndFtsHit TCA.
TClonesArray * fFtofHit
PndTofPoint TCA.
TClonesArray * fTofHit
PndSdsHit TCA for pixel.
TClonesArray * fEmcCluster
PndFtofPoint TCA.
Bool_t PndPidCorrelator::MdtGeometry ( )
protected

Definition at line 186 of file PndPidMdtInfo.cxx.

References Double_t, fVerbose, gGeoManager, mdtIronThickness, and mdtLayerPos.

Referenced by Init().

187 {
188  //fVerbose = 3;
189  // Thichness of barrel iron layers [cm]
190  mdtIronThickness[0][0] = 6.;
191  for (Int_t ll=1; ll<12;ll++) mdtIronThickness[0][ll] = 3;
192  mdtIronThickness[0][12] = 6.;
193  // Thichness of endcap+mf iron layers [cm]
194  for (Int_t ll=0; ll<10;ll++) mdtIronThickness[1][ll] = 6;
195  // Thichness of forward iron layers [cm]
196  for (Int_t ll=0; ll<17;ll++) mdtIronThickness[2][ll] = 6;
197 
198  Text_t buffer[250];
199 
200  for (Int_t ll=0; ll<5; ll++)
201  {
202  sprintf(buffer,"cave_1/Mdt_1/MdtEndcap_1/MdtEndcapLayer0%i_1/MDT2s0l%ib0w0_%i",ll,ll,200+(8*ll));
203  gGeoManager->cd(buffer);
204  Double_t local[3] = {0., 0., 0.};
205  Double_t master[3];
206  gGeoManager->LocalToMaster(local, master);
207  mdtLayerPos[1][ll] = master[2];
208  if (fVerbose>1) std::cout << "mdtLayerPos[1][" << ll << "] = " << mdtLayerPos[1][ll] << ";" << std::endl;
209  }
210  for (Int_t ll=0; ll<6; ll++)
211  {
212  sprintf(buffer,"cave_1/Mdt_1/MdtMuonFilter_1/MdtMuonFilterLayer0%i_1/MDT3s0l%ib0w0_%i",ll,ll,300+(8*ll));
213  gGeoManager->cd(buffer);
214  Double_t local[3] = {0., 0., 0.};
215  Double_t master[3];
216  gGeoManager->LocalToMaster(local, master);
217  mdtLayerPos[1][ll+5] = master[2];
218  if (fVerbose>1) std::cout << "mdtLayerPos[1][" << ll+5 << "] = " << mdtLayerPos[1][ll+5] << ";" << std::endl;
219  }
220  for (Int_t ll=0; ll<17; ll++)
221  {
222  sprintf(buffer,"cave_1/Mdt_1/MdtForward_1/MDT4s0l%ib0w0_%i",ll,ll);
223  gGeoManager->cd(buffer);
224  Double_t local[3] = {0., 0., 0.};
225  Double_t master[3];
226  gGeoManager->LocalToMaster(local, master);
227  mdtLayerPos[2][ll] = master[2];
228  if (fVerbose>1) std::cout << "mdtLayerPos[2][" << ll << "] = " << mdtLayerPos[2][ll] << ";" << std::endl;
229  }
230 
231  return kTRUE;
232 }
int fVerbose
Definition: poormantracks.C:24
Float_t mdtLayerPos[3][20]
TGeoManager * gGeoManager
Double_t
Float_t mdtIronThickness[3][20]
Bool_t PndPidCorrelator::MdtMapping ( )
protected

Definition at line 139 of file PndPidMdtInfo.cxx.

References fMdtHit, PndMdtHit::GetLayerID(), PndMdtHit::GetModule(), mapMdtBarrel, mapMdtEndcap, mapMdtForward, and nHits.

Referenced by ConstructChargedCandidate().

139  {
140 
141  Int_t nHits = fMdtHit->GetEntriesFast();
142  if (nHits==0) return kFALSE;
143 
144  PndMdtHit *mdtHit = NULL;
145  for (Int_t iHit=0; iHit<nHits; iHit++)
146  {
147  mdtHit = (PndMdtHit*) fMdtHit->At(iHit);
148  Int_t mdtLayer = -1;// mdtModule = -1, //[R.K.03/2017] unused variable
149  //std::cout << mdtHit->GetModule() << "\t" << mdtHit->GetLayerID() << "\t" << iHit << std::endl;
150  switch (mdtHit->GetModule())
151  {
152  case 1:
153  //mdtModule = 1; //[R.K.03/2017] unused variable
154  mdtLayer = mdtHit->GetLayerID();
155  mapMdtBarrel[mdtLayer].push_back(iHit);
156  break;
157 
158  case 2:
159  //mdtModule = 2; //[R.K.03/2017] unused variable
160  mdtLayer = mdtHit->GetLayerID();
161  mapMdtEndcap[mdtLayer].push_back(iHit);
162  break;
163 
164  case 3:
165  //mdtModule = 2; //[R.K.03/2017] unused variable
166  mdtLayer = mdtHit->GetLayerID()+5;
167  mapMdtEndcap[mdtLayer].push_back(iHit);
168  break;
169 
170  case 4:
171  //mdtModule = 3; //[R.K.03/2017] unused variable
172  mdtLayer = mdtHit->GetLayerID();
173  mapMdtForward[mdtLayer].push_back(iHit);
174  break;
175 
176  default:
177  std::cout << "-E- PndPidCorrelator::MdtMapping: Wrong MDT Module" << std::endl;
178  return kFALSE;
179  }
180  }
181 
182  return kTRUE;
183 }
Short_t GetLayerID() const
Definition: PndMdtHit.h:34
map< Int_t, vector< Int_t > > mapMdtBarrel
TClonesArray * fMdtHit
PndMdtPoint TCA.
int nHits
Definition: RiemannTest.C:16
map< Int_t, vector< Int_t > > mapMdtForward
Short_t GetModule() const
Definition: PndMdtHit.h:32
map< Int_t, vector< Int_t > > mapMdtEndcap
void PndPidCorrelator::Register ( )

Definition at line 1066 of file PndPidCorrelator.cxx.

References fMdtRefit, fMdtTrack, fPidChargedCand, fPidNeutralCand, fTrackOutBranch, and TString.

Referenced by Init().

1066  {
1067  //---
1068  TString chargName = "PidChargedCand" + fTrackOutBranch;
1069  //TString chargName = fTrackOutBranch;
1070  FairRootManager::Instance()->Register(chargName,"Pid", fPidChargedCand, kTRUE);
1071  FairRootManager::Instance()->
1072  //Register("PidNeutralCand","Pid", fPidNeutralCand, kTRUE);
1073  Register("PidNeutralCand"+fTrackOutBranch,"Pid", fPidNeutralCand, kTRUE);//Stupid thing to do?? Added for now
1074  if (fMdtRefit)
1075  {
1076  FairRootManager::Instance()->
1077  Register("MdtTrack","Pid", fMdtTrack, kTRUE);
1078  }
1079 }
TClonesArray * fPidNeutralCand
PndPidCandidate TCA for charged particles.
TClonesArray * fMdtTrack
PndPidCandidate TCA for neutral particles.
TClonesArray * fPidChargedCand
2nd PndTrackID TCA
void PndPidCorrelator::Reset ( )

Definition at line 1120 of file PndPidCorrelator.cxx.

References fClusterList, fClusterQ, fEmcClstCount, fFscClstCount, fMvdELoss, fMvdHitCount, fMvdPath, mapMdtBarrel, mapMdtEndcap, and mapMdtForward.

Referenced by Exec(), and PndPidCorrelator().

1120  {
1121  //---
1122  fMvdPath = 0.;
1123  fMvdELoss = 0.;
1124  fMvdHitCount = 0;
1125  fEmcClstCount = 0;
1126  fFscClstCount = 0;
1127  fClusterList.clear();
1128  fClusterQ.clear();
1129  mapMdtBarrel.clear();
1130  mapMdtEndcap.clear();
1131  mapMdtForward.clear();
1132 }
map< Int_t, vector< Int_t > > mapMdtBarrel
map< Int_t, Bool_t > fClusterList
map< Int_t, vector< Int_t > > mapMdtForward
map< Int_t, Double_t > fClusterQ
map< Int_t, vector< Int_t > > mapMdtEndcap
void PndPidCorrelator::ResetEmcQ ( )

Definition at line 1053 of file PndPidCorrelator.cxx.

References fClusterList, fClusterQ, and fEmcCluster.

Referenced by Exec().

1054 {
1055  // Fuction to reset all the quality values for emc-track correlation to -1
1056  fClusterQ.clear();
1057  fClusterList.clear();
1058  for (Int_t ii=0; ii<fEmcCluster->GetEntriesFast(); ii++)
1059  {
1060  fClusterQ[ii] = -1;
1061  fClusterList[ii] = kFALSE;
1062  }
1063 }
map< Int_t, Bool_t > fClusterList
map< Int_t, Double_t > fClusterQ
TClonesArray * fEmcCluster
PndFtofPoint TCA.
void PndPidCorrelator::SetBackPropagate ( Bool_t  opt = kTRUE)
inline
void PndPidCorrelator::SetBarrelTrackBranch ( TString  branch)
inline
void PndPidCorrelator::SetCorrErrProp ( Bool_t  err)
inline

Definition at line 193 of file PndPidCorrelator.h.

193 { fCorrErrorProp = err; };
void PndPidCorrelator::SetDebugFilename ( TString  filename)
inline

Definition at line 184 of file PndPidCorrelator.h.

References filename.

184 { sFile = filename; };
const string filename
void PndPidCorrelator::SetDebugMode ( Bool_t  debug)
inline
void PndPidCorrelator::SetDrcMode ( Short_t  mode)
inline

Definition at line 207 of file PndPidCorrelator.h.

References mode.

207 { fDrcMode = mode; }; // DRC Mode: 0 no DRC
Int_t mode
Definition: autocutx.C:47
void PndPidCorrelator::SetDskMode ( Short_t  mode)
inline

Definition at line 208 of file PndPidCorrelator.h.

References mode.

208 { fDskMode = mode; }; // DSK Mode: 0 no DSK
Int_t mode
Definition: autocutx.C:47
void PndPidCorrelator::SetEmcMode ( Short_t  mode)
inline

Definition at line 205 of file PndPidCorrelator.h.

References mode.

205 { fEmcMode = mode; }; // EMC Mode: 0 no EMC
Int_t mode
Definition: autocutx.C:47
void PndPidCorrelator::SetFast ( Bool_t  fast)
inline
void PndPidCorrelator::SetFlagCut ( Bool_t  opt = kTRUE)
inline

Definition at line 197 of file PndPidCorrelator.h.

197 { fFlagCut = opt; };
void PndPidCorrelator::SetForwardTrackBranch ( TString  branch)
inline
void PndPidCorrelator::SetFtofMode ( Short_t  mode)
inline

Definition at line 204 of file PndPidCorrelator.h.

References mode.

204 { fFtofMode = mode; }; // FTOF Mode:0 no FTOF
Int_t mode
Definition: autocutx.C:47
void PndPidCorrelator::SetFtsMode ( Short_t  mode)
inline

Definition at line 202 of file PndPidCorrelator.h.

References mode.

202 { fFtsMode = mode; }; // FTS Mode: 0 no FTS
Int_t mode
Definition: autocutx.C:47
void PndPidCorrelator::SetGeanePro ( Bool_t  gea = kTRUE)
inline

Definition at line 194 of file PndPidCorrelator.h.

194 { fGeanePro = gea; };
void PndPidCorrelator::SetIdeal ( Bool_t  id)
inline

Definition at line 191 of file PndPidCorrelator.h.

Referenced by pidideal_complete().

191 { fIdeal = id; };
void PndPidCorrelator::SetIdealHyp ( Bool_t  opt = kTRUE)
inline

Definition at line 196 of file PndPidCorrelator.h.

Referenced by pidideal_complete().

196 { fIdealHyp = opt; }
void PndPidCorrelator::SetMdtMode ( Short_t  mode)
inline

Definition at line 206 of file PndPidCorrelator.h.

References mode.

206 { fMdtMode = mode; }; // MDT Mode: 0 no MDT
Int_t mode
Definition: autocutx.C:47
void PndPidCorrelator::SetMdtRefit ( Bool_t  mdt)
inline

Definition at line 185 of file PndPidCorrelator.h.

185 { fMdtRefit = mdt; };
void PndPidCorrelator::SetMixMode ( Bool_t  mix)
inline

Definition at line 186 of file PndPidCorrelator.h.

References mix.

186 { fMixMode = mix; };
PndMixBackgroundEvents * mix
Definition: runrecoMix.C:67
void PndPidCorrelator::SetMvdMode ( Short_t  mode)
inline

Definition at line 200 of file PndPidCorrelator.h.

References mode.

200 { fMvdMode = mode; }; // MVD Mode: 0 no MVD
Int_t mode
Definition: autocutx.C:47
void PndPidCorrelator::SetOption ( Option_t *  option = " ")
inline

Definition at line 182 of file PndPidCorrelator.h.

182 {fOption = option; fOption.ToLower();}
void PndPidCorrelator::SetOutputBranch ( TString  branch)
inline

Definition at line 189 of file PndPidCorrelator.h.

Referenced by PndMasterMultiPidTask::PndMasterMultiPidTask().

189 { fTrackOutBranch = branch; };
void PndPidCorrelator::SetParContainers ( )
virtual

Get parameter containers

Definition at line 674 of file PndPidCorrelator.cxx.

References fCorrPar, fEmcErrorMatrixPar, fEmcGeoPar, fFtsParameters, fSttParameters, and run.

674  {
675 
676  // Get run and runtime database
677  FairRun* run = FairRun::Instance();
678  if ( ! run ) Fatal("PndPidCorrelator:: SetParContainers", "No analysis run");
679 
680  FairRuntimeDb* db = run->GetRuntimeDb();
681  if ( ! db ) Fatal("PndPidCorrelator:: SetParContainers", "No runtime database");
682 
683  // Get PID Correlation parameter container
684  fCorrPar = (PndPidCorrPar*) db->getContainer("PndPidCorrPar");
685 
686  // Get Emc geometry parameter container
687  fEmcGeoPar = (PndEmcGeoPar*) db->getContainer("PndEmcGeoPar");
688 
689  // Get Emc error matrix parameter container
690  fEmcErrorMatrixPar = (PndEmcErrorMatrixPar*) db->getContainer("PndEmcErrorMatrixPar");
691 
692  // Get Stt parameter
693  fSttParameters = (PndGeoSttPar*) db->getContainer("PndGeoSttPar");
694  fFtsParameters = (PndGeoFtsPar*) db->getContainer("PndGeoFtsPar");
695 }
Int_t run
Definition: autocutx.C:47
PndEmcErrorMatrixPar * fEmcErrorMatrixPar
EMC geometry parameters.
PndPidCorrPar * fCorrPar
PndRichHit TCA.
PndGeoFtsPar * fFtsParameters
STT geometry parameters.
PndGeoSttPar * fSttParameters
EMC error matrix.
PndEmcGeoPar * fEmcGeoPar
Correlation parameters.
void PndPidCorrelator::SetPidHyp ( Int_t  pid)
inline

Definition at line 195 of file PndPidCorrelator.h.

References pid().

Referenced by PndMasterMultiPidTask::PndMasterMultiPidTask(), and runTrackingPid().

195 { fPidHyp = pid; };
int pid()
void PndPidCorrelator::SetSimulation ( Bool_t  sim)
inline

Definition at line 190 of file PndPidCorrelator.h.

References sim().

190 { fSimulation = sim; };
sim(Int_t nEvents=1, TString SimEngine="TGeant4", Float_t mom=6.231552)
void PndPidCorrelator::SetSttMode ( Short_t  mode)
inline

Definition at line 201 of file PndPidCorrelator.h.

References mode.

201 { fSttMode = mode; }; // STT Mode: 0 no STT
Int_t mode
Definition: autocutx.C:47
void PndPidCorrelator::SetTofMode ( Short_t  mode)
inline

Definition at line 203 of file PndPidCorrelator.h.

References mode.

203 { fTofMode = mode; }; // TOF Mode: 0 no TOF
Int_t mode
Definition: autocutx.C:47

Member Data Documentation

TNtuple* PndPidCorrelator::drcCorr
protected

Definition at line 136 of file PndPidCorrelator.h.

Referenced by Finish(), GetDrcInfo(), and Init().

TNtuple* PndPidCorrelator::dskCorr
protected

Definition at line 137 of file PndPidCorrelator.h.

Referenced by Finish(), GetDskInfo(), and Init().

TNtuple* PndPidCorrelator::emcCorr
protected

Definition at line 133 of file PndPidCorrelator.h.

Referenced by Finish(), GetEmcInfo(), and Init().

Bool_t PndPidCorrelator::fBackPropagate
protected

Definition at line 126 of file PndPidCorrelator.h.

Referenced by GetTrackInfo().

map<Int_t, Bool_t> PndPidCorrelator::fClusterList
protected

Definition at line 108 of file PndPidCorrelator.h.

Referenced by GetEmcInfo(), GetFscInfo(), Reset(), and ResetEmcQ().

map<Int_t, Double_t> PndPidCorrelator::fClusterQ
protected

Definition at line 109 of file PndPidCorrelator.h.

Referenced by GetEmcInfo(), GetFscInfo(), Reset(), and ResetEmcQ().

Bool_t PndPidCorrelator::fCorrErrorProp
protected

Definition at line 119 of file PndPidCorrelator.h.

Referenced by GetFMdtInfo(), and Init().

PndPidCorrPar* PndPidCorrelator::fCorrPar
protected
Short_t PndPidCorrelator::fDebugMode
protected
TClonesArray* PndPidCorrelator::fDrcHit
protected

PndDrcBarPoint TCA.

Definition at line 68 of file PndPidCorrelator.h.

Referenced by ConstructChargedCandidate(), GetDrcInfo(), and Init().

Short_t PndPidCorrelator::fDrcMode
protected

Definition at line 91 of file PndPidCorrelator.h.

Referenced by ConstructChargedCandidate(), and Init().

TClonesArray* PndPidCorrelator::fDrcPoint
protected

PndMdtTrk TCA.

Definition at line 67 of file PndPidCorrelator.h.

Referenced by GetDrcInfo(), and Init().

Short_t PndPidCorrelator::fDskMode
protected

Definition at line 92 of file PndPidCorrelator.h.

Referenced by ConstructChargedCandidate(), and Init().

TClonesArray* PndPidCorrelator::fDskParticle
protected

PndDrcHit TCA.

Definition at line 69 of file PndPidCorrelator.h.

Referenced by ConstructChargedCandidate(), GetDskInfo(), and Init().

TClonesArray* PndPidCorrelator::fEmcBump
protected

PndEmcCluster TCA.

Definition at line 62 of file PndPidCorrelator.h.

Referenced by ConstructNeutralCandidate(), and Init().

PndEmcAbsClusterCalibrator* PndPidCorrelator::fEmcCalibrator
protected

FTS geometry parameters.

Definition at line 81 of file PndPidCorrelator.h.

Referenced by ConstructNeutralCandidate(), GetEmcInfo(), GetFscInfo(), and Init().

Int_t PndPidCorrelator::fEmcClstCount
protected

Definition at line 95 of file PndPidCorrelator.h.

Referenced by ConstructChargedCandidate(), Exec(), and Reset().

TClonesArray* PndPidCorrelator::fEmcCluster
protected
TClonesArray* PndPidCorrelator::fEmcDigi
protected

PndEmcBump TCA.

Definition at line 63 of file PndPidCorrelator.h.

Referenced by ConstructNeutralCandidate(), GetEmcInfo(), GetFscInfo(), and Init().

PndEmcErrorMatrix* PndPidCorrelator::fEmcErrorMatrix
protected

EMC error matrix parameters.

Definition at line 78 of file PndPidCorrelator.h.

Referenced by ConstructNeutralCandidate(), Init(), and ~PndPidCorrelator().

PndEmcErrorMatrixPar* PndPidCorrelator::fEmcErrorMatrixPar
protected

EMC geometry parameters.

Definition at line 77 of file PndPidCorrelator.h.

Referenced by Init(), and SetParContainers().

PndEmcGeoPar* PndPidCorrelator::fEmcGeoPar
protected

Correlation parameters.

Definition at line 76 of file PndPidCorrelator.h.

Referenced by Init(), and SetParContainers().

Short_t PndPidCorrelator::fEmcMode
protected
Int_t PndPidCorrelator::fEventCounter
protected

Definition at line 121 of file PndPidCorrelator.h.

Referenced by Exec(), and Init().

Bool_t PndPidCorrelator::fFast
protected

Definition at line 124 of file PndPidCorrelator.h.

Referenced by ConstructChargedCandidate(), Exec(), GetMvdInfo(), and Init().

PndRecoKalmanFit* PndPidCorrelator::fFitter
protected

Object to retrieve MVD geometry.

Definition at line 128 of file PndPidCorrelator.h.

Referenced by Init().

Bool_t PndPidCorrelator::fFlagCut
protected

Definition at line 125 of file PndPidCorrelator.h.

Referenced by ConstructChargedCandidate().

Int_t PndPidCorrelator::fFscClstCount
protected

Definition at line 96 of file PndPidCorrelator.h.

Referenced by ConstructChargedCandidate(), Exec(), and Reset().

TClonesArray* PndPidCorrelator::fFtofHit
protected

PndTofPoint TCA.

Definition at line 59 of file PndPidCorrelator.h.

Referenced by ConstructChargedCandidate(), GetFtofInfo(), and Init().

Short_t PndPidCorrelator::fFtofMode
protected

Definition at line 88 of file PndPidCorrelator.h.

Referenced by ConstructChargedCandidate(), and Init().

TClonesArray* PndPidCorrelator::fFtofPoint
protected

PndFtofHit TCA.

Definition at line 60 of file PndPidCorrelator.h.

Referenced by GetFtofInfo(), and Init().

TClonesArray* PndPidCorrelator::fFtsHit
protected

PndSttHit TCA.

Definition at line 71 of file PndPidCorrelator.h.

Referenced by ConstructChargedCandidate(), GetFtsInfo(), and Init().

Short_t PndPidCorrelator::fFtsMode
protected

Definition at line 86 of file PndPidCorrelator.h.

Referenced by ConstructChargedCandidate(), and Init().

PndGeoFtsPar* PndPidCorrelator::fFtsParameters
protected

STT geometry parameters.

Definition at line 80 of file PndPidCorrelator.h.

Referenced by SetParContainers().

Bool_t PndPidCorrelator::fGeanePro
protected
FairGeanePro* PndPidCorrelator::fGeanePropagator
protected
PndGeoHandling* PndPidCorrelator::fGeoH
protected

Definition at line 127 of file PndPidCorrelator.h.

Referenced by GetMvdInfo(), and PndPidCorrelator().

Bool_t PndPidCorrelator::fIdeal
protected
Bool_t PndPidCorrelator::fIdealHyp
protected

Definition at line 123 of file PndPidCorrelator.h.

Referenced by ConstructChargedCandidate(), and Init().

TClonesArray* PndPidCorrelator::fMcTrack
protected

Definition at line 46 of file PndPidCorrelator.h.

Referenced by ConstructChargedCandidate(), and Init().

TClonesArray* PndPidCorrelator::fMdtHit
protected
Short_t PndPidCorrelator::fMdtMode
protected

Definition at line 90 of file PndPidCorrelator.h.

Referenced by ConstructChargedCandidate(), GetMdtInfo(), and Init().

TClonesArray* PndPidCorrelator::fMdtPoint
protected

PndEmcDigi TCA.

Definition at line 64 of file PndPidCorrelator.h.

Referenced by GetFMdtInfo(), GetMdtInfo(), and Init().

Bool_t PndPidCorrelator::fMdtRefit
protected

Definition at line 117 of file PndPidCorrelator.h.

Referenced by ConstructChargedCandidate(), Init(), and Register().

TClonesArray* PndPidCorrelator::fMdtTrack
protected

PndPidCandidate TCA for neutral particles.

Definition at line 53 of file PndPidCorrelator.h.

Referenced by AddMdtTrack(), ConstructChargedCandidate(), and Register().

TClonesArray* PndPidCorrelator::fMdtTrk
protected

PndMdtHit TCA.

Definition at line 66 of file PndPidCorrelator.h.

Referenced by GetMdtInfo(), and Init().

Bool_t PndPidCorrelator::fMixMode
protected

Definition at line 120 of file PndPidCorrelator.h.

Referenced by GetFtsInfo(), GetGemInfo(), GetMvdInfo(), GetSttInfo(), and Init().

Double_t PndPidCorrelator::fMvdELoss
protected

Definition at line 98 of file PndPidCorrelator.h.

Referenced by Reset().

Int_t PndPidCorrelator::fMvdHitCount
protected

Definition at line 100 of file PndPidCorrelator.h.

Referenced by GetMvdInfo(), and Reset().

TClonesArray* PndPidCorrelator::fMvdHitsPixel
protected

PndSdsHit TCA for strip.

Definition at line 56 of file PndPidCorrelator.h.

Referenced by ConstructChargedCandidate(), GetMvdInfo(), and Init().

TClonesArray* PndPidCorrelator::fMvdHitsStrip
protected

PndTrack TCA for MDT refit.

Definition at line 55 of file PndPidCorrelator.h.

Referenced by ConstructChargedCandidate(), GetMvdInfo(), and Init().

Short_t PndPidCorrelator::fMvdMode
protected

Definition at line 84 of file PndPidCorrelator.h.

Referenced by ConstructChargedCandidate(), and Init().

Double_t PndPidCorrelator::fMvdPath
protected

Definition at line 99 of file PndPidCorrelator.h.

Referenced by Reset().

TClonesArray* PndPidCorrelator::fPidChargedCand
protected
Int_t PndPidCorrelator::fPidHyp
protected
TClonesArray* PndPidCorrelator::fPidNeutralCand
protected

PndPidCandidate TCA for charged particles.

Definition at line 52 of file PndPidCorrelator.h.

Referenced by AddNeutralCandidate(), ConstructNeutralCandidate(), PndPidCorrelator(), and Register().

TClonesArray* PndPidCorrelator::fRichHit
protected

PndRichBarPoint TCA.

Definition at line 73 of file PndPidCorrelator.h.

Referenced by GetRichInfo(), and Init().

Short_t PndPidCorrelator::fRichMode
protected

Definition at line 93 of file PndPidCorrelator.h.

Referenced by ConstructChargedCandidate(), and Init().

TClonesArray* PndPidCorrelator::fRichPoint
protected

PndFtsHit TCA.

Definition at line 72 of file PndPidCorrelator.h.

Referenced by GetRichInfo(), and Init().

TNtuple* PndPidCorrelator::fscCorr
protected

Definition at line 134 of file PndPidCorrelator.h.

Referenced by Finish(), GetFscInfo(), and Init().

Bool_t PndPidCorrelator::fSimulation
protected

Definition at line 115 of file PndPidCorrelator.h.

TClonesArray* PndPidCorrelator::fSttHit
protected

PndDskParticle TCA //need to change to PndDskHit in future.

Definition at line 70 of file PndPidCorrelator.h.

Referenced by ConstructChargedCandidate(), GetSttInfo(), and Init().

Short_t PndPidCorrelator::fSttMode
protected

Definition at line 85 of file PndPidCorrelator.h.

Referenced by ConstructChargedCandidate(), and Init().

PndGeoSttPar* PndPidCorrelator::fSttParameters
protected

EMC error matrix.

Definition at line 79 of file PndPidCorrelator.h.

Referenced by GetSttInfo(), and SetParContainers().

TNtuple* PndPidCorrelator::ftofCorr
protected

Definition at line 132 of file PndPidCorrelator.h.

Referenced by Finish(), GetFtofInfo(), and Init().

TClonesArray* PndPidCorrelator::fTofHit
protected

PndSdsHit TCA for pixel.

Definition at line 57 of file PndPidCorrelator.h.

Referenced by ConstructChargedCandidate(), GetTofInfo(), and Init().

Short_t PndPidCorrelator::fTofMode
protected

Definition at line 87 of file PndPidCorrelator.h.

Referenced by ConstructChargedCandidate(), and Init().

TClonesArray* PndPidCorrelator::fTofPoint
protected

PndTofHit TCA.

Definition at line 58 of file PndPidCorrelator.h.

Referenced by GetTofInfo(), and Init().

TClonesArray* PndPidCorrelator::fTrack
protected
TClonesArray* PndPidCorrelator::fTrack2
protected
TString PndPidCorrelator::fTrackBranch
protected

Definition at line 110 of file PndPidCorrelator.h.

Referenced by ConstructChargedCandidate(), and Init().

TString PndPidCorrelator::fTrackBranch2
protected

Definition at line 112 of file PndPidCorrelator.h.

Referenced by ConstructChargedCandidate(), ConstructNeutralCandidate(), and Init().

TClonesArray* PndPidCorrelator::fTrackID
protected

PndTrack TCA.

Definition at line 48 of file PndPidCorrelator.h.

TClonesArray* PndPidCorrelator::fTrackID2
protected

2nd PndTrack TCA

Definition at line 50 of file PndPidCorrelator.h.

TString PndPidCorrelator::fTrackOutBranch
protected

Definition at line 114 of file PndPidCorrelator.h.

Referenced by Register().

map<Int_t, vector<Int_t> > PndPidCorrelator::mapMdtBarrel
protected

Definition at line 102 of file PndPidCorrelator.h.

Referenced by MdtMapping(), and Reset().

map<Int_t, vector<Int_t> > PndPidCorrelator::mapMdtEndcap
protected

Definition at line 103 of file PndPidCorrelator.h.

Referenced by MdtMapping(), and Reset().

map<Int_t, vector<Int_t> > PndPidCorrelator::mapMdtForward
protected

Definition at line 104 of file PndPidCorrelator.h.

Referenced by ConstructChargedCandidate(), GetFMdtInfo(), MdtMapping(), and Reset().

TNtuple* PndPidCorrelator::mdtCorr
protected

Definition at line 135 of file PndPidCorrelator.h.

Referenced by Finish(), GetFMdtInfo(), GetMdtInfo(), and Init().

Float_t PndPidCorrelator::mdtIronThickness[3][20]
protected

Definition at line 106 of file PndPidCorrelator.h.

Referenced by GetFMdtInfo(), MdtGeometry(), and PndPidCorrelator().

Float_t PndPidCorrelator::mdtLayerPos[3][20]
protected

Definition at line 105 of file PndPidCorrelator.h.

Referenced by GetFMdtInfo(), MdtGeometry(), and PndPidCorrelator().

TFile* PndPidCorrelator::r
protected

Geane propagator.

Definition at line 130 of file PndPidCorrelator.h.

Referenced by Finish(), and Init().

TNtuple* PndPidCorrelator::richCorr
protected

Definition at line 138 of file PndPidCorrelator.h.

Referenced by GetRichInfo(), and Init().

TString PndPidCorrelator::sDir
protected

Definition at line 140 of file PndPidCorrelator.h.

Referenced by Init(), and PndPidCorrelator().

TString PndPidCorrelator::sFile
protected

Definition at line 141 of file PndPidCorrelator.h.

Referenced by Init(), and PndPidCorrelator().

TNtuple* PndPidCorrelator::tofCorr
protected

Definition at line 131 of file PndPidCorrelator.h.

Referenced by Finish(), GetTofInfo(), and Init().


The documentation for this class was generated from the following files: