66 MsgStream log(
msgSvc(), name() );
68 log << MSG::INFO <<
"in initialize()" << endmsg;
71 NTuplePtr nt(
ntupleSvc(),
"FILE1/dimu" );
72 if ( nt ) m_tuple = nt;
75 m_tuple =
ntupleSvc()->book(
"FILE1/dimu", CLID_ColumnWiseTuple,
"ks N-Tuple example" );
78 status = m_tuple->addItem(
"npart", m_npart );
79 status = m_tuple->addItem(
"number", m_number );
80 status = m_tuple->addItem(
"adc1", m_adc1 );
81 status = m_tuple->addItem(
"adc2", m_adc2 );
82 status = m_tuple->addItem(
"tdc1", m_tdc1 );
83 status = m_tuple->addItem(
"tdc2", m_tdc2 );
84 status = m_tuple->addItem(
"zpos", m_zpos );
85 status = m_tuple->addItem(
"length", m_length );
86 status = m_tuple->addItem(
"energy", m_energy );
87 status = m_tuple->addItem(
"lengthext", m_length_ext );
88 status = m_tuple->addItem(
"energyext", m_energy_ext );
89 status = m_tuple->addItem(
"ztdc", m_ztdc );
90 status = m_tuple->addItem(
"q", m_q );
94 log << MSG::ERROR <<
" Cannot book N-tuple:" << long( m_tuple ) << endmsg;
95 return StatusCode::FAILURE;
102 log << MSG::INFO <<
"successfully return from initialize()" << endmsg;
103 return StatusCode::SUCCESS;
115 MsgStream log(
msgSvc(), name() );
116 log << MSG::INFO <<
"in execute()" << endmsg;
118 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc(),
"/Event/EventHeader" );
119 int run = eventHeader->runNumber();
123 int event = eventHeader->eventNumber();
124 if ( m_event % 1000 == 0 )
126 std::cout << m_event <<
"-------------TofEnergyCalib run,event: " << run <<
"," <<
event
134 log << MSG::DEBUG <<
"ncharg, nneu, tottks = " << evtRecEvent->totalCharged() <<
" , "
135 << evtRecEvent->totalNeutral() <<
" , " << evtRecEvent->totalTracks() << endmsg;
137 if ( evtRecEvent->totalCharged() != 2 ) {
return StatusCode::SUCCESS; }
141 StatusCode sc = service(
"RawDataProviderSvc",
tofDigiSvc );
142 if ( sc != StatusCode::SUCCESS )
144 log << MSG::ERROR <<
"TofRec Get Tof Raw Data Service Failed !! " << endmsg;
145 return StatusCode::SUCCESS;
150 StatusCode scc = service(
"TofCaliSvc",
tofCaliSvc );
151 if ( scc != StatusCode::SUCCESS )
153 log << MSG::ERROR <<
"TofRec Get Calibration Service Failed !! " << endmsg;
154 return StatusCode::SUCCESS;
160 if ( sc != StatusCode::SUCCESS )
162 log << MSG::ERROR <<
"TofRec Get QCorr Service Failed !! " << endmsg;
163 return StatusCode::SUCCESS;
168 if ( sc != StatusCode::SUCCESS )
170 log << MSG::ERROR <<
"TofRec Get QElec Service Failed !! " << endmsg;
171 return StatusCode::SUCCESS;
175 std::vector<TofData*> tofDataVec;
177 const unsigned int ADC_MASK = 0x00001FFF;
179 for (
int i = 0; i < evtRecEvent->totalCharged(); i++ )
183 if ( !( *itTrk )->isExtTrackValid() )
continue;
186 if ( !( *itTrk )->isTofTrackValid() )
continue;
189 int npart, tof1, tof2;
190 Hep3Vector pos1, pos2;
198 if ( tof1 >= 0 && tof1 < 88 && tof2 >= 88 && tof2 < 176 )
202 else if ( tof1 >= 176 && tof1 < 224 )
207 else if ( tof1 >= 224 && tof1 < 272 )
220 double zpos1 = 0, zpos2 = 0, l1 = 0, l2 = 0, lext = 0;
221 double z1, xy1, z2, xy2;
226 const double tofDPhi = CLHEP::twopi / 88.;
227 double tofPhi1 = tof1 * tofDPhi + tofDPhi / 2;
228 double tofPhi2 = ( tof2 - 88 ) * tofDPhi;
231 double extTheta1, extTheta2, extPhi1, extPhi2;
232 extTheta1 = pos1.theta();
233 extTheta2 = pos2.theta();
234 extPhi1 = pos1.phi();
235 extPhi2 = pos2.phi();
239 z1 = 5 /
tan( extTheta1 );
240 xy1 = 5 /
cos( extPhi1 - tofPhi1 );
241 l1 = sqrt( z1 * z1 + xy1 * xy1 );
242 z2 = 5 /
tan( extTheta2 );
243 xy2 = 5 /
cos( extPhi2 - tofPhi2 );
244 l2 = sqrt( z2 * z2 + xy2 * xy2 );
245 zpos1 = ( pos1.z() + z1 / 2 ) / 100;
246 zpos2 = ( pos2.z() + z2 / 2 ) / 100;
255 double extTheta1 = pos1.theta();
259 l1 = 5. / fabs(
cos( extTheta1 ) );
261 ( sqrt( pos1.x() * pos1.x() + pos1.y() * pos1.y() ) + 5. *
tan( extTheta1 ) / 2 ) /
265 vector<TofData*>::iterator it;
268 for ( it = tofDataVec.begin(); it != tofDataVec.end(); it++ )
274 if ( im + layer * 88 == tof1 - 1 || im + layer * 88 == tof1 + 1 ||
275 im + layer * 88 == tof1 - 2 || im + layer * 88 == tof1 + 2 )
278 return StatusCode::SUCCESS;
282 for ( it = tofDataVec.begin(); it != tofDataVec.end(); it++ )
289 double adc1=0, adc2=0, tdc1=0, tdc2=0, ztdc=0, tofq=0;
291 if ( ( *it )->barrel() )
294 tdc1 = bTofData->
tdc1();
295 tdc2 = bTofData->
tdc2();
296 adc1 = bTofData->
adc1();
297 adc2 = bTofData->
adc2();
301 if ( tofq < 100 || tofq > 10000 )
continue;
310 adc1 = eTofData->
adc();
311 tdc1 = eTofData->
tdc();
316 if ( im + layer * 88 == tof1 )
330 m_energy = l1 * 10.25 / 5.;
331 m_energy_ext = lext * 10.25 / 5.;
334 if (
abs( m_zpos ) < 0.6 && m_q > 500 && m_q < 4000 )
337 m_EvsQ = m_EvsQ + m_energy / m_q;
341 else if ( ( *it )->barrel() && im + layer * 88 == tof2 )
355 m_energy = l2 * 10.25 / 5.;
356 m_energy_ext = lext * 10.25 / 5.;
360 if (
abs( m_zpos ) < 0.6 && m_q > 500 && m_q < 4000 )
363 m_EvsQ = m_EvsQ + m_energy / m_q;