File indexing completed on 2024-04-06 12:26:32
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #include <memory>
0021 #include <iostream>
0022
0023
0024 #include "FWCore/Framework/interface/Frameworkfwd.h"
0025 #include "FWCore/Framework/interface/MakerMacros.h"
0026 #include "FWCore/Framework/interface/one/EDAnalyzer.h"
0027 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0028 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0029
0030 #include "FWCore/Framework/interface/Event.h"
0031 #include "FWCore/Framework/interface/MakerMacros.h"
0032 #include "FWCore/Framework/interface/ESHandle.h"
0033 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0034 #include "DataFormats/Common/interface/DetSet.h"
0035 #include "DataFormats/Common/interface/DetSetVector.h"
0036 #include "DataFormats/Common/interface/DetSetVectorNew.h"
0037
0038 #include "DataFormats/SiStripDigi/interface/SiStripProcessedRawDigi.h"
0039 #include "DataFormats/SiStripDigi/interface/SiStripRawDigi.h"
0040 #include "DataFormats/SiStripCluster/interface/SiStripCluster.h"
0041 #include "DataFormats/SiStripCluster/interface/SiStripClusterCollection.h"
0042
0043 #include "FWCore/ServiceRegistry/interface/Service.h"
0044 #include "CommonTools/UtilAlgos/interface/TFileService.h"
0045 #include "CommonTools/Utils/interface/TFileDirectory.h"
0046
0047
0048 #include "TH1F.h"
0049 #include "TProfile.h"
0050
0051
0052
0053
0054
0055 class SiStripBaselineComparator : public edm::one::EDAnalyzer<edm::one::SharedResources> {
0056 public:
0057 explicit SiStripBaselineComparator(const edm::ParameterSet&);
0058 ~SiStripBaselineComparator() override;
0059 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0060
0061 private:
0062 void beginJob() override;
0063 void analyze(const edm::Event&, const edm::EventSetup&) override;
0064 void endJob() override;
0065
0066 edm::EDGetTokenT<edmNew::DetSetVector<SiStripCluster> > srcClusters_;
0067 edm::EDGetTokenT<edmNew::DetSetVector<SiStripCluster> > srcClusters2_;
0068
0069 edm::Service<TFileService> fs_;
0070
0071 TH1F* h1_nOldClusters_;
0072 TH1F* h1_nMatchedClusters_;
0073 TH1F* h1_nSplitClusters_;
0074 TProfile* h1_matchingMult_;
0075 TProfile* h1_matchedWidth_;
0076 TProfile* h1_matchedCharges_;
0077
0078 const uint16_t nbins_clusterSize_ = 128;
0079 const uint16_t min_clusterSize_ = 0;
0080 const uint16_t max_clusterSize_ = 128;
0081 };
0082
0083 SiStripBaselineComparator::SiStripBaselineComparator(const edm::ParameterSet& conf) {
0084 usesResource(TFileService::kSharedResource);
0085
0086 srcClusters_ = consumes<edmNew::DetSetVector<SiStripCluster> >(conf.getParameter<edm::InputTag>("srcClusters"));
0087 srcClusters2_ = consumes<edmNew::DetSetVector<SiStripCluster> >(conf.getParameter<edm::InputTag>("srcClusters2"));
0088
0089 h1_nOldClusters_ = fs_->make<TH1F>(
0090 "nOldClusters", "nOldClusters;ClusterSize", nbins_clusterSize_, min_clusterSize_, max_clusterSize_);
0091 h1_nMatchedClusters_ = fs_->make<TH1F>(
0092 "nMatchedClusters", "nMatchedClusters;ClusterSize", nbins_clusterSize_, min_clusterSize_, max_clusterSize_);
0093 h1_nSplitClusters_ = fs_->make<TH1F>("nSplitClusters",
0094 "nMatchedClusters;ClusterSize; n Split Clusters",
0095 nbins_clusterSize_,
0096 min_clusterSize_,
0097 max_clusterSize_);
0098 h1_matchingMult_ = fs_->make<TProfile>("matchingMult",
0099 "matchingMult;ClusterSize; average number of clusters if split",
0100 nbins_clusterSize_,
0101 min_clusterSize_,
0102 max_clusterSize_);
0103 h1_matchedWidth_ = fs_->make<TProfile>("matchedWidth",
0104 "matchedWidth;ClusterSize;average #Delta Width",
0105 nbins_clusterSize_,
0106 min_clusterSize_,
0107 max_clusterSize_);
0108 h1_matchedCharges_ = fs_->make<TProfile>("matchedCharges",
0109 "matchedCharges;ClusterSize;cluster Charge ratio",
0110 nbins_clusterSize_,
0111 min_clusterSize_,
0112 max_clusterSize_);
0113 }
0114
0115 SiStripBaselineComparator::~SiStripBaselineComparator() = default;
0116
0117 void SiStripBaselineComparator::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0118 edm::ParameterSetDescription desc;
0119 desc.add<edm::InputTag>("srcClusters", edm::InputTag("siStripClusters"));
0120 desc.add<edm::InputTag>("srcClusters2", edm::InputTag("moddedsiStripClusters"));
0121 descriptions.add("siStripBaselineComparator", desc);
0122 }
0123
0124 void SiStripBaselineComparator::analyze(const edm::Event& e, const edm::EventSetup& es) {
0125 edm::Handle<edmNew::DetSetVector<SiStripCluster> > clusters;
0126 e.getByToken(srcClusters_, clusters);
0127 edm::Handle<edmNew::DetSetVector<SiStripCluster> > clusters2;
0128 e.getByToken(srcClusters2_, clusters2);
0129
0130 for (auto const& set : *clusters) {
0131 for (auto const& clus : set) {
0132 h1_nOldClusters_->Fill(clus.amplitudes().size(), 1);
0133 int nMatched = 0;
0134 const int charge1 = std::accumulate(clus.amplitudes().begin(), clus.amplitudes().end(), 0);
0135 std::vector<int> matchedWidths;
0136 std::vector<int> matchedCharges;
0137
0138
0139 for (auto const& set2 : *clusters2) {
0140 if (set.id() != set2.id())
0141 continue;
0142 for (auto const& clus2 : set2) {
0143 const int charge2 = std::accumulate(clus2.amplitudes().begin(), clus2.amplitudes().end(), 0);
0144 if ((clus.firstStrip() <= clus2.firstStrip()) &&
0145 (clus2.firstStrip() < clus.firstStrip() + clus.amplitudes().size())) {
0146 matchedWidths.push_back(clus2.amplitudes().size());
0147 matchedCharges.push_back(charge2);
0148 if (nMatched == 0) {
0149 h1_nMatchedClusters_->Fill(clus.amplitudes().size(), 1);
0150 } else if (nMatched == 1) {
0151 h1_nSplitClusters_->Fill(clus.amplitudes().size(), 1);
0152 }
0153 ++nMatched;
0154 }
0155 }
0156 }
0157 for (int i = 0; i < nMatched; i++) {
0158 if (matchedWidths.at(i) - clus.amplitudes().size() < 1000)
0159 h1_matchedWidth_->Fill(clus.amplitudes().size(), matchedWidths.at(i) - clus.amplitudes().size());
0160 if (charge1 != 0 && matchedCharges.at(i) / (float)charge1 < 10000000)
0161 h1_matchedCharges_->Fill(clus.amplitudes().size(), matchedCharges.at(i) / (float)charge1);
0162 }
0163 if (nMatched > 1)
0164 h1_matchingMult_->Fill(clus.amplitudes().size(), nMatched);
0165 }
0166 }
0167 }
0168
0169
0170 void SiStripBaselineComparator::beginJob() {}
0171
0172
0173 void SiStripBaselineComparator::endJob() {}
0174
0175
0176 DEFINE_FWK_MODULE(SiStripBaselineComparator);