206 const std::vector<CaloParticle>&
caloParticles = *caloParticleHandle;
218 std::map<DetId, const HGCRecHit*> hitmap;
224 const auto& rechitsEE = *recHitHandleEE;
225 const auto& rechitsFH = *recHitHandleFH;
226 const auto& rechitsBH = *recHitHandleBH;
227 for (
unsigned int i = 0;
i < rechitsEE.size(); ++
i) {
228 hitmap[rechitsEE[
i].detid()] = &rechitsEE[
i];
230 for (
unsigned int i = 0;
i < rechitsFH.size(); ++
i) {
231 hitmap[rechitsFH[
i].detid()] = &rechitsFH[
i];
233 for (
unsigned int i = 0;
i < rechitsBH.size(); ++
i) {
234 hitmap[rechitsBH[
i].detid()] = &rechitsBH[
i];
241 for (
unsigned int i = 0;
i < rechitsEE.
size();
i++) {
242 hitmap[rechitsEE[
i].detid()] = &rechitsEE[
i];
249 const auto& rechitsFH = *recHitHandleFH;
250 const auto& rechitsBH = *recHitHandleBH;
251 for (
unsigned int i = 0;
i < rechitsFH.size();
i++) {
252 hitmap[rechitsFH[
i].detid()] = &rechitsFH[
i];
254 for (
unsigned int i = 0;
i < rechitsBH.size();
i++) {
255 hitmap[rechitsBH[
i].detid()] = &rechitsBH[
i];
266 float seedEnergy = 0.;
269 if (it_caloPart.g4Tracks()[0].eventId().event() != 0
or it_caloPart.g4Tracks()[0].eventId().bunchCrossing() != 0) {
270 LogDebug(
"HGCalHitCalibration") <<
"Excluding CaloParticles from event: " 271 << it_caloPart.g4Tracks()[0].eventId().event()
272 <<
" with BX: " << it_caloPart.g4Tracks()[0].eventId().bunchCrossing()
283 for (
const auto& it_sc : simClusterRefVector) {
286 <<
">>> SC.energy(): " << simCluster.
energy() <<
" SC.simEnergy(): " << simCluster.
simEnergy() << std::endl;
287 const std::vector<std::pair<uint32_t, float> >& hits_and_fractions = simCluster.
hits_and_fractions();
290 for (
const auto& it_haf : hits_and_fractions) {
292 DetId hitid = (it_haf.first);
299 fillWithRecHits(hitmap, hitid, hitlayer, it_haf.second, seedDet, seedEnergy);
304 auto sumCalibRecHitCalib_fraction =
307 <<
">>> MC Energy: " << it_caloPart.energy() <<
" reco energy: " << sumCalibRecHitCalib_fraction << std::endl;
312 const auto&
clusters = *hgcalMultiClustersHandle;
313 float total_energy = 0.;
314 float max_dR2 = 0.0025;
319 auto ERatio_a =
a.correctedEnergy() / it_caloPart.energy();
320 auto ERatio_b =
b.correctedEnergy() / it_caloPart.energy();
323 if (dR2_a < max_dR2 && dR2_b < max_dR2)
324 return ERatio_a > ERatio_b;
325 return dR2_a < dR2_b;
328 total_energy = closest->correctedEnergy();
338 auto closest_fcn = [&](
auto const&
a,
auto const&
b) {
341 auto ERatio_a =
a.energy() / it_caloPart.energy();
342 auto ERatio_b =
b.energy() / it_caloPart.energy();
345 if (dR2_a < max_dR2 && dR2_b < max_dR2)
346 return ERatio_a > ERatio_b;
347 return dR2_a < dR2_b;
350 if (PFElectronHandle.
isValid()) {
351 auto const& ele = (*PFElectronHandle);
352 auto closest = std::min_element(ele.begin(), ele.end(), closest_fcn);
353 if (closest != ele.end() &&
354 (closest->superCluster()->seed()->seed().det() ==
DetId::Forward ||
355 closest->superCluster()->seed()->seed().det() ==
DetId::HGCalEE) &&
358 if (closest->superCluster()->seed()->seed().det() ==
DetId::HGCalHSc) {
368 if (PFPhotonHandle.
isValid()) {
369 auto const&
photon = (*PFPhotonHandle);
370 auto closest = std::min_element(
photon.begin(),
photon.end(), closest_fcn);
371 if (closest !=
photon.end() &&
372 (closest->superCluster()->seed()->seed().det() ==
DetId::Forward ||
373 closest->superCluster()->seed()->seed().det() ==
DetId::HGCalEE) &&
edm::EDGetTokenT< std::vector< CaloParticle > > caloParticles_
static constexpr int scint_
edm::EDGetTokenT< std::vector< reco::Photon > > photons_
std::array< float, layers_ > Energy_layer_calib_fraction_
edm::EDGetTokenT< std::vector< reco::PFCluster > > hgcalMultiClusters_
std::map< int, MonitorElement * > hgcal_EoP_CPene_calib_fraction_
edm::EDGetTokenT< HGCRecHitCollection > recHitsFH_
Particle flow cluster, see clustering algorithm in PFClusterAlgo.
edm::EDGetTokenT< HGCRecHitCollection > recHitsEE_
#define IfLogTrace(cond, cat)
std::map< int, MonitorElement * > hgcal_ele_EoP_CPene_calib_fraction_
constexpr Detector det() const
get the detector field from this detid
std::map< int, MonitorElement * > hgcal_photon_EoP_CPene_calib_fraction_
std::vector< std::pair< uint32_t, float > > hits_and_fractions() const
Returns list of rechit IDs and fractions for this SimCluster.
float simEnergy() const
returns the accumulated sim energy in the cluster
edm::EDGetTokenT< HGCRecHitCollection > recHitsBH_
Monte Carlo truth information used for tracking validation.
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
void fillWithRecHits(std::map< DetId, const HGCRecHit *> &, DetId, unsigned int, float, int &, float &)
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
hgcal::RecHitTools recHitTools_
constexpr auto deltaR2(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
edm::EDGetTokenT< std::vector< reco::GsfElectron > > electrons_
std::map< int, MonitorElement * > h_EoP_CPene_calib_fraction_
float energy() const
Energy. Note this is taken from the first SimTrack only.
std::array< float, layers_ > Energy_layer_calib_
edm::ESGetToken< CaloGeometry, CaloGeometryRecord > caloGeomToken_