34const double xmass[5] = { 0.000511, 0.105658, 0.139570, 0.493677, 0.938272 };
62 MsgStream log(
msgSvc(), name() );
64 log << MSG::INFO <<
"in initialize()" << endmsg;
68 if ( service(
"THistSvc", m_thsvc ).isFailure() )
70 log << MSG::ERROR <<
"Couldn't get THistSvc" << endmsg;
71 return StatusCode::FAILURE;
74 TH1F* inclks_mass =
new TH1F(
"InclKs_mass",
"INCLUSIVE_Ks_MASS", 70, 0.46, 0.53 );
75 inclks_mass->GetXaxis()->SetTitle(
"M_{#pi#pi} (GeV)" );
76 inclks_mass->GetYaxis()->SetTitle(
"Nentries/0.1MeV/c^{2}" );
77 if ( m_thsvc->regHist(
"/DQAHist/InclKs/InclKs_mass", inclks_mass ).isFailure() )
78 { log << MSG::ERROR <<
"Couldn't register inclks_mass" << endmsg; }
82 NTuplePtr nt1(
ntupleSvc(),
"DQAFILE/InclKs" );
83 if ( nt1 ) m_tuple1 = nt1;
86 m_tuple1 =
ntupleSvc()->book(
"DQAFILE/InclKs", CLID_ColumnWiseTuple,
"ksklx Ntuple" );
89 status = m_tuple1->addItem(
"npip", m_npip );
90 status = m_tuple1->addItem(
"npim", m_npim );
91 status = m_tuple1->addItem(
"ctau", m_ctau );
92 status = m_tuple1->addItem(
"lxyz", m_lxyz );
93 status = m_tuple1->addItem(
"elxyz", m_elxyz );
94 status = m_tuple1->addItem(
"kschi", m_chis );
95 status = m_tuple1->addItem(
"mksraw", m_ksRawMass );
96 status = m_tuple1->addItem(
"pk0", m_pk0 );
100 log << MSG::ERROR <<
" Cannot book N-tuple:" << long( m_tuple1 ) << endmsg;
101 return StatusCode::FAILURE;
109 log << MSG::INFO <<
"successfully return from initialize()" << endmsg;
110 return StatusCode::SUCCESS;
115 StatusCode sc = StatusCode::SUCCESS;
117 MsgStream log(
msgSvc(), name() );
118 log << MSG::INFO <<
"in execute()" << endmsg;
123 setFilterPassed(
false );
127 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc(),
"/Event/EventHeader" );
131 Vint iks, ipip, ipim, iGood;
142 for (
int i = 0; i < evtRecEvent->totalCharged(); i++ )
145 if ( !( *itTrk )->isMdcTrackValid() )
continue;
147 if ( fabs( mdcTrk->
z() ) >= m_vz0cut )
continue;
148 if ( mdcTrk->
r() >= m_vr0cut )
continue;
149 iGood.push_back( i );
150 TotCharge += mdcTrk->
charge();
155 int nGood = iGood.size();
161 if ( ( nGood < 2 ) || ( TotCharge != 0 ) )
return sc;
168 for (
int i = 0; i < nGood; i++ )
182 if ( !( *itTrk )->isMdcKalTrackValid() )
continue;
189 HepLorentzVector ptrk;
190 ptrk.setPx( mdcKalTrk->
px() );
191 ptrk.setPy( mdcKalTrk->
py() );
192 ptrk.setPz( mdcKalTrk->
pz() );
193 double p3 = ptrk.mag();
194 ptrk.setE( sqrt( p3 * p3 +
xmass[2] *
xmass[2] ) );
196 if ( mdcKalTrk->
charge() > 0 )
198 ipip.push_back( iGood[i] );
199 ppip.push_back( ptrk );
203 ipim.push_back( iGood[i] );
204 ppim.push_back( ptrk );
209 int npip = ipip.size();
210 int npim = ipim.size();
214 if ( npip < 1 || npim < 1 )
return sc;
226 HepSymMatrix Evx( 3, 0 );
246 int ip1 = -1, ip2 = -1;
251 for (
int i1 = 0; i1 < ipip.size(); i1++ )
253 RecMdcKalTrack* pipTrk = ( *( evtRecTrkCol->begin() + ipip[i1] ) )->mdcKalTrack();
257 for (
int i2 = 0; i2 < ipim.size(); i2++ )
259 RecMdcKalTrack* pimTrk = ( *( evtRecTrkCol->begin() + ipim[i2] ) )->mdcKalTrack();
267 if ( !( vtxfit0->
Fit( 0 ) ) )
continue;
273 if ( !vtxfit->
Fit() )
continue;
274 chi = vtxfit->
chisq();
277 if ( chi > chisq )
continue;
278 delm = fabs( ( vtxfit->
p4par().m() ) -
mk0 );
287 if ( ip1 == -1 || ip2 == -1 )
return sc;
290 RecMdcKalTrack* pi1Trk = ( *( evtRecTrkCol->begin() + ip1 ) )->mdcKalTrack();
294 RecMdcKalTrack* pi2Trk = ( *( evtRecTrkCol->begin() + ip2 ) )->mdcKalTrack();
301 if ( !( vtxfit0->
Fit( 0 ) ) )
return sc;
307 if ( !vtxfit->
Fit() )
return sc;
309 m_ksRawMass = vtxfit->
p4par().m();
310 m_ctau = vtxfit->
ctau();
313 m_chis = vtxfit->
chisq();
314 m_pk0 = vtxfit->
p4par().rho();
317 if ( m_lxyz > 0.4 && m_chis < 20. )
321 if ( m_thsvc->getHist(
"/DQAHist/InclKs/InclKs_mass", h ).isSuccess() )
322 { h->Fill( m_ksRawMass ); }
323 else { log << MSG::ERROR <<
"Couldn't retrieve inclks_mass" << endmsg; }
326 m_tuple1->write().ignore();
333 ( *( evtRecTrkCol->begin() + ip1 ) )->tagPion();
334 ( *( evtRecTrkCol->begin() + ip2 ) )->tagPion();
340 ( *( evtRecTrkCol->begin() + ip1 ) )->setQuality( 2 );
341 ( *( evtRecTrkCol->begin() + ip2 ) )->setQuality( 2 );
345 setFilterPassed(
true );
347 return StatusCode::SUCCESS;
void setChiMinCut(const double chi=4)
void setRecTrack(EvtRecTrack *trk)
void setMethod(const int method)
void identify(const int pidcase)
void usePidSys(const int pidsys)
static ParticleID * instance()
bool IsPidInfoValid() const