CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_5_3_13_patch3/src/L1Trigger/GlobalTriggerAnalyzer/src/L1GtPatternLine.cc

Go to the documentation of this file.
00001 
00017 // this class header
00018 #include "L1Trigger/GlobalTriggerAnalyzer/interface/L1GtPatternLine.h"
00019 
00020 // system include files
00021 #include <sstream>
00022 #include <iostream>
00023 
00024 // user include files
00025 #include "FWCore/Utilities/interface/Exception.h"
00026 
00027 void L1GtPatternLine::push(const std::string& prefix, uint32_t value) { 
00028     std::string colName = nextName(prefix);
00029     // add three values for each column - the full 32bit value,
00030     // one for the lower 16 bits and one for the higher 16 bits.
00031     m_columns[colName] = value;
00032     m_columns[colName + "_h"] = value >> 16;
00033     m_columns[colName + "_l"] = value & 0xFFFF;
00034 }
00035 
00036 void L1GtPatternLine::set(const std::string& name, uint32_t value) { 
00037   ColumnMap::iterator it = m_columns.find(name);
00038   if(it == m_columns.end()) {
00039     throw cms::Exception(__func__) << "Can't set field " 
00040                                    << name << " to " << std::hex << value 
00041                                    << ": not found";
00042   }
00043 
00044   it->second = value;
00045   m_columns[name + "_h"] = value >> 16;
00046   m_columns[name + "_l"] = value & 0xFFFF;
00047 }
00048 
00049 void L1GtPatternLine::print(std::ostream& out) const { 
00050     out << "BEGIN Columns: " << std::endl ; 
00051     for(L1GtPatternLine::ColumnMap::const_iterator it = m_columns.begin(); 
00052         it != m_columns.end() ; ++it) { 
00053       out << it->first << ": " << std::hex << it->second << std::endl;
00054     }
00055     out << "END Columns." << std::endl ; 
00056 }
00057 
00058 bool L1GtPatternLine::has(const std::string& colname) const { 
00059     return m_columns.find(colname) != m_columns.end();
00060 }
00061 
00062 std::string L1GtPatternLine::nextName(const std::string& prefix) {    
00063     int i = 1 ;
00064     std::string result;
00065     do
00066     {
00067       result = name(prefix, i++);
00068     } while(has(result));
00069 
00070     return result;
00071 }
00072 
00073 std::string L1GtPatternLine::name(const std::string& prefix, unsigned int i) const { 
00074     std::ostringstream ss;
00075     ss << prefix << i;
00076     return ss.str();
00077 }
00078 
00079 uint32_t L1GtPatternLine::get(const std::string& name) const {
00080     ColumnMap::const_iterator it = m_columns.find(name);
00081     if(it != m_columns.end()) { 
00082       return it->second;
00083     }
00084     return 0;
00085 }