61 MsgStream log(
msgSvc(), name() );
63 log << MSG::INFO <<
"in initialize()" << endmsg;
67 if ( service(
"THistSvc", m_thsvc ).isFailure() )
69 log << MSG::ERROR <<
"Couldn't get THistSvc" << endmsg;
70 return StatusCode::FAILURE;
73 TH1F* inclkstar_mass =
new TH1F(
"InclKstar_mass",
"INCLUSIVE_Kstar_MASS", 65, 0.65, 1.3 );
74 inclkstar_mass->GetXaxis()->SetTitle(
"M_{K#pi} (GeV)" );
75 inclkstar_mass->GetYaxis()->SetTitle(
"Nentries/10MeV/c^{2}" );
77 if ( m_thsvc->regHist(
"/DQAHist/InclKstar/InclKstar_mass", inclkstar_mass ).isFailure() )
78 { log << MSG::ERROR <<
"Couldn't register InclKstar_mass" << endmsg; }
81 NTuplePtr nt2(
ntupleSvc(),
"DQAFILE/InclKstar" );
82 if ( nt2 ) m_tuple2 = nt2;
86 ntupleSvc()->book(
"DQAFILE/InclKstar", CLID_ColumnWiseTuple,
"inclkstar Ntuple" );
89 status = m_tuple2->addItem(
"nkaonm", m_nkm );
90 status = m_tuple2->addItem(
"nkaonp", m_nkp );
91 status = m_tuple2->addItem(
"npionp", m_npip );
92 status = m_tuple2->addItem(
"npionm", m_npim );
93 status = m_tuple2->addItem(
"ncharge", m_ncharge );
94 status = m_tuple2->addItem(
"difchikp", m_difchikp );
95 status = m_tuple2->addItem(
"difchikm", m_difchikm );
96 status = m_tuple2->addItem(
"mkstarkp", m_kstarkp );
97 status = m_tuple2->addItem(
"mkstarkm", m_kstarkm );
98 status = m_tuple2->addItem(
"mkstar", m_mkstar );
99 status = m_tuple2->addItem(
"pkstar", m_pkstar );
103 log << MSG::ERROR <<
" Cannot book N-tuple:" << long( m_tuple2 ) << endmsg;
104 return StatusCode::FAILURE;
111 log << MSG::INFO <<
"successfully return from initialize()" << endmsg;
112 return StatusCode::SUCCESS;
117 StatusCode sc = StatusCode::SUCCESS;
119 MsgStream log(
msgSvc(), name() );
120 log << MSG::INFO <<
"in execute()" << endmsg;
125 setFilterPassed(
false );
129 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc(),
"/Event/EventHeader" );
133 Vint iGood, ikm, ikp, ipip, ipim, iGam;
141 Vp4 ppip, ppim, pkm, pkp;
148 for (
int i = 0; i < evtRecEvent->totalCharged(); i++ )
151 if ( !( *itTrk )->isMdcTrackValid() )
continue;
153 if ( fabs( mdcTrk->
z() ) >= m_vz0cut )
continue;
154 if ( mdcTrk->
r() >= m_vr0cut )
continue;
155 iGood.push_back( i );
156 TotCharge += mdcTrk->
charge();
161 int nGood = iGood.size();
167 if ( ( nGood < 2 ) || ( TotCharge != 0 ) )
return sc;
175 for (
int i = 0; i < nGood; i++ )
190 if ( !( *itTrk )->isMdcKalTrackValid() )
continue;
195 HepLorentzVector ptrk;
196 ptrk.setPx( mdcKalTrk->
px() );
197 ptrk.setPy( mdcKalTrk->
py() );
198 ptrk.setPz( mdcKalTrk->
pz() );
199 double p3 = ptrk.mag();
200 ptrk.setE( sqrt( p3 * p3 +
mk *
mk ) );
201 if ( mdcKalTrk->
charge() > 0 )
203 ikp.push_back( iGood[i] );
204 pkp.push_back( ptrk );
208 ikm.push_back( iGood[i] );
209 pkm.push_back( ptrk );
216 HepLorentzVector ptrk;
217 ptrk.setPx( mdcKalTrk->
px() );
218 ptrk.setPy( mdcKalTrk->
py() );
219 ptrk.setPz( mdcKalTrk->
pz() );
220 double p3 = ptrk.mag();
221 ptrk.setE( sqrt( p3 * p3 +
mpi *
mpi ) );
222 if ( mdcKalTrk->
charge() > 0 )
224 ipip.push_back( iGood[i] );
225 ppip.push_back( ptrk );
229 ipim.push_back( iGood[i] );
230 ppim.push_back( ptrk );
234 int npip = ipip.size();
235 int npim = ipim.size();
236 int nkm = ikm.size();
237 int nkp = ikp.size();
246 if ( npip < 1 && npim < 1 )
return sc;
247 if ( nkp < 1 && nkm < 1 )
return sc;
255 HepLorentzVector pkstar, pkstar1, ppi1, ppi2, pTot;
259 double difchi0 = 99999.0;
263 for (
int i = 0; i < npim; i++ )
265 for (
int j = 0; j < nkp; j++ )
267 pkstar = ppim[i] + pkp[j];
268 double difchi = fabs( pkstar.m() -
mkstar0 );
269 if ( difchi < difchi0 )
278 m_difchikp = difchi0;
280 if ( ixpim != -1 ) m_kstarkp = ( ppim[ixpim] + pkp[ixkp] ).m();
282 double difchi1 = 99999.0;
286 for (
int ii = 0; ii < npip; ii++ )
288 for (
int jj = 0; jj < nkm; jj++ )
290 pkstar1 = ppip[ii] + pkm[jj];
291 double difchi2 = fabs( pkstar1.m() -
mkstar0 );
292 if ( difchi2 < difchi1 )
301 m_difchikm = difchi1;
303 if ( ixpip != -1 ) m_kstarkm = ( ppip[ixpip] + pkm[ixkm] ).m();
306 if ( ixpip == -1 && ixpim == -1 )
return sc;
308 if ( difchi0 < difchi1 ) { pTot = ppim[ixpim] + pkp[ixkp]; }
309 else { pTot = ppip[ixpip] + pkm[ixkm]; }
311 m_pkstar = pTot.rho();
315 if ( m_thsvc->getHist(
"/DQAHist/InclKstar/InclKstar_mass", h ).isSuccess() )
316 { h->Fill( m_mkstar ); }
317 else { log << MSG::ERROR <<
"Couldn't retrieve InclKstar_mass" << endmsg; }
319 m_tuple2->write().ignore();
327 ( *( evtRecTrkCol->begin() + ipim[ixpim] ) )->tagPion();
328 ( *( evtRecTrkCol->begin() + ikp[ixkp] ) )->tagKaon();
329 ( *( evtRecTrkCol->begin() + ipim[ixpim] ) )->setQuality( 3 );
330 ( *( evtRecTrkCol->begin() + ikp[ixkp] ) )->setQuality( 3 );
336 ( *( evtRecTrkCol->begin() + ipip[ixpip] ) )->tagPion();
337 ( *( evtRecTrkCol->begin() + ikm[ixkm] ) )->tagKaon();
338 ( *( evtRecTrkCol->begin() + ipip[ixpip] ) )->setQuality( 3 );
339 ( *( evtRecTrkCol->begin() + ikm[ixkm] ) )->setQuality( 3 );
344 setFilterPassed(
true );
346 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