10 #include <unordered_map> 100 particles_to_monitor_(iConfig.getParameter<
std::vector<
int> >(
"particles_to_monitor")),
101 simVertices_(consumes<
std::vector<
SimVertex>>(iConfig.getParameter<
edm::InputTag>(
"simVertices"))),
102 caloParticles_(consumes<
std::vector<
CaloParticle> >(iConfig.getParameter<
edm::InputTag>(
"caloParticles"))),
103 simPFClusters_(consumes<
std::vector<
reco::SuperCluster>>(iConfig.getParameter<
edm::InputTag>(
"simPFClusters"))),
140 const auto& rechitsEE = *recHitHandleEE;
141 const auto& rechitsFH = *recHitHandleFH;
142 const auto& rechitsBH = *recHitHandleBH;
143 std::map<DetId, const HGCRecHit*> hitmap;
144 for (
unsigned int i = 0;
i < rechitsEE.size(); ++
i) {
145 hitmap[rechitsEE[
i].detid()] = &rechitsEE[
i];
147 for (
unsigned int i = 0;
i < rechitsFH.size(); ++
i) {
148 hitmap[rechitsFH[
i].detid()] = &rechitsFH[
i];
150 for (
unsigned int i = 0;
i < rechitsBH.size(); ++
i) {
151 hitmap[rechitsBH[
i].detid()] = &rechitsBH[
i];
156 std::vector<SimVertex>
const &
simVertices = *simVerticesHandle;
160 std::vector<CaloParticle>
const &
caloParticles = *caloParticleHandle;
164 std::vector<reco::SuperCluster>
const & simPFClusters = *simPFClustersHandle;
170 for (
auto const caloParticle : caloParticles) {
171 if (caloParticle.g4Tracks()[0].eventId().event() != 0
or caloParticle.g4Tracks()[0].eventId().bunchCrossing() != 0) {
172 LogDebug(
"CaloParticleValidation") <<
"Excluding CaloParticles from event: " 173 << caloParticle.g4Tracks()[0].eventId().event()
174 <<
" with BX: " << caloParticle.g4Tracks()[0].eventId().bunchCrossing() << std::endl;
177 int id = caloParticle.pdgId();
178 if (histos.count(
id)) {
179 auto &
histo = histos.at(
id);
180 histo.eta_.fill(caloParticle.eta());
181 histo.pt_.fill(caloParticle.pt());
182 histo.energy_.fill(caloParticle.energy());
183 histo.nSimClusters_.fill(caloParticle.simClusters().size());
185 histo.eta_Zorigin_map_.fill(
186 simVertices.at(caloParticle.g4Tracks()[0].vertIndex()).
position().z(), caloParticle.eta());
189 for (
auto const sc : caloParticle.simClusters()) {
192 if (hitmap.count(h_and_f.first))
193 energy += hitmap[h_and_f.first]->energy() * h_and_f.second;
196 histo.nHitInSimClusters_.fill((
float)simHits);
197 histo.selfEnergy_.fill(energy);
198 histo.energyDifference_.fill(1.- energy/caloParticle.energy());
203 for (
auto const sc : simPFClusters) {
204 histos.at(0).simPFSuperClusterSize_.fill((
float)
sc.clustersSize());
205 histos.at(0).simPFSuperClusterEnergy_.fill(
sc.rawEnergy());
212 for (
auto const pfc : simPFCandidates) {
213 size_t type = offset + pfc.particleId();
216 histos.at(offset).pfcandidateType_.fill(type - offset);
217 auto &
histo = histos.at(type);
218 histo.pfcandidateEnergy_.fill(pfc.energy());
219 histo.pfcandidatePt_.fill(pfc.pt());
220 histo.pfcandidateEta_.fill(pfc.eta());
221 histo.pfcandidatePhi_.fill(pfc.phi());
222 histo.pfcandidateElementsInBlocks_.fill(pfc.elementsInBlocks().size());
224 auto &
histo = histos.at(offset);
225 histo.pfcandidate_vect_sum_pt_.fill(
std::sqrt(ptx_tot*ptx_tot+pty_tot*pty_tot));
237 auto &
histo = histos[particle];
238 histo.eta_ = ibook.
book1D(
"Eta",
"Eta", 80, -4., 4.);
239 histo.energy_ = ibook.
book1D(
"Energy",
"Energy", 250, 0., 500.);
240 histo.pt_ = ibook.
book1D(
"Pt",
"Pt", 100, 0., 100.);
241 histo.nSimClusters_ = ibook.
book1D(
"NSimClusters",
"NSimClusters", 100, 0., 100.);
242 histo.nHitInSimClusters_ = ibook.
book1D(
"NHitInSimClusters",
"NHitInSimClusters", 100, 0., 100.);
243 histo.selfEnergy_ = ibook.
book1D(
"SelfEnergy",
"SelfEnergy", 250, 0., 500.);
244 histo.energyDifference_ = ibook.
book1D(
"EnergyDifference",
"(Energy-SelfEnergy)/Energy", 300, -5., 1.);
245 histo.eta_Zorigin_map_ = ibook.
book2D(
"Eta vs Zorigin",
"Eta vs Zorigin", 80, -4., 4., 1100, -550., 550.);
249 histos[
offset].pfcandidateType_ = ibook.
book1D(
"PFCandidateType",
"PFCandidateType", 10, 0, 10);
250 histos[
offset].pfcandidate_vect_sum_pt_ = ibook.
book1D(
"PFCandidatePtVectSum",
"PFCandidatePtVectSum", 200, 0., 200.);
254 histo.pfcandidateEnergy_ = ibook.
book1D(
"PFCandidateEnergy",
"PFCandidateEnergy", 250, 0., 250.);
255 histo.pfcandidatePt_ = ibook.
book1D(
"PFCandidatePt",
"PFCandidatePt", 250, 0., 250.);
256 histo.pfcandidateEta_ = ibook.
book1D(
"PFCandidateEta",
"PFCandidateEta", 100, -5., 5.);
257 histo.pfcandidatePhi_ = ibook.
book1D(
"PFCandidatePhi",
"PFCandidatePhi", 100, -4., 4.);
258 histo.pfcandidateElementsInBlocks_ = ibook.
book1D(
"PFCandidateElements",
"PFCandidateElements", 20, 0., 20.);
262 histos[0].simPFSuperClusterSize_ = ibook.
book1D(
"SimPFSuperClusterSize",
"SimPFSuperClusterSize", 40, 0., 40.);
263 histos[0].simPFSuperClusterEnergy_ = ibook.
book1D(
"SimPFSuperClusterEnergy",
"SimPFSuperClusterEnergy", 250, 0., 500.);
273 desc.
add<std::vector<int> > (
"particles_to_monitor", {11, -11, 13, -13, 22, 111, 211, -211, 321, -321});
281 descriptions.
add(
"caloparticlevalidationDefault", desc);
std::unordered_map< int, Histogram_CaloParticleSingle > Histograms_CaloParticleValidation
ConcurrentMonitorElement simPFSuperClusterEnergy_
ConcurrentMonitorElement eta_Zorigin_map_
ConcurrentMonitorElement energyDifference_
edm::EDGetTokenT< HGCRecHitCollection > recHitsEE_
ConcurrentMonitorElement pfcandidatePhi_
ConcurrentMonitorElement pfcandidateElementsInBlocks_
CaloParticleValidation(const edm::ParameterSet &)
ConcurrentMonitorElement nHitInSimClusters_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
edm::EDGetTokenT< std::vector< reco::SuperCluster > > simPFClusters_
~CaloParticleValidation() override
edm::EDGetTokenT< std::vector< SimVertex > > simVertices_
#define DEFINE_FWK_MODULE(type)
ConcurrentMonitorElement pfcandidateEta_
edm::EDGetTokenT< reco::PFCandidateCollection > simPFCandidates_
void setCurrentFolder(std::string const &fullpath)
ConcurrentMonitorElement book2D(Args &&...args)
example_global void dqmAnalyze(edm::Event const &,@example_global edm::EventSetup const &,@example_global Histograms___class__ const &) const override
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
ConcurrentMonitorElement pfcandidateType_
ConcurrentMonitorElement book1D(Args &&...args)
ConcurrentMonitorElement pt_
void dqmAnalyze(edm::Event const &, edm::EventSetup const &, Histograms_CaloParticleValidation const &) const override
ParameterDescriptionBase * add(U const &iLabel, T const &value)
edm::EDGetTokenT< std::vector< CaloParticle > > caloParticles_
std::vector< reco::PFCandidate > PFCandidateCollection
collection of PFCandidates
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
edm::EDGetTokenT< HGCRecHitCollection > recHitsFH_
ConcurrentMonitorElement pfcandidateEnergy_
example_stream void bookHistograms(DQMStore::IBooker &,@example_stream edm::Run const &,@example_stream edm::EventSetup const &) override
void add(std::string const &label, ParameterSetDescription const &psetDescription)
ConcurrentMonitorElement simPFSuperClusterSize_
static int position[264][3]
ConcurrentMonitorElement nSimClusters_
ConcurrentMonitorElement pfcandidatePt_
void bookHistograms(DQMStore::ConcurrentBooker &, edm::Run const &, edm::EventSetup const &, Histograms_CaloParticleValidation &) const override
ConcurrentMonitorElement energy_
std::vector< int > particles_to_monitor_
ConcurrentMonitorElement selfEnergy_
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
ConcurrentMonitorElement eta_
edm::EDGetTokenT< HGCRecHitCollection > recHitsBH_
std::vector< std::pair< uint32_t, float > > hits_and_fractions() const
Returns list of rechit IDs and fractions for this SimCluster.
ConcurrentMonitorElement pfcandidate_vect_sum_pt_