00001 #include <iostream>
00002 #include <fstream>
00003 #include "Identifier/MdcID.h"
00004 #include "RawDataCnv/EventManagement/MdcMcHitBuilder.h"
00005 using namespace std;
00006
00007 MdcMcHitBuilder::MdcMcHitBuilder()
00008 :Builder()
00009 {
00010 initialize (Builder::m_confFile);
00011 }
00012
00013 void MdcMcHitBuilder::unPack(vector<uint32_t>::const_iterator& iter,
00014 vector<uint32_t>::const_iterator& eiter, MdcTruth_t& mt)
00015 {
00016 uint32_t helpVal = *(iter++); assert(iter != eiter);
00017 mt.edep = *(iter++); assert(iter != eiter);
00018 mt.driftD = *(iter++); assert(iter != eiter);
00019 mt.x = *(iter++); assert(iter != eiter);
00020 mt.y = *(iter++); assert(iter != eiter);
00021 mt.z = *(iter++);
00022
00023 mt.trackIndex = (helpVal & m_trackIndexMask) >> m_trackIndexIndex;
00024 mt.layerId = (helpVal & m_layerIdMask) >> m_layerIdIndex;
00025 mt.cellId = (helpVal & m_cellIdMask) >> m_cellIdIndex;
00026 mt.posFlag = (helpVal & m_posFlagMask) ? 1 : 0 ;
00027
00028 return;
00029 }
00030
00031 StatusCode MdcMcHitBuilder::pack(MdcMcHitCol* mdcMcHitCol, WriteRawEvent*& re)
00032 {
00033
00034
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 return StatusCode::SUCCESS;
00066 }
00067
00068
00069
00070 StatusCode MdcMcHitBuilder::initialize(string& initFile)
00071 {
00072 ifstream f;
00073
00074
00075 f.open(initFile.c_str());
00076
00077 if ( f.bad() ) {
00078 cerr << "Error: could not open file " << initFile << endl;
00079 return StatusCode::FAILURE;
00080 }
00081
00082 if (!Builder::find( f, "##MdcTruthConf", initFile)) {
00083 cerr << "Error: could not find '##MdcTruthConf' in file " << initFile << endl;
00084 return StatusCode::FAILURE;
00085 }
00086
00087 if ( !Builder::expect( f, "#MdcTruthShift", initFile) ||
00088 !Builder::expectInt( f, "trackIndex", initFile, m_trackIndexIndex, m_trackIndexMask) ||
00089 !Builder::expectInt( f, "layerId", initFile, m_layerIdIndex, m_layerIdMask) ||
00090 !Builder::expectInt( f, "cellId", initFile, m_cellIdIndex, m_cellIdMask) ||
00091 !Builder::expectInt( f, "posFlag", initFile, m_posFlagIndex, m_posFlagMask) ||
00092 !Builder::expect( f, "#MdcTruthCoeff", initFile) ||
00093 !Builder::expectLong( f, "edep", initFile, m_edepCoeff) ||
00094 !Builder::expectLong( f, "driftD", initFile, m_driftDCoeff) ||
00095 !Builder::expectLong( f, "x", initFile, m_xCoeff) ||
00096 !Builder::expectLong( f, "y", initFile, m_yCoeff) ||
00097 !Builder::expectLong( f, "z", initFile, m_zCoeff) )
00098 return StatusCode::FAILURE;
00099
00100 f.close();
00101
00102 return StatusCode::SUCCESS;
00103 }
00104
00105
00106 uint32_t MdcMcHitBuilder::getTEID(uint32_t reid)
00107 {
00108 return 0;
00109 }
00110
00111
00112 uint32_t MdcMcHitBuilder::getREID(uint32_t teid)
00113 {
00114 return 0;
00115 }
00116
00117 void MdcMcHitBuilder::makeMdcTruth
00118 (MdcMcHitCol::const_iterator& iter, MdcTruth_t& mt)
00119 {
00120 Identifier ident = (*iter)->identify();
00121
00122 mt.trackIndex = (*iter)->getTrackIndex();
00123 mt.layerId = MdcID::layer(ident);
00124 mt.cellId = MdcID::wire(ident);
00125 mt.edep = int((*iter)->getDepositEnergy() * m_edepCoeff);
00126 mt.driftD = int((*iter)->getDriftDistance() * m_driftDCoeff);
00127 mt.x = int((*iter)->getPositionX() * m_xCoeff);
00128 mt.y = int((*iter)->getPositionY() * m_yCoeff);
00129 mt.z = int((*iter)->getPositionZ() * m_zCoeff);
00130 mt.posFlag = (*iter)->getPositionFlag();
00131
00132 return;
00133 }
00134