Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[HGCal] Updating HGCalValidator with SimHits, Digis, RecHits and MultiClusters #27337

Merged
merged 45 commits into from Jun 27, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
09fe2a3
Started with reading multiclusters from the event.
apsallid Mar 12, 2019
038c759
making a first skeleton for multiclusters
apsallid Mar 12, 2019
3c75acc
some first steps
apsallid Mar 12, 2019
d565d38
Adding multiclusters2caloparticles
apsallid Mar 13, 2019
6fbf722
Adding multicluster to the post processor step
apsallid Mar 20, 2019
f070aa5
multicluster plots in the html output step
apsallid Mar 20, 2019
3d191a6
Adding cellAssosiation per multicluster, some comments and handling u…
apsallid Mar 23, 2019
5c13679
Adding cellAssociation per multicluster plots and energy vs score plots
apsallid Mar 24, 2019
b06b059
More histograms and plots to monitor multiclusters
apsallid Mar 24, 2019
da2b6cf
overwriting layer info from DQM since it is not there yet
apsallid May 9, 2019
e4cf498
correcting a bug in find
apsallid May 26, 2019
095b728
Making layclusters default for plots
apsallid Jun 7, 2019
36fbdd4
Adding labels, plot and correcting other plots
apsallid Jun 8, 2019
6aee7e1
Adding multiplicity plots
apsallid Jun 9, 2019
7a4d627
splitting multiplicity per layer plot in z- and z+
apsallid Jun 9, 2019
7114390
WIP on validation
rovere Jun 6, 2019
2f18bab
Fix Eff/Dup/Fake/Merge plots
rovere Jun 13, 2019
3e25d6f
Fix shared plots folder conflict
rovere Jun 13, 2019
9281c54
Use stricter association for 2DLC validation
rovere Jun 13, 2019
cba7b30
Fix same bug in CP scoring for Multiclusters
rovere Jun 13, 2019
4fd2a6e
Relax association threshold for Multicluters
rovere Jun 14, 2019
cc9496b
Extend fractions of shared energy above 1
rovere Jun 18, 2019
e13048d
Improve 2D validation plots
rovere Jun 18, 2019
f2fb9eb
Add energy weights to sharedEnergy plots
rovere Jun 21, 2019
8530fc2
Improve plotting
rovere Jun 24, 2019
89e9fed
add option --collection to seperate hit plots from layercluster plots
tmengke Jun 12, 2019
e919493
added sim/digis/reco plots
tmengke Jun 12, 2019
fb22b1e
change the collection options
tmengke Jun 17, 2019
bef702e
update the plots name conventions and the 2d occupancy plots column
tmengke Jun 17, 2019
43a9a7c
remove trailing space
tmengke Jun 17, 2019
53089aa
update the help description
tmengke Jun 17, 2019
745de26
fix 'html-validation-name' default values
tmengke Jun 17, 2019
5aa8032
fix DigiOccupancy layer number
tmengke Jun 17, 2019
aede136
fix y axis for 2d plots and change TOA/TOT to log scale
tmengke Jun 18, 2019
7b5db32
remove unused print
tmengke Jun 21, 2019
60b6b3d
change layer number title
tmengke Jun 21, 2019
2cee3c8
adjust 2d plots margin
tmengke Jun 21, 2019
e1bc307
add leading zero to SimHit layer number
tmengke Jun 21, 2019
e3f22a5
add leading zero to Digi layer number
tmengke Jun 21, 2019
dc14ebc
add leading zero to RecHit layer number
tmengke Jun 21, 2019
7598cdd
add leading zero to hit layer number
tmengke Jun 21, 2019
7f196ac
adding multiclusters to the collection option in the basic plotting s…
apsallid Jun 25, 2019
340d502
correcting some plots two columns that should be one
apsallid Jun 25, 2019
c85a05c
removing couts
apsallid Jun 25, 2019
a0a3995
code checks
apsallid Jun 25, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
12 changes: 8 additions & 4 deletions Validation/HGCalValidation/interface/HGCalValidator.h
Expand Up @@ -16,6 +16,7 @@
#include "RecoLocalCalo/HGCalRecAlgos/interface/RecHitTools.h"
#include "DataFormats/ParticleFlowReco/interface/PFCluster.h"
#include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h"
#include "DataFormats/ParticleFlowReco/interface/HGCalMultiCluster.h"
#include "SimDataFormats/CaloAnalysis/interface/CaloParticle.h"
#include "SimDataFormats/CaloAnalysis/interface/SimCluster.h"
#include "SimDataFormats/Vertex/interface/SimVertex.h"
Expand Down Expand Up @@ -58,12 +59,15 @@ class HGCalValidator : public DQMGlobalEDAnalyzer<HGCalValidatorHistograms> {
const bool SaveGeneralInfo_;
const bool doCaloParticlePlots_;
const bool dolayerclustersPlots_;
const bool domulticlustersPlots_;
const edm::FileInPath cummatbudinxo_;

std::vector<edm::EDGetTokenT<reco::CaloClusterCollection> > labelToken;
edm::EDGetTokenT<std::vector<CaloParticle> > label_cp_effic;
edm::EDGetTokenT<std::vector<CaloParticle> > label_cp_fake;
edm::EDGetTokenT<std::vector<SimVertex> > simVertices_;
std::vector<edm::EDGetTokenT<reco::CaloClusterCollection>> labelToken;
edm::EDGetTokenT<reco::CaloClusterCollection> layerclusters_;
edm::EDGetTokenT<std::vector<reco::HGCalMultiCluster>> multiClusters_;
edm::EDGetTokenT<std::vector<CaloParticle>> label_cp_effic;
edm::EDGetTokenT<std::vector<CaloParticle>> label_cp_fake;
edm::EDGetTokenT<std::vector<SimVertex>> simVertices_;
edm::EDGetTokenT<HGCRecHitCollection> recHitsEE_;
edm::EDGetTokenT<HGCRecHitCollection> recHitsFH_;
edm::EDGetTokenT<HGCRecHitCollection> recHitsBH_;
Expand Down
104 changes: 101 additions & 3 deletions Validation/HGCalValidation/interface/HGVHistoProducerAlgo.h
Expand Up @@ -17,6 +17,7 @@
#include "DataFormats/HGCRecHit/interface/HGCRecHitCollections.h"
#include "DataFormats/ForwardDetId/interface/HGCalDetId.h"
#include "DataFormats/HGCRecHit/interface/HGCRecHit.h"
#include "DataFormats/ParticleFlowReco/interface/HGCalMultiCluster.h"

#include "RecoLocalCalo/HGCalRecAlgos/interface/RecHitTools.h"
#include "SimDataFormats/CaloAnalysis/interface/CaloParticle.h"
Expand Down Expand Up @@ -90,6 +91,66 @@ struct HGVHistoProducerAlgoHistograms {
std::unordered_map<int, ConcurrentMonitorElement> h_caloparticle_energy;
std::unordered_map<int, ConcurrentMonitorElement> h_caloparticle_pt;
std::unordered_map<int, ConcurrentMonitorElement> h_caloparticle_phi;

//For multiclusters
ConcurrentMonitorElement h_score_multicl2caloparticle;
ConcurrentMonitorElement h_score_caloparticle2multicl;
ConcurrentMonitorElement h_energy_vs_score_multicl2caloparticle;
ConcurrentMonitorElement h_energy_vs_score_caloparticle2multicl;
//contiguous multiclusters
ConcurrentMonitorElement h_score_contimulticl2caloparticle;
ConcurrentMonitorElement h_score_caloparticle2contimulticl;
ConcurrentMonitorElement h_energy_vs_score_contimulticl2caloparticle;
ConcurrentMonitorElement h_energy_vs_score_caloparticle2contimulticl;
//non contiguous multiclusters
ConcurrentMonitorElement h_score_noncontimulticl2caloparticle;
ConcurrentMonitorElement h_score_caloparticle2noncontimulticl;
ConcurrentMonitorElement h_energy_vs_score_noncontimulticl2caloparticle;
ConcurrentMonitorElement h_energy_vs_score_caloparticle2noncontimulticl;
//Back to all multiclusters
ConcurrentMonitorElement h_num_multicl_eta;
ConcurrentMonitorElement h_num_multicl_phi;
ConcurrentMonitorElement h_numMerge_multicl_eta;
ConcurrentMonitorElement h_numMerge_multicl_phi;
ConcurrentMonitorElement h_sharedenergy_multicl2caloparticle;
ConcurrentMonitorElement h_sharedenergy_caloparticle2multicl;
ConcurrentMonitorElement h_sharedenergy_multicl2caloparticle_vs_eta;
ConcurrentMonitorElement h_sharedenergy_multicl2caloparticle_vs_phi;
ConcurrentMonitorElement h_sharedenergy_caloparticle2multicl_vs_eta;
ConcurrentMonitorElement h_sharedenergy_caloparticle2multicl_vs_phi;
ConcurrentMonitorElement h_denom_multicl_eta;
ConcurrentMonitorElement h_denom_multicl_phi;
ConcurrentMonitorElement h_num_caloparticle_eta;
ConcurrentMonitorElement h_num_caloparticle_phi;
ConcurrentMonitorElement h_numDup_caloparticle_eta;
ConcurrentMonitorElement h_numDup_caloparticle_phi;
ConcurrentMonitorElement h_denom_caloparticle_eta;
ConcurrentMonitorElement h_denom_caloparticle_phi;
ConcurrentMonitorElement h_cellAssociation;
ConcurrentMonitorElement h_multiclusternum;
ConcurrentMonitorElement h_contmulticlusternum;
ConcurrentMonitorElement h_noncontmulticlusternum;
ConcurrentMonitorElement h_clusternum_in_multicluster;
std::unordered_map<int, ConcurrentMonitorElement> h_clusternum_in_multicluster_perlayer;
ConcurrentMonitorElement h_multiplicityOfLCinMCL;
ConcurrentMonitorElement h_multiplicity_numberOfEventsHistogram;
ConcurrentMonitorElement h_multiplicity_zminus_numberOfEventsHistogram;
ConcurrentMonitorElement h_multiplicity_zplus_numberOfEventsHistogram;
ConcurrentMonitorElement h_multiplicityOfLCinMCL_vs_layercluster;
ConcurrentMonitorElement h_multiplicityOfLCinMCL_vs_layercluster_zminus;
ConcurrentMonitorElement h_multiplicityOfLCinMCL_vs_layercluster_zplus;
ConcurrentMonitorElement h_multiplicityOfLCinMCL_vs_layerclusterenergy;
ConcurrentMonitorElement h_clusternum_in_multicluster_vs_layer;
ConcurrentMonitorElement h_multicluster_pt;
ConcurrentMonitorElement h_multicluster_eta;
ConcurrentMonitorElement h_multicluster_phi;
ConcurrentMonitorElement h_multicluster_energy;
ConcurrentMonitorElement h_multicluster_x;
ConcurrentMonitorElement h_multicluster_y;
ConcurrentMonitorElement h_multicluster_z;
ConcurrentMonitorElement h_multicluster_firstlayer;
ConcurrentMonitorElement h_multicluster_lastlayer;
ConcurrentMonitorElement h_multicluster_layersnum;
};

using Density = hgcal_clustering::Density;
Expand All @@ -109,19 +170,24 @@ class HGVHistoProducerAlgo {
unsigned layers,
std::vector<int> thicknesses,
std::string pathtomatbudfile);
void bookMultiClusterHistos(DQMStore::ConcurrentBooker& ibook, Histograms& histograms, unsigned layers);
void layerClusters_to_CaloParticles(const Histograms& histograms,
const reco::CaloClusterCollection& clusters,
std::vector<CaloParticle> const& cP,
std::map<DetId, const HGCRecHit*> const&,
unsigned layers) const;
void multiClusters_to_CaloParticles(const Histograms& histograms,
const std::vector<reco::HGCalMultiCluster>& multiClusters,
std::vector<CaloParticle> const& cP,
std::map<DetId, const HGCRecHit*> const&,
unsigned layers,
std::vector<bool> contimulti) const;
void fill_info_histos(const Histograms& histograms, unsigned layers) const;
void fill_caloparticle_histos(const Histograms& histograms,
int pdgid,
const CaloParticle& caloparticle,
std::vector<SimVertex> const& simVertices) const;

void fill_cluster_histos(const Histograms& histograms, int count, const reco::CaloCluster& cluster) const;

void fill_generic_cluster_histos(const Histograms& histograms,
int count,
const reco::CaloClusterCollection& clusters,
Expand All @@ -131,7 +197,12 @@ class HGVHistoProducerAlgo {
std::map<double, double> cummatbudg,
unsigned layers,
std::vector<int> thicknesses) const;

void fill_multi_cluster_histos(const Histograms& histograms,
int count,
const std::vector<reco::HGCalMultiCluster>& multiClusters,
std::vector<CaloParticle> const& cP,
std::map<DetId, const HGCRecHit*> const&,
unsigned layers) const;
double distance2(const double x1, const double y1, const double x2, const double y2) const;
double distance(const double x1, const double y1, const double x2, const double y2) const;

Expand All @@ -145,6 +216,13 @@ class HGVHistoProducerAlgo {
float fraction;
};

struct detIdInfoInMultiCluster {
bool operator==(const detIdInfoInMultiCluster& o) const { return multiclusterId == o.multiclusterId; };
unsigned int multiclusterId;
unsigned int clusterId;
float fraction;
};

struct caloParticleOnLayer {
unsigned int caloParticleId;
float energy = 0;
Expand Down Expand Up @@ -183,6 +261,8 @@ class HGVHistoProducerAlgo {
int nintScore_;
double minSharedEneFrac_, maxSharedEneFrac_;
int nintSharedEneFrac_;
double minMCLSharedEneFrac_, maxMCLSharedEneFrac_;
int nintMCLSharedEneFrac_;
double minTotNClsperthick_, maxTotNClsperthick_;
int nintTotNClsperthick_;
double minTotNcellsperthickperlayer_, maxTotNcellsperthickperlayer_;
Expand All @@ -201,6 +281,24 @@ class HGVHistoProducerAlgo {
int nintClEneperthickperlayer_;
double minCellsEneDensperthick_, maxCellsEneDensperthick_;
int nintCellsEneDensperthick_;
double minTotNMCLs_, maxTotNMCLs_;
int nintTotNMCLs_;
double minTotNClsinMCLs_, maxTotNClsinMCLs_;
int nintTotNClsinMCLs_;
double minTotNClsinMCLsperlayer_, maxTotNClsinMCLsperlayer_;
int nintTotNClsinMCLsperlayer_;
double minMplofLCs_, maxMplofLCs_;
int nintMplofLCs_;
double minSizeCLsinMCLs_, maxSizeCLsinMCLs_;
int nintSizeCLsinMCLs_;
double minClEnepermultiplicity_, maxClEnepermultiplicity_;
int nintClEnepermultiplicity_;
double minX_, maxX_;
int nintX_;
double minY_, maxY_;
int nintY_;
double minZ_, maxZ_;
int nintZ_;
};

#endif
16 changes: 10 additions & 6 deletions Validation/HGCalValidation/plugins/HGCalDigiValidation.cc
Expand Up @@ -384,33 +384,37 @@ void HGCalDigiValidation::bookHistograms(DQMStore::IBooker& iB, edm::Run const&,
std::ostringstream histoname;
for (int il = 0; il < layers_; ++il) {
int ilayer = firstLayer_ + il;
auto istr1 = std::to_string(ilayer);
while (istr1.size() < 2) {
istr1.insert(0, "0");
}
histoname.str("");
histoname << "TOA_"
<< "layer_" << ilayer;
<< "layer_" << istr1;
TOA_.push_back(iB.book1D(histoname.str().c_str(), "toa_", 1024, 0, 1024));

histoname.str("");
histoname << "ADC_"
<< "layer_" << ilayer;
<< "layer_" << istr1;
ADC_.push_back(iB.book1D(histoname.str().c_str(), "ADCDigiOccupancy", 1024, 0, 1024));

histoname.str("");
histoname << "TOT_"
<< "layer_" << ilayer;
<< "layer_" << istr1;
TOT_.push_back(iB.book1D(histoname.str().c_str(), "TOTDigiOccupancy", 4096, 0, 4096));

histoname.str("");
histoname << "DigiOccupancy_XY_"
<< "layer_" << ilayer;
<< "layer_" << istr1;
DigiOccupancy_XY_.push_back(iB.book2D(histoname.str().c_str(), "DigiOccupancy", 50, -500, 500, 50, -500, 500));

histoname.str("");
histoname << "DigiOccupancy_Plus_"
<< "layer_" << ilayer;
<< "layer_" << istr1;
DigiOccupancy_Plus_.push_back(iB.book1D(histoname.str().c_str(), "DigiOccupancy +z", 100, 0, 1000));
histoname.str("");
histoname << "DigiOccupancy_Minus_"
<< "layer_" << ilayer;
<< "layer_" << istr1;
DigiOccupancy_Minus_.push_back(iB.book1D(histoname.str().c_str(), "DigiOccupancy -z", 100, 0, 1000));
}

Expand Down
14 changes: 9 additions & 5 deletions Validation/HGCalValidation/plugins/HGCalRecHitValidation.cc
Expand Up @@ -294,25 +294,29 @@ void HGCalRecHitValidation::bookHistograms(DQMStore::IBooker& iB, edm::Run const
std::ostringstream histoname;
for (unsigned int il = 0; il < layers_; ++il) {
int ilayer = firstLayer_ + (int)(il);
auto istr1 = std::to_string(ilayer);
while (istr1.size() < 2) {
istr1.insert(0, "0");
}
histoname.str("");
histoname << "HitOccupancy_Plus_layer_" << ilayer;
histoname << "HitOccupancy_Plus_layer_" << istr1;
HitOccupancy_Plus_.push_back(iB.book1D(histoname.str().c_str(), "RecHitOccupancy_Plus", 100, 0, 10000));
histoname.str("");
histoname << "HitOccupancy_Minus_layer_" << ilayer;
histoname << "HitOccupancy_Minus_layer_" << istr1;
HitOccupancy_Minus_.push_back(iB.book1D(histoname.str().c_str(), "RecHitOccupancy_Minus", 100, 0, 10000));

histoname.str("");
histoname << "EtaPhi_Plus_"
<< "layer_" << ilayer;
<< "layer_" << istr1;
EtaPhi_Plus_.push_back(iB.book2D(histoname.str().c_str(), "Occupancy", 31, 1.45, 3.0, 72, -CLHEP::pi, CLHEP::pi));
histoname.str("");
histoname << "EtaPhi_Minus_"
<< "layer_" << ilayer;
<< "layer_" << istr1;
EtaPhi_Minus_.push_back(
iB.book2D(histoname.str().c_str(), "Occupancy", 31, -3.0, -1.45, 72, -CLHEP::pi, CLHEP::pi));

histoname.str("");
histoname << "energy_layer_" << ilayer;
histoname << "energy_layer_" << istr1;
energy_.push_back(iB.book1D(histoname.str().c_str(), "energy_", 500, 0, 1));
} //loop over layers ends here

Expand Down
14 changes: 9 additions & 5 deletions Validation/HGCalValidation/plugins/HGCalSimHitValidation.cc
Expand Up @@ -438,26 +438,30 @@ void HGCalSimHitValidation::bookHistograms(DQMStore::IBooker& iB, edm::Run const
std::ostringstream histoname;
for (unsigned int il = 0; il < layers_; ++il) {
int ilayer = firstLayer_ + static_cast<int>(il);
auto istr1 = std::to_string(ilayer);
while (istr1.size() < 2) {
istr1.insert(0, "0");
}
histoname.str("");
histoname << "HitOccupancy_Plus_layer_" << ilayer;
histoname << "HitOccupancy_Plus_layer_" << istr1;
HitOccupancy_Plus_.push_back(iB.book1D(histoname.str().c_str(), "HitOccupancy_Plus", 501, -0.5, 500.5));
histoname.str("");
histoname << "HitOccupancy_Minus_layer_" << ilayer;
histoname << "HitOccupancy_Minus_layer_" << istr1;
HitOccupancy_Minus_.push_back(iB.book1D(histoname.str().c_str(), "HitOccupancy_Minus", 501, -0.5, 500.5));

histoname.str("");
histoname << "EtaPhi_Plus_"
<< "layer_" << ilayer;
<< "layer_" << istr1;
EtaPhi_Plus_.push_back(iB.book2D(histoname.str().c_str(), "Occupancy", 31, 1.45, 3.0, 72, -CLHEP::pi, CLHEP::pi));
histoname.str("");
histoname << "EtaPhi_Minus_"
<< "layer_" << ilayer;
<< "layer_" << istr1;
EtaPhi_Minus_.push_back(
iB.book2D(histoname.str().c_str(), "Occupancy", 31, -3.0, -1.45, 72, -CLHEP::pi, CLHEP::pi));

for (unsigned int itimeslice = 0; itimeslice < nTimes_; itimeslice++) {
histoname.str("");
histoname << "energy_time_" << itimeslice << "_layer_" << ilayer;
histoname << "energy_time_" << itimeslice << "_layer_" << istr1;
energy_[itimeslice].push_back(iB.book1D(histoname.str().c_str(), "energy_", 100, 0, 0.1));
}
}
Expand Down