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

Go to the documentation of this file.
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   if (emcMcHitCol == NULL) {
00038     cout << "EmcMcHitBuilder::pack cant get EmcMcHitCol" << endl;
00039     return StatusCode::FAILURE;
00040   }
00041 
00042   vector<uint32_t> *emcReMcHitVec = new vector<uint32_t>;
00043   EmcTruth_t m_EmcTruth;
00044 
00045   EmcMcHitCol::const_iterator pEmcMcHit = emcMcHitCol->begin();
00046   for ( ; pEmcMcHit != emcMcHitCol->end(); pEmcMcHit++) {
00047     // Make the EmcTruth Data
00048     makeEmcTruth(pEmcMcHit, m_EmcTruth);
00049     // pack
00050     uint32_t helpVal = (m_EmcTruth.trackIndex<<m_trackIndexIndex) & m_trackIndexMask;
00051     helpVal |= ((m_EmcTruth.partId<<m_partIdIndex) & m_partIdMask);
00052     helpVal |= ((m_EmcTruth.numTheta<<m_numThetaIndex) & m_numThetaMask);
00053     helpVal |= ((m_EmcTruth.numPhi<<m_numPhiIndex) & m_numPhiMask);
00054     // fill the McHit vector
00055     emcReMcHitVec->push_back(helpVal);
00056     emcReMcHitVec->push_back(m_EmcTruth.x);
00057     emcReMcHitVec->push_back(m_EmcTruth.y);
00058     emcReMcHitVec->push_back(m_EmcTruth.z);
00059     emcReMcHitVec->push_back(m_EmcTruth.px);
00060     emcReMcHitVec->push_back(m_EmcTruth.py);
00061     emcReMcHitVec->push_back(m_EmcTruth.pz);
00062     emcReMcHitVec->push_back(m_EmcTruth.totalEdep);
00063   }
00064 
00065   OfflineEventFormat::SubDetectorHeader sh(OfflineEventFormat::EMCTRUTH);
00066   SubRawEvent *sub = new SubRawEvent(sh, emcReMcHitVec);
00067   re->append(sub);
00068   */
00069 
00070   return StatusCode::SUCCESS;
00071 }
00072 
00073 // initialize re2te tables
00074 
00075 StatusCode  EmcMcHitBuilder::initialize(string& initFile)
00076 {
00077   ifstream f;
00078 
00079   //read init file
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 

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