CMS 3D CMS Logo

PixelPortCardConfig.cc

Go to the documentation of this file.
00001 //
00002 // This class specifies the settings on the TKPCIFEC
00003 // and the settings on the portcard
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 //added by Umesh
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     }//end for
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 //   01234567890123
00293 //   FPix_Trk_FEC_1
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++)    //Goes to every column of the Matrix
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       // Special handling for AOHX_GainY
00317       if( type_ == "fpix" && settingName.find("AOH_") != string::npos && settingName.find("GAIN") != string::npos // contains both "AOH_" and "Gain"
00318                && settingName.find("123") == string::npos && settingName.find("456") == string::npos ) // does not contain "123" or "456"
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 // contains both "AOH" and "Gain"
00324               && settingName.find("AOH_") == string::npos                                                            // must not contain AOH_ 'cause this is for forward
00325               && settingName.find("123")  == string::npos && settingName.find("456") == string::npos )               // does not contain "123" or "456"
00326         {
00327           setDataBaseAOHGain(settingName, i2c_values);
00328           cout << mthn << "Setting " << settingName << "\tto value " << std::hex << i2c_values << std::dec << std::endl ;
00329         }
00330       else // no special handling for this name
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); // convert string to integer using base 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     } // End of table columns
00355 }
00356 
00357 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
00358 PixelPortCardConfig::PixelPortCardConfig(std::string filename):
00359   PixelConfigBase(" "," "," "){
00360 
00361   //std::cout << "filename:"<<filename<<std::endl;
00362 
00363   unsigned int portcardpos=filename.find(std::string("portcard_"));
00364   //std::cout << "portcardpos:"<<portcardpos<<std::endl;
00365   assert(portcardpos!=std::string::npos);
00366   unsigned int datpos=filename.find(std::string(".dat"));
00367   //std::cout << "datpos:"<<datpos<<std::endl;
00368   assert(datpos!=std::string::npos);
00369   assert(datpos>portcardpos);
00370   
00371   portcardname_=filename.substr(portcardpos+9,datpos-portcardpos-9);
00372 
00373   //std::cout << "Portcard name extracted from file name:"<<portcardname_<<std::endl;
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:" ) // check that port card name matches the file name
00389   {
00390     in >> dummy; assert( dummy==portcardname_ );
00391     in >> dummy;
00392   }
00393   if ( dummy == "Type:" ) // read in the type, defaulting to "fpix" if not specified
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   //std::cout<<TKFECAddress_<<", "<<ringAddress_<<", "<<ccuAddress_<<", "<<channelAddress_<<", "<<i2cSpeed_<<std::endl;
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 ); // remove ':' from end of string, if it's there
00423     
00424     // Special handling for AOHX_GainY
00425     if ( settingName.find("AOH") != string::npos && settingName.find("Gain") != string::npos // contains both "AOH" and "Gain"
00426       && settingName.find("123") == string::npos && settingName.find("456") == string::npos ) // does not contain "123" or "456"
00427     {
00428         setAOHGain(settingName, i2c_values);
00429     }
00430     else if ( settingName == k_PLL_CTR4 || settingName == k_PLL_CTR5 ) // special handling
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 // no special handling for this name
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); // convert string to integer using base 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 // contains both "AOH" and "Gain"
00470         && settingName.find("123") == string::npos && settingName.find("456") == string::npos ); // does not contain "123" or "456"
00471         
00472         unsigned int i2c_address;
00473         
00474         // Get the i2c address of this AOH, and the channel on the AOH.
00475         string::size_type GainPosition = settingName.find("Gain");
00476         unsigned int whichAOH;
00477         if ( settingName[GainPosition-2] == 'H' ) whichAOH = 0; // fpix
00478         else  // bpix
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         // Search for this address in the previously-defined settings.
00503         bool foundOne = false;
00504         for (unsigned int i=0;i<device_.size();i++)
00505         {
00506                 if ( device_[i].first == i2c_address ) // Change this setting in all previous instances
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); // replace bits 0 and 1 with value
00512                         else if ( channelOnAOH%3 == 2 )
00513                                 device_[i].second = (0x33 & oldValue) + ((value & 0x3)<<2); // replace bits 2 and 3 with value
00514                         else if ( channelOnAOH%3 == 0 )
00515                                 device_[i].second = (0x0f & oldValue) + ((value & 0x3)<<4); // replace bits 4 and 5 with value
00516                         else assert(0);
00517                         //std::cout << "Changed setting "<< k_fpix_AOH_Gain123 <<"(address 0x"<<std::hex<<k_fpix_AOH_Gain123_address<<") from 0x"<<oldValue<<" to 0x"<< device_[i].second << std::dec <<"\n";
00518                 }
00519         }
00520         if ( foundOne ) return;
00521         else // If this was not set previously, add this setting with the other two gains set to zero.
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         // Get the i2c address of this AOH, and the channel on the AOH.
00540         string::size_type GainPosition = settingName.find("GAIN");
00541         unsigned int whichAOH;
00542         if(type_ == "fpix")
00543           {
00544             whichAOH = 0 ; // fpix
00545           }
00546         else  // bpix
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         // Search for this address in the previously-defined settings.
00571         bool foundOne = false;
00572         for (unsigned int i=0;i<device_.size();i++)
00573         {
00574                 if ( device_[i].first == i2c_address ) // Change this setting in all previous instances
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); // replace bits 0 and 1 with value
00580                         else if ( channelOnAOH%3 == 2 )
00581                                 device_[i].second = (0x33 & oldValue) + ((value & 0x3)<<2); // replace bits 2 and 3 with value
00582                         else if ( channelOnAOH%3 == 0 )
00583                                 device_[i].second = (0x0f & oldValue) + ((value & 0x3)<<4); // replace bits 4 and 5 with value
00584                         else assert(0);
00585                         //std::cout << "Changed setting "<< k_fpix_AOH_Gain123 <<"(address 0x"<<std::hex<<k_fpix_AOH_Gain123_address<<") from 0x"<<oldValue<<" to 0x"<< device_[i].second << std::dec <<"\n";
00586                 }
00587         }
00588         if ( foundOne ) return;
00589         else // If this was not set previously, add this setting with the other two gains set to zero.
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       //   nameDBtoFileConversion_["CONFIG_KEY_ID"         ] = ;
00700       //   nameDBtoFileConversion_["CONFIG_KEY"            ] = ;
00701       //   nameDBtoFileConversion_["VERSION"               ] = ;
00702       //   nameDBtoFileConversion_["CONDITION_DATA_SET_ID" ] = ;
00703       //   nameDBtoFileConversion_["KIND_OF_CONDITION_ID"  ] = ;
00704       //   nameDBtoFileConversion_["KIND_OF_COND"          ] = ;
00705       //   nameDBtoFileConversion_["SERIAL_NUMBER"         ] = ;
00706       //   nameDBtoFileConversion_["PORT_CARD_ID"          ] = ;
00707       //   nameDBtoFileConversion_["PORT_CARD"             ] = ;
00708       //   nameDBtoFileConversion_["TRKFEC_NAME"           ] = ;
00709       //   nameDBtoFileConversion_["RINGADDRESS"           ] = ;
00710       //   nameDBtoFileConversion_["CHANNELADDRESS"        ] = ;
00711       //   nameDBtoFileConversion_["CCUADDRESS"            ] = ;
00712       //   nameDBtoFileConversion_["I2C_CNTRL"             ] = ;
00713       //   nameDBtoFileConversion_["I2CSPEED"              ] = ;
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       //       nameDBtoFileConversion_["AOH1_BIAS1"            ] = k_AOH1_Bias1 ;
00721       //       nameDBtoFileConversion_["AOH1_BIAS2"               ] = k_AOH1_Bias2 ;
00722       //       nameDBtoFileConversion_["AOH1_BIAS3"               ] = k_AOH1_Bias3 ;
00723       //       nameDBtoFileConversion_["AOH1_BIAS4"               ] = k_AOH1_Bias4 ;
00724       //       nameDBtoFileConversion_["AOH1_BIAS5"               ] = k_AOH1_Bias5 ;
00725       //       nameDBtoFileConversion_["AOH1_BIAS6"               ] = k_AOH1_Bias6 ;
00726       //   nameDBtoFileConversion_["AOH1_GAIN1"            ] = ;
00727       //   nameDBtoFileConversion_["AOH1_GAIN2"            ] = ;
00728       //   nameDBtoFileConversion_["AOH1_GAIN3"            ] = ;
00729       //   nameDBtoFileConversion_["AOH1_GAIN4"            ] = ;
00730       //   nameDBtoFileConversion_["AOH1_GAIN5"            ] = ;
00731       //   nameDBtoFileConversion_["AOH1_GAIN6"            ] = ;
00732       //       nameDBtoFileConversion_["AOH2_BIAS1"            ] = k_AOH2_Bias1 ;
00733       //       nameDBtoFileConversion_["AOH2_BIAS2"               ] = k_AOH2_Bias2 ;
00734       //       nameDBtoFileConversion_["AOH2_BIAS3"               ] = k_AOH2_Bias3 ;
00735       //       nameDBtoFileConversion_["AOH2_BIAS4"               ] = k_AOH2_Bias4 ;
00736       //       nameDBtoFileConversion_["AOH2_BIAS5"               ] = k_AOH2_Bias5 ;
00737       //       nameDBtoFileConversion_["AOH2_BIAS6"               ] = k_AOH2_Bias6 ;
00738       //   nameDBtoFileConversion_["AOH2_GAIN1"            ] = ;
00739       //   nameDBtoFileConversion_["AOH2_GAIN2"            ] = ;
00740       //   nameDBtoFileConversion_["AOH2_GAIN3"            ] = ;
00741       //   nameDBtoFileConversion_["AOH2_GAIN4"            ] = ;
00742       //   nameDBtoFileConversion_["AOH2_GAIN5"            ] = ;
00743       //   nameDBtoFileConversion_["AOH2_GAIN6"            ] = ;
00744       //       nameDBtoFileConversion_["AOH3_BIAS1"            ] = k_AOH3_Bias1 ;
00745       //       nameDBtoFileConversion_["AOH3_BIAS2"               ] = k_AOH3_Bias2 ;
00746       //       nameDBtoFileConversion_["AOH3_BIAS3"               ] = k_AOH3_Bias3 ;
00747       //       nameDBtoFileConversion_["AOH3_BIAS4"               ] = k_AOH3_Bias4 ;
00748       //       nameDBtoFileConversion_["AOH3_BIAS5"               ] = k_AOH3_Bias5 ;
00749       //       nameDBtoFileConversion_["AOH3_BIAS6"               ] = k_AOH3_Bias6 ;
00750       //   nameDBtoFileConversion_["AOH3_GAIN1"            ] = ;
00751       //   nameDBtoFileConversion_["AOH3_GAIN2"            ] = ;
00752       //   nameDBtoFileConversion_["AOH3_GAIN3"            ] = ;
00753       //   nameDBtoFileConversion_["AOH3_GAIN4"            ] = ;
00754       //   nameDBtoFileConversion_["AOH3_GAIN5"            ] = ;
00755       //   nameDBtoFileConversion_["AOH3_GAIN6"            ] = ;
00756       //       nameDBtoFileConversion_["AOH4_BIAS1"            ] = k_AOH4_Bias1 ;
00757       //       nameDBtoFileConversion_["AOH4_BIAS2"               ] = k_AOH4_Bias2 ;
00758       //       nameDBtoFileConversion_["AOH4_BIAS3"               ] = k_AOH4_Bias3 ;
00759       //       nameDBtoFileConversion_["AOH4_BIAS4"               ] = k_AOH4_Bias4 ;
00760       //       nameDBtoFileConversion_["AOH4_BIAS5"               ] = k_AOH4_Bias5 ;
00761       //       nameDBtoFileConversion_["AOH4_BIAS6"               ] = k_AOH4_Bias6 ;
00762       //   nameDBtoFileConversion_["AOH4_GAIN1"            ] = ;
00763       //   nameDBtoFileConversion_["AOH4_GAIN2"            ] = ;
00764       //   nameDBtoFileConversion_["AOH4_GAIN3"            ] = ;
00765       //   nameDBtoFileConversion_["AOH4_GAIN4"            ] = ;
00766       //   nameDBtoFileConversion_["AOH4_GAIN5"            ] = ;
00767       //   nameDBtoFileConversion_["AOH4_GAIN6"            ] = ;
00768       //   nameDBtoFileConversion_["AOH5_BIAS1"            ] = ;
00769       //   nameDBtoFileConversion_["AOH5_BIAS2"            ] = ;
00770       //   nameDBtoFileConversion_["AOH5_BIAS3"            ] = ;
00771       //   nameDBtoFileConversion_["AOH5_BIAS4"            ] = ;
00772       //   nameDBtoFileConversion_["AOH5_BIAS5"            ] = ;
00773       //   nameDBtoFileConversion_["AOH5_BIAS6"            ] = ;
00774       //   nameDBtoFileConversion_["AOH5_GAIN1"            ] = ;
00775       //   nameDBtoFileConversion_["AOH5_GAIN2"            ] = ;
00776       //   nameDBtoFileConversion_["AOH5_GAIN3"            ] = ;
00777       //   nameDBtoFileConversion_["AOH5_GAIN4"            ] = ;
00778       //   nameDBtoFileConversion_["AOH5_GAIN5"            ] = ;
00779       //   nameDBtoFileConversion_["AOH5_GAIN6"            ] = ;
00780       //   nameDBtoFileConversion_["AOH6_BIAS1"            ] = ;
00781       //   nameDBtoFileConversion_["AOH6_BIAS2"            ] = ;
00782       //   nameDBtoFileConversion_["AOH6_BIAS3"            ] = ;
00783       //   nameDBtoFileConversion_["AOH6_BIAS4"            ] = ;
00784       //   nameDBtoFileConversion_["AOH6_BIAS5"            ] = ;
00785       //   nameDBtoFileConversion_["AOH6_BIAS6"            ] = ;
00786       //   nameDBtoFileConversion_["AOH6_GAIN1"            ] = ;
00787       //   nameDBtoFileConversion_["AOH6_GAIN2"            ] = ;
00788       //   nameDBtoFileConversion_["AOH6_GAIN3"            ] = ;
00789       //   nameDBtoFileConversion_["AOH6_GAIN4"            ] = ;
00790       //   nameDBtoFileConversion_["AOH6_GAIN5"            ] = ;
00791       //   nameDBtoFileConversion_["AOH6_GAIN6"            ] = ;
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       //   nameDBtoFileConversion_["DEL3_GCR"              ] = ;
00799       //   nameDBtoFileConversion_["DEL3_SCL"              ] = ;
00800       //   nameDBtoFileConversion_["DEL3_TRG"              ] = ;
00801       //   nameDBtoFileConversion_["DEL3_SDA"              ] = ;
00802       //   nameDBtoFileConversion_["DEL3_RCL"              ] = ;
00803       //   nameDBtoFileConversion_["DEL3_RDA"              ] = ;
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       //   nameDBtoFileConversion_["DOH3_BIAS0"            ] =  ;
00808       //   nameDBtoFileConversion_["DOH3_BIAS1"            ] =  ;
00809       //   nameDBtoFileConversion_["DOH3_SEU_GAIN"         ] =  ;
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       //   nameDBtoFileConversion_["PLL3_CTR1"             ] = ;
00815       //   nameDBtoFileConversion_["PLL3_CTR2"             ] = ;
00816       //   nameDBtoFileConversion_["PLL3_CTR3"             ] = ;
00817       //   nameDBtoFileConversion_["PLL3_CTR4_5"           ] = ;
00818     }
00819   else if(type_ == "bpix")
00820     {
00821       //   nameDBtoFileConversion_["CONFIG_KEY_ID"         ] = ;
00822       //   nameDBtoFileConversion_["CONFIG_KEY"            ] = ;
00823       //   nameDBtoFileConversion_["VERSION"               ] = ;
00824       //   nameDBtoFileConversion_["CONDITION_DATA_SET_ID" ] = ;
00825       //   nameDBtoFileConversion_["KIND_OF_CONDITION_ID"  ] = ;
00826       //   nameDBtoFileConversion_["KIND_OF_COND"          ] = ;
00827       //   nameDBtoFileConversion_["SERIAL_NUMBER"         ] = ;
00828       //   nameDBtoFileConversion_["PORT_CARD_ID"          ] = ;
00829       //   nameDBtoFileConversion_["PORT_CARD"             ] = ;
00830       //   nameDBtoFileConversion_["TRKFEC_NAME"           ] = ;
00831       //   nameDBtoFileConversion_["RINGADDRESS"           ] = ;
00832       //   nameDBtoFileConversion_["CHANNELADDRESS"        ] = ;
00833       //   nameDBtoFileConversion_["CCUADDRESS"            ] = ;
00834       //   nameDBtoFileConversion_["I2C_CNTRL"             ] = ;
00835       //   nameDBtoFileConversion_["I2CSPEED"              ] = ;
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       //   nameDBtoFileConversion_["AOH1_GAIN1"            ] = ;
00843       //   nameDBtoFileConversion_["AOH1_GAIN2"            ] = ;
00844       //   nameDBtoFileConversion_["AOH1_GAIN3"            ] = ;
00845       //   nameDBtoFileConversion_["AOH1_GAIN4"            ] = ;
00846       //   nameDBtoFileConversion_["AOH1_GAIN5"            ] = ;
00847       //   nameDBtoFileConversion_["AOH1_GAIN6"            ] = ;
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       //   nameDBtoFileConversion_["AOH2_GAIN1"            ] = ;
00855       //   nameDBtoFileConversion_["AOH2_GAIN2"            ] = ;
00856       //   nameDBtoFileConversion_["AOH2_GAIN3"            ] = ;
00857       //   nameDBtoFileConversion_["AOH2_GAIN4"            ] = ;
00858       //   nameDBtoFileConversion_["AOH2_GAIN5"            ] = ;
00859       //   nameDBtoFileConversion_["AOH2_GAIN6"            ] = ;
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       //   nameDBtoFileConversion_["AOH3_GAIN1"            ] = ;
00867       //   nameDBtoFileConversion_["AOH3_GAIN2"            ] = ;
00868       //   nameDBtoFileConversion_["AOH3_GAIN3"            ] = ;
00869       //   nameDBtoFileConversion_["AOH3_GAIN4"            ] = ;
00870       //   nameDBtoFileConversion_["AOH3_GAIN5"            ] = ;
00871       //   nameDBtoFileConversion_["AOH3_GAIN6"            ] = ;
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       //   nameDBtoFileConversion_["AOH4_GAIN1"            ] = ;
00879       //   nameDBtoFileConversion_["AOH4_GAIN2"            ] = ;
00880       //   nameDBtoFileConversion_["AOH4_GAIN3"            ] = ;
00881       //   nameDBtoFileConversion_["AOH4_GAIN4"            ] = ;
00882       //   nameDBtoFileConversion_["AOH4_GAIN5"            ] = ;
00883       //   nameDBtoFileConversion_["AOH4_GAIN6"            ] = ;
00884       //   nameDBtoFileConversion_["AOH5_BIAS1"            ] = ;
00885       //   nameDBtoFileConversion_["AOH5_BIAS2"            ] = ;
00886       //   nameDBtoFileConversion_["AOH5_BIAS3"            ] = ;
00887       //   nameDBtoFileConversion_["AOH5_BIAS4"            ] = ;
00888       //   nameDBtoFileConversion_["AOH5_BIAS5"            ] = ;
00889       //   nameDBtoFileConversion_["AOH5_BIAS6"            ] = ;
00890       //   nameDBtoFileConversion_["AOH5_GAIN1"            ] = ;
00891       //   nameDBtoFileConversion_["AOH5_GAIN2"            ] = ;
00892       //   nameDBtoFileConversion_["AOH5_GAIN3"            ] = ;
00893       //   nameDBtoFileConversion_["AOH5_GAIN4"            ] = ;
00894       //   nameDBtoFileConversion_["AOH5_GAIN5"            ] = ;
00895       //   nameDBtoFileConversion_["AOH5_GAIN6"            ] = ;
00896       //   nameDBtoFileConversion_["AOH6_BIAS1"            ] = ;
00897       //   nameDBtoFileConversion_["AOH6_BIAS2"            ] = ;
00898       //   nameDBtoFileConversion_["AOH6_BIAS3"            ] = ;
00899       //   nameDBtoFileConversion_["AOH6_BIAS4"            ] = ;
00900       //   nameDBtoFileConversion_["AOH6_BIAS5"            ] = ;
00901       //   nameDBtoFileConversion_["AOH6_BIAS6"            ] = ;
00902       //   nameDBtoFileConversion_["AOH6_GAIN1"            ] = ;
00903       //   nameDBtoFileConversion_["AOH6_GAIN2"            ] = ;
00904       //   nameDBtoFileConversion_["AOH6_GAIN3"            ] = ;
00905       //   nameDBtoFileConversion_["AOH6_GAIN4"            ] = ;
00906       //   nameDBtoFileConversion_["AOH6_GAIN5"            ] = ;
00907       //   nameDBtoFileConversion_["AOH6_GAIN6"            ] = ;
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       //   nameDBtoFileConversion_["DEL3_GCR"              ] = ;
00915       //   nameDBtoFileConversion_["DEL3_SCL"              ] = ;
00916       //   nameDBtoFileConversion_["DEL3_TRG"              ] = ;
00917       //   nameDBtoFileConversion_["DEL3_SDA"              ] = ;
00918       //   nameDBtoFileConversion_["DEL3_RCL"              ] = ;
00919       //   nameDBtoFileConversion_["DEL3_RDA"              ] = ;
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       //   nameDBtoFileConversion_["DOH3_BIAS0"            ] =  ;
00924       //   nameDBtoFileConversion_["DOH3_BIAS1"            ] =  ;
00925       //   nameDBtoFileConversion_["DOH3_SEU_GAIN"         ] =  ;
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       //   nameDBtoFileConversion_["PLL3_CTR1"             ] = ;
00931       //   nameDBtoFileConversion_["PLL3_CTR2"             ] = ;
00932       //   nameDBtoFileConversion_["PLL3_CTR3"             ] = ;
00933       //   nameDBtoFileConversion_["PLL3_CTR4_5"           ] = ;
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     // Special handling for AOH gains
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; // output bits 0 & 1
00995                 out << "AOH"<<whichAOHString<<"_Gain"<<zeroOrThree+2<<": 0x"<< (((device_[i].second) & 0x0c)>>2) << std::endl; // output bits 2 & 3
00996                 out << "AOH"<<whichAOHString<<"_Gain"<<zeroOrThree+3<<": 0x"<< (((device_[i].second) & 0x30)>>4) << std::endl; // output bits 4 & 5
00997                 continue;
00998     }
00999     // End of special handling
01000     
01001     // Check to see if there's a name corresponding to this address.
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     // Special handling for PLL addresses.
01009     if ( settingName == k_PLL_CTR2 )
01010     {
01011         if ( found_PLL_CTR2 && last_PLL_CTR2_value == device_.at(i).second ) continue; // don't save duplicate CTR2 settings
01012         found_PLL_CTR2 = true;
01013         last_PLL_CTR2_value = device_.at(i).second;
01014     }
01015     if ( found_PLL_CTR2 && settingName == k_PLL_CTR4or5 ) // change name to PLL_CTR4 or PLL_CTR5
01016     {
01017         if ( (last_PLL_CTR2_value & 0x20) == 0x0 ) settingName = k_PLL_CTR4;
01018         else                                       settingName = k_PLL_CTR5;
01019     }
01020     // end of special handling
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--) // Change only the last occurance of address, if there are more than one.
01071     {
01072       if( device_.at(i).first==address )
01073         {
01074           device_.at(i).second=value;
01075           return;
01076         }
01077     }
01078   
01079   // This address wasn't found in the list, so add it and its value.
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   //std::cout << "[PixelPortCardConfig::getdeviceAddressForSetting()]\t    settingName: " << settingName<< std::endl ;
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--) // Get the last occurance of address, if there are more than one.
01108     {
01109       if( device_.at(i).first==address )
01110         {
01111           return device_.at(i).second;
01112         }
01113     }
01114   assert(0); // didn't find this device
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); // return bits 0 & 1
01265         if ( AOHNumber%3 == 2 ) return (((threeGainsValue) & 0x0c)>>2); // return bits 2 & 3
01266         if ( AOHNumber%3 == 0 ) return (((threeGainsValue) & 0x30)>>4); // return bits 4 & 5
01267         
01268         assert(0);
01269 }

Generated on Tue Jun 9 17:25:25 2009 for CMSSW by  doxygen 1.5.4