47const double xmass[5] = { 0.000511, 0.105658, 0.139570, 0.493677, 0.938272 };
76 MsgStream log(
msgSvc(), name() );
78 log << MSG::INFO <<
"in initialize()" << endmsg;
82 if ( service(
"THistSvc", m_thsvc ).isFailure() )
84 log << MSG::ERROR <<
"Couldn't get THistSvc" << endmsg;
85 return StatusCode::FAILURE;
88 TH1F* incllambda_mass =
89 new TH1F(
"InclLam_mass",
"INCLUSIVE_LAMBDA_MASS", 150, 1.11, 1.125 );
90 incllambda_mass->GetXaxis()->SetTitle(
"M_{p#pi} (GeV)" );
91 incllambda_mass->GetYaxis()->SetTitle(
"Nentries/0.1MeV/c^{2}" );
92 if ( m_thsvc->regHist(
"/DQAHist/InclLam/InclLam_mass", incllambda_mass ).isFailure() )
93 { log << MSG::ERROR <<
"Couldn't register incllambda_mass" << endmsg; }
97 NTuplePtr nt1(
ntupleSvc(),
"DQAFILE/InclLam" );
98 if ( nt1 ) m_tuple1 = nt1;
101 m_tuple1 =
ntupleSvc()->book(
"DQAFILE/InclLam", CLID_ColumnWiseTuple,
"incllam Ntuple" );
104 status = m_tuple1->addItem(
"npi", m_npi );
105 status = m_tuple1->addItem(
"np", m_np );
106 status = m_tuple1->addItem(
"lxyz", m_lxyz );
107 status = m_tuple1->addItem(
"ctau", m_ctau );
108 status = m_tuple1->addItem(
"elxyz", m_elxyz );
109 status = m_tuple1->addItem(
"lamchi", m_chis );
110 status = m_tuple1->addItem(
"mlamraw", m_lamRawMass );
111 status = m_tuple1->addItem(
"plam", m_plam );
115 log << MSG::ERROR <<
" Cannot book N-tuple:" << long( m_tuple1 ) << endmsg;
116 return StatusCode::FAILURE;
123 log << MSG::INFO <<
"successfully return from initialize()" << endmsg;
124 return StatusCode::SUCCESS;
129 StatusCode sc = StatusCode::SUCCESS;
131 MsgStream log(
msgSvc(), name() );
132 log << MSG::INFO <<
"in execute()" << endmsg;
137 setFilterPassed(
false );
141 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc(),
"/Event/EventHeader" );
145 Vint ilam, ip, ipi, iGood;
156 for (
int i = 0; i < evtRecEvent->totalCharged(); i++ )
159 if ( !( *itTrk )->isMdcTrackValid() )
continue;
161 if ( fabs( mdcTrk->
z() ) >= m_vz0cut )
continue;
162 if ( mdcTrk->
r() >= m_vr0cut )
continue;
163 iGood.push_back( i );
164 TotCharge += mdcTrk->
charge();
169 int nGood = iGood.size();
175 if ( ( nGood < 2 ) || ( TotCharge != 0 ) )
return sc;
182 for (
int i = 0; i < nGood; i++ )
195 if ( !( *itTrk )->isMdcKalTrackValid() )
continue;
198 if ( mdcKalTrk->
charge() == 0 )
continue;
203 ipi.push_back( iGood[i] );
204 HepLorentzVector ptrk;
205 ptrk.setPx( mdcKalTrk->
px() );
206 ptrk.setPy( mdcKalTrk->
py() );
207 ptrk.setPz( mdcKalTrk->
pz() );
208 double p3 = ptrk.mag();
209 ptrk.setE( sqrt( p3 * p3 +
mpi *
mpi ) );
210 ppi.push_back( ptrk );
215 ip.push_back( iGood[i] );
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 +
mp *
mp ) );
222 pp.push_back( ptrk );
228 int npi = ipi.size();
232 if ( npi < 1 || np < 1 )
return sc;
242 HepSymMatrix Evx( 3, 0 );
253 int ipion = -1, iproton = -1;
258 for (
unsigned int i1 = 0; i1 < ipi.size(); i1++ )
260 RecMdcKalTrack* piTrk = ( *( evtRecTrkCol->begin() + ipi[i1] ) )->mdcKalTrack();
264 for (
unsigned int i2 = 0; i2 < ip.size(); i2++ )
266 RecMdcKalTrack* protonTrk = ( *( evtRecTrkCol->begin() + ip[i2] ) )->mdcKalTrack();
275 if ( NCharge != 0 )
continue;
281 if ( !( vtxfit0->
Fit( 0 ) ) )
continue;
288 if ( !vtxfit->
Fit() )
continue;
293 if ( vtxfit->
chisq() > chi )
continue;
295 delm = fabs( ( vtxfit->
p4par() ).m() -
mlam );
296 chi = vtxfit->
chisq();
304 if ( ipion == -1 || iproton == -1 )
return sc;
307 RecMdcKalTrack* pionTrk = ( *( evtRecTrkCol->begin() + ipion ) )->mdcKalTrack();
311 RecMdcKalTrack* protonTrk = ( *( evtRecTrkCol->begin() + iproton ) )->mdcKalTrack();
318 if ( !( vtxfit0->
Fit( 0 ) ) )
return sc;
325 if ( !vtxfit->
Fit() )
return sc;
327 m_lamRawMass = vtxfit->
p4par().m();
328 m_ctau = vtxfit->
ctau();
331 m_chis = vtxfit->
chisq();
332 m_plam = vtxfit->
p4par().rho();
338 if ( m_thsvc->getHist(
"/DQAHist/InclLam/InclLam_mass", h ).isSuccess() )
339 { h->Fill( m_lamRawMass ); }
340 else { log << MSG::ERROR <<
"Couldn't retrieve incllam_mass" << endmsg; }
349 ( *( evtRecTrkCol->begin() + ipion ) )->tagPion();
350 ( *( evtRecTrkCol->begin() + iproton ) )->tagProton();
356 ( *( evtRecTrkCol->begin() + ipion ) )->setQuality( 1 );
357 ( *( evtRecTrkCol->begin() + iproton ) )->setQuality( 1 );
362 setFilterPassed(
true );
364 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
double probProton() const