BOSS 7.0.5
BESIII Offline Software System
Loading...
Searching...
No Matches
ParticleIDBase.cxx
Go to the documentation of this file.
1#include <iostream>
2#include <cmath>
3#include <cstdlib>
4
5#include "ParticleID/ParticleIDBase.h"
6#include "TMath.h"
7
8const int ParticleIDBase::USE_DEDX = 1;
9const int ParticleIDBase::USE_TOF1 = 2;
10const int ParticleIDBase::USE_TOF2 = 4;
11const int ParticleIDBase::USE_TOFE = 8;
12const int ParticleIDBase::USE_TOFQ = 16;
13const int ParticleIDBase::USE_EMC = 32;
14const int ParticleIDBase::USE_MUC = 64;
15const int ParticleIDBase::USE_TOF = 128;
16const int ParticleIDBase::USE_TOFC = 256;
17const int ParticleIDBase::USE_TOFCorr = 512;
18
19const int ParticleIDBase::IDENTIFY_ELECTRON = 1;
20const int ParticleIDBase::IDENTIFY_MUON = 2;
21const int ParticleIDBase::IDENTIFY_PION = 4;
22const int ParticleIDBase::IDENTIFY_KAON = 8;
23const int ParticleIDBase::IDENTIFY_PROTON = 16;
24
25const int ParticleIDBase::PROBABILITY_PID = 1;
26const int ParticleIDBase::LIKELIHOOD_PID = 2;
27const int ParticleIDBase::NEURONNETWORK_PID = 4;
28
29const int ParticleIDBase::DEDX_VALID = 1;
30const int ParticleIDBase::TOF1_VALID = 2;
31const int ParticleIDBase::TOF2_VALID = 4;
32const int ParticleIDBase::TOFE_VALID = 8;
33const int ParticleIDBase::TOFQ_VALID = 16;
34const int ParticleIDBase::EMC_VALID = 32;
35const int ParticleIDBase::MUC_VALID = 64;
36const int ParticleIDBase::TOF_VALID = 128;
37const int ParticleIDBase::TOFC_VALID = 256;
38const int ParticleIDBase::TOFCorr_VALID = 512;
39
40
41std::string ParticleIDBase::path = "";
42
44{
45 m_trk = 0;
46 m_chimin_cut = 4;
47 m_chimax_cut = 6;
48 m_pdfsigmamin_cut=99;
49
50#ifndef BEAN
51 if( path.empty() ) set_path(0);
52#endif
53}
54
55void ParticleIDBase::set_path(const char* s_path)
56{
57 if ( s_path ) {
58 path = string(s_path);
59 } else {
60 char* env_path = getenv("PARTICLEIDROOT");
61 if ( !env_path ) {
62 cout << " ParticleIDBase::set_path ERROR:"
63 " the environment PARTICLEIDROOT not defined " << endl;
64 exit(1);
65 }
66 path = string(env_path);
67 }
68}
69
70
72 double mass[5] = {0.000511, 0.105658, 0.139570,0.493677, 0.938272};
73 if(n < 0 || n >=5) return 0.0;
74 return mass[n];
75}
76
78 // double vel = 29.9792458; // tof_path unit in cm.
79 double vel = 299.792458; // tof path unit in mm
80 return vel;
81}
82
83double ParticleIDBase::probCalculate(double chi2, int ndof) {
84 double p = -1.0;
85 if(chi2 < 0) return p;
86 p = TMath::Prob(chi2, ndof);
87 return p;
88}
89
90//huangb add -----------------------------------------
91double ParticleIDBase::pdfCalculate(double offset,double sigma) {
92 // const double pi = 3.141592653589793238;
93 const double pi = M_PI;
94 const double twoPi = 2*pi;
95 double chi2 = -0.5*offset*offset/(sigma*sigma);
96 double pdf = exp(chi2)/(sigma*sqrt(twoPi));
97 return pdf;
98}
99
101 double val = 999;
102 if(!m_trk) return val;
103 if(!m_trk->isMdcTrackValid()) return val;
104 RecMdcTrack *mdcTrk = m_trk->mdcTrack();
105 val = mdcTrk->p();
106 return val;
107}
109 double val = 999;
110 if(!m_trk) return val;
111 if(!m_trk->isMdcTrackValid()) return val;
112 RecMdcTrack *mdcTrk = m_trk->mdcTrack();
113 val = mdcTrk->pxy();
114 return val;
115}
117 double val = 999;
118 if(!m_trk) return val;
119 if(!m_trk->isMdcTrackValid()) return val;
120 RecMdcTrack *mdcTrk = m_trk->mdcTrack();
121 val = mdcTrk->charge() + 0.0;
122 return val;
123}
124
125double ParticleIDBase::interpolation(double* x, double* y,double x1) {
126 double c1 = (y[0]-y[1])*(x[1]-x[2])-(x[0]-x[1])*(y[1]-y[2]);
127 double c2 = (x[0]*x[0]-x[1]*x[1])*(x[1]-x[2])-(x[1]*x[1]-x[2]*x[2])*(x[0]-x[1]);
128 double c = c1/c2;
129 double b1 = (y[0]-y[1])*(x[1]*x[1]-x[2]*x[2])-(x[0]*x[0]-x[1]*x[1])*(y[1]-y[2]);
130 double b2 = (x[0]-x[1])*(x[1]*x[1]-x[2]*x[2])-(x[1]-x[2])*(x[0]*x[0]-x[1]*x[1]);
131 double b = b1/b2;
132 double a = y[0] - b*x[0]-c*x[0]*x[0];
133 double y1 = a + b*x1 +c*x1*x1;
134 return y1;
135}
136
137double ParticleIDBase::pol2(double x, double* par) {
138 double y=x;
139 // return par[0] + (par[1] * y) +(par[2] * y * y);
140 return par[0] + y*(par[1] + y*(par[2]));
141}
142
143double ParticleIDBase::pol3(double x, double* par) {
144 double y=x;
145 // return par[0] + (par[1] * y) +(par[2] * y * y)+(par[3] * y * y*y);
146 return par[0] + y*(par[1] + y*(par[2] + y*(par[3])));
147}
148
149double ParticleIDBase::pol4(double x, double* par) {
150 double y=x;
151 // return par[0] + (par[1] * y) +(par[2] * y * y)+(par[3] * y * y*y) + (par[4] * y * y*y*y);
152 return par[0] + y*(par[1] + y*(par[2] + y*(par[3] + y*(par[4]))));
153}
double mass
TTree * sigma
const Int_t n
Double_t x[10]
EvtComplex exp(const EvtComplex &c)
Definition: EvtComplex.hh:252
const double twoPi
Definition: MdcSeg.cxx:33
#define M_PI
Definition: TConstant.h:4
double pol2(double x, double *par)
virtual int ndof() const =0
double interpolation(double *x, double *y, double x1)
double probCalculate(double chi2, int n)
double pol4(double x, double *par)
double pol3(double x, double *par)
double pdfCalculate(double offset, double sigma)
double xmass(int n)
void set_path(const char *s_path=0)
double y[1000]
const double b
Definition: slope.cxx:9