BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
ParticleIDBase.cxx
Go to the documentation of this file.
1#include <cmath>
2#include <cstdlib>
3#include <iostream>
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
40std::string ParticleIDBase::path = "";
41
43 m_trk = 0;
44 m_chimin_cut = 4;
45 m_chimax_cut = 6;
46 m_pdfsigmamin_cut = 99;
47
48#ifndef BEAN
49 if ( path.empty() ) set_path( 0 );
50#endif
51}
52
53void ParticleIDBase::set_path( const char* s_path ) {
54 if ( s_path ) { path = string( s_path ); }
55 else
56 {
57 char* env_path = getenv( "PARTICLEIDROOT" );
58 if ( !env_path )
59 {
60 cout << " ParticleIDBase::set_path ERROR:"
61 " the environment PARTICLEIDROOT not defined "
62 << endl;
63 exit( 1 );
64 }
65 path = string( env_path );
66 }
67}
68
69double ParticleIDBase::xmass( int n ) {
70 double mass[5] = { 0.000511, 0.105658, 0.139570, 0.493677, 0.938272 };
71 if ( n < 0 || n >= 5 ) return 0.0;
72 return mass[n];
73}
74
76 // double vel = 29.9792458; // tof_path unit in cm.
77 double vel = 299.792458; // tof path unit in mm
78 return vel;
79}
80
81double ParticleIDBase::probCalculate( double chi2, int ndof ) {
82 double p = -1.0;
83 if ( chi2 < 0 ) return p;
84 p = TMath::Prob( chi2, ndof );
85 return p;
86}
87
88// huangb add -----------------------------------------
89double ParticleIDBase::pdfCalculate( double offset, double sigma ) {
90 // const double pi = 3.141592653589793238;
91 const double pi = M_PI;
92 const double twoPi = 2 * pi;
93 double chi2 = -0.5 * offset * offset / ( sigma * sigma );
94 double pdf = exp( chi2 ) / ( sigma * sqrt( twoPi ) );
95 return pdf;
96}
97
99 double val = 999;
100 if ( !m_trk ) return val;
101 if ( !m_trk->isMdcTrackValid() ) return val;
102 RecMdcTrack* mdcTrk = m_trk->mdcTrack();
103 val = mdcTrk->p();
104 return val;
105}
107 double val = 999;
108 if ( !m_trk ) return val;
109 if ( !m_trk->isMdcTrackValid() ) return val;
110 RecMdcTrack* mdcTrk = m_trk->mdcTrack();
111 val = mdcTrk->pxy();
112 return val;
113}
115 double val = 999;
116 if ( !m_trk ) return val;
117 if ( !m_trk->isMdcTrackValid() ) return val;
118 RecMdcTrack* mdcTrk = m_trk->mdcTrack();
119 val = mdcTrk->charge() + 0.0;
120 return val;
121}
122
123double ParticleIDBase::interpolation( double* x, double* y, double x1 ) {
124 double c1 = ( y[0] - y[1] ) * ( x[1] - x[2] ) - ( x[0] - x[1] ) * ( y[1] - y[2] );
125 double c2 = ( x[0] * x[0] - x[1] * x[1] ) * ( x[1] - x[2] ) -
126 ( x[1] * x[1] - x[2] * x[2] ) * ( x[0] - x[1] );
127 double c = c1 / c2;
128 double b1 = ( y[0] - y[1] ) * ( x[1] * x[1] - x[2] * x[2] ) -
129 ( 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] ) -
131 ( x[1] - x[2] ) * ( x[0] * x[0] - x[1] * x[1] );
132 double b = b1 / b2;
133 double a = y[0] - b * x[0] - c * x[0] * x[0];
134 double y1 = a + b * x1 + c * x1 * x1;
135 return y1;
136}
137
138double ParticleIDBase::pol2( double x, double* par ) {
139 double y = x;
140 // return par[0] + (par[1] * y) +(par[2] * y * y);
141 return par[0] + y * ( par[1] + y * ( par[2] ) );
142}
143
144double ParticleIDBase::pol3( double x, double* par ) {
145 double y = x;
146 // return par[0] + (par[1] * y) +(par[2] * y * y)+(par[3] * y * y*y);
147 return par[0] + y * ( par[1] + y * ( par[2] + y * ( par[3] ) ) );
148}
149
150double ParticleIDBase::pol4( double x, double* par ) {
151 double y = x;
152 // return par[0] + (par[1] * y) +(par[2] * y * y)+(par[3] * y * y*y) + (par[4] * y *
153 // y*y*y);
154 return par[0] + y * ( par[1] + y * ( par[2] + y * ( par[3] + y * ( par[4] ) ) ) );
155}
double mass
const Int_t n
EvtComplex exp(const EvtComplex &c)
double pi
const double twoPi
Definition MdcSeg.cxx:32
#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)