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 
182  tools_->setGeometry(*geom);
183  histoProducerAlgo_->setRecHitTools(tools_);
184 
185  edm::Handle<HGCRecHitCollection> recHitHandleEE;
186  event.getByToken(recHitsEE_, recHitHandleEE);
187  edm::Handle<HGCRecHitCollection> recHitHandleFH;
188  event.getByToken(recHitsFH_, recHitHandleFH);
189  edm::Handle<HGCRecHitCollection> recHitHandleBH;
190  event.getByToken(recHitsBH_, recHitHandleBH);
191 
192  std::map<DetId, const HGCRecHit*> hitMap;
193  fillHitMap(hitMap, *recHitHandleEE, *recHitHandleFH, *recHitHandleBH);
194 
195  //Some general info on layers etc.
196  if (SaveGeneralInfo_) {
197  histoProducerAlgo_->fill_info_histos(histograms.histoProducerAlgo, totallayers_to_monitor_);
198  }
199 
200  auto nCaloParticles = caloParticles.size();
201  std::vector<size_t> cPIndices;
202  //Consider CaloParticles coming from the hard scatterer
203  //excluding the PU contribution and save the indices.
204  for (unsigned int cpId = 0; cpId < nCaloParticles; ++cpId) {
205  if (caloParticles[cpId].g4Tracks()[0].eventId().event() != 0 or
206  caloParticles[cpId].g4Tracks()[0].eventId().bunchCrossing() != 0) {
207  LogDebug("HGCalValidator") << "Excluding CaloParticles from event: "
208  << caloParticles[cpId].g4Tracks()[0].eventId().event()
209  << " with BX: " << caloParticles[cpId].g4Tracks()[0].eventId().bunchCrossing()
210  << std::endl;
211  continue;
212  }
213  cPIndices.emplace_back(cpId);
214  }
215 
216  // ##############################################
217  // fill caloparticles histograms
218  // ##############################################
219  LogTrace("HGCalValidator") << "\n# of CaloParticles: " << caloParticles.size() << "\n";
220  std::vector<size_t> selected_cPeff;
222 
223  //get collections from the event
224  //Layer clusters
226  event.getByToken(layerclusters_, clusterHandle);
227  const reco::CaloClusterCollection& clusters = *clusterHandle;
228 
229  //Density
230  edm::Handle<Density> densityHandle;
231  event.getByToken(density_, densityHandle);
232  const Density& densities = *densityHandle;
233 
234  // ##############################################
235  // fill layercluster histograms
236  // ##############################################
237  int w = 0; //counter counting the number of sets of histograms
238  if (dolayerclustersPlots_) {
239  histoProducerAlgo_->fill_generic_cluster_histos(histograms.histoProducerAlgo,
240  w,
241  clusters,
242  densities,
244  cPIndices,
245  selected_cPeff,
246  hitMap,
247  cummatbudg,
250 
251  for (unsigned int layerclusterIndex = 0; layerclusterIndex < clusters.size(); layerclusterIndex++) {
252  histoProducerAlgo_->fill_cluster_histos(histograms.histoProducerAlgo, w, clusters[layerclusterIndex]);
253  }
254 
255  //General Info on hgcalLayerClusters
256  LogTrace("HGCalValidator") << "\n# of layer clusters with " << label_lcl.process() << ":" << label_lcl.label()
257  << ":" << label_lcl.instance() << ": " << clusters.size() << "\n";
258  }
259 
260  // ##############################################
261  // fill multicluster histograms
262  // ##############################################
263  for (unsigned int wml = 0; wml < label_mclTokens.size(); wml++) {
264  if (domulticlustersPlots_) {
266  event.getByToken(label_mclTokens[wml], multiClusterHandle);
267  const std::vector<reco::HGCalMultiCluster>& multiClusters = *multiClusterHandle;
268 
269  histoProducerAlgo_->fill_multi_cluster_histos(histograms.histoProducerAlgo,
270  wml,
271  multiClusters,
273  cPIndices,
274  selected_cPeff,
275  hitMap,
277 
278  //General Info on multiclusters
279  LogTrace("HGCalValidator") << "\n# of multi clusters with " << label_mcl[wml].process() << ":"
280  << label_mcl[wml].label() << ":" << label_mcl[wml].instance() << ": "
281  << multiClusters.size() << "\n";
282  }
283  } //end of loop over multicluster input labels
284 }
285 
286 void HGCalValidator::fillHitMap(std::map<DetId, const HGCRecHit*>& hitMap,
287  const HGCRecHitCollection& rechitsEE,
288  const HGCRecHitCollection& rechitsFH,
289  const HGCRecHitCollection& rechitsBH) const {
290  hitMap.clear();
291  for (const auto& hit : rechitsEE) {
292  hitMap.emplace(hit.detid(), &hit);
293  }
294 
295  for (const auto& hit : rechitsFH) {
296  hitMap.emplace(hit.detid(), &hit);
297  }
298 
299  for (const auto& hit : rechitsBH) {
300  hitMap.emplace(hit.detid(), &hit);
301  }
302 }
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:286
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:23
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
CaloGeometryRecord
Definition: CaloGeometryRecord.h:30
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
edm::ESHandle< CaloGeometry >
dqm::implementation::NavigatorBase::cd
virtual void cd()
Definition: DQMStore.cc:29
relativeConstraints.geom
geom
Definition: relativeConstraints.py:72
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
get
#define get
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