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);
125 std::string(
"GlobalProfileOnLayer_") + std::to_string(
i),
138 std::string(
"IdealDistanceOnLayer_") + std::to_string(
i),
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);