CMS 3D CMS Logo

MaterialBudgetVolumeAnalysis.cc
Go to the documentation of this file.
3 
13 
15 
16 #include "TProfile.h"
17 #include "TProfile2D.h"
18 
19 #include <iostream>
20 #include <string>
21 #include <vector>
22 
23 //#define EDM_ML_DEBUG
24 
25 using namespace geant_units::operators;
26 
27 class MaterialBudgetVolumeAnalysis : public edm::one::EDAnalyzer<edm::one::SharedResources> {
28 public:
30 
31  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
32 
33 private:
34  void analyze(edm::Event const&, edm::EventSetup const&) override;
35  void bookHisto();
36 
37  const std::vector<std::string> names_;
39  const int binEta_, binPhi_;
40  const double etaLow_, etaHigh_, phiLow_, phiHigh_;
42  std::vector<TProfile*> meStepEta_, meStepPhi_;
43  std::vector<TProfile*> meRadLEta_, meRadLPhi_;
44  std::vector<TProfile*> meIntLEta_, meIntLPhi_;
45  std::vector<TProfile2D*> meStepEtaPhi_, meRadLEtaPhi_, meIntLEtaPhi_;
46 };
47 
49  : names_(p.getParameter<std::vector<std::string> >("names")),
50  tag_(p.getParameter<edm::InputTag>("inputTag")),
51  binEta_(p.getParameter<int>("nBinEta")),
52  binPhi_(p.getParameter<int>("nBinPhi")),
53  etaLow_(p.getParameter<double>("etaLow")),
54  etaHigh_(p.getParameter<double>("etaHigh")),
55  phiLow_(-1._pi),
56  phiHigh_(1._pi) {
57  usesResource(TFileService::kSharedResource);
58  tok_info_ = consumes<edm::MaterialInformationContainer>(tag_);
59 
60  edm::LogVerbatim("MaterialBudget") << "MaterialBudgetVolumeAnalysis: Eta plot: NX " << binEta_ << " Range "
61  << -etaLow_ << ":" << etaHigh_ << " Phi plot: NX " << binPhi_ << " Range "
62  << -1._pi << ":" << 1._pi << " for " << names_.size() << " detectors from "
63  << tag_;
64  std::ostringstream st1;
65  for (unsigned int k = 0; k < names_.size(); ++k)
66  st1 << " [" << k << "] " << names_[k];
67  edm::LogVerbatim("MaterialBudget") << "MaterialBudgetVolume: " << st1.str();
68  bookHisto();
69 }
70 
73  std::vector<std::string> names = {"BEAM",
74  "BEAM1",
75  "BEAM2",
76  "BEAM3",
77  "BEAM4",
78  "Tracker",
79  "ECAL",
80  "HCal",
81  "MUON",
82  "VCAL",
83  "MGNT",
84  "OQUA",
85  "CALOEC",
86  "HFNoseVol"};
87  desc.add<std::vector<std::string> >("names", names);
88  desc.add<edm::InputTag>("inputTag", edm::InputTag("g4SimHits", "MaterialInformation"));
89  desc.add<int>("nBinEta", 300);
90  desc.add<int>("nBinPhi", 180);
91  desc.add<double>("etaLow", -6.0);
92  desc.add<double>("etaHigh", 6.0);
93  descriptions.add("materialBudgetVolumeAnalysis", desc);
94 }
95 
97  edm::Handle<edm::MaterialInformationContainer> materialInformationContainer;
98  iEvent.getByToken(tok_info_, materialInformationContainer);
99 #ifdef EDM_ML_DEBUG
100  unsigned int nsize(0), ntot(0), nused(0);
101 #endif
102  if (materialInformationContainer.isValid()) {
103 #ifdef EDM_ML_DEBUG
104  nsize = materialInformationContainer->size();
105 #endif
106  for (const auto& it : *(materialInformationContainer.product())) {
107 #ifdef EDM_ML_DEBUG
108  ntot++;
109 #endif
110  if (std::find(names_.begin(), names_.end(), it.vname()) != names_.end()) {
111 #ifdef EDM_ML_DEBUG
112  nused++;
113 #endif
114  unsigned int k =
115  static_cast<unsigned int>(std::find(names_.begin(), names_.end(), it.vname()) - names_.begin());
116  meStepEta_[k]->Fill(it.trackEta(), it.stepLength());
117  meRadLEta_[k]->Fill(it.trackEta(), it.radiationLength());
118  meIntLEta_[k]->Fill(it.trackEta(), it.interactionLength());
119  meStepPhi_[k]->Fill(it.trackPhi(), it.stepLength());
120  meRadLPhi_[k]->Fill(it.trackPhi(), it.radiationLength());
121  meIntLPhi_[k]->Fill(it.trackPhi(), it.interactionLength());
122  meStepEtaPhi_[k]->Fill(it.trackEta(), it.trackPhi(), it.stepLength());
123  meRadLEtaPhi_[k]->Fill(it.trackEta(), it.trackPhi(), it.radiationLength());
124  meIntLEtaPhi_[k]->Fill(it.trackEta(), it.trackPhi(), it.interactionLength());
125  }
126  }
127  }
128 #ifdef EDM_ML_DEBUG
129  edm::LogVerbatim("MaterialBudget") << "MaterialInformation with " << nsize << ":" << ntot << " elements of which "
130  << nused << " are used";
131 #endif
132 }
133 
136  char name[40], title[100];
137  for (unsigned int k = 0; k < names_.size(); ++k) {
138  sprintf(name, "stepEta%s", names_[k].c_str());
139  sprintf(title, "MB(Step) vs #eta for %s", names_[k].c_str());
140  meStepEta_.emplace_back(fs->make<TProfile>(name, title, binEta_, etaLow_, etaHigh_));
141  sprintf(name, "radlEta%s", names_[k].c_str());
142  sprintf(title, "MB(X0) vs #eta for %s", names_[k].c_str());
143  meRadLEta_.emplace_back(fs->make<TProfile>(name, title, binEta_, etaLow_, etaHigh_));
144  sprintf(name, "intlEta%s", names_[k].c_str());
145  sprintf(title, "MB(L0) vs #eta for %s", names_[k].c_str());
146  meIntLEta_.emplace_back(fs->make<TProfile>(name, title, binEta_, etaLow_, etaHigh_));
147  sprintf(name, "stepPhi%s", names_[k].c_str());
148  sprintf(title, "MB(Step) vs #phi for %s", names_[k].c_str());
149  meStepPhi_.emplace_back(fs->make<TProfile>(name, title, binPhi_, phiLow_, phiHigh_));
150  sprintf(name, "radlPhi%s", names_[k].c_str());
151  sprintf(title, "MB(X0) vs #phi for %s", names_[k].c_str());
152  meRadLPhi_.emplace_back(fs->make<TProfile>(name, title, binPhi_, phiLow_, phiHigh_));
153  sprintf(name, "intlPhi%s", names_[k].c_str());
154  sprintf(title, "MB(L0) vs #phi for %s", names_[k].c_str());
155  meIntLPhi_.emplace_back(fs->make<TProfile>(name, title, binPhi_, phiLow_, phiHigh_));
156  sprintf(name, "stepEtaPhi%s", names_[k].c_str());
157  sprintf(title, "MB(Step) vs #eta and #phi for %s", names_[k].c_str());
158  meStepEtaPhi_.emplace_back(
159  fs->make<TProfile2D>(name, title, binEta_ / 2, etaLow_, etaHigh_, binPhi_ / 2, phiLow_, phiHigh_));
160  sprintf(name, "radlEtaPhi%s", names_[k].c_str());
161  sprintf(title, "MB(X0) vs #eta and #phi for %s", names_[k].c_str());
162  meRadLEtaPhi_.emplace_back(
163  fs->make<TProfile2D>(name, title, binEta_ / 2, etaLow_, etaHigh_, binPhi_ / 2, phiLow_, phiHigh_));
164  sprintf(name, "intlEtaPhi%s", names_[k].c_str());
165  sprintf(title, "MB(L0) vs #eta and #phi for %s", names_[k].c_str());
166  meIntLEtaPhi_.emplace_back(
167  fs->make<TProfile2D>(name, title, binEta_ / 2, etaLow_, etaHigh_, binPhi_ / 2, phiLow_, phiHigh_));
168  }
169 }
170 
171 // define this as a plug-in
static const std::string kSharedResource
Definition: TFileService.h:76
Log< level::Info, true > LogVerbatim
std::vector< TProfile2D * > meStepEtaPhi_
std::vector< TProfile2D * > meIntLEtaPhi_
MaterialBudgetVolumeAnalysis(edm::ParameterSet const &)
T const * product() const
Definition: Handle.h:70
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
const std::string names[nVars_]
example_stream void analyze(const edm::Event &, const edm::EventSetup &) override
int iEvent
Definition: GenABIO.cc:224
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
void analyze(edm::Event const &, edm::EventSetup const &) override
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
const std::vector< std::string > names_
bool isValid() const
Definition: HandleBase.h:70
std::vector< TProfile2D * > meRadLEtaPhi_
HLT enums.
edm::EDGetTokenT< edm::MaterialInformationContainer > tok_info_