Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2023-06-01 00:41:28

0001 /** Derived from DTRadiiAnalyzer by Nicola Amapane
0002  *
0003  *  \author M. Maggi - INFN Bari
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& /*iConfig*/)
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& /*iEvent*/, 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;  //@@ Where to get pi from?
0081 
0082   for (auto it : pDD->dets()) {
0083     //      //----------------------- RPCCHAMBER TEST -------------------------------------------------------
0084 
0085     if (dynamic_cast<const RPCChamber*>(it) != nullptr) {
0086       const RPCChamber* ch = dynamic_cast<const RPCChamber*>(it);
0087 
0088       //RPCDetId detId=ch->id();
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                                                                     //     (*r)->id().ring() == 2)
0094         {
0095           //        ofos<<"RPCDetId = "<<(*r)->id()<<std::endl;
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 //define this as a plug-in
0111 #include <FWCore/Framework/interface/MakerMacros.h>
0112 DEFINE_FWK_MODULE(RPCRadiiAnalyzer);