CbmRoot
Loading...
Searching...
No Matches
LmvmCuts.h
Go to the documentation of this file.
1/* Copyright (C) 2015-2021 Justus-Liebig-Universitaet Giessen, Giessen
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Elena Lebedeva [committer], Gregor Pitsch, Semen Lebedev */
4
5#ifndef LMVM_CUTS_H
6#define LMVM_CUTS_H
7
8#include "LmvmDef.h"
9#include "TCutG.h"
10
11#include <Logger.h>
12
13#include <math.h>
14
15
16class LmvmCuts {
17 public:
19
20 bool IsTopologyCutOk(ELmvmTopologyCut cut, double mom1, double mom2, double minAngle)
21 {
22 double angleCut = 0., ppCut = 0.;
23 if (cut == ELmvmTopologyCut::ST) {
24 angleCut = fStCutAngle;
25 ppCut = fStCutPP;
26 }
27 else if (cut == ELmvmTopologyCut::RT) {
28 angleCut = fRtCutAngle;
29 ppCut = fRtCutPP;
30 }
31 else if (cut == ELmvmTopologyCut::TT) {
32 angleCut = fTtCutAngle;
33 ppCut = fTtCutPP;
34 }
35 else {
36 LOG(error) << "LmvmCuts::IsTopologyCut cut is not defined.";
37 }
38 double sqrt_mom = std::sqrt(mom1 * mom2);
39 double val = -1. * (angleCut / ppCut) * sqrt_mom + angleCut;
40 if (!(sqrt_mom < ppCut && val > minAngle)) return true;
41 return false;
42 }
43
44 bool IsChi2PrimaryOk(double chi2Prim) { return (chi2Prim < fChi2PrimCut); }
45
46 bool IsGammaCutOk(double minv) { return (minv >= fGammaCut); }
47
48 bool IsPtCutOk(double momentum, double pt) { return (!(fPtCut2D->IsInside(momentum, pt))); }
49
50 std::unique_ptr<TCutG> fPtCut2D = std::make_unique<TCutG>(*[]() {
51 auto ptCut = new TCutG("PtCut2D", 6);
52 ptCut->SetVarX("P");
53 ptCut->SetVarY("Pt");
54 ptCut->SetPoint(0, 0., 0.4);
55 ptCut->SetPoint(1, 2., 0.4);
56 ptCut->SetPoint(2, 2., 0.2);
57 ptCut->SetPoint(3, 10., 0.2);
58 ptCut->SetPoint(4, 10., 0.);
59 ptCut->SetPoint(5, 0., 0.);
60 return ptCut;
61 }());
62
63 bool IsMvdCutOk(int stationNum, double dmvd, double mom)
64 {
65 if (stationNum <= 0 || stationNum > 2) {
66 LOG(error) << "LmvmCuts::IsMvdCut stationNum is not in valid. stationNum = " << stationNum;
67 return false;
68 }
69 // it is assumed that stationNum can be 1 or 2
70 double cutD = (stationNum == 1) ? fMvd1CutD : fMvd2CutD;
71 double cutP = (stationNum == 1) ? fMvd1CutP : fMvd2CutP;
72 double val = -1. * (cutP / cutD) * dmvd + cutP;
73 return (!(dmvd < cutD && val > mom));
74 }
75
76 std::string ToString()
77 {
78 std::stringstream ss;
79 ss << "LMVM cuts:" << std::endl
80 << "fChiPrimCut = " << fChi2PrimCut << std::endl
81 << "fPtCut = " << fPtCut << std::endl
82 << "fAngleCut = " << fAngleCut << std::endl
83 << "fGammaCut = " << fGammaCut << std::endl
84 << "fStCut (ang,pp) = (" << fStCutAngle << "," << fStCutPP << ")" << std::endl
85 << "fRtCut (ang,pp) = (" << fRtCutAngle << "," << fRtCutPP << ")" << std::endl
86 << "fTtCut (ang,pp) = (" << fTtCutAngle << "," << fTtCutPP << ")" << std::endl
87 << "fMvd1Cut (p,d) = (" << fMvd1CutP << "," << fMvd1CutD << ")" << std::endl
88 << "fMvd2Cut (p,d) = (" << fMvd2CutP << "," << fMvd2CutD << ")" << std::endl
89 << "fMomentumCut = " << fMomentumCut << std::endl;
90 return ss.str();
91 }
92
93 public:
94 // ID cuts, we use CbmLitGlobalElectronId for identification
95 double fMomentumCut = -1.; // if fMomentumCut < 0 it is not used
96
97 // Analysis cuts
98 double fPtCut = 0.2;
99 double fAngleCut = 1.;
100 double fChi2PrimCut = 3.0;
101 double fGammaCut = 0.025;
102 double fStCutAngle = 2.3;
103 double fStCutPP = 2.9;
104 double fTtCutAngle = 2.2;
105 double fTtCutPP = 3.2;
106 double fRtCutAngle = 2.4;
107 double fRtCutPP = 3.0;
108 double fMvd1CutP = 1.2;
109 double fMvd1CutD = 0.4;
110 double fMvd2CutP = 1.5;
111 double fMvd2CutD = 0.5;
112};
113
114#endif
ELmvmTopologyCut
Definition LmvmDef.h:15
bool IsChi2PrimaryOk(double chi2Prim)
Definition LmvmCuts.h:44
double fRtCutPP
Definition LmvmCuts.h:107
double fMvd1CutP
Definition LmvmCuts.h:108
bool IsMvdCutOk(int stationNum, double dmvd, double mom)
Definition LmvmCuts.h:63
std::unique_ptr< TCutG > fPtCut2D
Definition LmvmCuts.h:50
double fMvd1CutD
Definition LmvmCuts.h:109
bool IsPtCutOk(double momentum, double pt)
Definition LmvmCuts.h:48
double fStCutPP
Definition LmvmCuts.h:103
double fTtCutAngle
Definition LmvmCuts.h:104
bool IsTopologyCutOk(ELmvmTopologyCut cut, double mom1, double mom2, double minAngle)
Definition LmvmCuts.h:20
bool IsGammaCutOk(double minv)
Definition LmvmCuts.h:46
double fRtCutAngle
Definition LmvmCuts.h:106
double fGammaCut
Definition LmvmCuts.h:101
std::string ToString()
Definition LmvmCuts.h:76
double fAngleCut
Definition LmvmCuts.h:99
double fPtCut
Definition LmvmCuts.h:98
double fMomentumCut
Definition LmvmCuts.h:95
double fTtCutPP
Definition LmvmCuts.h:105
double fMvd2CutP
Definition LmvmCuts.h:110
double fChi2PrimCut
Definition LmvmCuts.h:100
double fStCutAngle
Definition LmvmCuts.h:102
double fMvd2CutD
Definition LmvmCuts.h:111
LmvmCuts()
Definition LmvmCuts.h:18