Back to home page

Project CMSSW displayed by LXR

 
 

    


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   // ----------member data ---------------------------
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   // Total number of valid cells
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   // Positions and Get closest cell
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 //define this as a plug-in
0106 DEFINE_FWK_MODULE(ZdcGeometryTester);