Pi0FixedMassWindowCalibration

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

#include <memory>
#include <string>
#include <iostream>

#include <vector>
#include "DataFormats/GeometryVector/interface/GlobalPoint.h"

// Framework
#include "FWCore/Framework/interface/LooperFactory.h"
#include "FWCore/Framework/interface/ESProducerLooper.h"
#include "FWCore/Framework/interface/Frameworkfwd.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/EventSetup.h"

#include "CondFormats/EcalObjects/interface/EcalIntercalibConstants.h"
#include "CondFormats/DataRecord/interface/EcalIntercalibConstantsRcd.h"

#include "DataFormats/EcalRecHit/interface/EcalRecHit.h"
#include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
#include "DataFormats/EcalDetId/interface/EcalSubdetector.h"
#include "DataFormats/EcalDetId/interface/EBDetId.h"
#include "DataFormats/EcalDetId/interface/EEDetId.h"
#include "DataFormats/EcalDetId/interface/ESDetId.h"
#include "DataFormats/DetId/interface/DetId.h"

#include "Geometry/CaloGeometry/interface/CaloGeometry.h"
#include "Geometry/Records/interface/CaloGeometryRecord.h"

#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "RecoEcal/EgammaClusterAlgos/interface/IslandClusterAlgo.h"
#include "RecoEcal/EgammaCoreTools/interface/PositionCalc.h"
#include "RecoEcal/EgammaCoreTools/interface/ClusterShapeAlgo.h"

#include "Geometry/CaloTopology/interface/CaloSubdetectorTopology.h"

class Pi0FixedMassWindowCalibration : public edm::ESProducerLooper {
public:
  /// Constructor
  Pi0FixedMassWindowCalibration(const edm::ParameterSet& iConfig);

  /// Destructor
  ~Pi0FixedMassWindowCalibration() override;

  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);

  /// Dummy implementation (job done in duringLoop)
  virtual void produce(edm::Event&, const edm::EventSetup&) {}

  /// Called at beginning of job
  void beginOfJob() override;

  /// Called at end of job
  void endOfJob() override;

  /// Called at beginning of loop
  void startingNewLoop(unsigned int iLoop) override;

  /// Called at end of loop
  Status endOfLoop(const edm::EventSetup&, unsigned int iLoop) override;

  /// Called at each event
  Status duringLoop(const edm::Event&, const edm::EventSetup&) override;

private:
  //  static const double PDGPi0Mass;

  int nevent;

  const unsigned int theMaxLoops;
  const std::string ecalHitsProducer_;
  const std::string barrelHits_;

  IslandClusterAlgo::VerbosityLevel verbosity;

  std::string barrelHitProducer_;
  std::string barrelHitCollection_;
  std::string barrelClusterCollection_;
  std::string clustershapecollectionEB_;
  std::string barrelClusterShapeAssociation_;

  PositionCalc posCalculator_;  // position calculation algorithm
  ClusterShapeAlgo shapeAlgo_;  // cluster shape algorithm
  IslandClusterAlgo* island_p;

  // Selection algorithm parameters
  double selePi0PtGammaOneMin_;
  double selePi0PtGammaTwoMin_;

  double selePi0DRBelt_;
  double selePi0DetaBelt_;

  double selePi0PtPi0Min_;

  double selePi0S4S9GammaOneMin_;
  double selePi0S4S9GammaTwoMin_;
  double selePi0S9S25GammaOneMin_;
  double selePi0S9S25GammaTwoMin_;

  double selePi0EtBeltIsoRatioMax_;

  double selePi0MinvMeanFixed_;
  double selePi0MinvSigmaFixed_;

  std::vector<DetId> barrelCells;

  // input calibration constants
  double oldCalibs_barl[85][360][2];
  double newCalibs_barl[85][360][2];
  double wxtals[85][360][2];
  double mwxtals[85][360][2];

  // steering parameters

  edm::ParameterSet theParameterSet;

  // map for all RecHits from ECal:
  std::map<DetId, EcalRecHit>* recHitsEB_map;

  const EcalRecHitCollection* ecalRecHitBarrelCollection;
  const EcalRecHitCollection* recalibEcalRecHitCollection;

  const edm::EDGetTokenT<EcalRecHitCollection> recHitToken_;
  const edm::ESGetToken<EcalIntercalibConstants, EcalIntercalibConstantsRcd> intercalibConstantsToken_;
  const edm::ESGetToken<CaloGeometry, CaloGeometryRecord> geometryToken_;

  bool isfirstcall_;
};

#endif