81 MsgStream log(
msgSvc(), name() );
83 log << MSG::INFO <<
"in initialize()" << endmsg;
90 readrunEcm.open(
"../share/psipp_ecms_calrunbyrun_runno_3648runs.dat" );
91 cout <<
"readrunEcm = " << readrunEcm.is_open() << endl;
92 for (
int i = 0; i < 3467; i++ )
94 readrunEcm >> p_run[i];
95 readrunEcm >> p_Ecm[i];
98 NTuplePtr nt1(
ntupleSvc(),
"FILE1/tag" );
99 if ( nt1 ) m_tuple1 = nt1;
102 m_tuple1 =
ntupleSvc()->book(
"FILE1/tag", CLID_ColumnWiseTuple,
"tag N-Tuple example" );
105 status = m_tuple1->addItem(
"tagmode", m_tagmode );
106 status = m_tuple1->addItem(
"mass_bc", m_mass_bc );
107 status = m_tuple1->addItem(
"delE_tag", m_delE_tag );
109 status = m_tuple1->addItem(
"cosmic_ok", m_cosmic_ok );
110 status = m_tuple1->addItem(
"EGam_max_0", m_EGam_max_0 );
111 status = m_tuple1->addItem(
"nGood", m_nGood );
112 status = m_tuple1->addItem(
"nGam", m_nGam );
113 status = m_tuple1->addItem(
"runNo", m_runNo );
114 status = m_tuple1->addItem(
"event", m_event );
118 log << MSG::ERROR <<
" Cannot book N-tuple:" << long( m_tuple1 ) << endmsg;
119 return StatusCode::FAILURE;
123 log << MSG::INFO <<
"successfully return from initialize()" << endmsg;
124 return StatusCode::SUCCESS;
133 MsgStream log(
msgSvc(), name() );
135 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc(),
"/Event/EventHeader" );
136 int runNo = eventHeader->runNumber();
137 int event = eventHeader->eventNumber();
147 double Ebeam = 3.773 / 2.0;
151 for (
int i = 0; i < 3467; i++ )
153 if (
runNo == p_run[i] ) { Ebeam = p_Ecm[i] / 2.0; }
165 if (
nD0 % 1000 == 0 )
166 cout <<
"SD0TagAlg-13-11-15pp = " <<
nD0 <<
" " <<
runNo <<
" " <<
event <<
" "
167 << Ebeam * 2 << endl;
169 Hep3Vector xorigin( 0, 0, 0 );
171 Gaudi::svcLocator()->service(
"VertexDbSvc", vtxsvc );
176 xorigin.setX( dbv[0] );
177 xorigin.setY( dbv[1] );
178 xorigin.setZ( dbv[2] );
183 iCharge_good.clear();
184 for (
int i = 0; i < evtRecEvent->totalCharged(); i++ )
187 if ( !( *itTrk )->isMdcTrackValid() )
continue;
190 HepVector a = mdcTrk->
helix();
191 HepSymMatrix Ea = mdcTrk->
err();
192 HepPoint3D point0( 0., 0., 0. );
193 HepPoint3D IP( xorigin[0], xorigin[1], xorigin[2] );
194 VFHelix helixip( point0, a, Ea );
196 HepVector vecipa = helixip.
a();
197 double Rvxy0 = fabs( vecipa[0] );
198 double Rvz0 = vecipa[3];
199 double costheta =
cos( mdcTrk->
theta() );
201 if ( fabs( Rvxy0 ) >= 1.0 )
continue;
202 if ( fabs( Rvz0 ) >= 10.0 )
continue;
203 if ( fabs( costheta ) >= 0.930 )
continue;
204 iCharge_good.push_back( i );
210 for (
int i = evtRecEvent->totalCharged(); i < evtRecEvent->totalTracks(); i++ )
213 if ( !( *itTrk )->isEmcShowerValid() )
continue;
227 int emctdc = emcTrk->
time();
228 if ( emctdc > 14 || emctdc < 0 )
continue;
230 double eraw = emcTrk->
energy();
231 double theta = emcTrk->
theta();
233 if ( fabs(
cos( theta ) ) < 0.80 && eraw > 0.025 ) { Module = 1; }
234 if ( fabs(
cos( theta ) ) > 0.86 && fabs(
cos( theta ) ) < 0.92 && eraw > 0.05 )
236 if ( Module == 0 )
continue;
237 iGam.push_back( ( *itTrk )->trackId() );
245 double tagmass,
ebeam, tagmode, ksmass, dlte;
252 HepLorentzVector tagp;
254 double mass_bc_temp, mass_kf_temp, kf_chi2_temp, mks_temp, mpi0_temp, ptag_temp;
255 int Charge_candidate_D = 0;
256 double EGam_max_0 = 0;
258 for (
int i1 = 0; i1 < 2; i1++ )
260 if ( Seperate_Charge == 2 )
262 Charge_candidate_D = Charge_default;
265 if ( Seperate_Charge == 1 ) { Charge_candidate_D = pow( -1, i1 ); }
266 if ( Seperate_Charge == 0 )
268 Charge_candidate_D = 0;
272 for (
int i = 0; i < 15; i++ )
275 int mdslct = pow( 2., i );
277 sing.
Mdset( event, evtRecTrkCol, iCharge_good, iGam, mdslct, Ebeam, PID_flag,
278 Charge_candidate_D );
289 if ( (
abs( tagmode ) == 11 ||
abs( tagmode ) == 15 ||
abs( tagmode ) == 19 ) )
292 for (
int i = evtRecEvent->totalCharged(); i < evtRecEvent->totalTracks(); i++ )
295 int itrk = ( *itTrk )->trackId();
296 if ( !( *itTrk )->isEmcShowerValid() )
continue;
299 int emctdc = emcTrk->
time();
300 if ( emctdc > 14 || emctdc < 0 )
continue;
302 Hep3Vector emcpos( emcTrk->
x(), emcTrk->
y(), emcTrk->
z() );
304 for (
int j = 0; j < tagtrk.size(); j++ )
307 if ( !( *jtTrk )->isExtTrackValid() )
continue;
311 double angd = extpos.angle( emcpos );
312 if ( angd < dang ) dang = angd;
314 dang = dang * 180 / ( CLHEP::pi );
315 if ( fabs( dang ) < 20. )
continue;
317 double eraw = emcTrk->
energy();
318 if ( eraw > EGam_max_0 ) EGam_max_0 = eraw;
322 m_cosmic_ok = cosmic_ok;
323 m_EGam_max_0 = EGam_max_0;
324 m_nGood = iCharge_good.size();
325 m_nGam = iGam.size();
343 return StatusCode::SUCCESS;