Skip to content

Commit

Permalink
add L1 geometry and initial trigger cells
Browse files Browse the repository at this point in the history
  • Loading branch information
mariadalfonso authored and jbsauvan committed Nov 24, 2019
1 parent 8d6e9d8 commit d00974e
Show file tree
Hide file tree
Showing 27 changed files with 874 additions and 156 deletions.
14 changes: 12 additions & 2 deletions DataFormats/L1THGCal/interface/HGCalClusterT.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#include "DataFormats/ForwardDetId/interface/ForwardSubdetector.h"
#include "DataFormats/HcalDetId/interface/HcalSubdetector.h"
#include "DataFormats/ForwardDetId/interface/HGCalTriggerDetId.h"
#include "DataFormats/ForwardDetId/interface/HFNoseTriggerDetId.h"

/* ROOT */
#include "Math/Vector3D.h"
Expand Down Expand Up @@ -115,13 +116,22 @@ namespace l1t {
double fraction = (id_fraction != constituentsFraction_.end() ? id_fraction->second : 1.);
if ((id.det() == DetId::Forward && id.subdetId() == HGCEE) || (id.det() == DetId::HGCalEE) ||
(id.det() == DetId::HGCalTrigger &&
HGCalTriggerDetId(id).subdet() == HGCalTriggerSubdetector::HGCalEETrigger)) {
HGCalTriggerDetId(id).subdet() == HGCalTriggerSubdetector::HGCalEETrigger) ||
(id.det() == DetId::Forward && id.subdetId() == ForwardSubdetector::HFNose && HFNoseDetId(id).isEE()) ||
(id.det() == DetId::HGCalTrigger &&
HGCalTriggerDetId(id).subdet() == HGCalTriggerSubdetector::HFNoseTrigger &&
HFNoseTriggerDetId(id).isEE())) {
pt_em += id_constituent.second->pt() * fraction;
} else if ((id.det() == DetId::Forward && id.subdetId() == HGCHEF) ||
(id.det() == DetId::Hcal && id.subdetId() == HcalEndcap) || (id.det() == DetId::HGCalHSi) ||
(id.det() == DetId::HGCalHSc) ||
(id.det() == DetId::HGCalTrigger &&
HGCalTriggerDetId(id).subdet() == HGCalTriggerSubdetector::HGCalHSiTrigger)) {
HGCalTriggerDetId(id).subdet() == HGCalTriggerSubdetector::HGCalHSiTrigger) ||
(id.det() == DetId::Forward && id.subdetId() == ForwardSubdetector::HFNose &&
HFNoseDetId(id).isHE()) ||
(id.det() == DetId::HGCalTrigger &&
HGCalTriggerDetId(id).subdet() == HGCalTriggerSubdetector::HFNoseTrigger &&
HFNoseTriggerDetId(id).isHSilicon())) {
pt_had += id_constituent.second->pt() * fraction;
}
}
Expand Down
9 changes: 5 additions & 4 deletions Fireworks/Calo/plugins/FWL1THGCalProxyTemplate.cc
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
#include "Fireworks/Core/interface/FWSimpleProxyBuilderTemplate.h"
// #include "Fireworks/Calo/interface/FWHeatmapProxyBuilderTemplate.h"
#include "Fireworks/Core/interface/FWProxyBuilderConfiguration.h"
#include "Fireworks/Core/interface/FWEventItem.h"
#include "Fireworks/Core/interface/FWProxyBuilderConfiguration.h"

#include "DataFormats/HcalDetId/interface/HcalDetId.h"
#include "DataFormats/ForwardDetId/interface/HGCalTriggerDetId.h"
#include "DataFormats/ForwardDetId/interface/HGCScintillatorDetId.h"
#include "DataFormats/ForwardDetId/interface/HGCSiliconDetId.h"
#include "DataFormats/ForwardDetId/interface/HGCalTriggerDetId.h"
#include "DataFormats/HcalDetId/interface/HcalDetId.h"

template <typename T>
class FWL1THGCalProxyTemplate : public FWSimpleProxyBuilderTemplate<T> {
Expand Down Expand Up @@ -69,4 +70,4 @@ class FWL1THGCalProxyTemplate : public FWSimpleProxyBuilderTemplate<T> {
}
return cell_det_ids;
}
};
};
9 changes: 6 additions & 3 deletions L1Trigger/L1THGCal/interface/HGCalTriggerCellCalibration.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@
#define __L1Trigger_L1THGCal_HGCalTriggerCellCalibration_h__

#include <cstdint>
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/Framework/interface/ESHandle.h"
#include "DataFormats/Common/interface/Handle.h"
#include "FWCore/Framework/interface/ESHandle.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "Geometry/HGCalCommonData/interface/HGCalDDDConstants.h"
#include "Geometry/HGCalGeometry/interface/HGCalGeometry.h"
#include "Geometry/Records/interface/IdealGeometryRecord.h"
#include "Geometry/HGCalCommonData/interface/HGCalDDDConstants.h"

#include "DataFormats/L1THGCal/interface/HGCalTriggerCell.h"
#include "L1Trigger/L1THGCal/interface/HGCalTriggerTools.h"
Expand All @@ -25,8 +25,11 @@ class HGCalTriggerCellCalibration {
double LSB_silicon_fC_;
double LSB_scintillator_MIP_;
double fCperMIP_;
std::vector<double> fCperMIPnose_;
double thickCorr_;
std::vector<double> thickCorrNose_;
std::vector<double> dEdX_weights_;
std::vector<double> dEdX_weights_Nose_;

HGCalTriggerTools triggerTools_;
};
Expand Down
22 changes: 19 additions & 3 deletions L1Trigger/L1THGCal/interface/HGCalTriggerGeometryBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@
#define __L1Trigger_L1THGCal_HGCalTriggerGeometryBase_h__

#include <iostream>
#include <unordered_set>
#include <unordered_map>
#include <unordered_set>

#include "DataFormats/GeometryVector/interface/GlobalPoint.h"

#include "FWCore/ParameterSet/interface/ParameterSet.h"

#include "Geometry/HGCalGeometry/interface/HGCalGeometry.h"
#include "Geometry/CaloTopology/interface/HGCalTopology.h"
#include "Geometry/CaloGeometry/interface/CaloGeometry.h"
#include "Geometry/CaloTopology/interface/HGCalTopology.h"
#include "Geometry/HGCalGeometry/interface/HGCalGeometry.h"
#include "Geometry/HcalTowerAlgo/interface/HcalGeometry.h"

// Pure virtual trigger geometry class
Expand All @@ -28,7 +28,16 @@ class HGCalTriggerGeometryBase {
const std::string& name() const { return name_; }

bool isV9Geometry() const { return !calo_geometry_; }
bool isWithNoseGeometry() const { return isNose_; }

const CaloGeometry* caloGeometry() const { return calo_geometry_; }

const HGCalGeometry* noseGeometry() const {
return (hgc_nose_geometry_
? hgc_nose_geometry_
: (static_cast<const HGCalGeometry*>(calo_geometry_->getSubdetectorGeometry(DetId::Forward, HFNose))));
}

const HGCalGeometry* eeGeometry() const {
return (hgc_ee_geometry_
? hgc_ee_geometry_
Expand All @@ -52,15 +61,19 @@ class HGCalTriggerGeometryBase {
}
return hgc_hsc_geometry_;
}
const HGCalTopology& noseTopology() const { return noseGeometry()->topology(); }
const HGCalTopology& eeTopology() const { return eeGeometry()->topology(); }
const HGCalTopology& fhTopology() const { return fhGeometry()->topology(); }
const HcalTopology& bhTopology() const { return bhGeometry()->topology(); }
const HGCalTopology& hsiTopology() const { return hsiGeometry()->topology(); }
const HGCalTopology& hscTopology() const { return hscGeometry()->topology(); }

void setWithNoseGeometry(const bool isNose) { isNose_ = isNose; }

// non-const access to the geometry class
virtual void initialize(const CaloGeometry*) = 0;
virtual void initialize(const HGCalGeometry*, const HGCalGeometry*, const HGCalGeometry*) = 0;
virtual void initialize(const HGCalGeometry*, const HGCalGeometry*, const HGCalGeometry*, const HGCalGeometry*) = 0;
virtual void reset();

// const access to the geometry class
Expand Down Expand Up @@ -93,14 +106,17 @@ class HGCalTriggerGeometryBase {
void setEEGeometry(const HGCalGeometry* geom) { hgc_ee_geometry_ = geom; }
void setHSiGeometry(const HGCalGeometry* geom) { hgc_hsi_geometry_ = geom; }
void setHScGeometry(const HGCalGeometry* geom) { hgc_hsc_geometry_ = geom; }
void setNoseGeometry(const HGCalGeometry* geom) { hgc_nose_geometry_ = geom; }

private:
const std::string name_;

bool isNose_ = false;
const CaloGeometry* calo_geometry_ = nullptr;
const HGCalGeometry* hgc_ee_geometry_ = nullptr;
const HGCalGeometry* hgc_hsi_geometry_ = nullptr;
const HGCalGeometry* hgc_hsc_geometry_ = nullptr;
const HGCalGeometry* hgc_nose_geometry_ = nullptr;
};

#include "FWCore/PluginManager/interface/PluginFactory.h"
Expand Down
9 changes: 6 additions & 3 deletions L1Trigger/L1THGCal/interface/HGCalTriggerTools.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@
#include "DataFormats/L1Trigger/interface/BXVector.h"

#include "DataFormats/DetId/interface/DetId.h"
#include "DataFormats/GeometryVector/interface/GlobalPoint.h"
#include "DataFormats/ForwardDetId/interface/ForwardSubdetector.h"
#include "DataFormats/GeometryVector/interface/GlobalPoint.h"
#include "Geometry/HGCalGeometry/interface/HGCalGeometry.h"
#include "Geometry/HcalTowerAlgo/interface/HcalGeometry.h"
#include "L1Trigger/L1THGCal/interface/HGCalTriggerGeometryBase.h"
Expand All @@ -31,7 +31,7 @@ namespace edm {

class HGCalTriggerTools {
public:
HGCalTriggerTools() : geom_(nullptr), eeLayers_(0), fhLayers_(0), bhLayers_(0), totalLayers_(0) {}
HGCalTriggerTools() : geom_(nullptr), eeLayers_(0), fhLayers_(0), bhLayers_(0), noseLayers_(0), totalLayers_(0) {}
~HGCalTriggerTools() {}

void eventSetup(const edm::EventSetup&);
Expand All @@ -44,6 +44,7 @@ class HGCalTriggerTools {
bool isHad(const DetId& id) const { return !isEm(id); }
bool isSilicon(const DetId&) const;
bool isScintillator(const DetId& id) const { return !isSilicon(id); }
bool isNose(const DetId&) const;
int zside(const DetId&) const;
// tc argument is needed because of the impossibility
// to know whether the ID is a TC or a sensor cell
Expand All @@ -53,6 +54,7 @@ class HGCalTriggerTools {
unsigned lastLayerEE() const { return eeLayers_; }
unsigned lastLayerFH() const { return eeLayers_ + fhLayers_; }
unsigned lastLayerBH() const { return totalLayers_; }
unsigned lastLayerNose() const { return noseLayers_; }

// 4-vector helper functions using GlobalPoint
float getEta(const GlobalPoint& position, const float& vertex_z = 0.) const;
Expand All @@ -72,7 +74,7 @@ class HGCalTriggerTools {
template <typename T>
std::vector<T> bxVectorToVector(const BXVector<T>& inputBXVector) {
std::vector<T> outputVector;
//loop over collection for a given bx and put the objects into a std::vector
// loop over collection for a given bx and put the objects into a std::vector
outputVector.insert(outputVector.end(), inputBXVector.begin(0), inputBXVector.end(0));
return outputVector;
}
Expand All @@ -88,6 +90,7 @@ class HGCalTriggerTools {
unsigned eeLayers_;
unsigned fhLayers_;
unsigned bhLayers_;
unsigned noseLayers_;
unsigned totalLayers_;

int sensorCellThicknessV8(const DetId& id) const;
Expand Down
9 changes: 5 additions & 4 deletions L1Trigger/L1THGCal/interface/backend/HGCalHistoSeedingImpl.h
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
#ifndef __L1Trigger_L1THGCal_HGCalHistoSeedingImpl_h__
#define __L1Trigger_L1THGCal_HGCalHistoSeedingImpl_h__

#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "DataFormats/L1THGCal/interface/HGCalCluster.h"
#include "DataFormats/L1THGCal/interface/HGCalMulticluster.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"

#include "L1Trigger/L1THGCal/interface/HGCalTriggerGeometryBase.h"
#include "L1Trigger/L1THGCal/interface/backend/HGCalShowerShape.h"
#include "L1Trigger/L1THGCal/interface/HGCalTriggerTools.h"
#include "L1Trigger/L1THGCal/interface/backend/HGCalShowerShape.h"
#include "L1Trigger/L1THGCal/interface/backend/HGCalTriggerClusterIdentificationBase.h"

class HGCalHistoSeedingImpl {
Expand Down Expand Up @@ -159,8 +159,9 @@ class HGCalHistoSeedingImpl {
Navigator navigator_;

static constexpr unsigned neighbour_weights_size_ = 9;
static constexpr double kROverZMin_ = 0.076;
static constexpr double kROverZMax_ = 0.58;
const double kROverZMin_ = 0.076;
const double kROverZMax_ = 0.58;

static constexpr double kXYMax_ = 0.6;
};

Expand Down
24 changes: 18 additions & 6 deletions L1Trigger/L1THGCal/plugins/HGCalTriggerGeometryESProducer.cc
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@

#include <memory>

#include "FWCore/Framework/interface/ModuleFactory.h"
#include "FWCore/Framework/interface/ESProducer.h"
#include "FWCore/Framework/interface/ESProducts.h"
#include "FWCore/Framework/interface/ModuleFactory.h"

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

Expand All @@ -25,6 +25,7 @@ class HGCalTriggerGeometryESProducer : public edm::ESProducer {
edm::ESGetToken<HGCalGeometry, IdealGeometryRecord> ee_geometry_token_;
edm::ESGetToken<HGCalGeometry, IdealGeometryRecord> hsi_geometry_token_;
edm::ESGetToken<HGCalGeometry, IdealGeometryRecord> hsc_geometry_token_;
edm::ESGetToken<HGCalGeometry, IdealGeometryRecord> nose_geometry_token_;
bool isV9Geometry_;
};

Expand All @@ -36,7 +37,8 @@ HGCalTriggerGeometryESProducer::HGCalTriggerGeometryESProducer(const edm::Parame
if (isV9Geometry_) {
cc.setConsumes(ee_geometry_token_, edm::ESInputTag{"", "HGCalEESensitive"})
.setConsumes(hsi_geometry_token_, edm::ESInputTag{"", "HGCalHESiliconSensitive"})
.setConsumes(hsc_geometry_token_, edm::ESInputTag{"", "HGCalHEScintillatorSensitive"});
.setConsumes(hsc_geometry_token_, edm::ESInputTag{"", "HGCalHEScintillatorSensitive"})
.setConsumes(nose_geometry_token_, edm::ESInputTag{"", "HGCalHFNoseSensitive"});
} else {
cc.setConsumes(calo_geometry_token_);
}
Expand All @@ -48,12 +50,22 @@ HGCalTriggerGeometryESProducer::~HGCalTriggerGeometryESProducer() {
}

HGCalTriggerGeometryESProducer::ReturnType HGCalTriggerGeometryESProducer::produce(const CaloGeometryRecord& iRecord) {
//using namespace edm::es;
// using namespace edm::es;
ReturnType geometry(HGCalTriggerGeometryFactory::get()->create(geometry_name_, geometry_config_));
if (isV9Geometry_) {
// Initialize trigger geometry for V9 HGCAL geometry
geometry->initialize(
&iRecord.get(ee_geometry_token_), &iRecord.get(hsi_geometry_token_), &iRecord.get(hsc_geometry_token_));

if (iRecord.getHandle(nose_geometry_token_)) {
geometry->setWithNoseGeometry(true);
geometry->initialize(&iRecord.get(ee_geometry_token_),
&iRecord.get(hsi_geometry_token_),
&iRecord.get(hsc_geometry_token_),
&iRecord.get(nose_geometry_token_));
} else {
geometry->initialize(
&iRecord.get(ee_geometry_token_), &iRecord.get(hsi_geometry_token_), &iRecord.get(hsc_geometry_token_));
}

} else {
// Initialize trigger geometry for V7/V8 HGCAL geometry
const auto& calo_geometry = iRecord.get(calo_geometry_token_);
Expand All @@ -68,5 +80,5 @@ HGCalTriggerGeometryESProducer::ReturnType HGCalTriggerGeometryESProducer::produ
return geometry;
}

//define this as a plug-in
// define this as a plug-in
DEFINE_FWK_EVENTSETUP_MODULE(HGCalTriggerGeometryESProducer);
19 changes: 14 additions & 5 deletions L1Trigger/L1THGCal/plugins/HGCalVFEProducer.cc
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
#include "FWCore/Framework/interface/Frameworkfwd.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/Framework/interface/stream/EDProducer.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"

#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/MakerMacros.h"

#include "DataFormats/HGCDigi/interface/HGCDigiCollections.h"
#include "DataFormats/L1THGCal/interface/HGCalTriggerCell.h"
#include "DataFormats/L1THGCal/interface/HGCalTriggerSums.h"
#include "DataFormats/HGCDigi/interface/HGCDigiCollections.h"

#include "Geometry/Records/interface/CaloGeometryRecord.h"
#include "L1Trigger/L1THGCal/interface/HGCalTriggerGeometryBase.h"
Expand All @@ -26,7 +26,7 @@ class HGCalVFEProducer : public edm::stream::EDProducer<> {

private:
// inputs
edm::EDGetToken inputee_, inputfh_, inputbh_;
edm::EDGetToken inputee_, inputfh_, inputbh_, inputnose_;
edm::ESHandle<HGCalTriggerGeometryBase> triggerGeometry_;

std::unique_ptr<HGCalVFEProcessorBase> vfeProcess_;
Expand All @@ -37,8 +37,9 @@ DEFINE_FWK_MODULE(HGCalVFEProducer);
HGCalVFEProducer::HGCalVFEProducer(const edm::ParameterSet& conf)
: inputee_(consumes<HGCalDigiCollection>(conf.getParameter<edm::InputTag>("eeDigis"))),
inputfh_(consumes<HGCalDigiCollection>(conf.getParameter<edm::InputTag>("fhDigis"))),
inputbh_(consumes<HGCalDigiCollection>(conf.getParameter<edm::InputTag>("bhDigis"))) {
//setup VFE parameters
inputbh_(consumes<HGCalDigiCollection>(conf.getParameter<edm::InputTag>("bhDigis"))),
inputnose_(consumes<HGCalDigiCollection>(conf.getParameter<edm::InputTag>("noseDigis"))) {
// setup VFE parameters
const edm::ParameterSet& vfeParamConfig = conf.getParameterSet("ProcessorParameters");
const std::string& vfeProcessorName = vfeParamConfig.getParameter<std::string>("ProcessorName");
vfeProcess_ = std::unique_ptr<HGCalVFEProcessorBase>{
Expand Down Expand Up @@ -76,6 +77,14 @@ void HGCalVFEProducer::produce(edm::Event& e, const edm::EventSetup& es) {
vfeProcess_->run(fh_digis, *vfe_trigcell_output, es);
vfeProcess_->run(bh_digis, *vfe_trigcell_output, es);

edm::Handle<HGCalDigiCollection> nose_digis_h;
e.getByToken(inputnose_, nose_digis_h);

if (nose_digis_h.isValid()) {
const HGCalDigiCollection& nose_digis = *nose_digis_h;
vfeProcess_->run(nose_digis, *vfe_trigcell_output, es);
}

// Put in the event
e.put(std::move(vfe_trigcell_output), vfeProcess_->name());
// At the moment the HGCalTriggerSumsBxCollection is empty
Expand Down
Loading

0 comments on commit d00974e

Please sign in to comment.