DetIdListTimeAndStatus

SiStripDetVOffBuilder

TimesAndValues

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
#ifndef SISTRIPDETVOFF_SRC_BUILDER_H
#define SISTRIPDETVOFF_SRC_BUILDER_H
#define USING_NEW_CORAL

#include "FWCore/ServiceRegistry/interface/Service.h"
#include "FWCore/Framework/interface/EventSetup.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"

#include "CondFormats/SiStripObjects/interface/SiStripDetVOff.h"
#include "CondFormats/DataRecord/interface/SiStripCondDataRecords.h"

#include "CalibTracker/SiStripDCS/interface/SiStripCoralIface.h"
#include "CalibTracker/SiStripDCS/interface/SiStripPsuDetIdMap.h"
// #include "CalibTracker/SiStripDCS/interface/SiStripPsuDetIdMapFromFile.h"

#include "CoralBase/TimeStamp.h"
#include "CondFormats/Common/interface/Time.h"
#include "CondFormats/Common/interface/TimeConversions.h"
//#include "DataFormats/Provenance/interface/Timestamp.h"

#include <fstream>
#include <iostream>
#include <memory>

/**	
   \class SiStripDetVOffBuilder
   \brief Builds the SiStripDetVOff object for transfer by O2O
   \author J.Cole modified by Marco De Mattia
*/

// Unit test class for SiStripDetVOffBuilder
class TestSiStripDetVOffBuilder;

class SiStripDetVOffBuilder {
  friend class TestSiStripDetVOffBuilder;

public:
  /** Destructor. */
  ~SiStripDetVOffBuilder();
  /** Default constructor. */
  SiStripDetVOffBuilder(const edm::ParameterSet&, const edm::ActivityRegistry&);
  /** Build the SiStripDetVOff object for transfer. */
  void BuildDetVOffObj();
  /** Return modules Off vector of objects. */
  std::vector<std::pair<SiStripDetVOff*, cond::Time_t> > getModulesVOff() {
    reduction(deltaTmin_, maxIOVlength_);
    return modulesOff;
  }
  /** Return statistics about payloads transferred for storage in logDB. */
  std::vector<std::vector<uint32_t> > getPayloadStats() { return payloadStats; }
  /** Store the last payload transferred to DB as starting point for creation of new object list.
      ONLY WORKS FOR STATUSCHANGE OPTION. */
  void setLastSiStripDetVOff(SiStripDetVOff* lastPayload, cond::Time_t lastTimeStamp);

  /// Operates the reduction of the fast sequences of ramping up and down of the voltages
  void reduce(std::vector<std::pair<SiStripDetVOff*, cond::Time_t> >::iterator& it,
              std::vector<std::pair<SiStripDetVOff*, cond::Time_t> >::iterator& initialIt,
              std::vector<std::pair<SiStripDetVOff*, cond::Time_t> >& resultVec,
              const bool last = false);

  void reduction(const uint32_t deltaTmin, const uint32_t maxIOVlength);

  /// Removes IOVs as dictated by reduction
  void discardIOVs(std::vector<std::pair<SiStripDetVOff*, cond::Time_t> >::iterator& it,
                   std::vector<std::pair<SiStripDetVOff*, cond::Time_t> >::iterator& initialIt,
                   std::vector<std::pair<SiStripDetVOff*, cond::Time_t> >& resultVec,
                   const bool last,
                   const unsigned int first);
  bool FileExists(std::string filename);

private:
  // typedefs
  typedef std::vector<std::pair<std::vector<uint32_t>, coral::TimeStamp> > DetIdTimeStampVector;

  bool whichQuery;

  void printPar(std::stringstream& ss, const std::vector<int>& par);

  std::string timeToStream(const coral::TimeStamp& coralTime, const string& comment = "");
  std::string timeToStream(const cond::Time_t& condTime, const string& comment = "");

  /** Returns the PSU channel setting, based on date.  Works from DP ID. */
  int findSetting(uint32_t id,
                  const coral::TimeStamp& changeDate,
                  const std::vector<uint32_t>& settingID,
                  const std::vector<coral::TimeStamp>& settingDate);

  /** Returns the PSU channel setting, based on date.  Works from PSU channel name. Overloaded. */
  int findSetting(std::string dpname,
                  const coral::TimeStamp& changeDate,
                  const std::vector<std::string>& settingDpname,
                  const std::vector<coral::TimeStamp>& settingDate);

  /** Extract the lastValue values from file rather than from the PVSS cond DB. */
  void readLastValueFromFile(std::vector<uint32_t>& dpIDs,
                             std::vector<float>& vmonValues,
                             std::vector<coral::TimeStamp>& dateChange);

  /** Utility code to convert a coral timestamp to the correct time format for O2O timestamp. */
  cond::Time_t getCondTime(const coral::TimeStamp& coralTime);

  /** Utility code to convert an O2O timestamp into a coral timestamp. */
  coral::TimeStamp getCoralTime(cond::Time_t iovTime);

  /** Utility code to remove all the duplicates from a vector of uint32_t. */
  void removeDuplicates(std::vector<uint32_t>& vec);
  /** */
  cond::Time_t findMostRecentTimeStamp(const std::vector<coral::TimeStamp>& coralDate);

  // member data
  std::vector<std::vector<uint32_t> > payloadStats;
  std::vector<std::pair<SiStripDetVOff*, cond::Time_t> > modulesOff;
  std::pair<SiStripDetVOff*, cond::Time_t> lastStoredCondObj;

  // configurable parameters
  std::string onlineDbConnectionString;
  std::string authenticationPath;
  std::string whichTable;
  std::string lastValueFileName;
  bool fromFile;
  std::string psuDetIdMapFile_;
  bool debug_;
  coral::TimeStamp tmax, tmin, tsetmin;
  std::vector<int> tDefault, tmax_par, tmin_par, tset_par;
  uint32_t deltaTmin_, maxIOVlength_;

  std::string detIdListFile_;
  std::string excludedDetIdListFile_;
  // Threshold to consider a high voltage channel on
  double highVoltageOnThreshold_;

  // Structure used to store variables needed when building the database objects
  struct TimesAndValues {
    TimesAndValues() : latestTime(0) {}
    std::vector<coral::TimeStamp> changeDate;  // used by both
    std::vector<std::string> dpname;           // only used by DB access, not file access
    std::vector<float> actualValue;            // only used by DB access, not file access
    std::vector<uint32_t> dpid;                // only used by file access
    std::vector<int> actualStatus;             // filled using actualValue info
    cond::Time_t latestTime;                   // used for timestamp when using lastValue from file
  };

  struct DetIdListTimeAndStatus {
    DetIdListTimeAndStatus() : notMatched(0) {}
    DetIdTimeStampVector detidV;
    std::vector<bool> StatusGood;
    unsigned int notMatched;
    std::vector<std::string> psuName;
    std::vector<unsigned int> isHV;
  };

  void statusChange(cond::Time_t& lastTime, TimesAndValues& tStruct);
  void lastValue(TimesAndValues& tStruct);
  void lastValueFromFile(TimesAndValues& tStruct);

  void buildPSUdetIdMap(TimesAndValues& tStruct, DetIdListTimeAndStatus& dStruct);

  void setPayloadStats(const uint32_t afterV, const uint32_t numAdded, const uint32_t numRemoved);
  std::pair<int, int> extractDetIdVector(const unsigned int i,
                                         SiStripDetVOff* modV,
                                         DetIdListTimeAndStatus& detIdStruct);

  std::unique_ptr<SiStripCoralIface> coralInterface;
};
#endif