RawToDigiConverter

Record

TestFlag

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
/****************************************************************************
*
* This is a part of the TOTEM offline software.
* Authors:
*   Jan Kašpar (jan.kaspar@gmail.com)
*   Nicola Minafra
*   Laurent Forthomme
*
****************************************************************************/

#ifndef EventFilter_CTPPSRawToDigi_RawToDigiConverter
#define EventFilter_CTPPSRawToDigi_RawToDigiConverter

#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "DataFormats/Common/interface/DetSetVector.h"
#include "DataFormats/Common/interface/DetSetVectorNew.h"

#include "EventFilter/CTPPSRawToDigi/interface/VFATFrameCollection.h"

#include "CondFormats/PPSObjects/interface/TotemDAQMapping.h"
#include "CondFormats/PPSObjects/interface/TotemAnalysisMask.h"

#include "DataFormats/CTPPSDigi/interface/TotemRPDigi.h"
#include "DataFormats/CTPPSDigi/interface/TotemVFATStatus.h"
#include "DataFormats/CTPPSDigi/interface/CTPPSDiamondDigi.h"
#include "DataFormats/CTPPSDigi/interface/TotemTimingDigi.h"
#include "DataFormats/TotemReco/interface/TotemT2Digi.h"

/// \brief Collection of code to convert TOTEM raw data into digi.
class RawToDigiConverter {
public:
  RawToDigiConverter(const edm::ParameterSet &conf);

  /// Creates RP digi.
  void run(const VFATFrameCollection &coll,
           const TotemDAQMapping &mapping,
           const TotemAnalysisMask &mask,
           edm::DetSetVector<TotemRPDigi> &digi,
           edm::DetSetVector<TotemVFATStatus> &status);

  /// Creates Diamond digi.
  void run(const VFATFrameCollection &coll,
           const TotemDAQMapping &mapping,
           const TotemAnalysisMask &mask,
           edm::DetSetVector<CTPPSDiamondDigi> &digi,
           edm::DetSetVector<TotemVFATStatus> &status);

  /// Creates Totem Timing digi.
  void run(const VFATFrameCollection &coll,
           const TotemDAQMapping &mapping,
           const TotemAnalysisMask &mask,
           edm::DetSetVector<TotemTimingDigi> &digi,
           edm::DetSetVector<TotemVFATStatus> &status);

  /// Creates Totem T2 digi
  void run(const VFATFrameCollection &coll,
           const TotemDAQMapping &mapping,
           const TotemAnalysisMask &mask,
           edmNew::DetSetVector<TotemT2Digi> &digi,
           edm::DetSetVector<TotemVFATStatus> &status);

  /// Print error summaries.
  void printSummaries() const;

private:
  struct Record {
    const TotemVFATInfo *info;
    const VFATFrame *frame;
    TotemVFATStatus status;
  };

  const unsigned char verbosity;

  const bool printErrorSummary;
  const bool printUnknownFrameSummary;

  enum TestFlag { tfNoTest, tfWarn, tfErr };

  /// flags for which tests to run
  const unsigned int testFootprint;
  const unsigned int testCRC;
  const unsigned int testID;
  const unsigned int testECMostFrequent;
  const unsigned int testBCMostFrequent;

  /// the minimal required number of frames to determine the most frequent counter value
  const unsigned int EC_min, BC_min;

  /// the minimal required (relative) occupancy of the most frequent counter value to be accepted
  const double EC_fraction, BC_fraction;

  //Test file with two 8-bit hwID fields
  const bool olderTotemT2FileTest;

  /// error summaries
  std::map<TotemFramePosition, std::map<TotemVFATStatus, unsigned int> > errorSummary;
  std::map<TotemFramePosition, unsigned int> unknownSummary;

  /// Common processing for all VFAT based sub-systems.
  void runCommon(const VFATFrameCollection &input,
                 const TotemDAQMapping &mapping,
                 std::map<TotemFramePosition, Record> &records);
};

#endif