CommissioningTask

CompactHistoSet

HistoSet

Macros

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
#ifndef DQM_SiStripCommissioningSources_CommissioningTask_H
#define DQM_SiStripCommissioningSources_CommissioningTask_H

#include "CondFormats/SiStripObjects/interface/FedChannelConnection.h"
#include "DataFormats/Common/interface/DetSet.h"
#include "DataFormats/Common/interface/DetSetNew.h"
#include "DataFormats/SiStripCommon/interface/SiStripEventSummary.h"
#include "DataFormats/SiStripDigi/interface/SiStripRawDigi.h"
#include "DataFormats/SiStripCluster/interface/SiStripCluster.h"
#include "DQMServices/Core/interface/DQMStore.h"
#include <vector>
#include <string>
#include <iomanip>
#include <cstdint>

class TAxis;
namespace edm {
  class EventSetup;
}

/**
   @class CommissioningTask
*/
class CommissioningTask {
public:
  typedef dqm::legacy::DQMStore DQMStore;
  typedef dqm::legacy::MonitorElement MonitorElement;
  // ---------- Constructors, destructors ----------

  CommissioningTask(DQMStore*, const FedChannelConnection&, const std::string& my_name);

  virtual ~CommissioningTask();

  // ---------- Classes, structs ----------

  /** Simple container class holding pointer to root histogram, and
      vectors in which data are cached and used to update histo. */
  class HistoSet {
  public:
    HistoSet();
    void histo(MonitorElement*);
    MonitorElement* histo();
    uint32_t bin(float value);
    std::vector<float> vNumOfEntries_;
    std::vector<float> vSumOfContents_;
    std::vector<double> vSumOfSquares_;
    bool isProfile_;
    bool explicitFill_;

  private:
    MonitorElement* histo_;
    TAxis* axis_;
  };

  class CompactHistoSet {
  public:
    CompactHistoSet();
    void histo(MonitorElement*);
    MonitorElement* histo();
    std::vector<short> vNumOfEntries_;
    bool explicitFill_;

  private:
    MonitorElement* histo_;
  };

  // ---------- Public methods ----------

  /** Books histograms and constructs HistoSet cache. */
  void bookHistograms();

  /** Fills HistoSet cache. */
  void fillHistograms(const SiStripEventSummary&, const edm::DetSet<SiStripRawDigi>&);

  /** Fills HistoSet cache. */
  void fillHistograms(const SiStripEventSummary&,
                      const edm::DetSet<SiStripRawDigi>&,
                      const edm::DetSet<SiStripRawDigi>&);

  /** Fills HistoSet cache. */
  void fillHistograms(const SiStripEventSummary&,
                      const edm::DetSet<SiStripRawDigi>&,
                      const edm::DetSet<SiStripRawDigi>&,
                      const std::vector<uint16_t>&);

  /** Fill HistoSet cache for FED cabling (special case). */
  void fillHistograms(const SiStripEventSummary&, const uint16_t& fed_id, const std::map<uint16_t, float>& fed_ch);

  /** Updates histograms using HistoSet cache. */
  void updateHistograms();

  /** Get histogram filled counter. */
  inline const uint32_t& fillCntr() const;

  /** Get histogram update frequency. */
  inline const uint32_t& updateFreq() const;

  /** Set histogram update frequency. */
  inline void updateFreq(const uint32_t&);

  /** Returns the name of this commissioning task. */
  inline const std::string& myName() const;

  /** Define access to the EventSetup. */
  inline void eventSetup(const edm::EventSetup*);

protected:
  // ---------- Protected methods ----------

  /** Updates the vectors of HistoSet. */
  void updateHistoSet(HistoSet&, const uint32_t& bin, const float& value);
  void updateHistoSet(CompactHistoSet&, const uint32_t& bin, const short& value);

  /** Updates the vectors of HistoSet. */
  void updateHistoSet(HistoSet&, const uint32_t& bin);
  void updateHistoSet(CompactHistoSet&, const uint32_t& bin);

  /** Updates the vectors of HistoSet. */
  void updateHistoSet(HistoSet&, const float& value);
  void updateHistoSet(CompactHistoSet&);

  /** Updates the MonitorElements of HistoSet. */
  void updateHistoSet(HistoSet&);

  /** Returns const pointer to DQM back-end interface object. */
  inline DQMStore* const dqm() const;

  /** */
  inline const FedChannelConnection& connection() const;

  /** Returns FEC key. */
  inline const uint32_t& fecKey() const;

  /** Returns FED key. */
  inline const uint32_t& fedKey() const;

  /** Access to the EventSetup. */
  inline const edm::EventSetup* const eventSetup() const;

private:
  // ---------- Private methods ----------

  CommissioningTask() { ; }

  virtual void book();

  virtual void fill(const SiStripEventSummary&, const edm::DetSet<SiStripRawDigi>&);

  virtual void fill(const SiStripEventSummary&, const edm::DetSet<SiStripRawDigi>&, const edm::DetSet<SiStripRawDigi>&);

  virtual void fill(const SiStripEventSummary&,
                    const edm::DetSet<SiStripRawDigi>&,
                    const edm::DetSet<SiStripRawDigi>&,
                    const std::vector<uint16_t>&);

  virtual void fill(const SiStripEventSummary&, const uint16_t& fed_id, const std::map<uint16_t, float>& fed_ch);

  virtual void update();

  // ---------- Private member data ----------

  DQMStore* dqm_;

  uint32_t updateFreq_;

  uint32_t fillCntr_;

  FedChannelConnection connection_;

  uint32_t fedKey_;

  uint32_t fecKey_;

  bool booked_;

  std::string myName_;

  const edm::EventSetup* eventSetup_;
};

// ----- inline methods -----

const uint32_t& CommissioningTask::fillCntr() const { return fillCntr_; }
const uint32_t& CommissioningTask::updateFreq() const { return updateFreq_; }
void CommissioningTask::updateFreq(const uint32_t& freq) { updateFreq_ = freq; }
const std::string& CommissioningTask::myName() const { return myName_; }

CommissioningTask::DQMStore* const CommissioningTask::dqm() const { return dqm_; }
const FedChannelConnection& CommissioningTask::connection() const { return connection_; }

const uint32_t& CommissioningTask::fecKey() const { return fecKey_; }
const uint32_t& CommissioningTask::fedKey() const { return fedKey_; }

void CommissioningTask::eventSetup(const edm::EventSetup* setup) { eventSetup_ = setup; }
const edm::EventSetup* const CommissioningTask::eventSetup() const { return eventSetup_; }

#endif  // DQM_SiStripCommissioningSources_CommissioningTask_H