73 MsgStream log(
msgSvc(), name() );
74 log << MSG::INFO <<
"in initialize()" << endmsg;
80 NTuplePtr nt1(
ntupleSvc(),
"FILEBbEmc/bbEmc" );
81 if ( nt1 ) m_tuple1 = nt1;
84 m_tuple1 =
ntupleSvc()->book(
"FILEBbEmc/bbEmc", CLID_ColumnWiseTuple,
85 "BbEmc N-Tuple example" );
88 status = m_tuple1->addItem(
"run", m_run );
89 status = m_tuple1->addItem(
"event", m_event );
90 status = m_tuple1->addItem(
"numCtrk", m_num_Ctrk );
91 status = m_tuple1->addItem(
"numNtrk", m_num_Ntrk );
92 status = m_tuple1->addItem(
"numGtrk", m_num_Gtrk );
94 status = m_tuple1->addItem(
"trigindex", m_trig_index, 0, 48 );
95 status = m_tuple1->addIndexedItem(
"trigcond", m_trig_index, m_trig_cond );
96 status = m_tuple1->addIndexedItem(
"trigchan", m_trig_index, m_trig_chan );
97 status = m_tuple1->addItem(
"timewindow", m_trig_timewindow );
98 status = m_tuple1->addItem(
"timetype", m_trig_timetype );
99 status = m_tuple1->addItem(
"hlttype", m_hlt_type );
101 status = m_tuple1->addItem(
"estime", m_est_start );
102 status = m_tuple1->addItem(
"status", m_est_status );
103 status = m_tuple1->addItem(
"quality", m_est_quality );
105 status = m_tuple1->addItem(
"dang", m_dang );
106 status = m_tuple1->addItem(
"index", m_index, 0, 2 );
107 status = m_tuple1->addIndexedItem(
"theta", m_index, m_theta );
108 status = m_tuple1->addIndexedItem(
"phi", m_index, m_phi );
109 status = m_tuple1->addIndexedItem(
"ene", m_index, m_ene );
113 log << MSG::ERROR <<
"Cannot book N-tuple theone" << endmsg;
114 return StatusCode::FAILURE;
118 log << MSG::INFO <<
"end initialize()" << endmsg;
122 return StatusCode::SUCCESS;
128 MsgStream log(
msgSvc(), name() );
129 log << MSG::INFO <<
"in execute()" << endmsg;
133 setFilterPassed(
false );
135 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc(),
"/Event/EventHeader" );
136 int runNum = eventHeader->runNumber();
137 int eventNum = eventHeader->eventNumber();
138 if ( m_cout_all % 1000 == 0 )
139 { std::cout << name() <<
"::" << m_cout_all <<
" events executed" << std::endl; }
141 SmartDataPtr<EvtRecEvent> evtRecEvent( eventSvc(),
"/Event/EvtRec/EvtRecEvent" );
142 log << MSG::DEBUG <<
"ncharg, nneu, tottks = " << evtRecEvent->totalCharged() <<
" , "
143 << evtRecEvent->totalNeutral() <<
" , " << evtRecEvent->totalTracks() << endmsg;
145 SmartDataPtr<EvtRecTrackCol> evtRecTrkCol( eventSvc(),
"/Event/EvtRec/EvtRecTrackCol" );
146 if ( ( evtRecEvent->totalTracks() < 2 ) || ( evtRecEvent->totalTracks() > 30 ) )
147 {
return StatusCode::SUCCESS; }
154 SmartDataPtr<HltInf> hlt( eventSvc(),
"/Event/Hlt/HltInf" );
158 log << MSG::WARNING <<
"Could not find Event HltInf, try DstHltInf now" << endmsg;
159 SmartDataPtr<DstHltInf> hltDst( eventSvc(),
"/Event/Hlt/DstHltInf" );
162 log << MSG::ERROR <<
"Could not find Event DstHltInf too, please re-generate data"
164 return StatusCode::FAILURE;
166 else { aHlt = hltDst; }
171 for (
int i = 0; i < 32; i++ )
173 if ( temp_type & mask )
183 SmartDataPtr<TrigData> trigData( eventSvc(),
"/Event/Trig/TrigData" );
184 if ( m_trigger_flag & runNum > 0 )
188 log << MSG::FATAL <<
"Could not find TrigData in TDS" << endmsg;
189 return StatusCode::FAILURE;
192 log << MSG::DEBUG <<
"Trigger conditions: " << endmsg;
193 for (
int trig_id = 0; trig_id < 48; trig_id++ )
195 log << MSG::DEBUG <<
"i:" << trig_id <<
" name:" << trigData->getTrigCondName( trig_id )
196 <<
" cond:" << trigData->getTrigCondition( trig_id ) << endmsg;
201 SmartDataPtr<RecEsTimeCol> recEstimeCol( eventSvc(),
"/Event/Recon/RecEsTimeCol" );
202 if ( m_est_flag & runNum > 0 )
206 log << MSG::WARNING <<
"Can not get RecEsTimeCol" << endmsg;
207 return StatusCode::SUCCESS;
209 log << MSG::DEBUG <<
"size of EsTime: " << recEstimeCol->size() << endmsg;
214 HepLorentzVector m_lv_ele;
215 for (
int i = 0; i < evtRecEvent->totalTracks(); i++ )
217 if ( i >= evtRecTrkCol->size() )
break;
220 if ( !( *itTrk )->isEmcShowerValid() )
continue;
223 if ( emcTrk->
energy() < m_energy_cut )
continue;
225 Hep3Vector emcpos( emcTrk->
x(), emcTrk->
y(), emcTrk->
z() );
226 m_lv_ele.setVect( emcpos );
227 m_lv_ele.setE( emcTrk->
energy() );
228 vGood.push_back( m_lv_ele );
232 if ( vGood.size() - 2 )
return StatusCode::SUCCESS;
236 double dang = vGood[0].vect().angle( vGood[1].vect() );
237 if ( dang < m_dangCut )
return StatusCode::SUCCESS;
240 if ( vGood[0].e() > vGood[1].e() )
swap( vGood[0], vGood[1] );
244 double d0, z0, cosTheta, phi, mom;
247 for (
int i = 0; i < evtRecEvent->totalCharged(); i++ )
253 itTrk = evtRecTrkCol->begin() + i;
254 if ( !( *itTrk )->isMdcKalTrackValid() )
continue;
261 if ( !( *itTrk )->isMdcTrackValid() )
continue;
266 if ( fabs( m_vz ) >= m_vz0cut )
continue;
267 if ( m_vr >= m_vr0cut )
continue;
268 iGood.push_back( i );
276 m_num_Ctrk = evtRecEvent->totalCharged();
277 m_num_Ntrk = evtRecEvent->totalNeutral();
278 m_num_Gtrk = iGood.size();
281 for (
int trig_id = 0; trig_id < 48; trig_id++ )
283 m_trig_index = trig_id;
284 if ( m_trig_index < 16 )
285 { m_trig_chan[m_trig_index] = trigData->getTrigChannel( m_trig_index ); }
286 m_trig_cond[m_trig_index] = trigData->getTrigCondition( m_trig_index );
288 m_trig_timewindow = trigData->getTimeWindow();
289 m_trig_timetype = trigData->getTimingType();
292 m_hlt_type = hlt_type;
296 m_est_start = ( *( recEstimeCol->begin() ) )->getTest();
297 m_est_status = ( *( recEstimeCol->begin() ) )->getStat();
298 m_est_quality = ( *( recEstimeCol->begin() ) )->getQuality();
302 for (
int i = 0; i < 2; i++ )
305 m_theta[m_index] = vGood[m_index].vect().theta();
306 m_phi[m_index] = vGood[m_index].vect().phi();
307 m_ene[m_index] = vGood[m_index].e();
313 setFilterPassed(
true );
315 return StatusCode::SUCCESS;