7 #include "dictionaries.h" 
   18     LOG(logINFO) << 
"The DUT currently contains the following objects:";
 
   20     LOG(logINFO) << std::setw(2) << tbm.size() << 
" TBM Cores (" << 
getNEnabledTbms() 
 
   23     for(std::vector<tbmConfig>::iterator tbmIt = tbm.begin(); tbmIt != tbm.end(); tbmIt++) {
 
   24       LOG(logINFO) << 
"\tTBM Core "  
   25            << ((tbmIt-tbm.begin())%2 == 0 ? 
"alpha" : 
"beta " )
 
   26            << 
" (" << 
static_cast<int>(tbmIt - tbm.begin()) << 
"): "  
   27            << (*tbmIt).dacs.size() << 
" registers set";
 
   32     LOG(logINFO) << std::setw(2) << roc.size() << 
" ROCs (" << 
getNEnabledRocs() 
 
   33          << 
" ON) with " << roc.at(0).pixels.size() << 
" pixelConfigs";
 
   35     for(std::vector<rocConfig>::iterator rocIt = roc.begin(); rocIt != roc.end(); rocIt++) {
 
   36       LOG(logINFO) << 
"\tROC " << 
static_cast<int>(rocIt-roc.begin()) << 
": "  
   37            << (*rocIt).dacs.size() << 
" DACs set, Pixels: "  
   45   if (!_initialized || rocid >= roc.size()) 
return 0;
 
   46   return std::count_if(roc.at(rocid).pixels.begin(),roc.at(rocid).pixels.end(),
configEnableSet(
true));
 
   50   if (!_initialized) 
return 0;
 
   53   for (std::vector<rocConfig>::iterator rocit = roc.begin() ; rocit != roc.end(); ++rocit){
 
   54     nenabled += std::count_if(rocit->pixels.begin(),rocit->pixels.end(),
configEnableSet(
true));
 
   60   if (!_initialized || rocid >= roc.size()) 
return 0;
 
   61   return std::count_if(roc.at(rocid).pixels.begin(),roc.at(rocid).pixels.end(),
configMaskSet(
true));
 
   65   if (!_initialized) 
return 0;
 
   68   for (std::vector<rocConfig>::iterator rocit = roc.begin() ; rocit != roc.end(); ++rocit){
 
   69     nmasked += std::count_if(rocit->pixels.begin(),rocit->pixels.end(),
configMaskSet(
true));
 
   78   for (std::vector<rocConfig>::iterator it = roc.begin(); it != roc.end(); ++it){
 
   79     if (it->enable()) count++;
 
   89   if(roc.empty()) 
return "";
 
   96   return _dict->getName(roc.front().type);
 
  100   if(tbm.empty()) 
return "";
 
  106   return _dict->getName(tbm.front().type);
 
  113   for (std::vector<tbmConfig>::iterator it = tbm.begin(); it != tbm.end(); ++it){
 
  114     if (it->enable) count++;
 
  126   std::vector< pixelConfig > result;
 
  129   if (!
status() || !(rocid < roc.size())) 
return result;
 
  132   for (std::vector<pixelConfig>::iterator it = roc.at(rocid).pixels.begin(); it != roc.at(rocid).pixels.end(); ++it){
 
  133     if (it->enable()) result.push_back(*it);
 
  140   std::vector< pixelConfig > result;
 
  143   if (!
status()) 
return result;
 
  146   for (std::vector<rocConfig>::iterator rocit = roc.begin() ; rocit != roc.end(); ++rocit){
 
  148     for (std::vector<pixelConfig>::iterator it = rocit->pixels.begin(); it != rocit->pixels.end(); ++it){
 
  149       if (it->enable()) result.push_back(*it);
 
  157   std::vector< pixelConfig > result;
 
  160   if (!
status() || !(rocid < roc.size())) 
return result;
 
  163   for (std::vector<pixelConfig>::iterator it = roc.at(rocid).pixels.begin(); it != roc.at(rocid).pixels.end(); ++it){
 
  164     if (it->mask()) result.push_back(*it);
 
  171   std::vector< pixelConfig > result;
 
  174   if (!
status()) 
return result;
 
  177   for (std::vector<rocConfig>::iterator rocit = roc.begin() ; rocit != roc.end(); ++rocit){
 
  179     for (std::vector<pixelConfig>::iterator it = rocit->pixels.begin(); it != rocit->pixels.end(); ++it){
 
  180       if (it->mask()) result.push_back(*it);
 
  186 std::vector< bool > dut::getEnabledColumns(
size_t roci2c) {
 
  188   std::vector< bool > result(52,
false);
 
  191   if (!
status()) 
return result;
 
  193   for(std::vector<rocConfig>::iterator rocit = roc.begin(); rocit != roc.end(); ++rocit){
 
  194     if(rocit->i2c_address == roci2c) {
 
  196       for(std::vector<pixelConfig>::iterator it = rocit->pixels.begin(); it != rocit->pixels.end(); ++it){
 
  197     if (it->enable()) result.at((*it).column()) = 
true;
 
  205   std::vector< rocConfig > result;
 
  206   if (!_initialized) 
return result;
 
  208   for (std::vector<rocConfig>::iterator it = roc.begin(); it != roc.end(); ++it){
 
  209     if (it->enable()) result.push_back(*it);
 
  216   std::vector< uint8_t > result = std::vector<uint8_t>();
 
  218   if (!_initialized) 
return result;
 
  221   for (std::vector<rocConfig>::iterator it = roc.begin(); it != roc.end(); ++it){
 
  222     if (it->enable()) result.push_back(static_cast<uint8_t>(it - roc.begin()));
 
  229   std::vector< uint8_t > result = std::vector<uint8_t>();
 
  231   if (!_initialized) 
return result;
 
  234   for (std::vector<rocConfig>::iterator it = roc.begin(); it != roc.end(); ++it){
 
  235     if (it->enable()) result.push_back(it->i2c_address);
 
  242   std::vector< uint8_t > result = std::vector<uint8_t>();
 
  244   if (!_initialized) 
return result;
 
  247   for (std::vector<rocConfig>::iterator it = roc.begin(); it != roc.end(); ++it){
 
  248     result.push_back(it->i2c_address);
 
  254   std::vector< tbmConfig > result;
 
  255   if (!_initialized) 
return result;
 
  257   for (std::vector<tbmConfig>::iterator it = tbm.begin(); it != tbm.end(); ++it){
 
  258     if (it->enable) result.push_back(*it);
 
  264   std::vector<pixelConfig>::iterator it = std::find_if(roc.at(0).pixels.begin(),
 
  265                                roc.at(0).pixels.end(),
 
  267   if(it != roc.at(0).pixels.end()) { 
return it->enable(); }
 
  272  if (!
status()) 
return false;
 
  274  std::vector<pixelConfig>::iterator it = std::find_if(roc.at(0).pixels.begin(),
 
  275                               roc.at(0).pixels.end(),
 
  277  if(it != roc.at(0).pixels.end())
 
  285  if (!
status()) 
return false;
 
  287  if (roc.size()<16) 
return false;
 
  289  std::vector<rocConfig>::iterator it = std::find_if(roc.begin(),
 
  292  if(it != roc.end()) 
return false;
 
  301   if (!
status()) 
return result;
 
  303   std::vector<pixelConfig>::iterator it = std::find_if(roc.at(rocid).pixels.begin(),
 
  304                                roc.at(rocid).pixels.end(),
 
  307   if(it != roc.at(rocid).pixels.end()){
 
  316   if(
status() && rocId < roc.size()) {  
 
  318     std::transform(dacName.begin(), dacName.end(), dacName.begin(), ::tolower);
 
  324     uint8_t _register = _dict->getRegister(dacName, ROC_REG);
 
  325     return roc[rocId].dacs[_register];
 
  331 std::vector< std::pair<std::string,uint8_t> > 
dut::getDACs(
size_t rocId) {
 
  333   if(
status() && rocId < roc.size()) {
 
  334     std::vector< std::pair<std::string,uint8_t> > vec;
 
  339     for(std::map< uint8_t,uint8_t >::iterator it = roc.at(rocId).dacs.begin(); 
 
  340     it != roc.at(rocId).dacs.end(); ++it) {
 
  341       vec.push_back(std::make_pair(_dict->getName(it->first,ROC_REG),it->second));
 
  345   else return std::vector< std::pair<std::string,uint8_t> >();
 
  350   if(
status() && tbmId < tbm.size()) {
 
  351     std::vector< std::pair<std::string,uint8_t> > vec;
 
  356     for(std::map< uint8_t,uint8_t >::iterator it = tbm.at(tbmId).dacs.begin(); 
 
  357     it != tbm.at(tbmId).dacs.end(); ++it) {
 
  359       vec.push_back(std::make_pair(_dict->getName((it->first&0x0F),TBM_REG),it->second));
 
  363   else return std::vector< std::pair<std::string,uint8_t> >();
 
  368   if(
status() && rocId < roc.size()) {
 
  373     LOG(logINFO) << 
"Printing current DAC settings for ROC " << rocId << 
":";
 
  374     for(std::map< uint8_t,uint8_t >::iterator it = roc.at(rocId).dacs.begin(); 
 
  375     it != roc.at(rocId).dacs.end(); ++it) {
 
  376       LOG(logINFO) << 
"DAC " << _dict->getName(it->first,ROC_REG) << 
" (" << 
static_cast<int>(it->first) << 
") = " << static_cast<int>(it->second);
 
  384   if(rocId < roc.size())
 
  386     roc[rocId].setEnable(enable);
 
  392   if(tbmId < tbm.size())
 
  394     tbm[tbmId].enable = enable;
 
  401     for (std::vector<rocConfig>::iterator rocit = roc.begin() ; rocit != roc.end(); ++rocit){
 
  403       std::vector<pixelConfig>::iterator it = std::find_if(rocit->pixels.begin(),
 
  407       if(it != rocit->pixels.end()) {
 
  410     LOG(logWARNING) << 
"Pixel at column " << 
static_cast<int>(column) << 
" and row " << static_cast<int>(row) << 
" not found for ROC " << 
static_cast<int>(rocit - roc.begin()) << 
"!" ;
 
  418   if(
status() && rocid < roc.size()) {
 
  420     std::vector<pixelConfig>::iterator it = std::find_if(roc.at(rocid).pixels.begin(),
 
  421                              roc.at(rocid).pixels.end(),
 
  424     if(it != roc.at(rocid).pixels.end()){
 
  427       LOG(logWARNING) << 
"Pixel at column " << 
static_cast<int>(column) << 
" and row " << static_cast<int>(row) << 
" not found for ROC " << 
static_cast<int>(rocid)<< 
"!" ;
 
  436     for (std::vector<rocConfig>::iterator rocit = roc.begin() ; rocit != roc.end(); ++rocit){
 
  438       std::vector<pixelConfig>::iterator it = std::find_if(rocit->pixels.begin(),
 
  442       if(it != rocit->pixels.end()) {
 
  443     it->setEnable(enable);
 
  445     LOG(logWARNING) << 
"Pixel at column " << 
static_cast<int>(column) << 
" and row " << static_cast<int>(row) << 
" not found for ROC " << 
static_cast<int>(rocit - roc.begin())<< 
"!" ;
 
  453   if(
status() && rocid < roc.size()) {
 
  455     std::vector<pixelConfig>::iterator it = std::find_if(roc.at(rocid).pixels.begin(),
 
  456                              roc.at(rocid).pixels.end(),
 
  459     if(it != roc.at(rocid).pixels.end()){
 
  460       it->setEnable(enable);
 
  462       LOG(logWARNING) << 
"Pixel at column " << 
static_cast<int>(column) << 
" and row " << static_cast<int>(row) << 
" not found for ROC " << 
static_cast<int>(rocid)<< 
"!" ;
 
  470     LOG(logDEBUGAPI) << 
"Set mask bit to " << 
static_cast<int>(mask) << 
" for all pixels on all ROCs.";
 
  472     for (std::vector<rocConfig>::iterator rocit = roc.begin() ; rocit != roc.end(); ++rocit){
 
  474       for (std::vector<pixelConfig>::iterator pixelit = rocit->pixels.begin() ; pixelit != rocit->pixels.end(); ++pixelit){
 
  475     pixelit->setMask(mask);
 
  483   if(
status() && rocid < roc.size()) {
 
  484     LOG(logDEBUGAPI) << 
"Set mask bit to " << 
static_cast<int>(mask) << 
" for all pixels on ROC " << static_cast<int>(rocid);
 
  486     for (std::vector<pixelConfig>::iterator pixelit = roc.at(rocid).pixels.begin() ; pixelit != roc.at(rocid).pixels.end(); ++pixelit){
 
  487       pixelit->setMask(mask);
 
  494   if(
status() && rocid < roc.size()) {
 
  495     LOG(logDEBUGAPI) << 
"Set enable bit to " << 
static_cast<int>(enable) << 
" for all pixels on ROC " << static_cast<int>(rocid);
 
  497     for (std::vector<pixelConfig>::iterator pixelit = roc.at(rocid).pixels.begin() ; pixelit != roc.at(rocid).pixels.end(); ++pixelit){
 
  498       pixelit->setEnable(enable);
 
  506     LOG(logDEBUGAPI) << 
"Set enable bit to " << 
static_cast<int>(enable) << 
" for all pixels on all ROCs";
 
  508     for (std::vector<rocConfig>::iterator rocit = roc.begin() ; rocit != roc.end(); ++rocit){
 
  510       for (std::vector<pixelConfig>::iterator pixelit = rocit->pixels.begin() ; pixelit != rocit->pixels.end(); ++pixelit){
 
  511     pixelit->setEnable(enable);
 
  519   if(
status() && rocid < roc.size()) {
 
  522     std::vector<pixelConfig>::iterator px = std::find_if(roc.at(rocid).pixels.begin(),
 
  523                              roc.at(rocid).pixels.end(),
 
  526     if(px == roc.at(0).pixels.end()) 
return false;
 
  528     px->setTrim(trimming.trim());
 
  531   else { 
return false; }
 
  536   if(
status() && rocid < roc.size()) {
 
  539     std::vector<pixelConfig>::iterator px = std::find_if(roc.at(rocid).pixels.begin(),
 
  540                              roc.at(rocid).pixels.end(),
 
  543     if(px == roc.at(0).pixels.end()) 
return false;
 
  548   else { 
return false; }
 
  553   if(
status() && rocid < roc.size()) {
 
  555     for (std::vector<pixelConfig>::iterator it = trimming.begin(); it != trimming.end(); ++it){
 
  558       std::vector<pixelConfig>::iterator px = std::find_if(roc.at(rocid).pixels.begin(),
 
  559                                roc.at(rocid).pixels.end(),
 
  562       if(px == roc.at(0).pixels.end()) 
return false;
 
  564       px->setTrim(it->trim());
 
  568   else { 
return false; }
 
  573   if(!_initialized || !_programmed) {
 
  574     LOG(logERROR) << 
"DUT structure not initialized/programmed yet!";
 
  577   return (_initialized && _programmed);
 
void setTBMEnable(size_t tbmId, bool enable)
std::vector< pixelConfig > getEnabledPixels()
size_t getNMaskedPixels()
void printDACs(size_t rocId)
std::vector< uint8_t > getEnabledRocI2Caddr()
void testPixel(uint8_t column, uint8_t row, bool enable)
std::vector< rocConfig > getEnabledRocs()
void maskAllPixels(bool mask, uint8_t rocid)
bool updateTrimBits(std::vector< pixelConfig > trimming, uint8_t rocid)
void setROCEnable(size_t rocId, bool enable)
size_t getNEnabledPixels()
pixelConfig getPixelConfig(size_t rocid, uint8_t column, uint8_t row)
std::vector< std::pair< std::string, uint8_t > > getDACs(size_t rocId)
std::vector< uint8_t > getEnabledRocIDs()
void testAllPixels(bool enable)
bool getPixelEnabled(uint8_t column, uint8_t row)
std::vector< uint8_t > getRocI2Caddr()
void maskPixel(uint8_t column, uint8_t row, bool mask)
uint8_t getDAC(size_t rocId, std::string dacName)
std::vector< pixelConfig > getMaskedPixels()
std::vector< tbmConfig > getEnabledTbms()
std::vector< std::pair< std::string, uint8_t > > getTbmDACs(size_t tbmId)