00001 #include <iostream>
00002 #include <fstream>
00003 #include "Identifier/EmcID.h"
00004 #include "RawDataCnv/EventManagement/EmcMcHitBuilder.h"
00005 using namespace std;
00006
00007 EmcMcHitBuilder::EmcMcHitBuilder()
00008 :Builder()
00009 {
00010 initialize(Builder::m_confFile);
00011 }
00012
00013 void EmcMcHitBuilder::unPack(vector<uint32_t>::const_iterator& iter,
00014 vector<uint32_t>::const_iterator& eiter, EmcTruth_t& et)
00015 {
00016 uint32_t helpVal = *(iter++); assert(iter != eiter);
00017 et.x = *(iter++); assert(iter != eiter);
00018 et.y = *(iter++); assert(iter != eiter);
00019 et.z = *(iter++); assert(iter != eiter);
00020 et.px = *(iter++); assert(iter != eiter);
00021 et.py = *(iter++); assert(iter != eiter);
00022 et.pz = *(iter++); assert(iter != eiter);
00023 et.totalEdep = *(iter++);
00024
00025 et.trackIndex = (helpVal&m_trackIndexMask) >> m_trackIndexIndex;
00026 et.partId = (helpVal&m_partIdMask) >> m_partIdIndex;
00027 et.numTheta = (helpVal&m_numThetaMask) >> m_numThetaIndex;
00028 et.numPhi = (helpVal&m_numPhiMask) >> m_numPhiIndex;
00029
00030 return;
00031 }
00032
00033
00034 StatusCode EmcMcHitBuilder::pack(EmcMcHitCol* emcMcHitCol, WriteRawEvent*& re)
00035 {
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070 return StatusCode::SUCCESS;
00071 }
00072
00073
00074
00075 StatusCode EmcMcHitBuilder::initialize(string& initFile)
00076 {
00077 ifstream f;
00078
00079
00080 f.open(initFile.c_str());
00081
00082 if ( f.bad() ) {
00083 cerr << "Error: could not open file " << initFile << endl;
00084 return StatusCode::FAILURE;
00085 }
00086
00087 if (!Builder::find( f, "##EmcTruthConf", initFile)) {
00088 cerr << "Error: could not find '##EmcTruthConf' in file " << initFile << endl;
00089 return StatusCode::FAILURE;
00090 }
00091
00092 if ( !Builder::expect( f, "#EmcTruthShift", initFile) ||
00093 !Builder::expectInt( f, "trackIndex", initFile, m_trackIndexIndex, m_trackIndexMask) ||
00094 !Builder::expectInt( f, "partId", initFile, m_partIdIndex, m_partIdMask) ||
00095 !Builder::expectInt( f, "numTheta", initFile, m_numThetaIndex, m_numThetaMask) ||
00096 !Builder::expectInt( f, "numPhi", initFile, m_numPhiIndex, m_numPhiMask) ||
00097 !Builder::expect( f, "#EmcTruthCoeff", initFile) ||
00098 !Builder::expectLong( f, "x", initFile, m_xCoeff) ||
00099 !Builder::expectLong( f, "y", initFile, m_yCoeff) ||
00100 !Builder::expectLong( f, "z", initFile, m_zCoeff) ||
00101 !Builder::expectLong( f, "px", initFile, m_pxCoeff) ||
00102 !Builder::expectLong( f, "py", initFile, m_pyCoeff) ||
00103 !Builder::expectLong( f, "pz", initFile, m_pzCoeff) ||
00104 !Builder::expectLong( f, "totalEdep", initFile, m_totalEdepCoeff) )
00105 return StatusCode::FAILURE;
00106
00107 f.close();
00108
00109 return StatusCode::SUCCESS;
00110 }
00111
00112
00113 uint32_t EmcMcHitBuilder::getTEID(uint32_t reid)
00114 {
00115 return 0;
00116 }
00117
00118
00119 uint32_t EmcMcHitBuilder::getREID(uint32_t teid)
00120 {
00121 return 0;
00122 }
00123
00124 void EmcMcHitBuilder::makeEmcTruth
00125 (EmcMcHitCol::const_iterator& pEmcMcHit, EmcTruth_t& et)
00126 {
00127 Identifier ident = (*pEmcMcHit)->identify();
00128
00129 et.trackIndex = (*pEmcMcHit)->getTrackIndex();
00130 et.partId = EmcID::barrel_ec(ident);
00131 et.numTheta = EmcID::theta_module(ident);
00132 et.numPhi = EmcID::phi_module(ident);
00133 et.x = int((*pEmcMcHit)->getPositionX() * m_xCoeff);
00134 et.y = int((*pEmcMcHit)->getPositionY() * m_yCoeff);
00135 et.z = int((*pEmcMcHit)->getPositionZ() * m_zCoeff);
00136 et.px = int((*pEmcMcHit)->getPx() * m_pxCoeff);
00137 et.py = int((*pEmcMcHit)->getPy() * m_pyCoeff);
00138 et.pz = int((*pEmcMcHit)->getPz() * m_pzCoeff);
00139 et.totalEdep = int((*pEmcMcHit)->getDepositEnergy() * m_totalEdepCoeff);
00140
00141 return;
00142 }
00143