CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Protected Attributes
PFHFRecHitCreator Class Referencefinal

#include <PFHFRecHitCreator.h>

Inheritance diagram for PFHFRecHitCreator:
PFRecHitCreatorBase

Classes

class  DetIDSorter
 

Public Member Functions

void importRecHits (std::unique_ptr< reco::PFRecHitCollection > &out, std::unique_ptr< reco::PFRecHitCollection > &cleaned, const edm::Event &iEvent, const edm::EventSetup &iSetup) override
 
 PFHFRecHitCreator (const edm::ParameterSet &iConfig, edm::ConsumesCollector &iC)
 
- Public Member Functions inherited from PFRecHitCreatorBase
virtual void init (const edm::EventSetup &es)
 
 PFRecHitCreatorBase ()
 
 PFRecHitCreatorBase (const edm::ParameterSet &iConfig, edm::ConsumesCollector &iC)
 
virtual ~PFRecHitCreatorBase ()=default
 

Protected Attributes

double EM_Depth_
 
double HAD_Depth_
 
double HFCalib_
 
double longFibre_Cut
 
double longFibre_Fraction
 
edm::EDGetTokenT< edm::SortedCollection< HFRecHit > > recHitToken_
 
double shortFibre_Cut
 
double shortFibre_Fraction
 
double thresh_HF_
 
- Protected Attributes inherited from PFRecHitCreatorBase
std::vector< std::unique_ptr< PFRecHitQTestBase > > qualityTests_
 

Additional Inherited Members

- Protected Member Functions inherited from PFRecHitCreatorBase
void beginEvent (const edm::Event &event, const edm::EventSetup &setup)
 

Detailed Description

Definition at line 21 of file PFHFRecHitCreator.h.

Constructor & Destructor Documentation

◆ PFHFRecHitCreator()

PFHFRecHitCreator::PFHFRecHitCreator ( const edm::ParameterSet iConfig,
edm::ConsumesCollector iC 
)
inline

Definition at line 23 of file PFHFRecHitCreator.h.

23  : PFRecHitCreatorBase(iConfig, iC) {
25  EM_Depth_ = iConfig.getParameter<double>("EMDepthCorrection");
26  HAD_Depth_ = iConfig.getParameter<double>("HADDepthCorrection");
27  shortFibre_Cut = iConfig.getParameter<double>("ShortFibre_Cut");
28  longFibre_Fraction = iConfig.getParameter<double>("LongFibre_Fraction");
29  longFibre_Cut = iConfig.getParameter<double>("LongFibre_Cut");
30  shortFibre_Fraction = iConfig.getParameter<double>("ShortFibre_Fraction");
31  thresh_HF_ = iConfig.getParameter<double>("thresh_HF");
32  HFCalib_ = iConfig.getParameter<double>("HFCalib29");
33  }

References edm::ConsumesCollector::consumes(), EM_Depth_, edm::ParameterSet::getParameter(), HAD_Depth_, HFCalib_, longFibre_Cut, longFibre_Fraction, recHitToken_, shortFibre_Cut, shortFibre_Fraction, and thresh_HF_.

Member Function Documentation

◆ importRecHits()

void PFHFRecHitCreator::importRecHits ( std::unique_ptr< reco::PFRecHitCollection > &  out,
std::unique_ptr< reco::PFRecHitCollection > &  cleaned,
const edm::Event iEvent,
const edm::EventSetup iSetup 
)
inlineoverridevirtual

Implements PFRecHitCreatorBase.

Definition at line 35 of file PFHFRecHitCreator.h.

38  {
40 
41  beginEvent(iEvent, iSetup);
42 
44 
46  iSetup.get<CaloGeometryRecord>().get(geoHandle);
47 
48  // get the ecal geometry
50 
51  iEvent.getByToken(recHitToken_, recHitHandle);
52  for (const auto& erh : *recHitHandle) {
53  const HcalDetId& detid = (HcalDetId)erh.detid();
54  auto depth = detid.depth();
55 
56  // ATTN: skip dual anode in HF for now (should be fixed in upstream changes)
57  if (depth > 2)
58  continue;
59 
60  auto energy = erh.energy();
61  auto time = erh.time();
62 
63  std::shared_ptr<const CaloCellGeometry> thisCell = hcalGeo->getGeometry(detid);
64  auto zp = dynamic_cast<IdealZPrism const*>(thisCell.get());
65  assert(zp);
66  thisCell = zp->forPF();
67 
68  // find rechit geometry
69  if (!thisCell) {
70  edm::LogError("PFHFRecHitCreator")
71  << "warning detid " << detid.rawId() << " not found in geometry" << std::endl;
72  continue;
73  }
74 
76 
77  reco::PFRecHit rh(thisCell, detid.rawId(), layer, energy);
78  rh.setTime(time);
79  rh.setDepth(depth);
80 
81  bool rcleaned = false;
82  bool keep = true;
83 
84  //Apply Q tests
85  for (const auto& qtest : qualityTests_) {
86  if (!qtest->test(rh, erh, rcleaned)) {
87  keep = false;
88  }
89  }
90 
91  if (keep) {
92  tmpOut.push_back(std::move(rh));
93  } else if (rcleaned)
94  cleaned->push_back(std::move(rh));
95  }
96  //Sort by DetID the collection
97  DetIDSorter sorter;
98  if (!tmpOut.empty())
99  std::sort(tmpOut.begin(), tmpOut.end(), sorter);
100 
102 
103  for (auto& hit : tmpOut) {
104  reco::PFRecHit newHit = hit;
105  const HcalDetId& detid = (HcalDetId)hit.detId();
106  if (detid.depth() == 1) {
107  double lONG = hit.energy();
108  //find the short hit
109  HcalDetId shortID(HcalForward, detid.ieta(), detid.iphi(), 2);
110  auto found_hit =
111  std::lower_bound(tmpOut.begin(), tmpOut.end(), shortID, [](const reco::PFRecHit& a, HcalDetId b) {
112  return a.detId() < b.rawId();
113  });
114  if (found_hit != tmpOut.end() && found_hit->detId() == shortID.rawId()) {
115  double sHORT = found_hit->energy();
116  //Ask for fraction
117  double energy = lONG - sHORT;
118 
119  if (abs(detid.ieta()) <= 32)
120  energy *= HFCalib_;
121  newHit.setEnergy(energy);
122  if (!(lONG > longFibre_Cut && (sHORT / lONG < shortFibre_Fraction)))
123  if (energy > thresh_HF_)
124  out->push_back(newHit);
125  } else {
126  //make only long hit
127  double energy = lONG;
128  if (abs(detid.ieta()) <= 32)
129  energy *= HFCalib_;
130  newHit.setEnergy(energy);
131 
132  if (energy > thresh_HF_)
133  out->push_back(newHit);
134  }
135 
136  } else {
137  double sHORT = hit.energy();
138  HcalDetId longID(HcalForward, detid.ieta(), detid.iphi(), 1);
139  auto found_hit =
140  std::lower_bound(tmpOut.begin(), tmpOut.end(), longID, [](const reco::PFRecHit& a, HcalDetId b) {
141  return a.detId() < b.rawId();
142  });
143  double energy = 2 * sHORT;
144  if (found_hit != tmpOut.end() && found_hit->detId() == longID.rawId()) {
145  double lONG = found_hit->energy();
146  //Ask for fraction
147 
148  //If in this case lONG-sHORT<0 add the energy to the sHORT
149  if ((lONG - sHORT) < thresh_HF_)
150  energy = lONG + sHORT;
151 
152  if (abs(detid.ieta()) <= 32)
153  energy *= HFCalib_;
154 
155  newHit.setEnergy(energy);
156  if (!(sHORT > shortFibre_Cut && (lONG / sHORT < longFibre_Fraction)))
157  if (energy > thresh_HF_)
158  out->push_back(newHit);
159 
160  } else {
161  //only short hit!
162  if (abs(detid.ieta()) <= 32)
163  energy *= HFCalib_;
164  newHit.setEnergy(energy);
165  if (energy > thresh_HF_)
166  out->push_back(newHit);
167  }
168  }
169  }
170  }

References a, funct::abs(), cms::cuda::assert(), b, PFRecHitCreatorBase::beginEvent(), LEDCalibrationChannels::depth, HcalDetId::depth(), HCALHighEnergyHPDFilter_cfi::energy, edm::EventSetup::get(), get, CaloSubdetectorGeometry::getGeometry(), CaloGeometry::getSubdetectorGeometry(), DetId::Hcal, HcalForward, PFLayer::HF_EM, PFLayer::HF_HAD, HFCalib_, HcalDetId::ieta(), iEvent, HcalDetId::iphi(), keep, longFibre_Cut, longFibre_Fraction, pfDeepBoostedJetPreprocessParams_cfi::lower_bound, eostools::move(), MillePedeFileConverter_cfg::out, PFRecHitCreatorBase::qualityTests_, DetId::rawId(), recHitToken_, reco::PFRecHit::setEnergy(), reco::PFRecHit::setTime(), shortFibre_Cut, shortFibre_Fraction, MCScenario_CRAFT1_22X::sorter(), thresh_HF_, and ntuplemaker::time.

Member Data Documentation

◆ EM_Depth_

double PFHFRecHitCreator::EM_Depth_
protected

Definition at line 174 of file PFHFRecHitCreator.h.

Referenced by PFHFRecHitCreator().

◆ HAD_Depth_

double PFHFRecHitCreator::HAD_Depth_
protected

Definition at line 175 of file PFHFRecHitCreator.h.

Referenced by PFHFRecHitCreator().

◆ HFCalib_

double PFHFRecHitCreator::HFCalib_
protected

Definition at line 184 of file PFHFRecHitCreator.h.

Referenced by importRecHits(), and PFHFRecHitCreator().

◆ longFibre_Cut

double PFHFRecHitCreator::longFibre_Cut
protected

Definition at line 181 of file PFHFRecHitCreator.h.

Referenced by importRecHits(), and PFHFRecHitCreator().

◆ longFibre_Fraction

double PFHFRecHitCreator::longFibre_Fraction
protected

Definition at line 178 of file PFHFRecHitCreator.h.

Referenced by importRecHits(), and PFHFRecHitCreator().

◆ recHitToken_

edm::EDGetTokenT<edm::SortedCollection<HFRecHit> > PFHFRecHitCreator::recHitToken_
protected

Definition at line 173 of file PFHFRecHitCreator.h.

Referenced by importRecHits(), and PFHFRecHitCreator().

◆ shortFibre_Cut

double PFHFRecHitCreator::shortFibre_Cut
protected

Definition at line 177 of file PFHFRecHitCreator.h.

Referenced by importRecHits(), and PFHFRecHitCreator().

◆ shortFibre_Fraction

double PFHFRecHitCreator::shortFibre_Fraction
protected

Definition at line 182 of file PFHFRecHitCreator.h.

Referenced by importRecHits(), and PFHFRecHitCreator().

◆ thresh_HF_

double PFHFRecHitCreator::thresh_HF_
protected

Definition at line 183 of file PFHFRecHitCreator.h.

Referenced by importRecHits(), and PFHFRecHitCreator().

PFHFRecHitCreator::longFibre_Fraction
double longFibre_Fraction
Definition: PFHFRecHitCreator.h:178
PFRecHitCreatorBase::beginEvent
void beginEvent(const edm::Event &event, const edm::EventSetup &setup)
Definition: PFRecHitCreatorBase.h:43
PFHFRecHitCreator::EM_Depth_
double EM_Depth_
Definition: PFHFRecHitCreator.h:174
HcalDetId::iphi
constexpr int iphi() const
get the cell iphi
Definition: HcalDetId.h:157
CaloGeometryRecord
Definition: CaloGeometryRecord.h:30
DetId::Hcal
Definition: DetId.h:28
CaloGeometry::getSubdetectorGeometry
const CaloSubdetectorGeometry * getSubdetectorGeometry(const DetId &id) const
access the subdetector geometry for the given subdetector directly
Definition: CaloGeometry.cc:34
cms::cuda::assert
assert(be >=bs)
edm::SortedCollection
Definition: SortedCollection.h:49
HcalDetId::depth
constexpr int depth() const
get the tower depth
Definition: HcalDetId.h:164
PFHFRecHitCreator::recHitToken_
edm::EDGetTokenT< edm::SortedCollection< HFRecHit > > recHitToken_
Definition: PFHFRecHitCreator.h:173
edm::Handle
Definition: AssociativeIterator.h:50
PFHFRecHitCreator::shortFibre_Cut
double shortFibre_Cut
Definition: PFHFRecHitCreator.h:177
PFHFRecHitCreator::HFCalib_
double HFCalib_
Definition: PFHFRecHitCreator.h:184
PFRecHitCreatorBase::PFRecHitCreatorBase
PFRecHitCreatorBase()
Definition: PFRecHitCreatorBase.h:25
reco::PFRecHitCollection
std::vector< PFRecHit > PFRecHitCollection
collection of PFRecHit objects
Definition: PFRecHitFwd.h:9
edm::EventSetup::get
T get() const
Definition: EventSetup.h:80
PFLayer::HF_EM
Definition: PFLayer.h:38
PFHFRecHitCreator::shortFibre_Fraction
double shortFibre_Fraction
Definition: PFHFRecHitCreator.h:182
PFRecHitCreatorBase::qualityTests_
std::vector< std::unique_ptr< PFRecHitQTestBase > > qualityTests_
Definition: PFRecHitCreatorBase.h:48
edm::ESHandle< CaloGeometry >
edm::ConsumesCollector::consumes
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
Definition: ConsumesCollector.h:55
HCALHighEnergyHPDFilter_cfi.energy
energy
Definition: HCALHighEnergyHPDFilter_cfi.py:5
reco::PFRecHit::setEnergy
void setEnergy(float energy)
Definition: PFRecHit.h:69
b
double b
Definition: hdecay.h:118
LEDCalibrationChannels.depth
depth
Definition: LEDCalibrationChannels.py:65
PFLayer::Layer
Layer
layer definition
Definition: PFLayer.h:29
PFLayer::HF_HAD
Definition: PFLayer.h:39
pfDeepBoostedJetPreprocessParams_cfi.lower_bound
lower_bound
Definition: pfDeepBoostedJetPreprocessParams_cfi.py:15
HcalDetId::ieta
constexpr int ieta() const
get the cell ieta
Definition: HcalDetId.h:155
a
double a
Definition: hdecay.h:119
PFHFRecHitCreator::HAD_Depth_
double HAD_Depth_
Definition: PFHFRecHitCreator.h:175
HcalDetId
Definition: HcalDetId.h:12
iEvent
int iEvent
Definition: GenABIO.cc:224
CaloSubdetectorGeometry::getGeometry
virtual std::shared_ptr< const CaloCellGeometry > getGeometry(const DetId &id) const
Get the cell geometry of a given detector id. Should return false if not found.
Definition: CaloSubdetectorGeometry.cc:36
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
get
#define get
HcalForward
Definition: HcalAssistant.h:36
MCScenario_CRAFT1_22X.sorter
def sorter(a, b)
Definition: MCScenario_CRAFT1_22X.py:97
eostools.move
def move(src, dest)
Definition: eostools.py:511
DetId::rawId
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
PFHFRecHitCreator::longFibre_Cut
double longFibre_Cut
Definition: PFHFRecHitCreator.h:181
PFHFRecHitCreator::thresh_HF_
double thresh_HF_
Definition: PFHFRecHitCreator.h:183
CaloSubdetectorGeometry
Definition: CaloSubdetectorGeometry.h:22
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
reco::PFRecHit
Particle flow rechit (rechit + geometry and topology information). See clustering algorithm in PFClus...
Definition: PFRecHit.h:31
MillePedeFileConverter_cfg.out
out
Definition: MillePedeFileConverter_cfg.py:31
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
ntuplemaker.time
time
Definition: ntuplemaker.py:310
reco::PFRecHit::setTime
void setTime(double time)
Definition: PFRecHit.h:73
keep
const int keep
Definition: GenParticlePruner.cc:48
edm::InputTag
Definition: InputTag.h:15
hit
Definition: SiStripHitEffFromCalibTree.cc:88