File indexing completed on 2023-03-17 11:20:17
0001 #include "FWCore/Framework/interface/Frameworkfwd.h"
0002 #include "FWCore/Framework/interface/global/EDAnalyzer.h"
0003 #include "FWCore/Framework/interface/Event.h"
0004 #include "FWCore/Framework/interface/EventSetup.h"
0005 #include "FWCore/Framework/interface/ESTransientHandle.h"
0006 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0007 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0008 #include "FWCore/Utilities/interface/StreamID.h"
0009
0010 #include "RecoMTD/DetLayers/interface/MTDDetLayerGeometry.h"
0011 #include "RecoMTD/Records/interface/MTDRecoGeometryRecord.h"
0012
0013 #include "RecoMTD/DetLayers/interface/MTDSectorForwardDoubleLayer.h"
0014 #include "RecoMTD/DetLayers/interface/MTDDetSector.h"
0015
0016 #include <DataFormats/ForwardDetId/interface/ETLDetId.h>
0017
0018 #include <sstream>
0019
0020 using namespace std;
0021 using namespace edm;
0022
0023 class TestETLNavigation : public global::EDAnalyzer<> {
0024 public:
0025 TestETLNavigation(const ParameterSet& pset);
0026
0027 void analyze(edm::StreamID, edm::Event const&, edm::EventSetup const&) const override;
0028
0029 private:
0030 const edm::ESInputTag tag_;
0031 edm::ESGetToken<MTDDetLayerGeometry, MTDRecoGeometryRecord> geomToken_;
0032 };
0033
0034 TestETLNavigation::TestETLNavigation(const ParameterSet& iConfig) : tag_(edm::ESInputTag{"", ""}) {
0035 geomToken_ = esConsumes<MTDDetLayerGeometry, MTDRecoGeometryRecord>(tag_);
0036 }
0037
0038 void TestETLNavigation::analyze(edm::StreamID, edm::Event const&, edm::EventSetup const& es) const {
0039 auto geo = es.getTransientHandle(geomToken_);
0040
0041 const vector<const DetLayer*>& layers = geo->allETLLayers();
0042
0043
0044
0045 LogVerbatim("MTDLayerDump") << "\n\nTest of ETL navigation \n\n";
0046
0047 for (const auto& ilay : layers) {
0048 const MTDSectorForwardDoubleLayer* layer = static_cast<const MTDSectorForwardDoubleLayer*>(ilay);
0049
0050 LogVerbatim("MTDLayerDump") << std::fixed << "\nETL layer " << std::setw(4) << layer->subDetector()
0051 << " at z = " << std::setw(14) << layer->surface().position().z()
0052 << " sectors = " << std::setw(14) << layer->sectors().size()
0053 << " dets = " << std::setw(14) << layer->basicComponents().size()
0054 << " front dets = " << std::setw(14) << layer->frontLayer()->basicComponents().size()
0055 << " back dets = " << std::setw(14) << layer->backLayer()->basicComponents().size();
0056
0057 unsigned int isectInd(0);
0058 for (const auto& isector : layer->sectors()) {
0059 isectInd++;
0060 LogVerbatim("MTDLayerDump") << std::fixed << "\nSector " << std::setw(4) << isectInd << "\n" << (*isector);
0061 unsigned int imodInd(0);
0062 for (const auto& imod : isector->basicComponents()) {
0063 imodInd++;
0064 ETLDetId modId(imod->geographicalId().rawId());
0065 LogVerbatim("MTDLayerDump") << std::fixed << std::setw(5) << imodInd << " ETLDetId " << modId.rawId()
0066 << " side = " << std::setw(4) << modId.mtdSide()
0067 << " Disc/Side/Sector = " << std::setw(4) << modId.nDisc() << " " << std::setw(4)
0068 << modId.discSide() << " " << std::setw(4) << modId.sector()
0069 << " mod/type = " << std::setw(4) << modId.module() << " " << std::setw(4)
0070 << modId.modType() << " pos = " << std::setprecision(4) << imod->position();
0071 for (int iside = -1; iside <= 1; iside += 2) {
0072 size_t idetNew = isector->hshift(modId, iside);
0073 if (idetNew >= isector->basicComponents().size()) {
0074 LogVerbatim("MTDLayerDump") << "...............hshift= " << std::fixed << std::setw(2) << iside
0075 << " out of range";
0076 } else {
0077 ETLDetId newId(isector->basicComponents()[idetNew]->geographicalId().rawId());
0078 LogVerbatim("MTDLayerDump") << std::fixed << "...............hshift= " << std::setw(2) << iside
0079 << " side = " << std::setw(4) << newId.mtdSide()
0080 << " Disc/Side/Sector = " << std::setw(4) << newId.nDisc() << " "
0081 << std::setw(4) << newId.discSide() << " " << std::setw(4) << newId.sector()
0082 << " mod/type = " << std::setw(4) << newId.module() << " " << std::setw(4)
0083 << newId.modType() << " pos = " << std::setprecision(4)
0084 << isector->basicComponents()[idetNew]->position();
0085 }
0086 }
0087 for (int iside = -1; iside <= 1; iside += 2) {
0088 size_t closest(isector->basicComponents().size());
0089 size_t idetNew = isector->vshift(modId, iside, closest);
0090 if (idetNew >= isector->basicComponents().size()) {
0091 LogVerbatim("MTDLayerDump") << "...............vshift= " << std::fixed << std::setw(2) << iside
0092 << " out of range";
0093 if (closest < isector->basicComponents().size()) {
0094 ETLDetId newId(isector->basicComponents()[closest]->geographicalId().rawId());
0095 LogVerbatim("MTDLayerDump")
0096 << std::fixed << ".......closest.vshift= " << std::setw(2) << iside << " side = " << std::setw(4)
0097 << newId.mtdSide() << " Disc/Side/Sector = " << std::setw(4) << newId.nDisc() << " " << std::setw(4)
0098 << newId.discSide() << " " << std::setw(4) << newId.sector() << " mod/type = " << std::setw(4)
0099 << newId.module() << " " << std::setw(4) << newId.modType() << " pos = " << std::setprecision(4)
0100 << isector->basicComponents()[closest]->position();
0101 }
0102 } else {
0103 ETLDetId newId(isector->basicComponents()[idetNew]->geographicalId().rawId());
0104 LogVerbatim("MTDLayerDump") << std::fixed << "...............vshift= " << std::setw(2) << iside
0105 << " side = " << std::setw(4) << newId.mtdSide()
0106 << " Disc/Side/Sector = " << std::setw(4) << newId.nDisc() << " "
0107 << std::setw(4) << newId.discSide() << " " << std::setw(4) << newId.sector()
0108 << " mod/type = " << std::setw(4) << newId.module() << " " << std::setw(4)
0109 << newId.modType() << " pos = " << std::setprecision(4)
0110 << isector->basicComponents()[idetNew]->position();
0111 }
0112 }
0113 }
0114 }
0115 }
0116 }
0117
0118
0119 #include <FWCore/Framework/interface/MakerMacros.h>
0120 DEFINE_FWK_MODULE(TestETLNavigation);