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

Go to the documentation of this file.
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   if (mdcMcHitCol == NULL) {
00035     cout << "MdcMcHitBuilder::pack cant get MdcMcHitCol" << endl;
00036     return StatusCode::FAILURE;
00037   }
00038 
00039   MdcTruth_t m_MdcTruth;
00040   vector<uint32_t> *mdcReMcHitVec = new vector<uint32_t>;
00041 
00042   MdcMcHitCol::const_iterator pMdcMcHit = mdcMcHitCol->begin();
00043   for ( ; pMdcMcHit != mdcMcHitCol->end(); pMdcMcHit++) {
00044     // Make MdcTruth data
00045     makeMdcTruth(pMdcMcHit, m_MdcTruth);
00046     // pack the trackIndex, layerId and cellId.
00047     uint32_t helpVal = (m_MdcTruth.trackIndex<<m_trackIndexIndex) & m_trackIndexMask;
00048     helpVal |= ((m_MdcTruth.layerId<<m_layerIdIndex) & m_layerIdMask);
00049     helpVal |= ((m_MdcTruth.cellId<<m_cellIdIndex) & m_cellIdMask);
00050     if (m_MdcTruth.posFlag) helpVal |= ((0x1<<m_posFlagIndex) & m_posFlagMask);
00051     //fill the McHit Vector
00052     mdcReMcHitVec->push_back(helpVal);
00053     mdcReMcHitVec->push_back(m_MdcTruth.edep);
00054     mdcReMcHitVec->push_back(m_MdcTruth.driftD);
00055     mdcReMcHitVec->push_back(m_MdcTruth.x);
00056     mdcReMcHitVec->push_back(m_MdcTruth.y);
00057     mdcReMcHitVec->push_back(m_MdcTruth.z);
00058   }
00059 
00060   OfflineEventFormat::SubDetectorHeader sh(OfflineEventFormat::MDCTRUTH);
00061   SubRawEvent *sub = new SubRawEvent(sh, mdcReMcHitVec);
00062   re->append(sub);
00063   */
00064 
00065   return StatusCode::SUCCESS;
00066 }
00067 
00068 // initialize re2te tables
00069 
00070 StatusCode  MdcMcHitBuilder::initialize(string& initFile)
00071 {
00072   ifstream f;
00073 
00074   //read init file
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 

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