00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "CalibFormats/SiPixelObjects/interface/PixelPortCardConfig.h"
00010 #include "CalibFormats/SiPixelObjects/interface/PixelPortCardSettingNames.h"
00011 #include <fstream>
00012 #include <iostream>
00013 #include <string>
00014 #include <vector>
00015 #include <assert.h>
00016
00017 using namespace std;
00018 using namespace pos::PortCardSettingNames;
00019 using namespace pos;
00020
00021
00022 PixelPortCardConfig::PixelPortCardConfig(vector < vector< string> > &tableMat):PixelConfigBase(" "," "," ")
00023 {
00024 string mthn = "[PixelPortCardConfig::PixelPortCardConfig()]\t\t " ;
00025 map<string , int > colM;
00026 vector<string> colNames;
00027
00145 colNames.push_back("CONFIG_KEY_ID" );
00146 colNames.push_back("CONFIG_KEY" );
00147 colNames.push_back("VERSION" );
00148 colNames.push_back("CONDITION_DATA_SET_ID" );
00149 colNames.push_back("KIND_OF_CONDITION_ID" );
00150 colNames.push_back("KIND_OF_COND" );
00151 colNames.push_back("SERIAL_NUMBER" );
00152 colNames.push_back("PORT_CARD_ID" );
00153 colNames.push_back("PORT_CARD" );
00154 colNames.push_back("TRKFEC_NAME" );
00155 colNames.push_back("RINGADDRESS" );
00156 colNames.push_back("CHANNELADDRESS" );
00157 colNames.push_back("CCUADDRESS" );
00158 colNames.push_back("I2C_CNTRL" );
00159 colNames.push_back("I2CSPEED" );
00160 colNames.push_back("AOH_BIAS1" );
00161 colNames.push_back("AOH_BIAS2" );
00162 colNames.push_back("AOH_BIAS3" );
00163 colNames.push_back("AOH_BIAS4" );
00164 colNames.push_back("AOH_BIAS5" );
00165 colNames.push_back("AOH_BIAS6" );
00166 colNames.push_back("AOH_GAIN1" );
00167 colNames.push_back("AOH_GAIN2" );
00168 colNames.push_back("AOH_GAIN3" );
00169 colNames.push_back("AOH_GAIN4" );
00170 colNames.push_back("AOH_GAIN5" );
00171 colNames.push_back("AOH_GAIN6" );
00172 colNames.push_back("AOH1_BIAS1" );
00173 colNames.push_back("AOH1_BIAS2" );
00174 colNames.push_back("AOH1_BIAS3" );
00175 colNames.push_back("AOH1_BIAS4" );
00176 colNames.push_back("AOH1_BIAS5" );
00177 colNames.push_back("AOH1_BIAS6" );
00178 colNames.push_back("AOH1_GAIN1" );
00179 colNames.push_back("AOH1_GAIN2" );
00180 colNames.push_back("AOH1_GAIN3" );
00181 colNames.push_back("AOH1_GAIN4" );
00182 colNames.push_back("AOH1_GAIN5" );
00183 colNames.push_back("AOH1_GAIN6" );
00184 colNames.push_back("AOH2_BIAS1" );
00185 colNames.push_back("AOH2_BIAS2" );
00186 colNames.push_back("AOH2_BIAS3" );
00187 colNames.push_back("AOH2_BIAS4" );
00188 colNames.push_back("AOH2_BIAS5" );
00189 colNames.push_back("AOH2_BIAS6" );
00190 colNames.push_back("AOH2_GAIN1" );
00191 colNames.push_back("AOH2_GAIN2" );
00192 colNames.push_back("AOH2_GAIN3" );
00193 colNames.push_back("AOH2_GAIN4" );
00194 colNames.push_back("AOH2_GAIN5" );
00195 colNames.push_back("AOH2_GAIN6" );
00196 colNames.push_back("AOH3_BIAS1" );
00197 colNames.push_back("AOH3_BIAS2" );
00198 colNames.push_back("AOH3_BIAS3" );
00199 colNames.push_back("AOH3_BIAS4" );
00200 colNames.push_back("AOH3_BIAS5" );
00201 colNames.push_back("AOH3_BIAS6" );
00202 colNames.push_back("AOH3_GAIN1" );
00203 colNames.push_back("AOH3_GAIN2" );
00204 colNames.push_back("AOH3_GAIN3" );
00205 colNames.push_back("AOH3_GAIN4" );
00206 colNames.push_back("AOH3_GAIN5" );
00207 colNames.push_back("AOH3_GAIN6" );
00208 colNames.push_back("AOH4_BIAS1" );
00209 colNames.push_back("AOH4_BIAS2" );
00210 colNames.push_back("AOH4_BIAS3" );
00211 colNames.push_back("AOH4_BIAS4" );
00212 colNames.push_back("AOH4_BIAS5" );
00213 colNames.push_back("AOH4_BIAS6" );
00214 colNames.push_back("AOH4_GAIN1" );
00215 colNames.push_back("AOH4_GAIN2" );
00216 colNames.push_back("AOH4_GAIN3" );
00217 colNames.push_back("AOH4_GAIN4" );
00218 colNames.push_back("AOH4_GAIN5" );
00219 colNames.push_back("AOH4_GAIN6" );
00220 colNames.push_back("AOH5_BIAS1" );
00221 colNames.push_back("AOH5_BIAS2" );
00222 colNames.push_back("AOH5_BIAS3" );
00223 colNames.push_back("AOH5_BIAS4" );
00224 colNames.push_back("AOH5_BIAS5" );
00225 colNames.push_back("AOH5_BIAS6" );
00226 colNames.push_back("AOH5_GAIN1" );
00227 colNames.push_back("AOH5_GAIN2" );
00228 colNames.push_back("AOH5_GAIN3" );
00229 colNames.push_back("AOH5_GAIN4" );
00230 colNames.push_back("AOH5_GAIN5" );
00231 colNames.push_back("AOH5_GAIN6" );
00232 colNames.push_back("AOH6_BIAS1" );
00233 colNames.push_back("AOH6_BIAS2" );
00234 colNames.push_back("AOH6_BIAS3" );
00235 colNames.push_back("AOH6_BIAS4" );
00236 colNames.push_back("AOH6_BIAS5" );
00237 colNames.push_back("AOH6_BIAS6" );
00238 colNames.push_back("AOH6_GAIN1" );
00239 colNames.push_back("AOH6_GAIN2" );
00240 colNames.push_back("AOH6_GAIN3" );
00241 colNames.push_back("AOH6_GAIN4" );
00242 colNames.push_back("AOH6_GAIN5" );
00243 colNames.push_back("AOH6_GAIN6" );
00244 colNames.push_back("DELAY25_GCR" );
00245 colNames.push_back("DELAY25_SCL" );
00246 colNames.push_back("DELAY25_TRG" );
00247 colNames.push_back("DELAY25_SDA" );
00248 colNames.push_back("DELAY25_RCL" );
00249 colNames.push_back("DELAY25_RDA" );
00250 colNames.push_back("DOH_BIAS0" );
00251 colNames.push_back("DOH_BIAS1" );
00252 colNames.push_back("DOH_SEU_GAIN" );
00253 colNames.push_back("PLL_CTR1" );
00254 colNames.push_back("PLL_CTR2" );
00255 colNames.push_back("PLL_CTR3" );
00256 colNames.push_back("PLL_CTR4_5" );
00257
00258
00259 for(unsigned int c = 0 ; c < tableMat[0].size() ; c++)
00260 {
00261 for(unsigned int n=0; n<colNames.size(); n++)
00262 {
00263 if(tableMat[0][c] == colNames[n]){
00264 colM[colNames[n]] = c;
00265 break;
00266 }
00267 }
00268 }
00269 for(unsigned int n=0; n<colNames.size(); n++)
00270 {
00271 if(colM.find(colNames[n]) == colM.end())
00272 {
00273 std::cerr << mthn << "\tCouldn't find in the database the column with name " << colNames[n] << std::endl;
00274 assert(0);
00275 }
00276 }
00277
00278 portcardname_ = tableMat[1][colM["PORT_CARD"]] ;
00279 cout << mthn << "Loading PortCard " << portcardname_ << endl ;
00280 if(portcardname_.find("FPix") != std::string::npos)
00281 {
00282 type_ = "fpix" ;
00283 }
00284 else if(portcardname_.find("FPix") != std::string::npos)
00285 {
00286 type_ = "bpix" ;
00287 }
00288 fillNameToAddress();
00289 fillDBToFileAddress() ;
00290
00291 TKFECID_ = tableMat[1][colM["TRKFEC_NAME"]];
00292
00293
00294 TKFECID_.replace(0,13, "tkfec") ;
00295 ringAddress_ = atoi(tableMat[1][colM["RINGADDRESS"]].c_str() ) ;
00296 ccuAddress_ = atoi(tableMat[1][colM["CCUADDRESS"]].c_str() ) ;
00297 channelAddress_ = atoi(tableMat[1][colM["CHANNELADDRESS"]].c_str() ) ;
00298 i2cSpeed_ = atoi(tableMat[1][colM["I2CSPEED"]].c_str() ) ;
00299
00300 cout << mthn <<
00301 "ringAddress_\t" << ringAddress_ << endl <<
00302 "ccuAddress_\t" << ccuAddress_ << endl <<
00303 "channelAddress_\t" << channelAddress_ << endl <<
00304 "i2cSpeed_\t" << i2cSpeed_ << endl ;
00305
00306
00307 for(unsigned int col = 0 ; col < tableMat[1].size() ; col++)
00308 {
00309 std::string settingName;
00310 unsigned int i2c_address;
00311 unsigned int i2c_values;
00312
00313 settingName = tableMat[0][col] ;
00314 i2c_values = atoi(tableMat[1][col].c_str()) ;
00315
00316
00317 if( type_ == "fpix" && settingName.find("AOH_") != string::npos && settingName.find("GAIN") != string::npos
00318 && settingName.find("123") == string::npos && settingName.find("456") == string::npos )
00319 {
00320 setDataBaseAOHGain(settingName, i2c_values);
00321 cout << mthn << "Setting " << settingName << "\tto value " << std::hex << i2c_values << std::dec << std::endl ;
00322 }
00323 else if(type_ == "bpix" && settingName.find("AOH") != string::npos && settingName.find("GAIN") != string::npos
00324 && settingName.find("AOH_") == string::npos
00325 && settingName.find("123") == string::npos && settingName.find("456") == string::npos )
00326 {
00327 setDataBaseAOHGain(settingName, i2c_values);
00328 cout << mthn << "Setting " << settingName << "\tto value " << std::hex << i2c_values << std::dec << std::endl ;
00329 }
00330 else
00331 {
00332 map<string,string>::iterator iter = nameDBtoFileConversion_.find(settingName);
00333 if(iter == nameDBtoFileConversion_.end()) continue ;
00334 map<string, unsigned int>::iterator foundName_itr = nameToAddress_.find(nameDBtoFileConversion_[settingName]);
00335
00336 if ( foundName_itr != nameToAddress_.end() )
00337 {
00338 i2c_address = foundName_itr->second;
00339 }
00340 else
00341 {
00342 i2c_address = strtoul(settingName.c_str(), 0, 16);
00343 }
00344 pair<unsigned int, unsigned int> p(i2c_address, i2c_values);
00345 cout << mthn << "Setting\t" << "|"<<settingName<<"|->"<<nameDBtoFileConversion_[settingName]
00346 << "\twith pair:\t("
00347 << i2c_address
00348 << ","
00349 << i2c_values
00350 << ")"
00351 << endl ;
00352 device_.push_back(p);
00353 }
00354 }
00355 }
00356
00357
00358 PixelPortCardConfig::PixelPortCardConfig(std::string filename):
00359 PixelConfigBase(" "," "," "){
00360
00361
00362
00363 unsigned int portcardpos=filename.find(std::string("portcard_"));
00364
00365 assert(portcardpos!=std::string::npos);
00366 unsigned int datpos=filename.find(std::string(".dat"));
00367
00368 assert(datpos!=std::string::npos);
00369 assert(datpos>portcardpos);
00370
00371 portcardname_=filename.substr(portcardpos+9,datpos-portcardpos-9);
00372
00373
00374
00375 std::ifstream in(filename.c_str());
00376
00377 if(!in.good()){
00378 std::cout<<"[PixelPortCardConfig::PixelPortCardConfig()]\t\t Could not open: "<< filename << std::endl;
00379 assert(0);
00380 }
00381 else {
00382 std::cout<<"[PixelPortCardConfig::PixelPortCardConfig()]\t\t Opened: " << filename << std::endl;
00383 }
00384
00385 string dummy;
00386
00387 in >> dummy;
00388 if ( dummy == "Name:" )
00389 {
00390 in >> dummy; assert( dummy==portcardname_ );
00391 in >> dummy;
00392 }
00393 if ( dummy == "Type:" )
00394 {
00395 in >> type_;
00396 assert( type_ == "fpix" || type_ == "bpix" );
00397 in >> dummy;
00398 }
00399 else
00400 {
00401 type_ = "fpix";
00402 }
00403 fillNameToAddress();
00404 assert(dummy=="TKFECID:"); in >> TKFECID_;
00405 in >> dummy; assert(dummy=="ringAddress:"); in >> std::hex >> ringAddress_;
00406 in >> dummy; assert(dummy=="ccuAddress:"); in >> std::hex >> ccuAddress_;
00407 in >> dummy; assert(dummy=="channelAddress:"); in >> std::hex >> channelAddress_;
00408 in >> dummy; assert(dummy=="i2cSpeed:"); in >> std::hex >> i2cSpeed_;
00409
00410
00411
00412 assert( nameToAddress_.size() != 0 );
00413 do {
00414
00415 std::string settingName;
00416 unsigned int i2c_address;
00417 unsigned int i2c_values;
00418
00419 in >> settingName >> std::hex >> i2c_values >> std::dec;
00420 if (in.eof()) break;
00421
00422 if ( settingName[settingName.size()-1] == ':' ) settingName.resize( settingName.size()-1 );
00423
00424
00425 if ( settingName.find("AOH") != string::npos && settingName.find("Gain") != string::npos
00426 && settingName.find("123") == string::npos && settingName.find("456") == string::npos )
00427 {
00428 setAOHGain(settingName, i2c_values);
00429 }
00430 else if ( settingName == k_PLL_CTR4 || settingName == k_PLL_CTR5 )
00431 {
00432 unsigned int last_CTR2 = 0x0;
00433 if ( containsSetting(k_PLL_CTR2) ) last_CTR2 = getdeviceValuesForSetting( k_PLL_CTR2 );
00434
00435 device_.push_back( make_pair(getdeviceAddressForSetting(k_PLL_CTR2), new_PLL_CTR2_value(settingName, last_CTR2)) );
00436 device_.push_back( make_pair(getdeviceAddressForSetting(k_PLL_CTR4or5), i2c_values) );
00437 }
00438 else
00439 {
00440 std::map<std::string, unsigned int>::iterator foundName_itr = nameToAddress_.find(settingName);
00441
00442 if ( foundName_itr != nameToAddress_.end() )
00443 {
00444 i2c_address = foundName_itr->second;
00445 }
00446 else
00447 {
00448 i2c_address = strtoul(settingName.c_str(), 0, 16);
00449 }
00450 pair<unsigned int, unsigned int> p(i2c_address, i2c_values);
00451 device_.push_back(p);
00452 }
00453 }
00454 while (!in.eof());
00455
00456 in.close();
00457
00458 }
00459
00460 unsigned int PixelPortCardConfig::new_PLL_CTR2_value(std::string CTR4or5, unsigned int last_CTR2) const
00461 {
00462 if ( CTR4or5 == k_PLL_CTR4 ) return 0xdf & last_CTR2;
00463 else if ( CTR4or5 == k_PLL_CTR5 ) return 0x20 | last_CTR2;
00464 else assert(0);
00465 }
00466
00467 void PixelPortCardConfig::setAOHGain(std::string settingName, unsigned int value)
00468 {
00469 assert( settingName.find("AOH") != string::npos && settingName.find("Gain") != string::npos
00470 && settingName.find("123") == string::npos && settingName.find("456") == string::npos );
00471
00472 unsigned int i2c_address;
00473
00474
00475 string::size_type GainPosition = settingName.find("Gain");
00476 unsigned int whichAOH;
00477 if ( settingName[GainPosition-2] == 'H' ) whichAOH = 0;
00478 else
00479 {
00480 char whichAOHDigit[2]={0,0};
00481 whichAOHDigit[0]=settingName[GainPosition-2];
00482 whichAOH = atoi( whichAOHDigit );
00483 }
00484 char digit[2]={0,0};
00485 digit[0]=settingName[GainPosition+4];
00486 unsigned int channelOnAOH = atoi( digit );
00487 assert( (type_=="fpix" && whichAOH==0)||(type_=="bpix" && 1 <= whichAOH&&whichAOH <= 4) );
00488 assert( 1 <= channelOnAOH && channelOnAOH <= 6 );
00489
00490 if ( whichAOH == 0 && channelOnAOH <= 3 ) i2c_address = k_fpix_AOH_Gain123_address;
00491 else if ( whichAOH == 0 && channelOnAOH >= 4 ) i2c_address = k_fpix_AOH_Gain456_address;
00492 else if ( whichAOH == 1 && channelOnAOH <= 3 ) i2c_address = k_bpix_AOH1_Gain123_address;
00493 else if ( whichAOH == 1 && channelOnAOH >= 4 ) i2c_address = k_bpix_AOH1_Gain456_address;
00494 else if ( whichAOH == 2 && channelOnAOH <= 3 ) i2c_address = k_bpix_AOH2_Gain123_address;
00495 else if ( whichAOH == 2 && channelOnAOH >= 4 ) i2c_address = k_bpix_AOH2_Gain456_address;
00496 else if ( whichAOH == 3 && channelOnAOH <= 3 ) i2c_address = k_bpix_AOH3_Gain123_address;
00497 else if ( whichAOH == 3 && channelOnAOH >= 4 ) i2c_address = k_bpix_AOH3_Gain456_address;
00498 else if ( whichAOH == 4 && channelOnAOH <= 3 ) i2c_address = k_bpix_AOH4_Gain123_address;
00499 else if ( whichAOH == 4 && channelOnAOH >= 4 ) i2c_address = k_bpix_AOH4_Gain456_address;
00500 else assert(0);
00501
00502
00503 bool foundOne = false;
00504 for (unsigned int i=0;i<device_.size();i++)
00505 {
00506 if ( device_[i].first == i2c_address )
00507 {
00508 foundOne = true;
00509 unsigned int oldValue = device_[i].second;
00510 if ( channelOnAOH%3 == 1 )
00511 device_[i].second = (0x3c & oldValue) + ((value & 0x3)<<0);
00512 else if ( channelOnAOH%3 == 2 )
00513 device_[i].second = (0x33 & oldValue) + ((value & 0x3)<<2);
00514 else if ( channelOnAOH%3 == 0 )
00515 device_[i].second = (0x0f & oldValue) + ((value & 0x3)<<4);
00516 else assert(0);
00517
00518 }
00519 }
00520 if ( foundOne ) return;
00521 else
00522 {
00523 unsigned int i2c_value;
00524 if ( channelOnAOH%3 == 1 ) i2c_value = ((value & 0x3)<<0);
00525 else if ( channelOnAOH%3 == 2 ) i2c_value = ((value & 0x3)<<2);
00526 else if ( channelOnAOH%3 == 0 ) i2c_value = ((value & 0x3)<<4);
00527 else assert(0);
00528
00529 pair<unsigned int, unsigned int> p(i2c_address, i2c_value);
00530 device_.push_back(p);
00531 return;
00532 }
00533 }
00534
00535 void PixelPortCardConfig::setDataBaseAOHGain(std::string settingName, unsigned int value)
00536 {
00537 unsigned int i2c_address;
00538
00539
00540 string::size_type GainPosition = settingName.find("GAIN");
00541 unsigned int whichAOH;
00542 if(type_ == "fpix")
00543 {
00544 whichAOH = 0 ;
00545 }
00546 else
00547 {
00548 char whichAOHDigit[2]={0,0};
00549 whichAOHDigit[0]=settingName[GainPosition-2];
00550 whichAOH = atoi( whichAOHDigit );
00551 }
00552 char digit[2]={0,0};
00553 digit[0]=settingName[GainPosition+4];
00554 unsigned int channelOnAOH = atoi( digit );
00555 assert( (type_=="fpix" && whichAOH==0)||(type_=="bpix" && 1 <= whichAOH&&whichAOH <= 4) );
00556 assert( 1 <= channelOnAOH && channelOnAOH <= 6 );
00557
00558 if ( whichAOH == 0 && channelOnAOH <= 3 ) i2c_address = k_fpix_AOH_Gain123_address;
00559 else if ( whichAOH == 0 && channelOnAOH >= 4 ) i2c_address = k_fpix_AOH_Gain456_address;
00560 else if ( whichAOH == 1 && channelOnAOH <= 3 ) i2c_address = k_bpix_AOH1_Gain123_address;
00561 else if ( whichAOH == 1 && channelOnAOH >= 4 ) i2c_address = k_bpix_AOH1_Gain456_address;
00562 else if ( whichAOH == 2 && channelOnAOH <= 3 ) i2c_address = k_bpix_AOH2_Gain123_address;
00563 else if ( whichAOH == 2 && channelOnAOH >= 4 ) i2c_address = k_bpix_AOH2_Gain456_address;
00564 else if ( whichAOH == 3 && channelOnAOH <= 3 ) i2c_address = k_bpix_AOH3_Gain123_address;
00565 else if ( whichAOH == 3 && channelOnAOH >= 4 ) i2c_address = k_bpix_AOH3_Gain456_address;
00566 else if ( whichAOH == 4 && channelOnAOH <= 3 ) i2c_address = k_bpix_AOH4_Gain123_address;
00567 else if ( whichAOH == 4 && channelOnAOH >= 4 ) i2c_address = k_bpix_AOH4_Gain456_address;
00568 else assert(0);
00569
00570
00571 bool foundOne = false;
00572 for (unsigned int i=0;i<device_.size();i++)
00573 {
00574 if ( device_[i].first == i2c_address )
00575 {
00576 foundOne = true;
00577 unsigned int oldValue = device_[i].second;
00578 if ( channelOnAOH%3 == 1 )
00579 device_[i].second = (0x3c & oldValue) + ((value & 0x3)<<0);
00580 else if ( channelOnAOH%3 == 2 )
00581 device_[i].second = (0x33 & oldValue) + ((value & 0x3)<<2);
00582 else if ( channelOnAOH%3 == 0 )
00583 device_[i].second = (0x0f & oldValue) + ((value & 0x3)<<4);
00584 else assert(0);
00585
00586 }
00587 }
00588 if ( foundOne ) return;
00589 else
00590 {
00591 unsigned int i2c_value;
00592 if ( channelOnAOH%3 == 1 ) i2c_value = ((value & 0x3)<<0);
00593 else if ( channelOnAOH%3 == 2 ) i2c_value = ((value & 0x3)<<2);
00594 else if ( channelOnAOH%3 == 0 ) i2c_value = ((value & 0x3)<<4);
00595 else assert(0);
00596
00597 pair<unsigned int, unsigned int> p(i2c_address, i2c_value);
00598 device_.push_back(p);
00599 return;
00600 }
00601 }
00602
00603 void PixelPortCardConfig::fillNameToAddress()
00604 {
00605 if ( nameToAddress_.size() != 0 ) return;
00606
00607 if ( type_ == "fpix" )
00608 {
00609 nameToAddress_[PortCardSettingNames::k_AOH_Bias1] = PortCardSettingNames::k_fpix_AOH_Bias1_address;
00610 nameToAddress_[PortCardSettingNames::k_AOH_Bias2] = PortCardSettingNames::k_fpix_AOH_Bias2_address;
00611 nameToAddress_[PortCardSettingNames::k_AOH_Bias3] = PortCardSettingNames::k_fpix_AOH_Bias3_address;
00612 nameToAddress_[PortCardSettingNames::k_AOH_Bias4] = PortCardSettingNames::k_fpix_AOH_Bias4_address;
00613 nameToAddress_[PortCardSettingNames::k_AOH_Bias5] = PortCardSettingNames::k_fpix_AOH_Bias5_address;
00614 nameToAddress_[PortCardSettingNames::k_AOH_Bias6] = PortCardSettingNames::k_fpix_AOH_Bias6_address;
00615 nameToAddress_[PortCardSettingNames::k_AOH_Gain123] = PortCardSettingNames::k_fpix_AOH_Gain123_address;
00616 nameToAddress_[PortCardSettingNames::k_AOH_Gain456] = PortCardSettingNames::k_fpix_AOH_Gain456_address;
00617
00618 nameToAddress_[PortCardSettingNames::k_PLL_CTR1] = PortCardSettingNames::k_fpix_PLL_CTR1_address;
00619 nameToAddress_[PortCardSettingNames::k_PLL_CTR2] = PortCardSettingNames::k_fpix_PLL_CTR2_address;
00620 nameToAddress_[PortCardSettingNames::k_PLL_CTR3] = PortCardSettingNames::k_fpix_PLL_CTR3_address;
00621 nameToAddress_[PortCardSettingNames::k_PLL_CTR4or5] = PortCardSettingNames::k_fpix_PLL_CTR4or5_address;
00622
00623 nameToAddress_[PortCardSettingNames::k_Delay25_RDA] = PortCardSettingNames::k_fpix_Delay25_RDA_address;
00624 nameToAddress_[PortCardSettingNames::k_Delay25_RCL] = PortCardSettingNames::k_fpix_Delay25_RCL_address;
00625 nameToAddress_[PortCardSettingNames::k_Delay25_SDA] = PortCardSettingNames::k_fpix_Delay25_SDA_address;
00626 nameToAddress_[PortCardSettingNames::k_Delay25_TRG] = PortCardSettingNames::k_fpix_Delay25_TRG_address;
00627 nameToAddress_[PortCardSettingNames::k_Delay25_SCL] = PortCardSettingNames::k_fpix_Delay25_SCL_address;
00628 nameToAddress_[PortCardSettingNames::k_Delay25_GCR] = PortCardSettingNames::k_fpix_Delay25_GCR_address;
00629
00630 nameToAddress_[PortCardSettingNames::k_DOH_Ch0Bias_CLK] = PortCardSettingNames::k_fpix_DOH_Ch0Bias_CLK_address;
00631 nameToAddress_[PortCardSettingNames::k_DOH_Dummy] = PortCardSettingNames::k_fpix_DOH_Dummy_address;
00632 nameToAddress_[PortCardSettingNames::k_DOH_Ch1Bias_Data] = PortCardSettingNames::k_fpix_DOH_Ch1Bias_Data_address;
00633 nameToAddress_[PortCardSettingNames::k_DOH_Gain_SEU] = PortCardSettingNames::k_fpix_DOH_Gain_SEU_address;
00634 }
00635 else if ( type_ == "bpix" )
00636 {
00637 nameToAddress_[PortCardSettingNames::k_AOH1_Bias1] = PortCardSettingNames::k_bpix_AOH1_Bias1_address;
00638 nameToAddress_[PortCardSettingNames::k_AOH1_Bias2] = PortCardSettingNames::k_bpix_AOH1_Bias2_address;
00639 nameToAddress_[PortCardSettingNames::k_AOH1_Bias3] = PortCardSettingNames::k_bpix_AOH1_Bias3_address;
00640 nameToAddress_[PortCardSettingNames::k_AOH1_Bias4] = PortCardSettingNames::k_bpix_AOH1_Bias4_address;
00641 nameToAddress_[PortCardSettingNames::k_AOH1_Bias5] = PortCardSettingNames::k_bpix_AOH1_Bias5_address;
00642 nameToAddress_[PortCardSettingNames::k_AOH1_Bias6] = PortCardSettingNames::k_bpix_AOH1_Bias6_address;
00643 nameToAddress_[PortCardSettingNames::k_AOH1_Gain123] = PortCardSettingNames::k_bpix_AOH1_Gain123_address;
00644 nameToAddress_[PortCardSettingNames::k_AOH1_Gain456] = PortCardSettingNames::k_bpix_AOH1_Gain456_address;
00645
00646 nameToAddress_[PortCardSettingNames::k_AOH2_Bias1] = PortCardSettingNames::k_bpix_AOH2_Bias1_address;
00647 nameToAddress_[PortCardSettingNames::k_AOH2_Bias2] = PortCardSettingNames::k_bpix_AOH2_Bias2_address;
00648 nameToAddress_[PortCardSettingNames::k_AOH2_Bias3] = PortCardSettingNames::k_bpix_AOH2_Bias3_address;
00649 nameToAddress_[PortCardSettingNames::k_AOH2_Bias4] = PortCardSettingNames::k_bpix_AOH2_Bias4_address;
00650 nameToAddress_[PortCardSettingNames::k_AOH2_Bias5] = PortCardSettingNames::k_bpix_AOH2_Bias5_address;
00651 nameToAddress_[PortCardSettingNames::k_AOH2_Bias6] = PortCardSettingNames::k_bpix_AOH2_Bias6_address;
00652 nameToAddress_[PortCardSettingNames::k_AOH2_Gain123] = PortCardSettingNames::k_bpix_AOH2_Gain123_address;
00653 nameToAddress_[PortCardSettingNames::k_AOH2_Gain456] = PortCardSettingNames::k_bpix_AOH2_Gain456_address;
00654
00655 nameToAddress_[PortCardSettingNames::k_AOH3_Bias1] = PortCardSettingNames::k_bpix_AOH3_Bias1_address;
00656 nameToAddress_[PortCardSettingNames::k_AOH3_Bias2] = PortCardSettingNames::k_bpix_AOH3_Bias2_address;
00657 nameToAddress_[PortCardSettingNames::k_AOH3_Bias3] = PortCardSettingNames::k_bpix_AOH3_Bias3_address;
00658 nameToAddress_[PortCardSettingNames::k_AOH3_Bias4] = PortCardSettingNames::k_bpix_AOH3_Bias4_address;
00659 nameToAddress_[PortCardSettingNames::k_AOH3_Bias5] = PortCardSettingNames::k_bpix_AOH3_Bias5_address;
00660 nameToAddress_[PortCardSettingNames::k_AOH3_Bias6] = PortCardSettingNames::k_bpix_AOH3_Bias6_address;
00661 nameToAddress_[PortCardSettingNames::k_AOH3_Gain123] = PortCardSettingNames::k_bpix_AOH3_Gain123_address;
00662 nameToAddress_[PortCardSettingNames::k_AOH3_Gain456] = PortCardSettingNames::k_bpix_AOH3_Gain456_address;
00663
00664 nameToAddress_[PortCardSettingNames::k_AOH4_Bias1] = PortCardSettingNames::k_bpix_AOH4_Bias1_address;
00665 nameToAddress_[PortCardSettingNames::k_AOH4_Bias2] = PortCardSettingNames::k_bpix_AOH4_Bias2_address;
00666 nameToAddress_[PortCardSettingNames::k_AOH4_Bias3] = PortCardSettingNames::k_bpix_AOH4_Bias3_address;
00667 nameToAddress_[PortCardSettingNames::k_AOH4_Bias4] = PortCardSettingNames::k_bpix_AOH4_Bias4_address;
00668 nameToAddress_[PortCardSettingNames::k_AOH4_Bias5] = PortCardSettingNames::k_bpix_AOH4_Bias5_address;
00669 nameToAddress_[PortCardSettingNames::k_AOH4_Bias6] = PortCardSettingNames::k_bpix_AOH4_Bias6_address;
00670 nameToAddress_[PortCardSettingNames::k_AOH4_Gain123] = PortCardSettingNames::k_bpix_AOH4_Gain123_address;
00671 nameToAddress_[PortCardSettingNames::k_AOH4_Gain456] = PortCardSettingNames::k_bpix_AOH4_Gain456_address;
00672
00673 nameToAddress_[PortCardSettingNames::k_PLL_CTR1] = PortCardSettingNames::k_bpix_PLL_CTR1_address;
00674 nameToAddress_[PortCardSettingNames::k_PLL_CTR2] = PortCardSettingNames::k_bpix_PLL_CTR2_address;
00675 nameToAddress_[PortCardSettingNames::k_PLL_CTR3] = PortCardSettingNames::k_bpix_PLL_CTR3_address;
00676 nameToAddress_[PortCardSettingNames::k_PLL_CTR4or5] = PortCardSettingNames::k_bpix_PLL_CTR4or5_address;
00677
00678 nameToAddress_[PortCardSettingNames::k_Delay25_RDA] = PortCardSettingNames::k_bpix_Delay25_RDA_address;
00679 nameToAddress_[PortCardSettingNames::k_Delay25_RCL] = PortCardSettingNames::k_bpix_Delay25_RCL_address;
00680 nameToAddress_[PortCardSettingNames::k_Delay25_SDA] = PortCardSettingNames::k_bpix_Delay25_SDA_address;
00681 nameToAddress_[PortCardSettingNames::k_Delay25_TRG] = PortCardSettingNames::k_bpix_Delay25_TRG_address;
00682 nameToAddress_[PortCardSettingNames::k_Delay25_SCL] = PortCardSettingNames::k_bpix_Delay25_SCL_address;
00683 nameToAddress_[PortCardSettingNames::k_Delay25_GCR] = PortCardSettingNames::k_bpix_Delay25_GCR_address;
00684
00685 nameToAddress_[PortCardSettingNames::k_DOH_Ch0Bias_CLK] = PortCardSettingNames::k_bpix_DOH_Ch0Bias_CLK_address;
00686 nameToAddress_[PortCardSettingNames::k_DOH_Dummy] = PortCardSettingNames::k_bpix_DOH_Dummy_address;
00687 nameToAddress_[PortCardSettingNames::k_DOH_Ch1Bias_Data] = PortCardSettingNames::k_bpix_DOH_Ch1Bias_Data_address;
00688 nameToAddress_[PortCardSettingNames::k_DOH_Gain_SEU] = PortCardSettingNames::k_bpix_DOH_Gain_SEU_address;
00689 }
00690 else assert(0);
00691
00692 return;
00693 }
00694
00695 void PixelPortCardConfig::fillDBToFileAddress()
00696 {
00697 if(type_ == "fpix")
00698 {
00699
00700
00701
00702
00703
00704
00705
00706
00707
00708
00709
00710
00711
00712
00713
00714 nameDBtoFileConversion_["AOH_BIAS1" ] = k_AOH_Bias1 ;
00715 nameDBtoFileConversion_["AOH_BIAS2" ] = k_AOH_Bias2 ;
00716 nameDBtoFileConversion_["AOH_BIAS3" ] = k_AOH_Bias3 ;
00717 nameDBtoFileConversion_["AOH_BIAS4" ] = k_AOH_Bias4 ;
00718 nameDBtoFileConversion_["AOH_BIAS5" ] = k_AOH_Bias5 ;
00719 nameDBtoFileConversion_["AOH_BIAS6" ] = k_AOH_Bias6 ;
00720
00721
00722
00723
00724
00725
00726
00727
00728
00729
00730
00731
00732
00733
00734
00735
00736
00737
00738
00739
00740
00741
00742
00743
00744
00745
00746
00747
00748
00749
00750
00751
00752
00753
00754
00755
00756
00757
00758
00759
00760
00761
00762
00763
00764
00765
00766
00767
00768
00769
00770
00771
00772
00773
00774
00775
00776
00777
00778
00779
00780
00781
00782
00783
00784
00785
00786
00787
00788
00789
00790
00791
00792 nameDBtoFileConversion_["DELAY25_GCR" ] = k_Delay25_RDA ;
00793 nameDBtoFileConversion_["DELAY25_SCL" ] = k_Delay25_RCL ;
00794 nameDBtoFileConversion_["DELAY25_TRG" ] = k_Delay25_SDA ;
00795 nameDBtoFileConversion_["DELAY25_SDA" ] = k_Delay25_TRG ;
00796 nameDBtoFileConversion_["DELAY25_RCL" ] = k_Delay25_SCL ;
00797 nameDBtoFileConversion_["DELAY25_RDA" ] = k_Delay25_GCR ;
00798
00799
00800
00801
00802
00803
00804 nameDBtoFileConversion_["DOH_BIAS0" ] = k_DOH_Ch0Bias_CLK ;
00805 nameDBtoFileConversion_["DOH_BIAS1" ] = k_DOH_Ch1Bias_Data ;
00806 nameDBtoFileConversion_["DOH_SEU_GAIN" ] = k_DOH_Gain_SEU ;
00807
00808
00809
00810 nameDBtoFileConversion_["PLL_CTR1" ] = k_PLL_CTR1 ;
00811 nameDBtoFileConversion_["PLL_CTR2" ] = k_PLL_CTR2 ;
00812 nameDBtoFileConversion_["PLL_CTR3" ] = k_PLL_CTR3 ;
00813 nameDBtoFileConversion_["PLL_CTR4_5" ] = k_PLL_CTR4 ;
00814
00815
00816
00817
00818 }
00819 else if(type_ == "bpix")
00820 {
00821
00822
00823
00824
00825
00826
00827
00828
00829
00830
00831
00832
00833
00834
00835
00836 nameDBtoFileConversion_["AOH1_BIAS1" ] = k_AOH1_Bias1 ;
00837 nameDBtoFileConversion_["AOH1_BIAS2" ] = k_AOH1_Bias2 ;
00838 nameDBtoFileConversion_["AOH1_BIAS3" ] = k_AOH1_Bias3 ;
00839 nameDBtoFileConversion_["AOH1_BIAS4" ] = k_AOH1_Bias4 ;
00840 nameDBtoFileConversion_["AOH1_BIAS5" ] = k_AOH1_Bias5 ;
00841 nameDBtoFileConversion_["AOH1_BIAS6" ] = k_AOH1_Bias6 ;
00842
00843
00844
00845
00846
00847
00848 nameDBtoFileConversion_["AOH2_BIAS1" ] = k_AOH2_Bias1 ;
00849 nameDBtoFileConversion_["AOH2_BIAS2" ] = k_AOH2_Bias2 ;
00850 nameDBtoFileConversion_["AOH2_BIAS3" ] = k_AOH2_Bias3 ;
00851 nameDBtoFileConversion_["AOH2_BIAS4" ] = k_AOH2_Bias4 ;
00852 nameDBtoFileConversion_["AOH2_BIAS5" ] = k_AOH2_Bias5 ;
00853 nameDBtoFileConversion_["AOH2_BIAS6" ] = k_AOH2_Bias6 ;
00854
00855
00856
00857
00858
00859
00860 nameDBtoFileConversion_["AOH3_BIAS1" ] = k_AOH3_Bias1 ;
00861 nameDBtoFileConversion_["AOH3_BIAS2" ] = k_AOH3_Bias2 ;
00862 nameDBtoFileConversion_["AOH3_BIAS3" ] = k_AOH3_Bias3 ;
00863 nameDBtoFileConversion_["AOH3_BIAS4" ] = k_AOH3_Bias4 ;
00864 nameDBtoFileConversion_["AOH3_BIAS5" ] = k_AOH3_Bias5 ;
00865 nameDBtoFileConversion_["AOH3_BIAS6" ] = k_AOH3_Bias6 ;
00866
00867
00868
00869
00870
00871
00872 nameDBtoFileConversion_["AOH4_BIAS1" ] = k_AOH4_Bias1 ;
00873 nameDBtoFileConversion_["AOH4_BIAS2" ] = k_AOH4_Bias2 ;
00874 nameDBtoFileConversion_["AOH4_BIAS3" ] = k_AOH4_Bias3 ;
00875 nameDBtoFileConversion_["AOH4_BIAS4" ] = k_AOH4_Bias4 ;
00876 nameDBtoFileConversion_["AOH4_BIAS5" ] = k_AOH4_Bias5 ;
00877 nameDBtoFileConversion_["AOH4_BIAS6" ] = k_AOH4_Bias6 ;
00878
00879
00880
00881
00882
00883
00884
00885
00886
00887
00888
00889
00890
00891
00892
00893
00894
00895
00896
00897
00898
00899
00900
00901
00902
00903
00904
00905
00906
00907
00908 nameDBtoFileConversion_["DELAY25_GCR" ] = k_Delay25_RDA ;
00909 nameDBtoFileConversion_["DELAY25_SCL" ] = k_Delay25_RCL ;
00910 nameDBtoFileConversion_["DELAY25_TRG" ] = k_Delay25_SDA ;
00911 nameDBtoFileConversion_["DELAY25_SDA" ] = k_Delay25_TRG ;
00912 nameDBtoFileConversion_["DELAY25_RCL" ] = k_Delay25_SCL ;
00913 nameDBtoFileConversion_["DELAY25_RDA" ] = k_Delay25_GCR ;
00914
00915
00916
00917
00918
00919
00920 nameDBtoFileConversion_["DOH_BIAS0" ] = k_DOH_Ch0Bias_CLK ;
00921 nameDBtoFileConversion_["DOH_BIAS1" ] = k_DOH_Ch1Bias_Data ;
00922 nameDBtoFileConversion_["DOH_SEU_GAIN" ] = k_DOH_Gain_SEU ;
00923
00924
00925
00926 nameDBtoFileConversion_["PLL_CTR1" ] = k_PLL_CTR1 ;
00927 nameDBtoFileConversion_["PLL_CTR2" ] = k_PLL_CTR2 ;
00928 nameDBtoFileConversion_["PLL_CTR3" ] = k_PLL_CTR3 ;
00929 nameDBtoFileConversion_["PLL_CTR4_5" ] = k_PLL_CTR4 ;
00930
00931
00932
00933
00934 }
00935
00936
00937 }
00938
00939
00940 void PixelPortCardConfig::writeASCII(std::string dir) const {
00941
00942 if (dir!="") dir+="/";
00943 std::string filename=dir+"portcard_"+portcardname_+".dat";
00944
00945 std::ofstream out(filename.c_str());
00946 if (!out.good()){
00947 std::cout << "Could not open file:"<<filename.c_str()<<std::endl;
00948 assert(0);
00949 }
00950
00951 out << "Name: " << portcardname_ << std::endl;
00952 out << "Type: " << type_ << std::endl;
00953 out << "TKFECID: " << TKFECID_ << std::endl;
00954 out << "ringAddress: 0x" <<std::hex<< ringAddress_ <<std::dec<< std::endl;
00955 out << "ccuAddress: 0x" <<std::hex<< ccuAddress_ <<std::dec<< std::endl;
00956
00957 out << "channelAddress: 0x" <<std::hex<< channelAddress_ <<std::dec<< std::endl;
00958
00959 out << "i2cSpeed: 0x" <<std::hex<< i2cSpeed_ <<std::dec<< std::endl;
00960
00961 bool found_PLL_CTR2 = false;
00962 unsigned int last_PLL_CTR2_value = 0x0;
00963 for (unsigned int i=0;i<device_.size();i++)
00964 {
00965 unsigned int deviceAddress = device_.at(i).first;
00966
00967
00968 if ( ( type_=="fpix" && deviceAddress == k_fpix_AOH_Gain123_address )
00969 || ( type_=="fpix" && deviceAddress == k_fpix_AOH_Gain456_address )
00970 || ( type_=="bpix" && deviceAddress == k_bpix_AOH1_Gain123_address )
00971 || ( type_=="bpix" && deviceAddress == k_bpix_AOH1_Gain456_address )
00972 || ( type_=="bpix" && deviceAddress == k_bpix_AOH2_Gain123_address )
00973 || ( type_=="bpix" && deviceAddress == k_bpix_AOH2_Gain456_address )
00974 || ( type_=="bpix" && deviceAddress == k_bpix_AOH3_Gain123_address )
00975 || ( type_=="bpix" && deviceAddress == k_bpix_AOH3_Gain456_address )
00976 || ( type_=="bpix" && deviceAddress == k_bpix_AOH4_Gain123_address )
00977 || ( type_=="bpix" && deviceAddress == k_bpix_AOH4_Gain456_address )
00978 )
00979 {
00980 std::string whichAOHString;
00981 unsigned int zeroOrThree;
00982 if ( type_=="fpix" && deviceAddress == k_fpix_AOH_Gain123_address ) { whichAOHString = ""; zeroOrThree = 0; }
00983 else if ( type_=="fpix" && deviceAddress == k_fpix_AOH_Gain456_address ) { whichAOHString = ""; zeroOrThree = 3; }
00984 else if ( type_=="bpix" && deviceAddress == k_bpix_AOH1_Gain123_address ) { whichAOHString = "1"; zeroOrThree = 0; }
00985 else if ( type_=="bpix" && deviceAddress == k_bpix_AOH1_Gain456_address ) { whichAOHString = "1"; zeroOrThree = 3; }
00986 else if ( type_=="bpix" && deviceAddress == k_bpix_AOH2_Gain123_address ) { whichAOHString = "2"; zeroOrThree = 0; }
00987 else if ( type_=="bpix" && deviceAddress == k_bpix_AOH2_Gain456_address ) { whichAOHString = "2"; zeroOrThree = 3; }
00988 else if ( type_=="bpix" && deviceAddress == k_bpix_AOH3_Gain123_address ) { whichAOHString = "3"; zeroOrThree = 0; }
00989 else if ( type_=="bpix" && deviceAddress == k_bpix_AOH3_Gain456_address ) { whichAOHString = "3"; zeroOrThree = 3; }
00990 else if ( type_=="bpix" && deviceAddress == k_bpix_AOH4_Gain123_address ) { whichAOHString = "4"; zeroOrThree = 0; }
00991 else if ( type_=="bpix" && deviceAddress == k_bpix_AOH4_Gain456_address ) { whichAOHString = "4"; zeroOrThree = 3; }
00992 else assert(0);
00993
00994 out << "AOH"<<whichAOHString<<"_Gain"<<zeroOrThree+1<<": 0x"<< (((device_[i].second) & 0x03)>>0) << std::endl;
00995 out << "AOH"<<whichAOHString<<"_Gain"<<zeroOrThree+2<<": 0x"<< (((device_[i].second) & 0x0c)>>2) << std::endl;
00996 out << "AOH"<<whichAOHString<<"_Gain"<<zeroOrThree+3<<": 0x"<< (((device_[i].second) & 0x30)>>4) << std::endl;
00997 continue;
00998 }
00999
01000
01001
01002 std::string settingName = "";
01003 for ( std::map<std::string, unsigned int>::const_iterator nameToAddress_itr = nameToAddress_.begin(); nameToAddress_itr != nameToAddress_.end(); ++nameToAddress_itr )
01004 {
01005 if ( nameToAddress_itr->second == deviceAddress ) {settingName = nameToAddress_itr->first; break;}
01006 }
01007
01008
01009 if ( settingName == k_PLL_CTR2 )
01010 {
01011 if ( found_PLL_CTR2 && last_PLL_CTR2_value == device_.at(i).second ) continue;
01012 found_PLL_CTR2 = true;
01013 last_PLL_CTR2_value = device_.at(i).second;
01014 }
01015 if ( found_PLL_CTR2 && settingName == k_PLL_CTR4or5 )
01016 {
01017 if ( (last_PLL_CTR2_value & 0x20) == 0x0 ) settingName = k_PLL_CTR4;
01018 else settingName = k_PLL_CTR5;
01019 }
01020
01021
01022 if ( settingName=="" ) out << "0x" <<std::hex<< device_.at(i).first <<std::dec;
01023 else out << settingName << ":";
01024
01025 out << " 0x" <<std::hex<< device_.at(i).second <<std::dec<< std::endl;
01026 }
01027
01028 out.close();
01029 }
01030
01031 unsigned int PixelPortCardConfig::getdevicesize() const{
01032 return device_.size();
01033 }
01034
01035 std::string PixelPortCardConfig::getTKFECID() const{
01036 return TKFECID_;
01037 }
01038
01039 unsigned int PixelPortCardConfig::getringAddress() const{
01040 return ringAddress_;
01041 }
01042
01043 unsigned int PixelPortCardConfig::getccuAddress() const{
01044 return ccuAddress_;
01045 }
01046
01047 unsigned int PixelPortCardConfig::getchannelAddress() const{
01048 return channelAddress_;
01049 }
01050
01051 unsigned int PixelPortCardConfig::geti2cSpeed() const{
01052 return i2cSpeed_;
01053 }
01054
01055 std::string PixelPortCardConfig::gettype() const{
01056 return type_;
01057 }
01058
01059 unsigned int PixelPortCardConfig::getdeviceAddress(unsigned int i) const{
01060 assert(i<device_.size());
01061 return device_[i].first;
01062 }
01063
01064 unsigned int PixelPortCardConfig::getdeviceValues(unsigned int i) const{
01065 assert(i<device_.size());
01066 return device_[i].second;
01067 }
01068
01069 void PixelPortCardConfig::setdeviceValues(unsigned int address, unsigned int value) {
01070 for (int i=device_.size()-1; i>=0; i--)
01071 {
01072 if( device_.at(i).first==address )
01073 {
01074 device_.at(i).second=value;
01075 return;
01076 }
01077 }
01078
01079
01080 pair<unsigned int, unsigned int> p(address, value);
01081 device_.push_back(p);
01082
01083 return;
01084 }
01085
01086 void PixelPortCardConfig::setdeviceValues(std::string settingName, unsigned int value)
01087 {
01088 setdeviceValues( getdeviceAddressForSetting(settingName), value );
01089 return;
01090 }
01091
01092 unsigned int PixelPortCardConfig::getdeviceAddressForSetting(std::string settingName) const
01093 {
01094
01095 std::map<std::string, unsigned int>::const_iterator foundName_itr = nameToAddress_.find(settingName);
01096 assert( foundName_itr != nameToAddress_.end() );
01097 return foundName_itr->second;
01098 }
01099
01100 unsigned int PixelPortCardConfig::getdeviceValuesForSetting(std::string settingName) const
01101 {
01102 return getdeviceValuesForAddress( getdeviceAddressForSetting(settingName) );
01103 }
01104
01105 unsigned int PixelPortCardConfig::getdeviceValuesForAddress(unsigned int address) const
01106 {
01107 for (int i=device_.size()-1; i>=0; i--)
01108 {
01109 if( device_.at(i).first==address )
01110 {
01111 return device_.at(i).second;
01112 }
01113 }
01114 assert(0);
01115 return 0;
01116 }
01117
01118 bool PixelPortCardConfig::containsDeviceAddress(unsigned int deviceAddress) const
01119 {
01120 for ( std::vector<std::pair<unsigned int, unsigned int> >::const_iterator device_itr = device_.begin(); device_itr != device_.end(); device_itr++ )
01121 {
01122 if ( device_itr->first == deviceAddress ) return true;
01123 }
01124 return false;
01125 }
01126
01127 unsigned int PixelPortCardConfig::AOHBiasAddressFromAOHNumber(unsigned int AOHNumber) const
01128 {
01129 if ( type_ == "fpix" )
01130 {
01131 if (AOHNumber == 1) return PortCardSettingNames::k_fpix_AOH_Bias1_address;
01132 else if (AOHNumber == 2) return PortCardSettingNames::k_fpix_AOH_Bias2_address;
01133 else if (AOHNumber == 3) return PortCardSettingNames::k_fpix_AOH_Bias3_address;
01134 else if (AOHNumber == 4) return PortCardSettingNames::k_fpix_AOH_Bias4_address;
01135 else if (AOHNumber == 5) return PortCardSettingNames::k_fpix_AOH_Bias5_address;
01136 else if (AOHNumber == 6) return PortCardSettingNames::k_fpix_AOH_Bias6_address;
01137 else {std::cout << "ERROR: For fpix, AOH number must be in the range 1-6, but the given AOH number was "<<AOHNumber<<"."<<std::endl; assert(0);}
01138 }
01139 else if ( type_ == "bpix" )
01140 {
01141 if (AOHNumber == 1) return PortCardSettingNames::k_bpix_AOH1_Bias1_address;
01142 else if (AOHNumber == 2) return PortCardSettingNames::k_bpix_AOH1_Bias2_address;
01143 else if (AOHNumber == 3) return PortCardSettingNames::k_bpix_AOH1_Bias3_address;
01144 else if (AOHNumber == 4) return PortCardSettingNames::k_bpix_AOH1_Bias4_address;
01145 else if (AOHNumber == 5) return PortCardSettingNames::k_bpix_AOH1_Bias5_address;
01146 else if (AOHNumber == 6) return PortCardSettingNames::k_bpix_AOH1_Bias6_address;
01147 else if (AOHNumber == 7) return PortCardSettingNames::k_bpix_AOH2_Bias1_address;
01148 else if (AOHNumber == 8) return PortCardSettingNames::k_bpix_AOH2_Bias2_address;
01149 else if (AOHNumber == 9) return PortCardSettingNames::k_bpix_AOH2_Bias3_address;
01150 else if (AOHNumber ==10) return PortCardSettingNames::k_bpix_AOH2_Bias4_address;
01151 else if (AOHNumber ==11) return PortCardSettingNames::k_bpix_AOH2_Bias5_address;
01152 else if (AOHNumber ==12) return PortCardSettingNames::k_bpix_AOH2_Bias6_address;
01153 else if (AOHNumber ==13) return PortCardSettingNames::k_bpix_AOH3_Bias1_address;
01154 else if (AOHNumber ==14) return PortCardSettingNames::k_bpix_AOH3_Bias2_address;
01155 else if (AOHNumber ==15) return PortCardSettingNames::k_bpix_AOH3_Bias3_address;
01156 else if (AOHNumber ==16) return PortCardSettingNames::k_bpix_AOH3_Bias4_address;
01157 else if (AOHNumber ==17) return PortCardSettingNames::k_bpix_AOH3_Bias5_address;
01158 else if (AOHNumber ==18) return PortCardSettingNames::k_bpix_AOH3_Bias6_address;
01159 else if (AOHNumber ==19) return PortCardSettingNames::k_bpix_AOH4_Bias1_address;
01160 else if (AOHNumber ==20) return PortCardSettingNames::k_bpix_AOH4_Bias2_address;
01161 else if (AOHNumber ==21) return PortCardSettingNames::k_bpix_AOH4_Bias3_address;
01162 else if (AOHNumber ==22) return PortCardSettingNames::k_bpix_AOH4_Bias4_address;
01163 else if (AOHNumber ==23) return PortCardSettingNames::k_bpix_AOH4_Bias5_address;
01164 else if (AOHNumber ==24) return PortCardSettingNames::k_bpix_AOH4_Bias6_address;
01165 else {std::cout << "ERROR: For bpix, AOH number must be in the range 1-24, but the given AOH number was "<<AOHNumber<<"."<<std::endl; assert(0);}
01166 }
01167 else assert(0);
01168 }
01169
01170 std::string PixelPortCardConfig::AOHGainStringFromAOHNumber(unsigned int AOHNumber) const
01171 {
01172 if ( type_ == "fpix" )
01173 {
01174 if (AOHNumber == 1) return "AOH_Gain1";
01175 else if (AOHNumber == 2) return "AOH_Gain2";
01176 else if (AOHNumber == 3) return "AOH_Gain3";
01177 else if (AOHNumber == 4) return "AOH_Gain4";
01178 else if (AOHNumber == 5) return "AOH_Gain5";
01179 else if (AOHNumber == 6) return "AOH_Gain6";
01180 else {std::cout << "ERROR: For fpix, AOH number must be in the range 1-6, but the given AOH number was "<<AOHNumber<<"."<<std::endl; assert(0);}
01181 }
01182 else if ( type_ == "bpix" )
01183 {
01184 if (AOHNumber == 1) return "AOH1_Gain1";
01185 else if (AOHNumber == 2) return "AOH1_Gain2";
01186 else if (AOHNumber == 3) return "AOH1_Gain3";
01187 else if (AOHNumber == 4) return "AOH1_Gain4";
01188 else if (AOHNumber == 5) return "AOH1_Gain5";
01189 else if (AOHNumber == 6) return "AOH1_Gain6";
01190 else if (AOHNumber == 7) return "AOH2_Gain1";
01191 else if (AOHNumber == 8) return "AOH2_Gain2";
01192 else if (AOHNumber == 9) return "AOH2_Gain3";
01193 else if (AOHNumber ==10) return "AOH2_Gain4";
01194 else if (AOHNumber ==11) return "AOH2_Gain5";
01195 else if (AOHNumber ==12) return "AOH2_Gain6";
01196 else if (AOHNumber ==13) return "AOH3_Gain1";
01197 else if (AOHNumber ==14) return "AOH3_Gain2";
01198 else if (AOHNumber ==15) return "AOH3_Gain3";
01199 else if (AOHNumber ==16) return "AOH3_Gain4";
01200 else if (AOHNumber ==17) return "AOH3_Gain5";
01201 else if (AOHNumber ==18) return "AOH3_Gain6";
01202 else if (AOHNumber ==19) return "AOH4_Gain1";
01203 else if (AOHNumber ==20) return "AOH4_Gain2";
01204 else if (AOHNumber ==21) return "AOH4_Gain3";
01205 else if (AOHNumber ==22) return "AOH4_Gain4";
01206 else if (AOHNumber ==23) return "AOH4_Gain5";
01207 else if (AOHNumber ==24) return "AOH4_Gain6";
01208 else {std::cout << "ERROR: For bpix, AOH number must be in the range 1-24, but the given AOH number was "<<AOHNumber<<"."<<std::endl; assert(0);}
01209 }
01210 else assert(0);
01211 }
01212
01213 unsigned int PixelPortCardConfig::AOHGainAddressFromAOHNumber(unsigned int AOHNumber) const
01214 {
01215 unsigned int address;
01216 if ( type_ == "fpix" )
01217 {
01218 if (AOHNumber == 1) address = PortCardSettingNames::k_fpix_AOH_Gain123_address;
01219 else if (AOHNumber == 2) address = PortCardSettingNames::k_fpix_AOH_Gain123_address;
01220 else if (AOHNumber == 3) address = PortCardSettingNames::k_fpix_AOH_Gain123_address;
01221 else if (AOHNumber == 4) address = PortCardSettingNames::k_fpix_AOH_Gain456_address;
01222 else if (AOHNumber == 5) address = PortCardSettingNames::k_fpix_AOH_Gain456_address;
01223 else if (AOHNumber == 6) address = PortCardSettingNames::k_fpix_AOH_Gain456_address;
01224 else {std::cout << "ERROR: For fpix, AOH number must be in the range 1-6, but the given AOH number was "<<AOHNumber<<"."<<std::endl; assert(0);}
01225 }
01226 else if ( type_ == "bpix" )
01227 {
01228 if (AOHNumber == 1) address = PortCardSettingNames::k_bpix_AOH1_Gain123_address;
01229 else if (AOHNumber == 2) address = PortCardSettingNames::k_bpix_AOH1_Gain123_address;
01230 else if (AOHNumber == 3) address = PortCardSettingNames::k_bpix_AOH1_Gain123_address;
01231 else if (AOHNumber == 4) address = PortCardSettingNames::k_bpix_AOH1_Gain456_address;
01232 else if (AOHNumber == 5) address = PortCardSettingNames::k_bpix_AOH1_Gain456_address;
01233 else if (AOHNumber == 6) address = PortCardSettingNames::k_bpix_AOH1_Gain456_address;
01234 else if (AOHNumber == 7) address = PortCardSettingNames::k_bpix_AOH2_Gain123_address;
01235 else if (AOHNumber == 8) address = PortCardSettingNames::k_bpix_AOH2_Gain123_address;
01236 else if (AOHNumber == 9) address = PortCardSettingNames::k_bpix_AOH2_Gain123_address;
01237 else if (AOHNumber ==10) address = PortCardSettingNames::k_bpix_AOH2_Gain456_address;
01238 else if (AOHNumber ==11) address = PortCardSettingNames::k_bpix_AOH2_Gain456_address;
01239 else if (AOHNumber ==12) address = PortCardSettingNames::k_bpix_AOH2_Gain456_address;
01240 else if (AOHNumber ==13) address = PortCardSettingNames::k_bpix_AOH3_Gain123_address;
01241 else if (AOHNumber ==14) address = PortCardSettingNames::k_bpix_AOH3_Gain123_address;
01242 else if (AOHNumber ==15) address = PortCardSettingNames::k_bpix_AOH3_Gain123_address;
01243 else if (AOHNumber ==16) address = PortCardSettingNames::k_bpix_AOH3_Gain456_address;
01244 else if (AOHNumber ==17) address = PortCardSettingNames::k_bpix_AOH3_Gain456_address;
01245 else if (AOHNumber ==18) address = PortCardSettingNames::k_bpix_AOH3_Gain456_address;
01246 else if (AOHNumber ==19) address = PortCardSettingNames::k_bpix_AOH4_Gain123_address;
01247 else if (AOHNumber ==20) address = PortCardSettingNames::k_bpix_AOH4_Gain123_address;
01248 else if (AOHNumber ==21) address = PortCardSettingNames::k_bpix_AOH4_Gain123_address;
01249 else if (AOHNumber ==22) address = PortCardSettingNames::k_bpix_AOH4_Gain456_address;
01250 else if (AOHNumber ==23) address = PortCardSettingNames::k_bpix_AOH4_Gain456_address;
01251 else if (AOHNumber ==24) address = PortCardSettingNames::k_bpix_AOH4_Gain456_address;
01252 else {std::cout << "ERROR: For bpix, AOH number must be in the range 1-24, but the given AOH number was "<<AOHNumber<<"."<<std::endl; assert(0);}
01253 }
01254 else assert(0);
01255
01256 return address;
01257 }
01258
01259 unsigned int PixelPortCardConfig::getAOHGain(unsigned int AOHNumber) const
01260 {
01261 const unsigned int address = AOHGainAddressFromAOHNumber(AOHNumber);
01262 const unsigned int threeGainsValue = getdeviceValuesForAddress(address);
01263
01264 if ( AOHNumber%3 == 1 ) return (((threeGainsValue) & 0x03)>>0);
01265 if ( AOHNumber%3 == 2 ) return (((threeGainsValue) & 0x0c)>>2);
01266 if ( AOHNumber%3 == 0 ) return (((threeGainsValue) & 0x30)>>4);
01267
01268 assert(0);
01269 }