File indexing completed on 2023-06-01 00:41:28
0001
0002
0003
0004
0005
0006 #include <memory>
0007 #include <fstream>
0008 #include <FWCore/Framework/interface/Frameworkfwd.h>
0009
0010 #include <FWCore/Framework/interface/one/EDAnalyzer.h>
0011 #include <FWCore/Framework/interface/Event.h>
0012 #include <FWCore/Framework/interface/EventSetup.h>
0013 #include <FWCore/MessageLogger/interface/MessageLogger.h>
0014 #include <FWCore/ParameterSet/interface/ParameterSet.h>
0015
0016 #include "Geometry/RPCGeometry/interface/RPCGeometry.h"
0017 #include "Geometry/RPCGeometry/interface/RPCRollSpecs.h"
0018 #include "Geometry/RPCGeometry/interface/RPCGeomServ.h"
0019 #include <Geometry/Records/interface/MuonGeometryRecord.h>
0020 #include <Geometry/CommonTopologies/interface/RectangularStripTopology.h>
0021 #include <Geometry/CommonTopologies/interface/TrapezoidalStripTopology.h>
0022
0023 #include <string>
0024 #include <cmath>
0025 #include <vector>
0026 #include <iomanip>
0027 #include <set>
0028
0029 class RPCRadiiAnalyzer : public edm::one::EDAnalyzer<> {
0030 public:
0031 RPCRadiiAnalyzer(const edm::ParameterSet& pset);
0032
0033 ~RPCRadiiAnalyzer() override;
0034
0035 void beginJob() override {}
0036 void analyze(edm::Event const& iEvent, edm::EventSetup const&) override;
0037 void endJob() override {}
0038
0039 const std::string& myName() { return myName_; }
0040
0041 private:
0042 const edm::ESGetToken<RPCGeometry, MuonGeometryRecord> tokRPC_;
0043 const int dashedLineWidth_;
0044 const std::string dashedLine_;
0045 const std::string myName_;
0046 std::ofstream ofos;
0047 };
0048
0049 RPCRadiiAnalyzer::RPCRadiiAnalyzer(const edm::ParameterSet& )
0050 : tokRPC_{esConsumes<RPCGeometry, MuonGeometryRecord>(edm::ESInputTag{})},
0051 dashedLineWidth_(104),
0052 dashedLine_(std::string(dashedLineWidth_, '-')),
0053 myName_("RPCRadiiAnalyzer") {
0054 ofos.open("MytestOutput.out");
0055 edm::LogVerbatim("RPCGeometry") << "======================== Opening output file";
0056 }
0057
0058 RPCRadiiAnalyzer::~RPCRadiiAnalyzer() {
0059 ofos.close();
0060 edm::LogVerbatim("RPCGeometry") << "======================== Closing output file";
0061 }
0062
0063 void RPCRadiiAnalyzer::analyze(const edm::Event& , const edm::EventSetup& iSetup) {
0064 const RPCGeometry* pDD = &iSetup.getData(tokRPC_);
0065
0066 ofos << myName() << ": Analyzer..." << std::endl;
0067 ofos << "start " << dashedLine_ << std::endl;
0068
0069 ofos << " Geometry node for RPCGeom is " << &(*pDD) << std::endl;
0070 ofos << " I have " << pDD->detTypes().size() << " detTypes" << std::endl;
0071 ofos << " I have " << pDD->detUnits().size() << " detUnits" << std::endl;
0072 ofos << " I have " << pDD->dets().size() << " dets" << std::endl;
0073 ofos << " I have " << pDD->rolls().size() << " rolls" << std::endl;
0074 ofos << " I have " << pDD->chambers().size() << " chambers" << std::endl;
0075
0076 ofos << myName() << ": Begin iteration over geometry..." << std::endl;
0077 ofos << "iter " << dashedLine_ << std::endl;
0078
0079 const double dPi = 3.14159265358;
0080 const double radToDeg = 180. / dPi;
0081
0082 for (auto it : pDD->dets()) {
0083
0084
0085 if (dynamic_cast<const RPCChamber*>(it) != nullptr) {
0086 const RPCChamber* ch = dynamic_cast<const RPCChamber*>(it);
0087
0088
0089
0090 std::vector<const RPCRoll*> rolls = (ch->rolls());
0091 for (auto& roll : rolls) {
0092 if (roll->id().region() == -1 && roll->id().station() > 0)
0093
0094 {
0095
0096 RPCGeomServ geosvc(roll->id());
0097 LocalPoint centre(0., 0., 0.);
0098 GlobalPoint gc = roll->toGlobal(centre);
0099 double phic = double(gc.phi()) * radToDeg;
0100 double radii = double(gc.perp());
0101 ofos << geosvc.name() << " phi=" << phic << " r=" << radii << " detName " << roll->specs()->detName()
0102 << " s=" << roll->id().sector() << " subs=" << roll->id().subsector() << std::endl;
0103 }
0104 }
0105 }
0106 }
0107 edm::LogVerbatim("RPCGeometry") << dashedLine_ << " end";
0108 }
0109
0110
0111 #include <FWCore/Framework/interface/MakerMacros.h>
0112 DEFINE_FWK_MODULE(RPCRadiiAnalyzer);