CMS 3D CMS Logo

HGCalValidator.cc
Go to the documentation of this file.
2 
5 
6 using namespace std;
7 using namespace edm;
8 
10  : label_lcl(pset.getParameter<edm::InputTag>("label_lcl")),
11  label_mcl(pset.getParameter<std::vector<edm::InputTag>>("label_mcl")),
12  SaveGeneralInfo_(pset.getUntrackedParameter<bool>("SaveGeneralInfo")),
13  doCaloParticlePlots_(pset.getUntrackedParameter<bool>("doCaloParticlePlots")),
14  doCaloParticleSelection_(pset.getUntrackedParameter<bool>("doCaloParticleSelection")),
15  dolayerclustersPlots_(pset.getUntrackedParameter<bool>("dolayerclustersPlots")),
16  domulticlustersPlots_(pset.getUntrackedParameter<bool>("domulticlustersPlots")),
17  cummatbudinxo_(pset.getParameter<edm::FileInPath>("cummatbudinxo")) {
18  //In this way we can easily generalize to associations between other objects also.
19  const edm::InputTag& label_cp_effic_tag = pset.getParameter<edm::InputTag>("label_cp_effic");
20  const edm::InputTag& label_cp_fake_tag = pset.getParameter<edm::InputTag>("label_cp_fake");
21 
22  label_cp_effic = consumes<std::vector<CaloParticle>>(label_cp_effic_tag);
23  label_cp_fake = consumes<std::vector<CaloParticle>>(label_cp_fake_tag);
24 
25  simVertices_ = consumes<std::vector<SimVertex>>(pset.getParameter<edm::InputTag>("simVertices"));
26 
27  recHitsEE_ = consumes<HGCRecHitCollection>(edm::InputTag("HGCalRecHit", "HGCEERecHits"));
28  recHitsFH_ = consumes<HGCRecHitCollection>(edm::InputTag("HGCalRecHit", "HGCHEFRecHits"));
29  recHitsBH_ = consumes<HGCRecHitCollection>(edm::InputTag("HGCalRecHit", "HGCHEBRecHits"));
30 
31  density_ = consumes<Density>(edm::InputTag("hgcalLayerClusters"));
32 
33  layerclusters_ = consumes<reco::CaloClusterCollection>(label_lcl);
34 
35  for (auto& itag : label_mcl) {
36  label_mclTokens.push_back(consumes<std::vector<reco::HGCalMultiCluster>>(itag));
37  }
38 
39  cpSelector = CaloParticleSelector(pset.getParameter<double>("ptMinCP"),
40  pset.getParameter<double>("ptMaxCP"),
41  pset.getParameter<double>("minRapidityCP"),
42  pset.getParameter<double>("maxRapidityCP"),
43  pset.getParameter<int>("minHitCP"),
44  pset.getParameter<int>("maxSimClustersCP"),
45  pset.getParameter<double>("tipCP"),
46  pset.getParameter<double>("lipCP"),
47  pset.getParameter<bool>("signalOnlyCP"),
48  pset.getParameter<bool>("intimeOnlyCP"),
49  pset.getParameter<bool>("chargedOnlyCP"),
50  pset.getParameter<bool>("stableOnlyCP"),
51  pset.getParameter<std::vector<int>>("pdgIdCP"));
52 
53  tools_.reset(new hgcal::RecHitTools());
54 
55  particles_to_monitor_ = pset.getParameter<std::vector<int>>("pdgIdCP");
56  totallayers_to_monitor_ = pset.getParameter<int>("totallayers_to_monitor");
57  thicknesses_to_monitor_ = pset.getParameter<std::vector<int>>("thicknesses_to_monitor");
58 
59  //For the material budget file here
60  std::ifstream fmb(cummatbudinxo_.fullPath().c_str());
61  double thelay = 0.;
62  double mbg = 0.;
63  for (unsigned ilayer = 1; ilayer <= totallayers_to_monitor_; ++ilayer) {
64  fmb >> thelay >> mbg;
65  cummatbudg.insert(std::pair<double, double>(thelay, mbg));
66  }
67 
68  fmb.close();
69 
70  ParameterSet psetForHistoProducerAlgo = pset.getParameter<ParameterSet>("histoProducerAlgoBlock");
71  histoProducerAlgo_ = std::make_unique<HGVHistoProducerAlgo>(psetForHistoProducerAlgo);
72 
73  dirName_ = pset.getParameter<std::string>("dirName");
74 }
75 
77 
79  edm::Run const&,
80  edm::EventSetup const& setup,
81  Histograms& histograms) const {
82  if (SaveGeneralInfo_) {
83  ibook.cd();
84  ibook.setCurrentFolder(dirName_ + "GeneralInfo");
85  histoProducerAlgo_->bookInfo(ibook, histograms.histoProducerAlgo);
86  }
87 
89  ibook.cd();
90 
91  for (auto const particle : particles_to_monitor_) {
92  ibook.setCurrentFolder(dirName_ + "SelectedCaloParticles/" + std::to_string(particle));
93  histoProducerAlgo_->bookCaloParticleHistos(ibook, histograms.histoProducerAlgo, particle);
94  }
95  ibook.cd();
97  }
98 
99  //Booking histograms concerning with hgcal layer clusters
100  if (dolayerclustersPlots_) {
101  ibook.cd();
102  ibook.setCurrentFolder(dirName_ + "hgcalLayerClusters");
103  histoProducerAlgo_->bookClusterHistos(ibook,
104  histograms.histoProducerAlgo,
108  }
109 
110  //Booking histograms for multiclusters
111  for (unsigned int www = 0; www < label_mcl.size(); www++) {
112  ibook.cd();
113  InputTag algo = label_mcl[www];
114  string dirName = dirName_;
115  if (!algo.process().empty())
116  dirName += algo.process() + "_";
117  LogDebug("HGCalValidator") << dirName << "\n";
118  if (!algo.label().empty())
119  dirName += algo.label() + "_";
120  LogDebug("HGCalValidator") << dirName << "\n";
121  if (!algo.instance().empty())
122  dirName += algo.instance() + "_";
123  LogDebug("HGCalValidator") << dirName << "\n";
124 
125  if (!dirName.empty()) {
126  dirName.resize(dirName.size() - 1);
127  }
128 
129  LogDebug("HGCalValidator") << dirName << "\n";
130 
131  ibook.setCurrentFolder(dirName);
132 
133  //Booking histograms concerning for hgcal multi clusters
134  if (domulticlustersPlots_) {
135  histoProducerAlgo_->bookMultiClusterHistos(ibook, histograms.histoProducerAlgo, totallayers_to_monitor_);
136  }
137  } //end of booking multiclusters loop
138 }
139 
141  std::vector<CaloParticle> const& cPeff,
142  std::vector<SimVertex> const& simVertices,
143  std::vector<size_t>& selected_cPeff) const {
144  selected_cPeff.reserve(cPeff.size());
145 
146  size_t j = 0;
147  for (auto const& caloParticle : cPeff) {
148  int id = caloParticle.pdgId();
149 
151  selected_cPeff.push_back(j);
152  if (doCaloParticlePlots_) {
153  histoProducerAlgo_->fill_caloparticle_histos(histograms.histoProducerAlgo, id, caloParticle, simVertices);
154  }
155  }
156  ++j;
157  } //end of loop over caloparticles
158 }
159 
161  const edm::EventSetup& setup,
162  const Histograms& histograms) const {
163  using namespace reco;
164 
165  LogDebug("HGCalValidator") << "\n===================================================="
166  << "\n"
167  << "Analyzing new event"
168  << "\n"
169  << "====================================================\n"
170  << "\n";
171 
172  edm::Handle<std::vector<SimVertex>> simVerticesHandle;
173  event.getByToken(simVertices_, simVerticesHandle);
174  std::vector<SimVertex> const& simVertices = *simVerticesHandle;
175 
176  edm::Handle<std::vector<CaloParticle>> caloParticleHandle;
177  event.getByToken(label_cp_effic, caloParticleHandle);
178  std::vector<CaloParticle> const& caloParticles = *caloParticleHandle;
179 
180  tools_->getEventSetup(setup);
181  histoProducerAlgo_->setRecHitTools(tools_);
182 
183  edm::Handle<HGCRecHitCollection> recHitHandleEE;
184  event.getByToken(recHitsEE_, recHitHandleEE);
185  edm::Handle<HGCRecHitCollection> recHitHandleFH;
186  event.getByToken(recHitsFH_, recHitHandleFH);
187  edm::Handle<HGCRecHitCollection> recHitHandleBH;
188  event.getByToken(recHitsBH_, recHitHandleBH);
189 
190  std::map<DetId, const HGCRecHit*> hitMap;
191  fillHitMap(hitMap, *recHitHandleEE, *recHitHandleFH, *recHitHandleBH);
192 
193  //Some general info on layers etc.
194  if (SaveGeneralInfo_) {
195  histoProducerAlgo_->fill_info_histos(histograms.histoProducerAlgo, totallayers_to_monitor_);
196  }
197 
198  auto nCaloParticles = caloParticles.size();
199  std::vector<size_t> cPIndices;
200  //Consider CaloParticles coming from the hard scatterer
201  //excluding the PU contribution and save the indices.
202  for (unsigned int cpId = 0; cpId < nCaloParticles; ++cpId) {
203  if (caloParticles[cpId].g4Tracks()[0].eventId().event() != 0 or
204  caloParticles[cpId].g4Tracks()[0].eventId().bunchCrossing() != 0) {
205  LogDebug("HGCalValidator") << "Excluding CaloParticles from event: "
206  << caloParticles[cpId].g4Tracks()[0].eventId().event()
207  << " with BX: " << caloParticles[cpId].g4Tracks()[0].eventId().bunchCrossing()
208  << std::endl;
209  continue;
210  }
211  cPIndices.emplace_back(cpId);
212  }
213 
214  // ##############################################
215  // fill caloparticles histograms
216  // ##############################################
217  LogTrace("HGCalValidator") << "\n# of CaloParticles: " << caloParticles.size() << "\n";
218  std::vector<size_t> selected_cPeff;
220 
221  //get collections from the event
222  //Layer clusters
224  event.getByToken(layerclusters_, clusterHandle);
225  const reco::CaloClusterCollection& clusters = *clusterHandle;
226 
227  //Density
228  edm::Handle<Density> densityHandle;
229  event.getByToken(density_, densityHandle);
230  const Density& densities = *densityHandle;
231 
232  // ##############################################
233  // fill layercluster histograms
234  // ##############################################
235  int w = 0; //counter counting the number of sets of histograms
236  if (dolayerclustersPlots_) {
237  histoProducerAlgo_->fill_generic_cluster_histos(histograms.histoProducerAlgo,
238  w,
239  clusters,
240  densities,
242  cPIndices,
243  selected_cPeff,
244  hitMap,
245  cummatbudg,
248 
249  for (unsigned int layerclusterIndex = 0; layerclusterIndex < clusters.size(); layerclusterIndex++) {
250  histoProducerAlgo_->fill_cluster_histos(histograms.histoProducerAlgo, w, clusters[layerclusterIndex]);
251  }
252 
253  //General Info on hgcalLayerClusters
254  LogTrace("HGCalValidator") << "\n# of layer clusters with " << label_lcl.process() << ":" << label_lcl.label()
255  << ":" << label_lcl.instance() << ": " << clusters.size() << "\n";
256  }
257 
258  // ##############################################
259  // fill multicluster histograms
260  // ##############################################
261  for (unsigned int wml = 0; wml < label_mclTokens.size(); wml++) {
262  if (domulticlustersPlots_) {
264  event.getByToken(label_mclTokens[wml], multiClusterHandle);
265  const std::vector<reco::HGCalMultiCluster>& multiClusters = *multiClusterHandle;
266 
267  histoProducerAlgo_->fill_multi_cluster_histos(histograms.histoProducerAlgo,
268  wml,
269  multiClusters,
271  cPIndices,
272  selected_cPeff,
273  hitMap,
275 
276  //General Info on multiclusters
277  LogTrace("HGCalValidator") << "\n# of multi clusters with " << label_mcl[wml].process() << ":"
278  << label_mcl[wml].label() << ":" << label_mcl[wml].instance() << ": "
279  << multiClusters.size() << "\n";
280  }
281  } //end of loop over multicluster input labels
282 }
283 
284 void HGCalValidator::fillHitMap(std::map<DetId, const HGCRecHit*>& hitMap,
285  const HGCRecHitCollection& rechitsEE,
286  const HGCRecHitCollection& rechitsFH,
287  const HGCRecHitCollection& rechitsBH) const {
288  hitMap.clear();
289  for (const auto& hit : rechitsEE) {
290  hitMap.emplace(hit.detid(), &hit);
291  }
292 
293  for (const auto& hit : rechitsFH) {
294  hitMap.emplace(hit.detid(), &hit);
295  }
296 
297  for (const auto& hit : rechitsBH) {
298  hitMap.emplace(hit.detid(), &hit);
299  }
300 }
HGCalValidator::dqmAnalyze
void dqmAnalyze(const edm::Event &, const edm::EventSetup &, const Histograms &) const override
Method called once per event.
Definition: HGCalValidator.cc:160
HGCalValidator::fillHitMap
void fillHitMap(std::map< DetId, const HGCRecHit * > &, const HGCRecHitCollection &, const HGCRecHitCollection &, const HGCRecHitCollection &) const
Definition: HGCalValidator.cc:284
HGCalValidator::label_cp_effic
edm::EDGetTokenT< std::vector< CaloParticle > > label_cp_effic
Definition: HGCalValidator.h:70
HGCalValidator::cummatbudinxo_
const edm::FileInPath cummatbudinxo_
Definition: HGCalValidator.h:65
hgcal::RecHitTools
Definition: RecHitTools.h:21
electrons_cff.bool
bool
Definition: electrons_cff.py:372
MessageLogger.h
HGCalValidator::recHitsFH_
edm::EDGetTokenT< HGCRecHitCollection > recHitsFH_
Definition: HGCalValidator.h:74
HGCalValidator::~HGCalValidator
~HGCalValidator() override
Destructor.
Definition: HGCalValidator.cc:76
HGCalValidator::cpParametersAndSelection
void cpParametersAndSelection(const Histograms &histograms, std::vector< CaloParticle > const &cPeff, std::vector< SimVertex > const &simVertices, std::vector< size_t > &selected_cPeff) const
Definition: HGCalValidator.cc:140
edm::InputTag::instance
std::string const & instance() const
Definition: InputTag.h:37
HGCalValidator::HGCalValidator
HGCalValidator(const edm::ParameterSet &pset)
Constructor.
Definition: HGCalValidator.cc:9
edm::Run
Definition: Run.h:45
edm
HLT enums.
Definition: AlignableModifier.h:19
dqm::implementation::NavigatorBase::setCurrentFolder
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:32
edm::SortedCollection
Definition: SortedCollection.h:49
edm::InputTag::process
std::string const & process() const
Definition: InputTag.h:40
HGCalValidator::dolayerclustersPlots_
const bool dolayerclustersPlots_
Definition: HGCalValidator.h:63
reco
fixed size matrix
Definition: AlignmentAlgorithmBase.h:45
edm::Handle
Definition: AssociativeIterator.h:50
singleTopDQM_cfi.setup
setup
Definition: singleTopDQM_cfi.py:37
edm::InputTag::label
std::string const & label() const
Definition: InputTag.h:36
cmsdt::algo
algo
Definition: constants.h:164
edm::FileInPath
Definition: FileInPath.h:64
MakerMacros.h
HGCalValidator::cpSelector
CaloParticleSelector cpSelector
Definition: HGCalValidator.h:84
CaloParticleSelector
Definition: CaloParticleSelector.h:10
HGCalValidator::tools_
std::shared_ptr< hgcal::RecHitTools > tools_
Definition: HGCalValidator.h:85
w
const double w
Definition: UKUtility.cc:23
caloTruthCellsProducer_cfi.caloParticles
caloParticles
Definition: caloTruthCellsProducer_cfi.py:6
reco::CaloClusterCollection
std::vector< CaloCluster > CaloClusterCollection
collection of CaloCluster objects
Definition: CaloClusterFwd.h:19
HGCalValidator::label_cp_fake
edm::EDGetTokenT< std::vector< CaloParticle > > label_cp_fake
Definition: HGCalValidator.h:71
dqm::implementation::NavigatorBase::cd
virtual void cd()
Definition: DQMStore.cc:29
HGCalValidator::label_mclTokens
std::vector< edm::EDGetTokenT< std::vector< reco::HGCalMultiCluster > > > label_mclTokens
Definition: HGCalValidator.h:69
HGCalValidator::recHitsBH_
edm::EDGetTokenT< HGCRecHitCollection > recHitsBH_
Definition: HGCalValidator.h:75
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
bsc_activity_cfg.clusters
clusters
Definition: bsc_activity_cfg.py:36
HGCalValidator::recHitsEE_
edm::EDGetTokenT< HGCRecHitCollection > recHitsEE_
Definition: HGCalValidator.h:73
HGCalValidator::totallayers_to_monitor_
unsigned totallayers_to_monitor_
Definition: HGCalValidator.h:88
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:670
edm::ParameterSet
Definition: ParameterSet.h:36
HGCalValidator::simVertices_
edm::EDGetTokenT< std::vector< SimVertex > > simVertices_
Definition: HGCalValidator.h:72
HGCalValidator::thicknesses_to_monitor_
std::vector< int > thicknesses_to_monitor_
Definition: HGCalValidator.h:89
HGCalValidator::histoProducerAlgo_
std::unique_ptr< HGVHistoProducerAlgo > histoProducerAlgo_
Definition: HGCalValidator.h:77
HGCalValidator::doCaloParticleSelection_
const bool doCaloParticleSelection_
Definition: HGCalValidator.h:62
HGCalValidator::label_lcl
edm::InputTag label_lcl
Definition: HGCalValidator.h:58
edm::EventSetup
Definition: EventSetup.h:57
histograms
Definition: histograms.py:1
HGCalValidator::particles_to_monitor_
std::vector< int > particles_to_monitor_
Definition: HGCalValidator.h:87
HGCalValidator.h
HGCalValidator::bookHistograms
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &, Histograms &) const override
Method called to book the DQM histograms.
Definition: HGCalValidator.cc:78
HGCalValidator::label_mcl
std::vector< edm::InputTag > label_mcl
Definition: HGCalValidator.h:59
std
Definition: JetResolutionObject.h:76
HGCalValidator::domulticlustersPlots_
const bool domulticlustersPlots_
Definition: HGCalValidator.h:64
HGCalValidator::cummatbudg
std::map< double, double > cummatbudg
Definition: HGCalValidator.h:86
HGCalValidatorHistograms
Definition: HGCalValidator.h:32
HGCalValidator::SaveGeneralInfo_
const bool SaveGeneralInfo_
Definition: HGCalValidator.h:60
fmb
cc *****************************************************cc the common blocks pinput and cwdidth are for input parameters cc these parameters needed to be interfaced to other program common pinput fmb
Definition: inclcon.h:4
HGCalValidator::density_
edm::EDGetTokenT< Density > density_
Definition: HGCalValidator.h:76
TrackerOfflineValidation_Dqm_cff.dirName
dirName
Definition: TrackerOfflineValidation_Dqm_cff.py:55
or
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
Definition: Activities.doc:12
HGCalValidator::dirName_
std::string dirName_
Definition: HGCalValidator.h:90
HGCalValidator_cfi.label_lcl
label_lcl
general settings ### selection of CP for evaluation of efficiency #
Definition: HGCalValidator_cfi.py:16
dqm::implementation::IBooker
Definition: DQMStore.h:43
LogTrace
#define LogTrace(id)
Definition: MessageLogger.h:671
HGCalValidator_cfi.simVertices
simVertices
Definition: HGCalValidator_cfi.py:43
edm::EDConsumerBase::consumes
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
Definition: EDConsumerBase.h:126
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
event
Definition: event.py:1
edm::Event
Definition: Event.h:73
HGCalValidator::layerclusters_
edm::EDGetTokenT< reco::CaloClusterCollection > layerclusters_
Definition: HGCalValidator.h:68
event
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of "!*" before the partial wildcard feature was incorporated). The per-event "cost" of each negative criterion with multiple relevant triggers is about the same as ! *was in the past
edm::InputTag
Definition: InputTag.h:15
edm::FileInPath::fullPath
std::string fullPath() const
Definition: FileInPath.cc:163
hit
Definition: SiStripHitEffFromCalibTree.cc:88
muonDTDigis_cfi.pset
pset
Definition: muonDTDigis_cfi.py:27
Density
hgcal_clustering::Density Density
Definition: HGCalImagingAlgo.h:29
HGCalValidator_cfi.label_mcl
label_mcl
Definition: HGCalValidator_cfi.py:17
HGCalValidator::doCaloParticlePlots_
const bool doCaloParticlePlots_
Definition: HGCalValidator.h:61