3#include "ParticleID/TofEPID.h"
6#include "MdcRecEvent/RecMdcTrack.h"
7#include "TofRecEvent/RecTofTrack.h"
8#include "EvtRecEvent/EvtRecTrack.h"
9#include "DstEvent/TofHitStatus.h"
11#include "TofHitStatus.h"
14TofEPID * TofEPID::m_pointer = 0;
17 if(!m_pointer) m_pointer =
new TofEPID();
26 for(
int i = 0; i < 5; i++) {
50 SmartRefVector<RecTofTrack> tofTrackCol = recTrk->
tofTrack();
51 SmartRefVector<RecTofTrack>::iterator it;
53 const std::vector<TTofTrack* >& tofTrackCol = recTrk->
tofTrack();
54 std::vector<TTofTrack* >::const_iterator it;
58 if( tofTrackCol.size()!=1 && tofTrackCol.size()!=3 ) {
return irc; }
61 if( tofTrackCol.size()==1 ) {
62 it = tofTrackCol.begin();
64 bool isRaw = hitst->
is_raw();
65 if( isRaw ) {
return irc; }
70 if( !isReadout || !isCounter || !isCluster ) {
return irc; }
72 else if( tofTrackCol.size()==3 ) {
73 unsigned int icounter = -1;
74 unsigned int inumber = 0;
75 for( it = tofTrackCol.begin(); it != tofTrackCol.end(); it++, inumber++ ) {
77 bool isRaw = hitst->
is_raw();
80 if( !isMRPC ) {
return irc; }
84 if( !isReadout && isCounter && isCluster ) { icounter = inumber; }
86 if( icounter == -1 ) {
return irc; }
87 it = tofTrackCol.begin() + icounter;
91 double tof = (*it)->tof();
92 if( tof <= 0 ) {
return irc; }
93 double path = (*it)->path();
94 m_rhit = (*it)->zrhit();
96 double beta2 = beta*beta;
98 double ptrk = mdcTrk->
p();
99 m_mass2 = ptrk*ptrk*(1.0/beta2 -1.0);
101 double chitemp = 99.;
103 for(
unsigned int i=0; i<5; i++ ) {
104 double texp = (*it)->texp(i);
105 m_offset[i] = tof - texp - (*it)->toffset(i);
106 double sigma_tmp = (*it)->sigma(0);
109 if( i<2 ) { m_sigma[i] = sigma_tmp; }
110 else { m_sigma[i] = 1.2*sigma_tmp; }
112 else { m_sigma[i] = 0.12; }
117 m_chi[i] = m_offset[i]/m_sigma[i];
119 if( fabs(m_chi[i]) < chitemp ) { chitemp = fabs(m_chi[i]); }
121 if( fabs(ppp) > pdftemp ) { pdftemp = fabs(ppp); }
127 for(
unsigned int i=0; i<5; i++ ) {
145 if(ptrk<0.2) ptemp = 0.2;
146 if(ptrk > 2.1) ptemp = 2.1;
147 double plog = log(ptemp);
148 offset = 0.001*(-28.8481+138.159*plog-249.334*plog*plog);
154 if(ptrk<0.2) ptemp = 0.2;
155 if(ptrk > 2.1) ptemp = 2.1;
156 double plog = log(ptemp);
157 offset = 0.001*(-33.6966+1.91915*plog-0.592320*plog*plog);
162 if(ptrk<0.2) ptemp = 0.2;
163 if(ptrk > 2.1) ptemp = 2.1;
164 double plog = log(ptemp);
165 offset = 0.001*(-27.9965 + 1.213 * plog - 2.02740 * plog * plog);
170 if(ptrk<0.3) ptemp = 0.3;
171 if(ptrk > 2.1) ptemp = 2.1;
172 double plog = log(ptemp);
173 offset = 0.001*(-23.4842 -28.7569 * plog + 78.21* plog *plog);
179 if(ptrk<0.4) ptemp = 0.4;
180 if(ptrk > 2.1) ptemp = 2.1;
181 double plog = log(ptemp);
183 offset = 0.001*(-4.854-110.540*plog+99.8732*plog*plog);
185 offset = 0.001*(27.047-145.120*plog+167.014*plog*plog);
205 if(ptrk < 0.2) ptemp = 0.2;
206 if(ptrk > 2.1) ptemp = 2.1;
207 double plog = log(ptemp);
208 sigma = 0.001 * (109.974 +15.2457 * plog + 36.8139 * plog * plog);
215 if(ptrk < 0.2) ptemp = 0.2;
216 if(ptrk > 2.1) ptemp = 2.1;
217 double plog = log(ptemp);
218 sigma = 0.001 * (96.5077 -2.96232 * plog + 3.12910 * plog * plog);
224 if(ptrk < 0.2) ptemp = 0.2;
225 if(ptrk > 2.1) ptemp = 2.1;
226 double plog = log(ptemp);
227 sigma = 0.001 * (105.447 - 2.08044 * plog + 3.44846 * plog * plog);
233 if(ptrk < 0.3) ptemp = 0.3;
234 if(ptrk > 2.1) ptemp = 2.1;
235 double plog = log(ptemp);
236 sigma = 0.001*(88.8806 - 26.8464 * plog + 113.672 * plog * plog);
241 if(ptrk < 0.5) ptemp = 0.5;
242 if(ptrk > 2.1) ptemp = 2.1;
243 double plog = log(ptemp);
245 sigma = 0.001 * (96.3534 -44.1139 * plog + 53.9805 * plog * plog);
247 sigma = 0.001 * (157.345 -98.7357 * plog + 55.1145 * plog * plog);
SmartRefVector< RecTofTrack > tofTrack()
EvtRecTrack * PidTrk() const
double probCalculate(double chi2, int n)
double pdfCalculate(double offset, double sigma)
double sigma(int n) const
double sigmaTofE(int n, int cntr, double ptrk, double rtof, double ph, double charge)
static TofEPID * instance()
int particleIDCalculation()
double offset(int n) const
double offsetTofE(int n, int cntr, double ptrk, double rtof, double ph, double charge)
void setStatus(unsigned int status)