File indexing completed on 2025-06-03 00:12:13
0001 #include "FWCore/Framework/interface/one/EDAnalyzer.h"
0002 #include "FWCore/Framework/interface/Run.h"
0003 #include "FWCore/Framework/interface/Event.h"
0004 #include "FWCore/Framework/interface/EventSetup.h"
0005 #include "FWCore/Framework/interface/MakerMacros.h"
0006 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0007 #include "FWCore/ServiceRegistry/interface/Service.h"
0008 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0009 #include "FWCore/Utilities/interface/EDGetToken.h"
0010 #include "FWCore/Utilities/interface/InputTag.h"
0011 #include "FWCore/Utilities/interface/Exception.h"
0012 #include "CommonTools/UtilAlgos/interface/TFileService.h"
0013 #include "DataFormats/Common/interface/Handle.h"
0014
0015 #include "L1Trigger/TrackTrigger/interface/Setup.h"
0016
0017 #include <TProfile.h>
0018 #include <TH1F.h>
0019
0020 #include <vector>
0021 #include <deque>
0022
0023 namespace trackerDTC {
0024
0025
0026
0027
0028
0029
0030 class AnalyzerDAQ : public edm::one::EDAnalyzer<edm::one::WatchRuns, edm::one::SharedResources> {
0031 public:
0032 AnalyzerDAQ(const edm::ParameterSet& iConfig);
0033 void beginRun(const edm::Run& iEvent, const edm::EventSetup& iSetup) override;
0034 void analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) override;
0035 void endRun(const edm::Run& iEvent, const edm::EventSetup& iSetup) override {}
0036 void endJob() override {}
0037
0038 private:
0039
0040 edm::EDGetTokenT<TTClusterDetSetVec> edGetToken_;
0041
0042 edm::ESGetToken<tt::Setup, tt::SetupRcd> esGetTokenSetup_;
0043
0044
0045
0046 TProfile* profModules_;
0047 TH1F* hisModules_;
0048 TProfile* profDTCs_;
0049 TH1F* hisDTCs_;
0050 TH1F* hisTracker_;
0051 };
0052
0053 AnalyzerDAQ::AnalyzerDAQ(const edm::ParameterSet& iConfig) {
0054 usesResource("TFileService");
0055
0056 const auto& inputTag = iConfig.getParameter<edm::InputTag>("InputTagTTClusterDetSetVec");
0057 edGetToken_ = consumes<TTClusterDetSetVec>(inputTag);
0058
0059 esGetTokenSetup_ = esConsumes<edm::Transition::BeginRun>();
0060 }
0061
0062 void AnalyzerDAQ::beginRun(const edm::Run& iEvent, const edm::EventSetup& iSetup) {
0063
0064 const tt::Setup* setup = &iSetup.getData(esGetTokenSetup_);
0065
0066 edm::Service<TFileService> fs;
0067 TFileDirectory dir;
0068 dir = fs->mkdir("Modules");
0069 int maxOcc = 150;
0070 int numChannels = setup->numDTCs() * setup->numModulesPerDTC();
0071 hisModules_ = dir.make<TH1F>("His Module Occupancy", ";", maxOcc, -.5, maxOcc - .5);
0072 profModules_ = dir.make<TProfile>("Prof Module Occupancy", ";", numChannels, -.5, numChannels - .5);
0073 dir = fs->mkdir("DTCs");
0074 maxOcc = 3456;
0075 numChannels = setup->numDTCs();
0076 hisDTCs_ = dir.make<TH1F>("His DTC Occupancy", ";", maxOcc / 16, -.5, maxOcc - .5);
0077 profDTCs_ = dir.make<TProfile>("Prof DTC Occupancy", ";", numChannels, -.5, numChannels - .5);
0078 dir = fs->mkdir("Tracker");
0079 maxOcc = pow(2, 29);
0080 hisTracker_ = dir.make<TH1F>("His Tracker Occupancy", ";", maxOcc * pow(2., -12), -.5, maxOcc - .5);
0081 }
0082
0083 void AnalyzerDAQ::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
0084 const tt::Setup* setup = &iSetup.getData(esGetTokenSetup_);
0085
0086 edm::Handle<TTClusterDetSetVec> handle;
0087 iEvent.getByToken<TTClusterDetSetVec>(edGetToken_, handle);
0088
0089 std::vector<std::vector<std::deque<TTClusterRef>>> dtcs(
0090 setup->numDTCs(), std::vector<std::deque<TTClusterRef>>(setup->numModulesPerDTC()));
0091 for (auto itModule = handle->begin(); itModule != handle->end(); itModule++) {
0092
0093 const DetId& detIdModule = itModule->detId();
0094 const int offset = setup->trackerTopology()->isLower(detIdModule) ? 0 : setup->offsetDetIdTP();
0095 const DetId detId = detIdModule + offset;
0096
0097 tt::SensorModule* sm = setup->sensorModule(detId);
0098
0099 std::deque<TTClusterRef>& module = dtcs[sm->dtcId()][sm->modId()];
0100 for (TTClusterDetSet::const_iterator itCluster = itModule->begin(); itCluster != itModule->end(); itCluster++)
0101 module.emplace_back(makeRefTo(handle, itCluster));
0102 }
0103
0104 int iDTC(0);
0105 int iModule(0);
0106 int nAll(0);
0107 for (const std::vector<std::deque<TTClusterRef>>& dtc : dtcs) {
0108 int nCluster(0);
0109 for (const std::deque<TTClusterRef>& module : dtc) {
0110 nCluster += module.size();
0111 hisModules_->Fill(module.size());
0112 profModules_->Fill(iModule++, module.size());
0113 }
0114 nAll += nCluster;
0115 hisDTCs_->Fill(nCluster);
0116 profDTCs_->Fill(iDTC++, nCluster);
0117 }
0118 hisTracker_->Fill(nAll);
0119 }
0120
0121 }
0122
0123 DEFINE_FWK_MODULE(trackerDTC::AnalyzerDAQ);