File indexing completed on 2024-04-06 12:26:33
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #include <memory>
0021
0022
0023 #include "FWCore/Common/interface/Provenance.h"
0024 #include "FWCore/Framework/interface/Frameworkfwd.h"
0025 #include "FWCore/Framework/interface/one/EDAnalyzer.h"
0026 #include "FWCore/Framework/interface/Event.h"
0027 #include "FWCore/Framework/interface/MakerMacros.h"
0028 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0029 #include "FWCore/ServiceRegistry/interface/Service.h"
0030 #include "CommonTools/UtilAlgos/interface/TFileService.h"
0031 #include "DataFormats/TrackerCommon/interface/ClusterSummary.h"
0032
0033
0034 #include "TTree.h"
0035 #include "TH1.h"
0036 #include "TFile.h"
0037
0038
0039
0040
0041
0042 class ClusterSummary;
0043
0044 using namespace std;
0045
0046 class ClusterAnalyzer : public edm::one::EDAnalyzer<edm::one::SharedResources> {
0047 public:
0048 explicit ClusterAnalyzer(const edm::ParameterSet&);
0049 ~ClusterAnalyzer();
0050
0051 private:
0052 virtual void analyze(const edm::Event&, const edm::EventSetup&) override;
0053
0054
0055
0056 edm::EDGetTokenT<ClusterSummary> token;
0057
0058 std::map<int, std::string> enumModules_;
0059 std::map<std::string, TH1D*> histos1D_;
0060
0061 std::vector<int> nType_;
0062 std::vector<float> clusterSize_;
0063 std::vector<float> clusterCharge_;
0064
0065 std::map<int, std::string> allModules_;
0066
0067 edm::Service<TFileService> fs;
0068
0069 bool _verbose;
0070 };
0071
0072 ClusterAnalyzer::ClusterAnalyzer(const edm::ParameterSet& iConfig) {
0073 usesResource(TFileService::kSharedResource);
0074 token = consumes<ClusterSummary>(iConfig.getParameter<edm::InputTag>("clusterSum"));
0075 _verbose = true;
0076
0077 std::vector<std::string> wantedsubdets = iConfig.getParameter<std::vector<std::string> >("wantedSubDets");
0078 for (auto iS : wantedsubdets) {
0079 ClusterSummary::CMSTracker subdet = ClusterSummary::NVALIDENUMS;
0080 for (int iN = 0; iN < ClusterSummary::NVALIDENUMS; ++iN)
0081 if (ClusterSummary::subDetNames[iN] == iS)
0082 subdet = ClusterSummary::CMSTracker(iN);
0083 if (subdet == ClusterSummary::NVALIDENUMS)
0084 throw cms::Exception("No standard selection: ") << iS;
0085
0086 allModules_[subdet] = iS;
0087 }
0088
0089 std::vector<edm::ParameterSet> wantedusersubdets_ps =
0090 iConfig.getParameter<std::vector<edm::ParameterSet> >("wantedUserSubDets");
0091 for (const auto& iS : wantedusersubdets_ps) {
0092 ClusterSummary::CMSTracker subdet = (ClusterSummary::CMSTracker)iS.getParameter<unsigned int>("detSelection");
0093 std::string detname = iS.getParameter<std::string>("detLabel");
0094 if (subdet <= ClusterSummary::NVALIDENUMS)
0095 throw cms::Exception("Already predefined selection: ") << subdet;
0096 if (subdet >= ClusterSummary::NTRACKERENUMS)
0097 throw cms::Exception("Selection is out of range: ") << subdet;
0098 allModules_[subdet] = detname;
0099 }
0100
0101 edm::LogPrint("ClusterAnalyzer") << "From provenance infomation the selected modules are = ";
0102 for (auto i : allModules_)
0103 edm::LogPrint("ClusterAnalyzer") << i.second << " ";
0104 edm::LogPrint("ClusterAnalyzer") << endl;
0105
0106 for (auto i = allModules_.begin(); i != allModules_.end(); ++i) {
0107 std::string tmpstr = i->second;
0108 histos1D_[(tmpstr + "nclusters").c_str()] =
0109 fs->make<TH1D>((tmpstr + "nclusters").c_str(), (tmpstr + "nclusters").c_str(), 1000, 0, 3000);
0110 histos1D_[(tmpstr + "nclusters").c_str()]->SetXTitle(("number of Clusters in " + tmpstr).c_str());
0111
0112 histos1D_[(tmpstr + "avgCharge").c_str()] =
0113 fs->make<TH1D>((tmpstr + "avgCharge").c_str(), (tmpstr + "avgCharge").c_str(), 500, 0, 1000);
0114 histos1D_[(tmpstr + "avgCharge").c_str()]->SetXTitle(("average cluster charge in " + tmpstr).c_str());
0115
0116 histos1D_[(tmpstr + "avgSize").c_str()] =
0117 fs->make<TH1D>((tmpstr + "avgSize").c_str(), (tmpstr + "avgSize").c_str(), 30, 0, 10);
0118 histos1D_[(tmpstr + "avgSize").c_str()]->SetXTitle(("average cluster size in " + tmpstr).c_str());
0119 }
0120 }
0121
0122 ClusterAnalyzer::~ClusterAnalyzer() = default;
0123
0124 void ClusterAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
0125 using namespace edm;
0126
0127 Handle<ClusterSummary> class_;
0128 iEvent.getByToken(token, class_);
0129
0130 for (unsigned int iM = 0; iM < class_->getNumberOfModules(); iM++) {
0131 auto iAllModules = allModules_.find(class_->getModule(iM));
0132 if (iAllModules == allModules_.end())
0133 continue;
0134
0135 std::string tmpstr = iAllModules->second;
0136
0137 histos1D_[(tmpstr + "nclusters").c_str()]->Fill(class_->getNClusByIndex(iM));
0138 histos1D_[(tmpstr + "avgSize").c_str()]->Fill(class_->getClusSizeByIndex(iM) / class_->getNClusByIndex(iM));
0139 histos1D_[(tmpstr + "avgCharge").c_str()]->Fill(class_->getClusChargeByIndex(iM) / class_->getNClusByIndex(iM));
0140
0141 edm::LogPrint("ClusterAnalyzer") << "n" << tmpstr << ", avg size, avg charge = " << class_->getNClusByIndex(iM);
0142 edm::LogPrint("ClusterAnalyzer") << ", " << class_->getClusSizeByIndex(iM) / class_->getNClusByIndex(iM);
0143 edm::LogPrint("ClusterAnalyzer") << ", " << class_->getClusChargeByIndex(iM) / class_->getNClusByIndex(iM) << endl;
0144 }
0145 edm::LogPrint("ClusterAnalyzer") << "-------------------------------------------------------" << endl;
0146 }
0147
0148
0149 DEFINE_FWK_MODULE(ClusterAnalyzer);