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
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
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
00079
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
00085 os << *algo.m_jetCounterLut << std::endl;
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
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
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
00143 delete m_jetCounterLut;
00144 m_jetCounterLut = new L1GctJetCounterLut(lut);
00145 }
00146
00148 void L1GctJetCounter::setLut(const L1GctJetCounterSetup::cutDescription& cut)
00149 {
00150
00151 delete m_jetCounterLut;
00152 m_jetCounterLut = new L1GctJetCounterLut(cut);
00153 }
00154
00156 void L1GctJetCounter::setLut(const L1GctJetCounterSetup::cutsListForJetCounter& cutList)
00157 {
00158
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 }