CMS 3D CMS Logo

Classes | Public Member Functions | Private Types | Private Member Functions | Private Attributes

FWItemValueGetter Class Reference

#include <Fireworks/Core/interface/FWItemValueGetter.h>

List of all members.

Classes

struct  Entry

Public Member Functions

 FWItemValueGetter (const Reflex::Type &, const std::string &iPurpose)
std::vector< std::string > getTitles () const
const std::string & getToolTip (const void *iObject) const
int numValues () const
UInt_t precision (int idx) const
double valueFor (const void *, int idx) const

Private Types

typedef std::vector< EntryEntries_t

Private Member Functions

bool addEntry (std::string iExpression, int iPrec=2, std::string iTitle="", std::string iUnit="")

Private Attributes

Entries_t::const_iterator Entries_i
Entries_t m_entries
int m_titleWidth
Reflex::Type m_type

Detailed Description

Description: Retrieves a particular value from an item

Usage: <usage>

Definition at line 35 of file FWItemValueGetter.h.


Member Typedef Documentation

typedef std::vector<Entry > FWItemValueGetter::Entries_t [private]

Definition at line 61 of file FWItemValueGetter.h.


Constructor & Destructor Documentation

FWItemValueGetter::FWItemValueGetter ( const Reflex::Type &  iType,
const std::string &  iPurpose 
)

Definition at line 37 of file FWItemValueGetter.cc.

References addEntry(), and x.

                                                                                      :
   m_type(iType),
   m_titleWidth(0)
{
   if ( iType.Name() == "CaloTower" )
   {
      if ( iPurpose == "ECal" )
         addEntry("emEt", 1, "et", "GeV");
      else if ( iPurpose == "HCal" )
         addEntry("hadEt", 1, "et", "GeV");
      else if (iPurpose == "HCal Outer")
         addEntry("outerEt", 1, "et", "GeV");
   }
   else if (strstr(iPurpose.c_str(), "Beam Spot") )
   {
      addEntry("x0", 2, "x", "cm");
      addEntry("y0", 2, "y", "cm");
      addEntry("z0", 2, "z", "cm");
   }
   else if (strstr(iPurpose.c_str(), "Vertices") )
   {
      addEntry("x", 2, "x", "cm");
      addEntry("y", 2, "y", "cm");
      addEntry("z", 2, "z", "cm");
   }
   else if (strstr(iPurpose.c_str(), "Conversion") )
   {
      addEntry("pairMomentum().rho()", 1, "pt", "GeV" );
      addEntry("pairMomentum().eta()", 2, "eta");
      addEntry("pairMomentum().phi()", 2, "phi");
   }
   else if (strstr(iPurpose.c_str(), "Candidate") || strstr(iPurpose.c_str(), "GenParticle"))
   {
      addEntry("pdgId()", 0, "pdg");
      bool x = addEntry("pt", 1);
      if (!x) x = addEntry("et", 1);
      if (!x) addEntry("energy", 1);
   }
   else if (iPurpose == "Jets" )
   {
      addEntry("et", 1);
   }
   else {
      // by the default  add pt, et, or energy
      bool x = addEntry("pt", 1);
      if (!x) x = addEntry("et", 1);
      if (!x) addEntry("energy", 1);
   }

   if (addEntry("eta", 2))
      addEntry("phi",  2);
}

Member Function Documentation

bool FWItemValueGetter::addEntry ( std::string  iExpression,
int  iPrec = 2,
std::string  iTitle = "",
std::string  iUnit = "" 
) [private]

Definition at line 92 of file FWItemValueGetter.cc.

References alignCSCRings::e, m_entries, m_titleWidth, m_type, siStripFEDMonitor_P5_cff::Max, fireworks::expression::oldToNewFormat(), triggerExpression::parse(), and groupFilesInBlocks::temp.

Referenced by FWItemValueGetter().

{
   using namespace boost::spirit::classic;

   reco::parser::ExpressionPtr tmpPtr;
   reco::parser::Grammar grammar(tmpPtr, m_type);

   if(m_type != Reflex::Type() && iExpression.size()) 
   {
      using namespace fireworks::expression;

      //Backwards compatibility with old format
      std::string temp = oldToNewFormat(iExpression);

      //now setup the parser
      try 
      {
         if(parse(temp.c_str(), grammar.use_parser<1>() >> end_p, space_p).full) 
         {
            m_entries.push_back(Entry(tmpPtr, iExpression, iUnit, iTitle.empty() ? iExpression :iTitle , iPrec));
            m_titleWidth = TMath::Max(m_titleWidth, (int) m_entries.back().m_title.size());
            return true;
         }
      } 
      catch(const reco::parser::BaseException& e)
      {
         // std::cout <<"failed to parse "<<iExpression<<" because "<<reco::parser::baseExceptionWhat(e)<<std::endl;
      }
   }
   return false;
}
std::vector< std::string > FWItemValueGetter::getTitles ( ) const

Definition at line 142 of file FWItemValueGetter.cc.

References i, and m_entries.

Referenced by FWCollectionSummaryTableManager::getTitles().

{
   std::vector<std::string> titles;
   titles.reserve(m_entries.size());

   for (std::vector<Entry >::const_iterator i  = m_entries.begin() ; i != m_entries.end(); ++i) 
      titles.push_back((*i).m_title.empty() ? (*i).m_expression : (*i).m_title );

   return titles;
}
const std::string & FWItemValueGetter::getToolTip ( const void *  iObject) const

Definition at line 161 of file FWItemValueGetter.cc.

References alignCSCRings::e, i, m_entries, FWItemValueGetter::Entry::m_expr, FWItemValueGetter::Entry::m_precision, FWItemValueGetter::Entry::m_title, m_titleWidth, m_type, and python::connectstrParser::o.

Referenced by FWEventItem::modelInterestingValueAsString().

{
   static std::string buff(128, 0);
   static std::string fs = "\n %*s = %.*f";

   Reflex::Object o(m_type, const_cast<void *>(iObject));

   int off = 0;
   for ( std::vector<Entry >::const_iterator i = m_entries.begin() ; i != m_entries.end(); ++i) {
      const Entry& e = *i;
      off += snprintf(&buff[off], 127, fs.c_str(), m_titleWidth, e.m_title.c_str(),  e.m_precision ? (e.m_precision+1) : 0,  e.m_expr->value(o));
   }

   // std::cout << buff;
   return buff;
}
int FWItemValueGetter::numValues ( ) const

Definition at line 154 of file FWItemValueGetter.cc.

References m_entries.

Referenced by FWCollectionSummaryTableManager::cellRenderer(), and FWCollectionSummaryTableManager::numberOfColumns().

{
   return static_cast<int>(m_entries.size());
}
UInt_t FWItemValueGetter::precision ( int  idx) const

Definition at line 136 of file FWItemValueGetter.cc.

References m_entries.

Referenced by FWCollectionSummaryTableManager::cellRenderer().

{
   return m_entries[idx].m_precision;
}
double FWItemValueGetter::valueFor ( const void *  iObject,
int  idx 
) const

Definition at line 128 of file FWItemValueGetter.cc.

References m_entries, m_type, and python::connectstrParser::o.

Referenced by FWCollectionSummaryTableManager::cellRenderer(), and FWViewContextMenuHandlerGL::select().

{
   //  std::cout << " value for " << idx << "size " <<  m_entries.size() <<std::endl;
   Reflex::Object o(m_type, const_cast<void *>(iObject));
   return m_entries[idx].m_expr->value(o);
}

Member Data Documentation

Entries_t::const_iterator FWItemValueGetter::Entries_i [private]

Definition at line 62 of file FWItemValueGetter.h.

Definition at line 64 of file FWItemValueGetter.h.

Referenced by addEntry(), getTitles(), getToolTip(), numValues(), precision(), and valueFor().

Definition at line 67 of file FWItemValueGetter.h.

Referenced by addEntry(), and getToolTip().

Reflex::Type FWItemValueGetter::m_type [private]

Definition at line 65 of file FWItemValueGetter.h.

Referenced by addEntry(), getToolTip(), and valueFor().