File indexing completed on 2024-04-06 12:11:46
0001 #ifndef GEOMETRY_FWTGEORECO_GEOMETRY_ES_PRODUCER_H
0002 #define GEOMETRY_FWTGEORECO_GEOMETRY_ES_PRODUCER_H
0003
0004 #include <memory>
0005
0006 #include "FWCore/Framework/interface/ESProducer.h"
0007 #include "FWCore/Utilities/interface/ESGetToken.h"
0008 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
0009
0010 namespace edm {
0011 class ParameterSet;
0012 }
0013
0014 class CaloGeometry;
0015 class CaloGeometryRecord;
0016 class GlobalTrackingGeometry;
0017 class GlobalTrackingGeometryRecord;
0018 class TrackerGeometry;
0019 class TrackerTopology;
0020 class TrackerTopologyRcd;
0021 class FWTGeoRecoGeometry;
0022 class FWTGeoRecoGeometryRecord;
0023
0024 class TGeoManager;
0025 class TGeoShape;
0026 class TGeoVolume;
0027 class TGeoMaterial;
0028 class TGeoMedium;
0029 class GeomDet;
0030 class CaloCellGeometry;
0031 class FWTGeoRecoGeometryESProducer : public edm::ESProducer {
0032 enum ERecoDet {
0033 kDummy,
0034 kSiPixel,
0035 kSiStrip,
0036 kMuonDT,
0037 kMuonRPC,
0038 kMuonCSC,
0039 kMuonGEM,
0040 kMuonME0,
0041 kECal,
0042 kHCal,
0043 kCaloTower,
0044 kHGCE,
0045 kHGCH
0046 };
0047
0048 public:
0049 FWTGeoRecoGeometryESProducer(const edm::ParameterSet&);
0050 ~FWTGeoRecoGeometryESProducer(void) override;
0051
0052 std::unique_ptr<FWTGeoRecoGeometry> produce(const FWTGeoRecoGeometryRecord&);
0053
0054 private:
0055 FWTGeoRecoGeometryESProducer(const FWTGeoRecoGeometryESProducer&);
0056 const FWTGeoRecoGeometryESProducer& operator=(const FWTGeoRecoGeometryESProducer&);
0057
0058 TGeoManager* createManager(int level);
0059 TGeoShape* createShape(const GeomDet* det);
0060 TGeoVolume* createVolume(const std::string& name, const GeomDet* det, ERecoDet = kDummy);
0061
0062
0063 TGeoVolume* GetDaughter(TGeoVolume* mother, const char* prefix, ERecoDet cidx, int id);
0064 TGeoVolume* GetDaughter(TGeoVolume* mother, const char* prefix, ERecoDet cidx);
0065 TGeoVolume* GetTopHolder(const char* prefix, ERecoDet cidx);
0066
0067 TGeoMedium* GetMedium(ERecoDet);
0068
0069 void addPixelBarrelGeometry();
0070 void addPixelForwardGeometry();
0071 void addTIBGeometry();
0072 void addTOBGeometry();
0073 void addTIDGeometry();
0074 void addTECGeometry();
0075 void addCSCGeometry();
0076 void addDTGeometry();
0077 void addRPCGeometry();
0078 void addGEMGeometry();
0079 void addME0Geometry();
0080 void addEcalCaloGeometry();
0081 void addHcalCaloGeometryBarrel();
0082 void addHcalCaloGeometryEndcap();
0083 void addHcalCaloGeometryOuter();
0084 void addHcalCaloGeometryForward();
0085 void addCaloTowerGeometry();
0086
0087 std::map<std::string, TGeoShape*> m_nameToShape;
0088 std::map<TGeoShape*, TGeoVolume*> m_shapeToVolume;
0089 std::map<ERecoDet, TGeoMedium*> m_recoMedium;
0090
0091 edm::ESGetToken<GlobalTrackingGeometry, GlobalTrackingGeometryRecord> m_trackingGeomToken;
0092 edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> m_trackerTopologyToken;
0093 edm::ESGetToken<CaloGeometry, CaloGeometryRecord> m_caloGeomToken;
0094
0095 const GlobalTrackingGeometry* m_trackingGeom = nullptr;
0096 const CaloGeometry* m_caloGeom = nullptr;
0097 const TrackerGeometry* m_trackerGeom = nullptr;
0098 const TrackerTopology* m_trackerTopology = nullptr;
0099
0100 TGeoMedium* m_dummyMedium = nullptr;
0101
0102 bool m_tracker;
0103 bool m_muon;
0104 bool m_gem;
0105 bool m_calo;
0106 };
0107
0108 #endif