BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EmcMcHitBuilder.cxx
Go to the documentation of this file.
1#include "RawDataCnv/EventManagement/EmcMcHitBuilder.h"
2#include "Identifier/EmcID.h"
3#include <fstream>
4#include <iostream>
5using namespace std;
6
8
9void EmcMcHitBuilder::unPack( vector<uint32_t>::const_iterator& iter,
10 vector<uint32_t>::const_iterator& eiter, EmcTruth_t& et ) {
11 uint32_t helpVal = *( iter++ );
12 assert( iter != eiter );
13 et.x = *( iter++ );
14 assert( iter != eiter );
15 et.y = *( iter++ );
16 assert( iter != eiter );
17 et.z = *( iter++ );
18 assert( iter != eiter );
19 et.px = *( iter++ );
20 assert( iter != eiter );
21 et.py = *( iter++ );
22 assert( iter != eiter );
23 et.pz = *( iter++ );
24 assert( iter != eiter );
25 et.totalEdep = *( iter++ );
26
27 et.trackIndex = ( helpVal & m_trackIndexMask ) >> m_trackIndexIndex;
28 et.partId = ( helpVal & m_partIdMask ) >> m_partIdIndex;
29 et.numTheta = ( helpVal & m_numThetaMask ) >> m_numThetaIndex;
30 et.numPhi = ( helpVal & m_numPhiMask ) >> m_numPhiIndex;
31
32 return;
33}
34
35StatusCode EmcMcHitBuilder::pack( EmcMcHitCol* emcMcHitCol, WriteRawEvent*& re ) {
36 /*
37 if (emcMcHitCol == NULL) {
38 cout << "EmcMcHitBuilder::pack cant get EmcMcHitCol" << endl;
39 return StatusCode::FAILURE;
40 }
41
42 vector<uint32_t> *emcReMcHitVec = new vector<uint32_t>;
43 EmcTruth_t m_EmcTruth;
44
45 EmcMcHitCol::const_iterator pEmcMcHit = emcMcHitCol->begin();
46 for ( ; pEmcMcHit != emcMcHitCol->end(); pEmcMcHit++) {
47 // Make the EmcTruth Data
48 makeEmcTruth(pEmcMcHit, m_EmcTruth);
49 // pack
50 uint32_t helpVal = (m_EmcTruth.trackIndex<<m_trackIndexIndex) & m_trackIndexMask;
51 helpVal |= ((m_EmcTruth.partId<<m_partIdIndex) & m_partIdMask);
52 helpVal |= ((m_EmcTruth.numTheta<<m_numThetaIndex) & m_numThetaMask);
53 helpVal |= ((m_EmcTruth.numPhi<<m_numPhiIndex) & m_numPhiMask);
54 // fill the McHit vector
55 emcReMcHitVec->push_back(helpVal);
56 emcReMcHitVec->push_back(m_EmcTruth.x);
57 emcReMcHitVec->push_back(m_EmcTruth.y);
58 emcReMcHitVec->push_back(m_EmcTruth.z);
59 emcReMcHitVec->push_back(m_EmcTruth.px);
60 emcReMcHitVec->push_back(m_EmcTruth.py);
61 emcReMcHitVec->push_back(m_EmcTruth.pz);
62 emcReMcHitVec->push_back(m_EmcTruth.totalEdep);
63 }
64
65 OfflineEventFormat::SubDetectorHeader sh(OfflineEventFormat::EMCTRUTH);
66 SubRawEvent *sub = new SubRawEvent(sh, emcReMcHitVec);
67 re->append(sub);
68 */
69
70 return StatusCode::SUCCESS;
71}
72
73// initialize re2te tables
74
75StatusCode EmcMcHitBuilder::initialize( string& initFile ) {
76 ifstream f;
77
78 // read init file
79 f.open( initFile.c_str() );
80
81 if ( f.bad() )
82 {
83 cerr << "Error: could not open file " << initFile << endl;
84 return StatusCode::FAILURE;
85 }
86
87 if ( !Builder::find( f, "##EmcTruthConf", initFile ) )
88 {
89 cerr << "Error: could not find '##EmcTruthConf' in file " << initFile << endl;
90 return StatusCode::FAILURE;
91 }
92
93 if ( !Builder::expect( f, "#EmcTruthShift", initFile ) ||
94 !Builder::expectInt( f, "trackIndex", initFile, m_trackIndexIndex, m_trackIndexMask ) ||
95 !Builder::expectInt( f, "partId", initFile, m_partIdIndex, m_partIdMask ) ||
96 !Builder::expectInt( f, "numTheta", initFile, m_numThetaIndex, m_numThetaMask ) ||
97 !Builder::expectInt( f, "numPhi", initFile, m_numPhiIndex, m_numPhiMask ) ||
98 !Builder::expect( f, "#EmcTruthCoeff", initFile ) ||
99 !Builder::expectLong( f, "x", initFile, m_xCoeff ) ||
100 !Builder::expectLong( f, "y", initFile, m_yCoeff ) ||
101 !Builder::expectLong( f, "z", initFile, m_zCoeff ) ||
102 !Builder::expectLong( f, "px", initFile, m_pxCoeff ) ||
103 !Builder::expectLong( f, "py", initFile, m_pyCoeff ) ||
104 !Builder::expectLong( f, "pz", initFile, m_pzCoeff ) ||
105 !Builder::expectLong( f, "totalEdep", initFile, m_totalEdepCoeff ) )
106 return StatusCode::FAILURE;
107
108 f.close();
109
110 return StatusCode::SUCCESS;
111}
112
113uint32_t EmcMcHitBuilder::getTEID( uint32_t reid ) { return 0; }
114
115uint32_t EmcMcHitBuilder::getREID( uint32_t teid ) { return 0; }
116
117void EmcMcHitBuilder::makeEmcTruth( EmcMcHitCol::const_iterator& pEmcMcHit, EmcTruth_t& et ) {
118 Identifier ident = ( *pEmcMcHit )->identify();
119
120 et.trackIndex = ( *pEmcMcHit )->getTrackIndex();
121 et.partId = EmcID::barrel_ec( ident );
122 et.numTheta = EmcID::theta_module( ident );
123 et.numPhi = EmcID::phi_module( ident );
124 et.x = int( ( *pEmcMcHit )->getPositionX() * m_xCoeff );
125 et.y = int( ( *pEmcMcHit )->getPositionY() * m_yCoeff );
126 et.z = int( ( *pEmcMcHit )->getPositionZ() * m_zCoeff );
127 et.px = int( ( *pEmcMcHit )->getPx() * m_pxCoeff );
128 et.py = int( ( *pEmcMcHit )->getPy() * m_pyCoeff );
129 et.pz = int( ( *pEmcMcHit )->getPz() * m_pzCoeff );
130 et.totalEdep = int( ( *pEmcMcHit )->getDepositEnergy() * m_totalEdepCoeff );
131
132 return;
133}
TFile f("ana_bhabha660a_dqa_mcPat_zy_old.root")
eformat::write::FullEventFragment WriteRawEvent
EvtStreamInputIterator< typename Generator::result_type > iter(Generator gen, int N=0)
static bool find(ifstream &f, string msg, string fname)
Definition Builder.cxx:52
static bool expect(ifstream &f, string msg, string fname)
Definition Builder.cxx:25
static bool expectLong(ifstream &f, string msg, string fname, uint64_t &val)
Definition Builder.cxx:46
static bool expectInt(ifstream &f, string msg, string fname, uint32_t &val1, uint32_t &val2)
Definition Builder.cxx:39
Builder()
Definition Builder.cxx:11
static unsigned int barrel_ec(const Identifier &id)
Values of different levels (failure returns 0).
Definition EmcID.cxx:36
static unsigned int theta_module(const Identifier &id)
Definition EmcID.cxx:41
static unsigned int phi_module(const Identifier &id)
Definition EmcID.cxx:46
virtual StatusCode pack(EmcMcHitCol *emcMcHitCol, WriteRawEvent *&re)
virtual uint32_t getTEID(uint32_t teid)
virtual void unPack(vector< uint32_t >::const_iterator &, vector< uint32_t >::const_iterator &, EmcTruth_t &)
virtual uint32_t getREID(uint32_t reid)
virtual StatusCode initialize(string &initFile)
ObjectVector< EmcMcHit > EmcMcHitCol