CGEM BOSS 6.6.5.g
BESIII Offline Software System
Loading...
Searching...
No Matches
MucMcHitBuilder.cxx
Go to the documentation of this file.
1#include <iostream>
2#include <fstream>
3#include "Identifier/MucID.h"
5using namespace std;
6
8 :Builder()
9{
11}
12
13void MucMcHitBuilder::unPack(vector<uint32_t>::const_iterator& iter,
14 vector<uint32_t>::const_iterator& eiter, MucTruth_t& mt)
15{
16 uint32_t helpVal = *(iter++); assert(iter != eiter);
17 mt.x = *(iter++); assert(iter != eiter);
18 mt.y = *(iter++); assert(iter != eiter);
19 mt.z = *(iter++); assert(iter != eiter);
20 mt.px = *(iter++); assert(iter != eiter);
21 mt.py = *(iter++); assert(iter != eiter);
22 mt.pz = *(iter++);
23
24 mt.trackIndex = (helpVal&m_trackIndexMask) >> m_trackIndexIndex;
25 mt.partId = (helpVal&m_partIdMask) >> m_partIdIndex;
26 mt.segId = (helpVal&m_segIdMask) >> m_segIdIndex;
27 mt.gapId = (helpVal&m_gapIdMask) >> m_gapIdIndex;
28 mt.stripId = (helpVal&m_stripIdMask) >> m_stripIdIndex;
29
30 return;
31}
32
33
34StatusCode MucMcHitBuilder::pack(MucMcHitCol* mucMcHitCol, WriteRawEvent*& re)
35{
36/*
37
38 if (mucMcHitCol == NULL) {
39 cout << "MucMcHitBuilder::pack cant get MucMcHitCol" << endl;
40 return StatusCode::FAILURE;
41 }
42
43 vector<uint32_t> *mucReMcHitVec = new vector<uint32_t>;
44 MucTruth_t m_MucTruth;
45
46 MucMcHitCol::const_iterator pMucMcHit = mucMcHitCol->begin();
47 for ( ; pMucMcHit != mucMcHitCol->end(); pMucMcHit++) {
48 //make the MucTruth data
49 makeMucTruth(pMucMcHit, m_MucTruth);
50 //pack integers in mucTruth
51 uint32_t helpVal = (m_MucTruth.trackIndex<<m_trackIndexIndex) & m_trackIndexMask;
52 helpVal |= ((m_MucTruth.partId<<m_partIdIndex) & m_partIdMask);
53 helpVal |= ((m_MucTruth.segId<<m_segIdIndex) & m_segIdMask);
54 helpVal |= ((m_MucTruth.gapId<<m_gapIdIndex) & m_gapIdMask);
55 helpVal |= ((m_MucTruth.stripId<<m_stripIdIndex) & m_stripIdMask);
56 //fill the McHit vector
57 mucReMcHitVec->push_back(helpVal);
58 mucReMcHitVec->push_back(m_MucTruth.x);
59 mucReMcHitVec->push_back(m_MucTruth.y);
60 mucReMcHitVec->push_back(m_MucTruth.z);
61 mucReMcHitVec->push_back(m_MucTruth.px);
62 mucReMcHitVec->push_back(m_MucTruth.py);
63 mucReMcHitVec->push_back(m_MucTruth.pz);
64 }
65
66 OfflineEventFormat::SubDetectorHeader sh(OfflineEventFormat::MUCTRUTH);
67 SubRawEvent *sub = new SubRawEvent(sh, mucReMcHitVec);
68 re->append(sub);
69 */
70
71 return StatusCode::SUCCESS;
72}
73
74// initialize re2te tables
75
76StatusCode MucMcHitBuilder::initialize(string& initFile)
77{
78 ifstream f;
79
80 //read init file
81 f.open(initFile.c_str());
82
83 if ( f.bad() ) {
84 cerr << "Error: could not open file " << initFile << endl;
85 return StatusCode::FAILURE;
86 }
87
88 if (!Builder::find( f, "##MucTruthConf", initFile)) {
89 cerr << "Error: could not find '##MucTruthConf' in file " << initFile << endl;
90 return StatusCode::FAILURE;
91 }
92
93 if ( !Builder::expect( f, "#MucTruthShift", 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, "segId", initFile, m_segIdIndex, m_segIdMask) ||
97 !Builder::expectInt( f, "gapId", initFile, m_gapIdIndex, m_gapIdMask) ||
98 !Builder::expectInt( f, "stripId", initFile, m_stripIdIndex, m_stripIdMask) ||
99 !Builder::expect( f, "#MucTruthCoeff", initFile) ||
100 !Builder::expectLong( f, "x", initFile, m_xCoeff) ||
101 !Builder::expectLong( f, "y", initFile, m_yCoeff) ||
102 !Builder::expectLong( f, "z", initFile, m_zCoeff) ||
103 !Builder::expectLong( f, "px", initFile, m_pxCoeff) ||
104 !Builder::expectLong( f, "py", initFile, m_pyCoeff) ||
105 !Builder::expectLong( f, "pz", initFile, m_pzCoeff) )
106 return StatusCode::FAILURE;
107
108 f.close();
109
110 return StatusCode::SUCCESS;
111}
112
113
114uint32_t MucMcHitBuilder::getTEID(uint32_t reid)
115{
116 return 0;
117}
118
119
120uint32_t MucMcHitBuilder::getREID(uint32_t teid)
121{
122 return 0;
123}
124
125void MucMcHitBuilder::makeMucTruth
126(MucMcHitCol::const_iterator& pMucMcHit, MucTruth_t& mt)
127{
128 Identifier ident = (*pMucMcHit)->identify();
129
130 mt.trackIndex = (*pMucMcHit)->getTrackIndex() % 1000;
131 mt.partId = MucID::part(ident);
132 mt.segId = MucID::seg(ident);
133 mt.gapId = MucID::gap(ident);
134 mt.stripId = MucID::strip(ident);
135 mt.x = int((*pMucMcHit)->getPositionX() * m_xCoeff);
136 mt.y = int((*pMucMcHit)->getPositionY() * m_yCoeff);
137 mt.z = int((*pMucMcHit)->getPositionZ() * m_zCoeff);
138 mt.px = int((*pMucMcHit)->getPx() * m_pxCoeff);
139 mt.py = int((*pMucMcHit)->getPy() * m_pyCoeff);
140 mt.pz = int((*pMucMcHit)->getPz() * m_pzCoeff);
141
142 return;
143}
144
EvtStreamInputIterator< typename Generator::result_type > iter(Generator gen, int N=0)
static bool find(ifstream &f, string msg, string fname)
Definition: Builder.cxx:60
static bool expect(ifstream &f, string msg, string fname)
Definition: Builder.cxx:28
static bool expectLong(ifstream &f, string msg, string fname, uint64_t &val)
Definition: Builder.cxx:52
static bool expectInt(ifstream &f, string msg, string fname, uint32_t &val1, uint32_t &val2)
Definition: Builder.cxx:44
static int part(const Identifier &id)
Definition: MucID.cxx:46
static int gap(const Identifier &id)
Definition: MucID.cxx:66
static int seg(const Identifier &id)
Definition: MucID.cxx:56
static int strip(const Identifier &id)
Definition: MucID.cxx:76
virtual uint32_t getREID(uint32_t reid)
virtual StatusCode initialize(string &initFile)
virtual uint32_t getTEID(uint32_t teid)
virtual void unPack(vector< uint32_t >::const_iterator &, vector< uint32_t >::const_iterator &, MucTruth_t &)
virtual StatusCode pack(MucMcHitCol *mucMcHitCol, WriteRawEvent *&re)