39#include "GaudiKernel/MsgStream.h"
40#include "GaudiKernel/AlgFactory.h"
41#include "GaudiKernel/SmartDataPtr.h"
42#include "GaudiKernel/IDataProviderSvc.h"
43#include "GaudiKernel/PropertyMgr.h"
44#include "GaudiKernel/ISvcLocator.h"
45#include "GaudiKernel/Bootstrap.h"
59#include "CLHEP/Vector/ThreeVector.h"
60#include "CLHEP/Geometry/Point3D.h"
61#ifndef ENABLE_BACKWARDS_COMPATIBILITY
64#include "CLHEP/Random/RandGauss.h"
68using CLHEP::Hep3Vector;
69using CLHEP::RandGauss;
73typedef std::vector<int>
Vint;
74typedef std::vector<HepLorentzVector>
Vp4;
81 :Algorithm(name, pSvcLocator),
84 m_lowEnergyShowerCut(0.1),
85 m_highEnergyShowerCut(0.5),
88 m_highMomentumCut(0.5),
91 m_minAngShEnergyCut(0.2),
96 m_oneProngMomentumCut(1.2),
99 m_ShEneThreshCut(0.02),
100 m_ShEneLeptonCut(1.),
101 m_minNrXtalsShowerCut(10),
102 m_maxNrXtalsShowerCut(70),
103 m_phiDiffMinCut(0.05),
104 m_phiDiffMaxCut(0.2),
106 m_thetaDiffCut(0.04),
109 m_showersAccepted(0),
111 m_writeMVToFile(
true),
113 m_inputFileDir(
"../InputData/"),
114 m_fileDir(
"/ihepbatch/besdata/public/liucx/Calib/"),
125 declareProperty (
"Vr0cut", m_vr0cut);
126 declareProperty (
"Vz0cut", m_vz0cut);
128 declareProperty (
"lowEnergyShowerCut", m_lowEnergyShowerCut);
129 declareProperty (
"highEnergyShowerCut", m_highEnergyShowerCut);
130 declareProperty (
"matchThetaCut", m_matchThetaCut);
131 declareProperty (
"matchPhiCut", m_matchPhiCut);
133 declareProperty (
"highMomentumCut", m_highMomentumCut);
134 declareProperty (
"EoPMaxCut", m_EoPMaxCut);
135 declareProperty (
"EoPMinCut", m_EoPMinCut);
136 declareProperty (
"minAngShEnergyCut", m_minAngShEnergyCut);
137 declareProperty (
"minAngCut", m_minAngCut);
138 declareProperty (
"acolliCut", m_acolliCut);
139 declareProperty (
"eNormCut", m_eNormCut);
140 declareProperty (
"pNormCut", m_pNormCut);
141 declareProperty (
"oneProngMomentumCut", m_oneProngMomentumCut);
145 declareProperty(
"digiRangeCut", m_digiRangeCut);
147 declareProperty(
"ShEneThreshCut", m_ShEneThreshCut);
148 declareProperty(
"ShEneLeptonCut", m_ShEneLeptonCut);
150 declareProperty(
"minNrXtalsShowerCut", m_minNrXtalsShowerCut);
151 declareProperty(
"maxNrXtalsShowerCut", m_maxNrXtalsShowerCut);
152 declareProperty(
"phiDiffMinCut", m_phiDiffMinCut);
153 declareProperty(
"phiDiffMaxCut", m_phiDiffMaxCut);
154 declareProperty(
"nrShThreshCut", m_nrShThreshCut);
155 declareProperty(
"thetaDiffCut", m_thetaDiffCut);
156 declareProperty(
"LATCut", m_LATCut);
159 declareProperty(
"writeMVToFile", m_writeMVToFile);
160 declareProperty(
"fileExt", m_fileExt);
161 declareProperty(
"fileDir", m_fileDir);
162 declareProperty(
"inputFileDir", m_inputFileDir);
163 declareProperty(
"sigmaCut", m_sigmaCut);
164 declareProperty(
"ReadBeamEFromDB", m_ReadBeamEFromDB =
false );
166 declareProperty(
"beamEnergy", m_beamEnergy);
168 declareProperty(
"MsgFlag", m_MsgFlag);
172 m_index =
new int*[56];
173 for (j=0;j<56;j++ ) {
174 m_index[j] =
new int[120];
175 for (
int k=0; k<120; k++) {
182 for (
int i=0; i<6240;i++)
184 m_inputConst[i] = 1.0;
195 if ( m_index != 0 ) {
196 for (
int i =0; i<56; i++ )
207 MsgStream log(
msgSvc(), name());
208 log << MSG::INFO <<
"in initialize()" << endreq;
218 m_TwoProngOneMatched=0;
225 if ( m_writeMVToFile )
232 ISvcLocator* svcLocator = Gaudi::svcLocator();
233 StatusCode sc = svcLocator->service(
"EmcRecGeoSvc",m_iGeoSvc);
234 if(sc!=StatusCode::SUCCESS) {
235 cout<<
"Error: Can't get EmcRecGeoSvc"<<endl;
251 StatusCode scBeamEnergy;
252 scBeamEnergy = Gaudi::svcLocator() -> service(
"BeamEnergySvc", m_BeamEnergySvc);
254 if( scBeamEnergy != StatusCode::SUCCESS){
255 log << MSG::ERROR <<
"can not use BeamEnergySvc" << endreq;
258 std::cout <<
"Test BeamEnergySvc "
259 << m_BeamEnergySvc -> getbeamE(14112) << std::endl;
290 return StatusCode::SUCCESS;
296 MsgStream log(
msgSvc(), name());
297 log << MSG::DEBUG <<
"in execute()" << endreq;
303 SmartDataPtr<Event::EventHeader> eventHeader(eventSvc(),
"/Event/EventHeader");
305 run=eventHeader->runNumber();
306 event=eventHeader->eventNumber();
315 if(m_ReadBeamEFromDB&&m_irun!=run){
318 m_beamEnergy=m_readDb.
getbeamE(m_irun);
322 HepLorentzVector ptrk;
323 ptrk.setPx(m_beamEnergy*
sin(the)*
cos(phi));
324 ptrk.setPy(m_beamEnergy*
sin(the)*
sin(phi));
325 ptrk.setPz(m_beamEnergy*
cos(the));
326 ptrk.setE(m_beamEnergy);
328 ptrk=ptrk.boost(-0.011,0,0);
330 cout<<
"beamEnergy="<< m_beamEnergy<<
" cms "<<ptrk.e()<<
" ratio="<< (m_beamEnergy-ptrk.e())/ptrk.e()<<endl;
331 m_beamEnergy=ptrk.e();
363 return StatusCode::SUCCESS;
369 MsgStream log(
msgSvc(), name());
371 log << MSG::INFO <<
"in finalize()" << endreq;
384 if ( m_writeMVToFile ) {
389 cout<<
"Event="<<m_events<<endl;
391 cout<<
"m_Nothing ="<<m_Nothing <<endl;
392 cout<<
"m_OneProng="<<m_OneProng<<endl;
394 cout<<
"m_TwoProngMatched="<<m_TwoProngMatched<<endl;
396 cout<<
"m_TwoProngOneMatched="<<m_TwoProngOneMatched<<endl;
398 cout<<
"m_showersAccepted="<<m_showersAccepted<<endl;
400 return StatusCode::SUCCESS;
408EmcSelBhaEvent::expectedEnergy(
long int ixtal ) {
413 unsigned int module, ntheta, nphi,ThetaIndex;
416 ntheta=theEmcStruc->
getTheta(ixtal);
417 nphi=theEmcStruc->
getPhi(ixtal);
419 if (module==0) ThetaIndex = ntheta;
420 if (module==1) ThetaIndex = ntheta + 6;
421 if (module==2) ThetaIndex = 55 - ntheta;
428 double theta=SeedPos.theta();
429 double phi=SeedPos.phi();
430 HepLorentzVector ptrk;
431 ptrk.setPx(m_beamEnergy*
sin(theta)*
cos(phi));
432 ptrk.setPy(m_beamEnergy*
sin(theta)*
sin(phi));
433 ptrk.setPz(m_beamEnergy*
cos(theta));
434 ptrk.setE(m_beamEnergy);
436 ptrk=ptrk.boost(0.011,0,0);
438 double depoEne_lab = m_corFun[ThetaIndex]*ptrk.e();
505 MsgStream log(
msgSvc(), name());
557 for(
int i = 0; i < evtRecEvent->totalTracks(); i++){
559 if(i>=evtRecTrkCol->size())
break;
563 if((*itTrk)->isEmcShowerValid()) {
567 int TrkID = (*itTrk)->
trackId();
568 double Shower5x5=theShower->
e5x5();
595 iGam.push_back( TrkID );
602 int nGam = iGam.size();
603 log << MSG::DEBUG <<
"num Good Photon " << nGam <<
" , " <<evtRecEvent->totalNeutral() <<endreq;
609 m_selectedTrkID1 =iGam[0];
610 m_selectedTrkID2 = iGam[1];
615 return StatusCode::SUCCESS;
624 MsgStream log(
msgSvc(), name());
647 double ene,theta,phi,eseed;
648 double showerX,showerY,showerZ;
649 long int thetaIndex,phiIndex,numberOfDigis;
652 unsigned int showerModule;
656 if ( ! m_showerList.empty()) m_showerList.clear();
658 for (
int ish=0; ish<2; ish++){
662 theShower=theShower1;
666 theShower=theShower2;
669 ene=theShower->
e5x5();
670 eseed=theShower->
eSeed();
697 showerPosition = theShower->
position();
698 theta = theShower->
theta();
699 phi= theShower->
phi();
700 showerX=theShower->
x();
701 showerY=theShower->
y();
702 showerZ=theShower->
z();
719 list<EmcShDigi> shDigiList;
722 double digiEne,
time, fraction, digiTheta, digiPhi;
723 double digiX, digiY, digiZ;
724 long int digiThetaIndex,digiPhiIndex;
727 RecEmcFractionMap::const_iterator ciFractionMap;
729 if ( ! shDigiList.empty()) shDigiList.clear();
735 digiEne = ciFractionMap->second.getEnergy();
737 time = ciFractionMap->second.getTime();
738 fraction = ciFractionMap->second.getFraction();
740 cellId=ciFractionMap->second.getCellId();
743 digiTheta = digiPos.theta();
744 digiPhi = digiPos.phi();
767 aShDigi->
setY(digiX);
768 aShDigi->
setY(digiY);
769 aShDigi->
setZ(digiZ);
771 shDigiList.push_back(*aShDigi);
776 numberOfDigis = shDigiList.size();
778 maxima = *(--shDigiList.end());
792 aShower->
setX(showerX);
793 aShower->
setY(showerY);
794 aShower->
setZ(showerZ);
795 m_showerList.push_back(*aShower);
805 if (m_showerList.size() == 2) {
807 list<EmcShower>::const_iterator iter_Sh;
809 for (iter_Sh = m_showerList.begin();
810 iter_Sh != m_showerList.end(); iter_Sh++) {
815 double theta = iter_Sh->theta();
826 unsigned int newthetaInd ;
835 unsigned int newphiInd=shower.
phiIndex();
840 log << MSG::INFO << name() <<
": Positron: theta,phi energy "
856 unsigned int newthetaInd;
864 unsigned int newphiInd=shower.
phiIndex();
868 log << MSG::INFO << name() <<
": Electron: theta,phi energy "
884 MsgStream log(
msgSvc(), name());
892 double calibEnergy=0.;
893 double energyError=0.;
903 unsigned int module, ntheta, nphi;
923 calibEnergy = myBhaEvt->
924 getDepoMCShowerEnergy_lab(SeedPos.theta(),
939 if ( calibEnergy > 0 ) {
941 energyError = myBhaEvt->
947 log << MSG::WARNING <<
" Did not find MC deposited cluster energy "
948 <<
" for this cluster: thetaInd: "
953 <<
"Will not use this cluster for the Emc "
954 <<
"Bhabha calibration !"
964 log << MSG::INFO<< name()
965 <<
": Electron was not selected ! "
979 unsigned int module, ntheta, nphi;
999 calibEnergy = myBhaEvt->
1000 getDepoMCShowerEnergy_lab(SeedPos.theta(),
1015 if ( calibEnergy > 0. ) {
1017 energyError = myBhaEvt->
1023 log << MSG::WARNING <<
" Did not find MC deposited cluster energy "
1024 <<
"for this cluster: thetaInd: "
1029 <<
"Will not use this cluster for the Emc "
1030 <<
"Bhabha calibration !"
1041 log << MSG::INFO << name()
1042 <<
": Positron was not selected ! "
1050 log << MSG::WARNING <<
" No Bhabha data for calibration found in event !"
1059EmcSelBhaEvent::fillMatrix( ) {
1070 for (
int i = 1; i <= 2; i++ ) {
1072 if ( i == 2 ) _theBhabha = *(myBhaEvt->
electron());
1073 else _theBhabha = *(myBhaEvt->
positron());
1081 int _bhaPhiIndex=_theBhabha.
phiIndex();
1084 double eraw =_bhaEne ;
1088 HepLorentzVector ptrk;
1089 ptrk.setPx(eraw*
sin(the)*
cos(phi));
1090 ptrk.setPy(eraw*
sin(the)*
sin(phi));
1091 ptrk.setPz(eraw*
cos(the));
1094 ptrk=ptrk.boost(-0.011,0,0);
1102 int ixtalIndex =
index(_bhaThetaIndex,_bhaPhiIndex);
1103 double peakCutMin,peakCutMax;
1130 peakCutMin= m_eRawPeak[ixtalIndex] *m_beamEnergy
1131 - SigCut*m_eSigmaExp[_bhaThetaIndex]*m_beamEnergy/100.;
1133 peakCutMax= m_eRawPeak[ixtalIndex] *m_beamEnergy
1134 + SigCut*m_eSigmaExp[_bhaThetaIndex]*m_beamEnergy/100.;
1173 && _bhaEne >= peakCutMin
1174 &&_bhaEne <= peakCutMax ) {
1189 m_showersAccepted++;
1191 _sigmaBha = _theBhabha.
sigma2();
1194 _theShower = _theBhabha.
shower();
1199 _DigiMax = _theShower.
maxima();
1201 unsigned int newThetaIndMax=999;
1218 list<EmcShDigi> _DigiList=_theShower.
digiList();
1220 list<EmcShDigi>::const_iterator _Digi1,_Digi2;
1226 for (_Digi1 = _DigiList.begin();
1227 _Digi1 != _DigiList.end(); _Digi1++) {
1233 unsigned int newThetaInd1=999;
1234 if (_Digi1->module()==0) newThetaInd1 = _Digi1->thetaIndex();
1235 if (_Digi1->module()==1) newThetaInd1 = _Digi1->thetaIndex() + 6;
1236 if (_Digi1->module()==2) newThetaInd1 = 55 - _Digi1->thetaIndex();
1238 int Digi1Index =
index(newThetaInd1,_Digi1->phiIndex());
1247 double dvec = ( (
static_cast<double>(_Digi1->energy())) *
1251 if ( m_writeMVToFile )
1252 (myCalibData->
vectorR(Digi1Index)) += dvec;
1255 if ( m_writeMVToFile )
1257 (myCalibData->
xtalHits(Digi1Index))++;
1261 if ( Digi1Index == maximaIndex ) {
1262 if ( m_writeMVToFile ){
1269 for (_Digi2 = _Digi1;
1270 _Digi2 != _DigiList.end(); _Digi2++) {
1272 unsigned int newThetaInd2=999;
1273 if (_Digi2->module()==0) newThetaInd2 = _Digi2->thetaIndex();
1274 if (_Digi2->module()==1) newThetaInd2 = _Digi2->thetaIndex() + 6;
1275 if (_Digi2->module()==2) newThetaInd2 = 55 - _Digi2->thetaIndex();
1277 int Digi2Index =
index(newThetaInd2, _Digi2->phiIndex());
1281 static_cast<double>((( (_Digi1->energy() *
1285 if ( m_writeMVToFile )
1286 myCalibData->
matrixMEle( Digi1Index, Digi2Index) += val;
1301 MsgStream log(
msgSvc(), name());
1303 int numberOfXtalsRing;
1314 for (
int the = theEmcStruc->
startingTheta(); the< nrOfTheRings; the++) {
1316 numberOfXtalsRing = theEmcStruc->
crystalsInRing((
unsigned int) the );
1318 for (
int phi=0; phi < numberOfXtalsRing; phi++) {
1320 m_index[the][phi] = theEmcStruc->
getIndex( (
unsigned int)the , (
unsigned int)phi);
1326 log << MSG::INFO <<
" Emc geometry for Bhabha calibration initialized !! "
1328 <<
"Number of Xtals: " << m_nXtals << endreq;
1339 MsgStream log(
msgSvc(), name());
1342 if ( myCalibData != 0 )
1345 if ( m_writeMVToFile ) {
1350 count = sprintf(cnum,
"MC%d",-m_run);
1353 count = sprintf(cnum,
"%d",m_run);
1356 std::string runnum=
"";
1357 runnum.append(cnum);
1359 ofstream runnumberOut;
1360 std::string runnumberFile = m_fileDir;
1361 runnumberFile += m_fileExt;
1362 runnumberFile +=
"runnumbers.dat";
1363 runnumberOut.open(runnumberFile.c_str(),ios::out|ios::app);
1365 ifstream runnumberIn;
1366 runnumberIn.open(runnumberFile.c_str());
1368 while( !runnumberIn.eof() ) {
1374 log << MSG::INFO<<
" the runnumber: "<<runnum
1375 <<
" exists in the file runnumbers.dat" <<endreq;
1379 log << MSG::INFO<<
" the runnumber: "<<runnum
1380 <<
" does not exist in the file runnumbers.dat" <<endreq;
1383 runnumberIn.close();
1386 std::string vectorFile = m_fileDir;
1387 vectorFile += m_fileExt;
1388 vectorFile += runnum;
1389 vectorFile +=
"CalibVector.dat";
1390 vectorOut.open(vectorFile.c_str());
1393 std::string matrixFile = m_fileDir;
1394 matrixFile += m_fileExt;
1395 matrixFile += runnum;
1396 matrixFile +=
"CalibMatrix.dat";
1397 matrixOut.open(matrixFile.c_str());
1399 if ( vectorOut.good() && matrixOut.good() &&runnumberOut.good()) {
1401 myCalibData->
writeOut(matrixOut, vectorOut);
1403 log << MSG::INFO<<
" Wrote files "
1404 << (vectorFile) <<
" and "
1405 << (matrixFile) <<endreq;
1409 runnumberOut<<runnum<<
"\n";
1410 log << MSG::INFO<<
"Wrote files "<<runnumberFile<< endreq;
1414 log << MSG::WARNING <<
" Could not open vector and/or matrix file !"
1416 <<
"matrix file : " << matrixFile << endl
1417 <<
"vector file : " << vectorFile
1422 runnumberOut.close();
1434 while( diff>
pi ) diff -= twopi;
1435 while( diff< -
pi ) diff += twopi;
1445 std::string corFunFile = m_inputFileDir;
1446 corFunFile += m_fileExt;
1447 corFunFile +=
"cor.conf";
1448 corFunIn.open(corFunFile.c_str());
1449 for(
int i=0;i<56;i++) {
1450 corFunIn>>m_corFun[i];
1452 cout<<
"energy corFun="<<m_corFun[i]<<endl;
1461 std::string EsigmaFile = m_inputFileDir;
1462 EsigmaFile += m_fileExt;
1463 EsigmaFile +=
"sigma.conf";
1464 EsigmaIn.open(EsigmaFile.c_str());
1465 for(
int i=0;i<56;i++) {
1466 EsigmaIn>>m_eSigma[i];
1467 cout<<
"Sigma="<<m_eSigma[i]<<endl;
1476 std::string EDepEneFile = m_inputFileDir;
1477 EDepEneFile += m_fileExt;
1478 EDepEneFile +=
"peakI.conf";
1479 EDepEneIn.open(EDepEneFile.c_str());
1480 for(
int i=0;i<56;i++) {
1481 EDepEneIn>>m_eDepEne[i];
1484 cout<<
"DepEne="<<m_eDepEne[i]<<endl;
1492 ifstream ESigmaExpIn;
1493 std::string ESigmaExpFile = m_inputFileDir;
1494 ESigmaExpFile += m_fileExt;
1495 ESigmaExpFile +=
"sigmaI.conf";
1496 ESigmaExpIn.open(ESigmaExpFile.c_str());
1497 for(
int i=0;i<56;i++) {
1498 ESigmaExpIn>>m_eSigmaExp[i];
1499 cout<<
"SigmaExp="<<m_eSigmaExp[i]<<endl;
1501 ESigmaExpIn.close();
1511 std::string EFile = m_inputFileDir;
1513 EFile +=
"findpeak.conf";
1514 EIn.open(EFile.c_str());
1518 for(
int i=0;i<6240;i++) {
1519 EIn>>ixtal>>Peak[i];
1520 m_eRawPeak[ixtal]=Peak[i];
1554 HepLorentzVector theShowerVec(1,1,1,1);
1555 theShowerVec.setTheta(theShower->
theta());
1556 theShowerVec.setPhi(theShower->
phi());
1557 theShowerVec.setRho(theShower->
energy());
1558 theShowerVec.setE(theShower->
energy());
1560 for(
int j = 0; j < evtRecEvent->totalTracks(); j++){
1563 if(!(*jtTrk)->isEmcShowerValid())
continue;
1564 if (ShowerID == (*jtTrk)->trackId())
continue;
1568 if (aShower->
energy() > m_minAngShEnergyCut ){
1570 HepLorentzVector aShowerVec(1,1,1,1);
1571 aShowerVec.setTheta(aShower->
theta());
1572 aShowerVec.setPhi(aShower->
phi());
1573 aShowerVec.setRho(aShower->
energy());
1574 aShowerVec.setE(aShower->
energy());
1576 double dist = theShowerVec.angle(aShowerVec);
1578 if ( dist < minDist )
double sin(const BesAngle a)
double cos(const BesAngle a)
HepGeom::Point3D< double > HepPoint3D
std::vector< HepLorentzVector > Vp4
EvtRecTrackCol::iterator EvtRecTrackIterator
HepPoint3D position() const
double & vectorR(int ind)
int & xtalHitsDir(int ind)
double & matrixMEle(int row, int column)
void writeOut(ostream &OutM, ostream &outV)
EmcBhabha * setElectron()
EmcBhabha * positron() const
EmcBhabha * setPositron()
EmcBhabha * electron() const
const double & theta() const
void setPhiIndex(unsigned int phiIndex)
void setCalibEnergy(double energy)
const double & calibEnergy() const
const double & errorOnCalibEnergy() const
void setErrorOnCalibEnergy(double error)
void setShower(EmcShower aShower)
void setTheta(double theta)
const unsigned int & thetaIndex() const
const unsigned int & phiIndex() const
void setThetaIndex(unsigned int thetaIndex)
static Identifier crystal_id(const unsigned int barrel_ec, const unsigned int theta_module, const unsigned int phi_module)
For a single crystal.
static unsigned int barrel_ec(const Identifier &id)
Values of different levels (failure returns 0)
static unsigned int theta_module(const Identifier &id)
static unsigned int phi_module(const Identifier &id)
double findPhiDiff(double phi1, double phi2)
double LAT(EmcShower *theShower)
EmcSelBhaEvent(const std::string &name, ISvcLocator *pSvcLocator)
StatusCode SelectBhabha()
int index(int theta, int phi) const
double Angle2ClosestShower(int ShowerID)
void setWhere(HepPoint3D where)
const unsigned int & thetaIndex() const
const unsigned int & phiIndex() const
void setTheta(double theta)
void setModule(unsigned int module)
void setEnergy(double energy)
void setFraction(double fraction)
void setTime(double time)
void setPhiIndex(unsigned int phiIndex)
void setThetaIndex(unsigned int thetaIndex)
const unsigned int & module() const
const unsigned int & thetaIndex() const
void setEnergy(double energy)
const double & theta() const
void setTheta(double theta)
const double & energy() const
void setDigiList(std::list< EmcShDigi > digiList)
void setPhiIndex(unsigned int phiIndex)
const double & phi() const
void setThetaIndex(unsigned int thetaIndex)
const EmcShDigi maxima() const
void setMaxima(EmcShDigi maxima)
const unsigned int & phiIndex() const
void setWhere(HepPoint3D where)
const std::list< EmcShDigi > digiList() const
void setNumberOfDigis(long int numberOfDigis)
const unsigned int & module() const
void setModule(unsigned int module)
long getIndex(unsigned int thetaIndex, unsigned int phiIndex) const
unsigned int getNumberOfTheRings()
unsigned int startingTheta()
unsigned int crystalsInRing(unsigned int theta) const
unsigned int getPartId(long Index) const
unsigned int getNumberOfXtals()
unsigned int getPhi(long Index) const
unsigned int getTheta(long Index) const
virtual HepPoint3D GetCFrontCenter(const Identifier &id) const =0
RecEmcFractionMap getFractionMap5x5() const
RecEmcID getShowerId() const
_EXTERN_ std::string EvtRecEvent
_EXTERN_ std::string EvtRecTrackCol