00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "CalibFormats/SiPixelObjects/interface/PixelROCDACSettings.h"
00010 #include "CalibFormats/SiPixelObjects/interface/PixelDACNames.h"
00011 #include <fstream>
00012 #include <iostream>
00013
00014 using namespace pos;
00015 using namespace std;
00016
00017 PixelROCDACSettings::PixelROCDACSettings(){}
00018
00019
00020 void PixelROCDACSettings::getDACs(vector<unsigned int>& dacs) const
00021 {
00022 dacs.clear();
00023 dacs.push_back(Vdd_);
00024 dacs.push_back(Vana_);
00025 dacs.push_back(Vsf_);
00026 dacs.push_back(Vcomp_);
00027 dacs.push_back(Vleak_);
00028 dacs.push_back(VrgPr_);
00029 dacs.push_back(VwllPr_);
00030 dacs.push_back(VrgSh_);
00031 dacs.push_back(VwllSh_);
00032 dacs.push_back(VHldDel_);
00033 dacs.push_back(Vtrim_);
00034 dacs.push_back(VcThr_);
00035 dacs.push_back(VIbias_bus_);
00036 dacs.push_back(VIbias_sf_);
00037 dacs.push_back(VOffsetOp_);
00038 dacs.push_back(VbiasOp_);
00039 dacs.push_back(VOffsetRO_);
00040 dacs.push_back(VIon_);
00041 dacs.push_back(VIbias_PH_);
00042 dacs.push_back(VIbias_DAC_);
00043 dacs.push_back(VIbias_roc_);
00044 dacs.push_back(VIColOr_);
00045 dacs.push_back(Vnpix_);
00046 dacs.push_back(VsumCol_);
00047 dacs.push_back(Vcal_);
00048 dacs.push_back(CalDel_);
00049 dacs.push_back(TempRange_);
00050 dacs.push_back(WBC_);
00051 dacs.push_back(ChipContReg_);
00052 }
00053
00054
00055 void PixelROCDACSettings::getDACs(std::map<std::string, unsigned int>& dacs) const
00056 {
00057 dacs.clear();
00058 dacs[k_DACName_Vdd ] = Vdd_ ;
00059 dacs[k_DACName_Vana ] = Vana_ ;
00060 dacs[k_DACName_Vsf ] = Vsf_ ;
00061 dacs[k_DACName_Vcomp ] = Vcomp_ ;
00062 dacs[k_DACName_Vleak ] = Vleak_ ;
00063 dacs[k_DACName_VrgPr ] = VrgPr_ ;
00064 dacs[k_DACName_VwllPr ] = VwllPr_ ;
00065 dacs[k_DACName_VrgSh ] = VrgSh_ ;
00066 dacs[k_DACName_VwllSh ] = VwllSh_ ;
00067 dacs[k_DACName_VHldDel ] = VHldDel_ ;
00068 dacs[k_DACName_Vtrim ] = Vtrim_ ;
00069 dacs[k_DACName_VcThr ] = VcThr_ ;
00070 dacs[k_DACName_VIbias_bus ] = VIbias_bus_ ;
00071 dacs[k_DACName_VIbias_sf ] = VIbias_sf_ ;
00072 dacs[k_DACName_VOffsetOp ] = VOffsetOp_ ;
00073 dacs[k_DACName_VbiasOp ] = VbiasOp_ ;
00074 dacs[k_DACName_VOffsetRO ] = VOffsetRO_ ;
00075 dacs[k_DACName_VIon ] = VIon_ ;
00076 dacs[k_DACName_VIbias_PH ] = VIbias_PH_ ;
00077 dacs[k_DACName_VIbias_DAC ] = VIbias_DAC_ ;
00078 dacs[k_DACName_VIbias_roc ] = VIbias_roc_ ;
00079 dacs[k_DACName_VIColOr ] = VIColOr_ ;
00080 dacs[k_DACName_Vnpix ] = Vnpix_ ;
00081 dacs[k_DACName_VsumCol ] = VsumCol_ ;
00082 dacs[k_DACName_Vcal ] = Vcal_ ;
00083 dacs[k_DACName_CalDel ] = CalDel_ ;
00084 dacs[k_DACName_TempRange ] = TempRange_ ;
00085 dacs[k_DACName_WBC ] = WBC_ ;
00086 dacs[k_DACName_ChipContReg] = ChipContReg_;
00087 }
00088
00089
00090 void PixelROCDACSettings::setDACs(std::map<std::string, unsigned int>& dacs)
00091 {
00092 Vdd_ = dacs[k_DACName_Vdd ] ;
00093 Vana_ = dacs[k_DACName_Vana ] ;
00094 Vsf_ = dacs[k_DACName_Vsf ] ;
00095 Vcomp_ = dacs[k_DACName_Vcomp ] ;
00096 Vleak_ = dacs[k_DACName_Vleak ] ;
00097 VrgPr_ = dacs[k_DACName_VrgPr ] ;
00098 VwllPr_ = dacs[k_DACName_VwllPr ] ;
00099 VrgSh_ = dacs[k_DACName_VrgSh ] ;
00100 VwllSh_ = dacs[k_DACName_VwllSh ] ;
00101 VHldDel_ = dacs[k_DACName_VHldDel ] ;
00102 Vtrim_ = dacs[k_DACName_Vtrim ] ;
00103 VcThr_ = dacs[k_DACName_VcThr ] ;
00104 VIbias_bus_ = dacs[k_DACName_VIbias_bus ] ;
00105 VIbias_sf_ = dacs[k_DACName_VIbias_sf ] ;
00106 VOffsetOp_ = dacs[k_DACName_VOffsetOp ] ;
00107 VbiasOp_ = dacs[k_DACName_VbiasOp ] ;
00108 VOffsetRO_ = dacs[k_DACName_VOffsetRO ] ;
00109 VIon_ = dacs[k_DACName_VIon ] ;
00110 VIbias_PH_ = dacs[k_DACName_VIbias_PH ] ;
00111 VIbias_DAC_ = dacs[k_DACName_VIbias_DAC ] ;
00112 VIbias_roc_ = dacs[k_DACName_VIbias_roc ] ;
00113 VIColOr_ = dacs[k_DACName_VIColOr ] ;
00114 Vnpix_ = dacs[k_DACName_Vnpix ] ;
00115 VsumCol_ = dacs[k_DACName_VsumCol ] ;
00116 Vcal_ = dacs[k_DACName_Vcal ] ;
00117 CalDel_ = dacs[k_DACName_CalDel ] ;
00118 TempRange_ = dacs[k_DACName_TempRange ] ;
00119 WBC_ = dacs[k_DACName_WBC ] ;
00120 ChipContReg_ = dacs[k_DACName_ChipContReg] ;
00121 }
00122
00123
00124 void PixelROCDACSettings::compareDACs(std::map<std::string, unsigned int>& dacs,
00125 std::map<std::string, bool>& changes,
00126 std::map<std::string, unsigned int>& previous)
00127 {
00128 changes[k_DACName_Vdd ] = false;
00129 changes[k_DACName_Vana ] = false;
00130 changes[k_DACName_Vsf ] = false;
00131 changes[k_DACName_Vcomp ] = false;
00132 changes[k_DACName_Vleak ] = false;
00133 changes[k_DACName_VrgPr ] = false;
00134 changes[k_DACName_VwllPr ] = false;
00135 changes[k_DACName_VrgSh ] = false;
00136 changes[k_DACName_VwllSh ] = false;
00137 changes[k_DACName_VHldDel ] = false;
00138 changes[k_DACName_Vtrim ] = false;
00139 changes[k_DACName_VcThr ] = false;
00140 changes[k_DACName_VIbias_bus ] = false;
00141 changes[k_DACName_VIbias_sf ] = false;
00142 changes[k_DACName_VOffsetOp ] = false;
00143 changes[k_DACName_VbiasOp ] = false;
00144 changes[k_DACName_VOffsetRO ] = false;
00145 changes[k_DACName_VIon ] = false;
00146 changes[k_DACName_VIbias_PH ] = false;
00147 changes[k_DACName_VIbias_DAC ] = false;
00148 changes[k_DACName_VIbias_roc ] = false;
00149 changes[k_DACName_VIColOr ] = false;
00150 changes[k_DACName_Vnpix ] = false;
00151 changes[k_DACName_VsumCol ] = false;
00152 changes[k_DACName_Vcal ] = false;
00153 changes[k_DACName_CalDel ] = false;
00154 changes[k_DACName_TempRange ] = false;
00155 changes[k_DACName_WBC ] = false;
00156 changes[k_DACName_ChipContReg] = false;
00157
00158 if( Vdd_ != dacs[k_DACName_Vdd ] ) {changes[k_DACName_Vdd ] = true; previous[k_DACName_Vdd ] = Vdd_ ;}
00159 if( Vana_ != dacs[k_DACName_Vana ] ) {changes[k_DACName_Vana ] = true; previous[k_DACName_Vana ] = Vana_ ;}
00160 if( Vsf_ != dacs[k_DACName_Vsf ] ) {changes[k_DACName_Vsf ] = true; previous[k_DACName_Vsf ] = Vsf_ ;}
00161 if( Vcomp_ != dacs[k_DACName_Vcomp ] ) {changes[k_DACName_Vcomp ] = true; previous[k_DACName_Vcomp ] = Vcomp_ ;}
00162 if( Vleak_ != dacs[k_DACName_Vleak ] ) {changes[k_DACName_Vleak ] = true; previous[k_DACName_Vleak ] = Vleak_ ;}
00163 if( VrgPr_ != dacs[k_DACName_VrgPr ] ) {changes[k_DACName_VrgPr ] = true; previous[k_DACName_VrgPr ] = VrgPr_ ;}
00164 if( VwllPr_ != dacs[k_DACName_VwllPr ] ) {changes[k_DACName_VwllPr ] = true; previous[k_DACName_VwllPr ] = VwllPr_ ;}
00165 if( VrgSh_ != dacs[k_DACName_VrgSh ] ) {changes[k_DACName_VrgSh ] = true; previous[k_DACName_VrgSh ] = VrgSh_ ;}
00166 if( VwllSh_ != dacs[k_DACName_VwllSh ] ) {changes[k_DACName_VwllSh ] = true; previous[k_DACName_VwllSh ] = VwllSh_ ;}
00167 if( VHldDel_ != dacs[k_DACName_VHldDel ] ) {changes[k_DACName_VHldDel ] = true; previous[k_DACName_VHldDel ] = VHldDel_ ;}
00168 if( Vtrim_ != dacs[k_DACName_Vtrim ] ) {changes[k_DACName_Vtrim ] = true; previous[k_DACName_Vtrim ] = Vtrim_ ;}
00169 if( VcThr_ != dacs[k_DACName_VcThr ] ) {changes[k_DACName_VcThr ] = true; previous[k_DACName_VcThr ] = VcThr_ ;}
00170 if( VIbias_bus_ != dacs[k_DACName_VIbias_bus ] ) {changes[k_DACName_VIbias_bus ] = true; previous[k_DACName_VIbias_bus ] = VIbias_bus_ ;}
00171 if( VIbias_sf_ != dacs[k_DACName_VIbias_sf ] ) {changes[k_DACName_VIbias_sf ] = true; previous[k_DACName_VIbias_sf ] = VIbias_sf_ ;}
00172 if( VOffsetOp_ != dacs[k_DACName_VOffsetOp ] ) {changes[k_DACName_VOffsetOp ] = true; previous[k_DACName_VOffsetOp ] = VOffsetOp_ ;}
00173 if( VbiasOp_ != dacs[k_DACName_VbiasOp ] ) {changes[k_DACName_VbiasOp ] = true; previous[k_DACName_VbiasOp ] = VbiasOp_ ;}
00174 if( VOffsetRO_ != dacs[k_DACName_VOffsetRO ] ) {changes[k_DACName_VOffsetRO ] = true; previous[k_DACName_VOffsetRO ] = VOffsetRO_ ;}
00175 if( VIon_ != dacs[k_DACName_VIon ] ) {changes[k_DACName_VIon ] = true; previous[k_DACName_VIon ] = VIon_ ;}
00176 if( VIbias_PH_ != dacs[k_DACName_VIbias_PH ] ) {changes[k_DACName_VIbias_PH ] = true; previous[k_DACName_VIbias_PH ] = VIbias_PH_ ;}
00177 if( VIbias_DAC_ != dacs[k_DACName_VIbias_DAC ] ) {changes[k_DACName_VIbias_DAC ] = true; previous[k_DACName_VIbias_DAC ] = VIbias_DAC_ ;}
00178 if( VIbias_roc_ != dacs[k_DACName_VIbias_roc ] ) {changes[k_DACName_VIbias_roc ] = true; previous[k_DACName_VIbias_roc ] = VIbias_roc_ ;}
00179 if( VIColOr_ != dacs[k_DACName_VIColOr ] ) {changes[k_DACName_VIColOr ] = true; previous[k_DACName_VIColOr ] = VIColOr_ ;}
00180 if( Vnpix_ != dacs[k_DACName_Vnpix ] ) {changes[k_DACName_Vnpix ] = true; previous[k_DACName_Vnpix ] = Vnpix_ ;}
00181 if( VsumCol_ != dacs[k_DACName_VsumCol ] ) {changes[k_DACName_VsumCol ] = true; previous[k_DACName_VsumCol ] = VsumCol_ ;}
00182 if( Vcal_ != dacs[k_DACName_Vcal ] ) {changes[k_DACName_Vcal ] = true; previous[k_DACName_Vcal ] = Vcal_ ;}
00183 if( CalDel_ != dacs[k_DACName_CalDel ] ) {changes[k_DACName_CalDel ] = true; previous[k_DACName_CalDel ] = CalDel_ ;}
00184 if( TempRange_ != dacs[k_DACName_TempRange ] ) {changes[k_DACName_TempRange ] = true; previous[k_DACName_TempRange ] = TempRange_ ;}
00185 if( WBC_ != dacs[k_DACName_WBC ] ) {changes[k_DACName_WBC ] = true; previous[k_DACName_WBC ] = WBC_ ;}
00186 if( ChipContReg_ != dacs[k_DACName_ChipContReg] ) {changes[k_DACName_ChipContReg] = true; previous[k_DACName_ChipContReg] = ChipContReg_;}
00187 }
00188
00189 void PixelROCDACSettings::setDAC(unsigned int dacaddress, unsigned int dacvalue)
00190 {
00191 switch (dacaddress) {
00192 case 1: Vdd_ = dacvalue; break;
00193 case 2: Vana_ = dacvalue; break;
00194 case 3: Vsf_ = dacvalue; break;
00195 case 4: Vcomp_ = dacvalue; break;
00196 case 5: Vleak_ = dacvalue; break;
00197 case 6: VrgPr_ = dacvalue; break;
00198 case 7: VwllPr_ = dacvalue; break;
00199 case 8: VrgSh_ = dacvalue; break;
00200 case 9: VwllSh_ = dacvalue; break;
00201 case 10: VHldDel_ = dacvalue; break;
00202 case 11: Vtrim_ = dacvalue; break;
00203 case 12: VcThr_ = dacvalue; break;
00204 case 13: VIbias_bus_ = dacvalue; break;
00205 case 14: VIbias_sf_ = dacvalue; break;
00206 case 15: VOffsetOp_ = dacvalue; break;
00207 case 16: VbiasOp_ = dacvalue; break;
00208 case 17: VOffsetRO_ = dacvalue; break;
00209 case 18: VIon_ = dacvalue; break;
00210 case 19: VIbias_PH_ = dacvalue; break;
00211 case 20: VIbias_DAC_ = dacvalue; break;
00212 case 21: VIbias_roc_ = dacvalue; break;
00213 case 22: VIColOr_ = dacvalue; break;
00214 case 23: Vnpix_ = dacvalue; break;
00215 case 24: VsumCol_ = dacvalue; break;
00216 case 25: Vcal_ = dacvalue; break;
00217 case 26: CalDel_ = dacvalue; break;
00218 case 27: TempRange_ = dacvalue; break;
00219 case 254: WBC_ = dacvalue; break;
00220 case 253: ChipContReg_ = dacvalue; break;
00221 default: cout<<"DAC Address "<<dacaddress<<" does not exist!"<<endl;
00222 }
00223
00224 }
00225
00226 void PixelROCDACSettings::writeBinary(ofstream& out) const
00227 {
00228 out << (char)rocid_.rocname().size();
00229 out.write(rocid_.rocname().c_str(),rocid_.rocname().size());
00230
00231 out << Vdd_;
00232 out << Vana_;
00233 out << Vsf_;
00234 out << Vcomp_;
00235 out << Vleak_;
00236 out << VrgPr_;
00237 out << VwllPr_;
00238 out << VrgSh_;
00239 out << VwllSh_;
00240 out << VHldDel_;
00241 out << Vtrim_;
00242 out << VcThr_;
00243 out << VIbias_bus_;
00244 out << VIbias_sf_;
00245 out << VOffsetOp_;
00246 out << VbiasOp_;
00247 out << VOffsetRO_;
00248 out << VIon_;
00249 out << VIbias_PH_;
00250 out << VIbias_DAC_;
00251 out << VIbias_roc_;
00252 out << VIColOr_;
00253 out << Vnpix_;
00254 out << VsumCol_;
00255 out << Vcal_;
00256 out << CalDel_;
00257 out << TempRange_;
00258 out << WBC_;
00259 out << ChipContReg_;
00260 }
00261
00262
00263 int PixelROCDACSettings::readBinary(ifstream& in, const PixelROCName& rocid){
00264
00265 rocid_=rocid;
00266
00267 in.read((char*)&Vdd_,1);
00268 in.read((char*)&Vana_,1);
00269 in.read((char*)&Vsf_,1);
00270 in.read((char*)&Vcomp_,1);
00271 in.read((char*)&Vleak_,1);
00272 in.read((char*)&VrgPr_,1);
00273 in.read((char*)&VwllPr_,1);
00274 in.read((char*)&VrgSh_,1);
00275 in.read((char*)&VwllSh_,1);
00276 in.read((char*)&VHldDel_,1);
00277 in.read((char*)&Vtrim_,1);
00278 in.read((char*)&VcThr_,1);
00279 in.read((char*)&VIbias_bus_,1);
00280 in.read((char*)&VIbias_sf_,1);
00281 in.read((char*)&VOffsetOp_,1);
00282 in.read((char*)&VbiasOp_,1);
00283 in.read((char*)&VOffsetRO_,1);
00284 in.read((char*)&VIon_,1);
00285 in.read((char*)&VIbias_PH_,1);
00286 in.read((char*)&VIbias_DAC_,1);
00287 in.read((char*)&VIbias_roc_,1);
00288 in.read((char*)&VIColOr_,1);
00289 in.read((char*)&Vnpix_,1);
00290 in.read((char*)&VsumCol_,1);
00291 in.read((char*)&Vcal_,1);
00292 in.read((char*)&CalDel_,1);
00293 in.read((char*)&TempRange_,1);
00294 in.read((char*)&WBC_,1);
00295 in.read((char*)&ChipContReg_,1);
00296
00297 return 1;
00298
00299 }
00300
00301 void PixelROCDACSettings::writeASCII(ostream& out) const{
00302
00303 out << "ROC: " << rocid_.rocname() <<endl;
00304
00305 out << k_DACName_Vdd << ": " << (int)Vdd_ <<endl;
00306 out << k_DACName_Vana << ": " << (int)Vana_ <<endl;
00307 out << k_DACName_Vsf << ": " << (int)Vsf_ <<endl;
00308 out << k_DACName_Vcomp << ": " << (int)Vcomp_ <<endl;
00309 out << k_DACName_Vleak << ": " << (int)Vleak_ <<endl;
00310 out << k_DACName_VrgPr << ": " << (int)VrgPr_ <<endl;
00311 out << k_DACName_VwllPr << ": " << (int)VwllPr_ <<endl;
00312 out << k_DACName_VrgSh << ": " << (int)VrgSh_ <<endl;
00313 out << k_DACName_VwllSh << ": " << (int)VwllSh_ <<endl;
00314 out << k_DACName_VHldDel << ": " << (int)VHldDel_ <<endl;
00315 out << k_DACName_Vtrim << ": " << (int)Vtrim_ <<endl;
00316 out << k_DACName_VcThr << ": " << (int)VcThr_ <<endl;
00317 out << k_DACName_VIbias_bus << ": " << (int)VIbias_bus_ <<endl;
00318 out << k_DACName_VIbias_sf << ": " << (int)VIbias_sf_ <<endl;
00319 out << k_DACName_VOffsetOp << ": " << (int)VOffsetOp_ <<endl;
00320 out << k_DACName_VbiasOp << ": " << (int)VbiasOp_ <<endl;
00321 out << k_DACName_VOffsetRO << ": " << (int)VOffsetRO_ <<endl;
00322 out << k_DACName_VIon << ": " << (int)VIon_ <<endl;
00323 out << k_DACName_VIbias_PH << ": " << (int)VIbias_PH_ <<endl;
00324 out << k_DACName_VIbias_DAC << ": " << (int)VIbias_DAC_ <<endl;
00325 out << k_DACName_VIbias_roc << ": " << (int)VIbias_roc_ <<endl;
00326 out << k_DACName_VIColOr << ": " << (int)VIColOr_ <<endl;
00327 out << k_DACName_Vnpix << ": " << (int)Vnpix_ <<endl;
00328 out << k_DACName_VsumCol << ": " << (int)VsumCol_ <<endl;
00329 out << k_DACName_Vcal << ": " << (int)Vcal_ <<endl;
00330 out << k_DACName_CalDel << ": " << (int)CalDel_ <<endl;
00331 out << k_DACName_TempRange << ": " << (int)TempRange_ <<endl;
00332 out << k_DACName_WBC << ": " << (int)WBC_ <<endl;
00333 out << k_DACName_ChipContReg << ": " << (int)ChipContReg_ <<endl;
00334
00335 }
00336
00337
00338 void PixelROCDACSettings::writeXML(ofstream *out) const {
00339 std::string mthn = "[PixelROCDACSettings::writeXML()]\t\t\t " ;
00340
00341 *out << " <DATA>" << endl ;
00342 *out << " <NAME_LABEL>" << rocid_.rocname() << "</NAME_LABEL>" << endl ;
00343 *out << " <VDD>" << (int)Vdd_ << "</VDD>" << endl ;
00344 *out << " <VANA>" << (int)Vana_ << "</VANA>" << endl ;
00345 *out << " <VSF>" << (int)Vsf_ << "</VSF>" << endl ;
00346 *out << " <VCOMP>" << (int)Vcomp_ << "</VCOMP>" << endl ;
00347 *out << " <VLEAK>" << (int)Vleak_ << "</VLEAK>" << endl ;
00348 *out << " <VRGPR>" << (int)VrgPr_ << "</VRGPR>" << endl ;
00349 *out << " <VWLLPR>" << (int)VwllPr_ << "</VWLLPR>" << endl ;
00350 *out << " <VRGSH>" << (int)VrgSh_ << "</VRGSH>" << endl ;
00351 *out << " <VWLLSH>" << (int)VwllSh_ << "</VWLLSH>" << endl ;
00352 *out << " <VHLDDEL>" << (int)VHldDel_ << "</VHLDDEL>" << endl ;
00353 *out << " <VTRIM>" << (int)Vtrim_ << "</VTRIM>" << endl ;
00354 *out << " <VCTHR>" << (int)VcThr_ << "</VCTHR>" << endl ;
00355 *out << " <VIBIAS_BUS>" << (int)VIbias_bus_ << "</VIBIAS_BUS>" << endl ;
00356 *out << " <VIBIAS_SF>" << (int)VIbias_sf_ << "</VIBIAS_SF>" << endl ;
00357 *out << " <VOFFSETOP>" << (int)VOffsetOp_ << "</VOFFSETOP>" << endl ;
00358 *out << " <VBIASOP>" << (int)VbiasOp_ << "</VBIASOP>" << endl ;
00359 *out << " <VOFFSETRO>" << (int)VOffsetRO_ << "</VOFFSETRO>" << endl ;
00360 *out << " <VION>" << (int)VIon_ << "</VION>" << endl ;
00361 *out << " <VIBIAS_PH>" << (int)VIbias_PH_ << "</VIBIAS_PH>" << endl ;
00362 *out << " <VIBIAS_DAC>" << (int)VIbias_DAC_ << "</VIBIAS_DAC>" << endl ;
00363 *out << " <VIBIAS_ROC>" << (int)VIbias_roc_ << "</VIBIAS_ROC>" << endl ;
00364 *out << " <VICOLOR>" << (int)VIColOr_ << "</VICOLOR>" << endl ;
00365 *out << " <VNPIX>" << (int)Vnpix_ << "</VNPIX>" << endl ;
00366 *out << " <VSUMCOL>" << (int)VsumCol_ << "</VSUMCOL>" << endl ;
00367 *out << " <VCAL>" << (int)Vcal_ << "</VCAL>" << endl ;
00368 *out << " <CALDEL>" << (int)CalDel_ << "</CALDEL>" << endl ;
00369 *out << " <TEMPRANGE>" << (int)TempRange_ << "</TEMPRANGE>" << endl ;
00370 *out << " <WBC>" << (int)WBC_ << "</WBC>" << endl ;
00371 *out << " <CHIPCONTREG>" << (int)ChipContReg_ << "</CHIPCONTREG>" << endl ;
00372 *out << " </DATA>" << endl ;
00373 *out << " " << endl ;
00374
00375 }
00376
00377
00378 void PixelROCDACSettings::checkTag(string tag,
00379 string dacName,
00380 const PixelROCName& rocid){
00381
00382 dacName+=":";
00383 if (tag!=dacName) {
00384 cout << "Read ROC name:"<<tag<<endl;
00385 cout << "But expected to find:"<<dacName<<endl;
00386 cout << "When reading DAC settings for ROC "<<rocid<<endl;
00387 assert(0);
00388 }
00389
00390 }
00391
00392 int PixelROCDACSettings::read(std::istringstream& in, const PixelROCName& rocid)
00393 {
00394 rocid_=rocid;
00395
00396 unsigned int tmp;
00397 string tag;
00398
00399 in >> tag;
00400 checkTag(tag,k_DACName_Vdd,rocid);
00401 in >> tmp; Vdd_=tmp;
00402 in >> tag;
00403 checkTag(tag,k_DACName_Vana,rocid);
00404 in >> tmp; Vana_=tmp;
00405 in >> tag;
00406 checkTag(tag,k_DACName_Vsf,rocid);
00407 in >> tmp; Vsf_=tmp;
00408 in >> tag;
00409 checkTag(tag,k_DACName_Vcomp,rocid);
00410 in >> tmp; Vcomp_=tmp;
00411 in >> tag;
00412 checkTag(tag,k_DACName_Vleak,rocid);
00413 in >> tmp; Vleak_=tmp;
00414 in >> tag;
00415 checkTag(tag,k_DACName_VrgPr,rocid);
00416 in >> tmp; VrgPr_=tmp;
00417 in >> tag;
00418 checkTag(tag,k_DACName_VwllPr,rocid);
00419 in >> tmp; VwllPr_=tmp;
00420 in >> tag;
00421 checkTag(tag,k_DACName_VrgSh,rocid);
00422 in >> tmp; VrgSh_=tmp;
00423 in >> tag;
00424 checkTag(tag,k_DACName_VwllSh,rocid);
00425 in >> tmp; VwllSh_=tmp;
00426 in >> tag;
00427 checkTag(tag,k_DACName_VHldDel,rocid);
00428 in >> tmp; VHldDel_=tmp;
00429 in >> tag;
00430 checkTag(tag,k_DACName_Vtrim,rocid);
00431 in >> tmp; Vtrim_=tmp;
00432 in >> tag;
00433 checkTag(tag,k_DACName_VcThr,rocid);
00434 in >> tmp; VcThr_=tmp;
00435 in >> tag;
00436 checkTag(tag,k_DACName_VIbias_bus,rocid);
00437 in >> tmp; VIbias_bus_=tmp;
00438 in >> tag;
00439 checkTag(tag,k_DACName_VIbias_sf,rocid);
00440 in >> tmp; VIbias_sf_=tmp;
00441 in >> tag;
00442 checkTag(tag,k_DACName_VOffsetOp,rocid);
00443 in >> tmp; VOffsetOp_=tmp;
00444 in >> tag;
00445 checkTag(tag,k_DACName_VbiasOp,rocid);
00446 in >> tmp; VbiasOp_=tmp;
00447 in >> tag;
00448 checkTag(tag,k_DACName_VOffsetRO,rocid);
00449 in >> tmp; VOffsetRO_=tmp;
00450 in >> tag;
00451 checkTag(tag,k_DACName_VIon,rocid);
00452 in >> tmp; VIon_=tmp;
00453 in >> tag;
00454 checkTag(tag,k_DACName_VIbias_PH,rocid);
00455 in >> tmp; VIbias_PH_=tmp;
00456 in >> tag;
00457 checkTag(tag,k_DACName_VIbias_DAC,rocid);
00458 in >> tmp; VIbias_DAC_=tmp;
00459 in >> tag;
00460 checkTag(tag,k_DACName_VIbias_roc,rocid);
00461 in >> tmp; VIbias_roc_=tmp;
00462 in >> tag;
00463 checkTag(tag,k_DACName_VIColOr,rocid);
00464 in >> tmp; VIColOr_=tmp;
00465 in >> tag;
00466 checkTag(tag,k_DACName_Vnpix,rocid);
00467 in >> tmp; Vnpix_=tmp;
00468 in >> tag;
00469 checkTag(tag,k_DACName_VsumCol,rocid);
00470 in >> tmp; VsumCol_=tmp;
00471 in >> tag;
00472 checkTag(tag,k_DACName_Vcal,rocid);
00473 in >> tmp; Vcal_=tmp;
00474 in >> tag;
00475 checkTag(tag,k_DACName_CalDel,rocid);
00476 in >> tmp; CalDel_=tmp;
00477 in >> tag;
00478 if (tag==k_DACName_WBC+":"){
00479 static bool first=true;
00480 if (first){
00481 cout << "**********************************************"<<endl;
00482 cout << "Did not find TempRange setting in DAC settings"<<endl;
00483 cout << "Will use a default value of 4."<<endl;
00484 cout << "This message will only be printed out once"<<endl;
00485 cout << "**********************************************"<<endl;
00486 TempRange_=4;
00487 first=false;
00488 }
00489 in >> tmp; WBC_=tmp;
00490 } else {
00491 checkTag(tag,k_DACName_TempRange,rocid);
00492 in >> tmp; TempRange_=tmp;
00493 in >> tag;
00494 checkTag(tag,k_DACName_WBC,rocid);
00495 in >> tmp; WBC_=tmp;
00496 }
00497 in >> tag;
00498 checkTag(tag,k_DACName_ChipContReg,rocid);
00499 in >> tmp; ChipContReg_=tmp;
00500
00501 return 0;
00502 }
00503
00504 int PixelROCDACSettings::read(ifstream& in, const PixelROCName& rocid){
00505
00506 rocid_=rocid;
00507
00508 unsigned int tmp;
00509 string tag;
00510
00511 in >> tag;
00512 checkTag(tag,k_DACName_Vdd,rocid);
00513 in >> tmp; Vdd_=tmp;
00514 in >> tag;
00515 checkTag(tag,k_DACName_Vana,rocid);
00516 in >> tmp; Vana_=tmp;
00517 in >> tag;
00518 checkTag(tag,k_DACName_Vsf,rocid);
00519 in >> tmp; Vsf_=tmp;
00520 in >> tag;
00521 checkTag(tag,k_DACName_Vcomp,rocid);
00522 in >> tmp; Vcomp_=tmp;
00523 in >> tag;
00524 checkTag(tag,k_DACName_Vleak,rocid);
00525 in >> tmp; Vleak_=tmp;
00526 in >> tag;
00527 checkTag(tag,k_DACName_VrgPr,rocid);
00528 in >> tmp; VrgPr_=tmp;
00529 in >> tag;
00530 checkTag(tag,k_DACName_VwllPr,rocid);
00531 in >> tmp; VwllPr_=tmp;
00532 in >> tag;
00533 checkTag(tag,k_DACName_VrgSh,rocid);
00534 in >> tmp; VrgSh_=tmp;
00535 in >> tag;
00536 checkTag(tag,k_DACName_VwllSh,rocid);
00537 in >> tmp; VwllSh_=tmp;
00538 in >> tag;
00539 checkTag(tag,k_DACName_VHldDel,rocid);
00540 in >> tmp; VHldDel_=tmp;
00541 in >> tag;
00542 checkTag(tag,k_DACName_Vtrim,rocid);
00543 in >> tmp; Vtrim_=tmp;
00544 in >> tag;
00545 checkTag(tag,k_DACName_VcThr,rocid);
00546 in >> tmp; VcThr_=tmp;
00547 in >> tag;
00548 checkTag(tag,k_DACName_VIbias_bus,rocid);
00549 in >> tmp; VIbias_bus_=tmp;
00550 in >> tag;
00551 checkTag(tag,k_DACName_VIbias_sf,rocid);
00552 in >> tmp; VIbias_sf_=tmp;
00553 in >> tag;
00554 checkTag(tag,k_DACName_VOffsetOp,rocid);
00555 in >> tmp; VOffsetOp_=tmp;
00556 in >> tag;
00557 checkTag(tag,k_DACName_VbiasOp,rocid);
00558 in >> tmp; VbiasOp_=tmp;
00559 in >> tag;
00560 checkTag(tag,k_DACName_VOffsetRO,rocid);
00561 in >> tmp; VOffsetRO_=tmp;
00562 in >> tag;
00563 checkTag(tag,k_DACName_VIon,rocid);
00564 in >> tmp; VIon_=tmp;
00565 in >> tag;
00566 checkTag(tag,k_DACName_VIbias_PH,rocid);
00567 in >> tmp; VIbias_PH_=tmp;
00568 in >> tag;
00569 checkTag(tag,k_DACName_VIbias_DAC,rocid);
00570 in >> tmp; VIbias_DAC_=tmp;
00571 in >> tag;
00572 checkTag(tag,k_DACName_VIbias_roc,rocid);
00573 in >> tmp; VIbias_roc_=tmp;
00574 in >> tag;
00575 checkTag(tag,k_DACName_VIColOr,rocid);
00576 in >> tmp; VIColOr_=tmp;
00577 in >> tag;
00578 checkTag(tag,k_DACName_Vnpix,rocid);
00579 in >> tmp; Vnpix_=tmp;
00580 in >> tag;
00581 checkTag(tag,k_DACName_VsumCol,rocid);
00582 in >> tmp; VsumCol_=tmp;
00583 in >> tag;
00584 checkTag(tag,k_DACName_Vcal,rocid);
00585 in >> tmp; Vcal_=tmp;
00586 in >> tag;
00587 checkTag(tag,k_DACName_CalDel,rocid);
00588 in >> tmp; CalDel_=tmp;
00589 in >> tag;
00590 if (tag==k_DACName_WBC+":"){
00591 static bool first=true;
00592 if (first){
00593 cout << "**********************************************"<<endl;
00594 cout << "Did not find TempRange setting in DAC settings"<<endl;
00595 cout << "Will use a default value of 4."<<endl;
00596 cout << "This message will only be printed out once"<<endl;
00597 cout << "**********************************************"<<endl;
00598 TempRange_=4;
00599 first=false;
00600 }
00601 in >> tmp; WBC_=tmp;
00602 } else {
00603 checkTag(tag,k_DACName_TempRange,rocid);
00604 in >> tmp; TempRange_=tmp;
00605 in >> tag;
00606 checkTag(tag,k_DACName_WBC,rocid);
00607 in >> tmp; WBC_=tmp;
00608 }
00609 in >> tag;
00610 checkTag(tag,k_DACName_ChipContReg,rocid);
00611 in >> tmp; ChipContReg_=tmp;
00612
00613 return 0;
00614 }
00615
00616
00617 string PixelROCDACSettings::getConfigCommand(){
00618
00619 string s;
00620
00621 return s;
00622
00623 }
00624
00625 ostream& pos::operator<<(ostream& s, const PixelROCDACSettings& dacs){
00626
00627 s << k_DACName_Vdd << " :" << (unsigned int)dacs.Vdd_ << endl;
00628 s << k_DACName_Vana << " :" << (unsigned int)dacs.Vana_ << endl;
00629 s << k_DACName_Vsf << " :" << (unsigned int)dacs.Vsf_ << endl;
00630 s << k_DACName_Vcomp << " :" << (unsigned int)dacs.Vcomp_ << endl;
00631 s << k_DACName_Vleak << " :" << (unsigned int)dacs.Vleak_ << endl;
00632 s << k_DACName_VrgPr << " :" << (unsigned int)dacs.VrgPr_ << endl;
00633 s << k_DACName_VwllPr << " :" << (unsigned int)dacs.VwllPr_ << endl;
00634 s << k_DACName_VrgSh << " :" << (unsigned int)dacs.VrgSh_ << endl;
00635 s << k_DACName_VwllSh << " :" << (unsigned int)dacs.VwllSh_ << endl;
00636 s << k_DACName_VHldDel << " :" << (unsigned int)dacs.VHldDel_ << endl;
00637 s << k_DACName_Vtrim << " :" << (unsigned int)dacs.Vtrim_ << endl;
00638 s << k_DACName_VcThr << " :" << (unsigned int)dacs.VcThr_ << endl;
00639 s << k_DACName_VIbias_bus << " :" << (unsigned int)dacs.VIbias_bus_ << endl;
00640 s << k_DACName_VIbias_sf << " :" << (unsigned int)dacs.VIbias_sf_ << endl;
00641 s << k_DACName_VOffsetOp << " :" << (unsigned int)dacs.VOffsetOp_ << endl;
00642 s << k_DACName_VbiasOp << " :" << (unsigned int)dacs.VbiasOp_ << endl;
00643 s << k_DACName_VOffsetRO << " :" << (unsigned int)dacs.VOffsetRO_ << endl;
00644 s << k_DACName_VIon << " :" << (unsigned int)dacs.VIon_ << endl;
00645 s << k_DACName_VIbias_PH << " :" << (unsigned int)dacs.VIbias_PH_ << endl;
00646 s << k_DACName_VIbias_DAC << " :" << (unsigned int)dacs.VIbias_DAC_ << endl;
00647 s << k_DACName_VIbias_roc << " :" << (unsigned int)dacs.VIbias_roc_ << endl;
00648 s << k_DACName_VIColOr << " :" << (unsigned int)dacs.VIColOr_ << endl;
00649 s << k_DACName_Vnpix << " :" << (unsigned int)dacs.Vnpix_ << endl;
00650 s << k_DACName_VsumCol << " :" << (unsigned int)dacs.VsumCol_ << endl;
00651 s << k_DACName_Vcal << " :" << (unsigned int)dacs.Vcal_ << endl;
00652 s << k_DACName_CalDel << " :" << (unsigned int)dacs.CalDel_ << endl;
00653 s << k_DACName_TempRange << " :" << (unsigned int)dacs.TempRange_ << endl;
00654 s << k_DACName_WBC << " :" << (unsigned int)dacs.WBC_ << endl;
00655 s << k_DACName_ChipContReg << " :" << (unsigned int)dacs.ChipContReg_ << endl;
00656
00657 return s;
00658
00659 }
00660
00661
00662 void PixelROCDACSettings::setDac(string dacName, int dacValue){
00663 if(ToLower(dacName) == ToLower(k_DACName_Vdd)){
00664 Vdd_ = dacValue;
00665 }
00666 else if(ToLower(dacName) == ToLower(k_DACName_Vana)){
00667 Vana_ = dacValue;
00668 }
00669 else if(ToLower(dacName) == ToLower(k_DACName_Vsf)){
00670 Vsf_ = dacValue;
00671 }
00672 else if(ToLower(dacName) == ToLower(k_DACName_Vcomp)){
00673 Vcomp_ = dacValue;
00674 }
00675 else if(ToLower(dacName)==ToLower(k_DACName_Vleak)){
00676 Vleak_ = dacValue;
00677 }
00678 else if(ToLower(dacName)==ToLower(k_DACName_VrgPr)){
00679 VrgPr_ = dacValue;
00680 }
00681 else if(ToLower(dacName)==ToLower(k_DACName_VwllPr)){
00682 VwllPr_ = dacValue;
00683 }
00684 else if(ToLower(dacName)==ToLower(k_DACName_VrgSh)){
00685 VrgSh_ = dacValue;
00686 }
00687 else if(ToLower(dacName)==ToLower(k_DACName_VwllSh)){
00688 VwllSh_ = dacValue;
00689 }
00690 else if(ToLower(dacName)==ToLower(k_DACName_VHldDel)){
00691 VHldDel_ = dacValue;
00692 }
00693 else if(ToLower(dacName)==ToLower(k_DACName_Vtrim)){
00694 Vtrim_ = dacValue;
00695 }
00696 else if(ToLower(dacName)==ToLower(k_DACName_VcThr)){
00697 VcThr_ = dacValue;
00698 }
00699 else if(ToLower(dacName)==ToLower(k_DACName_VIbias_bus)){
00700 VIbias_bus_ = dacValue;
00701 }
00702 else if(ToLower(dacName)==ToLower(k_DACName_VIbias_sf)){
00703 VIbias_sf_ = dacValue;
00704 }
00705 else if(ToLower(dacName)==ToLower(k_DACName_VOffsetOp)){
00706 VOffsetOp_ = dacValue;
00707 }
00708 else if(ToLower(dacName)==ToLower(k_DACName_VbiasOp)){
00709 VbiasOp_ = dacValue;
00710 }
00711 else if(ToLower(dacName)==ToLower(k_DACName_VOffsetRO)){
00712 VOffsetRO_ = dacValue;
00713 }
00714 else if(ToLower(dacName)==ToLower(k_DACName_VIon)){
00715 VIon_ = dacValue;
00716 }
00717 else if(ToLower(dacName)==ToLower(k_DACName_VIbias_PH)){
00718 VIbias_PH_ = dacValue;
00719 }
00720 else if(ToLower(dacName)==ToLower(k_DACName_VIbias_DAC)){
00721 VIbias_DAC_ = dacValue;
00722 }
00723 else if(ToLower(dacName)==ToLower(k_DACName_VIbias_roc)){
00724 VIbias_roc_ = dacValue;
00725 }
00726 else if(ToLower(dacName)==ToLower(k_DACName_VIColOr)){
00727 VIColOr_ = dacValue;
00728 }
00729 else if(ToLower(dacName)==ToLower(k_DACName_Vnpix)){;
00730 Vnpix_ = dacValue;
00731 }
00732 else if(ToLower(dacName)==ToLower(k_DACName_VsumCol)){
00733 VsumCol_ = dacValue;
00734 }
00735 else if(ToLower(dacName)==ToLower(k_DACName_Vcal)){
00736 Vcal_ = dacValue;
00737 }
00738 else if(ToLower(dacName)==ToLower(k_DACName_CalDel)){
00739 CalDel_ = dacValue;
00740 }
00741 else if(ToLower(dacName)==ToLower(k_DACName_TempRange)){
00742 TempRange_ = dacValue;
00743 }
00744 else if(ToLower(dacName)==ToLower(k_DACName_WBC)){
00745 WBC_ = dacValue;
00746 }
00747 else if(ToLower(dacName)==ToLower(k_DACName_ChipContReg)){
00748 ChipContReg_ = dacValue;
00749 }
00750 else
00751 {
00752 cout << "ERROR in PixelROCDACSettings::setDac: DAC name " << dacName << " does not exist." << endl;
00753 assert(0);
00754 }
00755
00756 }
00757
00758 unsigned int PixelROCDACSettings::getDac(string dacName) const {
00759
00760 if(dacName == k_DACName_Vdd){
00761 return Vdd_;
00762 }
00763 else if(dacName == k_DACName_Vana){
00764 return Vana_;
00765 }
00766 else if(dacName == k_DACName_Vsf){
00767 return Vsf_;
00768 }
00769 else if(dacName == k_DACName_Vcomp){
00770 return Vcomp_;
00771 }
00772 else if(dacName == k_DACName_Vleak){
00773 return Vleak_;
00774 }
00775 else if(dacName == k_DACName_VrgPr){
00776 return VrgPr_;
00777 }
00778 else if(dacName == k_DACName_VwllPr){
00779 return VwllPr_;
00780 }
00781 else if(dacName == k_DACName_VrgSh){
00782 return VrgSh_;
00783 }
00784 else if(dacName == k_DACName_VwllSh){
00785 return VwllSh_;
00786 }
00787 else if(dacName == k_DACName_VHldDel){
00788 return VHldDel_;
00789 }
00790 else if(dacName == k_DACName_Vtrim){
00791 return Vtrim_;
00792 }
00793 else if(dacName == k_DACName_VcThr){
00794 return VcThr_;
00795 }
00796 else if(dacName == k_DACName_VIbias_bus){
00797 return VIbias_bus_;
00798 }
00799 else if(dacName == k_DACName_VIbias_sf){
00800 return VIbias_sf_;
00801 }
00802 else if(dacName == k_DACName_VOffsetOp){
00803 return VOffsetOp_;
00804 }
00805 else if(dacName == k_DACName_VbiasOp){
00806 return VbiasOp_;
00807 }
00808 else if(dacName == k_DACName_VOffsetRO){
00809 return VOffsetRO_;
00810 }
00811 else if(dacName == k_DACName_VIon){
00812 return VIon_;
00813 }
00814 else if(dacName == k_DACName_VIbias_PH){
00815 return VIbias_PH_;
00816 }
00817 else if(dacName == k_DACName_VIbias_DAC){
00818 return VIbias_DAC_;
00819 }
00820 else if(dacName == k_DACName_VIbias_roc){
00821 return VIbias_roc_;
00822 }
00823 else if(dacName == k_DACName_VIColOr){
00824 return VIColOr_;
00825 }
00826 else if(dacName == k_DACName_Vnpix){
00827 return Vnpix_;
00828 }
00829 else if(dacName == k_DACName_VsumCol){
00830 return VsumCol_;
00831 }
00832 else if(dacName == k_DACName_Vcal){
00833 return Vcal_;
00834 }
00835 else if(dacName == k_DACName_CalDel){
00836 return CalDel_;
00837 }
00838 else if(dacName == k_DACName_TempRange){
00839 return TempRange_;
00840 }
00841 else if(dacName == k_DACName_WBC){
00842 return WBC_;
00843 }
00844 else if(dacName == k_DACName_ChipContReg){
00845 return ChipContReg_;
00846 }
00847 else {
00848 cout << "ERROR in PixelROCDACSettings::getDac: DAC name " << dacName << " does not exist." << endl;
00849 assert(0);
00850 }
00851 }
00852
00853
00854 string PixelROCDACSettings::ToLower(string generic)
00855 {
00856 string result ;
00857 for(unsigned int i = 0; i < generic.length() ; i++)
00858 {
00859 result.append(1,(char)tolower(generic[i]) );
00860 }
00861 return result ;
00862 }