89 :
debug_(iConfig.getParameter<
int>(
"debug")),
96 recHitsFH_ = consumes<HGCRecHitCollection>(recHitsFH);
97 recHitsBH_ = consumes<HGCRecHitCollection>(recHitsBH);
112 eta1_ = ibooker.
book1D(
"eta1",
"eta1", 80, 0., 4.);
113 eta2_ = ibooker.
book1D(
"eta2",
"eta2", 80, 0., 4.);
139 std::string(
"GlobalProfileOnLayer_") + std::to_string(
i),
148 std::string(
"IdealDistanceOnLayer_") + std::to_string(
i),
176 const std::vector<CaloParticle>&
caloParticles = *caloParticleHandle;
182 const auto& rechitsEE = *recHitHandleEE;
183 const auto& rechitsFH = *recHitHandleFH;
184 const auto& rechitsBH = *recHitHandleBH;
186 std::map<DetId, const HGCRecHit*> hitmap;
187 for (
unsigned int i = 0;
i < rechitsEE.size(); ++
i) {
188 hitmap[rechitsEE[
i].detid()] = &rechitsEE[
i];
190 for (
unsigned int i = 0;
i < rechitsFH.size(); ++
i) {
191 hitmap[rechitsFH[
i].detid()] = &rechitsFH[
i];
193 for (
unsigned int i = 0;
i < rechitsBH.size(); ++
i) {
194 hitmap[rechitsBH[
i].detid()] = &rechitsBH[
i];
199 <<
"Number of caloParticles: " << caloParticles.size() << std::endl;
200 if (caloParticles.size() == 2) {
201 auto eta1 = caloParticles[0].eta();
202 auto phi1 = caloParticles[0].phi();
203 auto theta1 = 2.*atan(
exp(-eta1));
204 auto eta2 = caloParticles[1].eta();
205 auto phi2 = caloParticles[1].phi();
206 auto theta2 = 2.*atan(
exp(-eta2));
216 float energy_tmp = 0.;
217 for (
const auto& it_caloPart : caloParticles) {
220 size += simClusterRefVector.
size();
221 for (
const auto& it_sc : simClusterRefVector) {
223 const std::vector<std::pair<uint32_t, float> >& hits_and_fractions =
225 for (
const auto& it_haf : hits_and_fractions) {
226 if (hitmap.count(it_haf.first))
227 energy += hitmap[it_haf.first]->energy()*it_haf.second;
243 for (
const auto& it_caloPart : caloParticles) {
246 <<
">>> " << simClusterRefVector.
size() << std::endl;
247 for (
const auto& it_sc : simClusterRefVector) {
249 if (simCluster.
energy() < 80*0.8)
253 <<
">>> SC.energy(): " << simCluster.
energy()
254 <<
" SC.simEnergy(): " << simCluster.
simEnergy()
256 const std::vector<std::pair<uint32_t, float> >& hits_and_fractions =
259 for (
const auto& it_haf : hits_and_fractions) {
260 if (!hitmap.count(it_haf.first))
264 float globalx = global.
x();
265 float globaly = global.y();
266 float globalz = global.z();
269 auto rho1 = globalz*
tan(theta1);
270 auto rho2 = globalz*
tan(theta2);
271 auto x1 = rho1*
cos(phi1);
272 auto y1 = rho1*
sin(phi1);
273 auto x2 = rho2*
cos(phi2);
274 auto y2 = rho2*
sin(phi2);
275 auto half_point_x = (
x1+
x2)/2.;
276 auto half_point_y = (y1+y2)/2.;
277 auto half_point =
sqrt((
x1-half_point_x)*(
x1-half_point_x)+(y1-half_point_y)*(y1-half_point_y));
279 auto dn_x = (
x2-
x1)/d_len;
280 auto dn_y = (y2-y1)/d_len;
281 auto distance = (globalx-
x1)*dn_x + (globaly - y1)*dn_y;
283 auto idealDistance =
sqrt((
x1-
x2)*(
x1-
x2) + (y1-y2)*(y1-y2));
284 if (hitmap.count(it_haf.first)) {
286 10.*(globaly-half_point_y),
287 hitmap[it_haf.first]->energy()*it_haf.second);
289 10.*(globaly-half_point_y),
290 hitmap[it_haf.first]->energy()*it_haf.second);
293 hitmap[it_haf.first]->energy()*it_haf.second);
296 hitmap[it_haf.first]->energy()*it_haf.second);
303 centers_[hitlayer]->Fill(10.*half_point_x, 10.*half_point_y);
307 <<
" " << hitmap[it_haf.first]->energy()*it_haf.second
311 hitmap[it_haf.first]->energy()*it_haf.second);
324 desc.
add<
int>(
"debug", 1);
325 desc.
add<
bool>(
"filterOnEnergyAndCaloP",
false);
330 descriptions.
add(
"hgcalShowerSeparation", desc);
edm::EDGetTokenT< HGCRecHitCollection > recHitsEE_
T getParameter(std::string const &) const
MonitorElement * scEnergy_
bool filterOnEnergyAndCaloP_
edm::EDGetTokenT< HGCRecHitCollection > recHitsFH_
std::vector< std::pair< uint32_t, float > > hits_and_fractions() const
Returns list of rechit IDs and fractions for this SimCluster.
bool getByToken(EDGetToken token, Handle< PROD > &result) const
MonitorElement * layerEnergy_
#define DEFINE_FWK_MODULE(type)
MonitorElement * deltaEtaPhi_
MonitorElement * energy1_
Sin< T >::type sin(const T &t)
MonitorElement * energy2_
std::vector< MonitorElement * > globalProfileOnLayer_
#define IfLogTrace(cond, cat)
std::vector< MonitorElement * > idealDeltaXY_
std::vector< MonitorElement * > profileOnLayer_
MonitorElement * energytot_
edm::EDGetTokenT< HGCRecHitCollection > recHitsBH_
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)
MonitorElement * book1D(Args &&...args)
Tan< T >::type tan(const T &t)
Abs< T >::type abs(const T &t)
float energy() const
Energy. Note this is taken from the first SimTrack only.
ParameterDescriptionBase * add(U const &iLabel, T const &value)
float simEnergy() const
returns the accumulated sim energy in the cluster
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
void setCurrentFolder(const std::string &fullpath)
hgcal::RecHitTools recHitTools_
MonitorElement * book2D(Args &&...args)
void fillWithRecHits(std::map< DetId, const HGCRecHit * > &, DetId, unsigned int, float, int &, float &)
MonitorElement * layerDistance_
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void analyze(const edm::Event &, const edm::EventSetup &) override
std::vector< MonitorElement * > centers_
size_type size() const
Size of the RefVector.
~HGCalShowerSeparation() override
std::vector< MonitorElement * > idealDistanceOnLayer_
MonitorElement * showerProfile_
HGCalShowerSeparation(const edm::ParameterSet &)