/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Event/RawDataCnv/RawDataCnv-00-04-35/src/EventManagement/MucMcHitBuilder.cxx

Go to the documentation of this file.
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   if (mucMcHitCol == NULL) {
00039     cout << "MucMcHitBuilder::pack cant get MucMcHitCol" << endl;
00040     return StatusCode::FAILURE;
00041   }
00042 
00043   vector<uint32_t> *mucReMcHitVec = new vector<uint32_t>;
00044   MucTruth_t m_MucTruth;
00045 
00046   MucMcHitCol::const_iterator pMucMcHit = mucMcHitCol->begin();
00047   for ( ; pMucMcHit != mucMcHitCol->end(); pMucMcHit++) {
00048     //make the MucTruth data
00049     makeMucTruth(pMucMcHit, m_MucTruth);
00050     //pack integers in mucTruth
00051     uint32_t helpVal = (m_MucTruth.trackIndex<<m_trackIndexIndex) & m_trackIndexMask;
00052     helpVal |= ((m_MucTruth.partId<<m_partIdIndex) & m_partIdMask);
00053     helpVal |= ((m_MucTruth.segId<<m_segIdIndex) & m_segIdMask);
00054     helpVal |= ((m_MucTruth.gapId<<m_gapIdIndex) & m_gapIdMask);
00055     helpVal |= ((m_MucTruth.stripId<<m_stripIdIndex) & m_stripIdMask);
00056     //fill the McHit vector
00057     mucReMcHitVec->push_back(helpVal);
00058     mucReMcHitVec->push_back(m_MucTruth.x);
00059     mucReMcHitVec->push_back(m_MucTruth.y);
00060     mucReMcHitVec->push_back(m_MucTruth.z);
00061     mucReMcHitVec->push_back(m_MucTruth.px);
00062     mucReMcHitVec->push_back(m_MucTruth.py);
00063     mucReMcHitVec->push_back(m_MucTruth.pz);
00064   }
00065 
00066   OfflineEventFormat::SubDetectorHeader sh(OfflineEventFormat::MUCTRUTH);
00067   SubRawEvent *sub = new SubRawEvent(sh, mucReMcHitVec);
00068   re->append(sub);
00069   */
00070 
00071   return StatusCode::SUCCESS;
00072 }
00073 
00074 // initialize re2te tables
00075 
00076 StatusCode  MucMcHitBuilder::initialize(string& initFile)
00077 {
00078   ifstream f;
00079 
00080   //read init file
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 

Generated on Tue Nov 29 22:58:32 2016 for BOSS_7.0.2 by  doxygen 1.4.7