00001 #include <iostream>
00002 #include <fstream>
00003 #include "Identifier/MucID.h"
00004 #include "RawDataCnv/EventManagement/MucMcHitBuilder.h"
00005 using namespace std;
00006
00007 MucMcHitBuilder::MucMcHitBuilder()
00008 :Builder()
00009 {
00010 initialize (Builder::m_confFile);
00011 }
00012
00013 void MucMcHitBuilder::unPack(vector<uint32_t>::const_iterator& iter,
00014 vector<uint32_t>::const_iterator& eiter, MucTruth_t& mt)
00015 {
00016 uint32_t helpVal = *(iter++); assert(iter != eiter);
00017 mt.x = *(iter++); assert(iter != eiter);
00018 mt.y = *(iter++); assert(iter != eiter);
00019 mt.z = *(iter++); assert(iter != eiter);
00020 mt.px = *(iter++); assert(iter != eiter);
00021 mt.py = *(iter++); assert(iter != eiter);
00022 mt.pz = *(iter++);
00023
00024 mt.trackIndex = (helpVal&m_trackIndexMask) >> m_trackIndexIndex;
00025 mt.partId = (helpVal&m_partIdMask) >> m_partIdIndex;
00026 mt.segId = (helpVal&m_segIdMask) >> m_segIdIndex;
00027 mt.gapId = (helpVal&m_gapIdMask) >> m_gapIdIndex;
00028 mt.stripId = (helpVal&m_stripIdMask) >> m_stripIdIndex;
00029
00030 return;
00031 }
00032
00033
00034 StatusCode MucMcHitBuilder::pack(MucMcHitCol* mucMcHitCol, 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
00071 return StatusCode::SUCCESS;
00072 }
00073
00074
00075
00076 StatusCode MucMcHitBuilder::initialize(string& initFile)
00077 {
00078 ifstream f;
00079
00080
00081 f.open(initFile.c_str());
00082
00083 if ( f.bad() ) {
00084 cerr << "Error: could not open file " << initFile << endl;
00085 return StatusCode::FAILURE;
00086 }
00087
00088 if (!Builder::find( f, "##MucTruthConf", initFile)) {
00089 cerr << "Error: could not find '##MucTruthConf' in file " << initFile << endl;
00090 return StatusCode::FAILURE;
00091 }
00092
00093 if ( !Builder::expect( f, "#MucTruthShift", initFile) ||
00094 !Builder::expectInt( f, "trackIndex", initFile, m_trackIndexIndex, m_trackIndexMask) ||
00095 !Builder::expectInt( f, "partId", initFile, m_partIdIndex, m_partIdMask) ||
00096 !Builder::expectInt( f, "segId", initFile, m_segIdIndex, m_segIdMask) ||
00097 !Builder::expectInt( f, "gapId", initFile, m_gapIdIndex, m_gapIdMask) ||
00098 !Builder::expectInt( f, "stripId", initFile, m_stripIdIndex, m_stripIdMask) ||
00099 !Builder::expect( f, "#MucTruthCoeff", initFile) ||
00100 !Builder::expectLong( f, "x", initFile, m_xCoeff) ||
00101 !Builder::expectLong( f, "y", initFile, m_yCoeff) ||
00102 !Builder::expectLong( f, "z", initFile, m_zCoeff) ||
00103 !Builder::expectLong( f, "px", initFile, m_pxCoeff) ||
00104 !Builder::expectLong( f, "py", initFile, m_pyCoeff) ||
00105 !Builder::expectLong( f, "pz", initFile, m_pzCoeff) )
00106 return StatusCode::FAILURE;
00107
00108 f.close();
00109
00110 return StatusCode::SUCCESS;
00111 }
00112
00113
00114 uint32_t MucMcHitBuilder::getTEID(uint32_t reid)
00115 {
00116 return 0;
00117 }
00118
00119
00120 uint32_t MucMcHitBuilder::getREID(uint32_t teid)
00121 {
00122 return 0;
00123 }
00124
00125 void MucMcHitBuilder::makeMucTruth
00126 (MucMcHitCol::const_iterator& pMucMcHit, MucTruth_t& mt)
00127 {
00128 Identifier ident = (*pMucMcHit)->identify();
00129
00130 mt.trackIndex = (*pMucMcHit)->getTrackIndex() % 1000;
00131 mt.partId = MucID::part(ident);
00132 mt.segId = MucID::seg(ident);
00133 mt.gapId = MucID::gap(ident);
00134 mt.stripId = MucID::strip(ident);
00135 mt.x = int((*pMucMcHit)->getPositionX() * m_xCoeff);
00136 mt.y = int((*pMucMcHit)->getPositionY() * m_yCoeff);
00137 mt.z = int((*pMucMcHit)->getPositionZ() * m_zCoeff);
00138 mt.px = int((*pMucMcHit)->getPx() * m_pxCoeff);
00139 mt.py = int((*pMucMcHit)->getPy() * m_pyCoeff);
00140 mt.pz = int((*pMucMcHit)->getPz() * m_pzCoeff);
00141
00142 return;
00143 }
00144