38 nSect = {6, 10, 14, 18, 8, 8, 8, 8, 8, 8, 8};
64 fit_dP_He =
new TF1(
"fit_dP_He",
"[0]+[1]*(1+(3.728/x)^2)^[2]");
65 fit_dP_He->SetParameters(0.2010, -0.2875, 0.6414);
67 fit_dP_He =
new TF1(
"fit_dP_He",
"[0]+[1]*(1+(2.809/x)^2)^[2]");
68 fit_dP_He->SetParameters(0.0731, -0.1687, 0.8723);
71 alephFit_d =
new TF1(
"alephFit_d",
"[0]/(x^([3]))*([1]-x^([3])-TMath::Log([2]+1/(x^([4]))))", 0, 14.5);
72 const Float_t fpar1[5] = {-591.879, -0.537493, 0.338613, -0.00845327,
74 alephFit_d->SetParameters(fpar1[0], fpar1[1], fpar1[2], fpar1[3], fpar1[4]);
77 m2CutLow =
new TF1(
"m2CutLow",
"-0.0236*x*x+0.0240*x+3.1896", 0, 30);
78 m2CutUp =
new TF1(
"m2CutUp",
"0.0169*x*x+0.1306*x+4.0525", 0, 30);
80 m2CutLow =
new TF1(
"m2CutLow",
"-0.0034*x*x-0.0360*x+1.7426", 0, 30);
81 m2CutUp =
new TF1(
"m2CutUp",
"0.0128*x*x-0.1060*x+2.6261", 0, 30);
139 strangeEvent =
kTRUE;
151 if (sts->
GetB() < -0.1)
192 if (expectedDedx <= 0.0)
195 if (dedx / expectedDedx < 2.25)
221 const Float_t kFindV0Range = 30.0f;
224 if (V0Z > 15 || V0Z < 0)
242 Float_t V0X = .5 * (V0X1 + V0X2);
243 Float_t V0Y = .5 * (V0Y1 + V0Y2);
251 Float_t cV01_00 = V01.GetCovariance(0, 0);
252 Float_t cV01_01 = V01.GetCovariance(0, 1);
253 Float_t cV01_11 = V01.GetCovariance(1, 1);
255 Float_t cV02_00 = V02.GetCovariance(0, 0);
256 Float_t cV02_01 = V02.GetCovariance(0, 1);
257 Float_t cV02_11 = V02.GetCovariance(1, 1);
259 Float_t cVP1_00 = VP1.GetCovariance(0, 0);
260 Float_t cVP1_01 = VP1.GetCovariance(0, 1);
261 Float_t cVP1_11 = VP1.GetCovariance(1, 1);
263 Float_t cVP2_00 = VP2.GetCovariance(0, 0);
264 Float_t cVP2_01 = VP2.GetCovariance(0, 1);
265 Float_t cVP2_11 = VP2.GetCovariance(1, 1);
269 Float_t chi2_DCA12 =
ComputeChi2_2D(dx12, dy12, cV01_00, cV01_01, cV01_11, cV02_00, cV02_01, cV02_11);
270 if (chi2_DCA12 < 0.0)
315 Float_t TxPart0 = PxPart0 / PzPart0;
316 Float_t TyPart0 = PyPart0 / PzPart0;
317 Float_t xPart0 = TxPart0 * (VPZ - V0Z) + V0X;
318 Float_t yPart0 = TyPart0 * (VPZ - V0Z) + V0Y;
344 const Double_t m2 =
E *
E - Px * Px - Py * Py - Pz * Pz;
358 cout <<
"\nBmnHypNuclPairFinder::Init()" << endl;
360 FairRootManager* ioman = FairRootManager::Instance();
379 TString dir = getenv(
"VMCWORKDIR");
381 Error(
"Init",
"VMCWORKDIR is not set — cannot locate calibration.root");
385 TString calibPath = dir +
"/input/calibration.root";
387 if (!calibFile || calibFile->
IsZombie()) {
388 Error(
"Init",
"Cannot open calibration file: %s", calibPath.
Data());
400 "Missing calibration histograms for (i=%d, j=%d, k=%d) — "
418 constexpr size_t kReserveSize = 128;
446 if (!(
fTrigger->IsTriggerBitTrueAR(7)))
453 Float_t centerOfTargetX = 0.40;
454 Float_t centerOfTargetY = 0.15;
469 cout <<
"\n-I- [BmnHypNuclPairFinder::Finish] " << endl;
473 FairTrackParam* par2,
477 const FairTrackParam par1_initial = *par1;
478 const FairTrackParam par2_initial = *par2;
480 const Int_t nPlanes = 5;
482 Float_t minDist2 = numeric_limits<Float_t>::max();
485 while (range >= 0.1) {
486 const Float_t zMax = z_0 + range;
487 const Float_t zMin = z_0 - range;
488 const Float_t zStep = (zMax - zMin) / nPlanes;
490 *par1 = par1_initial;
491 *par2 = par2_initial;
493 minDist2 = numeric_limits<Float_t>::max();
496 for (
Int_t iPlane = 0; iPlane < nPlanes; ++iPlane) {
497 const Float_t z = zMax - iPlane * zStep;
499 FairTrackParam p1 = par1_initial;
500 FairTrackParam p2 = par2_initial;
508 const Float_t dx = p1.GetX() - p2.GetX();
509 const Float_t dy = p1.GetY() - p2.GetY();
510 const Float_t d2 = dx * dx + dy * dy;
538 if (p < 0.0 || p > 20)
568 constexpr Int_t kMaxHits = 64;
569 std::array<Float_t, kMaxHits> signalsLow;
573 for (
Int_t hitIdx = 0; hitIdx < nHits; ++hitIdx) {
588 if (nSignals >= kMaxHits)
591 signalsLow[nSignals++] = low.
TotalSignal *
a[st][sect][momIdx] +
b[st][sect][momIdx];
597 Int_t usedHits = (nHits == 3) ? 2
611 if (usedHits > nSignals)
616 std::nth_element(signalsLow.begin(), signalsLow.begin() + usedHits, signalsLow.begin() + nSignals);
619 for (
Int_t i = 0;
i < usedHits; ++
i)
620 totSigLow += signalsLow[
i];
622 return totSigLow / usedHits;
646 if (p > 3.5 || p < 0.0)
650 return (m2tof400 < m2CutUpKplsTof400->Eval(p) && m2tof400 >
m2CutLowKplsTof400->Eval(p))
void Error(const char *location, const char *msgfmt,...)
void Warning(const char *location, const char *msgfmt,...)
char * Form(const char *fmt,...)
BmnStatus
Define status code.
Int_t GetGemTrackIndex() const
Accessors.
Float_t GetMass2(Int_t tofID) const
virtual InitStatus Init()
vector< Short_t > fNFsdHitsNeg
Bool_t IsKaPlus(BmnGlobalTrack *gl)
TClonesArray * fUpperFsdClusters
TClonesArray * fParticlePair
BmnKalmanFilter * fKalman
virtual void Exec(Option_t *option)
void GetNHits(CbmStsTrack *tr, Int_t &nGEM, Int_t &nFSD)
TClonesArray * fLowerGemClusters
TClonesArray * fUpperGemClusters
vector< FairTrackParam > fParInVPNeg
vector< Float_t > fM2Pos700
TClonesArray * fLowerFsdClusters
BmnTrigInfoDst * fTrigger
vector< Float_t > minMomBound
vector< Short_t > fNGemHitsNeg
vector< Float_t > fChi2NDFPos
vector< Short_t > fNFsdHitsPos
vector< Float_t > maxMomBound
Float_t GetdEdx(CbmStsTrack *tr)
TClonesArray * fStsHits
event counter
static Float_t ComputeChi2_2D(Float_t dx, Float_t dy, Float_t c1_00, Float_t c1_01, Float_t c1_11, Float_t c2_00, Float_t c2_01, Float_t c2_11)
virtual ~BmnHypNuclPairFinder()
TClonesArray * fStsTracks
TClonesArray * fTof700Hits
vector< Float_t > fDedxPos
vector< Float_t > fChi2NDFNeg
vector< Short_t > fNGemHitsPos
TClonesArray * fGlobTracks
DstEventHeader * fDstHeader
vector< FairTrackParam > fParInVPPos
Float_t FindV0ByVirtualPlanes(FairTrackParam *par1, FairTrackParam *par2, Float_t z_0, Float_t range=50.)
void SetChi2DCA1(Float_t v)
void SetChi2DCA0(Float_t v)
void SetChi2DCA2(Float_t v)
void SetInvMass(Float_t val)
void SetChi2NDF(Float_t val1, Float_t val2)
void SetNTrInEvent(Int_t n)
void SetPath(Float_t val)
void SetDedx(Float_t val)
void SetChi2DCA12(Float_t v)
void SetMomXYZ2(Float_t px, Float_t py, Float_t pz)
void SetMomXYZ1(Float_t px, Float_t py, Float_t pz)
void SetNHitsPair(Short_t nFsd1, Short_t nGem1, Short_t nFsd2, Short_t nGem2)
virtual Int_t GetStationNr() const
Int_t GetSectorNr() const
Int_t GetSystemId() const
Accessors.
Int_t GetNStsHits() const
Accessors.
Int_t GetStsHitIndex(Int_t iHit) const
FairTrackParam * GetParamFirst()
T * Get(const char *namecycle)
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=ROOT::RCompressionSetting::EDefaults::kUseCompiledDefault, Int_t netopt=0)
void Close(Option_t *option="") override
virtual Double_t GetBinContent(Int_t bin) const
virtual Int_t FindBin(Double_t x, Double_t y=0, Double_t z=0)
R__ALWAYS_INLINE Bool_t IsZombie() const
const char * Data() const
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
RVec< PromoteType< T > > exp(const RVec< T > &v)
Double_t Sqrt(Double_t x)