00001 #include "include/MdcCalibConst.h"
00002
00003 #include <iostream>
00004
00005 typedef std::map<int, double>::value_type valType;
00006
00007 MdcCalibConst::MdcCalibConst(){
00008
00009 }
00010
00011 MdcCalibConst::MdcCalibConst(const MdcCalibConst& calconst){
00012 m_xtmap = calconst.m_xtmap;
00013 m_t0 = calconst.m_t0;
00014 m_delt0 = calconst.m_delt0;
00015
00016
00017 m_qtpar0 = calconst.m_qtpar0;
00018 m_qtpar1 = calconst.m_qtpar1;
00019 m_sdmap = calconst.m_sdmap;
00020 }
00021
00022 void MdcCalibConst::fillXtpar(int key, double val){
00023 m_xtmap.insert( valType( key, val ) );
00024 }
00025
00026 void MdcCalibConst::resetXtpar(int lay, int entr, int lr, int order, double val){
00027 int key = getXtKey(lay, entr, lr, order);
00028 m_xtmap[key] = val;
00029 }
00030
00031 double MdcCalibConst::getXtpar(int lay, int entr, int lr, int order){
00032 double xtpar = -999.0;
00033 int key = getXtKey(lay, entr, lr, order);
00034 if( 1 == m_xtmap.count(key) )
00035 xtpar = m_xtmap[key];
00036
00037 return xtpar;
00038 }
00039
00040 int MdcCalibConst::getXtKey(int lay, int entr, int lr, int order) const{
00041 int key;
00042
00043 key = ( (lay << XTLAYER_INDEX) & XTLAYER_MASK ) |
00044 ( (entr << XTENTRA_INDEX) & XTENTRA_MASK ) |
00045 ( (lr << XTLR_INDEX) & XTLR_MASK ) |
00046 ( (order << XTORDER_INDEX) & XTORDER_MASK );
00047
00048 return key;
00049 }
00050
00051 void MdcCalibConst::setXtBegin(){
00052 m_xtiter = m_xtmap.begin();
00053 }
00054
00055 int MdcCalibConst::getNextXtpar(int& key, double& xtpar) {
00056 if( m_xtiter != m_xtmap.end() ){
00057 key = (*m_xtiter).first;
00058 xtpar = (*m_xtiter).second;
00059 m_xtiter++;
00060 return 1;
00061 }
00062 else return 0;
00063 }
00064
00065 void MdcCalibConst::fillQtpar(int order, double val){
00066 if( 0 == order ){
00067 m_qtpar0.push_back( val );
00068 } else if( 1 == order ){
00069 m_qtpar1.push_back( val );
00070 } else {
00071 std::cout << "Order of Qtpar Error in fillQtpar()!" << std::endl;
00072 }
00073 }
00074
00075 void MdcCalibConst::resetQtpar(int lay, int order, double val){
00076 if( 0 == order ){
00077 m_qtpar0[lay] = val;
00078 } else if( 1 == order ){
00079 m_qtpar1[lay] = val;
00080 } else{
00081 std::cout << "Order of Qtpar Error in resetQtpar()!" << std::endl;
00082 }
00083 }
00084
00085 double MdcCalibConst::getQtpar(int lay, int order) const{
00086 if( 0 == order ){
00087 return m_qtpar0[lay];
00088 } else if( 1 == order ){
00089 return m_qtpar1[lay];
00090 } else{
00091 std::cout << "Order of Qtpar Error in getQtpar()!" << std::endl;
00092 return -9999.0;
00093 }
00094 }
00095
00096 void MdcCalibConst::fillSdpar(int key, double val){
00097 m_sdmap.insert( valType( key, val) );
00098 }
00099
00100 void MdcCalibConst::resetSdpar(int lay, int entr, int lr, int bin, double val){
00101 int key = getSdKey(lay, entr, lr, bin);
00102 m_sdmap[key] = val;
00103 }
00104
00105 double MdcCalibConst::getSdpar(int lay, int entr, int lr, int bin){
00106
00107 double sdpar = -999.0;
00108 int key = getSdKey(lay, entr, lr, bin);
00109 if( 1 == m_sdmap.count(key) ){
00110 return m_sdmap[key];
00111 }
00112
00113 return sdpar;
00114 }
00115
00116 int MdcCalibConst::getSdKey(int lay, int entr, int lr, int bin) const{
00117 int key;
00118
00119 key = ( (lay << SDLAYER_INDEX) & SDLAYER_MASK ) |
00120 ( (entr << SDENTRA_INDEX) & SDENTRA_MASK ) |
00121 ( (lr << SDLR_INDEX) & SDLR_MASK ) |
00122 ( (bin << SDBIN_INDEX) & SDBIN_MASK );
00123
00124 return key;
00125 }
00126
00127 void MdcCalibConst::setSdBegin(){
00128 m_sditer = m_sdmap.begin();
00129 }
00130
00131 int MdcCalibConst::getNextSdpar(int& key, double& sdpar) {
00132 if( m_sditer != m_sdmap.end() ){
00133 key = (*m_sditer).first;
00134 sdpar = (*m_sditer).second;
00135 m_sditer++;
00136 return 1;
00137 }
00138 else return 0;
00139 }
00140
00141 void MdcCalibConst::clear(){
00142 m_xtmap.clear();
00143 m_t0.clear();
00144 m_delt0.clear();
00145
00146
00147 m_qtpar0.clear();
00148 m_qtpar1.clear();
00149 m_sdmap.clear();
00150 }