File indexing completed on 2024-04-06 12:15:31
0001 #include "Geometry/VeryForwardGeometryBuilder/interface/DetGeomDescBuilder.h"
0002
0003 #include "DataFormats/CTPPSDetId/interface/CTPPSDetId.h"
0004 #include "DetectorDescription/DDCMS/interface/DDDetector.h"
0005 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0006
0007
0008
0009
0010 std::unique_ptr<DetGeomDesc> detgeomdescbuilder::buildDetGeomDescFromCompactView(const DDCompactView& myCompactView,
0011 const bool isRun2) {
0012
0013 DDPassAllFilter filter;
0014 DDFilteredView fv(myCompactView, filter);
0015
0016
0017 auto geoInfoRoot = std::make_unique<DetGeomDesc>(fv, isRun2);
0018
0019
0020 detgeomdescbuilder::buildDetGeomDescDescendants(fv, geoInfoRoot.get(), isRun2);
0021
0022 edm::LogInfo("PPSGeometryESProducer") << "Successfully built geometry.";
0023
0024 return geoInfoRoot;
0025 }
0026
0027
0028
0029
0030
0031 void detgeomdescbuilder::buildDetGeomDescDescendants(DDFilteredView& fv, DetGeomDesc* geoInfo, const bool isRun2) {
0032
0033 if (!fv.firstChild())
0034 return;
0035
0036 do {
0037
0038 DetGeomDesc* child = new DetGeomDesc(fv, isRun2);
0039
0040
0041 const auto& detId = child->geographicalID();
0042 if (isRun2 && detId.subdetId() == CTPPSDetId::sdTimingDiamond)
0043 child->invertZSign();
0044
0045
0046 geoInfo->addComponent(child);
0047
0048
0049 buildDetGeomDescDescendants(fv, child, isRun2);
0050 } while (fv.nextSibling());
0051
0052 fv.parent();
0053 }
0054
0055
0056
0057
0058 std::unique_ptr<DetGeomDesc> detgeomdescbuilder::buildDetGeomDescFromCompactView(
0059 const cms::DDCompactView& myCompactView, const bool isRun2) {
0060
0061 const cms::DDDetector* mySystem = myCompactView.detector();
0062 const dd4hep::Volume& worldVolume = mySystem->worldVolume();
0063 cms::DDFilteredView fv(mySystem, worldVolume);
0064 if (fv.next(0) == false) {
0065 edm::LogError("PPSGeometryESProducer") << "Filtered view is empty. Cannot build.";
0066 }
0067
0068
0069 auto geoInfoRoot = std::make_unique<DetGeomDesc>(fv, isRun2);
0070
0071
0072 do {
0073
0074 DetGeomDesc* child = new DetGeomDesc(fv, isRun2);
0075
0076
0077 const auto& detId = child->geographicalID();
0078 if (isRun2 && detId.subdetId() == CTPPSDetId::sdTimingDiamond)
0079 child->invertZSign();
0080
0081
0082 geoInfoRoot->addComponent(child);
0083 } while (fv.next(0));
0084
0085 edm::LogInfo("PPSGeometryESProducer") << "Successfully built geometry, it has " << (geoInfoRoot->components()).size()
0086 << " DetGeomDesc nodes.";
0087
0088 return geoInfoRoot;
0089 }