14 FairTrackParH *helix =
new FairTrackParH(&par, ierr);
16 map<Int_t, Int_t>mapMdtTrk;
20 for (Int_t tt = 0; tt<
fMdtTrk->GetEntriesFast(); tt++)
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;
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++)
44 mdtHit->Position(mdtPos);
49 vertex.SetXYZ(-10000, -10000, -10000);
50 vertexD.SetXYZ(-10000, -10000, -10000);
51 FairTrackParH *fRes=
new FairTrackParH();
54 mdtTempMom = fRes->GetMomentum().Mag();
55 vertex.SetXYZ(fRes->GetX(), fRes->GetY(), fRes->GetZ());
56 vertexD.SetXYZ(fRes->GetDX(), fRes->GetDY(), fRes->GetDZ());
63 dist = (mdtPos-vertex).Mag2();
67 dist = (vertex.X()-mdtPos.X())*(vertex.X()-mdtPos.X())+(vertex.Y()-mdtPos.Y())*(vertex.Y()-mdtPos.Y());
70 if ( mdtQuality > dist)
80 mdtIndex = mapMdtTrk[
mm];
85 for (Int_t iLayer=0; iLayer<mdtLayer; iLayer++)
87 mdtHits = mdtHits + mdtTrk->
GetHitMult(iLayer);
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) };
108 if ((mdtQuality<fCorrPar->GetMdtCut()) || (
fIdeal && mdtIndex!=-1))
142 if (nHits==0)
return kFALSE;
145 for (Int_t iHit=0; iHit<
nHits; iHit++)
177 std::cout <<
"-E- PndPidCorrelator::MdtMapping: Wrong MDT Module" << std::endl;
200 for (Int_t ll=0; ll<5; ll++)
202 sprintf(buffer,
"cave_1/Mdt_1/MdtEndcap_1/MdtEndcapLayer0%i_1/MDT2s0l%ib0w0_%i",ll,ll,200+(8*ll));
208 if (
fVerbose>1) std::cout <<
"mdtLayerPos[1][" << ll <<
"] = " <<
mdtLayerPos[1][ll] <<
";" << std::endl;
210 for (Int_t ll=0; ll<6; ll++)
212 sprintf(buffer,
"cave_1/Mdt_1/MdtMuonFilter_1/MdtMuonFilterLayer0%i_1/MDT3s0l%ib0w0_%i",ll,ll,300+(8*ll));
218 if (
fVerbose>1) std::cout <<
"mdtLayerPos[1][" << ll+5 <<
"] = " <<
mdtLayerPos[1][ll+5] <<
";" << std::endl;
220 for (Int_t ll=0; ll<17; ll++)
222 sprintf(buffer,
"cave_1/Mdt_1/MdtForward_1/MDT4s0l%ib0w0_%i",ll,ll);
228 if (
fVerbose>1) std::cout <<
"mdtLayerPos[2][" << ll <<
"] = " <<
mdtLayerPos[2][ll] <<
";" << std::endl;
245 std::cerr <<
"<Error> PndPidCorrelator::GetFMdtInfo: FairTrackParH NULL pointer parameter."<<std::endl;
250 std::cerr <<
"<Error> PndPidCorrelator::GetFMdtInfo: pidCand NULL pointer parameter."<<std::endl;
256 if (
fVerbose>0) std::cout <<
"-W- PndPidCorrelator::GetFMdtInfo: Skipping tracks not reaching the last FTS layer" << std::endl;
260 if(helix->GetPz() <= 0.)
262 std::cout <<
"-W- PndPidCorrelator::GetFMdtInfo: Skipping tracks going backward" << std::endl;
266 FairGeanePro *fProMdt =
new FairGeanePro();
272 Float_t mdtGLength = -1000;
273 Float_t mdtQuality = 1000000;
276 TVector3 mdtPos(0., 0., 0.);
277 TVector3 momentum(0., 0., 0.);
278 TVector3 vertex(0., 0., 0.);
279 TVector3 vertexD(0., 0., 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();
284 vertex.SetXYZ(prop0X, prop0Y, prop0Z);
285 mdtGLength = (vertex-helix->GetPosition()).Mag();
289 TVector3
jj(1,0,0), kk(0,1,0);
290 fProMdt->PropagateFromPlane(
jj, kk);
291 fProMdt->PropagateToPlane(vertex,
jj, kk);
293 FairTrackParP *fRes=
new FairTrackParP();
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());
304 std::cout <<
"-W- PndPidCorrelator::GetFMdtInfo: Propagation failed" << std::endl;
309 TVector3 oldPos(0., 0., 0.);
310 for (
size_t mm0 = 0; mm0< vecMdt0.size(); mm0++)
314 mdtHit->Position(mdtPos);
315 Float_t dist = (mdtPos-vertex).Mag2();
317 if ( mdtQuality > dist)
326 Int_t mdtLayer = 0, mdtHits = 1;
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) };
343 if ( (mdtQuality<fCorrPar->GetFMdtCut()) || (
fIdeal && mdtIndex!=-1) )
351 Int_t layerCount = 0, lastLayer = 0, mdtHits = 1;
352 Float_t ironDist = 0.;
354 for (Int_t ll=1; ll<17; ll++)
357 if (vecMdt.size()==0)
continue;
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);
365 Float_t corrDist = -1, corrHitDist = -1;
367 TVector3 corrPos(0., 0., 0.);
368 for (
size_t mm = 0;
mm< vecMdt.size();
mm++)
372 mdtHit->Position(mdtPos);
373 Float_t dist = (mdtPos-vertex).Mag2();
374 Float_t hitDist = (mdtPos-oldPos).Mag2();
375 if ( (corrDist<0) || (dist<corrDist) )
379 corrHitDist = hitDist;
382 if ( (dist>0.) && (
TMath::Sqrt(dist) < 20) ) layerMult++;
385 if ( (corrDist>0.) && (
TMath::Sqrt(corrDist) < 20) )
388 mdtHits = mdtHits + layerMult;
Bool_t GetMdt2Info(FairTrackParH *helix, PndPidCandidate *pid)
Float_t GetIronDist() const
Short_t GetLayerID() const
void GetHitMult(Int_t *hit)
map< Int_t, vector< Int_t > > mapMdtBarrel
TClonesArray * fMdtHit
PndMdtPoint TCA.
Bool_t GetFMdtInfo(FairTrackParP *helix, PndPidCandidate *pid)
static T Sqrt(const T &x)
Float_t mdtLayerPos[3][20]
PndPidCorrPar * fCorrPar
PndRichHit TCA.
Bool_t GetMdtInfo(PndTrack *track, PndPidCandidate *pid)
void SetMuoNumberOfLayers(Int_t val)
TGeoManager * gGeoManager
TClonesArray * fMdtTrk
PndMdtHit TCA.
void SetMuoQuality(Double_t val)
void SetMuoIron(Double_t val)
FairTrackParP GetParamLast()
Int_t GetLayerCount() const
map< Int_t, vector< Int_t > > mapMdtForward
FairGeanePro * fGeanePropagator
Refitter for MDT tracks.
TClonesArray * fMdtPoint
PndEmcDigi TCA.
void SetMuoMomentumIn(Double_t val)
Float_t mdtIronThickness[3][20]
Int_t GetHitIndex(Int_t lay) const
void SetMuoModule(Int_t val)
Short_t GetModule() const
void SetMuoIndex(Int_t val)
map< Int_t, vector< Int_t > > mapMdtEndcap
void SetMuoHits(Int_t val)