BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EFResult.cxx
Go to the documentation of this file.
2#include <iostream>
3
4EFResult::EFResult( std::vector<std::string> ans )
5 : m_answerVector( ans ), m_answerIndex( -1 ), m_midanswerIndex( -1 ), m_efVec() {}
6
7EFResult::EFResult( std::vector<uint32_t> vec, uint32_t pos ) // pos start from 0
8 : m_answerVector(), m_answerIndex( -1 ), m_midanswerIndex( -1 ), m_efVec() {
9 if ( vec.size() + pos > 54 )
10 {
11 std::cout << "***EFResult:EFResult(): vector size error!" << std::endl;
12 m_efVec.resize( 54, 0 );
13 }
14 else
15 {
16 for ( unsigned int i = 0; i < 54; ++i )
17 {
18 if ( i < pos || i >= vec.size() + pos ) m_efVec.push_back( 0 );
19 else m_efVec.push_back( vec[i - pos] );
20 }
21 }
22}
23
25 : m_answerVector(), m_answerIndex( -1 ), m_midanswerIndex( -1 ), m_efVec() {}
26
28
29const CLID& EFResult::classID() {
30 return CLID_EFResult; // hxt ClassID_traits<EFResult>::ID();
31}
32
33const CLID& EFResult::clID() const { return EFResult::classID(); }
34
35const std::vector<uint32_t> EFResult::getEFVec() const { return m_efVec; }
36const uint32_t EFResult::getEFVec( uint32_t pos ) const {
37 if ( pos >= m_efVec.size() ) return 0;
38 else return m_efVec[pos];
39}
40
41bool EFResult::push_back( uint32_t val ) {
42 if ( m_efVec.size() > 0 && m_efVec.size() < 54 ) return false;
43 if ( m_efVec.size() == 0 ) m_efVec.resize( 54, 0 );
44 m_efVec.push_back( val );
45 return true;
46}
47
48bool EFResult::appToEFVec( double val, uint32_t pos ) {
49 if ( pos >= 54 ) return false;
50 if ( m_efVec.size() != 0 && m_efVec.size() < 54 )
51 { std::cout << "EFResult::appToEFVec-->size error!" << std::endl; }
52 if ( m_efVec.size() == 0 ) m_efVec.resize( 54, 0 );
53 float a = val;
54 float* f = (float*)&m_efVec[pos];
55 *f = a;
56 return true;
57}
58
59bool EFResult::addToEFVec( uint32_t val, uint32_t pos ) {
60 if ( pos >= 54 ) return false;
61 if ( m_efVec.size() != 0 && m_efVec.size() < 54 )
62 { std::cout << "EFResult::addToEFVec-->size error!" << std::endl; }
63 if ( m_efVec.size() == 0 ) m_efVec.resize( 54, 0 );
64
65 m_efVec[pos] += val;
66
67 return true;
68}
69
70bool EFResult::setVecBit( uint32_t val, uint32_t vecpos, uint32_t bbegin, uint32_t bend ) {
71 if ( vecpos >= 54 ) return false;
72 if ( bend >= 32 || bbegin > bend ) return false;
73 if ( m_efVec.size() == 0 ) m_efVec.resize( 54, 0 );
74 uint32_t bits = 0xFFFFFFFF >> ( 31 - bend + bbegin );
75 m_efVec[vecpos] &= ( ~( ( bits ) << bbegin ) );
76 m_efVec[vecpos] |= ( val & bits ) << bbegin;
77 return true;
78}
79
80bool EFResult::setVecBit( bool val, uint32_t vecpos, uint32_t bitpos ) {
81 if ( vecpos >= 54 ) return false;
82 if ( bitpos >= 32 ) return false;
83 if ( m_efVec.size() == 0 ) m_efVec.resize( 54, 0 );
84 if ( val ) m_efVec[vecpos] |= ( 1 << bitpos );
85 else m_efVec[vecpos] &= ( ~( 1 << bitpos ) );
86 return true;
87}
88
89void EFResult::setAnswer( std::string& answer ) {
90 int iCount = 0;
91
92 std::vector<std::string>::iterator itVs = m_answerVector.begin();
93 std::vector<std::string>::iterator endVs = m_answerVector.end();
94 for ( ; itVs != endVs && m_answerIndex == -1; ++itVs )
95 {
96 if ( *itVs == answer )
97 {
98 m_answerIndex = iCount;
99
100 // Store the answer index in the first data member field
101 // zoujh: memory leak ... what's the use of m_efVec ?
102 // m_efVec.push_back(m_answerIndex);
103 }
104 iCount++;
105 }
106}
107
108void EFResult::setMidAnswer( std::string& answer ) {
109 int iCount = 0;
110 // cout << "EFResult::setMidAnswer "<<answer<<" ("<<m_answerVector.size()<<")"<<endl;
111 std::vector<std::string>::iterator itVs = m_answerVector.begin();
112 std::vector<std::string>::iterator endVs = m_answerVector.end();
113 for ( ; itVs != endVs && m_answerIndex == -1; ++itVs )
114 {
115 if ( *itVs == answer )
116 {
117 m_midanswerIndex = iCount;
118
119 // Store the answer index in the first data member field
120 // zoujh: memory leak ... what's the use of m_efVec ?
121 // m_efVec.push_back(m_answerIndex);
122 }
123 // cout<<(*itVs)<<endl;
124 iCount++;
125 }
126 // cout<<m_midanswerIndex<<endl;
127}
128
130 m_answerIndex = -1;
131 m_midanswerIndex = -1;
132 if ( m_efVec.size() >= 54 )
133 {
134 m_efVec.resize( 54, 0 );
135 for ( unsigned int i = 0; i < m_efVec.size(); ++i ) m_efVec[i] = 0;
136 }
137 else if ( m_efVec.size() != 0 )
138 { std::cout << "EFResult::reset(): m_efVec size check error!" << std::endl; }
139}
140
141const std::string EFResult::getAnswer() const { return m_answerVector[m_answerIndex]; }
142
143const int EFResult::getAnswerIndex() const { return m_answerIndex; }
144
145const std::string EFResult::getMidAnswer() const { return m_answerVector[m_midanswerIndex]; }
146
147const int EFResult::getMidAnswerIndex() const { return m_midanswerIndex; }
dble_vec_t vec[12]
TFile f("ana_bhabha660a_dqa_mcPat_zy_old.root")
Defines the EFResult RDO structure.
bool addToEFVec(uint32_t val, uint32_t pos)
Definition EFResult.cxx:59
const std::string getAnswer() const
Definition EFResult.cxx:141
const int getMidAnswerIndex() const
Definition EFResult.cxx:147
static const CLID & classID()
Definition EFResult.cxx:29
void setAnswer(std::string &answer)
Definition EFResult.cxx:89
bool appToEFVec(double val, uint32_t pos)
Definition EFResult.cxx:48
const int getAnswerIndex() const
Definition EFResult.cxx:143
void setMidAnswer(std::string &answer)
Definition EFResult.cxx:108
virtual ~EFResult()
Definition EFResult.cxx:27
const std::string getMidAnswer() const
Definition EFResult.cxx:145
virtual const CLID & clID() const
Definition EFResult.cxx:33
void reset()
Definition EFResult.cxx:129
bool setVecBit(uint32_t val, uint32_t vecpos, uint32_t bbegin, uint32_t bend)
Definition EFResult.cxx:70
const std::vector< uint32_t > getEFVec() const
Definition EFResult.cxx:35
bool push_back(uint32_t val)
Definition EFResult.cxx:41