00001 #include "MdcCalibAlg/MdcCalibConst.h" 00002 #include "MdcCalibAlg/MdcCalParams.h" 00003 00004 #include <iostream> 00005 00006 using namespace std; 00007 00008 typedef map<int, double>::value_type valType; 00009 00010 MdcCalibConst::MdcCalibConst(){ 00011 } 00012 00013 MdcCalibConst::MdcCalibConst(const MdcCalibConst& calconst){ 00014 m_xtmap = calconst.m_xtmap; 00015 m_t0 = calconst.m_t0; 00016 m_delt0 = calconst.m_delt0; 00017 m_qtpar0 = calconst.m_qtpar0; 00018 m_qtpar1 = calconst.m_qtpar1; 00019 m_sdmap = calconst.m_sdmap; 00020 } 00021 00022 void MdcCalibConst::initCalibConst(){ 00023 int lay; 00024 int lr; 00025 int entr; 00026 int ord; 00027 int key; 00028 double val; 00029 for(lay=0; lay<MdcCalNLayer; lay++){ 00030 for(entr=0; entr<MdcCalNENTRXT; entr++){ 00031 for(lr=0; lr<MdcCalLR; lr++){ 00032 for(ord=0; ord<MdcCalXtNPars; ord++){ 00033 key = getXtKey(lay, entr, lr, ord); 00034 if(1 == ord){ 00035 val = 0.03; 00036 } else if(6 == ord){ 00037 val = 999.0; 00038 } else{ 00039 val = 0.0; 00040 } 00041 m_xtmap.insert( valType(key, val) ); 00042 } 00043 } 00044 } 00045 } 00046 00047 int wir; 00048 double t0 = 0.0; 00049 double dt0 = 0.0; 00050 for(wir=0; wir<MdcCalTotCell; wir++){ 00051 m_t0.push_back(t0); 00052 m_delt0.push_back(dt0); 00053 } 00054 00055 double qtpar0 = 0.0; 00056 double qtpar1 = 0.0; 00057 for(lay=0; lay<MdcCalNLayer; lay++){ 00058 m_qtpar0.push_back(qtpar0); 00059 m_qtpar1.push_back(qtpar1); 00060 } 00061 00062 int bin; 00063 double sdpar = 0.16; 00064 for(lay=0; lay<MdcCalNLayer; lay++){ 00065 for(entr=0; entr<MdcCalNENTRSD; entr++){ 00066 for(lr=0; lr<2; lr++){ 00067 for(bin=0; bin<MdcCalSdNBIN; bin++){ 00068 key = getSdKey(lay, entr, lr, ord); 00069 m_sdmap.insert( valType( key, sdpar) ); 00070 } 00071 } 00072 } 00073 } 00074 } 00075 00076 void MdcCalibConst::fillXtpar(int key, double val){ 00077 m_xtmap.insert( valType( key, val ) ); 00078 } 00079 00080 void MdcCalibConst::resetXtpar(int lay, int entr, int lr, int order, double val){ 00081 int key = getXtKey(lay, entr, lr, order); 00082 m_xtmap[key] = val; 00083 } 00084 00085 double MdcCalibConst::getXtpar(int lay, int entr, int lr, int order){ 00086 double xtpar = -999.0; 00087 int key = getXtKey(lay, entr, lr, order); 00088 if( 1 == m_xtmap.count(key) ) 00089 xtpar = m_xtmap[key]; 00090 00091 return xtpar; 00092 } 00093 00094 int MdcCalibConst::getXtKey(int lay, int entr, int lr, int order) const{ 00095 int key; 00096 00097 key = ( (lay << XTLAYER_INDEX) & XTLAYER_MASK ) | 00098 ( (entr << XTENTRA_INDEX) & XTENTRA_MASK ) | 00099 ( (lr << XTLR_INDEX) & XTLR_MASK ) | 00100 ( (order << XTORDER_INDEX) & XTORDER_MASK ); 00101 00102 return key; 00103 } 00104 00105 void MdcCalibConst::setXtBegin(){ 00106 m_xtiter = m_xtmap.begin(); 00107 } 00108 00109 int MdcCalibConst::getNextXtpar(int& key, double& xtpar) { 00110 if( m_xtiter != m_xtmap.end() ){ 00111 key = (*m_xtiter).first; 00112 xtpar = (*m_xtiter).second; 00113 m_xtiter++; 00114 return 1; 00115 } 00116 else return 0; 00117 } 00118 00119 void MdcCalibConst::fillQtpar(int order, double val){ 00120 if( 0 == order ){ 00121 m_qtpar0.push_back( val ); 00122 } else if( 1 == order ){ 00123 m_qtpar1.push_back( val ); 00124 } else { 00125 cout << "Order of Qtpar Error in fillQtpar()!" << endl; 00126 } 00127 } 00128 00129 void MdcCalibConst::resetQtpar(int lay, int order, double val){ 00130 if( 0 == order ){ 00131 m_qtpar0[lay] = val; 00132 } else if( 1 == order ){ 00133 m_qtpar1[lay] = val; 00134 } else{ 00135 cout << "Order of Qtpar Error in resetQtpar()!" << endl; 00136 } 00137 } 00138 00139 double MdcCalibConst::getQtpar(int lay, int order) const{ 00140 if( 0 == order ){ 00141 return m_qtpar0[lay]; 00142 } else if( 1 == order ){ 00143 return m_qtpar1[lay]; 00144 } else{ 00145 cout << "Order of Qtpar Error in getQtpar()!" << endl; 00146 return -9999.0; 00147 } 00148 } 00149 00150 void MdcCalibConst::fillSdpar(int key, double val){ 00151 m_sdmap.insert( valType( key, val) ); 00152 } 00153 00154 void MdcCalibConst::resetSdpar(int lay, int entr, int lr, int bin, double val){ 00155 int key = getSdKey(lay, entr, lr, bin); 00156 m_sdmap[key] = val; 00157 } 00158 00159 double MdcCalibConst::getSdpar(int lay, int entr, int lr, int bin){ 00160 00161 double sdpar = -999.0; 00162 int key = getSdKey(lay, entr, lr, bin); 00163 if( 1 == m_sdmap.count(key) ){ 00164 return m_sdmap[key]; 00165 } 00166 00167 return sdpar; 00168 } 00169 00170 int MdcCalibConst::getSdKey(int lay, int entr, int lr, int bin) const{ 00171 int key; 00172 00173 key = ( (lay << SDLAYER_INDEX) & SDLAYER_MASK ) | 00174 ( (entr << SDENTRA_INDEX) & SDENTRA_MASK ) | 00175 ( (lr << SDLR_INDEX) & SDLR_MASK ) | 00176 ( (bin << SDBIN_INDEX) & SDBIN_MASK ); 00177 00178 return key; 00179 } 00180 00181 void MdcCalibConst::setSdBegin(){ 00182 m_sditer = m_sdmap.begin(); 00183 } 00184 00185 int MdcCalibConst::getNextSdpar(int& key, double& sdpar) { 00186 if( m_sditer != m_sdmap.end() ){ 00187 key = (*m_sditer).first; 00188 sdpar = (*m_sditer).second; 00189 m_sditer++; 00190 return 1; 00191 } 00192 else return 0; 00193 } 00194 00195 void MdcCalibConst::clear(){ 00196 m_xtmap.clear(); 00197 m_t0.clear(); 00198 m_delt0.clear(); 00199 m_qtpar0.clear(); 00200 m_qtpar1.clear(); 00201 m_sdmap.clear(); 00202 }