/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/EventFilter/HltUtilities/HltDataTypes/HltDataTypes-01-01-03/src/EFResult.cxx

Go to the documentation of this file.
00001 #include <iostream>
00002 #include "HltDataTypes/EFResult.h"
00003 
00004 EFResult::EFResult(std::vector<std::string> ans)
00005   : m_answerVector(ans),
00006     m_answerIndex(-1), 
00007     m_midanswerIndex(-1),
00008     m_efVec()
00009 {
00010 }
00011 
00012 EFResult::EFResult(std::vector<uint32_t> vec, uint32_t pos) //pos start from 0
00013   : m_answerVector(),
00014     m_answerIndex(-1),
00015     m_midanswerIndex(-1),
00016     m_efVec()
00017 {
00018   if(vec.size()+pos>54) {
00019     std::cout <<"***EFResult:EFResult(): vector size error!" << std::endl;
00020     m_efVec.resize(54,0);
00021   }
00022   else{
00023     for(unsigned int i=0;i<54;++i){
00024       if(i<pos||i>=vec.size()+pos) m_efVec.push_back(0);
00025       else                         m_efVec.push_back(vec[i-pos]);
00026     }
00027   }
00028 }
00029 
00030 EFResult::EFResult():
00031   m_answerVector(),
00032   m_answerIndex(-1),
00033   m_midanswerIndex(-1),
00034   m_efVec()
00035 {
00036 
00037 }
00038 
00039 EFResult::~EFResult(){}
00040 
00041 const CLID &EFResult::classID()
00042 {
00043   return CLID_EFResult; // hxt  ClassID_traits<EFResult>::ID();
00044 }
00045 
00046 const CLID &EFResult::clID() const
00047 {
00048   return EFResult::classID();
00049 }
00050 
00051 const std::vector<uint32_t> EFResult::getEFVec() const
00052 {
00053   return m_efVec;
00054 }
00055 const uint32_t EFResult::getEFVec(uint32_t pos) const
00056 {
00057   if(pos>=m_efVec.size())return 0;
00058   else return m_efVec[pos];
00059 }
00060 
00061 bool EFResult::push_back(uint32_t val){
00062   if(m_efVec.size()>0&&m_efVec.size()<54) return false;
00063   if(m_efVec.size()==0) m_efVec.resize(54,0);
00064   m_efVec.push_back(val);
00065   return true;
00066 }
00067 
00068 bool EFResult::appToEFVec(double val, uint32_t pos)
00069 {
00070   if(pos>=54) return false;
00071   if(m_efVec.size()!=0&&m_efVec.size()<54){
00072     std::cout << "EFResult::appToEFVec-->size error!" <<std::endl;
00073   }
00074   if(m_efVec.size()==0) m_efVec.resize(54,0);
00075   float a=val;
00076   float *f=(float*)&m_efVec[pos];
00077   *f = a;
00078   return true;
00079 }
00080 
00081 bool EFResult::addToEFVec(uint32_t val, uint32_t pos)
00082 {
00083   if(pos>=54) return false;
00084   if(m_efVec.size()!=0&&m_efVec.size()<54){
00085     std::cout << "EFResult::addToEFVec-->size error!" <<std::endl;
00086   }
00087   if(m_efVec.size()==0) m_efVec.resize(54,0);
00088 
00089   m_efVec[pos] +=val;
00090 
00091   return true;
00092 }
00093 
00094 bool EFResult::setVecBit(uint32_t val, uint32_t vecpos,uint32_t bbegin,uint32_t bend)
00095 {
00096   if(vecpos>=54) return false;
00097   if(bend>=32||bbegin>bend) return false;
00098   if(m_efVec.size()==0) m_efVec.resize(54,0);
00099   uint32_t bits=0xFFFFFFFF>>(31-bend+bbegin);
00100   m_efVec[vecpos]&=  (~((bits)<<bbegin));
00101   m_efVec[vecpos]|= (val&bits)<<bbegin;
00102   return true;
00103 }
00104 
00105 bool EFResult::setVecBit(bool val,uint32_t vecpos,uint32_t bitpos)
00106 {
00107   if(vecpos>=54) return false;
00108   if(bitpos>=32) return false;
00109   if(m_efVec.size()==0) m_efVec.resize(54,0);
00110   if(val) m_efVec[vecpos]|=(1<<bitpos);
00111   else    m_efVec[vecpos]&=(~(1<<bitpos));
00112   return true;
00113 }
00114 
00115 void EFResult::setAnswer(std::string &answer)
00116 {
00117   int iCount = 0;
00118 
00119   std::vector<std::string>::iterator itVs = m_answerVector.begin();
00120   std::vector<std::string>::iterator endVs = m_answerVector.end();
00121   for (;itVs != endVs && m_answerIndex == -1; ++itVs) {
00122     if (*itVs == answer) {
00123       m_answerIndex = iCount;
00124       
00125       // Store the answer index in the first data member field
00126       // zoujh: memory leak ... what's the use of m_efVec ?
00127       //m_efVec.push_back(m_answerIndex); 
00128     }
00129     iCount++;
00130   }
00131 }
00132 
00133 void EFResult::setMidAnswer(std::string &answer)
00134 {
00135   int iCount = 0;
00136   //cout << "EFResult::setMidAnswer   "<<answer<<" ("<<m_answerVector.size()<<")"<<endl;
00137   std::vector<std::string>::iterator itVs = m_answerVector.begin();
00138   std::vector<std::string>::iterator endVs = m_answerVector.end();
00139   for (;itVs != endVs && m_answerIndex == -1; ++itVs) {
00140     if (*itVs == answer) {
00141       m_midanswerIndex = iCount;
00142 
00143       // Store the answer index in the first data member field
00144       // zoujh: memory leak ... what's the use of m_efVec ?
00145       //m_efVec.push_back(m_answerIndex);
00146     }
00147     //cout<<(*itVs)<<endl;
00148     iCount++;
00149   }
00150   //cout<<m_midanswerIndex<<endl;
00151 }
00152 
00153 void EFResult::reset()
00154 {
00155   m_answerIndex = -1;
00156   m_midanswerIndex = -1;
00157   if(m_efVec.size()>=54){
00158     m_efVec.resize(54,0);
00159     for(unsigned int i=0;i<m_efVec.size();++i)  m_efVec[i]=0;
00160   }
00161   else if(m_efVec.size()!=0){
00162     std::cout <<"EFResult::reset(): m_efVec size check error!"<<std::endl;
00163   }
00164 }
00165 
00166 const std::string EFResult::getAnswer() const { return m_answerVector[m_answerIndex]; }
00167 
00168 const int EFResult::getAnswerIndex() const { return m_answerIndex; }
00169 
00170 const std::string EFResult::getMidAnswer() const { return m_answerVector[m_midanswerIndex]; }
00171 
00172 const int EFResult::getMidAnswerIndex() const { return m_midanswerIndex; }

Generated on Tue Nov 29 23:12:07 2016 for BOSS_7.0.2 by  doxygen 1.4.7