53 void fillWithRecHits(std::unordered_map<DetId, const HGCRecHit*>&,
DetId,
unsigned int,
float,
int&,
float&);
86 debug_(iConfig.getParameter<
int>(
"debug")),
87 filterOnEnergyAndCaloP_(iConfig.getParameter<
bool>(
"filterOnEnergyAndCaloP")) {
90 hitMap_ = consumes<std::unordered_map<DetId, const HGCRecHit*>>(hitMapInputTag);
105 eta1_ = ibooker.
book1D(
"eta1",
"eta1", 80, 0., 4.);
106 eta2_ = ibooker.
book1D(
"eta2",
"eta2", 80, 0., 4.);
111 layerEnergy_ = ibooker.
book2D(
"LayerEnergy",
"LayerEnergy", 60, 0., 60., 50, 0., 0.1);
112 layerDistance_ = ibooker.
book2D(
"LayerDistance",
"LayerDistance", 60, 0., 60., 400, -400., 400.);
113 etaPhi_ = ibooker.
book2D(
"EtaPhi",
"EtaPhi", 800, -4., 4., 800, -4., 4.);
114 deltaEtaPhi_ = ibooker.
book2D(
"DeltaEtaPhi",
"DeltaEtaPhi", 100, -0.5, 0.5, 100, -0.5, 0.5);
168 const std::vector<CaloParticle>&
caloParticles = *caloParticleHandle;
172 const auto hitmap = *hitMapHandle;
179 auto theta1 = 2. * atan(
exp(-
eta1));
182 auto theta2 = 2. * atan(
exp(-
eta2));
191 float energy_tmp = 0.;
196 for (
const auto& it_sc : simClusterRefVector) {
198 const std::vector<std::pair<uint32_t, float>>& hits_and_fractions = simCluster.
hits_and_fractions();
199 for (
const auto& it_haf : hits_and_fractions) {
200 if (hitmap.count(it_haf.first))
201 energy += hitmap.at(it_haf.first)->energy() * it_haf.second;
219 IfLogTrace(
debug_ > 0,
"HGCalShowerSeparation") <<
">>> " << simClusterRefVector.
size() << std::endl;
220 for (
const auto& it_sc : simClusterRefVector) {
222 if (simCluster.
energy() < 80 * 0.8)
226 <<
">>> SC.energy(): " << simCluster.
energy() <<
" SC.simEnergy(): " << simCluster.
simEnergy() << std::endl;
227 const std::vector<std::pair<uint32_t, float>>& hits_and_fractions = simCluster.
hits_and_fractions();
229 for (
const auto& it_haf : hits_and_fractions) {
230 if (!hitmap.count(it_haf.first))
234 float globalx = global.
x();
235 float globaly = global.y();
236 float globalz = global.z();
239 auto rho1 = globalz *
tan(theta1);
240 auto rho2 = globalz *
tan(theta2);
241 auto x1 = rho1 *
cos(phi1);
242 auto y1 = rho1 *
sin(phi1);
243 auto x2 = rho2 *
cos(phi2);
244 auto y2 = rho2 *
sin(phi2);
245 auto half_point_x = (
x1 +
x2) / 2.;
246 auto half_point_y = (
y1 +
y2) / 2.;
247 auto half_point =
sqrt((
x1 - half_point_x) * (
x1 - half_point_x) + (
y1 - half_point_y) * (
y1 - half_point_y));
249 auto dn_x = (
x2 -
x1) / d_len;
250 auto dn_y = (
y2 -
y1) / d_len;
251 auto distance = (globalx -
x1) * dn_x + (globaly -
y1) * dn_y;
254 if (hitmap.count(it_haf.first)) {
256 10. * (globaly - half_point_y),
257 hitmap.at(it_haf.first)->energy() * it_haf.second);
259 10. * (globaly - half_point_y),
260 hitmap.at(it_haf.first)->energy() * it_haf.second);
261 globalProfileOnLayer_[hitlayer]->Fill(globalx, globaly, hitmap.at(it_haf.first)->energy() * it_haf.second);
262 globalProfileOnLayer_[55]->Fill(globalx, globaly, hitmap.at(it_haf.first)->energy() * it_haf.second);
269 centers_[hitlayer]->Fill(10. * half_point_x, 10. * half_point_y);
271 <<
">>> " <<
distance <<
" " << hitlayer <<
" " << hitmap.at(it_haf.first)->energy() * it_haf.second
285 desc.add<
int>(
"debug", 1);
286 desc.add<
bool>(
"filterOnEnergyAndCaloP",
false);
289 descriptions.
add(
"hgcalShowerSeparationDefault",
desc);
MonitorElement * scEnergy_
T getParameter(std::string const &) const
bool filterOnEnergyAndCaloP_
virtual void setCurrentFolder(std::string const &fullpath)
#define IfLogTrace(cond, cat)
MonitorElement * layerEnergy_
#define DEFINE_FWK_MODULE(type)
MonitorElement * deltaEtaPhi_
MonitorElement * energy1_
const edm::ESGetToken< CaloGeometry, CaloGeometryRecord > tok_geom_
Sin< T >::type sin(const T &t)
edm::EDGetTokenT< std::unordered_map< DetId, const HGCRecHit * > > hitMap_
static constexpr int layers_
MonitorElement * energy2_
std::vector< MonitorElement * > globalProfileOnLayer_
std::string to_string(const V &value)
std::vector< MonitorElement * > idealDeltaXY_
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
std::vector< MonitorElement * > profileOnLayer_
MonitorElement * energytot_
void fillWithRecHits(std::unordered_map< DetId, const HGCRecHit *> &, DetId, unsigned int, float, int &, float &)
Monte Carlo truth information used for tracking validation.
edm::EDGetTokenT< std::vector< CaloParticle > > caloParticles_
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 bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
std::vector< MonitorElement * > distanceOnLayer_
Cos< T >::type cos(const T &t)
Tan< T >::type tan(const T &t)
Abs< T >::type abs(const T &t)
bool getData(T &iHolder) const
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
size_type size() const
Size of the RefVector.
hgcal::RecHitTools recHitTools_
MonitorElement * layerDistance_
MonitorElement * book2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, FUNC onbooking=NOOP())
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void analyze(const edm::Event &, const edm::EventSetup &) override
float energy() const
Energy. Note this is taken from the first SimTrack only.
std::vector< MonitorElement * > centers_
~HGCalShowerSeparation() override
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
std::vector< MonitorElement * > idealDistanceOnLayer_
MonitorElement * showerProfile_
HGCalShowerSeparation(const edm::ParameterSet &)