99 cout <<
" please use ParticleID::calculate(run) ! " << endl;
108 IDataProviderSvc* m_eventSvc;
109 Gaudi::svcLocator()->service(
"EventDataSvc", m_eventSvc,
true );
111 SmartDataPtr<Event::EventHeader> eventHeaderpid( m_eventSvc,
"/Event/EventHeader" );
112 int runpid = eventHeaderpid->runNumber();
113 int eventpid = eventHeaderpid->eventNumber();
131 if ( m_pidcase == 0 ) { m_pidcase =
all(); }
133 if ( IsDedxInfoUsed() )
137 m_dedxpid->setRunNo( runpid );
138 m_dedxpid->setNhitCutDx( nhitcutpid );
139 m_dedxpid->setRecTrack( recTrk );
142 m_dedxpid->calculate();
146 if ( IsTofInfoUsed() | IsTof1InfoUsed() | IsTof2InfoUsed() | IsTofCInfoUsed() )
148 if ( IsTofCInfoUsed() )
152 m_tofcpid->setRunNo( runpid );
153 m_tofcpid->setRecTrack( recTrk );
156 m_tofcpid->calculate();
162 m_tofpid->setRecTrack( recTrk );
165 m_tofpid->calculate();
170 if ( IsTofCorrInfoUsed() )
173 m_tofcorrpid->setRunNo( runpid );
174 m_tofcorrpid->init();
175 m_tofcorrpid->setRecTrack( recTrk );
176 m_tofcorrpid->setChiMinCut(
chiMinCut() );
177 m_tofcorrpid->setChiMaxCut(
chiMaxCut() );
179 m_tofcorrpid->calculate();
205 if ( IsTofQInfoUsed() )
209 m_tofqpid->setRecTrack( recTrk );
211 m_tofqpid->calculate();
215 if ( IsTofEInfoUsed() && ( !IsTofCorrInfoUsed() ) )
219 m_tofepid->setRecTrack( recTrk );
222 m_tofepid->calculate();
225 if ( IsEmcInfoUsed() )
229 m_emcpid->setRecTrack( recTrk );
231 m_emcpid->calculate();
235 if ( IsMucInfoUsed() )
239 m_mucpid->setRecTrack( recTrk );
241 m_mucpid->calculate();
257int ParticleID ::particleIDCalculation() {
263 if ( !valid )
return irc;
267 for (
int i = 0; i < 5; i++ )
282 if ( IsDedxInfoUsed() )
287 for (
int i = 0; i < 5; i++ )
289 if ( pidcase[i] && ( fabs(
chiDedx( i ) ) < m_dedxpid->chiMinCut() ) )
290 if ( !okpid ) okpid =
true;
295 for (
int i = 0; i < 5; i++ ) chisq[i] +=
chiDedx( i ) *
chiDedx( i );
303 if ( IsTofInfoUsed() | IsTof1InfoUsed() | IsTof2InfoUsed() | IsTofCInfoUsed() )
305 if ( IsTofCInfoUsed() )
310 for (
int i = 0; i < 5; i++ )
312 if ( pidcase[i] && ( fabs(
chiTofC( i ) ) < m_tofcpid->chiMinCut() ) )
313 if ( !okpid ) okpid =
true;
318 for (
int i = 0; i < 5; i++ ) chisq[i] +=
chiTofC( i ) *
chiTofC( i );
327 for (
int i = 0; i < 5; i++ )
329 if ( pidcase[i] && ( fabs(
chiTof( i ) ) < m_tofpid->chiMinCut() ) )
330 if ( !okpid ) okpid =
true;
335 for (
int i = 0; i < 5; i++ ) chisq[i] +=
chiTof( i ) *
chiTof( i );
343 if ( IsTofEInfoUsed() )
348 for (
int i = 0; i < 5; i++ )
350 if ( pidcase[i] && ( fabs(
chiTofE( i ) ) < m_tofepid->chiMinCut() ) )
351 if ( !okpid ) okpid =
true;
356 for (
int i = 0; i < 5; i++ ) chisq[i] +=
chiTofE( i ) *
chiTofE( i );
364 if ( IsTofCorrInfoUsed() )
369 for (
int i = 0; i < 5; i++ )
371 if ( pidcase[i] && (
chiTofCorr( i ) < m_tofcorrpid->chiMaxCut() ) &&
372 (
chiTofCorr( i ) > ( 0.0 - m_tofcorrpid->chiMinCut() ) ) )
374 if ( !okpid ) okpid =
true;
388 if ( IsTofQInfoUsed() )
393 for (
int i = 0; i < 5; i++ )
395 if ( pidcase[i] && ( fabs(
chiTofQ( i ) ) < m_tofqpid->chiMinCut() ) )
396 if ( !okpid ) okpid =
true;
401 for (
int i = 0; i < 5; i++ ) chisq[i] +=
chiTofQ( i ) *
chiTofQ( i );
407 if ( IsMucInfoUsed() )
412 for (
int i = 0; i < 5; i++ )
414 if ( pidcase[i] && ( fabs(
chiMuc( i ) ) < m_mucpid->chiMinCut() ) )
415 if ( !okpid ) okpid =
true;
420 for (
int i = 0; i < 5; i++ ) chisq[i] +=
chiMuc( i ) *
chiMuc( i );
426 if ( IsEmcInfoUsed() )
431 for (
int i = 0; i < 5; i++ )
433 if ( pidcase[i] && ( fabs(
chiEmc( i ) ) < m_emcpid->chiMinCut() ) )
434 if ( !okpid ) okpid =
true;
439 for (
int i = 0; i < 5; i++ ) chisq[i] +=
chiEmc( i ) *
chiEmc( i );
444 if ( m_ndof <= 0 )
return irc;
446 for (
int i = 0; i < 5; i++ )
448 m_chisq[i] = chisq[i];
462 if ( !valid )
return irc;
465 for (
int i = 0; i < 5; i++ )
477 for (
int i = 0; i < 5; i++ )
479 if ( pidcase[i] == 0 )
pdf[i] = 0;
485 if ( IsDedxInfoUsed() )
490 for (
int i = 0; i < 5; i++ )
494 if ( !okpid ) okpid =
true;
499 for (
int i = 0; i < 5; i++ ) {
pdf[i] *=
pdfDedx( i ); }
507 if ( IsTofInfoUsed() | IsTof1InfoUsed() | IsTof2InfoUsed() | IsTofCInfoUsed() )
509 if ( IsTofCInfoUsed() )
515 for (
int i = 0; i < 5; i++ )
519 if ( !okpid ) okpid =
true;
524 for (
int i = 0; i < 5; i++ ) {
pdf[i] *=
pdfTofC( i ); }
534 for (
int i = 0; i < 5; i++ )
538 if ( !okpid ) okpid =
true;
543 for (
int i = 0; i < 5; i++ ) {
pdf[i] *=
pdfTof( i ); }
551 if ( IsTofEInfoUsed() )
556 for (
int i = 0; i < 5; i++ )
560 if ( !okpid ) okpid =
true;
573 if ( IsTofCorrInfoUsed() )
578 for (
int i = 0; i < 5; i++ )
582 if ( !okpid ) okpid =
true;
599 for (
int i = 0; i < 5; i++ )
602 if ( !okpid ) okpid =
true;
607 for (
int i = 0; i < 5; i++ )
pdf[i] *=
pdfTofQ( i );
614 if ( IsEmcInfoUsed() )
619 for (
int i = 0; i < 5; i++ )
621 if ( pidcase[i] &&
pdfEmc( i ) > 0 )
622 if ( !okpid ) okpid =
true;
627 for (
int i = 0; i < 5; i++ ) {
pdf[i] *=
pdfEmc( i ); }
631 if ( IsMucInfoUsed() )
636 for (
int i = 0; i < 5; i++ )
638 if ( pidcase[i] &&
pdfMuc( i ) > 0 )
639 if ( !okpid ) okpid =
true;
644 for (
int i = 0; i < 5; i++ ) {
pdf[i] *=
pdfMuc( i ); }
649 if ( m_ndof <= 0 )
return irc;
650 for (
int i = 0; i < 5; i++ )
653 m_TotalLikelihood +=
pdf[i];
655 for (
int i = 0; i < 5; i++ ) { m_likelihoodfraction[i] =
pdf[i] / m_TotalLikelihood; }
EvtRecTrack * PidTrk() const
double probCalculate(double chi2, int n)
double pdfCalculate(double offset, double sigma)
double pdfMinSigmaCut() const
int methodNeuronNetwork() const
void setChiMaxCut(const double chi=6)
void setChiMinCut(const double chi=4)
double chiMuc(int n) const
bool IsTofEInfoValid() const
bool IsEmcInfoValid() const
int LikelihoodCalculation()
double chiTofE(int n) const
bool IsTofCorrInfoValid() const
bool IsTofCInfoValid() const
bool IsTofInfoValid() const
double chiTofQ(int n) const
bool IsTofQInfoValid() const
int particleIDCalculation()
static ParticleID * instance()
bool IsDedxInfoValid() const
double chiTofC(int n) const
double chiEmc(int n) const
bool IsMucInfoValid() const
double chiTof(int n) const
double chiTofCorr(int n) const
double chiDedx(int n) const