testSiStripFecKey

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200
// system includes
#include <sstream>

// user includes
#include "FWCore/Framework/interface/one/EDAnalyzer.h"
#include "DataFormats/SiStripCommon/interface/SiStripConstants.h"
#include "DataFormats/SiStripCommon/interface/SiStripEnumsAndStrings.h"
#include "DataFormats/SiStripCommon/interface/SiStripFecKey.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"

/**
   @class testSiStripFecKey 
   @author R.Bainbridge
   @brief Simple class that tests SiStripFecKey.
*/
class testSiStripFecKey : public edm::one::EDAnalyzer<> {
public:
  testSiStripFecKey(const edm::ParameterSet&);
  ~testSiStripFecKey();

  void beginJob();
  void analyze(const edm::Event&, const edm::EventSetup&);

private:
  const uint32_t crate_;
  const uint32_t slot_;
  const uint32_t ring_;
  const uint32_t ccu_;
  const uint32_t module_;
  const uint32_t lld_;
  const uint32_t i2c_;
};

using namespace sistrip;

// -----------------------------------------------------------------------------
//
testSiStripFecKey::testSiStripFecKey(const edm::ParameterSet& pset)
    : crate_(pset.getUntrackedParameter<uint32_t>("CRATE", sistrip::invalid32_)),
      slot_(pset.getUntrackedParameter<uint32_t>("SLOT", sistrip::invalid32_)),
      ring_(pset.getUntrackedParameter<uint32_t>("RING", sistrip::invalid32_)),
      ccu_(pset.getUntrackedParameter<uint32_t>("CCU", sistrip::invalid32_)),
      module_(pset.getUntrackedParameter<uint32_t>("MODULE", sistrip::invalid32_)),
      lld_(pset.getUntrackedParameter<uint32_t>("LLD", sistrip::invalid32_)),
      i2c_(pset.getUntrackedParameter<uint32_t>("I2C", sistrip::invalid32_)) {
  LogTrace(mlDqmCommon_) << "[testSiStripFecKey::" << __func__ << "]"
                         << " Constructing object...";
}

// -----------------------------------------------------------------------------
//
testSiStripFecKey::~testSiStripFecKey() {
  LogTrace(mlDqmCommon_) << "[testSiStripFecKey::" << __func__ << "]"
                         << " Destructing object...";
}

// -----------------------------------------------------------------------------
//
void testSiStripFecKey::beginJob() {
  uint32_t cntr = 0;
  std::vector<uint32_t> keys;

  // simple loop
  for (uint16_t iloop = 0; iloop < 1; iloop++) {
    // FEC crates
    for (uint16_t icrate = 0; icrate <= sistrip::FEC_CRATE_MAX + 1; icrate++) {
      if (icrate > 1 && icrate < sistrip::FEC_CRATE_MAX) {
        continue;
      }

      // FEC slots
      for (uint16_t ifec = 0; ifec <= sistrip::SLOTS_PER_CRATE + 1; ifec++) {
        if (ifec > 1 && ifec < sistrip::SLOTS_PER_CRATE) {
          continue;
        }

        // FEC rings
        for (uint16_t iring = 0; iring <= sistrip::FEC_RING_MAX + 1; iring++) {
          if (iring > 1 && iring < sistrip::FEC_RING_MAX) {
            continue;
          }

          // CCU addr
          for (uint16_t iccu = 0; iccu <= sistrip::CCU_ADDR_MAX + 1; iccu++) {
            if (iccu > 1 && iccu < sistrip::CCU_ADDR_MAX) {
              continue;
            }

            // CCU channel
            for (uint16_t ichan = 0; ichan <= sistrip::CCU_CHAN_MAX + 1; ichan++) {
              if (ichan > 1 && ichan != sistrip::CCU_CHAN_MIN && ichan < sistrip::CCU_CHAN_MAX - 1) {
                continue;
              }

              // LLD channels
              for (uint16_t illd = 0; illd <= sistrip::LLD_CHAN_MAX + 1; illd++) {
                if (illd > 1 && illd < sistrip::LLD_CHAN_MAX) {
                  continue;
                }

                // APV
                for (uint16_t iapv = 0; iapv <= sistrip::APV_I2C_MAX + 1; iapv++) {
                  if (iapv > 1 && iapv != sistrip::APV_I2C_MIN && iapv < sistrip::APV_I2C_MAX) {
                    continue;
                  }

                  cntr++;

                  SiStripFecKey tmp1(icrate, ifec, iring, iccu, ichan, illd, iapv);
                  SiStripFecKey tmp2 = SiStripFecKey(tmp1.key());
                  SiStripFecKey tmp3 = SiStripFecKey(tmp1.path());
                  SiStripFecKey tmp4 = SiStripFecKey(tmp1);
                  SiStripFecKey tmp5;
                  tmp5 = tmp1;

                  keys.push_back(tmp1.key());

                  // Print out FEC
                  std::stringstream ss;
                  ss << "[SiStripFecKey::" << __func__ << "]" << std::endl
                     << " From loop   : "
                     << "FEC:crate/slot/ring/CCU/module/LLD/I2C= " << icrate << "/" << ifec << "/" << iring << "/"
                     << iccu << "/" << ichan << "/" << illd << "/" << iapv << std::endl
                     << " From values : ";
                  tmp1.terse(ss);
                  ss << std::endl << " From key    : ";
                  tmp1.terse(ss);
                  ss << std::endl << " From dir    : ";
                  tmp1.terse(ss);
                  ss << std::endl
                     << " Granularity : " << SiStripEnumsAndStrings::granularity(tmp1.granularity()) << std::endl
                     << " Directory   : " << tmp1.path() << std::endl
                     << std::boolalpha << " isValid     : " << tmp1.isValid() << "/" << tmp1.isValid(tmp1.granularity())
                     << "/" << tmp1.isValid(sistrip::APV) << " (general/granularity/apv)" << std::endl
                     << " isInvalid   : " << tmp1.isInvalid() << "/" << tmp1.isInvalid(tmp1.granularity()) << "/"
                     << tmp1.isInvalid(sistrip::APV) << " (general/granularity/apv)" << std::endl
                     << std::noboolalpha;

                  if (tmp1.isValid()) {
                    edm::LogVerbatim(mlDqmCommon_) << ss.str();
                  } else {
                    LogTrace(mlDqmCommon_) << ss.str();
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  edm::LogVerbatim(mlDqmCommon_) << "[SiStripFecKey::" << __func__ << "]"
                                 << " Processed " << cntr << " FED keys";

  std::sort(keys.begin(), keys.end());

  SiStripFecKey value(crate_, slot_, ring_, ccu_, module_, lld_, i2c_);

  typedef std::vector<uint32_t>::iterator iter;
  std::pair<iter, iter> temp = std::equal_range(keys.begin(), keys.end(), value.key(), ConsistentWithKey(value));

  if (temp.first != temp.second) {
    std::stringstream ss;
    ss << std::endl;
    for (iter ii = temp.first; ii != temp.second; ++ii) {
      SiStripFecKey(*ii).terse(ss);
      ss << std::endl;
    }
    LogTrace(mlDqmCommon_) << "[SiStripFecKey::" << __func__ << "]"
                           << " Beginning of list of matched keys: " << ss.str() << "[SiStripFecKey::" << __func__
                           << "]"
                           << " End of list of matched keys: ";
  }

  if (find(keys.begin(), keys.end(), value.key()) != keys.end()) {
    std::stringstream ss;
    ss << "[SiStripFecKey::" << __func__ << "]"
       << " Found key ";
    value.terse(ss);
    ss << " in list! ";
    LogTrace(mlDqmCommon_) << ss.str();
  }

  edm::LogVerbatim(mlDqmCommon_) << "[SiStripFecKey::" << __func__ << "]" << std::endl
                                 << " Total number of keys   : " << keys.size() << std::endl
                                 << " Number of matching key : " << temp.second - temp.first;
}

// -----------------------------------------------------------------------------
//
void testSiStripFecKey::analyze(const edm::Event& event, const edm::EventSetup& setup) {
  LogTrace(mlDqmCommon_) << "[SiStripFecKey::" << __func__ << "]"
                         << " Analyzing run/event " << event.id().run() << "/" << event.id().event();
}

#include "FWCore/Framework/interface/MakerMacros.h"
DEFINE_FWK_MODULE(testSiStripFecKey);