62 MsgStream log(
msgSvc(), name() );
63 log << MSG::INFO <<
"in initialize()" << endmsg;
80 std::string rawDataProviderSvc_name(
"RawDataProviderSvc" );
81 StatusCode sc = service( rawDataProviderSvc_name.c_str(), m_rawDataProviderSvc );
82 if ( sc != StatusCode::SUCCESS )
83 { log << MSG::ERROR <<
"EmcRec Error: Can't get RawDataProviderSvc." << endmsg; }
85 fDigit2Hit.SetAlgName( name() );
88 if ( !( m_rawDataProviderSvc->isOnlineMode() ) )
95 NTuplePtr nt(
ntupleSvc(),
"FILE301/n1" );
96 if ( nt ) m_tuple = nt;
99 m_tuple =
ntupleSvc()->book(
"FILE301/n1", CLID_ColumnWiseTuple,
"EmcRec" );
102 status = m_tuple->addItem(
"pid", pid );
103 status = m_tuple->addItem(
"tp", tp );
104 status = m_tuple->addItem(
"ttheta", ttheta );
105 status = m_tuple->addItem(
"tphi", tphi );
106 status = m_tuple->addItem(
"nrun", nrun );
107 status = m_tuple->addItem(
"nrec", nrec );
108 status = m_tuple->addItem(
"nneu", nneu );
109 status = m_tuple->addItem(
"ncluster", ncluster );
110 status = m_tuple->addItem(
"npart", npart );
111 status = m_tuple->addItem(
"ntheta", ntheta );
112 status = m_tuple->addItem(
"nphi", nphi );
113 status = m_tuple->addItem(
"ndigi", ndigi );
114 status = m_tuple->addItem(
"nhit", nhit );
115 status = m_tuple->addItem(
"pp1", 4, pp1 );
116 status = m_tuple->addItem(
"theta1", theta1 );
117 status = m_tuple->addItem(
"phi1", phi1 );
118 status = m_tuple->addItem(
"dphi1", dphi1 );
119 status = m_tuple->addItem(
"eseed", eseed );
120 status = m_tuple->addItem(
"e3x3", e3x3 );
121 status = m_tuple->addItem(
"e5x5", e5x5 );
122 status = m_tuple->addItem(
"enseed", enseed );
123 status = m_tuple->addItem(
"etof2x1", etof2x1 );
124 status = m_tuple->addItem(
"etof2x3", etof2x3 );
125 status = m_tuple->addItem(
"cluster2ndMoment", cluster2ndMoment );
126 status = m_tuple->addItem(
"secondMoment", secondMoment );
127 status = m_tuple->addItem(
"latMoment", latMoment );
128 status = m_tuple->addItem(
"a20Moment", a20Moment );
129 status = m_tuple->addItem(
"a42Moment", a42Moment );
130 status = m_tuple->addItem(
"mpi0", mpi0 );
131 status = m_tuple->addItem(
"thtgap1", thtgap1 );
132 status = m_tuple->addItem(
"phigap1", phigap1 );
133 status = m_tuple->addItem(
"pp2", 4, pp2 );
137 log << MSG::ERROR <<
"Cannot book N-tuple:" << long( m_tuple ) << endmsg;
138 return StatusCode::FAILURE;
149 return StatusCode::SUCCESS;
155 MsgStream log(
msgSvc(), name() );
156 log << MSG::DEBUG <<
"in execute()" << endmsg;
161 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc(),
"/Event/EventHeader" );
164 log << MSG::FATAL << name() <<
" Could not find Event Header" << endmsg;
165 return ( StatusCode::FAILURE );
167 run = eventHeader->runNumber();
168 event = eventHeader->eventNumber();
174 if ( fEventNb != 0 && m_event % fEventNb == 0 )
175 { log << MSG::FATAL << m_event <<
"-------: " << run <<
"," <<
event << endmsg; }
179 log << MSG::DEBUG <<
"====================================" << endmsg;
180 log << MSG::DEBUG <<
"run= " << run <<
"; event= " <<
event << endmsg;
185 if ( !( m_rawDataProviderSvc->isOnlineMode() ) )
187 if ( fOutput >= 1 && run < 0 )
190 SmartDataPtr<McParticleCol> mcParticleCol( eventSvc(),
"/Event/MC/McParticleCol" );
191 if ( !mcParticleCol ) { log << MSG::WARNING <<
"Could not find McParticle" << endmsg; }
195 McParticleCol::iterator iter_mc = mcParticleCol->begin();
196 for ( ; iter_mc != mcParticleCol->end(); iter_mc++ )
198 log << MSG::INFO <<
" particleId = " << ( *iter_mc )->particleProperty() << endmsg;
199 pG = ( *iter_mc )->initialFourMomentum();
200 posG = ( *iter_mc )->initialPosition().v();
204 if ( tphi < 0 ) { tphi = twopi + tphi; }
208 SmartDataPtr<EmcMcHitCol> emcMcHitCol( eventSvc(),
"/Event/MC/EmcMcHitCol" );
209 if ( !emcMcHitCol ) { log << MSG::WARNING <<
"Could not find EMC truth" << endmsg; }
212 unsigned int mcTrackIndex;
213 double mcPosX = 0, mcPosY = 0, mcPosZ = 0;
214 double mcPx = 0, mcPy = 0, mcPz = 0;
217 EmcMcHitCol::iterator iterMc;
218 for ( iterMc = emcMcHitCol->begin(); iterMc != emcMcHitCol->end(); iterMc++ )
220 mcId = ( *iterMc )->identify();
221 mcTrackIndex = ( *iterMc )->getTrackIndex();
222 mcPosX = ( *iterMc )->getPositionX();
223 mcPosY = ( *iterMc )->getPositionY();
224 mcPosZ = ( *iterMc )->getPositionZ();
225 mcPx = ( *iterMc )->getPx();
226 mcPy = ( *iterMc )->getPy();
227 mcPz = ( *iterMc )->getPz();
228 mcEnergy = ( *iterMc )->getDepositEnergy();
252 StatusCode sc = service(
"EmcCalibConstSvc", emcCalibConstSvc );
253 if ( sc != StatusCode::SUCCESS )
259 SmartDataPtr<EmcDigiCol> emcDigiCol( eventSvc(),
"/Event/Digi/EmcDigiCol" );
262 log << MSG::FATAL <<
"Could not find EMC digi" << endmsg;
263 return ( StatusCode::FAILURE );
266 EmcDigiCol::iterator iter3;
267 for ( iter3 = emcDigiCol->begin(); iter3 != emcDigiCol->end(); iter3++ )
269 RecEmcID id( ( *iter3 )->identify() );
279 int index = emcCalibConstSvc->
getIndex( nnpart, nnthe, nnphi );
282 if ( run > 0 && ixtalNumber > 0 )
284 unsigned int npartNew = emcCalibConstSvc->
getPartID( ixtalNumber );
285 unsigned int ntheNew = emcCalibConstSvc->
getThetaIndex( ixtalNumber );
286 unsigned int nphiNew = emcCalibConstSvc->
getPhiIndex( ixtalNumber );
345 if ( run >= 52940 && run <= 52995 )
347 unsigned int ntheNew, nphiNew;
354 if ( nnphi == 58 ) nphiNew = 60;
355 if ( nnphi == 59 ) nphiNew = 61;
356 if ( nnphi == 60 ) nphiNew = 58;
357 if ( nnphi == 61 ) nphiNew = 59;
362 if ( nnphi == 58 ) nphiNew = 60;
363 if ( nnphi == 59 ) nphiNew = 61;
364 if ( nnphi == 60 ) nphiNew = 58;
365 if ( nnphi == 61 ) nphiNew = 59;
370 if ( nnphi == 73 ) nphiNew = 75;
371 if ( nnphi == 74 ) nphiNew = 76;
372 if ( nnphi == 75 ) nphiNew = 73;
373 if ( nnphi == 76 ) nphiNew = 74;
379 if ( nnphi == 73 ) nphiNew = 75;
380 if ( nnphi == 74 ) nphiNew = 76;
381 if ( nnphi == 75 ) nphiNew = 73;
382 if ( nnphi == 76 ) nphiNew = 74;
385 if ( nnthe == 3 && nnphi == 72 )
390 if ( nnthe == 2 && nnphi == 77 )
398 if ( nnphi == 87 ) nphiNew = 90;
399 if ( nnphi == 88 ) nphiNew = 91;
400 if ( nnphi == 89 ) nphiNew = 92;
401 if ( nnphi == 90 ) nphiNew = 87;
402 if ( nnphi == 91 ) nphiNew = 88;
403 if ( nnphi == 92 ) nphiNew = 89;
408 if ( nnphi == 87 ) nphiNew = 90;
409 if ( nnphi == 88 ) nphiNew = 91;
410 if ( nnphi == 89 ) nphiNew = 92;
411 if ( nnphi == 90 ) nphiNew = 87;
412 if ( nnphi == 91 ) nphiNew = 88;
413 if ( nnphi == 92 ) nphiNew = 89;
423 if ( ixtalNumber == -9 ) { adc = 0.0; }
426 if ( ixtalNumber == -99 ) { adc = 0.0; }
429 aDigit.
Assign(
id, adc, tdc );
430 fDigitMap[id] = aDigit;
435 RecEmcDigitMap::iterator iDigitMap;
436 for ( iDigitMap = fDigitMap.begin(); iDigitMap != fDigitMap.end(); iDigitMap++ )
445 fDigit2Hit.Convert( fDigitMap, fHitMap );
448 RecEmcHitMap::iterator iHitMap;
449 for ( iHitMap = fHitMap.begin(); iHitMap != fHitMap.end(); iHitMap++ )
453 fDigit2Hit.Output( fHitMap );
458 fHit2Cluster.Convert( fHitMap, fClusterMap );
462 RecEmcClusterMap::iterator iClusterMap;
463 for ( iClusterMap = fClusterMap.begin(); iClusterMap != fClusterMap.end(); iClusterMap++ )
470 fCluster2Shower->Convert( fClusterMap, fShowerMap );
474 RecEmcShowerMap::iterator iShowerMap;
475 for ( iShowerMap = fShowerMap.begin(); iShowerMap != fShowerMap.end(); iShowerMap++ )
489 if ( !( m_rawDataProviderSvc->isOnlineMode() ) )
497 ndigi = fDigitMap.size();
498 nhit = fHitMap.size();
499 ncluster = fClusterMap.size();
501 RecEmcShowerMap::iterator iShowerMap;
502 for ( iShowerMap = fShowerMap.begin(); iShowerMap != fShowerMap.end(); iShowerMap++ )
503 { fShowerVec.push_back( iShowerMap->second ); }
504 sort( fShowerVec.begin(), fShowerVec.end(), greater<RecEmcShower>() );
505 nneu = fShowerMap.size();
509 RecEmcShowerVec::iterator iShowerVec;
510 iShowerVec = fShowerVec.begin();
514 if ( iShowerVec != fShowerVec.end() )
516 aShower = *iShowerVec;
524 pp1[3] = aShower.
energy();
525 theta1 = ( aShower.
position() - posG ).theta();
526 phi1 = ( aShower.
position() - posG ).phi();
527 if ( phi1 < 0 ) { phi1 = twopi + phi1; }
529 phigap1 = aShower.
PhiGap();
533 eseed = aShower.
eSeed();
534 e3x3 = aShower.
e3x3();
535 e5x5 = aShower.
e5x5();
544 if ( nseed.
is_valid() ) { enseed = fHitMap[nseed].getEnergy(); }
548 if ( dphi1 < -
pi ) dphi1 = dphi1 + twopi;
549 if ( dphi1 >
pi ) dphi1 = dphi1 - twopi;
552 if ( iShowerVec != fShowerVec.end() )
555 if ( iShowerVec != fShowerVec.end() )
557 aShower = *iShowerVec;
561 pp2[3] = aShower.
energy();
566 if ( fShowerVec.size() >= 2 )
568 RecEmcShowerVec::iterator iShowerVec1, iShowerVec2;
569 iShowerVec1 = fShowerVec.begin();
570 iShowerVec2 = fShowerVec.begin() + 1;
571 double e1 = ( *iShowerVec1 ).energy();
572 double e2 = ( *iShowerVec2 ).energy();
573 double angle = ( *iShowerVec1 ).position().angle( ( *iShowerVec2 ).position() );
574 mpi0 = sqrt( 2 *
e1 *
e2 * ( 1 -
cos( angle ) ) );
581 return StatusCode::SUCCESS;