BOSS 7.0.7
BESIII Offline Software System
Loading...
Searching...
No Matches
EmcPID Class Reference

#include <EmcPID.h>

+ Inheritance diagram for EmcPID:

Public Member Functions

 ~EmcPID ()
 
void init ()
 
void calculate ()
 
bool IsPidInfoValid () const
 
double chi (int n) const
 
double prob (int n) const
 
int ndof () const
 
double energy () const
 
double eseed () const
 
double e3x3 () const
 
double e5x5 () const
 
double delta_theta () const
 
double delta_phi () const
 
double secondmoment () const
 
double val_emc1 () const
 
int neuronPID () const
 
double pars (int n) const
 
- Public Member Functions inherited from ParticleIDBase
 ParticleIDBase ()
 
virtual ~ParticleIDBase ()
 
virtual void init ()=0
 
virtual void calculate ()=0
 
virtual bool IsPidInfoValid () const =0
 
virtual double chi (int n) const =0
 
virtual double prob (int n) const =0
 
virtual int ndof () const =0
 
EvtRecTrackPidTrk () const
 
void setRecTrack (EvtRecTrack *trk)
 
double chiMinCut () const
 
void setChiMinCut (const double chi=4)
 
double chiMaxCut () const
 
void setChiMaxCut (const double chi=6)
 
double pdfMinSigmaCut () const
 
void setPdfMinSigmaCut (const double pdf=4)
 
double getRunNo () const
 
void setRunNo (const double runh=8093)
 
double p ()
 
double pt ()
 
double charge ()
 
double xmass (int n)
 
double velc ()
 
double probCalculate (double chi2, int n)
 
double pdfCalculate (double offset, double sigma)
 
double interpolation (double *x, double *y, double x1)
 
double pol2 (double x, double *par)
 
double pol3 (double x, double *par)
 
double pol4 (double x, double *par)
 
int useDedx () const
 
int useTof () const
 
int useTof1 () const
 
int useTof2 () const
 
int useTofE () const
 
int useTofQ () const
 
int useTofC () const
 
int useTofCorr () const
 
int useEmc () const
 
int useMuc () const
 
int onlyPionKaon () const
 
int onlyPionKaonProton () const
 
int onlyPionKaonElectron () const
 
int all () const
 
int onlyElectron () const
 
int onlyMuon () const
 
int onlyPion () const
 
int onlyKaon () const
 
int onlyProton () const
 
int methodLikelihood () const
 
int methodProbability () const
 
int methodNeuronNetwork () const
 
int dedxValid () const
 
int tofValid () const
 
int tofeValid () const
 
int tofqValid () const
 
int tofcValid () const
 
int tofcorrValid () const
 
int emcValid () const
 
int mucValid () const
 
void set_path (const char *s_path=0)
 
void set_path (std::string s_path)
 

Static Public Member Functions

static EmcPIDinstance ()
 

Protected Member Functions

int particleIDCalculation ()
 
int neuronPIDCalculation ()
 
int LikelihoodCalculation ()
 
virtual int particleIDCalculation ()=0
 
virtual int LikelihoodCalculation ()=0
 

Additional Inherited Members

- Static Protected Attributes inherited from ParticleIDBase
static std::string path = ""
 

Detailed Description

Definition at line 16 of file EmcPID.h.

Constructor & Destructor Documentation

◆ ~EmcPID()

EmcPID::~EmcPID ( )
inline

Definition at line 21 of file EmcPID.h.

21{;}

Member Function Documentation

◆ calculate()

void EmcPID::calculate ( )
virtual

Implements ParticleIDBase.

Definition at line 153 of file EmcPID.cxx.

153 {
154 if(particleIDCalculation() == 0) m_ndof = 1;
155}
int particleIDCalculation()
Definition: EmcPID.cxx:157

◆ chi()

double EmcPID::chi ( int  n) const
inlinevirtual

Implements ParticleIDBase.

Definition at line 26 of file EmcPID.h.

26{return m_chi[n];}

◆ delta_phi()

double EmcPID::delta_phi ( ) const
inline

Definition at line 34 of file EmcPID.h.

34{return m_delta_phi;}

◆ delta_theta()

double EmcPID::delta_theta ( ) const
inline

Definition at line 33 of file EmcPID.h.

33{return m_delta_theta;}

◆ e3x3()

double EmcPID::e3x3 ( ) const
inline

Definition at line 31 of file EmcPID.h.

31{return m_e3x3;}

◆ e5x5()

double EmcPID::e5x5 ( ) const
inline

Definition at line 32 of file EmcPID.h.

32{return m_e5x5;}

◆ energy()

double EmcPID::energy ( ) const
inline

Definition at line 29 of file EmcPID.h.

29{return m_energy;}

◆ eseed()

double EmcPID::eseed ( ) const
inline

Definition at line 30 of file EmcPID.h.

30{return m_eseed;}

◆ init()

void EmcPID::init ( )
virtual

Implements ParticleIDBase.

Definition at line 95 of file EmcPID.cxx.

95 {
96 for(int i = 0; i < 5; i++) {
97 m_chi[i] = 99.0;
98 m_prob[i] = -1.0;
99 }
100 m_chimin = 99.;
101 m_ndof = 0;
102 m_energy = -99;
103 m_eseed = -99;
104 m_e3x3 = -99;
105 m_e5x5 = -99;
106 m_delta_theta = -99;
107 m_delta_phi = -99;
108 m_secondmoment = -99;
109 m_val_emc = -99;
110 // std::string emc = path + "/share/emc_epimu.txt";
111 /* if(!m_trainTree_emconly){
112 m_trainTree_emconly = new TTree("m_trainTree_emconly","m_trainTree_emconly");
113 m_trainTree_emconly->Branch("ptrk",&m_ptrk,"ptrk/D");
114 m_trainTree_emconly->Branch("pt",&m_pt,"pt/D");
115 m_trainTree_emconly->Branch("type",&m_type,"type/D");
116 m_trainTree_emconly->Branch("energy",&m_energy,"energy/D");
117 m_trainTree_emconly->Branch("eseed",&m_eseed,"eseed/D");
118 m_trainTree_emconly->Branch("e3x3",&m_e3x3,"e3x3/D");
119 m_trainTree_emconly->Branch("e5x5",&m_e5x5,"e5x5/D");
120 m_trainTree_emconly->Branch("secondmoment",&m_secondmoment,"secondmoment/D");
121 m_trainTree_emconly->Branch("delta_phi",&m_delta_phi,"delta_phi/D");
122 m_trainTree_emconly->Branch("delta_theta",&m_delta_theta,"delta_theta/D");
123 }
124 if(!m_mlp_emc){
125 m_mlp_emc = new TMultiLayerPerceptron("ptrk,pt,energy,eseed,e3x3,e5x5,secondmoment,delta_theta,delta_phi:18:type",m_trainTree_emconly);
126 m_mlp_emc->LoadWeights(emc.c_str());
127 }
128 */
129
130 /*if(!m_trainTree_emconly){
131 m_trainTree_emconly = new TTree("m_trainTree_emconly","m_trainTree_emconly");
132 m_trainTree_emconly->Branch("ptrk",&m_ptrk,"ptrk/D");
133 m_trainTree_emconly->Branch("pt",&m_pt,"pt/D");
134 m_trainTree_emconly->Branch("type",&m_type,"type/D");
135 m_trainTree_emconly->Branch("energy",&m_energy,"energy/D");
136 m_trainTree_emconly->Branch("eseed",&m_eseed,"eseed/D");
137 m_trainTree_emconly->Branch("e3x3",&m_e3x3,"e3x3/D");
138 m_trainTree_emconly->Branch("e5x5",&m_e5x5,"e5x5/D");
139 m_trainTree_emconly->Branch("secondmoment",&m_secondmoment,"secondmoment/D");
140 m_trainTree_emconly->Branch("delta_phi",&m_delta_phi,"delta_phi/D");
141 m_trainTree_emconly->Branch("delta_theta",&m_delta_theta,"delta_theta/D");
142 }
143 if(!m_mlp_emc){
144 m_mlp_emc = new TMultiLayerPerceptron("ptrk,pt,energy,eseed,e3x3,e5x5,secondmoment,delta_theta,delta_phi:18:type",m_trainTree_emconly);
145 m_mlp_emc->LoadWeights(emc.c_str());
146 }
147 */
148
149
150
151}

Referenced by ParticleID::init().

◆ instance()

EmcPID * EmcPID::instance ( )
static

Definition at line 23 of file EmcPID.cxx.

23 {
24 if(!m_pointer) m_pointer = new EmcPID();
25 return m_pointer;
26}
Definition: EmcPID.h:16

Referenced by ParticleID::init().

◆ IsPidInfoValid()

bool EmcPID::IsPidInfoValid ( ) const
inlinevirtual

Implements ParticleIDBase.

Definition at line 25 of file EmcPID.h.

25{return (m_ndof> 0);}

◆ LikelihoodCalculation()

int EmcPID::LikelihoodCalculation ( )
inlineprotectedvirtual

Implements ParticleIDBase.

Definition at line 44 of file EmcPID.h.

44{return -1;}

◆ ndof()

int EmcPID::ndof ( ) const
inlinevirtual

Implements ParticleIDBase.

Definition at line 28 of file EmcPID.h.

28{return m_ndof;}

◆ neuronPID()

int EmcPID::neuronPID ( ) const
inline

Definition at line 37 of file EmcPID.h.

37{return -1;}

◆ neuronPIDCalculation()

int EmcPID::neuronPIDCalculation ( )
inlineprotected

Definition at line 43 of file EmcPID.h.

43{return -1;}

◆ pars()

double EmcPID::pars ( int  n) const
inline

Definition at line 38 of file EmcPID.h.

38{return params_emc1[n];}

◆ particleIDCalculation()

int EmcPID::particleIDCalculation ( )
protectedvirtual

Implements ParticleIDBase.

Definition at line 157 of file EmcPID.cxx.

157 {
158 int irc = -1;
159 EvtRecTrack* recTrk = PidTrk();
160 if(!(recTrk->isMdcTrackValid())) return irc;
161 RecMdcTrack* mdcTrk = recTrk->mdcTrack();
162 if (!(recTrk)->isMdcKalTrackValid()) return irc;
163 RecMdcKalTrack* mdcKalTrk = (recTrk)->mdcKalTrack();
165 double ptrk=mdcKalTrk->p();
166 // double ptrk = mdcTrk->p();
167 m_ptrk = ptrk;
168
169 m_pt=mdcKalTrk->pxy();
170 m_pt = m_pt*mdcTrk->charge();
171 // double cost = cos(mdcTrk->theta());
172
173 if(!(recTrk->isExtTrackValid())) return irc;
174 RecExtTrack* extTrk = recTrk->extTrack();
175 if(extTrk->emcVolumeNumber() == -1) return irc;
176 if (!(recTrk->isEmcShowerValid())) return irc;
177 RecEmcShower* emcTrk = recTrk->emcShower();
178
179 m_energy = emcTrk->energy();
180 m_eseed = emcTrk->eSeed();
181 m_e3x3 = emcTrk->e3x3();
182 m_e5x5 = emcTrk->e5x5();
183
184 double m_emc_theta = emcTrk->theta();
185 double m_emc_phi = emcTrk->phi();
186
187 Hep3Vector mc = extTrk->emcPosition();
188 double m_ext_theta = mc.theta();
189 double m_ext_phi = mc.phi();
190
191
192 m_delta_theta = m_emc_theta - m_ext_theta;
193 m_delta_phi = m_emc_phi - m_ext_phi;
194 if(m_delta_phi>1) m_delta_phi=m_delta_phi-6.283;
195 if(m_delta_phi<-1) m_delta_phi=m_delta_phi+6.283;
196
197
198 m_secondmoment = emcTrk->secondMoment()/1000.;
199 m_a20moment=emcTrk->a20Moment();
200 m_latmoment=emcTrk->latMoment();
201 m_a42moment=emcTrk->a42Moment();
202
203 if(emcTrk->energy() <= 0) return irc;
204 //if(emcTrk->energy() > ptrk) return irc;
205
206 /* params_emc1[0] = m_ptrk;
207 params_emc1[1] = m_pt;
208 params_emc1[2] = m_energy;
209 params_emc1[3] = m_eseed;
210 params_emc1[4] = m_e3x3;
211 params_emc1[5] = m_e5x5;
212 params_emc1[6] = m_secondmoment;
213 params_emc1[7] = m_delta_theta;
214 params_emc1[8] = m_delta_phi;*/
215 params_emc1[0] =m_ptrk;
216 params_emc1[1] =m_pt;
217 params_emc1[2] =m_energy;
218 params_emc1[3] =m_eseed;
219 params_emc1[4] =m_e3x3;
220 params_emc1[5] =m_e5x5;
221 params_emc1[6] =m_secondmoment;
222 params_emc1[7] =m_latmoment;
223 params_emc1[8] =m_a20moment;
224 params_emc1[9] =m_a42moment;
225 params_emc1[10] =m_delta_theta;
226 params_emc1[11] =m_delta_phi;
227
228 m_val_emc = m_mlp_emc->Evaluate(0,params_emc1);
229 int pindex = int((m_ptrk-0.2)/0.1);
230 int bindex = int((m_val_emc-0.5)/0.01);
231 if(bindex>300||bindex<0) return irc;
232 if(pindex>17) pindex=17;
233 if(pindex<0) pindex=0;
234 // double bin_pos[3];
235 m_prob[0] = m_e_h[pindex][bindex];
236 m_prob[1] = m_m_h[pindex][bindex];
237 m_prob[2] = m_p_h[pindex][bindex];
238 m_prob[3] = m_p_h[pindex][bindex];
239 m_prob[4] = m_p_h[pindex][bindex];
240 for(int i =0; i<5; i++) {
241 if(m_prob[i]==0) m_prob[i] = 0.001;
242 }
243 //calculate the chisq value using GAUSIN
244 float ppp[5];
245 for(int i=0; i<5; i++) {
246 ppp[i]=0;
247 }
248 for(int j=0; j<=bindex; j++) {
249 ppp[0]+= m_e_h[pindex][j];
250 ppp[1]+= m_m_h[pindex][j];
251 ppp[2]+= m_p_h[pindex][j];
252 }
253 for(int i=0; i<3; i++) {
254 ppp[i]=ppp[i]*0.01;
255 if(ppp[i]>0&&ppp[i]<1) {
256 CALG(ppp[i],m_chi[i]);
257 }
258 if(ppp[i]<=0||ppp[i]>=1) m_chi[i]=-99;
259 }
260 // if(fabs(m_chi[2])==-99)
261 m_chi[3]=m_chi[2];
262 m_chi[4]=m_chi[2];
263
264 m_ndof = 1;
265 irc = 0;
266 return irc;
267}
void CALG(double Px, double &e2)
Definition: calg.cxx:31
double latMoment() const
Definition: DstEmcShower.h:52
double a42Moment() const
Definition: DstEmcShower.h:54
double eSeed() const
Definition: DstEmcShower.h:47
double theta() const
Definition: DstEmcShower.h:38
double e3x3() const
Definition: DstEmcShower.h:48
double phi() const
Definition: DstEmcShower.h:39
double secondMoment() const
Definition: DstEmcShower.h:51
double e5x5() const
Definition: DstEmcShower.h:49
double a20Moment() const
Definition: DstEmcShower.h:53
double energy() const
Definition: DstEmcShower.h:45
const Hep3Vector emcPosition() const
Definition: DstExtTrack.h:126
const int emcVolumeNumber() const
Definition: DstExtTrack.h:132
static void setPidType(PidType pidType)
const double p() const
const double pxy() const
const int charge() const
Definition: DstMdcTrack.h:53
bool isExtTrackValid()
Definition: EvtRecTrack.h:49
RecExtTrack * extTrack()
Definition: EvtRecTrack.h:56
RecEmcShower * emcShower()
Definition: EvtRecTrack.h:58
bool isMdcTrackValid()
Definition: EvtRecTrack.h:43
bool isEmcShowerValid()
Definition: EvtRecTrack.h:47
RecMdcTrack * mdcTrack()
Definition: EvtRecTrack.h:53
EvtRecTrack * PidTrk() const
float ptrk

Referenced by calculate().

◆ prob()

double EmcPID::prob ( int  n) const
inlinevirtual

Implements ParticleIDBase.

Definition at line 27 of file EmcPID.h.

27{return m_prob[n];}

◆ secondmoment()

double EmcPID::secondmoment ( ) const
inline

Definition at line 35 of file EmcPID.h.

35{return m_secondmoment;}

◆ val_emc1()

double EmcPID::val_emc1 ( ) const
inline

Definition at line 36 of file EmcPID.h.

36{return m_val_emc;}

The documentation for this class was generated from the following files: