EcalABAnalyzer

VarCol

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

// $Id: EcalABAnalyzer.h

#include <memory>
#include <vector>
#include <map>

#include <FWCore/Framework/interface/one/EDAnalyzer.h>

#include <DataFormats/EcalDigi/interface/EcalDigiCollections.h>
#include <DataFormats/EcalRawData/interface/EcalRawDataCollections.h>
#include <Geometry/EcalMapping/interface/EcalElectronicsMapping.h>
#include <Geometry/EcalMapping/interface/EcalMappingRcd.h>

class TShapeAnalysis;
class TAPDPulse;
class TMom;

// Define geometrical constants
// NOT the same for "EB" and "EE"
//
//     "EB"       "EE"
//
//      0          0
//   1     2    1     2
//   3     4
//   5     6
//   7     8
//
//

// "EB" geometry
#define NCRYSEB 1700  // Number of crystals per EB supermodule

// "EE" geometry
#define NCRYSEE 830  // Number of crystals per EE supermodule

class EcalABAnalyzer : public edm::one::EDAnalyzer<> {
public:
  explicit EcalABAnalyzer(const edm::ParameterSet &iConfig);
  ~EcalABAnalyzer() override;

  void analyze(const edm::Event &e, const edm::EventSetup &c) override;
  void beginJob() override;
  void endJob() override;

  enum VarCol { iBlue, iRed, nColor };

private:
  int iEvent;

  const std::string eventHeaderCollection_;
  const std::string eventHeaderProducer_;
  const std::string digiCollection_;
  const std::string digiProducer_;

  const edm::EDGetTokenT<EcalRawDataCollection> rawDataToken_;
  edm::EDGetTokenT<EBDigiCollection> ebDigiToken_;
  edm::EDGetTokenT<EEDigiCollection> eeDigiToken_;
  const edm::ESGetToken<EcalElectronicsMapping, EcalMappingRcd> mappingToken_;

  // Framework parameters

  const unsigned int _nsamples;
  unsigned int _presample;
  const unsigned int _firstsample;
  const unsigned int _lastsample;
  const unsigned int _timingcutlow;
  const unsigned int _timingcuthigh;
  const unsigned int _timingquallow;
  const unsigned int _timingqualhigh;
  const double _ratiomincutlow;
  const double _ratiomincuthigh;
  const double _ratiomaxcutlow;
  const double _presamplecut;
  const unsigned int _niter;
  const double _alpha;
  const double _beta;
  const unsigned int _nevtmax;
  const double _noise;
  const double _chi2cut;
  const std::string _ecalPart;
  const int _fedid;
  const double _qualpercent;
  const int _debug;

  TAPDPulse *APDPulse;
  TMom *Delta01;
  TMom *Delta12;

  const std::string resdir_;

  // Output file names

  std::string alphafile;
  std::string alphainitfile;

  TShapeAnalysis *shapana;
  unsigned int nevtAB[NCRYSEB];

  //  Define geometrical constants
  //  Default values correspond to "EB" geometry (1700 crystals)

  unsigned int nCrys;
  bool doesABTreeExist;

  bool _fitab;
  // Identify run type

  int runType;
  int runNum;
  int fedID;
  int dccID;
  int side;
  int lightside;
  int iZ;

  // Temporary root files and trees

  std::vector<int> colors;
  std::map<int, int> channelMapEE;
  std::vector<int> dccMEM;
  std::vector<int> modules;

  // Declaration of leaves types for temporary trees

  int phi, eta;
  int event;
  int color;
  double adc[10];
  int adcG[10];
  int channelIteratorEE;

  int iEta[NCRYSEB], iPhi[NCRYSEB];
  int iTowerID[NCRYSEB], iChannelID[NCRYSEB], idccID[NCRYSEB], iside[NCRYSEB];

  // Quality Checks variables and flags

  int nEvtBadGain[NCRYSEB];
  int nEvtBadTiming[NCRYSEB];
  int nEvtTot[NCRYSEB];

  bool wasGainOK[NCRYSEB];
  bool wasTimingOK[NCRYSEB];

  bool isGainOK;
  bool isTimingOK;
};

#endif