CMS 3D CMS Logo

L1GctJetCounter.cc

Go to the documentation of this file.
00001 #include "L1Trigger/GlobalCaloTrigger/interface/L1GctJetCounter.h"
00002 
00003 #include "DataFormats/L1GlobalCaloTrigger/interface/L1GctJetCand.h"
00004 
00005 #include "L1Trigger/GlobalCaloTrigger/interface/L1GctJetCounterLut.h"
00006 #include "L1Trigger/GlobalCaloTrigger/interface/L1GctJetLeafCard.h"
00007 #include "L1Trigger/GlobalCaloTrigger/interface/L1GctJetFinderBase.h"
00008 #include "L1Trigger/GlobalCaloTrigger/interface/L1GctWheelJetFpga.h"
00009 
00010 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00011 
00012 //DEFINE STATICS
00013 const unsigned int L1GctJetCounter::MAX_JETLEAF_CARDS = L1GctWheelJetFpga::MAX_LEAF_CARDS;
00014 const unsigned int L1GctJetCounter::MAX_JETS_PER_LEAF = L1GctWheelJetFpga::MAX_JETS_PER_LEAF;
00015 const unsigned int L1GctJetCounter::MAX_JETS_TO_COUNT = L1GctJetCounter::MAX_JETLEAF_CARDS*
00016                                                         L1GctJetCounter::MAX_JETS_PER_LEAF;
00017 
00018 
00019 L1GctJetCounter::L1GctJetCounter(int id, std::vector<L1GctJetLeafCard*> leafCards,
00020                                L1GctJetCounterLut* jetCounterLut):
00021   L1GctProcessor(),
00022   m_id(id),
00023   m_jetLeafCards(leafCards),
00024   m_jets(MAX_JETS_TO_COUNT),
00025   m_setupOk(true)
00026 {
00027   //Check jetfinder setup
00028   if(m_id < 0 || m_id%100 >= 12 || m_id/100 >= 2)
00029     {
00030       m_setupOk = false;
00031       if (m_verbose) {
00032         edm::LogWarning("L1GctSetupError")
00033           << "L1GctJetCounter::L1GctJetCounter() : Jet Counter ID " << m_id << " has been incorrectly constructed!\n"
00034           << "ID number should be between the range of 0 to 11, or 100 to 111\n";
00035       } 
00036     }
00037   
00038   if(m_jetLeafCards.size() != MAX_JETLEAF_CARDS)
00039     {
00040       m_setupOk = false;
00041       if (m_verbose) {
00042         edm::LogWarning("L1GctSetupError")
00043           << "L1GctJetCounter::L1GctJetCounter() : Jet Counter ID " << m_id << " has been incorrectly constructed!\n"
00044           << "This class needs " << MAX_JETLEAF_CARDS << " leaf card pointers, yet only " << m_jetLeafCards.size()
00045           << " leaf card pointers are present.\n";
00046       }
00047     }
00048   
00049   for(unsigned int i = 0; i < m_jetLeafCards.size(); ++i)
00050     {
00051       if(m_jetLeafCards.at(i) == 0)
00052         {
00053           m_setupOk = false;
00054           if (m_verbose) {
00055             edm::LogWarning("L1GctSetupError")
00056               << "L1GctJetCounter::L1GctJetCounter() : Jet Counter ID " << m_id << " has been incorrectly constructed!\n"
00057               << "Leaf card pointer " << i << " has not been set!\n";
00058           }
00059         }
00060     }
00061   
00062   if(jetCounterLut == 0)
00063     {
00064       m_jetCounterLut = new L1GctJetCounterLut();
00065     } else {
00066       m_jetCounterLut = new L1GctJetCounterLut(*jetCounterLut);
00067     }
00068 }
00069 
00070 
00071 L1GctJetCounter::~L1GctJetCounter()
00072 {
00073   delete m_jetCounterLut;
00074 }
00075 
00076 std::ostream& operator << (std::ostream& os, const L1GctJetCounter& algo)
00077 {
00078   // Try to make this compact since it is probably
00079   // sitting inside a loop over 12 JetCounter instances
00080   os << "===L1GctJetCounter===" << std::endl;
00081   if ((algo.m_id/100) == 0) { os << "Minus wheel, "; }
00082   else { os << "Plus wheel, "; }
00083   os << "jet counter no. " << algo.m_id%100 <<  "; ID = " << algo.m_id << std::endl;
00084 //   os << "JetCounterLut* = " <<  algo.m_jetCounterLut << std::endl;
00085   os << *algo.m_jetCounterLut << std::endl;
00086 //   os << "No of Leaf cards " << algo.m_jetLeafCards.size();
00087 //   os << ". Total input jets " << algo.m_jets.size() << std::endl;
00088 //   for (unsigned i=0; i<algo.m_jetLeafCards.size(); i++) {
00089 //     // One line of printing per leaf card
00090 //     os << "JetLeafCard* " << i << " = " << algo.m_jetLeafCards.at(i);
00091 //     os << " No of jets " << algo.m_jetLeafCards.at(i)->getOutputJetsA().size() ;
00092 //     os << " + " << algo.m_jetLeafCards.at(i)->getOutputJetsB().size();
00093 //     os << " + " << algo.m_jetLeafCards.at(i)->getOutputJetsC().size() << std::endl;
00094 //   }
00095 //   for(unsigned i=0; i < algo.m_jets.size(); ++i)
00096 //     {
00097 //       os << algo.m_jets.at(i); 
00098 //     }
00099   os << "Current value of counter " << algo.m_value << std::endl;
00100 
00101   return os;
00102 }
00103 
00104 
00105 void L1GctJetCounter::resetProcessor()
00106 {
00107   m_jets.clear();
00108   m_jets.resize(MAX_JETS_TO_COUNT);
00109   m_value.reset();
00110 }
00111 
00112 // Load the m_jets vector
00113 void L1GctJetCounter::fetchInput()
00114 {
00115   if (m_verbose) {
00116     edm::LogWarning("L1GctProcessingError")
00117       << "L1GctJetCounter id= " << m_id << ", fetchInput() method called. May use excessive CPU.\n"
00118       << "Recommended to use setJets() method instead" << std::endl;
00119   }
00120   int jetnum=0;
00121   for (unsigned i=0; i<m_jetLeafCards.size(); i++) {
00122     if (jetnum+MAX_JETS_PER_LEAF>m_jets.size()) {
00123       if (m_verbose) {
00124         edm::LogError("L1GctProcessingError")
00125           << "L1GctJetCounter id= " << m_id << " trying to input too many jets for Leaf Card number " << i << std::endl
00126           << "current jetnum is " << jetnum << " about to add " << MAX_JETS_PER_LEAF << std::endl;
00127       }
00128     } else {
00129       L1GctJetLeafCard* jlc = m_jetLeafCards.at(i);
00130       for (unsigned j=0; j<L1GctJetFinderBase::MAX_JETS_OUT; j++) {
00131         m_jets.at(jetnum++) = jlc->getOutputJetsA().at(j);
00132         m_jets.at(jetnum++) = jlc->getOutputJetsB().at(j);
00133         m_jets.at(jetnum++) = jlc->getOutputJetsC().at(j);
00134       }
00135     }
00136   }
00137 }
00138 
00140 void L1GctJetCounter::setLut(const L1GctJetCounterLut& lut)
00141 {
00142   // Get rid of the old one
00143   delete m_jetCounterLut;
00144   m_jetCounterLut = new L1GctJetCounterLut(lut);
00145 }
00146 
00148 void L1GctJetCounter::setLut(const L1GctJetCounterSetup::cutDescription& cut)
00149 {
00150   // Get rid of the old one
00151   delete m_jetCounterLut;
00152   m_jetCounterLut = new L1GctJetCounterLut(cut);
00153 }
00154 
00156 void L1GctJetCounter::setLut(const L1GctJetCounterSetup::cutsListForJetCounter& cutList)
00157 {
00158   // Get rid of the old one
00159   delete m_jetCounterLut;
00160   m_jetCounterLut = new L1GctJetCounterLut(cutList);
00161 }
00162 
00164 void L1GctJetCounter::setJets(JetVector& jets)
00165 {
00166   m_jets = jets;
00167 }
00168 
00170 void L1GctJetCounter::process() 
00171 {
00172   for (unsigned i=0; i<m_jets.size(); i++) {
00173     if (m_jetCounterLut->passesCut(m_jets.at(i))) { m_value++; }
00174   }
00175 }
00176 
00178 bool L1GctJetCounter::setupOk() const {
00179   return (m_setupOk &&
00180           (m_jetCounterLut != 0) &&
00181           (m_jetCounterLut->setupOk()));
00182 }
00183 
00185 void L1GctJetCounter::setVerbose() {
00186   m_verbose = true; 
00187   if (m_jetCounterLut!=0) { 
00188     m_jetCounterLut->setVerbose(); 
00189   } 
00190 }
00191 
00192 void L1GctJetCounter::setTerse() { 
00193   m_verbose = false; 
00194   if (m_jetCounterLut!=0) { 
00195     m_jetCounterLut->setTerse(); 
00196   }
00197 }

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