File indexing completed on 2024-10-20 23:05:35
0001 #include <iostream>
0002 #include <sstream>
0003 #include <string>
0004 #include <vector>
0005
0006 #include "FWCore/Framework/interface/Frameworkfwd.h"
0007 #include "FWCore/Framework/interface/one/EDAnalyzer.h"
0008 #include "FWCore/Framework/interface/Event.h"
0009 #include "FWCore/Framework/interface/EventSetup.h"
0010 #include "FWCore/Framework/interface/ESTransientHandle.h"
0011 #include "FWCore/Framework/interface/MakerMacros.h"
0012 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0013 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0014 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0015
0016 #include "Geometry/Records/interface/CaloGeometryRecord.h"
0017 #include "Geometry/CaloGeometry/interface/CaloGeometry.h"
0018 #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h"
0019 #include "Geometry/ForwardGeometry/interface/ZdcGeometry.h"
0020 #include "DataFormats/HcalDetId/interface/HcalZDCDetId.h"
0021
0022 class ZdcGeometryTester : public edm::one::EDAnalyzer<edm::one::WatchRuns> {
0023 public:
0024 explicit ZdcGeometryTester(const edm::ParameterSet&);
0025
0026 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0027
0028 private:
0029 void analyze(edm::Event const&, edm::EventSetup const&) override;
0030 void beginJob() override {}
0031 void beginRun(edm::Run const&, edm::EventSetup const&) override {}
0032 void endRun(edm::Run const&, edm::EventSetup const&) override {}
0033 void doTest(const ZdcGeometry& geometry);
0034
0035
0036 const edm::ESGetToken<CaloGeometry, CaloGeometryRecord> tokGeom_;
0037 };
0038
0039 ZdcGeometryTester::ZdcGeometryTester(const edm::ParameterSet&)
0040 : tokGeom_{esConsumes<CaloGeometry, CaloGeometryRecord>()} {}
0041
0042 void ZdcGeometryTester::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0043 edm::ParameterSetDescription desc;
0044 desc.setUnknown();
0045 descriptions.add("zdcGeometryTester", desc);
0046 }
0047
0048 void ZdcGeometryTester::analyze(edm::Event const&, edm::EventSetup const& iSetup) {
0049 auto geo = &iSetup.getData(tokGeom_);
0050 const ZdcGeometry* geom =
0051 dynamic_cast<const ZdcGeometry*>(geo->getSubdetectorGeometry(DetId::Calo, HcalZDCDetId::SubdetectorId));
0052 doTest(*geom);
0053 }
0054
0055 void ZdcGeometryTester::doTest(const ZdcGeometry& geom) {
0056
0057 std::vector<DetId> valids = geom.getValidDetIds();
0058 CaloSubdetectorGeometry::TrVec tVec;
0059 CaloSubdetectorGeometry::IVec iVec;
0060 CaloSubdetectorGeometry::DimVec dVec;
0061 CaloSubdetectorGeometry::IVec dins;
0062 geom.getSummary(tVec, iVec, dVec, dins);
0063 edm::LogVerbatim("HCalGeom") << "\nTotal number of dense indices: " << dins.size() << " valid de IDs "
0064 << valids.size() << std::endl;
0065 std::vector<int> ndet(4, 0);
0066 std::vector<std::string> dets = {"EM", "HAD", "LUM", "RPD"};
0067 int unknown(0);
0068 for (auto& di : valids) {
0069 HcalZDCDetId id = HcalZDCDetId(di);
0070 HcalZDCDetId::Section section = id.section();
0071 if (section == HcalZDCDetId::EM)
0072 ++ndet[0];
0073 else if (section == HcalZDCDetId::HAD)
0074 ++ndet[1];
0075 else if (section == HcalZDCDetId::LUM)
0076 ++ndet[2];
0077 else if (section == HcalZDCDetId::RPD)
0078 ++ndet[3];
0079 else
0080 ++unknown;
0081 }
0082 std::ostringstream st1;
0083 st1 << "Number of IDs for";
0084 for (unsigned int k = 0; k < ndet.size(); ++k)
0085 st1 << " " << dets[k] << ": " << ndet[k];
0086 edm::LogVerbatim("HCalGeom") << st1.str() << " and unknown section:" << unknown;
0087
0088
0089 edm::LogVerbatim("HCalGeom") << "\nTest on Positions and getclosest cell"
0090 << "\n=====================================";
0091 for (auto& di : valids) {
0092 HcalZDCDetId id = HcalZDCDetId(di);
0093 auto cell = geom.getGeometry(static_cast<DetId>(id));
0094 if (cell) {
0095 GlobalPoint pos = cell->getPosition();
0096 DetId idn = geom.getClosestCell(pos);
0097 std::string found = (id.rawId() == idn.rawId()) ? " Matched " : " ***** ERROR No Match *****";
0098 edm::LogVerbatim("HCalGeom") << id << " at " << pos << found;
0099 } else {
0100 edm::LogVerbatim("HcalGeom") << id << " ***** ERROR No Cell *****";
0101 }
0102 }
0103 }
0104
0105
0106 DEFINE_FWK_MODULE(ZdcGeometryTester);