From 9b4fd6592fd19b9f7f4b86098b31df7b578a55a4 Mon Sep 17 00:00:00 2001 From: Markus Frank <Markus.Frank@cern.ch> Date: Wed, 20 Sep 2017 19:25:17 +0200 Subject: [PATCH] A more complete version of the CMS tracker (though not fully converted) --- DDCMS/include/DDCMS/DDCMS.h | 37 +- DDCMS/include/DDCMS/DDCMSPlugins.h | 13 +- DDCMS/include/DDCMS/DDCMSTags.h | 21 + DDCMS/src/DDCMS.cpp | 256 +- DDCMS/src/plugins/DDDefinitions2Objects.cpp | 576 +++-- DDCMS/src/plugins/DDPixBarLayerAlgo.cpp | 113 +- DDCMS/src/plugins/DDTECCoolAlgo.cpp | 83 + DDCMS/src/plugins/DDTECModuleAlgo.cpp | 645 +++++ DDCMS/src/plugins/DDTECOptoHybAlgo.cpp | 100 + DDCMS/src/plugins/DDTECPhiAlgo.cpp | 81 + DDCMS/src/plugins/DDTECPhiAltAlgo.cpp | 82 + DDCMS/src/plugins/DDTIBLayerAlgo.cpp | 46 + DDCMS/src/plugins/DDTIDModuleAlgo.cpp | 46 + DDCMS/src/plugins/DDTIDRingAlgo.cpp | 125 + DDCMS/src/plugins/DDTOBRodAlgo.cpp | 46 + DDCMS/src/plugins/DDTrackerAngular.cpp | 116 + DDCMS/src/plugins/DDTrackerLinear.cpp | 71 +- DDCMS/src/plugins/DDTrackerPhiAlgo.cpp | 93 + DDCMS/src/plugins/DDTrackerPhiAltAlgo.cpp | 104 + DDCMS/src/plugins/DDTrackerXYZPosAlgo.cpp | 78 + DDCMS/src/plugins/DDTrackerZPosAlgo.cpp | 73 + DDCore/include/DD4hep/Printout.h | 21 + DDCore/include/XML/XMLElements.h | 37 +- DDCore/src/Printout.cpp | 34 + .../DDCMS/{CMS-tracker.png => CMS-pixbar.png} | Bin examples/DDCMS/CMS-tracker1.png | Bin 0 -> 286691 bytes examples/DDCMS/data/cms_tracker.xml | 251 +- examples/DDCMS/data/pixfwd.xml | 170 ++ examples/DDCMS/data/pixfwdBlade.xml | 551 ++++ examples/DDCMS/data/pixfwdCommon.xml | 26 + examples/DDCMS/data/pixfwdCylinder.xml | 343 +++ examples/DDCMS/data/pixfwdDisk.xml | 278 ++ examples/DDCMS/data/pixfwdMaterials.xml | 2 +- examples/DDCMS/data/pixfwdNipple.xml | 377 +++ examples/DDCMS/data/pixfwdPanel.xml | 202 ++ examples/DDCMS/data/pixfwdPanelBase.xml | 301 +++ examples/DDCMS/data/pixfwdPlaq.xml | 88 + examples/DDCMS/data/pixfwdPlaq1x2.xml | 173 ++ examples/DDCMS/data/pixfwdPlaq1x5.xml | 189 ++ examples/DDCMS/data/pixfwdPlaq2x3.xml | 196 ++ examples/DDCMS/data/pixfwdPlaq2x4.xml | 206 ++ examples/DDCMS/data/pixfwdPlaq2x5.xml | 213 ++ examples/DDCMS/data/pixfwdTest.xml | 43 + examples/DDCMS/data/tec.xml | 389 +++ examples/DDCMS/data/tecbackplate.xml | 121 + examples/DDCMS/data/tecmaterial.xml | 1093 ++++++++ examples/DDCMS/data/tecmodpar.xml | 48 + examples/DDCMS/data/tecmodule0.xml | 37 + examples/DDCMS/data/tecmodule0r.xml | 93 + examples/DDCMS/data/tecmodule0s.xml | 105 + examples/DDCMS/data/tecmodule1.xml | 37 + examples/DDCMS/data/tecmodule1r.xml | 92 + examples/DDCMS/data/tecmodule1s.xml | 105 + examples/DDCMS/data/tecmodule2.xml | 123 + examples/DDCMS/data/tecmodule3.xml | 124 + examples/DDCMS/data/tecmodule4.xml | 38 + examples/DDCMS/data/tecmodule4r.xml | 95 + examples/DDCMS/data/tecmodule4s.xml | 108 + examples/DDCMS/data/tecmodule5.xml | 131 + examples/DDCMS/data/tecmodule6.xml | 127 + examples/DDCMS/data/tecpetal0.xml | 12 + examples/DDCMS/data/tecpetal0b.xml | 445 ++++ examples/DDCMS/data/tecpetal0f.xml | 445 ++++ examples/DDCMS/data/tecpetal3.xml | 12 + examples/DDCMS/data/tecpetal3b.xml | 390 +++ examples/DDCMS/data/tecpetal3f.xml | 385 +++ examples/DDCMS/data/tecpetal6b.xml | 359 +++ examples/DDCMS/data/tecpetal6f.xml | 354 +++ examples/DDCMS/data/tecpetal8b.xml | 332 +++ examples/DDCMS/data/tecpetal8f.xml | 327 +++ examples/DDCMS/data/tecpetalb.xml | 92 + examples/DDCMS/data/tecpetalf.xml | 113 + examples/DDCMS/data/tecpetpar.xml | 86 + examples/DDCMS/data/tecring0.xml | 20 + examples/DDCMS/data/tecring0b.xml | 30 + examples/DDCMS/data/tecring0f.xml | 47 + examples/DDCMS/data/tecring1.xml | 20 + examples/DDCMS/data/tecring1b.xml | 32 + examples/DDCMS/data/tecring1f.xml | 43 + examples/DDCMS/data/tecring2.xml | 20 + examples/DDCMS/data/tecring2b.xml | 45 + examples/DDCMS/data/tecring2f.xml | 48 + examples/DDCMS/data/tecring3.xml | 20 + examples/DDCMS/data/tecring3b.xml | 46 + examples/DDCMS/data/tecring3f.xml | 48 + examples/DDCMS/data/tecring4.xml | 20 + examples/DDCMS/data/tecring4b.xml | 47 + examples/DDCMS/data/tecring4f.xml | 47 + examples/DDCMS/data/tecring5.xml | 20 + examples/DDCMS/data/tecring5b.xml | 55 + examples/DDCMS/data/tecring5f.xml | 54 + examples/DDCMS/data/tecring6.xml | 20 + examples/DDCMS/data/tecring6b.xml | 50 + examples/DDCMS/data/tecring6f.xml | 46 + examples/DDCMS/data/tecservices.xml | 924 +++++++ examples/DDCMS/data/tecwheel.xml | 128 + examples/DDCMS/data/tecwheel6.xml | 237 ++ examples/DDCMS/data/tecwheela.xml | 190 ++ examples/DDCMS/data/tecwheelb.xml | 202 ++ examples/DDCMS/data/tecwheelc.xml | 202 ++ examples/DDCMS/data/tecwheeld.xml | 202 ++ examples/DDCMS/data/tib.xml | 48 + examples/DDCMS/data/tiblayer0.xml | 105 + examples/DDCMS/data/tiblayer1.xml | 105 + examples/DDCMS/data/tiblayer2.xml | 105 + examples/DDCMS/data/tiblayer3.xml | 105 + examples/DDCMS/data/tiblayerpar.xml | 45 + examples/DDCMS/data/tibmaterial.xml | 443 ++++ examples/DDCMS/data/tibmodpar.xml | 215 ++ examples/DDCMS/data/tibmodule0.xml | 145 ++ examples/DDCMS/data/tibmodule0a.xml | 114 + examples/DDCMS/data/tibmodule0b.xml | 115 + examples/DDCMS/data/tibmodule2.xml | 67 + examples/DDCMS/data/tibstring0.xml | 44 + examples/DDCMS/data/tibstring0ll.xml | 164 ++ examples/DDCMS/data/tibstring0lr.xml | 164 ++ examples/DDCMS/data/tibstring0ul.xml | 164 ++ examples/DDCMS/data/tibstring0ur.xml | 164 ++ examples/DDCMS/data/tibstring1.xml | 44 + examples/DDCMS/data/tibstring1ll.xml | 164 ++ examples/DDCMS/data/tibstring1lr.xml | 164 ++ examples/DDCMS/data/tibstring1ul.xml | 164 ++ examples/DDCMS/data/tibstring1ur.xml | 164 ++ examples/DDCMS/data/tibstring2.xml | 44 + examples/DDCMS/data/tibstring2ll.xml | 153 ++ examples/DDCMS/data/tibstring2lr.xml | 153 ++ examples/DDCMS/data/tibstring2ul.xml | 153 ++ examples/DDCMS/data/tibstring2ur.xml | 153 ++ examples/DDCMS/data/tibstring3.xml | 44 + examples/DDCMS/data/tibstring3ll.xml | 153 ++ examples/DDCMS/data/tibstring3lr.xml | 153 ++ examples/DDCMS/data/tibstring3ul.xml | 153 ++ examples/DDCMS/data/tibstring3ur.xml | 153 ++ examples/DDCMS/data/tibstringpar.xml | 118 + examples/DDCMS/data/tibtidcommonmaterial.xml | 570 +++++ examples/DDCMS/data/tibtidservices.xml | 394 +++ examples/DDCMS/data/tibtidservicesb.xml | 65 + examples/DDCMS/data/tibtidservicesf.xml | 65 + examples/DDCMS/data/tid.xml | 94 + examples/DDCMS/data/tidb.xml | 70 + examples/DDCMS/data/tidf.xml | 70 + examples/DDCMS/data/tidmaterial.xml | 340 +++ examples/DDCMS/data/tidmodpar.xml | 81 + examples/DDCMS/data/tidmodule0.xml | 183 ++ examples/DDCMS/data/tidmodule0l.xml | 69 + examples/DDCMS/data/tidmodule0r.xml | 69 + examples/DDCMS/data/tidmodule1.xml | 183 ++ examples/DDCMS/data/tidmodule1l.xml | 70 + examples/DDCMS/data/tidmodule1r.xml | 70 + examples/DDCMS/data/tidmodule2.xml | 183 ++ examples/DDCMS/data/tidring0.xml | 149 ++ examples/DDCMS/data/tidring0b.xml | 140 + examples/DDCMS/data/tidring0f.xml | 140 + examples/DDCMS/data/tidring1.xml | 158 ++ examples/DDCMS/data/tidring1b.xml | 142 ++ examples/DDCMS/data/tidring1f.xml | 142 ++ examples/DDCMS/data/tidring2.xml | 287 +++ examples/DDCMS/data/tidringpar.xml | 86 + examples/DDCMS/data/tob.xml | 1404 ++++++++++ examples/DDCMS/data/tobmaterial.xml | 2248 +++++++++++++++++ examples/DDCMS/data/tobmodpar.xml | 178 ++ examples/DDCMS/data/tobmodule0.xml | 267 ++ examples/DDCMS/data/tobmodule2.xml | 130 + examples/DDCMS/data/tobmodule4.xml | 130 + examples/DDCMS/data/tobrod0.xml | 26 + examples/DDCMS/data/tobrod0c.xml | 71 + examples/DDCMS/data/tobrod0h.xml | 144 ++ examples/DDCMS/data/tobrod0l.xml | 144 ++ examples/DDCMS/data/tobrod1.xml | 26 + examples/DDCMS/data/tobrod1h.xml | 144 ++ examples/DDCMS/data/tobrod1l.xml | 144 ++ examples/DDCMS/data/tobrod2.xml | 26 + examples/DDCMS/data/tobrod2c.xml | 71 + examples/DDCMS/data/tobrod2h.xml | 144 ++ examples/DDCMS/data/tobrod2l.xml | 144 ++ examples/DDCMS/data/tobrod3.xml | 26 + examples/DDCMS/data/tobrod3h.xml | 144 ++ examples/DDCMS/data/tobrod3l.xml | 144 ++ examples/DDCMS/data/tobrod4.xml | 26 + examples/DDCMS/data/tobrod4c.xml | 71 + examples/DDCMS/data/tobrod4h.xml | 144 ++ examples/DDCMS/data/tobrod4l.xml | 144 ++ examples/DDCMS/data/tobrod5.xml | 26 + examples/DDCMS/data/tobrod5h.xml | 144 ++ examples/DDCMS/data/tobrod5l.xml | 144 ++ examples/DDCMS/data/tobrodpar.xml | 176 ++ examples/DDCMS/data/tracker.xml | 25 + examples/DDCMS/data/trackerParameters.xml | 45 + .../DDCMS/data/trackerStructureTopology.xml | 321 +++ examples/DDCMS/data/trackerbulkhead.xml | 293 +++ examples/DDCMS/data/trackerother.xml | 388 +++ examples/DDCMS/data/trackerpixbar.xml | 9 + examples/DDCMS/data/trackerpixfwd.xml | 20 + examples/DDCMS/data/trackertec.xml | 19 + examples/DDCMS/data/trackertib.xml | 9 + examples/DDCMS/data/trackertibtidservices.xml | 14 + examples/DDCMS/data/trackertid.xml | 14 + examples/DDCMS/data/trackertob.xml | 9 + 198 files changed, 31320 insertions(+), 325 deletions(-) create mode 100644 DDCMS/src/plugins/DDTECCoolAlgo.cpp create mode 100644 DDCMS/src/plugins/DDTECModuleAlgo.cpp create mode 100644 DDCMS/src/plugins/DDTECOptoHybAlgo.cpp create mode 100644 DDCMS/src/plugins/DDTECPhiAlgo.cpp create mode 100644 DDCMS/src/plugins/DDTECPhiAltAlgo.cpp create mode 100644 DDCMS/src/plugins/DDTIBLayerAlgo.cpp create mode 100644 DDCMS/src/plugins/DDTIDModuleAlgo.cpp create mode 100644 DDCMS/src/plugins/DDTIDRingAlgo.cpp create mode 100644 DDCMS/src/plugins/DDTOBRodAlgo.cpp create mode 100644 DDCMS/src/plugins/DDTrackerAngular.cpp create mode 100644 DDCMS/src/plugins/DDTrackerPhiAlgo.cpp create mode 100644 DDCMS/src/plugins/DDTrackerPhiAltAlgo.cpp create mode 100644 DDCMS/src/plugins/DDTrackerXYZPosAlgo.cpp create mode 100644 DDCMS/src/plugins/DDTrackerZPosAlgo.cpp rename examples/DDCMS/{CMS-tracker.png => CMS-pixbar.png} (100%) create mode 100644 examples/DDCMS/CMS-tracker1.png create mode 100644 examples/DDCMS/data/pixfwd.xml create mode 100644 examples/DDCMS/data/pixfwdBlade.xml create mode 100644 examples/DDCMS/data/pixfwdCommon.xml create mode 100644 examples/DDCMS/data/pixfwdCylinder.xml create mode 100644 examples/DDCMS/data/pixfwdDisk.xml create mode 100644 examples/DDCMS/data/pixfwdNipple.xml create mode 100644 examples/DDCMS/data/pixfwdPanel.xml create mode 100644 examples/DDCMS/data/pixfwdPanelBase.xml create mode 100644 examples/DDCMS/data/pixfwdPlaq.xml create mode 100644 examples/DDCMS/data/pixfwdPlaq1x2.xml create mode 100644 examples/DDCMS/data/pixfwdPlaq1x5.xml create mode 100644 examples/DDCMS/data/pixfwdPlaq2x3.xml create mode 100644 examples/DDCMS/data/pixfwdPlaq2x4.xml create mode 100644 examples/DDCMS/data/pixfwdPlaq2x5.xml create mode 100644 examples/DDCMS/data/pixfwdTest.xml create mode 100644 examples/DDCMS/data/tec.xml create mode 100644 examples/DDCMS/data/tecbackplate.xml create mode 100644 examples/DDCMS/data/tecmaterial.xml create mode 100644 examples/DDCMS/data/tecmodpar.xml create mode 100644 examples/DDCMS/data/tecmodule0.xml create mode 100644 examples/DDCMS/data/tecmodule0r.xml create mode 100644 examples/DDCMS/data/tecmodule0s.xml create mode 100644 examples/DDCMS/data/tecmodule1.xml create mode 100644 examples/DDCMS/data/tecmodule1r.xml create mode 100644 examples/DDCMS/data/tecmodule1s.xml create mode 100644 examples/DDCMS/data/tecmodule2.xml create mode 100644 examples/DDCMS/data/tecmodule3.xml create mode 100644 examples/DDCMS/data/tecmodule4.xml create mode 100644 examples/DDCMS/data/tecmodule4r.xml create mode 100644 examples/DDCMS/data/tecmodule4s.xml create mode 100644 examples/DDCMS/data/tecmodule5.xml create mode 100644 examples/DDCMS/data/tecmodule6.xml create mode 100644 examples/DDCMS/data/tecpetal0.xml create mode 100644 examples/DDCMS/data/tecpetal0b.xml create mode 100644 examples/DDCMS/data/tecpetal0f.xml create mode 100644 examples/DDCMS/data/tecpetal3.xml create mode 100644 examples/DDCMS/data/tecpetal3b.xml create mode 100644 examples/DDCMS/data/tecpetal3f.xml create mode 100644 examples/DDCMS/data/tecpetal6b.xml create mode 100644 examples/DDCMS/data/tecpetal6f.xml create mode 100644 examples/DDCMS/data/tecpetal8b.xml create mode 100644 examples/DDCMS/data/tecpetal8f.xml create mode 100644 examples/DDCMS/data/tecpetalb.xml create mode 100644 examples/DDCMS/data/tecpetalf.xml create mode 100644 examples/DDCMS/data/tecpetpar.xml create mode 100644 examples/DDCMS/data/tecring0.xml create mode 100644 examples/DDCMS/data/tecring0b.xml create mode 100644 examples/DDCMS/data/tecring0f.xml create mode 100644 examples/DDCMS/data/tecring1.xml create mode 100644 examples/DDCMS/data/tecring1b.xml create mode 100644 examples/DDCMS/data/tecring1f.xml create mode 100644 examples/DDCMS/data/tecring2.xml create mode 100644 examples/DDCMS/data/tecring2b.xml create mode 100644 examples/DDCMS/data/tecring2f.xml create mode 100644 examples/DDCMS/data/tecring3.xml create mode 100644 examples/DDCMS/data/tecring3b.xml create mode 100644 examples/DDCMS/data/tecring3f.xml create mode 100644 examples/DDCMS/data/tecring4.xml create mode 100644 examples/DDCMS/data/tecring4b.xml create mode 100644 examples/DDCMS/data/tecring4f.xml create mode 100644 examples/DDCMS/data/tecring5.xml create mode 100644 examples/DDCMS/data/tecring5b.xml create mode 100644 examples/DDCMS/data/tecring5f.xml create mode 100644 examples/DDCMS/data/tecring6.xml create mode 100644 examples/DDCMS/data/tecring6b.xml create mode 100644 examples/DDCMS/data/tecring6f.xml create mode 100644 examples/DDCMS/data/tecservices.xml create mode 100644 examples/DDCMS/data/tecwheel.xml create mode 100644 examples/DDCMS/data/tecwheel6.xml create mode 100644 examples/DDCMS/data/tecwheela.xml create mode 100644 examples/DDCMS/data/tecwheelb.xml create mode 100644 examples/DDCMS/data/tecwheelc.xml create mode 100644 examples/DDCMS/data/tecwheeld.xml create mode 100644 examples/DDCMS/data/tib.xml create mode 100644 examples/DDCMS/data/tiblayer0.xml create mode 100644 examples/DDCMS/data/tiblayer1.xml create mode 100644 examples/DDCMS/data/tiblayer2.xml create mode 100644 examples/DDCMS/data/tiblayer3.xml create mode 100644 examples/DDCMS/data/tiblayerpar.xml create mode 100644 examples/DDCMS/data/tibmaterial.xml create mode 100644 examples/DDCMS/data/tibmodpar.xml create mode 100644 examples/DDCMS/data/tibmodule0.xml create mode 100644 examples/DDCMS/data/tibmodule0a.xml create mode 100644 examples/DDCMS/data/tibmodule0b.xml create mode 100644 examples/DDCMS/data/tibmodule2.xml create mode 100644 examples/DDCMS/data/tibstring0.xml create mode 100644 examples/DDCMS/data/tibstring0ll.xml create mode 100644 examples/DDCMS/data/tibstring0lr.xml create mode 100644 examples/DDCMS/data/tibstring0ul.xml create mode 100644 examples/DDCMS/data/tibstring0ur.xml create mode 100644 examples/DDCMS/data/tibstring1.xml create mode 100644 examples/DDCMS/data/tibstring1ll.xml create mode 100644 examples/DDCMS/data/tibstring1lr.xml create mode 100644 examples/DDCMS/data/tibstring1ul.xml create mode 100644 examples/DDCMS/data/tibstring1ur.xml create mode 100644 examples/DDCMS/data/tibstring2.xml create mode 100644 examples/DDCMS/data/tibstring2ll.xml create mode 100644 examples/DDCMS/data/tibstring2lr.xml create mode 100644 examples/DDCMS/data/tibstring2ul.xml create mode 100644 examples/DDCMS/data/tibstring2ur.xml create mode 100644 examples/DDCMS/data/tibstring3.xml create mode 100644 examples/DDCMS/data/tibstring3ll.xml create mode 100644 examples/DDCMS/data/tibstring3lr.xml create mode 100644 examples/DDCMS/data/tibstring3ul.xml create mode 100644 examples/DDCMS/data/tibstring3ur.xml create mode 100644 examples/DDCMS/data/tibstringpar.xml create mode 100644 examples/DDCMS/data/tibtidcommonmaterial.xml create mode 100644 examples/DDCMS/data/tibtidservices.xml create mode 100644 examples/DDCMS/data/tibtidservicesb.xml create mode 100644 examples/DDCMS/data/tibtidservicesf.xml create mode 100644 examples/DDCMS/data/tid.xml create mode 100644 examples/DDCMS/data/tidb.xml create mode 100644 examples/DDCMS/data/tidf.xml create mode 100644 examples/DDCMS/data/tidmaterial.xml create mode 100644 examples/DDCMS/data/tidmodpar.xml create mode 100644 examples/DDCMS/data/tidmodule0.xml create mode 100644 examples/DDCMS/data/tidmodule0l.xml create mode 100644 examples/DDCMS/data/tidmodule0r.xml create mode 100644 examples/DDCMS/data/tidmodule1.xml create mode 100644 examples/DDCMS/data/tidmodule1l.xml create mode 100644 examples/DDCMS/data/tidmodule1r.xml create mode 100644 examples/DDCMS/data/tidmodule2.xml create mode 100644 examples/DDCMS/data/tidring0.xml create mode 100644 examples/DDCMS/data/tidring0b.xml create mode 100644 examples/DDCMS/data/tidring0f.xml create mode 100644 examples/DDCMS/data/tidring1.xml create mode 100644 examples/DDCMS/data/tidring1b.xml create mode 100644 examples/DDCMS/data/tidring1f.xml create mode 100644 examples/DDCMS/data/tidring2.xml create mode 100644 examples/DDCMS/data/tidringpar.xml create mode 100644 examples/DDCMS/data/tob.xml create mode 100644 examples/DDCMS/data/tobmaterial.xml create mode 100644 examples/DDCMS/data/tobmodpar.xml create mode 100644 examples/DDCMS/data/tobmodule0.xml create mode 100644 examples/DDCMS/data/tobmodule2.xml create mode 100644 examples/DDCMS/data/tobmodule4.xml create mode 100644 examples/DDCMS/data/tobrod0.xml create mode 100644 examples/DDCMS/data/tobrod0c.xml create mode 100644 examples/DDCMS/data/tobrod0h.xml create mode 100644 examples/DDCMS/data/tobrod0l.xml create mode 100644 examples/DDCMS/data/tobrod1.xml create mode 100644 examples/DDCMS/data/tobrod1h.xml create mode 100644 examples/DDCMS/data/tobrod1l.xml create mode 100644 examples/DDCMS/data/tobrod2.xml create mode 100644 examples/DDCMS/data/tobrod2c.xml create mode 100644 examples/DDCMS/data/tobrod2h.xml create mode 100644 examples/DDCMS/data/tobrod2l.xml create mode 100644 examples/DDCMS/data/tobrod3.xml create mode 100644 examples/DDCMS/data/tobrod3h.xml create mode 100644 examples/DDCMS/data/tobrod3l.xml create mode 100644 examples/DDCMS/data/tobrod4.xml create mode 100644 examples/DDCMS/data/tobrod4c.xml create mode 100644 examples/DDCMS/data/tobrod4h.xml create mode 100644 examples/DDCMS/data/tobrod4l.xml create mode 100644 examples/DDCMS/data/tobrod5.xml create mode 100644 examples/DDCMS/data/tobrod5h.xml create mode 100644 examples/DDCMS/data/tobrod5l.xml create mode 100644 examples/DDCMS/data/tobrodpar.xml create mode 100644 examples/DDCMS/data/tracker.xml create mode 100644 examples/DDCMS/data/trackerParameters.xml create mode 100644 examples/DDCMS/data/trackerStructureTopology.xml create mode 100644 examples/DDCMS/data/trackerbulkhead.xml create mode 100644 examples/DDCMS/data/trackerother.xml create mode 100644 examples/DDCMS/data/trackerpixbar.xml create mode 100644 examples/DDCMS/data/trackerpixfwd.xml create mode 100644 examples/DDCMS/data/trackertec.xml create mode 100644 examples/DDCMS/data/trackertib.xml create mode 100644 examples/DDCMS/data/trackertibtidservices.xml create mode 100644 examples/DDCMS/data/trackertid.xml create mode 100644 examples/DDCMS/data/trackertob.xml diff --git a/DDCMS/include/DDCMS/DDCMS.h b/DDCMS/include/DDCMS/DDCMS.h index 5192332eb..7d15a05a7 100644 --- a/DDCMS/include/DDCMS/DDCMS.h +++ b/DDCMS/include/DDCMS/DDCMS.h @@ -52,6 +52,7 @@ namespace dd4hep { Namespace() = delete; /// Initializing constructor Namespace(ParsingContext* ctx, xml_h element); + Namespace(ParsingContext& ctx, xml_h element, bool); /// Initializing constructor Namespace(ParsingContext* ctx); /// Initializing constructor @@ -66,11 +67,37 @@ namespace dd4hep { std::string prepend(const std::string& n) const; /// Resolve namespace during XML parsing std::string real_name(const std::string& v) const; + /// Strip off the namespace part of a given name + static std::string obj_name(const std::string& name); + /// Return the namespace name of a component + static std::string ns_name(const std::string& n); template <typename T> T attr(xml_elt_t elt,const xml_tag_t& n) const { std::string val = real_name(elt.attr<std::string>(n)); elt.setAttr(n,val); return elt.attr<T>(n); } + /// Add a new constant to the namespace + void addConstant(const std::string& name, const std::string& value, const std::string& type) const; + /// Add a new constant to the namespace as fully indicated by the name + void addConstantNS(const std::string& name, const std::string& value, const std::string& type) const; + + /// Access material by its namespace dressed name + Material material(const std::string& name) const; + Solid solid(const std::string& name) const; + /// Add solid to current namespace + void addSolid(const std::string& name,Solid solid) const; + /// Add solid to current namespace as fully indicated by the name + void addSolidNS(const std::string& name,Solid solid) const; + + Volume volume(const std::string& name, bool exc=true) const; + /// Add volume to current namespace + void addVolume(Volume vol) const; + /// Add volume to current namespace as fully indicated by the name + void addVolumeNS(Volume vol) const; + + const Rotation3D& rotation(const std::string& name) const; + /// Add rotation matrix to current namespace + void addRotation(const std::string& name,const Rotation3D& rot) const; }; /// XML parser context to store intermediate stuff @@ -82,6 +109,7 @@ namespace dd4hep { */ class ParsingContext { public: + Detector* description; std::map<std::string, Rotation3D> rotations; std::map<std::string, Solid> shapes; std::map<std::string, Volume> volumes; @@ -89,20 +117,21 @@ namespace dd4hep { bool geo_inited = false; // Debug flags + bool debug_includes = false; bool debug_constants = false; bool debug_materials = false; + bool debug_rotations = false; bool debug_shapes = false; bool debug_volumes = false; bool debug_placements = false; bool debug_namespaces = false; bool debug_visattr = false; + bool debug_algorithms = false; public: - ParsingContext() { namespaces.push_back(""); } + ParsingContext(Detector* det) : description(det) { namespaces.push_back(""); } ~ParsingContext() = default; const std::string& ns() const { return namespaces.back(); } - Volume volume(const std::string& name) const; - const Rotation3D& rotation(const std::string& name) const; }; /// Encapsulation of the CMS detector description algorithm arguments @@ -137,6 +166,8 @@ namespace dd4hep { /// Access value of rParent child node std::string parentName() const; + /// Access value of child'name from the xml element + std::string childName() const; /// Check the existence of an argument by name bool find(const std::string& name) const; /// Access typed argument by name diff --git a/DDCMS/include/DDCMS/DDCMSPlugins.h b/DDCMS/include/DDCMS/DDCMSPlugins.h index 4600936be..b7e1074cd 100644 --- a/DDCMS/include/DDCMS/DDCMSPlugins.h +++ b/DDCMS/include/DDCMS/DDCMSPlugins.h @@ -19,6 +19,7 @@ // Framework includes #include "DD4hep/Plugins.h" +#include "CLHEP/Units/SystemOfUnits.h" #include "DDCMS/DDCMS.h" /// Namespace for the AIDA detector description toolkit @@ -36,26 +37,26 @@ namespace dd4hep { */ template <typename T> class DDCMSDetElementFactory : public PluginFactoryBase { public: - static Handle<NamedObject> create(Detector& description,cms::ParsingContext& ctxt,xml::Handle_t e,SensitiveDetector& sens); + static long create(Detector& description,cms::ParsingContext& ctxt,xml::Handle_t e,SensitiveDetector& sens); }; } /* End namespace dd4hep */ namespace { /// Forward declartion of the base factory template template <typename P, typename S> class Factory; - DD4HEP_PLUGIN_FACTORY_ARGS_4(ns::Named*,dd4hep::Detector*,dd4hep::cms::ParsingContext*,ns::xml_h*,dd4hep::SensitiveDetector*) - { return dd4hep::DDCMSDetElementFactory<P>::create(*a0,*a1,*a2,*a3).ptr(); } + DD4HEP_PLUGIN_FACTORY_ARGS_4(long,dd4hep::Detector*,dd4hep::cms::ParsingContext*,ns::xml_h*,dd4hep::SensitiveDetector*) + { return dd4hep::DDCMSDetElementFactory<P>::create(*a0,*a1,*a2,*a3); } } #define DECLARE_DDCMS_DETELEMENT(name,func) \ DD4HEP_OPEN_PLUGIN(dd4hep,ddcms_det_element_##name) { \ - template <> Handle<NamedObject> \ + template <> long \ DDCMSDetElementFactory< ddcms_det_element_##name >::create(dd4hep::Detector& d, \ cms::ParsingContext& c, \ xml::Handle_t e, \ SensitiveDetector& h) \ { return func(d,c,e,h); } \ DD4HEP_PLUGINSVC_FACTORY(ddcms_det_element_##name,name, \ - NamedObject*(dd4hep::Detector*,dd4hep::cms::ParsingContext*, \ - ns::xml_h*,dd4hep::SensitiveDetector*),__LINE__) } + long(dd4hep::Detector*,dd4hep::cms::ParsingContext*, \ + ns::xml_h*,dd4hep::SensitiveDetector*),__LINE__) } #endif /* DD4HEP_DDCMS_DDCMSPLUGINS_H */ diff --git a/DDCMS/include/DDCMS/DDCMSTags.h b/DDCMS/include/DDCMS/DDCMSTags.h index b11ccf673..7cabe3408 100644 --- a/DDCMS/include/DDCMS/DDCMSTags.h +++ b/DDCMS/include/DDCMS/DDCMSTags.h @@ -76,7 +76,24 @@ namespace dd4hep { UNICODE(Polycone); UNICODE(ZSection); UNICODE(z); + + UNICODE(Trapezoid); + UNICODE(alp1); + UNICODE(h1); + UNICODE(bl1); + UNICODE(tl1); + UNICODE(alp2); + UNICODE(h2); + UNICODE(bl2); + UNICODE(tl2); + + UNICODE(Torus); + UNICODE(torusRadius); + UNICODE(innerRadius); + UNICODE(outerRadius); + UNICODE(SubtractionSolid); + UNICODE(LogicalPartSection); UNICODE(LogicalPart); UNICODE(rSolid); @@ -86,6 +103,7 @@ namespace dd4hep { UNICODE(PosPart); UNICODE(copyNumber); UNICODE(rParent); + UNICODE(ChildName); UNICODE(rChild); UNICODE(Translation); @@ -105,7 +123,10 @@ namespace dd4hep { UNICODE(debug_volumes); UNICODE(debug_placements); UNICODE(debug_namespaces); + UNICODE(debug_rotations); UNICODE(debug_visattr); + UNICODE(debug_includes); + UNICODE(debug_algorithms); /// DD4hep specific UNICODE(IncludeSection); diff --git a/DDCMS/src/DDCMS.cpp b/DDCMS/src/DDCMS.cpp index c7f6a2264..a1dd30929 100644 --- a/DDCMS/src/DDCMS.cpp +++ b/DDCMS/src/DDCMS.cpp @@ -16,10 +16,14 @@ //========================================================================== // Framework includes +#include "DD4hep/Path.h" #include "DD4hep/Printout.h" +#include "DD4hep/Detector.h" #include "DD4hep/BasicGrammar.h" #include "DDCMS/DDCMS.h" +#include <TClass.h> + // C/C++ include files #include <stdexcept> @@ -27,9 +31,11 @@ using namespace std; using namespace dd4hep; using namespace dd4hep::cms; +#define NAMESPACE_SEP '_' + Rotation3D dd4hep::cms::make_rotation3D(double thetaX, double phiX, - double thetaY, double phiY, - double thetaZ, double phiZ) { + double thetaY, double phiY, + double thetaZ, double phiZ) { Position posX(sin(thetaX) * cos(phiX), sin(thetaX) * sin(phiX), cos(thetaX)); Position posY(sin(thetaY) * cos(phiY), sin(thetaY) * sin(phiY), cos(thetaY)); Position posZ(sin(thetaZ) * cos(phiZ), sin(thetaZ) * sin(phiZ), cos(thetaZ)); @@ -37,20 +43,6 @@ Rotation3D dd4hep::cms::make_rotation3D(double thetaX, double phiX, return rot; } -Volume ParsingContext::volume(const std::string& name) const { - auto i = volumes.find(name); - if ( i != volumes.end() ) return (*i).second; - throw runtime_error("Unknown volume identifier:"+name); -} - -const Rotation3D& ParsingContext::rotation(const std::string& name) const { - static Rotation3D s_null; - auto i = rotations.find(name); - if ( i != rotations.end() ) return (*i).second; - if ( name.find("_NULL") == name.length()-5 ) return s_null; - throw runtime_error("Unknown rotation identifier:"+name); -} - /// Initializing constructor Namespace::Namespace(ParsingContext* ctx, xml_h element) : context(ctx) { xml_dim_t elt(element); @@ -64,11 +56,41 @@ Namespace::Namespace(ParsingContext* ctx, xml_h element) : context(ctx) { "DDCMS","+++ Current namespace is now: %s",name.c_str()); return; } - name = name.substr(0,name.find('.')); - context->namespaces.push_back(name.empty() ? name : name+'_'); + if ( has_label ) { + size_t idx = name.find('.'); + name = name.substr(0,idx); + } + else { + Path path(xml::DocumentHandler::system_path(element)); + name = path.filename().substr(0,path.filename().rfind('.')); + } + if ( !name.empty() ) name += NAMESPACE_SEP; + context->namespaces.push_back(name); pop = true; printout(context->debug_namespaces ? ALWAYS : DEBUG, "DDCMS","+++ Current namespace is now: %s",name.c_str()); + return; +} + +/// Initializing constructor +Namespace::Namespace(ParsingContext& ctx, xml_h element, bool ) : context(&ctx) { + xml_dim_t elt(element); + bool has_label = elt.hasAttr(_U(label)); + name = has_label ? elt.labelStr() : ""; + if ( has_label ) { + size_t idx = name.find('.'); + name = name.substr(0,idx); + } + else { + Path path(xml::DocumentHandler::system_path(element)); + name = path.filename().substr(0,path.filename().rfind('.')); + } + if ( !name.empty() ) name += NAMESPACE_SEP; + context->namespaces.push_back(name); + pop = true; + printout(context->debug_namespaces ? ALWAYS : DEBUG, + "DDCMS","+++ Current namespace is now: %s",name.c_str()); + return; } /// Initializing constructor @@ -91,12 +113,12 @@ Namespace::~Namespace() { } /// Prepend name with namespace -std::string Namespace::prepend(const std::string& n) const { +string Namespace::prepend(const string& n) const { return name + n; } /// Resolve namespace during XML parsing -std::string Namespace::real_name(const std::string& v) const { +string Namespace::real_name(const string& v) const { size_t idx, idq, idp; string val = v; while ( (idx=val.find('[')) != string::npos ) { @@ -107,12 +129,155 @@ std::string Namespace::real_name(const std::string& v) const { if ( idp == string::npos || idp > idq ) val.insert(idx,name); else if ( idp != string::npos && idp < idq ) - val[idp] = '_'; + val[idp] = NAMESPACE_SEP; } - while ( (idx=val.find(':')) != string::npos ) val[idx]='_'; + while ( (idx=val.find(':')) != string::npos ) val[idx]=NAMESPACE_SEP; return val; } +/// Return the namespace name of a component +string Namespace::ns_name(const string& nam) { + size_t idx; + if ( (idx=nam.find(':')) != string::npos ) + return nam.substr(0,idx); + else if ( (idx=nam.find('_')) != string::npos ) + return nam.substr(0,idx); + return ""; +} + +/// Strip off the namespace part of a given name +string Namespace::obj_name(const string& nam) { + size_t idx; + if ( (idx=nam.find(':')) != string::npos ) + return nam.substr(idx+1); + else if ( (idx=nam.find('_')) != string::npos ) + return nam.substr(idx+1); + return ""; +} + +/// Add a new constant to the namespace +void Namespace::addConstant(const string& nam, const string& val, const string& typ) const { + addConstantNS(prepend(nam), val, typ); +} + +/// Add a new constant to the namespace indicated by the name +void Namespace::addConstantNS(const string& nam, const string& val, const string& typ) const { + const string& v = val; + const string& n = nam; + printout(context->debug_constants ? ALWAYS : DEBUG, + "DDCMS","+++ Add constant object: %-40s = %s [type:%s]", + n.c_str(), v.c_str(), typ.c_str()); + _toDictionary(n, v, typ); + Constant c(n, v, typ); + context->description->addConstant(c); +} + +/// Access material by its namespace dressed name +Material Namespace::material(const string& nam) const { + return context->description->material(real_name(nam)); +} + +/// Add rotation matrix to current namespace +void Namespace::addRotation(const string& nam,const Rotation3D& rot) const { + string n = prepend(nam); + context->rotations[n] = rot; +} + +const Rotation3D& Namespace::rotation(const string& nam) const { + static Rotation3D s_null; + size_t idx; + auto i = context->rotations.find(nam); + if ( i != context->rotations.end() ) + return (*i).second; + else if ( nam == "NULL" ) + return s_null; + else if ( nam.find("_NULL") == nam.length()-5 ) + return s_null; + string n = nam; + if ( (idx=nam.find(':')) != string::npos ) { + n[idx] = NAMESPACE_SEP; + i = context->rotations.find(n); + if ( i != context->rotations.end() ) + return (*i).second; + } + for (const auto& r : context->rotations ) { + cout << r.first << endl; + } + throw runtime_error("Unknown rotation identifier:"+nam); +} + +/// Add rotation matrix to current namespace +void Namespace::addVolumeNS(Volume vol) const { + string n = vol.name(); + Solid s = vol.solid(); + Material m = vol.material(); + vol->SetName(n.c_str()); + context->volumes[n] = vol; + printout(context->debug_volumes ? ALWAYS : DEBUG, "DDCMS", + "+++ Add volume:%-38s Solid:%-26s[%-16s] Material:%s", + vol.name(), s.name(), s.type(), m.name()); +} + +/// Add rotation matrix to current namespace +void Namespace::addVolume(Volume vol) const { + string n = prepend(vol.name()); + Solid s = vol.solid(); + Material m = vol.material(); + vol->SetName(n.c_str()); + context->volumes[n] = vol; + printout(context->debug_volumes ? ALWAYS : DEBUG, "DDCMS", + "+++ Add volume:%-38s Solid:%-26s[%-16s] Material:%s", + vol.name(), s.name(), s.type(), m.name()); +} + +Volume Namespace::volume(const string& nam, bool exc) const { + size_t idx; + auto i = context->volumes.find(nam); + if ( i != context->volumes.end() ) { + return (*i).second; + } + if ( (idx=nam.find(':')) != string::npos ) { + string n = nam; + n[idx] = NAMESPACE_SEP; + i = context->volumes.find(n); + if ( i != context->volumes.end() ) + return (*i).second; + } + if ( exc ) { + throw runtime_error("Unknown volume identifier:"+nam); + } + return 0; +} + +/// Add solid to current namespace as fully indicated by the name +void Namespace::addSolidNS(const std::string& nam,Solid sol) const { + printout(context->debug_shapes ? ALWAYS : DEBUG, "DDCMS", + "+++ Add shape of type %s : %s",sol->IsA()->GetName(), nam.c_str()); + context->shapes[nam] = sol.setName(nam); +} + +/// Add solid to current namespace +void Namespace::addSolid(const string& nam, Solid sol) const { + addSolidNS(prepend(nam), sol); +} + +Solid Namespace::solid(const string& nam) const { + size_t idx; + string n = context->namespaces.back() + nam; + auto i = context->shapes.find(n); + if ( i != context->shapes.end() ) + return (*i).second; + if ( (idx=nam.find(':')) != string::npos ) { + n = real_name(nam); + n[idx] = NAMESPACE_SEP; + i = context->shapes.find(n); + if ( i != context->shapes.end() ) + return (*i).second; + } + i = context->shapes.find(nam); + if ( i != context->shapes.end() ) return (*i).second; + throw runtime_error("Unknown shape identifier:"+nam); +} AlgoArguments::AlgoArguments(ParsingContext& ctxt, xml_h elt) : context(ctxt), element(elt) @@ -121,15 +286,21 @@ AlgoArguments::AlgoArguments(ParsingContext& ctxt, xml_h elt) } /// Access value of rParent child node -std::string AlgoArguments::parentName() const { - Namespace ns(context); +string AlgoArguments::parentName() const { + Namespace n(context); xml_dim_t e(element); - string val = ns.real_name(xml_dim_t(e.child(_CMU(rParent))).nameStr()); + string val = n.real_name(xml_dim_t(e.child(_CMU(rParent))).nameStr()); return val; } +/// Access value of child'name from the xml element +string AlgoArguments::childName() const { + Namespace n(context); + return n.real_name(value<string>("ChildName")); +} + /// Check the existence of an argument by name -bool AlgoArguments::find(const std::string& nam) const { +bool AlgoArguments::find(const string& nam) const { for(xml_coll_t p(element,_U(star)); p; ++p) { string n = p.attr<string>(_U(name)); if ( n == nam ) { @@ -147,7 +318,8 @@ xml_h AlgoArguments::raw_arg(const string& nam) const { return p; } } - throw runtime_error("DDCMS: Attempt to access non-existing algorithm option: " + name); + except("DDCMS","+++ Attempt to access non-existing algorithm option %s[%s]",name.c_str(),nam.c_str()); + throw runtime_error("DDCMS: Attempt to access non-existing algorithm option."); } /// Access namespace resolved argument as a string by name @@ -182,7 +354,7 @@ namespace { except("DDCMS","+++ VectorParam<%s>: %s -> %s [Invalid entry count: %d <> %ld]", typ.c_str(), nam.c_str(), val.c_str(), num, data.size()); } - printout(INFO,"DDCMS","+++ VectorParam<%s>: ret=%d %s -> %s", + printout(DEBUG,"DDCMS","+++ VectorParam<%s>: ret=%d %s -> %s", typ.c_str(), res, nam.c_str(), gr.str(&data).c_str()); return data; } @@ -196,22 +368,32 @@ namespace { template <> string __cnv<string>(const string& arg) { return arg; } template <typename T> vector<T> __cnvVect(const AlgoArguments* a, const char* req_typ, xml_h xp) { - vector<string> str_data = raw_vector(a, xp); + Namespace ns(a->context); + string piece; + string nam = xp.attr<string>(_U(name)); string typ = xp.attr<string>(_U(type)); + string val = xp.text(); + int num = xp.attr<int>(_CMU(nEntries)); if ( typ != req_typ ) { - string nam = xp.attr<string>(_U(name)); - const BasicGrammar& gr = BasicGrammar::instance<vector<string> >(); except("DDCMS", "+++ VectorParam<%s | %s>: %s -> <%s> %s [Incompatible vector-type]", req_typ, typ.c_str(), nam.c_str(), typeName(typeid(T)).c_str(), - gr.str(&str_data).c_str()); + val.c_str()); } - vector<T> res_data; - for(const auto& v : str_data) { - T d = __cnv<T>(v); - res_data.push_back(d); + vector<T> data; + val = remove_whitespace(val); + if ( !val.empty() ) val += ','; + for(size_t idx=0, idq=val.find(',',idx); + idx != string::npos && idq != string::npos; + idx=++idq, idq=val.find(',',idx)) + { + piece = ns.real_name(val.substr(idx,idq-idx)); + T d = __cnv<T>(piece); + data.push_back(d); } - return res_data; + printout(DEBUG,"DDCMS","+++ VectorParam<%s>: %s[%d] -> %s", + typ.c_str(), nam.c_str(), num, val.c_str()); + return data; } } diff --git a/DDCMS/src/plugins/DDDefinitions2Objects.cpp b/DDCMS/src/plugins/DDDefinitions2Objects.cpp index 16482c5de..5a4cc790b 100644 --- a/DDCMS/src/plugins/DDDefinitions2Objects.cpp +++ b/DDCMS/src/plugins/DDDefinitions2Objects.cpp @@ -21,7 +21,6 @@ #include "DD4hep/GeoHandler.h" #include "DD4hep/Printout.h" #include "DD4hep/Plugins.h" -#include "DD4hep/Path.h" #include "DD4hep/detail/SegmentationsInterna.h" #include "DD4hep/detail/DetectorInterna.h" #include "DD4hep/detail/ObjectsInterna.h" @@ -51,10 +50,17 @@ namespace dd4hep { static UInt_t unique_mat_id = 0xAFFEFEED; - class dddefinition; - class include; + class include_constants; + class include_load; + class include_unload; + class print_xml_doc; class constantssection; class constant; + class resolve { + public: + std::vector<xml::Document> includes; + std::map<std::string,std::string> unresolvedConst, allConst, originalConst; + }; class materialsection; class elementarymaterial; @@ -62,6 +68,7 @@ namespace dd4hep { class rotationsection; class rotation; + class transform3d; class pospartsection; class pospart; @@ -70,9 +77,15 @@ namespace dd4hep { class logicalpart; class solidsection; - class tubs; + class trapezoid; class polycone; + class torus; + class tubs; class box; + class unionsolid; + class intersectionsolid; + class subtractionsolid; + class algorithm; class vissection; @@ -82,114 +95,177 @@ namespace dd4hep { } /// Converter instances implemented in this compilation unit - template <> void Converter<dddefinition>::operator()(xml_h element) const; template <> void Converter<debug>::operator()(xml_h element) const; + template <> void Converter<print_xml_doc>::operator()(xml_h element) const; + /// Converter for <ConstantsSection/> tags template <> void Converter<constantssection>::operator()(xml_h element) const; template <> void Converter<constant>::operator()(xml_h element) const; + template <> void Converter<resolve>::operator()(xml_h element) const; + /// Converter for <VisSection/> tags template <> void Converter<vissection>::operator()(xml_h element) const; template <> void Converter<vis_apply>::operator()(xml_h element) const; template <> void Converter<vis>::operator()(xml_h element) const; + /// Converter for <MaterialSection/> tags template <> void Converter<materialsection>::operator()(xml_h element) const; template <> void Converter<elementarymaterial>::operator()(xml_h element) const; template <> void Converter<compositematerial>::operator()(xml_h element) const; + /// Converter for <RotationSection/> tags template <> void Converter<rotationsection>::operator()(xml_h element) const; + /// Converter for <Rotation/> tags template <> void Converter<rotation>::operator()(xml_h element) const; + template <> void Converter<transform3d>::operator()(xml_h element) const; + /// Generic converter for <LogicalPartSection/> tags template <> void Converter<logicalpartsection>::operator()(xml_h element) const; template <> void Converter<logicalpart>::operator()(xml_h element) const; template <> void Converter<pospartsection>::operator()(xml_h element) const; + /// Converter for <PosPart/> tags template <> void Converter<pospart>::operator()(xml_h element) const; + /// Generic converter for solids: <SolidSection/> tags template <> void Converter<solidsection>::operator()(xml_h element) const; + /// Converter for <UnionSolid/> tags + template <> void Converter<unionsolid>::operator()(xml_h element) const; + /// Converter for <SubtractionSolid/> tags + template <> void Converter<subtractionsolid>::operator()(xml_h element) const; + /// Converter for <IntersectionSolid/> tags + template <> void Converter<intersectionsolid>::operator()(xml_h element) const; + /// Converter for <Trapezoid/> tags + template <> void Converter<trapezoid>::operator()(xml_h element) const; + /// Converter for <Polycone/> tags template <> void Converter<polycone>::operator()(xml_h element) const; + /// Converter for <Torus/> tags + template <> void Converter<torus>::operator()(xml_h element) const; + /// Converter for <Tubs/> tags template <> void Converter<tubs>::operator()(xml_h element) const; + /// Converter for <Box/> tags template <> void Converter<box>::operator()(xml_h element) const; + /// Converter for <Algorithm/> tags template <> void Converter<algorithm>::operator()(xml_h element) const; - /// DD4hep specific - template <> void Converter<include>::operator()(xml_h element) const; + /// DD4hep specific: Load include file + template <> void Converter<include_load>::operator()(xml_h element) const; + /// DD4hep specific: Unload include file + template <> void Converter<include_unload>::operator()(xml_h element) const; + /// DD4hep specific: Process constants objects + template <> void Converter<include_constants>::operator()(xml_h element) const; } /// Converter for <ConstantsSection/> tags template <> void Converter<constantssection>::operator()(xml_h element) const { - ParsingContext* context = _param<ParsingContext>(); - Namespace ns(context, element); - xml_coll_t(element, _CMU(Constant)).for_each(Converter<constant>(description,context)); + Namespace ns(_param<ParsingContext>(), element); + xml_coll_t(element, _CMU(Constant)).for_each(Converter<constant>(description,ns.context,optional)); } /// Converter for <VisSection/> tags template <> void Converter<vissection>::operator()(xml_h element) const { - ParsingContext* context = _param<ParsingContext>(); - Namespace ns(context, element); - xml_coll_t(element, _CMU(vis)).for_each(Converter<vis>(description,context)); + Namespace ns(_param<ParsingContext>(), element); + xml_coll_t(element, _CMU(vis)).for_each(Converter<vis>(description,ns.context,optional)); } +/// Converter for <MaterialSection/> tags template <> void Converter<materialsection>::operator()(xml_h element) const { - ParsingContext* context = _param<ParsingContext>(); - Namespace ns(context, element); - xml_coll_t(element, _CMU(ElementaryMaterial)).for_each(Converter<elementarymaterial>(description,context)); - xml_coll_t(element, _CMU(CompositeMaterial)).for_each(Converter<compositematerial>(description,context)); + Namespace ns(_param<ParsingContext>(), element); + xml_coll_t(element, _CMU(ElementaryMaterial)).for_each(Converter<elementarymaterial>(description,ns.context,optional)); + xml_coll_t(element, _CMU(CompositeMaterial)).for_each(Converter<compositematerial>(description,ns.context,optional)); } template <> void Converter<rotationsection>::operator()(xml_h element) const { Namespace ns(_param<ParsingContext>(), element); - xml_coll_t(element, _CMU(Rotation)).for_each(Converter<rotation>(description,ns.context)); + xml_coll_t(element, _CMU(Rotation)).for_each(Converter<rotation>(description,ns.context,optional)); } template <> void Converter<pospartsection>::operator()(xml_h element) const { Namespace ns(_param<ParsingContext>(), element); - xml_coll_t(element, _CMU(PosPart)).for_each(Converter<pospart>(description,ns.context)); + xml_coll_t(element, _CMU(PosPart)).for_each(Converter<pospart>(description,ns.context,optional)); } +/// Generic converter for <LogicalPartSection/> tags template <> void Converter<logicalpartsection>::operator()(xml_h element) const { Namespace ns(_param<ParsingContext>(), element); - xml_coll_t(element, _CMU(LogicalPart)).for_each(Converter<logicalpart>(description,ns.context)); + xml_coll_t(element, _CMU(LogicalPart)).for_each(Converter<logicalpart>(description,ns.context,optional)); } +/// Generic converter for <SolidSection/> tags template <> void Converter<solidsection>::operator()(xml_h element) const { Namespace ns(_param<ParsingContext>(), element); for(xml_coll_t solid(element, _U(star)); solid; ++solid) { string tag = solid.tag(); if ( tag == "Box" ) - Converter<box>(description,ns.context)(solid); + Converter<box>(description,ns.context,optional)(solid); else if ( tag == "Polycone" ) - Converter<polycone>(description,ns.context)(solid); + Converter<polycone>(description,ns.context,optional)(solid); else if ( tag == "Tubs" ) - Converter<tubs>(description,ns.context)(solid); - else - printout(ERROR,"DDCMS","+++ Request to process unknown shape of type %s",tag.c_str()); + Converter<tubs>(description,ns.context,optional)(solid); + else if ( tag == "Torus" ) + Converter<torus>(description,ns.context,optional)(solid); + else if ( tag == "Trapezoid" ) + Converter<trapezoid>(description,ns.context,optional)(solid); + else if ( tag == "UnionSolid" ) + Converter<unionsolid>(description,ns.context,optional)(solid); + else if ( tag == "SubtractionSolid" ) + Converter<subtractionsolid>(description,ns.context,optional)(solid); + else if ( tag == "IntersectionSolid" ) + Converter<intersectionsolid>(description,ns.context,optional)(solid); + else { + string nam = xml_dim_t(solid).nameStr(); + printout(ERROR,"DDCMS","+++ Request to process unknown shape %s [%s]", + nam.c_str(), tag.c_str()); + } } } /// Converter for <Constant/> tags template <> void Converter<constant>::operator()(xml_h element) const { Namespace ns(_param<ParsingContext>()); - xml_dim_t constant(element); - xml_dim_t parent(constant.parent()); - bool eval = parent.hasAttr(_U(eval)) ? parent.attr<bool>(_U(eval)) : false; - string val = "";//ns.real_name(constant.attr<string>(_U(value))); - string nam = ns.prepend(constant.nameStr()); - string typ = eval ? "number" : "string"; - - if ( constant.hasAttr(_U(type)) ) typ = constant.typeStr(); - if ( nam == "pixbarladderfull_CFStripY" ) { // debugging - val = ns.real_name(constant.attr<string>(_U(value))); + resolve* res = _option<resolve>(); + xml_dim_t constant = element; + xml_dim_t par = constant.parent(); + bool eval = par.hasAttr(_U(eval)) ? par.attr<bool>(_U(eval)) : false; + string val = constant.valueStr(); + string nam = constant.nameStr(); + string real = ns.prepend(nam); + string typ = eval ? "number" : "string"; + size_t idx = val.find('['); + + if ( constant.hasAttr(_U(type)) ) + typ = constant.typeStr(); + + if ( idx == string::npos || typ == "string" ) { + try { + ns.addConstant(nam, val, typ); + res->allConst[real] = val; + res->originalConst[real] = val; + } + catch(const exception& e) { + printout(INFO,"DDCMS","++ Unresolved constant: %s = %s [%s]. Try to resolve later. [%s]", + real.c_str(), val.c_str(), typ.c_str(), e.what()); + } + return; } - else { - val = ns.real_name(constant.attr<string>(_U(value))); + // Setup the resolution mechanism in Converter<resolve> + while ( idx != string::npos ) { + ++idx; + size_t idp = val.find(':',idx); + size_t idq = val.find(']',idx); + if ( idp == string::npos || idp > idq ) + val.insert(idx,ns.name); + else if ( idp != string::npos && idp < idq ) + val[idp] = '_'; + idx = val.find('[',idx); } + while ( (idx=val.find(':')) != string::npos ) val[idx]='_'; printout(ns.context->debug_constants ? ALWAYS : DEBUG, - "DDCMS","+++ Add constant object: %s = %s [type:%s]", - nam.c_str(), val.c_str(), typ.c_str()); - Constant c(nam, val, typ); - _toDictionary(nam, val, typ); - description.addConstant(c); + "Constant","Unresolved: %s -> %s",real.c_str(),val.c_str()); + res->allConst[real] = val; + res->originalConst[real] = val; + res->unresolvedConst[real] = val; } /** Convert compact visualization attribute to Detector visualization attribute @@ -259,7 +335,7 @@ template <> void Converter<elementarymaterial>::operator()(xml_h element) const TGeoElement* elt = tab->FindElement(xmat.nameStr().c_str()); printout(ns.context->debug_materials ? ALWAYS : DEBUG, "DDCMS", - "++ Converting material %-48s Density: %.3f.", + "+++ Converting material %-48s Density: %.3f.", ('"'+nam+'"').c_str(), density); if ( !elt ) { @@ -337,91 +413,135 @@ template <> void Converter<rotation>::operator()(xml_h element) const { ParsingContext* ctx = _param<ParsingContext>(); Namespace ns(ctx); xml_dim_t xrot(element); - string nam = ns.prepend(xrot.nameStr()); - double thetaX = xrot.hasAttr(_CMU(thetaX)) ? xrot.attr<double>(_CMU(thetaX)) : 0e0; - double phiX = xrot.hasAttr(_CMU(phiX)) ? xrot.attr<double>(_CMU(phiX)) : 0e0; - double thetaY = xrot.hasAttr(_CMU(thetaY)) ? xrot.attr<double>(_CMU(thetaY)) : 0e0; - double phiY = xrot.hasAttr(_CMU(phiY)) ? xrot.attr<double>(_CMU(phiY)) : 0e0; - double thetaZ = xrot.hasAttr(_CMU(thetaZ)) ? xrot.attr<double>(_CMU(thetaZ)) : 0e0; - double phiZ = xrot.hasAttr(_CMU(phiZ)) ? xrot.attr<double>(_CMU(phiZ)) : 0e0; - + string nam = xrot.nameStr(); + double thetaX = xrot.hasAttr(_CMU(thetaX)) ? ns.attr<double>(xrot,_CMU(thetaX)) : 0e0; + double phiX = xrot.hasAttr(_CMU(phiX)) ? ns.attr<double>(xrot,_CMU(phiX)) : 0e0; + double thetaY = xrot.hasAttr(_CMU(thetaY)) ? ns.attr<double>(xrot,_CMU(thetaY)) : 0e0; + double phiY = xrot.hasAttr(_CMU(phiY)) ? ns.attr<double>(xrot,_CMU(phiY)) : 0e0; + double thetaZ = xrot.hasAttr(_CMU(thetaZ)) ? ns.attr<double>(xrot,_CMU(thetaZ)) : 0e0; + double phiZ = xrot.hasAttr(_CMU(phiZ)) ? ns.attr<double>(xrot,_CMU(phiZ)) : 0e0; Rotation3D rot = make_rotation3D(thetaX, phiX, thetaY, phiY, thetaZ, phiZ); - ctx->rotations[nam] = rot; + printout(ctx->debug_rotations ? ALWAYS : DEBUG, + "DDCMS","+++ Adding rotation: %-32s: (theta/phi)[rad] X: %6.3f %6.3f Y: %6.3f %6.3f Z: %6.3f %6.3f", + ns.prepend(nam).c_str(),thetaX,phiX,thetaY,phiY,thetaZ,phiZ); + ns.addRotation(nam, rot); } -/// Converter for <Rotation/> tags +/// Converter for <Logicalpart/> tags template <> void Converter<logicalpart>::operator()(xml_h element) const { Namespace ns(_param<ParsingContext>()); xml_dim_t e(element); - string sol_nam = xml_dim_t(e.child(_CMU(rSolid))).nameStr(); - string mat_nam = xml_dim_t(e.child(_CMU(rMaterial))).nameStr(); - Material material = description.material(ns.real_name(mat_nam)); - Solid solid = ns.context->shapes[sol_nam]; - Volume volume(ns.prepend(e.nameStr()), solid, material); - - printout(ns.context->debug_volumes ? ALWAYS : DEBUG, "DDCMS", - "+++ Volume:%-24s Solid:%-24s [%-24s] Material:%s", - volume.name(), solid.name(), solid.type(), material.name()); - - ns.context->volumes[volume.name()] = volume; + string sol = e.child(_CMU(rSolid)).attr<string>(_U(name)); + string mat = e.child(_CMU(rMaterial)).attr<string>(_U(name)); + ns.addVolume(Volume(e.nameStr(), ns.solid(sol), ns.material(mat))); } -/// Converter for <Rotation/> tags -template <> void Converter<pospart>::operator()(xml_h element) const { - Namespace ns(_param<ParsingContext>()); - xml_dim_t e(element); - int copy = e.attr<int>(_CMU(copyNumber)); - string parent_nam = ns.real_name(xml_dim_t(e.child(_CMU(rParent))).nameStr()); - string child_nam = ns.real_name(xml_dim_t(e.child(_CMU(rChild))).nameStr()); - Volume parent = ns.context->volumes[parent_nam]; - Volume child = ns.context->volumes[child_nam]; - xml_dim_t translation(e.child(_CMU(Translation),false)); - xml_dim_t rotation(e.child(_CMU(Rotation),false)); - xml_dim_t refRotation(e.child(_CMU(rRotation),false)); +/// Helper converter +template <> void Converter<transform3d>::operator()(xml_h element) const { + Namespace ns(_param<ParsingContext>()); + Transform3D* tr = _option<Transform3D>(); + xml_dim_t e(element); + xml_dim_t translation = e.child(_CMU(Translation),false); + xml_dim_t rotation = e.child(_CMU(Rotation),false); + xml_dim_t refRotation = e.child(_CMU(rRotation),false); Position pos; - RotationZYX rot; + Rotation3D rot; - printout(ns.context->debug_placements ? ALWAYS : DEBUG, "DDCMS", - "+++ %s Parent: %-24s [%s] Child: %-32s [%s] copy:%d", - e.tag().c_str(), - parent_nam.c_str(), parent.isValid() ? "VALID" : "INVALID", - child_nam.c_str(), child.isValid() ? "VALID" : "INVALID", - copy); if ( translation.ptr() ) { - double x = ns.attr<double>(translation,_U(x)); - double y = ns.attr<double>(translation,_U(y)); - double z = ns.attr<double>(translation,_U(z)); + double x = ns.attr<double>(translation,_U(x)); + double y = ns.attr<double>(translation,_U(y)); + double z = ns.attr<double>(translation,_U(z)); pos = Position(x,y,z); } if ( rotation.ptr() ) { - double x = ns.attr<double>(rotation,_U(x)); - double y = ns.attr<double>(rotation,_U(y)); - double z = ns.attr<double>(rotation,_U(z)); + double x = ns.attr<double>(rotation,_U(x)); + double y = ns.attr<double>(rotation,_U(y)); + double z = ns.attr<double>(rotation,_U(z)); rot = RotationZYX(z,y,x); } + else if ( refRotation.ptr() ) { + rot = ns.rotation(refRotation.nameStr()); + } + *tr = Transform3D(rot,pos); +} + +/// Converter for <PosPart/> tags +template <> void Converter<pospart>::operator()(xml_h element) const { + Namespace ns(_param<ParsingContext>()); + xml_dim_t e(element); + int copy = e.attr<int>(_CMU(copyNumber)); + string parent_nam = ns.attr<string>(e.child(_CMU(rParent)),_U(name)); + string child_nam = ns.attr<string>(e.child(_CMU(rChild)),_U(name)); + Volume parent = ns.volume(parent_nam); + Volume child = ns.volume(child_nam, false); + + printout(ns.context->debug_placements ? ALWAYS : DEBUG, "DDCMS", + "+++ %s Parent: %-24s [%s] Child: %-32s [%s] copy:%d", + e.tag().c_str(), + parent_nam.c_str(), parent.isValid() ? "VALID" : "INVALID", + child_nam.c_str(), child.isValid() ? "VALID" : "INVALID", + copy); PlacedVolume pv; - if ( child.isValid() ) { - if ( !translation.ptr() && !rotation.ptr() ) - pv = parent.placeVolume(child); - else if ( translation.ptr() && !rotation.ptr() ) - pv = parent.placeVolume(child,pos); - else if ( !translation.ptr() && rotation.ptr() ) - pv = parent.placeVolume(child,rot); - else { - Transform3D trafo(rot,pos); - pv = parent.placeVolume(child,rot); - } + if ( child.isValid() ) { + Transform3D trafo; + Converter<transform3d>(description,param,&trafo)(element); + pv = parent.placeVolume(child,trafo); } if ( !pv.isValid() ) { - printout(ERROR,"DDCMS","+++ Placement FAILED!"); + printout(ERROR,"DDCMS","+++ Placement FAILED! Parent:%s Child:%s Valid:%s", + parent.name(), child_nam.c_str(), yes_no(child.isValid())); } } +template <typename TYPE> +static void convert_boolean(ParsingContext* ctx, xml_h element) { + Namespace ns(ctx); + xml_dim_t e(element); + string nam = e.nameStr(); + Solid solids[2]; + Solid boolean; + int cnt=0; + + for(xml_coll_t c(element, _CMU(rSolid)); cnt<2 && c; ++c, ++cnt) + solids[cnt] = ns.solid(c.attr<string>(_U(name))); + + if ( cnt != 2 ) { + except("DDCMS","+++ Failed to create blooean solid %s. Found only %d parts.",nam.c_str(), cnt); + } + printout(ns.context->debug_placements ? ALWAYS : DEBUG, "DDCMS", + "+++ SubtractionSolid: %s Left: %-32s Right: %-32s", + nam.c_str(), solids[0]->GetName(), solids[1]->GetName()); + + if ( solids[0].isValid() && solids[1].isValid() ) { + Transform3D trafo; + Converter<transform3d>(*ctx->description,ctx,&trafo)(element); + boolean = TYPE(solids[0],solids[1],trafo); + } + if ( !boolean.isValid() ) + except("DDCMS","+++ FAILED to construct subtraction solid: %s",nam.c_str()); + ns.addSolid(nam,boolean); +} + +/// Converter for <SubtractionSolid/> tags +template <> void Converter<unionsolid>::operator()(xml_h element) const { + convert_boolean<UnionSolid>(_param<ParsingContext>(),element); +} + +/// Converter for <SubtractionSolid/> tags +template <> void Converter<subtractionsolid>::operator()(xml_h element) const { + convert_boolean<SubtractionSolid>(_param<ParsingContext>(),element); +} + +/// Converter for <SubtractionSolid/> tags +template <> void Converter<intersectionsolid>::operator()(xml_h element) const { + convert_boolean<IntersectionSolid>(_param<ParsingContext>(),element); +} + /// Converter for <Polycone/> tags template <> void Converter<polycone>::operator()(xml_h element) const { Namespace ns(_param<ParsingContext>()); xml_dim_t e(element); - string nam = e.nameStr(); + string nam = e.nameStr(); double startPhi = ns.attr<double>(e,_CMU(startPhi)); double deltaPhi = ns.attr<double>(e,_CMU(deltaPhi)); vector<double> z, rmin, rmax; @@ -432,33 +552,64 @@ template <> void Converter<polycone>::operator()(xml_h element) const { z.push_back(ns.attr<double>(zplane,_CMU(z))); } printout(ns.context->debug_shapes ? ALWAYS : DEBUG, "DDCMS", - "+++ Processing shape of type %s : %s",e.tag().c_str(), nam.c_str()); - printout(ns.context->debug_shapes ? ALWAYS : DEBUG, "DDCMS", - "+++ startPhi=%10.3f [rad] deltaPhi=%10.3f [rad] %4ld z-planes", + "+ Polycone: startPhi=%10.3f [rad] deltaPhi=%10.3f [rad] %4ld z-planes", startPhi, deltaPhi, z.size()); - Polycone pc(startPhi,deltaPhi,rmin,rmax,z); - ns.context->shapes[nam] = pc.setName(nam); + ns.addSolid(nam, Polycone(startPhi,deltaPhi,rmin,rmax,z)); } -/// Converter for <Tubs/> tags -template <> void Converter<tubs>::operator()(xml_h element) const { +/// Converter for <Torus/> tags +template <> void Converter<torus>::operator()(xml_h element) const { Namespace ns(_param<ParsingContext>()); xml_dim_t e(element); - string nam = e.nameStr(); - double dz = ns.attr<double>(e,_CMU(dz)); - double rmin = ns.attr<double>(e,_CMU(rMin)); - double rmax = ns.attr<double>(e,_CMU(rMax)); + string nam = e.nameStr(); + double r = ns.attr<double>(e,_CMU(torusRadius)); + double rinner = ns.attr<double>(e,_CMU(innerRadius)); + double router = ns.attr<double>(e,_CMU(outerRadius)); double startPhi = ns.attr<double>(e,_CMU(startPhi)); double deltaPhi = ns.attr<double>(e,_CMU(deltaPhi)); + printout(ns.context->debug_shapes ? ALWAYS : DEBUG, "DDCMS", + "+ Torus: r=%10.3f [cm] r_inner=%10.3f [cm] r_outer=%10.3f [cm]" + " startPhi=%10.3f [rad] deltaPhi=%10.3f [rad]", + r, rinner, router, startPhi, deltaPhi); + ns.addSolid(nam, Torus(r, rinner, router, startPhi, deltaPhi)); +} +/// Converter for <Trapezoid/> tags +template <> void Converter<trapezoid>::operator()(xml_h element) const { + Namespace ns(_param<ParsingContext>()); + xml_dim_t e(element); + string nam = e.nameStr(); + double dz = ns.attr<double>(e,_U(dz)); + double alp1 = ns.attr<double>(e,_CMU(alp1)); + double bl1 = ns.attr<double>(e,_CMU(bl1)); + double tl1 = ns.attr<double>(e,_CMU(tl1)); + double h1 = ns.attr<double>(e,_CMU(h1)); + double alp2 = ns.attr<double>(e,_CMU(alp2)); + double bl2 = ns.attr<double>(e,_CMU(bl2)); + double tl2 = ns.attr<double>(e,_CMU(tl2)); + double h2 = ns.attr<double>(e,_CMU(h2)); + double phi = ns.attr<double>(e,_U(phi)); + double theta = ns.attr<double>(e,_U(theta)); printout(ns.context->debug_shapes ? ALWAYS : DEBUG, "DDCMS", - "+++ Processing shape of type %s : %s",e.tag().c_str(), nam.c_str()); + "+ Trapezoid: dz=%10.3f [cm] alp1:%.3f bl1=%.3f tl1=%.3f alp2=%.3f bl2=%.3f tl2=%.3f h2=%.3f phi=%.3f theta=%.3f", + dz, alp1, bl1, tl1, h1, alp2, bl2, tl2, h2, phi, theta); + ns.addSolid(nam, Trap(dz, theta, phi, h1, bl1, tl1, alp1, h2, bl2, tl2, alp2)); +} + +/// Converter for <Tubs/> tags +template <> void Converter<tubs>::operator()(xml_h element) const { + Namespace ns(_param<ParsingContext>()); + xml_dim_t e(element); + string nam = e.nameStr(); + double dz = ns.attr<double>(e,_CMU(dz)); + double rmin = ns.attr<double>(e,_CMU(rMin)); + double rmax = ns.attr<double>(e,_CMU(rMax)); + double startPhi = ns.attr<double>(e,_CMU(startPhi)); + double deltaPhi = ns.attr<double>(e,_CMU(deltaPhi)); printout(ns.context->debug_shapes ? ALWAYS : DEBUG, "DDCMS", - "+++ dz=%10.3f [cm] rmin=%10.3f [cm] rmax=%10.3f [cm]" + "+ Tubs: dz=%10.3f [cm] rmin=%10.3f [cm] rmax=%10.3f [cm]" " startPhi=%10.3f [rad] deltaPhi=%10.3f [rad]", dz, rmin, rmax, startPhi, deltaPhi); - - Tube tube(rmin,rmax,dz,startPhi,deltaPhi); - ns.context->shapes[nam] = tube.setName(nam); + ns.addSolid(nam, Tube(rmin,rmax,dz,startPhi,deltaPhi)); } /// Converter for <Box/> tags @@ -469,20 +620,31 @@ template <> void Converter<box>::operator()(xml_h element) const { double dx = ns.attr<double>(e,_CMU(dx)); double dy = ns.attr<double>(e,_CMU(dy)); double dz = ns.attr<double>(e,_CMU(dz)); - printout(ns.context->debug_shapes ? ALWAYS : DEBUG, "DDCMS", - "+++ Processing shape of type %s : %s",e.tag().c_str(), nam.c_str()); - printout(ns.context->debug_shapes ? ALWAYS : DEBUG, "DDCMS", - "+++ dx=%10.3f [cm] dy=%10.3f [cm] dz=%10.3f [cm]", dx, dy, dz); - Box box(dx,dy,dz); - ns.context->shapes[nam] = box.setName(nam); + "+ Box: dx=%10.3f [cm] dy=%10.3f [cm] dz=%10.3f [cm]", dx, dy, dz); + ns.addSolid(nam, Box(dx,dy,dz)); +} + +/// DD4hep specific Converter for <Include/> tags: process only the constants +template <> void Converter<include_load>::operator()(xml_h element) const { + xml::Document doc = xml::DocumentHandler().load(element, element.attr_value(_U(ref))); + string fname = xml::DocumentHandler::system_path(doc.root()); + printout(_param<ParsingContext>()->debug_includes ? ALWAYS : DEBUG, + "DDCMS","+++ Processing the CMS detector description %s",fname.c_str()); + _option<resolve>()->includes.push_back(doc); } -/// DD4hep specific Converter for <Include/> tags -template <> void Converter<include>::operator()(xml_h element) const { - xml::DocumentHolder doc(xml::DocumentHandler().load(element, element.attr_value(_U(ref)))); - xml_h node = doc.root(); - Converter<dddefinition>(description,_param<ParsingContext>())(node); +/// DD4hep specific Converter for <Include/> tags: process only the constants +template <> void Converter<include_unload>::operator()(xml_h element) const { + string fname = xml::DocumentHandler::system_path(element); + xml::DocumentHolder(xml_elt_t(element).document()).assign(0); + printout(_param<ParsingContext>()->debug_includes ? ALWAYS : DEBUG, + "DDCMS","+++ Finished processing %s",fname.c_str()); +} + +/// DD4hep specific Converter for <Include/> tags: process only the constants +template <> void Converter<include_constants>::operator()(xml_h element) const { + xml_coll_t(element, _CMU(ConstantsSection)).for_each(Converter<constantssection>(description,param,optional)); } /// Converter for <Algorithm/> tags @@ -497,9 +659,17 @@ template <> void Converter<algorithm>::operator()(xml_h element) const { // SensitiveDetector and Segmentation currently are undefined. Let's keep it like this // until we found something better..... - + printout(ns.context->debug_algorithms ? ALWAYS : DEBUG, + "DDCMS","+++ Start executing algorithm %s....",type.c_str()); + long ret = PluginService::Create<long>(type, &description, ns.context, &element, &sd); + if ( ret == 1 ) { + printout(ns.context->debug_algorithms ? ALWAYS : DEBUG, + "DDCMS", "+++ Executed algorithm: %08lX = %s", ret, name.c_str()); + return; + } +#if 0 DetElement det(PluginService::Create<NamedObject*>(type, &description, ns.context, &element, &sd)); - if (det.isValid()) { + if (det.isValid()) { // setChildTitles(make_pair(name, det)); if ( sd.isValid() ) { det->flag |= DetElement::Object::HAVE_SENSITIVE_DETECTOR; @@ -509,15 +679,15 @@ template <> void Converter<algorithm>::operator()(xml_h element) const { seg->detector = det; } } -#if 0 if (!det.isValid()) { PluginDebug dbg; PluginService::Create<NamedObject*>(type, &description, ns.context, &element, &sd); except("DDCMS","Failed to execute subdetector creation plugin. " + dbg.missingFactory(type)); } + description.addDetector(det); #endif ///description.addDetector(det); - printout(ERROR, "DDCMS", "++ FAILED NOT ADDING SUBDETECTOR %s", name.c_str()); + printout(ERROR, "DDCMS", "++ FAILED NOT ADDING SUBDETECTOR %08lX = %s",ret, name.c_str()); return; } catch (const exception& exc) { @@ -534,10 +704,13 @@ template <> void Converter<debug>::operator()(xml_h dbg) const { Namespace ns(_param<ParsingContext>()); if ( dbg.hasChild(_CMU(debug_constants)) ) ns.context->debug_constants = true; if ( dbg.hasChild(_CMU(debug_materials)) ) ns.context->debug_materials = true; + if ( dbg.hasChild(_CMU(debug_rotations)) ) ns.context->debug_rotations = true; if ( dbg.hasChild(_CMU(debug_shapes)) ) ns.context->debug_shapes = true; if ( dbg.hasChild(_CMU(debug_volumes)) ) ns.context->debug_volumes = true; if ( dbg.hasChild(_CMU(debug_placements)) ) ns.context->debug_placements = true; if ( dbg.hasChild(_CMU(debug_namespaces)) ) ns.context->debug_namespaces = true; + if ( dbg.hasChild(_CMU(debug_includes)) ) ns.context->debug_includes = true; + if ( dbg.hasChild(_CMU(debug_algorithms)) ) ns.context->debug_algorithms = true; } template <> void Converter<vis_apply>::operator()(xml_h /* dddefinition */) const { @@ -559,36 +732,140 @@ template <> void Converter<vis_apply>::operator()(xml_h /* dddefinition */) cons VisPatcher(description).patch(); } +template <> void Converter<resolve>::operator()(xml_h /* element */) const { + ParsingContext* ctx = _param<ParsingContext>(); + resolve* res = _option<resolve>(); + Namespace ns(ctx); + int count = 0; + + printout(ctx->debug_constants ? ALWAYS : DEBUG, + "DDCMS","+++ RESOLVING %ld unknown constants.....",res->unresolvedConst.size()); + while ( !res->unresolvedConst.empty() ) { + for(auto i=res->unresolvedConst.begin(); i!=res->unresolvedConst.end(); ++i ) { + const string& n = (*i).first; + string rep; + string& v = (*i).second; + size_t idx, idq; + for(idx=v.find('[',0); idx != string::npos; idx = v.find('[',idx+1) ) { + idq = v.find(']',idx+1); + rep = v.substr(idx+1,idq-idx-1); + auto r = res->allConst.find(rep); + if ( r != res->allConst.end() ) { + rep = "("+(*r).second+")"; + v.replace(idx,idq-idx+1,rep); + } + } + if ( v.find(']') == string::npos ) { + if ( v.find("-+") != string::npos || v.find("+-") != string::npos ) { + while ( (idx=v.find("-+")) != string::npos ) + v.replace(idx,2,"-"); + while ( (idx=v.find("+-")) != string::npos ) + v.replace(idx,2,"-"); + } + printout(ctx->debug_constants ? ALWAYS : DEBUG, + "DDCMS","+++ [%06ld] ---------- %-40s = %s", + res->unresolvedConst.size()-1,n.c_str(),res->originalConst[n].c_str()); + ns.addConstantNS(n, v, "number"); + res->unresolvedConst.erase(i); + break; + } + } + if ( ++count > 1000 ) break; + } + if ( !res->unresolvedConst.empty() ) { + for(const auto& e : res->unresolvedConst ) + printout(ERROR,"DDCMS","+++ Unresolved constant: %-40s = %s.",e.first.c_str(), e.second.c_str()); + except("DDCMS","++ FAILED to resolve %ld constant entries:",res->unresolvedConst.size()); + } + res->unresolvedConst.clear(); + res->originalConst.clear(); + res->allConst.clear(); +} + +template <> void Converter<print_xml_doc>::operator()(xml_h element) const { + string fname = xml::DocumentHandler::system_path(element); + printout(_param<ParsingContext>()->debug_includes ? ALWAYS : DEBUG, + "DDCMS","+++ Processing data from file:%s",fname.c_str()); +} + /// Converter for <DDDefinition/> tags -template <> void Converter<dddefinition>::operator()(xml_h element) const { +static long load_dddefinition(Detector& description, xml_h element) { static int num_calls = 0; - static ParsingContext ctxt; + static ParsingContext ctxt(&description); + Namespace ns(ctxt); xml_elt_t dddef(element); string fname = xml::DocumentHandler::system_path(element); bool open_geometry = true; bool close_geometry = true; ++num_calls; - Path path(fname); - string ns = path.filename().substr(0,path.filename().rfind('.')); - ctxt.namespaces.push_back(ns+'_'); + //Path path(fname); + //string ns = path.filename().substr(0,path.filename().rfind('.')); + //ctxt.namespaces.push_back(ns+'_'); xml_coll_t(dddef, _U(debug)).for_each(Converter<debug>(description,&ctxt)); // Here we define the order how XML elements are processed. // Be aware of dependencies. This can only defined once. // At the end it is a limitation of DOM.... printout(INFO,"DDCMS","+++ Processing the CMS detector description %s",fname.c_str()); - xml_coll_t(dddef, _CMU(ConstantsSection)).for_each(Converter<constantssection>(description,&ctxt)); - xml_coll_t(dddef, _CMU(VisSection)).for_each(Converter<vissection>(description,&ctxt)); - xml_coll_t(dddef, _CMU(IncludeSection)).for_each(_CMU(Include), Converter<include>(description,&ctxt)); - - xml_coll_t(dddef, _CMU(RotationSection)).for_each(Converter<rotationsection>(description,&ctxt)); - xml_coll_t(dddef, _CMU(MaterialSection)).for_each(Converter<materialsection>(description,&ctxt)); - + if ( num_calls == 1 ) { + resolve res; + xml::Document d; + Converter<print_xml_doc> print_doc(description,&ctxt); + print_doc((d=dddef.document()).root()); + xml_coll_t(dddef, _CMU(ConstantsSection)).for_each(Converter<constantssection>(description,&ctxt,&res)); + xml_coll_t(dddef, _CMU(VisSection)).for_each(Converter<vissection>(description,&ctxt)); + xml_coll_t(dddef, _CMU(RotationSection)).for_each(Converter<rotationsection>(description,&ctxt)); + xml_coll_t(dddef, _CMU(MaterialSection)).for_each(Converter<materialsection>(description,&ctxt)); + + xml_coll_t(dddef, _CMU(IncludeSection)).for_each(_CMU(Include), Converter<include_load>(description,&ctxt,&res)); + try { + for(xml::Document doc : res.includes ) Converter<include_constants>(description,&ctxt,&res)((d=doc).root()); + // Before we continue, we have to resolve all constants NOW! + Converter<resolve>(description,&ctxt,&res)(dddef); + // Now we can process the include files one by one..... + for(xml::Document doc : res.includes ) { + print_doc((d=doc).root()); + xml_coll_t(doc.root(),_CMU(MaterialSection)).for_each(Converter<materialsection>(description,&ctxt)); + } + ctxt.geo_inited = true; + description.init(); + ns.addVolume(description.worldVolume()); + for(xml::Document doc : res.includes ) { + print_doc((d=doc).root()); + xml_coll_t(doc.root(),_CMU(RotationSection)).for_each(Converter<rotationsection>(description,&ctxt)); + } + for(xml::Document doc : res.includes ) { + print_doc((d=doc).root()); + xml_coll_t(doc.root(), _CMU(SolidSection)).for_each(Converter<solidsection>(description,&ctxt)); + } + for(xml::Document doc : res.includes ) { + print_doc((d=doc).root()); + xml_coll_t(doc.root(), _CMU(LogicalPartSection)).for_each(Converter<logicalpartsection>(description,&ctxt)); + } + for(xml::Document doc : res.includes ) { + print_doc((d=doc).root()); + xml_coll_t(doc.root(), _CMU(Algorithm)).for_each(Converter<algorithm>(description,&ctxt)); + } + for(xml::Document doc : res.includes ) { + print_doc((d=doc).root()); + xml_coll_t(doc.root(), _CMU(PosPartSection)).for_each(Converter<pospartsection>(description,&ctxt)); + } + } + catch(const exception& e) { + printout(ERROR,"DDCMS","Exception while processing xml source:%s",d.uri().c_str()); + printout(ERROR,"DDCMS","----> %s", e.what()); + throw; + } + /// Unload all XML files after processing + for(xml::Document doc : res.includes ) Converter<include_unload>(description,&ctxt,&res)(doc.root()); + } + // Now process the actual geometry items xml_coll_t(dddef, _CMU(SolidSection)).for_each(Converter<solidsection>(description,&ctxt)); xml_coll_t(dddef, _CMU(LogicalPartSection)).for_each(Converter<logicalpartsection>(description,&ctxt)); + xml_coll_t(dddef, _CMU(Algorithm)).for_each(Converter<algorithm>(description,&ctxt)); xml_coll_t(dddef, _CMU(PosPartSection)).for_each(Converter<pospartsection>(description,&ctxt)); - +#if 0 /// Analyse algorithms to be called if ( !ctxt.geo_inited && dddef.hasChild(_CMU(Algorithm)) ) { ctxt.geo_inited = true; @@ -598,7 +875,7 @@ template <> void Converter<dddefinition>::operator()(xml_h element) const { ctxt.geo_inited = true; description.init(); } - xml_coll_t(dddef, _CMU(Algorithm)).for_each(Converter<algorithm>(description,&ctxt)); +#endif /// This should be the end of all processing....close the geometry if ( --num_calls == 0 && close_geometry ) { @@ -608,11 +885,6 @@ template <> void Converter<dddefinition>::operator()(xml_h element) const { } ctxt.namespaces.pop_back(); printout(INFO,"DDDefinition","+++ Finished processing %s",fname.c_str()); -} - -static long load_dddefinition(Detector& description, xml_h element) { - Converter<dddefinition>converter(description); - converter(element); return 1; } diff --git a/DDCMS/src/plugins/DDPixBarLayerAlgo.cpp b/DDCMS/src/plugins/DDPixBarLayerAlgo.cpp index 69c649024..44437faab 100644 --- a/DDCMS/src/plugins/DDPixBarLayerAlgo.cpp +++ b/DDCMS/src/plugins/DDPixBarLayerAlgo.cpp @@ -19,7 +19,6 @@ #include "DD4hep/DetFactoryHelper.h" #include "DD4hep/Printout.h" #include "DDCMS/DDCMSPlugins.h" -#include "CLHEP/Units/SystemOfUnits.h" // C/C++ include files #include <sstream> @@ -29,10 +28,10 @@ using namespace dd4hep; using namespace dd4hep::detail; using namespace dd4hep::cms; -static Ref_t create_element(Detector& description, ParsingContext& ctxt, xml_h e, SensitiveDetector& /* sens */) { +static long create_element(Detector& description, ParsingContext& ctxt, xml_h e, SensitiveDetector& /* sens */) { stringstream str; PlacedVolume pv; - Namespace ns(ctxt); + Namespace ns(ctxt, e, true); AlgoArguments args(ctxt, e); string parentName = args.parentName(); @@ -51,9 +50,7 @@ static Ref_t create_element(Detector& description, ParsingContext& ctxt, xml_h e string coolMat = args.value<string>("CoolMaterial"); string tubeMat = args.value<string>("CoolTubeMaterial"); - str.str(""); - str << "DDPixBarLayerAlgo debug: Parent " << parentName - << " NameSpace " << ns.name << "\n" + str << "Parent " << parentName << " NameSpace " << ns.name << "\n" << "\tLadders " << number << "\tGeneral Material " << genMat << "\tLength " << layerDz << "\tSensorEdge " << sensorEdge << "\tSpecification of Cooling Pieces:\n" @@ -61,19 +58,17 @@ static Ref_t create_element(Detector& description, ParsingContext& ctxt, xml_h e << " Side " << coolSide << " Thickness of Shell " << coolThick << " Radial distance " << coolDist << " Materials " << coolMat << ", " << tubeMat; - printout(DEBUG,"PixelGeom",str.str().c_str()); + printout(INFO,"DDPixBarLayerAlgo",str); vector<string> ladder = args.value<vector<string> >("LadderName"); vector<double> ladderWidth = args.value<vector<double> >("LadderWidth"); vector<double> ladderThick = args.value<vector<double> >("LadderThick"); - str.str(""); - str << "DDPixBarLayerAlgo debug: Full Ladder " - << ladder[0] << " width/thickness " << ladderWidth[0] + str << "Full Ladder " << ladder[0] << " width/thickness " << ladderWidth[0] << ", " << ladderThick[0] << "\tHalf Ladder " << ladder[1] << " width/thickness " << ladderWidth[1] << ", " << ladderThick[1]; - printout(DEBUG,"PixelGeom",str.str().c_str()); + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDPixBarLayerAlgo",str); string mother = parentName; const std::string &idName = mother; @@ -86,26 +81,23 @@ static Ref_t create_element(Detector& description, ParsingContext& ctxt, xml_h e double rmin = (coolDist-0.5*(d1+d2))*cos(0.5*dphi)-0.5*ladderThick[0]; double rmax = (coolDist+0.5*(d1+d2))*cos(0.5*dphi)+0.5*ladderThick[0]; double rmxh = rmax - 0.5*ladderThick[0] + ladderThick[1]; - str.str(""); - str << "DDPixBarLayerAlgo test: Rmin/Rmax " << rmin + str << "Rmin/Rmax " << rmin << ", " << rmax << " d1/d2 " << d1 << ", " << d2 << " x1/x2 " << x1 << ", " << x2; - printout(DEBUG,"PixelGeom",str.str().c_str()); + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDPixBarLayerAlgo",str); double rtmi = rmin + 0.5*ladderThick[0] - ladderThick[1]; double rtmx = sqrt(rmxh*rmxh+ladderWidth[1]*ladderWidth[1]); Solid solid = Tube(rtmi, rtmx, 0.5*layerDz, 0, CLHEP::twopi); solid.setName(idName); str.str(""); - str << "DDPixBarLayerAlgo test: " - << idName << " Tubs made of " + str << "IDname "<< idName << " Tubs made of " << genMat << " from 0 to " << CLHEP::twopi/CLHEP::deg << " with Rin " << rtmi << " Rout " << rtmx << " ZHalf " << 0.5*layerDz; - printout(DEBUG,"PixelGeom",str.str().c_str()); + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDPixBarLayerAlgo",str); - Material matter; - Volume layer(solid.name(), solid, description.material(genMat)); + Volume layer(solid.name(), solid, ns.material(genMat)); double rr = 0.5*(rmax+rmin); double dr = 0.5*(rmax-rmin); @@ -113,13 +105,12 @@ static Ref_t create_element(Detector& description, ParsingContext& ctxt, xml_h e std::string name = idName + "CoolTube"; solid = Trap(0.5*coolDz, 0, 0, h1, d2, d1, 0, h1, d2, d1, 0); solid.setName(idName+"CoolTube"); - str.str(""); - str << "DDPixBarLayerAlgo test: " <<solid.name() + str << "Solid " << solid.name() << " Trap made of " << tubeMat << " of dimensions " << 0.5*coolDz << ", 0, 0, " << h1 << ", " << d2 << ", " << d1 << ", 0, " << h1 << ", " << d2 << ", " << d1 << ", 0"; - printout(DEBUG,"PixelGeom",str.str().c_str()); + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDPixBarLayerAlgo",str); Volume coolTube(solid.name(), solid, description.material(tubeMat)); h1 -= coolThick; @@ -128,30 +119,27 @@ static Ref_t create_element(Detector& description, ParsingContext& ctxt, xml_h e solid = Trap(0.5*coolDz, 0, 0, h1, d2, d1, 0, h1, d2, d1, 0); solid.setName(idName + "Coolant"); - str.str(""); - str << "DDPixBarLayerAlgo test: " <<solid.name() + str << "Solid " << solid.name() << " Trap made of " << coolMat << " of dimensions " << 0.5*coolDz << ", 0, 0, " << h1 << ", " << d2 << ", " << d1 << ", 0, " << h1 << ", " << d2 << ", " << d1 << ", 0"; - printout(DEBUG,"PixelGeom",str.str().c_str()); + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDPixBarLayerAlgo",str); Volume cool(solid.name(), solid, description.material(coolMat)); - //cpv.position(cool, coolTube, 1, DDTranslation(0.0, 0.0, 0.0), DDRotation()); pv = coolTube.placeVolume(cool); - str.str(""); - str << "DDPixBarLayerAlgo test: " << cool.name() + str << "Cool " << cool.name() << " number 1 positioned in " << coolTube.name() << " at (0,0,0) with no rotation"; - printout(DEBUG,"PixelGeom",str.str().c_str()); + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDPixBarLayerAlgo",str); string ladderFull = ladder[0]; string ladderHalf = ladder[1]; int nphi=number/2, copy=1, iup=-1; double phi0 = 90*CLHEP::deg; - Volume ladderHalfVol = ctxt.volume(ladderHalf); - Volume ladderFullVol = ctxt.volume(ladderFull); + Volume ladderHalfVol = ns.volume(ladderHalf); + Volume ladderFullVol = ns.volume(ladderFull); for (int i=0; i<number; i++) { double phi = phi0 + i*dphi; @@ -166,23 +154,21 @@ static Ref_t create_element(Detector& description, ParsingContext& ctxt, xml_h e rots = idName + std::to_string(copy); phix = phi-90*CLHEP::deg; phiy = 90*CLHEP::deg+phix; - str.str(""); - str << "DDPixBarLayerAlgo test: Creating a new " - << "rotation: " << rots << "\t90., " - << phix/CLHEP::deg << ", 90.," << phiy/CLHEP::deg - << ", 0, 0"; - printout(DEBUG,"PixelGeom",str.str().c_str()); + str << "Creating a new " + << "rotation: " << rots << "\t90., " + << phix/CLHEP::deg << ", 90.," << phiy/CLHEP::deg + << ", 0, 0"; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDPixBarLayerAlgo",str); rot = make_rotation3D(90*CLHEP::deg, phix, 90*CLHEP::deg, phiy, 0.,0.); //cpv.position(ladderHalf, layer, copy, tran, rot); pv = layer.placeVolume(ladderHalfVol, Transform3D(rot,tran)); if ( !pv.isValid() ) { } - str.str(""); - str << "DDPixBarLayerAlgo test: " << ladderHalfVol.name() + str << "ladderHalfVol: " << ladderHalfVol.name() << " number " << copy << " positioned in " << layer.name() << " at " << tran << " with " << rot; - printout(DEBUG,"PixelGeom",str.str().c_str()); + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDPixBarLayerAlgo",str); copy++; iup = -1; @@ -191,23 +177,20 @@ static Ref_t create_element(Detector& description, ParsingContext& ctxt, xml_h e rots = idName + std::to_string(copy); phix = phi+90*CLHEP::deg; phiy = 90*CLHEP::deg+phix; - str.str(""); - str << "DDPixBarLayerAlgo test: Creating a new " - << "rotation: " << rots << "\t90., " + str << "Creating a new rotation: " << rots << "\t90., " << phix/CLHEP::deg << ", 90.," << phiy/CLHEP::deg << ", 0, 0"; - printout(DEBUG,"PixelGeom",str.str().c_str()); + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDPixBarLayerAlgo",str); rot = make_rotation3D(90*CLHEP::deg, phix, 90*CLHEP::deg, phiy, 0.,0.); //cpv.position(ladderHalf, layer, copy, tran, rot); pv = layer.placeVolume(ladderHalfVol, Transform3D(rot,tran)); if ( !pv.isValid() ) { } - str.str(""); - str << "DDPixBarLayerAlgo test: " << ladderHalfVol.name() + str << "ladderHalfVol: " << ladderHalfVol.name() << " number " << copy << " positioned in " << layer.name() << " at " << tran << " with " << rot; - printout(DEBUG,"PixelGeom",str.str().c_str()); + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDPixBarLayerAlgo",str); copy++; } else { iup =-iup; @@ -217,24 +200,22 @@ static Ref_t create_element(Detector& description, ParsingContext& ctxt, xml_h e if (iup > 0) phix = phi-90*CLHEP::deg; else phix = phi+90*CLHEP::deg; phiy = phix+90.*CLHEP::deg; - str.str(""); str << "DDPixBarLayerAlgo test: Creating a new " << "rotation: " << rots << "\t90., " << phix/CLHEP::deg << ", 90.," << phiy/CLHEP::deg << ", 0, 0"; - printout(DEBUG,"PixelGeom",str.str().c_str()); + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDPixBarLayerAlgo",str); rot = make_rotation3D(90*CLHEP::deg, phix, 90*CLHEP::deg, phiy, 0.,0.); //cpv.position(ladderFull, layer, copy, tran, rot); pv = layer.placeVolume(ladderFullVol, Transform3D(rot,tran)); if ( !pv.isValid() ) { } - str.str(""); - str << "DDPixBarLayerAlgo test: " << ladderFullVol.name() + str << "test: " << ladderFullVol.name() << " number " << copy << " positioned in " << layer.name() << " at " << tran << " with " << rot; - printout(DEBUG,"PixelGeom",str.str().c_str()); + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDPixBarLayerAlgo",str); copy++; } rrr = coolDist*cos(0.5*dphi); @@ -243,32 +224,36 @@ static Ref_t create_element(Detector& description, ParsingContext& ctxt, xml_h e phix = phi+0.5*dphi; if (iup > 0) phix += 180*CLHEP::deg; phiy = phix+90.*CLHEP::deg; - str.str(""); - str << "DDPixBarLayerAlgo test: Creating a new " - << "rotation: " << rots << "\t90., " + str << "Creating a new rotation: " << rots << "\t90., " << phix/CLHEP::deg << ", 90.," << phiy/CLHEP::deg << ", 0, 0"; - printout(DEBUG,"PixelGeom",str.str().c_str()); + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDPixBarLayerAlgo",str); rot = make_rotation3D(90*CLHEP::deg, phix, 90*CLHEP::deg, phiy, 0.,0.); //cpv.position(coolTube, layer, i+1, tran, rot); pv = layer.placeVolume(coolTube,Transform3D(rot,tran)); if ( !pv.isValid() ) { } - str.str(""); - str << "DDPixBarLayerAlgo test: " << coolTube.name() + str << "coolTube: " << coolTube.name() << " number " << i+1 << " positioned in " << layer.name() << " at " << tran << " with "<< rot; - printout(DEBUG,"PixelGeom",str.str().c_str()); + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDPixBarLayerAlgo",str); } + ns.addVolumeNS(layer); + //nn.addVolume(assembly); + printout(INFO,"DDPixBarLayerAlgo","Layer: %s assembly:%s",layer.name(),"---"); +#if 0 + string det_name = idName; + Assembly assembly(det_name); // Now we have built the layer.....create the DetElement object - string det_name = "Layer_"+idName; DetElement det_elt(det_name,0); - Assembly assembly(det_name); - Volume motherVol = description.pickMotherVolume(det_elt); pv = assembly.placeVolume(layer); - pv = motherVol.placeVolume(assembly); + det_elt.setPlacement(pv); - return det_elt; + description.addDetector(det_elt); + Volume motherVol = description.pickMotherVolume(det_elt); + pv = motherVol.placeVolume(assembly); +#endif + return 1; } // first argument is the type from the xml file diff --git a/DDCMS/src/plugins/DDTECCoolAlgo.cpp b/DDCMS/src/plugins/DDTECCoolAlgo.cpp new file mode 100644 index 000000000..6dd9a87fa --- /dev/null +++ b/DDCMS/src/plugins/DDTECCoolAlgo.cpp @@ -0,0 +1,83 @@ +//========================================================================== +// AIDA Detector description implementation +//-------------------------------------------------------------------------- +// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) +// All rights reserved. +// +// For the licensing terms see $DD4hepINSTALL/LICENSE. +// For the list of contributors see $DD4hepINSTALL/doc/CREDITS. +// +// Author : M.Frank +// +//========================================================================== +// +// Specialized generic detector constructor +// +//========================================================================== + +// Framework include files +#include "DD4hep/DetFactoryHelper.h" +#include "DD4hep/Printout.h" +#include "DDCMS/DDCMSPlugins.h" + +// C/C++ include files +#include <sstream> + +using namespace std; +using namespace dd4hep; +using namespace dd4hep::cms; + +static long algorithm(Detector& /* description */, + ParsingContext& ctxt, + xml_h e, + SensitiveDetector& /* sens */) +{ + stringstream str; + Namespace ns(ctxt,e,true); + AlgoArguments args(ctxt, e); + int startCopyNo = args.find("StartCopyNo") ? args.value<int>("StartCopyNo") : 1; + double rPosition = args.value<double>("RPosition"); + vector<double> phiPosition = args.value<vector<double> >("PhiPosition"); + vector<string> coolInsert = args.value<vector<string> >("CoolInsert"); + Volume mother = ns.volume(args.parentName()); + + str << "debug: Parent " << mother.name() + <<" NameSpace " << ns.name << " at radial Position " << rPosition; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECCoolAlgo",str); + if (phiPosition.size() == coolInsert.size()) { + for (int i=0; i<(int)(phiPosition.size()); i++) { + str << "debug: Insert[" << i << "]: " + << coolInsert.at(i) << " at Phi " + << phiPosition.at(i)/CLHEP::deg; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECCoolAlgo",str); + } + } else { + str << "ERROR: Number of inserts does not match the numer of PhiPositions!"; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECCoolAlgo",str); + } + + int copyNo = startCopyNo; + // loop over the inserts to be placed + for (int i = 0; i < (int)(coolInsert.size()); i++) { + Volume child = ns.volume(ns.real_name(coolInsert.at(i))); + // get positions + double xpos = rPosition*cos(phiPosition.at(i)); + double ypos = -rPosition*sin(phiPosition.at(i)); + // place inserts + Position tran(xpos, ypos, 0.0); + mother.placeVolume(child,tran); + str << "test " << child.name() << "[" + << copyNo << "] positioned in " << mother.name() + << " at " << tran + << " phi " << phiPosition.at(i)/CLHEP::deg << " r " + << rPosition; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECCoolAlgo",str); + copyNo++; + } + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECCoolAlgo","Finished...."); + return 1; +} + +// first argument is the type from the xml file +DECLARE_DDCMS_DETELEMENT(track_DDTECCoolAlgo,algorithm) + diff --git a/DDCMS/src/plugins/DDTECModuleAlgo.cpp b/DDCMS/src/plugins/DDTECModuleAlgo.cpp new file mode 100644 index 000000000..4192461ff --- /dev/null +++ b/DDCMS/src/plugins/DDTECModuleAlgo.cpp @@ -0,0 +1,645 @@ +//========================================================================== +// AIDA Detector description implementation +//-------------------------------------------------------------------------- +// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) +// All rights reserved. +// +// For the licensing terms see $DD4hepINSTALL/LICENSE. +// For the list of contributors see $DD4hepINSTALL/doc/CREDITS. +// +// Author : M.Frank +// +//========================================================================== +// +// Specialized generic detector constructor +// +//========================================================================== + +// Framework include files +#include "DD4hep/DetFactoryHelper.h" +#include "DD4hep/Printout.h" +#include "DDCMS/DDCMSPlugins.h" + +// C/C++ include files +#include <sstream> + +using namespace std; +using namespace dd4hep; +using namespace dd4hep::cms; + +static void doPos(ParsingContext& ctxt, Volume toPos, Volume mother, + int /* copyNr */, double x, double y, double z, + const string& rotName) +{ + stringstream str; + Namespace ns(ctxt); + mother.placeVolume(toPos,Transform3D(ns.rotation(rotName),Position(x,y,z))); + str << "Volume: " << mother.name() << " positioned daughter "<< mother.name(); + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); +} + +static void doPos(ParsingContext& ctxt, Volume toPos, Volume mother, + bool isStereo, double rPos, + double posCorrectionPhi, + double x, double y, double z, + string rotName) +{ + int copyNr = isStereo ? 2 : 1; + // This has to be done so that the Mother coordinate System of a Tub resembles + // the coordinate System of a Trap or Box. + z += rPos; + + if(isStereo){ + // z is x , x is y + //z+= rPos*sin(posCorrectionPhi); <<- this is already corrected with the r position! + x += rPos*sin(posCorrectionPhi); + } + /////FIXME!!! if (rotName == "NULL") rotName = standardRot; + doPos(ctxt,toPos,mother,copyNr,x,y,z,rotName); +} + +static long algorithm(Detector& /* description */, + ParsingContext& ctxt, + xml_h e, + SensitiveDetector& /* sens */) +{ + stringstream str; + Namespace ns(ctxt, e, true); + AlgoArguments args(ctxt, e); + Volume mother = ns.volume(args.parentName()); + + //variables: + //double noOverlapShift = args.value<double>("NoOverlapShift"); + int ringNo = args.value<int>("RingNo"); + bool isStereo = args.value<int>("isStereo") == 1; + bool isRing6 = (ringNo == 6); + double rPos = args.value<double>("RPos"); //Position in R relativ to the center of the TEC ( this is the coord-sys of Tubs) + double posCorrectionPhi = isStereo ? args.value<double>("PosCorrectionPhi") : 0e0; // the Phi position of the stereo Modules has to be corrected + string standardRot = args.value<string>("StandardRotation"); //Rotation that aligns the mother(Tub ) coordinate System with the components + string genMat = args.value<string>("GeneralMaterial"); //General material name + double moduleThick = args.value<double>("ModuleThick"); //Module thickness + double detTilt = args.value<double>("DetTilt"); //Tilt of stereo detector + double fullHeight = args.value<double>("FullHeight"); //Height + double dlTop = args.value<double>("DlTop"); //Width at top of wafer + double dlBottom = args.value<double>("DlBottom"); //Width at bottom of wafer + double dlHybrid = args.value<double>("DlHybrid"); //Width at the hybrid end + double frameWidth = args.value<double>("FrameWidth"); //Frame width + double frameThick = args.value<double>("FrameThick"); // thickness + double frameOver = args.value<double>("FrameOver"); // overlap (on sides) + string topFrameMat = args.value<string>("TopFrameMaterial"); //Top frame material + double topFrameHeight = args.value<double>("TopFrameHeight"); // height + double topFrameThick = args.value<double>("TopFrameThick"); // thickness + double topFrameTopWidth = args.value<double>("TopFrameTopWidth");// Width at the top + double topFrameBotWidth = args.value<double>("TopFrameBotWidth");// Width at the bottom + double topFrame2Width = isStereo ? args.value<double>("TopFrame2Width") : 0e0; // Stereo:2ndPart Width + double topFrame2LHeight = isStereo ? args.value<double>("TopFrame2LHeight") : 0e0;// left height + double topFrame2RHeight = isStereo ? args.value<double>("TopFrame2RHeight") : 0e0;// right height + double topFrameZ = args.value<double>("TopFrameZ"); // z-positions + string sideFrameMat = args.value<string>("SideFrameMaterial"); //Side frame material + double sideFrameThick = args.value<double>("SideFrameThick"); // thickness + double sideFrameLWidth = args.value<double>("SideFrameLWidth"); // Left Width (for stereo modules upper one) + double sideFrameLWidthLow = isStereo ? args.value<double>("SideFrameLWidthLow") : 0e0;// Width (only for stereo modules: lower Width) + double sideFrameLHeight = args.value<double>("SideFrameLHeight");// Height + double sideFrameLtheta = args.value<double>("SideFrameLtheta");// angle of the trapezoid shift + double sideFrameRWidth = args.value<double>("SideFrameRWidth"); // Right Width (for stereo modules upper one) + double sideFrameRWidthLow = isStereo ? args.value<double>("SideFrameRWidthLow") : 0e0;// Width (only for stereo modules: lower Width) + double sideFrameRHeight = args.value<double>("SideFrameRHeight");// Height + double sideFrameRtheta = args.value<double>("SideFrameRtheta");// angle of the trapezoid shift + vector<double> siFrSuppBoxWidth = args.value<vector<double> >("SiFrSuppBoxWidth");// Supp.Box Width + vector<double> siFrSuppBoxHeight = args.value<vector<double> >("SiFrSuppBoxHeight");// Height + vector<double> siFrSuppBoxYPos = args.value<vector<double> >("SiFrSuppBoxYPos");// y-position of the supplies box (with HV an thermal sensor...) + double sideFrameZ = args.value<double>("SideFrameZ"); // z-positions + double siFrSuppBoxThick = args.value<double>("SiFrSuppBoxThick");// thickness + string siFrSuppBoxMat = args.value<string>("SiFrSuppBoxMaterial"); // material + string waferMat = args.value<string>("WaferMaterial"); //Wafer material + double waferPosition = args.value<double>("WaferPosition"); // position of the wafer (was formaly done by adjusting topFrameHeigt) + double sideWidthTop = args.value<double>("SideWidthTop"); // widths on the side Top + double sideWidthBottom = args.value<double>("SideWidthBottom");// Bottom + string waferRot = args.value<string>("WaferRotation"); // rotation matrix + string activeMat = args.value<string>("ActiveMaterial"); //Sensitive material + double activeHeight = args.value<double>("ActiveHeight"); // height + double waferThick = args.value<double>("WaferThick"); // wafer thickness (active = wafer - backplane) + string activeRot = args.value<string>("ActiveRotation"); // Rotation matrix + double activeZ = args.value<double>("ActiveZ"); // z-positions + double backplaneThick = args.value<double>("BackPlaneThick"); // thickness + double inactiveDy = ringNo > 3 ? args.value<double>("InactiveDy") : 0e0; //InactiveStrip Hight of ( rings > 3) + double inactivePos = ringNo > 3 ? args.value<double>("InactivePos") : 0e0; // y-Position + string inactiveMat = ringNo > 3 ? args.value<string>("InactiveMaterial") : string(); // material + string hybridMat = args.value<string>("HybridMaterial"); //Hybrid material + double hybridHeight = args.value<double>("HybridHeight"); // height + double hybridWidth = args.value<double>("HybridWidth"); // width + double hybridThick = args.value<double>("HybridThick"); // thickness + double hybridZ = args.value<double>("HybridZ"); // z-positions + string pitchMat = args.value<string>("PitchMaterial"); //Pitch adapter material + double pitchWidth = args.value<double>("PitchWidth"); // width + double pitchHeight = args.value<double>("PitchHeight"); // height + double pitchThick = args.value<double>("PitchThick"); // thickness + double pitchZ = args.value<double>("PitchZ"); // z-positions + string pitchRot = args.value<string>("PitchRotation"); // rotation matrix + string bridgeMat = args.value<string>("BridgeMaterial"); //Bridge material + double bridgeWidth = args.value<double>("BridgeWidth"); // width + double bridgeThick = args.value<double>("BridgeThick"); // thickness + double bridgeHeight = args.value<double>("BridgeHeight"); // height + double bridgeSep = args.value<double>("BridgeSeparation"); // separation + vector<double> siReenforceHeight = args.value<vector<double> >("SiReenforcementHeight");// SiReenforcement Height + vector<double> siReenforceWidth = args.value<vector<double> >("SiReenforcementWidth");// Width + vector<double> siReenforceYPos = args.value<vector<double> >("SiReenforcementPosY");// Y - Position + double siReenforceThick = args.value<double>("SiReenforcementThick");// Thick + string siReenforceMat = args.value<string>("SiReenforcementMaterial"); // Materieal + + str << "debug: ModuleThick " << moduleThick + << " Detector Tilt " << detTilt/CLHEP::deg << " Height " + << fullHeight << " dl(Top) " << dlTop << " dl(Bottom) " + << dlBottom << " dl(Hybrid) " << dlHybrid + << " rPos " << rPos << " standrad rotation " + << standardRot; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + str << "debug: Frame Width " << frameWidth + << " Thickness " << frameThick << " Overlap " + << frameOver; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + str << "debug: Top Frame Material " + << topFrameMat << " Height " << topFrameHeight + << " Top Width " << topFrameTopWidth << " Bottom Width " + << topFrameTopWidth + << " Thickness " << topFrameThick <<" positioned at" + << topFrameZ; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + str << "debug : Side Frame Material " + << sideFrameMat << " Thickness " << sideFrameThick + << " left Leg's Width: " << sideFrameLWidth + << " left Leg's Height: " << sideFrameLHeight + << " left Leg's tilt(theta): " << sideFrameLtheta + << " right Leg's Width: " << sideFrameRWidth + << " right Leg's Height: " << sideFrameRHeight + << " right Leg's tilt(theta): " << sideFrameRtheta + << "Supplies Box's Material: " << siFrSuppBoxMat + << " positioned at" << sideFrameZ; + for (int i= 0; i < (int)(siFrSuppBoxWidth.size());i++){ + str << " Supplies Box" << i << "'s Width: " + << siFrSuppBoxWidth[i] << " Supplies Box" << i + <<"'s Height: " << siFrSuppBoxHeight[i] + << " Supplies Box" << i << "'s y Position: " + << siFrSuppBoxYPos[i]; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + } + str << "debug: Wafer Material " + << waferMat << " Side Width Top" << sideWidthTop + << " Side Width Bottom" << sideWidthBottom + << " and positioned at "<<waferPosition + << " positioned with rotation" << " matrix:" + << waferRot; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + str << "debug: Active Material " + << activeMat << " Height " << activeHeight + << " rotated by " << activeRot + << " translated by (0,0," << -0.5 * backplaneThick << ")" + << " Thickness/Z" + << waferThick-backplaneThick << "/" << activeZ; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + str << "debug: Hybrid Material " + << hybridMat << " Height " << hybridHeight + << " Width " << hybridWidth << " Thickness " + << hybridThick << " Z" << hybridZ; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + str << "debug: Pitch Adapter Material " + << pitchMat << " Height " << pitchHeight + << " Thickness " << pitchThick << " position with " + << " rotation " << pitchRot << " at Z" << pitchZ; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + str << "debug: Bridge Material " + << bridgeMat << " Width " << bridgeWidth + << " Thickness " << bridgeThick << " Height " + << bridgeHeight << " Separation "<< bridgeSep; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + str << "FALTBOOT DDTECModuleAlgo debug : Si-Reenforcement Material " + << sideFrameMat << " Thickness " << siReenforceThick; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + for (int i= 0; i < (int)(siReenforceWidth.size());i++){ + str << " SiReenforcement" << i << "'s Width: " + << siReenforceWidth[i] << " SiReenforcement" << i + << "'s Height: " << siReenforceHeight[i] + << " SiReenforcement" << i << "'s y Position: " + <<siReenforceYPos[i]; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + } + if(!isStereo){ + str << "This is a normal module, in ring "<<ringNo<<"!"; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + } else { + str << "This is a stereo module, in ring "<<ringNo<<"!"; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + str << "Phi Position corrected by " << posCorrectionPhi << "*rad"; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + str << "debug: stereo Top Frame 2nd Part left Heigt " + << topFrame2LHeight << " right Height " << topFrame2RHeight + << " Width " << topFrame2Width ; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + str << " left Leg's lower Width: " << sideFrameLWidthLow + << " right Leg's lower Width: " << sideFrameRWidthLow; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + } + + // Execution part: + + str << "==>> Constructing DDTECModuleAlgo: "; + //declarations + double tmp; + //names + string name; + string tag("Rphi"); + if (isStereo) tag = "Stereo"; + //usefull constants + const double topFrameEndZ = 0.5 * (-waferPosition + fullHeight) + pitchHeight + hybridHeight - topFrameHeight; + string idName = ns.prepend(ns.obj_name(mother.name())); + str << "idName: " << idName << " parent " << mother.name() << " namespace " << ns.name; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + Solid solid; + + //set global parameters + Material matter = ns.material(genMat); + double dzdif = fullHeight + topFrameHeight; + if(isStereo) dzdif += 0.5*(topFrame2LHeight+topFrame2RHeight); + + double dxbot = 0.5*dlBottom + frameWidth - frameOver; + double dxtop = 0.5*dlHybrid + frameWidth - frameOver; + // topfr = 0.5*dlBottom * sin(detTilt); + if (isRing6) { + dxbot = dxtop; + dxtop = 0.5*dlTop + frameWidth - frameOver; + // topfr = 0.5*dlTop * sin(detTilt); + } + double dxdif = dxtop - dxbot; + + //Frame Sides + // left Frame + name = idName + "SideFrameLeft"; + double h1 = 0.5 * sideFrameThick; + double dz = 0.5 * sideFrameLHeight; + double bl1 = 0.5 * sideFrameLWidth; + double bl2 = bl1; + double thet = sideFrameLtheta; + //for stereo modules + if(isStereo) bl1 = 0.5 * sideFrameLWidthLow; + solid = Trap(dz, thet, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0); + ns.addSolidNS(name,solid); + str << "Solid: " << solid.name() + << " Trap made of " << sideFrameMat << " of dimensions " + << dz << ", "<<thet<<", 0, " << h1 << ", " << bl1 << ", " + << bl1 << ", 0, " << h1 << ", " << bl2 << ", " << bl2 + << ", 0"; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + Volume sideFrameLeft(name, solid, ns.material(sideFrameMat)); + ns.addVolumeNS(sideFrameLeft); + //translate + double xpos = - 0.5*topFrameBotWidth +bl2+ tan(fabs(thet)) * dz; + double ypos = sideFrameZ; + double zpos = topFrameEndZ -dz; + //flip ring 6 + if (isRing6){ + zpos *= -1; + xpos -= 2*tan(fabs(thet)) * dz; // because of the flip the tan(..) to be in the other direction + } + //the stereo modules are on the back of the normal ones... + if(isStereo) { + xpos = - 0.5*topFrameBotWidth + bl2*cos(detTilt) + dz*sin(fabs(thet)+detTilt)/cos(fabs(thet)); + xpos = -xpos; + zpos = topFrameEndZ -topFrame2LHeight- + 0.5*sin(detTilt)*(topFrameBotWidth - topFrame2Width)- + dz*cos(detTilt+fabs(thet))/cos(fabs(thet))+bl2*sin(detTilt)-0.1*CLHEP::mm; + } + //position + doPos(ctxt,sideFrameLeft, mother, isStereo, rPos, posCorrectionPhi, xpos,ypos,zpos,waferRot); + + //right Frame + name = idName + "SideFrameRight"; + h1 = 0.5 * sideFrameThick; + dz = 0.5 * sideFrameRHeight; + bl1 = bl2 = 0.5 * sideFrameRWidth; + thet = sideFrameRtheta; + if(isStereo) bl1 = 0.5 * sideFrameRWidthLow; + solid = Trap(dz, thet, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0); + ns.addSolidNS(name,solid); + str << "Solid:\t" << solid.name() + << " Trap made of " << sideFrameMat << " of dimensions " + << dz << ", "<<thet<<", 0, " << h1 << ", " << bl1 << ", " + << bl1 << ", 0, " << h1 << ", " << bl2 << ", " << bl2 + << ", 0"; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + Volume sideFrameRight(name, solid, ns.material(sideFrameMat)); + ns.addVolumeNS(sideFrameRight); + //translate + xpos = 0.5*topFrameBotWidth -bl2- tan(fabs(thet)) * dz; + ypos = sideFrameZ; + zpos = topFrameEndZ -dz ; + if (isRing6){ + zpos *= -1; + xpos += 2*tan(fabs(thet)) * dz; // because of the flip the tan(..) has to be in the other direction + } + if(isStereo){ + xpos = 0.5*topFrameBotWidth - bl2*cos(detTilt) - dz*sin(fabs(detTilt-fabs(thet)))/cos(fabs(thet)); + xpos = -xpos; + zpos = topFrameEndZ -topFrame2RHeight+ + 0.5*sin(detTilt)*(topFrameBotWidth - topFrame2Width)- + dz*cos(detTilt-fabs(thet))/cos(fabs(thet))-bl2*sin(detTilt)-0.1*CLHEP::mm; + } + //position it + doPos(ctxt, sideFrameRight, mother, isStereo, rPos, posCorrectionPhi,xpos,ypos,zpos,waferRot); + + + //Supplies Box(es) + matter = ns.material(siFrSuppBoxMat); + for (int i= 0; i < (int)(siFrSuppBoxWidth.size());i++){ + name = idName + "SuppliesBox" + std::to_string(i); + + h1 = 0.5 * siFrSuppBoxThick; + dz = 0.5 * siFrSuppBoxHeight[i]; + bl1 = bl2 = 0.5 * siFrSuppBoxWidth[i]; + thet = sideFrameRtheta; + if(isStereo) thet = -atan(fabs(sideFrameRWidthLow-sideFrameRWidth)/(2*sideFrameRHeight)-tan(fabs(thet))); + // ^-- this calculates the lower left angel of the tipped trapezoid, which is the SideFframe... + + solid = Trap(dz, thet,0, h1, bl1, bl1, 0, h1, bl2, bl2, 0); + str << "Solid:\t" << solid.name() + << " Trap made of " << siFrSuppBoxMat << " of dimensions " + << dz << ", 0, 0, " << h1 << ", " << bl1 << ", " + << bl1 << ", 0, " << h1 << ", " << bl2 << ", " << bl2 + << ", 0"; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + Volume siFrSuppBox(name, solid, matter); + ns.addVolumeNS(siFrSuppBox); + //translate + xpos = 0.5*topFrameBotWidth -sideFrameRWidth - bl1-siFrSuppBoxYPos[i]*tan(fabs(thet)); + ypos = sideFrameZ*(0.5+(siFrSuppBoxThick/sideFrameThick)); //via * so I do not have to worry about the sign of sideFrameZ + zpos = topFrameEndZ - siFrSuppBoxYPos[i]; + if (isRing6){ + xpos += 2*fabs(tan(thet))* siFrSuppBoxYPos[i]; // the flipped issue again + zpos *= -1; + } + if(isStereo){ + xpos = 0.5*topFrameBotWidth - (sideFrameRWidth+bl1)*cos(detTilt) - + sin(fabs(detTilt-fabs(thet)))*(siFrSuppBoxYPos[i]+dz*(1/cos(thet)- cos(detTilt))+bl1*sin(detTilt)); + xpos =-xpos; + zpos = topFrameEndZ - topFrame2RHeight - + 0.5*sin(detTilt)*(topFrameBotWidth - topFrame2Width) - siFrSuppBoxYPos[i]-sin(detTilt)*sideFrameRWidth; + } + //position it; + doPos(ctxt, siFrSuppBox, mother, isStereo, rPos, posCorrectionPhi,xpos,ypos,zpos,waferRot); + } + + //The Hybrid + name = idName + "Hybrid"; + double dx = 0.5 * hybridWidth; + double dy = 0.5 * hybridThick; + dz = 0.5 * hybridHeight; + solid = Box(dx, dy, dz); + ns.addSolidNS(name, solid); + str << "Solid:\t" << solid.name() + << " Box made of " << hybridMat << " of dimensions " + << dx << ", " << dy << ", " << dz; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + Volume hybrid(name, solid, ns.material(hybridMat)); + ns.addVolumeNS(hybrid); + + ypos = hybridZ; + zpos = 0.5 * (-waferPosition + fullHeight + hybridHeight)+pitchHeight; + if (isRing6) zpos *=-1; + //position it + doPos(ctxt, hybrid, mother, isStereo, rPos, posCorrectionPhi, 0, ypos, zpos, "NULL"); + + // Wafer + name = idName + tag +"Wafer"; + bl1 = 0.5 * dlBottom; + bl2 = 0.5 * dlTop; + h1 = 0.5 * waferThick; + dz = 0.5 * fullHeight; + solid = Trap(dz, 0, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0); + ns.addSolidNS(name,solid); + str << "Solid:\t" << solid.name() + << " Trap made of " << waferMat << " of dimensions " + << dz << ", 0, 0, " << h1 << ", " << bl1 << ", " + << bl1 << ", 0, " << h1 << ", " << bl2 << ", " + << bl2 << ", 0"; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + Volume wafer(name, solid, ns.material(waferMat)); + + ypos = activeZ; + zpos =-0.5 * waferPosition;// former and incorrect topFrameHeight; + if (isRing6) zpos *= -1; + + doPos(ctxt, wafer, mother, isStereo, rPos, posCorrectionPhi,0,ypos,zpos,waferRot); + + // Active + name = idName + tag +"Active"; + bl1 -= sideWidthBottom; + bl2 -= sideWidthTop; + dz = 0.5 * (waferThick-backplaneThick); // inactive backplane + h1 = 0.5 * activeHeight; + if (isRing6) { //switch bl1 <->bl2 + tmp = bl2; bl2 =bl1; bl1 = tmp; + } + solid = Trap(dz, 0, 0, h1, bl2, bl1, 0, h1, bl2, bl1, 0); + ns.addSolidNS(name,solid); + str << "Solid:\t" << solid.name() + << " Trap made of " << activeMat << " of dimensions " + << dz << ", 0, 0, " << h1 << ", " << bl2 << ", " + << bl1 << ", 0, " << h1 << ", " << bl2 << ", " + << bl1 << ", 0"; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + Volume active(name, solid, ns.material(activeMat)); + ns.addVolumeNS(active); + doPos(ctxt, active, wafer, 1, -0.5 * backplaneThick,0,0, activeRot); // from the definition of the wafer local axes and doPos() routine + + //inactive part in rings > 3 + if(ringNo > 3){ + inactivePos -= fullHeight-activeHeight; //inactivePos is measured from the beginning of the _wafer_ + name = idName + tag +"Inactive"; + bl1 = 0.5*dlBottom-sideWidthBottom + + ((0.5*dlTop-sideWidthTop-0.5*dlBottom+sideWidthBottom)/activeHeight) + *(activeHeight-inactivePos-inactiveDy); + bl2 = 0.5*dlBottom-sideWidthBottom + + ((0.5*dlTop-sideWidthTop-0.5*dlBottom+sideWidthBottom)/activeHeight) + *(activeHeight-inactivePos+inactiveDy); + dz = 0.5 * (waferThick-backplaneThick); // inactive backplane + h1 = inactiveDy; + if (isRing6) { //switch bl1 <->bl2 + tmp = bl2; bl2 =bl1; bl1 = tmp; + } + solid = Trap(dz, 0, 0, h1, bl2, bl1, 0, h1, bl2, bl1, 0); + ns.addSolidNS(name,solid); + str << "Solid:\t" << solid.name() + << " Trap made of " << inactiveMat << " of dimensions " + << dz << ", 0, 0, " << h1 << ", " << bl2 << ", " + << bl1 << ", 0, " << h1 << ", " << bl2 << ", " + << bl1 << ", 0"; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + Volume inactive(name, solid, ns.material(inactiveMat)); + ns.addVolumeNS(inactive); + ypos = inactivePos - 0.5*activeHeight; + doPos(ctxt, inactive, active, 1, ypos, 0, 0, "NULL"); // from the definition of the wafer local axes and doPos() routine + } + //Pitch Adapter + name = idName + "PA"; + if (!isStereo) { + dx = 0.5 * pitchWidth; + dy = 0.5 * pitchThick; + dz = 0.5 * pitchHeight; + solid = Box(dx, dy, dz); + ns.addSolidNS(name,solid); + str << "Solid:\t" << solid.name() + << " Box made of " << pitchMat <<" of dimensions " + << dx << ", " << dy << ", " << dz; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + } else { + dz = 0.5 * pitchWidth; + h1 = 0.5 * pitchThick; + bl1 = 0.5 * pitchHeight + 0.5 * dz * sin(detTilt); + bl2 = 0.5 * pitchHeight - 0.5 * dz * sin(detTilt); + thet = atan((bl1-bl2)/(2.*dz)); + solid = Trap(dz, thet, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0); + ns.addSolidNS(name,solid); + str << "Solid:\t" << solid.name() + << " Trap made of " << pitchMat + << " of dimensions " << dz << ", " << thet/CLHEP::deg + << ", 0, " << h1 << ", " << bl1 << ", " << bl1 + << ", 0, " << h1 << ", " << bl2 << ", " << bl2 + << ", 0"; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + } + xpos = 0; + ypos = pitchZ; + zpos = 0.5 * (-waferPosition + fullHeight + pitchHeight); + if (isRing6) zpos *= -1; + if(isStereo) xpos = 0.5 * fullHeight * sin(detTilt); + + Volume pa(name, solid, ns.material(pitchMat)); + if(isStereo) doPos(ctxt, pa, mother, isStereo, rPos, posCorrectionPhi, xpos, ypos,zpos, pitchRot); + else doPos(ctxt, pa, mother, isStereo, rPos, posCorrectionPhi, xpos, ypos,zpos, "NULL"); + + //Top of the frame + name = idName + "TopFrame"; + h1 = 0.5 * topFrameThick; + dz = 0.5 * topFrameHeight; + bl1 = 0.5 * topFrameBotWidth; + bl2 = 0.5 * topFrameTopWidth; + if (isRing6) { // ring 6 faces the other way! + bl1 = 0.5 * topFrameTopWidth; + bl2 = 0.5 * topFrameBotWidth; + } + + solid = Trap(dz, 0, 0, h1, bl1, bl1,0, h1, bl2, bl2, 0); + ns.addSolid(name,solid); + str << "Solid:\t" << solid.name() + << " Trap made of " << topFrameMat << " of dimensions " + << dz << ", 0, 0, " << h1 << ", " << bl1 << ", " + << bl1 << ", 0, " << h1 << ", " << bl2 << ", " << bl2 + << ", 0"; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + Volume topFrame(name, solid, ns.material(topFrameMat)); + ns.addVolumeNS(topFrame); + + if(isStereo){ + name = idName + "TopFrame2"; + //additional object to build the not trapzoid geometry of the stereo topframes + dz = 0.5 * topFrame2Width; + h1 = 0.5 * topFrameThick; + bl1 = 0.5 * topFrame2LHeight; + bl2 = 0.5 * topFrame2RHeight; + thet = atan((bl1-bl2)/(2.*dz)); + + solid = Trap(dz, thet, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0); + ns.addSolid(name,solid); + str << "Solid:\t" << solid.name() + << " Trap made of " << topFrameMat << " of dimensions " + << dz << ", " << thet/CLHEP::deg << ", 0, " << h1 + << ", " << bl1 << ", " << bl1 << ", 0, " << h1 + << ", " << bl2 << ", " << bl2 << ", 0"; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + } + + // Position the topframe + ypos = topFrameZ; + zpos = 0.5 * (-waferPosition + fullHeight - topFrameHeight)+ pitchHeight + hybridHeight; + if(isRing6){ + zpos *=-1; + } + + doPos(ctxt, topFrame, mother, isStereo, rPos, posCorrectionPhi, 0,ypos,zpos,"NULL"); + if ( isStereo ) { + //create + Volume topFrame2(name, solid, ns.material(topFrameMat)); + zpos -= 0.5*(topFrameHeight + 0.5*(topFrame2LHeight+topFrame2RHeight)); + doPos(ctxt, topFrame2, mother, isStereo, rPos, posCorrectionPhi, 0,ypos,zpos,pitchRot); + } + + //Si - Reencorcement + matter = ns.material(siReenforceMat); + for (int i= 0; i < (int)(siReenforceWidth.size());i++){ + name = idName + "SiReenforce" + std::to_string(i); + h1 = 0.5 * siReenforceThick; + dz = 0.5 * siReenforceHeight[i]; + bl1 = bl2 = 0.5 * siReenforceWidth[i]; + solid = Trap(dz, 0, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0); + str << "Solid:\t" << solid.name() + << " Trap made of " << matter.name() << " of dimensions " + << dz << ", 0, 0, " << h1 << ", " << bl1 << ", " + << bl1 << ", 0, " << h1 << ", " << bl2 << ", " << bl2 + << ", 0"; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + Volume siReenforce(name, solid, matter); + ns.addVolumeNS(siReenforce); + //translate + xpos =0 ; + ypos = sideFrameZ; + zpos = topFrameEndZ -dz -siReenforceYPos[i]; + + if (isRing6) zpos *= -1; + if(isStereo){ + xpos = (-siReenforceYPos[i]+0.5*fullHeight)*sin(detTilt); + // thet = detTilt; + // if(topFrame2RHeight > topFrame2LHeight) thet *= -1; + // zpos -= topFrame2RHeight + sin(thet)*(sideFrameRWidth + 0.5*dlTop); + zpos -= topFrame2RHeight + sin (fabs(detTilt))* 0.5*topFrame2Width; + } + doPos(ctxt,siReenforce, mother, isStereo, rPos, posCorrectionPhi,xpos,ypos,zpos,waferRot); + } + + //Bridge + if (bridgeMat != "None") { + name = idName + "Bridge"; + bl2 = 0.5*bridgeSep + bridgeWidth; + bl1 = bl2 - bridgeHeight * dxdif / dzdif; + h1 = 0.5 * bridgeThick; + dz = 0.5 * bridgeHeight; + solid = Trap(dz, 0, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0); + str << "Solid:\t" << solid.name() + << " Trap made of " << bridgeMat << " of dimensions " + << dz << ", 0, 0, " << h1 << ", " << bl1 << ", " + << bl1 << ", 0, " << h1 << ", " << bl2 << ", " << bl2 + << ", 0"; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + Volume bridge(name, solid, ns.material(bridgeMat)); + ns.addVolumeNS(bridge); + + name = idName + "BridgeGap"; + bl1 = 0.5*bridgeSep; + solid = Box(bl1, h1, dz); + str << "Solid:\t" << solid.name() + << " Box made of " << genMat << " of dimensions " + << bl1 << ", " << h1 << ", " << dz; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + Volume bridgeGap(name, solid, ns.material(genMat)); + ns.addVolumeNS(bridgeGap); + /* PlacedVolume pv = */ bridge.placeVolume(bridgeGap); + str << "Solid: " << bridgeGap.name() + << " number 1 positioned in " << bridge.name() + << " at (0,0,0) with no rotation"; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + } + str << "<<== End of DDTECModuleAlgo construction ..."; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + return 1; +} + +// first argument is the type from the xml file +DECLARE_DDCMS_DETELEMENT(track_DDTECModuleAlgo,algorithm) diff --git a/DDCMS/src/plugins/DDTECOptoHybAlgo.cpp b/DDCMS/src/plugins/DDTECOptoHybAlgo.cpp new file mode 100644 index 000000000..76e99613f --- /dev/null +++ b/DDCMS/src/plugins/DDTECOptoHybAlgo.cpp @@ -0,0 +1,100 @@ +//========================================================================== +// AIDA Detector description implementation +//-------------------------------------------------------------------------- +// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) +// All rights reserved. +// +// For the licensing terms see $DD4hepINSTALL/LICENSE. +// For the list of contributors see $DD4hepINSTALL/doc/CREDITS. +// +// Author : M.Frank +// +//========================================================================== +// +// Specialized generic detector constructor +// +//========================================================================== + +// Framework include files +#include "DD4hep/DetFactoryHelper.h" +#include "DD4hep/Printout.h" +#include "DDCMS/DDCMSPlugins.h" + +// C/C++ include files +#include <sstream> + +using namespace std; +using namespace dd4hep; +using namespace dd4hep::cms; + +static long algorithm(Detector& /* description */, + ParsingContext& ctxt, + xml_h e, + SensitiveDetector& /* sens */) +{ + stringstream str; + Namespace ns(ctxt,e,true); + AlgoArguments args(ctxt, e); + int startCopyNo = args.value<int>("StartCopyNo"); + double rpos = args.value<double>("Rpos"); + double zpos = args.value<double>("Zpos"); + double optoHeight = args.value<double>("OptoHeight"); + double optoWidth = args.value<double>("OptoWidth"); + vector<double> angles = args.value<vector<double> >("Angles"); + Volume child = ns.volume(args.value<string>("ChildName")); + Volume mother = ns.volume(args.parentName()); + + str << "Parent " << mother.name() << " Child " << child.name() << " NameSpace " << ns.name; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECOptoHybAlgo",str); + + str << "Height of the Hybrid " + << optoHeight << " and Width " << optoWidth + <<"Rpos " << rpos << " Zpos " << zpos + << " StartCopyNo " << startCopyNo << " Number " + << angles.size(); + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECOptoHybAlgo",str); + + // given r positions are for the lower left corner + rpos += optoHeight/2; + int copyNo = startCopyNo; + for (double angle : angles) { + double phix = -angle; + // given phi positions are for the lower left corner + phix += asin(optoWidth/2/rpos); + double xpos = rpos * cos(phix); + double ypos = rpos * sin(phix); + Position tran(xpos, ypos, zpos); + + Rotation3D rotation; + double phiy = phix + 90.*CLHEP::deg; + double phideg = phix/CLHEP::deg; + if (phideg != 0) { + string rotstr= ns.ns_name(child.name()) + std::to_string(phideg*1000.); + auto irot = ctxt.rotations.find(ns.prepend(rotstr)); + if ( irot != ctxt.rotations.end() ) { + rotation = ns.rotation(ns.prepend(rotstr)); + } + else { + double theta = 90.*CLHEP::deg; + str << "test: Creating a new " + << "rotation: " << rotstr << "\t90., " + << phix/CLHEP::deg << ", 90.," << phiy/CLHEP::deg + << ", 0, 0"; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECOptoHybAlgo",str); + rotation = make_rotation3D(theta, phix, theta, phiy, 0., 0.); + } + } + mother.placeVolume(child, Transform3D(rotation,tran)); + str << "test " << child.name() << " number " + << copyNo << " positioned in " << mother.name() << " at " + << tran << " with " << rotation; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECOptoHybAlgo",str); + copyNo++; + } + str << "<<== End of DDTECOptoHybAlgo construction ..."; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECOptoHybAlgo",str); + return 1; +} + +// first argument is the type from the xml file +DECLARE_DDCMS_DETELEMENT(track_DDTECOptoHybAlgo,algorithm) diff --git a/DDCMS/src/plugins/DDTECPhiAlgo.cpp b/DDCMS/src/plugins/DDTECPhiAlgo.cpp new file mode 100644 index 000000000..85c04c917 --- /dev/null +++ b/DDCMS/src/plugins/DDTECPhiAlgo.cpp @@ -0,0 +1,81 @@ +//========================================================================== +// AIDA Detector description implementation +//-------------------------------------------------------------------------- +// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) +// All rights reserved. +// +// For the licensing terms see $DD4hepINSTALL/LICENSE. +// For the list of contributors see $DD4hepINSTALL/doc/CREDITS. +// +// Author : M.Frank +// +//========================================================================== +// +// Specialized generic detector constructor +// +//========================================================================== + +// Framework include files +#include "DD4hep/DetFactoryHelper.h" +#include "DD4hep/Printout.h" +#include "DDCMS/DDCMSPlugins.h" + +// C/C++ include files +#include <sstream> + +using namespace std; +using namespace dd4hep; +using namespace dd4hep::cms; + +static long algorithm(Detector& /* description */, + ParsingContext& ctxt, + xml_h e, + SensitiveDetector& /* sens */) +{ + stringstream str; + Namespace ns(ctxt, e, true); + AlgoArguments args(ctxt, e); + Volume mother = ns.volume(args.parentName()); + Volume child = ns.volume(args.childName()); + double startAngle = args.value<double>("StartAngle"); //Start angle + double incrAngle = args.value<double>("IncrAngle"); //Increment in angle + double zIn = args.value<double>("ZIn"); //z position for the even ones + double zOut = args.value<double>("ZOut"); //z position for the odd ones + int number = args.value<double>("Number"); //Number of copies + int startCopyNo = args.find("StartCopyNo") ? args.value<int>("StartCopyNo") : 1; //Start copy number + int incrCopyNo = args.find("IncrCopyNo") ? args.value<int>("IncrCopyNo") : 1; //Increment in copy number + + str << "debug: Parameters for " + << "positioning--" << "\tStartAngle " + << startAngle/CLHEP::deg << "\tIncrAngle " + << incrAngle/CLHEP::deg << "\tZ in/out " << zIn << ", " + << zOut << "\tCopy Numbers " << number + << " Start/Increment " << startCopyNo << ", " + << incrCopyNo; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECPhiAlgo",str); + str << "debug: Parent " << mother.name() + << "\tChild " << child.name() << " NameSpace " + << ns.name; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECPhiAlgo",str); + + if (number > 0) { + double theta = 90.*CLHEP::deg; + int copyNo = startCopyNo; + for (int i=0; i<number; i++) { + double phix = startAngle + i*incrAngle; + double phiy = phix + 90.*CLHEP::deg; + Rotation3D rotation = make_rotation3D(theta, phix, theta, phiy, 0, 0); + Position tran(0., 0., (i%2 == 0) ? zIn : zOut); + /* PlacedVolume pv = */ mother.placeVolume(child,Transform3D(rotation,tran)); + str << "test: " << child.name() <<" number " + << copyNo << " positioned in " << mother.name() <<" at " + << tran << " with " << rotation; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECPhiAlgo",str); + copyNo += incrCopyNo; + } + } + return 1; +} + +// first argument is the type from the xml file +DECLARE_DDCMS_DETELEMENT(track_DDTECPhiAlgo,algorithm) diff --git a/DDCMS/src/plugins/DDTECPhiAltAlgo.cpp b/DDCMS/src/plugins/DDTECPhiAltAlgo.cpp new file mode 100644 index 000000000..b14a52d28 --- /dev/null +++ b/DDCMS/src/plugins/DDTECPhiAltAlgo.cpp @@ -0,0 +1,82 @@ +//========================================================================== +// AIDA Detector description implementation +//-------------------------------------------------------------------------- +// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) +// All rights reserved. +// +// For the licensing terms see $DD4hepINSTALL/LICENSE. +// For the list of contributors see $DD4hepINSTALL/doc/CREDITS. +// +// Author : M.Frank +// +//========================================================================== +// +// Specialized generic detector constructor +// +//========================================================================== + +// Framework include files +#include "DD4hep/DetFactoryHelper.h" +#include "DD4hep/Printout.h" +#include "DDCMS/DDCMSPlugins.h" + +// C/C++ include files +#include <sstream> + +using namespace std; +using namespace dd4hep; +using namespace dd4hep::cms; + +static long algorithm(Detector& /* description */, + ParsingContext& ctxt, + xml_h e, + SensitiveDetector& /* sens */) +{ + stringstream str; + Namespace ns(ctxt, e, true); + AlgoArguments args(ctxt, e); + Volume mother = ns.volume(args.parentName()); + Volume child = ns.volume(args.childName()); + double startAngle = args.value<double>("StartAngle"); //Start angle + double incrAngle = args.value<double>("IncrAngle"); //Increment in angle + double zIn = args.value<double>("ZIn"); //z position for the even ones + double zOut = args.value<double>("ZOut"); //z position for the odd ones + int number = args.value<double>("Number"); //Number of copies + int startCopyNo = args.find("StartCopyNo") ? args.value<int>("StartCopyNo") : 1; //Start copy number + int incrCopyNo = args.find("IncrCopyNo") ? args.value<int>("IncrCopyNo") : 1; //Increment in copy number + + str << "debug: Parameters for " + << "positioning--" << "\tStartAngle " + << startAngle/CLHEP::deg << "\tIncrAngle " + << incrAngle/CLHEP::deg << "\tZ in/out " << zIn << ", " + << zOut << "\tCopy Numbers " << number + << " Start/Increment " << startCopyNo << ", " + << incrCopyNo; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECPhiAltAlgo",str); + str << "debug: Parent " << mother.name() + << "\tChild " << child.name() << " NameSpace " + << ns.name; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECPhiAltAlgo",str); + + if (number > 0) { + double theta = 90.*CLHEP::deg; + int copyNo = startCopyNo; + for (int i=0; i<number; i++) { + double phiz = startAngle + i*incrAngle; + double phix = phiz + 90.*CLHEP::deg; + Rotation3D rotation = make_rotation3D(theta, phix, 0e0, 0e0, theta, phiz); + Position tran(0., 0., (i%2 == 0) ? zIn : zOut); + /* PlacedVolume pv = */ mother.placeVolume(child,Transform3D(rotation,tran)); + str << "test: " << child.name() <<" number " + << copyNo << " positioned in " << mother.name() <<" at " + << tran << " with " << rotation; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECPhiAltAlgo",str); + copyNo += incrCopyNo; + } + } + return 1; +} + +// first argument is the type from the xml file +DECLARE_DDCMS_DETELEMENT(track_DDTECPhiAltAlgo,algorithm) + diff --git a/DDCMS/src/plugins/DDTIBLayerAlgo.cpp b/DDCMS/src/plugins/DDTIBLayerAlgo.cpp new file mode 100644 index 000000000..ccc991dff --- /dev/null +++ b/DDCMS/src/plugins/DDTIBLayerAlgo.cpp @@ -0,0 +1,46 @@ +//========================================================================== +// AIDA Detector description implementation +//-------------------------------------------------------------------------- +// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) +// All rights reserved. +// +// For the licensing terms see $DD4hepINSTALL/LICENSE. +// For the list of contributors see $DD4hepINSTALL/doc/CREDITS. +// +// Author : M.Frank +// +//========================================================================== +// +// Specialized generic detector constructor +// +//========================================================================== + +// Framework include files +#include "DD4hep/DetFactoryHelper.h" +#include "DD4hep/Printout.h" +#include "DDCMS/DDCMSPlugins.h" + +// C/C++ include files +#include <sstream> + +using namespace std; +using namespace dd4hep; +using namespace dd4hep::cms; + +static long algorithm(Detector& /* description */, + ParsingContext& ctxt, + xml_h e, + SensitiveDetector& /* sens */) +{ + stringstream str; + Namespace ns(ctxt, e, true); + AlgoArguments args(ctxt, e); + //Volume mother = ns.volume(args.parentName()); + + str << "Not implemented. To be done.... ";// << mother.name(); + printout(WARNING,"DDTIBLayerAlgo",str); + return 1; +} + +// first argument is the type from the xml file +DECLARE_DDCMS_DETELEMENT(track_DDTIBLayerAlgo,algorithm) diff --git a/DDCMS/src/plugins/DDTIDModuleAlgo.cpp b/DDCMS/src/plugins/DDTIDModuleAlgo.cpp new file mode 100644 index 000000000..a820afd62 --- /dev/null +++ b/DDCMS/src/plugins/DDTIDModuleAlgo.cpp @@ -0,0 +1,46 @@ +//========================================================================== +// AIDA Detector description implementation +//-------------------------------------------------------------------------- +// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) +// All rights reserved. +// +// For the licensing terms see $DD4hepINSTALL/LICENSE. +// For the list of contributors see $DD4hepINSTALL/doc/CREDITS. +// +// Author : M.Frank +// +//========================================================================== +// +// Specialized generic detector constructor +// +//========================================================================== + +// Framework include files +#include "DD4hep/DetFactoryHelper.h" +#include "DD4hep/Printout.h" +#include "DDCMS/DDCMSPlugins.h" + +// C/C++ include files +#include <sstream> + +using namespace std; +using namespace dd4hep; +using namespace dd4hep::cms; + +static long algorithm(Detector& /* description */, + ParsingContext& ctxt, + xml_h e, + SensitiveDetector& /* sens */) +{ + stringstream str; + Namespace ns(ctxt, e, true); + AlgoArguments args(ctxt, e); + //Volume mother = ns.volume(args.parentName()); + + str << "Not implemented. To be done.... ";// << mother.name(); + printout(WARNING,"DDTIDModuleAlgo",str); + return 1; +} + +// first argument is the type from the xml file +DECLARE_DDCMS_DETELEMENT(track_DDTIDModuleAlgo,algorithm) diff --git a/DDCMS/src/plugins/DDTIDRingAlgo.cpp b/DDCMS/src/plugins/DDTIDRingAlgo.cpp new file mode 100644 index 000000000..3437688a8 --- /dev/null +++ b/DDCMS/src/plugins/DDTIDRingAlgo.cpp @@ -0,0 +1,125 @@ +//========================================================================== +// AIDA Detector description implementation +//-------------------------------------------------------------------------- +// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) +// All rights reserved. +// +// For the licensing terms see $DD4hepINSTALL/LICENSE. +// For the list of contributors see $DD4hepINSTALL/doc/CREDITS. +// +// Author : M.Frank +// +//========================================================================== +// +// Specialized generic detector constructor +// +//========================================================================== + +// Framework include files +#include "DD4hep/DetFactoryHelper.h" +#include "DD4hep/Printout.h" +#include "DDCMS/DDCMSPlugins.h" + +// C/C++ include files +#include <sstream> + +using namespace std; +using namespace dd4hep; +using namespace dd4hep::cms; + +static long algorithm(Detector& /* description */, + ParsingContext& ctxt, + xml_h e, + SensitiveDetector& /* sens */) +{ + stringstream str; + Namespace ns(ctxt, e, true); + AlgoArguments args(ctxt, e); + Volume mother = ns.volume(args.parentName()); + vector<string> moduleName = args.value<vector<string> >("ModuleName"); //Name of the module + string iccName = args.value<string>("ICCName"); //Name of the ICC + int number = args.value<int>("Number"); //Number of copies + double startAngle = args.value<double>("StartAngle"); //Phi offset + double rModule = args.value<double>("ModuleR"); //Location of module in R + vector<double> zModule = args.value<vector<double> >("ModuleZ"); // in Z + double rICC = args.value<double>("ICCR"); //Location of ICC in R + double sICC = args.value<double>("ICCShift"); //Shift of ICC per to R + vector<double> zICC = args.value<vector<double> >("ICCZ"); // in Z + + str << "Parent " << mother.name() + << "\tModule " << moduleName[0] << ", " + << moduleName[1] << "\tICC " << iccName + << "\tNameSpace " << ns.name; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTIDRingAlgo",str); + + str << "Parameters for positioning--" + << " StartAngle " << startAngle/CLHEP::deg + << " Copy Numbers " << number << " Modules at R " + << rModule << " Z " << zModule[0] << ", " << zModule[1] + << " ICCs at R " << rICC << " Z " << zICC[0] << ", " + << zICC[1]; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTIDRingAlgo",str); + + double theta = 90.*CLHEP::deg; + double phiy = 0.*CLHEP::deg; + double dphi = CLHEP::twopi/number; + + //Loop over modules + Volume icc = ns.volume(iccName); + Volume mod0 = ns.volume(moduleName[0]); + Volume mod1 = ns.volume(moduleName[1]); + for (int i=0; i<number; i++) { + //First the module + double phiz = startAngle + i*dphi; + double xpos = rModule*cos(phiz); + double ypos = rModule*sin(phiz); + double zpos, thetay, phix; + Volume module; + if (i%2 == 0) { + phix = phiz + 90.*CLHEP::deg; + thetay = 0*CLHEP::deg; + zpos = zModule[0]; + module = mod0; + } else { + phix = phiz - 90.*CLHEP::deg; + thetay = 180*CLHEP::deg; + zpos = zModule[1]; + module = mod1; + } + + // stereo face inside toward structure, rphi face outside + phix = phix - 180.*CLHEP::deg; + thetay = thetay + 180.*CLHEP::deg; + // + Position trmod(xpos, ypos, zpos); + Rotation3D rotation = make_rotation3D(theta, phix, thetay, phiy, theta, phiz); + // int copyNr = i+1; + /* PlacedVolume pv = */ mother.placeVolume(module, Transform3D(rotation,trmod)); + str << module.name() << " number " + << i+1 << " positioned in " << mother.name() << " at " + << trmod << " with " << rotation; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTIDRingAlgo",str); + + //Now the ICC + if (i%2 == 0 ) { + zpos = zICC[0]; + xpos = rICC*cos(phiz) + sICC*sin(phiz); + ypos = rICC*sin(phiz) - sICC*cos(phiz); + } else { + zpos = zICC[1]; + xpos = rICC*cos(phiz) - sICC*sin(phiz); + ypos = rICC*sin(phiz) + sICC*cos(phiz); + } + // int copyNr = i+1; + Position tricc(xpos, ypos, zpos); + /* PlacedVolume pv = */ mother.placeVolume(icc, Transform3D(rotation,tricc)); + str << iccName << " number " + << i+1 << " positioned in " << mother.name() << " at " + << tricc << " with " << rotation; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTIDRingAlgo",str); + } + return 1; +} + +// first argument is the type from the xml file +DECLARE_DDCMS_DETELEMENT(track_DDTIDRingAlgo___DISABLED,algorithm) diff --git a/DDCMS/src/plugins/DDTOBRodAlgo.cpp b/DDCMS/src/plugins/DDTOBRodAlgo.cpp new file mode 100644 index 000000000..94642942e --- /dev/null +++ b/DDCMS/src/plugins/DDTOBRodAlgo.cpp @@ -0,0 +1,46 @@ +//========================================================================== +// AIDA Detector description implementation +//-------------------------------------------------------------------------- +// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) +// All rights reserved. +// +// For the licensing terms see $DD4hepINSTALL/LICENSE. +// For the list of contributors see $DD4hepINSTALL/doc/CREDITS. +// +// Author : M.Frank +// +//========================================================================== +// +// Specialized generic detector constructor +// +//========================================================================== + +// Framework include files +#include "DD4hep/DetFactoryHelper.h" +#include "DD4hep/Printout.h" +#include "DDCMS/DDCMSPlugins.h" + +// C/C++ include files +#include <sstream> + +using namespace std; +using namespace dd4hep; +using namespace dd4hep::cms; + +static long algorithm(Detector& /* description */, + ParsingContext& ctxt, + xml_h e, + SensitiveDetector& /* sens */) +{ + stringstream str; + Namespace ns(ctxt, e, true); + AlgoArguments args(ctxt, e); + Volume mother = ns.volume(args.parentName()); + + str << "Not implemented. To be done.... " << mother.name(); + printout(WARNING,"DDTOBRodAlgo",str); + return 1; +} + +// first argument is the type from the xml file +DECLARE_DDCMS_DETELEMENT(track_DDTOBRodAlgo,algorithm) diff --git a/DDCMS/src/plugins/DDTrackerAngular.cpp b/DDCMS/src/plugins/DDTrackerAngular.cpp new file mode 100644 index 000000000..bf6e48c61 --- /dev/null +++ b/DDCMS/src/plugins/DDTrackerAngular.cpp @@ -0,0 +1,116 @@ +//========================================================================== +// AIDA Detector description implementation +//-------------------------------------------------------------------------- +// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) +// All rights reserved. +// +// For the licensing terms see $DD4hepINSTALL/LICENSE. +// For the list of contributors see $DD4hepINSTALL/doc/CREDITS. +// +// Author : M.Frank +// +//========================================================================== +// +// Specialized generic detector constructor +// +//========================================================================== + +// Framework include files +#include "DD4hep/DetFactoryHelper.h" +#include "DD4hep/Printout.h" +#include "DDCMS/DDCMSPlugins.h" + +// C/C++ include files +#include <sstream> + +using namespace std; +using namespace dd4hep; +using namespace dd4hep::cms; + +static long algorithm(Detector& /* description */, + ParsingContext& ctxt, + xml_h e, + SensitiveDetector& /* sens */) +{ + stringstream str; + Namespace ns(ctxt,e,true); + AlgoArguments args(ctxt, e); + // Header section of original DDTrackerAngular.h + int n = args.value<int>("N"); + int startCopyNo = args.find("StartCopyNo") ? args.value<int>("StartCopyNo") : 1; + int incrCopyNo = args.find("IncrCopyNo") ? args.value<int>("IncrCopyNo") : 1; + double rangeAngle = args.value<double>("RangeAngle"); //Range in angle + double startAngle = args.value<double>("StartAngle"); //Start anle + double radius = args.value<double>("Radius"); //Radius + vector<double> center = args.value<vector<double> >("Center"); //Phi values + double delta; //Increment in phi + Volume mother = ns.volume(args.parentName()); + Volume child = ns.volume(args.value<string>("ChildName")); + + // Code section of original DDTrackerAngular.cc + if (fabs(rangeAngle-360.0*CLHEP::deg)<0.001*CLHEP::deg) { + delta = rangeAngle/double(n); + } else { + if (n > 1) { + delta = rangeAngle/double(n-1); + } else { + delta = 0.; + } + } + + str << "debug: Parameters for positioning:: n " + << n << " Start, Range, Delta " + << startAngle/CLHEP::deg << " " + << rangeAngle/CLHEP::deg << " " << delta/CLHEP::deg + << " Radius " << radius << " Centre " << center[0] + << ", " << center[1] << ", "<<center[2]; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerAngular",str); + + str << "debug: Parent " << mother.name() + << "\tChild " << child.name() << " NameSpace " + << ns.name; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerAngular",str); + + double theta = 90.*CLHEP::deg; + int copy = startCopyNo; + double phi = startAngle; + for (int i=0; i<n; i++) { + double phix = phi; + double phiy = phix + 90.*CLHEP::deg; + double phideg = phix/CLHEP::deg; + + Rotation3D rotation; + if (phideg != 0) { + string rotstr = ns.ns_name(child.name()) + std::to_string(phideg*10.); + auto irot = ctxt.rotations.find(ns.prepend(rotstr)); + if ( irot != ctxt.rotations.end() ) { + rotation = ns.rotation(ns.prepend(rotstr)); + } + else { + str << "Creating a new " + << "rotation: " << rotstr << "\t90., " + << phix/CLHEP::deg << ", 90.," + << phiy/CLHEP::deg <<", 0, 0"; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerAngular",str); + RotationZYX rot; + rotation = make_rotation3D(theta, phix, theta, phiy, 0., 0.); + } + } + + double xpos = radius*cos(phi) + center[0]; + double ypos = radius*sin(phi) + center[1]; + double zpos = center[2]; + Position tran(xpos, ypos, zpos); + mother.placeVolume(child, Transform3D(rotation,tran)); + str << "test " << child.name() << " number " + << copy << " positioned in " << mother.name() << " at " + << tran << " with " << rotation; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerAngular",str); + copy += incrCopyNo; + phi += delta; + } + return 1; +} + +// first argument is the type from the xml file +DECLARE_DDCMS_DETELEMENT(track_DDTrackerAngular,algorithm) diff --git a/DDCMS/src/plugins/DDTrackerLinear.cpp b/DDCMS/src/plugins/DDTrackerLinear.cpp index 43c75df70..92b5cef54 100644 --- a/DDCMS/src/plugins/DDTrackerLinear.cpp +++ b/DDCMS/src/plugins/DDTrackerLinear.cpp @@ -28,70 +28,55 @@ using namespace dd4hep; using namespace dd4hep::detail; using namespace dd4hep::cms; -static Ref_t create_element(Detector& /* description */, - ParsingContext& ctxt, - xml_h e, - SensitiveDetector& /* sens */) +static long create_element(Detector& /* description */, + ParsingContext& ctxt, + xml_h e, + SensitiveDetector& /* sens */) { - stringstream str; - Namespace ns(ctxt); - AlgoArguments args(ctxt, e); - xml_det_t x_det = e; - string name = x_det.nameStr(); - DetElement det (name,x_det.id()); - Assembly assembly(name); - string parentName = args.parentName(); - int startcn = 1, incrcn = 1; - int number = args.value<int>("Number"); - double theta = args.value<double>("Theta"); - double phi = args.value<double>("Phi"); - double offset = args.value<double>("Offset"); - double delta = args.value<double>("Delta"); - vector<double> centre = args.value<vector<double> >("Center"); - string rotMat = args.value<string>("Rotation"); - - if ( args.find("StartCopyNo") ) { - startcn = size_t(args.value<double>("StartCopyNo")); - } - if ( args.find("IncrCopyNo") ) { - incrcn = int(args.value<double>("IncrCopyNo")); - } - printout(INFO,"DDTrackerLinear","+++ Executing Algorithm:%-24s rParent:%s", - name.c_str(), parentName.c_str()); + stringstream str; + Namespace ns(ctxt, e, true); + AlgoArguments args(ctxt, e); + int startcn = args.find("StartCopyNo") ? args.value<int>("StartCopyNo") : 1; + int incrcn = args.find("IncrCopyNo") ? args.value<int>("IncrCopyNo") : 1; + int number = args.value<int>("Number"); + double theta = args.value<double>("Theta"); + double phi = args.value<double>("Phi"); + double offset = args.value<double>("Offset"); + double delta = args.value<double>("Delta"); + vector<double> centre = args.value<vector<double> >("Center"); + string rotMat = args.value<string>("Rotation"); + Volume mother = ns.volume(args.parentName()); + Volume child = ns.volume(args.value<string>("ChildName")); - string childName = args.value<string>("ChildName"); - str << "DDTrackerLinear debug: Parent " << parentName - << "\tChild " << childName << " NameSpace " + printout(INFO,"DDTrackerLinear","+++ Executing Algorithm. rParent:%s",mother.name()); + str << "debug: Parent " << mother.name() + << "\tChild " << child.name() << " NameSpace " << ns.name << "\tNumber " << number << "\tAxis (theta/phi) " << theta/dd4hep::deg << ", " << phi/dd4hep::deg << "\t(Offset/Delta) " << offset << ", " << delta << "\tCentre " << centre[0] << ", " << centre[1] << ", " << centre[2] << "\tRotation " << rotMat; - printout(INFO,"DDTrackerLinear",str.str().c_str()); + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerLinear",str); - Volume mother = ctxt.volume(parentName); - Volume child = ctxt.volume(childName); Position direction(sin(theta)*cos(phi),sin(theta)*sin(phi),cos(theta)); Position base(centre[0],centre[1],centre[2]); RotationZYX rot; if ( !rotMat.empty() ) { - rot = ctxt.rotation(rotMat); + rot = ns.rotation(rotMat); } for (int i=0, ci=startcn; i<number; i++, ci += incrcn) { Position tran = base + (offset + double(i)*delta)*direction; // Copy number ??? - /* PlacedVolume pv = */ - rotMat.empty() - ? assembly.placeVolume(child,Transform3D(rot,tran)) - : assembly.placeVolume(child,tran); - str.str(""); + /* PlacedVolume pv = */ rotMat.empty() + ? mother.placeVolume(child,Transform3D(rot,tran)) + : mother.placeVolume(child,tran); str << child.name() << " number " << ci << " positioned in " << mother.name() << " at " << tran << " with " << rot; - printout(INFO,"DDTrackerLinear",str.str().c_str()); + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerLinear",str); } - return det; + return 1; } // first argument is the type from the xml file diff --git a/DDCMS/src/plugins/DDTrackerPhiAlgo.cpp b/DDCMS/src/plugins/DDTrackerPhiAlgo.cpp new file mode 100644 index 000000000..c6da02ee7 --- /dev/null +++ b/DDCMS/src/plugins/DDTrackerPhiAlgo.cpp @@ -0,0 +1,93 @@ +//========================================================================== +// AIDA Detector description implementation +//-------------------------------------------------------------------------- +// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) +// All rights reserved. +// +// For the licensing terms see $DD4hepINSTALL/LICENSE. +// For the list of contributors see $DD4hepINSTALL/doc/CREDITS. +// +// Author : M.Frank +// +//========================================================================== +// +// Specialized generic detector constructor +// +//========================================================================== + +// Framework include files +#include "DD4hep/DetFactoryHelper.h" +#include "DD4hep/Printout.h" +#include "DDCMS/DDCMSPlugins.h" + +// C/C++ include files +#include <sstream> + +using namespace std; +using namespace dd4hep; +using namespace dd4hep::cms; + +static long algorithm(Detector& /* description */, + ParsingContext& ctxt, + xml_h e, + SensitiveDetector& /* sens */) +{ + stringstream str; + Namespace ns(ctxt, e, true); + AlgoArguments args(ctxt, e); + Volume mother = ns.volume(args.parentName()); + Volume child = ns.volume(args.childName()); + int startcn = args.find("StartCopyNo") ? args.value<int>("StartCopyNo") : 1; + int incrcn = args.find("IncrCopyNo") ? args.value<int>("IncrCopyNo") : 1; + vector<double> phi = args.value<vector<double> >("Phi"); // Phi values + vector<double> zpos = args.value<vector<double> >("ZPos"); // Z positions + int numcopies = args.find("NumCopies") ? args.value<int>("NumCopies") : int(phi.size()); + double radius = args.value<double>("Radius"); + double tilt = args.value<double>("Tilt"); + + if ( numcopies != int(phi.size()) ) { + str << "error: Parameter " + << "NumCopies does not agree with the size " + << "of the Phi vector. It was adjusted to " + << "be the size of the Phi vector and may " + << "lead to crashes or errors."; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerPhiAlgo",str); + } + + str << "debug: Parameters for position" + << "ing:: " << " Radius " << radius << " Tilt " + << tilt/CLHEP::deg << " Copies " << phi.size() + << " at"; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerPhiAlgo",str); + for (int i=0; i<(int)(phi.size()); i++) { + str << "\t[" << i << "] phi = " << phi[i]/CLHEP::deg + << " z = " << zpos[i]; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerPhiAlgo",str); + } + str << "debug: Parent " << mother.name() + <<"\tChild " << child.name() << " NameSpace " << ns.name; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerPhiAlgo",str); + + double theta = 90.*CLHEP::deg; + int ci = startcn; + for (int i = 0; i < numcopies; ++i) { + double phix = phi[i] + tilt; + double phiy = phix + 90.*CLHEP::deg; + double phideg = phi[i]/CLHEP::deg; + double xpos = radius*cos(phi[i]); + double ypos = radius*sin(phi[i]); + Rotation3D rot = make_rotation3D(theta, phix, theta, phiy, 0., 0.); + Position tran(xpos, ypos, zpos[i]); + /* PlacedVolume pv = */ mother.placeVolume(child,Transform3D(rot,tran)); + str << "test: " << child.name() << " number " + << ci << " positioned in " << mother.name() << " at " + << tran << " with " << rot; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerPhiAlgo",str); + ci = ci+incrcn; + } + return 1; +} + +// first argument is the type from the xml file +DECLARE_DDCMS_DETELEMENT(track_DDTrackerPhiAlgo,algorithm) + diff --git a/DDCMS/src/plugins/DDTrackerPhiAltAlgo.cpp b/DDCMS/src/plugins/DDTrackerPhiAltAlgo.cpp new file mode 100644 index 000000000..b56945947 --- /dev/null +++ b/DDCMS/src/plugins/DDTrackerPhiAltAlgo.cpp @@ -0,0 +1,104 @@ +//========================================================================== +// AIDA Detector description implementation +//-------------------------------------------------------------------------- +// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) +// All rights reserved. +// +// For the licensing terms see $DD4hepINSTALL/LICENSE. +// For the list of contributors see $DD4hepINSTALL/doc/CREDITS. +// +// Author : M.Frank +// +//========================================================================== +// +// Specialized generic detector constructor +// +//========================================================================== + +// Framework include files +#include "DD4hep/DetFactoryHelper.h" +#include "DD4hep/Printout.h" +#include "DDCMS/DDCMSPlugins.h" + +// C/C++ include files +#include <sstream> + +using namespace std; +using namespace dd4hep; +using namespace dd4hep::cms; + +static long algorithm(Detector& /* description */, + ParsingContext& ctxt, + xml_h e, + SensitiveDetector& /* sens */) +{ + stringstream str; + Namespace ns(ctxt, e, true); + AlgoArguments args(ctxt, e); + Volume mother = ns.volume(args.parentName()); + Volume child = ns.volume(args.childName()); + double tilt = args.value<double>("Tilt"); //Tilt of the module + double startAngle = args.value<double>("StartAngle"); //offset in phi + double rangeAngle = args.value<double>("RangeAngle"); //Maximum range in phi + double radiusIn = args.value<double>("RadiusIn"); //Inner radius + double radiusOut = args.value<double>("RadiusOut"); //Outer radius + double zpos = args.value<double>("ZPosition"); //z position + int number = args.value<int>("Number"); //Number of copies + int startCopyNo = args.find("StartCopyNo") ? args.value<int>("StartCopyNo") : 1; //Start copy number + int incrCopyNo = args.find("IncrCopyNo") ? args.value<int>("IncrCopyNo") : 1; //Increment in copy number + + str << "Parameters for positioning-- Tilt " << tilt + << "\tStartAngle " << startAngle/CLHEP::deg + << "\tRangeAngle " << rangeAngle/CLHEP::deg + << "\tRin " << radiusIn << "\tRout " << radiusOut + << "\t ZPos " << zpos << "\tCopy Numbers " << number + << " Start/Increment " << startCopyNo << ", " + << incrCopyNo; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerPhiAltAlgo",str); + str << "Parent " << mother.name() << "\tChild " << child.name() << " NameSpace " << ns.name; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerPhiAltAlgo",str); + + if (number > 0) { + double theta = 90.*CLHEP::deg; + double dphi; + if (number == 1 || fabs(rangeAngle-360.0*CLHEP::deg)<0.001*CLHEP::deg) + dphi = rangeAngle/number; + else + dphi = rangeAngle/(number-1); + int copyNo = startCopyNo; + + for (int i=0; i<number; i++) { + double phi = startAngle + i*dphi; + double phix = phi - tilt + 90.*CLHEP::deg; + double phiy = phix + 90.*CLHEP::deg; + double phideg = phix/CLHEP::deg; + + Rotation3D rotation; + if (phideg != 0) { + rotation = make_rotation3D(theta, phix, theta, phiy, 0., 0.); + } + + double xpos, ypos; + if (i%2 == 0) { + xpos = radiusIn*cos(phi); + ypos = radiusIn*sin(phi); + } else { + xpos = radiusOut*cos(phi); + ypos = radiusOut*sin(phi); + } + Position tran(xpos, ypos, zpos); + /* PlacedVolume pv = */ mother.placeVolume(child,Transform3D(rotation,tran)); + str << "" << child.name() + << " number " << copyNo << " positioned in " + << mother.name() << " at " << tran << " with " + << rotation; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerPhiAltAlgo",str); + copyNo += incrCopyNo; + } + } + return 1; +} + +// first argument is the type from the xml file +DECLARE_DDCMS_DETELEMENT(track_DDTrackerPhiAltAlgo,algorithm) + diff --git a/DDCMS/src/plugins/DDTrackerXYZPosAlgo.cpp b/DDCMS/src/plugins/DDTrackerXYZPosAlgo.cpp new file mode 100644 index 000000000..57faf42ec --- /dev/null +++ b/DDCMS/src/plugins/DDTrackerXYZPosAlgo.cpp @@ -0,0 +1,78 @@ +//========================================================================== +// AIDA Detector description implementation +//-------------------------------------------------------------------------- +// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) +// All rights reserved. +// +// For the licensing terms see $DD4hepINSTALL/LICENSE. +// For the list of contributors see $DD4hepINSTALL/doc/CREDITS. +// +// Author : M.Frank +// +//========================================================================== +// +// Specialized generic detector constructor +// +//========================================================================== + +// Framework include files +#include "DD4hep/DetFactoryHelper.h" +#include "DD4hep/Printout.h" +#include "DDCMS/DDCMSPlugins.h" + +// C/C++ include files +#include <sstream> + +using namespace std; +using namespace dd4hep; +using namespace dd4hep::cms; + +static long algorithm(Detector& /* description */, + ParsingContext& ctxt, + xml_h e, + SensitiveDetector& /* sens */) +{ + stringstream str; + Namespace ns(ctxt, e, true); + AlgoArguments args(ctxt, e); + int startCopyNo = args.find("StartCopyNo") ? args.value<int>("StartCopyNo") : 1; + int incrCopyNo = args.find("IncrCopyNo") ? args.value<int>("IncrCopyNo") : 1; + Volume mother = ns.volume(args.parentName()); + Volume child = ns.volume(args.value<string>("ChildName")); + vector<double> xvec = args.value<vector<double> >("XPositions"); // X positions + vector<double> yvec = args.value<vector<double> >("YPositions"); // Y positions + vector<double> zvec = args.value<vector<double> >("ZPositions"); // Z positions + vector<string> rotMat = args.value<vector<string> >("Rotations"); // Names of rotation matrices + + str << "debug: Parent " << mother.name() + << "\tChild " << child.name() << " NameSpace " + << ns.name << "\tCopyNo (Start/Increment) " + << startCopyNo << ", " << incrCopyNo << "\tNumber " + << xvec.size() << ", " << yvec.size() << ", " << zvec.size(); + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerXYZPosAlgo",str); + for (int i = 0; i < (int)(zvec.size()); i++) { + str << "\t[" << i << "]\tX = " << xvec[i] + << "\t[" << i << "]\tY = " << yvec[i] + << "\t[" << i << "]\tZ = " << zvec[i] + << ", Rot.Matrix = " << rotMat[i]; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerXYZPosAlgo",str); + } + + for (int i=0, copy = startCopyNo; i<(int)(zvec.size()); i++) { + Position tran(xvec[i], yvec[i], zvec[i]); + Rotation3D rot; + /* PlacedVolume pv = */ rotMat[i] != "NULL" + ? mother.placeVolume(child,Transform3D(ns.rotation(rotMat[i]),tran)) + : mother.placeVolume(child,tran); + str << "test: " << child.name() + <<" number " << copy << " positioned in " + << mother.name() << " at " << tran << " with " << rot; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerXYZPosAlgo",str); + copy += incrCopyNo; + } + return 1; +} + +// first argument is the type from the xml file +DECLARE_DDCMS_DETELEMENT(track_DDTrackerXYZPosAlgo,algorithm) + diff --git a/DDCMS/src/plugins/DDTrackerZPosAlgo.cpp b/DDCMS/src/plugins/DDTrackerZPosAlgo.cpp new file mode 100644 index 000000000..e375c43dd --- /dev/null +++ b/DDCMS/src/plugins/DDTrackerZPosAlgo.cpp @@ -0,0 +1,73 @@ +//========================================================================== +// AIDA Detector description implementation +//-------------------------------------------------------------------------- +// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) +// All rights reserved. +// +// For the licensing terms see $DD4hepINSTALL/LICENSE. +// For the list of contributors see $DD4hepINSTALL/doc/CREDITS. +// +// Author : M.Frank +// +//========================================================================== +// +// Specialized generic detector constructor +// +//========================================================================== + +// Framework include files +#include "DD4hep/DetFactoryHelper.h" +#include "DD4hep/Printout.h" +#include "DDCMS/DDCMSPlugins.h" + +// C/C++ include files +#include <sstream> + +using namespace std; +using namespace dd4hep; +using namespace dd4hep::cms; + +static long algorithm(Detector& /* description */, + ParsingContext& ctxt, + xml_h e, + SensitiveDetector& /* sens */) +{ + stringstream str; + Namespace ns(ctxt, e, true); + AlgoArguments args(ctxt, e); + int startCopyNo = args.find("StartCopyNo") ? args.value<int>("StartCopyNo") : 1; + int incrCopyNo = args.find("IncrCopyNo") ? args.value<int>("IncrCopyNo") : 1; + Volume mother = ns.volume(args.parentName()); + Volume child = ns.volume(args.value<string>("ChildName")); + vector<double> zvec = args.value<vector<double> >("ZPositions"); // Z positions + vector<string> rotMat = args.value<vector<string> >("Rotations"); // Names of rotation matrices + + str << "debug: Parent " << mother.name() + << "\tChild " << child.name() << " NameSpace " + << ns.name << "\tCopyNo (Start/Increment) " + << startCopyNo << ", " << incrCopyNo << "\tNumber " << zvec.size(); + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerZPosAlgo",str); + for (int i = 0; i < (int)(zvec.size()); i++) { + str << "\t[" << i << "]\tZ = " << zvec[i] + << ", Rot.Matrix = " << rotMat[i]; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerZPosAlgo",str); + } + + for (int i=0, copy = startCopyNo; i<(int)(zvec.size()); i++) { + Position tran(0, 0, zvec[i]); + Rotation3D rot; + /* PlacedVolume pv = */ rotMat[i] != "NULL" + ? mother.placeVolume(child,Transform3D(ns.rotation(rotMat[i]),tran)) + : mother.placeVolume(child,tran); + str << "test: " << child.name() + <<" number " << copy << " positioned in " + << mother.name() << " at " << tran << " with " << rot; + printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerZPosAlgo",str); + copy += incrCopyNo; + } + return 1; +} + +// first argument is the type from the xml file +DECLARE_DDCMS_DETELEMENT(track_DDTrackerZPosAlgo,algorithm) + diff --git a/DDCore/include/DD4hep/Printout.h b/DDCore/include/DD4hep/Printout.h index 6daa21d6b..2dd9afd8a 100644 --- a/DDCore/include/DD4hep/Printout.h +++ b/DDCore/include/DD4hep/Printout.h @@ -21,6 +21,7 @@ #include <cstdarg> #include <map> #include <string> +#include <sstream> #include <iostream> /// Forward declarations @@ -57,6 +58,26 @@ namespace dd4hep { */ std::string arguments(int argc, char** argv); + /// Calls the display action with a given severity level + /** + * @arg severity [int,read-only] Display severity flag (see enum) + * @arg src [string,read-only] Information source (component, etc.) + * @arg str [stringstream, RW] string stream containing data to be printed. + * Object is reset after use. + * @return Status code indicating success or failure + */ + int printout(PrintLevel severity, const char* src, std::stringstream& str); + + /// Calls the display action with a given severity level + /** + * @arg severity [int,read-only] Display severity flag (see enum) + * @arg src [string,read-only] Information source (component, etc.) + * @arg str [stringstream, RW] string stream containing data to be printed. + * Object is reset after use. + * @return Status code indicating success or failure + */ + int printout(PrintLevel severity, const std::string& src, std::stringstream& str); + /// Calls the display action with a given severity level /** * @arg severity [int,read-only] Display severity flag (see enum) diff --git a/DDCore/include/XML/XMLElements.h b/DDCore/include/XML/XMLElements.h index e5d8ac848..f7fa8b084 100644 --- a/DDCore/include/XML/XMLElements.h +++ b/DDCore/include/XML/XMLElements.h @@ -627,24 +627,25 @@ namespace dd4hep { typedef XmlDocument* DOC; DOC m_doc; - /// Constructor - Document(DOC d) : m_doc(d) { - } + /// Default Constructor + Document() : m_doc(0) {} + /// Initializing Constructor + Document(DOC d) : m_doc(d) {} + /// Copy constructor + Document(const Document& d) = default; + /// Assignment + Document& operator=(const Document& d) = default; + /// Destructor + ~Document() = default; /// Auto-conversion to DOM document - operator DOC() const { - return m_doc; - } + operator DOC() const { return m_doc; } /// Accessot to DOM document behaviour using arrow operator - DOC operator->() const { - return m_doc; - } + DOC operator->() const { return m_doc; } /// Accessot to DOM document behaviour - DOC ptr() const { - return m_doc; - } + DOC ptr() const { return m_doc; } + /// Access the ROOT eleemnt of the DOM document Handle_t root() const; - /// Create DOM element Handle_t createElt(const XmlChar* tag) const; /// Clone a DOM element / sub-tree @@ -668,11 +669,13 @@ namespace dd4hep { class DocumentHolder : public Document { public: /// Default Constructor - DocumentHolder() : Document(0) { - } + DocumentHolder() = default; + /// Default Constructor + DocumentHolder(const DocumentHolder& copy) = delete; /// Constructor - DocumentHolder(DOC d) : Document(d) { - } + DocumentHolder(DOC d) : Document(d) { } + /// Assignment operator + DocumentHolder& operator=(const DocumentHolder& copy) = delete; /// Assign new document. Old document is dropped. DocumentHolder& assign(DOC d); /// Standard destructor - releases the document diff --git a/DDCore/src/Printout.cpp b/DDCore/src/Printout.cpp index adb28c4c7..0a00c5f12 100644 --- a/DDCore/src/Printout.cpp +++ b/DDCore/src/Printout.cpp @@ -102,6 +102,40 @@ string dd4hep::arguments(int argc, char** argv) { return str.str(); } +/// Calls the display action with a given severity level +/** + * @arg severity [int,read-only] Display severity flag (see enum) + * @arg src [string,read-only] Information source (component, etc.) + * @arg str [stringstream, RW] string stream containing data to be printed. + * Object is reset after use. + * @return Status code indicating success or failure + */ +int dd4hep::printout(PrintLevel severity, const char* src, std::stringstream& str) { + int ret = 1; + if (severity >= print_lvl) { + ret = printout(severity, src, str.str().c_str()); + } + str.str(""); + return ret; +} + +/// Calls the display action with a given severity level +/** + * @arg severity [int,read-only] Display severity flag (see enum) + * @arg src [string,read-only] Information source (component, etc.) + * @arg str [stringstream, RW] string stream containing data to be printed. + * Object is reset after use. + * @return Status code indicating success or failure + */ +int dd4hep::printout(PrintLevel severity, const std::string& src, std::stringstream& str) { + int ret = 1; + if (severity >= print_lvl) { + ret = printout(severity, src, str.str().c_str()); + } + str.str(""); + return ret; +} + /** Calls the display action * \arg severity [int,read-only] Display severity flag * \arg src [string,read-only] Information source (component, etc.) diff --git a/examples/DDCMS/CMS-tracker.png b/examples/DDCMS/CMS-pixbar.png similarity index 100% rename from examples/DDCMS/CMS-tracker.png rename to examples/DDCMS/CMS-pixbar.png diff --git a/examples/DDCMS/CMS-tracker1.png b/examples/DDCMS/CMS-tracker1.png new file mode 100644 index 0000000000000000000000000000000000000000..e3c3f2b10184d4649c910adbc1cd7f8d17ba8c2d GIT binary patch literal 286691 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≪wgEgZ%ho?3BYyxvF626wRIAo@<-fHt9fcymD` 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%0A~I?t090z&rx> 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 BmZ1Ou literal 0 HcmV?d00001 diff --git a/examples/DDCMS/data/cms_tracker.xml b/examples/DDCMS/data/cms_tracker.xml index a48ea6be8..29faa3fdd 100644 --- a/examples/DDCMS/data/cms_tracker.xml +++ b/examples/DDCMS/data/cms_tracker.xml @@ -1,10 +1,19 @@ <?xml version="1.0"?> <DDDefinition> <debug> +<!-- <debug_shapes/> <debug_volumes/> + <debug_constants/> + <debug_rotations/> + <debug_materials/> + <debug_includes/> + <debug_namespaces/> + <debug_algorithms/> <debug_placements/> +--> </debug> + <ConstantsSection label="" eval="true"> <Constant name="world_x" value="5*m"/> <Constant name="world_y" value="5*m"/> @@ -13,6 +22,12 @@ <Constant name="Air" value="materials_Air" type="string"/> <Constant name="Vacuum" value="materials_Vacuum" type="string"/> </ConstantsSection> + <ConstantsSection label="servicescylinderb.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <ConstantsSection label="servicescylinderf.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> <VisSection> <!-- Unused stuff: @@ -68,15 +83,28 @@ </VisSection> + <ConstantsSection label="pixfwd" eval="true"> + <Constant name="AnchorZ" value="0.*mm"/> + <Constant name="ZPixelForward" value="325.*mm"/> + </ConstantsSection> + <ConstantsSection label="tracker.xml" eval="true"> + <Constant name="BackPlaneDz" value="0.015*mm"/> + </ConstantsSection> + <IncludeSection> <Include ref="materials.xml"/> <Include ref="trackermaterial.xml"/> + <Include ref="tibtidcommonmaterial.xml"/> <Include ref="pixfwdMaterials.xml"/> - <Include ref="pixbarmaterial.xml"/> + <Include ref="vacuum.xml"/> <Include ref="cmsextent.xml"/> <Include ref="cms.xml"/> - <Include ref="pixbar.xml"/> + +<!-- +--> + + <Include ref="pixbarmaterial.xml"/> <Include ref="pixbarladder.xml"/> <Include ref="pixbarladderfull.xml"/> <Include ref="pixbarladderhalf.xml"/> @@ -84,6 +112,225 @@ <Include ref="pixbarlayer0.xml"/> <Include ref="pixbarlayer1.xml"/> <Include ref="pixbarlayer2.xml"/> + <Include ref="pixbar.xml"/> + +<!-- +--> + + <Include ref="tecmaterial.xml"/> + + <Include ref="tecpetpar.xml"/> + <Include ref="tecpetalb.xml"/> + <Include ref="tecpetalf.xml"/> + <Include ref="tecpetal0.xml"/> + <Include ref="tecpetal0b.xml"/> + <Include ref="tecpetal0f.xml"/> + <Include ref="tecpetal3.xml"/> + <Include ref="tecpetal3b.xml"/> + <Include ref="tecpetal3f.xml"/> + <Include ref="tecpetal6b.xml"/> + <Include ref="tecpetal6f.xml"/> + <Include ref="tecpetal8b.xml"/> + <Include ref="tecpetal8f.xml"/> + + <Include ref="tecmodpar.xml"/> + <Include ref="tecmodule0.xml"/> + <Include ref="tecmodule0s.xml"/> + <Include ref="tecmodule1.xml"/> + <Include ref="tecmodule1r.xml"/> + <Include ref="tecmodule1s.xml"/> + <Include ref="tecmodule2.xml"/> + <Include ref="tecmodule3.xml"/> + <Include ref="tecmodule4.xml"/> + <Include ref="tecmodule4r.xml"/> + <Include ref="tecmodule4s.xml"/> + <Include ref="tecmodule5.xml"/> + <Include ref="tecmodule6.xml"/> + <Include ref="tecmodule0r.xml"/> + + <Include ref="tecring0.xml"/> + <Include ref="tecring0b.xml"/> + <Include ref="tecring0f.xml"/> + <Include ref="tecring1.xml"/> + <Include ref="tecring1b.xml"/> + <Include ref="tecring1f.xml"/> + <Include ref="tecring2.xml"/> + <Include ref="tecring2b.xml"/> + <Include ref="tecring2f.xml"/> + <Include ref="tecring3.xml"/> + <Include ref="tecring3b.xml"/> + <Include ref="tecring3f.xml"/> + <Include ref="tecring4.xml"/> + <Include ref="tecring4b.xml"/> + <Include ref="tecring4f.xml"/> + <Include ref="tecring5.xml"/> + <Include ref="tecring5b.xml"/> + <Include ref="tecring5f.xml"/> + <Include ref="tecring6.xml"/> + <Include ref="tecring6b.xml"/> + <Include ref="tecring6f.xml"/> + + <Include ref="tecwheel.xml"/> + <Include ref="tecwheel6.xml"/> + <Include ref="tecwheela.xml"/> + <Include ref="tecwheelb.xml"/> + <Include ref="tecwheelc.xml"/> + <Include ref="tecwheeld.xml"/> + + <Include ref="tecbackplate.xml"/> + <Include ref="tec.xml"/> + <Include ref="tecservices.xml"/> + +<!-- +--> + <Include ref="tibmaterial.xml"/> + + <Include ref="tibmodpar.xml"/> + <Include ref="tibmodule0.xml"/> + <Include ref="tibmodule0a.xml"/> + <Include ref="tibmodule0b.xml"/> + <Include ref="tibmodule2.xml"/> + + <Include ref="tiblayerpar.xml"/> + <Include ref="tiblayer0.xml"/> + <Include ref="tiblayer1.xml"/> + <Include ref="tiblayer2.xml"/> + <Include ref="tiblayer3.xml"/> + + <Include ref="tibstringpar.xml"/> + <Include ref="tibstring0.xml"/> + <Include ref="tibstring0ll.xml"/> + <Include ref="tibstring0lr.xml"/> + <Include ref="tibstring0ul.xml"/> + <Include ref="tibstring0ur.xml"/> + <Include ref="tibstring1.xml"/> + <Include ref="tibstring1ll.xml"/> + <Include ref="tibstring1lr.xml"/> + <Include ref="tibstring1ul.xml"/> + <Include ref="tibstring1ur.xml"/> + <Include ref="tibstring2.xml"/> + <Include ref="tibstring2ll.xml"/> + <Include ref="tibstring2lr.xml"/> + <Include ref="tibstring2ul.xml"/> + <Include ref="tibstring2ur.xml"/> + <Include ref="tibstring3.xml"/> + <Include ref="tibstring3ll.xml"/> + <Include ref="tibstring3lr.xml"/> + <Include ref="tibstring3ul.xml"/> + <Include ref="tibstring3ur.xml"/> + + <Include ref="tib.xml"/> + +<!-- +--> + <Include ref="tidmaterial.xml"/> + <Include ref="tidmodpar.xml"/> + <Include ref="tidringpar.xml"/> + + <Include ref="tidb.xml"/> + <Include ref="tidf.xml"/> + <Include ref="tidmodule0.xml"/> + <Include ref="tidmodule0l.xml"/> + <Include ref="tidmodule0r.xml"/> + <Include ref="tidmodule1.xml"/> + <Include ref="tidmodule1l.xml"/> + <Include ref="tidmodule1r.xml"/> + <Include ref="tidmodule2.xml"/> + <Include ref="tidring0.xml"/> + <Include ref="tidring0b.xml"/> + <Include ref="tidring0f.xml"/> + <Include ref="tidring1.xml"/> + <Include ref="tidring1b.xml"/> + <Include ref="tidring1f.xml"/> + <Include ref="tidring2.xml"/> + <Include ref="tid.xml"/> + + <Include ref="tibtidservices.xml"/> + <Include ref="tibtidservicesb.xml"/> + <Include ref="tibtidservicesf.xml"/> +<!-- +--> + + <Include ref="tobmaterial.xml"/> + <Include ref="tobmodpar.xml"/> + + <Include ref="tobmodule0.xml"/> + <Include ref="tobmodule2.xml"/> + <Include ref="tobmodule4.xml"/> + + <Include ref="tobrodpar.xml"/> + + <Include ref="tobrod0.xml"/> + <Include ref="tobrod0c.xml"/> + <Include ref="tobrod0h.xml"/> + <Include ref="tobrod0l.xml"/> + + <Include ref="tobrod1.xml"/> + <Include ref="tobrod1h.xml"/> + <Include ref="tobrod1l.xml"/> + + <Include ref="tobrod2.xml"/> + <Include ref="tobrod2c.xml"/> + <Include ref="tobrod2h.xml"/> + <Include ref="tobrod2l.xml"/> + + <Include ref="tobrod3.xml"/> + <Include ref="tobrod3h.xml"/> + <Include ref="tobrod3l.xml"/> + + <Include ref="tobrod4.xml"/> + <Include ref="tobrod4c.xml"/> + <Include ref="tobrod4h.xml"/> + <Include ref="tobrod4l.xml"/> + + <Include ref="tobrod5.xml"/> + <Include ref="tobrod5h.xml"/> + <Include ref="tobrod5l.xml"/> + + <Include ref="tob.xml"/> + + +<!-- + <Include ref="pixfwdCommon.xml"/> + <Include ref="pixfwdPanelBase.xml"/> + <Include ref="pixfwdPanel.xml"/> + <Include ref="pixfwdDisk.xml"/> + <Include ref="pixfwdCylinder.xml"/> + <Include ref="pixfwdNipple.xml"/> + + <Include ref="pixfwdPlaq.xml"/> + <Include ref="pixfwdPlaq1x2.xml"/> + <Include ref="pixfwdPlaq1x5.xml"/> + <Include ref="pixfwdPlaq2x3.xml"/> + <Include ref="pixfwdPlaq2x4.xml"/> + <Include ref="pixfwdPlaq2x5.xml"/> + + <Include ref="pixfwd.xml"/> + +--> + + <Include ref="trackertib.xml"/> + <Include ref="trackertid.xml"/> + <Include ref="trackertec.xml"/> + <Include ref="trackertob.xml"/> + <Include ref="trackerbulkhead.xml"/> + <Include ref="trackerother.xml"/> + <Include ref="trackerpixbar.xml"/> + <Include ref="tracker.xml"/> </IncludeSection> + + <PosPartSection label=""> +<!-- + <PosPart copyNumber="1"> + <rParent name="world_volume"/> + <rChild name="tec:TEC"/> + </PosPart> +--> + <PosPart copyNumber="2"> + <rParent name="world_volume"/> + <rChild name="tracker:Tracker"/> + </PosPart> + </PosPartSection> + </DDDefinition> diff --git a/examples/DDCMS/data/pixfwd.xml b/examples/DDCMS/data/pixfwd.xml new file mode 100644 index 000000000..ac7603bdd --- /dev/null +++ b/examples/DDCMS/data/pixfwd.xml @@ -0,0 +1,170 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <!-- + + == CMS Forward Pixels Geometry == + + @version 3.02.01 May 30, 2006 + @created Dmitry Onoprienko + @modified Xingtao Huang to implement the simplified fpix service cylinder + + == Subsystem or component described by the file == + + Forward pixels endcap (contains two disks inside a service cylinder). + + == Root volume and its reference frame == + + Two root volumes are defined: + + PixelForwardZPlus : +Z half of the detector + PixelForwardZMinus : -Z half of the detector + + X horizontal + Y vertical + Z along the beam line, pointing away from IP + + == Positioning == + + Anchor point of this component is at the IP-side edge of the service cylider, on + the axis of the detector (see annotated drawings). + The file defines [AnchorZ] constant that corresponds to the Z coordinate + of the anchor point in the forward pixels endcap reference frame, and the + [ZPixelForward] constant equal to the distance from CMS IP to the + anchor point. + + Therefore, in the CMS global reference frame, + PixelForwardZPlus has to be positioned at + (0., 0., 0.) with no rotation, and + PixelForwardZMinus has to be positioned at + (0., 0., 0.) + with pixfwdCommon:Y180 rotation (180 degrees around Y axis). + + --> + <!-- Root volumes --> + <ConstantsSection label="Root" eval="true"> + <Constant name="RootRadius" value="[pixfwdCylinder:CylindersOuterRmax]"/> + <Constant name="RootHalfLength" value="[pixfwdCylinder:CylindersOuterLength]/2.+ [pixfwdCylinder:CylindersEndFlangeLength]/2."/> + <Constant name="AnchorZ" value="0.*mm"/> + <Constant name="ZPixelForward" value="325.*mm"/> + <Constant name="RootStartZ" value="-2*mm"/> + <Constant name="RootMidZ3" value="[cms:TrackBeamZ1]-[ZPixelForward]"/> + <Constant name="RootEndZ" value="2*[RootHalfLength]"/> + </ConstantsSection> + <SolidSection label="Root"> + <Polycone name="PixelForward" startPhi="0*deg" deltaPhi="360*deg"> + <ZSection z="[RootStartZ]" rMin="[cms:TrackBeamR1]" rMax="[RootRadius]"/> + <ZSection z="[RootMidZ3]" rMin="[cms:TrackBeamR1]" rMax="[RootRadius]"/> + <ZSection z="[RootEndZ]" rMin="[cms:TrackBeamR2]" rMax="[RootRadius]"/> + </Polycone> + </SolidSection> + <LogicalPartSection label="Root"> + <LogicalPart name="PixelForwardZPlus" category="envelope"> + <rSolid name="PixelForward"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="PixelForwardZMinus" category="envelope"> + <rSolid name="PixelForward"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <!-- Position disks inside root --> + <ConstantsSection label="Disks" eval="true"> + <!-- Distances from IP-side edge of PixelForwardRoot to disk centers --> + <Constant name="Disk1Z" value="30*mm"/> + <Constant name="Disk2Z" value="160*mm"/> + <Constant name="Disk3Z" value="290*mm"/> + </ConstantsSection> + <PosPartSection label="Disks"> + <!-- +Z endcap --> + <PosPart copyNumber="1"> + <rParent name="PixelForwardZPlus"/> + <rChild name="pixfwdDisk:PixelForwardDiskZPlus"/> + <Translation x="0." y="0." z="[AnchorZ]+[Disk1Z]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="PixelForwardZPlus"/> + <rChild name="pixfwdDisk:PixelForwardDiskZPlus"/> + <Translation x="0." y="0." z="[AnchorZ]+[Disk2Z]"/> + </PosPart> + <!-- UNCOMMENT TO SIMULATE THE THIRD DISK --> + <!-- <PosPart copyNumber="3">--> + <!-- <rParent name="PixelForwardZPlus"/>--> + <!-- <rChild name="pixfwdDisk:PixelForwardDiskZPlus"/>--> + <!-- <Translation x="0." y="0." z="[AnchorZ]+ [Disk3Z]" />--> + <!-- </PosPart>--> + <!-- -Z endcap --> + <PosPart copyNumber="1"> + <rParent name="PixelForwardZMinus"/> + <rChild name="pixfwdDisk:PixelForwardDiskZMinus"/> + <Translation x="0." y="0." z="[AnchorZ]+[Disk1Z]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="PixelForwardZMinus"/> + <rChild name="pixfwdDisk:PixelForwardDiskZMinus"/> + <Translation x="0." y="0." z="[AnchorZ]+[Disk2Z]"/> + </PosPart> + <!-- UNCOMMENT TO SIMULATE THE THIRD DISK --> + <!-- <PosPart copyNumber="3">--> + <!-- <rParent name="PixelForwardZMinus"/>--> + <!-- <rChild name="pixfwdDisk:PixelForwardDiskZMinus"/>--> + <!-- <Translation x="0." y="0." z="[AnchorZ]+[Disk3Z]" />--> + <!-- </PosPart>--> + </PosPartSection> + <!-- Position service cylinders inside root. + Since shapeless volumes are not useable at the moment, + PixelForwardCylinder.xml does the actual positioning, we just tell it where to place the + cylinders by defining Z position of IP-side edge of service cylinder in PixelForward frame: + --> + <ConstantsSection label="ServiceCylinder" eval="true"> + <Constant name="ZCylinder" value="[AnchorZ]"/> + </ConstantsSection> + <PosPartSection label="Cylinders"> + <!-- +Z endcap --> + <PosPart copyNumber="1"> + <rParent name="pixfwd:PixelForwardZPlus"/> + <rChild name="pixfwdCylinder:PixelForwardServiceCylinder"/> + <Translation x="0." y="0." z="0."/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="pixfwd:PixelForwardZPlus"/> + <rChild name="pixfwdCylinder:PixelForwardCylinderEndFlange"/> + <Translation x="0." y="0." z="[pixfwd:ZCylinder]+[pixfwdCylinder:CylindersOuterLength]+[pixfwdCylinder:CylindersEndFlangeLength]/2."/> + <rRotation name="pixfwdCylinder:EndFlangeRot1"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="pixfwd:PixelForwardZPlus"/> + <rChild name="pixfwdCylinder:PixelForwardCylinderEndFlange"/> + <Translation x="0." y="0." z="[pixfwd:ZCylinder]+[pixfwdCylinder:CylindersOuterLength]+[pixfwdCylinder:CylindersEndFlangeLength]/2."/> + <rRotation name="pixfwdCylinder:EndFlangeRot2"/> + <!-- xt rRotation name="pixfwdCommon:Z180" / xt--> + </PosPart> + <!-- xt PosPart copyNumber="1"> + <rParent name="pixfwd:PixelForwardZPlus"/> + <rChild name="pixfwdCylinder:PixelForwardCylinderBackCyl"/> + <Translation x="0." y="0." z="[pixfwd:ZCylinder]+[pixfwdCylinder:CylindersFrontLength]+[pixfwdCylinder:CylinderBackLength]/2." /> + </PosPart xt --> + <!-- -Z endcap --> + <PosPart copyNumber="1"> + <rParent name="pixfwd:PixelForwardZMinus"/> + <rChild name="pixfwdCylinder:PixelForwardServiceCylinder"/> + <Translation x="0." y="0." z="0."/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="pixfwd:PixelForwardZMinus"/> + <rChild name="pixfwdCylinder:PixelForwardCylinderEndFlange"/> + <Translation x="0." y="0." z="[pixfwd:ZCylinder]+[pixfwdCylinder:CylindersOuterLength]+[pixfwdCylinder:CylindersEndFlangeLength]/2."/> + <rRotation name="pixfwdCylinder:EndFlangeRot1"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="pixfwd:PixelForwardZMinus"/> + <rChild name="pixfwdCylinder:PixelForwardCylinderEndFlange"/> + <Translation x="0." y="0." z="[pixfwd:ZCylinder]+[pixfwdCylinder:CylindersOuterLength]+[pixfwdCylinder:CylindersEndFlangeLength]/2."/> + <rRotation name="pixfwdCylinder:EndFlangeRot2"/> + </PosPart> + <!-- xt PosPart copyNumber="1"> + <rParent name="pixfwd:PixelForwardZMinus"/> + <rChild name="pixfwdCylinder:PixelForwardCylinderBackCyl"/> + <Translation x="0." y="0." z="[pixfwd:ZCylinder]+[pixfwdCylinder:CylindersFrontLength]+[pixfwdCylinder:CylinderBackLength]/2." /> + </PosPart xt --> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/pixfwdBlade.xml b/examples/DDCMS/data/pixfwdBlade.xml new file mode 100644 index 000000000..6588cc68b --- /dev/null +++ b/examples/DDCMS/data/pixfwdBlade.xml @@ -0,0 +1,551 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <!-- + + == CMS Forward Pixels Geometry == + + @version 3.02.01 May 30, 2006 + @created Dmitry Onoprienko + @modified Vesna Cuplov (fix overlaps 05.02.07) + + == Subsystem or component described by the file == + + Aluminum base of a blade with a cooling channel (no nipples, no panels). + + == Root volume and its reference frame == + + "PixelForwardBlade" + + Y is along the axis of the blade, from narrow to wider end. Once the blade + is positioned, its Y axis will be pointing away from the beam line. + Z is perpendicular to the plane of the blade, pointing from "body" (narrow) to "cover" (wide) side. + + == Positioning == + + The file defines AnchorX, AnchorY, and AnchorZ + constants that describe the coordinates of the anchor point in the blade + root volume (PixelForwardBlade) reference frame. + Currently, [AnchorX] = [AnchorZ] = 0. + + Since the origin of the "blade frame" with respect to which DDPixFwdBlades + algorithm positions all one-per-blade items coincides with the blade anchor point, + the "child translation" vector passed to the algorithm should be + (-[pixfwdBlade:AnchorX], -[pixfwdBlade:AnchorY], -[pixfwdBlade:AnchorZ]). + + == Additional comments == + + Blade is implemented so that it consists of + "body" (narrow aluminum side), "cover" (wide aluminum side), and + "tip" (part close to inner ring, common to both sides. + Cooling channel then goes into both "body" and "cover". + + Multiple boolean operations are used in describing the tip of the blade and + the crossbar. As a result, IguanaCMS sometimes fails to visualize it properly. + This seems to be a problem for visualization only, not for tracking at simulation time. + + --> + <!-- Blade geometry parameters: Input from drawings --> + <ConstantsSection label="Input" eval="true"> + <Constant name="T01" value="0.5*mm"/> + <!-- Blade01.gif --> + <Constant name="T02" value="3.0*mm"/> + <!-- Blade01.gif --> + <Constant name="T03" value="0.5*mm"/> + <!-- Blade01.gif --> + <Constant name="T04" value="2.5*mm"/> + <!-- Blade01.gif --> + <Constant name="W01" value="6.5*mm"/> + <!-- Blade01.gif --> + <Constant name="W02" value="7.5*mm"/> + <!-- Blade01.gif --> + <Constant name="W03" value="11.5*mm"/> + <!-- Blade01.gif --> + <Constant name="R01" value="8.57*mm"/> + <!-- Blade02.gif --> + <Constant name="L01" value="57.1*mm"/> + <!-- Blade02.gif --> + <Constant name="L02" value="32.38*mm"/> + <!-- Blade02.gif --> + <Constant name="L03" value="32.42*mm"/> + <!-- Blade02.gif --> + <Constant name="L09" value="48.80*mm"/> + <!-- Blade02.gif --> + <Constant name="A01" value="16.625*deg"/> + <!-- Blade03.gif --> + <Constant name="W04" value="1.0*mm"/> + <!-- Blade03.gif --> + <Constant name="W05" value="4.0*mm"/> + <!-- Blade03.gif --> + <Constant name="R02" value="2.0*mm"/> + <!-- Blade03.gif --> + <Constant name="R03" value="2.0*mm"/> + <!-- Blade03.gif --> + <Constant name="L04" value="9.79*mm"/> + <!-- Blade03.gif --> + <Constant name="L05" value="1.83*mm"/> + <!-- Blade03.gif --> + <Constant name="L10" value="3.47*mm"/> + <!-- Blade03.gif --> + <Constant name="W06" value="5.6*mm"/> + <!-- Blade04.gif --> + <Constant name="R04" value="2.0*mm"/> + <!-- Blade04.gif --> + <Constant name="L06" value="3.77*mm"/> + <!-- Blade04.gif --> + <Constant name="L07" value="3.0*mm"/> + <!-- Blade04.gif --> + <Constant name="L08" value="5.79*mm"/> + <!-- Blade04.gif --> + </ConstantsSection> + <!-- Calculating parameters that will be needed by multiple components : --> + <ConstantsSection label="Common" eval="true"> + <!-- Root volume dimensions (may need to be changed later) --> + <Constant name="RootHalfLength" value="([L04]+[L03]+[L01]+[W03]/2.)/2."/> + <Constant name="RootHalfWidth" value="([L02]+[W03])/2."/> + <Constant name="RootHalfThickness" value="[BladeHalfThickness]+0.1*mm"/> + <!-- Coordinates of ancor point --> + <Constant name="AnchorX" value="0."/> + <Constant name="AnchorY" value="-[RootHalfLength]+[L10]"/> + <Constant name="AnchorZ" value="0."/> + <!-- Coordinate of point 0 on Blade02.gif. All other Y-coordinates are relative to it. --> + <Constant name="y00" value="[AnchorY]-[L10]+[L04]+[L03]"/> + <!-- Others --> + <Constant name="zCover" value="([T02]-[T03])/2."/> + <Constant name="zBody" value="-([T01]+[T03])/2."/> + <Constant name="BladeHalfThickness" value="([T01]+[T02])/2."/> + <Constant name="BodyHalfThickness" value="([T02]-[T03])/2."/> + <Constant name="CoverHalfThickness" value="([T01]+[T03])/2."/> + </ConstantsSection> + <!-- Root volume for the blade. This volume is positioned by pixfwdDisk.xml --> + <!-- Previous description from D. Onoprienko + <SolidSection label="Root"> + <Box name="PixelForwardBlade" dx="[RootHalfWidth]" dy="[RootHalfLength]" dz="[RootHalfThickness]" /> + </SolidSection> + --> + <!-- New Description (05/02/07): Two overlaps were fixed. The overlap with the Nipples was fixed by removing 0.1*mm in the mother volume thickness. The second overlap was: The corners of the box describing the mother volume were going outside the DiskOuterRing, so we remove these corners with a little box for simplicity. --> + <SolidSection label="Root"> + <Box name="PixelForwardBlade_main" dx="[RootHalfWidth]" dy="[RootHalfLength]" dz="[RootHalfThickness]-0.1*mm"/> + <Box name="PixelForwardBlade_box" dx="1.5*mm" dy="1.5*mm" dz="[RootHalfThickness]"/> + <SubtractionSolid name="PixelForwardBlade_Left_subtraction"> + <rSolid name="PixelForwardBlade_main"/> + <rSolid name="PixelForwardBlade_box"/> + <Translation x="-[RootHalfWidth]" y="[RootHalfLength]" z="0."/> + </SubtractionSolid> + <SubtractionSolid name="PixelForwardBlade"> + <rSolid name="PixelForwardBlade_Left_subtraction"/> + <rSolid name="PixelForwardBlade_box"/> + <Translation x="[RootHalfWidth]" y="[RootHalfLength]" z="0."/> + </SubtractionSolid> + </SolidSection> + <LogicalPartSection label="Root"> + <LogicalPart name="PixelForwardBlade" category="envelope"> + <rSolid name="PixelForwardBlade"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <!-- Constants for Body and Cover --> + <ConstantsSection label="BodyCover" eval="true"> + <Constant name="e01" value="[L02]/2."/> + <Constant name="e02" value="sqrt([e01]*[e01]+[L01]*[L01]-[R01]*[R01])"/> + <!-- length of straight part of cooling channel --> + <Constant name="a01" value="atan([e01]/[L01])-atan([R01]/[e02])"/> + <!-- angle between blade axis and straight part of cooling channel --> + <Constant name="sin01" value="sin([a01])"/> + <Constant name="cos01" value="cos([a01])"/> + <Constant name="x04" value="[L02]/2."/> + <Constant name="y05" value="[y00]+[L01]"/> + <Constant name="x03" value="([R01]*[cos01]+[x04])/2."/> + <Constant name="y04" value="[y00]+(-[R01]*[sin01]+[L01])/2."/> + <Constant name="e03" value="([L03]*cos([A01]))/2."/> + <Constant name="r01" value="([R01]+[W02]/2.-[W04]/2.)"/> + <Constant name="y02" value="-[r01]*sin([A01])-[e03]*cos([A01])"/> + <Constant name="x01" value="[r01]*cos([A01])-[e03]*sin([A01])"/> + <Constant name="x06" value="[L07]/2.+[R04]+[L06]/2."/> + </ConstantsSection> + <!-- Body --> + <SolidSection label="Body"> + <Box name="PixelForwardBladeBody01" dx="[W02]/2." dy="[e02]/2." dz="[BodyHalfThickness]"/> + <Tubs name="PixelForwardBladeBody02_01" rMin="[R01]-[W02]/2." rMax="[R01]+[W02]/2." dz="[BodyHalfThickness]" startPhi="-180.*deg+[a01]" deltaPhi="180.*deg-2.*[a01]"/> + <Box name="PixelForwardBladeBody02_02" dx="[W04]/2." dy="[e03]" dz="[BodyHalfThickness]"/> + <Box name="PixelForwardBladeBody02_03" dx="[W04]/2." dy="[e03]" dz="[BodyHalfThickness]"/> + <UnionSolid name="PixelForwardBladeBody02_int01"> + <rSolid name="PixelForwardBladeBody02_01"/> + <rSolid name="PixelForwardBladeBody02_02"/> + <Translation x="-[x01]" y="[y02]" z="0."/> + <rRotation name="LeftArm02"/> + </UnionSolid> + <UnionSolid name="PixelForwardBladeBody02"> + <rSolid name="PixelForwardBladeBody02_int01"/> + <rSolid name="PixelForwardBladeBody02_03"/> + <Translation x="[x01]" y="[y02]" z="0."/> + <rRotation name="RightArm02"/> + </UnionSolid> + <Tubs name="PixelForwardBladeBody03" rMin="0." rMax="[W02]/2." dz="[BodyHalfThickness]" startPhi="0*deg" deltaPhi="180*deg"/> + <!-- Crossbar --> + <Trapezoid name="PixelForwardBladeBody04" dz="[BodyHalfThickness]" bl1="([R01]-[W02]/2.)/[cos01]+([L09]-[W06]/2.)*tan([a01])" bl2="([R01]-[W02]/2.)/[cos01]+([L09]-[W06]/2.)*tan([a01])" tl1="([R01]-[W02]/2.)/[cos01]+([L09]+[W06]/2.)*tan([a01])" tl2="([R01]-[W02]/2.)/[cos01]+([L09]+[W06]/2.)*tan([a01])" h1="[W06]/2." h2="[W06]/2." alp1="0.0" alp2="0.0" phi="90*deg"/> + <Box name="PixelForwardBladeBody05_01" dx="[L08]/2." dy="[R04]" dz="[BodyHalfThickness]"/> + <Tubs name="PixelForwardBladeBody05_02" rMin="0." rMax="[R04]" dz="[BodyHalfThickness]" startPhi="0." deltaPhi="360*deg"/> + <Tubs name="PixelForwardBladeBody05_03" rMin="0." rMax="[R04]" dz="[BodyHalfThickness]" startPhi="0." deltaPhi="360*deg"/> + <UnionSolid name="PixelForwardBladeBody05_int01"> + <rSolid name="PixelForwardBladeBody05_01"/> + <rSolid name="PixelForwardBladeBody05_02"/> + <Translation x="[L08]/2." y="0." z="0."/> + </UnionSolid> + <UnionSolid name="PixelForwardBladeBody05"> + <rSolid name="PixelForwardBladeBody05_int01"/> + <rSolid name="PixelForwardBladeBody05_03"/> + <Translation x="-[L08]/2." y="0." z="0."/> + </UnionSolid> + </SolidSection> + <LogicalPartSection label="Body"> + <LogicalPart name="PixelForwardBladeBody01_Left" category="support"> + <rSolid name="PixelForwardBladeBody01"/> + <rMaterial name="trackermaterial:T_Aluminium"/> + </LogicalPart> + <LogicalPart name="PixelForwardBladeBody01_Right" category="support"> + <rSolid name="PixelForwardBladeBody01"/> + <rMaterial name="trackermaterial:T_Aluminium"/> + </LogicalPart> + <LogicalPart name="PixelForwardBladeBody02" category="support"> + <rSolid name="PixelForwardBladeBody02"/> + <rMaterial name="trackermaterial:T_Aluminium"/> + </LogicalPart> + <LogicalPart name="PixelForwardBladeBody03_Left" category="support"> + <rSolid name="PixelForwardBladeBody03"/> + <rMaterial name="trackermaterial:T_Aluminium"/> + </LogicalPart> + <LogicalPart name="PixelForwardBladeBody03_Right" category="support"> + <rSolid name="PixelForwardBladeBody03"/> + <rMaterial name="trackermaterial:T_Aluminium"/> + </LogicalPart> + <LogicalPart name="PixelForwardBladeBody04" category="support"> + <rSolid name="PixelForwardBladeBody04"/> + <rMaterial name="trackermaterial:T_Aluminium"/> + </LogicalPart> + <LogicalPart name="PixelForwardBladeBody05" category="support"> + <rSolid name="PixelForwardBladeBody05"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="Body"> + <PosPart copyNumber="1"> + <rParent name="PixelForwardBlade"/> + <rChild name="PixelForwardBladeBody01_Left"/> + <Translation x="-[x03]" y="[y04]" z="[zBody]"/> + <rRotation name="LeftArm01"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardBlade"/> + <rChild name="PixelForwardBladeBody01_Right"/> + <Translation x="[x03]" y="[y04]" z="[zBody]"/> + <rRotation name="RightArm01"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardBlade"/> + <rChild name="PixelForwardBladeBody02"/> + <Translation x="0." y="[y00]" z="[zBody]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardBlade"/> + <rChild name="PixelForwardBladeBody03_Left"/> + <Translation x="-[x04]" y="[y05]" z="[zBody]"/> + <rRotation name="LeftArm01"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardBlade"/> + <rChild name="PixelForwardBladeBody03_Right"/> + <Translation x="[x04]" y="[y05]" z="[zBody]"/> + <rRotation name="RightArm01"/> + </PosPart> + <!-- Crossbar --> + <PosPart copyNumber="1"> + <rParent name="PixelForwardBlade"/> + <rChild name="PixelForwardBladeBody04"/> + <Translation x="0." y="[y00]+[L09]" z="[zBody]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardBladeBody04"/> + <rChild name="PixelForwardBladeBody05"/> + <Translation x="[x06]" y="0." z="0."/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="PixelForwardBladeBody04"/> + <rChild name="PixelForwardBladeBody05"/> + <Translation x="-[x06]" y="0." z="0."/> + </PosPart> + </PosPartSection> + <!-- Cover --> + <SolidSection label="Cover"> + <Box name="PixelForwardBladeCover01" dx="[W03]/2." dy="[e02]/2." dz="[CoverHalfThickness]"/> + <Tubs name="PixelForwardBladeCover02_01" rMin="[R01]-[W03]/2." rMax="[R01]+[W03]/2." dz="[CoverHalfThickness]" startPhi="-180.*deg+[a01]" deltaPhi="180.*deg-2.*[a01]"/> + <Box name="PixelForwardBladeCover02_02" dx="[W04]/2." dy="[e03]" dz="[CoverHalfThickness]"/> + <Box name="PixelForwardBladeCover02_03" dx="[W04]/2." dy="[e03]" dz="[CoverHalfThickness]"/> + <UnionSolid name="PixelForwardBladeCover02_int01"> + <rSolid name="PixelForwardBladeCover02_01"/> + <rSolid name="PixelForwardBladeCover02_02"/> + <Translation x="-[x01]" y="[y02]" z="0."/> + <rRotation name="LeftArm02"/> + </UnionSolid> + <UnionSolid name="PixelForwardBladeCover02"> + <rSolid name="PixelForwardBladeCover02_int01"/> + <rSolid name="PixelForwardBladeCover02_03"/> + <Translation x="[x01]" y="[y02]" z="0."/> + <rRotation name="RightArm02"/> + </UnionSolid> + <Tubs name="PixelForwardBladeCover03" rMin="0." rMax="[W03]/2." dz="[CoverHalfThickness]" startPhi="0*deg" deltaPhi="180*deg"/> + <!-- Crossbar --> + <Trapezoid name="PixelForwardBladeCover04_01" dz="[CoverHalfThickness]" bl1="([R01]-[W03]/2.)/[cos01]+([L09]-[W06]/2.)*tan([a01])" bl2="([R01]-[W03]/2.)/[cos01]+([L09]-[W06]/2.)*tan([a01])" tl1="([R01]-[W03]/2.)/[cos01]+([L09]+[W06]/2.)*tan([a01])" tl2="([R01]-[W03]/2.)/[cos01]+([L09]+[W06]/2.)*tan([a01])" h1="[W06]/2." h2="[W06]/2." alp1="0.0" alp2="0.0" phi="90*deg"/> + <Box name="PixelForwardBladeCover04_02" dx="[L06]/2." dy="[CoverHalfThickness]+[pixfwdCommon:SmallBool]" dz="[R04]"/> + <Box name="PixelForwardBladeCover04_03" dx="[L06]/2." dy="[CoverHalfThickness]+[pixfwdCommon:SmallBool]" dz="[R04]"/> + <Tubs name="PixelForwardBladeCover04_04" rMin="0." rMax="[R04]" dz="[CoverHalfThickness]+[pixfwdCommon:SmallBool]" startPhi="0." deltaPhi="360*deg"/> + <Tubs name="PixelForwardBladeCover04_05" rMin="0." rMax="[R04]" dz="[CoverHalfThickness]+[pixfwdCommon:SmallBool]" startPhi="0." deltaPhi="360*deg"/> + <Tubs name="PixelForwardBladeCover04_06" rMin="0." rMax="[R04]" dz="[CoverHalfThickness]+[pixfwdCommon:SmallBool]" startPhi="0." deltaPhi="360*deg"/> + <Tubs name="PixelForwardBladeCover04_07" rMin="0." rMax="[R04]" dz="[CoverHalfThickness]+[pixfwdCommon:SmallBool]" startPhi="0." deltaPhi="360*deg"/> + <SubtractionSolid name="PixelForwardBladeCover04_int01"> + <rSolid name="PixelForwardBladeCover04_01"/> + <rSolid name="PixelForwardBladeCover04_02"/> + <Translation x="[L07]/2.+[R04]+[L06]/2." y="0." z="0."/> + </SubtractionSolid> + <SubtractionSolid name="PixelForwardBladeCover04_int02"> + <rSolid name="PixelForwardBladeCover04_int01"/> + <rSolid name="PixelForwardBladeCover04_03"/> + <Translation x="-[L07]/2.-[R04]-[L06]/2." y="0." z="0."/> + </SubtractionSolid> + <SubtractionSolid name="PixelForwardBladeCover04_int03"> + <rSolid name="PixelForwardBladeCover04_int02"/> + <rSolid name="PixelForwardBladeCover04_04"/> + <Translation x="-[L07]/2.-[R04]" y="0." z="0."/> + </SubtractionSolid> + <SubtractionSolid name="PixelForwardBladeCover04_int04"> + <rSolid name="PixelForwardBladeCover04_int03"/> + <rSolid name="PixelForwardBladeCover04_05"/> + <Translation x="-[L07]/2.-[R04]-[L06]" y="0." z="0."/> + </SubtractionSolid> + <SubtractionSolid name="PixelForwardBladeCover04_int05"> + <rSolid name="PixelForwardBladeCover04_int04"/> + <rSolid name="PixelForwardBladeCover04_06"/> + <Translation x="[L07]/2.+[R04]" y="0." z="0."/> + </SubtractionSolid> + <SubtractionSolid name="PixelForwardBladeCover04"> + <rSolid name="PixelForwardBladeCover04_int05"/> + <rSolid name="PixelForwardBladeCover04_07"/> + <Translation x="[L07]/2.+[R04]+[L06]" y="0." z="0."/> + </SubtractionSolid> + </SolidSection> + <LogicalPartSection label="Cover"> + <LogicalPart name="PixelForwardBladeCover01_Left" category="support"> + <rSolid name="PixelForwardBladeCover01"/> + <rMaterial name="trackermaterial:T_Aluminium"/> + </LogicalPart> + <LogicalPart name="PixelForwardBladeCover01_Right" category="support"> + <rSolid name="PixelForwardBladeCover01"/> + <rMaterial name="trackermaterial:T_Aluminium"/> + </LogicalPart> + <LogicalPart name="PixelForwardBladeCover02" category="support"> + <rSolid name="PixelForwardBladeCover02"/> + <rMaterial name="trackermaterial:T_Aluminium"/> + </LogicalPart> + <LogicalPart name="PixelForwardBladeCover03_Left" category="support"> + <rSolid name="PixelForwardBladeCover03"/> + <rMaterial name="trackermaterial:T_Aluminium"/> + </LogicalPart> + <LogicalPart name="PixelForwardBladeCover03_Right" category="support"> + <rSolid name="PixelForwardBladeCover03"/> + <rMaterial name="trackermaterial:T_Aluminium"/> + </LogicalPart> + <LogicalPart name="PixelForwardBladeCover04" category="support"> + <rSolid name="PixelForwardBladeCover04"/> + <rMaterial name="trackermaterial:T_Aluminium"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="Cover"> + <PosPart copyNumber="1"> + <rParent name="PixelForwardBlade"/> + <rChild name="PixelForwardBladeCover01_Left"/> + <Translation x="-[x03]" y="[y04]" z="[zCover]"/> + <rRotation name="LeftArm01"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardBlade"/> + <rChild name="PixelForwardBladeCover01_Right"/> + <Translation x="[x03]" y="[y04]" z="[zCover]"/> + <rRotation name="RightArm01"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardBlade"/> + <rChild name="PixelForwardBladeCover02"/> + <Translation x="0." y="[y00]" z="[zCover]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardBlade"/> + <rChild name="PixelForwardBladeCover03_Left"/> + <Translation x="-[x04]" y="[y05]" z="[zCover]"/> + <rRotation name="LeftArm01"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardBlade"/> + <rChild name="PixelForwardBladeCover03_Right"/> + <Translation x="[x04]" y="[y05]" z="[zCover]"/> + <rRotation name="RightArm01"/> + </PosPart> + <!-- Crossbar --> + <PosPart copyNumber="1"> + <rParent name="PixelForwardBlade"/> + <rChild name="PixelForwardBladeCover04"/> + <Translation x="0." y="[y00]+[L09]" z="[zCover]"/> + </PosPart> + </PosPartSection> + <!-- Tip --> + <ConstantsSection label="Tip" eval="true"> + <Constant name="r02" value="[R01]+[W02]/2.-[L03]*sin([A01])"/> + <Constant name="r03" value="[r02]-[W04]"/> + <Constant name="e04" value="([L04]-[r03])/2."/> + <Constant name="e05" value="(([r02]*cos([A01])-[W05]/2.)/sin([A01]))/2."/> + <Constant name="y03" value="-([r02]-[W04]/2.)*sin([A01])-[e05]*cos([A01])"/> + <Constant name="x02" value="([r02]-[W04]/2.)*cos([A01])-[e05]*sin([A01])"/> + </ConstantsSection> + <SolidSection label="Tip"> + <Tubs name="PixelForwardBladeTip01_01" rMin="[r03]" rMax="[r02]" dz="[BladeHalfThickness]" startPhi="180.*deg+[A01]" deltaPhi="180.*deg-2.*[A01]"/> + <Box name="PixelForwardBladeTip01_02" dx="[W05]/2." dy="[e04]-[pixfwdCommon:SmallBool]" dz="[BladeHalfThickness]"/> + <Tubs name="PixelForwardBladeTip01_03" rMin="[R02]" rMax="[R02]*sqrt(2.)" dz="[BladeHalfThickness]+[pixfwdCommon:SmallBool]" startPhi="180.*deg" deltaPhi="180.*deg"/> + <Box name="PixelForwardBladeTip01_04" dx="[W04]/2." dy="[e05]" dz="[BladeHalfThickness]"/> + <Box name="PixelForwardBladeTip01_05" dx="[W04]/2." dy="[e05]" dz="[BladeHalfThickness]"/> + <UnionSolid name="PixelForwardBladeTip01_int01"> + <rSolid name="PixelForwardBladeTip01_01"/> + <rSolid name="PixelForwardBladeTip01_04"/> + <Translation x="-[x02]" y="[y03]" z="0."/> + <rRotation name="LeftArm02"/> + </UnionSolid> + <UnionSolid name="PixelForwardBladeTip01_int02"> + <rSolid name="PixelForwardBladeTip01_int01"/> + <rSolid name="PixelForwardBladeTip01_05"/> + <Translation x="[x02]" y="[y03]" z="0."/> + <rRotation name="RightArm02"/> + </UnionSolid> + <UnionSolid name="PixelForwardBladeTip01_int03"> + <rSolid name="PixelForwardBladeTip01_int02"/> + <rSolid name="PixelForwardBladeTip01_02"/> + <Translation x="0." y="-[r03]-[e04]-[pixfwdCommon:SmallBool]" z="0."/> + </UnionSolid> + <SubtractionSolid name="PixelForwardBladeTip01"> + <rSolid name="PixelForwardBladeTip01_int03"/> + <rSolid name="PixelForwardBladeTip01_03"/> + <Translation x="0." y="-[L04]+[L05]" z="0."/> + </SubtractionSolid> + </SolidSection> + <LogicalPartSection label="Tip"> + <LogicalPart name="PixelForwardBladeTip01" category="support"> + <rSolid name="PixelForwardBladeTip01"/> + <rMaterial name="trackermaterial:T_Aluminium"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="Tip"> + <PosPart copyNumber="1"> + <rParent name="PixelForwardBlade"/> + <rChild name="PixelForwardBladeTip01"/> + <Translation x="0." y="[y00]-[L03]" z="0."/> + </PosPart> + </PosPartSection> + <!-- Cooling channel --> + <ConstantsSection label="Channel" eval="true"> + <Constant name="ChanBodyHalfThickness" value="([T04]-[T03])/2."/> + <Constant name="ChanCoverHalfThickness" value="[T03]/2."/> + <Constant name="z03" value="[BodyHalfThickness]-[ChanBodyHalfThickness]"/> + <!-- Channel central plane inside body --> + <Constant name="z04" value="-[CoverHalfThickness]+[ChanCoverHalfThickness]"/> + <!-- Channel central plane inside cover --> + </ConstantsSection> + <SolidSection label="Channel"> + <Box name="PixelForwardBladeChan01_Body" dx="[W01]/2." dy="[e02]/2." dz="[ChanBodyHalfThickness]"/> + <Box name="PixelForwardBladeChan01_Cover" dx="[W01]/2." dy="[e02]/2." dz="[ChanCoverHalfThickness]"/> + <Tubs name="PixelForwardBladeChan02_Body" rMin="[R01]-[W01]/2." rMax="[R01]+[W01]/2." dz="[ChanBodyHalfThickness]" startPhi="180.*deg+[a01]" deltaPhi="180.*deg-2.*[a01]"/> + <Tubs name="PixelForwardBladeChan02_Cover" rMin="[R01]-[W01]/2." rMax="[R01]+[W01]/2." dz="[ChanCoverHalfThickness]" startPhi="180.*deg+[a01]" deltaPhi="180.*deg-2.*[a01]"/> + <Tubs name="PixelForwardBladeChan03_Body" rMin="0." rMax="[W01]/2." dz="[ChanBodyHalfThickness]" startPhi="0*deg" deltaPhi="180*deg"/> + <Tubs name="PixelForwardBladeChan03_Cover" rMin="0." rMax="[W01]/2." dz="[ChanCoverHalfThickness]" startPhi="0*deg" deltaPhi="180*deg"/> + </SolidSection> + <LogicalPartSection label="Channel"> + <LogicalPart name="PixelForwardBladeChan01_Body" category="cooling"> + <rSolid name="PixelForwardBladeChan01_Body"/> + <rMaterial name="pixfwdMaterials:PixelForwardCoolant"/> + </LogicalPart> + <LogicalPart name="PixelForwardBladeChan01_Cover" category="cooling"> + <rSolid name="PixelForwardBladeChan01_Cover"/> + <rMaterial name="pixfwdMaterials:PixelForwardCoolant"/> + </LogicalPart> + <LogicalPart name="PixelForwardBladeChan02_Body" category="cooling"> + <rSolid name="PixelForwardBladeChan02_Body"/> + <rMaterial name="pixfwdMaterials:PixelForwardCoolant"/> + </LogicalPart> + <LogicalPart name="PixelForwardBladeChan02_Cover" category="cooling"> + <rSolid name="PixelForwardBladeChan02_Cover"/> + <rMaterial name="pixfwdMaterials:PixelForwardCoolant"/> + </LogicalPart> + <LogicalPart name="PixelForwardBladeChan03_Body" category="cooling"> + <rSolid name="PixelForwardBladeChan03_Body"/> + <rMaterial name="pixfwdMaterials:PixelForwardCoolant"/> + </LogicalPart> + <LogicalPart name="PixelForwardBladeChan03_Cover" category="cooling"> + <rSolid name="PixelForwardBladeChan03_Cover"/> + <rMaterial name="pixfwdMaterials:PixelForwardCoolant"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="Channel"> + <PosPart copyNumber="1"> + <rParent name="PixelForwardBladeBody01_Left"/> + <rChild name="PixelForwardBladeChan01_Body"/> + <Translation x="0." y="0." z="[z03]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="PixelForwardBladeBody01_Right"/> + <rChild name="PixelForwardBladeChan01_Body"/> + <Translation x="0." y="0." z="[z03]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardBladeCover01_Left"/> + <rChild name="PixelForwardBladeChan01_Cover"/> + <Translation x="0." y="0." z="[z04]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="PixelForwardBladeCover01_Right"/> + <rChild name="PixelForwardBladeChan01_Cover"/> + <Translation x="0." y="0." z="[z04]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardBladeBody02"/> + <rChild name="PixelForwardBladeChan02_Body"/> + <Translation x="0." y="0." z="[z03]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardBladeCover02"/> + <rChild name="PixelForwardBladeChan02_Cover"/> + <Translation x="0." y="0." z="[z04]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardBladeBody03_Left"/> + <rChild name="PixelForwardBladeChan03_Body"/> + <Translation x="0." y="0." z="[z03]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="PixelForwardBladeBody03_Right"/> + <rChild name="PixelForwardBladeChan03_Body"/> + <Translation x="0." y="0." z="[z03]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardBladeCover03_Left"/> + <rChild name="PixelForwardBladeChan03_Cover"/> + <Translation x="0." y="0." z="[z04]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="PixelForwardBladeCover03_Right"/> + <rChild name="PixelForwardBladeChan03_Cover"/> + <Translation x="0." y="0." z="[z04]"/> + </PosPart> + </PosPartSection> + <!-- All rotations --> + <RotationSection label="Blade"> + <Rotation name="LeftArm01" phiX="[a01]" thetaX="90.*deg" phiY="90.*deg + [a01]" thetaY="90.*deg" phiZ="0." thetaZ="0."/> + <Rotation name="RightArm01" phiX="-[a01]" thetaX="90.*deg" phiY="90.*deg - [a01]" thetaY="90.*deg" phiZ="0." thetaZ="0."/> + <Rotation name="LeftArm02" phiX="[A01]" thetaX="90.*deg" phiY="90.*deg + [A01]" thetaY="90.*deg" phiZ="0." thetaZ="0."/> + <Rotation name="RightArm02" phiX="-[A01]" thetaX="90.*deg" phiY="90.*deg - [A01]" thetaY="90.*deg" phiZ="0." thetaZ="0."/> + </RotationSection> +</DDDefinition> diff --git a/examples/DDCMS/data/pixfwdCommon.xml b/examples/DDCMS/data/pixfwdCommon.xml new file mode 100644 index 000000000..dbdc0591f --- /dev/null +++ b/examples/DDCMS/data/pixfwdCommon.xml @@ -0,0 +1,26 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <!-- + + == CMS Forward Pixels Geometry == + + @version 3.02.01 May 30, 2006 + @created Dmitry Onoprienko + + == COMPONENT DEFINED BY THIS FILE: == + + Constants and rotations required by multiple components. + + --> + <ConstantsSection label="Common" eval="true"> + <Constant name="SmallBool" value="0.01*mm"/> + <!-- Small value used to make boolean-subtracted volumes + slightly larger then their mothers, so that Iguana + can visualize them properly --> + </ConstantsSection> + <RotationSection label="Root"> + <Rotation name="Y180" phiX="180.*deg" thetaX="90.*deg" phiY="90.*deg" thetaY="90.*deg" phiZ="0.*deg" thetaZ="180.*deg"/> + <Rotation name="Z180" phiX="180.*deg" thetaX="90.*deg" phiY="270.*deg" thetaY="90.*deg" phiZ="0.*deg" thetaZ="0.*deg"/> + <ReflectionRotation name="ReflectionX" phiX="180.*deg" thetaX="90.*deg" phiY="90.*deg" thetaY="90.*deg" phiZ="0.*deg" thetaZ="0.*deg"/> + </RotationSection> +</DDDefinition> diff --git a/examples/DDCMS/data/pixfwdCylinder.xml b/examples/DDCMS/data/pixfwdCylinder.xml new file mode 100644 index 000000000..066d8d527 --- /dev/null +++ b/examples/DDCMS/data/pixfwdCylinder.xml @@ -0,0 +1,343 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <!-- + + == CMS Forward Pixels Geometry == + + @version 3.02.01 May 30, 2006 + @created Dmitry Onoprienko + @modified Xingtao Huang to implement the fpix service cylinder + @modified Vesna Cuplov to fix the Electronics boards positions (august 2008). + + + == COMPONENT DEFINED BY THIS FILE: == + + Service cylinders. + + == Comments : == + + Currently, only three graphite cylinders are described. No ribs, cables, coolant pipes, circuit boards, etc. + And unlike files for all other subsystems, this file does not define a root volume, but instead positions + new volumes directly into pixfwd:PixelForwardZPlus and pixfwd:PixelForwardZMinus, using + the pixfwd:ZCylinder constant defined in pixfwd.xml. + + The reason is that many components that should go into service cylinders have not been designed yet, + and it's not clear what shape the root volume will eventually have to have, what symmetry + between Z+ and Z- endcaps we will be able to use, and so on. Once the exact geometry is known, + the file will need to be modified to follow the standard scheme for forward pixels geometry - + root volume plus an anchor point for positioning. + + --> + <ConstantsSection label="Cylinders" eval="true"> + <Constant name="CylindersOuterRmin" value="160.00*mm"/> + <Constant name="CylindersOuterRmax" value="168.50*mm"/> + <Constant name="CylindersOuterLength" value="2101.09*mm"/> + <Constant name="CylindersEndFlangeRmin" value="132.50*mm"/> + <Constant name="CylindersEndFlangeRmax" value="160.50*mm"/> + <Constant name="CylindersEndFlangeLength" value="41.30*mm"/> + <Constant name="CylindersElectronicsRmin" value="117.20*mm"/> + <Constant name="CylindersElectronicsRmax" value="160.00*mm"/> + <Constant name="CylindersElectronicsLength" value="132.08*mm"/> + <Constant name="CylindersCoilFiberWidth" value="98.48*mm"/> + <Constant name="CylindersCoilFiberLength" value="582.97*mm"/> + <Constant name="CylindersCoilFiberThickness" value="12.70*mm"/> + <Constant name="CylinderPipeRmax" value="15.0/2.0*mm"/> + <Constant name="CylinderPipeRmin" value="9.02/2.0*mm"/> + <Constant name="CylinderPipeLength1" value="(1177.16-239.58)*mm"/> + <Constant name="CylinderPipeLength2" value="823.60*mm"/> + <Constant name="CylindersPortCardsWidth" value="60.0*mm"/> + <Constant name="CylindersPortCardsLength1" value="223.52*mm"/> + <Constant name="CylindersPortCardsLength2" value="355.60*mm"/> + <Constant name="CylindersPortCardsThickness" value="5.40*mm"/> + <Constant name="CylindersServiceZoff" value="320.0*mm"/> + <Constant name="CylindersServiceRmin" value="100*mm"/> + <Constant name="CylindersServiceZ0" value="0*mm"/> + <Constant name="CylindersServiceZMin" value="[CylindersServiceZoff]"/> + <Constant name="CylindersServiceZMax" value="[CylindersOuterLength]"/> + </ConstantsSection> + <RotationSection label="Cylinders"> + <Rotation name="EndFlangeRot1" phiX="290.*deg" thetaX="90.*deg" phiY="20.*deg" thetaY="90.*deg" phiZ="0." thetaZ="0."/> + <Rotation name="EndFlangeRot2" phiX="110.*deg" thetaX="90.*deg" phiY="200.*deg" thetaY="90.*deg" phiZ="0." thetaZ="0."/> + <Rotation name="ElectronicsRot1" phiX="39.31*deg" thetaX="90.*deg" phiY="129.31*deg" thetaY="90.*deg" phiZ="0." thetaZ="0."/> + <Rotation name="ElectronicsRot2" phiX="39.31*deg" thetaX="90.*deg" phiY="129.31*deg" thetaY="90.*deg" phiZ="0." thetaZ="0."/> + <Rotation name="CoilFiberRot1" phiX="317.19*deg" thetaX="90.*deg" phiY="47.19*deg" thetaY="90.*deg" phiZ="0." thetaZ="0."/> + <Rotation name="CoilFiberRot2" phiX="222.81*deg" thetaX="90.*deg" phiY="312.81*deg" thetaY="90.*deg" phiZ="0." thetaZ="0."/> + <Rotation name="CoilFiberRot3" phiX="42.81*deg" thetaX="90.*deg" phiY="132.81*deg" thetaY="90.*deg" phiZ="0." thetaZ="0."/> + <Rotation name="CoilFiberRot4" phiX="137.19*deg" thetaX="90.*deg" phiY="227.19*deg" thetaY="90.*deg" phiZ="0." thetaZ="0."/> + <Rotation name="PortCardsRot1" phiX="337.5*deg" thetaX="90.*deg" phiY="67.5*deg" thetaY="90.*deg" phiZ="0." thetaZ="0."/> + <Rotation name="PortCardsRot2" phiX="292.5*deg" thetaX="90.*deg" phiY="22.5*deg" thetaY="90.*deg" phiZ="0." thetaZ="0."/> + <Rotation name="PortCardsRot3" phiX="247.5*deg" thetaX="90.*deg" phiY="337.5*deg" thetaY="90.*deg" phiZ="0." thetaZ="0."/> + <Rotation name="PortCardsRot4" phiX="202.5*deg" thetaX="90.*deg" phiY="292.5*deg" thetaY="90.*deg" phiZ="0." thetaZ="0."/> + <Rotation name="PortCardsRot5" phiX="22.5*deg" thetaX="90.*deg" phiY="112.5*deg" thetaY="90.*deg" phiZ="0." thetaZ="0."/> + <Rotation name="PortCardsRot6" phiX="67.5*deg" thetaX="90.*deg" phiY="157.5*deg" thetaY="90.*deg" phiZ="0." thetaZ="0."/> + <Rotation name="PortCardsRot7" phiX="112.5*deg" thetaX="90.*deg" phiY="202.5*deg" thetaY="90.*deg" phiZ="0." thetaZ="0."/> + <Rotation name="PortCardsRot8" phiX="157.5*deg" thetaX="90.*deg" phiY="247.5* deg" thetaY="90.*deg" phiZ="0." thetaZ="0."/> + </RotationSection> + <SolidSection label="Cylinders"> + <Polycone name="PixelForwardServiceCylinder" startPhi="0*deg" deltaPhi="360*deg"> + <ZSection z="[CylindersServiceZ0]" rMin="[CylindersOuterRmin]" rMax="[CylindersOuterRmax]"/> + <ZSection z="[CylindersServiceZMin]" rMin="[CylindersOuterRmin]" rMax="[CylindersOuterRmax]"/> + <ZSection z="[CylindersServiceZMin]" rMin="[CylindersServiceRmin]" rMax="[CylindersOuterRmax]"/> + <ZSection z="[CylindersServiceZMax]" rMin="[CylindersServiceRmin]" rMax="[CylindersOuterRmax]"/> + </Polycone> + <Tubs name="PixelForwardCylinderOuterCyl" rMin="[CylindersOuterRmin]" rMax="[CylindersOuterRmax]" dz="[CylindersOuterLength]/2." startPhi="0." deltaPhi="360*deg"/> + <Tubs name="PixelForwardCylinderEndFlange" rMin="[CylindersEndFlangeRmin]" rMax="[CylindersEndFlangeRmax]" dz="[CylindersEndFlangeLength]/2." startPhi="0.*deg" deltaPhi="140.*deg"/> + <Tubs name="PixelForwardCylinderElectronics1" rMin="[CylindersElectronicsRmin]" rMax="[CylindersElectronicsRmax]" dz="[CylindersElectronicsLength]/2." startPhi="19.79*deg" deltaPhi="33.57*deg"/> + <Tubs name="PixelForwardCylinderElectronics2" rMin="[CylindersElectronicsRmin]" rMax="[CylindersElectronicsRmax]" dz="[CylindersElectronicsLength]/2." startPhi="121.17*deg" deltaPhi="39.04*deg"/> + <Tubs name="PixelForwardCylinderElectronics3" rMin="[CylindersElectronicsRmin]" rMax="[CylindersElectronicsRmax]" dz="[CylindersElectronicsLength]/2." startPhi="302.75*deg" deltaPhi="39.04*deg"/> + <Tubs name="PixelForwardCylinderElectronics4" rMin="[CylindersElectronicsRmin]" rMax="[CylindersElectronicsRmax]" dz="[CylindersElectronicsLength]/2." startPhi="203.675*deg" deltaPhi="33.57*deg"/> + <Box name="PixelForwardCylindersCoilFiber" dx="[CylindersCoilFiberWidth]/2." dy="[CylindersCoilFiberThickness]/2." dz="[CylindersCoilFiberLength]/2."/> + <Tubs name="PixelForwardCylinderPipe1" rMin="[CylinderPipeRmin]" rMax="[CylinderPipeRmax]" dz="[CylinderPipeLength1]/2." startPhi="0." deltaPhi="360*deg"/> + <Tubs name="PixelForwardCylinderPipe2" rMin="[CylinderPipeRmin]" rMax="[CylinderPipeRmax]" dz="[CylinderPipeLength2]/2." startPhi="0." deltaPhi="360*deg"/> + <Box name="PixelForwardCylindersPortCards1" dx="[CylindersPortCardsWidth]/2." dy="[CylindersPortCardsThickness]/2." dz="[CylindersPortCardsLength1]/2."/> + <Box name="PixelForwardCylindersPortCards2" dx="[CylindersPortCardsWidth]/2." dy="[CylindersPortCardsThickness]/2." dz="[CylindersPortCardsLength2]/2."/> + </SolidSection> + <LogicalPartSection label="Cylinders"> + <LogicalPart name="PixelForwardServiceCylinder" category="support"> + <rSolid name="PixelForwardServiceCylinder"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="PixelForwardCylinderOuterCyl" category="support"> + <rSolid name="PixelForwardCylinderOuterCyl"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_Servi_Cylind"/> + </LogicalPart> + <LogicalPart name="PixelForwardCylinderEndFlange" category="support"> + <rSolid name="PixelForwardCylinderEndFlange"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_End_Flange"/> + </LogicalPart> + <LogicalPart name="PixelForwardCylinderElectronics1" category="support"> + <rSolid name="PixelForwardCylinderElectronics1"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_End_Electro_2"/> + </LogicalPart> + <LogicalPart name="PixelForwardCylinderElectronics2" category="support"> + <rSolid name="PixelForwardCylinderElectronics2"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_End_Electro_1"/> + </LogicalPart> + <LogicalPart name="PixelForwardCylinderElectronics3" category="support"> + <rSolid name="PixelForwardCylinderElectronics3"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_End_Electro_1"/> + </LogicalPart> + <LogicalPart name="PixelForwardCylinderElectronics4" category="support"> + <rSolid name="PixelForwardCylinderElectronics4"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_End_Electro_2"/> + </LogicalPart> + <LogicalPart name="PixelForwardCylindersCoilFiber" category="support"> + <rSolid name="PixelForwardCylindersCoilFiber"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_End_Coil_Fiber"/> + </LogicalPart> + <LogicalPart name="PixelForwardCylinderPipe1" category="support"> + <rSolid name="PixelForwardCylinderPipe1"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_End_Pipe_1"/> + </LogicalPart> + <LogicalPart name="PixelForwardCylinderPipe2" category="support"> + <rSolid name="PixelForwardCylinderPipe2"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_End_Pipe_2"/> + </LogicalPart> + <LogicalPart name="PixelForwardCylindersPortCards1" category="support"> + <rSolid name="PixelForwardCylindersPortCards1"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_Port_Cards"/> + </LogicalPart> + <LogicalPart name="PixelForwardCylindersPortCards2" category="support"> + <rSolid name="PixelForwardCylindersPortCards2"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_Port_Cards"/> + </LogicalPart> + </LogicalPartSection> + <ConstantsSection label="CylindersPosition" eval="true"> + <Constant name="ZOuterCylinder" value="([pixfwd:AnchorZ]+[CylindersOuterLength]/2.0)"/> + <Constant name="CoilFiblerToIP" value="1538.97*mm"/> + <Constant name="CoilFilberToBeam" value="114.7*mm"/> + <Constant name="CoilFilberAngle" value="47.19*deg"/> + <!--Constant name="FractionForPipe" value="0.9499"/--> + <Constant name="FractionForPipe" value="0.99"/> + <Constant name="PipeX1" value="19.9*mm"/> + <Constant name="PipeX2" value="151.7*mm"/> + <Constant name="PipeY1" value="150.4*mm"/> + <Constant name="PipeY2" value="16.9*mm"/> + <Constant name="PipeToIP1" value="([pixfwd:ZPixelForward]+[CylindersServiceZMin]+[CylinderPipeLength1]/2)"/> + <Constant name="PipeToIP2" value="1994.38*mm"/> + <Constant name="PortCardsToBeam" value="143.1*mm"/> + <Constant name="PortCardsAngle1" value="(22.5+1)*deg"/> + <Constant name="PortCardsAngle2" value="(67.5-1)*deg"/> + <Constant name="PortCardsToIP" value="952.75*mm"/> + <Constant name="ZOffCylinder" value="-[pixfwd:ZPixelForward]"/> + </ConstantsSection> + <PosPartSection label="Cylinders"> + <PosPart copyNumber="1"> + <rParent name="pixfwdCylinder:PixelForwardServiceCylinder"/> + <rChild name="pixfwdCylinder:PixelForwardCylinderOuterCyl"/> + <Translation x="0." y="0." z="[ZOuterCylinder]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="pixfwdCylinder:PixelForwardServiceCylinder"/> + <rChild name="pixfwdCylinder:PixelForwardCylinderElectronics1"/> + <Translation x="0." y="0." z="[CylindersServiceZMax]-[CylindersElectronicsLength]/2."/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="pixfwdCylinder:PixelForwardServiceCylinder"/> + <rChild name="pixfwdCylinder:PixelForwardCylinderElectronics2"/> + <Translation x="0." y="0." z="[CylindersServiceZMax]-[CylindersElectronicsLength]/2."/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="pixfwdCylinder:PixelForwardServiceCylinder"/> + <rChild name="pixfwdCylinder:PixelForwardCylinderElectronics3"/> + <Translation x="0." y="0." z="[CylindersServiceZMax]-[CylindersElectronicsLength]/2."/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="pixfwdCylinder:PixelForwardServiceCylinder"/> + <rChild name="pixfwdCylinder:PixelForwardCylinderElectronics4"/> + <Translation x="0." y="0." z="[CylindersServiceZMax]-[CylindersElectronicsLength]/2."/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="pixfwdCylinder:PixelForwardServiceCylinder"/> + <rChild name="pixfwdCylinder:PixelForwardCylindersCoilFiber"/> + <Translation x="[CoilFilberToBeam]*cos([CoilFilberAngle])" y="[CoilFilberToBeam]*sin([CoilFilberAngle])" z="[CoilFiblerToIP]+[ZOffCylinder]"/> + <rRotation name="pixfwdCylinder:CoilFiberRot1"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="pixfwdCylinder:PixelForwardServiceCylinder"/> + <rChild name="pixfwdCylinder:PixelForwardCylindersCoilFiber"/> + <Translation x="[CoilFilberToBeam]*cos([CoilFilberAngle])" y="-[CoilFilberToBeam]*sin([CoilFilberAngle])" z="[CoilFiblerToIP]+[ZOffCylinder]"/> + <rRotation name="pixfwdCylinder:CoilFiberRot2"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="pixfwdCylinder:PixelForwardServiceCylinder"/> + <rChild name="pixfwdCylinder:PixelForwardCylindersCoilFiber"/> + <Translation x="-[CoilFilberToBeam]*cos([CoilFilberAngle])" y="[CoilFilberToBeam]*sin([CoilFilberAngle])" z="[CoilFiblerToIP]+[ZOffCylinder]"/> + <rRotation name="pixfwdCylinder:CoilFiberRot3"/> + </PosPart> + <PosPart copyNumber="4"> + <rParent name="pixfwdCylinder:PixelForwardServiceCylinder"/> + <rChild name="pixfwdCylinder:PixelForwardCylindersCoilFiber"/> + <Translation x="-[CoilFilberToBeam]*cos([CoilFilberAngle])" y="-[CoilFilberToBeam]*sin([CoilFilberAngle])" z="[CoilFiblerToIP]+[ZOffCylinder]"/> + <rRotation name="pixfwdCylinder:CoilFiberRot4"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="pixfwdCylinder:PixelForwardServiceCylinder"/> + <rChild name="pixfwdCylinder:PixelForwardCylinderPipe1"/> + <Translation x="[PipeX1]*[FractionForPipe]" y="[PipeY1]*[FractionForPipe]" z="[PipeToIP1]+[ZOffCylinder]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="pixfwdCylinder:PixelForwardServiceCylinder"/> + <rChild name="pixfwdCylinder:PixelForwardCylinderPipe1"/> + <Translation x="[PipeX2]*[FractionForPipe]" y="[PipeY2]*[FractionForPipe]" z="[PipeToIP1]+[ZOffCylinder]"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="pixfwdCylinder:PixelForwardServiceCylinder"/> + <rChild name="pixfwdCylinder:PixelForwardCylinderPipe1"/> + <Translation x="[PipeX2]*[FractionForPipe]" y="-[PipeY2]*[FractionForPipe]" z="[PipeToIP1]+[ZOffCylinder]"/> + </PosPart> + <PosPart copyNumber="4"> + <rParent name="pixfwdCylinder:PixelForwardServiceCylinder"/> + <rChild name="pixfwdCylinder:PixelForwardCylinderPipe1"/> + <Translation x="[PipeX1]*[FractionForPipe]" y="-[PipeY1]*[FractionForPipe]" z="[PipeToIP1]+[ZOffCylinder]"/> + </PosPart> + <PosPart copyNumber="5"> + <rParent name="pixfwdCylinder:PixelForwardServiceCylinder"/> + <rChild name="pixfwdCylinder:PixelForwardCylinderPipe1"/> + <Translation x="-[PipeX1]*[FractionForPipe]" y="[PipeY1]*[FractionForPipe]" z="[PipeToIP1]+[ZOffCylinder]"/> + </PosPart> + <PosPart copyNumber="6"> + <rParent name="pixfwdCylinder:PixelForwardServiceCylinder"/> + <rChild name="pixfwdCylinder:PixelForwardCylinderPipe1"/> + <Translation x="-[PipeX2]*[FractionForPipe]" y="[PipeY2]*[FractionForPipe]" z="[PipeToIP1]+[ZOffCylinder]"/> + </PosPart> + <PosPart copyNumber="7"> + <rParent name="pixfwdCylinder:PixelForwardServiceCylinder"/> + <rChild name="pixfwdCylinder:PixelForwardCylinderPipe1"/> + <Translation x="-[PipeX2]*[FractionForPipe]" y="-[PipeY2]*[FractionForPipe]" z="[PipeToIP1]+[ZOffCylinder]"/> + </PosPart> + <PosPart copyNumber="8"> + <rParent name="pixfwdCylinder:PixelForwardServiceCylinder"/> + <rChild name="pixfwdCylinder:PixelForwardCylinderPipe1"/> + <Translation x="-[PipeX1]*[FractionForPipe]" y="-[PipeY1]*[FractionForPipe]" z="[PipeToIP1]+[ZOffCylinder]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="pixfwdCylinder:PixelForwardServiceCylinder"/> + <rChild name="pixfwdCylinder:PixelForwardCylinderPipe2"/> + <Translation x="[PipeX1]*[FractionForPipe]" y="[PipeY1]*[FractionForPipe]" z="[PipeToIP2]+[ZOffCylinder]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="pixfwdCylinder:PixelForwardServiceCylinder"/> + <rChild name="pixfwdCylinder:PixelForwardCylinderPipe2"/> + <Translation x="[PipeX2]*[FractionForPipe]" y="[PipeY2]*[FractionForPipe]" z="[PipeToIP2]+[ZOffCylinder]"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="pixfwdCylinder:PixelForwardServiceCylinder"/> + <rChild name="pixfwdCylinder:PixelForwardCylinderPipe2"/> + <Translation x="[PipeX2]*[FractionForPipe]" y="-[PipeY2]*[FractionForPipe]" z="[PipeToIP2]+[ZOffCylinder]"/> + </PosPart> + <PosPart copyNumber="4"> + <rParent name="pixfwdCylinder:PixelForwardServiceCylinder"/> + <rChild name="pixfwdCylinder:PixelForwardCylinderPipe2"/> + <Translation x="[PipeX1]*[FractionForPipe]" y="-[PipeY1]*[FractionForPipe]" z="[PipeToIP2]+[ZOffCylinder]"/> + </PosPart> + <PosPart copyNumber="5"> + <rParent name="pixfwdCylinder:PixelForwardServiceCylinder"/> + <rChild name="pixfwdCylinder:PixelForwardCylinderPipe2"/> + <Translation x="-[PipeX1]*[FractionForPipe]" y="[PipeY1]*[FractionForPipe]" z="[PipeToIP2]+[ZOffCylinder]"/> + </PosPart> + <PosPart copyNumber="6"> + <rParent name="pixfwdCylinder:PixelForwardServiceCylinder"/> + <rChild name="pixfwdCylinder:PixelForwardCylinderPipe2"/> + <Translation x="-[PipeX2]*[FractionForPipe]" y="[PipeY2]*[FractionForPipe]" z="[PipeToIP2]+[ZOffCylinder]"/> + </PosPart> + <PosPart copyNumber="7"> + <rParent name="pixfwdCylinder:PixelForwardServiceCylinder"/> + <rChild name="pixfwdCylinder:PixelForwardCylinderPipe2"/> + <Translation x="-[PipeX2]*[FractionForPipe]" y="-[PipeY2]*[FractionForPipe]" z="[PipeToIP2]+[ZOffCylinder]"/> + </PosPart> + <PosPart copyNumber="8"> + <rParent name="pixfwdCylinder:PixelForwardServiceCylinder"/> + <rChild name="pixfwdCylinder:PixelForwardCylinderPipe2"/> + <Translation x="-[PipeX1]*[FractionForPipe]" y="-[PipeY1]*[FractionForPipe]" z="[PipeToIP2]+[ZOffCylinder]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="pixfwdCylinder:PixelForwardServiceCylinder"/> + <rChild name="pixfwdCylinder:PixelForwardCylindersPortCards1"/> + <Translation x="[PortCardsToBeam]*cos([PortCardsAngle2])" y="[PortCardsToBeam]*sin([PortCardsAngle2])" z="[PortCardsToIP]+[ZOffCylinder]"/> + <rRotation name="pixfwdCylinder:PortCardsRot1"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="pixfwdCylinder:PixelForwardServiceCylinder"/> + <rChild name="pixfwdCylinder:PixelForwardCylindersPortCards2"/> + <Translation x="[PortCardsToBeam]*cos([PortCardsAngle1])" y="[PortCardsToBeam]*sin([PortCardsAngle1])" z="[PortCardsToIP]+[ZOffCylinder]"/> + <rRotation name="pixfwdCylinder:PortCardsRot2"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="pixfwdCylinder:PixelForwardServiceCylinder"/> + <rChild name="pixfwdCylinder:PixelForwardCylindersPortCards1"/> + <Translation x="[PortCardsToBeam]*cos([PortCardsAngle1])" y="-[PortCardsToBeam]*sin([PortCardsAngle1])" z="[PortCardsToIP]+[ZOffCylinder]"/> + <rRotation name="pixfwdCylinder:PortCardsRot3"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="pixfwdCylinder:PixelForwardServiceCylinder"/> + <rChild name="pixfwdCylinder:PixelForwardCylindersPortCards1"/> + <Translation x="[PortCardsToBeam]*cos([PortCardsAngle2])" y="-[PortCardsToBeam]*sin([PortCardsAngle2])" z="[PortCardsToIP]+[ZOffCylinder]"/> + <rRotation name="pixfwdCylinder:PortCardsRot4"/> + </PosPart> + <PosPart copyNumber="4"> + <rParent name="pixfwdCylinder:PixelForwardServiceCylinder"/> + <rChild name="pixfwdCylinder:PixelForwardCylindersPortCards1"/> + <Translation x="-[PortCardsToBeam]*cos([PortCardsAngle2])" y="[PortCardsToBeam]*sin([PortCardsAngle2])" z="[PortCardsToIP]+[ZOffCylinder]"/> + <rRotation name="pixfwdCylinder:PortCardsRot5"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="pixfwdCylinder:PixelForwardServiceCylinder"/> + <rChild name="pixfwdCylinder:PixelForwardCylindersPortCards2"/> + <Translation x="-[PortCardsToBeam]*cos([PortCardsAngle1])" y="[PortCardsToBeam]*sin([PortCardsAngle1])" z="[PortCardsToIP]+[ZOffCylinder]"/> + <rRotation name="pixfwdCylinder:PortCardsRot6"/> + </PosPart> + <PosPart copyNumber="5"> + <rParent name="pixfwdCylinder:PixelForwardServiceCylinder"/> + <rChild name="pixfwdCylinder:PixelForwardCylindersPortCards1"/> + <Translation x="-[PortCardsToBeam]*cos([PortCardsAngle1])" y="-[PortCardsToBeam]*sin([PortCardsAngle1])" z="[PortCardsToIP]+[ZOffCylinder]"/> + <rRotation name="pixfwdCylinder:PortCardsRot7"/> + </PosPart> + <PosPart copyNumber="6"> + <rParent name="pixfwdCylinder:PixelForwardServiceCylinder"/> + <rChild name="pixfwdCylinder:PixelForwardCylindersPortCards1"/> + <Translation x="-[PortCardsToBeam]*cos([PortCardsAngle2])" y="-[PortCardsToBeam]*sin([PortCardsAngle2])" z="[PortCardsToIP]+[ZOffCylinder]"/> + <rRotation name="pixfwdCylinder:PortCardsRot8"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/pixfwdDisk.xml b/examples/DDCMS/data/pixfwdDisk.xml new file mode 100644 index 000000000..03f1e3678 --- /dev/null +++ b/examples/DDCMS/data/pixfwdDisk.xml @@ -0,0 +1,278 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <!-- + + == CMS Forward Pixels Geometry == + + @version 3.02.01 May 30, 2006 + @created Dmitry Onoprienko + @modified Vesna Cuplov 04.17.07 + @modified august 2008: Aluminium_OuterRing material with appropriate density (lighter than aluminium density) in order to comprensate the in-existing holes in the outer-ring simulation. + @modified Vesna Cuplov (august 2008): Inner and Outer Rings have 2 different aluminium densities. + + + == Subsystem or component described by the file == + + Forward Pixels disk. + + == Root volume and its reference frame == + + Two root volumes are defined: + + PixelForwardDiskZPlus (Disks for Z+ endcap) + PixelForwardDiskZMinus (Disks for Z- endcap) + + X horizontal<br> + Y vertical pointing up<br> + Z along the beam line perpendicular to the disk plane, points away from IP<br> + + Origin at the center of the disk.<br> + + == Positioning == + + Anchor point coincides with the root reference frame origin. + Disks are positioned into endcaps without any rotations. + + --> + <ConstantsSection label="Input" eval="true"> + <Constant name="InnerRingREdge" value="49.16*mm"/> + <Constant name="InnerRingRMin" value="50.16*mm"/> + <Constant name="InnerRingRMax" value="51.16*mm"/> + <Constant name="InnerRingEdge" value="1.00*mm"/> + <Constant name="InnerRingHalfWidth" value="29.50*mm"/> + <Constant name="OuterRingRMin" value="157.5*mm"/> + <Constant name="OuterRingRMax" value="158.5*mm"/> + <Constant name="OuterRingREdge" value="159.5*mm"/> + <Constant name="OuterRingEdge" value="1.00*mm"/> + <Constant name="OuterRingHalfWidth" value="29.50*mm"/> + <!-- Layout of panels in disks (left or right). Blades are numbered in + increasing phi order in the disk frame. Therefore, in the global + frame they are numbered in increasing phi order for the Z Plus disks, + in decreasing phi order, starting with blade 12, for the Z Minus disks. --> + <!-- "L" - left, "R" - right, "-" - no panel : 000000000111111111122222 --> + <!-- 123456789012345678901234 --> + <!-- <Constant name="PanelLayoutZPlus3" value="RLLLLRLLLLLRRLLLLRLLLLLR" />--> + <!-- <Constant name="PanelLayoutZPlus4" value="LLLLLLRLLLLRLLLLLLRLLLLR" />--> + <!-- <Constant name="PanelLayoutZMinus3" value="LRRRRRLRRRRLLRRRRRLRRRRL" />--> + <!-- <Constant name="PanelLayoutZMinus4" value="LRRRRLRRRRRRLRRRRLRRRRRR" />--> + <!-- Oops! DDL does not support string constants... Cut-and-paste to algorithm calls below. --> + </ConstantsSection> + <!-- Disk root --> + <ConstantsSection label="Root" eval="true"> + <Constant name="DiskRmin" value="[InnerRingREdge]"/> + <Constant name="DiskRmax" value="[OuterRingREdge]"/> + <Constant name="DiskHalfWidth" value="[OuterRingHalfWidth]"/> + </ConstantsSection> + <!-- New description (modification) 04/17/07 : Panel3R, 4R and 4L were going through the Disk, so 2mm were added to the Width of the mother volume of the Disk --> + <SolidSection label="Root"> + <Tubs name="PixelForwardDisk" rMin="[DiskRmin]" rMax="[DiskRmax]" dz="[DiskHalfWidth]+2.0*mm" startPhi="0." deltaPhi="360*deg"/> + </SolidSection> + <LogicalPartSection label="Root"> + <LogicalPart name="PixelForwardDiskZPlus" category="envelope"> + <rSolid name="PixelForwardDisk"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="PixelForwardDiskZMinus" category="envelope"> + <rSolid name="PixelForwardDisk"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <!-- Support rings --> + <SolidSection label="Rings"> + <Tubs name="PixelForwardDiskInnerRing" rMin="[InnerRingRMin]" rMax="[InnerRingRMax]" dz="[InnerRingHalfWidth]" startPhi="0." deltaPhi="360*deg"/> + <Tubs name="PixelForwardDiskInnerRingEdge" rMin="[InnerRingREdge]" rMax="[InnerRingRMin]" dz="[InnerRingEdge]/2." startPhi="0." deltaPhi="360*deg"/> + <Tubs name="PixelForwardDiskOuterRing" rMin="[OuterRingRMin]" rMax="[OuterRingRMax]" dz="[OuterRingHalfWidth]" startPhi="0." deltaPhi="360*deg"/> + <Tubs name="PixelForwardDiskOuterRingEdge" rMin="[OuterRingRMax]" rMax="[OuterRingREdge]" dz="[OuterRingEdge]/2." startPhi="0." deltaPhi="360*deg"/> + </SolidSection> + <LogicalPartSection label="Rings"> + <LogicalPart name="PixelForwardDiskInnerRing" category="support"> + <rSolid name="PixelForwardDiskInnerRing"/> + <rMaterial name="pixfwdMaterials:Aluminium_InnerRing"/> + </LogicalPart> + <LogicalPart name="PixelForwardDiskInnerRingEdge" category="support"> + <rSolid name="PixelForwardDiskInnerRingEdge"/> + <rMaterial name="trackermaterial:T_Aluminium"/> + </LogicalPart> + <LogicalPart name="PixelForwardDiskOuterRing" category="support"> + <rSolid name="PixelForwardDiskOuterRing"/> + <rMaterial name="pixfwdMaterials:Aluminium_OuterRing"/> + </LogicalPart> + <LogicalPart name="PixelForwardDiskOuterRingEdge" category="support"> + <rSolid name="PixelForwardDiskOuterRingEdge"/> + <rMaterial name="trackermaterial:T_Aluminium"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="Rings"> + <!-- Z Plus Disk --> + <PosPart copyNumber="1"> + <rParent name="PixelForwardDiskZPlus"/> + <rChild name="PixelForwardDiskInnerRing"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardDiskZPlus"/> + <rChild name="PixelForwardDiskInnerRingEdge"/> + <Translation x="0." y="0." z="-[InnerRingHalfWidth]-[InnerRingEdge]/2."/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="PixelForwardDiskZPlus"/> + <rChild name="PixelForwardDiskInnerRingEdge"/> + <Translation x="0." y="0." z="[InnerRingHalfWidth]+[InnerRingEdge]/2."/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardDiskZPlus"/> + <rChild name="PixelForwardDiskOuterRing"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardDiskZPlus"/> + <rChild name="PixelForwardDiskOuterRingEdge"/> + <Translation x="0." y="0." z="-[OuterRingHalfWidth]-[OuterRingEdge]/2."/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="PixelForwardDiskZPlus"/> + <rChild name="PixelForwardDiskOuterRingEdge"/> + <Translation x="0." y="0." z="[OuterRingHalfWidth]+[OuterRingEdge]/2."/> + </PosPart> + <!-- Z Minus Disk --> + <PosPart copyNumber="1"> + <rParent name="PixelForwardDiskZMinus"/> + <rChild name="PixelForwardDiskInnerRing"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardDiskZMinus"/> + <rChild name="PixelForwardDiskInnerRingEdge"/> + <Translation x="0." y="0." z="-[InnerRingHalfWidth]-[InnerRingEdge]/2."/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="PixelForwardDiskZMinus"/> + <rChild name="PixelForwardDiskInnerRingEdge"/> + <Translation x="0." y="0." z="[InnerRingHalfWidth]+[InnerRingEdge]/2."/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardDiskZMinus"/> + <rChild name="PixelForwardDiskOuterRing"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardDiskZMinus"/> + <rChild name="PixelForwardDiskOuterRingEdge"/> + <Translation x="0." y="0." z="-[OuterRingHalfWidth]-[OuterRingEdge]/2."/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="PixelForwardDiskZMinus"/> + <rChild name="PixelForwardDiskOuterRingEdge"/> + <Translation x="0." y="0." z="[OuterRingHalfWidth]+[OuterRingEdge]/2."/> + </PosPart> + </PosPartSection> + <!-- Blades --> + <!-- Z Plus Disk --> + <Algorithm name="track:DDPixFwdBlades"> + <rParent name="pixfwdDisk:PixelForwardDiskZPlus"/> + <Numeric name="Endcap" value="1."/> + <String name="Child" value="pixfwdBlade:PixelForwardBlade"/> + <Vector name="ChildTranslation" type="numeric" nEntries="3"> 0., -[pixfwdBlade:AnchorY], 0. </Vector> + </Algorithm> + <!-- Z Minus Disk --> + <Algorithm name="track:DDPixFwdBlades"> + <rParent name="pixfwdDisk:PixelForwardDiskZMinus"/> + <Numeric name="Endcap" value="-1."/> + <String name="Child" value="pixfwdBlade:PixelForwardBlade"/> + <Vector name="ChildTranslation" type="numeric" nEntries="3"> 0., -[pixfwdBlade:AnchorY], 0. </Vector> + <String name="ChildRotation" value="pixfwdCommon:ReflectionX"/> + </Algorithm> + <!-- Panels --> + <ConstantsSection label="Panels" eval="true"> + <Constant name="zPanel" value="[pixfwdBlade:RootHalfThickness]+[pixfwdPanel:RootHalfThickness]"/> + </ConstantsSection> + <!-- Z Plus Disk --> + <Algorithm name="track:DDPixFwdBlades"> + <rParent name="pixfwdDisk:PixelForwardDiskZPlus"/> + <Numeric name="Endcap" value="1."/> + <String name="Child" value="pixfwdPanel:PixelForwardPanel3Right"/> + <Vector name="ChildTranslation" type="numeric" nEntries="3"> 0., -[pixfwdPanel:AnchorY], [zPanel] </Vector> + <String name="FlagString" value="RLLLLRLLLLLRRLLLLRLLLLLR"/> + <!-- Panel Layout ZPlus 3 --> + <String name="FlagSelector" value="R"/> + </Algorithm> + <Algorithm name="track:DDPixFwdBlades"> + <rParent name="pixfwdDisk:PixelForwardDiskZPlus"/> + <Numeric name="Endcap" value="1."/> + <String name="Child" value="pixfwdPanel:PixelForwardPanel3Left"/> + <Vector name="ChildTranslation" type="numeric" nEntries="3"> 0., -[pixfwdPanel:AnchorY], [zPanel] </Vector> + <String name="FlagString" value="RLLLLRLLLLLRRLLLLRLLLLLR"/> + <!-- Panel Layout ZPlus 3 --> + <String name="FlagSelector" value="L"/> + </Algorithm> + <Algorithm name="track:DDPixFwdBlades"> + <rParent name="pixfwdDisk:PixelForwardDiskZPlus"/> + <Numeric name="Endcap" value="1."/> + <String name="Child" value="pixfwdPanel:PixelForwardPanel4Right"/> + <Vector name="ChildTranslation" type="numeric" nEntries="3"> 0., -[pixfwdPanel:AnchorY], -[zPanel] </Vector> + <String name="ChildRotation" value="pixfwdCommon:Y180"/> + <String name="FlagString" value="LLLLLLRLLLLRLLLLLLRLLLLR"/> + <!-- Panel Layout ZPlus 4 --> + <String name="FlagSelector" value="R"/> + </Algorithm> + <Algorithm name="track:DDPixFwdBlades"> + <rParent name="pixfwdDisk:PixelForwardDiskZPlus"/> + <Numeric name="Endcap" value="1."/> + <String name="Child" value="pixfwdPanel:PixelForwardPanel4Left"/> + <Vector name="ChildTranslation" type="numeric" nEntries="3"> 0., -[pixfwdPanel:AnchorY], -[zPanel] </Vector> + <String name="ChildRotation" value="pixfwdCommon:Y180"/> + <String name="FlagString" value="LLLLLLRLLLLRLLLLLLRLLLLR"/> + <!-- Panel Layout ZPlus 4 --> + <String name="FlagSelector" value="L"/> + </Algorithm> + <!-- Z Minus Disk --> + <Algorithm name="track:DDPixFwdBlades"> + <rParent name="pixfwdDisk:PixelForwardDiskZMinus"/> + <Numeric name="Endcap" value="-1."/> + <String name="Child" value="pixfwdPanel:PixelForwardPanel3Right"/> + <Vector name="ChildTranslation" type="numeric" nEntries="3"> 0., -[pixfwdPanel:AnchorY], [zPanel] </Vector> + <String name="FlagString" value="LRRRRRLRRRRLLRRRRRLRRRRL"/> + <!-- Panel Layout ZMinus 3 --> + <String name="FlagSelector" value="R"/> + </Algorithm> + <Algorithm name="track:DDPixFwdBlades"> + <rParent name="pixfwdDisk:PixelForwardDiskZMinus"/> + <Numeric name="Endcap" value="-1."/> + <String name="Child" value="pixfwdPanel:PixelForwardPanel3Left"/> + <Vector name="ChildTranslation" type="numeric" nEntries="3"> 0., -[pixfwdPanel:AnchorY], [zPanel] </Vector> + <String name="FlagString" value="LRRRRRLRRRRLLRRRRRLRRRRL"/> + <!-- Panel Layout ZMinus 3 --> + <String name="FlagSelector" value="L"/> + </Algorithm> + <Algorithm name="track:DDPixFwdBlades"> + <rParent name="pixfwdDisk:PixelForwardDiskZMinus"/> + <Numeric name="Endcap" value="-1."/> + <String name="Child" value="pixfwdPanel:PixelForwardPanel4Right"/> + <Vector name="ChildTranslation" type="numeric" nEntries="3"> 0., -[pixfwdPanel:AnchorY], -[zPanel] </Vector> + <String name="ChildRotation" value="pixfwdCommon:Y180"/> + <String name="FlagString" value="LRRRRLRRRRRRLRRRRLRRRRRR"/> + <!-- Panel Layout ZMinus 4 --> + <String name="FlagSelector" value="R"/> + </Algorithm> + <Algorithm name="track:DDPixFwdBlades"> + <rParent name="pixfwdDisk:PixelForwardDiskZMinus"/> + <Numeric name="Endcap" value="-1."/> + <String name="Child" value="pixfwdPanel:PixelForwardPanel4Left"/> + <Vector name="ChildTranslation" type="numeric" nEntries="3"> 0., -[pixfwdPanel:AnchorY], -[zPanel] </Vector> + <String name="ChildRotation" value="pixfwdCommon:Y180"/> + <String name="FlagString" value="LRRRRLRRRRRRLRRRRLRRRRRR"/> + <!-- Panel Layout ZMinus 4 --> + <String name="FlagSelector" value="L"/> + </Algorithm> + <!-- Nipples --> + <Algorithm name="track:DDPixFwdBlades"> + <rParent name="pixfwdDisk:PixelForwardDiskZPlus"/> + <Numeric name="Endcap" value="1."/> + <String name="Child" value="pixfwdNipple:PixelForwardNippleZPlus"/> + <String name="FlagString" value="YYYYYNYYYYYNYYYYYNYYYYYN"/> + <String name="FlagSelector" value="Y"/> + </Algorithm> + <Algorithm name="track:DDPixFwdBlades"> + <rParent name="pixfwdDisk:PixelForwardDiskZMinus"/> + <Numeric name="Endcap" value="-1."/> + <String name="Child" value="pixfwdNipple:PixelForwardNippleZMinus"/> + <String name="FlagString" value="NYYYYYNYYYYYNYYYYYNYYYYY"/> + <String name="FlagSelector" value="Y"/> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/pixfwdMaterials.xml b/examples/DDCMS/data/pixfwdMaterials.xml index b450254d8..6fee50e94 100644 --- a/examples/DDCMS/data/pixfwdMaterials.xml +++ b/examples/DDCMS/data/pixfwdMaterials.xml @@ -1,6 +1,6 @@ <?xml version="1.0"?> <DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> - <MaterialSection label="pixfwdMaterials.xml"> + <MaterialSection label="PixelForwardMaterial.xml"> <CompositeMaterial name="FPix_Alumina" density="3.96*g/cm3" method="mixture by weight" symbol=" "> <MaterialFraction fraction="0.52924272"> <rMaterial name="trackermaterial:T_Aluminium" /> diff --git a/examples/DDCMS/data/pixfwdNipple.xml b/examples/DDCMS/data/pixfwdNipple.xml new file mode 100644 index 000000000..631e76dda --- /dev/null +++ b/examples/DDCMS/data/pixfwdNipple.xml @@ -0,0 +1,377 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <!-- + + == CMS Forward Pixels Geometry == + + @version 3.02.01 May 30, 2006 + @created Dmitry Onoprienko + @modified Vesna Cuplov april 2007 + + == Subsystem or component described by the file == + + "Nipple" connecting cooling channels in two adjacent blades. + + == Root volume and its reference frame == + + Two root volumes are defined: + + PixelForwardNippleZPlus (nipple for +Z disk) + PixelForwardNippleZMinus (nipple for -Z disk) + + Z along the nipple axis, pointing from J to K. + + Origin at the middle of a segment connecting points J and K on the drawing + + == Positioning == + + Positioned automatically by the <code>DDPixFwdBlades</code> algorithm, which recognizes + this component by its volume name, and applies appropriate rotations and translations. + + == Additional comments == + + +Z and -Z versions of a nipple are, in fact, reflections of each other, but they are defined + separately to make Iguana happy: G4 visualization cannot handle polycone reflection at the moment. + + The call to DDPixFwdBlades algorithm calculates parameters needed for constructing + the nipple: rotations pixfwdNipple:NippleToCoverZPlus, pixfwdNipple:NippleToCoverZMinus, + pixfwdNipple:NippleToBodyZPlus, pixfwdNipple:NippleToBodyZMinus + and constants pixfwdNipple:JK, pixfwdNipple:AngleBody, pixfwdNipple:AngleCover. + + Currently, there is a problem with passing constants from algorithms to DDL files, so these constants + are defined manually (by copy-and-paste from the algorithm output). To make sure the resulting + numerical error does not cause volumes to overlap, nipples are described to be slightly shorter + than they are on the drawings. + + --> + <!-- Input geometry parameters --> + <ConstantsSection label="Input" eval="true"> + <Constant name="R01" value="2.00*mm"/> + <Constant name="R02" value="2.50*mm"/> + <Constant name="R03" value="2.00*mm"/> + <Constant name="R04" value="2.50*mm"/> + <Constant name="R05" value="3.00*mm"/> + <Constant name="R06" value="3.00*mm"/> + <Constant name="R07" value="3.50*mm"/> + <Constant name="R08" value="4.50*mm"/> + <Constant name="R09" value="3.25*mm"/> + <Constant name="R10" value="3.75*mm"/> + <Constant name="R11" value="3.50*mm"/> + <Constant name="L01" value="8.23*mm"/> + <Constant name="L02" value="8.23*mm"/> + <Constant name="L03" value="6.73*mm"/> + <Constant name="L04" value="9.50*mm"/> + <Constant name="L05" value="4.00*mm"/> + <Constant name="L06" value="4.00*mm"/> + <Constant name="L07" value="1.00*mm"/> + <Constant name="L08" value="1.00*mm"/> + <Constant name="A01" value="60*deg"/> + <Constant name="RootHalfThickness" value="[pixfwdPanelBase:RootHalfThickness]"/> + </ConstantsSection> + <!-- THIS ALGORITHM DEFINES A FEW ROTATIONS (LIKE pixfwdNipple:NippleToCover) AND + ATTEMPTS TO DEFINE A CONSTANT pixfwdNipple: JK, AngleBody, AngleCover --> + <Algorithm name="track:DDPixFwdBlades"> + <rParent name="pixfwdNipple:PixelForwardNippleZPlus"/> + </Algorithm> + <!-- Nipple root and a solid for boolean subtraction --> + <ConstantsSection label="Root" eval="true"> + <Constant name="JK" value="16.9*mm"/> + <!-- 16.9523 as printed by algorithm, made slightly smaller + to avoid overlaps due to numerical errors. Can be made + more precise once DDL is able to use constants defined + in algorithms directly. --> + <Constant name="AngleBody" value="0.172941*rad"/> + <Constant name="AngleCover" value="0.172941*rad"/> + <Constant name="Dsub" value="2.0*mm"/> + <Constant name="Rsub" value="[R08]/cos([AngleBody]) + ([Dsub]/2)*tan([AngleBody]) + [pixfwdCommon:SmallBool]"/> + <Constant name="DeltaBody" value="([Dsub]/2 - 0.5*mm) / cos([AngleBody])"/> + <Constant name="DeltaCover" value="([Dsub]/2 - 0.5*mm) / cos([AngleCover])"/> + </ConstantsSection> + <SolidSection label="Root"> + <!-- Previous description (D. Onoprienko) + <Tubs name="PixelForwardNipple_01" rMin="0.*mm" rMax="[R08]" dz="[JK]/2." startPhi="0." deltaPhi="360*deg" /> + <Tubs name="PixelForwardNippleSubtract" rMin="0.*mm" rMax="[Rsub]" dz="[Dsub]/2." startPhi="0." deltaPhi="360*deg" /> + <SubtractionSolid name="PixelForwardNipple_int01"> + <rSolid name="PixelForwardNipple_01" /> + <rSolid name="PixelForwardNippleSubtract" /> + <Translation x="0." y="0." z="-[JK]/2.-[DeltaCover]" /> + <rRotation name="NippleToCoverZPlus" /> + </SubtractionSolid> + <SubtractionSolid name="PixelForwardNippleZPlus"> + <rSolid name="PixelForwardNipple_int01" /> + <rSolid name="PixelForwardNippleSubtract" /> + <Translation x="0." y="0." z="[JK]/2.+[DeltaBody]" /> + <rRotation name="NippleToBodyZPlus" /> + </SubtractionSolid> + --> + <!-- New description (I used the description of D. Onoprienko as a basement) to fix overlaps of panels with nipples: Previously there was only one shape as a Tub with special angles for the extremities, but this shape was overlaping with panels. I had to split into 2 shapes: the first shape is like the previous Tub with special angles for extremities but with a smaller rMax and the second shape that I add is a basic Tub (no angles for the extremities) that covers the largest part of the nipple. --> + <Tubs name="PixelForwardNipple_01" rMin="0.*mm" rMax="[R08]-0.9*mm" dz="[L04]/2+3.7*mm" startPhi="0." deltaPhi="360*deg"/> + <Tubs name="PixelForwardNippleSubtract" rMin="0.*mm" rMax="[Rsub]-0.9*mm" dz="[Dsub]/2." startPhi="0." deltaPhi="360*deg"/> + <Tubs name="PixelForwardNippleMiddle" rMin="0.*mm" rMax="[R08]" dz="[L04]/2.+0.4*mm" startPhi="0." deltaPhi="360*deg"/> + <SubtractionSolid name="PixelForwardNipple_int01"> + <rSolid name="PixelForwardNipple_01"/> + <rSolid name="PixelForwardNippleSubtract"/> + <Translation x="0." y="0." z="-[L04]/2.-3.7*mm-[DeltaCover]"/> + <rRotation name="NippleToCoverZPlus"/> + </SubtractionSolid> + <SubtractionSolid name="PixelForwardNippleZPlus_01"> + <rSolid name="PixelForwardNipple_int01"/> + <rSolid name="PixelForwardNippleSubtract"/> + <Translation x="0." y="0." z="[L04]/2.+3.7*mm+[DeltaBody]"/> + <rRotation name="NippleToBodyZPlus"/> + </SubtractionSolid> + <UnionSolid name="PixelForwardNippleZPlus"> + <rSolid name="PixelForwardNippleZPlus_01"/> + <rSolid name="PixelForwardNippleMiddle"/> + <Translation x="0." y="0." z="0."/> + </UnionSolid> + <SubtractionSolid name="PixelForwardNipple_int02"> + <rSolid name="PixelForwardNipple_01"/> + <rSolid name="PixelForwardNippleSubtract"/> + <Translation x="0." y="0." z="-[L04]/2.-3.7*mm-[DeltaCover]"/> + <rRotation name="NippleToCoverZMinus"/> + </SubtractionSolid> + <SubtractionSolid name="PixelForwardNippleZMinus_01"> + <rSolid name="PixelForwardNipple_int02"/> + <rSolid name="PixelForwardNippleSubtract"/> + <Translation x="0." y="0." z="[L04]/2.+3.7*mm+[DeltaBody]"/> + <rRotation name="NippleToBodyZMinus"/> + </SubtractionSolid> + <UnionSolid name="PixelForwardNippleZMinus"> + <rSolid name="PixelForwardNippleZMinus_01"/> + <rSolid name="PixelForwardNippleMiddle"/> + <Translation x="0." y="0." z="0."/> + </UnionSolid> + </SolidSection> + <LogicalPartSection label="Root"> + <LogicalPart name="PixelForwardNippleZPlus" category="envelope"> + <rSolid name="PixelForwardNippleZPlus"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="PixelForwardNippleZMinus" category="envelope"> + <rSolid name="PixelForwardNippleZMinus"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <!-- Sleeve and pipes inside it --> + <ConstantsSection label="Sleeve" eval="true"> + <Constant name="e01" value="[JK]-[L01]-[L02]"/> + </ConstantsSection> + <SolidSection label="Sleeve"> + <Polycone name="PixelForwardNippleSleeve" startPhi="0.*deg" deltaPhi="360*deg"> + <ZSection z="-[L04]/2" rMin="0." rMax="[R08]"/> + <ZSection z="[L04]/2-([R08]-[R07])*tan([A01])" rMin="0." rMax="[R08]"/> + <ZSection z="[L04]/2" rMin="0." rMax="[R07]"/> + </Polycone> + <Polycone name="PixelForwardNippleEpoxyCover" startPhi="0.*deg" deltaPhi="360*deg"> + <ZSection z="-[L06]/2" rMin="[R05]" rMax="[R11]"/> + <ZSection z="[L06]/2-[L07]-([R10]-[R11])" rMin="[R05]" rMax="[R11]"/> + <ZSection z="[L06]/2-[L07]" rMin="[R05]" rMax="[R10]"/> + <ZSection z="[L06]/2" rMin="[R05]" rMax="[R10]"/> + </Polycone> + <Polycone name="PixelForwardNippleEpoxyBody" startPhi="0.*deg" deltaPhi="360*deg"> + <ZSection z="-[L05]/2" rMin="[R02]" rMax="[R09]"/> + <ZSection z="-[L05]/2+[L08]" rMin="[R02]" rMax="[R09]"/> + <ZSection z="-[L05]/2+[L08]+([R09]-[R06])" rMin="[R02]" rMax="[R06]"/> + <ZSection z="[L05]/2" rMin="[R02]" rMax="[R06]"/> + </Polycone> + <Polycone name="PixelForwardNippleSleeveCoolant" startPhi="0.*deg" deltaPhi="360*deg"> + <ZSection z="-[L04]/2" rMin="0.0" rMax="[R04]"/> + <ZSection z="-[L04]/2+[L06]-([L02]-[L03])" rMin="0.0" rMax="[R04]"/> + <ZSection z="-[L04]/2+[L06]-([L02]-[L03])+([R04]-[R03])" rMin="0.0" rMax="[R03]"/> + <ZSection z="-[L04]/2+[L06]" rMin="0.0" rMax="[R03]"/> + <ZSection z="-[L04]/2+[L06]" rMin="0.0" rMax="[R02]"/> + <ZSection z="-[L04]/2+[L06]+[e01]" rMin="0.0" rMax="[R02]"/> + <ZSection z="-[L04]/2+[L06]+[e01]" rMin="0.0" rMax="[R01]"/> + <ZSection z="[L04]/2" rMin="0.0" rMax="[R01]"/> + </Polycone> + </SolidSection> + <LogicalPartSection label="Sleeve"> + <LogicalPart name="PixelForwardNippleSleeve" category="cooling"> + <rSolid name="PixelForwardNippleSleeve"/> + <rMaterial name="trackermaterial:T_Aluminium"/> + </LogicalPart> + <LogicalPart name="PixelForwardNippleEpoxyCover" category="cooling"> + <rSolid name="PixelForwardNippleEpoxyCover"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_AgEpoxy"/> + </LogicalPart> + <LogicalPart name="PixelForwardNippleEpoxyBody" category="cooling"> + <rSolid name="PixelForwardNippleEpoxyBody"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_AgEpoxy"/> + </LogicalPart> + <LogicalPart name="PixelForwardNippleSleeveCoolant" category="cooling"> + <rSolid name="PixelForwardNippleSleeveCoolant"/> + <rMaterial name="pixfwdMaterials:PixelForwardCoolant"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="Sleeve"> + <PosPart copyNumber="1"> + <rParent name="PixelForwardNippleZPlus"/> + <rChild name="PixelForwardNippleSleeve"/> + <Translation x="0." y="0." z="-[JK]/2 + [L02] - [L06] + [L04]/2"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="PixelForwardNippleZMinus"/> + <rChild name="PixelForwardNippleSleeve"/> + <Translation x="0." y="0." z="-[JK]/2 + [L02] - [L06] + [L04]/2"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardNippleSleeve"/> + <rChild name="PixelForwardNippleEpoxyCover"/> + <Translation x="0." y="0." z="-[L04]/2 + [L06]/2"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardNippleSleeve"/> + <rChild name="PixelForwardNippleEpoxyBody"/> + <Translation x="0." y="0." z="[L04]/2 - [L05]/2"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardNippleSleeve"/> + <rChild name="PixelForwardNippleSleeveCoolant"/> + </PosPart> + </PosPartSection> + <!-- Cover side : --> + <ConstantsSection label="Cover" eval="true"> + <Constant name="e02" value="([L02]-[L06])/2"/> + <!-- Half length of cover side --> + </ConstantsSection> + <SolidSection label="Cover"> + <Tubs name="PixelForwardNippleCover_01" rMin="0.*mm" rMax="[R05]" dz="[e02]" startPhi="0." deltaPhi="360*deg"/> + <Tubs name="PixelForwardNippleCoverCoolant_01" rMin="0.*mm" rMax="[R04]" dz="[e02]" startPhi="0." deltaPhi="360*deg"/> + <SubtractionSolid name="PixelForwardNippleCoverZPlus"> + <rSolid name="PixelForwardNippleCover_01"/> + <rSolid name="PixelForwardNippleSubtract"/> + <Translation x="0." y="0." z="-[e02]-[DeltaCover]"/> + <rRotation name="NippleToCoverZPlus"/> + </SubtractionSolid> + <SubtractionSolid name="PixelForwardNippleCoverCoolantZPlus"> + <rSolid name="PixelForwardNippleCoverCoolant_01"/> + <rSolid name="PixelForwardNippleSubtract"/> + <Translation x="0." y="0." z="-[e02]-[DeltaCover]"/> + <rRotation name="NippleToCoverZPlus"/> + </SubtractionSolid> + <SubtractionSolid name="PixelForwardNippleCoverZMinus"> + <rSolid name="PixelForwardNippleCover_01"/> + <rSolid name="PixelForwardNippleSubtract"/> + <Translation x="0." y="0." z="-[e02]-[DeltaCover]"/> + <rRotation name="NippleToCoverZMinus"/> + </SubtractionSolid> + <SubtractionSolid name="PixelForwardNippleCoverCoolantZMinus"> + <rSolid name="PixelForwardNippleCoverCoolant_01"/> + <rSolid name="PixelForwardNippleSubtract"/> + <Translation x="0." y="0." z="-[e02]-[DeltaCover]"/> + <rRotation name="NippleToCoverZMinus"/> + </SubtractionSolid> + </SolidSection> + <LogicalPartSection label="Cover"> + <LogicalPart name="PixelForwardNippleCoverZPlus" category="cooling"> + <rSolid name="PixelForwardNippleCoverZPlus"/> + <rMaterial name="trackermaterial:T_Aluminium"/> + </LogicalPart> + <LogicalPart name="PixelForwardNippleCoverCoolantZPlus" category="cooling"> + <rSolid name="PixelForwardNippleCoverCoolantZPlus"/> + <rMaterial name="pixfwdMaterials:PixelForwardCoolant"/> + </LogicalPart> + <LogicalPart name="PixelForwardNippleCoverZMinus" category="cooling"> + <rSolid name="PixelForwardNippleCoverZMinus"/> + <rMaterial name="trackermaterial:T_Aluminium"/> + </LogicalPart> + <LogicalPart name="PixelForwardNippleCoverCoolantZMinus" category="cooling"> + <rSolid name="PixelForwardNippleCoverCoolantZMinus"/> + <rMaterial name="pixfwdMaterials:PixelForwardCoolant"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="Cover"> + <PosPart copyNumber="1"> + <rParent name="PixelForwardNippleZPlus"/> + <rChild name="PixelForwardNippleCoverZPlus"/> + <Translation x="0." y="0." z="-[JK]/2 + [e02]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardNippleCoverZPlus"/> + <rChild name="PixelForwardNippleCoverCoolantZPlus"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardNippleZMinus"/> + <rChild name="PixelForwardNippleCoverZMinus"/> + <Translation x="0." y="0." z="-[JK]/2 + [e02]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardNippleCoverZMinus"/> + <rChild name="PixelForwardNippleCoverCoolantZMinus"/> + </PosPart> + </PosPartSection> + <!-- Body side : --> + <ConstantsSection label="Body" eval="true"> + <Constant name="e03" value="([JK]-[e02]*2-[L04])/2"/> + <!--Half length of body side --> + </ConstantsSection> + <SolidSection label="Body"> + <Tubs name="PixelForwardNippleBody_01" rMin="0.*mm" rMax="[R02]" dz="[e03]" startPhi="0." deltaPhi="360*deg"/> + <Tubs name="PixelForwardNippleBodyCoolant_01" rMin="0.*mm" rMax="[R01]" dz="[e03]" startPhi="0." deltaPhi="360*deg"/> + <SubtractionSolid name="PixelForwardNippleBodyZPlus"> + <rSolid name="PixelForwardNippleBody_01"/> + <rSolid name="PixelForwardNippleSubtract"/> + <Translation x="0." y="0." z="[e03]+[DeltaBody]"/> + <rRotation name="NippleToBodyZPlus"/> + </SubtractionSolid> + <SubtractionSolid name="PixelForwardNippleBodyCoolantZPlus"> + <rSolid name="PixelForwardNippleBodyCoolant_01"/> + <rSolid name="PixelForwardNippleSubtract"/> + <Translation x="0." y="0." z="[e03]+[DeltaBody]"/> + <rRotation name="NippleToBodyZPlus"/> + </SubtractionSolid> + <SubtractionSolid name="PixelForwardNippleBodyZMinus"> + <rSolid name="PixelForwardNippleBody_01"/> + <rSolid name="PixelForwardNippleSubtract"/> + <Translation x="0." y="0." z="[e03]+[DeltaBody]"/> + <rRotation name="NippleToBodyZMinus"/> + </SubtractionSolid> + <SubtractionSolid name="PixelForwardNippleBodyCoolantZMinus"> + <rSolid name="PixelForwardNippleBodyCoolant_01"/> + <rSolid name="PixelForwardNippleSubtract"/> + <Translation x="0." y="0." z="[e03]+[DeltaBody]"/> + <rRotation name="NippleToBodyZMinus"/> + </SubtractionSolid> + </SolidSection> + <LogicalPartSection label="Body"> + <LogicalPart name="PixelForwardNippleBodyZPlus" category="cooling"> + <rSolid name="PixelForwardNippleBodyZPlus"/> + <rMaterial name="trackermaterial:T_Aluminium"/> + </LogicalPart> + <LogicalPart name="PixelForwardNippleBodyCoolantZPlus" category="cooling"> + <rSolid name="PixelForwardNippleBodyCoolantZPlus"/> + <rMaterial name="pixfwdMaterials:PixelForwardCoolant"/> + </LogicalPart> + <LogicalPart name="PixelForwardNippleBodyZMinus" category="cooling"> + <rSolid name="PixelForwardNippleBodyZMinus"/> + <rMaterial name="trackermaterial:T_Aluminium"/> + </LogicalPart> + <LogicalPart name="PixelForwardNippleBodyCoolantZMinus" category="cooling"> + <rSolid name="PixelForwardNippleBodyCoolantZMinus"/> + <rMaterial name="pixfwdMaterials:PixelForwardCoolant"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="BodyPlus"> + <PosPart copyNumber="1"> + <rParent name="PixelForwardNippleZPlus"/> + <rChild name="PixelForwardNippleBodyZPlus"/> + <Translation x="0." y="0." z="[JK]/2 - [e03]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardNippleBodyZPlus"/> + <rChild name="PixelForwardNippleBodyCoolantZPlus"/> + </PosPart> + </PosPartSection> + <PosPartSection label="BodyMinus"> + <PosPart copyNumber="1"> + <rParent name="PixelForwardNippleZMinus"/> + <rChild name="PixelForwardNippleBodyZMinus"/> + <Translation x="0." y="0." z="[JK]/2 - [e03]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardNippleBodyZMinus"/> + <rChild name="PixelForwardNippleBodyCoolantZMinus"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/pixfwdPanel.xml b/examples/DDCMS/data/pixfwdPanel.xml new file mode 100644 index 000000000..7ff4bff90 --- /dev/null +++ b/examples/DDCMS/data/pixfwdPanel.xml @@ -0,0 +1,202 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <!-- + + == CMS Forward Pixels Geometry == + + @version 3.02.01 May 30, 2006 + @created Dmitry Onoprienko + @modified Vesna Cuplov (to Fix overlaps 04.17.07) + + == Subsystem or component described by the file == + + A panel that includes a base and three or four sensor plaquettes mounted on it. + Every blade will have two such panels, one on each side. + + == Root volume and its reference frame == + + Four types of panels are defined : + + PixelForwardPanel3Right - right 3-plaquette panel (3RX on the drawings) + PixelForwardPanel3Left - left 3-plaquette panel (3LX on the drawings) + PixelForwardPanel4Right - right 4-plaquette panel (4RX on the drawings) + PixelForwardPanel4Left - left 3-plaquette panel (4LX on the drawings) + + Y is along the axis of the panel, points from narrow to wide end. + X is in the plane of the panel, ear is on X-positive side for "right" panels. + Z is perpendicular to the plane of the panel, points to plaquettes side. + + == Positioning == + + The file defines AnchorX, AnchorY, and AnchorZ + constants that describe the coordinates of the anchor point in the panel + root volume (PixelForwardPanelXXX) reference frame. + Currently, [AnchorX] = [AnchorZ] = 0. + + --> + <ConstantsSection label="Input" eval="true"> + <!-- Y-coordinates of active centers of sensors with respect to ancor point ((0.,0.) on the drawing) --> + <Constant name="ACp3y1" value="19.469*mm"/> + <Constant name="ACp3y2" value="48.777*mm"/> + <Constant name="ACp3y3" value="78.091*mm"/> + <Constant name="ACp4y1" value="7.664*mm"/> + <Constant name="ACp4y2" value="32.394*mm"/> + <Constant name="ACp4y3" value="61.128*mm"/> + <Constant name="ACp4y4" value="85.869*mm"/> + </ConstantsSection> + <ConstantsSection label="Common" eval="true"> + <Constant name="RootHalfWidth" value="[pixfwdPanelBase:RootHalfWidth]"/> + <Constant name="RootHalfLength" value="[pixfwdPanelBase:RootHalfLength]"/> + <Constant name="RootHalfThickness" value="[pixfwdPlaq:PlaquetteT]/2.+[pixfwdPanelBase:RootHalfThickness]"/> + <Constant name="zPanel" value="-[pixfwdPlaq:PlaquetteT]/2."/> + <Constant name="zPlaquette" value="[pixfwdPanelBase:RootHalfThickness]"/> + <!-- Coordinates of the ancor point ((0.,0.) on the drawing) in the Root (PixelForwardPanel<ХХХ>) frame --> + <Constant name="AnchorX" value="0.*mm"/> + <Constant name="AnchorY" value="[pixfwdPanelBase:AnchorY]"/> + <Constant name="AnchorZ" value="0.*mm"/> + <Constant name="EarWidth" value="[pixfwdPanelBase:EarWidth]"/> + <Constant name="EarLength" value="[pixfwdPanelBase:EarLength]"/> + <Constant name="MainHalfWidthBottom" value="[pixfwdPanelBase:MainHalfWidthBottom]"/> + <Constant name="MainHalfWidthTop" value="[pixfwdPanelBase:MainHalfWidthTop]"/> + <Constant name="PanelAngle" value="[pixfwdPanelBase:PanelAngle]"/> + <Constant name="MainLength" value="[pixfwdPanelBase:]MainLength"/> + <Constant name="NoseLength" value="[pixfwdPanelBase:]NoseLength"/> + </ConstantsSection> + <!-- Root volumes for 4 types panels --> + <!-- previous description (D. Onoprienko) + <SolidSection label="Root"> + <Box name="PixelForwardPanel" dx="[RootHalfWidth]" dy="[RootHalfLength]" dz="[RootHalfThickness]" /> + </SolidSection> + --> + <!-- New description (april 2007): As for the PanelBase, I used a trapezoid for the main panel volume and a second trapezoid for the part made of the ear --> + <SolidSection label="Root"> + <Trapezoid name="PixelForwardPanelMain" dz="[RootHalfThickness]" bl1="[MainHalfWidthBottom]+4.0*mm" bl2="[MainHalfWidthBottom]+4.0*mm" tl1="[MainHalfWidthTop]+4.0*mm" tl2="[MainHalfWidthTop]+4.0*mm" h1="[MainLength]/2.+[NoseLength]/2." h2="[MainLength]/2.+[NoseLength]/2." alp1="0.0" alp2="0.0" phi="90*deg"/> + <Trapezoid name="PixelForwardPanelEar" dz="[RootHalfThickness]" bl1="[MainHalfWidthBottom]+[EarWidth]/2.+12.0*mm" bl2="[MainHalfWidthBottom]+[EarWidth]/2.+12.0*mm" tl1="[MainHalfWidthTop]+[EarWidth]/2.+4.0*mm" tl2="[MainHalfWidthTop]+[EarWidth]/2.+4.0*mm" h1="[EarLength]/2.+3.0*mm" h2="[EarLength]/2.+3.0*mm" alp1="0.0" alp2="0.0" phi="90*deg"/> + <UnionSolid name="PixelForwardPanel"> + <rSolid name="PixelForwardPanelMain"/> + <rSolid name="PixelForwardPanelEar"/> + <Translation x="0." y="29.0" z="0."/> + </UnionSolid> + </SolidSection> + <LogicalPartSection label="Root"> + <LogicalPart name="PixelForwardPanel3Right" category="envelope"> + <rSolid name="PixelForwardPanel"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="PixelForwardPanel3Left" category="envelope"> + <rSolid name="PixelForwardPanel"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="PixelForwardPanel4Right" category="envelope"> + <rSolid name="PixelForwardPanel"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="PixelForwardPanel4Left" category="envelope"> + <rSolid name="PixelForwardPanel"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="Root"> + <!-- Panel 3 Right --> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPanel3Right"/> + <rChild name="pixfwdPanelBase:PixelForwardPanelBase"/> + <Translation x="0." y="0." z="[zPanel]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPanel3Right"/> + <rChild name="pixfwdPlaq2x3:PixelForwardPlaquette2x3Up"/> + <Translation x="[AnchorX]-[pixfwdPlaq2x3:AnchorX]" y="[AnchorY]+[ACp3y1]-[pixfwdPlaq2x3:AnchorY]" z="[zPlaquette]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPanel3Right"/> + <rChild name="pixfwdPlaq2x4:PixelForwardPlaquette2x4Up"/> + <Translation x="[AnchorX]-[pixfwdPlaq2x4:AnchorX]" y="[AnchorY]+[ACp3y2]-[pixfwdPlaq2x4:AnchorY]" z="[zPlaquette]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPanel3Right"/> + <rChild name="pixfwdPlaq2x5:PixelForwardPlaquette2x5Up"/> + <Translation x="[AnchorX]-[pixfwdPlaq2x5:AnchorX]" y="[AnchorY]+[ACp3y3]-[pixfwdPlaq2x5:AnchorY]" z="[zPlaquette]"/> + </PosPart> + <!-- Panel 3 Left --> + <PosPart copyNumber="2"> + <rParent name="PixelForwardPanel3Left"/> + <rChild name="pixfwdPanelBase:PixelForwardPanelBase"/> + <Translation x="0." y="0." z="[zPanel]"/> + <rReflectionRotation name="pixfwdCommon:ReflectionX"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPanel3Left"/> + <rChild name="pixfwdPlaq2x3:PixelForwardPlaquette2x3Down"/> + <Translation x="[AnchorX]+[pixfwdPlaq2x3:AnchorX]" y="[AnchorY]+[ACp3y1]+[pixfwdPlaq2x3:AnchorY]" z="[zPlaquette]"/> + <rRotation name="pixfwdCommon:Z180"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPanel3Left"/> + <rChild name="pixfwdPlaq2x4:PixelForwardPlaquette2x4Down"/> + <Translation x="[AnchorX]+[pixfwdPlaq2x4:AnchorX]" y="[AnchorY]+[ACp3y2]+[pixfwdPlaq2x4:AnchorY]" z="[zPlaquette]"/> + <rRotation name="pixfwdCommon:Z180"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPanel3Left"/> + <rChild name="pixfwdPlaq2x5:PixelForwardPlaquette2x5Down"/> + <Translation x="[AnchorX]+[pixfwdPlaq2x5:AnchorX]" y="[AnchorY]+[ACp3y3]+[pixfwdPlaq2x5:AnchorY]" z="[zPlaquette]"/> + <rRotation name="pixfwdCommon:Z180"/> + </PosPart> + <!-- Panel 4 Right --> + <PosPart copyNumber="3"> + <rParent name="PixelForwardPanel4Right"/> + <rChild name="pixfwdPanelBase:PixelForwardPanelBase"/> + <Translation x="0." y="0." z="[zPanel]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPanel4Right"/> + <rChild name="pixfwdPlaq1x2:PixelForwardPlaquette1x2Right"/> + <Translation x="[AnchorX]-[pixfwdPlaq1x2:AnchorXRight]" y="[AnchorY]+[ACp4y1]-[pixfwdPlaq1x2:AnchorY]" z="[zPlaquette]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="PixelForwardPanel4Right"/> + <rChild name="pixfwdPlaq2x3:PixelForwardPlaquette2x3Down"/> + <Translation x="[AnchorX]-[pixfwdPlaq2x3:AnchorX]" y="[AnchorY]+[ACp4y2]-[pixfwdPlaq2x3:AnchorY]" z="[zPlaquette]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="PixelForwardPanel4Right"/> + <rChild name="pixfwdPlaq2x4:PixelForwardPlaquette2x4Down"/> + <Translation x="[AnchorX]-[pixfwdPlaq2x4:AnchorX]" y="[AnchorY]+[ACp4y3]-[pixfwdPlaq2x4:AnchorY]" z="[zPlaquette]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPanel4Right"/> + <rChild name="pixfwdPlaq1x5:PixelForwardPlaquette1x5Left"/> + <Translation x="[AnchorX]-[pixfwdPlaq1x5:AnchorXLeft]" y="[AnchorY]+[ACp4y4]-[pixfwdPlaq1x5:AnchorY]" z="[zPlaquette]"/> + </PosPart> + <!-- Panel 4 Left --> + <PosPart copyNumber="4"> + <rParent name="PixelForwardPanel4Left"/> + <rChild name="pixfwdPanelBase:PixelForwardPanelBase"/> + <Translation x="0." y="0." z="[zPanel]"/> + <rReflectionRotation name="pixfwdCommon:ReflectionX"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPanel4Left"/> + <rChild name="pixfwdPlaq1x2:PixelForwardPlaquette1x2Left"/> + <Translation x="[AnchorX]-[pixfwdPlaq1x2:AnchorXLeft]" y="[AnchorY]+[ACp4y1]-[pixfwdPlaq1x2:AnchorY]" z="[zPlaquette]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="PixelForwardPanel4Left"/> + <rChild name="pixfwdPlaq2x3:PixelForwardPlaquette2x3Up"/> + <Translation x="[AnchorX]+[pixfwdPlaq2x3:AnchorX]" y="[AnchorY]+[ACp4y2]+[pixfwdPlaq2x3:AnchorY]" z="[zPlaquette]"/> + <rRotation name="pixfwdCommon:Z180"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="PixelForwardPanel4Left"/> + <rChild name="pixfwdPlaq2x4:PixelForwardPlaquette2x4Up"/> + <Translation x="[AnchorX]+[pixfwdPlaq2x4:AnchorX]" y="[AnchorY]+[ACp4y3]+[pixfwdPlaq2x4:AnchorY]" z="[zPlaquette]"/> + <rRotation name="pixfwdCommon:Z180"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPanel4Left"/> + <rChild name="pixfwdPlaq1x5:PixelForwardPlaquette1x5Right"/> + <Translation x="[AnchorX]-[pixfwdPlaq1x5:AnchorXRight]" y="[AnchorY]+[ACp4y4]-[pixfwdPlaq1x5:AnchorY]" z="[zPlaquette]"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/pixfwdPanelBase.xml b/examples/DDCMS/data/pixfwdPanelBase.xml new file mode 100644 index 000000000..f57291ff5 --- /dev/null +++ b/examples/DDCMS/data/pixfwdPanelBase.xml @@ -0,0 +1,301 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <!-- + + == CMS Forward Pixels Geometry == + + @version 3.02.01 May 30, 2006 + @created Victoria Martin + @modified Dmitry Onoprienko + @modified Vesna Cuplov (fixing overlaps in panels 04.17.07) + + == Subsystem or component described by the file == + + Beryllium panel with HDI (no plaquettes). + + == Root volume and its reference frame == + + Root volume : PixelForwardPanelBase + + Y is along the axis of the panel, points from narrow to wide end + X is in the plane of the panel, ear is on X-positive side + Z is perpendicular to the panel, points to VHDI side. + + == Positioning == + + The file defines AnchorX, AnchorY, and AnchorZ + constants that describe the coordinates of the anchor point in the panel base + root volume (PixelForwardPanelBase) reference frame. + Currently, [AnchorX] = [AnchorZ] = 0. + + --> + <ConstantsSection label="Input" eval="true"> + <!-- These constants are taken from the design drawings of 3-R Panel dated 14 Oct 05 + X and Y here correspond to Y and -X on the drawing --> + <Constant name="Y1" value="-1.500*mm"/> + <Constant name="Y2" value="3.071*mm"/> + <Constant name="Y3" value="4.196*mm"/> + <Constant name="Y4" value="55.452*mm"/> + <Constant name="Y5" value="62.390*mm"/> + <Constant name="Y6" value="62.420*mm"/> + <Constant name="Y7" value="87.440*mm"/> + <Constant name="Y8" value="86.713*mm"/> + <Constant name="Y9" value="92.417*mm"/> + <Constant name="Y10" value="94.500*mm"/> + <Constant name="Y11" value="96.250*mm"/> + <Constant name="Y12" value="102.000*mm"/> + <Constant name="X1" value="-26.293*mm"/> + <Constant name="X2" value="-23.000*mm"/> + <Constant name="X3" value="-15.059*mm"/> + <Constant name="X4" value="2.500*mm"/> + <Constant name="X5" value="7.500*mm"/> + <Constant name="X6" value="10.095*mm"/> + <Constant name="X7" value="10.895*mm"/> + <Constant name="X8" value="18.150*mm"/> + <Constant name="X9" value="26.100*mm"/> + <Constant name="X10" value="34.376*mm"/> + <Constant name="BeThickness" value="0.508*mm"/> + <Constant name="HDIThickness" value="0.191*mm"/> + <Constant name="FilmThickness" value="0.051*mm"/> + <Constant name="TanPanelAngle" value="([X3]-[X1])/([Y8]-[Y2])"/> + <Constant name="PanelAngle" value="atan([TanPanelAngle])"/> + </ConstantsSection> + <ConstantsSection label="Common" eval="true"> + <Constant name="RootHalfThickness" value="([BeThickness]+[HDIThickness]+[FilmThickness])/2."/> + <Constant name="RootHalfLength" value="([Y9]-[Y1])/2."/> + <Constant name="RootHalfWidth" value="[X10]"/> + <!-- Coordinates of the anchor point ((0.,0.) on the drawing) in the Root (PixelForwardPanelBase) frame --> + <Constant name="AnchorX" value="0.*mm"/> + <Constant name="AnchorY" value="-[RootHalfLength]-[Y1]"/> + <Constant name="AnchorZ" value="0.*mm"/> + <!-- Z-positions of layers --> + <Constant name="zBe" value="-([HDIThickness]+[FilmThickness])/2."/> + <Constant name="zFilm" value="([BeThickness]-[HDIThickness])/2."/> + <Constant name="zHDI" value="([BeThickness]+[FilmThickness])/2."/> + <Constant name="EarWidth" value="[X10]+[X3]-([Y7]-[Y2])*[TanPanelAngle]"/> + <Constant name="EarLength" value="[Y7]-[Y6]"/> + </ConstantsSection> + <!-- Root volume for the panel and its layers (Be, Film, HDI) --> + <!--previous description (D. Onoprienko) + <SolidSection label="Root"> + <Box name="PixelForwardPanelBase" dx="[RootHalfWidth]" dy="[RootHalfLength]" dz="[RootHalfThickness]" /> + <Box name="PixelForwardPanelBaseBe" dx="[RootHalfWidth]" dy="[RootHalfLength]" dz="[BeThickness]/2." /> + <Box name="PixelForwardPanelBaseFilm" dx="[RootHalfWidth]" dy="[RootHalfLength]" dz="[FilmThickness]/2." /> + <Box name="PixelForwardPanelBaseHDI" dx="[RootHalfWidth]" dy="[RootHalfLength]" dz="[HDIThickness]/2." /> + </SolidSection> + --> + <!-- New Description (april 2007): I used a Trapezoid for the main part of the panel and added a trapezoid for the part made of the panel ear --> + <SolidSection label="Root"> + <Trapezoid name="PixelForwardPanelBaseMain" dz="[RootHalfThickness]" bl1="[MainHalfWidthBottom]+4.0*mm" bl2="[MainHalfWidthBottom]+4.0*mm" tl1="[MainHalfWidthTop]+4.0*mm" tl2="[MainHalfWidthTop]+4.0*mm" h1="[MainLength]/2.+[NoseLength]/2." h2="[MainLength]/2.+[NoseLength]/2." alp1="0.0" alp2="0.0" phi="90*deg"/> + <Trapezoid name="PixelForwardPanelBaseEar" dz="[RootHalfThickness]" bl1="[MainHalfWidthBottom]+[EarWidth]/2.+12.0*mm" bl2="[MainHalfWidthBottom]+[EarWidth]/2.+12.0*mm" tl1="[MainHalfWidthTop]+[EarWidth]/2.+4.0*mm" tl2="[MainHalfWidthTop]+[EarWidth]/2.+4.0*mm" h1="[EarLength]/2.+3.0*mm" h2="[EarLength]/2.+3.0*mm" alp1="0.0" alp2="0.0" phi="90*deg"/> + <UnionSolid name="PixelForwardPanelBase"> + <rSolid name="PixelForwardPanelBaseMain"/> + <rSolid name="PixelForwardPanelBaseEar"/> + <Translation x="0." y="29.0" z="0."/> + </UnionSolid> + <Trapezoid name="PixelForwardPanelBaseBeMain" dz="[BeThickness]/2." bl1="[MainHalfWidthBottom]+4.0*mm" bl2="[MainHalfWidthBottom]+4.0*mm" tl1="[MainHalfWidthTop]+4.0*mm" tl2="[MainHalfWidthTop]+4.0*mm" h1="[MainLength]/2.+[NoseLength]/2." h2="[MainLength]/2.+[NoseLength]/2." alp1="0.0" alp2="0.0" phi="90*deg"/> + <Trapezoid name="PixelForwardPanelBaseBeEar" dz="[BeThickness]/2." bl1="[MainHalfWidthBottom]+[EarWidth]/2.+12.0*mm" bl2="[MainHalfWidthBottom]+[EarWidth]/2.+12.0*mm" tl1="[MainHalfWidthTop]+[EarWidth]/2.+4.0*mm" tl2="[MainHalfWidthTop]+[EarWidth]/2.+4.0*mm" h1="[EarLength]/2.+3.0*mm" h2="[EarLength]/2.+3.0*mm" alp1="0.0" alp2="0.0" phi="90*deg"/> + <UnionSolid name="PixelForwardPanelBaseBe"> + <rSolid name="PixelForwardPanelBaseBeMain"/> + <rSolid name="PixelForwardPanelBaseBeEar"/> + <Translation x="0." y="29.0" z="0."/> + </UnionSolid> + <Trapezoid name="PixelForwardPanelBaseFilmMain" dz="[FilmThickness]/2." bl1="[MainHalfWidthBottom]+4.0*mm" bl2="[MainHalfWidthBottom]+4.0*mm" tl1="[MainHalfWidthTop]+4.0*mm" tl2="[MainHalfWidthTop]+4.0*mm" h1="[MainLength]/2.+[NoseLength]/2." h2="[MainLength]/2.+[NoseLength]/2." alp1="0.0" alp2="0.0" phi="90*deg"/> + <Trapezoid name="PixelForwardPanelBaseFilmEar" dz="[FilmThickness]/2." bl1="[MainHalfWidthBottom]+[EarWidth]/2.+12.0*mm" bl2="[MainHalfWidthBottom]+[EarWidth]/2.+12.0*mm" tl1="[MainHalfWidthTop]+[EarWidth]/2.+4.0*mm" tl2="[MainHalfWidthTop]+[EarWidth]/2.+4.0*mm" h1="[EarLength]/2.+3.0*mm" h2="[EarLength]/2.+3.0*mm" alp1="0.0" alp2="0.0" phi="90*deg"/> + <UnionSolid name="PixelForwardPanelBaseFilm"> + <rSolid name="PixelForwardPanelBaseFilmMain"/> + <rSolid name="PixelForwardPanelBaseFilmEar"/> + <Translation x="0." y="29.0" z="0."/> + </UnionSolid> + <Trapezoid name="PixelForwardPanelBaseHDIMain" dz="[HDIThickness]/2." bl1="[MainHalfWidthBottom]+4.0*mm" bl2="[MainHalfWidthBottom]+4.0*mm" tl1="[MainHalfWidthTop]+4.0*mm" tl2="[MainHalfWidthTop]+4.0*mm" h1="[MainLength]/2.+[NoseLength]/2." h2="[MainLength]/2.+[NoseLength]/2." alp1="0.0" alp2="0.0" phi="90*deg"/> + <Trapezoid name="PixelForwardPanelBaseHDIEar" dz="[HDIThickness]/2." bl1="[MainHalfWidthBottom]+[EarWidth]/2.+12.0*mm" bl2="[MainHalfWidthBottom]+[EarWidth]/2.+12.0*mm" tl1="[MainHalfWidthTop]+[EarWidth]/2.+4.0*mm" tl2="[MainHalfWidthTop]+[EarWidth]/2.+4.0*mm" h1="[EarLength]/2.+3.0*mm" h2="[EarLength]/2.+3.0*mm" alp1="0.0" alp2="0.0" phi="90*deg"/> + <UnionSolid name="PixelForwardPanelBaseHDI"> + <rSolid name="PixelForwardPanelBaseHDIMain"/> + <rSolid name="PixelForwardPanelBaseHDIEar"/> + <Translation x="0." y="29.0" z="0."/> + </UnionSolid> + </SolidSection> + <LogicalPartSection label="Root"> + <LogicalPart name="PixelForwardPanelBase" category="envelope"> + <rSolid name="PixelForwardPanelBase"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="PixelForwardPanelBaseBe" category="envelope"> + <rSolid name="PixelForwardPanelBaseBe"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="PixelForwardPanelBaseFilm" category="envelope"> + <rSolid name="PixelForwardPanelBaseFilm"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="PixelForwardPanelBaseHDI" category="envelope"> + <rSolid name="PixelForwardPanelBaseHDI"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="Root"> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPanelBase"/> + <rChild name="PixelForwardPanelBaseBe"/> + <Translation x="0." y="0." z="[zBe]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPanelBase"/> + <rChild name="PixelForwardPanelBaseFilm"/> + <Translation x="0." y="0." z="[zFilm]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPanelBase"/> + <rChild name="PixelForwardPanelBaseHDI"/> + <Translation x="0." y="0." z="[zHDI]"/> + </PosPart> + </PosPartSection> + <ConstantsSection label="Parts" eval="true"> + <!-- Shapes --> + <Constant name="TanNoseAngle" value="([Y3]-[Y1])/([X8]-[X4])"/> + <Constant name="NoseAngle" value="atan([TanNoseAngle])"/> + <Constant name="MainLength" value="([Y9]-[Y2])"/> + <Constant name="MainHalfWidthBottom" value="-[X3]"/> + <Constant name="MainHalfWidthTop" value="-[X3]+[MainLength]*[TanPanelAngle]"/> + <Constant name="NoseLength" value="([Y2]-[Y1])"/> + <Constant name="NoseHalfWidthBottom" value="[X4]"/> + <Constant name="NoseHalfWidthTop" value="-[X3]"/> + <Constant name="ExtentionWidth" value="[X8]+[X3]-([Y3]-[Y2])*[TanPanelAngle]"/> + <Constant name="ExtentionHeight" value="[ExtentionWidth]*cos([PanelAngle])"/> + <Constant name="ExtentionSide" value="([Y6]-[Y2])/cos([PanelAngle])"/> + <!-- Positioning --> + <Constant name="earY" value="[Y6]+[EarLength]/2."/> + <Constant name="earX" value="-[X3]+([earY]-[Y2])*[TanPanelAngle]+[EarWidth]/2."/> + <Constant name="extentionX" value="(-[EarWidth]-([Y7]-[Y2])*[TanPanelAngle]+([X8]+[X3]))/2."/> + <Constant name="extentionY" value="(-[Y7]+[Y3])/2."/> + </ConstantsSection> + <RotationSection label="Parts"> + <Rotation name="ExtentionRot" phiX="90.*deg-[PanelAngle]" thetaX="90.*deg" phiY="180.*deg-[PanelAngle]" thetaY="90.*deg" phiZ="0." thetaZ="0."/> + </RotationSection> + <SolidSection label="Parts"> + <!-- Beryllium --> + <Trapezoid name="PixelForwardPanelBaseMainBe" dz="[BeThickness]/2." bl1="[MainHalfWidthBottom]" bl2="[MainHalfWidthBottom]" tl1="[MainHalfWidthTop]" tl2="[MainHalfWidthTop]" h1="[MainLength]/2." h2="[MainLength]/2." alp1="0.0" alp2="0.0" phi="90*deg"/> + <Trapezoid name="PixelForwardPanelBaseNoseBe" dz="[BeThickness]/2." bl1="[NoseHalfWidthBottom]" bl2="[NoseHalfWidthBottom]" tl1="[NoseHalfWidthTop]" tl2="[NoseHalfWidthTop]" h1="[NoseLength]/2." h2="[NoseLength]/2." alp1="0.0" alp2="0.0" phi="90*deg"/> + <Trapezoid name="PixelForwardPanelBaseEarBe_01" dz="[BeThickness]/2." bl1="[EarWidth]/2." bl2="[EarWidth]/2." tl1="[EarWidth]/2." tl2="[EarWidth]/2." h1="[EarLength]/2." h2="[EarLength]/2." alp1="[PanelAngle]" alp2="[PanelAngle]" phi="90*deg"/> + <Trapezoid name="PixelForwardPanelBaseExtentionBe" dz="[BeThickness]/2." bl1="[ExtentionSide]/2." bl2="[ExtentionSide]/2." tl1="[ExtentionSide]/2." tl2="[ExtentionSide]/2." h1="[ExtentionHeight]/2." h2="[ExtentionHeight]/2." alp1="-[NoseAngle]" alp2="-[NoseAngle]" phi="90*deg"/> + <UnionSolid name="PixelForwardPanelBaseEarBe"> + <rSolid name="PixelForwardPanelBaseEarBe_01"/> + <rSolid name="PixelForwardPanelBaseExtentionBe"/> + <Translation x="[extentionX]" y="[extentionY]" z="0."/> + <rRotation name="ExtentionRot"/> + </UnionSolid> + <!-- Film --> + <Trapezoid name="PixelForwardPanelBaseMainFilm" dz="[FilmThickness]/2." bl1="[MainHalfWidthBottom]" bl2="[MainHalfWidthBottom]" tl1="[MainHalfWidthTop]" tl2="[MainHalfWidthTop]" h1="[MainLength]/2." h2="[MainLength]/2." alp1="0.0" alp2="0.0" phi="90*deg"/> + <Trapezoid name="PixelForwardPanelBaseNoseFilm" dz="[FilmThickness]/2." bl1="[NoseHalfWidthBottom]" bl2="[NoseHalfWidthBottom]" tl1="[NoseHalfWidthTop]" tl2="[NoseHalfWidthTop]" h1="[NoseLength]/2." h2="[NoseLength]/2." alp1="0.0" alp2="0.0" phi="90*deg"/> + <Trapezoid name="PixelForwardPanelBaseEarFilm_01" dz="[FilmThickness]/2." bl1="[EarWidth]/2." bl2="[EarWidth]/2." tl1="[EarWidth]/2." tl2="[EarWidth]/2." h1="[EarLength]/2." h2="[EarLength]/2." alp1="[PanelAngle]" alp2="[PanelAngle]" phi="90*deg"/> + <Trapezoid name="PixelForwardPanelBaseExtentionFilm" dz="[FilmThickness]/2." bl1="[ExtentionSide]/2." bl2="[ExtentionSide]/2." tl1="[ExtentionSide]/2." tl2="[ExtentionSide]/2." h1="[ExtentionHeight]/2." h2="[ExtentionHeight]/2." alp1="-[NoseAngle]" alp2="-[NoseAngle]" phi="90*deg"/> + <UnionSolid name="PixelForwardPanelBaseEarFilm"> + <rSolid name="PixelForwardPanelBaseEarFilm_01"/> + <rSolid name="PixelForwardPanelBaseExtentionFilm"/> + <Translation x="[extentionX]" y="[extentionY]" z="0."/> + <rRotation name="ExtentionRot"/> + </UnionSolid> + <!-- HDI --> + <Trapezoid name="PixelForwardPanelBaseMainHDI" dz="[HDIThickness]/2." bl1="[MainHalfWidthBottom]" bl2="[MainHalfWidthBottom]" tl1="[MainHalfWidthTop]" tl2="[MainHalfWidthTop]" h1="[MainLength]/2." h2="[MainLength]/2." alp1="0.0" alp2="0.0" phi="90*deg"/> + <Trapezoid name="PixelForwardPanelBaseNoseHDI" dz="[HDIThickness]/2." bl1="[NoseHalfWidthBottom]" bl2="[NoseHalfWidthBottom]" tl1="[NoseHalfWidthTop]" tl2="[NoseHalfWidthTop]" h1="[NoseLength]/2." h2="[NoseLength]/2." alp1="0.0" alp2="0.0" phi="90*deg"/> + <Trapezoid name="PixelForwardPanelBaseEarHDI_01" dz="[HDIThickness]/2." bl1="[EarWidth]/2." bl2="[EarWidth]/2." tl1="[EarWidth]/2." tl2="[EarWidth]/2." h1="[EarLength]/2." h2="[EarLength]/2." alp1="[PanelAngle]" alp2="[PanelAngle]" phi="90*deg"/> + <Trapezoid name="PixelForwardPanelBaseExtentionHDI" dz="[HDIThickness]/2." bl1="[ExtentionSide]/2." bl2="[ExtentionSide]/2." tl1="[ExtentionSide]/2." tl2="[ExtentionSide]/2." h1="[ExtentionHeight]/2." h2="[ExtentionHeight]/2." alp1="-[NoseAngle]" alp2="-[NoseAngle]" phi="90*deg"/> + <UnionSolid name="PixelForwardPanelBaseEarHDI"> + <rSolid name="PixelForwardPanelBaseEarHDI_01"/> + <rSolid name="PixelForwardPanelBaseExtentionHDI"/> + <Translation x="[extentionX]" y="[extentionY]" z="0."/> + <rRotation name="ExtentionRot"/> + </UnionSolid> + </SolidSection> + <LogicalPartSection label="Parts"> + <!-- Beryllium --> + <LogicalPart name="PixelForwardPanelBaseMainBe" category="support"> + <rSolid name="PixelForwardPanelBaseMainBe"/> + <rMaterial name="trackermaterial:T_Beryllium"/> + </LogicalPart> + <LogicalPart name="PixelForwardPanelBaseNoseBe" category="support"> + <rSolid name="PixelForwardPanelBaseNoseBe"/> + <rMaterial name="trackermaterial:T_Beryllium"/> + </LogicalPart> + <LogicalPart name="PixelForwardPanelBaseEarBe" category="support"> + <rSolid name="PixelForwardPanelBaseEarBe"/> + <rMaterial name="trackermaterial:T_Beryllium"/> + </LogicalPart> + <!-- Film --> + <LogicalPart name="PixelForwardPanelBaseMainFilm" category="support"> + <rSolid name="PixelForwardPanelBaseMainFilm"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_AdhFilm"/> + </LogicalPart> + <LogicalPart name="PixelForwardPanelBaseNoseFilm" category="support"> + <rSolid name="PixelForwardPanelBaseNoseFilm"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_AdhFilm"/> + </LogicalPart> + <LogicalPart name="PixelForwardPanelBaseEarFilm" category="support"> + <rSolid name="PixelForwardPanelBaseEarFilm"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_AdhFilm"/> + </LogicalPart> + <!-- HDI --> + <LogicalPart name="PixelForwardPanelBaseMainHDI" category="support"> + <rSolid name="PixelForwardPanelBaseMainHDI"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_VHDI"/> + </LogicalPart> + <LogicalPart name="PixelForwardPanelBaseNoseHDI" category="support"> + <rSolid name="PixelForwardPanelBaseNoseHDI"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_VHDI"/> + </LogicalPart> + <LogicalPart name="PixelForwardPanelBaseEarHDI" category="support"> + <rSolid name="PixelForwardPanelBaseEarHDI"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_VHDI"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="Parts"> + <!-- Beryllium --> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPanelBaseBe"/> + <rChild name="PixelForwardPanelBaseMainBe"/> + <Translation x="[AnchorX]" y="[AnchorY]+[Y2]+[MainLength]/2." z="0."/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPanelBaseBe"/> + <rChild name="PixelForwardPanelBaseNoseBe"/> + <Translation x="[AnchorX]" y="[AnchorY]+[Y2]-[NoseLength]/2." z="0."/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPanelBaseBe"/> + <rChild name="PixelForwardPanelBaseEarBe"/> + <Translation x="[AnchorX]+[earX]" y="[AnchorY]+[earY]" z="0."/> + </PosPart> + <!-- Film --> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPanelBaseFilm"/> + <rChild name="PixelForwardPanelBaseMainFilm"/> + <Translation x="[AnchorX]" y="[AnchorY]+[Y2]+[MainLength]/2." z="0."/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPanelBaseFilm"/> + <rChild name="PixelForwardPanelBaseNoseFilm"/> + <Translation x="[AnchorX]" y="[AnchorY]+[Y2]-[NoseLength]/2." z="0."/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPanelBaseFilm"/> + <rChild name="PixelForwardPanelBaseEarFilm"/> + <Translation x="[AnchorX]+[earX]" y="[AnchorY]+[earY]" z="0."/> + </PosPart> + <!-- HDI --> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPanelBaseHDI"/> + <rChild name="PixelForwardPanelBaseMainHDI"/> + <Translation x="[AnchorX]" y="[AnchorY]+[Y2]+[MainLength]/2." z="0."/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPanelBaseHDI"/> + <rChild name="PixelForwardPanelBaseNoseHDI"/> + <Translation x="[AnchorX]" y="[AnchorY]+[Y2]-[NoseLength]/2." z="0."/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPanelBaseHDI"/> + <rChild name="PixelForwardPanelBaseEarHDI"/> + <Translation x="[AnchorX]+[earX]" y="[AnchorY]+[earY]" z="0."/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/pixfwdPlaq.xml b/examples/DDCMS/data/pixfwdPlaq.xml new file mode 100644 index 000000000..afb4bc42e --- /dev/null +++ b/examples/DDCMS/data/pixfwdPlaq.xml @@ -0,0 +1,88 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <!-- + + == CMS Forward Pixels Geometry == + + @version 3.02.01 May 30, 2006 + @created Sunanda Banjeree + @modified Dmitry Onoprienko + + == COMPONENT DEFINED BY THIS FILE: == + + Common parts for all types of plaquettes. + + --> + <!-- Rotations for placing sensors --> + <RotationSection label="PlaquetteCommon"> + <Rotation name="Z90" phiX="90.*deg" thetaX="90.*deg" phiY="180.*deg" thetaY="90.*deg" phiZ="0.*deg" thetaZ="0.*deg"/> + <Rotation name="Z270" phiX="-90.*deg" thetaX="90.*deg" phiY="0.*deg" thetaY="90.*deg" phiZ="0.*deg" thetaZ="0.*deg"/> + </RotationSection> + <ConstantsSection label="Input" eval="true"> + <Constant name="SensorT" value="0.270*mm"/> + <Constant name="BumpT" value="0.025*mm"/> + <Constant name="ROChipT" value="0.200*mm"/> + <Constant name="EpoxyT" value="0.178*mm"/> + <Constant name="FlexCircuitT" value="0.125*mm"/> + <Constant name="AdhFilmT" value="0.051*mm"/> + <Constant name="BackingT" value="0.300*mm"/> + <Constant name="ChoThermT" value="0.178*mm"/> + <Constant name="ROChipW" value="8.005*mm"/> + <!-- Readout chip width --> + <Constant name="ROChipH" value="9.935*mm"/> + <!-- Readout chip height --> + <Constant name="ROChipSpaceW" value="8.100*mm"/> + <!-- Distance (along width) between centers of adjacent chips --> + </ConstantsSection> + <ConstantsSection label="Calculated"> + <!-- Thicknesses of superlayers --> + <Constant name="BumpROChipEpoxyT" value="[BumpT]+[ROChipT]+[EpoxyT]"/> + <Constant name="PassiveT" value="[BumpROChipEpoxyT]+[FlexCircuitT]+[AdhFilmT]+[BackingT]+[ChoThermT]"/> + <Constant name="PlaquetteT" value="[SensorT]+[PassiveT]"/> + <!-- Z-positions of superlayers to be positioned into plaquette root volume --> + <Constant name="SensorZ" value="([PlaquetteT]-[SensorT])/2."/> + <Constant name="PassiveZ" value="(-[PlaquetteT]+[PassiveT])/2."/> + <!-- Z-positions of layers to be positioned into "Passive" layer --> + <Constant name="BumpROChipEpoxyZ" value="([PassiveT]-[BumpROChipEpoxyT])/2."/> + <Constant name="FlexCircuitZ" value="[PassiveT]/2.-[BumpROChipEpoxyT]-[FlexCircuitT]/2."/> + <Constant name="AdhFilmZ" value="[PassiveT]/2.-[BumpROChipEpoxyT]-[FlexCircuitT]-[AdhFilmT]/2."/> + <Constant name="BackingZ" value="[PassiveT]/2.-[BumpROChipEpoxyT]-[FlexCircuitT]-[AdhFilmT]-[BackingT]/2."/> + <Constant name="ChoThermZ" value="(-[PassiveT]+[ChoThermT])/2."/> + </ConstantsSection> + <!-- Readout chip with epoxy and bump bond --> + <ConstantsSection label="BumpROChipCalculated"> + <Constant name="BumpZ" value="([BumpROChipEpoxyT]-[BumpT])/2."/> + <Constant name="EpoxyZ" value="(-[BumpROChipEpoxyT]+[EpoxyT])/2."/> + </ConstantsSection> + <SolidSection label="BumpROChipEpoxy"> + <Box name="PixelForwardBumpROChipEpoxy" dx="[ROChipW]/2." dy="[ROChipH]/2" dz="[BumpROChipEpoxyT]/2."/> + <Box name="PixelForwardBump" dx="[ROChipW]/2." dy="[ROChipH]/2" dz="[BumpT]/2."/> + <Box name="PixelForwardEpoxy" dx="[ROChipW]/2." dy="[ROChipH]/2" dz="[EpoxyT]/2."/> + </SolidSection> + <LogicalPartSection label="BumpROChipEpoxy"> + <LogicalPart name="PixelForwardBumpROChipEpoxy" category="unspecified"> + <rSolid name="PixelForwardBumpROChipEpoxy"/> + <rMaterial name="materials:Silicon"/> + </LogicalPart> + <LogicalPart name="PixelForwardBump" category="unspecified"> + <rSolid name="PixelForwardBump"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_Bump"/> + </LogicalPart> + <LogicalPart name="PixelForwardEpoxy" category="unspecified"> + <rSolid name="PixelForwardEpoxy"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_AgEpoxy"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="BumpROChipEpoxy"> + <PosPart copyNumber="1"> + <rParent name="PixelForwardBumpROChipEpoxy"/> + <rChild name="PixelForwardBump"/> + <Translation x="0.*mm" y="0.*mm" z="[BumpZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardBumpROChipEpoxy"/> + <rChild name="PixelForwardEpoxy"/> + <Translation x="0.*mm" y="0.*mm" z="[EpoxyZ]"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/pixfwdPlaq1x2.xml b/examples/DDCMS/data/pixfwdPlaq1x2.xml new file mode 100644 index 000000000..e1714fe8e --- /dev/null +++ b/examples/DDCMS/data/pixfwdPlaq1x2.xml @@ -0,0 +1,173 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <!-- + + == CMS Forward Pixels Geometry == + + @version 3.02.01 May 30, 2006 + @created Victoria Martin + @modified Dmitry Onoprienko + + == Subsystem or component described by the file == + + 1x2 Plaquette (Left and Right versions). + + == Root volume and its reference frame == + + Root volume : PixelForwardPlaquette1x2Left and PixelForwardPlaquette1x2Right + + Y is in the plane of the plaquette, pointing away from the beam line + Z is perpendicular to the plaquette, pointing to the sensor side + + == Positioning == + + The file defines AnchorXLeft(AnchorXRight) and AnchorY constants that + correspond to the anchor point (aka active center) coordinates in the plaquette + root volume PixelForwardPlaquette1x2Left(PixelForwardPlaquette1x2Right). + + The two root volumes defined by this file contain ........... + + PixelForwardPlaquette1x2Right should be positioned unrotated into "PixelForwardPanel3Right" panel, + and PixelForwardPlaquette1x2Left should be positioned unrotated into "PixelForwardPanel4Left" panel. + + == Additional comments == + + The volume representing the active part of the sensor is placed with 90 degrees + rotation around Z axis to make its local reference frame Y go along the longer side. + + --> + <ConstantsSection label="Input" eval="true"> + <Constant name="PlaquetteW" value="21.358*mm"/> + <Constant name="PlaquetteH" value="15.048*mm"/> + <Constant name="SensorW" value="18.494*mm"/> + <Constant name="SensorH" value="10.394*mm"/> + <Constant name="ActiveW" value="16.200*mm"/> + <Constant name="ActiveH" value="8.100*mm"/> + <Constant name="ROChipX_TopRight" value="3.074*mm"/> + <Constant name="ROChipY_TopRight" value="3.905*mm"/> + <Constant name="ActiveCenterXRight" value="11.137*mm"/> + <Constant name="ActiveCenterXLeft" value="11.116*mm"/> + <Constant name="ActiveCenterY" value="9.833*mm"/> + </ConstantsSection> + <ConstantsSection label="Common" eval="true"> + <Constant name="AnchorXRight" value=" [PlaquetteW]/2.-[ActiveCenterXRight]"/> + <Constant name="AnchorXLeft" value="-[PlaquetteW]/2.+[ActiveCenterXLeft]"/> + <Constant name="AnchorY" value="[PlaquetteH]/2.-[ActiveCenterY]"/> + </ConstantsSection> + <SolidSection label="All"> + <!-- Root volume --> + <Box name="PixelForwardPlaquette1x2" dx="[PlaquetteW]/2." dy="[PlaquetteH]/2." dz="[pixfwdPlaq:PlaquetteT]/2."/> + <!-- Sensor --> + <Box name="PixelForwardSensor1x2" dx="[SensorH]/2." dy="[SensorW]/2" dz="[pixfwdPlaq:SensorT]/2."/> + <Box name="PixelForwardActive1x2" dx="[ActiveH]/2." dy="[ActiveW]/2" dz="[pixfwdPlaq:SensorT]/2."/> + <!-- Passive part --> + <Box name="PixelForwardPassive1x2" dx="[PlaquetteW]/2." dy="[PlaquetteH]/2." dz="[pixfwdPlaq:PassiveT]/2."/> + <Box name="PixelForwardFlexCircuit1x2" dx="[PlaquetteW]/2." dy="[PlaquetteH]/2." dz="[pixfwdPlaq:FlexCircuitT]/2."/> + <Box name="PixelForwardAdhFilm1x2" dx="[PlaquetteW]/2." dy="[PlaquetteH]/2." dz="[pixfwdPlaq:AdhFilmT]/2."/> + <Box name="PixelForwardBacking1x2" dx="[PlaquetteW]/2." dy="[PlaquetteH]/2." dz="[pixfwdPlaq:BackingT]/2."/> + <Box name="PixelForwardChoTherm1x2" dx="[PlaquetteW]/2." dy="[PlaquetteH]/2." dz="[pixfwdPlaq:ChoThermT]/2."/> + </SolidSection> + <LogicalPartSection label="All"> + <!-- Root volumes --> + <LogicalPart name="PixelForwardPlaquette1x2Right" category="envelope"> + <rSolid name="PixelForwardPlaquette1x2"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="PixelForwardPlaquette1x2Left" category="envelope"> + <rSolid name="PixelForwardPlaquette1x2"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <!-- Sensor --> + <LogicalPart name="PixelForwardSensor1x2" category="unspecified"> + <rSolid name="PixelForwardSensor1x2"/> + <rMaterial name="materials:Silicon"/> + </LogicalPart> + <LogicalPart name="PixelForwardActive1x2" category="sensitive"> + <rSolid name="PixelForwardActive1x2"/> + <rMaterial name="materials:Silicon"/> + </LogicalPart> + <!-- Passive part --> + <LogicalPart name="PixelForwardPassive1x2" category="envelope"> + <rSolid name="PixelForwardPassive1x2"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="PixelForwardFlexCircuit1x2" category="unspecified"> + <rSolid name="PixelForwardFlexCircuit1x2"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_VHDI"/> + </LogicalPart> + <LogicalPart name="PixelForwardAdhFilm1x2" category="unspecified"> + <rSolid name="PixelForwardAdhFilm1x2"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_AdhFilm"/> + </LogicalPart> + <LogicalPart name="PixelForwardBacking1x2" category="unspecified"> + <rSolid name="PixelForwardBacking1x2"/> + <rMaterial name="materials:Silicon"/> + </LogicalPart> + <LogicalPart name="PixelForwardChoTherm1x2" category="unspecified"> + <rSolid name="PixelForwardChoTherm1x2"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_AgEpoxy"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="All"> + <!-- Sensor --> + <PosPart copyNumber="1"> + <rParent name="PixelForwardSensor1x2"/> + <rChild name="PixelForwardActive1x2"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPlaquette1x2Right"/> + <rChild name="PixelForwardSensor1x2"/> + <Translation x="[AnchorXRight]" y="[AnchorY]" z="[pixfwdPlaq:SensorZ]"/> + <rRotation name="pixfwdPlaq:Z270"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="PixelForwardPlaquette1x2Left"/> + <rChild name="PixelForwardSensor1x2"/> + <Translation x="[AnchorXLeft]" y="[AnchorY]" z="[pixfwdPlaq:SensorZ]"/> + <rRotation name="pixfwdPlaq:Z270"/> + </PosPart> + <!-- Passive part --> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPlaquette1x2Right"/> + <rChild name="PixelForwardPassive1x2"/> + <Translation x="0.*mm" y="0.*mm" z="[pixfwdPlaq:PassiveZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="PixelForwardPlaquette1x2Left"/> + <rChild name="PixelForwardPassive1x2"/> + <Translation x="0.*mm" y="0.*mm" z="[pixfwdPlaq:PassiveZ]"/> + <rReflectionRotation name="pixfwdCommon:ReflectionX"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPassive1x2"/> + <rChild name="PixelForwardFlexCircuit1x2"/> + <Translation x="0." y="0." z="[pixfwdPlaq:FlexCircuitZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPassive1x2"/> + <rChild name="PixelForwardAdhFilm1x2"/> + <Translation x="0." y="0." z="[pixfwdPlaq:AdhFilmZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPassive1x2"/> + <rChild name="PixelForwardBacking1x2"/> + <Translation x="0." y="0." z="[pixfwdPlaq:BackingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPassive1x2"/> + <rChild name="PixelForwardChoTherm1x2"/> + <Translation x="0." y="0." z="[pixfwdPlaq:ChoThermZ]"/> + </PosPart> + <!-- Readout chips in the passive part --> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPassive1x2"/> + <rChild name="pixfwdPlaq:PixelForwardBumpROChipEpoxy"/> + <Translation x="[PlaquetteW]/2.-[ROChipX_TopRight]-[pixfwdPlaq:ROChipW]/2." y="[PlaquetteH]/2.-[ROChipY_TopRight]-[pixfwdPlaq:ROChipH]/2." z="[pixfwdPlaq:BumpROChipEpoxyZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="PixelForwardPassive1x2"/> + <rChild name="pixfwdPlaq:PixelForwardBumpROChipEpoxy"/> + <Translation x="[PlaquetteW]/2.-[ROChipX_TopRight]-[pixfwdPlaq:ROChipSpaceW]-[pixfwdPlaq:ROChipW]/2." y="[PlaquetteH]/2.-[ROChipY_TopRight]-[pixfwdPlaq:ROChipH]/2." z="[pixfwdPlaq:BumpROChipEpoxyZ]"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/pixfwdPlaq1x5.xml b/examples/DDCMS/data/pixfwdPlaq1x5.xml new file mode 100644 index 000000000..cd09b4f43 --- /dev/null +++ b/examples/DDCMS/data/pixfwdPlaq1x5.xml @@ -0,0 +1,189 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <!-- + + == CMS Forward Pixels Geometry == + + @version 3.02.01 May 30, 2006 + @created Victoria Martin + @modified Dmitry Onoprienko + + == Subsystem or component described by the file == + + 1x5 Plaquette (Left and Right versions). + + == Root volume and its reference frame == + + Root volume : PixelForwardPlaquette1x5Left and PixelForwardPlaquette1x5Right + + Y is in the plane of the plaquette, pointing away from the beam line + Z is perpendicular to the plaquette, pointing to the sensor side + + == Positioning == + + The file defines AnchorXLeft(AnchorXRight) and AnchorY constants that + correspond to the anchor point (aka active center) coordinates in the plaquette + root volume PixelForwardPlaquette1x5Left(PixelForwardPlaquette1x5Right). + + The two root volumes defined by this file contain ........... + + PixelForwardPlaquette1x5Right should be positioned unrotated into "PixelForwardPanel4Left" panel, + and PixelForwardPlaquette1x5Left should be positioned unrotated into "PixelForwardPanel4Right" panel. + (Not a typo - a follow notation from the drawings). + + == Additional comments == + + The volume representing the active part of the sensor is placed with 90 degrees + rotation around Z axis to make its local reference frame Y go along the longer side. + + --> + <ConstantsSection label="Input" eval="true"> + <Constant name="PlaquetteW" value="45.658*mm"/> + <Constant name="PlaquetteH" value="15.048*mm"/> + <Constant name="SensorW" value="42.794*mm"/> + <Constant name="SensorH" value="10.394*mm"/> + <Constant name="ActiveW" value="40.500*mm"/> + <Constant name="ActiveH" value="8.100*mm"/> + <Constant name="ROChipX_BottomLeft" value="42.584*mm"/> + <Constant name="ROChipY_BottomLeft" value="11.143*mm"/> + <Constant name="ActiveCenterXRight" value="22.371*mm"/> + <Constant name="ActiveCenterXLeft" value="23.266*mm"/> + <Constant name="ActiveCenterY" value="9.833*mm"/> + </ConstantsSection> + <ConstantsSection label="Common" eval="true"> + <Constant name="AnchorXRight" value=" [PlaquetteW]/2.-[ActiveCenterXRight]"/> + <Constant name="AnchorXLeft" value=" [PlaquetteW]/2.-[ActiveCenterXLeft]"/> + <Constant name="AnchorY" value="-[PlaquetteH]/2.+[ActiveCenterY]"/> + </ConstantsSection> + <SolidSection label="All"> + <!-- Root volume --> + <Box name="PixelForwardPlaquette1x5" dx="[PlaquetteW]/2." dy="[PlaquetteH]/2." dz="[pixfwdPlaq:PlaquetteT]/2."/> + <!-- Sensor --> + <Box name="PixelForwardSensor1x5" dx="[SensorH]/2." dy="[SensorW]/2" dz="[pixfwdPlaq:SensorT]/2."/> + <Box name="PixelForwardActive1x5" dx="[ActiveH]/2." dy="[ActiveW]/2" dz="[pixfwdPlaq:SensorT]/2."/> + <!-- Passive part --> + <Box name="PixelForwardPassive1x5" dx="[PlaquetteW]/2." dy="[PlaquetteH]/2." dz="[pixfwdPlaq:PassiveT]/2."/> + <Box name="PixelForwardFlexCircuit1x5" dx="[PlaquetteW]/2." dy="[PlaquetteH]/2." dz="[pixfwdPlaq:FlexCircuitT]/2."/> + <Box name="PixelForwardAdhFilm1x5" dx="[PlaquetteW]/2." dy="[PlaquetteH]/2." dz="[pixfwdPlaq:AdhFilmT]/2."/> + <Box name="PixelForwardBacking1x5" dx="[PlaquetteW]/2." dy="[PlaquetteH]/2." dz="[pixfwdPlaq:BackingT]/2."/> + <Box name="PixelForwardChoTherm1x5" dx="[PlaquetteW]/2." dy="[PlaquetteH]/2." dz="[pixfwdPlaq:ChoThermT]/2."/> + </SolidSection> + <LogicalPartSection label="All"> + <!-- Root volumes --> + <LogicalPart name="PixelForwardPlaquette1x5Right" category="envelope"> + <rSolid name="PixelForwardPlaquette1x5"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="PixelForwardPlaquette1x5Left" category="envelope"> + <rSolid name="PixelForwardPlaquette1x5"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <!-- Sensor --> + <LogicalPart name="PixelForwardSensor1x5" category="unspecified"> + <rSolid name="PixelForwardSensor1x5"/> + <rMaterial name="materials:Silicon"/> + </LogicalPart> + <LogicalPart name="PixelForwardActive1x5" category="sensitive"> + <rSolid name="PixelForwardActive1x5"/> + <rMaterial name="materials:Silicon"/> + </LogicalPart> + <!-- Passive part --> + <LogicalPart name="PixelForwardPassive1x5" category="envelope"> + <rSolid name="PixelForwardPassive1x5"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="PixelForwardFlexCircuit1x5" category="unspecified"> + <rSolid name="PixelForwardFlexCircuit1x5"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_VHDI"/> + </LogicalPart> + <LogicalPart name="PixelForwardAdhFilm1x5" category="unspecified"> + <rSolid name="PixelForwardAdhFilm1x5"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_AdhFilm"/> + </LogicalPart> + <LogicalPart name="PixelForwardBacking1x5" category="unspecified"> + <rSolid name="PixelForwardBacking1x5"/> + <rMaterial name="materials:Silicon"/> + </LogicalPart> + <LogicalPart name="PixelForwardChoTherm1x5" category="unspecified"> + <rSolid name="PixelForwardChoTherm1x5"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_AgEpoxy"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="All"> + <!-- Sensor --> + <PosPart copyNumber="1"> + <rParent name="PixelForwardSensor1x5"/> + <rChild name="PixelForwardActive1x5"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPlaquette1x5Right"/> + <rChild name="PixelForwardSensor1x5"/> + <Translation x="[AnchorXRight]" y="[AnchorY]" z="[pixfwdPlaq:SensorZ]"/> + <rRotation name="pixfwdPlaq:Z270"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="PixelForwardPlaquette1x5Left"/> + <rChild name="PixelForwardSensor1x5"/> + <Translation x="[AnchorXLeft]" y="[AnchorY]" z="[pixfwdPlaq:SensorZ]"/> + <rRotation name="pixfwdPlaq:Z270"/> + </PosPart> + <!-- Passive part --> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPlaquette1x5Right"/> + <rChild name="PixelForwardPassive1x5"/> + <Translation x="0.*mm" y="0.*mm" z="[pixfwdPlaq:PassiveZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="PixelForwardPlaquette1x5Left"/> + <rChild name="PixelForwardPassive1x5"/> + <Translation x="0.*mm" y="0.*mm" z="[pixfwdPlaq:PassiveZ]"/> + <rReflectionRotation name="pixfwdCommon:ReflectionX"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPassive1x5"/> + <rChild name="PixelForwardFlexCircuit1x5"/> + <Translation x="0." y="0." z="[pixfwdPlaq:FlexCircuitZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPassive1x5"/> + <rChild name="PixelForwardAdhFilm1x5"/> + <Translation x="0." y="0." z="[pixfwdPlaq:AdhFilmZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPassive1x5"/> + <rChild name="PixelForwardBacking1x5"/> + <Translation x="0." y="0." z="[pixfwdPlaq:BackingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPassive1x5"/> + <rChild name="PixelForwardChoTherm1x5"/> + <Translation x="0." y="0." z="[pixfwdPlaq:ChoThermZ]"/> + </PosPart> + <!-- Readout chips in the passive part --> + <PosPart copyNumber="3"> + <rParent name="PixelForwardPassive1x5"/> + <rChild name="pixfwdPlaq:PixelForwardBumpROChipEpoxy"/> + <Translation x="[PlaquetteW]/2.-[ROChipX_BottomLeft]+[pixfwdPlaq:ROChipW]/2." y="[PlaquetteH]/2.-[ROChipY_BottomLeft]+[pixfwdPlaq:ROChipH]/2." z="[pixfwdPlaq:BumpROChipEpoxyZ]"/> + </PosPart> + <PosPart copyNumber="4"> + <rParent name="PixelForwardPassive1x5"/> + <rChild name="pixfwdPlaq:PixelForwardBumpROChipEpoxy"/> + <Translation x="[PlaquetteW]/2.-[ROChipX_BottomLeft]+[pixfwdPlaq:ROChipSpaceW]+[pixfwdPlaq:ROChipW]/2." y="[PlaquetteH]/2.-[ROChipY_BottomLeft]+[pixfwdPlaq:ROChipH]/2." z="[pixfwdPlaq:BumpROChipEpoxyZ]"/> + </PosPart> + <PosPart copyNumber="5"> + <rParent name="PixelForwardPassive1x5"/> + <rChild name="pixfwdPlaq:PixelForwardBumpROChipEpoxy"/> + <Translation x="[PlaquetteW]/2.-[ROChipX_BottomLeft]+2.*[pixfwdPlaq:ROChipSpaceW]+[pixfwdPlaq:ROChipW]/2." y="[PlaquetteH]/2.-[ROChipY_BottomLeft]+[pixfwdPlaq:ROChipH]/2." z="[pixfwdPlaq:BumpROChipEpoxyZ]"/> + </PosPart> + <PosPart copyNumber="6"> + <rParent name="PixelForwardPassive1x5"/> + <rChild name="pixfwdPlaq:PixelForwardBumpROChipEpoxy"/> + <Translation x="[PlaquetteW]/2.-[ROChipX_BottomLeft]+3.*[pixfwdPlaq:ROChipSpaceW]+[pixfwdPlaq:ROChipW]/2." y="[PlaquetteH]/2.-[ROChipY_BottomLeft]+[pixfwdPlaq:ROChipH]/2." z="[pixfwdPlaq:BumpROChipEpoxyZ]"/> + </PosPart> + <PosPart copyNumber="7"> + <rParent name="PixelForwardPassive1x5"/> + <rChild name="pixfwdPlaq:PixelForwardBumpROChipEpoxy"/> + <Translation x="[PlaquetteW]/2.-[ROChipX_BottomLeft]+4.*[pixfwdPlaq:ROChipSpaceW]+[pixfwdPlaq:ROChipW]/2." y="[PlaquetteH]/2.-[ROChipY_BottomLeft]+[pixfwdPlaq:ROChipH]/2." z="[pixfwdPlaq:BumpROChipEpoxyZ]"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/pixfwdPlaq2x3.xml b/examples/DDCMS/data/pixfwdPlaq2x3.xml new file mode 100644 index 000000000..a89413618 --- /dev/null +++ b/examples/DDCMS/data/pixfwdPlaq2x3.xml @@ -0,0 +1,196 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <!-- + + == CMS Forward Pixels Geometry == + + @version 3.02.01 May 30, 2006 + @created Victoria Martin + @modified Dmitry Onoprienko + + == Subsystem or component described by the file == + + 2x3 Plaquette. + + == Root volume and its reference frame == + + Root volume : PixelForwardPlaquette2x3Up and PixelForwardPlaquette2x3Down + + Y is in the plane of the plaquette, pointing away from the beam line + Z is perpendicular to the plaquette, pointing to the sensor side + + == Positioning == + + The file defines AnchorX and AnchorY constants that + correspond to the anchor point (aka active center) coordinates in the plaquette + root volume. + + The two root volumes defined by this file contain identical geometry, but differ + in the directions of X and Y axes of the sensitive volume. + + PixelForwardPlaquette2x3Up should be positioned unrotated into "PixelForwardPanel3Right" panel, + and rotated by 180 deg around Z into "PixelForwardPanel4Left" panel. + + PixelForwardPlaquette2x3Down should be positioned unrotated into "PixelForwardPanel4Right" panel, + and rotated by 180 deg around Z into "PixelForwardPanel3Left" panel. + + == Additional comments == + + The volume representing the active part of the sensor is placed with 90 degrees + rotation around Z axis to make its local reference frame Y go along the longer side. + + --> + <ConstantsSection label="Input" eval="true"> + <Constant name="PlaquetteW" value="29.458*mm"/> + <Constant name="PlaquetteH" value="27.766*mm"/> + <Constant name="SensorW" value="26.594*mm"/> + <Constant name="SensorH" value="18.494*mm"/> + <Constant name="ActiveW" value="24.300*mm"/> + <Constant name="ActiveH" value="16.200*mm"/> + <Constant name="ROChipX_TopRight" value="3.074*mm"/> + <Constant name="ROChipY_TopRight" value="3.905*mm"/> + <Constant name="ROChipX_BottomLeft" value="27.300*mm"/> + <Constant name="ROChipY_BottomLeft" value="23.860*mm"/> + <Constant name="ActiveCenterX" value="15.187*mm"/> + <Constant name="ActiveCenterY" value="13.883*mm"/> + </ConstantsSection> + <ConstantsSection label="Common" eval="true"> + <Constant name="AnchorX" value=" [PlaquetteW]/2.-[ActiveCenterX]"/> + <Constant name="AnchorY" value="0.*mm"/> + </ConstantsSection> + <SolidSection label="All"> + <!-- Root volume --> + <Box name="PixelForwardPlaquette2x3" dx="[PlaquetteW]/2." dy="[PlaquetteH]/2." dz="[pixfwdPlaq:PlaquetteT]/2."/> + <!-- Sensor --> + <Box name="PixelForwardSensor2x3" dx="[SensorH]/2." dy="[SensorW]/2" dz="[pixfwdPlaq:SensorT]/2."/> + <Box name="PixelForwardActive2x3" dx="[ActiveH]/2." dy="[ActiveW]/2" dz="[pixfwdPlaq:SensorT]/2."/> + <!-- Passive part --> + <Box name="PixelForwardPassive2x3" dx="[PlaquetteW]/2." dy="[PlaquetteH]/2." dz="[pixfwdPlaq:PassiveT]/2."/> + <Box name="PixelForwardFlexCircuit2x3" dx="[PlaquetteW]/2." dy="[PlaquetteH]/2." dz="[pixfwdPlaq:FlexCircuitT]/2."/> + <Box name="PixelForwardAdhFilm2x3" dx="[PlaquetteW]/2." dy="[PlaquetteH]/2." dz="[pixfwdPlaq:AdhFilmT]/2."/> + <Box name="PixelForwardBacking2x3" dx="[PlaquetteW]/2." dy="[PlaquetteH]/2." dz="[pixfwdPlaq:BackingT]/2."/> + <Box name="PixelForwardChoTherm2x3" dx="[PlaquetteW]/2." dy="[PlaquetteH]/2." dz="[pixfwdPlaq:ChoThermT]/2."/> + </SolidSection> + <LogicalPartSection label="All"> + <!-- Root volumes --> + <LogicalPart name="PixelForwardPlaquette2x3Up" category="envelope"> + <rSolid name="PixelForwardPlaquette2x3"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="PixelForwardPlaquette2x3Down" category="envelope"> + <rSolid name="PixelForwardPlaquette2x3"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <!-- Sensor --> + <LogicalPart name="PixelForwardSensor2x3" category="unspecified"> + <rSolid name="PixelForwardSensor2x3"/> + <rMaterial name="materials:Silicon"/> + </LogicalPart> + <LogicalPart name="PixelForwardActive2x3" category="sensitive"> + <rSolid name="PixelForwardActive2x3"/> + <rMaterial name="materials:Silicon"/> + </LogicalPart> + <!-- Passive part --> + <LogicalPart name="PixelForwardPassive2x3" category="envelope"> + <rSolid name="PixelForwardPassive2x3"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="PixelForwardFlexCircuit2x3" category="unspecified"> + <rSolid name="PixelForwardFlexCircuit2x3"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_VHDI"/> + </LogicalPart> + <LogicalPart name="PixelForwardAdhFilm2x3" category="unspecified"> + <rSolid name="PixelForwardAdhFilm2x3"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_AdhFilm"/> + </LogicalPart> + <LogicalPart name="PixelForwardBacking2x3" category="unspecified"> + <rSolid name="PixelForwardBacking2x3"/> + <rMaterial name="materials:Silicon"/> + </LogicalPart> + <LogicalPart name="PixelForwardChoTherm2x3" category="unspecified"> + <rSolid name="PixelForwardChoTherm2x3"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_AgEpoxy"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="All"> + <!-- Sensor --> + <PosPart copyNumber="1"> + <rParent name="PixelForwardSensor2x3"/> + <rChild name="PixelForwardActive2x3"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPlaquette2x3Up"/> + <rChild name="PixelForwardSensor2x3"/> + <Translation x="[AnchorX]" y="[AnchorY]" z="[pixfwdPlaq:SensorZ]"/> + <rRotation name="pixfwdPlaq:Z90"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="PixelForwardPlaquette2x3Down"/> + <rChild name="PixelForwardSensor2x3"/> + <Translation x="[AnchorX]" y="[AnchorY]" z="[pixfwdPlaq:SensorZ]"/> + <rRotation name="pixfwdPlaq:Z270"/> + </PosPart> + <!-- Passive part --> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPlaquette2x3Up"/> + <rChild name="PixelForwardPassive2x3"/> + <Translation x="0.*mm" y="0.*mm" z="[pixfwdPlaq:PassiveZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="PixelForwardPlaquette2x3Down"/> + <rChild name="PixelForwardPassive2x3"/> + <Translation x="0.*mm" y="0.*mm" z="[pixfwdPlaq:PassiveZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPassive2x3"/> + <rChild name="PixelForwardFlexCircuit2x3"/> + <Translation x="0." y="0." z="[pixfwdPlaq:FlexCircuitZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPassive2x3"/> + <rChild name="PixelForwardAdhFilm2x3"/> + <Translation x="0." y="0." z="[pixfwdPlaq:AdhFilmZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPassive2x3"/> + <rChild name="PixelForwardBacking2x3"/> + <Translation x="0." y="0." z="[pixfwdPlaq:BackingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPassive2x3"/> + <rChild name="PixelForwardChoTherm2x3"/> + <Translation x="0." y="0." z="[pixfwdPlaq:ChoThermZ]"/> + </PosPart> + <!-- Readout chips in the passive part --> + <PosPart copyNumber="8"> + <rParent name="PixelForwardPassive2x3"/> + <rChild name="pixfwdPlaq:PixelForwardBumpROChipEpoxy"/> + <Translation x="[PlaquetteW]/2.-[ROChipX_TopRight]-[pixfwdPlaq:ROChipW]/2." y="[PlaquetteH]/2.-[ROChipY_TopRight]-[pixfwdPlaq:ROChipH]/2." z="[pixfwdPlaq:BumpROChipEpoxyZ]"/> + </PosPart> + <PosPart copyNumber="9"> + <rParent name="PixelForwardPassive2x3"/> + <rChild name="pixfwdPlaq:PixelForwardBumpROChipEpoxy"/> + <Translation x="[PlaquetteW]/2.-[ROChipX_TopRight]-[pixfwdPlaq:ROChipSpaceW]-[pixfwdPlaq:ROChipW]/2." y="[PlaquetteH]/2.-[ROChipY_TopRight]-[pixfwdPlaq:ROChipH]/2." z="[pixfwdPlaq:BumpROChipEpoxyZ]"/> + </PosPart> + <PosPart copyNumber="10"> + <rParent name="PixelForwardPassive2x3"/> + <rChild name="pixfwdPlaq:PixelForwardBumpROChipEpoxy"/> + <Translation x="[PlaquetteW]/2.-[ROChipX_TopRight]-2.*[pixfwdPlaq:ROChipSpaceW]-[pixfwdPlaq:ROChipW]/2." y="[PlaquetteH]/2.-[ROChipY_TopRight]-[pixfwdPlaq:ROChipH]/2." z="[pixfwdPlaq:BumpROChipEpoxyZ]"/> + </PosPart> + <PosPart copyNumber="11"> + <rParent name="PixelForwardPassive2x3"/> + <rChild name="pixfwdPlaq:PixelForwardBumpROChipEpoxy"/> + <Translation x="[PlaquetteW]/2.-[ROChipX_BottomLeft]+[pixfwdPlaq:ROChipW]/2." y="[PlaquetteH]/2.-[ROChipY_BottomLeft]+[pixfwdPlaq:ROChipH]/2." z="[pixfwdPlaq:BumpROChipEpoxyZ]"/> + </PosPart> + <PosPart copyNumber="12"> + <rParent name="PixelForwardPassive2x3"/> + <rChild name="pixfwdPlaq:PixelForwardBumpROChipEpoxy"/> + <Translation x="[PlaquetteW]/2.-[ROChipX_BottomLeft]+[pixfwdPlaq:ROChipSpaceW]+[pixfwdPlaq:ROChipW]/2." y="[PlaquetteH]/2.-[ROChipY_BottomLeft]+[pixfwdPlaq:ROChipH]/2." z="[pixfwdPlaq:BumpROChipEpoxyZ]"/> + </PosPart> + <PosPart copyNumber="13"> + <rParent name="PixelForwardPassive2x3"/> + <rChild name="pixfwdPlaq:PixelForwardBumpROChipEpoxy"/> + <Translation x="[PlaquetteW]/2.-[ROChipX_BottomLeft]+2.*[pixfwdPlaq:ROChipSpaceW]+[pixfwdPlaq:ROChipW]/2." y="[PlaquetteH]/2.-[ROChipY_BottomLeft]+[pixfwdPlaq:ROChipH]/2." z="[pixfwdPlaq:BumpROChipEpoxyZ]"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/pixfwdPlaq2x4.xml b/examples/DDCMS/data/pixfwdPlaq2x4.xml new file mode 100644 index 000000000..b274917f4 --- /dev/null +++ b/examples/DDCMS/data/pixfwdPlaq2x4.xml @@ -0,0 +1,206 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <!-- + + == CMS Forward Pixels Geometry == + + @version 3.02.01 May 30, 2006 + @created Victoria Martin + @modified Dmitry Onoprienko + + == Subsystem or component described by the file == + + 2x4 Plaquette. + + == Root volume and its reference frame == + + Root volume : PixelForwardPlaquette2x4Up and PixelForwardPlaquette2x4Down + + Y is in the plane of the plaquette, pointing away from the beam line + Z is perpendicular to the plaquette, pointing to the sensor side + + == Positioning == + + The file defines AnchorX and AnchorY constants that + correspond to the anchor point (aka active center) coordinates in the plaquette + root volume. + + The two root volumes defined by this file contain identical geometry, but differ + in the directions of X and Y axes of the sensitive volume. + + PixelForwardPlaquette2x4Up should be positioned unrotated into "PixelForwardPanel3Right" panel, + and rotated by 180 deg around Z into "PixelForwardPanel4Left" panel. + + PixelForwardPlaquette2x4Down should be positioned unrotated into "PixelForwardPanel4Right" panel, + and rotated by 180 deg around Z into "PixelForwardPanel3Left" panel. + + == Additional comments == + + The volume representing the active part of the sensor is placed with 90 degrees + rotation around Z axis to make its local reference frame Y go along the longer side. + + --> + <ConstantsSection label="Input" eval="true"> + <Constant name="PlaquetteW" value="37.558*mm"/> + <Constant name="PlaquetteH" value="27.766*mm"/> + <Constant name="SensorW" value="34.694*mm"/> + <Constant name="SensorH" value="18.494*mm"/> + <Constant name="ActiveW" value="32.400*mm"/> + <Constant name="ActiveH" value="16.200*mm"/> + <Constant name="ROChipX_TopRight" value="3.074*mm"/> + <Constant name="ROChipY_TopRight" value="3.905*mm"/> + <Constant name="ROChipX_BottomLeft" value="35.400*mm"/> + <Constant name="ROChipY_BottomLeft" value="23.860*mm"/> + <Constant name="ActiveCenterX" value="19.237*mm"/> + <Constant name="ActiveCenterY" value="13.883*mm"/> + </ConstantsSection> + <ConstantsSection label="Common" eval="true"> + <Constant name="AnchorX" value=" [PlaquetteW]/2.-[ActiveCenterX]"/> + <Constant name="AnchorY" value="0.*mm"/> + </ConstantsSection> + <SolidSection label="All"> + <!-- Root volume --> + <Box name="PixelForwardPlaquette2x4" dx="[PlaquetteW]/2." dy="[PlaquetteH]/2." dz="[pixfwdPlaq:PlaquetteT]/2."/> + <!-- Sensor --> + <Box name="PixelForwardSensor2x4" dx="[SensorH]/2." dy="[SensorW]/2" dz="[pixfwdPlaq:SensorT]/2."/> + <Box name="PixelForwardActive2x4" dx="[ActiveH]/2." dy="[ActiveW]/2" dz="[pixfwdPlaq:SensorT]/2."/> + <!-- Passive part --> + <Box name="PixelForwardPassive2x4" dx="[PlaquetteW]/2." dy="[PlaquetteH]/2." dz="[pixfwdPlaq:PassiveT]/2."/> + <Box name="PixelForwardFlexCircuit2x4" dx="[PlaquetteW]/2." dy="[PlaquetteH]/2." dz="[pixfwdPlaq:FlexCircuitT]/2."/> + <Box name="PixelForwardAdhFilm2x4" dx="[PlaquetteW]/2." dy="[PlaquetteH]/2." dz="[pixfwdPlaq:AdhFilmT]/2."/> + <Box name="PixelForwardBacking2x4" dx="[PlaquetteW]/2." dy="[PlaquetteH]/2." dz="[pixfwdPlaq:BackingT]/2."/> + <Box name="PixelForwardChoTherm2x4" dx="[PlaquetteW]/2." dy="[PlaquetteH]/2." dz="[pixfwdPlaq:ChoThermT]/2."/> + </SolidSection> + <LogicalPartSection label="All"> + <!-- Root volumes --> + <LogicalPart name="PixelForwardPlaquette2x4Up" category="envelope"> + <rSolid name="PixelForwardPlaquette2x4"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="PixelForwardPlaquette2x4Down" category="envelope"> + <rSolid name="PixelForwardPlaquette2x4"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <!-- Sensor --> + <LogicalPart name="PixelForwardSensor2x4" category="unspecified"> + <rSolid name="PixelForwardSensor2x4"/> + <rMaterial name="materials:Silicon"/> + </LogicalPart> + <LogicalPart name="PixelForwardActive2x4" category="sensitive"> + <rSolid name="PixelForwardActive2x4"/> + <rMaterial name="materials:Silicon"/> + </LogicalPart> + <!-- Passive part --> + <LogicalPart name="PixelForwardPassive2x4" category="envelope"> + <rSolid name="PixelForwardPassive2x4"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="PixelForwardFlexCircuit2x4" category="unspecified"> + <rSolid name="PixelForwardFlexCircuit2x4"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_VHDI"/> + </LogicalPart> + <LogicalPart name="PixelForwardAdhFilm2x4" category="unspecified"> + <rSolid name="PixelForwardAdhFilm2x4"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_AdhFilm"/> + </LogicalPart> + <LogicalPart name="PixelForwardBacking2x4" category="unspecified"> + <rSolid name="PixelForwardBacking2x4"/> + <rMaterial name="materials:Silicon"/> + </LogicalPart> + <LogicalPart name="PixelForwardChoTherm2x4" category="unspecified"> + <rSolid name="PixelForwardChoTherm2x4"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_AgEpoxy"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="All"> + <!-- Sensor --> + <PosPart copyNumber="1"> + <rParent name="PixelForwardSensor2x4"/> + <rChild name="PixelForwardActive2x4"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPlaquette2x4Up"/> + <rChild name="PixelForwardSensor2x4"/> + <Translation x="[AnchorX]" y="[AnchorY]" z="[pixfwdPlaq:SensorZ]"/> + <rRotation name="pixfwdPlaq:Z90"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="PixelForwardPlaquette2x4Down"/> + <rChild name="PixelForwardSensor2x4"/> + <Translation x="[AnchorX]" y="[AnchorY]" z="[pixfwdPlaq:SensorZ]"/> + <rRotation name="pixfwdPlaq:Z270"/> + </PosPart> + <!-- Passive part --> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPlaquette2x4Up"/> + <rChild name="PixelForwardPassive2x4"/> + <Translation x="0.*mm" y="0.*mm" z="[pixfwdPlaq:PassiveZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="PixelForwardPlaquette2x4Down"/> + <rChild name="PixelForwardPassive2x4"/> + <Translation x="0.*mm" y="0.*mm" z="[pixfwdPlaq:PassiveZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPassive2x4"/> + <rChild name="PixelForwardFlexCircuit2x4"/> + <Translation x="0." y="0." z="[pixfwdPlaq:FlexCircuitZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPassive2x4"/> + <rChild name="PixelForwardAdhFilm2x4"/> + <Translation x="0." y="0." z="[pixfwdPlaq:AdhFilmZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPassive2x4"/> + <rChild name="PixelForwardBacking2x4"/> + <Translation x="0." y="0." z="[pixfwdPlaq:BackingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPassive2x4"/> + <rChild name="PixelForwardChoTherm2x4"/> + <Translation x="0." y="0." z="[pixfwdPlaq:ChoThermZ]"/> + </PosPart> + <!-- Readout chips in the passive part --> + <PosPart copyNumber="14"> + <rParent name="PixelForwardPassive2x4"/> + <rChild name="pixfwdPlaq:PixelForwardBumpROChipEpoxy"/> + <Translation x="[PlaquetteW]/2.-[ROChipX_TopRight]-[pixfwdPlaq:ROChipW]/2." y="[PlaquetteH]/2.-[ROChipY_TopRight]-[pixfwdPlaq:ROChipH]/2." z="[pixfwdPlaq:BumpROChipEpoxyZ]"/> + </PosPart> + <PosPart copyNumber="15"> + <rParent name="PixelForwardPassive2x4"/> + <rChild name="pixfwdPlaq:PixelForwardBumpROChipEpoxy"/> + <Translation x="[PlaquetteW]/2.-[ROChipX_TopRight]-[pixfwdPlaq:ROChipSpaceW]-[pixfwdPlaq:ROChipW]/2." y="[PlaquetteH]/2.-[ROChipY_TopRight]-[pixfwdPlaq:ROChipH]/2." z="[pixfwdPlaq:BumpROChipEpoxyZ]"/> + </PosPart> + <PosPart copyNumber="16"> + <rParent name="PixelForwardPassive2x4"/> + <rChild name="pixfwdPlaq:PixelForwardBumpROChipEpoxy"/> + <Translation x="[PlaquetteW]/2.-[ROChipX_TopRight]-2.*[pixfwdPlaq:ROChipSpaceW]-[pixfwdPlaq:ROChipW]/2." y="[PlaquetteH]/2.-[ROChipY_TopRight]-[pixfwdPlaq:ROChipH]/2." z="[pixfwdPlaq:BumpROChipEpoxyZ]"/> + </PosPart> + <PosPart copyNumber="17"> + <rParent name="PixelForwardPassive2x4"/> + <rChild name="pixfwdPlaq:PixelForwardBumpROChipEpoxy"/> + <Translation x="[PlaquetteW]/2.-[ROChipX_TopRight]-3.*[pixfwdPlaq:ROChipSpaceW]-[pixfwdPlaq:ROChipW]/2." y="[PlaquetteH]/2.-[ROChipY_TopRight]-[pixfwdPlaq:ROChipH]/2." z="[pixfwdPlaq:BumpROChipEpoxyZ]"/> + </PosPart> + <PosPart copyNumber="18"> + <rParent name="PixelForwardPassive2x4"/> + <rChild name="pixfwdPlaq:PixelForwardBumpROChipEpoxy"/> + <Translation x="[PlaquetteW]/2.-[ROChipX_BottomLeft]+[pixfwdPlaq:ROChipW]/2." y="[PlaquetteH]/2.-[ROChipY_BottomLeft]+[pixfwdPlaq:ROChipH]/2." z="[pixfwdPlaq:BumpROChipEpoxyZ]"/> + </PosPart> + <PosPart copyNumber="19"> + <rParent name="PixelForwardPassive2x4"/> + <rChild name="pixfwdPlaq:PixelForwardBumpROChipEpoxy"/> + <Translation x="[PlaquetteW]/2.-[ROChipX_BottomLeft]+[pixfwdPlaq:ROChipSpaceW]+[pixfwdPlaq:ROChipW]/2." y="[PlaquetteH]/2.-[ROChipY_BottomLeft]+[pixfwdPlaq:ROChipH]/2." z="[pixfwdPlaq:BumpROChipEpoxyZ]"/> + </PosPart> + <PosPart copyNumber="20"> + <rParent name="PixelForwardPassive2x4"/> + <rChild name="pixfwdPlaq:PixelForwardBumpROChipEpoxy"/> + <Translation x="[PlaquetteW]/2.-[ROChipX_BottomLeft]+2.*[pixfwdPlaq:ROChipSpaceW]+[pixfwdPlaq:ROChipW]/2." y="[PlaquetteH]/2.-[ROChipY_BottomLeft]+[pixfwdPlaq:ROChipH]/2." z="[pixfwdPlaq:BumpROChipEpoxyZ]"/> + </PosPart> + <PosPart copyNumber="21"> + <rParent name="PixelForwardPassive2x4"/> + <rChild name="pixfwdPlaq:PixelForwardBumpROChipEpoxy"/> + <Translation x="[PlaquetteW]/2.-[ROChipX_BottomLeft]+3.*[pixfwdPlaq:ROChipSpaceW]+[pixfwdPlaq:ROChipW]/2." y="[PlaquetteH]/2.-[ROChipY_BottomLeft]+[pixfwdPlaq:ROChipH]/2." z="[pixfwdPlaq:BumpROChipEpoxyZ]"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/pixfwdPlaq2x5.xml b/examples/DDCMS/data/pixfwdPlaq2x5.xml new file mode 100644 index 000000000..f39896ab6 --- /dev/null +++ b/examples/DDCMS/data/pixfwdPlaq2x5.xml @@ -0,0 +1,213 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <!-- + + == CMS Forward Pixels Geometry == + + @version 3.02.01 May 30, 2006 + @created Victoria Martin + @modified Dmitry Onoprienko + + == Subsystem or component described by the file == + + 2x5 Plaquette. + + == Root volume and its reference frame == + + Root volume : PixelForwardPlaquette2x5Up and PixelForwardPlaquette2x5Down + + Y is in the plane of the plaquette, pointing away from the beam line + Z is perpendicular to the plaquette, pointing to the sensor side + + == Positioning == + + The file defines AnchorX and AnchorY constants that + correspond to the anchor point (aka active center) coordinates in the plaquette + root volume. + + The two root volumes defined by this file contain identical geometry, but differ + in the directions of X and Y axes of the sensitive volume. + + PixelForwardPlaquette2x5Up should be positioned unrotated into "PixelForwardPanel3Right" panel. + PixelForwardPlaquette2x5Down should be positioned rotated by 180 deg around Z into "PixelForwardPanel3Left" panel. + + == Additional comments == + + The volume representing the active part of the sensor is placed with 90 degrees + rotation around Z axis to make its local reference frame Y go along the longer side. + + --> + <ConstantsSection label="Input" eval="true"> + <Constant name="PlaquetteW" value="45.658*mm"/> + <Constant name="PlaquetteH" value="27.766*mm"/> + <Constant name="SensorW" value="42.794*mm"/> + <Constant name="SensorH" value="18.494*mm"/> + <Constant name="ActiveW" value="40.500*mm"/> + <Constant name="ActiveH" value="16.200*mm"/> + <Constant name="ROChipX_TopRight" value="3.074*mm"/> + <Constant name="ROChipY_TopRight" value="3.905*mm"/> + <Constant name="ROChipX_BottomLeft" value="43.500*mm"/> + <Constant name="ROChipY_BottomLeft" value="23.860*mm"/> + <Constant name="ActiveCenterX" value="23.287*mm"/> + <Constant name="ActiveCenterY" value="13.883*mm"/> + </ConstantsSection> + <ConstantsSection label="Common" eval="true"> + <Constant name="AnchorX" value=" [PlaquetteW]/2.-[ActiveCenterX]"/> + <Constant name="AnchorY" value="0.*mm"/> + </ConstantsSection> + <SolidSection label="All"> + <!-- Root volume --> + <Box name="PixelForwardPlaquette2x5" dx="[PlaquetteW]/2." dy="[PlaquetteH]/2." dz="[pixfwdPlaq:PlaquetteT]/2."/> + <!-- Sensor --> + <Box name="PixelForwardSensor2x5" dx="[SensorH]/2." dy="[SensorW]/2" dz="[pixfwdPlaq:SensorT]/2."/> + <Box name="PixelForwardActive2x5" dx="[ActiveH]/2." dy="[ActiveW]/2" dz="[pixfwdPlaq:SensorT]/2."/> + <!-- Passive part --> + <Box name="PixelForwardPassive2x5" dx="[PlaquetteW]/2." dy="[PlaquetteH]/2." dz="[pixfwdPlaq:PassiveT]/2."/> + <Box name="PixelForwardFlexCircuit2x5" dx="[PlaquetteW]/2." dy="[PlaquetteH]/2." dz="[pixfwdPlaq:FlexCircuitT]/2."/> + <Box name="PixelForwardAdhFilm2x5" dx="[PlaquetteW]/2." dy="[PlaquetteH]/2." dz="[pixfwdPlaq:AdhFilmT]/2."/> + <Box name="PixelForwardBacking2x5" dx="[PlaquetteW]/2." dy="[PlaquetteH]/2." dz="[pixfwdPlaq:BackingT]/2."/> + <Box name="PixelForwardChoTherm2x5" dx="[PlaquetteW]/2." dy="[PlaquetteH]/2." dz="[pixfwdPlaq:ChoThermT]/2."/> + </SolidSection> + <LogicalPartSection label="All"> + <!-- Root volumes --> + <LogicalPart name="PixelForwardPlaquette2x5Up" category="envelope"> + <rSolid name="PixelForwardPlaquette2x5"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="PixelForwardPlaquette2x5Down" category="envelope"> + <rSolid name="PixelForwardPlaquette2x5"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <!-- Sensor --> + <LogicalPart name="PixelForwardSensor2x5" category="unspecified"> + <rSolid name="PixelForwardSensor2x5"/> + <rMaterial name="materials:Silicon"/> + </LogicalPart> + <LogicalPart name="PixelForwardActive2x5" category="sensitive"> + <rSolid name="PixelForwardActive2x5"/> + <rMaterial name="materials:Silicon"/> + </LogicalPart> + <!-- Passive part --> + <LogicalPart name="PixelForwardPassive2x5" category="envelope"> + <rSolid name="PixelForwardPassive2x5"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="PixelForwardFlexCircuit2x5" category="unspecified"> + <rSolid name="PixelForwardFlexCircuit2x5"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_VHDI"/> + </LogicalPart> + <LogicalPart name="PixelForwardAdhFilm2x5" category="unspecified"> + <rSolid name="PixelForwardAdhFilm2x5"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_AdhFilm"/> + </LogicalPart> + <LogicalPart name="PixelForwardBacking2x5" category="unspecified"> + <rSolid name="PixelForwardBacking2x5"/> + <rMaterial name="materials:Silicon"/> + </LogicalPart> + <LogicalPart name="PixelForwardChoTherm2x5" category="unspecified"> + <rSolid name="PixelForwardChoTherm2x5"/> + <rMaterial name="pixfwdMaterials:Pix_Fwd_AgEpoxy"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="All"> + <!-- Sensor --> + <PosPart copyNumber="1"> + <rParent name="PixelForwardSensor2x5"/> + <rChild name="PixelForwardActive2x5"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPlaquette2x5Up"/> + <rChild name="PixelForwardSensor2x5"/> + <Translation x="[AnchorX]" y="[AnchorY]" z="[pixfwdPlaq:SensorZ]"/> + <rRotation name="pixfwdPlaq:Z90"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="PixelForwardPlaquette2x5Down"/> + <rChild name="PixelForwardSensor2x5"/> + <Translation x="[AnchorX]" y="[AnchorY]" z="[pixfwdPlaq:SensorZ]"/> + <rRotation name="pixfwdPlaq:Z270"/> + </PosPart> + <!-- Passive part --> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPlaquette2x5Up"/> + <rChild name="PixelForwardPassive2x5"/> + <Translation x="0.*mm" y="0.*mm" z="[pixfwdPlaq:PassiveZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="PixelForwardPlaquette2x5Down"/> + <rChild name="PixelForwardPassive2x5"/> + <Translation x="0.*mm" y="0.*mm" z="[pixfwdPlaq:PassiveZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPassive2x5"/> + <rChild name="PixelForwardFlexCircuit2x5"/> + <Translation x="0." y="0." z="[pixfwdPlaq:FlexCircuitZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPassive2x5"/> + <rChild name="PixelForwardAdhFilm2x5"/> + <Translation x="0." y="0." z="[pixfwdPlaq:AdhFilmZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPassive2x5"/> + <rChild name="PixelForwardBacking2x5"/> + <Translation x="0." y="0." z="[pixfwdPlaq:BackingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="PixelForwardPassive2x5"/> + <rChild name="PixelForwardChoTherm2x5"/> + <Translation x="0." y="0." z="[pixfwdPlaq:ChoThermZ]"/> + </PosPart> + <!-- Readout chips in the passive part --> + <PosPart copyNumber="22"> + <rParent name="PixelForwardPassive2x5"/> + <rChild name="pixfwdPlaq:PixelForwardBumpROChipEpoxy"/> + <Translation x="[PlaquetteW]/2.-[ROChipX_TopRight]-[pixfwdPlaq:ROChipW]/2." y="[PlaquetteH]/2.-[ROChipY_TopRight]-[pixfwdPlaq:ROChipH]/2." z="[pixfwdPlaq:BumpROChipEpoxyZ]"/> + </PosPart> + <PosPart copyNumber="23"> + <rParent name="PixelForwardPassive2x5"/> + <rChild name="pixfwdPlaq:PixelForwardBumpROChipEpoxy"/> + <Translation x="[PlaquetteW]/2.-[ROChipX_TopRight]-[pixfwdPlaq:ROChipSpaceW]-[pixfwdPlaq:ROChipW]/2." y="[PlaquetteH]/2.-[ROChipY_TopRight]-[pixfwdPlaq:ROChipH]/2." z="[pixfwdPlaq:BumpROChipEpoxyZ]"/> + </PosPart> + <PosPart copyNumber="24"> + <rParent name="PixelForwardPassive2x5"/> + <rChild name="pixfwdPlaq:PixelForwardBumpROChipEpoxy"/> + <Translation x="[PlaquetteW]/2.-[ROChipX_TopRight]-2.*[pixfwdPlaq:ROChipSpaceW]-[pixfwdPlaq:ROChipW]/2." y="[PlaquetteH]/2.-[ROChipY_TopRight]-[pixfwdPlaq:ROChipH]/2." z="[pixfwdPlaq:BumpROChipEpoxyZ]"/> + </PosPart> + <PosPart copyNumber="25"> + <rParent name="PixelForwardPassive2x5"/> + <rChild name="pixfwdPlaq:PixelForwardBumpROChipEpoxy"/> + <Translation x="[PlaquetteW]/2.-[ROChipX_TopRight]-3.*[pixfwdPlaq:ROChipSpaceW]-[pixfwdPlaq:ROChipW]/2." y="[PlaquetteH]/2.-[ROChipY_TopRight]-[pixfwdPlaq:ROChipH]/2." z="[pixfwdPlaq:BumpROChipEpoxyZ]"/> + </PosPart> + <PosPart copyNumber="26"> + <rParent name="PixelForwardPassive2x5"/> + <rChild name="pixfwdPlaq:PixelForwardBumpROChipEpoxy"/> + <Translation x="[PlaquetteW]/2.-[ROChipX_TopRight]-4.*[pixfwdPlaq:ROChipSpaceW]-[pixfwdPlaq:ROChipW]/2." y="[PlaquetteH]/2.-[ROChipY_TopRight]-[pixfwdPlaq:ROChipH]/2." z="[pixfwdPlaq:BumpROChipEpoxyZ]"/> + </PosPart> + <PosPart copyNumber="27"> + <rParent name="PixelForwardPassive2x5"/> + <rChild name="pixfwdPlaq:PixelForwardBumpROChipEpoxy"/> + <Translation x="[PlaquetteW]/2.-[ROChipX_BottomLeft]+[pixfwdPlaq:ROChipW]/2." y="[PlaquetteH]/2.-[ROChipY_BottomLeft]+[pixfwdPlaq:ROChipH]/2." z="[pixfwdPlaq:BumpROChipEpoxyZ]"/> + </PosPart> + <PosPart copyNumber="28"> + <rParent name="PixelForwardPassive2x5"/> + <rChild name="pixfwdPlaq:PixelForwardBumpROChipEpoxy"/> + <Translation x="[PlaquetteW]/2.-[ROChipX_BottomLeft]+[pixfwdPlaq:ROChipSpaceW]+[pixfwdPlaq:ROChipW]/2." y="[PlaquetteH]/2.-[ROChipY_BottomLeft]+[pixfwdPlaq:ROChipH]/2." z="[pixfwdPlaq:BumpROChipEpoxyZ]"/> + </PosPart> + <PosPart copyNumber="29"> + <rParent name="PixelForwardPassive2x5"/> + <rChild name="pixfwdPlaq:PixelForwardBumpROChipEpoxy"/> + <Translation x="[PlaquetteW]/2.-[ROChipX_BottomLeft]+2.*[pixfwdPlaq:ROChipSpaceW]+[pixfwdPlaq:ROChipW]/2." y="[PlaquetteH]/2.-[ROChipY_BottomLeft]+[pixfwdPlaq:ROChipH]/2." z="[pixfwdPlaq:BumpROChipEpoxyZ]"/> + </PosPart> + <PosPart copyNumber="30"> + <rParent name="PixelForwardPassive2x5"/> + <rChild name="pixfwdPlaq:PixelForwardBumpROChipEpoxy"/> + <Translation x="[PlaquetteW]/2.-[ROChipX_BottomLeft]+3.*[pixfwdPlaq:ROChipSpaceW]+[pixfwdPlaq:ROChipW]/2." y="[PlaquetteH]/2.-[ROChipY_BottomLeft]+[pixfwdPlaq:ROChipH]/2." z="[pixfwdPlaq:BumpROChipEpoxyZ]"/> + </PosPart> + <PosPart copyNumber="31"> + <rParent name="PixelForwardPassive2x5"/> + <rChild name="pixfwdPlaq:PixelForwardBumpROChipEpoxy"/> + <Translation x="[PlaquetteW]/2.-[ROChipX_BottomLeft]+4.*[pixfwdPlaq:ROChipSpaceW]+[pixfwdPlaq:ROChipW]/2." y="[PlaquetteH]/2.-[ROChipY_BottomLeft]+[pixfwdPlaq:ROChipH]/2." z="[pixfwdPlaq:BumpROChipEpoxyZ]"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/pixfwdTest.xml b/examples/DDCMS/data/pixfwdTest.xml new file mode 100644 index 000000000..913fbb4db --- /dev/null +++ b/examples/DDCMS/data/pixfwdTest.xml @@ -0,0 +1,43 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <!-- + + == CMS Forward Pixels Geometry == + + @version 3.02.01 May 30, 2006 + @created Dmitry Onoprienko + + == COMPONENT DEFINED BY THIS FILE: == + + Root volume for testing forward pixels geometry. + + --> + <ConstantsSection label="Root" eval="true"> + <Constant name="RootRadius" value="[pixfwd:RootRadius] + 5.*mm"/> + <Constant name="RootHalfLength" value="[pixfwd:ZPixelForward] + [pixfwd:RootHalfLength]*2. + 5.*mm"/> + </ConstantsSection> + <!-- Test root volume --> + <SolidSection label="Root"> + <Tubs name="TestRoot" rMin="0." rMax="[RootRadius]" dz="[RootHalfLength]" startPhi="0." deltaPhi="360*deg"/> + </SolidSection> + <LogicalPartSection label="Root"> + <LogicalPart name="TestRoot" category="envelope"> + <rSolid name="TestRoot"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <!-- Position forward pixels endcaps inside Test root volume --> + <PosPartSection label="PixelForwardRootPlacement"> + <PosPart copyNumber="1"> + <rParent name="TestRoot"/> + <rChild name="pixfwd:PixelForwardZPlus"/> + <Translation x="0." y="0." z="[pixfwd:ZPixelForward]-[pixfwd:AnchorZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="TestRoot"/> + <rChild name="pixfwd:PixelForwardZMinus"/> + <Translation x="0." y="0." z="-[pixfwd:ZPixelForward]+[pixfwd:AnchorZ]"/> + <rRotation name="pixfwdCommon:Y180"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tec.xml b/examples/DDCMS/data/tec.xml new file mode 100644 index 000000000..96ef559de --- /dev/null +++ b/examples/DDCMS/data/tec.xml @@ -0,0 +1,389 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tec.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="Rin" value="22.30*cm"/> + <Constant name="Rout" value="113.51*cm"/> + <Constant name="ZStart" value="124.00*cm"/> + <Constant name="ZEnd" value="281.27*cm+0.34*mm"/> + <Constant name="WheelR" value="110.30*cm"/> + <Constant name="OuterSkinRin" value="113.46*cm"/> + <Constant name="FrontPlateRin" value="22.90*cm"/> + <Constant name="FrontPlateZ1" value="124.00*cm"/> + <Constant name="FrontPlateZ2" value="124.54*cm"/> + <Constant name="FixFrameDR" value="2.30*cm"/> + <Constant name="FixServiceRin" value="108.80*cm"/> + <Constant name="BeamSupportRin" value="30.00*cm"/> + <Constant name="BeamSupportRout" value="30.10*cm"/> + <Constant name="BeamSupportZ1" value="173.10*cm"/> + <Constant name="InTubeRin1" value="22.30*cm"/> + <Constant name="InTubeRin2" value="30.50*cm"/> + <Constant name="InTubeRout1" value="22.60*cm"/> + <Constant name="InTubeRout2" value="30.80*cm"/> + <Constant name="InTubeZ1" value="166.36*cm"/> + <Constant name="InTubeZ2" value="172.03*cm"/> + <Constant name="ServiceRin" value="110.60*cm"/> + <Constant name="ServiceRout" value="[OuterSkinRin]"/> + <Constant name="ServiceZ1" value="124.00*cm"/> + <Constant name="TECRailsADz" value="15.30*cm"/> + <Constant name="TECRailsAZ" value="160.25*cm"/> + <Constant name="TECRailsBDz" value="26.65*cm"/> + <Constant name="TECRailsBZ" value="250.10*cm"/> + <Constant name="RailsPhi" value="-0.664*deg"/> + <Constant name="RailsDeltaPhi" value="7.409*deg"/> + <Constant name="RailsRin" value="112.70*cm"/> + <Constant name="Wheel0Z" value="132.25*cm"/> + <Constant name="Wheel1Z" value="146.25*cm"/> + <Constant name="Wheel2Z" value="160.25*cm"/> + <Constant name="Wheel3Z" value="174.25*cm"/> + <Constant name="Wheel4Z" value="188.25*cm"/> + <Constant name="Wheel5Z" value="205.75*cm"/> + <Constant name="Wheel6Z" value="224.75*cm"/> + <Constant name="Wheel7Z" value="245.25*cm"/> + <Constant name="Wheel8Z" value="266.75*cm"/> + <Constant name="BackplateZ" value="[Wheel8Z]+87.4*mm-0.5*[tecwheel:DiskT]+0.5*[tecbackplate:Thick]"/> + <Constant name="AxialCableW" value="2.0*deg"/> + <Constant name="AxialCableT" value="0.21*cm"/> + <Constant name="CableFi1" value="-11.25*deg"/> + <Constant name="CableFi2" value="11.25*deg"/> + <Constant name="TECDz" value="([ZEnd]-[ZStart])/2"/> + <Constant name="ZPos" value="([ZEnd]+[ZStart])/2"/> + <Constant name="FrontFixRout" value="[FrontPlateRin]+[FixFrameDR]"/> + <Constant name="FrontPlateDz" value="([FrontPlateZ2]-[FrontPlateZ1])/2"/> + <Constant name="DPhi" value="[AxialCableW]+0.05*deg"/> + <Constant name="AxialCableDz" value="[tecpetpar:PetalThick]+ [tecpetpar:ICCThick]"/> + <Constant name="RailsInsARin" value="0.3*cm"/> + <Constant name="RailsInsARout" value="0.95*cm"/> + <Constant name="RailsInsADz" value="([ServiceRout]-[ServiceRin])/2-2"/> + <Constant name="RailsInsBRin" value="0.75*cm"/> + <Constant name="RailsInsBRout" value="0.95*cm"/> + <Constant name="RailsInsBDz" value="([ServiceRout]-[ServiceRin])/2-2"/> + <Constant name="RailsInsXup" value="([ServiceRout]+[ServiceRin])/2-1"/> + <Constant name="RailsInsXmid" value="([ServiceRout]+[ServiceRin])/2-2"/> + <Constant name="RailsInsXdown" value="([ServiceRout]+[ServiceRin])/2-4"/> + </ConstantsSection> + <RotationSection label="tec.xml"> + <Rotation name="90Y" thetaX="180*deg" phiX="0*deg" thetaY="90*deg" phiY="90*deg" thetaZ="90*deg" phiZ="0*deg"/> + </RotationSection> + <SolidSection label="tec.xml"> + <Tubs name="TEC" rMin="[Rin]" rMax="[Rout]" dz="[TECDz]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TECWheels" rMin="[Rin]" rMax="[WheelR]" dz="[TECDz]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TECOuterSkin" rMin="[OuterSkinRin]" rMax="[Rout]" dz="[TECDz]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TECFrontPlate" rMin="[FrontPlateRin]" rMax="[WheelR]" dz="[FrontPlateDz]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TECFrontPlateFixB" rMin="[FrontPlateRin]" rMax="[FrontFixRout]" dz="[FrontPlateDz]" startPhi="-7.60*deg" deltaPhi="15.20*deg"/> + <Tubs name="TECFrontPlateFixT" rMin="[FixServiceRin]" rMax="[WheelR]" dz="[FrontPlateDz]" startPhi="-2.50*deg" deltaPhi="5.00*deg"/> + <Tubs name="TECBeamSupport" rMin="[BeamSupportRin]" rMax="[BeamSupportRout]" dz="([ZEnd]-[BeamSupportZ1])/2" startPhi="0*deg" deltaPhi="360*deg"/> + <Polycone name="TECInnerTube" startPhi="0*deg" deltaPhi="360*deg"> + <ZSection z="-[TECDz]" rMin="[InTubeRin1]" rMax="[InTubeRout1]"/> + <ZSection z="([InTubeZ1]-[ZPos])" rMin="[InTubeRin1]" rMax="[InTubeRout1]"/> + <ZSection z="([InTubeZ2]-[ZPos])" rMin="[InTubeRin2]" rMax="[InTubeRout2]"/> + <ZSection z="[TECDz]-2.97" rMin="[InTubeRin2]" rMax="[InTubeRout2]"/> + </Polycone> + <Tubs name="RailsA" rMin="[ServiceRin]" rMax="[tecservices:GasPipeRpos]+[tecservices:GasPipeRout]" dz="[TECRailsADz]" startPhi="[RailsDeltaPhi]/2" deltaPhi="[RailsDeltaPhi]"/> + <Tubs name="RailsB" rMin="[ServiceRin]" rMax="[tecservices:GasPipeRpos]+[tecservices:GasPipeRout]" dz="[TECRailsBDz]" startPhi="[RailsDeltaPhi]/2" deltaPhi="[RailsDeltaPhi]"/> + <Tubs name="TECRailsInsertA" rMin="[RailsInsARin]" rMax="[RailsInsARout]" dz="[RailsInsADz]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TECRailsInsertB" rMin="[RailsInsBRin]" rMax="[RailsInsBRout]" dz="[RailsInsBDz]" startPhi="0*deg" deltaPhi="360*deg"/> + </SolidSection> + <LogicalPartSection label="tec.xml"> + <LogicalPart name="TEC" category="unspecified"> + <rSolid name="tec:TEC"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TECWheels" category="unspecified"> + <rSolid name="tec:TECWheels"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TECOuterSkin" category="unspecified"> + <rSolid name="tec:TECOuterSkin"/> + <rMaterial name="tecmaterial:TEC_Skin"/> + </LogicalPart> + <LogicalPart name="TECFrontPlate" category="unspecified"> + <rSolid name="tec:TECFrontPlate"/> + <rMaterial name="tecmaterial:Tk_SO_FC_C"/> + </LogicalPart> + <LogicalPart name="TECFrontPlateFixB" category="unspecified"> + <rSolid name="tec:TECFrontPlateFixB"/> + <rMaterial name="tecmaterial:TEC_Fixframe"/> + </LogicalPart> + <LogicalPart name="TECFrontPlateFixT" category="unspecified"> + <rSolid name="tec:TECFrontPlateFixT"/> + <rMaterial name="tecmaterial:TEC_FixServ"/> + </LogicalPart> + <LogicalPart name="TECBeamSupport" category="unspecified"> + <rSolid name="tec:TECBeamSupport"/> + <rMaterial name="tecmaterial:Tk_SO_FC_D"/> + </LogicalPart> + <LogicalPart name="TECInnerTube" category="unspecified"> + <rSolid name="tec:TECInnerTube"/> + <rMaterial name="tecmaterial:Tk_SO_FC_E"/> + </LogicalPart> + <LogicalPart name="RailsA" category="unspecified"> + <rSolid name="tec:RailsA"/> + <rMaterial name="tecmaterial:TEC_Rails"/> + </LogicalPart> + <LogicalPart name="RailsB" category="unspecified"> + <rSolid name="tec:RailsB"/> + <rMaterial name="tecmaterial:TEC_Rails"/> + </LogicalPart> + <LogicalPart name="TECRailsInsertA" category="unspecified"> + <rSolid name="tec:TECRailsInsertA"/> + <rMaterial name="trackermaterial:T_Aluminium"/> + </LogicalPart> + <LogicalPart name="TECRailsInsertB" category="unspecified"> + <rSolid name="tec:TECRailsInsertB"/> + <rMaterial name="trackermaterial:T_Aluminium"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tec.xml"> + <PosPart copyNumber="1"> + <rParent name="tec:TEC"/> + <rChild name="tec:TECWheels"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tec:TEC"/> + <rChild name="tec:TECOuterSkin"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tec:TECWheels"/> + <rChild name="tecbackplate:TECBackPlate"/> + <Translation x="[zero]" y="[zero]" z="[BackplateZ]-[ZPos]"/> + <!--Translation x="[zero]" y="[zero]" z="[TECDz]-0.5*[tecbackplate:Thick]"/--> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tec:TECWheels"/> + <rChild name="tec:TECFrontPlate"/> + <Translation x="[zero]" y="[zero]" z="([FrontPlateZ2]+[FrontPlateZ1])/2-[ZPos]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tec:TECWheels"/> + <rChild name="tec:TECBeamSupport"/> + <Translation x="[zero]" y="[zero]" z="([BeamSupportZ1]-[ZStart])/2"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tec:TECWheels"/> + <rChild name="tec:TECInnerTube"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tec:TEC"/> + <rChild name="tecservices:TECServices"/> + </PosPart> + <PosPart copyNumber="0"> + <rParent name="tec:TECWheels"/> + <rChild name="tecwheela:TECWheelA"/> + <Translation x="[zero]" y="[zero]" z="[Wheel0Z]-[ZPos]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tec:TECWheels"/> + <rChild name="tecwheela:TECWheelA"/> + <Translation x="[zero]" y="[zero]" z="[Wheel1Z]-[ZPos]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tec:TECWheels"/> + <rChild name="tecwheela:TECWheelA"/> + <Translation x="[zero]" y="[zero]" z="[Wheel2Z]-[ZPos]"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="tec:TECWheels"/> + <rChild name="tecwheelb:TECWheelB"/> + <Translation x="[zero]" y="[zero]" z="[Wheel3Z]-[ZPos]"/> + </PosPart> + <PosPart copyNumber="4"> + <rParent name="tec:TECWheels"/> + <rChild name="tecwheelb:TECWheelB"/> + <Translation x="[zero]" y="[zero]" z="[Wheel4Z]-[ZPos]"/> + </PosPart> + <PosPart copyNumber="5"> + <rParent name="tec:TECWheels"/> + <rChild name="tecwheel6:TECWheel6"/> + <Translation x="[zero]" y="[zero]" z="[Wheel5Z]-[ZPos]"/> + </PosPart> + <PosPart copyNumber="6"> + <rParent name="tec:TECWheels"/> + <rChild name="tecwheelc:TECWheelC"/> + <Translation x="[zero]" y="[zero]" z="[Wheel6Z]-[ZPos]"/> + </PosPart> + <PosPart copyNumber="7"> + <rParent name="tec:TECWheels"/> + <rChild name="tecwheelc:TECWheelC"/> + <Translation x="[zero]" y="[zero]" z="[Wheel7Z]-[ZPos]"/> + </PosPart> + <PosPart copyNumber="8"> + <rParent name="tec:TECWheels"/> + <rChild name="tecwheeld:TECWheelD"/> + <Translation x="[zero]" y="[zero]" z="[Wheel8Z]-[ZPos]"/> + </PosPart> + <!-- TECRailsInsert--> + <!--PosPart copyNumber="1"> + <rParent name="tec:RailsA"/> + <rChild name="tec:TECRailsInsertA"/> + <rRotation name="90Y"/> + <Translation x="[RailsInsXmid]" y="5.69*cm" z="-14.0*cm"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tec:RailsA"/> + <rChild name="tec:TECRailsInsertA"/> + <rRotation name="90Y"/> + <Translation x="[RailsInsXmid]" y="5.69*cm" z="0*fm"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="tec:RailsA"/> + <rChild name="tec:TECRailsInsertA"/> + <rRotation name="90Y"/> + <Translation x="[RailsInsXmid]" y="5.69*cm" z="14.0*cm"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tec:RailsA"/> + <rChild name="tec:TECRailsInsertB"/> + <rRotation name="90Y"/> + <Translation x="[RailsInsXup]" y="1.69*cm" z="-14.0*cm"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tec:RailsA"/> + <rChild name="tec:TECRailsInsertB"/> + <rRotation name="90Y"/> + <Translation x="[RailsInsXup]" y="1.69*cm" z="0*fm"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="tec:RailsA"/> + <rChild name="tec:TECRailsInsertB"/> + <rRotation name="90Y"/> + <Translation x="[RailsInsXup]" y="1.69*cm" z="14.0*cm"/> + </PosPart> + <PosPart copyNumber="4"> + <rParent name="tec:RailsA"/> + <rChild name="tec:TECRailsInsertB"/> + <rRotation name="90Y"/> + <Translation x="[RailsInsXdown]" y="9.69*cm" z="-14.0*cm"/> + </PosPart> + <PosPart copyNumber="5"> + <rParent name="tec:RailsA"/> + <rChild name="tec:TECRailsInsertB"/> + <rRotation name="90Y"/> + <Translation x="[RailsInsXdown]" y="9.69*cm" z="0*fm"/> + </PosPart> + <PosPart copyNumber="6"> + <rParent name="tec:RailsA"/> + <rChild name="tec:TECRailsInsertB"/> + <rRotation name="90Y"/> + <Translation x="[RailsInsXdown]" y="9.69*cm" z="14.0*cm"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tec:RailsB"/> + <rChild name="tec:TECRailsInsertA"/> + <rRotation name="90Y"/> + <Translation x="[RailsInsXmid]" y="5.69*cm" z="-25.35*cm"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tec:RailsB"/> + <rChild name="tec:TECRailsInsertA"/> + <rRotation name="90Y"/> + <Translation x="[RailsInsXmid]" y="5.69*cm" z="-4.85*cm"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="tec:RailsB"/> + <rChild name="tec:TECRailsInsertA"/> + <rRotation name="90Y"/> + <Translation x="[RailsInsXmid]" y="5.69*cm" z="16.65*cm"/> + </PosPart> + <PosPart copyNumber="4"> + <rParent name="tec:RailsB"/> + <rChild name="tec:TECRailsInsertA"/> + <rRotation name="90Y"/> + <Translation x="[RailsInsXmid]" y="5.69*cm" z="25.39*cm"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tec:RailsB"/> + <rChild name="tec:TECRailsInsertB"/> + <rRotation name="90Y"/> + <Translation x="[RailsInsXup]" y="1.69*cm" z="-25.35*cm"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tec:RailsB"/> + <rChild name="tec:TECRailsInsertB"/> + <rRotation name="90Y"/> + <Translation x="[RailsInsXup]" y="1.69*cm" z="-4.85*cm"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="tec:RailsB"/> + <rChild name="tec:TECRailsInsertB"/> + <rRotation name="90Y"/> + <Translation x="[RailsInsXup]" y="1.69*cm" z="16.65*cm"/> + </PosPart> + <PosPart copyNumber="4"> + <rParent name="tec:RailsB"/> + <rChild name="tec:TECRailsInsertB"/> + <rRotation name="90Y"/> + <Translation x="[RailsInsXup]" y="1.69*cm" z="25.39*cm"/> + </PosPart> + <PosPart copyNumber="5"> + <rParent name="tec:RailsB"/> + <rChild name="tec:TECRailsInsertB"/> + <rRotation name="90Y"/> + <Translation x="[RailsInsXdown]" y="9.69*cm" z="-25.35*cm"/> + </PosPart> + <PosPart copyNumber="6"> + <rParent name="tec:RailsB"/> + <rChild name="tec:TECRailsInsertB"/> + <rRotation name="90Y"/> + <Translation x="[RailsInsXdown]" y="9.69*cm" z="-4.85*cm"/> + </PosPart> + <PosPart copyNumber="7"> + <rParent name="tec:RailsB"/> + <rChild name="tec:TECRailsInsertB"/> + <rRotation name="90Y"/> + <Translation x="[RailsInsXdown]" y="9.69*cm" z="16.65*cm"/> + </PosPart> + <PosPart copyNumber="8"> + <rParent name="tec:RailsB"/> + <rChild name="tec:TECRailsInsertB"/> + <rRotation name="90Y"/> + <Translation x="[RailsInsXdown]" y="9.69*cm" z="25.35*cm"/> + </PosPart--> + </PosPartSection> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tec:TECFrontPlate"/> + <String name="ChildName" value="tec:TECFrontPlateFixB"/> + <Numeric name="N" value="4"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="67.5*deg"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tec:TECFrontPlate"/> + <String name="ChildName" value="tec:TECFrontPlateFixT"/> + <Numeric name="N" value="8"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="11.25*deg"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <!--Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tec:RailsA"/> + <Numeric name="N" value="2" /> + <Numeric name="StartCopyNo" value="1" /> + <Numeric name="IncrCopyNo" value="1" /> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[RailsPhi]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> + 0, 0, [TECRailsAZ]-[ZPos] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tec:RailsB"/> + <Numeric name="N" value="2" /> + <Numeric name="StartCopyNo" value="1" /> + <Numeric name="IncrCopyNo" value="1" /> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[RailsPhi]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> + 0, 0, [TECRailsBZ]-[ZPos] </Vector> + </Algorithm--> +</DDDefinition> diff --git a/examples/DDCMS/data/tecbackplate.xml b/examples/DDCMS/data/tecbackplate.xml new file mode 100644 index 000000000..d86aa0415 --- /dev/null +++ b/examples/DDCMS/data/tecbackplate.xml @@ -0,0 +1,121 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecbackplate.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="Rin" value="[tecpetal3:PetalContRmin]"/> + <!-- drawings show Rin =302*mm--> + <Constant name="Rout" value="[tec:WheelR]"/> + <Constant name="Thick" value="[tecwheel:DiskT] + [ThermalShieldThick]"/> + <Constant name="ThermalShieldRout" value="1053*mm"/> + <Constant name="ThermalShieldThick" value="49.7*mm"/> + <Constant name="CircPipeRin" value="[ThermalShieldRout]"/> + <Constant name="CircPipeRout" value="[Rout]"/> + <Constant name="CircPipeThick" value="[ThermalShieldThick]"/> + <Constant name="TiltmeterDist" value="792*mm"/> + <Constant name="TiltmeterDxy" value="42*mm"/> + <Constant name="TiltmeterDz" value="[ThermalShieldThick]/2."/> + </ConstantsSection> + <SolidSection label="tecbackplate.xml"> + <Tubs name="TECBackPlate" rMin="[Rin]" rMax="[Rout]" dz="0.5*[Thick]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TECThermalShield" rMin="[Rin]" rMax="[ThermalShieldRout]" dz="0.5*[ThermalShieldThick]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TECCircPipe" rMin="[CircPipeRin]" rMax="[CircPipeRout]" dz="0.5*[CircPipeThick]" startPhi="0*deg" deltaPhi="360*deg"/> + <Box name="TECTiltmeter" dx="[TiltmeterDxy]" dy="[TiltmeterDxy]" dz="[TiltmeterDz]"/> + </SolidSection> + <LogicalPartSection label="tecbackplate.xml"> + <LogicalPart name="TECBackPlate" category="unspecified"> + <rSolid name="tecbackplate:TECBackPlate"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TECBackDisk" category="unspecified"> + <rSolid name="tecwheeld:TECWheelDiskD"/> + <rMaterial name="tecmaterial:TEC_BackDiskCF"/> + </LogicalPart> + <LogicalPart name="TECBackDiskNomex" category="unspecified"> + <rSolid name="tecwheeld:TECWheelNomexD"/> + <rMaterial name="tecmaterial:TEC_Nomex"/> + </LogicalPart> + <LogicalPart name="TECBackDiskGroundingRing" category="unspecified"> + <rSolid name="tecwheel:TECGroundingRing"/> + <rMaterial name="trackermaterial:T_Copper"/> + </LogicalPart> + <LogicalPart name="TECThermalShield" category="unspecified"> + <rSolid name="tecbackplate:TECThermalShield"/> + <rMaterial name="tecmaterial:TEC_ThermalShield"/> + </LogicalPart> + <LogicalPart name="TECCircPipe" category="unspecified"> + <rSolid name="tecbackplate:TECCircPipe"/> + <rMaterial name="tecmaterial:TEC_CircPipe"/> + </LogicalPart> + <LogicalPart name="TECTiltmeter" category="unspecified"> + <rSolid name="tecbackplate:TECTiltmeter"/> + <rMaterial name="tecmaterial:TEC_Tiltmeter"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tecbackplate.xml"> + <PosPart copyNumber="1"> + <rParent name="tecbackplate:TECBackPlate"/> + <rChild name="tecbackplate:TECBackDisk"/> + <Translation x="[zero]" y="[zero]" z="(-0.5*[Thick]+0.5*[tecwheel:DiskT])"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecbackplate:TECBackDisk"/> + <rChild name="tecbackplate:TECBackDiskNomex"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecbackplate:TECBackDisk"/> + <rChild name="tecbackplate:TECBackDiskGroundingRing"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecbackplate:TECBackPlate"/> + <rChild name="tecbackplate:TECThermalShield"/> + <Translation x="[zero]" y="[zero]" z="(-0.5*[Thick]+[tecwheel:DiskT]+0.5*[ThermalShieldThick])"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecbackplate:TECBackPlate"/> + <rChild name="tecbackplate:TECCircPipe"/> + <Translation x="[zero]" y="[zero]" z="(-0.5*[Thick]+[tecwheel:DiskT]+0.5*[CircPipeThick])"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecbackplate:TECThermalShield"/> + <rChild name="tecbackplate:TECTiltmeter"/> + <Translation x="[zero]" y="[TiltmeterDist]" z="[zero]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tecbackplate:TECThermalShield"/> + <rChild name="tecbackplate:TECTiltmeter"/> + <Translation x="[TiltmeterDist]" y="[zero]" z="[zero]"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="tecbackplate:TECThermalShield"/> + <rChild name="tecbackplate:TECTiltmeter"/> + <Translation x="[zero]" y="-[TiltmeterDist]" z="[zero]"/> + </PosPart> + <PosPart copyNumber="4"> + <rParent name="tecbackplate:TECThermalShield"/> + <rChild name="tecbackplate:TECTiltmeter"/> + <Translation x="-[TiltmeterDist]" y="[zero]" z="[zero]"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecbackplate:TECBackDiskNomex"/> + <String name="ChildName" value="tecwheeld:TECFixSupportD"/> + <Numeric name="N" value="[tecwheel:FixSuppN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:FixSuppFi]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecbackplate:TECBackDiskNomex"/> + <String name="ChildName" value="tecwheel:TECFixService"/> + <Numeric name="N" value="[tecwheel:FixServN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:FixServFi]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecmaterial.xml b/examples/DDCMS/data/tecmaterial.xml new file mode 100644 index 000000000..86e6d1f93 --- /dev/null +++ b/examples/DDCMS/data/tecmaterial.xml @@ -0,0 +1,1093 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <MaterialSection label="tecmaterial.xml"> + <CompositeMaterial name="Tk_SO_FC_D" density="1.69*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.84491305"> + <rMaterial name="materials:Carbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.042542086"> + <rMaterial name="materials:Hydrogen" /> + </MaterialFraction> + <MaterialFraction fraction="0.11254487"> + <rMaterial name="materials:Oxygen" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="Tk_SO_FC_E" density="1.69*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.84491305"> + <rMaterial name="materials:Carbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.042542086"> + <rMaterial name="materials:Hydrogen" /> + </MaterialFraction> + <MaterialFraction fraction="0.11254487"> + <rMaterial name="materials:Oxygen" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_Nomex" density="29*mg/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="1."> + <rMaterial name="trackermaterial:T_Nomex" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_SideFrameSuppliesBox" density="1.42*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.4"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.6"> + <rMaterial name="materials:Oxygen" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_Hybrid4APV" density="4.853*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.01244"> + <rMaterial name="materials:Alumina" /> + </MaterialFraction> + <MaterialFraction fraction="0.03101"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.01097"> + <rMaterial name="materials:SMD_metal" /> + </MaterialFraction> + <MaterialFraction fraction="0.00116"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.58835"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.04057"> + <rMaterial name="materials:Silicon" /> + </MaterialFraction> + <MaterialFraction fraction="0.2722"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.04114"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.00215"> + <rMaterial name="materials:Carbon" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_Hybrid6APV" density="4.853*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.01293"> + <rMaterial name="materials:Alumina" /> + </MaterialFraction> + <MaterialFraction fraction="0.03041"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.01203"> + <rMaterial name="materials:SMD_metal" /> + </MaterialFraction> + <MaterialFraction fraction="0.0017"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.57692"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.05642"> + <rMaterial name="materials:Silicon" /> + </MaterialFraction> + <MaterialFraction fraction="0.26691"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.04034"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.00234"> + <rMaterial name="materials:Carbon" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_PitchAdapter" density="2.285*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.01964"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.00405"> + <rMaterial name="materials:Antimony" /> + </MaterialFraction> + <MaterialFraction fraction="0.02119"> + <rMaterial name="materials:Titanium" /> + </MaterialFraction> + <MaterialFraction fraction="0.11635"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.2683"> + <rMaterial name="materials:Silicon" /> + </MaterialFraction> + <MaterialFraction fraction="0.04916"> + <rMaterial name="materials:Potassium" /> + </MaterialFraction> + <MaterialFraction fraction="0.02169"> + <rMaterial name="materials:Bor 11" /> + </MaterialFraction> + <MaterialFraction fraction="0.03975"> + <rMaterial name="materials:Zinc" /> + </MaterialFraction> + <MaterialFraction fraction="0.03986"> + <rMaterial name="materials:Sodium" /> + </MaterialFraction> + <MaterialFraction fraction="0.42001"> + <rMaterial name="materials:Oxygen" /> + </MaterialFraction> + <MaterialFraction fraction="1e-05"> + <rMaterial name="materials:Chromium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_frame_top" density="1.931*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="1.0"> + <rMaterial name="materials:Carbon" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_frame_side_1_4" density="2.990*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.0001"> + <rMaterial name="materials:Gold" /> + </MaterialFraction> + <MaterialFraction fraction="0.01928"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.16527"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.81353"> + <rMaterial name="materials:Carbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.00182"> + <rMaterial name="materials:Nickel" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_frame_side_5_7" density="1.835*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="9e-05"> + <rMaterial name="materials:Gold" /> + </MaterialFraction> + <MaterialFraction fraction="0.2644"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.0219"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00139"> + <rMaterial name="materials:Nickel" /> + </MaterialFraction> + <MaterialFraction fraction="0.71223"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_SideFrSupBox" density="1.420*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.00108"> + <rMaterial name="materials:Gold" /> + </MaterialFraction> + <MaterialFraction fraction="0.46347"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.16343"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.01545"> + <rMaterial name="materials:Nickel" /> + </MaterialFraction> + <MaterialFraction fraction="0.35657"> + <rMaterial name="materials:Silver" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_SiReenforcment" density="3.731*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="1.0"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_petal" density="0.325*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.0047"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.0889"> + <rMaterial name="materials:Titanium" /> + </MaterialFraction> + <MaterialFraction fraction="0.06686"> + <rMaterial name="tecmaterial:TEC_Nomex" /> + </MaterialFraction> + <MaterialFraction fraction="0.00444"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.1168"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + <MaterialFraction fraction="0.00328"> + <rMaterial name="materials:Peek" /> + </MaterialFraction> + <MaterialFraction fraction="0.03366"> + <rMaterial name="trackermaterial:Optical_Fiber" /> + </MaterialFraction> + <MaterialFraction fraction="0.68137"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_OptoH" density="4.200*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.00692"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.00084"> + <rMaterial name="materials:Air" /> + </MaterialFraction> + <MaterialFraction fraction="0.24416"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.22453"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.24707"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.11266"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.1401"> + <rMaterial name="materials:Brass" /> + </MaterialFraction> + <MaterialFraction fraction="0.02371"> + <rMaterial name="trackermaterial:T_Barium_Titanate" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_DOHM" density="2.969*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.40226"> + <rMaterial name="tobmaterial:TOB_DOH" /> + </MaterialFraction> + <MaterialFraction fraction="0.01487"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.13519"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.0768"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.0183"> + <rMaterial name="materials:Brass" /> + </MaterialFraction> + <MaterialFraction fraction="0.31357"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.03901"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_petalinsert" density="4.739*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.20957"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.0385"> + <rMaterial name="materials:Brass" /> + </MaterialFraction> + <MaterialFraction fraction="0.00797"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.74097"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.00298"> + <rMaterial name="materials:Peek" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_ICC01LF" density="1.218*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.04545"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.03276"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.00011"> + <rMaterial name="materials:Gold" /> + </MaterialFraction> + <MaterialFraction fraction="0.06699"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.26301"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.03844"> + <rMaterial name="materials:Brass" /> + </MaterialFraction> + <MaterialFraction fraction="0.04788"> + <rMaterial name="materials:Peek" /> + </MaterialFraction> + <MaterialFraction fraction="0.23006"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.23995"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.03322"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + <MaterialFraction fraction="0.00214"> + <rMaterial name="materials:Nickel" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_ICC2F" density="3.355*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.04734"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.026"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.00012"> + <rMaterial name="materials:Gold" /> + </MaterialFraction> + <MaterialFraction fraction="0.04602"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.2773"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.03051"> + <rMaterial name="materials:Brass" /> + </MaterialFraction> + <MaterialFraction fraction="0.04987"> + <rMaterial name="materials:Peek" /> + </MaterialFraction> + <MaterialFraction fraction="0.1657"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.3328"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.02211"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + <MaterialFraction fraction="0.00222"> + <rMaterial name="materials:Nickel" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_ICC35F" density="3.200*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.01212"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.00749"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="3e-05"> + <rMaterial name="materials:Gold" /> + </MaterialFraction> + <MaterialFraction fraction="0.0182"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.26402"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00425"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.00879"> + <rMaterial name="materials:Brass" /> + </MaterialFraction> + <MaterialFraction fraction="0.01277"> + <rMaterial name="materials:Peek" /> + </MaterialFraction> + <MaterialFraction fraction="0.10676"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.55519"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.00983"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + <MaterialFraction fraction="0.00057"> + <rMaterial name="materials:Nickel" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_ICC1SF" density="2.183*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.03717"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.02297"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="9e-05"> + <rMaterial name="materials:Gold" /> + </MaterialFraction> + <MaterialFraction fraction="0.0271"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.27509"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.02695"> + <rMaterial name="materials:Brass" /> + </MaterialFraction> + <MaterialFraction fraction="0.03916"> + <rMaterial name="materials:Peek" /> + </MaterialFraction> + <MaterialFraction fraction="0.09757"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.45429"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.01787"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + <MaterialFraction fraction="0.00175"> + <rMaterial name="materials:Nickel" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_ICC0F" density="3.343*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.05789"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.02385"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.00014"> + <rMaterial name="materials:Gold" /> + </MaterialFraction> + <MaterialFraction fraction="0.04343"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.25615"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.02798"> + <rMaterial name="materials:Brass" /> + </MaterialFraction> + <MaterialFraction fraction="0.06098"> + <rMaterial name="materials:Peek" /> + </MaterialFraction> + <MaterialFraction fraction="0.19929"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.30564"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.02194"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + <MaterialFraction fraction="0.00272"> + <rMaterial name="materials:Nickel" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_ICC46F" density="2.865*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.04776"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.00874"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.00012"> + <rMaterial name="materials:Gold" /> + </MaterialFraction> + <MaterialFraction fraction="0.03324"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.2646"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.01026"> + <rMaterial name="materials:Brass" /> + </MaterialFraction> + <MaterialFraction fraction="0.05032"> + <rMaterial name="materials:Peek" /> + </MaterialFraction> + <MaterialFraction fraction="0.14008"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.42377"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.01886"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + <MaterialFraction fraction="0.00224"> + <rMaterial name="materials:Nickel" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_ICC1B" density="2.115*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.02528"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.02524"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="8e-05"> + <rMaterial name="materials:Gold" /> + </MaterialFraction> + <MaterialFraction fraction="0.03771"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.2752"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.02962"> + <rMaterial name="materials:Brass" /> + </MaterialFraction> + <MaterialFraction fraction="0.16436"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.42028"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.02079"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + <MaterialFraction fraction="0.00144"> + <rMaterial name="materials:Nickel" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_ICC35B" density="3.157*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.01025"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.00704"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="3e-05"> + <rMaterial name="materials:Gold" /> + </MaterialFraction> + <MaterialFraction fraction="0.01871"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.26067"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00428"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.00826"> + <rMaterial name="materials:Brass" /> + </MaterialFraction> + <MaterialFraction fraction="0.0108"> + <rMaterial name="materials:Peek" /> + </MaterialFraction> + <MaterialFraction fraction="0.11119"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.55824"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.01005"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + <MaterialFraction fraction="0.00048"> + <rMaterial name="materials:Nickel" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_ICC0LB" density="2.916*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.04027"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.03318"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.0001"> + <rMaterial name="materials:Gold" /> + </MaterialFraction> + <MaterialFraction fraction="0.04808"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.2504"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.03892"> + <rMaterial name="materials:Brass" /> + </MaterialFraction> + <MaterialFraction fraction="0.04242"> + <rMaterial name="materials:Peek" /> + </MaterialFraction> + <MaterialFraction fraction="0.17716"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.3454"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.02218"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + <MaterialFraction fraction="0.00189"> + <rMaterial name="materials:Nickel" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_ICC2B" density="2.868*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.03474"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.02862"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="9e-05"> + <rMaterial name="materials:Gold" /> + </MaterialFraction> + <MaterialFraction fraction="0.04148"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.23894"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.03358"> + <rMaterial name="materials:Brass" /> + </MaterialFraction> + <MaterialFraction fraction="0.03659"> + <rMaterial name="materials:Peek" /> + </MaterialFraction> + <MaterialFraction fraction="0.15283"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.41232"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.01918"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + <MaterialFraction fraction="0.00163"> + <rMaterial name="materials:Nickel" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_ICC46B" density="3.096*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.04246"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.01272"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.0001"> + <rMaterial name="materials:Gold" /> + </MaterialFraction> + <MaterialFraction fraction="0.03072"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.238"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.01492"> + <rMaterial name="materials:Brass" /> + </MaterialFraction> + <MaterialFraction fraction="0.04473"> + <rMaterial name="materials:Peek" /> + </MaterialFraction> + <MaterialFraction fraction="0.12221"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.47552"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.01664"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + <MaterialFraction fraction="0.002"> + <rMaterial name="materials:Nickel" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_InnerManifold" density="3.698*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.16543"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + <MaterialFraction fraction="0.83457"> + <rMaterial name="materials:Titanium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_CCUM" density="4.762*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.27951"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.0881"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.55723"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.07516"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_ServChan" density="3.182*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.01852"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.88755"> + <rMaterial name="trackermaterial:Fibre_Ribbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.09393"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_ServChanIns" density="0.943*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="1.0"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_AxGrounding" density="2.127*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.20529"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.79471"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_CoolPipe" density="9.274*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="1.0"> + <rMaterial name="materials:Steel-008" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_AxCable" density="0.957*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.03995"> + <rMaterial name="trackermaterial:MS_cntrl_cable" /> + </MaterialFraction> + <MaterialFraction fraction="0.32482"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0.34061"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.29462"> + <rMaterial name="trackermaterial:CAB_Al60" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_GasPipe" density="2.937*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.04053"> + <rMaterial name="materials:Steel-008" /> + </MaterialFraction> + <MaterialFraction fraction="0.95947"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_PhiCableL" density="0.453*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.19421"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0.06174"> + <rMaterial name="trackermaterial:MS_cntrl_cable" /> + </MaterialFraction> + <MaterialFraction fraction="0.20367"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.19221"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.06638"> + <rMaterial name="materials:Tin" /> + </MaterialFraction> + <MaterialFraction fraction="0.17603"> + <rMaterial name="trackermaterial:CAB_Al60" /> + </MaterialFraction> + <MaterialFraction fraction="0.10576"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_PhiCableU" density="0.755*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.1898"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0.06692"> + <rMaterial name="trackermaterial:MS_cntrl_cable" /> + </MaterialFraction> + <MaterialFraction fraction="0.1852"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.20844"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.07162"> + <rMaterial name="materials:Tin" /> + </MaterialFraction> + <MaterialFraction fraction="0.20623"> + <rMaterial name="trackermaterial:CAB_Al60" /> + </MaterialFraction> + <MaterialFraction fraction="0.07178"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_GroundingRing" density="23.139*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.2285"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.7715"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_Skin" density="1.352*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.18681"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.81319"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_OptoCon" density="0.321*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.50304"> + <rMaterial name="materials:Steel-008" /> + </MaterialFraction> + <MaterialFraction fraction="0.48126"> + <rMaterial name="trackermaterial:T_Ribbon12xMUConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.00623"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.00948"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_Rails" density="2.211*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="1.0"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_BackDiskCF" density="2.984*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="1.0"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_ThermalShield" density="0.166*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.00385"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.0037"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.22782"> + <rMaterial name="tecmaterial:TEC_Nomex" /> + </MaterialFraction> + <MaterialFraction fraction="0.01799"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.74664"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_CircPipe" density="0.763*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.13141"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0.15522"> + <rMaterial name="trackermaterial:MS_cntrl_cable" /> + </MaterialFraction> + <MaterialFraction fraction="0.13783"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.41593"> + <rMaterial name="materials:Steel-008" /> + </MaterialFraction> + <MaterialFraction fraction="0.11923"> + <rMaterial name="trackermaterial:CAB_Al60" /> + </MaterialFraction> + <MaterialFraction fraction="0.04038"> + <rMaterial name="materials:Brass" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_BHDisk" density="1.556*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.00661"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.00467"> + <rMaterial name="materials:Steel-008" /> + </MaterialFraction> + <MaterialFraction fraction="0.01234"> + <rMaterial name="trackermaterial:T_Nomex" /> + </MaterialFraction> + <MaterialFraction fraction="0.03247"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.94391"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_BHCovers" density="1.834*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.05206"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.11002"> + <rMaterial name="materials:Nickel" /> + </MaterialFraction> + <MaterialFraction fraction="0.83792"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial density="2.669*0.79*g/cm3" method="mixture by weight" name="TEC_PatchpanelBox" symbol=" "> + <MaterialFraction fraction="0.01151"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0.19806"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.01207"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.7577"> + <rMaterial name="trackermaterial:MS_Cu60" /> + </MaterialFraction> + <MaterialFraction fraction="0.00372"> + <rMaterial name="materials:Steel-008" /> + </MaterialFraction> + <MaterialFraction fraction="0.01044"> + <rMaterial name="trackermaterial:CAB_Al60" /> + </MaterialFraction> + <MaterialFraction fraction="0.0065"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_Connectors" density="2.669*1.21*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.01151"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0.19806"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.01207"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.7577"> + <rMaterial name="trackermaterial:MS_Cu60" /> + </MaterialFraction> + <MaterialFraction fraction="0.00372"> + <rMaterial name="materials:Steel-008" /> + </MaterialFraction> + <MaterialFraction fraction="0.01044"> + <rMaterial name="trackermaterial:CAB_Al60" /> + </MaterialFraction> + <MaterialFraction fraction="0.0065"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_PatchCtrlBox" density="1.382*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.00445"> + <rMaterial name="trackermaterial:MS_cntrl_cable" /> + </MaterialFraction> + <MaterialFraction fraction="0.8749"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.12065"> + <rMaterial name="trackermaterial:Fibre_Ribbon" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_AlignRing" density="0.534*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.16497"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.0189"> + <rMaterial name="materials:Titanium" /> + </MaterialFraction> + <MaterialFraction fraction="0.00284"> + <rMaterial name="materials:Silicon" /> + </MaterialFraction> + <MaterialFraction fraction="0.04474"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.00378"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.76478"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="Tk_SO_FC_C" density="0.178*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.13847"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.00404"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.15144"> + <rMaterial name="tecmaterial:TEC_Nomex" /> + </MaterialFraction> + <MaterialFraction fraction="0.70605"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_wheel_Nomex" density="0.038*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="1.0"> + <rMaterial name="trackermaterial:T_Nomex" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_wheel_CF" density="1.269*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="1.0"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_wheel6_Nomex" density="0.024*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="1.0"> + <rMaterial name="trackermaterial:T_Nomex" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_wheel6_CF" density="1.627*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="1.0"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_wheelinsert" density="1.353*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="1.0"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_Fixframe" density="1.372*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="1.0"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_FixServ" density="3.050*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.14267"> + <rMaterial name="materials:Steel-008" /> + </MaterialFraction> + <MaterialFraction fraction="0.85733"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_AlignHolder" density="0.559*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="1.0"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_CraneBracket" density="2.021*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="1.0"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_Beamsplitter" density="1.207*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.04703"> + <rMaterial name="materials:Silica" /> + </MaterialFraction> + <MaterialFraction fraction="0.87717"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.0758"> + <rMaterial name="materials:Steel-008" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_RailsConnector" density="6.305*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.10736"> + <rMaterial name="materials:Steel-008" /> + </MaterialFraction> + <MaterialFraction fraction="0.89264"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_RailsSupport" density="2.843*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.00641"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.08031"> + <rMaterial name="materials:Steel-008" /> + </MaterialFraction> + <MaterialFraction fraction="0.00221"> + <rMaterial name="materials:Brass" /> + </MaterialFraction> + <MaterialFraction fraction="0.91107"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TEC_Tiltmeter" density="0.659*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.24222"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.00433"> + <rMaterial name="materials:Titanium" /> + </MaterialFraction> + <MaterialFraction fraction="0.00433"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.61421"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.00433"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.0519"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.07869"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + </CompositeMaterial> + </MaterialSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tecmodpar.xml b/examples/DDCMS/data/tecmodpar.xml new file mode 100644 index 000000000..33eec4756 --- /dev/null +++ b/examples/DDCMS/data/tecmodpar.xml @@ -0,0 +1,48 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecmodpar.xml" eval="true"> + <Constant name="ModuleThick" value="1.55*mm"/> + <Constant name="DetTilt" value="0.100*rad"/> + <Constant name="FrameWidth" value="1.200*cm"/> + <Constant name="FrameOver" value="0.300*cm"/> + <!-- the TopFrameHeight -Parameter should be replaced by local values!!! + It is used to POSITION(!) the wafer the name is missleading and kept for + compatibility--> + <Constant name="TopFrameHeight" value="3.720*cm"/> + <Constant name="TopFrameThick" value="0.764*mm"/> + <Constant name="TopFrameZ" value="0.275*mm"/> + <Constant name="SideFrameThick" value="0.764*mm"/> + <Constant name="SideFrameZ" value="0.025*mm"/> + <Constant name="WaferThick1" value="0.320*mm"/> + <Constant name="WaferThick2" value="0.500*mm"/> + <Constant name="ActiveZ1" value="-0.606*mm"/> + <Constant name="ActiveZ2" value="-0.525*mm"/> + <Constant name="HybridHeight" value="2.526*cm"/> + <Constant name="HybridWidth" value="6.520*cm"/> + <Constant name="HybridThick" value="0.680*mm"/> + <Constant name="HybridZ" value="-0.525*mm"/> + <Constant name="PitchHeight" value="13.0*mm"/> + <Constant name="PitchStereoHeight" value="14.35*mm"/> + <Constant name="PitchThick" value="0.6650*mm"/> + <Constant name="PitchZ" value="-1.1075*mm"/> + <Constant name="GapModule" value="0.500*mm"/> + <Constant name="ModuleThickSS" value="[ModuleThick]+[SideFrameThick]"/> + <Constant name="ModuleThickDS" value="(2*[ModuleThick]+[GapModule])"/> + <Constant name="SiFrSuppBoxThick" value="0.258*mm"/> + <Constant name="SiReenforcementThick" value="0.387*mm"/> + <Constant name="NoOverlapShift" value="0.0*mm"/> + <Constant name="InactiveDy" value="1.50*mm"/> + </ConstantsSection> + <RotationSection label="tecmodpar.xml"> + <Rotation name="90ZD" thetaX="-90*deg" phiX="0*deg" thetaY="0*deg" phiY="0*deg" thetaZ="90*deg" phiZ="90*deg"/> + <Rotation name="9NYX" thetaX="0*deg" phiX="0*deg" thetaY="90*deg" phiY="90*deg" thetaZ="-90*deg" phiZ="0*deg"/> + <Rotation name="G100" thetaX="84.2704*deg" phiX="180*deg" thetaY="90*deg" phiY="-90*deg" thetaZ="5.7296*deg" phiZ="0*deg"/> + <Rotation name="R180" thetaX="90*deg" phiX="180*deg" thetaY="90*deg" phiY="-90*deg" thetaZ="0*deg" phiZ="0*deg"/> + <Rotation name="AR05" thetaX="-90*deg" phiX="0*deg" thetaY="180*deg" phiY="180*deg" thetaZ="90*deg" phiZ="270*deg"/> + <Rotation name="ART6" thetaX="90*deg" phiX="0*deg" thetaY="0*deg" phiY="0*deg" thetaZ="90*deg" phiZ="270*deg"/> + <Rotation name="RPHI" thetaX="90*deg" phiX="90*deg" thetaY="0*deg" phiY="0*deg" thetaZ="90*deg" phiZ="0*deg"/> + <Rotation name="STER" thetaX="90*deg" phiX="-84.2704*deg" thetaY="180*deg" phiY="0*deg" thetaZ="90*deg" phiZ="5.7296*deg"/> + <Rotation name="RFI2" thetaX="90*deg" phiX="-90*deg" thetaY="180*deg" phiY="0*deg" thetaZ="90*deg" phiZ="0*deg"/> + <Rotation name="PITC" thetaX="90*deg" phiX="0*deg" thetaY="0*deg" phiY="0*deg" thetaZ="90*deg" phiZ="-90*deg"/> + </RotationSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tecmodule0.xml b/examples/DDCMS/data/tecmodule0.xml new file mode 100644 index 000000000..47b24c302 --- /dev/null +++ b/examples/DDCMS/data/tecmodule0.xml @@ -0,0 +1,37 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecmodule0.xml" eval="true"> + <Constant name="Rin" value="23.08*cm"/> + <Constant name="Rout" value="36.65*cm"/> + <Constant name="FullHeight" value="8.7236000*cm"/> + <Constant name="ActiveHeight" value="8.5160000*cm"/> + <Constant name="DlTop" value="8.7914000*cm"/> + <Constant name="DlBottom" value="6.4610000*cm"/> + <Constant name="SideWidthTop" value="0.1093380*cm"/> + <Constant name="SideWidthBottom" value="0.0839200*cm"/> + <Constant name="ActiveZ" value="([tecmodpar:ActiveZ1]+[ShiftZ])"/> + <Constant name="DlHybrid" value="9.749*cm"/> + <Constant name="BridgeWidth" value="2.350*cm"/> + <Constant name="BridgeThick" value="0.194*cm"/> + <Constant name="BridgeHeight" value="1.3*cm"/> + <Constant name="BridgeSeparation" value="4.856*cm"/> + <Constant name="ModuleThick" value="[tecmodpar:ModuleThickDS]"/> + <Constant name="ShiftZ" value="-([tecmodpar:ModuleThick]+[tecmodpar:GapModule])/2"/> + <Constant name="HybridZ" value="[ActiveZ]+ 0.5*(-[tecmodpar:WaferThick1] + [tecmodpar:HybridThick])"/> + <Constant name="TopFrameZ" value="[HybridZ]+ 0.5*([tecmodpar:HybridThick]+[tecmodpar:TopFrameThick])"/> + <Constant name="SideFrameZ" value="[TopFrameZ]+0.5*(-[tecmodpar:TopFrameThick]+[tecmodpar:SideFrameThick])"/> + <Constant name="PitchZ" value="[TopFrameZ] - 0.5*([tecmodpar:TopFrameThick] + [tecmodpar:PitchThick])"/> + <Constant name="PitchWidth" value="87.8*mm"/> + <Constant name="TopFrameBotWidth" value="109.0*mm"/> + <Constant name="dPhi" value="2.2*asin(0.5*[TopFrameBotWidth]/([Rin]+[FullHeight]))"/> + </ConstantsSection> + <SolidSection label="tecmodule0.xml"> + <Tubs name="TECModule0" rMin="[Rin]" rMax="[Rout]" dz="0.5*[tecmodpar:ModuleThickDS]" startPhi="-[dPhi]/2" deltaPhi="[dPhi]"/> + </SolidSection> + <LogicalPartSection label="tecmodule0.xml"> + <LogicalPart name="TECModule0" category="unspecified"> + <rSolid name="tecmodule0:TECModule0"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tecmodule0r.xml b/examples/DDCMS/data/tecmodule0r.xml new file mode 100644 index 000000000..8a8123e21 --- /dev/null +++ b/examples/DDCMS/data/tecmodule0r.xml @@ -0,0 +1,93 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecmodule0r.xml" eval="true"> + <Constant name="isStereo" value="0"/> + <Constant name="TopFrameTopWidth" value="84.6*mm"/> + <Constant name="TopFrameBotWidth" value="[tecmodule0:TopFrameBotWidth]"/> + <Constant name="TopFrameHeight" value="35.7*mm"/> + <Constant name="SideFrameRtheta" value=" 0.133*rad"/> + <Constant name="SideFrameRHeight" value="93.1*mm"/> + <Constant name="SideFrameRWidth" value="14.2*mm"/> + <Constant name="SideFrameLtheta" value="-.134*rad"/> + <Constant name="SideFrameLHeight" value="97.6*mm"/> + <Constant name="SideFrameLWidth" value="15.4*mm"/> + <Constant name="PosCorrectionR" value="-2.388*mm"/> + </ConstantsSection> + <Algorithm name="track:DDTECModuleAlgo"> + <rParent name="tecmodule0:TECModule0"/> + <Numeric name="RingNo" value="0"/> + <Numeric name="isStereo" value="[isStereo]"/> + <String name="GeneralMaterial" value="materials:Air"/> + <Numeric name="ModuleThick" value="[tecmodpar:ModuleThick]"/> + <Numeric name="DetTilt" value="[tecmodpar:DetTilt]"/> + <Numeric name="FullHeight" value="[tecmodule0:FullHeight]"/> + <Numeric name="DlTop" value="[tecmodule0:DlTop]"/> + <Numeric name="DlBottom" value="[tecmodule0:DlBottom]"/> + <Numeric name="DlHybrid" value="[tecmodule0:DlHybrid]"/> + <String name="ActiveRotation" value="tecmodpar:AR05"/> + <Numeric name="FrameWidth" value="[tecmodpar:FrameWidth]"/> + <Numeric name="FrameThick" value="[tecmodule0:ModuleThick]"/> + <Numeric name="FrameOver" value="[tecmodpar:FrameOver]"/> + <String name="TopFrameMaterial" value="tecmaterial:TEC_frame_top"/> + <Numeric name="TopFrameTopWidth" value="[TopFrameTopWidth]"/> + <Numeric name="TopFrameBotWidth" value="[TopFrameBotWidth]"/> + <Numeric name="TopFrameHeight" value="[TopFrameHeight]"/> + <Numeric name="TopFrameThick" value="[tecmodpar:TopFrameThick]"/> + <Numeric name="TopFrameZ" value="[tecmodule0:TopFrameZ]"/> + <String name="SideFrameMaterial" value="tecmaterial:TEC_frame_side_1_4"/> + <Numeric name="SideFrameThick" value="[tecmodpar:SideFrameThick]"/> + <String name="SiFrSuppBoxMaterial" value="tecmaterial:TEC_SideFrSupBox"/> + <Numeric name="SideFrameRtheta" value="[SideFrameRtheta]"/> + <Numeric name="SideFrameRHeight" value="[SideFrameRHeight]"/> + <Numeric name="SideFrameRWidth" value="[SideFrameRWidth]"/> + <Numeric name="SideFrameLtheta" value="[SideFrameLtheta]"/> + <Numeric name="SideFrameLHeight" value="[SideFrameLHeight]"/> + <Numeric name="SideFrameLWidth" value="[SideFrameLWidth]"/> + <Numeric name="SiFrSuppBoxThick" value="[tecmodpar:SiFrSuppBoxThick]"/> + <Vector name="SiFrSuppBoxYPos" type="numeric" nEntries="1"> + 43.6*mm </Vector> + <Vector name="SiFrSuppBoxHeight" type="numeric" nEntries="1"> + 30.1*mm </Vector> + <Vector name="SiFrSuppBoxWidth" type="numeric" nEntries="1"> + 15.8*mm </Vector> + <Numeric name="SideFrameZ" value="[tecmodule0:SideFrameZ]"/> + <String name="WaferMaterial" value="materials:Silicon"/> + <Numeric name="SideWidthTop" value="[tecmodule0:SideWidthTop]"/> + <Numeric name="SideWidthBottom" value="[tecmodule0:SideWidthBottom]"/> + <String name="WaferRotation" value="tecmodpar:RPHI"/> + <String name="ActiveMaterial" value="materials:Silicon"/> + <Numeric name="ActiveHeight" value="[tecmodule0:ActiveHeight]"/> + <Numeric name="WaferThick" value="[tecmodpar:WaferThick1]"/> + <String name="ActiveRotation" value="tecmodpar:AR05"/> + <Numeric name="ActiveZ" value="[tecmodule0:ActiveZ]"/> + <Numeric name="BackPlaneThick" value="2*[tracker:BackPlaneDz]"/> + <String name="HybridMaterial" value="tecmaterial:TEC_Hybrid6APV"/> + <Numeric name="HybridHeight" value="[tecmodpar:HybridHeight]"/> + <Numeric name="HybridWidth" value="[tecmodpar:HybridWidth]"/> + <Numeric name="HybridThick" value="[tecmodpar:HybridThick]"/> + <Numeric name="HybridZ" value="[tecmodule0:HybridZ]"/> + <String name="PitchMaterial" value="tecmaterial:TEC_PitchAdapter"/> + <Numeric name="PitchHeight" value="[tecmodpar:PitchHeight]"/> + <Numeric name="PitchThick" value="[tecmodpar:PitchThick]"/> + <Numeric name="PitchWidth" value="[tecmodule0:PitchWidth]"/> + <Numeric name="PitchZ" value="[tecmodule0:PitchZ]"/> + <String name="PitchRotation" value="tecmodpar:PITC"/> + <Numeric name="BridgeWidth" value="[tecmodule0:BridgeWidth]"/> + <Numeric name="BridgeThick" value="[tecmodule0:BridgeThick]"/> + <Numeric name="BridgeHeight" value="[tecmodule0:BridgeHeight]"/> + <Numeric name="BridgeSeparation" value="[tecmodule0:BridgeSeparation]"/> + <String name="BridgeMaterial" value="trackermaterial:T_Aluminium"/> + <Numeric name="WaferPosition" value="[tecmodpar:TopFrameHeight]"/> + <Vector name="SiReenforcementHeight" type="numeric" nEntries="1"> + 4.5*mm </Vector> + <Vector name="SiReenforcementWidth" type="numeric" nEntries="1"> + 74.0*mm </Vector> + <Vector name="SiReenforcementPosY" type="numeric" nEntries="1"> + 0.0001*mm </Vector> + <String name="SiReenforcementMaterial" value="tecmaterial:TEC_SiReenforcment"/> + <Numeric name="SiReenforcementThick" value="[tecmodpar:SiReenforcementThick]"/> + <Numeric name="NoOverlapShift" value="[tecmodpar:NoOverlapShift]"/> + <Numeric name="RPos" value="0.5*([tecmodule0:Rin]+[tecmodule0:Rout])+[PosCorrectionR]"/> + <String name="StandardRotation" value="tecmodpar:RPHI"/> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecmodule0s.xml b/examples/DDCMS/data/tecmodule0s.xml new file mode 100644 index 000000000..f6e1dbb86 --- /dev/null +++ b/examples/DDCMS/data/tecmodule0s.xml @@ -0,0 +1,105 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecmodule0s.xml" eval="true"> + <Constant name="isStereo" value="1"/> + <Constant name="TopFrameTopWidth" value="76.8*mm"/> + <Constant name="TopFrameBotWidth" value="111.0*mm"/> + <Constant name="TopFrameHeight" value="29.1*mm"/> + <Constant name="TopFrame2Width" value="111.0*mm"/> + <Constant name="TopFrame2LHeight" value="12.8*mm"/> + <Constant name="TopFrame2RHeight" value="1.8*mm"/> + <Constant name="SideFrameRtheta" value="0.172*rad"/> + <Constant name="SideFrameRHeight" value="92.8*mm"/> + <Constant name="SideFrameRWidthLow" value="10.1*mm"/> + <Constant name="SideFrameRWidth" value="21.5*mm"/> + <Constant name="SideFrameLtheta" value="-0.089*rad"/> + <Constant name="SideFrameLHeight" value="95.8*mm"/> + <Constant name="SideFrameLWidthLow" value="21.3*mm"/> + <Constant name="SideFrameLWidth" value="11.5*mm"/> + <Constant name="PosCorrectionR" value="-2.3878*mm"/> + <Constant name="PosCorrectionPhi" value="0.0000345*rad"/> + </ConstantsSection> + <Algorithm name="track:DDTECModuleAlgo"> + <rParent name="tecmodule0:TECModule0"/> + <Numeric name="RingNo" value="0"/> + <Numeric name="isStereo" value="[isStereo]"/> + <String name="GeneralMaterial" value="materials:Air"/> + <Numeric name="ModuleThick" value="[tecmodpar:ModuleThick]"/> + <Numeric name="DetTilt" value="[tecmodpar:DetTilt]"/> + <Numeric name="FullHeight" value="[tecmodule0:FullHeight]"/> + <Numeric name="DlTop" value="[tecmodule0:DlTop]"/> + <Numeric name="DlBottom" value="[tecmodule0:DlBottom]"/> + <Numeric name="DlHybrid" value="[tecmodule0:DlHybrid]"/> + <Numeric name="FrameWidth" value="[tecmodpar:FrameWidth]"/> + <Numeric name="FrameThick" value="[tecmodule0:ModuleThick]"/> + <Numeric name="FrameOver" value="[tecmodpar:FrameOver]"/> + <String name="TopFrameMaterial" value="tecmaterial:TEC_frame_top"/> + <Numeric name="TopFrameTopWidth" value="[TopFrameTopWidth]"/> + <Numeric name="TopFrameBotWidth" value="[TopFrameBotWidth]"/> + <Numeric name="TopFrameHeight" value="[TopFrameHeight]"/> + <Numeric name="TopFrame2Width" value="[TopFrame2Width]"/> + <Numeric name="TopFrame2LHeight" value="[TopFrame2LHeight]"/> + <Numeric name="TopFrame2RHeight" value="[TopFrame2RHeight]"/> + <Numeric name="TopFrameThick" value="[tecmodpar:TopFrameThick]"/> + <Numeric name="TopFrameZ" value="-[tecmodule0:TopFrameZ]"/> + <String name="SideFrameMaterial" value="tecmaterial:TEC_frame_side_1_4"/> + <Numeric name="SideFrameThick" value="[tecmodpar:SideFrameThick]"/> + <String name="SiFrSuppBoxMaterial" value="tecmaterial:TEC_SideFrSupBox"/> + <Numeric name="SideFrameRtheta" value="[SideFrameRtheta]"/> + <Numeric name="SideFrameRHeight" value="[SideFrameRHeight]"/> + <Numeric name="SideFrameRWidthLow" value="[SideFrameRWidthLow]"/> + <Numeric name="SideFrameRWidth" value="[SideFrameRWidth]"/> + <Numeric name="SideFrameLtheta" value="[SideFrameLtheta]"/> + <Numeric name="SideFrameLHeight" value="[SideFrameLHeight]"/> + <Numeric name="SideFrameLWidthLow" value="[SideFrameLWidthLow]"/> + <Numeric name="SideFrameLWidth" value="[SideFrameLWidth]"/> + <Numeric name="SiFrSuppBoxThick" value="[tecmodpar:SiFrSuppBoxThick]"/> + <Vector name="SiFrSuppBoxYPos" type="numeric" nEntries="1"> + 48.4*mm </Vector> + <Vector name="SiFrSuppBoxHeight" type="numeric" nEntries="1"> + 28.9*mm </Vector> + <Vector name="SiFrSuppBoxWidth" type="numeric" nEntries="1"> + 14.8*mm </Vector> + <Numeric name="SideFrameZ" value="-[tecmodule0:SideFrameZ]"/> + <String name="WaferMaterial" value="materials:Silicon"/> + <Numeric name="SideWidthTop" value="[tecmodule0:SideWidthTop]"/> + <Numeric name="SideWidthBottom" value="[tecmodule0:SideWidthBottom]"/> + <String name="WaferRotation" value="tecmodpar:STER"/> + <String name="ActiveMaterial" value="materials:Silicon"/> + <Numeric name="ActiveHeight" value="[tecmodule0:ActiveHeight]"/> + <Numeric name="WaferThick" value="[tecmodpar:WaferThick1]"/> + <String name="ActiveRotation" value="tecmodpar:AR05"/> + <Numeric name="ActiveZ" value="-[tecmodule0:ActiveZ]"/> + <Numeric name="BackPlaneThick" value="2*[tracker:BackPlaneDz]"/> + <String name="HybridMaterial" value="tecmaterial:TEC_Hybrid6APV"/> + <Numeric name="HybridHeight" value="[tecmodpar:HybridHeight]"/> + <Numeric name="HybridWidth" value="[tecmodpar:HybridWidth]"/> + <Numeric name="HybridThick" value="[tecmodpar:HybridThick]"/> + <Numeric name="HybridZ" value="-[tecmodule0:HybridZ]"/> + <String name="PitchMaterial" value="tecmaterial:TEC_PitchAdapter"/> + <Numeric name="PitchHeight" value="[tecmodpar:PitchStereoHeight]"/> + <Numeric name="PitchThick" value="[tecmodpar:PitchThick]"/> + <Numeric name="PitchWidth" value="[tecmodule0:PitchWidth]"/> + <Numeric name="PitchZ" value="-[tecmodule0:PitchZ]"/> + <String name="PitchRotation" value="tecmodpar:PITC"/> + <Numeric name="BridgeWidth" value="[tecmodule0:BridgeWidth]"/> + <Numeric name="BridgeThick" value="[tecmodule0:BridgeThick]"/> + <Numeric name="BridgeHeight" value="[tecmodule0:BridgeHeight]"/> + <Numeric name="BridgeSeparation" value="[tecmodule0:BridgeSeparation]"/> + <String name="BridgeMaterial" value="None"/> + <Numeric name="WaferPosition" value="[tecmodpar:TopFrameHeight]"/> + <Vector name="SiReenforcementHeight" type="numeric" nEntries="1"> + 4.7*mm </Vector> + <Vector name="SiReenforcementWidth" type="numeric" nEntries="1"> + 70.0*mm </Vector> + <Vector name="SiReenforcementPosY" type="numeric" nEntries="1"> + 2*mm </Vector> + <!-- they to be placed right! (are not due to problems with mother volume thickness)--> + <String name="SiReenforcementMaterial" value="tecmaterial:TEC_SiReenforcment"/> + <Numeric name="SiReenforcementThick" value="[tecmodpar:SiReenforcementThick]"/> + <Numeric name="NoOverlapShift" value="[tecmodpar:NoOverlapShift]"/> + <Numeric name="RPos" value="0.5*([tecmodule0:Rin]+[tecmodule0:Rout])+[PosCorrectionR]"/> + <String name="StandardRotation" value="tecmodpar:RPHI"/> + <Numeric name="PosCorrectionPhi" value="[PosCorrectionPhi]"/> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecmodule1.xml b/examples/DDCMS/data/tecmodule1.xml new file mode 100644 index 000000000..5729c4432 --- /dev/null +++ b/examples/DDCMS/data/tecmodule1.xml @@ -0,0 +1,37 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecmodule1.xml" eval="true"> + <Constant name="Rin" value="31.74*cm"/> + <Constant name="Rout" value="45.93*cm"/> + <Constant name="FullHeight" value="9.0236000*cm"/> + <Constant name="ActiveHeight" value="8.8160000*cm"/> + <Constant name="DlTop" value="11.2202000*cm"/> + <Constant name="DlBottom" value="8.8096000*cm"/> + <Constant name="SideWidthTop" value="0.1076928*cm"/> + <Constant name="SideWidthBottom" value="0.0822066*cm"/> + <Constant name="HybridZ" value="[ActiveZ]+0.5*(-[tecmodpar:WaferThick1] + [tecmodpar:HybridThick])"/> + <Constant name="TopFrameZ" value="[HybridZ]+0.5*([tecmodpar:HybridThick]+[tecmodpar:TopFrameThick])"/> + <Constant name="SideFrameZ" value="[TopFrameZ]+0.5*(-[tecmodpar:TopFrameThick]+[tecmodpar:SideFrameThick])"/> + <Constant name="PitchZ" value="[TopFrameZ]-0.5*([tecmodpar:TopFrameThick] + [tecmodpar:PitchThick])"/> + <Constant name="DlHybrid" value="12.240*cm"/> + <Constant name="BridgeWidth" value="2.479*cm"/> + <Constant name="BridgeThick" value="0.204*cm"/> + <Constant name="BridgeHeight" value="2.3460*cm"/> + <Constant name="BridgeSeparation" value="7.150*cm"/> + <Constant name="ModuleThick" value="[tecmodpar:ModuleThickDS]"/> + <Constant name="ShiftZ" value="-([tecmodpar:ModuleThick]+ [tecmodpar:GapModule])/2"/> + <Constant name="TopFrameBotWidth" value="133.3*mm"/> + <Constant name="ActiveZ" value="([tecmodpar:ActiveZ1]+[ShiftZ])"/> + <Constant name="PitchWidth" value="112.1*mm"/> + <Constant name="dPhi" value="2.2*asin(0.5*[TopFrameBotWidth]/([Rin]+[FullHeight]))"/> + </ConstantsSection> + <SolidSection label="tecmodule1.xml"> + <Tubs name="TECModule1" rMin="[Rin]" rMax="[Rout]" dz="0.5*[tecmodpar:ModuleThickDS]" startPhi="-[dPhi]/2" deltaPhi="[dPhi]"/> + </SolidSection> + <LogicalPartSection label="tecmodule1.xml"> + <LogicalPart name="TECModule1" category="unspecified"> + <rSolid name="tecmodule1:TECModule1"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tecmodule1r.xml b/examples/DDCMS/data/tecmodule1r.xml new file mode 100644 index 000000000..360f1c0d7 --- /dev/null +++ b/examples/DDCMS/data/tecmodule1r.xml @@ -0,0 +1,92 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecmodule1r.xml" eval="true"> + <Constant name="isStereo" value="0"/> + <Constant name="TopFrameTopWidth" value="95.6*mm"/> + <Constant name="TopFrameBotWidth" value="[tecmodule1:TopFrameBotWidth]"/> + <Constant name="TopFrameHeight" value="35.7*mm"/> + <Constant name="SideFrameRtheta" value="0.133*rad"/> + <Constant name="SideFrameRHeight" value="95.0*mm"/> + <Constant name="SideFrameRWidth" value="14.1*mm"/> + <Constant name="SideFrameLtheta" value="-0.133*rad"/> + <Constant name="SideFrameLHeight" value="99.2*mm"/> + <Constant name="SideFrameLWidth" value="16.7*mm"/> + <Constant name="PosCorrectionR" value="-2.668*mm"/> + </ConstantsSection> + <Algorithm name="track:DDTECModuleAlgo"> + <rParent name="tecmodule1:TECModule1"/> + <Numeric name="RingNo" value="1"/> + <Numeric name="isStereo" value="[isStereo]"/> + <String name="GeneralMaterial" value="materials:Air"/> + <Numeric name="ModuleThick" value="[tecmodpar:ModuleThick]"/> + <Numeric name="DetTilt" value="[tecmodpar:DetTilt]"/> + <Numeric name="FullHeight" value="[tecmodule1:FullHeight]"/> + <Numeric name="DlTop" value="[tecmodule1:DlTop]"/> + <Numeric name="DlBottom" value="[tecmodule1:DlBottom]"/> + <Numeric name="DlHybrid" value="[tecmodule1:DlHybrid]"/> + <Numeric name="FrameWidth" value="[tecmodpar:FrameWidth]"/> + <Numeric name="FrameThick" value="[tecmodule1:ModuleThick]"/> + <Numeric name="FrameOver" value="[tecmodpar:FrameOver]"/> + <String name="TopFrameMaterial" value="tecmaterial:TEC_frame_top"/> + <Numeric name="TopFrameTopWidth" value="[TopFrameTopWidth]"/> + <Numeric name="TopFrameBotWidth" value="[TopFrameBotWidth]"/> + <Numeric name="TopFrameHeight" value="[TopFrameHeight]"/> + <Numeric name="TopFrameThick" value="[tecmodpar:TopFrameThick]"/> + <Numeric name="TopFrameZ" value="[tecmodule1:TopFrameZ]"/> + <String name="SideFrameMaterial" value="tecmaterial:TEC_frame_side_1_4"/> + <Numeric name="SideFrameThick" value="[tecmodpar:SideFrameThick]"/> + <String name="SiFrSuppBoxMaterial" value="tecmaterial:TEC_SideFrSupBox"/> + <Numeric name="SideFrameRtheta" value="[SideFrameRtheta]"/> + <Numeric name="SideFrameRHeight" value="[SideFrameRHeight]"/> + <Numeric name="SideFrameRWidth" value="[SideFrameRWidth]"/> + <Numeric name="SideFrameLtheta" value="[SideFrameLtheta]"/> + <Numeric name="SideFrameLHeight" value="[SideFrameLHeight]"/> + <Numeric name="SideFrameLWidth" value="[SideFrameLWidth]"/> + <Numeric name="SiFrSuppBoxThick" value="[tecmodpar:SiFrSuppBoxThick]"/> + <Vector name="SiFrSuppBoxYPos" type="numeric" nEntries="1"> + 45.5*mm </Vector> + <Vector name="SiFrSuppBoxHeight" type="numeric" nEntries="1"> + 37.9*mm </Vector> + <Vector name="SiFrSuppBoxWidth" type="numeric" nEntries="1"> + 15.9*mm </Vector> + <Numeric name="SideFrameZ" value="[tecmodule1:SideFrameZ]"/> + <String name="WaferMaterial" value="materials:Silicon"/> + <Numeric name="SideWidthTop" value="[tecmodule1:SideWidthTop]"/> + <Numeric name="SideWidthBottom" value="[tecmodule1:SideWidthBottom]"/> + <String name="WaferRotation" value="tecmodpar:RPHI"/> + <String name="ActiveMaterial" value="materials:Silicon"/> + <Numeric name="ActiveHeight" value="[tecmodule1:ActiveHeight]"/> + <Numeric name="WaferThick" value="[tecmodpar:WaferThick1]"/> + <String name="ActiveRotation" value="tecmodpar:AR05"/> + <Numeric name="ActiveZ" value="[tecmodule1:ActiveZ]"/> + <Numeric name="BackPlaneThick" value="2*[tracker:BackPlaneDz]"/> + <String name="HybridMaterial" value="tecmaterial:TEC_Hybrid6APV"/> + <Numeric name="HybridHeight" value="[tecmodpar:HybridHeight]"/> + <Numeric name="HybridWidth" value="[tecmodpar:HybridWidth]"/> + <Numeric name="HybridThick" value="[tecmodpar:HybridThick]"/> + <Numeric name="HybridZ" value="[tecmodule1:HybridZ]"/> + <String name="PitchMaterial" value="tecmaterial:TEC_PitchAdapter"/> + <Numeric name="PitchHeight" value="[tecmodpar:PitchHeight]"/> + <Numeric name="PitchThick" value="[tecmodpar:PitchThick]"/> + <Numeric name="PitchWidth" value="[tecmodule1:PitchWidth]"/> + <Numeric name="PitchZ" value="[tecmodule1:PitchZ]"/> + <String name="PitchRotation" value="tecmodpar:PITC"/> + <Numeric name="BridgeWidth" value="[tecmodule1:BridgeWidth]"/> + <Numeric name="BridgeThick" value="[tecmodule1:BridgeThick]"/> + <Numeric name="BridgeHeight" value="[tecmodule1:BridgeHeight]"/> + <Numeric name="BridgeSeparation" value="[tecmodule1:BridgeSeparation]"/> + <String name="BridgeMaterial" value="trackermaterial:T_Aluminium"/> + <Numeric name="WaferPosition" value="[tecmodpar:TopFrameHeight]"/> + <Vector name="SiReenforcementHeight" type="numeric" nEntries="1"> + 4.5*mm </Vector> + <Vector name="SiReenforcementWidth" type="numeric" nEntries="1"> + 95.0*mm </Vector> + <Vector name="SiReenforcementPosY" type="numeric" nEntries="1"> + 0.0001*mm </Vector> + <String name="SiReenforcementMaterial" value="tecmaterial:TEC_SiReenforcment"/> + <Numeric name="SiReenforcementThick" value="[tecmodpar:SiReenforcementThick]"/> + <Numeric name="NoOverlapShift" value="[tecmodpar:NoOverlapShift]"/> + <Numeric name="RPos" value="0.5*([tecmodule1:Rin]+[tecmodule1:Rout])+[PosCorrectionR]"/> + <String name="StandardRotation" value="tecmodpar:RPHI"/> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecmodule1s.xml b/examples/DDCMS/data/tecmodule1s.xml new file mode 100644 index 000000000..924922b63 --- /dev/null +++ b/examples/DDCMS/data/tecmodule1s.xml @@ -0,0 +1,105 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecmodule1s.xml" eval="true"> + <Constant name="isStereo" value="1"/> + <Constant name="TopFrameTopWidth" value="87.0*mm"/> + <Constant name="TopFrameBotWidth" value="134.3*mm"/> + <Constant name="TopFrameHeight" value="29.7*mm"/> + <Constant name="TopFrame2Width" value="134.3*mm"/> + <Constant name="TopFrame2LHeight" value="13.3*mm"/> + <Constant name="TopFrame2RHeight" value="0.1*fm"/> + <Constant name="SideFrameRtheta" value="0.178*rad"/> + <Constant name="SideFrameRHeight" value="94.9*mm"/> + <Constant name="SideFrameRWidthLow" value="10.4*mm"/> + <Constant name="SideFrameRWidth" value="21.4*mm"/> + <Constant name="SideFrameLtheta" value="-0.081*rad"/> + <Constant name="SideFrameLHeight" value="95.0*mm"/> + <Constant name="SideFrameLWidthLow" value="21.2*mm"/> + <Constant name="SideFrameLWidth" value="11.6*mm"/> + <Constant name="PosCorrectionR" value="-2.668*mm"/> + <Constant name="PosCorrectionPhi" value="0.000461*rad"/> + </ConstantsSection> + <Algorithm name="track:DDTECModuleAlgo"> + <rParent name="tecmodule1:TECModule1"/> + <Numeric name="RingNo" value="1"/> + <Numeric name="isStereo" value="[isStereo]"/> + <String name="GeneralMaterial" value="materials:Air"/> + <Numeric name="ModuleThick" value="[tecmodpar:ModuleThick]"/> + <Numeric name="DetTilt" value="[tecmodpar:DetTilt]"/> + <Numeric name="FullHeight" value="[tecmodule1:FullHeight]"/> + <Numeric name="DlTop" value="[tecmodule1:DlTop]"/> + <Numeric name="DlBottom" value="[tecmodule1:DlBottom]"/> + <Numeric name="DlHybrid" value="[tecmodule1:DlHybrid]"/> + <Numeric name="FrameWidth" value="[tecmodpar:FrameWidth]"/> + <Numeric name="FrameThick" value="[tecmodule1:ModuleThick]"/> + <Numeric name="FrameOver" value="[tecmodpar:FrameOver]"/> + <String name="TopFrameMaterial" value="tecmaterial:TEC_frame_top"/> + <Numeric name="TopFrameTopWidth" value="[TopFrameTopWidth]"/> + <Numeric name="TopFrameBotWidth" value="[TopFrameBotWidth]"/> + <Numeric name="TopFrameHeight" value="[TopFrameHeight]"/> + <Numeric name="TopFrame2Width" value="[TopFrame2Width]"/> + <Numeric name="TopFrame2LHeight" value="[TopFrame2LHeight]"/> + <Numeric name="TopFrame2RHeight" value="[TopFrame2RHeight]"/> + <Numeric name="TopFrameThick" value="[tecmodpar:TopFrameThick]"/> + <Numeric name="TopFrameZ" value="-[tecmodule1:TopFrameZ]"/> + <String name="SideFrameMaterial" value="tecmaterial:TEC_frame_side_1_4"/> + <Numeric name="SideFrameThick" value="[tecmodpar:SideFrameThick]"/> + <String name="SiFrSuppBoxMaterial" value="tecmaterial:TEC_SideFrSupBox"/> + <Numeric name="SideFrameRtheta" value="[SideFrameRtheta]"/> + <Numeric name="SideFrameRHeight" value="[SideFrameRHeight]"/> + <Numeric name="SideFrameRWidthLow" value="[SideFrameRWidthLow]"/> + <Numeric name="SideFrameRWidth" value="[SideFrameRWidth]"/> + <Numeric name="SideFrameLtheta" value="[SideFrameLtheta]"/> + <Numeric name="SideFrameLHeight" value="[SideFrameLHeight]"/> + <Numeric name="SideFrameLWidthLow" value="[SideFrameLWidthLow]"/> + <Numeric name="SideFrameLWidth" value="[SideFrameLWidth]"/> + <Numeric name="SiFrSuppBoxThick" value="[tecmodpar:SiFrSuppBoxThick]"/> + <Vector name="SiFrSuppBoxYPos" type="numeric" nEntries="1"> + 50.7*mm </Vector> + <Vector name="SiFrSuppBoxHeight" type="numeric" nEntries="1"> + 30.8*mm </Vector> + <Vector name="SiFrSuppBoxWidth" type="numeric" nEntries="1"> + 14.8*mm </Vector> + <Numeric name="SideFrameZ" value="-[tecmodule1:SideFrameZ]"/> + <String name="WaferMaterial" value="materials:Silicon"/> + <Numeric name="SideWidthTop" value="[tecmodule1:SideWidthTop]"/> + <Numeric name="SideWidthBottom" value="[tecmodule1:SideWidthBottom]"/> + <String name="WaferRotation" value="tecmodpar:STER"/> + <String name="ActiveMaterial" value="materials:Silicon"/> + <Numeric name="ActiveHeight" value="[tecmodule1:ActiveHeight]"/> + <Numeric name="WaferThick" value="[tecmodpar:WaferThick1]"/> + <String name="ActiveRotation" value="tecmodpar:AR05"/> + <Numeric name="ActiveZ" value="-[tecmodule1:ActiveZ]"/> + <Numeric name="BackPlaneThick" value="2*[tracker:BackPlaneDz]"/> + <String name="HybridMaterial" value="tecmaterial:TEC_Hybrid6APV"/> + <Numeric name="HybridHeight" value="[tecmodpar:HybridHeight]"/> + <Numeric name="HybridWidth" value="[tecmodpar:HybridWidth]"/> + <Numeric name="HybridThick" value="[tecmodpar:HybridThick]"/> + <Numeric name="HybridZ" value="-[tecmodule1:HybridZ]"/> + <String name="PitchMaterial" value="tecmaterial:TEC_PitchAdapter"/> + <Numeric name="PitchHeight" value="[tecmodpar:PitchStereoHeight]"/> + <Numeric name="PitchThick" value="[tecmodpar:PitchThick]"/> + <Numeric name="PitchWidth" value="[tecmodule1:PitchWidth]"/> + <Numeric name="PitchZ" value="-[tecmodule1:PitchZ]"/> + <String name="PitchRotation" value="tecmodpar:PITC"/> + <Numeric name="BridgeWidth" value="[tecmodule1:BridgeWidth]"/> + <Numeric name="BridgeThick" value="[tecmodule1:BridgeThick]"/> + <Numeric name="BridgeHeight" value="[tecmodule1:BridgeHeight]"/> + <Numeric name="BridgeSeparation" value="[tecmodule1:BridgeSeparation]"/> + <String name="BridgeMaterial" value="None"/> + <Numeric name="WaferPosition" value="[tecmodpar:TopFrameHeight]"/> + <Vector name="SiReenforcementHeight" type="numeric" nEntries="1"> + 4.4*mm </Vector> + <Vector name="SiReenforcementWidth" type="numeric" nEntries="1"> + 94.0*mm </Vector> + <Vector name="SiReenforcementPosY" type="numeric" nEntries="1"> + 2*mm </Vector> + <!-- they to be placed right! (are not due to problems with mother volume thickness)--> + <String name="SiReenforcementMaterial" value="tecmaterial:TEC_SiReenforcment"/> + <Numeric name="SiReenforcementThick" value="[tecmodpar:SiReenforcementThick]"/> + <Numeric name="NoOverlapShift" value="[tecmodpar:NoOverlapShift]"/> + <Numeric name="RPos" value="0.5*([tecmodule1:Rin]+[tecmodule1:Rout])+[PosCorrectionR]"/> + <String name="StandardRotation" value="tecmodpar:RPHI"/> + <Numeric name="PosCorrectionPhi" value="-[PosCorrectionPhi]"/> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecmodule2.xml b/examples/DDCMS/data/tecmodule2.xml new file mode 100644 index 000000000..d93b88011 --- /dev/null +++ b/examples/DDCMS/data/tecmodule2.xml @@ -0,0 +1,123 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecmodule2.xml" eval="true"> + <Constant name="Rin" value="38.77*cm"/> + <Constant name="Rout" value="54.70*cm"/> + <Constant name="isStereo" value="0"/> + <Constant name="FullHeight" value="11.2736000*cm"/> + <Constant name="ActiveHeight" value="11.0660000*cm"/> + <Constant name="DlTop" value="8.3012000*cm"/> + <Constant name="DlBottom" value="6.4904000*cm"/> + <Constant name="SideWidthTop" value="0.1006846*cm"/> + <Constant name="SideWidthBottom" value="0.0866913*cm"/> + <Constant name="HybridZ" value="[TopFrameZ]+ 0.5*([tecmodpar:TopFrameThick] + [tecmodpar:HybridThick])"/> + <Constant name="TopFrameZ" value="[SideFrameZ]+ 0.5*(-[tecmodpar:SideFrameThick]+[tecmodpar:TopFrameThick])"/> + <Constant name="SideFrameZ" value="[ActiveZ]+0.5*(-[tecmodpar:WaferThick1] - [tecmodpar:SideFrameThick])"/> + <Constant name="PitchZ" value="[TopFrameZ] + 0.5*([tecmodpar:TopFrameThick] + [tecmodpar:PitchThick])"/> + <Constant name="DlHybrid" value="8.920*cm"/> + <Constant name="BridgeWidth" value="2.477*cm"/> + <Constant name="BridgeThick" value="0.209*cm"/> + <Constant name="BridgeHeight" value="2.53*cm"/> + <Constant name="BridgeSeparation" value="4.499*cm"/> + <Constant name="ModuleThick" value="[tecmodpar:ModuleThickSS]"/> + <Constant name="ShiftZ" value="0.5*[tecmodpar:SideFrameThick]"/> + <Constant name="TopFrameTopWidth" value="71.7*mm"/> + <Constant name="TopFrameBotWidth" value="103.7*mm"/> + <Constant name="TopFrameHeight" value="35.7*mm"/> + <Constant name="SideFrameRtheta" value="-0.081*rad"/> + <Constant name="SideFrameRHeight" value="119.6*mm"/> + <Constant name="SideFrameRWidth" value="13.9*mm"/> + <Constant name="SideFrameLtheta" value="0.081*rad"/> + <Constant name="SideFrameLHeight" value="119.6*mm"/> + <Constant name="SideFrameLWidth" value="15.2*mm"/> + <Constant name="ActiveZ" value="([tecmodpar:ActiveZ1]+[ShiftZ])"/> + <Constant name="PitchWidth" value="83.2*mm"/> + <Constant name="dPhi" value="2.2*asin(0.5*[TopFrameBotWidth]/([Rin]+[FullHeight]))"/> + <Constant name="PosCorrectionR" value="-1.318*mm"/> + </ConstantsSection> + <SolidSection label="tecmodule2.xml"> + <Tubs name="TECModule2" rMin="[Rin]" rMax="[Rout]" dz="0.5*[tecmodpar:ModuleThickSS]" startPhi="-[dPhi]/2" deltaPhi="[dPhi]"/> + </SolidSection> + <LogicalPartSection label="tecmodule2.xml"> + <LogicalPart name="TECModule2" category="unspecified"> + <rSolid name="tecmodule2:TECModule2"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTECModuleAlgo"> + <rParent name="tecmodule2:TECModule2"/> + <Numeric name="RingNo" value="2"/> + <Numeric name="isStereo" value="[isStereo]"/> + <String name="GeneralMaterial" value="materials:Air"/> + <Numeric name="ModuleThick" value="[tecmodpar:ModuleThick]"/> + <Numeric name="DetTilt" value="[tecmodpar:DetTilt]"/> + <Numeric name="FullHeight" value="[FullHeight]"/> + <Numeric name="DlTop" value="[DlTop]"/> + <Numeric name="DlBottom" value="[DlBottom]"/> + <Numeric name="DlHybrid" value="[DlHybrid]"/> + <Numeric name="FrameWidth" value="[tecmodpar:FrameWidth]"/> + <Numeric name="FrameThick" value="[ModuleThick]"/> + <Numeric name="FrameOver" value="[tecmodpar:FrameOver]"/> + <String name="TopFrameMaterial" value="tecmaterial:TEC_frame_top"/> + <Numeric name="TopFrameTopWidth" value="[TopFrameTopWidth]"/> + <Numeric name="TopFrameBotWidth" value="[TopFrameBotWidth]"/> + <Numeric name="TopFrameHeight" value="[TopFrameHeight]"/> + <Numeric name="TopFrameThick" value="[tecmodpar:TopFrameThick]"/> + <Numeric name="TopFrameZ" value="[TopFrameZ]"/> + <String name="SideFrameMaterial" value="tecmaterial:TEC_frame_side_1_4"/> + <Numeric name="SideFrameThick" value="[tecmodpar:SideFrameThick]"/> + <String name="SiFrSuppBoxMaterial" value="tecmaterial:TEC_SideFrSupBox"/> + <Numeric name="SideFrameRtheta" value="[SideFrameRtheta]"/> + <Numeric name="SideFrameRHeight" value="[SideFrameRHeight]"/> + <Numeric name="SideFrameRWidth" value="[SideFrameRWidth]"/> + <Numeric name="SideFrameLtheta" value="[SideFrameLtheta]"/> + <Numeric name="SideFrameLHeight" value="[SideFrameLHeight]"/> + <Numeric name="SideFrameLWidth" value="[SideFrameLWidth]"/> + <Numeric name="SiFrSuppBoxThick" value="[tecmodpar:SiFrSuppBoxThick]"/> + <Vector name="SiFrSuppBoxYPos" type="numeric" nEntries="1"> + 56.9*mm </Vector> + <Vector name="SiFrSuppBoxHeight" type="numeric" nEntries="1"> + 30.2*mm </Vector> + <Vector name="SiFrSuppBoxWidth" type="numeric" nEntries="1"> + 15.8*mm </Vector> + <Numeric name="SideFrameZ" value="[SideFrameZ]"/> + <String name="WaferMaterial" value="materials:Silicon"/> + <Numeric name="SideWidthTop" value="[SideWidthTop]"/> + <Numeric name="SideWidthBottom" value="[SideWidthBottom]"/> + <String name="WaferRotation" value="tecmodpar:RFI2"/> + <String name="ActiveMaterial" value="materials:Silicon"/> + <Numeric name="ActiveHeight" value="[ActiveHeight]"/> + <Numeric name="WaferThick" value="[tecmodpar:WaferThick1]"/> + <String name="ActiveRotation" value="tecmodpar:AR05"/> + <Numeric name="ActiveZ" value="[ActiveZ]"/> + <Numeric name="BackPlaneThick" value="2*[tracker:BackPlaneDz]"/> + <String name="HybridMaterial" value="tecmaterial:TEC_Hybrid4APV"/> + <Numeric name="HybridHeight" value="[tecmodpar:HybridHeight]"/> + <Numeric name="HybridWidth" value="[tecmodpar:HybridWidth]"/> + <Numeric name="HybridThick" value="[tecmodpar:HybridThick]"/> + <Numeric name="HybridZ" value="[HybridZ]"/> + <String name="PitchMaterial" value="tecmaterial:TEC_PitchAdapter"/> + <Numeric name="PitchHeight" value="[tecmodpar:PitchHeight]"/> + <Numeric name="PitchThick" value="[tecmodpar:PitchThick]"/> + <Numeric name="PitchWidth" value="[PitchWidth]"/> + <Numeric name="PitchZ" value="[PitchZ]"/> + <String name="PitchRotation" value="tecmodpar:PITC"/> + <Numeric name="BridgeWidth" value="[BridgeWidth]"/> + <Numeric name="BridgeThick" value="[BridgeThick]"/> + <Numeric name="BridgeHeight" value="[BridgeHeight]"/> + <Numeric name="BridgeSeparation" value="[BridgeSeparation]"/> + <String name="BridgeMaterial" value="trackermaterial:T_Aluminium"/> + <Numeric name="WaferPosition" value="[tecmodpar:TopFrameHeight]"/> + <Vector name="SiReenforcementHeight" type="numeric" nEntries="1"> + 4.7*mm </Vector> + <Vector name="SiReenforcementWidth" type="numeric" nEntries="1"> + 69.0*mm </Vector> + <Vector name="SiReenforcementPosY" type="numeric" nEntries="1"> + 0.0001*mm </Vector> + <String name="SiReenforcementMaterial" value="tecmaterial:TEC_SiReenforcment"/> + <Numeric name="SiReenforcementThick" value="[tecmodpar:SiReenforcementThick]"/> + <Numeric name="NoOverlapShift" value="[tecmodpar:NoOverlapShift]"/> + <Numeric name="RPos" value="0.5*([tecmodule2:Rin]+[tecmodule2:Rout])+[PosCorrectionR]"/> + <String name="StandardRotation" value="tecmodpar:RPHI"/> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecmodule3.xml b/examples/DDCMS/data/tecmodule3.xml new file mode 100644 index 000000000..8a9f72e5b --- /dev/null +++ b/examples/DDCMS/data/tecmodule3.xml @@ -0,0 +1,124 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecmodule3.xml" eval="true"> + <Constant name="Rin" value="50.00*cm"/> + <Constant name="Rout" value="66.242*cm"/> + <Constant name="isStereo" value="0"/> + <Constant name="FullHeight" value="11.7236000*cm"/> + <Constant name="ActiveHeight" value="11.5160000*cm"/> + <Constant name="DlTop" value="7.3179000*cm"/> + <Constant name="DlBottom" value="5.9730000*cm"/> + <Constant name="SideWidthTop" value="0.0979314*cm"/> + <Constant name="SideWidthBottom" value="0.0877023*cm"/> + <Constant name="HybridZ" value="[TopFrameZ]+ 0.5*([tecmodpar:TopFrameThick] + [tecmodpar:HybridThick])"/> + <Constant name="TopFrameZ" value="[SideFrameZ]+ 0.5*(-[tecmodpar:SideFrameThick]+[tecmodpar:TopFrameThick])"/> + <Constant name="SideFrameZ" value="[ActiveZ]+0.5*(-[tecmodpar:WaferThick1] - [tecmodpar:SideFrameThick])"/> + <Constant name="PitchZ" value="[TopFrameZ] + 0.5*([tecmodpar:TopFrameThick] + [tecmodpar:PitchThick])"/> + <Constant name="DlHybrid" value="7.770*cm"/> + <Constant name="BridgeWidth" value="2.471*cm"/> + <Constant name="BridgeThick" value="0.212*cm"/> + <Constant name="BridgeHeight" value="1.988*cm"/> + <Constant name="BridgeSeparation" value="3.750*cm"/> + <Constant name="ModuleThick" value="[tecmodpar:ModuleThickSS]"/> + <Constant name="ShiftZ" value="0.5*[tecmodpar:SideFrameThick]"/> + <Constant name="TopFrameTopWidth" value="88.9*mm"/> + <Constant name="TopFrameBotWidth" value="93.7*mm"/> + <Constant name="TopFrameHeight" value="35.7*mm"/> + <Constant name="SideFrameRtheta" value="-0.058*rad"/> + <Constant name="SideFrameRHeight" value="122.1*mm"/> + <Constant name="SideFrameRWidth" value="14.0*mm"/> + <Constant name="SideFrameLtheta" value="0.057*rad"/> + <Constant name="SideFrameLHeight" value="122.1*mm"/> + <Constant name="SideFrameLWidth" value="15.2*mm"/> + <Constant name="ActiveZ" value="([tecmodpar:ActiveZ1]+[ShiftZ])"/> + <Constant name="PitchWidth" value="73.3*mm"/> + <Constant name="dPhi" value="2.2*asin(0.5*[TopFrameBotWidth]/([Rin]+[FullHeight]))"/> + <Constant name="PosCorrectionR" value="-0.8287*mm"/> + </ConstantsSection> + <SolidSection label="tecmodule3.xml"> + <Tubs name="TECModule3" rMin="[Rin]" rMax="[Rout]" dz="0.5*[tecmodpar:ModuleThickSS]" startPhi="-[dPhi]/2" deltaPhi="[dPhi]"/> + </SolidSection> + <LogicalPartSection label="tecmodule3.xml"> + <LogicalPart name="TECModule3" category="unspecified"> + <rSolid name="tecmodule3:TECModule3"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTECModuleAlgo"> + <rParent name="tecmodule3:TECModule3"/> + <Numeric name="RingNo" value="3"/> + <Numeric name="isStereo" value="[isStereo]"/> + <String name="GeneralMaterial" value="materials:Air"/> + <Numeric name="ModuleThick" value="[tecmodpar:ModuleThick]"/> + <Numeric name="DetTilt" value="[tecmodpar:DetTilt]"/> + <Numeric name="FullHeight" value="[FullHeight]"/> + <Numeric name="DlTop" value="[DlTop]"/> + <Numeric name="DlBottom" value="[DlBottom]"/> + <Numeric name="DlHybrid" value="[DlHybrid]"/> + <Numeric name="FrameWidth" value="[tecmodpar:FrameWidth]"/> + <Numeric name="FrameThick" value="[ModuleThick]"/> + <Numeric name="FrameOver" value="[tecmodpar:FrameOver]"/> + <String name="TopFrameMaterial" value="tecmaterial:TEC_frame_top"/> + <Numeric name="TopFrameTopWidth" value="[TopFrameTopWidth]"/> + <Numeric name="TopFrameBotWidth" value="[TopFrameBotWidth]"/> + <Numeric name="TopFrameHeight" value="[TopFrameHeight]"/> + <Numeric name="TopFrameThick" value="[tecmodpar:TopFrameThick]"/> + <Numeric name="TopFrameZ" value="[TopFrameZ]"/> + <String name="SideFrameMaterial" value="tecmaterial:TEC_frame_side_1_4"/> + <Numeric name="SideFrameThick" value="[tecmodpar:SideFrameThick]"/> + <String name="SiFrSuppBoxMaterial" value="tecmaterial:TEC_SideFrSupBox"/> + <Numeric name="SideFrameRtheta" value="[SideFrameRtheta]"/> + <Numeric name="SideFrameRHeight" value="[SideFrameRHeight]"/> + <Numeric name="SideFrameRWidth" value="[SideFrameRWidth]"/> + <Numeric name="SideFrameLtheta" value="[SideFrameLtheta]"/> + <Numeric name="SideFrameLHeight" value="[SideFrameLHeight]"/> + <Numeric name="SideFrameLWidth" value="[SideFrameLWidth]"/> + <Numeric name="SiFrSuppBoxThick" value="[tecmodpar:SiFrSuppBoxThick]"/> + <Vector name="SiFrSuppBoxYPos" type="numeric" nEntries="1"> + 59.3 *mm </Vector> + <Vector name="SiFrSuppBoxHeight" type="numeric" nEntries="1"> + 30.3*mm </Vector> + <Vector name="SiFrSuppBoxWidth" type="numeric" nEntries="1"> + 15.8*mm </Vector> + <Numeric name="SideFrameZ" value="[SideFrameZ]"/> + <String name="WaferMaterial" value="materials:Silicon"/> + <Numeric name="SideWidthTop" value="[SideWidthTop]"/> + <Numeric name="SideWidthBottom" value="[SideWidthBottom]"/> + <String name="WaferRotation" value="tecmodpar:RFI2"/> + <String name="ActiveMaterial" value="materials:Silicon"/> + <Numeric name="ActiveHeight" value="[ActiveHeight]"/> + <Numeric name="WaferThick" value="[tecmodpar:WaferThick1]"/> + <String name="ActiveRotation" value="tecmodpar:AR05"/> + <Numeric name="ActiveZ" value="[ActiveZ]"/> + <Numeric name="BackPlaneThick" value="2*[tracker:BackPlaneDz]"/> + <String name="HybridMaterial" value="tecmaterial:TEC_Hybrid4APV"/> + <Numeric name="HybridHeight" value="[tecmodpar:HybridHeight]"/> + <Numeric name="HybridWidth" value="[tecmodpar:HybridWidth]"/> + <Numeric name="HybridThick" value="[tecmodpar:HybridThick]"/> + <Numeric name="HybridZ" value="[HybridZ]"/> + <String name="PitchMaterial" value="tecmaterial:TEC_PitchAdapter"/> + <Numeric name="PitchHeight" value="[tecmodpar:PitchHeight]"/> + <Numeric name="PitchThick" value="[tecmodpar:PitchThick]"/> + <Numeric name="PitchWidth" value="[PitchWidth]"/> + <Numeric name="PitchZ" value="[PitchZ]"/> + <String name="PitchRotation" value="tecmodpar:PITC"/> + <Numeric name="BridgeWidth" value="[BridgeWidth]"/> + <Numeric name="BridgeThick" value="[BridgeThick]"/> + <Numeric name="BridgeHeight" value="[BridgeHeight]"/> + <Numeric name="BridgeSeparation" value="[BridgeSeparation]"/> + <String name="BridgeMaterial" value="trackermaterial:T_Aluminium"/> + <Numeric name="WaferPosition" value="[tecmodpar:TopFrameHeight]"/> + <Vector name="SiReenforcementHeight" type="numeric" nEntries="1"> + 4.8*mm </Vector> + <Vector name="SiReenforcementWidth" type="numeric" nEntries="1"> + 61.0*mm </Vector> + <Vector name="SiReenforcementPosY" type="numeric" nEntries="1"> + 0.0001*mm </Vector> + <String name="SiReenforcementMaterial" value="tecmaterial:TEC_SiReenforcment"/> + <Numeric name="SiReenforcementThick" value="[tecmodpar:SiReenforcementThick]"/> + <Numeric name="NoOverlapShift" value="[tecmodpar:NoOverlapShift]"/> + <Numeric name="RPos" value="0.5*([tecmodule3:Rin]+[tecmodule3:Rout])-0.8287*mm"/> + <Numeric name="RPos" value="0.5*([tecmodule3:Rin]+[tecmodule3:Rout])+[PosCorrectionR]"/> + <String name="StandardRotation" value="tecmodpar:RPHI"/> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecmodule4.xml b/examples/DDCMS/data/tecmodule4.xml new file mode 100644 index 000000000..343eee586 --- /dev/null +++ b/examples/DDCMS/data/tecmodule4.xml @@ -0,0 +1,38 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecmodule4.xml" eval="true"> + <Constant name="Rin" value="59.67*cm"/> + <Constant name="Rout" value="79.76*cm"/> + <Constant name="FullHeight" value="15.0029000*cm"/> + <Constant name="ActiveHeight" value="14.7262500*cm"/> + <Constant name="DlTop" value="12.2914000*cm"/> + <Constant name="DlBottom" value="9.8952000*cm"/> + <Constant name="InactiveStart" value="65.983*mm"/> + <Constant name="SideWidthTop" value="0.1431406*cm"/> + <Constant name="SideWidthBottom" value="0.1229168*cm"/> + <Constant name="HybridZ" value="[ActiveZ]+ 0.5*(-[tecmodpar:WaferThick2] + [tecmodpar:HybridThick])"/> + <Constant name="TopFrameZ" value="[HybridZ]+ 0.5*([tecmodpar:HybridThick]+[tecmodpar:TopFrameThick])"/> + <Constant name="SideFrameZ" value="[TopFrameZ]+0.5*(-[tecmodpar:TopFrameThick]+[tecmodpar:SideFrameThick])"/> + <Constant name="PitchZ" value="[TopFrameZ] - 0.5*([tecmodpar:TopFrameThick] + [tecmodpar:PitchThick])"/> + <Constant name="DlHybrid" value="12.900*cm"/> + <Constant name="BridgeWidth" value="2.475*cm"/> + <Constant name="BridgeThick" value="0.176*cm"/> + <Constant name="BridgeHeight" value="2.60*cm"/> + <Constant name="BridgeSeparation" value="8.300*cm"/> + <Constant name="ModuleThick" value="[tecmodpar:ModuleThickDS]"/> + <Constant name="ShiftZ" value="-([tecmodpar:ModuleThick]+ [tecmodpar:GapModule])/2"/> + <Constant name="TopFrameBotWidth" value="143.3*mm"/> + <Constant name="ActiveZ" value="([tecmodpar:ActiveZ2]+[ShiftZ])"/> + <Constant name="PitchWidth" value="122.6*mm"/> + <Constant name="dPhi" value="2.2*asin(0.5*[TopFrameBotWidth]/([Rin]+[FullHeight]))"/> + </ConstantsSection> + <SolidSection label="tecmodule4.xml"> + <Tubs name="TECModule4" rMin="[Rin]" rMax="[Rout]" dz="0.5*[tecmodpar:ModuleThickDS]" startPhi="-[dPhi]/2" deltaPhi="[dPhi]"/> + </SolidSection> + <LogicalPartSection label="tecmodule4.xml"> + <LogicalPart name="TECModule4" category="unspecified"> + <rSolid name="tecmodule4:TECModule4"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tecmodule4r.xml b/examples/DDCMS/data/tecmodule4r.xml new file mode 100644 index 000000000..cf0b2e804 --- /dev/null +++ b/examples/DDCMS/data/tecmodule4r.xml @@ -0,0 +1,95 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecmodule4r.xml" eval="true"> + <Constant name="isStereo" value="0"/> + <Constant name="TopFrameTopWidth" value="95.6*mm"/> + <Constant name="TopFrameBotWidth" value="[tecmodule4:TopFrameBotWidth]"/> + <Constant name="TopFrameHeight" value="37.2*mm"/> + <Constant name="SideFrameRtheta" value="0.080*rad"/> + <Constant name="SideFrameRHeight" value="158.9*mm"/> + <Constant name="SideFrameRWidth" value="14.5*mm"/> + <Constant name="SideFrameLtheta" value="-0.080*rad"/> + <Constant name="SideFrameLHeight" value="159.0*mm"/> + <Constant name="SideFrameLWidth" value="16.4*mm"/> + <Constant name="PosCorrectionR" value="-1.664*mm"/> + </ConstantsSection> + <Algorithm name="track:DDTECModuleAlgo"> + <rParent name="tecmodule4:TECModule4"/> + <Numeric name="RingNo" value="4"/> + <Numeric name="isStereo" value="[isStereo]"/> + <String name="GeneralMaterial" value="materials:Air"/> + <Numeric name="ModuleThick" value="[tecmodpar:ModuleThick]"/> + <Numeric name="DetTilt" value="[tecmodpar:DetTilt]"/> + <Numeric name="FullHeight" value="[tecmodule4:FullHeight]"/> + <Numeric name="DlTop" value="[tecmodule4:DlTop]"/> + <Numeric name="DlBottom" value="[tecmodule4:DlBottom]"/> + <Numeric name="DlHybrid" value="[tecmodule4:DlHybrid]"/> + <Numeric name="FrameWidth" value="[tecmodpar:FrameWidth]"/> + <Numeric name="FrameThick" value="[tecmodule4:ModuleThick]"/> + <Numeric name="FrameOver" value="[tecmodpar:FrameOver]"/> + <String name="TopFrameMaterial" value="tecmaterial:TEC_frame_top"/> + <Numeric name="TopFrameTopWidth" value="[TopFrameTopWidth]"/> + <Numeric name="TopFrameBotWidth" value="[TopFrameBotWidth]"/> + <Numeric name="TopFrameHeight" value="[TopFrameHeight]"/> + <Numeric name="TopFrameThick" value="[tecmodpar:TopFrameThick]"/> + <Numeric name="TopFrameZ" value="[tecmodule4:TopFrameZ]"/> + <String name="SideFrameMaterial" value="tecmaterial:TEC_frame_side_5_7"/> + <Numeric name="SideFrameThick" value="[tecmodpar:SideFrameThick]"/> + <String name="SiFrSuppBoxMaterial" value="tecmaterial:TEC_SideFrSupBox"/> + <Numeric name="SideFrameRtheta" value="[SideFrameRtheta]"/> + <Numeric name="SideFrameRHeight" value="[SideFrameRHeight]"/> + <Numeric name="SideFrameRWidth" value="[SideFrameRWidth]"/> + <Numeric name="SideFrameLtheta" value="[SideFrameLtheta]"/> + <Numeric name="SideFrameLHeight" value="[SideFrameLHeight]"/> + <Numeric name="SideFrameLWidth" value="[SideFrameLWidth]"/> + <Numeric name="SiFrSuppBoxThick" value="[tecmodpar:SiFrSuppBoxThick]"/> + <Vector name="SiFrSuppBoxYPos" type="numeric" nEntries="2"> + 37.8*mm, 112.3*mm </Vector> + <Vector name="SiFrSuppBoxHeight" type="numeric" nEntries="2"> + 30.7*mm, 26.5*mm </Vector> + <Vector name="SiFrSuppBoxWidth" type="numeric" nEntries="2"> + 16.0*mm, 15.2*mm </Vector> + <Numeric name="SideFrameZ" value="[tecmodule4:SideFrameZ]"/> + <String name="WaferMaterial" value="materials:Silicon"/> + <Numeric name="SideWidthTop" value="[tecmodule4:SideWidthTop]"/> + <Numeric name="SideWidthBottom" value="[tecmodule4:SideWidthBottom]"/> + <String name="WaferRotation" value="tecmodpar:RPHI"/> + <String name="ActiveMaterial" value="materials:Silicon"/> + <Numeric name="ActiveHeight" value="[tecmodule4:ActiveHeight]"/> + <Numeric name="WaferThick" value="[tecmodpar:WaferThick2]"/> + <String name="ActiveRotation" value="tecmodpar:AR05"/> + <Numeric name="ActiveZ" value="[tecmodule4:ActiveZ]"/> + <Numeric name="BackPlaneThick" value="2*[tracker:BackPlaneDz]"/> + <Numeric name="InactiveDy" value="[tecmodpar:InactiveDy]"/> + <Numeric name="InactivePos" value="[tecmodule4:InactiveStart]+[tecmodpar:InactiveDy]"/> + <String name="InactiveMaterial" value="materials:Silicon"/> + <String name="HybridMaterial" value="tecmaterial:TEC_Hybrid6APV"/> + <Numeric name="HybridHeight" value="[tecmodpar:HybridHeight]"/> + <Numeric name="HybridWidth" value="[tecmodpar:HybridWidth]"/> + <Numeric name="HybridThick" value="[tecmodpar:HybridThick]"/> + <Numeric name="HybridZ" value="[tecmodule4:HybridZ]"/> + <String name="PitchMaterial" value="tecmaterial:TEC_PitchAdapter"/> + <Numeric name="PitchHeight" value="[tecmodpar:PitchHeight]"/> + <Numeric name="PitchThick" value="[tecmodpar:PitchThick]"/> + <Numeric name="PitchWidth" value="[tecmodule4:PitchWidth]"/> + <Numeric name="PitchZ" value="[tecmodule4:PitchZ]"/> + <String name="PitchRotation" value="tecmodpar:PITC"/> + <Numeric name="BridgeWidth" value="[tecmodule4:BridgeWidth]"/> + <Numeric name="BridgeThick" value="[tecmodule4:BridgeThick]"/> + <Numeric name="BridgeHeight" value="[tecmodule4:BridgeHeight]"/> + <Numeric name="BridgeSeparation" value="[tecmodule4:BridgeSeparation]"/> + <String name="BridgeMaterial" value="trackermaterial:T_Aluminium"/> + <Numeric name="WaferPosition" value="[tecmodpar:TopFrameHeight]"/> + <Vector name="SiReenforcementHeight" type="numeric" nEntries="2"> + 4.51*mm, 8.1*mm </Vector> + <Vector name="SiReenforcementWidth" type="numeric" nEntries="2"> + 102.0*mm, 98.0*mm </Vector> + <Vector name="SiReenforcementPosY" type="numeric" nEntries="2"> + 0.0001*mm, [tecmodule4:InactiveStart] </Vector> + <String name="SiReenforcementMaterial" value="tecmaterial:TEC_SiReenforcment"/> + <Numeric name="SiReenforcementThick" value="[tecmodpar:SiReenforcementThick]"/> + <Numeric name="NoOverlapShift" value="[tecmodpar:NoOverlapShift]"/> + <Numeric name="RPos" value="0.5*([tecmodule4:Rin]+[tecmodule4:Rout])+[PosCorrectionR]"/> + <String name="StandardRotation" value="tecmodpar:RPHI"/> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecmodule4s.xml b/examples/DDCMS/data/tecmodule4s.xml new file mode 100644 index 000000000..7b6a90020 --- /dev/null +++ b/examples/DDCMS/data/tecmodule4s.xml @@ -0,0 +1,108 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecmodule4s.xml" eval="true"> + <Constant name="isStereo" value="1"/> + <Constant name="TopFrameTopWidth" value="90.7*mm"/> + <Constant name="TopFrameBotWidth" value="145.3*mm"/> + <Constant name="TopFrameHeight" value="25.6*mm"/> + <Constant name="TopFrame2Width" value="121.7*mm"/> + <Constant name="TopFrame2LHeight" value="19.4*mm"/> + <Constant name="TopFrame2RHeight" value="7.3*mm"/> + <Constant name="SideFrameRtheta" value="0.139*rad"/> + <Constant name="SideFrameRHeight" value="153.4*mm"/> + <Constant name="SideFrameRWidthLow" value="7.8*mm"/> + <Constant name="SideFrameRWidth" value="21.8*mm"/> + <Constant name="SideFrameLtheta" value="-0.047*rad"/> + <Constant name="SideFrameLHeight" value="153.4*mm"/> + <Constant name="SideFrameLWidthLow" value="21.1*mm"/> + <Constant name="SideFrameLWidth" value="10.8*mm"/> + <Constant name="PosCorrectionR" value="-1.664*mm"/> + <Constant name="PosCorrectionPhi" value="-0.0003755*rad"/> + </ConstantsSection> + <Algorithm name="track:DDTECModuleAlgo"> + <rParent name="tecmodule4:TECModule4"/> + <Numeric name="RingNo" value="4"/> + <Numeric name="isStereo" value="[isStereo]"/> + <String name="GeneralMaterial" value="materials:Air"/> + <Numeric name="ModuleThick" value="[tecmodpar:ModuleThick]"/> + <Numeric name="DetTilt" value="[tecmodpar:DetTilt]"/> + <Numeric name="FullHeight" value="[tecmodule4:FullHeight]"/> + <Numeric name="DlTop" value="[tecmodule4:DlTop]"/> + <Numeric name="DlBottom" value="[tecmodule4:DlBottom]"/> + <Numeric name="DlHybrid" value="[tecmodule4:DlHybrid]"/> + <Numeric name="FrameWidth" value="[tecmodpar:FrameWidth]"/> + <Numeric name="FrameThick" value="[tecmodule4:ModuleThick]"/> + <Numeric name="FrameOver" value="[tecmodpar:FrameOver]"/> + <String name="TopFrameMaterial" value="tecmaterial:TEC_frame_top"/> + <Numeric name="TopFrameTopWidth" value="[TopFrameTopWidth]"/> + <Numeric name="TopFrameBotWidth" value="[TopFrameBotWidth]"/> + <Numeric name="TopFrameHeight" value="[TopFrameHeight]"/> + <Numeric name="TopFrame2Width" value="[TopFrame2Width]"/> + <Numeric name="TopFrame2LHeight" value="[TopFrame2LHeight]"/> + <Numeric name="TopFrame2RHeight" value="[TopFrame2RHeight]"/> + <Numeric name="TopFrameThick" value="[tecmodpar:TopFrameThick]"/> + <Numeric name="TopFrameZ" value="-[tecmodule4:TopFrameZ]"/> + <String name="SideFrameMaterial" value="tecmaterial:TEC_frame_side_5_7"/> + <Numeric name="SideFrameThick" value="[tecmodpar:SideFrameThick]"/> + <String name="SiFrSuppBoxMaterial" value="tecmaterial:TEC_SideFrSupBox"/> + <Numeric name="SideFrameRtheta" value="[SideFrameRtheta]"/> + <Numeric name="SideFrameRHeight" value="[SideFrameRHeight]"/> + <Numeric name="SideFrameRWidthLow" value="[SideFrameRWidthLow]"/> + <Numeric name="SideFrameRWidth" value="[SideFrameRWidth]"/> + <Numeric name="SideFrameLtheta" value="[SideFrameLtheta]"/> + <Numeric name="SideFrameLHeight" value="[SideFrameLHeight]"/> + <Numeric name="SideFrameLWidthLow" value="[SideFrameLWidthLow]"/> + <Numeric name="SideFrameLWidth" value="[SideFrameLWidth]"/> + <Numeric name="SiFrSuppBoxThick" value="[tecmodpar:SiFrSuppBoxThick]"/> + <Vector name="SiFrSuppBoxYPos" type="numeric" nEntries="2"> + 34.4*mm, 110.5*mm </Vector> + <Vector name="SiFrSuppBoxHeight" type="numeric" nEntries="2"> + 33.1*mm, 26.3*mm </Vector> + <Vector name="SiFrSuppBoxWidth" type="numeric" nEntries="2"> + 16.2*mm, 15.3*mm </Vector> + <Numeric name="SideFrameZ" value="-[tecmodule4:SideFrameZ]"/> + <String name="WaferMaterial" value="materials:Silicon"/> + <Numeric name="SideWidthTop" value="[tecmodule4:SideWidthTop]"/> + <Numeric name="SideWidthBottom" value="[tecmodule4:SideWidthBottom]"/> + <String name="WaferRotation" value="tecmodpar:STER"/> + <String name="ActiveMaterial" value="materials:Silicon"/> + <Numeric name="ActiveHeight" value="[tecmodule4:ActiveHeight]"/> + <Numeric name="WaferThick" value="[tecmodpar:WaferThick2]"/> + <String name="ActiveRotation" value="tecmodpar:AR05"/> + <Numeric name="ActiveZ" value="-[tecmodule4:ActiveZ]"/> + <Numeric name="BackPlaneThick" value="2*[tracker:BackPlaneDz]"/> + <Numeric name="InactiveDy" value="[tecmodpar:InactiveDy]"/> + <Numeric name="InactivePos" value="[tecmodule4:InactiveStart]+[tecmodpar:InactiveDy]"/> + <String name="InactiveMaterial" value="materials:Silicon"/> + <String name="HybridMaterial" value="tecmaterial:TEC_Hybrid6APV"/> + <Numeric name="HybridHeight" value="[tecmodpar:HybridHeight]"/> + <Numeric name="HybridWidth" value="[tecmodpar:HybridWidth]"/> + <Numeric name="HybridThick" value="[tecmodpar:HybridThick]"/> + <Numeric name="HybridZ" value="-[tecmodule4:HybridZ]"/> + <String name="PitchMaterial" value="tecmaterial:TEC_PitchAdapter"/> + <Numeric name="PitchHeight" value="[tecmodpar:PitchStereoHeight]"/> + <Numeric name="PitchThick" value="[tecmodpar:PitchThick]"/> + <Numeric name="PitchWidth" value="[tecmodule4:PitchWidth]"/> + <Numeric name="PitchZ" value="-[tecmodule4:PitchZ]"/> + <String name="PitchRotation" value="tecmodpar:PITC"/> + <Numeric name="BridgeWidth" value="[tecmodule4:BridgeWidth]"/> + <Numeric name="BridgeThick" value="[tecmodule4:BridgeThick]"/> + <Numeric name="BridgeHeight" value="[tecmodule4:BridgeHeight]"/> + <Numeric name="BridgeSeparation" value="[tecmodule4:BridgeSeparation]"/> + <String name="BridgeMaterial" value="None"/> + <Numeric name="WaferPosition" value="[tecmodpar:TopFrameHeight]"/> + <Vector name="SiReenforcementHeight" type="numeric" nEntries="2"> + 4.4*mm, 8.47*mm </Vector> + <Vector name="SiReenforcementWidth" type="numeric" nEntries="2"> + 106.0*mm, 94.0*mm </Vector> + <Vector name="SiReenforcementPosY" type="numeric" nEntries="2"> + 2.*mm, [tecmodule4:InactiveStart]-8.47*mm/2 </Vector> + <!-- they to be placed right! (are not due to problems with mother volume thickness)--> + <String name="SiReenforcementMaterial" value="tecmaterial:TEC_SiReenforcment"/> + <Numeric name="SiReenforcementThick" value="[tecmodpar:SiReenforcementThick]"/> + <Numeric name="NoOverlapShift" value="[tecmodpar:NoOverlapShift]"/> + <Numeric name="RPos" value="0.5*([tecmodule4:Rin]+[tecmodule4:Rout])+[PosCorrectionR]"/> + <String name="StandardRotation" value="tecmodpar:RPHI"/> + <Numeric name="PosCorrectionPhi" value="[PosCorrectionPhi]"/> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecmodule5.xml b/examples/DDCMS/data/tecmodule5.xml new file mode 100644 index 000000000..fdc2102aa --- /dev/null +++ b/examples/DDCMS/data/tecmodule5.xml @@ -0,0 +1,131 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecmodule5.xml" eval="true"> + <Constant name="Rin" value="72.11*cm"/> + <Constant name="Rout" value="95.61*cm"/> + <Constant name="isStereo" value="0"/> + <Constant name="FullHeight" value="18.6980000*cm"/> + <Constant name="ActiveHeight" value="18.4088000*cm"/> + <Constant name="DlTop" value="10.7285000*cm"/> + <Constant name="DlBottom" value="8.6184000*cm"/> + <Constant name="InactiveStart" value="87.840*mm"/> + <Constant name="SideWidthTop" value="0.1287673*cm"/> + <Constant name="SideWidthBottom" value="0.1315619*cm"/> + <!--Constant name="HybridZ" value="[ActiveZ]+ 0.5*(-[tecmodpar:WaferThick2] + [tecmodpar:HybridThick])"/> + <Constant name="TopFrameZ" value="[HybridZ]+ 0.5*([tecmodpar:HybridThick]+[tecmodpar:TopFrameThick])"/> + <Constant name="SideFrameZ" value="[TopFrameZ]+0.5*(-[tecmodpar:TopFrameThick]+[tecmodpar:SideFrameThick])"/> + <Constant name="PitchZ" value="[TopFrameZ] - 0.5*([tecmodpar:TopFrameThick] + [tecmodpar:PitchThick])"/--> + <Constant name="HybridZ" value="[TopFrameZ]+ 0.5*([tecmodpar:TopFrameThick] + [tecmodpar:HybridThick])"/> + <Constant name="TopFrameZ" value="[SideFrameZ]+ 0.5*(-[tecmodpar:SideFrameThick]+[tecmodpar:TopFrameThick])"/> + <Constant name="SideFrameZ" value="[ActiveZ]+0.5*(-[tecmodpar:WaferThick2] - [tecmodpar:SideFrameThick])"/> + <Constant name="PitchZ" value="[TopFrameZ] + 0.5*([tecmodpar:TopFrameThick] + [tecmodpar:PitchThick])"/> + <Constant name="DlHybrid" value="11.190*cm"/> + <Constant name="BridgeWidth" value="1.90*cm"/> + <Constant name="BridgeThick" value="0.228*cm"/> + <Constant name="BridgeHeight" value="2.469*cm"/> + <Constant name="BridgeSeparation" value="6.800*cm"/> + <Constant name="ModuleThick" value="[tecmodpar:ModuleThickSS]"/> + <Constant name="ShiftZ" value="0.5*[tecmodpar:SideFrameThick]"/> + <Constant name="TopFrameTopWidth" value="89.3*mm"/> + <Constant name="TopFrameBotWidth" value="127.8*mm"/> + <Constant name="TopFrameHeight" value="37.2*mm"/> + <Constant name="SideFrameRtheta" value="-0.058*rad"/> + <Constant name="SideFrameRHeight" value="190.0*mm"/> + <Constant name="SideFrameRWidth" value="14.1*mm"/> + <Constant name="SideFrameLtheta" value="0.057*rad"/> + <Constant name="SideFrameLHeight" value="190.0*mm"/> + <Constant name="SideFrameLWidth" value="15.5*mm"/> + <Constant name="ActiveZ" value="([tecmodpar:ActiveZ2]+[ShiftZ])"/> + <Constant name="PitchWidth" value="107.6*mm"/> + <Constant name="dPhi" value="2.2*asin(0.5*[TopFrameBotWidth]/([Rin]+[FullHeight]))"/> + <Constant name="PosCorrectionR" value="-1.19*mm"/> + </ConstantsSection> + <SolidSection label="tecmodule5.xml"> + <Tubs name="TECModule5" rMin="[Rin]" rMax="[Rout]" dz="0.5*[tecmodpar:ModuleThickSS]" startPhi="-[dPhi]/2" deltaPhi="[dPhi]"/> + </SolidSection> + <LogicalPartSection label="tecmodule5.xml"> + <LogicalPart name="TECModule5" category="unspecified"> + <rSolid name="tecmodule5:TECModule5"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTECModuleAlgo"> + <rParent name="tecmodule5:TECModule5"/> + <Numeric name="RingNo" value="5"/> + <Numeric name="isStereo" value="[isStereo]"/> + <String name="GeneralMaterial" value="materials:Air"/> + <Numeric name="ModuleThick" value="[tecmodpar:ModuleThick]"/> + <Numeric name="DetTilt" value="[tecmodpar:DetTilt]"/> + <Numeric name="FullHeight" value="[FullHeight]"/> + <Numeric name="DlTop" value="[DlTop]"/> + <Numeric name="DlBottom" value="[DlBottom]"/> + <Numeric name="DlHybrid" value="[DlHybrid]"/> + <Numeric name="FrameWidth" value="[tecmodpar:FrameWidth]"/> + <Numeric name="FrameThick" value="[ModuleThick]"/> + <Numeric name="FrameOver" value="[tecmodpar:FrameOver]"/> + <String name="TopFrameMaterial" value="tecmaterial:TEC_frame_top"/> + <Numeric name="TopFrameTopWidth" value="[TopFrameTopWidth]"/> + <Numeric name="TopFrameBotWidth" value="[TopFrameBotWidth]"/> + <Numeric name="TopFrameHeight" value="[TopFrameHeight]"/> + <Numeric name="TopFrameThick" value="[tecmodpar:TopFrameThick]"/> + <Numeric name="TopFrameZ" value="[TopFrameZ]"/> + <String name="SideFrameMaterial" value="tecmaterial:TEC_frame_side_5_7"/> + <Numeric name="SideFrameThick" value="[tecmodpar:SideFrameThick]"/> + <String name="SiFrSuppBoxMaterial" value="tecmaterial:TEC_SideFrSupBox"/> + <Numeric name="SideFrameRtheta" value="[SideFrameRtheta]"/> + <Numeric name="SideFrameRHeight" value="[SideFrameRHeight]"/> + <Numeric name="SideFrameRWidth" value="[SideFrameRWidth]"/> + <Numeric name="SideFrameLtheta" value="[SideFrameLtheta]"/> + <Numeric name="SideFrameLHeight" value="[SideFrameLHeight]"/> + <Numeric name="SideFrameLWidth" value="[SideFrameLWidth]"/> + <Numeric name="SiFrSuppBoxThick" value="[tecmodpar:SiFrSuppBoxThick]"/> + <Vector name="SiFrSuppBoxYPos" type="numeric" nEntries="2"> + 44.0*mm, 137.9*mm </Vector> + <Vector name="SiFrSuppBoxHeight" type="numeric" nEntries="2"> + 31.1*mm, 27.1*mm </Vector> + <Vector name="SiFrSuppBoxWidth" type="numeric" nEntries="2"> + 15.7*mm, 15.7*mm </Vector> + <Numeric name="SideFrameZ" value="[SideFrameZ]"/> + <String name="WaferMaterial" value="materials:Silicon"/> + <Numeric name="SideWidthTop" value="[SideWidthTop]"/> + <Numeric name="SideWidthBottom" value="[SideWidthBottom]"/> + <String name="WaferRotation" value="tecmodpar:RFI2"/> + <String name="ActiveMaterial" value="materials:Silicon"/> + <Numeric name="ActiveHeight" value="[ActiveHeight]"/> + <Numeric name="WaferThick" value="[tecmodpar:WaferThick2]"/> + <String name="ActiveRotation" value="tecmodpar:AR05"/> + <Numeric name="ActiveZ" value="[ActiveZ]"/> + <Numeric name="BackPlaneThick" value="2*[tracker:BackPlaneDz]"/> + <Numeric name="InactiveDy" value="[tecmodpar:InactiveDy]"/> + <Numeric name="InactivePos" value="[tecmodule5:InactiveStart]+[tecmodpar:InactiveDy]"/> + <String name="InactiveMaterial" value="materials:Silicon"/> + <String name="HybridMaterial" value="tecmaterial:TEC_Hybrid4APV"/> + <Numeric name="HybridHeight" value="[tecmodpar:HybridHeight]"/> + <Numeric name="HybridWidth" value="[tecmodpar:HybridWidth]"/> + <Numeric name="HybridThick" value="[tecmodpar:HybridThick]"/> + <Numeric name="HybridZ" value="[HybridZ]"/> + <String name="PitchMaterial" value="tecmaterial:TEC_PitchAdapter"/> + <Numeric name="PitchHeight" value="[tecmodpar:PitchHeight]"/> + <Numeric name="PitchThick" value="[tecmodpar:PitchThick]"/> + <Numeric name="PitchWidth" value="[PitchWidth]"/> + <Numeric name="PitchZ" value="[PitchZ]"/> + <String name="PitchRotation" value="tecmodpar:PITC"/> + <Numeric name="BridgeWidth" value="[BridgeWidth]"/> + <Numeric name="BridgeThick" value="[BridgeThick]"/> + <Numeric name="BridgeHeight" value="[BridgeHeight]"/> + <Numeric name="BridgeSeparation" value="[BridgeSeparation]"/> + <String name="BridgeMaterial" value="trackermaterial:T_Aluminium"/> + <Numeric name="WaferPosition" value="[tecmodpar:TopFrameHeight]"/> + <Vector name="SiReenforcementHeight" type="numeric" nEntries="2"> + 4.5*mm, 8.0*mm </Vector> + <Vector name="SiReenforcementWidth" type="numeric" nEntries="2"> + 95.0*mm, 85.0*mm </Vector> + <Vector name="SiReenforcementPosY" type="numeric" nEntries="2"> + 0.0001*mm, [tecmodule5:InactiveStart] - 8.00*mm /2</Vector> + <String name="SiReenforcementMaterial" value="tecmaterial:TEC_SiReenforcment"/> + <Numeric name="SiReenforcementThick" value="[tecmodpar:SiReenforcementThick]"/> + <Numeric name="NoOverlapShift" value="[tecmodpar:NoOverlapShift]"/> + <Numeric name="RPos" value="0.5*([tecmodule5:Rin]+[tecmodule5:Rout])+[PosCorrectionR]"/> + <String name="StandardRotation" value="tecmodpar:RPHI"/> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecmodule6.xml b/examples/DDCMS/data/tecmodule6.xml new file mode 100644 index 000000000..cec2f9cf3 --- /dev/null +++ b/examples/DDCMS/data/tecmodule6.xml @@ -0,0 +1,127 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecmodule6.xml" eval="true"> + <Constant name="Rin" value="84.61*cm"/> + <Constant name="Rout" value="110.17*cm"/> + <Constant name="isStereo" value="0"/> + <Constant name="FullHeight" value="20.7474000*cm"/> + <Constant name="ActiveHeight" value="20.4715500*cm"/> + <Constant name="DlTop" value="9.0713000*cm"/> + <Constant name="DlBottom" value="7.4012000*cm"/> + <Constant name="InactiveStart" value="109.712*mm"/> + <Constant name="SideWidthTop" value="0.1376009*cm"/> + <Constant name="SideWidthBottom" value="0.1262048*cm"/> + <Constant name="HybridZ" value="[TopFrameZ]+ 0.5*([tecmodpar:TopFrameThick] + [tecmodpar:HybridThick])"/> + <Constant name="TopFrameZ" value="[SideFrameZ]+ 0.5*(-[tecmodpar:SideFrameThick]+[tecmodpar:TopFrameThick])"/> + <Constant name="SideFrameZ" value="[ActiveZ]+0.5*(-[tecmodpar:WaferThick2] - [tecmodpar:SideFrameThick])"/> + <Constant name="PitchZ" value="[TopFrameZ] + 0.5*([tecmodpar:TopFrameThick] + [tecmodpar:PitchThick])"/> + <Constant name="DlHybrid" value="7.120*cm"/> + <Constant name="BridgeWidth" value="2.474*cm"/> + <Constant name="BridgeThick" value="0.224*cm"/> + <Constant name="BridgeHeight" value="1.888*cm"/> + <Constant name="BridgeSeparation" value="5.350*cm"/> + <Constant name="ModuleThick" value="[tecmodpar:ModuleThickSS]"/> + <Constant name="TopFrameTopWidth" value="77.1*mm"/> + <Constant name="TopFrameBotWidth" value="94.2*mm"/> + <Constant name="TopFrameHeight" value="37.2*mm"/> + <Constant name="ShiftZ" value="0.5*[tecmodpar:SideFrameThick]"/> + <Constant name="SideFrameRtheta" value="-0.040*rad"/> + <Constant name="SideFrameRHeight" value="210.8*mm"/> + <Constant name="SideFrameRWidth" value="13.9*mm"/> + <Constant name="SideFrameLtheta" value="0.040*rad"/> + <Constant name="SideFrameLHeight" value="210.8*mm"/> + <Constant name="SideFrameLWidth" value="15.3*mm"/> + <Constant name="ActiveZ" value="([tecmodpar:ActiveZ2]+[ShiftZ])"/> + <Constant name="PitchWidth" value="74.1*mm"/> + <Constant name="dPhi" value="2.2*asin(0.5*[TopFrameBotWidth]/([Rin]+[TopFrameHeight]))"/> + <Constant name="PosCorrectionR" value="-1.8632*mm"/> + </ConstantsSection> + <SolidSection label="tecmodule6.xml"> + <Tubs name="TECModule6" rMin="[Rin]" rMax="[Rout]" dz="0.5*[tecmodpar:ModuleThickSS]" startPhi="-[dPhi]/2" deltaPhi="[dPhi]"/> + </SolidSection> + <LogicalPartSection label="tecmodule6.xml"> + <LogicalPart name="TECModule6" category="unspecified"> + <rSolid name="tecmodule6:TECModule6"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTECModuleAlgo"> + <rParent name="tecmodule6:TECModule6"/> + <Numeric name="RingNo" value="6"/> + <Numeric name="isStereo" value="[isStereo]"/> + <String name="GeneralMaterial" value="materials:Air"/> + <Numeric name="ModuleThick" value="[tecmodpar:ModuleThick]"/> + <Numeric name="DetTilt" value="[tecmodpar:DetTilt]"/> + <Numeric name="FullHeight" value="[FullHeight]"/> + <Numeric name="DlTop" value="[DlTop]"/> + <Numeric name="DlBottom" value="[DlBottom]"/> + <Numeric name="DlHybrid" value="[DlHybrid]"/> + <Numeric name="FrameWidth" value="[tecmodpar:FrameWidth]"/> + <Numeric name="FrameThick" value="[ModuleThick]"/> + <Numeric name="FrameOver" value="[tecmodpar:FrameOver]"/> + <String name="TopFrameMaterial" value="tecmaterial:TEC_frame_top"/> + <Numeric name="TopFrameTopWidth" value="[TopFrameTopWidth]"/> + <Numeric name="TopFrameBotWidth" value="[TopFrameBotWidth]"/> + <Numeric name="TopFrameHeight" value="[TopFrameHeight]"/> + <Numeric name="TopFrameThick" value="[tecmodpar:TopFrameThick]"/> + <Numeric name="TopFrameZ" value="[TopFrameZ]"/> + <String name="SideFrameMaterial" value="tecmaterial:TEC_frame_side_5_7"/> + <Numeric name="SideFrameThick" value="[tecmodpar:SideFrameThick]"/> + <String name="SiFrSuppBoxMaterial" value="tecmaterial:TEC_SideFrSupBox"/> + <Numeric name="SideFrameRtheta" value="[SideFrameRtheta]"/> + <Numeric name="SideFrameRHeight" value="[SideFrameRHeight]"/> + <Numeric name="SideFrameRWidth" value="[SideFrameRWidth]"/> + <Numeric name="SideFrameLtheta" value="[SideFrameLtheta]"/> + <Numeric name="SideFrameLHeight" value="[SideFrameLHeight]"/> + <Numeric name="SideFrameLWidth" value="[SideFrameLWidth]"/> + <Numeric name="SiFrSuppBoxThick" value="[tecmodpar:SiFrSuppBoxThick]"/> + <Vector name="SiFrSuppBoxYPos" type="numeric" nEntries="2"> + 57.8*mm,161.9*mm </Vector> + <Vector name="SiFrSuppBoxHeight" type="numeric" nEntries="2"> + 31.9*mm,27.6*mm </Vector> + <Vector name="SiFrSuppBoxWidth" type="numeric" nEntries="2"> + 15.7*mm,15.7*mm </Vector> + <Numeric name="SideFrameZ" value="[SideFrameZ]"/> + <String name="WaferMaterial" value="materials:Silicon"/> + <Numeric name="SideWidthTop" value="[SideWidthTop]"/> + <Numeric name="SideWidthBottom" value="[SideWidthBottom]"/> + <String name="WaferRotation" value="tecmodpar:RFI2"/> + <String name="ActiveMaterial" value="materials:Silicon"/> + <Numeric name="ActiveHeight" value="[ActiveHeight]"/> + <Numeric name="WaferThick" value="[tecmodpar:WaferThick2]"/> + <String name="ActiveRotation" value="tecmodpar:ART6"/> + <Numeric name="ActiveZ" value="[ActiveZ]"/> + <Numeric name="BackPlaneThick" value="2*[tracker:BackPlaneDz]"/> + <Numeric name="InactiveDy" value="[tecmodpar:InactiveDy]"/> + <Numeric name="InactivePos" value="[tecmodule6:InactiveStart]+[tecmodpar:InactiveDy]"/> + <String name="InactiveMaterial" value="materials:Silicon"/> + <String name="HybridMaterial" value="tecmaterial:TEC_Hybrid4APV"/> + <Numeric name="HybridHeight" value="[tecmodpar:HybridHeight]"/> + <Numeric name="HybridWidth" value="[tecmodpar:HybridWidth]"/> + <Numeric name="HybridThick" value="[tecmodpar:HybridThick]"/> + <Numeric name="HybridZ" value="[HybridZ]"/> + <String name="PitchMaterial" value="tecmaterial:TEC_PitchAdapter"/> + <Numeric name="PitchHeight" value="[tecmodpar:PitchHeight]"/> + <Numeric name="PitchThick" value="[tecmodpar:PitchThick]"/> + <Numeric name="PitchWidth" value="[PitchWidth]"/> + <Numeric name="PitchZ" value="[PitchZ]"/> + <String name="PitchRotation" value="tecmodpar:PITC"/> + <Numeric name="BridgeWidth" value="[BridgeWidth]"/> + <Numeric name="BridgeThick" value="[BridgeThick]"/> + <Numeric name="BridgeHeight" value="[BridgeHeight]"/> + <Numeric name="BridgeSeparation" value="[BridgeSeparation]"/> + <String name="BridgeMaterial" value="trackermaterial:T_Aluminium"/> + <Numeric name="WaferPosition" value="[tecmodpar:TopFrameHeight]"/> + <Vector name="SiReenforcementHeight" type="numeric" nEntries="2"> + 4.9*mm, 8.0*mm </Vector> + <Vector name="SiReenforcementWidth" type="numeric" nEntries="2"> + 61.0*mm, 71.0*mm </Vector> + <Vector name="SiReenforcementPosY" type="numeric" nEntries="2"> + 0.0001*mm, [tecmodule6:InactiveStart] -8.0*mm/2 </Vector> + <String name="SiReenforcementMaterial" value="tecmaterial:TEC_SiReenforcment"/> + <Numeric name="SiReenforcementThick" value="[tecmodpar:SiReenforcementThick]"/> + <Numeric name="NoOverlapShift" value="[tecmodpar:NoOverlapShift]"/> + <Numeric name="RPos" value="0.5*([tecmodule6:Rin]+[tecmodule6:Rout])+[PosCorrectionR]"/> + <String name="StandardRotation" value="tecmodpar:RPHI"/> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecpetal0.xml b/examples/DDCMS/data/tecpetal0.xml new file mode 100644 index 000000000..454621bcc --- /dev/null +++ b/examples/DDCMS/data/tecpetal0.xml @@ -0,0 +1,12 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecpetal0.xml" eval="true"> + <Constant name="PetalContRmin" value="22.90*cm"/> + <Constant name="PetalRmin" value="23.30*cm"/> + </ConstantsSection> + <SolidSection label="tecpetal0.xml"> + <Tubs name="TECPetalCont0" rMin="[PetalContRmin]" rMax="[tecpetpar:PetalContRmax]" dz="[tecpetpar:PetalContThick]/2" startPhi="-[tecpetpar:PetalContWidth]/2" deltaPhi="[tecpetpar:PetalContWidth]"/> + <Tubs name="TECPetal0" rMin="[PetalRmin]" rMax="[tecpetpar:PetalRmax]" dz="[tecpetpar:PetalThick]/2" startPhi="-[tecpetpar:PetalWidth]/2" deltaPhi="[tecpetpar:PetalWidth]"/> + <Tubs name="TECICBCont0" rMin="[PetalRmin]" rMax="[tecpetpar:ICBRmax]" dz="[tecpetpar:ICBThick]/2" startPhi="-[tecpetpar:ICBWidth]/2" deltaPhi="[tecpetpar:ICBWidth]"/> + </SolidSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tecpetal0b.xml b/examples/DDCMS/data/tecpetal0b.xml new file mode 100644 index 000000000..9bc402e1c --- /dev/null +++ b/examples/DDCMS/data/tecpetal0b.xml @@ -0,0 +1,445 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecpetal0b.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="ICCZ" value="([tecpetpar:ICBThick]-[tecpetpar:ICCThick])/2"/> + </ConstantsSection> + <SolidSection label="tecpetal0b.xml"> + <Tubs name="TECPetal0B" rMin="[tecpetal0:PetalRmin]" rMax="[tecpetalb:PetalR1]" dz="[tecpetpar:PetalThick]/2" startPhi="-[tecpetalb:PetalWidth0]/2" deltaPhi="[tecpetalb:PetalWidth0]"/> + </SolidSection> + <LogicalPartSection label="tecpetal0b.xml"> + <LogicalPart name="TECPetalCont0B" category="unspecified"> + <rSolid name="tecpetal0:TECPetalCont0"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TECPetalFrame0B" category="unspecified"> + <rSolid name="tecpetal0:TECPetal0"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TECPetal0B" category="unspecified"> + <rSolid name="tecpetal0b:TECPetal0B"/> + <rMaterial name="tecmaterial:TEC_petal"/> + </LogicalPart> + <LogicalPart name="TECPetal1B" category="unspecified"> + <rSolid name="tecpetalb:TECPetal1B"/> + <rMaterial name="tecmaterial:TEC_petal"/> + </LogicalPart> + <LogicalPart name="TECPetal2B" category="unspecified"> + <rSolid name="tecpetalb:TECPetal2B"/> + <rMaterial name="tecmaterial:TEC_petal"/> + </LogicalPart> + <LogicalPart name="TECICBCont0B1" category="unspecified"> + <rSolid name="tecpetal0:TECICBCont0"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TECICBCont0B2" category="unspecified"> + <rSolid name="tecpetal0:TECICBCont0"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tecpetal0b.xml"> + <PosPart copyNumber="1"> + <rParent name="tecpetal0b:TECPetalCont0B"/> + <rChild name="tecring0b:TECRing0B"/> + <rRotation name="tecpetpar:180X"/> + <Translation x="[zero]" y="[zero]" z="[tecring0:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0b:TECPetalCont0B"/> + <rChild name="tecring1b:TECRing1B"/> + <Translation x="[zero]" y="[zero]" z="[tecring1:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0b:TECPetalCont0B"/> + <rChild name="tecring2b:TECRing2B"/> + <rRotation name="tecpetpar:180X"/> + <Translation x="[zero]" y="[zero]" z="[tecring2:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0b:TECPetalCont0B"/> + <rChild name="tecring3b:TECRing3B"/> + <Translation x="[zero]" y="[zero]" z="[tecring3:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0b:TECPetalCont0B"/> + <rChild name="tecring4b:TECRing4B"/> + <rRotation name="tecpetpar:180X"/> + <Translation x="[zero]" y="[zero]" z="[tecring4:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0b:TECPetalCont0B"/> + <rChild name="tecring5b:TECRing5B"/> + <Translation x="[zero]" y="[zero]" z="[tecring5:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0b:TECPetalCont0B"/> + <rChild name="tecring6b:TECRing6B"/> + <rRotation name="tecpetpar:180X"/> + <Translation x="[zero]" y="[zero]" z="[tecring6:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0b:TECPetalCont0B"/> + <rChild name="tecpetal0b:TECPetalFrame0B"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0b:TECICBCont0B1"/> + <rChild name="tecpetalb:TECICC0LB1"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0b:TECICBCont0B1"/> + <rChild name="tecpetalb:TECICC0LB2"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0b:TECICBCont0B1"/> + <rChild name="tecpetalb:TECICC2B1"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0b:TECICBCont0B1"/> + <rChild name="tecpetalb:TECICC2B2"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0b:TECICBCont0B1"/> + <rChild name="tecpetalb:TECICC46B1"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0b:TECICBCont0B1"/> + <rChild name="tecpetalb:TECICC46B2"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0b:TECICBCont0B1"/> + <rChild name="tecpetalb:TECICC46B3"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0b:TECICBCont0B2"/> + <rChild name="tecpetalb:TECICC1B1"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0b:TECICBCont0B2"/> + <rChild name="tecpetalb:TECICC1B2"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0b:TECICBCont0B2"/> + <rChild name="tecpetalb:TECICC1B3"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0b:TECICBCont0B2"/> + <rChild name="tecpetalb:TECICC35B1"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0b:TECICBCont0B2"/> + <rChild name="tecpetalb:TECICC35B2"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0b:TECICBCont0B2"/> + <rChild name="tecpetalb:TECICC35B3"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0b:TECICBCont0B2"/> + <rChild name="tecpetalb:TECICC35B4"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0b:TECICBCont0B2"/> + <rChild name="tecpetalb:TECICC35B5"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tecpetal0b:TECPetal2B"/> + <rChild name="tecwheel:TECInnerManifold"/> + <Translation x="[zero]" y="[zero]" z="[zero]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0b:TECPetalFrame0B"/> + <rChild name="tecpetal0b:TECPetal0B"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0b:TECPetalFrame0B"/> + <rChild name="tecpetal0b:TECPetal1B"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0b:TECPetalFrame0B"/> + <rChild name="tecpetal0b:TECPetal2B"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0b:TECPetalCont0B"/> + <rChild name="tecpetal0b:TECICBCont0B1"/> + <Translation x="[zero]" y="[zero]" z="-[tecpetpar:ICBZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0b:TECPetalCont0B"/> + <rChild name="tecpetal0b:TECICBCont0B2"/> + <Translation x="[zero]" y="[zero]" z="[tecpetpar:ICBZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0b:TECICBCont0B2"/> + <rChild name="tecwheel:TECCCUM"/> + <Translation x="1050*mm" y="-100*mm" z="[tecpetpar:CCUMZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tecpetal0b:TECICBCont0B2"/> + <rChild name="tecwheel:TECCCUM"/> + <Translation x="700*mm" y="[zero]" z="[tecpetpar:CCUMZ]"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0b:TECPetal0B"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="RPosition" value="283.326*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="2"> + 8.9423*deg ,-8.9423*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="2"> + tecpetpar:TECCool3,tecpetpar:TECCool3</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0b:TECPetal0B"/> + <Numeric name="StartCopyNo" value="3"/> + <Numeric name="RPosition" value="348.172*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="2"> + 6.1003*deg ,-6.1003*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="2"> + tecpetpar:TECCool3,tecpetpar:TECCool3</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0b:TECPetal0B"/> + <Numeric name="StartCopyNo" value="5"/> + <Numeric name="RPosition" value="372.842*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 10.9517*deg ,8.6238*deg ,-8.6238*deg ,-10.9554*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool5,tecpetpar:TECCool3,tecpetpar:TECCool3,tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0b:TECPetal0B"/> + <Numeric name="StartCopyNo" value="9"/> + <Numeric name="RPosition" value="438.663*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="2"> + 4.8385*deg ,-4.8385*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="2"> + tecpetpar:TECCool3,tecpetpar:TECCool3</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0b:TECPetal0B"/> + <Numeric name="StartCopyNo" value="11"/> + <Numeric name="RPosition" value="451.736*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="3"> + 9.9308*deg ,0.9308*deg ,-9.9308*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="3"> + tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0b:TECPetal0B"/> + <Numeric name="StartCopyNo" value="14"/> + <Numeric name="RPosition" value="491.272*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="2"> + 4.829*deg ,-2.1851*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="2"> + tecpetpar:TECCool5,tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0b:TECPetal0B"/> + <Numeric name="StartCopyNo" value="16"/> + <Numeric name="RPosition" value="529.973*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="3"> + 9*deg ,0*deg ,-9*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="3"> + tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0b:TECPetal1B"/> + <Numeric name="StartCopyNo" value="19"/> + <Numeric name="RPosition" value="565.026*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 10.3812*deg ,3.9526*deg ,-3.9526*deg ,-10.3812*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0b:TECPetal1B"/> + <Numeric name="StartCopyNo" value="23"/> + <Numeric name="RPosition" value="646.359*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 9.6429*deg ,3.2143*deg ,-3.2143*deg ,-9.6429*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0b:TECPetal1B"/> + <Numeric name="StartCopyNo" value="27"/> + <Numeric name="RPosition" value="688.526*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 14.144*deg ,5.144*deg ,-5.144*deg ,-14.144*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool4,tecpetpar:TECCool3,tecpetpar:TECCool3,tecpetpar:TECCool4</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0b:TECPetal1B"/> + <Numeric name="StartCopyNo" value="31"/> + <Numeric name="RPosition" value="705.35*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="3"> + 5.0584*deg ,-3.2876*deg ,-7.7907*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="3"> + tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0b:TECPetal2B"/> + <Numeric name="StartCopyNo" value="34"/> + <Numeric name="RPosition" value="777.681*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="6"> + 11.727*deg ,6.273*deg ,2.727*deg ,-2.727*deg ,-6.273*deg ,-11.727*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="6"> + tecpetpar:TECCool4,tecpetpar:TECCool4,tecpetpar:TECCool3,tecpetpar:TECCool3,tecpetpar:TECCool4,tecpetpar:TECCool4</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0b:TECPetal2B"/> + <Numeric name="StartCopyNo" value="40"/> + <Numeric name="RPosition" value="809.853*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="11"> + 11.729*deg ,9.3832*deg ,7.0374*deg ,4.6916*deg ,2.3458*deg ,0*deg ,-2.3458*deg ,-4.6916*deg ,-7.0374*deg ,-9.3832*deg ,-11.729*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="11"> + tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0b:TECPetal2B"/> + <Numeric name="StartCopyNo" value="51"/> + <Numeric name="RPosition" value="826.305*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 10.1935*deg ,3.7649*deg ,-3.7649*deg ,-10.1935*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0b:TECPetal2B"/> + <Numeric name="StartCopyNo" value="55"/> + <Numeric name="RPosition" value="862.788*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="6"> + 11.25*deg ,6.75*deg ,2.25*deg ,-2.25*deg ,-6.75*deg ,-11.25*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="6"> + tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0b:TECPetal2B"/> + <Numeric name="StartCopyNo" value="61"/> + <Numeric name="RPosition" value="937.93*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="6"> + 8.6894*deg ,4.1677*deg ,2.2608*deg ,-2.2608*deg ,-4.1677*deg ,-8.6894*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="6"> + tecpetpar:TECCool2,tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0b:TECPetal2B"/> + <Numeric name="StartCopyNo" value="67"/> + <Numeric name="RPosition" value="997.895*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="8"> + 11.6983*deg ,6.3017*deg ,2.6983*deg ,-1.8017*deg ,-2.6983*deg ,-6.3017*deg ,-7.1983*deg ,-11.6983*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="8"> + tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool5,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool5,tecpetpar:TECCool1</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0b:TECPetal2B"/> + <Numeric name="StartCopyNo" value="75"/> + <Numeric name="RPosition" value="1040.55*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="1"> + 10.0576*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="1"> + tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0b:TECPetal2B"/> + <Numeric name="StartCopyNo" value="76"/> + <Numeric name="RPosition" value="1068.17*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="1"> + 10.0624*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="1"> + tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal0b:TECICBCont0B1"/> + <Numeric name="StartCopyNo" value="1"/> + <String name="ChildName" value="tecpetpar:TECOptoHybridShort"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridHeight]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridWidth]"/> + <Numeric name="Rpos" value="357.959*mm"/> + <Numeric name="Zpos" value="-[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="2"> + 11.4354*deg ,-7.7539*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal0b:TECICBCont0B2"/> + <Numeric name="StartCopyNo" value="3"/> + <String name="ChildName" value="tecpetpar:TECOptoHybrid"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridWidth]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridHeight]"/> + <Numeric name="Rpos" value="471.195*mm"/> + <Numeric name="Zpos" value="[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="2"> + 6.6727*deg ,-0.339*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal0b:TECICBCont0B1"/> + <Numeric name="StartCopyNo" value="5"/> + <String name="ChildName" value="tecpetpar:TECOptoHybrid"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridWidth]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridHeight]"/> + <Numeric name="Rpos" value="562.517*mm"/> + <Numeric name="Zpos" value="-[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="2"> + 5.4762*deg ,-2.429*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal0b:TECICBCont0B2"/> + <Numeric name="StartCopyNo" value="7"/> + <String name="ChildName" value="tecpetpar:TECOptoHybrid"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridWidth]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridHeight]"/> + <Numeric name="Rpos" value="685.152*mm"/> + <Numeric name="Zpos" value="[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="3"> + 6.3214*deg ,-2.0241*deg ,-6.5265*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal0b:TECICBCont0B1"/> + <Numeric name="StartCopyNo" value="10"/> + <String name="ChildName" value="tecpetpar:TECOptoHybrid"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridWidth]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridHeight]"/> + <Numeric name="Rpos" value="807.452*mm"/> + <Numeric name="Zpos" value="-[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="11"> + 12.7924*deg ,10.4466*deg ,8.1008*deg ,5.755*deg ,3.4092*deg ,1.0634*deg ,-1.2824*deg ,-3.6282*deg ,-5.974*deg ,-8.3197*deg ,-10.6655*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal0b:TECICBCont0B2"/> + <Numeric name="StartCopyNo" value="21"/> + <String name="ChildName" value="tecpetpar:TECOptoHybrid"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridWidth]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridHeight]"/> + <Numeric name="Rpos" value="977.634*mm"/> + <Numeric name="Zpos" value="[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="3"> + 7.1858*deg ,-0.9183*deg ,-6.3149*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal0b:TECICBCont0B2"/> + <Numeric name="StartCopyNo" value="1"/> + <String name="ChildName" value="tecpetpar:TECDigiOptoHybModule"/> + <Numeric name="OptoHeight" value="[tecpetpar:DOHMWidth]"/> + <Numeric name="OptoWidth" value="[tecpetpar:DOHMHeight]"/> + <Numeric name="Rpos" value="1022.726*mm"/> + <Numeric name="Zpos" value="[tecpetpar:DOHMZ]"/> + <Vector name="Angles" type="numeric" nEntries="1"> + 11.372*deg</Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecpetal0f.xml b/examples/DDCMS/data/tecpetal0f.xml new file mode 100644 index 000000000..6321887fc --- /dev/null +++ b/examples/DDCMS/data/tecpetal0f.xml @@ -0,0 +1,445 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecpetal0f.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="ICCZ" value="([tecpetpar:ICBThick]-[tecpetpar:ICCThick])/2"/> + </ConstantsSection> + <SolidSection label="tecpetal0f.xml"> + <Tubs name="TECPetal0F" rMin="[tecpetal0:PetalRmin]" rMax="[tecpetalf:PetalR1]" dz="[tecpetpar:PetalThick]/2" startPhi="-[tecpetalf:PetalWidth0]/2" deltaPhi="[tecpetalf:PetalWidth0]"/> + </SolidSection> + <LogicalPartSection label="tecpetal0f.xml"> + <LogicalPart name="TECPetalCont0F" category="unspecified"> + <rSolid name="tecpetal0:TECPetalCont0"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TECPetalFrame0F" category="unspecified"> + <rSolid name="tecpetal0:TECPetal0"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TECPetal0F" category="unspecified"> + <rSolid name="tecpetal0f:TECPetal0F"/> + <rMaterial name="tecmaterial:TEC_petal"/> + </LogicalPart> + <LogicalPart name="TECPetal1F" category="unspecified"> + <rSolid name="tecpetalf:TECPetal1F"/> + <rMaterial name="tecmaterial:TEC_petal"/> + </LogicalPart> + <LogicalPart name="TECPetal2F" category="unspecified"> + <rSolid name="tecpetalf:TECPetal2F"/> + <rMaterial name="tecmaterial:TEC_petal"/> + </LogicalPart> + <LogicalPart name="TECICBCont0F1" category="unspecified"> + <rSolid name="tecpetal0:TECICBCont0"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TECICBCont0F2" category="unspecified"> + <rSolid name="tecpetal0:TECICBCont0"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tecpetal0f.xml"> + <PosPart copyNumber="1"> + <rParent name="tecpetal0f:TECPetalCont0F"/> + <rChild name="tecring0f:TECRing0F"/> + <rRotation name="tecpetpar:180X"/> + <Translation x="[zero]" y="[zero]" z="[tecring0:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0f:TECPetalCont0F"/> + <rChild name="tecring1f:TECRing1F"/> + <Translation x="[zero]" y="[zero]" z="[tecring1:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0f:TECPetalCont0F"/> + <rChild name="tecring2f:TECRing2F"/> + <rRotation name="tecpetpar:180X"/> + <Translation x="[zero]" y="[zero]" z="[tecring2:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0f:TECPetalCont0F"/> + <rChild name="tecring3f:TECRing3F"/> + <Translation x="[zero]" y="[zero]" z="[tecring3:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0f:TECPetalCont0F"/> + <rChild name="tecring4f:TECRing4F"/> + <rRotation name="tecpetpar:180X"/> + <Translation x="[zero]" y="[zero]" z="[tecring4:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0f:TECPetalCont0F"/> + <rChild name="tecring5f:TECRing5F"/> + <Translation x="[zero]" y="[zero]" z="[tecring5:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0f:TECPetalCont0F"/> + <rChild name="tecring6f:TECRing6F"/> + <rRotation name="tecpetpar:180X"/> + <Translation x="[zero]" y="[zero]" z="[tecring6:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0f:TECPetalCont0F"/> + <rChild name="tecpetal0f:TECPetalFrame0F"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0f:TECPetalFrame0F"/> + <rChild name="tecpetal0f:TECPetal0F"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0f:TECPetalFrame0F"/> + <rChild name="tecpetal0f:TECPetal1F"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0f:TECPetalFrame0F"/> + <rChild name="tecpetal0f:TECPetal2F"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0f:TECPetalCont0F"/> + <rChild name="tecpetal0f:TECICBCont0F1"/> + <Translation x="[zero]" y="[zero]" z="-[tecpetpar:ICBZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0f:TECPetalCont0F"/> + <rChild name="tecpetal0f:TECICBCont0F2"/> + <Translation x="[zero]" y="[zero]" z="[tecpetpar:ICBZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0f:TECICBCont0F1"/> + <rChild name="tecpetalf:TECICC0F1"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0f:TECICBCont0F1"/> + <rChild name="tecpetalf:TECICC0F2"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0f:TECICBCont0F1"/> + <rChild name="tecpetalf:TECICC2F1"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0f:TECICBCont0F1"/> + <rChild name="tecpetalf:TECICC2F2"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0f:TECICBCont0F1"/> + <rChild name="tecpetalf:TECICC46F1"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0f:TECICBCont0F1"/> + <rChild name="tecpetalf:TECICC46F2"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0f:TECICBCont0F2"/> + <rChild name="tecpetalf:TECICC01LF1"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0f:TECICBCont0F2"/> + <rChild name="tecpetalf:TECICC01LF2"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0f:TECICBCont0F2"/> + <rChild name="tecpetalf:TECICC01LF3"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0f:TECICBCont0F2"/> + <rChild name="tecpetalf:TECICC01LF4"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0f:TECICBCont0F2"/> + <rChild name="tecpetalf:TECICC35F1"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0f:TECICBCont0F2"/> + <rChild name="tecpetalf:TECICC35F2"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0f:TECICBCont0F2"/> + <rChild name="tecpetalf:TECICC35F3"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0f:TECICBCont0F2"/> + <rChild name="tecpetalf:TECICC35F4"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0f:TECICBCont0F2"/> + <rChild name="tecpetalf:TECICC35F5"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0f:TECPetal2F"/> + <rChild name="tecwheel:TECInnerManifold"/> + <Translation x="[zero]" y="[zero]" z="[zero]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal0f:TECICBCont0F2"/> + <rChild name="tecwheel:TECCCUM"/> + <Translation x="1050*mm" y="100*mm" z="[tecpetpar:CCUMZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tecpetal0f:TECICBCont0F2"/> + <rChild name="tecwheel:TECCCUM"/> + <Translation x="700*mm" y="[zero]" z="[tecpetpar:CCUMZ]"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0f:TECPetal0F"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="RPosition" value="283.326*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="7"> + 16.4423*deg ,12.3634*deg ,4.3695*deg ,-1.4423*deg ,-5.5235*deg ,-13.5079*deg ,-16.4423*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="7"> + tecpetpar:TECCool3,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool3,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool4</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0f:TECPetal0F"/> + <Numeric name="StartCopyNo" value="8"/> + <Numeric name="RPosition" value="348.172*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 13.6003*deg ,1.3997*deg ,-1.3997*deg ,-13.6003*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool3,tecpetpar:TECCool3,tecpetpar:TECCool4,tecpetpar:TECCool4</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0f:TECPetal0F"/> + <Numeric name="StartCopyNo" value="12"/> + <Numeric name="RPosition" value="373.084*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="3"> + 16.1238*deg ,1.1238*deg ,-16.1238*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="3"> + tecpetpar:TECCool4,tecpetpar:TECCool3,tecpetpar:TECCool3</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0f:TECPetal0F"/> + <Numeric name="StartCopyNo" value="15"/> + <Numeric name="RPosition" value="438.663*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 12.3385*deg ,2.6615*deg ,-2.6615*deg ,-12.3385*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool4,tecpetpar:TECCool4,tecpetpar:TECCool3,tecpetpar:TECCool3</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0f:TECPetal0F"/> + <Numeric name="StartCopyNo" value="19"/> + <Numeric name="RPosition" value="451.736*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 14.4308*deg ,5.4308*deg ,-5.4308*deg ,-14.4308*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0f:TECPetal0F"/> + <Numeric name="StartCopyNo" value="23"/> + <Numeric name="RPosition" value="491.326*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 9.6429*deg ,5.2432*deg ,-5.3537*deg ,-9.7534*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0f:TECPetal0F"/> + <Numeric name="StartCopyNo" value="27"/> + <Numeric name="RPosition" value="529.973*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 13.5*deg ,4.5*deg ,-4.5*deg ,-13.5*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0f:TECPetal1F"/> + <Numeric name="StartCopyNo" value="31"/> + <Numeric name="RPosition" value="565.026*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="7"> + 13.5955*deg ,9.3071*deg ,5.6902*deg ,0.7383*deg ,-7.1669*deg ,-8.7012*deg ,-13.5955*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="7"> + tecpetpar:TECCool1,tecpetpar:TECCool5,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool5,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0f:TECPetal1F"/> + <Numeric name="StartCopyNo" value="38"/> + <Numeric name="RPosition" value="646.359*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="5"> + 12.8571*deg ,6.4286*deg ,0*deg ,-6.4286*deg ,-12.8571*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="5"> + tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0f:TECPetal1F"/> + <Numeric name="StartCopyNo" value="43"/> + <Numeric name="RPosition" value="688.526*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="3"> + 9.644*deg ,-0.644*deg ,-9.644*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="3"> + tecpetpar:TECCool3,tecpetpar:TECCool3,tecpetpar:TECCool4</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0f:TECPetal1F"/> + <Numeric name="StartCopyNo" value="46"/> + <Numeric name="RPosition" value="705.393*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 8.0585*deg ,2.4756*deg ,-5.2453*deg ,-11.2274*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0f:TECPetal1F"/> + <Numeric name="StartCopyNo" value="50"/> + <Numeric name="RPosition" value="777.681*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 7.227*deg ,1.773*deg ,-1.773*deg ,-7.227*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool3,tecpetpar:TECCool3,tecpetpar:TECCool4,tecpetpar:TECCool4</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0f:TECPetal1F"/> + <Numeric name="StartCopyNo" value="54"/> + <Numeric name="RPosition" value="809.358*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="9"> + 8.8981*deg ,6.5507*deg ,4.2142*deg ,1.8718*deg ,-0.4758*deg ,-2.8175*deg ,-5.1527*deg ,-7.4972*deg ,-9.8497*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="9"> + tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0f:TECPetal1F"/> + <Numeric name="StartCopyNo" value="63"/> + <Numeric name="RPosition" value="826.305*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="5"> + 13.4078*deg ,5.8779*deg ,0.5506*deg ,-6.9792*deg ,-13.4078*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="5"> + tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0f:TECPetal1F"/> + <Numeric name="StartCopyNo" value="68"/> + <Numeric name="RPosition" value="862.788*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="6"> + 11.25*deg ,6.75*deg ,2.25*deg ,-2.25*deg ,-6.75*deg ,-11.25*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="6"> + tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0f:TECPetal2F"/> + <Numeric name="StartCopyNo" value="74"/> + <Numeric name="RPosition" value="937.93*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="8"> + 11.9037*deg ,7.382*deg ,5.4751*deg ,0.9535*deg ,-0.9535*deg ,-5.4751*deg ,-7.382*deg ,-11.9037*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="8"> + tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2,tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0f:TECPetal2F"/> + <Numeric name="StartCopyNo" value="82"/> + <Numeric name="RPosition" value="997.895*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="8"> + 11.6983*deg ,7.1983*deg ,6.3017*deg ,2.6983*deg ,-2.6983*deg ,-6.3017*deg ,-10.1082*deg ,-11.6983*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="8"> + tecpetpar:TECCool1,tecpetpar:TECCool5,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool5,tecpetpar:TECCool1</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0f:TECPetal2F"/> + <Numeric name="StartCopyNo" value="90"/> + <Numeric name="RPosition" value="1037.61*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="1"> + -9.9912*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="1"> + tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal0f:TECPetal2F"/> + <Numeric name="StartCopyNo" value="91"/> + <Numeric name="RPosition" value="1065.23*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="1"> + -9.9978*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="1"> + tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal0f:TECICBCont0F2"/> + <Numeric name="StartCopyNo" value="1"/> + <String name="ChildName" value="tecpetpar:TECOptoHybrid"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridWidth]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridHeight]"/> + <Numeric name="Rpos" value="262.048*mm"/> + <Numeric name="Zpos" value="[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="4"> + 16.4735*deg ,8.4741*deg ,-1.419*deg ,-9.4175*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal0f:TECICBCont0F2"/> + <Numeric name="StartCopyNo" value="5"/> + <String name="ChildName" value="tecpetpar:TECOptoHybrid"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridWidth]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridHeight]"/> + <Numeric name="Rpos" value="471.051*mm"/> + <Numeric name="Zpos" value="[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="4"> + 11.9412*deg ,7.5404*deg ,-3.0597*deg ,-7.4597*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal0f:TECICBCont0F1"/> + <Numeric name="StartCopyNo" value="9"/> + <String name="ChildName" value="tecpetpar:TECOptoHybrid"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridWidth]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridHeight]"/> + <Numeric name="Rpos" value="562.721*mm"/> + <Numeric name="Zpos" value="-[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="3"> + 11.2453*deg ,2.6765*deg ,-6.8472*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal0f:TECICBCont0F2"/> + <Numeric name="StartCopyNo" value="12"/> + <String name="ChildName" value="tecpetpar:TECOptoHybrid"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridWidth]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridHeight]"/> + <Numeric name="Rpos" value="685.052*mm"/> + <Numeric name="Zpos" value="[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="4"> + 9.6425*deg ,4.0592*deg ,-3.6616*deg ,-9.643*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal0f:TECICBCont0F1"/> + <Numeric name="StartCopyNo" value="16"/> + <String name="ChildName" value="tecpetpar:TECOptoHybrid"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridWidth]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridHeight]"/> + <Numeric name="Rpos" value="807.002*mm"/> + <Numeric name="Zpos" value="-[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="9"> + 10.2499*deg ,7.9025*deg ,5.5659*deg ,3.2235*deg ,0.8753*deg ,-1.4658*deg ,-3.801*deg ,-6.1455*deg ,-8.5563*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal0f:TECICBCont0F2"/> + <Numeric name="StartCopyNo" value="25"/> + <String name="ChildName" value="tecpetpar:TECOptoHybrid"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridWidth]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridHeight]"/> + <Numeric name="Rpos" value="977.591*mm"/> + <Numeric name="Zpos" value="[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="3"> + 8.3153*deg ,3.8227*deg ,-5.1984*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal0f:TECICBCont0F2"/> + <Numeric name="StartCopyNo" value="28"/> + <String name="ChildName" value="tecpetpar:TECOptoHybridShort"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridHeight]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridWidth]"/> + <Numeric name="Rpos" value="977.591*mm"/> + <Numeric name="Zpos" value="[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="1"> + -9.9916*deg</Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecpetal3.xml b/examples/DDCMS/data/tecpetal3.xml new file mode 100644 index 000000000..14afd9ed6 --- /dev/null +++ b/examples/DDCMS/data/tecpetal3.xml @@ -0,0 +1,12 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecpetal3.xml" eval="true"> + <Constant name="PetalContRmin" value="30.90*cm"/> + <Constant name="PetalRmin" value="31.30*cm"/> + </ConstantsSection> + <SolidSection label="tecpetal3.xml"> + <Tubs name="TECPetalCont3" rMin="[PetalContRmin]" rMax="[tecpetpar:PetalContRmax]" dz="[tecpetpar:PetalContThick]/2" startPhi="-[tecpetpar:PetalContWidth]/2" deltaPhi="[tecpetpar:PetalContWidth]"/> + <Tubs name="TECPetal3" rMin="[PetalRmin]" rMax="[tecpetpar:PetalRmax]" dz="[tecpetpar:PetalThick]/2" startPhi="-[tecpetpar:PetalWidth]/2" deltaPhi="[tecpetpar:PetalWidth]"/> + <Tubs name="TECICBCont3" rMin="[PetalRmin]" rMax="[tecpetpar:ICBRmax]" dz="[tecpetpar:ICBThick]/2" startPhi="-[tecpetpar:ICBWidth]/2" deltaPhi="[tecpetpar:ICBWidth]"/> + </SolidSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tecpetal3b.xml b/examples/DDCMS/data/tecpetal3b.xml new file mode 100644 index 000000000..9ddcc3683 --- /dev/null +++ b/examples/DDCMS/data/tecpetal3b.xml @@ -0,0 +1,390 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecpetal3b.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="ICCZ" value="([tecpetpar:ICBThick]-[tecpetpar:ICCThick])/2"/> + </ConstantsSection> + <SolidSection label="tecpetal3b.xml"> + <Tubs name="TECPetal3B" rMin="[tecpetal3:PetalRmin]" rMax="[tecpetalb:PetalR1]" dz="[tecpetpar:PetalThick]/2" startPhi="-[tecpetalb:PetalWidth0]/2" deltaPhi="[tecpetalb:PetalWidth0]"/> + </SolidSection> + <LogicalPartSection label="tecpetal3b.xml"> + <LogicalPart name="TECPetalCont3B" category="unspecified"> + <rSolid name="tecpetal3:TECPetalCont3"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TECPetalFrame3B" category="unspecified"> + <rSolid name="tecpetal3:TECPetal3"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TECPetal3B" category="unspecified"> + <rSolid name="tecpetal3b:TECPetal3B"/> + <rMaterial name="tecmaterial:TEC_petal"/> + </LogicalPart> + <LogicalPart name="TECPetal4B" category="unspecified"> + <rSolid name="tecpetalb:TECPetal1B"/> + <rMaterial name="tecmaterial:TEC_petal"/> + </LogicalPart> + <LogicalPart name="TECPetal5B" category="unspecified"> + <rSolid name="tecpetalb:TECPetal2B"/> + <rMaterial name="tecmaterial:TEC_petal"/> + </LogicalPart> + <LogicalPart name="TECICBCont3B1" category="unspecified"> + <rSolid name="tecpetal3:TECICBCont3"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TECICBCont3B2" category="unspecified"> + <rSolid name="tecpetal3:TECICBCont3"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tecpetal3b.xml"> + <PosPart copyNumber="1"> + <rParent name="tecpetal3b:TECPetalCont3B"/> + <rChild name="tecring1b:TECRing1B"/> + <Translation x="[zero]" y="[zero]" z="[tecring1:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal3b:TECPetalCont3B"/> + <rChild name="tecring2b:TECRing2B"/> + <rRotation name="tecpetpar:180X"/> + <Translation x="[zero]" y="[zero]" z="[tecring2:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal3b:TECPetalCont3B"/> + <rChild name="tecring3b:TECRing3B"/> + <Translation x="[zero]" y="[zero]" z="[tecring3:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal3b:TECPetalCont3B"/> + <rChild name="tecring4b:TECRing4B"/> + <rRotation name="tecpetpar:180X"/> + <Translation x="[zero]" y="[zero]" z="[tecring4:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal3b:TECPetalCont3B"/> + <rChild name="tecring5b:TECRing5B"/> + <Translation x="[zero]" y="[zero]" z="[tecring5:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal3b:TECPetalCont3B"/> + <rChild name="tecring6b:TECRing6B"/> + <rRotation name="tecpetpar:180X"/> + <Translation x="[zero]" y="[zero]" z="[tecring6:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal3b:TECPetalCont3B"/> + <rChild name="tecpetal3b:TECPetalFrame3B"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal3b:TECPetalFrame3B"/> + <rChild name="tecpetal3b:TECPetal3B"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal3b:TECPetalFrame3B"/> + <rChild name="tecpetal3b:TECPetal4B"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal3b:TECPetalFrame3B"/> + <rChild name="tecpetal3b:TECPetal5B"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal3b:TECPetalCont3B"/> + <rChild name="tecpetal3b:TECICBCont3B1"/> + <Translation x="[zero]" y="[zero]" z="-[tecpetpar:ICBZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal3b:TECPetalCont3B"/> + <rChild name="tecpetal3b:TECICBCont3B2"/> + <Translation x="[zero]" y="[zero]" z="[tecpetpar:ICBZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tecpetal3b:TECICBCont3B1"/> + <rChild name="tecpetalb:TECICC2B1"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tecpetal3b:TECICBCont3B1"/> + <rChild name="tecpetalb:TECICC2B2"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tecpetal3b:TECICBCont3B1"/> + <rChild name="tecpetalb:TECICC46B1"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tecpetal3b:TECICBCont3B1"/> + <rChild name="tecpetalb:TECICC46B2"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tecpetal3b:TECICBCont3B1"/> + <rChild name="tecpetalb:TECICC46B3"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tecpetal3b:TECICBCont3B2"/> + <rChild name="tecpetalb:TECICC1B1"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tecpetal3b:TECICBCont3B2"/> + <rChild name="tecpetalb:TECICC1B2"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tecpetal3b:TECICBCont3B2"/> + <rChild name="tecpetalb:TECICC1B3"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tecpetal3b:TECICBCont3B2"/> + <rChild name="tecpetalb:TECICC35B1"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tecpetal3b:TECICBCont3B2"/> + <rChild name="tecpetalb:TECICC35B2"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tecpetal3b:TECICBCont3B2"/> + <rChild name="tecpetalb:TECICC35B3"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tecpetal3b:TECICBCont3B2"/> + <rChild name="tecpetalb:TECICC35B4"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tecpetal3b:TECICBCont3B2"/> + <rChild name="tecpetalb:TECICC35B5"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="4"> + <rParent name="tecpetal3b:TECPetal5B"/> + <rChild name="tecwheel:TECInnerManifold"/> + <Translation x="[zero]" y="[zero]" z="[zero]"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal3b:TECPetal3B"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="RPosition" value="372.842*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 10.9517*deg ,8.6238*deg ,-8.6238*deg ,-10.9554*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool5,tecpetpar:TECCool3,tecpetpar:TECCool3,tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal3b:TECPetal3B"/> + <Numeric name="StartCopyNo" value="5"/> + <Numeric name="RPosition" value="438.663*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="2"> + 4.8385*deg ,-4.8385*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="2"> + tecpetpar:TECCool3,tecpetpar:TECCool3</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal3b:TECPetal3B"/> + <Numeric name="StartCopyNo" value="7"/> + <Numeric name="RPosition" value="451.736*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="3"> + 9.9308*deg ,0.9308*deg ,-9.9308*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="3"> + tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal3b:TECPetal3B"/> + <Numeric name="StartCopyNo" value="10"/> + <Numeric name="RPosition" value="491.272*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="2"> + 4.829*deg ,-2.1851*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="2"> + tecpetpar:TECCool5,tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal3b:TECPetal3B"/> + <Numeric name="StartCopyNo" value="12"/> + <Numeric name="RPosition" value="529.973*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="3"> + 9*deg ,0*deg ,-9*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="3"> + tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal3b:TECPetal4B"/> + <Numeric name="StartCopyNo" value="15"/> + <Numeric name="RPosition" value="565.026*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 10.3812*deg ,3.9526*deg ,-3.9526*deg ,-10.3812*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal3b:TECPetal4B"/> + <Numeric name="StartCopyNo" value="19"/> + <Numeric name="RPosition" value="646.359*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 9.6429*deg ,3.2143*deg ,-3.2143*deg ,-9.6429*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal3b:TECPetal4B"/> + <Numeric name="StartCopyNo" value="23"/> + <Numeric name="RPosition" value="688.526*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 14.144*deg ,5.144*deg ,-5.144*deg ,-14.144*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool4,tecpetpar:TECCool3,tecpetpar:TECCool3,tecpetpar:TECCool4</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal3b:TECPetal4B"/> + <Numeric name="StartCopyNo" value="27"/> + <Numeric name="RPosition" value="705.35*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="3"> + 5.0584*deg ,-3.2876*deg ,-7.7907*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="3"> + tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal3b:TECPetal5B"/> + <Numeric name="StartCopyNo" value="30"/> + <Numeric name="RPosition" value="777.681*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="6"> + 11.727*deg ,6.273*deg ,2.727*deg ,-2.727*deg ,-6.273*deg ,-11.727*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="6"> + tecpetpar:TECCool4,tecpetpar:TECCool4,tecpetpar:TECCool3,tecpetpar:TECCool3,tecpetpar:TECCool4,tecpetpar:TECCool4</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal3b:TECPetal5B"/> + <Numeric name="StartCopyNo" value="36"/> + <Numeric name="RPosition" value="809.853*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="11"> + 11.729*deg ,9.3832*deg ,7.0374*deg ,4.6916*deg ,2.3458*deg ,0*deg ,-2.3458*deg ,-4.6916*deg ,-7.0374*deg ,-9.3832*deg ,-11.729*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="11"> + tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal3b:TECPetal5B"/> + <Numeric name="StartCopyNo" value="47"/> + <Numeric name="RPosition" value="826.305*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 10.1935*deg ,3.7649*deg ,-3.7649*deg ,-10.1935*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal3b:TECPetal5B"/> + <Numeric name="StartCopyNo" value="51"/> + <Numeric name="RPosition" value="862.788*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="6"> + 11.25*deg ,6.75*deg ,2.25*deg ,-2.25*deg ,-6.75*deg ,-11.25*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="6"> + tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal3b:TECPetal5B"/> + <Numeric name="StartCopyNo" value="57"/> + <Numeric name="RPosition" value="937.93*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="6"> + 8.6894*deg ,4.1677*deg ,2.2608*deg ,-2.2608*deg ,-4.1677*deg ,-8.6894*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="6"> + tecpetpar:TECCool2,tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal3b:TECPetal5B"/> + <Numeric name="StartCopyNo" value="63"/> + <Numeric name="RPosition" value="997.895*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="8"> + 11.6983*deg ,6.3017*deg ,2.6983*deg ,-1.8017*deg ,-2.6983*deg ,-6.3017*deg ,-7.1983*deg ,-11.6983*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="8"> + tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool5,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool5,tecpetpar:TECCool1</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal3b:TECPetal5B"/> + <Numeric name="StartCopyNo" value="71"/> + <Numeric name="RPosition" value="1040.55*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="1"> + 10.0576*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="1"> + tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal3b:TECPetal5B"/> + <Numeric name="StartCopyNo" value="72"/> + <Numeric name="RPosition" value="1068.17*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="1"> + 10.0624*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="1"> + tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal3b:TECICBCont3B2"/> + <Numeric name="StartCopyNo" value="3"/> + <String name="ChildName" value="tecpetpar:TECOptoHybrid"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridWidth]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridHeight]"/> + <Numeric name="Rpos" value="471.195*mm"/> + <Numeric name="Zpos" value="[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="2"> + 6.6727*deg ,-0.339*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal3b:TECICBCont3B1"/> + <Numeric name="StartCopyNo" value="5"/> + <String name="ChildName" value="tecpetpar:TECOptoHybrid"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridWidth]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridHeight]"/> + <Numeric name="Rpos" value="562.517*mm"/> + <Numeric name="Zpos" value="-[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="2"> + 5.4762*deg ,-2.429*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal3b:TECICBCont3B2"/> + <Numeric name="StartCopyNo" value="7"/> + <String name="ChildName" value="tecpetpar:TECOptoHybrid"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridWidth]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridHeight]"/> + <Numeric name="Rpos" value="685.152*mm"/> + <Numeric name="Zpos" value="[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="3"> + 6.3214*deg ,-2.0241*deg ,-6.5265*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal3b:TECICBCont3B1"/> + <Numeric name="StartCopyNo" value="10"/> + <String name="ChildName" value="tecpetpar:TECOptoHybrid"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridWidth]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridHeight]"/> + <Numeric name="Rpos" value="807.452*mm"/> + <Numeric name="Zpos" value="-[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="11"> + 12.7924*deg ,10.4466*deg ,8.1008*deg ,5.755*deg ,3.4092*deg ,1.0634*deg ,-1.2824*deg ,-3.6282*deg ,-5.974*deg ,-8.3197*deg ,-10.6655*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal3b:TECICBCont3B2"/> + <Numeric name="StartCopyNo" value="21"/> + <String name="ChildName" value="tecpetpar:TECOptoHybrid"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridWidth]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridHeight]"/> + <Numeric name="Rpos" value="977.634*mm"/> + <Numeric name="Zpos" value="[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="3"> + 7.1858*deg ,-0.9183*deg ,-6.3149*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal3b:TECICBCont3B2"/> + <Numeric name="StartCopyNo" value="1"/> + <String name="ChildName" value="tecpetpar:TECDigiOptoHybModule"/> + <Numeric name="OptoHeight" value="[tecpetpar:DOHMWidth]"/> + <Numeric name="OptoWidth" value="[tecpetpar:DOHMHeight]"/> + <Numeric name="Rpos" value="1022.726*mm"/> + <Numeric name="Zpos" value="[tecpetpar:DOHMZ]"/> + <Vector name="Angles" type="numeric" nEntries="1"> + 11.372*deg</Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecpetal3f.xml b/examples/DDCMS/data/tecpetal3f.xml new file mode 100644 index 000000000..911b40e30 --- /dev/null +++ b/examples/DDCMS/data/tecpetal3f.xml @@ -0,0 +1,385 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecpetal3f.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="ICCZ" value="([tecpetpar:ICBThick]-[tecpetpar:ICCThick])/2"/> + </ConstantsSection> + <SolidSection label="tecpetal3f.xml"> + <Tubs name="TECPetal3F" rMin="[tecpetal3:PetalRmin]" rMax="[tecpetalf:PetalR1]" dz="[tecpetpar:PetalThick]/2" startPhi="-[tecpetalf:PetalWidth0]/2" deltaPhi="[tecpetalf:PetalWidth0]"/> + </SolidSection> + <LogicalPartSection label="tecpetal3f.xml"> + <LogicalPart name="TECPetalCont3F" category="unspecified"> + <rSolid name="tecpetal3:TECPetalCont3"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TECPetalFrame3F" category="unspecified"> + <rSolid name="tecpetal3:TECPetal3"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TECPetal3F" category="unspecified"> + <rSolid name="tecpetal3f:TECPetal3F"/> + <rMaterial name="tecmaterial:TEC_petal"/> + </LogicalPart> + <LogicalPart name="TECPetal4F" category="unspecified"> + <rSolid name="tecpetalf:TECPetal1F"/> + <rMaterial name="tecmaterial:TEC_petal"/> + </LogicalPart> + <LogicalPart name="TECPetal5F" category="unspecified"> + <rSolid name="tecpetalf:TECPetal2F"/> + <rMaterial name="tecmaterial:TEC_petal"/> + </LogicalPart> + <LogicalPart name="TECICBCont3F1" category="unspecified"> + <rSolid name="tecpetal3:TECICBCont3"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TECICBCont3F2" category="unspecified"> + <rSolid name="tecpetal3:TECICBCont3"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tecpetal3f.xml"> + <PosPart copyNumber="1"> + <rParent name="tecpetal3f:TECPetalCont3F"/> + <rChild name="tecring1f:TECRing1F"/> + <Translation x="[zero]" y="[zero]" z="[tecring1:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal3f:TECPetalCont3F"/> + <rChild name="tecring2f:TECRing2F"/> + <rRotation name="tecpetpar:180X"/> + <Translation x="[zero]" y="[zero]" z="[tecring2:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal3f:TECPetalCont3F"/> + <rChild name="tecring3f:TECRing3F"/> + <Translation x="[zero]" y="[zero]" z="[tecring3:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal3f:TECPetalCont3F"/> + <rChild name="tecring4f:TECRing4F"/> + <rRotation name="tecpetpar:180X"/> + <Translation x="[zero]" y="[zero]" z="[tecring4:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal3f:TECPetalCont3F"/> + <rChild name="tecring5f:TECRing5F"/> + <Translation x="[zero]" y="[zero]" z="[tecring5:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal3f:TECPetalCont3F"/> + <rChild name="tecring6f:TECRing6F"/> + <rRotation name="tecpetpar:180X"/> + <Translation x="[zero]" y="[zero]" z="[tecring6:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal3f:TECPetalCont3F"/> + <rChild name="tecpetal3f:TECPetalFrame3F"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal3f:TECPetalFrame3F"/> + <rChild name="tecpetal3f:TECPetal3F"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal3f:TECPetalFrame3F"/> + <rChild name="tecpetal3f:TECPetal4F"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal3f:TECPetalFrame3F"/> + <rChild name="tecpetal3f:TECPetal5F"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal3f:TECPetalCont3F"/> + <rChild name="tecpetal3f:TECICBCont3F1"/> + <Translation x="[zero]" y="[zero]" z="-[tecpetpar:ICBZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal3f:TECPetalCont3F"/> + <rChild name="tecpetal3f:TECICBCont3F2"/> + <Translation x="[zero]" y="[zero]" z="[tecpetpar:ICBZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tecpetal3f:TECICBCont3F1"/> + <rChild name="tecpetalf:TECICC2F1"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tecpetal3f:TECICBCont3F1"/> + <rChild name="tecpetalf:TECICC2F2"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tecpetal3f:TECICBCont3F1"/> + <rChild name="tecpetalf:TECICC46F1"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tecpetal3f:TECICBCont3F1"/> + <rChild name="tecpetalf:TECICC46F2"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal3f:TECICBCont3F2"/> + <rChild name="tecpetalf:TECICC1SF1"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal3f:TECICBCont3F2"/> + <rChild name="tecpetalf:TECICC1SF2"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal3f:TECICBCont3F2"/> + <rChild name="tecpetalf:TECICC1SF3"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tecpetal3f:TECICBCont3F2"/> + <rChild name="tecpetalf:TECICC35F1"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tecpetal3f:TECICBCont3F2"/> + <rChild name="tecpetalf:TECICC35F2"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tecpetal3f:TECICBCont3F2"/> + <rChild name="tecpetalf:TECICC35F3"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tecpetal3f:TECICBCont3F2"/> + <rChild name="tecpetalf:TECICC35F4"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tecpetal3f:TECICBCont3F2"/> + <rChild name="tecpetalf:TECICC35F5"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="tecpetal3f:TECPetal5F"/> + <rChild name="tecwheel:TECInnerManifold"/> + <Translation x="[zero]" y="[zero]" z="[zero]"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal3f:TECPetal3F"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="RPosition" value="373.084*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="3"> + 16.1238*deg ,1.1238*deg ,-16.1238*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="3"> + tecpetpar:TECCool4,tecpetpar:TECCool3,tecpetpar:TECCool3</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal3f:TECPetal3F"/> + <Numeric name="StartCopyNo" value="4"/> + <Numeric name="RPosition" value="438.663*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 12.3385*deg ,2.6615*deg ,-2.6615*deg ,-12.3385*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool4,tecpetpar:TECCool4,tecpetpar:TECCool3,tecpetpar:TECCool3</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal3f:TECPetal3F"/> + <Numeric name="StartCopyNo" value="8"/> + <Numeric name="RPosition" value="451.736*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 14.4308*deg ,5.4308*deg ,-5.4308*deg ,-14.4308*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal3f:TECPetal3F"/> + <Numeric name="StartCopyNo" value="12"/> + <Numeric name="RPosition" value="491.326*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 9.6429*deg ,5.2432*deg ,-5.3537*deg ,-9.7534*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal3f:TECPetal3F"/> + <Numeric name="StartCopyNo" value="16"/> + <Numeric name="RPosition" value="529.973*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 13.5*deg ,4.5*deg ,-4.5*deg ,-13.5*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal3f:TECPetal4F"/> + <Numeric name="StartCopyNo" value="20"/> + <Numeric name="RPosition" value="565.026*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="7"> + 13.5955*deg ,9.3071*deg ,5.6902*deg ,0.7383*deg ,-7.1669*deg ,-8.7012*deg ,-13.5955*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="7"> + tecpetpar:TECCool1,tecpetpar:TECCool5,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool5,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal3f:TECPetal4F"/> + <Numeric name="StartCopyNo" value="27"/> + <Numeric name="RPosition" value="646.359*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="5"> + 12.8571*deg ,6.4286*deg ,0*deg ,-6.4286*deg ,-12.8571*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="5"> + tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal3f:TECPetal4F"/> + <Numeric name="StartCopyNo" value="32"/> + <Numeric name="RPosition" value="688.526*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="3"> + 9.644*deg ,-0.644*deg ,-9.644*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="3"> + tecpetpar:TECCool3,tecpetpar:TECCool3,tecpetpar:TECCool4</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal3f:TECPetal4F"/> + <Numeric name="StartCopyNo" value="35"/> + <Numeric name="RPosition" value="705.393*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 8.0585*deg ,2.4756*deg ,-5.2453*deg ,-11.2274*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal3f:TECPetal4F"/> + <Numeric name="StartCopyNo" value="39"/> + <Numeric name="RPosition" value="777.681*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 7.227*deg ,1.773*deg ,-1.773*deg ,-7.227*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool3,tecpetpar:TECCool3,tecpetpar:TECCool4,tecpetpar:TECCool4</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal3f:TECPetal4F"/> + <Numeric name="StartCopyNo" value="43"/> + <Numeric name="RPosition" value="809.358*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="9"> + 8.8981*deg ,6.5507*deg ,4.2142*deg ,1.8718*deg ,-0.4758*deg ,-2.8175*deg ,-5.1527*deg ,-7.4972*deg ,-9.8497*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="9"> + tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal3f:TECPetal4F"/> + <Numeric name="StartCopyNo" value="52"/> + <Numeric name="RPosition" value="826.305*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="5"> + 13.4078*deg ,5.8779*deg ,0.5506*deg ,-6.9792*deg ,-13.4078*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="5"> + tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal3f:TECPetal4F"/> + <Numeric name="StartCopyNo" value="57"/> + <Numeric name="RPosition" value="862.788*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="6"> + 11.25*deg ,6.75*deg ,2.25*deg ,-2.25*deg ,-6.75*deg ,-11.25*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="6"> + tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal3f:TECPetal5F"/> + <Numeric name="StartCopyNo" value="63"/> + <Numeric name="RPosition" value="937.93*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="8"> + 11.9037*deg ,7.382*deg ,5.4751*deg ,0.9535*deg ,-0.9535*deg ,-5.4751*deg ,-7.382*deg ,-11.9037*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="8"> + tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2,tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal3f:TECPetal5F"/> + <Numeric name="StartCopyNo" value="71"/> + <Numeric name="RPosition" value="997.895*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="8"> + 11.6983*deg ,7.1983*deg ,6.3017*deg ,2.6983*deg ,-2.6983*deg ,-6.3017*deg ,-10.1082*deg ,-11.6983*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="8"> + tecpetpar:TECCool1,tecpetpar:TECCool5,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool5,tecpetpar:TECCool1</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal3f:TECPetal5F"/> + <Numeric name="StartCopyNo" value="79"/> + <Numeric name="RPosition" value="1037.61*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="1"> + -9.9912*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="1"> + tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal3f:TECPetal5F"/> + <Numeric name="StartCopyNo" value="80"/> + <Numeric name="RPosition" value="1065.23*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="1"> + -9.9978*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="1"> + tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal3f:TECICBCont3F2"/> + <Numeric name="StartCopyNo" value="5"/> + <String name="ChildName" value="tecpetpar:TECOptoHybrid"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridWidth]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridHeight]"/> + <Numeric name="Rpos" value="471.051*mm"/> + <Numeric name="Zpos" value="[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="4"> + 11.9412*deg ,7.5404*deg ,-3.0597*deg ,-7.4597*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal3f:TECICBCont3F1"/> + <Numeric name="StartCopyNo" value="9"/> + <String name="ChildName" value="tecpetpar:TECOptoHybrid"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridWidth]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridHeight]"/> + <Numeric name="Rpos" value="562.721*mm"/> + <Numeric name="Zpos" value="-[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="3"> + 11.2453*deg ,2.6765*deg ,-6.8472*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal3f:TECICBCont3F2"/> + <Numeric name="StartCopyNo" value="12"/> + <String name="ChildName" value="tecpetpar:TECOptoHybrid"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridWidth]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridHeight]"/> + <Numeric name="Rpos" value="685.052*mm"/> + <Numeric name="Zpos" value="[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="4"> + 9.6425*deg ,4.0592*deg ,-3.6616*deg ,-9.643*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal3f:TECICBCont3F1"/> + <Numeric name="StartCopyNo" value="16"/> + <String name="ChildName" value="tecpetpar:TECOptoHybrid"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridWidth]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridHeight]"/> + <Numeric name="Rpos" value="807.002*mm"/> + <Numeric name="Zpos" value="-[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="9"> + 10.2499*deg ,7.9025*deg ,5.5659*deg ,3.2235*deg ,0.8753*deg ,-1.4658*deg ,-3.801*deg ,-6.1455*deg ,-8.5563*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal3f:TECICBCont3F2"/> + <Numeric name="StartCopyNo" value="25"/> + <String name="ChildName" value="tecpetpar:TECOptoHybrid"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridWidth]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridHeight]"/> + <Numeric name="Rpos" value="977.591*mm"/> + <Numeric name="Zpos" value="[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="3"> + 8.3153*deg ,3.8227*deg ,-5.1984*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal3f:TECICBCont3F2"/> + <Numeric name="StartCopyNo" value="28"/> + <String name="ChildName" value="tecpetpar:TECOptoHybridShort"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridHeight]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridWidth]"/> + <Numeric name="Rpos" value="977.591*mm"/> + <Numeric name="Zpos" value="[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="1"> + -9.9916*deg</Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecpetal6b.xml b/examples/DDCMS/data/tecpetal6b.xml new file mode 100644 index 000000000..1feee53e3 --- /dev/null +++ b/examples/DDCMS/data/tecpetal6b.xml @@ -0,0 +1,359 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecpetal6b.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="ICCZ" value="([tecpetpar:ICBThick]-[tecpetpar:ICCThick])/2"/> + </ConstantsSection> + <SolidSection label="tecpetal6b.xml"> + <Tubs name="TECPetal6B" rMin="[tecpetal3:PetalRmin]" rMax="[tecpetalb:PetalR1]" dz="[tecpetpar:PetalThick]/2" startPhi="-[tecpetalb:PetalWidth0]/2" deltaPhi="[tecpetalb:PetalWidth0]"/> + </SolidSection> + <LogicalPartSection label="tecpetal6b.xml"> + <LogicalPart name="TECPetalCont6B" category="unspecified"> + <rSolid name="tecpetal3:TECPetalCont3"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TECPetalFrame6B" category="unspecified"> + <rSolid name="tecpetal3:TECPetal3"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TECPetal6B" category="unspecified"> + <rSolid name="tecpetal6b:TECPetal6B"/> + <rMaterial name="tecmaterial:TEC_petal"/> + </LogicalPart> + <LogicalPart name="TECPetal7B" category="unspecified"> + <rSolid name="tecpetalb:TECPetal1B"/> + <rMaterial name="tecmaterial:TEC_petal"/> + </LogicalPart> + <LogicalPart name="TECPetalaB" category="unspecified"> + <rSolid name="tecpetalb:TECPetal2B"/> + <rMaterial name="tecmaterial:TEC_petal"/> + </LogicalPart> + <LogicalPart name="TECICBCont6B1" category="unspecified"> + <rSolid name="tecpetal3:TECICBCont3"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TECICBCont6B2" category="unspecified"> + <rSolid name="tecpetal3:TECICBCont3"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tecpetal6b.xml"> + <PosPart copyNumber="1"> + <rParent name="tecpetal6b:TECPetalCont6B"/> + <rChild name="tecring2b:TECRing2B"/> + <rRotation name="tecpetpar:180X"/> + <Translation x="[zero]" y="[zero]" z="[tecring2:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal6b:TECPetalCont6B"/> + <rChild name="tecring3b:TECRing3B"/> + <Translation x="[zero]" y="[zero]" z="[tecring3:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal6b:TECPetalCont6B"/> + <rChild name="tecring4b:TECRing4B"/> + <rRotation name="tecpetpar:180X"/> + <Translation x="[zero]" y="[zero]" z="[tecring4:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal6b:TECPetalCont6B"/> + <rChild name="tecring5b:TECRing5B"/> + <Translation x="[zero]" y="[zero]" z="[tecring5:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal6b:TECPetalCont6B"/> + <rChild name="tecring6b:TECRing6B"/> + <rRotation name="tecpetpar:180X"/> + <Translation x="[zero]" y="[zero]" z="[tecring6:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal6b:TECPetalCont6B"/> + <rChild name="tecpetal6b:TECPetalFrame6B"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal6b:TECPetalFrame6B"/> + <rChild name="tecpetal6b:TECPetal6B"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal6b:TECPetalFrame6B"/> + <rChild name="tecpetal6b:TECPetal7B"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal6b:TECPetalFrame6B"/> + <rChild name="tecpetal6b:TECPetalaB"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal6b:TECPetalCont6B"/> + <rChild name="tecpetal6b:TECICBCont6B1"/> + <Translation x="[zero]" y="[zero]" z="-[tecpetpar:ICBZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal6b:TECPetalCont6B"/> + <rChild name="tecpetal6b:TECICBCont6B2"/> + <Translation x="[zero]" y="[zero]" z="[tecpetpar:ICBZ]"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="tecpetal6b:TECICBCont6B1"/> + <rChild name="tecpetalb:TECICC2B1"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="tecpetal6b:TECICBCont6B1"/> + <rChild name="tecpetalb:TECICC2B2"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="tecpetal6b:TECICBCont6B1"/> + <rChild name="tecpetalb:TECICC46B1"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="tecpetal6b:TECICBCont6B1"/> + <rChild name="tecpetalb:TECICC46B2"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="tecpetal6b:TECICBCont6B1"/> + <rChild name="tecpetalb:TECICC46B3"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="tecpetal6b:TECICBCont6B2"/> + <rChild name="tecpetalb:TECICC35B1"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="tecpetal6b:TECICBCont6B2"/> + <rChild name="tecpetalb:TECICC35B2"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="tecpetal6b:TECICBCont6B2"/> + <rChild name="tecpetalb:TECICC35B3"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="tecpetal6b:TECICBCont6B2"/> + <rChild name="tecpetalb:TECICC35B4"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="tecpetal6b:TECICBCont6B2"/> + <rChild name="tecpetalb:TECICC35B5"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="6"> + <rParent name="tecpetal6b:TECPetalaB"/> + <rChild name="tecwheel:TECInnerManifold"/> + <Translation x="[zero]" y="[zero]" z="[zero]"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal6b:TECPetal6B"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="RPosition" value="372.842*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 10.9517*deg ,8.6238*deg ,-8.6238*deg ,-10.9554*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool5,tecpetpar:TECCool3,tecpetpar:TECCool3,tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal6b:TECPetal6B"/> + <Numeric name="StartCopyNo" value="5"/> + <Numeric name="RPosition" value="438.663*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="2"> + 4.8385*deg ,-4.8385*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="2"> + tecpetpar:TECCool3,tecpetpar:TECCool3</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal6b:TECPetal6B"/> + <Numeric name="StartCopyNo" value="7"/> + <Numeric name="RPosition" value="451.736*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="3"> + 9.9308*deg ,0.9308*deg ,-9.9308*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="3"> + tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal6b:TECPetal6B"/> + <Numeric name="StartCopyNo" value="10"/> + <Numeric name="RPosition" value="491.272*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="2"> + 4.829*deg ,-2.1851*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="2"> + tecpetpar:TECCool5,tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal6b:TECPetal6B"/> + <Numeric name="StartCopyNo" value="12"/> + <Numeric name="RPosition" value="529.973*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="3"> + 9*deg ,0*deg ,-9*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="3"> + tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal6b:TECPetal7B"/> + <Numeric name="StartCopyNo" value="15"/> + <Numeric name="RPosition" value="565.026*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 10.3812*deg ,3.9526*deg ,-3.9526*deg ,-10.3812*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal6b:TECPetal7B"/> + <Numeric name="StartCopyNo" value="19"/> + <Numeric name="RPosition" value="646.359*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 9.6429*deg ,3.2143*deg ,-3.2143*deg ,-9.6429*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal6b:TECPetal7B"/> + <Numeric name="StartCopyNo" value="23"/> + <Numeric name="RPosition" value="688.526*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 14.144*deg ,5.144*deg ,-5.144*deg ,-14.144*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool4,tecpetpar:TECCool3,tecpetpar:TECCool3,tecpetpar:TECCool4</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal6b:TECPetal7B"/> + <Numeric name="StartCopyNo" value="27"/> + <Numeric name="RPosition" value="705.35*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="3"> + 5.0584*deg ,-3.2876*deg ,-7.7907*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="3"> + tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal6b:TECPetalaB"/> + <Numeric name="StartCopyNo" value="30"/> + <Numeric name="RPosition" value="777.681*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="6"> + 11.727*deg ,6.273*deg ,2.727*deg ,-2.727*deg ,-6.273*deg ,-11.727*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="6"> + tecpetpar:TECCool4,tecpetpar:TECCool4,tecpetpar:TECCool3,tecpetpar:TECCool3,tecpetpar:TECCool4,tecpetpar:TECCool4</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal6b:TECPetalaB"/> + <Numeric name="StartCopyNo" value="36"/> + <Numeric name="RPosition" value="809.853*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="11"> + 11.729*deg ,9.3832*deg ,7.0374*deg ,4.6916*deg ,2.3458*deg ,0*deg ,-2.3458*deg ,-4.6916*deg ,-7.0374*deg ,-9.3832*deg ,-11.729*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="11"> + tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal6b:TECPetalaB"/> + <Numeric name="StartCopyNo" value="47"/> + <Numeric name="RPosition" value="826.305*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 10.1935*deg ,3.7649*deg ,-3.7649*deg ,-10.1935*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal6b:TECPetalaB"/> + <Numeric name="StartCopyNo" value="51"/> + <Numeric name="RPosition" value="862.788*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="6"> + 11.25*deg ,6.75*deg ,2.25*deg ,-2.25*deg ,-6.75*deg ,-11.25*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="6"> + tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal6b:TECPetalaB"/> + <Numeric name="StartCopyNo" value="57"/> + <Numeric name="RPosition" value="937.93*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="6"> + 8.6894*deg ,4.1677*deg ,2.2608*deg ,-2.2608*deg ,-4.1677*deg ,-8.6894*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="6"> + tecpetpar:TECCool2,tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal6b:TECPetalaB"/> + <Numeric name="StartCopyNo" value="63"/> + <Numeric name="RPosition" value="997.895*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="8"> + 11.6983*deg ,6.3017*deg ,2.6983*deg ,-1.8017*deg ,-2.6983*deg ,-6.3017*deg ,-7.1983*deg ,-11.6983*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="8"> + tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool5,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool5,tecpetpar:TECCool1</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal6b:TECPetalaB"/> + <Numeric name="StartCopyNo" value="71"/> + <Numeric name="RPosition" value="1040.55*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="1"> + 10.0576*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="1"> + tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal6b:TECPetalaB"/> + <Numeric name="StartCopyNo" value="72"/> + <Numeric name="RPosition" value="1068.17*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="1"> + 10.0624*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="1"> + tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal6b:TECICBCont6B1"/> + <Numeric name="StartCopyNo" value="5"/> + <String name="ChildName" value="tecpetpar:TECOptoHybrid"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridWidth]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridHeight]"/> + <Numeric name="Rpos" value="562.517*mm"/> + <Numeric name="Zpos" value="-[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="2"> + 5.4762*deg ,-2.429*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal6b:TECICBCont6B2"/> + <Numeric name="StartCopyNo" value="7"/> + <String name="ChildName" value="tecpetpar:TECOptoHybrid"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridWidth]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridHeight]"/> + <Numeric name="Rpos" value="685.152*mm"/> + <Numeric name="Zpos" value="[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="3"> + 6.3214*deg ,-2.0241*deg ,-6.5265*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal6b:TECICBCont6B1"/> + <Numeric name="StartCopyNo" value="10"/> + <String name="ChildName" value="tecpetpar:TECOptoHybrid"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridWidth]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridHeight]"/> + <Numeric name="Rpos" value="807.452*mm"/> + <Numeric name="Zpos" value="-[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="11"> + 12.7924*deg ,10.4466*deg ,8.1008*deg ,5.755*deg ,3.4092*deg ,1.0634*deg ,-1.2824*deg ,-3.6282*deg ,-5.974*deg ,-8.3197*deg ,-10.6655*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal6b:TECICBCont6B2"/> + <Numeric name="StartCopyNo" value="21"/> + <String name="ChildName" value="tecpetpar:TECOptoHybrid"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridWidth]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridHeight]"/> + <Numeric name="Rpos" value="977.634*mm"/> + <Numeric name="Zpos" value="[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="3"> + 7.1858*deg ,-0.9183*deg ,-6.3149*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal6b:TECICBCont6B2"/> + <Numeric name="StartCopyNo" value="1"/> + <String name="ChildName" value="tecpetpar:TECDigiOptoHybModule"/> + <Numeric name="OptoHeight" value="[tecpetpar:DOHMWidth]"/> + <Numeric name="OptoWidth" value="[tecpetpar:DOHMHeight]"/> + <Numeric name="Rpos" value="1022.726*mm"/> + <Numeric name="Zpos" value="[tecpetpar:DOHMZ]"/> + <Vector name="Angles" type="numeric" nEntries="1"> + 11.372*deg</Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecpetal6f.xml b/examples/DDCMS/data/tecpetal6f.xml new file mode 100644 index 000000000..d24bf152c --- /dev/null +++ b/examples/DDCMS/data/tecpetal6f.xml @@ -0,0 +1,354 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecpetal6f.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="ICCZ" value="([tecpetpar:ICBThick]-[tecpetpar:ICCThick])/2"/> + </ConstantsSection> + <SolidSection label="tecpetal6f.xml"> + <Tubs name="TECPetal6F" rMin="[tecpetal3:PetalRmin]" rMax="[tecpetalf:PetalR1]" dz="[tecpetpar:PetalThick]/2" startPhi="-[tecpetalf:PetalWidth0]/2" deltaPhi="[tecpetalf:PetalWidth0]"/> + </SolidSection> + <LogicalPartSection label="tecpetal6f.xml"> + <LogicalPart name="TECPetalCont6F" category="unspecified"> + <rSolid name="tecpetal3:TECPetalCont3"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TECPetalFrame6F" category="unspecified"> + <rSolid name="tecpetal3:TECPetal3"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TECPetal6F" category="unspecified"> + <rSolid name="tecpetal6f:TECPetal6F"/> + <rMaterial name="tecmaterial:TEC_petal"/> + </LogicalPart> + <LogicalPart name="TECPetal7F" category="unspecified"> + <rSolid name="tecpetalf:TECPetal1F"/> + <rMaterial name="tecmaterial:TEC_petal"/> + </LogicalPart> + <LogicalPart name="TECPetalaF" category="unspecified"> + <rSolid name="tecpetalf:TECPetal2F"/> + <rMaterial name="tecmaterial:TEC_petal"/> + </LogicalPart> + <LogicalPart name="TECICBCont6F1" category="unspecified"> + <rSolid name="tecpetal3:TECICBCont3"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TECICBCont6F2" category="unspecified"> + <rSolid name="tecpetal3:TECICBCont3"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tecpetal6f.xml"> + <PosPart copyNumber="1"> + <rParent name="tecpetal6f:TECPetalCont6F"/> + <rChild name="tecring2f:TECRing2F"/> + <rRotation name="tecpetpar:180X"/> + <Translation x="[zero]" y="[zero]" z="[tecring2:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal6f:TECPetalCont6F"/> + <rChild name="tecring3f:TECRing3F"/> + <Translation x="[zero]" y="[zero]" z="[tecring3:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal6f:TECPetalCont6F"/> + <rChild name="tecring4f:TECRing4F"/> + <rRotation name="tecpetpar:180X"/> + <Translation x="[zero]" y="[zero]" z="[tecring4:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal6f:TECPetalCont6F"/> + <rChild name="tecring5f:TECRing5F"/> + <Translation x="[zero]" y="[zero]" z="[tecring5:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal6f:TECPetalCont6F"/> + <rChild name="tecring6f:TECRing6F"/> + <rRotation name="tecpetpar:180X"/> + <Translation x="[zero]" y="[zero]" z="[tecring6:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal6f:TECPetalCont6F"/> + <rChild name="tecpetal6f:TECPetalFrame6F"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal6f:TECPetalFrame6F"/> + <rChild name="tecpetal6f:TECPetal6F"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal6f:TECPetalFrame6F"/> + <rChild name="tecpetal6f:TECPetal7F"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal6f:TECPetalFrame6F"/> + <rChild name="tecpetal6f:TECPetalaF"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal6f:TECPetalCont6F"/> + <rChild name="tecpetal6f:TECICBCont6F1"/> + <Translation x="[zero]" y="[zero]" z="-[tecpetpar:ICBZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal6f:TECPetalCont6F"/> + <rChild name="tecpetal6f:TECICBCont6F2"/> + <Translation x="[zero]" y="[zero]" z="[tecpetpar:ICBZ]"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="tecpetal6f:TECICBCont6F1"/> + <rChild name="tecpetalf:TECICC2F1"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="tecpetal6f:TECICBCont6F1"/> + <rChild name="tecpetalf:TECICC2F2"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="tecpetal6f:TECICBCont6F1"/> + <rChild name="tecpetalf:TECICC46F1"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="tecpetal6f:TECICBCont6F1"/> + <rChild name="tecpetalf:TECICC46F2"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="tecpetal6f:TECICBCont6F2"/> + <rChild name="tecpetalf:TECICC35F1"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="tecpetal6f:TECICBCont6F2"/> + <rChild name="tecpetalf:TECICC35F2"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="tecpetal6f:TECICBCont6F2"/> + <rChild name="tecpetalf:TECICC35F3"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="tecpetal6f:TECICBCont6F2"/> + <rChild name="tecpetalf:TECICC35F4"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="tecpetal6f:TECICBCont6F2"/> + <rChild name="tecpetalf:TECICC35F5"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="5"> + <rParent name="tecpetal6f:TECPetalaF"/> + <rChild name="tecwheel:TECInnerManifold"/> + <Translation x="[zero]" y="[zero]" z="[zero]"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal6f:TECPetal6F"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="RPosition" value="373.084*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="3"> + 16.1238*deg ,1.1238*deg ,-16.1238*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="3"> + tecpetpar:TECCool4,tecpetpar:TECCool3,tecpetpar:TECCool3</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal6f:TECPetal6F"/> + <Numeric name="StartCopyNo" value="4"/> + <Numeric name="RPosition" value="438.663*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 12.3385*deg ,2.6615*deg ,-2.6615*deg ,-12.3385*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool4,tecpetpar:TECCool4,tecpetpar:TECCool3,tecpetpar:TECCool3</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal6f:TECPetal6F"/> + <Numeric name="StartCopyNo" value="8"/> + <Numeric name="RPosition" value="451.736*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 14.4308*deg ,5.4308*deg ,-5.4308*deg ,-14.4308*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal6f:TECPetal6F"/> + <Numeric name="StartCopyNo" value="12"/> + <Numeric name="RPosition" value="491.326*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 9.6429*deg ,5.2432*deg ,-5.3537*deg ,-9.7534*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal6f:TECPetal6F"/> + <Numeric name="StartCopyNo" value="16"/> + <Numeric name="RPosition" value="529.973*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 13.5*deg ,4.5*deg ,-4.5*deg ,-13.5*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal6f:TECPetal7F"/> + <Numeric name="StartCopyNo" value="20"/> + <Numeric name="RPosition" value="565.026*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="7"> + 13.5955*deg ,9.3071*deg ,5.6902*deg ,0.7383*deg ,-7.1669*deg ,-8.7012*deg ,-13.5955*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="7"> + tecpetpar:TECCool1,tecpetpar:TECCool5,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool5,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal6f:TECPetal7F"/> + <Numeric name="StartCopyNo" value="27"/> + <Numeric name="RPosition" value="646.359*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="5"> + 12.8571*deg ,6.4286*deg ,0*deg ,-6.4286*deg ,-12.8571*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="5"> + tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal6f:TECPetal7F"/> + <Numeric name="StartCopyNo" value="32"/> + <Numeric name="RPosition" value="688.526*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="3"> + 9.644*deg ,-0.644*deg ,-9.644*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="3"> + tecpetpar:TECCool3,tecpetpar:TECCool3,tecpetpar:TECCool4</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal6f:TECPetal7F"/> + <Numeric name="StartCopyNo" value="35"/> + <Numeric name="RPosition" value="705.393*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 8.0585*deg ,2.4756*deg ,-5.2453*deg ,-11.2274*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal6f:TECPetal7F"/> + <Numeric name="StartCopyNo" value="39"/> + <Numeric name="RPosition" value="777.681*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 7.227*deg ,1.773*deg ,-1.773*deg ,-7.227*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool3,tecpetpar:TECCool3,tecpetpar:TECCool4,tecpetpar:TECCool4</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal6f:TECPetal7F"/> + <Numeric name="StartCopyNo" value="43"/> + <Numeric name="RPosition" value="809.358*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="9"> + 8.8981*deg ,6.5507*deg ,4.2142*deg ,1.8718*deg ,-0.4758*deg ,-2.8175*deg ,-5.1527*deg ,-7.4972*deg ,-9.8497*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="9"> + tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal6f:TECPetal7F"/> + <Numeric name="StartCopyNo" value="52"/> + <Numeric name="RPosition" value="826.305*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="5"> + 13.4078*deg ,5.8779*deg ,0.5506*deg ,-6.9792*deg ,-13.4078*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="5"> + tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal6f:TECPetal7F"/> + <Numeric name="StartCopyNo" value="57"/> + <Numeric name="RPosition" value="862.788*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="6"> + 11.25*deg ,6.75*deg ,2.25*deg ,-2.25*deg ,-6.75*deg ,-11.25*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="6"> + tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal6f:TECPetalaF"/> + <Numeric name="StartCopyNo" value="63"/> + <Numeric name="RPosition" value="937.93*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="8"> + 11.9037*deg ,7.382*deg ,5.4751*deg ,0.9535*deg ,-0.9535*deg ,-5.4751*deg ,-7.382*deg ,-11.9037*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="8"> + tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2,tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal6f:TECPetalaF"/> + <Numeric name="StartCopyNo" value="71"/> + <Numeric name="RPosition" value="997.895*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="8"> + 11.6983*deg ,7.1983*deg ,6.3017*deg ,2.6983*deg ,-2.6983*deg ,-6.3017*deg ,-10.1082*deg ,-11.6983*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="8"> + tecpetpar:TECCool1,tecpetpar:TECCool5,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool5,tecpetpar:TECCool1</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal6f:TECPetalaF"/> + <Numeric name="StartCopyNo" value="79"/> + <Numeric name="RPosition" value="1037.61*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="1"> + -9.9912*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="1"> + tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal6f:TECPetalaF"/> + <Numeric name="StartCopyNo" value="80"/> + <Numeric name="RPosition" value="1065.23*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="1"> + -9.9978*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="1"> + tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal6f:TECICBCont6F1"/> + <Numeric name="StartCopyNo" value="9"/> + <String name="ChildName" value="tecpetpar:TECOptoHybrid"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridWidth]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridHeight]"/> + <Numeric name="Rpos" value="562.721*mm"/> + <Numeric name="Zpos" value="-[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="3"> + 11.2453*deg ,2.6765*deg ,-6.8472*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal6f:TECICBCont6F2"/> + <Numeric name="StartCopyNo" value="12"/> + <String name="ChildName" value="tecpetpar:TECOptoHybrid"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridWidth]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridHeight]"/> + <Numeric name="Rpos" value="685.052*mm"/> + <Numeric name="Zpos" value="[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="4"> + 9.6425*deg ,4.0592*deg ,-3.6616*deg ,-9.643*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal6f:TECICBCont6F1"/> + <Numeric name="StartCopyNo" value="16"/> + <String name="ChildName" value="tecpetpar:TECOptoHybrid"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridWidth]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridHeight]"/> + <Numeric name="Rpos" value="807.002*mm"/> + <Numeric name="Zpos" value="-[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="9"> + 10.2499*deg ,7.9025*deg ,5.5659*deg ,3.2235*deg ,0.8753*deg ,-1.4658*deg ,-3.801*deg ,-6.1455*deg ,-8.5563*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal6f:TECICBCont6F2"/> + <Numeric name="StartCopyNo" value="25"/> + <String name="ChildName" value="tecpetpar:TECOptoHybrid"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridWidth]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridHeight]"/> + <Numeric name="Rpos" value="977.591*mm"/> + <Numeric name="Zpos" value="[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="3"> + 8.3153*deg ,3.8227*deg ,-5.1984*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal6f:TECICBCont6F2"/> + <Numeric name="StartCopyNo" value="28"/> + <String name="ChildName" value="tecpetpar:TECOptoHybridShort"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridHeight]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridWidth]"/> + <Numeric name="Rpos" value="977.591*mm"/> + <Numeric name="Zpos" value="[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="1"> + -9.9916*deg</Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecpetal8b.xml b/examples/DDCMS/data/tecpetal8b.xml new file mode 100644 index 000000000..475dfb347 --- /dev/null +++ b/examples/DDCMS/data/tecpetal8b.xml @@ -0,0 +1,332 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecpetal8b.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="ICCZ" value="([tecpetpar:ICBThick]-[tecpetpar:ICCThick])/2"/> + </ConstantsSection> + <SolidSection label="tecpetal8b.xml"> + <Tubs name="TECPetal8B" rMin="[tecpetal3:PetalRmin]" rMax="[tecpetalb:PetalR1]" dz="[tecpetpar:PetalThick]/2" startPhi="-[tecpetalb:PetalWidth0]/2" deltaPhi="[tecpetalb:PetalWidth0]"/> + </SolidSection> + <LogicalPartSection label="tecpetal8b.xml"> + <LogicalPart name="TECPetalCont8B" category="unspecified"> + <rSolid name="tecpetal3:TECPetalCont3"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TECPetalFrame8B" category="unspecified"> + <rSolid name="tecpetal3:TECPetal3"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TECPetal8B" category="unspecified"> + <rSolid name="tecpetal8b:TECPetal8B"/> + <rMaterial name="tecmaterial:TEC_petal"/> + </LogicalPart> + <LogicalPart name="TECPetal9B" category="unspecified"> + <rSolid name="tecpetalb:TECPetal1B"/> + <rMaterial name="tecmaterial:TEC_petal"/> + </LogicalPart> + <LogicalPart name="TECPetalbB" category="unspecified"> + <rSolid name="tecpetalb:TECPetal2B"/> + <rMaterial name="tecmaterial:TEC_petal"/> + </LogicalPart> + <LogicalPart name="TECICBCont8B1" category="unspecified"> + <rSolid name="tecpetal3:TECICBCont3"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TECICBCont8B2" category="unspecified"> + <rSolid name="tecpetal3:TECICBCont3"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tecpetal8b.xml"> + <PosPart copyNumber="1"> + <rParent name="tecpetal8b:TECPetalCont8B"/> + <rChild name="tecring3b:TECRing3B"/> + <Translation x="[zero]" y="[zero]" z="[tecring3:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal8b:TECPetalCont8B"/> + <rChild name="tecring4b:TECRing4B"/> + <rRotation name="tecpetpar:180X"/> + <Translation x="[zero]" y="[zero]" z="[tecring4:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal8b:TECPetalCont8B"/> + <rChild name="tecring5b:TECRing5B"/> + <Translation x="[zero]" y="[zero]" z="[tecring5:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal8b:TECPetalCont8B"/> + <rChild name="tecring6b:TECRing6B"/> + <rRotation name="tecpetpar:180X"/> + <Translation x="[zero]" y="[zero]" z="[tecring6:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal8b:TECPetalCont8B"/> + <rChild name="tecpetal8b:TECPetalFrame8B"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal8b:TECPetalFrame8B"/> + <rChild name="tecpetal8b:TECPetal8B"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal8b:TECPetalFrame8B"/> + <rChild name="tecpetal8b:TECPetal9B"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal8b:TECPetalFrame8B"/> + <rChild name="tecpetal8b:TECPetalbB"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal8b:TECPetalCont8B"/> + <rChild name="tecpetal8b:TECICBCont8B1"/> + <Translation x="[zero]" y="[zero]" z="-[tecpetpar:ICBZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal8b:TECPetalCont8B"/> + <rChild name="tecpetal8b:TECICBCont8B2"/> + <Translation x="[zero]" y="[zero]" z="[tecpetpar:ICBZ]"/> + </PosPart> + <PosPart copyNumber="4"> + <rParent name="tecpetal8b:TECICBCont8B1"/> + <rChild name="tecpetalb:TECICC46B1"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="4"> + <rParent name="tecpetal8b:TECICBCont8B1"/> + <rChild name="tecpetalb:TECICC46B2"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="4"> + <rParent name="tecpetal8b:TECICBCont8B1"/> + <rChild name="tecpetalb:TECICC46B3"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="4"> + <rParent name="tecpetal8b:TECICBCont8B2"/> + <rChild name="tecpetalb:TECICC35B1"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="4"> + <rParent name="tecpetal8b:TECICBCont8B2"/> + <rChild name="tecpetalb:TECICC35B2"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="4"> + <rParent name="tecpetal8b:TECICBCont8B2"/> + <rChild name="tecpetalb:TECICC35B3"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="4"> + <rParent name="tecpetal8b:TECICBCont8B2"/> + <rChild name="tecpetalb:TECICC35B4"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="4"> + <rParent name="tecpetal8b:TECICBCont8B2"/> + <rChild name="tecpetalb:TECICC35B5"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="8"> + <rParent name="tecpetal8b:TECPetalbB"/> + <rChild name="tecwheel:TECInnerManifold"/> + <Translation x="[zero]" y="[zero]" z="[zero]"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal8b:TECPetal8B"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="RPosition" value="372.842*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 10.9517*deg ,8.6238*deg ,-8.6238*deg ,-10.9554*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool5,tecpetpar:TECCool3,tecpetpar:TECCool3,tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal8b:TECPetal8B"/> + <Numeric name="StartCopyNo" value="5"/> + <Numeric name="RPosition" value="438.663*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="2"> + 4.8385*deg ,-4.8385*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="2"> + tecpetpar:TECCool3,tecpetpar:TECCool3</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal8b:TECPetal8B"/> + <Numeric name="StartCopyNo" value="7"/> + <Numeric name="RPosition" value="451.736*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="3"> + 9.9308*deg ,0.9308*deg ,-9.9308*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="3"> + tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal8b:TECPetal8B"/> + <Numeric name="StartCopyNo" value="10"/> + <Numeric name="RPosition" value="491.272*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="2"> + 4.829*deg ,-2.1851*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="2"> + tecpetpar:TECCool5,tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal8b:TECPetal8B"/> + <Numeric name="StartCopyNo" value="12"/> + <Numeric name="RPosition" value="529.973*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="3"> + 9*deg ,0*deg ,-9*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="3"> + tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal8b:TECPetal9B"/> + <Numeric name="StartCopyNo" value="15"/> + <Numeric name="RPosition" value="565.026*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 10.3812*deg ,3.9526*deg ,-3.9526*deg ,-10.3812*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal8b:TECPetal9B"/> + <Numeric name="StartCopyNo" value="19"/> + <Numeric name="RPosition" value="646.359*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 9.6429*deg ,3.2143*deg ,-3.2143*deg ,-9.6429*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal8b:TECPetal9B"/> + <Numeric name="StartCopyNo" value="23"/> + <Numeric name="RPosition" value="688.526*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 14.144*deg ,5.144*deg ,-5.144*deg ,-14.144*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool4,tecpetpar:TECCool3,tecpetpar:TECCool3,tecpetpar:TECCool4</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal8b:TECPetal9B"/> + <Numeric name="StartCopyNo" value="27"/> + <Numeric name="RPosition" value="705.35*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="3"> + 5.0584*deg ,-3.2876*deg ,-7.7907*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="3"> + tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal8b:TECPetalbB"/> + <Numeric name="StartCopyNo" value="30"/> + <Numeric name="RPosition" value="777.681*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="6"> + 11.727*deg ,6.273*deg ,2.727*deg ,-2.727*deg ,-6.273*deg ,-11.727*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="6"> + tecpetpar:TECCool4,tecpetpar:TECCool4,tecpetpar:TECCool3,tecpetpar:TECCool3,tecpetpar:TECCool4,tecpetpar:TECCool4</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal8b:TECPetalbB"/> + <Numeric name="StartCopyNo" value="36"/> + <Numeric name="RPosition" value="809.853*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="11"> + 11.729*deg ,9.3832*deg ,7.0374*deg ,4.6916*deg ,2.3458*deg ,0*deg ,-2.3458*deg ,-4.6916*deg ,-7.0374*deg ,-9.3832*deg ,-11.729*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="11"> + tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal8b:TECPetalbB"/> + <Numeric name="StartCopyNo" value="47"/> + <Numeric name="RPosition" value="826.305*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 10.1935*deg ,3.7649*deg ,-3.7649*deg ,-10.1935*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal8b:TECPetalbB"/> + <Numeric name="StartCopyNo" value="51"/> + <Numeric name="RPosition" value="862.788*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="6"> + 11.25*deg ,6.75*deg ,2.25*deg ,-2.25*deg ,-6.75*deg ,-11.25*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="6"> + tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal8b:TECPetalbB"/> + <Numeric name="StartCopyNo" value="57"/> + <Numeric name="RPosition" value="937.93*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="6"> + 8.6894*deg ,4.1677*deg ,2.2608*deg ,-2.2608*deg ,-4.1677*deg ,-8.6894*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="6"> + tecpetpar:TECCool2,tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal8b:TECPetalbB"/> + <Numeric name="StartCopyNo" value="63"/> + <Numeric name="RPosition" value="997.895*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="8"> + 11.6983*deg ,6.3017*deg ,2.6983*deg ,-1.8017*deg ,-2.6983*deg ,-6.3017*deg ,-7.1983*deg ,-11.6983*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="8"> + tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool5,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool5,tecpetpar:TECCool1</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal8b:TECPetalbB"/> + <Numeric name="StartCopyNo" value="71"/> + <Numeric name="RPosition" value="1040.55*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="1"> + 10.0576*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="1"> + tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal8b:TECPetalbB"/> + <Numeric name="StartCopyNo" value="72"/> + <Numeric name="RPosition" value="1068.17*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="1"> + 10.0624*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="1"> + tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal8b:TECICBCont8B2"/> + <Numeric name="StartCopyNo" value="7"/> + <String name="ChildName" value="tecpetpar:TECOptoHybrid"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridWidth]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridHeight]"/> + <Numeric name="Rpos" value="685.152*mm"/> + <Numeric name="Zpos" value="[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="3"> + 6.3214*deg ,-2.0241*deg ,-6.5265*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal8b:TECICBCont8B1"/> + <Numeric name="StartCopyNo" value="10"/> + <String name="ChildName" value="tecpetpar:TECOptoHybrid"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridWidth]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridHeight]"/> + <Numeric name="Rpos" value="807.452*mm"/> + <Numeric name="Zpos" value="-[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="11"> + 12.7924*deg ,10.4466*deg ,8.1008*deg ,5.755*deg ,3.4092*deg ,1.0634*deg ,-1.2824*deg ,-3.6282*deg ,-5.974*deg ,-8.3197*deg ,-10.6655*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal8b:TECICBCont8B2"/> + <Numeric name="StartCopyNo" value="21"/> + <String name="ChildName" value="tecpetpar:TECOptoHybrid"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridWidth]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridHeight]"/> + <Numeric name="Rpos" value="977.634*mm"/> + <Numeric name="Zpos" value="[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="3"> + 7.1858*deg ,-0.9183*deg ,-6.3149*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal8b:TECICBCont8B2"/> + <Numeric name="StartCopyNo" value="1"/> + <String name="ChildName" value="tecpetpar:TECDigiOptoHybModule"/> + <Numeric name="OptoHeight" value="[tecpetpar:DOHMWidth]"/> + <Numeric name="OptoWidth" value="[tecpetpar:DOHMHeight]"/> + <Numeric name="Rpos" value="1022.726*mm"/> + <Numeric name="Zpos" value="[tecpetpar:DOHMZ]"/> + <Vector name="Angles" type="numeric" nEntries="1"> + 11.372*deg</Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecpetal8f.xml b/examples/DDCMS/data/tecpetal8f.xml new file mode 100644 index 000000000..144be04eb --- /dev/null +++ b/examples/DDCMS/data/tecpetal8f.xml @@ -0,0 +1,327 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecpetal8f.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="ICCZ" value="([tecpetpar:ICBThick]-[tecpetpar:ICCThick])/2"/> + </ConstantsSection> + <SolidSection label="tecpetal8f.xml"> + <Tubs name="TECPetal8F" rMin="[tecpetal3:PetalRmin]" rMax="[tecpetalf:PetalR1]" dz="[tecpetpar:PetalThick]/2" startPhi="-[tecpetalf:PetalWidth0]/2" deltaPhi="[tecpetalf:PetalWidth0]"/> + </SolidSection> + <LogicalPartSection label="tecpetal8f.xml"> + <LogicalPart name="TECPetalCont8F" category="unspecified"> + <rSolid name="tecpetal3:TECPetalCont3"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TECPetalFrame8F" category="unspecified"> + <rSolid name="tecpetal3:TECPetal3"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TECPetal8F" category="unspecified"> + <rSolid name="tecpetal8f:TECPetal8F"/> + <rMaterial name="tecmaterial:TEC_petal"/> + </LogicalPart> + <LogicalPart name="TECPetal9F" category="unspecified"> + <rSolid name="tecpetalf:TECPetal1F"/> + <rMaterial name="tecmaterial:TEC_petal"/> + </LogicalPart> + <LogicalPart name="TECPetalbF" category="unspecified"> + <rSolid name="tecpetalf:TECPetal2F"/> + <rMaterial name="tecmaterial:TEC_petal"/> + </LogicalPart> + <LogicalPart name="TECICBCont8F1" category="unspecified"> + <rSolid name="tecpetal3:TECICBCont3"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TECICBCont8F2" category="unspecified"> + <rSolid name="tecpetal3:TECICBCont3"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tecpetal8f.xml"> + <PosPart copyNumber="1"> + <rParent name="tecpetal8f:TECPetalCont8F"/> + <rChild name="tecring3f:TECRing3F"/> + <Translation x="[zero]" y="[zero]" z="[tecring3:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal8f:TECPetalCont8F"/> + <rChild name="tecring4f:TECRing4F"/> + <rRotation name="tecpetpar:180X"/> + <Translation x="[zero]" y="[zero]" z="[tecring4:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal8f:TECPetalCont8F"/> + <rChild name="tecring5f:TECRing5F"/> + <Translation x="[zero]" y="[zero]" z="[tecring5:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal8f:TECPetalCont8F"/> + <rChild name="tecring6f:TECRing6F"/> + <rRotation name="tecpetpar:180X"/> + <Translation x="[zero]" y="[zero]" z="[tecring6:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal8f:TECPetalCont8F"/> + <rChild name="tecpetal8f:TECPetalFrame8F"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal8f:TECPetalFrame8F"/> + <rChild name="tecpetal8f:TECPetal8F"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal8f:TECPetalFrame8F"/> + <rChild name="tecpetal8f:TECPetal9F"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal8f:TECPetalFrame8F"/> + <rChild name="tecpetal8f:TECPetalbF"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal8f:TECPetalCont8F"/> + <rChild name="tecpetal8f:TECICBCont8F1"/> + <Translation x="[zero]" y="[zero]" z="-[tecpetpar:ICBZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecpetal8f:TECPetalCont8F"/> + <rChild name="tecpetal8f:TECICBCont8F2"/> + <Translation x="[zero]" y="[zero]" z="[tecpetpar:ICBZ]"/> + </PosPart> + <PosPart copyNumber="4"> + <rParent name="tecpetal8f:TECICBCont8F1"/> + <rChild name="tecpetalf:TECICC46F1"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="4"> + <rParent name="tecpetal8f:TECICBCont8F1"/> + <rChild name="tecpetalf:TECICC46F2"/> + <Translation x="[zero]" y="[zero]" z="[ICCZ]"/> + </PosPart> + <PosPart copyNumber="4"> + <rParent name="tecpetal8f:TECICBCont8F2"/> + <rChild name="tecpetalf:TECICC35F1"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="4"> + <rParent name="tecpetal8f:TECICBCont8F2"/> + <rChild name="tecpetalf:TECICC35F2"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="4"> + <rParent name="tecpetal8f:TECICBCont8F2"/> + <rChild name="tecpetalf:TECICC35F3"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="4"> + <rParent name="tecpetal8f:TECICBCont8F2"/> + <rChild name="tecpetalf:TECICC35F4"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="4"> + <rParent name="tecpetal8f:TECICBCont8F2"/> + <rChild name="tecpetalf:TECICC35F5"/> + <Translation x="[zero]" y="[zero]" z="-[ICCZ]"/> + </PosPart> + <PosPart copyNumber="7"> + <rParent name="tecpetal8f:TECPetalbF"/> + <rChild name="tecwheel:TECInnerManifold"/> + <Translation x="[zero]" y="[zero]" z="[zero]"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal8f:TECPetal8F"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="RPosition" value="373.084*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="3"> + 16.1238*deg ,1.1238*deg ,-16.1238*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="3"> + tecpetpar:TECCool4,tecpetpar:TECCool3,tecpetpar:TECCool3</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal8f:TECPetal8F"/> + <Numeric name="StartCopyNo" value="4"/> + <Numeric name="RPosition" value="438.663*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 12.3385*deg ,2.6615*deg ,-2.6615*deg ,-12.3385*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool4,tecpetpar:TECCool4,tecpetpar:TECCool3,tecpetpar:TECCool3</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal8f:TECPetal8F"/> + <Numeric name="StartCopyNo" value="8"/> + <Numeric name="RPosition" value="451.736*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 14.4308*deg ,5.4308*deg ,-5.4308*deg ,-14.4308*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal8f:TECPetal8F"/> + <Numeric name="StartCopyNo" value="12"/> + <Numeric name="RPosition" value="491.326*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 9.6429*deg ,5.2432*deg ,-5.3537*deg ,-9.7534*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal8f:TECPetal8F"/> + <Numeric name="StartCopyNo" value="16"/> + <Numeric name="RPosition" value="529.973*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 13.5*deg ,4.5*deg ,-4.5*deg ,-13.5*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal8f:TECPetal9F"/> + <Numeric name="StartCopyNo" value="20"/> + <Numeric name="RPosition" value="565.026*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="7"> + 13.5955*deg ,9.3071*deg ,5.6902*deg ,0.7383*deg ,-7.1669*deg ,-8.7012*deg ,-13.5955*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="7"> + tecpetpar:TECCool1,tecpetpar:TECCool5,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool5,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal8f:TECPetal9F"/> + <Numeric name="StartCopyNo" value="27"/> + <Numeric name="RPosition" value="646.359*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="5"> + 12.8571*deg ,6.4286*deg ,0*deg ,-6.4286*deg ,-12.8571*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="5"> + tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal8f:TECPetal9F"/> + <Numeric name="StartCopyNo" value="32"/> + <Numeric name="RPosition" value="688.526*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="3"> + 9.644*deg ,-0.644*deg ,-9.644*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="3"> + tecpetpar:TECCool3,tecpetpar:TECCool3,tecpetpar:TECCool4</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal8f:TECPetal9F"/> + <Numeric name="StartCopyNo" value="35"/> + <Numeric name="RPosition" value="705.393*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 8.0585*deg ,2.4756*deg ,-5.2453*deg ,-11.2274*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal8f:TECPetal9F"/> + <Numeric name="StartCopyNo" value="39"/> + <Numeric name="RPosition" value="777.681*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="4"> + 7.227*deg ,1.773*deg ,-1.773*deg ,-7.227*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="4"> + tecpetpar:TECCool3,tecpetpar:TECCool3,tecpetpar:TECCool4,tecpetpar:TECCool4</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal8f:TECPetal9F"/> + <Numeric name="StartCopyNo" value="43"/> + <Numeric name="RPosition" value="809.358*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="9"> + 8.8981*deg ,6.5507*deg ,4.2142*deg ,1.8718*deg ,-0.4758*deg ,-2.8175*deg ,-5.1527*deg ,-7.4972*deg ,-9.8497*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="9"> + tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5,tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal8f:TECPetal9F"/> + <Numeric name="StartCopyNo" value="52"/> + <Numeric name="RPosition" value="826.305*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="5"> + 13.4078*deg ,5.8779*deg ,0.5506*deg ,-6.9792*deg ,-13.4078*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="5"> + tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal8f:TECPetal9F"/> + <Numeric name="StartCopyNo" value="57"/> + <Numeric name="RPosition" value="862.788*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="6"> + 11.25*deg ,6.75*deg ,2.25*deg ,-2.25*deg ,-6.75*deg ,-11.25*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="6"> + tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal8f:TECPetalbF"/> + <Numeric name="StartCopyNo" value="63"/> + <Numeric name="RPosition" value="937.93*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="8"> + 11.9037*deg ,7.382*deg ,5.4751*deg ,0.9535*deg ,-0.9535*deg ,-5.4751*deg ,-7.382*deg ,-11.9037*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="8"> + tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2,tecpetpar:TECCool2,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool2,tecpetpar:TECCool2</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal8f:TECPetalbF"/> + <Numeric name="StartCopyNo" value="71"/> + <Numeric name="RPosition" value="997.895*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="8"> + 11.6983*deg ,7.1983*deg ,6.3017*deg ,2.6983*deg ,-2.6983*deg ,-6.3017*deg ,-10.1082*deg ,-11.6983*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="8"> + tecpetpar:TECCool1,tecpetpar:TECCool5,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool1,tecpetpar:TECCool5,tecpetpar:TECCool1</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal8f:TECPetalbF"/> + <Numeric name="StartCopyNo" value="79"/> + <Numeric name="RPosition" value="1037.61*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="1"> + -9.9912*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="1"> + tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECCoolAlgo"> + <rParent name="tecpetal8f:TECPetalbF"/> + <Numeric name="StartCopyNo" value="80"/> + <Numeric name="RPosition" value="1065.23*mm"/> + <Vector name="PhiPosition" type="numeric" nEntries="1"> + -9.9978*deg</Vector> + <Vector name="CoolInsert" type="string" nEntries="1"> + tecpetpar:TECCool5</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal8f:TECICBCont8F2"/> + <Numeric name="StartCopyNo" value="12"/> + <String name="ChildName" value="tecpetpar:TECOptoHybrid"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridWidth]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridHeight]"/> + <Numeric name="Rpos" value="685.052*mm"/> + <Numeric name="Zpos" value="[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="4"> + 9.6425*deg ,4.0592*deg ,-3.6616*deg ,-9.643*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal8f:TECICBCont8F1"/> + <Numeric name="StartCopyNo" value="16"/> + <String name="ChildName" value="tecpetpar:TECOptoHybrid"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridWidth]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridHeight]"/> + <Numeric name="Rpos" value="807.002*mm"/> + <Numeric name="Zpos" value="-[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="9"> + 10.2499*deg ,7.9025*deg ,5.5659*deg ,3.2235*deg ,0.8753*deg ,-1.4658*deg ,-3.801*deg ,-6.1455*deg ,-8.5563*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal8f:TECICBCont8F2"/> + <Numeric name="StartCopyNo" value="25"/> + <String name="ChildName" value="tecpetpar:TECOptoHybrid"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridWidth]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridHeight]"/> + <Numeric name="Rpos" value="977.591*mm"/> + <Numeric name="Zpos" value="[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="3"> + 8.3153*deg ,3.8227*deg ,-5.1984*deg</Vector> + </Algorithm> + <Algorithm name="track:DDTECOptoHybAlgo"> + <rParent name="tecpetal8f:TECICBCont8F2"/> + <Numeric name="StartCopyNo" value="28"/> + <String name="ChildName" value="tecpetpar:TECOptoHybridShort"/> + <Numeric name="OptoWidth" value="[tecpetpar:HybridHeight]"/> + <Numeric name="OptoHeight" value="[tecpetpar:HybridWidth]"/> + <Numeric name="Rpos" value="977.591*mm"/> + <Numeric name="Zpos" value="[tecpetpar:HybridZ]"/> + <Vector name="Angles" type="numeric" nEntries="1"> + -9.9916*deg</Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecpetalb.xml b/examples/DDCMS/data/tecpetalb.xml new file mode 100644 index 000000000..29237d876 --- /dev/null +++ b/examples/DDCMS/data/tecpetalb.xml @@ -0,0 +1,92 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecpetalb.xml" eval="true"> + <Constant name="PetalWidth0" value="25.8*deg"/> + <Constant name="PetalWidth1" value="29.9*deg"/> + <Constant name="PetalWidth2" value="26.9*deg"/> + <Constant name="PetalR1" value="55.50*cm"/> + <Constant name="PetalR2" value="75.60*cm"/> + <Constant name="ICC35B5shift" value="-4.54*deg"/> + </ConstantsSection> + <SolidSection label="tecpetalb.xml"> + <Tubs name="TECPetal1B" rMin="[tecpetalb:PetalR1]" rMax="[tecpetalb:PetalR2]" dz="[tecpetpar:PetalThick]/2" startPhi="-[tecpetalb:PetalWidth1]/2" deltaPhi="[tecpetalb:PetalWidth1]"/> + <Tubs name="TECPetal2B" rMin="[tecpetalb:PetalR2]" rMax="[tecpetpar:PetalRmax]" dz="[tecpetpar:PetalThick]/2" startPhi="-[tecpetalb:PetalWidth2]/2" deltaPhi="[tecpetalb:PetalWidth2]"/> + <Tubs name="TECICC1B1" rMin="391.89*mm" rMax="449.56*mm" dz="[tecpetpar:ICCThick]/2" startPhi="-2.17643*deg" deltaPhi="4.35286*deg"/> + <Tubs name="TECICC1B2" rMin="449.56*mm" rMax="493.23*mm" dz="[tecpetpar:ICCThick]/2" startPhi="-5.83087*deg" deltaPhi="11.6617*deg"/> + <Tubs name="TECICC1B3" rMin="493.23*mm" rMax="586.67*mm" dz="[tecpetpar:ICCThick]/2" startPhi="-2.17298*deg" deltaPhi="4.34596*deg"/> + <Tubs name="TECICC35B1" rMin="586.67*mm" rMax="657.37*mm" dz="[tecpetpar:ICCThick]/2" startPhi="-2.10147*deg" deltaPhi="4.20295*deg"/> + <Tubs name="TECICC35B2" rMin="657.37*mm" rMax="690.87*mm" dz="[tecpetpar:ICCThick]/2" startPhi="-12.3423*deg" deltaPhi="24.6847*deg"/> + <Tubs name="TECICC35B3" rMin="690.87*mm" rMax="915.67*mm" dz="[tecpetpar:ICCThick]/2" startPhi="-2.89888*deg" deltaPhi="5.79776*deg"/> + <Tubs name="TECICC35B4" rMin="915.67*mm" rMax="971.8*mm" dz="[tecpetpar:ICCThick]/2" startPhi="-7.10953*deg" deltaPhi="14.2191*deg"/> + <Tubs name="TECICC35B5" rMin="971.8*mm" rMax="1085.91*mm" dz="[tecpetpar:ICCThick]/2" startPhi="-3.62561*deg+[ICC35B5shift]" deltaPhi="7.25122*deg"/> + <Tubs name="TECICC0LB1" rMin="356.18*mm" rMax="390.57*mm" dz="[tecpetpar:ICCThick]/2" startPhi="-9.12831*deg" deltaPhi="18.2566*deg"/> + <Tubs name="TECICC0LB2" rMin="390.57*mm" rMax="432.42*mm" dz="[tecpetpar:ICCThick]/2" startPhi="-2.24672*deg" deltaPhi="4.49345*deg"/> + <Tubs name="TECICC2B1" rMin="542.92*mm" rMax="585.28*mm" dz="[tecpetpar:ICCThick]/2" startPhi="-6.44875*deg" deltaPhi="12.8975*deg"/> + <Tubs name="TECICC2B2" rMin="585.28*mm" rMax="637.44*mm" dz="[tecpetpar:ICCThick]/2" startPhi="-1.65027*deg" deltaPhi="3.30054*deg"/> + <Tubs name="TECICC46B1" rMin="764.83*mm" rMax="814.65*mm" dz="[tecpetpar:ICCThick]/2" startPhi="-1.45104*deg" deltaPhi="2.90208*deg"/> + <Tubs name="TECICC46B2" rMin="814.65*mm" rMax="872.36*mm" dz="[tecpetpar:ICCThick]/2" startPhi="-12.1736*deg" deltaPhi="24.3473*deg"/> + <Tubs name="TECICC46B3" rMin="872.36*mm" rMax="933.02*mm" dz="[tecpetpar:ICCThick]/2" startPhi="-2.12357*deg" deltaPhi="4.24715*deg"/> + </SolidSection> + <LogicalPartSection label="tecpetalb.xml"> + <LogicalPart name="TECICC1B1" category="unspecified"> + <rSolid name="tecpetalb:TECICC1B1"/> + <rMaterial name="tecmaterial:TEC_ICC1B"/> + </LogicalPart> + <LogicalPart name="TECICC1B2" category="unspecified"> + <rSolid name="tecpetalb:TECICC1B2"/> + <rMaterial name="tecmaterial:TEC_ICC1B"/> + </LogicalPart> + <LogicalPart name="TECICC1B3" category="unspecified"> + <rSolid name="tecpetalb:TECICC1B3"/> + <rMaterial name="tecmaterial:TEC_ICC1B"/> + </LogicalPart> + <LogicalPart name="TECICC35B1" category="unspecified"> + <rSolid name="tecpetalb:TECICC35B1"/> + <rMaterial name="tecmaterial:TEC_ICC35B"/> + </LogicalPart> + <LogicalPart name="TECICC35B2" category="unspecified"> + <rSolid name="tecpetalb:TECICC35B2"/> + <rMaterial name="tecmaterial:TEC_ICC35B"/> + </LogicalPart> + <LogicalPart name="TECICC35B3" category="unspecified"> + <rSolid name="tecpetalb:TECICC35B3"/> + <rMaterial name="tecmaterial:TEC_ICC35B"/> + </LogicalPart> + <LogicalPart name="TECICC35B4" category="unspecified"> + <rSolid name="tecpetalb:TECICC35B4"/> + <rMaterial name="tecmaterial:TEC_ICC35B"/> + </LogicalPart> + <LogicalPart name="TECICC35B5" category="unspecified"> + <rSolid name="tecpetalb:TECICC35B5"/> + <rMaterial name="tecmaterial:TEC_ICC35B"/> + </LogicalPart> + <LogicalPart name="TECICC0LB1" category="unspecified"> + <rSolid name="tecpetalb:TECICC0LB1"/> + <rMaterial name="tecmaterial:TEC_ICC0LB"/> + </LogicalPart> + <LogicalPart name="TECICC0LB2" category="unspecified"> + <rSolid name="tecpetalb:TECICC0LB2"/> + <rMaterial name="tecmaterial:TEC_ICC0LB"/> + </LogicalPart> + <LogicalPart name="TECICC2B1" category="unspecified"> + <rSolid name="tecpetalb:TECICC2B1"/> + <rMaterial name="tecmaterial:TEC_ICC2B"/> + </LogicalPart> + <LogicalPart name="TECICC2B2" category="unspecified"> + <rSolid name="tecpetalb:TECICC2B2"/> + <rMaterial name="tecmaterial:TEC_ICC2B"/> + </LogicalPart> + <LogicalPart name="TECICC46B1" category="unspecified"> + <rSolid name="tecpetalb:TECICC46B1"/> + <rMaterial name="tecmaterial:TEC_ICC46B"/> + </LogicalPart> + <LogicalPart name="TECICC46B2" category="unspecified"> + <rSolid name="tecpetalb:TECICC46B2"/> + <rMaterial name="tecmaterial:TEC_ICC46B"/> + </LogicalPart> + <LogicalPart name="TECICC46B3" category="unspecified"> + <rSolid name="tecpetalb:TECICC46B3"/> + <rMaterial name="tecmaterial:TEC_ICC46B"/> + </LogicalPart> + </LogicalPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tecpetalf.xml b/examples/DDCMS/data/tecpetalf.xml new file mode 100644 index 000000000..feab8eb05 --- /dev/null +++ b/examples/DDCMS/data/tecpetalf.xml @@ -0,0 +1,113 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecpetalf.xml" eval="true"> + <Constant name="PetalWidth0" value="37.4*deg"/> + <Constant name="PetalWidth1" value="30.3*deg"/> + <Constant name="PetalWidth2" value="26.9*deg"/> + <Constant name="PetalR1" value="53.60*cm"/> + <Constant name="PetalR2" value="88.20*cm"/> + <Constant name="ICC35F5shift" value="3.41*deg"/> + </ConstantsSection> + <!-- TECPetal0F is defined in tecpetal{N}f.xml so that the inner radius can be altered + it would be most usefull to introduce i.e. TECPetal0Flong and TECPetal0Fshort with their + logical definitions here. then the CoolAlgo would not have to be called so often and + everything would be much tidier. However changing the names of anything seems to be no + good idea so it will stay this way + Matthias--> + <SolidSection label="tecpetalf.xml"> + <Tubs name="TECPetal1F" rMin="[tecpetalf:PetalR1]" rMax="[tecpetalf:PetalR2]" dz="[tecpetpar:PetalThick]/2" startPhi="-[tecpetalf:PetalWidth1]/2" deltaPhi="[tecpetalf:PetalWidth1]"/> + <Tubs name="TECPetal2F" rMin="[tecpetalf:PetalR2]" rMax="[tecpetpar:PetalRmax]" dz="[tecpetpar:PetalThick]/2" startPhi="-[tecpetalf:PetalWidth2]/2" deltaPhi="[tecpetalf:PetalWidth2]"/> + <Tubs name="TECICC01LF1" rMin="256*mm" rMax="280.59*mm" dz="[tecpetpar:ICCThick]/2" startPhi="-15.0295*deg" deltaPhi="30.059*deg"/> + <Tubs name="TECICC01LF2" rMin="280.59*mm" rMax="445.95*mm" dz="[tecpetpar:ICCThick]/2" startPhi="-2.22838*deg" deltaPhi="4.45675*deg"/> + <Tubs name="TECICC01LF3" rMin="445.95*mm" rMax="489.83*mm" dz="[tecpetpar:ICCThick]/2" startPhi="-14.4933*deg" deltaPhi="28.9867*deg"/> + <Tubs name="TECICC01LF4" rMin="489.83*mm" rMax="583.28*mm" dz="[tecpetpar:ICCThick]/2" startPhi="-2.60597*deg" deltaPhi="5.21194*deg"/> + <Tubs name="TECICC35F1" rMin="583.28*mm" rMax="643.28*mm" dz="[tecpetpar:ICCThick]/2" startPhi="-3.09787*deg" deltaPhi="6.19574*deg"/> + <Tubs name="TECICC35F2" rMin="643.28*mm" rMax="713.23*mm" dz="[tecpetpar:ICCThick]/2" startPhi="-8.83675*deg" deltaPhi="17.6735*deg"/> + <Tubs name="TECICC35F3" rMin="713.23*mm" rMax="943.22*mm" dz="[tecpetpar:ICCThick]/2" startPhi="-3.06064*deg" deltaPhi="6.12128*deg"/> + <Tubs name="TECICC35F4" rMin="943.22*mm" rMax="962.58*mm" dz="[tecpetpar:ICCThick]/2" startPhi="-13.3485*deg" deltaPhi="26.697*deg"/> + <Tubs name="TECICC35F5" rMin="962.58*mm" rMax="1092.71*mm" dz="[tecpetpar:ICCThick]/2" startPhi="-3.9312*deg+[ICC35F5shift]" deltaPhi="7.86239*deg"/> + <Tubs name="TECICC1SF1" rMin="407.84*mm" rMax="445.95*mm" dz="[tecpetpar:ICCThick]/2" startPhi="-2.01346*deg" deltaPhi="4.02691*deg"/> + <Tubs name="TECICC1SF2" rMin="445.95*mm" rMax="489.48*mm" dz="[tecpetpar:ICCThick]/2" startPhi="-14.1382*deg" deltaPhi="28.2764*deg"/> + <Tubs name="TECICC1SF3" rMin="489.48*mm" rMax="582.93*mm" dz="[tecpetpar:ICCThick]/2" startPhi="-2.60767*deg" deltaPhi="5.21534*deg"/> + <Tubs name="TECICC0F1" rMin="361*mm" rMax="389.81*mm" dz="[tecpetpar:ICCThick]/2" startPhi="-13.6144*deg" deltaPhi="27.2288*deg"/> + <Tubs name="TECICC0F2" rMin="389.81*mm" rMax="446.04*mm" dz="[tecpetpar:ICCThick]/2" startPhi="-1.7847*deg" deltaPhi="3.56939*deg"/> + <Tubs name="TECICC2F1" rMin="543*mm" rMax="565.1*mm" dz="[tecpetpar:ICCThick]/2" startPhi="-11.4782*deg" deltaPhi="22.9565*deg"/> + <Tubs name="TECICC2F2" rMin="565.1*mm" rMax="636.46*mm" dz="[tecpetpar:ICCThick]/2" startPhi="-1.25806*deg" deltaPhi="2.51612*deg"/> + <Tubs name="TECICC46F1" rMin="795*mm" rMax="852.44*mm" dz="[tecpetpar:ICCThick]/2" startPhi="-11.0046*deg" deltaPhi="22.0091*deg"/> + <Tubs name="TECICC46F2" rMin="852.44*mm" rMax="914.9*mm" dz="[tecpetpar:ICCThick]/2" startPhi="-1.47394*deg" deltaPhi="2.94789*deg"/> + </SolidSection> + <LogicalPartSection label="tecpetalf.xml"> + <LogicalPart name="TECICC01LF1" category="unspecified"> + <rSolid name="tecpetalf:TECICC01LF1"/> + <rMaterial name="tecmaterial:TEC_ICC01LF"/> + </LogicalPart> + <LogicalPart name="TECICC01LF2" category="unspecified"> + <rSolid name="tecpetalf:TECICC01LF2"/> + <rMaterial name="tecmaterial:TEC_ICC01LF"/> + </LogicalPart> + <LogicalPart name="TECICC01LF3" category="unspecified"> + <rSolid name="tecpetalf:TECICC01LF3"/> + <rMaterial name="tecmaterial:TEC_ICC01LF"/> + </LogicalPart> + <LogicalPart name="TECICC01LF4" category="unspecified"> + <rSolid name="tecpetalf:TECICC01LF4"/> + <rMaterial name="tecmaterial:TEC_ICC01LF"/> + </LogicalPart> + <LogicalPart name="TECICC35F1" category="unspecified"> + <rSolid name="tecpetalf:TECICC35F1"/> + <rMaterial name="tecmaterial:TEC_ICC35F"/> + </LogicalPart> + <LogicalPart name="TECICC35F2" category="unspecified"> + <rSolid name="tecpetalf:TECICC35F2"/> + <rMaterial name="tecmaterial:TEC_ICC35F"/> + </LogicalPart> + <LogicalPart name="TECICC35F3" category="unspecified"> + <rSolid name="tecpetalf:TECICC35F3"/> + <rMaterial name="tecmaterial:TEC_ICC35F"/> + </LogicalPart> + <LogicalPart name="TECICC35F4" category="unspecified"> + <rSolid name="tecpetalf:TECICC35F4"/> + <rMaterial name="tecmaterial:TEC_ICC35F"/> + </LogicalPart> + <LogicalPart name="TECICC35F5" category="unspecified"> + <rSolid name="tecpetalf:TECICC35F5"/> + <rMaterial name="tecmaterial:TEC_ICC35F"/> + </LogicalPart> + <LogicalPart name="TECICC1SF1" category="unspecified"> + <rSolid name="tecpetalf:TECICC1SF1"/> + <rMaterial name="tecmaterial:TEC_ICC1SF"/> + </LogicalPart> + <LogicalPart name="TECICC1SF2" category="unspecified"> + <rSolid name="tecpetalf:TECICC1SF2"/> + <rMaterial name="tecmaterial:TEC_ICC1SF"/> + </LogicalPart> + <LogicalPart name="TECICC1SF3" category="unspecified"> + <rSolid name="tecpetalf:TECICC1SF3"/> + <rMaterial name="tecmaterial:TEC_ICC1SF"/> + </LogicalPart> + <LogicalPart name="TECICC0F1" category="unspecified"> + <rSolid name="tecpetalf:TECICC0F1"/> + <rMaterial name="tecmaterial:TEC_ICC0F"/> + </LogicalPart> + <LogicalPart name="TECICC0F2" category="unspecified"> + <rSolid name="tecpetalf:TECICC0F2"/> + <rMaterial name="tecmaterial:TEC_ICC0F"/> + </LogicalPart> + <LogicalPart name="TECICC2F1" category="unspecified"> + <rSolid name="tecpetalf:TECICC2F1"/> + <rMaterial name="tecmaterial:TEC_ICC2F"/> + </LogicalPart> + <LogicalPart name="TECICC2F2" category="unspecified"> + <rSolid name="tecpetalf:TECICC2F2"/> + <rMaterial name="tecmaterial:TEC_ICC2F"/> + </LogicalPart> + <LogicalPart name="TECICC46F1" category="unspecified"> + <rSolid name="tecpetalf:TECICC46F1"/> + <rMaterial name="tecmaterial:TEC_ICC46F"/> + </LogicalPart> + <LogicalPart name="TECICC46F2" category="unspecified"> + <rSolid name="tecpetalf:TECICC46F2"/> + <rMaterial name="tecmaterial:TEC_ICC46F"/> + </LogicalPart> + </LogicalPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tecpetpar.xml b/examples/DDCMS/data/tecpetpar.xml new file mode 100644 index 000000000..48f99c7ac --- /dev/null +++ b/examples/DDCMS/data/tecpetpar.xml @@ -0,0 +1,86 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecpetpar.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="PetalContThick" value="50.5*mm"/> + <Constant name="PetalContWidth" value="37.5*deg"/> + <Constant name="PetalContRmax" value="110.17*cm"/> + <Constant name="HybridWidth" value="29.97*mm"/> + <Constant name="HybridHeight" value="22.99*mm"/> + <Constant name="HybridThick" value="1.0*mm"/> + <!--(real 1.5mm) in reality this sticks out into the ring volume and is compressed to keep hirachy intact--> + <Constant name="CoolR1" value="4.1791*mm"/> + <Constant name="CoolR2" value="4.8276*mm"/> + <Constant name="CoolR3" value="4.6029*mm"/> + <Constant name="CoolR4" value="6.2889*mm"/> + <Constant name="CoolR5" value="2.9221*mm"/> + <Constant name="CoolL" value="10.00*mm"/> + <Constant name="PetalThick" value="10.0*mm"/> + <Constant name="PetalWidth" value="37.4*deg"/> + <Constant name="PetalRmax" value="109.9*cm"/> + <Constant name="ICBThick" value="2.222*mm"/> + <!-- see other comments--> + <Constant name="ICBWidth" value="37.4*deg"/> + <Constant name="ICBRmax" value="110.17*cm"/> + <Constant name="ICBZ" value="([PetalThick]+[ICBThick])/2"/> + <Constant name="ICCThick" value="1.20*mm"/> + <Constant name="HybridZ" value="([ICBThick]-[HybridThick])/2"/> + <Constant name="BridgeThick" value="0.25*cm"/> + <Constant name="DOHMWidth" value="76.12*mm"/> + <Constant name="DOHMHeight" value="40.82*mm"/> + <Constant name="DOHMZ" value="[zero]"/> + <Constant name="CCUMHeight" value="31*mm"/> + <Constant name="CCUMWidth" value="31*mm"/> + <Constant name="CCUMThick" value="1.0*mm"/> + <!-- (real: 2mm)in reality this sticks out into the ring volume and is compressed to keep hirachy intact--> + <Constant name="CCUMZ" value="([ICBThick]-[CCUMThick])/2"/> + </ConstantsSection> + <RotationSection label="tecpetpar.xml"> + <Rotation name="180X" thetaX="90*deg" phiX="0*deg" thetaY="90*deg" phiY="-90*deg" thetaZ="180*deg" phiZ="0*deg"/> + </RotationSection> + <SolidSection label="tecpetpar.xml"> + <Tubs name="TECCool1" rMin="[tecpetpar:zero]" rMax="[tecpetpar:CoolR1]" dz="[tecpetpar:CoolL]/2" startPhi="0*deg" deltaPhi="360.*deg"/> + <Tubs name="TECCool2" rMin="[tecpetpar:zero]" rMax="[tecpetpar:CoolR2]" dz="[tecpetpar:CoolL]/2" startPhi="0*deg" deltaPhi="360.*deg"/> + <Tubs name="TECCool3" rMin="[tecpetpar:zero]" rMax="[tecpetpar:CoolR3]" dz="[tecpetpar:CoolL]/2" startPhi="0*deg" deltaPhi="360.*deg"/> + <Tubs name="TECCool4" rMin="[tecpetpar:zero]" rMax="[tecpetpar:CoolR4]" dz="[tecpetpar:CoolL]/2" startPhi="0*deg" deltaPhi="360.*deg"/> + <Tubs name="TECCool5" rMin="[tecpetpar:zero]" rMax="[tecpetpar:CoolR5]" dz="[tecpetpar:CoolL]/2" startPhi="0*deg" deltaPhi="360.*deg"/> + <Box name="TECOptoHybrid" dx="[tecpetpar:HybridHeight]/2" dy="[tecpetpar:HybridWidth]/2" dz="[tecpetpar:HybridThick]/2"/> + <!-- this one is flipped by 90*deg --> + <Box name="TECOptoHybridShort" dx="[tecpetpar:HybridWidth]/2" dy="[tecpetpar:HybridHeight]/2" dz="[tecpetpar:HybridThick]/2"/> + <Box name="TECDigiOptoHybModule" dx="[tecpetpar:DOHMWidth]/2" dy="[tecpetpar:DOHMHeight]/2" dz="[tecpetpar:ICBThick]/2"/> + </SolidSection> + <LogicalPartSection label="tecpetpar.xml"> + <LogicalPart name="TECCool1" category="unspecified"> + <rSolid name="tecpetpar:TECCool1"/> + <rMaterial name="tecmaterial:TEC_petalinsert"/> + </LogicalPart> + <LogicalPart name="TECCool2" category="unspecified"> + <rSolid name="tecpetpar:TECCool2"/> + <rMaterial name="tecmaterial:TEC_petalinsert"/> + </LogicalPart> + <LogicalPart name="TECCool3" category="unspecified"> + <rSolid name="tecpetpar:TECCool3"/> + <rMaterial name="tecmaterial:TEC_petalinsert"/> + </LogicalPart> + <LogicalPart name="TECCool4" category="unspecified"> + <rSolid name="tecpetpar:TECCool4"/> + <rMaterial name="tecmaterial:TEC_petalinsert"/> + </LogicalPart> + <LogicalPart name="TECCool5" category="unspecified"> + <rSolid name="tecpetpar:TECCool5"/> + <rMaterial name="tecmaterial:TEC_petalinsert"/> + </LogicalPart> + <LogicalPart name="TECOptoHybrid" category="unspecified"> + <rSolid name="tecpetpar:TECOptoHybrid"/> + <rMaterial name="tecmaterial:TEC_OptoH"/> + </LogicalPart> + <LogicalPart name="TECOptoHybridShort" category="unspecified"> + <rSolid name="tecpetpar:TECOptoHybridShort"/> + <rMaterial name="tecmaterial:TEC_OptoH"/> + </LogicalPart> + <LogicalPart name="TECDigiOptoHybModule" category="unspecified"> + <rSolid name="tecpetpar:TECDigiOptoHybModule"/> + <rMaterial name="tecmaterial:TEC_DOHM"/> + </LogicalPart> + </LogicalPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tecring0.xml b/examples/DDCMS/data/tecring0.xml new file mode 100644 index 000000000..d88ae18fc --- /dev/null +++ b/examples/DDCMS/data/tecring0.xml @@ -0,0 +1,20 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecring0.xml" eval="true"> + <Constant name="Rin" value="[tecmodule0:Rin]"/> + <Constant name="Rout" value="[tecmodule0:Rout]"/> + <Constant name="Rmin" value="234.012*mm"/> + <Constant name="NPhi" value="24"/> + <Constant name="RPos" value="[Rmin]+([tecmodule0:FullHeight]+[tecmodpar:TopFrameHeight])/2"/> + <Constant name="ModuleGap" value="3.437*mm"/> + <Constant name="RingThick" value="(2*[tecmodpar:ModuleThickDS]+ [ModuleGap])"/> + <Constant name="ModuleZ" value="([tecmodpar:ModuleThickDS]+ [ModuleGap])/2"/> + <Constant name="RingZ" value="-17.2415*mm"/> + <Constant name="BridgeR" value="279.9*mm"/> + <Constant name="BridgeZ" value="([tecpetpar:BridgeThick]-[tecmodule0:BridgeThick])/2"/> + <Constant name="BridgeFrameZ" value="[RingZ]-([tecpetpar:BridgeThick]+ [RingThick])/2"/> + </ConstantsSection> + <SolidSection label="tecring0.xml"> + <Tubs name="TECRing0" rMin="[Rin]" rMax="[Rout]" dz="[RingThick]/2" startPhi="-[tecpetpar:PetalContWidth]/2" deltaPhi="[tecpetpar:PetalContWidth]"/> + </SolidSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tecring0b.xml b/examples/DDCMS/data/tecring0b.xml new file mode 100644 index 000000000..7e261a3ab --- /dev/null +++ b/examples/DDCMS/data/tecring0b.xml @@ -0,0 +1,30 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecring0b.xml" eval="true"> + <Constant name="Modules" value="1"/> + <Constant name="DPhi" value="360*deg/[tecring0:NPhi]"/> + <Constant name="Phi" value="([Modules]-1)*[DPhi]"/> + <Constant name="Phi0" value="-[Phi]/2"/> + <Constant name="Bridges" value="0"/> + <Constant name="PhiBridge" value="[Phi0]"/> + <Constant name="CoolIns0" value="3333"/> + </ConstantsSection> + <LogicalPartSection label="tecring0b.xml"> + <LogicalPart name="TECRing0B" category="unspecified"> + <rSolid name="tecring0:TECRing0"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTECPhiAlgo"> + <rParent name="tecring0b:TECRing0B"/> + <String name="ChildName" value="tecmodule0:TECModule0"/> + <Numeric name="StartAngle" value="[Phi0]"/> + <Numeric name="IncrAngle" value="[DPhi]"/> + <Numeric name="Radius" value="[tecring0:RPos]"/> + <Numeric name="ZIn" value="-[tecring0:ModuleZ]"/> + <Numeric name="ZOut" value="[tecring0:ModuleZ]"/> + <Numeric name="Number" value="[Modules]"/> + <Numeric name="StartCopyNo" value="3"/> + <Numeric name="IncrCopyNo" value="1"/> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecring0f.xml b/examples/DDCMS/data/tecring0f.xml new file mode 100644 index 000000000..f192e88a3 --- /dev/null +++ b/examples/DDCMS/data/tecring0f.xml @@ -0,0 +1,47 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecring0f.xml" eval="true"> + <Constant name="Modules" value="2"/> + <Constant name="DPhi" value="360*deg/[tecring0:NPhi]"/> + <Constant name="Phi" value="([Modules]-1)*[DPhi]"/> + <Constant name="Phi0" value="-[Phi]/2"/> + <Constant name="AngleHyb0" value="-9.375*deg"/> + <Constant name="AngleHyb1" value="-3.125*deg"/> + <Constant name="AngleHyb2" value="3.125*deg"/> + <Constant name="AngleHyb3" value="9.375*deg"/> + <Constant name="Bridges" value="1"/> + <Constant name="PhiBridge" value="[Phi0]+[DPhi]"/> + <Constant name="CoolIns0" value="4404"/> + <Constant name="CoolIns1" value="3333"/> + </ConstantsSection> + <LogicalPartSection label="tecring0f.xml"> + <LogicalPart name="TECRing0F" category="unspecified"> + <rSolid name="tecring0:TECRing0"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTECPhiAlgo"> + <rParent name="tecring0f:TECRing0F"/> + <String name="ChildName" value="tecmodule0:TECModule0"/> + <Numeric name="StartAngle" value="[Phi0]"/> + <Numeric name="IncrAngle" value="[DPhi]"/> + <Numeric name="Radius" value="[tecring0:RPos]"/> + <Numeric name="ZIn" value="[tecring0:ModuleZ]"/> + <Numeric name="ZOut" value="-[tecring0:ModuleZ]"/> + <Numeric name="Number" value="[Modules]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + </Algorithm> + <Algorithm name="track:DDTECPhiAltAlgo"> + <rParent name="tecring0f:TECRing0F"/> + <String name="ChildName" value="tecmodule0r:TECModule0Bridge"/> + <Numeric name="StartAngle" value="[PhiBridge]"/> + <Numeric name="IncrAngle" value="2*[DPhi]"/> + <Numeric name="Radius" value="[tecring0:BridgeR]"/> + <Numeric name="ZIn" value="[tecring0:BridgeZ]"/> + <Numeric name="ZOut" value="[tecring0:BridgeZ]"/> + <Numeric name="Number" value="[Bridges]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecring1.xml b/examples/DDCMS/data/tecring1.xml new file mode 100644 index 000000000..ca79d4e2b --- /dev/null +++ b/examples/DDCMS/data/tecring1.xml @@ -0,0 +1,20 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecring1.xml" eval="true"> + <Constant name="Rin" value="[tecmodule1:Rin]"/> + <Constant name="Rout" value="[tecmodule1:Rout]"/> + <Constant name="Rmin" value="321.932*mm"/> + <Constant name="NPhi" value="24"/> + <Constant name="RPos" value="[Rmin]+([tecmodule1:FullHeight]+[tecmodpar:TopFrameHeight])/2"/> + <Constant name="ModuleGap" value="3.437*mm"/> + <Constant name="RingThick" value="(2*[tecmodpar:ModuleThickDS]+ [ModuleGap])"/> + <Constant name="ModuleZ" value="([tecmodpar:ModuleThickDS]+ [ModuleGap])/2"/> + <Constant name="RingZ" value="17.2785*mm"/> + <Constant name="BridgeR" value="368.9*mm"/> + <Constant name="BridgeZ" value="([tecpetpar:BridgeThick]-[tecmodule1:BridgeThick])/2"/> + <Constant name="BridgeFrameZ" value="[RingZ]+([tecpetpar:BridgeThick]+ [RingThick])/2"/> + </ConstantsSection> + <SolidSection label="tecring1.xml"> + <Tubs name="TECRing1" rMin="[Rin]" rMax="[Rout]" dz="[RingThick]/2" startPhi="-[tecpetpar:PetalContWidth]/2" deltaPhi="[tecpetpar:PetalContWidth]"/> + </SolidSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tecring1b.xml b/examples/DDCMS/data/tecring1b.xml new file mode 100644 index 000000000..bd0bdf350 --- /dev/null +++ b/examples/DDCMS/data/tecring1b.xml @@ -0,0 +1,32 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecring1b.xml" eval="true"> + <Constant name="Modules" value="1"/> + <Constant name="DPhi" value="360*deg/[tecring1:NPhi]"/> + <Constant name="Phi" value="([Modules]-1)*[DPhi]"/> + <Constant name="Phi0" value="-[Phi]/2"/> + <Constant name="AngleHyb0" value="-10.0*deg"/> + <Constant name="AngleHyb1" value="10.0*deg"/> + <Constant name="Bridges" value="0"/> + <Constant name="PhiBridge" value="[Phi0]"/> + <Constant name="CoolIns0" value="3333"/> + </ConstantsSection> + <LogicalPartSection label="tecring1b.xml"> + <LogicalPart name="TECRing1B" category="unspecified"> + <rSolid name="tecring1:TECRing1"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTECPhiAlgo"> + <rParent name="tecring1b:TECRing1B"/> + <String name="ChildName" value="tecmodule1:TECModule1"/> + <Numeric name="StartAngle" value="[Phi0]"/> + <Numeric name="IncrAngle" value="[DPhi]"/> + <Numeric name="Radius" value="[tecring1:RPos]"/> + <Numeric name="ZIn" value="-[tecring1:ModuleZ]"/> + <Numeric name="ZOut" value="[tecring1:ModuleZ]"/> + <Numeric name="Number" value="[Modules]"/> + <Numeric name="StartCopyNo" value="3"/> + <Numeric name="IncrCopyNo" value="1"/> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecring1f.xml b/examples/DDCMS/data/tecring1f.xml new file mode 100644 index 000000000..5c34a1361 --- /dev/null +++ b/examples/DDCMS/data/tecring1f.xml @@ -0,0 +1,43 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecring1f.xml" eval="true"> + <Constant name="Modules" value="2"/> + <Constant name="DPhi" value="360*deg/[tecring1:NPhi]"/> + <Constant name="Phi" value="([Modules]-1)*[DPhi]"/> + <Constant name="Phi0" value="-[Phi]/2"/> + <Constant name="Bridges" value="1"/> + <Constant name="PhiBridge" value="[Phi0]+[DPhi]"/> + <Constant name="CoolIns0" value="3333"/> + <Constant name="CoolIns1" value="4440"/> + </ConstantsSection> + <LogicalPartSection label="tecring1f.xml"> + <LogicalPart name="TECRing1F" category="unspecified"> + <rSolid name="tecring1:TECRing1"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTECPhiAlgo"> + <rParent name="tecring1f:TECRing1F"/> + <String name="ChildName" value="tecmodule1:TECModule1"/> + <Numeric name="StartAngle" value="[Phi0]"/> + <Numeric name="IncrAngle" value="[DPhi]"/> + <Numeric name="Radius" value="[tecring1:RPos]"/> + <Numeric name="ZIn" value="[tecring1:ModuleZ]"/> + <Numeric name="ZOut" value="-[tecring1:ModuleZ]"/> + <Numeric name="Number" value="[Modules]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + </Algorithm> + <Algorithm name="track:DDTECPhiAltAlgo"> + <rParent name="tecring1f:TECRing1F"/> + <String name="ChildName" value="tecmodule1r:TECModule1Bridge"/> + <Numeric name="StartAngle" value="[PhiBridge]"/> + <Numeric name="IncrAngle" value="2*[DPhi]"/> + <Numeric name="Radius" value="[tecring1:BridgeR]"/> + <Numeric name="ZIn" value="[tecring1:BridgeZ]"/> + <Numeric name="ZOut" value="[tecring1:BridgeZ]"/> + <Numeric name="Number" value="[Bridges]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecring2.xml b/examples/DDCMS/data/tecring2.xml new file mode 100644 index 000000000..c994a1701 --- /dev/null +++ b/examples/DDCMS/data/tecring2.xml @@ -0,0 +1,20 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecring2.xml" eval="true"> + <Constant name="Rin" value="[tecmodule2:Rin]"/> + <Constant name="Rout" value="[tecmodule2:Rout]"/> + <Constant name="Rmin" value="391.032*mm"/> + <Constant name="NPhi" value="40"/> + <Constant name="RPos" value="[Rmin]+([tecmodule2:FullHeight]+[tecmodpar:TopFrameHeight])/2"/> + <Constant name="ModuleGap" value="3.45*mm"/> + <Constant name="RingThick" value="(2*[tecmodpar:ModuleThickSS]+ [ModuleGap])"/> + <Constant name="ModuleZ" value="([tecmodpar:ModuleThickSS]+ [ModuleGap])/2-[tecmodpar:SideFrameThick]"/> + <Constant name="RingZ" value="-13.236*mm"/> + <Constant name="BridgeR" value="449.8*mm"/> + <Constant name="BridgeZ" value="-0.5*[tecmodpar:SideFrameThick]"/> + <Constant name="BridgeFrameZ" value="[RingZ]-([tecpetpar:BridgeThick]+ [RingThick])/2"/> + </ConstantsSection> + <SolidSection label="tecring2.xml"> + <Tubs name="TECRing2" rMin="[Rin]" rMax="[Rout]" dz="[RingThick]/2" startPhi="-[tecpetpar:PetalContWidth]/2" deltaPhi="[tecpetpar:PetalContWidth]"/> + </SolidSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tecring2b.xml b/examples/DDCMS/data/tecring2b.xml new file mode 100644 index 000000000..284ea4d8d --- /dev/null +++ b/examples/DDCMS/data/tecring2b.xml @@ -0,0 +1,45 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecring2b.xml" eval="true"> + <Constant name="Modules" value="2"/> + <Constant name="DPhi" value="360*deg/[tecring2:NPhi]"/> + <Constant name="Phi" value="([Modules]-1)*[DPhi]"/> + <Constant name="Phi0" value="-[Phi]/2"/> + <Constant name="AngleHyb0" value="-5.00*deg"/> + <Constant name="AngleHyb1" value="5.00*deg"/> + <Constant name="Bridges" value="1"/> + <Constant name="PhiBridge" value="[Phi0]"/> + <Constant name="CoolIns0" value="1111"/> + <Constant name="CoolIns1" value="2020"/> + </ConstantsSection> + <LogicalPartSection label="tecring2b.xml"> + <LogicalPart name="TECRing2B" category="unspecified"> + <rSolid name="tecring2:TECRing2"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTECPhiAlgo"> + <rParent name="tecring2b:TECRing2B"/> + <String name="ChildName" value="tecmodule2:TECModule2"/> + <Numeric name="StartAngle" value="[Phi0]"/> + <Numeric name="IncrAngle" value="[DPhi]"/> + <Numeric name="Radius" value="[tecring2:RPos]"/> + <Numeric name="ZIn" value="-[tecring2:ModuleZ]-[tecmodpar:SideFrameThick]"/> + <Numeric name="ZOut" value="[tecring2:ModuleZ]"/> + <Numeric name="Number" value="[Modules]"/> + <Numeric name="StartCopyNo" value="4"/> + <Numeric name="IncrCopyNo" value="1"/> + </Algorithm> + <Algorithm name="track:DDTECPhiAltAlgo"> + <rParent name="tecring2b:TECRing2B"/> + <String name="ChildName" value="tecmodule2:TECModule2Bridge"/> + <Numeric name="StartAngle" value="[PhiBridge]"/> + <Numeric name="IncrAngle" value="2*[DPhi]"/> + <Numeric name="Radius" value="[tecring2:BridgeR]"/> + <Numeric name="ZIn" value="[tecring2:BridgeZ]"/> + <Numeric name="ZOut" value="[tecring2:BridgeZ]"/> + <Numeric name="Number" value="[Bridges]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecring2f.xml b/examples/DDCMS/data/tecring2f.xml new file mode 100644 index 000000000..30092de9b --- /dev/null +++ b/examples/DDCMS/data/tecring2f.xml @@ -0,0 +1,48 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecring2f.xml" eval="true"> + <Constant name="Modules" value="3"/> + <Constant name="DPhi" value="360*deg/[tecring2:NPhi]"/> + <Constant name="Phi" value="([Modules]-1)*[DPhi]"/> + <Constant name="Phi0" value="-[Phi]/2"/> + <Constant name="AngleHyb0" value="-9.375*deg"/> + <Constant name="AngleHyb1" value="-3.125*deg"/> + <Constant name="AngleHyb2" value="3.125*deg"/> + <Constant name="AngleHyb3" value="9.375*deg"/> + <Constant name="Bridges" value="1"/> + <Constant name="PhiBridge" value="[Phi0]+[DPhi]"/> + <Constant name="CoolIns0" value="0202"/> + <Constant name="CoolIns1" value="1111"/> + <Constant name="CoolIns2" value="2020"/> + </ConstantsSection> + <LogicalPartSection label="tecring2f.xml"> + <LogicalPart name="TECRing2F" category="unspecified"> + <rSolid name="tecring2:TECRing2"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTECPhiAlgo"> + <rParent name="tecring2f:TECRing2F"/> + <String name="ChildName" value="tecmodule2:TECModule2"/> + <Numeric name="StartAngle" value="[Phi0]"/> + <Numeric name="IncrAngle" value="[DPhi]"/> + <Numeric name="Radius" value="[tecring2:RPos]"/> + <Numeric name="ZIn" value="[tecring2:ModuleZ]"/> + <Numeric name="ZOut" value="-[tecring2:ModuleZ]-[tecmodpar:SideFrameThick]"/> + <Numeric name="Number" value="[Modules]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + </Algorithm> + <Algorithm name="track:DDTECPhiAltAlgo"> + <rParent name="tecring2f:TECRing2F"/> + <String name="ChildName" value="tecmodule2:TECModule2Bridge"/> + <Numeric name="StartAngle" value="[PhiBridge]"/> + <Numeric name="IncrAngle" value="2*[DPhi]"/> + <Numeric name="Radius" value="[tecring2:BridgeR]"/> + <Numeric name="ZIn" value="[tecring2:BridgeZ]"/> + <Numeric name="ZOut" value="[tecring2:BridgeZ]"/> + <Numeric name="Number" value="[Bridges]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecring3.xml b/examples/DDCMS/data/tecring3.xml new file mode 100644 index 000000000..01ec44424 --- /dev/null +++ b/examples/DDCMS/data/tecring3.xml @@ -0,0 +1,20 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecring3.xml" eval="true"> + <Constant name="Rin" value="[tecmodule3:Rin]"/> + <Constant name="Rout" value="[tecmodule3:Rout]"/> + <Constant name="Rmin" value="503.081*mm"/> + <Constant name="NPhi" value="56"/> + <Constant name="RPos" value="[Rmin]+([tecmodule3:FullHeight]+[tecmodpar:TopFrameHeight])/2"/> + <Constant name="ModuleGap" value="3.45*mm"/> + <Constant name="RingThick" value="(2*[tecmodpar:ModuleThickSS]+ [ModuleGap])"/> + <Constant name="ModuleZ" value="([tecmodpar:ModuleThickSS]+ [ModuleGap])/2 -[tecmodpar:SideFrameThick]"/> + <Constant name="RingZ" value="13.237*mm"/> + <Constant name="BridgeR" value="563.8*mm"/> + <Constant name="BridgeZ" value="-0.5*[tecmodpar:SideFrameThick]"/> + <Constant name="BridgeFrameZ" value="[RingZ]+([tecpetpar:BridgeThick]+ [RingThick])/2"/> + </ConstantsSection> + <SolidSection label="tecring3.xml"> + <Tubs name="TECRing3" rMin="[Rin]" rMax="[Rout]" dz="[RingThick]/2" startPhi="-[tecpetpar:PetalContWidth]/2" deltaPhi="[tecpetpar:PetalContWidth]"/> + </SolidSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tecring3b.xml b/examples/DDCMS/data/tecring3b.xml new file mode 100644 index 000000000..4d52db44a --- /dev/null +++ b/examples/DDCMS/data/tecring3b.xml @@ -0,0 +1,46 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecring3b.xml" eval="true"> + <Constant name="Modules" value="3"/> + <Constant name="DPhi" value="360*deg/[tecring3:NPhi]"/> + <Constant name="Phi" value="([Modules]-1)*[DPhi]"/> + <Constant name="Phi0" value="-[Phi]/2"/> + <Constant name="AngleHyb0" value="-7.000*deg"/> + <Constant name="AngleHyb1" value="7.000*deg"/> + <Constant name="Bridges" value="1"/> + <Constant name="PhiBridge" value="[Phi0]+[DPhi]"/> + <Constant name="CoolIns0" value="0202"/> + <Constant name="CoolIns1" value="1111"/> + <Constant name="CoolIns2" value="2020"/> + </ConstantsSection> + <LogicalPartSection label="tecring3b.xml"> + <LogicalPart name="TECRing3B" category="unspecified"> + <rSolid name="tecring3:TECRing3"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTECPhiAlgo"> + <rParent name="tecring3b:TECRing3B"/> + <String name="ChildName" value="tecmodule3:TECModule3"/> + <Numeric name="StartAngle" value="[Phi0]"/> + <Numeric name="IncrAngle" value="[DPhi]"/> + <Numeric name="Radius" value="[tecring3:RPos]"/> + <Numeric name="ZIn" value="[tecring3:ModuleZ]"/> + <Numeric name="ZOut" value="-[tecring3:ModuleZ]-[tecmodpar:SideFrameThick]"/> + <Numeric name="Number" value="[Modules]"/> + <Numeric name="StartCopyNo" value="5"/> + <Numeric name="IncrCopyNo" value="1"/> + </Algorithm> + <Algorithm name="track:DDTECPhiAltAlgo"> + <rParent name="tecring3b:TECRing3B"/> + <String name="ChildName" value="tecmodule3:TECModule3Bridge"/> + <Numeric name="StartAngle" value="[PhiBridge]"/> + <Numeric name="IncrAngle" value="2*[DPhi]"/> + <Numeric name="Radius" value="[tecring3:BridgeR]"/> + <Numeric name="ZIn" value="[tecring3:BridgeZ]"/> + <Numeric name="ZOut" value="[tecring3:BridgeZ]"/> + <Numeric name="Number" value="[Bridges]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecring3f.xml b/examples/DDCMS/data/tecring3f.xml new file mode 100644 index 000000000..ccfdf78f9 --- /dev/null +++ b/examples/DDCMS/data/tecring3f.xml @@ -0,0 +1,48 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecring3f.xml" eval="true"> + <Constant name="Modules" value="4"/> + <Constant name="DPhi" value="360*deg/[tecring3:NPhi]"/> + <Constant name="Phi" value="([Modules]-1)*[DPhi]"/> + <Constant name="Phi0" value="-[Phi]/2"/> + <Constant name="AngleHyb0" value="-9.375*deg"/> + <Constant name="AngleHyb1" value="0.000*deg"/> + <Constant name="AngleHyb2" value="9.375*deg"/> + <Constant name="Bridges" value="2"/> + <Constant name="PhiBridge" value="[Phi0]"/> + <Constant name="CoolIns0" value="0202"/> + <Constant name="CoolIns1" value="1111"/> + <Constant name="CoolIns2" value="0000"/> + <Constant name="CoolIns3" value="1111"/> + </ConstantsSection> + <LogicalPartSection label="tecring3f.xml"> + <LogicalPart name="TECRing3F" category="unspecified"> + <rSolid name="tecring3:TECRing3"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTECPhiAlgo"> + <rParent name="tecring3f:TECRing3F"/> + <String name="ChildName" value="tecmodule3:TECModule3"/> + <Numeric name="StartAngle" value="[Phi0]"/> + <Numeric name="IncrAngle" value="[DPhi]"/> + <Numeric name="Radius" value="[tecring3:RPos]"/> + <Numeric name="ZIn" value="-[tecring3:ModuleZ]-[tecmodpar:SideFrameThick]"/> + <Numeric name="ZOut" value="[tecring3:ModuleZ]"/> + <Numeric name="Number" value="[Modules]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + </Algorithm> + <Algorithm name="track:DDTECPhiAltAlgo"> + <rParent name="tecring3f:TECRing3F"/> + <String name="ChildName" value="tecmodule3:TECModule3Bridge"/> + <Numeric name="StartAngle" value="[PhiBridge]"/> + <Numeric name="IncrAngle" value="2*[DPhi]"/> + <Numeric name="Radius" value="[tecring3:BridgeR]"/> + <Numeric name="ZIn" value="[tecring3:BridgeZ]"/> + <Numeric name="ZOut" value="[tecring3:BridgeZ]"/> + <Numeric name="Number" value="[Bridges]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecring4.xml b/examples/DDCMS/data/tecring4.xml new file mode 100644 index 000000000..47a3848bb --- /dev/null +++ b/examples/DDCMS/data/tecring4.xml @@ -0,0 +1,20 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecring4.xml" eval="true"> + <Constant name="Rin" value="[tecmodule4:Rin]"/> + <Constant name="Rout" value="[tecmodule4:Rout]"/> + <Constant name="Rmin" value="601.787*mm"/> + <Constant name="NPhi" value="40"/> + <Constant name="RPos" value="[Rmin]+([tecmodule4:FullHeight]+[tecmodpar:TopFrameHeight])/2"/> + <Constant name="ModuleGap" value="3.75*mm"/> + <Constant name="RingThick" value="(2*[tecmodpar:ModuleThickDS]+ [ModuleGap])"/> + <Constant name="ModuleZ" value="([tecmodpar:ModuleThickDS]+ [ModuleGap])/2"/> + <Constant name="RingZ" value="-17.229*mm"/> + <Constant name="BridgeR" value="685.9*mm"/> + <Constant name="BridgeZ" value="([tecpetpar:BridgeThick]-[tecmodule4:BridgeThick])/2"/> + <Constant name="BridgeFrameZ" value="[RingZ]-([tecpetpar:BridgeThick]+ [RingThick])/2"/> + </ConstantsSection> + <SolidSection label="tecring4.xml"> + <Tubs name="TECRing4" rMin="[Rin]" rMax="[Rout]" dz="[RingThick]/2" startPhi="-[tecpetpar:PetalContWidth]/2" deltaPhi="[tecpetpar:PetalContWidth]"/> + </SolidSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tecring4b.xml b/examples/DDCMS/data/tecring4b.xml new file mode 100644 index 000000000..8fe08dcf1 --- /dev/null +++ b/examples/DDCMS/data/tecring4b.xml @@ -0,0 +1,47 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecring4b.xml" eval="true"> + <Constant name="Modules" value="3"/> + <Constant name="DPhi" value="360*deg/[tecring4:NPhi]"/> + <Constant name="Phi" value="([Modules]-1)*[DPhi]"/> + <Constant name="Phi0" value="-[Phi]/2"/> + <Constant name="AngleHyb0" value="-10.000*deg"/> + <Constant name="AngleHyb1" value="0.000*deg"/> + <Constant name="AngleHyb2" value="10.000*deg"/> + <Constant name="Bridges" value="1"/> + <Constant name="PhiBridge" value="[Phi0]+[DPhi]"/> + <Constant name="CoolIns0" value="4404"/> + <Constant name="CoolIns1" value="3333"/> + <Constant name="CoolIns2" value="4440"/> + </ConstantsSection> + <LogicalPartSection label="tecring4b.xml"> + <LogicalPart name="TECRing4B" category="unspecified"> + <rSolid name="tecring4:TECRing4"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTECPhiAlgo"> + <rParent name="tecring4b:TECRing4B"/> + <String name="ChildName" value="tecmodule4:TECModule4"/> + <Numeric name="StartAngle" value="[Phi0]"/> + <Numeric name="IncrAngle" value="[DPhi]"/> + <Numeric name="Radius" value="[tecring4:RPos]"/> + <Numeric name="ZIn" value="[tecring4:ModuleZ]"/> + <Numeric name="ZOut" value="-[tecring4:ModuleZ]"/> + <Numeric name="Number" value="[Modules]"/> + <Numeric name="StartCopyNo" value="3"/> + <Numeric name="IncrCopyNo" value="1"/> + </Algorithm> + <Algorithm name="track:DDTECPhiAltAlgo"> + <rParent name="tecring4b:TECRing4B"/> + <String name="ChildName" value="tecmodule4r:TECModule4Bridge"/> + <Numeric name="StartAngle" value="[PhiBridge]"/> + <Numeric name="IncrAngle" value="2*[DPhi]"/> + <Numeric name="Radius" value="[tecring4:BridgeR]"/> + <Numeric name="ZIn" value="[tecring4:BridgeZ]"/> + <Numeric name="ZOut" value="[tecring4:BridgeZ]"/> + <Numeric name="Number" value="[Bridges]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecring4f.xml b/examples/DDCMS/data/tecring4f.xml new file mode 100644 index 000000000..631d0794a --- /dev/null +++ b/examples/DDCMS/data/tecring4f.xml @@ -0,0 +1,47 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecring4f.xml" eval="true"> + <Constant name="Modules" value="2"/> + <Constant name="DPhi" value="360*deg/[tecring4:NPhi]"/> + <Constant name="Phi" value="([Modules]-1)*[DPhi]"/> + <Constant name="Phi0" value="-[Phi]/2"/> + <Constant name="AngleHyb0" value="-9.375*deg"/> + <Constant name="AngleHyb1" value="-3.125*deg"/> + <Constant name="AngleHyb2" value="3.125*deg"/> + <Constant name="AngleHyb3" value="9.375*deg"/> + <Constant name="Bridges" value="1"/> + <Constant name="PhiBridge" value="[Phi0]+[DPhi]"/> + <Constant name="CoolIns0" value="4404"/> + <Constant name="CoolIns1" value="3333"/> + </ConstantsSection> + <LogicalPartSection label="tecring4f.xml"> + <LogicalPart name="TECRing4F" category="unspecified"> + <rSolid name="tecring4:TECRing4"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTECPhiAlgo"> + <rParent name="tecring4f:TECRing4F"/> + <String name="ChildName" value="tecmodule4:TECModule4"/> + <Numeric name="StartAngle" value="[Phi0]"/> + <Numeric name="IncrAngle" value="[DPhi]"/> + <Numeric name="Radius" value="[tecring4:RPos]"/> + <Numeric name="ZIn" value="[tecring4:ModuleZ]"/> + <Numeric name="ZOut" value="-[tecring4:ModuleZ]"/> + <Numeric name="Number" value="[Modules]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + </Algorithm> + <Algorithm name="track:DDTECPhiAltAlgo"> + <rParent name="tecring4f:TECRing4F"/> + <String name="ChildName" value="tecmodule4r:TECModule4Bridge"/> + <Numeric name="StartAngle" value="[PhiBridge]"/> + <Numeric name="IncrAngle" value="2*[DPhi]"/> + <Numeric name="Radius" value="[tecring4:BridgeR]"/> + <Numeric name="ZIn" value="[tecring4:BridgeZ]"/> + <Numeric name="ZOut" value="[tecring4:BridgeZ]"/> + <Numeric name="Number" value="[Bridges]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecring5.xml b/examples/DDCMS/data/tecring5.xml new file mode 100644 index 000000000..8ea76d347 --- /dev/null +++ b/examples/DDCMS/data/tecring5.xml @@ -0,0 +1,20 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecring5.xml" eval="true"> + <Constant name="Rin" value="[tecmodule5:Rin]"/> + <Constant name="Rout" value="[tecmodule5:Rout]"/> + <Constant name="Rmin" value="725.41*mm"/> + <Constant name="NPhi" value="56"/> + <Constant name="RPos" value="[Rmin]+([tecmodule5:FullHeight]+[tecmodpar:TopFrameHeight])/2"/> + <Constant name="ModuleGap" value="3.45*mm"/> + <Constant name="RingThick" value="(2*[tecmodpar:ModuleThickSS]+ [ModuleGap])"/> + <Constant name="ModuleZ" value="([tecmodpar:ModuleThickSS]+ [ModuleGap])/2-[tecmodpar:SideFrameThick]"/> + <Constant name="RingZ" value="12.431*mm"/> + <Constant name="BridgeR" value="824.6*mm"/> + <Constant name="BridgeZ" value="-0.5*[tecmodpar:SideFrameThick]"/> + <Constant name="BridgeFrameZ" value="[RingZ]+([tecpetpar:BridgeThick]+ [RingThick])/2"/> + </ConstantsSection> + <SolidSection label="tecring5.xml"> + <Tubs name="TECRing5" rMin="[Rin]" rMax="[Rout]" dz="[RingThick]/2" startPhi="-[tecpetpar:PetalContWidth]/2" deltaPhi="[tecpetpar:PetalContWidth]"/> + </SolidSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tecring5b.xml b/examples/DDCMS/data/tecring5b.xml new file mode 100644 index 000000000..cd6ad62db --- /dev/null +++ b/examples/DDCMS/data/tecring5b.xml @@ -0,0 +1,55 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecring5b.xml" eval="true"> + <Constant name="Modules" value="3"/> + <Constant name="DPhi" value="360*deg/[tecring5:NPhi]"/> + <Constant name="Phi" value="([Modules]-1)*[DPhi]"/> + <Constant name="Phi0" value="-[Phi]/2"/> + <Constant name="AngleHyb0" value="-11.00*deg"/> + <Constant name="AngleHyb1" value="-8.80*deg"/> + <Constant name="AngleHyb2" value="-6.60*deg"/> + <Constant name="AngleHyb3" value="-4.40*deg"/> + <Constant name="AngleHyb4" value="-2.20*deg"/> + <Constant name="AngleHyb5" value="0.00*deg"/> + <Constant name="AngleHyb6" value="2.20*deg"/> + <Constant name="AngleHyb7" value="4.40*deg"/> + <Constant name="AngleHyb8" value="6.60*deg"/> + <Constant name="AngleHyb9" value="8.80*deg"/> + <Constant name="AngleHybA" value="11.00*deg"/> + <Constant name="Bridges" value="1"/> + <Constant name="PhiBridge" value="[Phi0]+[DPhi]"/> + <Constant name="CoolIns0" value="2202"/> + <Constant name="CoolIns1" value="1111"/> + <Constant name="CoolIns2" value="2220"/> + </ConstantsSection> + <LogicalPartSection label="tecring5b.xml"> + <LogicalPart name="TECRing5B" category="unspecified"> + <rSolid name="tecring5:TECRing5"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTECPhiAlgo"> + <rParent name="tecring5b:TECRing5B"/> + <String name="ChildName" value="tecmodule5:TECModule5"/> + <Numeric name="StartAngle" value="[Phi0]"/> + <Numeric name="IncrAngle" value="[DPhi]"/> + <Numeric name="Radius" value="[tecring5:RPos]"/> + <Numeric name="ZIn" value="[tecring5:ModuleZ]"/> + <Numeric name="ZOut" value="-[tecring5:ModuleZ]-[tecmodpar:SideFrameThick]"/> + <Numeric name="Number" value="[Modules]"/> + <Numeric name="StartCopyNo" value="5"/> + <Numeric name="IncrCopyNo" value="1"/> + </Algorithm> + <Algorithm name="track:DDTECPhiAltAlgo"> + <rParent name="tecring5b:TECRing5B"/> + <String name="ChildName" value="tecmodule5:TECModule5Bridge"/> + <Numeric name="StartAngle" value="[PhiBridge]"/> + <Numeric name="IncrAngle" value="2*[DPhi]"/> + <Numeric name="Radius" value="[tecring5:BridgeR]"/> + <Numeric name="ZIn" value="[tecring5:BridgeZ]"/> + <Numeric name="ZOut" value="[tecring5:BridgeZ]"/> + <Numeric name="Number" value="[Bridges]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecring5f.xml b/examples/DDCMS/data/tecring5f.xml new file mode 100644 index 000000000..33c2950f8 --- /dev/null +++ b/examples/DDCMS/data/tecring5f.xml @@ -0,0 +1,54 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecring5f.xml" eval="true"> + <Constant name="Modules" value="4"/> + <Constant name="DPhi" value="360*deg/[tecring5:NPhi]"/> + <Constant name="Phi" value="([Modules]-1)*[DPhi]"/> + <Constant name="Phi0" value="-[Phi]/2"/> + <Constant name="AngleHyb0" value="-11.00*deg"/> + <Constant name="AngleHyb1" value="-8.25*deg"/> + <Constant name="AngleHyb2" value="-5.50*deg"/> + <Constant name="AngleHyb3" value="-2.75*deg"/> + <Constant name="AngleHyb4" value="0.00*deg"/> + <Constant name="AngleHyb5" value="2.75*deg"/> + <Constant name="AngleHyb6" value="5.50*deg"/> + <Constant name="AngleHyb7" value="8.25*deg"/> + <Constant name="AngleHyb8" value="11.00*deg"/> + <Constant name="Bridges" value="2"/> + <Constant name="PhiBridge" value="[Phi0]"/> + <Constant name="CoolIns0" value="2202"/> + <Constant name="CoolIns1" value="1111"/> + <Constant name="CoolIns2" value="2200"/> + <Constant name="CoolIns3" value="1111"/> + </ConstantsSection> + <LogicalPartSection label="tecring5f.xml"> + <LogicalPart name="TECRing5F" category="unspecified"> + <rSolid name="tecring5:TECRing5"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTECPhiAlgo"> + <rParent name="tecring5f:TECRing5F"/> + <String name="ChildName" value="tecmodule5:TECModule5"/> + <Numeric name="StartAngle" value="[Phi0]"/> + <Numeric name="IncrAngle" value="[DPhi]"/> + <Numeric name="Radius" value="[tecring5:RPos]"/> + <Numeric name="ZIn" value="-[tecring5:ModuleZ]-[tecmodpar:SideFrameThick]"/> + <Numeric name="ZOut" value="[tecring5:ModuleZ]"/> + <Numeric name="Number" value="[Modules]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + </Algorithm> + <Algorithm name="track:DDTECPhiAltAlgo"> + <rParent name="tecring5f:TECRing5F"/> + <String name="ChildName" value="tecmodule5:TECModule5Bridge"/> + <Numeric name="StartAngle" value="[PhiBridge]"/> + <Numeric name="IncrAngle" value="2*[DPhi]"/> + <Numeric name="Radius" value="[tecring5:BridgeR]"/> + <Numeric name="ZIn" value="[tecring5:BridgeZ]"/> + <Numeric name="ZOut" value="[tecring5:BridgeZ]"/> + <Numeric name="Number" value="[Bridges]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecring6.xml b/examples/DDCMS/data/tecring6.xml new file mode 100644 index 000000000..04c5fb4a2 --- /dev/null +++ b/examples/DDCMS/data/tecring6.xml @@ -0,0 +1,20 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecring6.xml" eval="true"> + <Constant name="Rin" value="[tecmodule6:Rin]"/> + <Constant name="Rout" value="[tecmodule6:Rout]"/> + <Constant name="Rmin" value="850.967*mm"/> + <Constant name="NPhi" value="80"/> + <Constant name="RPos" value="[Rmin]+([tecmodule6:FullHeight]+[tecmodpar:TopFrameHeight])/2"/> + <Constant name="ModuleGap" value="3.43*mm"/> + <Constant name="RingThick" value="(2*[tecmodpar:ModuleThickSS]+ [ModuleGap])"/> + <Constant name="ModuleZ" value="([tecmodpar:ModuleThickSS]+ [ModuleGap])/2-[tecmodpar:SideFrameThick]"/> + <Constant name="RingZ" value="-12.421*mm"/> + <Constant name="BridgeR" value="997.4*mm"/> + <Constant name="BridgeZ" value="-0.5*[tecmodpar:SideFrameThick]"/> + <Constant name="BridgeFrameZ" value="[RingZ]-([tecpetpar:BridgeThick]+ [RingThick])/2"/> + </ConstantsSection> + <SolidSection label="tecring6.xml"> + <Tubs name="TECRing6" rMin="[Rin]" rMax="[Rout]" dz="[RingThick]/2" startPhi="-[tecpetpar:PetalContWidth]/2" deltaPhi="[tecpetpar:PetalContWidth]"/> + </SolidSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tecring6b.xml b/examples/DDCMS/data/tecring6b.xml new file mode 100644 index 000000000..10d44efce --- /dev/null +++ b/examples/DDCMS/data/tecring6b.xml @@ -0,0 +1,50 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecring6b.xml" eval="true"> + <Constant name="Modules" value="5"/> + <Constant name="DPhi" value="360*deg/[tecring6:NPhi]"/> + <Constant name="Phi" value="([Modules]-1)*[DPhi]"/> + <Constant name="Phi0" value="-[Phi]/2"/> + <Constant name="AngleHyb0" value="-10.00*deg"/> + <Constant name="AngleHyb1" value="0.000*deg"/> + <Constant name="AngleHyb2" value="10.00*deg"/> + <Constant name="Bridges" value="3"/> + <Constant name="PhiBridge" value="[Phi0]"/> + <Constant name="CoolIns0" value="1111"/> + <Constant name="CoolIns1" value="0000"/> + <Constant name="CoolIns2" value="1111"/> + <Constant name="CoolIns3" value="0000"/> + <Constant name="CoolIns4" value="1111"/> + </ConstantsSection> + <LogicalPartSection label="tecring6b.xml"> + <LogicalPart name="TECRing6B" category="unspecified"> + <rSolid name="tecring6:TECRing6"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTECPhiAlgo"> + <rParent name="tecring6b:TECRing6B"/> + <String name="ParentName" value="tecring6b:TECRing6B"/> + <String name="ChildName" value="tecmodule6:TECModule6"/> + <Numeric name="StartAngle" value="[Phi0]"/> + <Numeric name="IncrAngle" value="[DPhi]"/> + <Numeric name="Radius" value="[tecring6:RPos]"/> + <Numeric name="ZIn" value="-[tecring6:ModuleZ]-[tecmodpar:SideFrameThick]"/> + <Numeric name="ZOut" value="[tecring6:ModuleZ]"/> + <Numeric name="Number" value="[Modules]"/> + <Numeric name="StartCopyNo" value="6"/> + <Numeric name="IncrCopyNo" value="1"/> + </Algorithm> + <Algorithm name="track:DDTECPhiAltAlgo"> + <rParent name="tecring6b:TECRing6B"/> + <String name="ChildName" value="tecmodule6:TECModule6Bridge"/> + <Numeric name="StartAngle" value="[PhiBridge]"/> + <Numeric name="IncrAngle" value="2*[DPhi]"/> + <Numeric name="Radius" value="[tecring6:BridgeR]"/> + <Numeric name="ZIn" value="[tecring6:BridgeZ]"/> + <Numeric name="ZOut" value="[tecring6:BridgeZ]"/> + <Numeric name="Number" value="[Bridges]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecring6f.xml b/examples/DDCMS/data/tecring6f.xml new file mode 100644 index 000000000..a8ad1d960 --- /dev/null +++ b/examples/DDCMS/data/tecring6f.xml @@ -0,0 +1,46 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecring6f.xml" eval="true"> + <Constant name="Modules" value="5"/> + <Constant name="DPhi" value="360*deg/[tecring6:NPhi]"/> + <Constant name="Phi" value="([Modules]-1)*[DPhi]"/> + <Constant name="Phi0" value="-[Phi]/2"/> + <Constant name="AngleHyb0" value="-9.375*deg"/> + <Constant name="AngleHyb1" value="-3.125*deg"/> + <Constant name="AngleHyb2" value="3.125*deg"/> + <Constant name="AngleHyb3" value="9.375*deg"/> + <Constant name="Bridges" value="3"/> + <Constant name="PhiBridge" value="[Phi0]"/> + </ConstantsSection> + <LogicalPartSection label="tecring6f.xml"> + <LogicalPart name="TECRing6F" category="unspecified"> + <rSolid name="tecring6:TECRing6"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTECPhiAlgo"> + <rParent name="tecring6f:TECRing6F"/> + <String name="ParentName" value="tecring6f:TECRing6F"/> + <String name="ChildName" value="tecmodule6:TECModule6"/> + <Numeric name="StartAngle" value="[Phi0]"/> + <Numeric name="IncrAngle" value="[DPhi]"/> + <Numeric name="Radius" value="[tecring6:RPos]"/> + <Numeric name="ZIn" value="-[tecring6:ModuleZ]-[tecmodpar:SideFrameThick]"/> + <Numeric name="ZOut" value="[tecring6:ModuleZ]"/> + <Numeric name="Number" value="[Modules]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + </Algorithm> + <Algorithm name="track:DDTECPhiAltAlgo"> + <rParent name="tecring6f:TECRing6F"/> + <String name="ChildName" value="tecmodule6:TECModule6Bridge"/> + <Numeric name="StartAngle" value="[PhiBridge]"/> + <Numeric name="IncrAngle" value="2*[DPhi]"/> + <Numeric name="Radius" value="[tecring6:BridgeR]"/> + <Numeric name="ZIn" value="[tecring6:BridgeZ]"/> + <Numeric name="ZOut" value="[tecring6:BridgeZ]"/> + <Numeric name="Number" value="[Bridges]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecservices.xml b/examples/DDCMS/data/tecservices.xml new file mode 100644 index 000000000..6a0bf582d --- /dev/null +++ b/examples/DDCMS/data/tecservices.xml @@ -0,0 +1,924 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecservices.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="Rin" value="[tec:WheelR]"/> + <Constant name="Rout" value="[tec:OuterSkinRin]"/> + <Constant name="Dz" value="[tec:TECDz]"/> + <Constant name="ChannelWidth" value="50*mm/([Rin]+0.5*30*mm)"/> + <Constant name="ChannelRin" value="[Rin]"/> + <Constant name="ChannelRout" value="[Rin]+30*mm"/> + <Constant name="ChannelHeight" value="1538*mm"/> + <Constant name="ChannelZ" value="0.5*[ChannelHeight]-[Dz]"/> + <!--[tec:Wheel0Z]-[tec:ZPos]-0.5*[tecwheel:DiskT]+0.5*[ChannelHeight]-77.5*mm"/--> + <Constant name="ChannelN" value="[tecwheel:FixServN]"/> + <Constant name="ChannelFi" value="[tecwheel:FixServFi]"/> + <Constant name="ChannelEndInsertWidth" value="[ChannelWidth]"/> + <Constant name="ChannelEndInsertRin" value="[ChannelRin]"/> + <Constant name="ChannelEndInsertRout" value="[ChannelRout]"/> + <Constant name="ChannelEndInsertHeight" value="21*mm"/> + <Constant name="ChannelEndInsertZ" value="0.5*[ChannelEndInsertHeight]-0.5*[ChannelHeight]"/> + <!--[tec:Wheel0Z]-[tec:ZPos]-0.5*[tecwheel:DiskT]+0.5*[ChannelHeight]-77.5*mm"/--> + <Constant name="AxialGroundingWidth" value="20*mm/([Rin]+0.5*2.5*mm)"/> + <Constant name="AxialGroundingRin" value="[Rin]"/> + <Constant name="AxialGroundingRout" value="[Rin]+2.5*mm"/> + <Constant name="AxialGroundingHeight" value="1538*mm"/> + <Constant name="AxialGroundingFi" value="0.5*[ChannelWidth]+0.5*[AxialGroundingWidth]"/> + <Constant name="GasPipeRin" value="0.5*10*mm"/> + <Constant name="GasPipeRout" value="0.5*12*mm"/> + <Constant name="GasPipeRpos" value="1119*mm"/> + <Constant name="GasPipeZ" value="[ChannelZ]+0.5*[ChannelHeight]"/> + <Constant name="GasPipeHeight" value="1460*mm"/> + <Constant name="GasPipePhi1" value="21.8*deg"/> + <Constant name="GasPipePhi2" value="66.8*deg"/> + <Constant name="GasPipePhi3" value="156.8*deg"/> + <Constant name="CoolPipeRin" value="0.5*11*mm"/> + <Constant name="CoolPipeRout" value="0.5*12*mm"/> + <Constant name="CoolPipeHeightS" value="1347*mm"/> + <Constant name="CoolPipeHeightL" value="1487*mm"/> + <Constant name="CoolPipeRpos" value="[Rin]+16.5*mm"/> + <Constant name="CoolPipeZ" value="[ChannelZ]+0.5*[ChannelHeight]"/> + <Constant name="CoolPipePhi1" value="-8.0*deg"/> + <!--relative to Service Channel --> + <Constant name="CoolPipePhi2" value="-6.33*deg"/> + <Constant name="CoolPipePhi3" value="-4.66*deg"/> + <Constant name="CoolPipePhi4" value="-3.0*deg"/> + <Constant name="CoolPipePhi5" value="3*deg"/> + <Constant name="CoolPipePhi6" value="4.66*deg"/> + <Constant name="CoolPipePhi7" value="6.33*deg"/> + <Constant name="CoolPipePhi8" value="8.0*deg"/> + <Constant name="CableRout" value="[Rout]-[CoolPipeRpos]"/> + <Constant name="CableBulkTo8" value="[Dz]-([tec:Wheel8Z]-[tec:ZPos]) - (2*[Dz]-[ChannelHeight])"/> + <Constant name="CableHeight86B" value="0.5*([tec:Wheel8Z]-[tec:Wheel6Z])+[CableBulkTo8]-0.5*[tecpetpar:PetalContThick]"/> + <Constant name="CableHeight86F" value="0.5*([tec:Wheel8Z]-[tec:Wheel6Z])+[CableBulkTo8]+0.5*[tecpetpar:PetalContThick]"/> + <Constant name="CableHeight54B" value="([tec:Wheel8Z]-[tec:Wheel5Z]) + 0.5*([tec:Wheel5Z]-[tec:Wheel4Z])+[CableBulkTo8]-0.5*[tecpetpar:PetalContThick]"/> + <Constant name="CableHeight54F" value="([tec:Wheel8Z]-[tec:Wheel5Z]) + 0.5*([tec:Wheel5Z]-[tec:Wheel4Z])+[CableBulkTo8]+0.5*[tecpetpar:PetalContThick]"/> + <Constant name="CableHeight32B" value="([tec:Wheel8Z]-[tec:Wheel3Z]) + 0.5*([tec:Wheel3Z]-[tec:Wheel2Z])+[CableBulkTo8]-0.5*[tecpetpar:PetalContThick]"/> + <Constant name="CableHeight32F" value="([tec:Wheel8Z]-[tec:Wheel3Z]) + 0.5*([tec:Wheel3Z]-[tec:Wheel2Z])+[CableBulkTo8]+0.5*[tecpetpar:PetalContThick]"/> + <Constant name="CableHeight10B" value="([tec:Wheel8Z]-[tec:Wheel1Z]) + 0.5*([tec:Wheel1Z]-[tec:Wheel0Z])+[CableBulkTo8]-0.5*[tecpetpar:PetalContThick]"/> + <Constant name="CableHeight10F" value="([tec:Wheel8Z]-[tec:Wheel1Z]) + 0.5*([tec:Wheel1Z]-[tec:Wheel0Z])+[CableBulkTo8]+0.5*[tecpetpar:PetalContThick]"/> + <Constant name="PhiCableRout" value="[Rout]"/> + <Constant name="PhiCableRin" value="[GasPipeRpos]+[GasPipeRout]"/> + <Constant name="PhiCableWidth" value="8*deg"/> + <Constant name="PhiCablePhiF" value="[ChannelFi]+[CoolPipePhi8]+asin([CableRout]/[CoolPipeRpos])"/> + <Constant name="PhiCablePhiB" value="[ChannelFi]+[CoolPipePhi1]-asin([CableRout]/[CoolPipeRpos])"/> + <Constant name="PhiCableZLF" value="[CoolPipeZ]-[CableHeight54F]-0.5*[PhiCableHeightLF]"/> + <!-- the Lower part for frontpetal--> + <Constant name="PhiCableHeightLF" value="[ChannelHeight]-[CableHeight54F]"/> + <Constant name="PhiCableZUF" value="[CoolPipeZ]-[CableHeight54F]+0.5*[PhiCableHeightUF]"/> + <!-- the Upper part for frontpetal--> + <Constant name="PhiCableHeightUF" value="[CableHeight54F]"/> + <Constant name="PhiCableZLB" value="[CoolPipeZ]-[CableHeight54B]-0.5*[PhiCableHeightLB]"/> + <!-- the Lower part for backpetal--> + <Constant name="PhiCableHeightLB" value="[ChannelHeight]-[CableHeight54B]"/> + <Constant name="PhiCableZUB" value="[CoolPipeZ]-[CableHeight54B]+0.5*[PhiCableHeightUB]"/> + <!-- the Upper part for backpetal--> + <Constant name="PhiCableHeightUB" value="[CableHeight54B]"/> + <Constant name="CraneBracketRin" value="[Rin]"/> + <Constant name="CraneBracketRout" value="[GasPipeRpos]-[GasPipeRout]"/> + <Constant name="CraneBracketHeight" value="[tecwheel:DiskT]"/> + <Constant name="CraneBracketWidth" value="2*atan(49.5*mm/[CraneBracketRout])*rad"/> + <Constant name="CraneBracketPhi1" value="90*deg"/> + <Constant name="CraneBracketPhi2" value="315*deg"/> + <Constant name="CraneBracketPhi3" value="225*deg"/> + </ConstantsSection> + <SolidSection label="tecservices.xml"> + <Tubs name="TECServices" rMin="[Rin]" rMax="[Rout]" dz="[Dz]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TECServChannel" rMin="[ChannelRin]" rMax="[ChannelRout]" dz="0.5*[ChannelHeight]" startPhi="-0.5*[ChannelWidth]" deltaPhi="[ChannelWidth]"/> + <Tubs name="TECAxGrounding" rMin="[AxialGroundingRin]" rMax="[AxialGroundingRout]" dz="0.5*[ChannelHeight]" startPhi="-0.5*[AxialGroundingWidth]" deltaPhi="[AxialGroundingWidth]"/> + <Tubs name="TECChannelEndInsert" rMin="[ChannelEndInsertRin]" rMax="[ChannelEndInsertRout]" dz="0.5*[ChannelEndInsertHeight]" startPhi="-0.5*[ChannelEndInsertWidth]" deltaPhi="[ChannelEndInsertWidth]"/> + <Tubs name="TECGasPipe" rMin="[GasPipeRin]" rMax="[GasPipeRout]" dz="0.5*[GasPipeHeight]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TECCoolPipeS" rMin="[CoolPipeRin]" rMax="[CoolPipeRout]" dz="0.5*[CoolPipeHeightS]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TECCoolPipeL" rMin="[CoolPipeRin]" rMax="[CoolPipeRout]" dz="0.5*[CoolPipeHeightL]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TECCoolantS" rMin="[zero]" rMax="[CoolPipeRin]" dz="0.5*[CoolPipeHeightS]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TECCoolantL" rMin="[zero]" rMax="[CoolPipeRin]" dz="0.5*[CoolPipeHeightL]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TECCable86B" rMin="[CoolPipeRout]" rMax="[CableRout]" dz="0.5*[CableHeight86B]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TECCable86F" rMin="[CoolPipeRout]" rMax="[CableRout]" dz="0.5*[CableHeight86F]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TECCable54B" rMin="[CoolPipeRout]" rMax="[CableRout]" dz="0.5*[CableHeight54B]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TECCable54F" rMin="[CoolPipeRout]" rMax="[CableRout]" dz="0.5*[CableHeight54F]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TECCable32B" rMin="[CoolPipeRout]" rMax="[CableRout]" dz="0.5*[CableHeight32B]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TECCable32F" rMin="[CoolPipeRout]" rMax="[CableRout]" dz="0.5*[CableHeight32F]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TECCable10B" rMin="[CoolPipeRout]" rMax="[CableRout]" dz="0.5*[CableHeight10B]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TECCable10F" rMin="[CoolPipeRout]" rMax="[CableRout]" dz="0.5*[CableHeight10F]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TECPhiCableLF" rMin="[PhiCableRin]" rMax="[PhiCableRout]" dz="0.5*[PhiCableHeightLF]" startPhi="0*deg" deltaPhi="[PhiCableWidth]"/> + <Tubs name="TECPhiCableUF" rMin="[PhiCableRin]" rMax="[PhiCableRout]" dz="0.5*[PhiCableHeightUF]" startPhi="0*deg" deltaPhi="[PhiCableWidth]"/> + <Tubs name="TECPhiCableLB" rMin="[PhiCableRin]" rMax="[PhiCableRout]" dz="0.5*[PhiCableHeightLB]" startPhi="-[PhiCableWidth]" deltaPhi="[PhiCableWidth]"/> + <Tubs name="TECPhiCableUB" rMin="[PhiCableRin]" rMax="[PhiCableRout]" dz="0.5*[PhiCableHeightUB]" startPhi="-[PhiCableWidth]" deltaPhi="[PhiCableWidth]"/> + <Tubs name="TECCCraneBracket" rMin="[CraneBracketRin]" rMax="[CraneBracketRout]" dz="0.5*[CraneBracketHeight]" startPhi="-0.5*[CraneBracketWidth]" deltaPhi="[CraneBracketWidth]"/> + </SolidSection> + <LogicalPartSection label="tecservices.xml"> + <!-- Service Channel --> + <LogicalPart name="TECServices" category="unspecified"> + <rSolid name="tecservices:TECServices"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TECServChannel" category="unspecified"> + <rSolid name="tecservices:TECServChannel"/> + <rMaterial name="tecmaterial:TEC_ServChan"/> + </LogicalPart> + <LogicalPart name="TECAxGrounding" category="unspecified"> + <rSolid name="tecservices:TECAxGrounding"/> + <rMaterial name="tecmaterial:TEC_AxGrounding"/> + </LogicalPart> + <LogicalPart name="TECChannelEndInsert" category="unspecified"> + <rSolid name="tecservices:TECChannelEndInsert"/> + <rMaterial name="tecmaterial:TEC_ServChanIns"/> + </LogicalPart> + <!-- Gas Pipes --> + <LogicalPart name="TECGasPipe" category="unspecified"> + <rSolid name="tecservices:TECGasPipe"/> + <rMaterial name="tecmaterial:TEC_GasPipe"/> + </LogicalPart> + <!-- Cooling Pipes --> + <LogicalPart name="TECCoolPipeS" category="unspecified"> + <rSolid name="tecservices:TECCoolPipeS"/> + <rMaterial name="tecmaterial:TEC_CoolPipe"/> + </LogicalPart> + <LogicalPart name="TECCoolPipeL" category="unspecified"> + <rSolid name="tecservices:TECCoolPipeL"/> + <rMaterial name="tecmaterial:TEC_CoolPipe"/> + </LogicalPart> + <LogicalPart name="TECCoolantS" category="unspecified"> + <rSolid name="tecservices:TECCoolantS"/> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C"/> + </LogicalPart> + <LogicalPart name="TECCoolantL" category="unspecified"> + <rSolid name="tecservices:TECCoolantL"/> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C"/> + </LogicalPart> + <LogicalPart name="TECCable86B" category="unspecified"> + <rSolid name="tecservices:TECCable86B"/> + <rMaterial name="tecmaterial:TEC_AxCable"/> + </LogicalPart> + <LogicalPart name="TECCable86F" category="unspecified"> + <rSolid name="tecservices:TECCable86F"/> + <rMaterial name="tecmaterial:TEC_AxCable"/> + </LogicalPart> + <LogicalPart name="TECCable54B" category="unspecified"> + <rSolid name="tecservices:TECCable54B"/> + <rMaterial name="tecmaterial:TEC_AxCable"/> + </LogicalPart> + <LogicalPart name="TECCable54F" category="unspecified"> + <rSolid name="tecservices:TECCable54F"/> + <rMaterial name="tecmaterial:TEC_AxCable"/> + </LogicalPart> + <LogicalPart name="TECCable32B" category="unspecified"> + <rSolid name="tecservices:TECCable32B"/> + <rMaterial name="tecmaterial:TEC_AxCable"/> + </LogicalPart> + <LogicalPart name="TECCable32F" category="unspecified"> + <rSolid name="tecservices:TECCable32F"/> + <rMaterial name="tecmaterial:TEC_AxCable"/> + </LogicalPart> + <LogicalPart name="TECCable10B" category="unspecified"> + <rSolid name="tecservices:TECCable10B"/> + <rMaterial name="tecmaterial:TEC_AxCable"/> + </LogicalPart> + <LogicalPart name="TECCable10F" category="unspecified"> + <rSolid name="tecservices:TECCable10F"/> + <rMaterial name="tecmaterial:TEC_AxCable"/> + </LogicalPart> + <!-- Phi Cables --> + <LogicalPart name="TECPhiCableLF" category="unspecified"> + <rSolid name="tecservices:TECPhiCableLF"/> + <rMaterial name="tecmaterial:TEC_PhiCableL"/> + </LogicalPart> + <LogicalPart name="TECPhiCableUF" category="unspecified"> + <rSolid name="tecservices:TECPhiCableUF"/> + <rMaterial name="tecmaterial:TEC_PhiCableU"/> + </LogicalPart> + <LogicalPart name="TECPhiCableLB" category="unspecified"> + <rSolid name="tecservices:TECPhiCableLB"/> + <rMaterial name="tecmaterial:TEC_PhiCableL"/> + </LogicalPart> + <LogicalPart name="TECPhiCableUB" category="unspecified"> + <rSolid name="tecservices:TECPhiCableUB"/> + <rMaterial name="tecmaterial:TEC_PhiCableU"/> + </LogicalPart> + <!-- Brackets--> + <LogicalPart name="TECCCraneBracket" category="unspecified"> + <rSolid name="tecservices:TECCCraneBracket"/> + <rMaterial name="tecmaterial:TEC_CraneBracket"/> + </LogicalPart> + </LogicalPartSection> + <!-- Service Channel --> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECServChannel"/> + <Numeric name="N" value="[ChannelN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[ChannelFi]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [ChannelZ] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServChannel"/> + <String name="ChildName" value="tecservices:TECChannelEndInsert"/> + <Numeric name="N" value="1"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="0"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [ChannelEndInsertZ] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECAxGrounding"/> + <Numeric name="N" value="[ChannelN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[ChannelFi]+[AxialGroundingFi]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [ChannelZ] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECAxGrounding"/> + <Numeric name="N" value="[ChannelN]"/> + <Numeric name="StartCopyNo" value="1*[ChannelN]+1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[ChannelFi]-[AxialGroundingFi]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [ChannelZ] </Vector> + </Algorithm> + <!--Gas Pipes--> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECGasPipe"/> + <Numeric name="N" value="2"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[GasPipePhi1]"/> + <Numeric name="Radius" value="[GasPipeRpos]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [CoolPipeZ]-0.5*[GasPipeHeight] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECGasPipe"/> + <Numeric name="N" value="2"/> + <Numeric name="StartCopyNo" value="3"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[GasPipePhi2]"/> + <Numeric name="Radius" value="[GasPipeRpos]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [CoolPipeZ]-0.5*[GasPipeHeight] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECGasPipe"/> + <Numeric name="N" value="2"/> + <Numeric name="StartCopyNo" value="5"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[GasPipePhi3]"/> + <Numeric name="Radius" value="[GasPipeRpos]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [CoolPipeZ]-0.5*[GasPipeHeight] </Vector> + </Algorithm> + <!-- Axial CoolingPipes and cables --> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCoolPipeS"/> + <Numeric name="N" value="[ChannelN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[ChannelFi]+[CoolPipePhi1]"/> + <Numeric name="Radius" value="[CoolPipeRpos]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [CoolPipeZ]-0.5*[CoolPipeHeightS] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCoolantS"/> + <Numeric name="N" value="[ChannelN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[ChannelFi]+[CoolPipePhi1]"/> + <Numeric name="Radius" value="[CoolPipeRpos]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [CoolPipeZ]-0.5*[CoolPipeHeightS] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCable86B"/> + <Numeric name="N" value="[ChannelN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[ChannelFi]+[CoolPipePhi1]"/> + <Numeric name="Radius" value="[CoolPipeRpos]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [CoolPipeZ]-0.5*[CableHeight86B] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCoolPipeS"/> + <Numeric name="N" value="[ChannelN]"/> + <Numeric name="StartCopyNo" value="1*[ChannelN]+1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[ChannelFi]+[CoolPipePhi2]"/> + <Numeric name="Radius" value="[CoolPipeRpos]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [CoolPipeZ]-0.5*[CoolPipeHeightS] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCoolantS"/> + <Numeric name="N" value="[ChannelN]"/> + <Numeric name="StartCopyNo" value="1*[ChannelN]+1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[ChannelFi]+[CoolPipePhi2]"/> + <Numeric name="Radius" value="[CoolPipeRpos]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [CoolPipeZ]-0.5*[CoolPipeHeightS] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCable54B"/> + <Numeric name="N" value="[ChannelN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[ChannelFi]+[CoolPipePhi2]"/> + <Numeric name="Radius" value="[CoolPipeRpos]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [CoolPipeZ]-0.5*[CableHeight54B] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCoolPipeL"/> + <Numeric name="N" value="[ChannelN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[ChannelFi]+[CoolPipePhi3]"/> + <Numeric name="Radius" value="[CoolPipeRpos]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [CoolPipeZ]-0.5*[CoolPipeHeightL] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCoolantL"/> + <Numeric name="N" value="[ChannelN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[ChannelFi]+[CoolPipePhi3]"/> + <Numeric name="Radius" value="[CoolPipeRpos]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [CoolPipeZ]-0.5*[CoolPipeHeightL] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCable32B"/> + <Numeric name="N" value="[ChannelN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[ChannelFi]+[CoolPipePhi3]"/> + <Numeric name="Radius" value="[CoolPipeRpos]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [CoolPipeZ]-0.5*[CableHeight32B] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCoolPipeL"/> + <Numeric name="N" value="[ChannelN]"/> + <Numeric name="StartCopyNo" value="1*[ChannelN]+1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[ChannelFi]+[CoolPipePhi4]"/> + <Numeric name="Radius" value="[CoolPipeRpos]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [CoolPipeZ]-0.5*[CoolPipeHeightL] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCoolantL"/> + <Numeric name="N" value="[ChannelN]"/> + <Numeric name="StartCopyNo" value="1*[ChannelN]+1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[ChannelFi]+[CoolPipePhi4]"/> + <Numeric name="Radius" value="[CoolPipeRpos]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [CoolPipeZ]-0.5*[CoolPipeHeightL] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCable10B"/> + <Numeric name="N" value="[ChannelN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[ChannelFi]+[CoolPipePhi4]"/> + <Numeric name="Radius" value="[CoolPipeRpos]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [CoolPipeZ]-0.5*[CableHeight10B] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCoolPipeL"/> + <Numeric name="N" value="[ChannelN]"/> + <Numeric name="StartCopyNo" value="2*[ChannelN]+1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[ChannelFi]+[CoolPipePhi5]"/> + <Numeric name="Radius" value="[CoolPipeRpos]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [CoolPipeZ]-0.5*[CoolPipeHeightL] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCoolantL"/> + <Numeric name="N" value="[ChannelN]"/> + <Numeric name="StartCopyNo" value="2*[ChannelN]+1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[ChannelFi]+[CoolPipePhi5]"/> + <Numeric name="Radius" value="[CoolPipeRpos]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [CoolPipeZ]-0.5*[CoolPipeHeightL] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCable10F"/> + <Numeric name="N" value="[ChannelN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[ChannelFi]+[CoolPipePhi5]"/> + <Numeric name="Radius" value="[CoolPipeRpos]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [CoolPipeZ]-0.5*[CableHeight10F] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCoolPipeL"/> + <Numeric name="N" value="[ChannelN]"/> + <Numeric name="StartCopyNo" value="3*[ChannelN]+1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[ChannelFi]+[CoolPipePhi6]"/> + <Numeric name="Radius" value="[CoolPipeRpos]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [CoolPipeZ]-0.5*[CoolPipeHeightL] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCoolantL"/> + <Numeric name="N" value="[ChannelN]"/> + <Numeric name="StartCopyNo" value="3*[ChannelN]+1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[ChannelFi]+[CoolPipePhi6]"/> + <Numeric name="Radius" value="[CoolPipeRpos]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [CoolPipeZ]-0.5*[CoolPipeHeightL] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCable32F"/> + <Numeric name="N" value="[ChannelN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[ChannelFi]+[CoolPipePhi6]"/> + <Numeric name="Radius" value="[CoolPipeRpos]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [CoolPipeZ]-0.5*[CableHeight32F] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCoolPipeS"/> + <Numeric name="N" value="[ChannelN]"/> + <Numeric name="StartCopyNo" value="3*[ChannelN]+1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[ChannelFi]+[CoolPipePhi7]"/> + <Numeric name="Radius" value="[CoolPipeRpos]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [CoolPipeZ]-0.5*[CoolPipeHeightS] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCoolantS"/> + <Numeric name="N" value="[ChannelN]"/> + <Numeric name="StartCopyNo" value="3*[ChannelN]+1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[ChannelFi]+[CoolPipePhi7]"/> + <Numeric name="Radius" value="[CoolPipeRpos]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [CoolPipeZ]-0.5*[CoolPipeHeightS] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCable54F"/> + <Numeric name="N" value="[ChannelN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[ChannelFi]+[CoolPipePhi7]"/> + <Numeric name="Radius" value="[CoolPipeRpos]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [CoolPipeZ]-0.5*[CableHeight54F] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCoolPipeS"/> + <Numeric name="N" value="[ChannelN]"/> + <Numeric name="StartCopyNo" value="4*[ChannelN]+1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[ChannelFi]+[CoolPipePhi8]"/> + <Numeric name="Radius" value="[CoolPipeRpos]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [CoolPipeZ]-0.5*[CoolPipeHeightS] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCoolantS"/> + <Numeric name="N" value="[ChannelN]"/> + <Numeric name="StartCopyNo" value="4*[ChannelN]+1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[ChannelFi]+[CoolPipePhi8]"/> + <Numeric name="Radius" value="[CoolPipeRpos]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [CoolPipeZ]-0.5*[CoolPipeHeightS] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCable86F"/> + <Numeric name="N" value="[ChannelN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[ChannelFi]+[CoolPipePhi8]"/> + <Numeric name="Radius" value="[CoolPipeRpos]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [CoolPipeZ]-0.5*[CableHeight86F] </Vector> + </Algorithm> + <!-- Phi Cable --> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECPhiCableLF"/> + <Numeric name="N" value="[ChannelN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[PhiCablePhiF]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [PhiCableZLF] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECPhiCableUF"/> + <Numeric name="N" value="[ChannelN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[PhiCablePhiF]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [PhiCableZUF] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECPhiCableLB"/> + <Numeric name="N" value="[ChannelN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[PhiCablePhiB]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [PhiCableZLB] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECPhiCableUB"/> + <Numeric name="N" value="[ChannelN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[PhiCablePhiB]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [PhiCableZUB] </Vector> + </Algorithm> + <!-- Brackets --> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCCraneBracket"/> + <Numeric name="N" value="1"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[CraneBracketPhi1]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [tec:Wheel0Z]-[tec:ZPos] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCCraneBracket"/> + <Numeric name="N" value="1"/> + <Numeric name="StartCopyNo" value="2"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[CraneBracketPhi2]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [tec:Wheel0Z]-[tec:ZPos] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCCraneBracket"/> + <Numeric name="N" value="1"/> + <Numeric name="StartCopyNo" value="3"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[CraneBracketPhi3]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [tec:Wheel0Z]-[tec:ZPos] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCCraneBracket"/> + <Numeric name="N" value="1"/> + <Numeric name="StartCopyNo" value="4"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[CraneBracketPhi1]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [tec:Wheel1Z]-[tec:ZPos] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCCraneBracket"/> + <Numeric name="N" value="1"/> + <Numeric name="StartCopyNo" value="5"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[CraneBracketPhi2]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [tec:Wheel1Z]-[tec:ZPos] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCCraneBracket"/> + <Numeric name="N" value="1"/> + <Numeric name="StartCopyNo" value="6"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[CraneBracketPhi3]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [tec:Wheel1Z]-[tec:ZPos] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCCraneBracket"/> + <Numeric name="N" value="1"/> + <Numeric name="StartCopyNo" value="7"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[CraneBracketPhi1]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [tec:Wheel2Z]-[tec:ZPos] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCCraneBracket"/> + <Numeric name="N" value="1"/> + <Numeric name="StartCopyNo" value="8"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[CraneBracketPhi2]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [tec:Wheel2Z]-[tec:ZPos] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCCraneBracket"/> + <Numeric name="N" value="1"/> + <Numeric name="StartCopyNo" value="9"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[CraneBracketPhi3]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [tec:Wheel2Z]-[tec:ZPos] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCCraneBracket"/> + <Numeric name="N" value="1"/> + <Numeric name="StartCopyNo" value="10"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[CraneBracketPhi1]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [tec:Wheel3Z]-[tec:ZPos] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCCraneBracket"/> + <Numeric name="N" value="1"/> + <Numeric name="StartCopyNo" value="11"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[CraneBracketPhi2]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [tec:Wheel3Z]-[tec:ZPos] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCCraneBracket"/> + <Numeric name="N" value="1"/> + <Numeric name="StartCopyNo" value="12"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[CraneBracketPhi3]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [tec:Wheel3Z]-[tec:ZPos] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCCraneBracket"/> + <Numeric name="N" value="1"/> + <Numeric name="StartCopyNo" value="13"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[CraneBracketPhi1]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [tec:Wheel4Z]-[tec:ZPos] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCCraneBracket"/> + <Numeric name="N" value="1"/> + <Numeric name="StartCopyNo" value="14"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[CraneBracketPhi2]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [tec:Wheel4Z]-[tec:ZPos] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCCraneBracket"/> + <Numeric name="N" value="1"/> + <Numeric name="StartCopyNo" value="15"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[CraneBracketPhi3]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [tec:Wheel4Z]-[tec:ZPos] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCCraneBracket"/> + <Numeric name="N" value="1"/> + <Numeric name="StartCopyNo" value="16"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[CraneBracketPhi1]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [tec:Wheel5Z]-[tec:ZPos] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCCraneBracket"/> + <Numeric name="N" value="1"/> + <Numeric name="StartCopyNo" value="17"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[CraneBracketPhi2]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [tec:Wheel5Z]-[tec:ZPos] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCCraneBracket"/> + <Numeric name="N" value="1"/> + <Numeric name="StartCopyNo" value="18"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[CraneBracketPhi3]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [tec:Wheel5Z]-[tec:ZPos] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCCraneBracket"/> + <Numeric name="N" value="1"/> + <Numeric name="StartCopyNo" value="19"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[CraneBracketPhi1]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [tec:Wheel6Z]-[tec:ZPos] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCCraneBracket"/> + <Numeric name="N" value="1"/> + <Numeric name="StartCopyNo" value="20"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[CraneBracketPhi2]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [tec:Wheel6Z]-[tec:ZPos] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCCraneBracket"/> + <Numeric name="N" value="1"/> + <Numeric name="StartCopyNo" value="21"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[CraneBracketPhi3]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [tec:Wheel6Z]-[tec:ZPos] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCCraneBracket"/> + <Numeric name="N" value="1"/> + <Numeric name="StartCopyNo" value="22"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[CraneBracketPhi1]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [tec:Wheel7Z]-[tec:ZPos] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCCraneBracket"/> + <Numeric name="N" value="1"/> + <Numeric name="StartCopyNo" value="23"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[CraneBracketPhi2]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [tec:Wheel7Z]-[tec:ZPos] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCCraneBracket"/> + <Numeric name="N" value="1"/> + <Numeric name="StartCopyNo" value="24"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[CraneBracketPhi3]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [tec:Wheel7Z]-[tec:ZPos] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCCraneBracket"/> + <Numeric name="N" value="1"/> + <Numeric name="StartCopyNo" value="25"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[CraneBracketPhi1]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [tec:Wheel8Z]-[tec:ZPos] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCCraneBracket"/> + <Numeric name="N" value="1"/> + <Numeric name="StartCopyNo" value="26"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[CraneBracketPhi2]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [tec:Wheel8Z]-[tec:ZPos] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCCraneBracket"/> + <Numeric name="N" value="1"/> + <Numeric name="StartCopyNo" value="27"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[CraneBracketPhi3]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [tec:Wheel8Z]-[tec:ZPos] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCCraneBracket"/> + <Numeric name="N" value="1"/> + <Numeric name="StartCopyNo" value="28"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[CraneBracketPhi1]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [tec:TECDz]-[tecbackplate:Thick]+0.5*[tecwheel:DiskT] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCCraneBracket"/> + <Numeric name="N" value="1"/> + <Numeric name="StartCopyNo" value="29"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[CraneBracketPhi2]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [tec:TECDz]-[tecbackplate:Thick]+0.5*[tecwheel:DiskT] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecservices:TECServices"/> + <String name="ChildName" value="tecservices:TECCCraneBracket"/> + <Numeric name="N" value="1"/> + <Numeric name="StartCopyNo" value="30"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[CraneBracketPhi3]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, [tec:TECDz]-[tecbackplate:Thick]+0.5*[tecwheel:DiskT] </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecwheel.xml b/examples/DDCMS/data/tecwheel.xml new file mode 100644 index 000000000..af143d5f5 --- /dev/null +++ b/examples/DDCMS/data/tecwheel.xml @@ -0,0 +1,128 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecwheel.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="WheelRmax" value="110.30*cm"/> + <Constant name="WheelT" value="12.22*cm"/> + <Constant name="DiskT" value="1.680*cm"/> + <Constant name="NomexT" value="1.600*cm"/> + <Constant name="NomexRmax" value="[WheelRmax] - [GroundingRingThick] "/> + <Constant name="PetalContN" value="8"/> + <Constant name="PetalContZ" value="3.583*cm"/> + <Constant name="PetalContFiF" value="0.00*deg"/> + <Constant name="PetalContFiB" value="22.5*deg"/> + <Constant name="InsertR" value="13.7514*mm"/> + <Constant name="InsertL" value="16.0*mm"/> + <Constant name="InsertN" value="8"/> + <Constant name="InsertR1" value="38.00*cm"/> + <Constant name="InsertR2" value="468.5451*mm"/> + <Constant name="InsertR3" value="84.00*cm"/> + <Constant name="InsertR4" value="84.00*cm"/> + <Constant name="InsertR5" value="983.5215*mm"/> + <Constant name="InsertR6" value="983.5215*mm"/> + <Constant name="InsertFi1" value="22.50*deg"/> + <Constant name="InsertFi2" value="44.2051*deg"/> + <Constant name="InsertFi3" value="13.50*deg"/> + <Constant name="InsertFi4" value="31.50*deg"/> + <Constant name="InsertFi5" value="8.6213*deg"/> + <Constant name="InsertFi6" value="35.6213*deg"/> + <Constant name="FixSuppA" value="1485.33*mm"/> + <!--Area to calculate the deltaPhi--> + <Constant name="FixSuppR" value="22.4428*mm*mm"/> + <Constant name="FixSuppW" value="40.00*mm"/> + <!--old--> + <Constant name="FixSuppT" value="1.000*cm"/> + <Constant name="FixSuppN" value="4"/> + <Constant name="FixSuppFi" value="-67.50*deg"/> + <Constant name="FixServR" value="22.5*mm"/> + <Constant name="FixServW" value="80.0*mm / ([WheelRmax]-0.5*[FixServR])"/> + <Constant name="FixServT" value="8.5*mm"/> + <Constant name="FixServN" value="8"/> + <Constant name="FixServFi" value="-11.25*deg"/> + <Constant name="OptConnRmin" value="[WheelRmax] - [OptConnHeight]"/> + <!--depreciated--> + <Constant name="OptConnRmax" value="[WheelRmax]"/> + <!--depreciated--> + <Constant name="OptConnHeight" value="171*mm"/> + <Constant name="OptConnThick" value="46*mm"/> + <Constant name="OptConnW" value="45*deg-[tecpetpar:PetalContWidth]"/> + <!--there is not enough room for the real width--> + <Constant name="OptConnN" value="8"/> + <Constant name="OptConnT1" value="2.475*cm"/> + <Constant name="OptConnT2" value="2.25*cm"/> + <Constant name="OptConnT3" value="1.80*cm"/> + <Constant name="OptConnZ1" value="([DiskT]+[OptConnT1])/2"/> + <Constant name="OptConnZ2" value="([DiskT]+[OptConnT2])/2"/> + <Constant name="OptConnZ3" value="([DiskT]+[OptConnT3])/2"/> + <Constant name="OptConnFI1" value="[PetalContFiF]+[OptConnW]/2+[tecpetpar:PetalContWidth]/2"/> + <Constant name="OptConnFI2" value="[PetalContFiB]+[OptConnW]/2+[tecpetpar:PetalContWidth]/2"/> + <Constant name="CableW" value="0.500*cm"/> + <Constant name="CableT" value="0.210*cm"/> + <Constant name="CableTolerR" value="0.350*cm"/> + <Constant name="CableZ2" value="([DiskT]+[CableT])/2"/> + <Constant name="CableZ1" value="-[CableZ2]"/> + <Constant name="CableFi1" value="-11.25*deg"/> + <Constant name="CableFi2" value="11.25*deg"/> + <Constant name="FixServRmin" value="[WheelRmax]-[FixServR]"/> + <Constant name="CableRmax" value="[WheelRmax]-[CableTolerR]"/> + <Constant name="PetalConnZ" value="0"/> + <Constant name="PetalInManifHeight" value="14.59*mm"/> + <Constant name="PetalInManifWidth" value="2*atan(64.5*mm/(2*[tecpetpar:PetalRmax]-[PetalInManifHeight]))*rad"/> + <Constant name="PetalOutManifHeight" value="18.04*mm"/> + <Constant name="PetalOutManifWidth" value="2*atan(46*mm/(2*[tecpetpar:PetalRmax]+[PetalInManifHeight]))*rad"/> + <Constant name="PetalManifThick" value="10*mm"/> + <Constant name="GroundingRingThick" value="0.150*mm"/> + <!-- this "thick" goes in R direction! --> + <Constant name="GroundingRingWidth" value="15*mm"/> + <Constant name="AlignHolderRin" value="[NomexRmax]-12.5*mm"/> + <Constant name="AlignHolderRout" value="[NomexRmax]"/> + <Constant name="AlignHolderWidth" value="2*atan(25.98*mm/[AlignHolderRout])*rad"/> + <Constant name="AlignHolderStartPhi" value="-67.5*deg"/> + </ConstantsSection> + <SolidSection label="tecwheel.xml"> + <Tubs name="TECWheelInsert" rMin="[zero]" rMax="[InsertR]" dz="[InsertL]/2" startPhi="0*deg" deltaPhi="360.*deg"/> + <Tubs name="TECGroundingRing" rMin="[NomexRmax]" rMax="[WheelRmax]" dz="[GroundingRingWidth]/2" startPhi="0*deg" deltaPhi="360.*deg"/> + <Tubs name="TECFixService" rMin="[FixServRmin]" rMax="[NomexRmax]" dz="[FixServT]/2" startPhi="-[FixServW]/2" deltaPhi="[FixServW]"/> + <Tubs name="TECAlignHolder" rMin="[AlignHolderRin]" rMax="[AlignHolderRout]" dz="[NomexT]/2" startPhi="-[AlignHolderWidth]/2" deltaPhi="[AlignHolderWidth]"/> + <!-- the same for every petal --> + <Tubs name="TECInnerManifold" rMin="[tecpetpar:PetalRmax]-[PetalInManifHeight]" rMax="[tecpetpar:PetalRmax]" dz="[PetalManifThick]/2" startPhi="-[PetalInManifWidth]/2" deltaPhi="[PetalInManifWidth]"/> + <Tubs name="TECOuterManifold" rMin="[tecpetpar:PetalRmax]" rMax="[tecpetpar:PetalRmax]+[PetalOutManifHeight]" dz="[PetalManifThick]/2" startPhi="-[PetalOutManifWidth]/2" deltaPhi="[PetalOutManifWidth]"/> + <Tubs name="TECOptConnector" rMin="[tecpetpar:PetalRmax]-[OptConnHeight]" rMax="[tecpetpar:PetalRmax]" dz="[OptConnThick]/2" startPhi="-[OptConnW]/2" deltaPhi="[OptConnW]"/> + <Box name="TECCCUM" dx="[tecpetpar:CCUMWidth]/2" dy="[tecpetpar:CCUMHeight]/2" dz="[tecpetpar:CCUMThick]/2"/> + </SolidSection> + <LogicalPartSection label="tecwheel.xml"> + <LogicalPart name="TECWheelInsert" category="unspecified"> + <rSolid name="tecwheel:TECWheelInsert"/> + <rMaterial name="tecmaterial:TEC_wheelinsert"/> + </LogicalPart> + <LogicalPart name="TECFixService" category="unspecified"> + <rSolid name="tecwheel:TECFixService"/> + <rMaterial name="tecmaterial:TEC_FixServ"/> + </LogicalPart> + <LogicalPart name="TECGroundingRing" category="unspecified"> + <rSolid name="tecwheel:TECGroundingRing"/> + <rMaterial name="tecmaterial:TEC_GroundingRing"/> + </LogicalPart> + <LogicalPart name="TECAlignHolder" category="unspecified"> + <rSolid name="tecwheel:TECAlignHolder"/> + <rMaterial name="tecmaterial:TEC_AlignHolder"/> + </LogicalPart> + <!-- the same for all petals--> + <LogicalPart name="TECInnerManifold" category="unspecified"> + <rSolid name="tecwheel:TECInnerManifold"/> + <rMaterial name="tecmaterial:TEC_InnerManifold"/> + </LogicalPart> + <LogicalPart name="TECOuterManifold" category="unspecified"> + <rSolid name="tecwheel:TECOuterManifold"/> + <rMaterial name="tecmaterial:TEC_InnerManifold"/> + </LogicalPart> + <LogicalPart name="TECOptConnector" category="unspecified"> + <rSolid name="tecwheel:TECOptConnector"/> + <rMaterial name="tecmaterial:TEC_OptoCon"/> + </LogicalPart> + <LogicalPart name="TECCCUM" category="unspecified"> + <rSolid name="tecwheel:TECCCUM"/> + <rMaterial name="tecmaterial:TEC_CCUM"/> + </LogicalPart> + </LogicalPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tecwheel6.xml b/examples/DDCMS/data/tecwheel6.xml new file mode 100644 index 000000000..1cef9866b --- /dev/null +++ b/examples/DDCMS/data/tecwheel6.xml @@ -0,0 +1,237 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <!-- This is the special disk which holdes the beam splitter! --> + <ConstantsSection label="tecwheel6.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="FixSuppRmax" value="[tecpetal3:PetalContRmin]+ [tecwheel:FixSuppR]"/> + <Constant name="FixSuppW" value="2*[tecwheel:FixSuppA]/([FixSuppRmax]*[FixSuppRmax]-[tecpetal3:PetalContRmin]*[tecpetal3:PetalContRmin])"/> + <!-- calculate the width to fit the area at this specific radius! thus the volume will be constant!--> + <Constant name="CableL" value="([tecwheel:CableRmax]-[tecring1:Rin])"/> + <Constant name="CableR" value="([tecwheel:CableRmax]+[tecring1:Rin])/2"/> + <Constant name="BeamsplitterHeight" value="68.62*mm"/> + <Constant name="BeamsplitterWidth" value="49.25*mm"/> + <Constant name="BeamsplitterThick" value="[tecwheel:NomexT]"/> + <Constant name="BeamsplitterRA" value="845.13*mm"/> + <Constant name="BeamsplitterRB" value="570.17*mm"/> + <Constant name="BeamsplitterStartPhi" value="114*deg"/> + </ConstantsSection> + <SolidSection label="tecwheel6.xml"> + <Tubs name="TECWheel6" rMin="[tecpetal3:PetalContRmin]" rMax="[tecwheel:WheelRmax]" dz="[tecwheel:WheelT]/2" startPhi="0*deg" deltaPhi="360.*deg"/> + <Tubs name="TECWheelDisk6" rMin="[tecpetal3:PetalContRmin]" rMax="[tecwheel:WheelRmax]" dz="[tecwheel:DiskT]/2" startPhi="0*deg" deltaPhi="360.*deg"/> + <Tubs name="TECWheelNomex6" rMin="[tecpetal3:PetalContRmin]" rMax="[tecwheel:NomexRmax]" dz="[tecwheel:NomexT]/2" startPhi="0*deg" deltaPhi="360.*deg"/> + <Tubs name="TECFixSupport6" rMin="[tecpetal3:PetalContRmin]" rMax="[FixSuppRmax]" dz="[tecwheel:FixSuppT]/2" startPhi="-[FixSuppW]/2" deltaPhi="[FixSuppW]"/> + <Tubs name="TECOptConnector6" rMin="[tecwheel:OptConnRmin]" rMax="[tecwheel:OptConnRmax]" dz="[tecwheel:OptConnT2]/2" startPhi="-[tecwheel:OptConnW]/2" deltaPhi="[tecwheel:OptConnW]"/> + <Box name="TECBeamsplitter" dx="0.5*[BeamsplitterHeight]" dy="0.5*[BeamsplitterWidth]" dz="0.5*[BeamsplitterThick]"/> + </SolidSection> + <LogicalPartSection label="tecwheel6.xml"> + <LogicalPart name="TECWheel6" category="unspecified"> + <rSolid name="tecwheel6:TECWheel6"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TECWheelDisk6" category="unspecified"> + <rSolid name="tecwheel6:TECWheelDisk6"/> + <rMaterial name="tecmaterial:TEC_wheel6_CF"/> + </LogicalPart> + <LogicalPart name="TECWheelNomex6" category="unspecified"> + <rSolid name="tecwheel6:TECWheelNomex6"/> + <rMaterial name="tecmaterial:TEC_wheel6_Nomex"/> + </LogicalPart> + <LogicalPart name="TECFixSupport6" category="unspecified"> + <rSolid name="tecwheel6:TECFixSupport6"/> + <rMaterial name="tecmaterial:TEC_Fixframe"/> + </LogicalPart> + <LogicalPart name="TECOptConnector6" category="unspecified"> + <rSolid name="tecwheel6:TECOptConnector6"/> + <rMaterial name="tecmaterial:TEC_OptoCon"/> + </LogicalPart> + <LogicalPart name="TECBeamsplitter" category="unspecified"> + <rSolid name="tecwheel6:TECBeamsplitter"/> + <rMaterial name="tecmaterial:TEC_Beamsplitter"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tecwheel6.xml"> + <PosPart copyNumber="1"> + <rParent name="tecwheel6:TECWheel6"/> + <rChild name="tecwheel6:TECWheelDisk6"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecwheel6:TECWheelDisk6"/> + <rChild name="tecwheel6:TECWheelNomex6"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tecwheel6:TECWheelDisk6"/> + <rChild name="tecwheel:TECGroundingRing"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheel6:TECWheel6"/> + <String name="ChildName" value="tecpetal3f:TECPetalCont3F"/> + <Numeric name="N" value="[tecwheel:PetalContN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:PetalContFiF]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> + 0, 0, -[tecwheel:PetalContZ] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheel6:TECWheel6"/> + <String name="ChildName" value="tecpetal3b:TECPetalCont3B"/> + <Numeric name="N" value="[tecwheel:PetalContN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:PetalContFiB]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> + 0, 0, [tecwheel:PetalContZ] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheel6:TECWheelNomex6"/> + <String name="ChildName" value="tecwheel:TECWheelInsert"/> + <Numeric name="N" value="[tecwheel:InsertN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:InsertFi1]"/> + <Numeric name="Radius" value="[tecwheel:InsertR1]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheel6:TECWheelNomex6"/> + <String name="ChildName" value="tecwheel:TECWheelInsert"/> + <Numeric name="N" value="[tecwheel:InsertN]"/> + <Numeric name="StartCopyNo" value="9"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:InsertFi2]"/> + <Numeric name="Radius" value="[tecwheel:InsertR2]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheel6:TECWheelNomex6"/> + <String name="ChildName" value="tecwheel:TECWheelInsert"/> + <Numeric name="N" value="[tecwheel:InsertN]"/> + <Numeric name="StartCopyNo" value="17"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:InsertFi3]"/> + <Numeric name="Radius" value="[tecwheel:InsertR3]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheel6:TECWheelNomex6"/> + <String name="ChildName" value="tecwheel:TECWheelInsert"/> + <Numeric name="N" value="[tecwheel:InsertN]"/> + <Numeric name="StartCopyNo" value="25"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:InsertFi4]"/> + <Numeric name="Radius" value="[tecwheel:InsertR4]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheel6:TECWheelNomex6"/> + <String name="ChildName" value="tecwheel:TECWheelInsert"/> + <Numeric name="N" value="[tecwheel:InsertN]"/> + <Numeric name="StartCopyNo" value="33"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:InsertFi5]"/> + <Numeric name="Radius" value="[tecwheel:InsertR5]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheel6:TECWheelNomex6"/> + <String name="ChildName" value="tecwheel:TECWheelInsert"/> + <Numeric name="N" value="[tecwheel:InsertN]"/> + <Numeric name="StartCopyNo" value="41"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:InsertFi6]"/> + <Numeric name="Radius" value="[tecwheel:InsertR6]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheel6:TECWheelNomex6"/> + <String name="ChildName" value="tecwheel6:TECFixSupport6"/> + <Numeric name="N" value="[tecwheel:FixSuppN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:FixSuppFi]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheel6:TECWheelNomex6"/> + <String name="ChildName" value="tecwheel:TECFixService"/> + <Numeric name="N" value="[tecwheel:FixServN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:FixServFi]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheel6:TECWheel6"/> + <String name="ChildName" value="tecwheel6:TECOptConnector6"/> + <Numeric name="N" value="[tecwheel:OptConnN]"/> + <Numeric name="StartCopyNo" value="2"/> + <Numeric name="IncrCopyNo" value="2"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:OptConnFI1]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> + 0, 0, -[tecwheel:OptConnZ2] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheel6:TECWheel6"/> + <String name="ChildName" value="tecwheel6:TECOptConnector6"/> + <Numeric name="N" value="[tecwheel:OptConnN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="2"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:OptConnFI2]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> + 0, 0, [tecwheel:OptConnZ2] </Vector> + </Algorithm> + <!-- Alignment Holder (Sphere holder) --> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheel6:TECWheelNomex6"/> + <String name="ChildName" value="tecwheel:TECAlignHolder"/> + <Numeric name="N" value="4"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:AlignHolderStartPhi]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <!-- Beamsplitter --> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheel6:TECWheelNomex6"/> + <String name="ChildName" value="tecwheel6:TECBeamsplitter"/> + <Numeric name="N" value="8"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel6:BeamsplitterStartPhi]"/> + <Numeric name="Radius" value="[tecwheel6:BeamsplitterRA]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheel6:TECWheelNomex6"/> + <String name="ChildName" value="tecwheel6:TECBeamsplitter"/> + <Numeric name="N" value="8"/> + <Numeric name="StartCopyNo" value="9"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel6:BeamsplitterStartPhi]"/> + <Numeric name="Radius" value="[tecwheel6:BeamsplitterRB]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecwheela.xml b/examples/DDCMS/data/tecwheela.xml new file mode 100644 index 000000000..9e2a82e67 --- /dev/null +++ b/examples/DDCMS/data/tecwheela.xml @@ -0,0 +1,190 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecwheela.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="FixSuppRmax" value="[tecpetal0:PetalContRmin]+ [tecwheel:FixSuppR]"/> + <Constant name="FixSuppW" value="2*[tecwheel:FixSuppA]/([FixSuppRmax]*[FixSuppRmax]-[tecpetal0:PetalContRmin]*[tecpetal0:PetalContRmin])"/> + <!-- calculate the width to fit the area at this specific radius! thus the volume will be constant!--> + <Constant name="CableL" value="([tecwheel:CableRmax]-[tecring0:Rin])"/> + <Constant name="CableR" value="([tecwheel:CableRmax]+[tecring0:Rin])/2"/> + </ConstantsSection> + <SolidSection label="tecwheela.xml"> + <Tubs name="TECWheelA" rMin="[tecpetal0:PetalContRmin]" rMax="[tecwheel:WheelRmax]" dz="[tecwheel:WheelT]/2" startPhi="0*deg" deltaPhi="360.*deg"/> + <Tubs name="TECWheelDiskA" rMin="[tecpetal0:PetalContRmin]" rMax="[tecwheel:WheelRmax]" dz="[tecwheel:DiskT]/2" startPhi="0*deg" deltaPhi="360.*deg"/> + <Tubs name="TECWheelNomexA" rMin="[tecpetal0:PetalContRmin]" rMax="[tecwheel:NomexRmax]" dz="[tecwheel:NomexT]/2" startPhi="0*deg" deltaPhi="360.*deg"/> + <Tubs name="TECFixSupportA" rMin="[tecpetal0:PetalContRmin]" rMax="[FixSuppRmax]" dz="[tecwheel:FixSuppT]/2" startPhi="-[FixSuppW]/2" deltaPhi="[FixSuppW]"/> + <Tubs name="TECOptConnectorA" rMin="[tecwheel:OptConnRmin]" rMax="[tecwheel:OptConnRmax]" dz="[tecwheel:OptConnT1]/2" startPhi="-[tecwheel:OptConnW]/2" deltaPhi="[tecwheel:OptConnW]"/> + </SolidSection> + <LogicalPartSection label="tecwheela.xml"> + <LogicalPart name="TECWheelA" category="unspecified"> + <rSolid name="tecwheela:TECWheelA"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TECWheelDiskA" category="unspecified"> + <rSolid name="tecwheela:TECWheelDiskA"/> + <rMaterial name="tecmaterial:TEC_wheel_CF"/> + </LogicalPart> + <LogicalPart name="TECWheelNomexA" category="unspecified"> + <rSolid name="tecwheela:TECWheelNomexA"/> + <rMaterial name="tecmaterial:TEC_wheel_Nomex"/> + </LogicalPart> + <LogicalPart name="TECFixSupportA" category="unspecified"> + <rSolid name="tecwheela:TECFixSupportA"/> + <rMaterial name="tecmaterial:TEC_Fixframe"/> + </LogicalPart> + <LogicalPart name="TECOptConnectorA" category="unspecified"> + <rSolid name="tecwheela:TECOptConnectorA"/> + <rMaterial name="tecmaterial:TEC_OptoCon"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tecwheela.xml"> + <PosPart copyNumber="1"> + <rParent name="tecwheela:TECWheelA"/> + <rChild name="tecwheela:TECWheelDiskA"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecwheela:TECWheelDiskA"/> + <rChild name="tecwheela:TECWheelNomexA"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecwheela:TECWheelDiskA"/> + <rChild name="tecwheel:TECGroundingRing"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheela:TECWheelA"/> + <String name="ChildName" value="tecpetal0f:TECPetalCont0F"/> + <Numeric name="N" value="[tecwheel:PetalContN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:PetalContFiF]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> + 0, 0, -[tecwheel:PetalContZ] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheela:TECWheelA"/> + <String name="ChildName" value="tecpetal0b:TECPetalCont0B"/> + <Numeric name="N" value="[tecwheel:PetalContN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:PetalContFiB]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> + 0, 0, [tecwheel:PetalContZ] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheela:TECWheelNomexA"/> + <String name="ChildName" value="tecwheel:TECWheelInsert"/> + <Numeric name="N" value="[tecwheel:InsertN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:InsertFi1]"/> + <Numeric name="Radius" value="[tecwheel:InsertR1]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheela:TECWheelNomexA"/> + <String name="ChildName" value="tecwheel:TECWheelInsert"/> + <Numeric name="N" value="[tecwheel:InsertN]"/> + <Numeric name="StartCopyNo" value="9"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:InsertFi2]"/> + <Numeric name="Radius" value="[tecwheel:InsertR2]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheela:TECWheelNomexA"/> + <String name="ChildName" value="tecwheel:TECWheelInsert"/> + <Numeric name="N" value="[tecwheel:InsertN]"/> + <Numeric name="StartCopyNo" value="17"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:InsertFi3]"/> + <Numeric name="Radius" value="[tecwheel:InsertR3]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheela:TECWheelNomexA"/> + <String name="ChildName" value="tecwheel:TECWheelInsert"/> + <Numeric name="N" value="[tecwheel:InsertN]"/> + <Numeric name="StartCopyNo" value="25"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:InsertFi4]"/> + <Numeric name="Radius" value="[tecwheel:InsertR4]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheela:TECWheelNomexA"/> + <String name="ChildName" value="tecwheel:TECWheelInsert"/> + <Numeric name="N" value="[tecwheel:InsertN]"/> + <Numeric name="StartCopyNo" value="33"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:InsertFi5]"/> + <Numeric name="Radius" value="[tecwheel:InsertR5]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheela:TECWheelNomexA"/> + <String name="ChildName" value="tecwheel:TECWheelInsert"/> + <Numeric name="N" value="[tecwheel:InsertN]"/> + <Numeric name="StartCopyNo" value="41"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:InsertFi6]"/> + <Numeric name="Radius" value="[tecwheel:InsertR6]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheela:TECWheelNomexA"/> + <String name="ChildName" value="tecwheela:TECFixSupportA"/> + <Numeric name="N" value="[tecwheel:FixSuppN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:FixSuppFi]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheela:TECWheelNomexA"/> + <String name="ChildName" value="tecwheel:TECFixService"/> + <Numeric name="N" value="[tecwheel:FixServN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:FixServFi]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheela:TECWheelA"/> + <String name="ChildName" value="tecwheela:TECOptConnectorA"/> + <Numeric name="N" value="[tecwheel:OptConnN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="2"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:OptConnFI2]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> + 0, 0, [tecwheel:OptConnZ1] </Vector> + </Algorithm> + <!-- Alignment Holder (Sphere holder) --> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheela:TECWheelNomexA"/> + <String name="ChildName" value="tecwheel:TECAlignHolder"/> + <Numeric name="N" value="4"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:AlignHolderStartPhi]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecwheelb.xml b/examples/DDCMS/data/tecwheelb.xml new file mode 100644 index 000000000..b1d8a3671 --- /dev/null +++ b/examples/DDCMS/data/tecwheelb.xml @@ -0,0 +1,202 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecwheelb.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="FixSuppRmax" value="[tecpetal3:PetalContRmin]+ [tecwheel:FixSuppR]"/> + <Constant name="FixSuppW" value="2*[tecwheel:FixSuppA]/([FixSuppRmax]*[FixSuppRmax]-[tecpetal3:PetalContRmin]*[tecpetal3:PetalContRmin])"/> + <!-- calculate the width to fit the area at this specific radius! thus the volume will be constant!--> + <Constant name="CableL" value="([tecwheel:CableRmax]-[tecring1:Rin])"/> + <Constant name="CableR" value="([tecwheel:CableRmax]+[tecring1:Rin])/2"/> + </ConstantsSection> + <SolidSection label="tecwheelb.xml"> + <Tubs name="TECWheelB" rMin="[tecpetal3:PetalContRmin]" rMax="[tecwheel:WheelRmax]" dz="[tecwheel:WheelT]/2" startPhi="0*deg" deltaPhi="360.*deg"/> + <Tubs name="TECWheelDiskB" rMin="[tecpetal3:PetalContRmin]" rMax="[tecwheel:WheelRmax]" dz="[tecwheel:DiskT]/2" startPhi="0*deg" deltaPhi="360.*deg"/> + <Tubs name="TECWheelNomexB" rMin="[tecpetal3:PetalContRmin]" rMax="[tecwheel:NomexRmax]" dz="[tecwheel:NomexT]/2" startPhi="0*deg" deltaPhi="360.*deg"/> + <Tubs name="TECFixSupportB" rMin="[tecpetal3:PetalContRmin]" rMax="[FixSuppRmax]" dz="[tecwheel:FixSuppT]/2" startPhi="-[FixSuppW]/2" deltaPhi="[FixSuppW]"/> + <Tubs name="TECOptConnectorB" rMin="[tecwheel:OptConnRmin]" rMax="[tecwheel:OptConnRmax]" dz="[tecwheel:OptConnT2]/2" startPhi="-[tecwheel:OptConnW]/2" deltaPhi="[tecwheel:OptConnW]"/> + </SolidSection> + <LogicalPartSection label="tecwheelb.xml"> + <LogicalPart name="TECWheelB" category="unspecified"> + <rSolid name="tecwheelb:TECWheelB"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TECWheelDiskB" category="unspecified"> + <rSolid name="tecwheelb:TECWheelDiskB"/> + <rMaterial name="tecmaterial:TEC_wheel_CF"/> + </LogicalPart> + <LogicalPart name="TECWheelNomexB" category="unspecified"> + <rSolid name="tecwheelb:TECWheelNomexB"/> + <rMaterial name="tecmaterial:TEC_wheel_Nomex"/> + </LogicalPart> + <LogicalPart name="TECFixSupportB" category="unspecified"> + <rSolid name="tecwheelb:TECFixSupportB"/> + <rMaterial name="tecmaterial:TEC_Fixframe"/> + </LogicalPart> + <LogicalPart name="TECOptConnectorB" category="unspecified"> + <rSolid name="tecwheelb:TECOptConnectorB"/> + <rMaterial name="tecmaterial:TEC_OptoCon"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tecwheelb.xml"> + <PosPart copyNumber="1"> + <rParent name="tecwheelb:TECWheelB"/> + <rChild name="tecwheelb:TECWheelDiskB"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecwheelb:TECWheelDiskB"/> + <rChild name="tecwheelb:TECWheelNomexB"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tecwheelb:TECWheelDiskB"/> + <rChild name="tecwheel:TECGroundingRing"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheelb:TECWheelB"/> + <String name="ChildName" value="tecpetal3f:TECPetalCont3F"/> + <Numeric name="N" value="[tecwheel:PetalContN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:PetalContFiF]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> + 0, 0, -[tecwheel:PetalContZ] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheelb:TECWheelB"/> + <String name="ChildName" value="tecpetal3b:TECPetalCont3B"/> + <Numeric name="N" value="[tecwheel:PetalContN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:PetalContFiB]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> + 0, 0, [tecwheel:PetalContZ] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheelb:TECWheelNomexB"/> + <String name="ChildName" value="tecwheel:TECWheelInsert"/> + <Numeric name="N" value="[tecwheel:InsertN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:InsertFi1]"/> + <Numeric name="Radius" value="[tecwheel:InsertR1]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheelb:TECWheelNomexB"/> + <String name="ChildName" value="tecwheel:TECWheelInsert"/> + <Numeric name="N" value="[tecwheel:InsertN]"/> + <Numeric name="StartCopyNo" value="9"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:InsertFi2]"/> + <Numeric name="Radius" value="[tecwheel:InsertR2]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheelb:TECWheelNomexB"/> + <String name="ChildName" value="tecwheel:TECWheelInsert"/> + <Numeric name="N" value="[tecwheel:InsertN]"/> + <Numeric name="StartCopyNo" value="17"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:InsertFi3]"/> + <Numeric name="Radius" value="[tecwheel:InsertR3]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheelb:TECWheelNomexB"/> + <String name="ChildName" value="tecwheel:TECWheelInsert"/> + <Numeric name="N" value="[tecwheel:InsertN]"/> + <Numeric name="StartCopyNo" value="25"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:InsertFi4]"/> + <Numeric name="Radius" value="[tecwheel:InsertR4]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheelb:TECWheelNomexB"/> + <String name="ChildName" value="tecwheel:TECWheelInsert"/> + <Numeric name="N" value="[tecwheel:InsertN]"/> + <Numeric name="StartCopyNo" value="33"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:InsertFi5]"/> + <Numeric name="Radius" value="[tecwheel:InsertR5]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheelb:TECWheelNomexB"/> + <String name="ChildName" value="tecwheel:TECWheelInsert"/> + <Numeric name="N" value="[tecwheel:InsertN]"/> + <Numeric name="StartCopyNo" value="41"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:InsertFi6]"/> + <Numeric name="Radius" value="[tecwheel:InsertR6]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheelb:TECWheelNomexB"/> + <String name="ChildName" value="tecwheelb:TECFixSupportB"/> + <Numeric name="N" value="[tecwheel:FixSuppN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:FixSuppFi]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheelb:TECWheelNomexB"/> + <String name="ChildName" value="tecwheel:TECFixService"/> + <Numeric name="N" value="[tecwheel:FixServN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:FixServFi]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheelb:TECWheelB"/> + <String name="ChildName" value="tecwheelb:TECOptConnectorB"/> + <Numeric name="N" value="[tecwheel:OptConnN]"/> + <Numeric name="StartCopyNo" value="2"/> + <Numeric name="IncrCopyNo" value="2"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:OptConnFI1]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> + 0, 0, -[tecwheel:OptConnZ2] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheelb:TECWheelB"/> + <String name="ChildName" value="tecwheelb:TECOptConnectorB"/> + <Numeric name="N" value="[tecwheel:OptConnN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="2"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:OptConnFI2]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> + 0, 0, [tecwheel:OptConnZ2] </Vector> + </Algorithm> + <!-- Alignment Holder (Sphere holder) --> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheelb:TECWheelNomexB"/> + <String name="ChildName" value="tecwheel:TECAlignHolder"/> + <Numeric name="N" value="4"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:AlignHolderStartPhi]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecwheelc.xml b/examples/DDCMS/data/tecwheelc.xml new file mode 100644 index 000000000..ad99f7da1 --- /dev/null +++ b/examples/DDCMS/data/tecwheelc.xml @@ -0,0 +1,202 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecwheelc.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="FixSuppRmax" value="[tecpetal3:PetalContRmin]+ [tecwheel:FixSuppR]"/> + <Constant name="FixSuppW" value="2*[tecwheel:FixSuppA]/([FixSuppRmax]*[FixSuppRmax]-[tecpetal3:PetalContRmin]*[tecpetal3:PetalContRmin])"/> + <!-- calculate the width to fit the area at this specific radius! thus the volume will be constant!--> + <Constant name="CableL" value="([tecwheel:CableRmax]-[tecring2:Rin])"/> + <Constant name="CableR" value="([tecwheel:CableRmax]+[tecring2:Rin])/2"/> + </ConstantsSection> + <SolidSection label="tecwheelc.xml"> + <Tubs name="TECWheelC" rMin="[tecpetal3:PetalContRmin]" rMax="[tecwheel:WheelRmax]" dz="[tecwheel:WheelT]/2" startPhi="0*deg" deltaPhi="360.*deg"/> + <Tubs name="TECWheelDiskC" rMin="[tecpetal3:PetalContRmin]" rMax="[tecwheel:WheelRmax]" dz="[tecwheel:DiskT]/2" startPhi="0*deg" deltaPhi="360.*deg"/> + <Tubs name="TECWheelNomexC" rMin="[tecpetal3:PetalContRmin]" rMax="[tecwheel:NomexRmax]" dz="[tecwheel:NomexT]/2" startPhi="0*deg" deltaPhi="360.*deg"/> + <Tubs name="TECFixSupportC" rMin="[tecpetal3:PetalContRmin]" rMax="[FixSuppRmax]" dz="[tecwheel:FixSuppT]/2" startPhi="-[FixSuppW]/2" deltaPhi="[FixSuppW]"/> + <Tubs name="TECOptConnectorC" rMin="[tecwheel:OptConnRmin]" rMax="[tecwheel:OptConnRmax]" dz="[tecwheel:OptConnT3]/2" startPhi="-[tecwheel:OptConnW]/2" deltaPhi="[tecwheel:OptConnW]"/> + </SolidSection> + <LogicalPartSection label="tecwheelc.xml"> + <LogicalPart name="TECWheelC" category="unspecified"> + <rSolid name="tecwheelc:TECWheelC"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TECWheelDiskC" category="unspecified"> + <rSolid name="tecwheelc:TECWheelDiskC"/> + <rMaterial name="tecmaterial:TEC_wheel_CF"/> + </LogicalPart> + <LogicalPart name="TECWheelNomexC" category="unspecified"> + <rSolid name="tecwheelc:TECWheelNomexC"/> + <rMaterial name="tecmaterial:TEC_wheel_Nomex"/> + </LogicalPart> + <LogicalPart name="TECFixSupportC" category="unspecified"> + <rSolid name="tecwheelc:TECFixSupportC"/> + <rMaterial name="tecmaterial:TEC_Fixframe"/> + </LogicalPart> + <LogicalPart name="TECOptConnectorC" category="unspecified"> + <rSolid name="tecwheelc:TECOptConnectorC"/> + <rMaterial name="tecmaterial:TEC_OptoCon"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tecwheelc.xml"> + <PosPart copyNumber="1"> + <rParent name="tecwheelc:TECWheelC"/> + <rChild name="tecwheelc:TECWheelDiskC"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecwheelc:TECWheelDiskC"/> + <rChild name="tecwheelc:TECWheelNomexC"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="tecwheelc:TECWheelDiskC"/> + <rChild name="tecwheel:TECGroundingRing"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheelc:TECWheelC"/> + <String name="ChildName" value="tecpetal6f:TECPetalCont6F"/> + <Numeric name="N" value="[tecwheel:PetalContN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:PetalContFiF]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> + 0, 0, -[tecwheel:PetalContZ] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheelc:TECWheelC"/> + <String name="ChildName" value="tecpetal6b:TECPetalCont6B"/> + <Numeric name="N" value="[tecwheel:PetalContN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:PetalContFiB]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> + 0, 0, [tecwheel:PetalContZ] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheelc:TECWheelNomexC"/> + <String name="ChildName" value="tecwheel:TECWheelInsert"/> + <Numeric name="N" value="[tecwheel:InsertN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:InsertFi1]"/> + <Numeric name="Radius" value="[tecwheel:InsertR1]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheelc:TECWheelNomexC"/> + <String name="ChildName" value="tecwheel:TECWheelInsert"/> + <Numeric name="N" value="[tecwheel:InsertN]"/> + <Numeric name="StartCopyNo" value="9"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:InsertFi2]"/> + <Numeric name="Radius" value="[tecwheel:InsertR2]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheelc:TECWheelNomexC"/> + <String name="ChildName" value="tecwheel:TECWheelInsert"/> + <Numeric name="N" value="[tecwheel:InsertN]"/> + <Numeric name="StartCopyNo" value="17"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:InsertFi3]"/> + <Numeric name="Radius" value="[tecwheel:InsertR3]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheelc:TECWheelNomexC"/> + <String name="ChildName" value="tecwheel:TECWheelInsert"/> + <Numeric name="N" value="[tecwheel:InsertN]"/> + <Numeric name="StartCopyNo" value="25"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:InsertFi4]"/> + <Numeric name="Radius" value="[tecwheel:InsertR4]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheelc:TECWheelNomexC"/> + <String name="ChildName" value="tecwheel:TECWheelInsert"/> + <Numeric name="N" value="[tecwheel:InsertN]"/> + <Numeric name="StartCopyNo" value="33"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:InsertFi5]"/> + <Numeric name="Radius" value="[tecwheel:InsertR5]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheelc:TECWheelNomexC"/> + <String name="ChildName" value="tecwheel:TECWheelInsert"/> + <Numeric name="N" value="[tecwheel:InsertN]"/> + <Numeric name="StartCopyNo" value="41"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:InsertFi6]"/> + <Numeric name="Radius" value="[tecwheel:InsertR6]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheelc:TECWheelNomexC"/> + <String name="ChildName" value="tecwheelc:TECFixSupportC"/> + <Numeric name="N" value="[tecwheel:FixSuppN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:FixSuppFi]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheelc:TECWheelNomexC"/> + <String name="ChildName" value="tecwheel:TECFixService"/> + <Numeric name="N" value="[tecwheel:FixServN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:FixServFi]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheelc:TECWheelC"/> + <String name="ChildName" value="tecwheelc:TECOptConnectorC"/> + <Numeric name="N" value="[tecwheel:OptConnN]"/> + <Numeric name="StartCopyNo" value="2"/> + <Numeric name="IncrCopyNo" value="2"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:OptConnFI1]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> + 0, 0, -[tecwheel:OptConnZ3] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheelc:TECWheelC"/> + <String name="ChildName" value="tecwheelc:TECOptConnectorC"/> + <Numeric name="N" value="[tecwheel:OptConnN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="2"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:OptConnFI2]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> + 0, 0, [tecwheel:OptConnZ3] </Vector> + </Algorithm> + <!-- Alignment Holder (Sphere holder) --> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheelc:TECWheelNomexC"/> + <String name="ChildName" value="tecwheel:TECAlignHolder"/> + <Numeric name="N" value="4"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:AlignHolderStartPhi]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tecwheeld.xml b/examples/DDCMS/data/tecwheeld.xml new file mode 100644 index 000000000..92219ea48 --- /dev/null +++ b/examples/DDCMS/data/tecwheeld.xml @@ -0,0 +1,202 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tecwheeld.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="FixSuppRmax" value="[tecpetal3:PetalContRmin]+ [tecwheel:FixSuppR]"/> + <Constant name="FixSuppW" value="2*[tecwheel:FixSuppA]/([FixSuppRmax]*[FixSuppRmax]-[tecpetal3:PetalContRmin]*[tecpetal3:PetalContRmin])"/> + <!-- calculate the width to fit the area at this specific radius! thus the volume will be constant!--> + <Constant name="CableL" value="([tecwheel:CableRmax]-[tecring3:Rin])"/> + <Constant name="CableR" value="([tecwheel:CableRmax]+[tecring3:Rin])/2"/> + </ConstantsSection> + <SolidSection label="tecwheeld.xml"> + <Tubs name="TECWheelD" rMin="[tecpetal3:PetalContRmin]" rMax="[tecwheel:WheelRmax]" dz="[tecwheel:WheelT]/2" startPhi="0*deg" deltaPhi="360.*deg"/> + <Tubs name="TECWheelDiskD" rMin="[tecpetal3:PetalContRmin]" rMax="[tecwheel:WheelRmax]" dz="[tecwheel:DiskT]/2" startPhi="0*deg" deltaPhi="360.*deg"/> + <Tubs name="TECWheelNomexD" rMin="[tecpetal3:PetalContRmin]" rMax="[tecwheel:NomexRmax]" dz="[tecwheel:NomexT]/2" startPhi="0*deg" deltaPhi="360.*deg"/> + <Tubs name="TECFixSupportD" rMin="[tecpetal3:PetalContRmin]" rMax="[FixSuppRmax]" dz="[tecwheel:FixSuppT]/2" startPhi="-[FixSuppW]/2" deltaPhi="[FixSuppW]"/> + <Tubs name="TECOptConnectorD" rMin="[tecwheel:OptConnRmin]" rMax="[tecwheel:OptConnRmax]" dz="[tecwheel:OptConnT3]/2" startPhi="-[tecwheel:OptConnW]/2" deltaPhi="[tecwheel:OptConnW]"/> + </SolidSection> + <LogicalPartSection label="tecwheeld.xml"> + <LogicalPart name="TECWheelD" category="unspecified"> + <rSolid name="tecwheeld:TECWheelD"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TECWheelDiskD" category="unspecified"> + <rSolid name="tecwheeld:TECWheelDiskD"/> + <rMaterial name="tecmaterial:TEC_wheel_CF"/> + </LogicalPart> + <LogicalPart name="TECWheelNomexD" category="unspecified"> + <rSolid name="tecwheeld:TECWheelNomexD"/> + <rMaterial name="tecmaterial:TEC_wheel_Nomex"/> + </LogicalPart> + <LogicalPart name="TECFixSupportD" category="unspecified"> + <rSolid name="tecwheeld:TECFixSupportD"/> + <rMaterial name="tecmaterial:TEC_Fixframe"/> + </LogicalPart> + <LogicalPart name="TECOptConnectorD" category="unspecified"> + <rSolid name="tecwheeld:TECOptConnectorD"/> + <rMaterial name="tecmaterial:TEC_OptoCon"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tecwheeld.xml"> + <PosPart copyNumber="1"> + <rParent name="tecwheeld:TECWheelD"/> + <rChild name="tecwheeld:TECWheelDiskD"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecwheeld:TECWheelDiskD"/> + <rChild name="tecwheeld:TECWheelNomexD"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tecwheeld:TECWheelDiskD"/> + <rChild name="tecwheel:TECGroundingRing"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheeld:TECWheelD"/> + <String name="ChildName" value="tecpetal8f:TECPetalCont8F"/> + <Numeric name="N" value="[tecwheel:PetalContN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:PetalContFiF]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> + 0, 0, -[tecwheel:PetalContZ] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheeld:TECWheelD"/> + <String name="ChildName" value="tecpetal8b:TECPetalCont8B"/> + <Numeric name="N" value="[tecwheel:PetalContN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:PetalContFiB]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> + 0, 0, [tecwheel:PetalContZ] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheeld:TECWheelNomexD"/> + <String name="ChildName" value="tecwheel:TECWheelInsert"/> + <Numeric name="N" value="[tecwheel:InsertN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:InsertFi1]"/> + <Numeric name="Radius" value="[tecwheel:InsertR1]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheeld:TECWheelNomexD"/> + <String name="ChildName" value="tecwheel:TECWheelInsert"/> + <Numeric name="N" value="[tecwheel:InsertN]"/> + <Numeric name="StartCopyNo" value="9"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:InsertFi2]"/> + <Numeric name="Radius" value="[tecwheel:InsertR2]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheeld:TECWheelNomexD"/> + <String name="ChildName" value="tecwheel:TECWheelInsert"/> + <Numeric name="N" value="[tecwheel:InsertN]"/> + <Numeric name="StartCopyNo" value="17"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:InsertFi3]"/> + <Numeric name="Radius" value="[tecwheel:InsertR3]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheeld:TECWheelNomexD"/> + <String name="ChildName" value="tecwheel:TECWheelInsert"/> + <Numeric name="N" value="[tecwheel:InsertN]"/> + <Numeric name="StartCopyNo" value="25"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:InsertFi4]"/> + <Numeric name="Radius" value="[tecwheel:InsertR4]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheeld:TECWheelNomexD"/> + <String name="ChildName" value="tecwheel:TECWheelInsert"/> + <Numeric name="N" value="[tecwheel:InsertN]"/> + <Numeric name="StartCopyNo" value="33"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:InsertFi5]"/> + <Numeric name="Radius" value="[tecwheel:InsertR5]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheeld:TECWheelNomexD"/> + <String name="ChildName" value="tecwheel:TECWheelInsert"/> + <Numeric name="N" value="[tecwheel:InsertN]"/> + <Numeric name="StartCopyNo" value="41"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:InsertFi6]"/> + <Numeric name="Radius" value="[tecwheel:InsertR6]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheeld:TECWheelNomexD"/> + <String name="ChildName" value="tecwheeld:TECFixSupportD"/> + <Numeric name="N" value="[tecwheel:FixSuppN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:FixSuppFi]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheeld:TECWheelNomexD"/> + <String name="ChildName" value="tecwheel:TECFixService"/> + <Numeric name="N" value="[tecwheel:FixServN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:FixServFi]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheeld:TECWheelD"/> + <String name="ChildName" value="tecwheeld:TECOptConnectorD"/> + <Numeric name="N" value="[tecwheel:OptConnN]"/> + <Numeric name="StartCopyNo" value="2"/> + <Numeric name="IncrCopyNo" value="2"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:OptConnFI1]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> + 0, 0, -[tecwheel:OptConnZ3] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheeld:TECWheelD"/> + <String name="ChildName" value="tecwheeld:TECOptConnectorD"/> + <Numeric name="N" value="[tecwheel:OptConnN]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="2"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:OptConnFI2]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> + 0, 0, [tecwheel:OptConnZ3] </Vector> + </Algorithm> + <!-- Alignment Holder (Sphere holder) --> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tecwheeld:TECWheelNomexD"/> + <String name="ChildName" value="tecwheel:TECAlignHolder"/> + <Numeric name="N" value="4"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tecwheel:AlignHolderStartPhi]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tib.xml b/examples/DDCMS/data/tib.xml new file mode 100644 index 000000000..e08564124 --- /dev/null +++ b/examples/DDCMS/data/tib.xml @@ -0,0 +1,48 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tib.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="Rin" value="22.20*cm"/> + <Constant name="Rout" value="54.00*cm"/> + <Constant name="TIBDz" value="716.00*mm"/> + <Constant name="SupportT" value="1.50*cm"/> + <Constant name="SupportRin" value="[tiblayer3:MFRingOutR]"/> + <Constant name="SupportRout" value="[SupportRin]+1.*mm"/> + </ConstantsSection> + <SolidSection label="tib.xml"> + <Tubs name="TIB" rMin="[Rin]" rMax="[Rout]" dz="[tib:TIBDz]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TIBOutSupport" rMin="[SupportRin]" rMax="[SupportRout]" dz="[tib:TIBDz]" startPhi="0*deg" deltaPhi="360*deg"/> + </SolidSection> + <LogicalPartSection label="tib.xml"> + <LogicalPart name="TIB" category="unspecified"> + <rSolid name="TIB"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TIBOutSupport" category="unspecified"> + <rSolid name="TIBOutSupport"/> + <rMaterial name="trackermaterial:T_CarbonFibreStr"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tib.xml"> + <PosPart copyNumber="1"> + <rParent name="tib:TIB"/> + <rChild name="tib:TIBOutSupport"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tib:TIB"/> + <rChild name="tiblayer0:TIBLayer0"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tib:TIB"/> + <rChild name="tiblayer1:TIBLayer1"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="tib:TIB"/> + <rChild name="tiblayer2:TIBLayer2"/> + </PosPart> + <PosPart copyNumber="4"> + <rParent name="tib:TIB"/> + <rChild name="tiblayer3:TIBLayer3"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tiblayer0.xml b/examples/DDCMS/data/tiblayer0.xml new file mode 100644 index 000000000..ded81fc73 --- /dev/null +++ b/examples/DDCMS/data/tiblayer0.xml @@ -0,0 +1,105 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tiblayer0.xml" eval="true"> + <Constant name="RadiusUp" value="([tiblayerpar:RadiusLo0]+ [tiblayerpar:DRUpLo])"/> + <Constant name="CylinderT" value="0.60*cm"/> + <Constant name="CylinderInR" value="253.0*mm"/> + <Constant name="MFRingInR" value="225.0*mm"/> + <Constant name="MFRingOutR" value="69.0*mm+[MFRingInR]"/> + </ConstantsSection> + <Algorithm name="track:DDTIBLayerAlgo"> + <rParent name="tiblayer0:TIBLayer0"/> + <String name="GeneralMaterial" value="materials:Air"/> + <Numeric name="DetectorTilt" value="[tiblayerpar:DetTilt]"/> + <Numeric name="LayerL" value="[tibstringpar:StringL]"/> + <Numeric name="RadiusLo" value="[tiblayerpar:RadiusLo0]"/> + <Numeric name="StringsLo" value="26"/> + <String name="StringDetLoName" value="tibstring0:TIBString0Lo1"/> + <Numeric name="RadiusUp" value="[tiblayer0:RadiusUp]"/> + <Numeric name="StringsUp" value="30"/> + <String name="StringDetUpName" value="tibstring0:TIBString0Up1"/> + <Numeric name="CylinderThickness" value="[CylinderT]"/> + <Numeric name="CylinderInnerRadius" value="[CylinderInR]"/> + <String name="CylinderMaterial" value="tibmaterial:TIB_CFCylinder"/> + <Numeric name="MFRingInnerRadius" value="[MFRingInR]"/> + <Numeric name="MFRingOuterRadius" value="[MFRingOutR]"/> + <Numeric name="MFRingThickness" value="[tiblayerpar:MFRingT]"/> + <Numeric name="MFRingDeltaz" value="[tiblayerpar:MFRingDz]"/> + <String name="MFIntRingMaterial" value="tibmaterial:TIB_MFIntRing"/> + <String name="MFExtRingMaterial" value="tibmaterial:TIB_MFExtRing"/> + <Numeric name="SupportThickness" value="[tiblayerpar:SupportT]"/> + <String name="CentRingMaterial" value="tibmaterial:TIB_CentRing"/> + <Vector name="CentRing1" type="numeric" nEntries="4"> + -6.15*mm, 4.*mm, [MFRingOutR]-[tiblayerpar:MFRingT], [MFRingOutR] + </Vector> + <Vector name="CentRing2" type="numeric" nEntries="4"> + 36.88*mm, 4.*mm, [MFRingInR], [MFRingInR]+[tiblayerpar:MFRingT] + </Vector> + <String name="FillerMaterial" value="trackermaterial:T_G10"/> + <Numeric name="FillerDeltaz" value="10*mm"/> + <String name="RibMaterial" value="trackermaterial:T_CarbonFibreStr"/> + <Vector name="RibWidth" type="numeric" nEntries="6"> + [tiblayerpar:RibWidth1], [tiblayerpar:RibWidth2], [tiblayerpar:RibWidth2], + [tiblayerpar:RibWidth1], [tiblayerpar:RibWidth2], [tiblayerpar:RibWidth2] + </Vector> + <Vector name="RibPhi" type="numeric" nEntries="6"> + 0*deg, 51.4*deg, 128.6*deg, 180.0*deg, 231.4*deg, 308.6*deg + </Vector> + <!-- DOHM Position in #string in the upper half shell; negative means place an AUX --> + <!-- NB String numbering here starts from 1 --> + <Vector name="DOHMListFW" type="numeric" nEntries="6"> + 2, 4, 7, 9, 12, 14 + </Vector> + <Vector name="DOHMListBW" type="numeric" nEntries="6"> + 2, 4, 7, 9, 12, 14 + </Vector> + <Numeric name="DOHMCarrierPhiOffset" value="[tiblayerpar:DOHMCarrierPhiOff]"/> + <Numeric name="DOHMtoMFDist" value="[tiblayerpar:DOHMtoMF]"/> + <String name="StringDOHMPrimName" value="tiblayerpar:TIBDOHMPrim"/> + <String name="StringDOHMAuxName" value="tiblayerpar:TIBDOHMAux"/> + <String name="DOHMCarrierMaterial" value="tibmaterial:TIB_DOHMCarrier"/> + <String name="DOHMCableMaterial" value="tibmaterial:TIB_DOHM_cable"/> + <String name="DOHMPRIMMaterial" value="tibmaterial:TIB_DOHM_PRIM"/> + <Numeric name="DOHMPRIMLength" value="[tiblayerpar:DOHM_PRIM_L]"/> + <String name="DOHMAUXMaterial" value="tibmaterial:TIB_DOHM_AUX"/> + <Numeric name="DOHMAUXLength" value="[tiblayerpar:DOHM_AUX_L]"/> + <!-- Pillar Material --> + <String name="PillarMaterial" value="tibmaterial:TIB_Pillar"/> + <!-- FW Internal Pillar Parameters --> + <Numeric name="FWIntPillarDz" value="1.0*mm"/> + <Numeric name="FWIntPillarDPhi" value="1.0*deg"/> + <Vector name="FWIntPillarPhi" type="numeric" nEntries="1"> + -1. + </Vector> + <Vector name="FWIntPillarZ" type="numeric" nEntries="1"> + 0. + </Vector> + <!-- BW Internal Pillar Parameters --> + <Numeric name="BWIntPillarDz" value="1.0*cm"/> + <Numeric name="BWIntPillarDPhi" value="1.0*deg"/> + <Vector name="BWIntPillarPhi" type="numeric" nEntries="1"> + -1. + </Vector> + <Vector name="BWIntPillarZ" type="numeric" nEntries="1"> + 0. + </Vector> + <!-- FW External Pillar Parameters --> + <Numeric name="FWExtPillarDz" value="20.5*mm"/> + <Numeric name="FWExtPillarDPhi" value="7.0*deg"/> + <Vector name="FWExtPillarPhi" type="numeric" nEntries="4"> + 56.*deg, 124.*deg, 236.*deg, 304.*deg + </Vector> + <Vector name="FWExtPillarZ" type="numeric" nEntries="4"> + 200.*mm, 200.*mm, 200.*mm, 200.*mm + </Vector> + <!-- BW External Pillar Parameters --> + <Numeric name="BWExtPillarDz" value="8.0*mm"/> + <Numeric name="BWExtPillarDPhi" value="7.0*deg"/> + <Vector name="BWExtPillarPhi" type="numeric" nEntries="4"> + 56.*deg, 124.*deg, 236.*deg, 304.*deg + </Vector> + <Vector name="BWExtPillarZ" type="numeric" nEntries="4"> + -248.*mm, -248.*mm, -248.*mm, -248.*mm + </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tiblayer1.xml b/examples/DDCMS/data/tiblayer1.xml new file mode 100644 index 000000000..19ad1a0f6 --- /dev/null +++ b/examples/DDCMS/data/tiblayer1.xml @@ -0,0 +1,105 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tiblayer1.xml" eval="true"> + <Constant name="RadiusUp" value="([tiblayerpar:RadiusLo1]+ [tiblayerpar:DRUpLo])"/> + <Constant name="CylinderT" value="0.60*cm"/> + <Constant name="CylinderInR" value="337.0*mm"/> + <Constant name="MFRingInR" value="300.0*mm"/> + <Constant name="MFRingOutR" value="75.75*mm+[MFRingInR]"/> + </ConstantsSection> + <Algorithm name="track:DDTIBLayerAlgo"> + <rParent name="tiblayer1:TIBLayer1"/> + <String name="GeneralMaterial" value="materials:Air"/> + <Numeric name="DetectorTilt" value="[tiblayerpar:DetTilt]"/> + <Numeric name="LayerL" value="[tibstringpar:StringL]"/> + <Numeric name="RadiusLo" value="[tiblayerpar:RadiusLo1]"/> + <Numeric name="StringsLo" value="34"/> + <String name="StringDetLoName" value="tibstring1:TIBString1Lo1"/> + <Numeric name="RadiusUp" value="[tiblayer1:RadiusUp]"/> + <Numeric name="StringsUp" value="38"/> + <String name="StringDetUpName" value="tibstring1:TIBString1Up1"/> + <Numeric name="CylinderThickness" value="[CylinderT]"/> + <Numeric name="CylinderInnerRadius" value="[CylinderInR]"/> + <String name="CylinderMaterial" value="tibmaterial:TIB_CFCylinder"/> + <Numeric name="MFRingInnerRadius" value="[MFRingInR]"/> + <Numeric name="MFRingOuterRadius" value="[MFRingOutR]"/> + <Numeric name="MFRingThickness" value="[tiblayerpar:MFRingT]"/> + <Numeric name="MFRingDeltaz" value="[tiblayerpar:MFRingDz]"/> + <String name="MFIntRingMaterial" value="tibmaterial:TIB_MFIntRing"/> + <String name="MFExtRingMaterial" value="tibmaterial:TIB_MFExtRing"/> + <Numeric name="SupportThickness" value="[tiblayerpar:SupportT]"/> + <String name="CentRingMaterial" value="tibmaterial:TIB_CentRing"/> + <Vector name="CentRing1" type="numeric" nEntries="4"> + -3.805*mm, 4.*mm, [MFRingOutR]-[tiblayerpar:MFRingT], [MFRingOutR] + </Vector> + <Vector name="CentRing2" type="numeric" nEntries="4"> + 12.461*mm, 4.*mm, [MFRingOutR]-[tiblayerpar:MFRingT], [MFRingOutR] + </Vector> + <String name="FillerMaterial" value="trackermaterial:T_G10"/> + <Numeric name="FillerDeltaz" value="11*mm"/> + <String name="RibMaterial" value="trackermaterial:T_CarbonFibreStr"/> + <Vector name="RibWidth" type="numeric" nEntries="6"> + [tiblayerpar:RibWidth1], [tiblayerpar:RibWidth2], [tiblayerpar:RibWidth2], + [tiblayerpar:RibWidth1], [tiblayerpar:RibWidth2], [tiblayerpar:RibWidth2] + </Vector> + <Vector name="RibPhi" type="numeric" nEntries="6"> + 0*deg, 56.8*deg, 123.2*deg, 180.0*deg, 236.8*deg, 303.2*deg + </Vector> + <!-- DOHM Position in #string in the upper half shell; negative means place an AUX --> + <!-- NB String numbering here starts from 1 --> + <Vector name="DOHMListFW" type="numeric" nEntries="8"> + 2, 4, 7, 9, 12, 14, 16, 18 + </Vector> + <Vector name="DOHMListBW" type="numeric" nEntries="8"> + 2, 4, 7, 9, 11, 13, 16, 18 + </Vector> + <Numeric name="DOHMCarrierPhiOffset" value="[tiblayerpar:DOHMCarrierPhiOff]"/> + <Numeric name="DOHMtoMFDist" value="[tiblayerpar:DOHMtoMF]"/> + <String name="StringDOHMPrimName" value="tiblayerpar:TIBDOHMPrim"/> + <String name="StringDOHMAuxName" value="tiblayerpar:TIBDOHMAux"/> + <String name="DOHMCarrierMaterial" value="tibmaterial:TIB_DOHMCarrier"/> + <String name="DOHMCableMaterial" value="tibmaterial:TIB_DOHM_cable"/> + <String name="DOHMPRIMMaterial" value="tibmaterial:TIB_DOHM_PRIM"/> + <Numeric name="DOHMPRIMLength" value="[tiblayerpar:DOHM_PRIM_L]"/> + <String name="DOHMAUXMaterial" value="tibmaterial:TIB_DOHM_AUX"/> + <Numeric name="DOHMAUXLength" value="[tiblayerpar:DOHM_AUX_L]"/> + <!-- Pillar Material --> + <String name="PillarMaterial" value="tibmaterial:TIB_Pillar"/> + <!-- FW Internal Pillar Parameters --> + <Numeric name="FWIntPillarDz" value="21.5*mm"/> + <Numeric name="FWIntPillarDPhi" value="6.*deg"/> + <Vector name="FWIntPillarPhi" type="numeric" nEntries="4"> + 56.*deg, 124.*deg, 236.*deg, 304.*deg + </Vector> + <Vector name="FWIntPillarZ" type="numeric" nEntries="4"> + 173.*mm, 173.*mm, 173.*mm, 173.*mm + </Vector> + <!-- BW Internal Pillar Parameters --> + <Numeric name="BWIntPillarDz" value="13.5*mm"/> + <Numeric name="BWIntPillarDPhi" value="6.*deg"/> + <Vector name="BWIntPillarPhi" type="numeric" nEntries="4"> + 56.*deg, 124.*deg, 236.*deg, 304.*deg + </Vector> + <Vector name="BWIntPillarZ" type="numeric" nEntries="4"> + -235.5*mm, -235.5*mm, -235.5*mm, -235.5*mm + </Vector> + <!-- FW External Pillar Parameters --> + <Numeric name="FWExtPillarDz" value="17.5*mm"/> + <Numeric name="FWExtPillarDPhi" value="7.*deg"/> + <Vector name="FWExtPillarPhi" type="numeric" nEntries="4"> + 33.*deg, 147.*deg, 213.*deg, 327.*deg + </Vector> + <Vector name="FWExtPillarZ" type="numeric" nEntries="4"> + 250.*mm, 250.*mm, 250.*mm, 250.*mm + </Vector> + <!-- BW External Pillar Parameters --> + <Numeric name="BWExtPillarDz" value="14.5*mm"/> + <Numeric name="BWExtPillarDPhi" value="7.*deg"/> + <Vector name="BWExtPillarPhi" type="numeric" nEntries="4"> + 33.*deg, 147.*deg, 213.*deg, 327.*deg + </Vector> + <Vector name="BWExtPillarZ" type="numeric" nEntries="4"> + -210.5*mm, -210.5*mm, -210.5*mm, -210.5*mm + </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tiblayer2.xml b/examples/DDCMS/data/tiblayer2.xml new file mode 100644 index 000000000..23b2e3545 --- /dev/null +++ b/examples/DDCMS/data/tiblayer2.xml @@ -0,0 +1,105 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tiblayer2.xml" eval="true"> + <Constant name="RadiusUp" value="([tiblayerpar:RadiusLo2]+ [tiblayerpar:DRUpLo])"/> + <Constant name="CylinderT" value="0.80*cm"/> + <Constant name="CylinderInR" value="415.5*mm"/> + <Constant name="MFRingInR" value="382.75*mm"/> + <Constant name="MFRingOutR" value="71.5*mm+[MFRingInR]"/> + </ConstantsSection> + <Algorithm name="track:DDTIBLayerAlgo"> + <rParent name="tiblayer2:TIBLayer2"/> + <String name="GeneralMaterial" value="materials:Air"/> + <Numeric name="DetectorTilt" value="[tiblayerpar:DetTilt]"/> + <Numeric name="LayerL" value="[tibstringpar:StringL]"/> + <Numeric name="RadiusLo" value="[tiblayerpar:RadiusLo2]"/> + <Numeric name="StringsLo" value="44"/> + <String name="StringDetLoName" value="tibstring2:TIBString2Lo1"/> + <Numeric name="RadiusUp" value="[tiblayer2:RadiusUp]"/> + <Numeric name="StringsUp" value="46"/> + <String name="StringDetUpName" value="tibstring2:TIBString2Up1"/> + <Numeric name="CylinderThickness" value="[CylinderT]"/> + <Numeric name="CylinderInnerRadius" value="[CylinderInR]"/> + <String name="CylinderMaterial" value="tibmaterial:TIB_CFCylinder"/> + <Numeric name="MFRingInnerRadius" value="[MFRingInR]"/> + <Numeric name="MFRingOuterRadius" value="[MFRingOutR]"/> + <Numeric name="MFRingThickness" value="[tiblayerpar:MFRingT]"/> + <Numeric name="MFRingDeltaz" value="[tiblayerpar:MFRingDz]"/> + <String name="MFIntRingMaterial" value="tibmaterial:TIB_MFIntRing"/> + <String name="MFExtRingMaterial" value="tibmaterial:TIB_MFExtRing"/> + <Numeric name="SupportThickness" value="[tiblayerpar:SupportT]"/> + <String name="CentRingMaterial" value="tibmaterial:TIB_CentRing"/> + <Vector name="CentRing1" type="numeric" nEntries="4"> + -15.00*mm, 4.*mm, [MFRingOutR]-[tiblayerpar:MFRingT], [MFRingOutR] + </Vector> + <Vector name="CentRing2" type="numeric" nEntries="4"> + -6.00*mm, 4.*mm, [MFRingOutR]-[tiblayerpar:MFRingT], [MFRingOutR] + </Vector> + <String name="FillerMaterial" value="trackermaterial:T_G10"/> + <Numeric name="FillerDeltaz" value="11.5*mm"/> + <String name="RibMaterial" value="trackermaterial:T_CarbonFibreStr"/> + <Vector name="RibWidth" type="numeric" nEntries="6"> + [tiblayerpar:RibWidth1], [tiblayerpar:RibWidth2], [tiblayerpar:RibWidth2], + [tiblayerpar:RibWidth1], [tiblayerpar:RibWidth2], [tiblayerpar:RibWidth2] + </Vector> + <Vector name="RibPhi" type="numeric" nEntries="6"> + 0*deg, 62.6*deg, 117.4*deg, 180.0*deg, 242.6*deg, 297.4*deg + </Vector> + <!-- DOHM Position in #string in the upper half shell; negative means place an AUX --> + <!-- NB String numbering here starts from 1 --> + <Vector name="DOHMListFW" type="numeric" nEntries="6"> + 3, -6, 10, -13, 18, -21 + </Vector> + <Vector name="DOHMListBW" type="numeric" nEntries="6"> + 3, -6, 10, -13, 18, -21 + </Vector> + <Numeric name="DOHMtoMFDist" value="[tiblayerpar:DOHMtoMF]"/> + <Numeric name="DOHMCarrierPhiOffset" value="[tiblayerpar:DOHMCarrierPhiOff]"/> + <String name="StringDOHMPrimName" value="tiblayerpar:TIBDOHMPrim"/> + <String name="StringDOHMAuxName" value="tiblayerpar:TIBDOHMAux"/> + <String name="DOHMCarrierMaterial" value="tibmaterial:TIB_DOHMCarrier"/> + <String name="DOHMCableMaterial" value="tibmaterial:TIB_DOHM_cable"/> + <String name="DOHMPRIMMaterial" value="tibmaterial:TIB_DOHM_PRIM"/> + <Numeric name="DOHMPRIMLength" value="[tiblayerpar:DOHM_PRIM_L]"/> + <String name="DOHMAUXMaterial" value="tibmaterial:TIB_DOHM_AUX"/> + <Numeric name="DOHMAUXLength" value="[tiblayerpar:DOHM_AUX_L]"/> + <!-- Pillar Material --> + <String name="PillarMaterial" value="tibmaterial:TIB_Pillar"/> + <!-- FW Internal Pillar Parameters --> + <Numeric name="FWIntPillarDz" value="14.*mm"/> + <Numeric name="FWIntPillarDPhi" value="7.5*deg"/> + <Vector name="FWIntPillarPhi" type="numeric" nEntries="4"> + 34.*deg, 146.*deg, 214.*deg, 326.*deg + </Vector> + <Vector name="FWIntPillarZ" type="numeric" nEntries="4"> + 254.*mm, 254.*mm, 254.*mm, 254.*mm + </Vector> + <!-- BW Internal Pillar Parameters --> + <Numeric name="BWIntPillarDz" value="24.*mm"/> + <Numeric name="BWIntPillarDPhi" value="7.5*deg"/> + <Vector name="BWIntPillarPhi" type="numeric" nEntries="4"> + 34.*deg, 146.*deg, 214.*deg, 326.*deg + </Vector> + <Vector name="BWIntPillarZ" type="numeric" nEntries="4"> + -181.*mm, -181.*mm, -181.*mm, -181.*mm + </Vector> + <!-- FW External Pillar Parameters --> + <Numeric name="FWExtPillarDz" value="14.5*mm"/> + <Numeric name="FWExtPillarDPhi" value="4.5*deg"/> + <Vector name="FWExtPillarPhi" type="numeric" nEntries="4"> + 52.*deg, 128.*deg, 232.*deg, 308.*deg + </Vector> + <Vector name="FWExtPillarZ" type="numeric" nEntries="4"> + 201.*mm, 201.*mm, 201.*mm, 201.*mm + </Vector> + <!-- BW External Pillar Parameters --> + <Numeric name="BWExtPillarDz" value="18.5*mm"/> + <Numeric name="BWExtPillarDPhi" value="4.5*deg"/> + <Vector name="BWExtPillarPhi" type="numeric" nEntries="4"> + 52.*deg, 128.*deg, 232.*deg, 308.*deg + </Vector> + <Vector name="BWExtPillarZ" type="numeric" nEntries="4"> + -256.5*mm, -256.5*mm, -256.5*mm, -256.5*mm + </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tiblayer3.xml b/examples/DDCMS/data/tiblayer3.xml new file mode 100644 index 000000000..4dec74dfd --- /dev/null +++ b/examples/DDCMS/data/tiblayer3.xml @@ -0,0 +1,105 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tiblayer3.xml" eval="true"> + <Constant name="RadiusUp" value="([tiblayerpar:RadiusLo3]+ [tiblayerpar:DRUpLo])"/> + <Constant name="CylinderT" value="0.80*cm"/> + <Constant name="CylinderInR" value="495.0*mm"/> + <Constant name="MFRingInR" value="463.5*mm"/> + <Constant name="MFRingOutR" value="72.5*mm+[MFRingInR]"/> + </ConstantsSection> + <Algorithm name="track:DDTIBLayerAlgo"> + <rParent name="tiblayer3:TIBLayer3"/> + <String name="GeneralMaterial" value="materials:Air"/> + <Numeric name="DetectorTilt" value="[tiblayerpar:DetTilt]"/> + <Numeric name="LayerL" value="[tibstringpar:StringL]"/> + <Numeric name="RadiusLo" value="[tiblayerpar:RadiusLo3]"/> + <Numeric name="StringsLo" value="52"/> + <String name="StringDetLoName" value="tibstring3:TIBString3Lo1"/> + <Numeric name="RadiusUp" value="[tiblayer3:RadiusUp]"/> + <Numeric name="StringsUp" value="56"/> + <String name="StringDetUpName" value="tibstring3:TIBString3Up1"/> + <Numeric name="CylinderThickness" value="[CylinderT]"/> + <Numeric name="CylinderInnerRadius" value="[CylinderInR]"/> + <String name="CylinderMaterial" value="tibmaterial:TIB_CFCylinder"/> + <Numeric name="MFRingInnerRadius" value="[MFRingInR]"/> + <Numeric name="MFRingOuterRadius" value="[MFRingOutR]"/> + <Numeric name="MFRingThickness" value="[tiblayerpar:MFRingT]"/> + <Numeric name="MFRingDeltaz" value="[tiblayerpar:MFRingDz]"/> + <String name="MFIntRingMaterial" value="tibmaterial:TIB_MFIntRing"/> + <String name="MFExtRingMaterial" value="tibmaterial:TIB_MFExtRing"/> + <Numeric name="SupportThickness" value="[tiblayerpar:SupportT]"/> + <String name="CentRingMaterial" value="tibmaterial:TIB_CentRing"/> + <Vector name="CentRing1" type="numeric" nEntries="4"> + -0.70*mm, 8.*mm, [MFRingOutR]-[tiblayerpar:MFRingT], [MFRingOutR] + </Vector> + <Vector name="CentRing2" type="numeric" nEntries="4"> + 12.20*mm, 8.*mm, [MFRingOutR]-[tiblayerpar:MFRingT], [MFRingOutR] + </Vector> + <String name="FillerMaterial" value="trackermaterial:T_G10"/> + <Numeric name="FillerDeltaz" value="9.75*mm"/> + <String name="RibMaterial" value="trackermaterial:T_CarbonFibreStr"/> + <Vector name="RibWidth" type="numeric" nEntries="6"> + [tiblayerpar:RibWidth1], [tiblayerpar:RibWidth2], [tiblayerpar:RibWidth2], + [tiblayerpar:RibWidth1], [tiblayerpar:RibWidth2], [tiblayerpar:RibWidth2] + </Vector> + <Vector name="RibPhi" type="numeric" nEntries="6"> + 0*deg, 53.3*deg, 126.7*deg, 180.0*deg, 233.3*deg, 306.7*deg + </Vector> + <!-- DOHM Position in #string in the upper half shell; negative means place an AUX --> + <!-- NB String numbering here starts from 1 --> + <Vector name="DOHMListFW" type="numeric" nEntries="8"> + 3, -6, 10, -13, 16, -19, 24, -27 + </Vector> + <Vector name="DOHMListBW" type="numeric" nEntries="8"> + 3, -6, 9, -12, 16, -19, 23, -26 + </Vector> + <Numeric name="DOHMtoMFDist" value="[tiblayerpar:DOHMtoMF]"/> + <Numeric name="DOHMCarrierPhiOffset" value="[tiblayerpar:DOHMCarrierPhiOff]"/> + <String name="StringDOHMPrimName" value="tiblayerpar:TIBDOHMPrim"/> + <String name="StringDOHMAuxName" value="tiblayerpar:TIBDOHMAux"/> + <String name="DOHMCarrierMaterial" value="tibmaterial:TIB_DOHMCarrier"/> + <String name="DOHMCableMaterial" value="tibmaterial:TIB_DOHM_cable"/> + <String name="DOHMPRIMMaterial" value="tibmaterial:TIB_DOHM_PRIM"/> + <Numeric name="DOHMPRIMLength" value="[tiblayerpar:DOHM_PRIM_L]"/> + <String name="DOHMAUXMaterial" value="tibmaterial:TIB_DOHM_AUX"/> + <Numeric name="DOHMAUXLength" value="[tiblayerpar:DOHM_AUX_L]"/> + <!-- Pillar Material --> + <String name="PillarMaterial" value="tibmaterial:TIB_Pillar"/> + <!-- FW Internal Pillar Parameters --> + <Numeric name="FWIntPillarDz" value="23.5*mm"/> + <Numeric name="FWIntPillarDPhi" value="5.5*deg"/> + <Vector name="FWIntPillarPhi" type="numeric" nEntries="4"> + 52.*deg, 128.*deg, 232.*deg, 308.*deg + </Vector> + <Vector name="FWIntPillarZ" type="numeric" nEntries="4"> + 182.*mm, 182.*mm, 182.*mm, 182.*mm + </Vector> + <!-- BW Internal Pillar Parameters --> + <Numeric name="BWIntPillarDz" value="16.0*mm"/> + <Numeric name="BWIntPillarDPhi" value="5.5*deg"/> + <Vector name="BWIntPillarPhi" type="numeric" nEntries="4"> + 52.*deg, 128.*deg, 232.*deg, 308.*deg + </Vector> + <Vector name="BWIntPillarZ" type="numeric" nEntries="4"> + -259.*mm, -259.*mm, -259.*mm, -259.*mm + </Vector> + <!-- FW External Pillar Parameters --> + <Numeric name="FWExtPillarDz" value="1.*cm"/> + <Numeric name="FWExtPillarDPhi" value="1.*deg"/> + <Vector name="FWExtPillarPhi" type="numeric" nEntries="1"> + -1. + </Vector> + <Vector name="FWExtPillarZ" type="numeric" nEntries="1"> + -1. + </Vector> + <!-- BW External Pillar Parameters --> + <Numeric name="BWExtPillarDz" value="1.*cm"/> + <Numeric name="BWExtPillarDPhi" value="1.*deg"/> + <Vector name="BWExtPillarPhi" type="numeric" nEntries="1"> + -1. + </Vector> + <Vector name="BWExtPillarZ" type="numeric" nEntries="1"> + -1. + </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tiblayerpar.xml b/examples/DDCMS/data/tiblayerpar.xml new file mode 100644 index 000000000..ec0a3de58 --- /dev/null +++ b/examples/DDCMS/data/tiblayerpar.xml @@ -0,0 +1,45 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tiblayerpar.xml" eval="true"> + <Constant name="DetTilt" value="-9.00*deg"/> + <Constant name="Tolerance" value="0.25*cm"/> + <Constant name="SupportT" value="0.5*mm"/> + <Constant name="RibWidth1" value="3.50*cm"/> + <Constant name="RibWidth2" value="0.13*cm"/> + <Constant name="RadiusLo0" value="23.90*cm"/> + <Constant name="RadiusLo1" value="32.30*cm"/> + <Constant name="RadiusLo2" value="40.25*cm"/> + <Constant name="RadiusLo3" value="48.20*cm"/> + <Constant name="DRUpLo" value="3.20*cm"/> + <Constant name="MFRingT" value="8.0*mm"/> + <Constant name="MFRingDz" value="17.0*mm"/> + <Constant name="DOHMCarrierW" value="29.5*cm"/> + <Constant name="DOHMCarrierT" value="1.15*mm"/> + <Constant name="DOHMCarrierPhiOff" value="2.*deg"/> + <Constant name="DOHMtoMF" value="1.00*cm"/> + <Constant name="DOHM_PRIM_W" value="6.0*cm"/> + <Constant name="DOHM_PRIM_L" value="28.5*cm"/> + <Constant name="DOHM_PRIM_T" value="4.0*mm"/> + <Constant name="DOHM_AUX_W" value="6.0*cm"/> + <Constant name="DOHM_AUX_L" value="15.5*cm"/> + <Constant name="DOHM_AUX_T" value="4.0*mm"/> + <Constant name="Tol" value="0.1*mm"/> + </ConstantsSection> + <SolidSection label="tiblayerpar.xml"> + <Box name="TIBDOHMPrim" dx="0.5*[tiblayerpar:DOHM_PRIM_W]" dy="0.5*[tiblayerpar:DOHM_PRIM_T]" dz="0.5*[tiblayerpar:DOHM_PRIM_L]"/> + <Box name="TIBDOHMAux" dx="0.5*[tiblayerpar:DOHM_AUX_W]" dy="0.5*[tiblayerpar:DOHM_AUX_T]" dz="0.5*[tiblayerpar:DOHM_AUX_L]"/> + </SolidSection> + <LogicalPartSection label="tiblayerpar.xml"> + <LogicalPart name="TIBDOHMPrim" category="unspecified"> + <rSolid name="tiblayerpar:TIBDOHMPrim"/> + <rMaterial name="tibmaterial:TIB_DOHM"/> + </LogicalPart> + <LogicalPart name="TIBDOHMAux" category="unspecified"> + <rSolid name="tiblayerpar:TIBDOHMAux"/> + <rMaterial name="tibmaterial:TIB_AUX"/> + </LogicalPart> + </LogicalPartSection> + <RotationSection label="tiblayerpar.xml"> + <Rotation name="D180" thetaX="90*deg" phiX="0*deg" thetaY="90*deg" phiY="270*deg" thetaZ="180*deg" phiZ="0*deg"/> + </RotationSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tibmaterial.xml b/examples/DDCMS/data/tibmaterial.xml new file mode 100644 index 000000000..bbb90689a --- /dev/null +++ b/examples/DDCMS/data/tibmaterial.xml @@ -0,0 +1,443 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <MaterialSection label="tibmaterial.xml"> + <CompositeMaterial name="TIB_DOHM" density="1.61191*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.37005"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.08736"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00142"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.00354"> + <rMaterial name="trackermaterial:T_Barium_Titanate" /> + </MaterialFraction> + <MaterialFraction fraction="0.00254"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00254"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.03447"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.03446"> + <rMaterial name="materials:T_Bronze" /> + </MaterialFraction> + <MaterialFraction fraction="0.0136"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.01693"> + <rMaterial name="materials:T_Bronze" /> + </MaterialFraction> + <MaterialFraction fraction="0.00542"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.00325"> + <rMaterial name="materials:T_Bronze" /> + </MaterialFraction> + <MaterialFraction fraction="0.00726"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.00453"> + <rMaterial name="materials:T_Bronze" /> + </MaterialFraction> + <MaterialFraction fraction="0.05037"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.02052"> + <rMaterial name="materials:T_Bronze" /> + </MaterialFraction> + <MaterialFraction fraction="0.01489"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.00352"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.02114"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.01107"> + <rMaterial name="materials:T_Bronze" /> + </MaterialFraction> + <MaterialFraction fraction="0.04416"> + <rMaterial name="tibtidcommonmaterial:TIBTID_CCUM" /> + </MaterialFraction> + <MaterialFraction fraction="0.05524"> + <rMaterial name="tibtidcommonmaterial:TIBTID_DOH" /> + </MaterialFraction> + <MaterialFraction fraction="0.02721"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.00847"> + <rMaterial name="materials:T_Bronze" /> + </MaterialFraction> + <MaterialFraction fraction="0.00559"> + <rMaterial name="tibtidcommonmaterial:T_FiberPigtail" /> + </MaterialFraction> + <MaterialFraction fraction="0.02665"> + <rMaterial name="tibtidcommonmaterial:T_MedusaWire" /> + </MaterialFraction> + <MaterialFraction fraction="0.01497"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.10884"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIB_AUX" density="1.69155*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.34905"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.08045"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00272"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.00517"> + <rMaterial name="trackermaterial:T_Barium_Titanate" /> + </MaterialFraction> + <MaterialFraction fraction="0.00127"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00127"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.06357"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.06356"> + <rMaterial name="materials:T_Bronze" /> + </MaterialFraction> + <MaterialFraction fraction="0.11042"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.04498"> + <rMaterial name="materials:T_Bronze" /> + </MaterialFraction> + <MaterialFraction fraction="0.01786"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.00412"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.02536"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.01328"> + <rMaterial name="materials:T_Bronze" /> + </MaterialFraction> + <MaterialFraction fraction="0.02622"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.1907"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIB_DOHMCarrier" density="0.37823*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.52099"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + <MaterialFraction fraction="0.07514"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.08092"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.02081"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.26238"> + <rMaterial name="tibtidcommonmaterial:TIBTID_AmphCable" /> + </MaterialFraction> + <MaterialFraction fraction="0.03006"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.0097"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIB_Flange" density="0.541944*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.71068"> + <rMaterial name="tibtidcommonmaterial:T_MedusaWire" /> + </MaterialFraction> + <MaterialFraction fraction="0.10194"> + <rMaterial name="tibtidcommonmaterial:T_Al6mmPipe" /> + </MaterialFraction> + <MaterialFraction fraction="0.08266"> + <rMaterial name="tibtidcommonmaterial:T_FiberPigtail" /> + </MaterialFraction> + <MaterialFraction fraction="0.04022"> + <rMaterial name="tibtidcommonmaterial:TIBTID_AmphCable" /> + </MaterialFraction> + <MaterialFraction fraction="0.02347"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + <MaterialFraction fraction="0.01743"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.0236"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIB_CFCylinder" density="1.74797*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.96684"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + <MaterialFraction fraction="0.01343"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.00714"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.01259"> + <rMaterial name="trackermaterial:T_Silicone_Gel" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIB_ModKaptonBox" density="1.43380*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.39057"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.00612"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00931"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.14667"> + <rMaterial name="trackermaterial:T_Barium_Titanate" /> + </MaterialFraction> + <MaterialFraction fraction="0.36669"> + <rMaterial name="trackermaterial:T_Silicone_Gel" /> + </MaterialFraction> + <MaterialFraction fraction="0.03667"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.04398"> + <rMaterial name="materials:Iron" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIB_SSAOHBox" density="0.99230*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.73275"> + <rMaterial name="tibtidcommonmaterial:TIBTID_AOH" /> + </MaterialFraction> + <MaterialFraction fraction="0.05655"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.03887"> + <rMaterial name="materials:T_Bronze" /> + </MaterialFraction> + <MaterialFraction fraction="0.06715"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.03882"> + <rMaterial name="tibtidcommonmaterial:TIBTID_HybridTails" /> + </MaterialFraction> + <MaterialFraction fraction="0.01559"> + <rMaterial name="tibtidcommonmaterial:TIBTID_HybridTails" /> + </MaterialFraction> + <MaterialFraction fraction="0.02375"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.00532"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.0212"> + <rMaterial name="materials:Iron" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIB_DSAOHBox" density="1.19076*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="1"> + <rMaterial name="tibmaterial:TIB_SSAOHBox" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIB_ModHybLedge" density="5.85144*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.88449"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.11551"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIB_ModDummyLedge" density="5.51982*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.8706"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.1294"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIB_AOHLedge" density="5.57478*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="1"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIB_CoolPipe" density="2.00806*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.50397"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.49603"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIB_MCable" density="2.25395*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.38359"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.44832"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.07394"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.09415"> + <rMaterial name="tibtidcommonmaterial:T_FiberPigtail" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIB_SSMCModConn" density="1.23046*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.03675"> + <rMaterial name="tibtidcommonmaterial:TIBTID_HybridTails" /> + </MaterialFraction> + <MaterialFraction fraction="0.01862"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.00418"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.12499"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.01191"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.16248"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.37555"> + <rMaterial name="materials:T_Bronze" /> + </MaterialFraction> + <MaterialFraction fraction="0.24997"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.01556"> + <rMaterial name="materials:T_Bronze" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIB_DSMCModConn" density="1.67201*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="1"> + <rMaterial name="tibmaterial:TIB_SSMCModConn" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIB_MCHead" density="2.01518*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.34318"> + <rMaterial name="tibtidcommonmaterial:TIBTID_CCUM" /> + </MaterialFraction> + <MaterialFraction fraction="0.10297"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.12034"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.01985"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.02114"> + <rMaterial name="trackermaterial:T_Barium_Titanate" /> + </MaterialFraction> + <MaterialFraction fraction="0.05639"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.03524"> + <rMaterial name="materials:T_Bronze" /> + </MaterialFraction> + <MaterialFraction fraction="0.03524"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.04229"> + <rMaterial name="materials:T_Bronze" /> + </MaterialFraction> + <MaterialFraction fraction="0.0141"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.03524"> + <rMaterial name="materials:T_Bronze" /> + </MaterialFraction> + <MaterialFraction fraction="0.02819"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.02819"> + <rMaterial name="materials:T_Bronze" /> + </MaterialFraction> + <MaterialFraction fraction="0.06344"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.02584"> + <rMaterial name="materials:T_Bronze" /> + </MaterialFraction> + <MaterialFraction fraction="0.02834"> + <rMaterial name="tibtidcommonmaterial:T_FiberPigtail" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIB_MFIntRing" density="1.66403*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.34788"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.08064"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.02664"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.36336"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + <MaterialFraction fraction="0.07841"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + <MaterialFraction fraction="0.01023"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.08908"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00375"> + <rMaterial name="materials:Gold" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIB_MFExtRing" density="1.68430*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.98796"> + <rMaterial name="tibmaterial:TIB_MFIntRing" /> + </MaterialFraction> + <MaterialFraction fraction="0.01204"> + <rMaterial name="tibtidcommonmaterial:TIBTID_AmphCable" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIB_CentRing" density="3.42188*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.92603"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + <MaterialFraction fraction="0.07397"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIB_Spacer" density="2.88571*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.87129"> + <rMaterial name="materials:Alumina" /> + </MaterialFraction> + <MaterialFraction fraction="0.12871"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIB_Pillar" density="1.7394*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.75785"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + <MaterialFraction fraction="0.24215"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + </MaterialSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tibmodpar.xml b/examples/DDCMS/data/tibmodpar.xml new file mode 100644 index 000000000..a8a5a6093 --- /dev/null +++ b/examples/DDCMS/data/tibmodpar.xml @@ -0,0 +1,215 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tibmodpar.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="ModuleDx" value="3.900*cm"/> + <Constant name="SSModuleDy" value="1.100*mm"/> + <Constant name="DSModuleDy" value="2.475*mm"/> + <Constant name="DSModuleSideCutDx" value="3.3*mm"/> + <Constant name="DSModuleSideCutDy" value="0.8*mm"/> + <Constant name="DSModuleSideCutX" value="36.*mm"/> + <Constant name="DSModuleSideCutY" value="1.775*mm"/> + <Constant name="SideCutExtraZ" value="0.1*mm"/> + <Constant name="ModuleDz" value="81.65*mm"/> + <Constant name="HybridDx" value="23.50*mm"/> + <Constant name="HybridDy" value="0.565*mm"/> + <Constant name="HybridDz" value="12.65*mm"/> + <Constant name="HybridZ" value="[ModuleDz]-[HybridDz]"/> + <Constant name="PARPhiDx" value="32.00*mm"/> + <Constant name="PADy" value="0.565*mm"/> + <Constant name="PARPhiDz" value="4.500*mm"/> + <Constant name="PAZ" value="[ModuleDz]-2*[HybridDz]-[PARPhiDz]"/> + <Constant name="CFFrameHybDz" value="12.40*mm"/> + <Constant name="CFFrameHybZ" value="-[tibmodpar:ModuleDz]+[tibmodpar:CFFrameHybDz]"/> + <Constant name="CFFrameHybRPhiDx" value="30.00*mm"/> + <Constant name="CFFrameDy" value="0.250*mm"/> + <Constant name="CFFrameDz" value="[ModuleDz]-[CFFrameHybDz]"/> + <Constant name="CFFrameZ" value="[ModuleDz]-[CFFrameDz]"/> + <Constant name="CFFrameHoleDx" value="30.00*mm"/> + <Constant name="CFFrameHoleDz" value="59.50*mm"/> + <Constant name="CFFrameHoleOffset" value="1.000*mm"/> + <Constant name="CFFrameHoleZ" value="[tibmodpar:WaferZ]-[tibmodpar:CFFrameHybDz]"/> + <Constant name="KaptonBoxDy" value="0.150*mm"/> + <Constant name="KaptonBoxDz" value="[ModuleDz]-[HybridDz]-[PARPhiDz]"/> + <Constant name="KaptonBoxZ" value="[tibmodpar:HybridDz]+[tibmodpar:PARPhiDz]"/> + <Constant name="KaptonBoxHoleDx" value="27.50*mm"/> + <Constant name="KaptonBoxHoleDz" value="57.50*mm"/> + <Constant name="KaptonBoxHoleZ" value="[tibmodpar:KaptonBoxHoleDz]-[tibmodpar:KaptonBoxDz]"/> + <Constant name="StereoAngle" value="5.729578*deg"/> + <Constant name="TrapSterTheta" value="atan(0.5*tan([tibmodpar:StereoAngle]))"/> + <!-- Trapezoid parameter --> + <Constant name="HybLedgeDz" value="3.60*mm"/> + <Constant name="HybLedgeSideDx" value="3.0*mm"/> + <Constant name="HybLedgeSideDz" value="12.0*mm"/> + <Constant name="DummyLedgeDz" value="5.0*mm"/> + <Constant name="LedgeBoxDx" value="[tibstringpar:CoolBoxDx]"/> + <Constant name="LedgeBoxDy" value="[tibstringpar:CoolBoxDy]-[tibstringpar:CoolPipeDy]"/> + <Constant name="SSLedgeBoxY" value="-[tibmodpar:SSModuleDy]-[tibmodpar:LedgeBoxDy]"/> + <Constant name="DSLedgeBoxY" value="-[tibmodpar:DSModuleDy]-[tibmodpar:LedgeBoxDy]"/> + <Constant name="AOHLedgeDz" value="1.5*mm"/> + <Constant name="AOHLedgeSideDx" value="1.5*mm"/> + <Constant name="AOHLedgeSideDz" value="15.0*mm"/> + <Constant name="AOHModOffset" value="6.0*mm"/> + <Constant name="AOHLedgeModOffset" value="[tibmodpar:AOHModOffset]+[tibmodpar:AOHLedgeSideDz]"/> + <Constant name="SSAOHBoxDx" value="18.0*mm"/> + <Constant name="DSAOHBoxDx" value="[tibstringpar:CoolBoxDx]"/> + <Constant name="AOHBoxDy" value="[tibmodpar:SSModuleDy]"/> + <Constant name="AOHToMod" value="6.0*mm"/> + <Constant name="AOHBoxDz" value="[tibmodpar:AOHLedgeSideDz]+0.5*[tibmodpar:AOHToMod]"/> + <Constant name="SSAOHBoxY" value="-[tibmodpar:SSModuleDy]+[tibmodpar:AOHBoxDy]"/> + <Constant name="SSAOHBoxX" value="[tibmodpar:LedgeBoxDx]-[tibmodpar:SSAOHBoxDx]"/> + <Constant name="DSAOHBoxY" value="-[tibmodpar:DSModuleDy]+[tibmodpar:AOHBoxDy]"/> + <Constant name="ModCool1Dx" value="2.350*cm"/> + <Constant name="ModCoolDy" value="0.015*cm"/> + <Constant name="ModCool1Dz" value="0.350*cm"/> + <Constant name="ModCool1X" value="0.000*cm"/> + <Constant name="ModCool1Z" value="7.800*cm"/> + <Constant name="ModCool2Dx" value="0.300*cm"/> + <Constant name="ModCool2Dz" value="1.250*cm"/> + <Constant name="ModCool2X" value="2.650*cm"/> + <Constant name="ModCool2Z" value="6.900*cm"/> + <Constant name="SSWaferDx" value="31.6440*mm"/> + <Constant name="DSWaferDx" value="31.6640*mm"/> + <Constant name="WaferDy" value="59.4805*mm"/> + <Constant name="WaferDz" value="0.160*mm"/> + <Constant name="ActiveDz" value="[WaferDz]-[tracker:BackPlaneDz]"/> + <Constant name="SSActiveDx" value="30.720*mm"/> + <!-- Actual ActiveDx=30.750mm; 30.720=pitch(=120micron)*512 --> + <Constant name="DSActiveDx" value="30.720*mm"/> + <!-- Actual ActiveDx=30.770mm; 30.720=pitch(=80micron)*768 --> + <Constant name="ActiveDy" value="58.4425*mm"/> + <Constant name="WaferZ" value="12.33*mm"/> + <Constant name="Tol" value="0.01*mm"/> + </ConstantsSection> + <SolidSection label="tibmodpar.xml"> + <Box name="TIBSSModule" dx="[tibmodpar:ModuleDx]" dy="[tibmodpar:SSModuleDy]" dz="[tibmodpar:ModuleDz]"/> + <Box name="TIBDSModuleMainPart" dx="[tibmodpar:ModuleDx]" dy="[tibmodpar:DSModuleDy]" dz="[tibmodpar:ModuleDz]"/> + <Box name="TIBDSModuleSideCutL" dx="[tibmodpar:DSModuleSideCutDx]" dy="[tibmodpar:DSModuleSideCutDy]" dz="[tibmodpar:ModuleDz]+[tibmodpar:SideCutExtraZ]"/> + <Box name="TIBDSModuleSideCutR" dx="[tibmodpar:DSModuleSideCutDx]" dy="[tibmodpar:DSModuleSideCutDy]" dz="[tibmodpar:ModuleDz]+[tibmodpar:SideCutExtraZ]"/> + <SubtractionSolid name="TIBDSModuleLeftCutted"> + <rSolid name="TIBDSModuleMainPart"/> + <rSolid name="TIBDSModuleSideCutL"/> + <Translation x="-[DSModuleSideCutX]" y="[DSModuleSideCutY]" z="0."/> + </SubtractionSolid> + <SubtractionSolid name="TIBDSModule"> + <rSolid name="TIBDSModuleLeftCutted"/> + <rSolid name="TIBDSModuleSideCutR"/> + <Translation x="[DSModuleSideCutX]" y="[DSModuleSideCutY]" z="0."/> + </SubtractionSolid> + <Box name="TIBHybrid" dx="[tibmodpar:HybridDx]" dy="[tibmodpar:HybridDy]" dz="[tibmodpar:HybridDz]"/> + <Box name="TIBPA1" dx="[PARPhiDx]" dy="[PADy]" dz="[PARPhiDz]"/> + <Box name="TIBSSWafer" dx="[tibmodpar:SSWaferDx]" dy="[tibmodpar:WaferDy]" dz="[tibmodpar:WaferDz]"/> + <Box name="TIBSSActive" dx="[tibmodpar:SSActiveDx]" dy="[tibmodpar:ActiveDy]" dz="[tibmodpar:ActiveDz]"/> + <Box name="TIBDSWafer" dx="[tibmodpar:DSWaferDx]" dy="[tibmodpar:WaferDy]" dz="[tibmodpar:WaferDz]"/> + <Box name="TIBDSActive" dx="[tibmodpar:DSActiveDx]" dy="[tibmodpar:ActiveDy]" dz="[tibmodpar:ActiveDz]"/> + <Box name="TIBModCFFrame" dx="[tibmodpar:ModuleDx]" dy="[tibmodpar:CFFrameDy]" dz="[tibmodpar:CFFrameDz]"/> + <Box name="TIBModCFFrameHole" dx="[tibmodpar:CFFrameHoleDx]" dy="[tibmodpar:CFFrameDy]" dz="[tibmodpar:CFFrameHoleDz]"/> + <Box name="TIBModCFFrameHybRPhi" dx="[tibmodpar:CFFrameHybRPhiDx]" dy="[tibmodpar:CFFrameDy]" dz="[tibmodpar:CFFrameHybDz]"/> + <Box name="TIBModKaptonBoxRPhi" dx="[tibmodpar:ModuleDx]" dy="[tibmodpar:KaptonBoxDy]" dz="[tibmodpar:KaptonBoxDz]"/> + <Box name="TIBModKaptonBoxHole" dx="[tibmodpar:KaptonBoxHoleDx]" dy="[tibmodpar:KaptonBoxDy]" dz="[tibmodpar:KaptonBoxHoleDz]"/> + <!-- Module Ledges definitions --> + <Box name="TIBModLedgeBox" dx="[tibmodpar:LedgeBoxDx]" dy="[tibmodpar:LedgeBoxDy]" dz="[tibmodpar:ModuleDz]"/> + <Box name="TIBModHybLedgeNoCut" dx="[tibmodpar:LedgeBoxDx]" dy="[tibmodpar:LedgeBoxDy]" dz="[tibmodpar:HybLedgeSideDz]"/> + <Box name="TIBModHybLedgeCut" dx="[tibmodpar:LedgeBoxDx]-2*[tibmodpar:HybLedgeSideDx]" dy="[tibmodpar:LedgeBoxDy]" dz="[tibmodpar:HybLedgeSideDz]-[tibmodpar:HybLedgeDz]"/> + <SubtractionSolid name="TIBModHybLedge"> + <rSolid name="TIBModHybLedgeNoCut"/> + <rSolid name="TIBModHybLedgeCut"/> + <Translation x="[zero]" y="[zero]" z="[tibmodpar:HybLedgeDz]"/> + </SubtractionSolid> + <Box name="TIBModDummyLedge" dx="[tibmodpar:LedgeBoxDx]" dy="[tibmodpar:LedgeBoxDy]" dz="[tibmodpar:DummyLedgeDz]"/> + <!-- AOH Ledges definitions --> + <Box name="TIBAOHLedgeNoCut" dx="[tibmodpar:LedgeBoxDx]" dy="[tibmodpar:LedgeBoxDy]" dz="[tibmodpar:AOHLedgeSideDz]"/> + <Box name="TIBAOHLedgeCut" dx="[tibmodpar:LedgeBoxDx]-2*[tibmodpar:AOHLedgeSideDx]" dy="[tibmodpar:LedgeBoxDy]" dz="[tibmodpar:AOHLedgeSideDz]-[tibmodpar:AOHLedgeDz]"/> + <SubtractionSolid name="TIBAOHLedge"> + <rSolid name="TIBAOHLedgeNoCut"/> + <rSolid name="TIBAOHLedgeCut"/> + <Translation x="[zero]" y="[zero]" z="[tibmodpar:AOHLedgeDz]"/> + </SubtractionSolid> + <!-- AOH Boxes definitions --> + <Box name="TIBSSAOHBox" dx="[tibmodpar:SSAOHBoxDx]" dy="[tibmodpar:AOHBoxDy]" dz="[tibmodpar:AOHBoxDz]"/> + <Box name="TIBDSAOHBox" dx="[tibmodpar:DSAOHBoxDx]" dy="[tibmodpar:AOHBoxDy]" dz="[tibmodpar:AOHBoxDz]"/> + </SolidSection> + <LogicalPartSection label="tibmodpar.xml"> + <LogicalPart name="TIBModCFFrameRPhi" category="unspecified"> + <rSolid name="tibmodpar:TIBModCFFrame"/> + <rMaterial name="trackermaterial:T_CarbonFibreStr"/> + </LogicalPart> + <LogicalPart name="TIBModCFFrameHybRPhi" category="unspecified"> + <rSolid name="tibmodpar:TIBModCFFrameHybRPhi"/> + <rMaterial name="trackermaterial:T_CarbonFibreStr"/> + </LogicalPart> + <LogicalPart name="TIBModCFFrameHole" category="unspecified"> + <rSolid name="tibmodpar:TIBModCFFrameHole"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TIBModKaptonBoxRPhi" category="unspecified"> + <rSolid name="tibmodpar:TIBModKaptonBoxRPhi"/> + <rMaterial name="tibmaterial:TIB_ModKaptonBox"/> + </LogicalPart> + <LogicalPart name="TIBModKaptonBoxHole" category="unspecified"> + <rSolid name="tibmodpar:TIBModKaptonBoxHole"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TIBPA1" category="unspecified"> + <rSolid name="TIBPA1"/> + <rMaterial name="tibtidcommonmaterial:TIBTID_PA"/> + </LogicalPart> + <LogicalPart name="TIBModLedgeBox" category="unspecified"> + <rSolid name="TIBModLedgeBox"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TIBModHybLedge" category="unspecified"> + <rSolid name="TIBModHybLedge"/> + <rMaterial name="tibmaterial:TIB_ModHybLedge"/> + </LogicalPart> + <LogicalPart name="TIBModDummyLedge" category="unspecified"> + <rSolid name="TIBModDummyLedge"/> + <rMaterial name="tibmaterial:TIB_ModDummyLedge"/> + </LogicalPart> + <LogicalPart name="TIBAOHLedge" category="unspecified"> + <rSolid name="TIBAOHLedge"/> + <rMaterial name="tibmaterial:TIB_AOHLedge"/> + </LogicalPart> + <LogicalPart name="TIBSSAOHBox" category="unspecified"> + <rSolid name="TIBSSAOHBox"/> + <rMaterial name="tibmaterial:TIB_SSAOHBox"/> + </LogicalPart> + <LogicalPart name="TIBDSAOHBox" category="unspecified"> + <rSolid name="TIBDSAOHBox"/> + <rMaterial name="tibmaterial:TIB_DSAOHBox"/> + </LogicalPart> + </LogicalPartSection> + <RotationSection label="tibmodpar.xml"> + <Rotation name="Rphi" thetaX="90*deg" phiX="180*deg" thetaY="0*deg" phiY="90*deg" thetaZ="90*deg" phiZ="90*deg"/> + <Rotation name="SterB" thetaX="95.7296*deg" phiX="0*deg" thetaY="5.7296*deg" phiY="0*deg" thetaZ="90*deg" phiZ="270*deg"/> + <Rotation name="SterA" thetaX="84.2704*deg" phiX="0*deg" thetaY="-5.7296*deg" phiY="0*deg" thetaZ="90*deg" phiZ="270*deg"/> + <Rotation name="CFFrameSterB" thetaX="90.*deg" phiX="180.*deg" thetaY="90.*deg" phiY="270.*deg" thetaZ="0.*deg" phiZ="0.*deg"/> + <Rotation name="CFFrameHoleSterA" thetaX="90.*deg-[StereoAngle]" phiX="0.*deg" thetaY="90.*deg" phiY="90.*deg" thetaZ="[StereoAngle]" phiZ="180.*deg"/> + <Rotation name="KaptonBoxHoleSterB" thetaX="84.2704*deg" phiX="0*deg" thetaY="-5.7296*deg" phiY="0*deg" thetaZ="90*deg" phiZ="270*deg"/> + <Rotation name="KaptonBoxHoleSterA" thetaX="[StereoAngle]" phiX="180.*deg" thetaY="90.*deg" phiY="90.*deg" thetaZ="90.*deg+[StereoAngle]" phiZ="180.*deg"/> + <Rotation name="PAB" thetaX="180*deg" phiX="0*deg" thetaY="90*deg" phiY="270*deg" thetaZ="90*deg" phiZ="180*deg"/> + <Rotation name="PAA" thetaX="180*deg" phiX="0*deg" thetaY="90*deg" phiY="90*deg" thetaZ="90*deg" phiZ="0*deg"/> + </RotationSection> + <PosPartSection label="tibmodpar.xml"> + <PosPart copyNumber="1"> + <rParent name="tibmodpar:TIBModCFFrameRPhi"/> + <rChild name="tibmodpar:TIBModCFFrameHole"/> + <Translation x="[zero]" y="[zero]" z="[tibmodpar:CFFrameHoleZ]-[tibmodpar:CFFrameHoleOffset]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodpar:TIBModKaptonBoxRPhi"/> + <rChild name="tibmodpar:TIBModKaptonBoxHole"/> + <Translation x="[zero]" y="[zero]" z="[tibmodpar:KaptonBoxHoleZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodpar:TIBModLedgeBox"/> + <rChild name="tibmodpar:TIBModHybLedge"/> + <Translation x="[zero]" y="[zero]" z="-[tibmodpar:ModuleDz]+[tibmodpar:HybLedgeSideDz]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodpar:TIBModLedgeBox"/> + <rChild name="tibmodpar:TIBModDummyLedge"/> + <Translation x="[zero]" y="[zero]" z="[tibmodpar:ModuleDz]-[tibmodpar:DummyLedgeDz]"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tibmodule0.xml b/examples/DDCMS/data/tibmodule0.xml new file mode 100644 index 000000000..c0c90dd6d --- /dev/null +++ b/examples/DDCMS/data/tibmodule0.xml @@ -0,0 +1,145 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tibmodule0.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="ShiftX" value="5.948*mm"/> + <Constant name="SpacerDy" value="0.175*mm"/> + <Constant name="SpacerY" value="[zero]"/> + <Constant name="CFFrameRPhiY" value="[SpacerY]+[SpacerDy]+[tibmodpar:CFFrameDy]"/> + <Constant name="CFFrameSterY" value="[SpacerY]-[SpacerDy]-[tibmodpar:CFFrameDy]"/> + <Constant name="CFFrameHybSterDx" value="[tibmodpar:HybridDx]"/> + <Constant name="KaptonBoxRPhiY" value="[CFFrameRPhiY]+[tibmodpar:CFFrameDy]+[tibmodpar:KaptonBoxDy]"/> + <Constant name="KaptonBoxSterOffset" value="1.*mm"/> + <Constant name="KaptonBoxSterDz" value="([tibmodpar:WaferDy]+0.5*[tibmodule0:KaptonBoxSterOffset])/cos([tibmodpar:StereoAngle])"/> + <Constant name="KaptonBoxSterY" value="[CFFrameSterY]-[tibmodpar:CFFrameDy]-[tibmodpar:KaptonBoxDy]"/> + <Constant name="KaptonBoxHoleSterX" value="cos([tibmodpar:StereoAngle])*(cos([tibmodpar:StereoAngle])*([tibmodule0:KaptonBoxSterDz])-[tibmodpar:KaptonBoxHoleDz])"/> + <Constant name="KaptonBoxHoleSterZ" value="sin([tibmodpar:StereoAngle])*(cos([tibmodpar:StereoAngle])*([tibmodule0:KaptonBoxSterDz])-[tibmodpar:KaptonBoxHoleDz])"/> + <Constant name="HybridRPhiY" value="[CFFrameRPhiY]+[tibmodpar:CFFrameDy]+[tibmodpar:HybridDy]"/> + <Constant name="HybridSterY" value="[CFFrameSterY]-[tibmodpar:CFFrameDy]-[tibmodpar:HybridDy]"/> + <Constant name="PASterDx" value="0.5*63.680*mm"/> + <Constant name="PASterDz1" value="0.5*6.103*mm"/> + <Constant name="PASterDz2" value="[tibmodule0:PASterDz1]+[tibmodule0:PASterDx]*tan([tibmodpar:StereoAngle])"/> + <Constant name="PARPhiY" value="[tibmodule0:SpacerDy]+2*[tibmodpar:CFFrameDy]+[tibmodpar:PADy]"/> + <Constant name="PASterY" value="-[tibmodule0:SpacerDy]-2*[tibmodpar:CFFrameDy]-[tibmodpar:PADy]"/> + <Constant name="PASterX" value="5.927*mm"/> + <Constant name="PASterZ" value="[tibmodpar:ModuleDz]-2*[tibmodpar:HybridDz]-0.5*([tibmodule0:PASterDz1]+[tibmodule0:PASterDz2])"/> + <Constant name="LedgeSterDx" value="0.5*59.993*mm"/> + <Constant name="LedgeSterDy" value="0.5*([tibmodpar:DSModuleDy]-[tibmodule0:SpacerDy]-2.*[tibmodpar:CFFrameDy])"/> + <Constant name="LedgeSterDz1" value="[tibmodule0:LedgeSterDz2]+[tibmodule0:LedgeSterDx]*tan([tibmodpar:StereoAngle])"/> + <Constant name="LedgeSterDz2" value="1.600*mm"/> + <!-- Should be 2.200*mm, used 1.6*mm for weigth matching --> + <Constant name="LedgeSterY" value="-[tibmodpar:DSModuleDy]+[tibmodule0:LedgeSterDy]"/> + <Constant name="LedgeSterZ" value="[tibmodpar:ModuleDz]-0.5*[tibmodule0:LedgeSterDz1]-0.5*[tibmodule0:LedgeSterDz2]"/> + <Constant name="LedgeSideDx" value="0.5*([tibmodule0:SpacerHybDx]-[tibmodpar:HybridDx])"/> + <Constant name="LedgeSideDy" value="0.5*([tibmodpar:DSModuleDy]-[tibmodule0:SpacerDy])"/> + <Constant name="LedgeSideDz" value="12.00*mm"/> + <Constant name="LedgeSideX" value="[tibmodule0:SpacerHybDx]-[tibmodule0:LedgeSideDx]"/> + <Constant name="LedgeSideY" value="-[tibmodpar:DSModuleDy]+[tibmodule0:LedgeSideDy]"/> + <Constant name="LedgeSideZ" value="-[tibmodpar:ModuleDz]+[tibmodule0:LedgeSideDz]"/> + <Constant name="SpacerHybDx" value="[tibmodpar:CFFrameHybRPhiDx]"/> + <Constant name="SpacerHybDz" value="14.4*mm"/> + <Constant name="SpacerSideDx" value="4.00*mm"/> + <Constant name="SpacerSideDz" value="12.1*mm"/> + <Constant name="SpacerSideX" value="[SpacerHybDx]+[SpacerSideDx]"/> + <Constant name="SpacerSideZ" value="[tibmodpar:ModuleDz]-[SpacerSideDz]-25.8*mm"/> + <Constant name="SpacerLedgeDx" value="24.0*mm"/> + <Constant name="SpacerLedgeDz" value="4.00*mm"/> + <Constant name="SpacerLedgeZ" value="[tibmodpar:ModuleDz]-[SpacerLedgeDz]"/> + <Constant name="SpacerHybZ" value="[tibmodpar:ModuleDz]-[SpacerHybDz]"/> + <Constant name="ModCoolY" value="-0.1945*cm"/> + <Constant name="WaferRPhiY" value="1.135*mm"/> + <Constant name="WaferSterY" value="-1.135*mm"/> + </ConstantsSection> + <SolidSection label="tibmodule0.xml"> + <Box name="TIBModCFFrameHybSter" dx="[tibmodule0:CFFrameHybSterDx]" dy="[tibmodpar:CFFrameDy]" dz="[tibmodpar:CFFrameHybDz]"/> + <Trapezoid name="TIBModKaptonBoxSter" dz="[tibmodpar:ModuleDx]" alp1="0*deg" bl1="[tibmodule0:KaptonBoxSterDz]" tl1="[tibmodule0:KaptonBoxSterDz]" h1="[tibmodpar:KaptonBoxDy]" alp2="0*deg" bl2="[tibmodule0:KaptonBoxSterDz]" tl2="[tibmodule0:KaptonBoxSterDz]" h2="[tibmodpar:KaptonBoxDy]" phi="0*deg" theta="-[tibmodpar:StereoAngle]"/> + <Trapezoid name="TIBPA2" dz="[tibmodule0:PASterDx]" alp1="0*deg" bl1="[tibmodule0:PASterDz1]" tl1="[tibmodule0:PASterDz1]" h1="[tibmodpar:PADy]" alp2="0*deg" bl2="[tibmodule0:PASterDz2]" tl2="[tibmodule0:PASterDz2]" h2="[tibmodpar:PADy]" phi="0*deg" theta="-[tibmodpar:TrapSterTheta]"/> + <Trapezoid name="TIBLedgeSter" dz="[LedgeSterDx]" alp1="0*deg" bl1="[LedgeSterDz1]" tl1="[LedgeSterDz1]" h1="[LedgeSterDy]" alp2="0*deg" bl2="[LedgeSterDz2]" tl2="[LedgeSterDz2]" h2="[LedgeSterDy]" phi="0*deg" theta="-[tibmodpar:TrapSterTheta]"/> + <Box name="TIBLedgeSide" dx="[tibmodule0:LedgeSideDx]" dy="[tibmodule0:LedgeSideDy]" dz="[tibmodule0:LedgeSideDz]"/> + <Box name="TIBSpacerLedge" dx="[SpacerLedgeDx]" dy="[SpacerDy]" dz="[SpacerLedgeDz]"/> + <Box name="TIBSpacerHyb" dx="[SpacerHybDx]" dy="[SpacerDy]" dz="[SpacerHybDz]"/> + <Box name="TIBSpacerSide" dx="[SpacerSideDx]" dy="[SpacerDy]" dz="[SpacerSideDz]"/> + </SolidSection> + <LogicalPartSection label="tibmodule0.xml"> + <LogicalPart name="TIBModCFFrameSter" category="unspecified"> + <rSolid name="tibmodpar:TIBModCFFrame"/> + <rMaterial name="trackermaterial:T_CarbonFibreStr"/> + </LogicalPart> + <LogicalPart name="TIBModCFFrameHybSter" category="unspecified"> + <rSolid name="tibmodule0:TIBModCFFrameHybSter"/> + <rMaterial name="trackermaterial:T_CarbonFibreStr"/> + </LogicalPart> + <LogicalPart name="TIBHybrid0" category="unspecified"> + <rSolid name="tibmodpar:TIBHybrid"/> + <rMaterial name="tibtidcommonmaterial:TIBTID_Hybrid"/> + </LogicalPart> + <LogicalPart name="TIBModKaptonBoxSter" category="unspecified"> + <rSolid name="tibmodule0:TIBModKaptonBoxSter"/> + <rMaterial name="tibmaterial:TIB_ModKaptonBox"/> + </LogicalPart> + <LogicalPart name="TIBPA2" category="unspecified"> + <rSolid name="tibmodule0:TIBPA2"/> + <rMaterial name="tibtidcommonmaterial:TIBTID_PA"/> + </LogicalPart> + <LogicalPart name="TIBLedgeSter" category="unspecified"> + <rSolid name="tibmodule0:TIBLedgeSter"/> + <rMaterial name="trackermaterial:T_Aluminium"/> + </LogicalPart> + <LogicalPart name="TIBSpacerLedge" category="unspecified"> + <rSolid name="tibmodule0:TIBSpacerLedge"/> + <rMaterial name="tibmaterial:TIB_Spacer"/> + </LogicalPart> + <LogicalPart name="TIBLedgeSide" category="unspecified"> + <rSolid name="tibmodule0:TIBLedgeSide"/> + <rMaterial name="trackermaterial:T_Aluminium"/> + </LogicalPart> + <LogicalPart name="TIBSpacerHyb" category="unspecified"> + <rSolid name="tibmodule0:TIBSpacerHyb"/> + <rMaterial name="tibmaterial:TIB_Spacer"/> + </LogicalPart> + <LogicalPart name="TIBSpacerSide" category="unspecified"> + <rSolid name="tibmodule0:TIBSpacerSide"/> + <rMaterial name="tibmaterial:TIB_Spacer"/> + </LogicalPart> + <LogicalPart name="TIBWaferRphi0" category="unspecified"> + <rSolid name="tibmodpar:TIBDSWafer"/> + <rMaterial name="materials:Silicon"/> + </LogicalPart> + <LogicalPart name="TIBActiveRphi0" category="unspecified"> + <rSolid name="tibmodpar:TIBDSActive"/> + <rMaterial name="materials:Silicon"/> + </LogicalPart> + <LogicalPart name="TIBWaferSter0" category="unspecified"> + <rSolid name="tibmodpar:TIBDSWafer"/> + <rMaterial name="materials:Silicon"/> + </LogicalPart> + <LogicalPart name="TIBActiveSter0" category="unspecified"> + <rSolid name="tibmodpar:TIBDSActive"/> + <rMaterial name="materials:Silicon"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tibmodule0.xml"> + <PosPart copyNumber="1"> + <rParent name="tibmodule0:TIBWaferRphi0"/> + <rChild name="tibmodule0:TIBActiveRphi0"/> + <Translation x="[zero]" y="[zero]" z="[tracker:BackPlaneDz]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule0:TIBWaferSter0"/> + <rChild name="tibmodule0:TIBActiveSter0"/> + <Translation x="[zero]" y="[zero]" z="[tracker:BackPlaneDz]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule0:TIBModKaptonBoxSter"/> + <rChild name="tibmodpar:TIBModKaptonBoxHole"/> + <Translation x="[KaptonBoxHoleSterX]" y="[zero]" z="[KaptonBoxHoleSterZ]"/> + <rRotation name="tibmodpar:KaptonBoxHoleSterA"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule0:TIBModCFFrameSter"/> + <rChild name="tibmodpar:TIBModCFFrameHole"/> + <rRotation name="tibmodpar:CFFrameHoleSterA"/> + <Translation x="sin([tibmodpar:StereoAngle])*[tibmodpar:CFFrameHoleOffset]" y="[zero]" z="[tibmodpar:CFFrameHoleZ]-cos([tibmodpar:StereoAngle])*[tibmodpar:CFFrameHoleOffset]"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tibmodule0a.xml b/examples/DDCMS/data/tibmodule0a.xml new file mode 100644 index 000000000..14ddc7efc --- /dev/null +++ b/examples/DDCMS/data/tibmodule0a.xml @@ -0,0 +1,114 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tibmodule0a.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <LogicalPartSection label="tibmodule0a.xml"> + <LogicalPart name="TIBModule0A" category="unspecified"> + <rSolid name="tibmodpar:TIBDSModule"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tibmodule0a.xml"> + <PosPart copyNumber="1"> + <rParent name="tibmodule0a:TIBModule0A"/> + <rChild name="tibmodule0:TIBWaferRphi0"/> + <rRotation name="tibmodpar:Rphi"/> + <Translation x="[zero]" y="[tibmodule0:WaferRPhiY]" z="[tibmodpar:WaferZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule0a:TIBModule0A"/> + <rChild name="tibmodule0:TIBWaferSter0"/> + <rRotation name="tibmodpar:SterA"/> + <Translation x="[zero]" y="[tibmodule0:WaferSterY]" z="[tibmodpar:WaferZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule0a:TIBModule0A"/> + <rChild name="tibmodule0:TIBHybrid0"/> + <Translation x="[zero]" y="[tibmodule0:HybridRPhiY]" z="-[tibmodpar:HybridZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tibmodule0a:TIBModule0A"/> + <rChild name="tibmodule0:TIBHybrid0"/> + <Translation x="[zero]" y="[tibmodule0:HybridSterY]" z="-[tibmodpar:HybridZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule0a:TIBModule0A"/> + <rChild name="tibmodpar:TIBPA1"/> + <Translation x="[zero]" y="[tibmodule0:PARPhiY]" z="-[tibmodpar:PAZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule0a:TIBModule0A"/> + <rChild name="tibmodule0:TIBPA2"/> + <rRotation name="tibmodpar:PAA"/> + <Translation x="[tibmodule0:PASterX]" y="[tibmodule0:PASterY]" z="-[tibmodule0:PASterZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule0a:TIBModule0A"/> + <rChild name="tibmodule0:TIBLedgeSter"/> + <rRotation name="tibmodpar:PAA"/> + <Translation x="[zero]" y="[tibmodule0:LedgeSterY]" z="[tibmodule0:LedgeSterZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule0a:TIBModule0A"/> + <rChild name="tibmodule0:TIBLedgeSide"/> + <Translation x="[tibmodule0:LedgeSideX]" y="[tibmodule0:LedgeSideY]" z="[tibmodule0:LedgeSideZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tibmodule0a:TIBModule0A"/> + <rChild name="tibmodule0:TIBLedgeSide"/> + <Translation x="-[tibmodule0:LedgeSideX]" y="[tibmodule0:LedgeSideY]" z="[tibmodule0:LedgeSideZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule0a:TIBModule0A"/> + <rChild name="tibmodule0:TIBSpacerLedge"/> + <Translation x="[zero]" y="[tibmodule0:SpacerY]" z="[tibmodule0:SpacerLedgeZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule0a:TIBModule0A"/> + <rChild name="tibmodule0:TIBSpacerHyb"/> + <Translation x="[zero]" y="[tibmodule0:SpacerY]" z="-[tibmodule0:SpacerHybZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule0a:TIBModule0A"/> + <rChild name="tibmodule0:TIBSpacerSide"/> + <Translation x="[tibmodule0:SpacerSideX]" y="[tibmodule0:SpacerY]" z="-[tibmodule0:SpacerSideZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tibmodule0a:TIBModule0A"/> + <rChild name="tibmodule0:TIBSpacerSide"/> + <Translation x="-[tibmodule0:SpacerSideX]" y="[tibmodule0:SpacerY]" z="-[tibmodule0:SpacerSideZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule0a:TIBModule0A"/> + <rChild name="tibmodpar:TIBModCFFrameRPhi"/> + <Translation x="[zero]" y="[tibmodule0:CFFrameRPhiY]" z="[tibmodpar:CFFrameZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule0a:TIBModule0A"/> + <rChild name="tibmodpar:TIBModCFFrameHybRPhi"/> + <Translation x="[zero]" y="[tibmodule0:CFFrameRPhiY]" z="[tibmodpar:CFFrameHybZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule0a:TIBModule0A"/> + <rChild name="tibmodpar:TIBModKaptonBoxRPhi"/> + <Translation x="[zero]" y="[tibmodule0:KaptonBoxRPhiY]" z="[tibmodpar:KaptonBoxZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule0a:TIBModule0A"/> + <rChild name="tibmodule0:TIBModCFFrameSter"/> + <Translation x="[zero]" y="[tibmodule0:CFFrameSterY]" z="[tibmodpar:CFFrameZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule0a:TIBModule0A"/> + <rChild name="tibmodule0:TIBModCFFrameHybSter"/> + <Translation x="[zero]" y="[tibmodule0:CFFrameSterY]" z="[tibmodpar:CFFrameHybZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule0a:TIBModule0A"/> + <rChild name="tibmodule0:TIBModKaptonBoxSter"/> + <rRotation name="tibmodpar:PAA"/> + <Translation x="[zero]" y="[tibmodule0:KaptonBoxSterY]" z="[tibmodpar:WaferZ]+cos([tibmodpar:StereoAngle])*0.5*[tibmodule0:KaptonBoxSterOffset]"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tibmodule0b.xml b/examples/DDCMS/data/tibmodule0b.xml new file mode 100644 index 000000000..4cb332728 --- /dev/null +++ b/examples/DDCMS/data/tibmodule0b.xml @@ -0,0 +1,115 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tibmodule0b.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <LogicalPartSection label="tibmodule0b.xml"> + <LogicalPart name="TIBModule0B" category="unspecified"> + <rSolid name="tibmodpar:TIBDSModule"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tibmodule0b.xml"> + <PosPart copyNumber="1"> + <rParent name="tibmodule0b:TIBModule0B"/> + <rChild name="tibmodule0:TIBWaferRphi0"/> + <rRotation name="tibmodpar:Rphi"/> + <Translation x="[zero]" y="[tibmodule0:WaferRPhiY]" z="[tibmodpar:WaferZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule0b:TIBModule0B"/> + <rChild name="tibmodule0:TIBWaferSter0"/> + <rRotation name="tibmodpar:SterB"/> + <Translation x="[zero]" y="[tibmodule0:WaferSterY]" z="[tibmodpar:WaferZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule0b:TIBModule0B"/> + <rChild name="tibmodule0:TIBHybrid0"/> + <Translation x="[zero]" y="[tibmodule0:HybridRPhiY]" z="-[tibmodpar:HybridZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tibmodule0b:TIBModule0B"/> + <rChild name="tibmodule0:TIBHybrid0"/> + <Translation x="[zero]" y="[tibmodule0:HybridSterY]" z="-[tibmodpar:HybridZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule0b:TIBModule0B"/> + <rChild name="tibmodpar:TIBPA1"/> + <Translation x="[zero]" y="[tibmodule0:PARPhiY]" z="-[tibmodpar:PAZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tibmodule0b:TIBModule0B"/> + <rChild name="tibmodule0:TIBPA2"/> + <rRotation name="tibmodpar:PAB"/> + <Translation x="-[tibmodule0:PASterX]" y="[tibmodule0:PASterY]" z="-[tibmodule0:PASterZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule0b:TIBModule0B"/> + <rChild name="tibmodule0:TIBLedgeSter"/> + <rRotation name="tibmodpar:PAB"/> + <Translation x="[zero]" y="[tibmodule0:LedgeSterY]" z="[tibmodule0:LedgeSterZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule0b:TIBModule0B"/> + <rChild name="tibmodule0:TIBLedgeSide"/> + <Translation x="[tibmodule0:LedgeSideX]" y="[tibmodule0:LedgeSideY]" z="[tibmodule0:LedgeSideZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tibmodule0b:TIBModule0B"/> + <rChild name="tibmodule0:TIBLedgeSide"/> + <Translation x="-[tibmodule0:LedgeSideX]" y="[tibmodule0:LedgeSideY]" z="[tibmodule0:LedgeSideZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule0b:TIBModule0B"/> + <rChild name="tibmodule0:TIBSpacerLedge"/> + <Translation x="[zero]" y="[tibmodule0:SpacerY]" z="[tibmodule0:SpacerLedgeZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule0b:TIBModule0B"/> + <rChild name="tibmodule0:TIBSpacerHyb"/> + <Translation x="[zero]" y="[tibmodule0:SpacerY]" z="-[tibmodule0:SpacerHybZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule0b:TIBModule0B"/> + <rChild name="tibmodule0:TIBSpacerSide"/> + <Translation x="[tibmodule0:SpacerSideX]" y="[tibmodule0:SpacerY]" z="-[tibmodule0:SpacerSideZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tibmodule0b:TIBModule0B"/> + <rChild name="tibmodule0:TIBSpacerSide"/> + <Translation x="-[tibmodule0:SpacerSideX]" y="[tibmodule0:SpacerY]" z="-[tibmodule0:SpacerSideZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule0b:TIBModule0B"/> + <rChild name="tibmodpar:TIBModCFFrameRPhi"/> + <Translation x="[zero]" y="[tibmodule0:CFFrameRPhiY]" z="[tibmodpar:CFFrameZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule0b:TIBModule0B"/> + <rChild name="tibmodpar:TIBModCFFrameHybRPhi"/> + <Translation x="[zero]" y="[tibmodule0:CFFrameRPhiY]" z="[tibmodpar:CFFrameHybZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule0b:TIBModule0B"/> + <rChild name="tibmodpar:TIBModKaptonBoxRPhi"/> + <Translation x="[zero]" y="[tibmodule0:KaptonBoxRPhiY]" z="[tibmodpar:KaptonBoxZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule0b:TIBModule0B"/> + <rChild name="tibmodule0:TIBModCFFrameSter"/> + <Translation x="[zero]" y="[tibmodule0:CFFrameSterY]" z="[tibmodpar:CFFrameZ]"/> + <rRotation name="tibmodpar:CFFrameSterB"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule0b:TIBModule0B"/> + <rChild name="tibmodule0:TIBModCFFrameHybSter"/> + <Translation x="[zero]" y="[tibmodule0:CFFrameSterY]" z="[tibmodpar:CFFrameHybZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule0b:TIBModule0B"/> + <rChild name="tibmodule0:TIBModKaptonBoxSter"/> + <rRotation name="tibmodpar:PAB"/> + <Translation x="[zero]" y="[tibmodule0:KaptonBoxSterY]" z="[tibmodpar:WaferZ]+cos([tibmodpar:StereoAngle])*0.5*[tibmodule0:KaptonBoxSterOffset]"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tibmodule2.xml b/examples/DDCMS/data/tibmodule2.xml new file mode 100644 index 000000000..814641d60 --- /dev/null +++ b/examples/DDCMS/data/tibmodule2.xml @@ -0,0 +1,67 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tibmodule2.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="HybridY" value="[CFFrameY]+[tibmodpar:CFFrameDy]+[tibmodpar:HybridDy]"/> + <Constant name="PAY" value="[CFFrameY]+[tibmodpar:CFFrameDy]+[tibmodpar:PADy]"/> + <Constant name="CFFrameY" value="-[tibmodpar:SSModuleDy]+[tibmodpar:CFFrameDy]"/> + <Constant name="KaptonBoxY" value="[CFFrameY]+[tibmodpar:CFFrameDy]+[tibmodpar:KaptonBoxDy]"/> + <Constant name="WaferY" value="-0.140*mm"/> + </ConstantsSection> + <LogicalPartSection label="tibmodule2.xml"> + <LogicalPart name="TIBModule2" category="unspecified"> + <rSolid name="tibmodpar:TIBSSModule"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TIBHybrid2" category="unspecified"> + <rSolid name="tibmodpar:TIBHybrid"/> + <rMaterial name="tibtidcommonmaterial:TIBTID_Hybrid"/> + </LogicalPart> + <LogicalPart name="TIBWaferRphi2" category="unspecified"> + <rSolid name="tibmodpar:TIBSSWafer"/> + <rMaterial name="materials:Silicon"/> + </LogicalPart> + <LogicalPart name="TIBActiveRphi2" category="unspecified"> + <rSolid name="tibmodpar:TIBSSActive"/> + <rMaterial name="materials:Silicon"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tibmodule2.xml"> + <PosPart copyNumber="1"> + <rParent name="tibmodule2:TIBWaferRphi2"/> + <rChild name="tibmodule2:TIBActiveRphi2"/> + <Translation x="[zero]" y="[zero]" z="[tracker:BackPlaneDz]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule2:TIBModule2"/> + <rChild name="tibmodule2:TIBWaferRphi2"/> + <rRotation name="tibmodpar:Rphi"/> + <Translation x="[zero]" y="[tibmodule2:WaferY]" z="[tibmodpar:WaferZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule2:TIBModule2"/> + <rChild name="tibmodule2:TIBHybrid2"/> + <Translation x="[zero]" y="[tibmodule2:HybridY]" z="-[tibmodpar:HybridZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule2:TIBModule2"/> + <rChild name="tibmodpar:TIBPA1"/> + <Translation x="[zero]" y="[tibmodule2:PAY]" z="-[tibmodpar:PAZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule2:TIBModule2"/> + <rChild name="tibmodpar:TIBModCFFrameRPhi"/> + <Translation x="[zero]" y="[tibmodule2:CFFrameY]" z="[tibmodpar:CFFrameZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule2:TIBModule2"/> + <rChild name="tibmodpar:TIBModCFFrameHybRPhi"/> + <Translation x="[zero]" y="[tibmodule2:CFFrameY]" z="[tibmodpar:CFFrameHybZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibmodule2:TIBModule2"/> + <rChild name="tibmodpar:TIBModKaptonBoxRPhi"/> + <Translation x="[zero]" y="[tibmodule2:KaptonBoxY]" z="[tibmodpar:KaptonBoxZ]"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tibstring0.xml b/examples/DDCMS/data/tibstring0.xml new file mode 100644 index 000000000..d93ea861e --- /dev/null +++ b/examples/DDCMS/data/tibstring0.xml @@ -0,0 +1,44 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tibstring0.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="StringIntOff" value="36.74*mm"/> + <Constant name="StringExtOff" value="-11.89*mm"/> + <Constant name="StringLoMinL" value="0.5*[tibstringpar:StringL]+[StringIntOff]"/> + <Constant name="StringUpMinL" value="0.5*[tibstringpar:StringL]+[StringExtOff]"/> + <Constant name="StringLoPlsL" value="0.5*[tibstringpar:StringL]-[StringIntOff]"/> + <Constant name="StringUpPlsL" value="0.5*[tibstringpar:StringL]-[StringExtOff]"/> + </ConstantsSection> + <LogicalPartSection label="tibstring0.xml"> + <LogicalPart name="TIBString0Lo1" category="unspecified"> + <rSolid name="tibstringpar:TIBDSString1"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TIBString0Up1" category="unspecified"> + <rSolid name="tibstringpar:TIBDSString1"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tibstring0.xml"> + <PosPart copyNumber="1"> + <rParent name="tibstring0:TIBString0Lo1"/> + <rChild name="tibstring0ll:TIBString0LoMin1"/> + <Translation x="[zero]" y="[zero]" z="-[tibstring0:StringLoPlsL]/2"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring0:TIBString0Lo1"/> + <rChild name="tibstring0lr:TIBString0LoPls1"/> + <Translation x="[zero]" y="[zero]" z="[tibstring0:StringLoMinL]/2"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring0:TIBString0Up1"/> + <rChild name="tibstring0ul:TIBString0UpMin1"/> + <Translation x="[zero]" y="[zero]" z="-[tibstring0:StringUpPlsL]/2"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring0:TIBString0Up1"/> + <rChild name="tibstring0ur:TIBString0UpPls1"/> + <Translation x="[zero]" y="[zero]" z="[tibstring0:StringUpMinL]/2"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tibstring0ll.xml b/examples/DDCMS/data/tibstring0ll.xml new file mode 100644 index 000000000..9ae377973 --- /dev/null +++ b/examples/DDCMS/data/tibstring0ll.xml @@ -0,0 +1,164 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <!-- LAYER 1 INT BW --> + <ConstantsSection label="tibstring0ll.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="FBSign" value="[tibstringpar:BWSign]"/> + <Constant name="IESign" value="[tibstringpar:INT1Sign]"/> + <Constant name="MotherCableL" value="59.91*cm-2*[tibstringpar:MCHeadDz]"/> + <Constant name="ThisStringL" value="[tibstring0:StringLoMinL]"/> + <Constant name="ThatStringL" value="[tibstringpar:StringL]-[ThisStringL]"/> + <Constant name="CoolL" value="0.5*[tibstringpar:StringL]+24.88*mm-2*[tibstringpar:CoolPipeDx]"/> + <Constant name="Det0Z" value="-447.355*mm"/> + <Constant name="Det1Z" value="-242.709*mm"/> + <Constant name="Det2Z" value="-36.9380*mm"/> + <Constant name="ShiftDet" value="-[FBSign]*0.5*[ThatStringL]+[IESign]*[tibmodpar:WaferZ]"/> + <Constant name="ShiftAOHLedge" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibmodpar:AOHLedgeModOffset])"/> + <Constant name="ShiftAOHBox" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibmodpar:AOHBoxDz])"/> + <Constant name="ShiftMCModConn" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibstringpar:MCModConnOffset])"/> + <Constant name="MCHeadZ" value="[FBSign]*(0.5*[ThisStringL]-[tibstringpar:MCHeadDz])"/> + <Constant name="MCZ" value="[FBSign]*(0.5*[ThisStringL]-0.5*[MotherCableL]-2*[tibstringpar:MCHeadDz])"/> + <Constant name="CoolSZ" value="[FBSign]*(0.5*[ThisStringL]-0.5*[CoolL])"/> + <Constant name="CoolWZ" value="[FBSign]*([ThisStringL]/2-[CoolL]-[tibstringpar:CoolPipeDx])"/> + </ConstantsSection> + <SolidSection label="tibstring0ll.xml"> + <Box name="TIBString0LoMinCoolBox" dx="[tibstringpar:CoolBoxDx]" dy="[tibstringpar:CoolBoxDy]" dz="[ThisStringL]/2"/> + <Box name="TIBString0LoMinMainPart" dx="[tibmodpar:ModuleDx]" dy="[tibmodpar:DSModuleDy]" dz="[ThisStringL]/2"/> + <Box name="TIBString0LoMinSideCut" dx="[tibmodpar:DSModuleSideCutDx]" dy="[tibmodpar:DSModuleSideCutDy]" dz="[ThisStringL]/2+[tibmodpar:SideCutExtraZ]"/> + <Box name="TIBString0LoMinCableBox" dx="[tibstringpar:CableBoxDx]" dy="[tibstringpar:DSCableBoxDy]" dz="[ThisStringL]/2"/> + <SubtractionSolid name="TIBString0LoMinLeftCutted"> + <rSolid name="TIBString0LoMinMainPart"/> + <rSolid name="TIBString0LoMinSideCut"/> + <Translation x="-[tibmodpar:DSModuleSideCutX]" y="[tibmodpar:DSModuleSideCutY]" z="0."/> + </SubtractionSolid> + <SubtractionSolid name="TIBString0LoMinModuleBox"> + <rSolid name="TIBString0LoMinLeftCutted"/> + <rSolid name="TIBString0LoMinSideCut"/> + <Translation x="[tibmodpar:DSModuleSideCutX]" y="[tibmodpar:DSModuleSideCutY]" z="0."/> + </SubtractionSolid> + <UnionSolid name="TIBString0LoMinModAndCool"> + <rSolid name="TIBString0LoMinModuleBox"/> + <rSolid name="TIBString0LoMinCoolBox"/> + <Translation x="[zero]" y="[tibstringpar:DSCoolBoxY]" z="[zero]"/> + </UnionSolid> + <UnionSolid name="TIBString0LoMin"> + <rSolid name="TIBString0LoMinModAndCool"/> + <rSolid name="TIBString0LoMinCableBox"/> + <Translation x="[zero]" y="[tibstringpar:DSCableBoxY]" z="[zero]"/> + </UnionSolid> + <Box name="TIBString0LoMinCable" dx="[tibstringpar:MotherCableW]/2" dy="[tibstringpar:MotherCableT]/2" dz="[MotherCableL]/2"/> + <Box name="TIBString0LoMinCoolS" dx="[tibstringpar:CoolPipeDx]" dy="[tibstringpar:CoolPipeDy]" dz="[CoolL]/2"/> + <Box name="TIBString0LoMinCoolW" dx="[tibstringpar:CoolPipeX]+[tibstringpar:CoolPipeDx]" dy="[tibstringpar:CoolPipeDy]" dz="[tibstringpar:CoolPipeDx]"/> + </SolidSection> + <LogicalPartSection label="tibstring0ll.xml"> + <LogicalPart name="TIBString0LoMin1" category="unspecified"> + <rSolid name="TIBString0LoMin"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TIBString0LoMinCable" category="unspecified"> + <rSolid name="TIBString0LoMinCable"/> + <rMaterial name="tibmaterial:TIB_MCable"/> + </LogicalPart> + <LogicalPart name="TIBString0LoMinCoolS" category="unspecified"> + <rSolid name="TIBString0LoMinCoolS"/> + <rMaterial name="tibmaterial:TIB_CoolPipe"/> + </LogicalPart> + <LogicalPart name="TIBString0LoMinCoolW" category="unspecified"> + <rSolid name="TIBString0LoMinCoolW"/> + <rMaterial name="tibmaterial:TIB_CoolPipe"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTrackerZPosAlgo"> + <rParent name="tibstring0ll:TIBString0LoMin1"/> + <String name="ChildName" value="tibmodule0b:TIBModule0B"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftDet]), ([Det1Z]+[ShiftDet]), ([Det2Z]+[ShiftDet]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> + <PosPartSection label="tibstring0ll.xml"> + <PosPart copyNumber="1"> + <rParent name="tibstring0ll:TIBString0LoMin1"/> + <rChild name="tibstringpar:MCHead"/> + <Translation x="[tibstringpar:MCHeadX]" y="[tibstringpar:DSMCHeadY]" z="[MCHeadZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring0ll:TIBString0LoMin1"/> + <rChild name="tibstring0ll:TIBString0LoMinCable"/> + <Translation x="[tibstringpar:MotherCableX]" y="[tibstringpar:DSMotherCableY]" z="[MCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring0ll:TIBString0LoMin1"/> + <rChild name="tibstring0ll:TIBString0LoMinCoolS"/> + <Translation x="-[tibstringpar:CoolPipeX]" y="[tibstringpar:DSCoolPipeY]" z="[CoolSZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tibstring0ll:TIBString0LoMin1"/> + <rChild name="tibstring0ll:TIBString0LoMinCoolS"/> + <Translation x="[tibstringpar:CoolPipeX]" y="[tibstringpar:DSCoolPipeY]" z="[CoolSZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring0ll:TIBString0LoMin1"/> + <rChild name="tibstring0ll:TIBString0LoMinCoolW"/> + <Translation x="[zero]" y="[tibstringpar:DSCoolPipeY]" z="[CoolWZ]"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring0ll:TIBString0LoMin1"/> + <String name="ChildName" value="tibmodpar:TIBModLedgeBox"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:DSLedgeBoxY], [tibmodpar:DSLedgeBoxY], [tibmodpar:DSLedgeBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftDet]), ([Det1Z]+[ShiftDet]), ([Det2Z]+[ShiftDet]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring0ll:TIBString0LoMin1"/> + <String name="ChildName" value="tibmodpar:TIBAOHLedge"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:DSLedgeBoxY], [tibmodpar:DSLedgeBoxY], [tibmodpar:DSLedgeBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftAOHLedge]), ([Det1Z]+[ShiftAOHLedge]), ([Det2Z]+[ShiftAOHLedge]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:180D, tibstringpar:180D, tibstringpar:180D</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring0ll:TIBString0LoMin1"/> + <String name="ChildName" value="tibmodpar:TIBDSAOHBox"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:DSAOHBoxY], [tibmodpar:DSAOHBoxY], [tibmodpar:DSAOHBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftAOHBox]), ([Det1Z]+[ShiftAOHBox]), ([Det2Z]+[ShiftAOHBox]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring0ll:TIBString0LoMin1"/> + <String name="ChildName" value="tibstringpar:DSMCModConn"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [tibstringpar:MCModConnX], [tibstringpar:MCModConnX], [tibstringpar:MCModConnX]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibstringpar:DSMCModConnY], [tibstringpar:DSMCModConnY], [tibstringpar:DSMCModConnY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftMCModConn]), ([Det1Z]+[ShiftMCModConn]), ([Det2Z]+[ShiftMCModConn]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tibstring0lr.xml b/examples/DDCMS/data/tibstring0lr.xml new file mode 100644 index 000000000..2b5d7c43a --- /dev/null +++ b/examples/DDCMS/data/tibstring0lr.xml @@ -0,0 +1,164 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <!-- LAYER 1 INT FW --> + <ConstantsSection label="tibstring0lr.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="FBSign" value="[tibstringpar:FWSign]"/> + <Constant name="IESign" value="[tibstringpar:INT1Sign]"/> + <Constant name="MotherCableL" value="67.55*cm-2*[tibstringpar:MCHeadDz]"/> + <Constant name="ThisStringL" value="[tibstring0:StringLoPlsL]"/> + <Constant name="ThatStringL" value="[tibstringpar:StringL]-[ThisStringL]"/> + <Constant name="CoolL" value="0.5*[tibstringpar:StringL]-39.50*mm-2*[tibstringpar:CoolPipeDx]"/> + <Constant name="Det0Z" value="169.080*mm"/> + <Constant name="Det1Z" value="374.129*mm"/> + <Constant name="Det2Z" value="578.058*mm"/> + <Constant name="ShiftDet" value="-[FBSign]*0.5*[ThatStringL]+[IESign]*[tibmodpar:WaferZ]"/> + <Constant name="ShiftAOHLedge" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibmodpar:AOHLedgeModOffset])"/> + <Constant name="ShiftAOHBox" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibmodpar:AOHBoxDz])"/> + <Constant name="ShiftMCModConn" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibstringpar:MCModConnOffset])"/> + <Constant name="MCHeadZ" value="[FBSign]*(0.5*[ThisStringL]-[tibstringpar:MCHeadDz])"/> + <Constant name="MCZ" value="[FBSign]*(0.5*[ThisStringL]-0.5*[MotherCableL]-2*[tibstringpar:MCHeadDz])"/> + <Constant name="CoolSZ" value="[FBSign]*(0.5*[ThisStringL]-0.5*[CoolL])"/> + <Constant name="CoolWZ" value="[FBSign]*([ThisStringL]/2-[CoolL]-[tibstringpar:CoolPipeDx])"/> + </ConstantsSection> + <SolidSection label="tibstring0lr.xml"> + <Box name="TIBString0LoPlsCoolBox" dx="[tibstringpar:CoolBoxDx]" dy="[tibstringpar:CoolBoxDy]" dz="[ThisStringL]/2"/> + <Box name="TIBString0LoPlsMainPart" dx="[tibmodpar:ModuleDx]" dy="[tibmodpar:DSModuleDy]" dz="[ThisStringL]/2"/> + <Box name="TIBString0LoPlsSideCut" dx="[tibmodpar:DSModuleSideCutDx]" dy="[tibmodpar:DSModuleSideCutDy]" dz="[ThisStringL]/2+[tibmodpar:SideCutExtraZ]"/> + <Box name="TIBString0LoPlsCableBox" dx="[tibstringpar:CableBoxDx]" dy="[tibstringpar:DSCableBoxDy]" dz="[ThisStringL]/2"/> + <SubtractionSolid name="TIBString0LoPlsLeftCutted"> + <rSolid name="TIBString0LoPlsMainPart"/> + <rSolid name="TIBString0LoPlsSideCut"/> + <Translation x="-[tibmodpar:DSModuleSideCutX]" y="[tibmodpar:DSModuleSideCutY]" z="0."/> + </SubtractionSolid> + <SubtractionSolid name="TIBString0LoPlsModuleBox"> + <rSolid name="TIBString0LoPlsLeftCutted"/> + <rSolid name="TIBString0LoPlsSideCut"/> + <Translation x="[tibmodpar:DSModuleSideCutX]" y="[tibmodpar:DSModuleSideCutY]" z="0."/> + </SubtractionSolid> + <UnionSolid name="TIBString0LoPlsModAndCool"> + <rSolid name="TIBString0LoPlsModuleBox"/> + <rSolid name="TIBString0LoPlsCoolBox"/> + <Translation x="[zero]" y="[tibstringpar:DSCoolBoxY]" z="[zero]"/> + </UnionSolid> + <UnionSolid name="TIBString0LoPls"> + <rSolid name="TIBString0LoPlsModAndCool"/> + <rSolid name="TIBString0LoPlsCableBox"/> + <Translation x="[zero]" y="[tibstringpar:DSCableBoxY]" z="[zero]"/> + </UnionSolid> + <Box name="TIBString0LoPlsCable" dx="[tibstringpar:MotherCableW]/2" dy="[tibstringpar:MotherCableT]/2" dz="[MotherCableL]/2"/> + <Box name="TIBString0LoPlsCoolS" dx="[tibstringpar:CoolPipeDx]" dy="[tibstringpar:CoolPipeDy]" dz="[CoolL]/2"/> + <Box name="TIBString0LoPlsCoolW" dx="[tibstringpar:CoolPipeX]+[tibstringpar:CoolPipeDx]" dy="[tibstringpar:CoolPipeDy]" dz="[tibstringpar:CoolPipeDx]"/> + </SolidSection> + <LogicalPartSection label="tibstring0lr.xml"> + <LogicalPart name="TIBString0LoPls1" category="unspecified"> + <rSolid name="TIBString0LoPls"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TIBString0LoPlsCable" category="unspecified"> + <rSolid name="TIBString0LoPlsCable"/> + <rMaterial name="tibmaterial:TIB_MCable"/> + </LogicalPart> + <LogicalPart name="TIBString0LoPlsCoolS" category="unspecified"> + <rSolid name="TIBString0LoPlsCoolS"/> + <rMaterial name="tibmaterial:TIB_CoolPipe"/> + </LogicalPart> + <LogicalPart name="TIBString0LoPlsCoolW" category="unspecified"> + <rSolid name="TIBString0LoPlsCoolW"/> + <rMaterial name="tibmaterial:TIB_CoolPipe"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTrackerZPosAlgo"> + <rParent name="tibstring0lr:TIBString0LoPls1"/> + <String name="ChildName" value="tibmodule0b:TIBModule0B"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftDet]), ([Det1Z]+[ShiftDet]), ([Det2Z]+[ShiftDet]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> + <PosPartSection label="tibstring0lr.xml"> + <PosPart copyNumber="1"> + <rParent name="tibstring0lr:TIBString0LoPls1"/> + <rChild name="tibstringpar:MCHead"/> + <Translation x="[tibstringpar:MCHeadX]" y="[tibstringpar:DSMCHeadY]" z="[MCHeadZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring0lr:TIBString0LoPls1"/> + <rChild name="tibstring0lr:TIBString0LoPlsCable"/> + <Translation x="[tibstringpar:MotherCableX]" y="[tibstringpar:DSMotherCableY]" z="[MCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring0lr:TIBString0LoPls1"/> + <rChild name="tibstring0lr:TIBString0LoPlsCoolS"/> + <Translation x="-[tibstringpar:CoolPipeX]" y="[tibstringpar:DSCoolPipeY]" z="[CoolSZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tibstring0lr:TIBString0LoPls1"/> + <rChild name="tibstring0lr:TIBString0LoPlsCoolS"/> + <Translation x="[tibstringpar:CoolPipeX]" y="[tibstringpar:DSCoolPipeY]" z="[CoolSZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring0lr:TIBString0LoPls1"/> + <rChild name="tibstring0lr:TIBString0LoPlsCoolW"/> + <Translation x="[zero]" y="[tibstringpar:DSCoolPipeY]" z="[CoolWZ]"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring0lr:TIBString0LoPls1"/> + <String name="ChildName" value="tibmodpar:TIBModLedgeBox"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:DSLedgeBoxY], [tibmodpar:DSLedgeBoxY], [tibmodpar:DSLedgeBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftDet]), ([Det1Z]+[ShiftDet]), ([Det2Z]+[ShiftDet]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring0lr:TIBString0LoPls1"/> + <String name="ChildName" value="tibmodpar:TIBAOHLedge"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:DSLedgeBoxY], [tibmodpar:DSLedgeBoxY], [tibmodpar:DSLedgeBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftAOHLedge]), ([Det1Z]+[ShiftAOHLedge]), ([Det2Z]+[ShiftAOHLedge]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring0lr:TIBString0LoPls1"/> + <String name="ChildName" value="tibmodpar:TIBDSAOHBox"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:DSAOHBoxY], [tibmodpar:DSAOHBoxY], [tibmodpar:DSAOHBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftAOHBox]), ([Det1Z]+[ShiftAOHBox]), ([Det2Z]+[ShiftAOHBox]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring0lr:TIBString0LoPls1"/> + <String name="ChildName" value="tibstringpar:DSMCModConn"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [tibstringpar:MCModConnX], [tibstringpar:MCModConnX], [tibstringpar:MCModConnX]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibstringpar:DSMCModConnY], [tibstringpar:DSMCModConnY], [tibstringpar:DSMCModConnY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftMCModConn]), ([Det1Z]+[ShiftMCModConn]), ([Det2Z]+[ShiftMCModConn]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tibstring0ul.xml b/examples/DDCMS/data/tibstring0ul.xml new file mode 100644 index 000000000..7195346cd --- /dev/null +++ b/examples/DDCMS/data/tibstring0ul.xml @@ -0,0 +1,164 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <!-- LAYER 1 EXT BW --> + <ConstantsSection label="tibstring0ul.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="FBSign" value="[tibstringpar:BWSign]"/> + <Constant name="IESign" value="[tibstringpar:EXT1Sign]"/> + <Constant name="MotherCableL" value="68.84*cm-2*[tibstringpar:MCHeadDz]"/> + <Constant name="ThisStringL" value="[tibstring0:StringUpMinL]"/> + <Constant name="ThatStringL" value="[tibstringpar:StringL]-[ThisStringL]"/> + <Constant name="CoolL" value="0.5*[tibstringpar:StringL]-28.77*mm-2*[tibstringpar:CoolPipeDx]"/> + <Constant name="Det0Z" value="-605.456*mm"/> + <Constant name="Det1Z" value="-394.872*mm"/> + <Constant name="Det2Z" value="-160.198*mm"/> + <Constant name="ShiftDet" value="-[FBSign]*0.5*[ThatStringL]+[IESign]*[tibmodpar:WaferZ]"/> + <Constant name="ShiftAOHLedge" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibmodpar:AOHLedgeModOffset])"/> + <Constant name="ShiftAOHBox" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibmodpar:AOHBoxDz])"/> + <Constant name="ShiftMCModConn" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibstringpar:MCModConnOffset])"/> + <Constant name="MCHeadZ" value="[FBSign]*(0.5*[ThisStringL]-[tibstringpar:MCHeadDz])"/> + <Constant name="MCZ" value="[FBSign]*(0.5*[ThisStringL]-0.5*[MotherCableL]-2*[tibstringpar:MCHeadDz])"/> + <Constant name="CoolSZ" value="[FBSign]*(0.5*[ThisStringL]-0.5*[CoolL])"/> + <Constant name="CoolWZ" value="[FBSign]*([ThisStringL]/2-[CoolL]-[tibstringpar:CoolPipeDx])"/> + </ConstantsSection> + <SolidSection label="tibstring0ul.xml"> + <Box name="TIBString0UpMinCoolBox" dx="[tibstringpar:CoolBoxDx]" dy="[tibstringpar:CoolBoxDy]" dz="[ThisStringL]/2"/> + <Box name="TIBString0UpMinMainPart" dx="[tibmodpar:ModuleDx]" dy="[tibmodpar:DSModuleDy]" dz="[ThisStringL]/2"/> + <Box name="TIBString0UpMinSideCut" dx="[tibmodpar:DSModuleSideCutDx]" dy="[tibmodpar:DSModuleSideCutDy]" dz="[ThisStringL]/2+[tibmodpar:SideCutExtraZ]"/> + <Box name="TIBString0UpMinCableBox" dx="[tibstringpar:CableBoxDx]" dy="[tibstringpar:DSCableBoxDy]" dz="[ThisStringL]/2"/> + <SubtractionSolid name="TIBString0UpMinLeftCutted"> + <rSolid name="TIBString0UpMinMainPart"/> + <rSolid name="TIBString0UpMinSideCut"/> + <Translation x="-[tibmodpar:DSModuleSideCutX]" y="[tibmodpar:DSModuleSideCutY]" z="0."/> + </SubtractionSolid> + <SubtractionSolid name="TIBString0UpMinModuleBox"> + <rSolid name="TIBString0UpMinLeftCutted"/> + <rSolid name="TIBString0UpMinSideCut"/> + <Translation x="[tibmodpar:DSModuleSideCutX]" y="[tibmodpar:DSModuleSideCutY]" z="0."/> + </SubtractionSolid> + <UnionSolid name="TIBString0UpMinModAndCool"> + <rSolid name="TIBString0UpMinModuleBox"/> + <rSolid name="TIBString0UpMinCoolBox"/> + <Translation x="[zero]" y="[tibstringpar:DSCoolBoxY]" z="[zero]"/> + </UnionSolid> + <UnionSolid name="TIBString0UpMin"> + <rSolid name="TIBString0UpMinModAndCool"/> + <rSolid name="TIBString0UpMinCableBox"/> + <Translation x="[zero]" y="[tibstringpar:DSCableBoxY]" z="[zero]"/> + </UnionSolid> + <Box name="TIBString0UpMinCable" dx="[tibstringpar:MotherCableW]/2" dy="[tibstringpar:MotherCableT]/2" dz="[MotherCableL]/2"/> + <Box name="TIBString0UpMinCoolS" dx="[tibstringpar:CoolPipeDx]" dy="[tibstringpar:CoolPipeDy]" dz="[CoolL]/2"/> + <Box name="TIBString0UpMinCoolW" dx="[tibstringpar:CoolPipeX]+[tibstringpar:CoolPipeDx]" dy="[tibstringpar:CoolPipeDy]" dz="[tibstringpar:CoolPipeDx]"/> + </SolidSection> + <LogicalPartSection label="tibstring0ul.xml"> + <LogicalPart name="TIBString0UpMin1" category="unspecified"> + <rSolid name="TIBString0UpMin"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TIBString0UpMinCable" category="unspecified"> + <rSolid name="TIBString0UpMinCable"/> + <rMaterial name="tibmaterial:TIB_MCable"/> + </LogicalPart> + <LogicalPart name="TIBString0UpMinCoolS" category="unspecified"> + <rSolid name="TIBString0UpMinCoolS"/> + <rMaterial name="tibmaterial:TIB_CoolPipe"/> + </LogicalPart> + <LogicalPart name="TIBString0UpMinCoolW" category="unspecified"> + <rSolid name="TIBString0UpMinCoolW"/> + <rMaterial name="tibmaterial:TIB_CoolPipe"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTrackerZPosAlgo"> + <rParent name="tibstring0ul:TIBString0UpMin1"/> + <String name="ChildName" value="tibmodule0a:TIBModule0A"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftDet]), ([Det1Z]+[ShiftDet]), ([Det2Z]+[ShiftDet]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:180D, tibstringpar:180D, tibstringpar:180D</Vector> + </Algorithm> + <PosPartSection label="tibstring0ul.xml"> + <PosPart copyNumber="1"> + <rParent name="tibstring0ul:TIBString0UpMin1"/> + <rChild name="tibstringpar:MCHead"/> + <Translation x="[tibstringpar:MCHeadX]" y="[tibstringpar:DSMCHeadY]" z="[MCHeadZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring0ul:TIBString0UpMin1"/> + <rChild name="tibstring0ul:TIBString0UpMinCable"/> + <Translation x="[tibstringpar:MotherCableX]" y="[tibstringpar:DSMotherCableY]" z="[MCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring0ul:TIBString0UpMin1"/> + <rChild name="tibstring0ul:TIBString0UpMinCoolS"/> + <Translation x="-[tibstringpar:CoolPipeX]" y="[tibstringpar:DSCoolPipeY]" z="[CoolSZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tibstring0ul:TIBString0UpMin1"/> + <rChild name="tibstring0ul:TIBString0UpMinCoolS"/> + <Translation x="[tibstringpar:CoolPipeX]" y="[tibstringpar:DSCoolPipeY]" z="[CoolSZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring0ul:TIBString0UpMin1"/> + <rChild name="tibstring0ul:TIBString0UpMinCoolW"/> + <Translation x="[zero]" y="[tibstringpar:DSCoolPipeY]" z="[CoolWZ]"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring0ul:TIBString0UpMin1"/> + <String name="ChildName" value="tibmodpar:TIBModLedgeBox"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:DSLedgeBoxY], [tibmodpar:DSLedgeBoxY], [tibmodpar:DSLedgeBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftDet]), ([Det1Z]+[ShiftDet]), ([Det2Z]+[ShiftDet]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:180D, tibstringpar:180D, tibstringpar:180D</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring0ul:TIBString0UpMin1"/> + <String name="ChildName" value="tibmodpar:TIBAOHLedge"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:DSLedgeBoxY], [tibmodpar:DSLedgeBoxY], [tibmodpar:DSLedgeBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftAOHLedge]), ([Det1Z]+[ShiftAOHLedge]), ([Det2Z]+[ShiftAOHLedge]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:180D, tibstringpar:180D, tibstringpar:180D</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring0ul:TIBString0UpMin1"/> + <String name="ChildName" value="tibmodpar:TIBDSAOHBox"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:DSAOHBoxY], [tibmodpar:DSAOHBoxY], [tibmodpar:DSAOHBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftAOHBox]), ([Det1Z]+[ShiftAOHBox]), ([Det2Z]+[ShiftAOHBox]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:180D, tibstringpar:180D, tibstringpar:180D</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring0ul:TIBString0UpMin1"/> + <String name="ChildName" value="tibstringpar:DSMCModConn"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [tibstringpar:MCModConnX], [tibstringpar:MCModConnX], [tibstringpar:MCModConnX]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibstringpar:DSMCModConnY], [tibstringpar:DSMCModConnY], [tibstringpar:DSMCModConnY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftMCModConn]), ([Det1Z]+[ShiftMCModConn]), ([Det2Z]+[ShiftMCModConn]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tibstring0ur.xml b/examples/DDCMS/data/tibstring0ur.xml new file mode 100644 index 000000000..8cf34eee3 --- /dev/null +++ b/examples/DDCMS/data/tibstring0ur.xml @@ -0,0 +1,164 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <!-- LAYER 1 EXT FW --> + <ConstantsSection label="tibstring0ur.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="FBSign" value="[tibstringpar:FWSign]"/> + <Constant name="IESign" value="[tibstringpar:EXT1Sign]"/> + <Constant name="MotherCableL" value="56.02*cm-2*[tibstringpar:MCHeadDz]"/> + <Constant name="ThisStringL" value="[tibstring0:StringUpPlsL]"/> + <Constant name="ThatStringL" value="[tibstringpar:StringL]-[ThisStringL]"/> + <Constant name="CoolL" value="0.5*[tibstringpar:StringL]-14.07*mm-2*[tibstringpar:CoolPipeDx]"/> + <Constant name="Det0Z" value="75.7660*mm"/> + <Constant name="Det1Z" value="310.901*mm"/> + <Constant name="Det2Z" value="544.753*mm"/> + <Constant name="ShiftDet" value="-[FBSign]*0.5*[ThatStringL]+[IESign]*[tibmodpar:WaferZ]"/> + <Constant name="ShiftAOHLedge" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibmodpar:AOHLedgeModOffset])"/> + <Constant name="ShiftAOHBox" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibmodpar:AOHBoxDz])"/> + <Constant name="ShiftMCModConn" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibstringpar:MCModConnOffset])"/> + <Constant name="MCHeadZ" value="[FBSign]*(0.5*[ThisStringL]-[tibstringpar:MCHeadDz])"/> + <Constant name="MCZ" value="[FBSign]*(0.5*[ThisStringL]-0.5*[MotherCableL]-2*[tibstringpar:MCHeadDz])"/> + <Constant name="CoolSZ" value="[FBSign]*(0.5*[ThisStringL]-0.5*[CoolL])"/> + <Constant name="CoolWZ" value="[FBSign]*([ThisStringL]/2-[CoolL]-[tibstringpar:CoolPipeDx])"/> + </ConstantsSection> + <SolidSection label="tibstring0ur.xml"> + <Box name="TIBString0UpPlsCoolBox" dx="[tibstringpar:CoolBoxDx]" dy="[tibstringpar:CoolBoxDy]" dz="[ThisStringL]/2"/> + <Box name="TIBString0UpPlsMainPart" dx="[tibmodpar:ModuleDx]" dy="[tibmodpar:DSModuleDy]" dz="[ThisStringL]/2"/> + <Box name="TIBString0UpPlsSideCut" dx="[tibmodpar:DSModuleSideCutDx]" dy="[tibmodpar:DSModuleSideCutDy]" dz="[ThisStringL]/2+[tibmodpar:SideCutExtraZ]"/> + <Box name="TIBString0UpPlsCableBox" dx="[tibstringpar:CableBoxDx]" dy="[tibstringpar:DSCableBoxDy]" dz="[ThisStringL]/2"/> + <SubtractionSolid name="TIBString0UpPlsLeftCutted"> + <rSolid name="TIBString0UpPlsMainPart"/> + <rSolid name="TIBString0UpPlsSideCut"/> + <Translation x="-[tibmodpar:DSModuleSideCutX]" y="[tibmodpar:DSModuleSideCutY]" z="0."/> + </SubtractionSolid> + <SubtractionSolid name="TIBString0UpPlsModuleBox"> + <rSolid name="TIBString0UpPlsLeftCutted"/> + <rSolid name="TIBString0UpPlsSideCut"/> + <Translation x="[tibmodpar:DSModuleSideCutX]" y="[tibmodpar:DSModuleSideCutY]" z="0."/> + </SubtractionSolid> + <UnionSolid name="TIBString0UpPlsModAndCool"> + <rSolid name="TIBString0UpPlsModuleBox"/> + <rSolid name="TIBString0UpPlsCoolBox"/> + <Translation x="[zero]" y="[tibstringpar:DSCoolBoxY]" z="[zero]"/> + </UnionSolid> + <UnionSolid name="TIBString0UpPls"> + <rSolid name="TIBString0UpPlsModAndCool"/> + <rSolid name="TIBString0UpPlsCableBox"/> + <Translation x="[zero]" y="[tibstringpar:DSCableBoxY]" z="[zero]"/> + </UnionSolid> + <Box name="TIBString0UpPlsCable" dx="[tibstringpar:MotherCableW]/2" dy="[tibstringpar:MotherCableT]/2" dz="[MotherCableL]/2"/> + <Box name="TIBString0UpPlsCoolS" dx="[tibstringpar:CoolPipeDx]" dy="[tibstringpar:CoolPipeDy]" dz="[CoolL]/2"/> + <Box name="TIBString0UpPlsCoolW" dx="[tibstringpar:CoolPipeX]+[tibstringpar:CoolPipeDx]" dy="[tibstringpar:CoolPipeDy]" dz="[tibstringpar:CoolPipeDx]"/> + </SolidSection> + <LogicalPartSection label="tibstring0ur.xml"> + <LogicalPart name="TIBString0UpPls1" category="unspecified"> + <rSolid name="TIBString0UpPls"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TIBString0UpPlsCable" category="unspecified"> + <rSolid name="TIBString0UpPlsCable"/> + <rMaterial name="tibmaterial:TIB_MCable"/> + </LogicalPart> + <LogicalPart name="TIBString0UpPlsCoolS" category="unspecified"> + <rSolid name="TIBString0UpPlsCoolS"/> + <rMaterial name="tibmaterial:TIB_CoolPipe"/> + </LogicalPart> + <LogicalPart name="TIBString0UpPlsCoolW" category="unspecified"> + <rSolid name="TIBString0UpPlsCoolW"/> + <rMaterial name="tibmaterial:TIB_CoolPipe"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTrackerZPosAlgo"> + <rParent name="tibstring0ur:TIBString0UpPls1"/> + <String name="ChildName" value="tibmodule0a:TIBModule0A"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftDet]), ([Det1Z]+[ShiftDet]), ([Det2Z]+[ShiftDet]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:180D, tibstringpar:180D, tibstringpar:180D</Vector> + </Algorithm> + <PosPartSection label="tibstring0ur.xml"> + <PosPart copyNumber="1"> + <rParent name="tibstring0ur:TIBString0UpPls1"/> + <rChild name="tibstringpar:MCHead"/> + <Translation x="[tibstringpar:MCHeadX]" y="[tibstringpar:DSMCHeadY]" z="[MCHeadZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring0ur:TIBString0UpPls1"/> + <rChild name="tibstring0ur:TIBString0UpPlsCable"/> + <Translation x="[tibstringpar:MotherCableX]" y="[tibstringpar:DSMotherCableY]" z="[MCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring0ur:TIBString0UpPls1"/> + <rChild name="tibstring0ur:TIBString0UpPlsCoolS"/> + <Translation x="-[tibstringpar:CoolPipeX]" y="[tibstringpar:DSCoolPipeY]" z="[CoolSZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tibstring0ur:TIBString0UpPls1"/> + <rChild name="tibstring0ur:TIBString0UpPlsCoolS"/> + <Translation x="[tibstringpar:CoolPipeX]" y="[tibstringpar:DSCoolPipeY]" z="[CoolSZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring0ur:TIBString0UpPls1"/> + <rChild name="tibstring0ur:TIBString0UpPlsCoolW"/> + <Translation x="[zero]" y="[tibstringpar:DSCoolPipeY]" z="[CoolWZ]"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring0ur:TIBString0UpPls1"/> + <String name="ChildName" value="tibmodpar:TIBModLedgeBox"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:DSLedgeBoxY], [tibmodpar:DSLedgeBoxY], [tibmodpar:DSLedgeBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftDet]), ([Det1Z]+[ShiftDet]), ([Det2Z]+[ShiftDet]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:180D, tibstringpar:180D, tibstringpar:180D</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring0ur:TIBString0UpPls1"/> + <String name="ChildName" value="tibmodpar:TIBAOHLedge"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:DSLedgeBoxY], [tibmodpar:DSLedgeBoxY], [tibmodpar:DSLedgeBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftAOHLedge]), ([Det1Z]+[ShiftAOHLedge]), ([Det2Z]+[ShiftAOHLedge]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring0ur:TIBString0UpPls1"/> + <String name="ChildName" value="tibmodpar:TIBDSAOHBox"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:DSAOHBoxY], [tibmodpar:DSAOHBoxY], [tibmodpar:DSAOHBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftAOHBox]), ([Det1Z]+[ShiftAOHBox]), ([Det2Z]+[ShiftAOHBox]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:180D, tibstringpar:180D, tibstringpar:180D</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring0ur:TIBString0UpPls1"/> + <String name="ChildName" value="tibstringpar:DSMCModConn"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [tibstringpar:MCModConnX], [tibstringpar:MCModConnX], [tibstringpar:MCModConnX]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibstringpar:DSMCModConnY], [tibstringpar:DSMCModConnY], [tibstringpar:DSMCModConnY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftMCModConn]), ([Det1Z]+[ShiftMCModConn]), ([Det2Z]+[ShiftMCModConn]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tibstring1.xml b/examples/DDCMS/data/tibstring1.xml new file mode 100644 index 000000000..6f1fa9b2e --- /dev/null +++ b/examples/DDCMS/data/tibstring1.xml @@ -0,0 +1,44 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tibstring1.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="StringIntOff" value="-45.15*mm"/> + <Constant name="StringExtOff" value="-2.35*mm"/> + <Constant name="StringLoMinL" value="0.5*[tibstringpar:StringL]+[StringIntOff]"/> + <Constant name="StringUpMinL" value="0.5*[tibstringpar:StringL]+[StringExtOff]"/> + <Constant name="StringLoPlsL" value="0.5*[tibstringpar:StringL]-[StringIntOff]"/> + <Constant name="StringUpPlsL" value="0.5*[tibstringpar:StringL]-[StringExtOff]"/> + </ConstantsSection> + <LogicalPartSection label="tibstring1.xml"> + <LogicalPart name="TIBString1Lo1" category="unspecified"> + <rSolid name="tibstringpar:TIBDSString1"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TIBString1Up1" category="unspecified"> + <rSolid name="tibstringpar:TIBDSString1"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tibstring1.xml"> + <PosPart copyNumber="1"> + <rParent name="tibstring1:TIBString1Lo1"/> + <rChild name="tibstring1ll:TIBString1LoMin1"/> + <Translation x="[zero]" y="[zero]" z="-[tibstring1:StringLoPlsL]/2"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring1:TIBString1Lo1"/> + <rChild name="tibstring1lr:TIBString1LoPls1"/> + <Translation x="[zero]" y="[zero]" z="[tibstring1:StringLoMinL]/2"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring1:TIBString1Up1"/> + <rChild name="tibstring1ul:TIBString1UpMin1"/> + <Translation x="[zero]" y="[zero]" z="-[tibstring1:StringUpPlsL]/2"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring1:TIBString1Up1"/> + <rChild name="tibstring1ur:TIBString1UpPls1"/> + <Translation x="[zero]" y="[zero]" z="[tibstring1:StringUpMinL]/2"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tibstring1ll.xml b/examples/DDCMS/data/tibstring1ll.xml new file mode 100644 index 000000000..b1aa28171 --- /dev/null +++ b/examples/DDCMS/data/tibstring1ll.xml @@ -0,0 +1,164 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <!-- LAYER 2 INT BW --> + <ConstantsSection label="tibstring1ll.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="FBSign" value="[tibstringpar:BWSign]"/> + <Constant name="IESign" value="[tibstringpar:INT2Sign]"/> + <Constant name="MotherCableL" value="66.84*cm-2*[tibstringpar:MCHeadDz]"/> + <Constant name="ThisStringL" value="[tibstring1:StringLoMinL]"/> + <Constant name="ThatStringL" value="[tibstringpar:StringL]-[ThisStringL]"/> + <Constant name="CoolL" value="0.5*[tibstringpar:StringL]-49.14*mm-2*[tibstringpar:CoolPipeDx]"/> + <Constant name="Det0Z" value="-597.651*mm"/> + <Constant name="Det1Z" value="-389.269*mm"/> + <Constant name="Det2Z" value="-180.228*mm"/> + <Constant name="ShiftDet" value="-[FBSign]*0.5*[ThatStringL]+[IESign]*[tibmodpar:WaferZ]"/> + <Constant name="ShiftAOHLedge" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibmodpar:AOHLedgeModOffset])"/> + <Constant name="ShiftAOHBox" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibmodpar:AOHBoxDz])"/> + <Constant name="ShiftMCModConn" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibstringpar:MCModConnOffset])"/> + <Constant name="MCHeadZ" value="[FBSign]*(0.5*[ThisStringL]-[tibstringpar:MCHeadDz])"/> + <Constant name="MCZ" value="[FBSign]*(0.5*[ThisStringL]-0.5*[MotherCableL]-2*[tibstringpar:MCHeadDz])"/> + <Constant name="CoolSZ" value="[FBSign]*(0.5*[ThisStringL]-0.5*[CoolL])"/> + <Constant name="CoolWZ" value="[FBSign]*([ThisStringL]/2-[CoolL]-[tibstringpar:CoolPipeDx])"/> + </ConstantsSection> + <SolidSection label="tibstring1ll.xml"> + <Box name="TIBString1LoMinCoolBox" dx="[tibstringpar:CoolBoxDx]" dy="[tibstringpar:CoolBoxDy]" dz="[ThisStringL]/2"/> + <Box name="TIBString1LoMinMainPart" dx="[tibmodpar:ModuleDx]" dy="[tibmodpar:DSModuleDy]" dz="[ThisStringL]/2"/> + <Box name="TIBString1LoMinSideCut" dx="[tibmodpar:DSModuleSideCutDx]" dy="[tibmodpar:DSModuleSideCutDy]" dz="[ThisStringL]/2+[tibmodpar:SideCutExtraZ]"/> + <Box name="TIBString1LoMinCableBox" dx="[tibstringpar:CableBoxDx]" dy="[tibstringpar:DSCableBoxDy]" dz="[ThisStringL]/2"/> + <SubtractionSolid name="TIBString1LoMinLeftCutted"> + <rSolid name="TIBString1LoMinMainPart"/> + <rSolid name="TIBString1LoMinSideCut"/> + <Translation x="-[tibmodpar:DSModuleSideCutX]" y="[tibmodpar:DSModuleSideCutY]" z="0."/> + </SubtractionSolid> + <SubtractionSolid name="TIBString1LoMinModuleBox"> + <rSolid name="TIBString1LoMinLeftCutted"/> + <rSolid name="TIBString1LoMinSideCut"/> + <Translation x="[tibmodpar:DSModuleSideCutX]" y="[tibmodpar:DSModuleSideCutY]" z="0."/> + </SubtractionSolid> + <UnionSolid name="TIBString1LoMinModAndCool"> + <rSolid name="TIBString1LoMinModuleBox"/> + <rSolid name="TIBString1LoMinCoolBox"/> + <Translation x="[zero]" y="[tibstringpar:DSCoolBoxY]" z="[zero]"/> + </UnionSolid> + <UnionSolid name="TIBString1LoMin"> + <rSolid name="TIBString1LoMinModAndCool"/> + <rSolid name="TIBString1LoMinCableBox"/> + <Translation x="[zero]" y="[tibstringpar:DSCableBoxY]" z="[zero]"/> + </UnionSolid> + <Box name="TIBString1LoMinCable" dx="[tibstringpar:MotherCableW]/2" dy="[tibstringpar:MotherCableT]/2" dz="[MotherCableL]/2"/> + <Box name="TIBString1LoMinCoolS" dx="[tibstringpar:CoolPipeDx]" dy="[tibstringpar:CoolPipeDy]" dz="[CoolL]/2"/> + <Box name="TIBString1LoMinCoolW" dx="[tibstringpar:CoolPipeX]+[tibstringpar:CoolPipeDx]" dy="[tibstringpar:CoolPipeDy]" dz="[tibstringpar:CoolPipeDx]"/> + </SolidSection> + <LogicalPartSection label="tibstring1ll.xml"> + <LogicalPart name="TIBString1LoMin1" category="unspecified"> + <rSolid name="TIBString1LoMin"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TIBString1LoMinCable" category="unspecified"> + <rSolid name="TIBString1LoMinCable"/> + <rMaterial name="tibmaterial:TIB_MCable"/> + </LogicalPart> + <LogicalPart name="TIBString1LoMinCoolS" category="unspecified"> + <rSolid name="TIBString1LoMinCoolS"/> + <rMaterial name="tibmaterial:TIB_CoolPipe"/> + </LogicalPart> + <LogicalPart name="TIBString1LoMinCoolW" category="unspecified"> + <rSolid name="TIBString1LoMinCoolW"/> + <rMaterial name="tibmaterial:TIB_CoolPipe"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTrackerZPosAlgo"> + <rParent name="tibstring1ll:TIBString1LoMin1"/> + <String name="ChildName" value="tibmodule0a:TIBModule0A"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftDet]), ([Det1Z]+[ShiftDet]), ([Det2Z]+[ShiftDet]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:180D, tibstringpar:180D, tibstringpar:180D</Vector> + </Algorithm> + <PosPartSection label="tibstring1ll.xml"> + <PosPart copyNumber="1"> + <rParent name="tibstring1ll:TIBString1LoMin1"/> + <rChild name="tibstringpar:MCHead"/> + <Translation x="[tibstringpar:MCHeadX]" y="[tibstringpar:DSMCHeadY]" z="[MCHeadZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring1ll:TIBString1LoMin1"/> + <rChild name="tibstring1ll:TIBString1LoMinCable"/> + <Translation x="[tibstringpar:MotherCableX]" y="[tibstringpar:DSMotherCableY]" z="[MCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring1ll:TIBString1LoMin1"/> + <rChild name="tibstring1ll:TIBString1LoMinCoolS"/> + <Translation x="-[tibstringpar:CoolPipeX]" y="[tibstringpar:DSCoolPipeY]" z="[CoolSZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tibstring1ll:TIBString1LoMin1"/> + <rChild name="tibstring1ll:TIBString1LoMinCoolS"/> + <Translation x="[tibstringpar:CoolPipeX]" y="[tibstringpar:DSCoolPipeY]" z="[CoolSZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring1ll:TIBString1LoMin1"/> + <rChild name="tibstring1ll:TIBString1LoMinCoolW"/> + <Translation x="[zero]" y="[tibstringpar:DSCoolPipeY]" z="[CoolWZ]"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring1ll:TIBString1LoMin1"/> + <String name="ChildName" value="tibmodpar:TIBModLedgeBox"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:DSLedgeBoxY], [tibmodpar:DSLedgeBoxY], [tibmodpar:DSLedgeBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftDet]), ([Det1Z]+[ShiftDet]), ([Det2Z]+[ShiftDet]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:180D, tibstringpar:180D, tibstringpar:180D</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring1ll:TIBString1LoMin1"/> + <String name="ChildName" value="tibmodpar:TIBAOHLedge"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:DSLedgeBoxY], [tibmodpar:DSLedgeBoxY], [tibmodpar:DSLedgeBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftAOHLedge]), ([Det1Z]+[ShiftAOHLedge]), ([Det2Z]+[ShiftAOHLedge]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:180D, tibstringpar:180D, tibstringpar:180D</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring1ll:TIBString1LoMin1"/> + <String name="ChildName" value="tibmodpar:TIBDSAOHBox"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:DSAOHBoxY], [tibmodpar:DSAOHBoxY], [tibmodpar:DSAOHBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftAOHBox]), ([Det1Z]+[ShiftAOHBox]), ([Det2Z]+[ShiftAOHBox]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:180D, tibstringpar:180D, tibstringpar:180D</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring1ll:TIBString1LoMin1"/> + <String name="ChildName" value="tibstringpar:DSMCModConn"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [tibstringpar:MCModConnX], [tibstringpar:MCModConnX], [tibstringpar:MCModConnX]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibstringpar:DSMCModConnY], [tibstringpar:DSMCModConnY], [tibstringpar:DSMCModConnY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftMCModConn]), ([Det1Z]+[ShiftMCModConn]), ([Det2Z]+[ShiftMCModConn]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tibstring1lr.xml b/examples/DDCMS/data/tibstring1lr.xml new file mode 100644 index 000000000..74409ee8d --- /dev/null +++ b/examples/DDCMS/data/tibstring1lr.xml @@ -0,0 +1,164 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <!-- LAYER 2 INT FW --> + <ConstantsSection label="tibstring1lr.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="FBSign" value="[tibstringpar:FWSign]"/> + <Constant name="IESign" value="[tibstringpar:INT2Sign]"/> + <Constant name="MotherCableL" value="60.68*cm-2*[tibstringpar:MCHeadDz]"/> + <Constant name="ThisStringL" value="[tibstring1:StringLoPlsL]"/> + <Constant name="ThatStringL" value="[tibstringpar:StringL]-[ThisStringL]"/> + <Constant name="CoolL" value="0.5*[tibstringpar:StringL]+32.44*mm-2*[tibstringpar:CoolPipeDx]"/> + <Constant name="Det0Z" value="29.3600*mm"/> + <Constant name="Det1Z" value="238.876*mm"/> + <Constant name="Det2Z" value="447.732*mm"/> + <Constant name="ShiftDet" value="-[FBSign]*0.5*[ThatStringL]+[IESign]*[tibmodpar:WaferZ]"/> + <Constant name="ShiftAOHLedge" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibmodpar:AOHLedgeModOffset])"/> + <Constant name="ShiftAOHBox" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibmodpar:AOHBoxDz])"/> + <Constant name="ShiftMCModConn" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibstringpar:MCModConnOffset])"/> + <Constant name="MCHeadZ" value="[FBSign]*(0.5*[ThisStringL]-[tibstringpar:MCHeadDz])"/> + <Constant name="MCZ" value="[FBSign]*(0.5*[ThisStringL]-0.5*[MotherCableL]-2*[tibstringpar:MCHeadDz])"/> + <Constant name="CoolSZ" value="[FBSign]*(0.5*[ThisStringL]-0.5*[CoolL])"/> + <Constant name="CoolWZ" value="[FBSign]*([ThisStringL]/2-[CoolL]-[tibstringpar:CoolPipeDx])"/> + </ConstantsSection> + <SolidSection label="tibstring1lr.xml"> + <Box name="TIBString1LoPlsCoolBox" dx="[tibstringpar:CoolBoxDx]" dy="[tibstringpar:CoolBoxDy]" dz="[ThisStringL]/2"/> + <Box name="TIBString1LoPlsMainPart" dx="[tibmodpar:ModuleDx]" dy="[tibmodpar:DSModuleDy]" dz="[ThisStringL]/2"/> + <Box name="TIBString1LoPlsSideCut" dx="[tibmodpar:DSModuleSideCutDx]" dy="[tibmodpar:DSModuleSideCutDy]" dz="[ThisStringL]/2+[tibmodpar:SideCutExtraZ]"/> + <Box name="TIBString1LoPlsCableBox" dx="[tibstringpar:CableBoxDx]" dy="[tibstringpar:DSCableBoxDy]" dz="[ThisStringL]/2"/> + <SubtractionSolid name="TIBString1LoPlsLeftCutted"> + <rSolid name="TIBString1LoPlsMainPart"/> + <rSolid name="TIBString1LoPlsSideCut"/> + <Translation x="-[tibmodpar:DSModuleSideCutX]" y="[tibmodpar:DSModuleSideCutY]" z="0."/> + </SubtractionSolid> + <SubtractionSolid name="TIBString1LoPlsModuleBox"> + <rSolid name="TIBString1LoPlsLeftCutted"/> + <rSolid name="TIBString1LoPlsSideCut"/> + <Translation x="[tibmodpar:DSModuleSideCutX]" y="[tibmodpar:DSModuleSideCutY]" z="0."/> + </SubtractionSolid> + <UnionSolid name="TIBString1LoPlsModAndCool"> + <rSolid name="TIBString1LoPlsModuleBox"/> + <rSolid name="TIBString1LoPlsCoolBox"/> + <Translation x="[zero]" y="[tibstringpar:DSCoolBoxY]" z="[zero]"/> + </UnionSolid> + <UnionSolid name="TIBString1LoPls"> + <rSolid name="TIBString1LoPlsModAndCool"/> + <rSolid name="TIBString1LoPlsCableBox"/> + <Translation x="[zero]" y="[tibstringpar:DSCableBoxY]" z="[zero]"/> + </UnionSolid> + <Box name="TIBString1LoPlsCable" dx="[tibstringpar:MotherCableW]/2" dy="[tibstringpar:MotherCableT]/2" dz="[MotherCableL]/2"/> + <Box name="TIBString1LoPlsCoolS" dx="[tibstringpar:CoolPipeDx]" dy="[tibstringpar:CoolPipeDy]" dz="[CoolL]/2"/> + <Box name="TIBString1LoPlsCoolW" dx="[tibstringpar:CoolPipeX]+[tibstringpar:CoolPipeDx]" dy="[tibstringpar:CoolPipeDy]" dz="[tibstringpar:CoolPipeDx]"/> + </SolidSection> + <LogicalPartSection label="tibstring1lr.xml"> + <LogicalPart name="TIBString1LoPls1" category="unspecified"> + <rSolid name="TIBString1LoPls"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TIBString1LoPlsCable" category="unspecified"> + <rSolid name="TIBString1LoPlsCable"/> + <rMaterial name="tibmaterial:TIB_MCable"/> + </LogicalPart> + <LogicalPart name="TIBString1LoPlsCoolS" category="unspecified"> + <rSolid name="TIBString1LoPlsCoolS"/> + <rMaterial name="tibmaterial:TIB_CoolPipe"/> + </LogicalPart> + <LogicalPart name="TIBString1LoPlsCoolW" category="unspecified"> + <rSolid name="TIBString1LoPlsCoolW"/> + <rMaterial name="tibmaterial:TIB_CoolPipe"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTrackerZPosAlgo"> + <rParent name="tibstring1lr:TIBString1LoPls1"/> + <String name="ChildName" value="tibmodule0a:TIBModule0A"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftDet]), ([Det1Z]+[ShiftDet]), ([Det2Z]+[ShiftDet]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:180D, tibstringpar:180D, tibstringpar:180D</Vector> + </Algorithm> + <PosPartSection label="tibstring1lr.xml"> + <PosPart copyNumber="1"> + <rParent name="tibstring1lr:TIBString1LoPls1"/> + <rChild name="tibstringpar:MCHead"/> + <Translation x="[tibstringpar:MCHeadX]" y="[tibstringpar:DSMCHeadY]" z="[MCHeadZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring1lr:TIBString1LoPls1"/> + <rChild name="tibstring1lr:TIBString1LoPlsCable"/> + <Translation x="[tibstringpar:MotherCableX]" y="[tibstringpar:DSMotherCableY]" z="[MCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring1lr:TIBString1LoPls1"/> + <rChild name="tibstring1lr:TIBString1LoPlsCoolS"/> + <Translation x="-[tibstringpar:CoolPipeX]" y="[tibstringpar:DSCoolPipeY]" z="[CoolSZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tibstring1lr:TIBString1LoPls1"/> + <rChild name="tibstring1lr:TIBString1LoPlsCoolS"/> + <Translation x="[tibstringpar:CoolPipeX]" y="[tibstringpar:DSCoolPipeY]" z="[CoolSZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring1lr:TIBString1LoPls1"/> + <rChild name="tibstring1lr:TIBString1LoPlsCoolW"/> + <Translation x="[zero]" y="[tibstringpar:DSCoolPipeY]" z="[CoolWZ]"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring1lr:TIBString1LoPls1"/> + <String name="ChildName" value="tibmodpar:TIBModLedgeBox"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:DSLedgeBoxY], [tibmodpar:DSLedgeBoxY], [tibmodpar:DSLedgeBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftDet]), ([Det1Z]+[ShiftDet]), ([Det2Z]+[ShiftDet]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:180D, tibstringpar:180D, tibstringpar:180D</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring1lr:TIBString1LoPls1"/> + <String name="ChildName" value="tibmodpar:TIBAOHLedge"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:DSLedgeBoxY], [tibmodpar:DSLedgeBoxY], [tibmodpar:DSLedgeBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftAOHLedge]), ([Det1Z]+[ShiftAOHLedge]), ([Det2Z]+[ShiftAOHLedge]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring1lr:TIBString1LoPls1"/> + <String name="ChildName" value="tibmodpar:TIBDSAOHBox"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:DSAOHBoxY], [tibmodpar:DSAOHBoxY], [tibmodpar:DSAOHBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftAOHBox]), ([Det1Z]+[ShiftAOHBox]), ([Det2Z]+[ShiftAOHBox]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:180D, tibstringpar:180D, tibstringpar:180D</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring1lr:TIBString1LoPls1"/> + <String name="ChildName" value="tibstringpar:DSMCModConn"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [tibstringpar:MCModConnX], [tibstringpar:MCModConnX], [tibstringpar:MCModConnX]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibstringpar:DSMCModConnY], [tibstringpar:DSMCModConnY], [tibstringpar:DSMCModConnY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftMCModConn]), ([Det1Z]+[ShiftMCModConn]), ([Det2Z]+[ShiftMCModConn]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tibstring1ul.xml b/examples/DDCMS/data/tibstring1ul.xml new file mode 100644 index 000000000..e97cfd218 --- /dev/null +++ b/examples/DDCMS/data/tibstring1ul.xml @@ -0,0 +1,164 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <!-- LAYER 2 EXT BW --> + <ConstantsSection label="tibstring1ul.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="FBSign" value="[tibstringpar:BWSign]"/> + <Constant name="IESign" value="[tibstringpar:EXT2Sign]"/> + <Constant name="MotherCableL" value="55.23*cm-2*[tibstringpar:MCHeadDz]"/> + <Constant name="ThisStringL" value="[tibstring1:StringUpMinL]"/> + <Constant name="ThatStringL" value="[tibstringpar:StringL]-[ThisStringL]"/> + <Constant name="CoolL" value="0.5*[tibstringpar:StringL]-14.30*mm-2*[tibstringpar:CoolPipeDx]"/> + <Constant name="Det0Z" value="-546.373*mm"/> + <Constant name="Det1Z" value="-315.364*mm"/> + <Constant name="Det2Z" value="-83.6250*mm"/> + <Constant name="ShiftDet" value="-[FBSign]*0.5*[ThatStringL]+[IESign]*[tibmodpar:WaferZ]"/> + <Constant name="ShiftAOHLedge" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibmodpar:AOHLedgeModOffset])"/> + <Constant name="ShiftAOHBox" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibmodpar:AOHBoxDz])"/> + <Constant name="ShiftMCModConn" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibstringpar:MCModConnOffset])"/> + <Constant name="MCHeadZ" value="[FBSign]*(0.5*[ThisStringL]-[tibstringpar:MCHeadDz])"/> + <Constant name="MCZ" value="[FBSign]*(0.5*[ThisStringL]-0.5*[MotherCableL]-2*[tibstringpar:MCHeadDz])"/> + <Constant name="CoolSZ" value="[FBSign]*(0.5*[ThisStringL]-0.5*[CoolL])"/> + <Constant name="CoolWZ" value="[FBSign]*([ThisStringL]/2-[CoolL]-[tibstringpar:CoolPipeDx])"/> + </ConstantsSection> + <SolidSection label="tibstring1ul.xml"> + <Box name="TIBString1UpMinCoolBox" dx="[tibstringpar:CoolBoxDx]" dy="[tibstringpar:CoolBoxDy]" dz="[ThisStringL]/2"/> + <Box name="TIBString1UpMinMainPart" dx="[tibmodpar:ModuleDx]" dy="[tibmodpar:DSModuleDy]" dz="[ThisStringL]/2"/> + <Box name="TIBString1UpMinSideCut" dx="[tibmodpar:DSModuleSideCutDx]" dy="[tibmodpar:DSModuleSideCutDy]" dz="[ThisStringL]/2+[tibmodpar:SideCutExtraZ]"/> + <Box name="TIBString1UpMinCableBox" dx="[tibstringpar:CableBoxDx]" dy="[tibstringpar:DSCableBoxDy]" dz="[ThisStringL]/2"/> + <SubtractionSolid name="TIBString1UpMinLeftCutted"> + <rSolid name="TIBString1UpMinMainPart"/> + <rSolid name="TIBString1UpMinSideCut"/> + <Translation x="-[tibmodpar:DSModuleSideCutX]" y="[tibmodpar:DSModuleSideCutY]" z="0."/> + </SubtractionSolid> + <SubtractionSolid name="TIBString1UpMinModuleBox"> + <rSolid name="TIBString1UpMinLeftCutted"/> + <rSolid name="TIBString1UpMinSideCut"/> + <Translation x="[tibmodpar:DSModuleSideCutX]" y="[tibmodpar:DSModuleSideCutY]" z="0."/> + </SubtractionSolid> + <UnionSolid name="TIBString1UpMinModAndCool"> + <rSolid name="TIBString1UpMinModuleBox"/> + <rSolid name="TIBString1UpMinCoolBox"/> + <Translation x="[zero]" y="[tibstringpar:DSCoolBoxY]" z="[zero]"/> + </UnionSolid> + <UnionSolid name="TIBString1UpMin"> + <rSolid name="TIBString1UpMinModAndCool"/> + <rSolid name="TIBString1UpMinCableBox"/> + <Translation x="[zero]" y="[tibstringpar:DSCableBoxY]" z="[zero]"/> + </UnionSolid> + <Box name="TIBString1UpMinCable" dx="[tibstringpar:MotherCableW]/2" dy="[tibstringpar:MotherCableT]/2" dz="[MotherCableL]/2"/> + <Box name="TIBString1UpMinCoolS" dx="[tibstringpar:CoolPipeDx]" dy="[tibstringpar:CoolPipeDy]" dz="[CoolL]/2"/> + <Box name="TIBString1UpMinCoolW" dx="[tibstringpar:CoolPipeX]+[tibstringpar:CoolPipeDx]" dy="[tibstringpar:CoolPipeDy]" dz="[tibstringpar:CoolPipeDx]"/> + </SolidSection> + <LogicalPartSection label="tibstring1ul.xml"> + <LogicalPart name="TIBString1UpMin1" category="unspecified"> + <rSolid name="TIBString1UpMin"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TIBString1UpMinCable" category="unspecified"> + <rSolid name="TIBString1UpMinCable"/> + <rMaterial name="tibmaterial:TIB_MCable"/> + </LogicalPart> + <LogicalPart name="TIBString1UpMinCoolS" category="unspecified"> + <rSolid name="TIBString1UpMinCoolS"/> + <rMaterial name="tibmaterial:TIB_CoolPipe"/> + </LogicalPart> + <LogicalPart name="TIBString1UpMinCoolW" category="unspecified"> + <rSolid name="TIBString1UpMinCoolW"/> + <rMaterial name="tibmaterial:TIB_CoolPipe"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTrackerZPosAlgo"> + <rParent name="tibstring1ul:TIBString1UpMin1"/> + <String name="ChildName" value="tibmodule0b:TIBModule0B"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftDet]), ([Det1Z]+[ShiftDet]), ([Det2Z]+[ShiftDet]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> + <PosPartSection label="tibstring1ul.xml"> + <PosPart copyNumber="1"> + <rParent name="tibstring1ul:TIBString1UpMin1"/> + <rChild name="tibstringpar:MCHead"/> + <Translation x="[tibstringpar:MCHeadX]" y="[tibstringpar:DSMCHeadY]" z="[MCHeadZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring1ul:TIBString1UpMin1"/> + <rChild name="tibstring1ul:TIBString1UpMinCable"/> + <Translation x="[tibstringpar:MotherCableX]" y="[tibstringpar:DSMotherCableY]" z="[MCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring1ul:TIBString1UpMin1"/> + <rChild name="tibstring1ul:TIBString1UpMinCoolS"/> + <Translation x="-[tibstringpar:CoolPipeX]" y="[tibstringpar:DSCoolPipeY]" z="[CoolSZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tibstring1ul:TIBString1UpMin1"/> + <rChild name="tibstring1ul:TIBString1UpMinCoolS"/> + <Translation x="[tibstringpar:CoolPipeX]" y="[tibstringpar:DSCoolPipeY]" z="[CoolSZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring1ul:TIBString1UpMin1"/> + <rChild name="tibstring1ul:TIBString1UpMinCoolW"/> + <Translation x="[zero]" y="[tibstringpar:DSCoolPipeY]" z="[CoolWZ]"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring1ul:TIBString1UpMin1"/> + <String name="ChildName" value="tibmodpar:TIBModLedgeBox"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:DSLedgeBoxY], [tibmodpar:DSLedgeBoxY], [tibmodpar:DSLedgeBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftDet]), ([Det1Z]+[ShiftDet]), ([Det2Z]+[ShiftDet]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring1ul:TIBString1UpMin1"/> + <String name="ChildName" value="tibmodpar:TIBAOHLedge"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:DSLedgeBoxY], [tibmodpar:DSLedgeBoxY], [tibmodpar:DSLedgeBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftAOHLedge]), ([Det1Z]+[ShiftAOHLedge]), ([Det2Z]+[ShiftAOHLedge]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:180D, tibstringpar:180D, tibstringpar:180D</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring1ul:TIBString1UpMin1"/> + <String name="ChildName" value="tibmodpar:TIBDSAOHBox"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:DSAOHBoxY], [tibmodpar:DSAOHBoxY], [tibmodpar:DSAOHBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftAOHBox]), ([Det1Z]+[ShiftAOHBox]), ([Det2Z]+[ShiftAOHBox]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring1ul:TIBString1UpMin1"/> + <String name="ChildName" value="tibstringpar:DSMCModConn"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [tibstringpar:MCModConnX], [tibstringpar:MCModConnX], [tibstringpar:MCModConnX]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibstringpar:DSMCModConnY], [tibstringpar:DSMCModConnY], [tibstringpar:DSMCModConnY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftMCModConn]), ([Det1Z]+[ShiftMCModConn]), ([Det2Z]+[ShiftMCModConn]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tibstring1ur.xml b/examples/DDCMS/data/tibstring1ur.xml new file mode 100644 index 000000000..ee26fd649 --- /dev/null +++ b/examples/DDCMS/data/tibstring1ur.xml @@ -0,0 +1,164 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <!-- LAYER 2 EXT FW --> + <ConstantsSection label="tibstring1ur.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="FBSign" value="[tibstringpar:FWSign]"/> + <Constant name="IESign" value="[tibstringpar:EXT2Sign]"/> + <Constant name="MotherCableL" value="70.00*cm-2*[tibstringpar:MCHeadDz]"/> + <Constant name="ThisStringL" value="[tibstring1:StringUpPlsL]"/> + <Constant name="ThatStringL" value="[tibstringpar:StringL]-[ThisStringL]"/> + <Constant name="CoolL" value="0.5*[tibstringpar:StringL]-18.66*mm-2*[tibstringpar:CoolPipeDx]"/> + <Constant name="Det0Z" value="148.641*mm"/> + <Constant name="Det1Z" value="380.176*mm"/> + <Constant name="Det2Z" value="605.456*mm"/> + <Constant name="ShiftDet" value="-[FBSign]*0.5*[ThatStringL]+[IESign]*[tibmodpar:WaferZ]"/> + <Constant name="ShiftAOHLedge" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibmodpar:AOHLedgeModOffset])"/> + <Constant name="ShiftAOHBox" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibmodpar:AOHBoxDz])"/> + <Constant name="ShiftMCModConn" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibstringpar:MCModConnOffset])"/> + <Constant name="MCHeadZ" value="[FBSign]*(0.5*[ThisStringL]-[tibstringpar:MCHeadDz])"/> + <Constant name="MCZ" value="[FBSign]*(0.5*[ThisStringL]-0.5*[MotherCableL]-2*[tibstringpar:MCHeadDz])"/> + <Constant name="CoolSZ" value="[FBSign]*(0.5*[ThisStringL]-0.5*[CoolL])"/> + <Constant name="CoolWZ" value="[FBSign]*([ThisStringL]/2-[CoolL]-[tibstringpar:CoolPipeDx])"/> + </ConstantsSection> + <SolidSection label="tibstring1ur.xml"> + <Box name="TIBString1UpPlsCoolBox" dx="[tibstringpar:CoolBoxDx]" dy="[tibstringpar:CoolBoxDy]" dz="[ThisStringL]/2"/> + <Box name="TIBString1UpPlsMainPart" dx="[tibmodpar:ModuleDx]" dy="[tibmodpar:DSModuleDy]" dz="[ThisStringL]/2"/> + <Box name="TIBString1UpPlsSideCut" dx="[tibmodpar:DSModuleSideCutDx]" dy="[tibmodpar:DSModuleSideCutDy]" dz="[ThisStringL]/2+[tibmodpar:SideCutExtraZ]"/> + <Box name="TIBString1UpPlsCableBox" dx="[tibstringpar:CableBoxDx]" dy="[tibstringpar:DSCableBoxDy]" dz="[ThisStringL]/2"/> + <SubtractionSolid name="TIBString1UpPlsLeftCutted"> + <rSolid name="TIBString1UpPlsMainPart"/> + <rSolid name="TIBString1UpPlsSideCut"/> + <Translation x="-[tibmodpar:DSModuleSideCutX]" y="[tibmodpar:DSModuleSideCutY]" z="0."/> + </SubtractionSolid> + <SubtractionSolid name="TIBString1UpPlsModuleBox"> + <rSolid name="TIBString1UpPlsLeftCutted"/> + <rSolid name="TIBString1UpPlsSideCut"/> + <Translation x="[tibmodpar:DSModuleSideCutX]" y="[tibmodpar:DSModuleSideCutY]" z="0."/> + </SubtractionSolid> + <UnionSolid name="TIBString1UpPlsModAndCool"> + <rSolid name="TIBString1UpPlsModuleBox"/> + <rSolid name="TIBString1UpPlsCoolBox"/> + <Translation x="[zero]" y="[tibstringpar:DSCoolBoxY]" z="[zero]"/> + </UnionSolid> + <UnionSolid name="TIBString1UpPls"> + <rSolid name="TIBString1UpPlsModAndCool"/> + <rSolid name="TIBString1UpPlsCableBox"/> + <Translation x="[zero]" y="[tibstringpar:DSCableBoxY]" z="[zero]"/> + </UnionSolid> + <Box name="TIBString1UpPlsCable" dx="[tibstringpar:MotherCableW]/2" dy="[tibstringpar:MotherCableT]/2" dz="[MotherCableL]/2"/> + <Box name="TIBString1UpPlsCoolS" dx="[tibstringpar:CoolPipeDx]" dy="[tibstringpar:CoolPipeDy]" dz="[CoolL]/2"/> + <Box name="TIBString1UpPlsCoolW" dx="[tibstringpar:CoolPipeX]+[tibstringpar:CoolPipeDx]" dy="[tibstringpar:CoolPipeDy]" dz="[tibstringpar:CoolPipeDx]"/> + </SolidSection> + <LogicalPartSection label="tibstring1ur.xml"> + <LogicalPart name="TIBString1UpPls1" category="unspecified"> + <rSolid name="TIBString1UpPls"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TIBString1UpPlsCable" category="unspecified"> + <rSolid name="TIBString1UpPlsCable"/> + <rMaterial name="tibmaterial:TIB_MCable"/> + </LogicalPart> + <LogicalPart name="TIBString1UpPlsCoolS" category="unspecified"> + <rSolid name="TIBString1UpPlsCoolS"/> + <rMaterial name="tibmaterial:TIB_CoolPipe"/> + </LogicalPart> + <LogicalPart name="TIBString1UpPlsCoolW" category="unspecified"> + <rSolid name="TIBString1UpPlsCoolW"/> + <rMaterial name="tibmaterial:TIB_CoolPipe"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTrackerZPosAlgo"> + <rParent name="tibstring1ur:TIBString1UpPls1"/> + <String name="ChildName" value="tibmodule0b:TIBModule0B"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftDet]), ([Det1Z]+[ShiftDet]), ([Det2Z]+[ShiftDet]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> + <PosPartSection label="tibstring1ur.xml"> + <PosPart copyNumber="1"> + <rParent name="tibstring1ur:TIBString1UpPls1"/> + <rChild name="tibstringpar:MCHead"/> + <Translation x="[tibstringpar:MCHeadX]" y="[tibstringpar:DSMCHeadY]" z="[MCHeadZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring1ur:TIBString1UpPls1"/> + <rChild name="tibstring1ur:TIBString1UpPlsCable"/> + <Translation x="[tibstringpar:MotherCableX]" y="[tibstringpar:DSMotherCableY]" z="[MCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring1ur:TIBString1UpPls1"/> + <rChild name="tibstring1ur:TIBString1UpPlsCoolS"/> + <Translation x="-[tibstringpar:CoolPipeX]" y="[tibstringpar:DSCoolPipeY]" z="[CoolSZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tibstring1ur:TIBString1UpPls1"/> + <rChild name="tibstring1ur:TIBString1UpPlsCoolS"/> + <Translation x="[tibstringpar:CoolPipeX]" y="[tibstringpar:DSCoolPipeY]" z="[CoolSZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring1ur:TIBString1UpPls1"/> + <rChild name="tibstring1ur:TIBString1UpPlsCoolW"/> + <Translation x="[zero]" y="[tibstringpar:DSCoolPipeY]" z="[CoolWZ]"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring1ur:TIBString1UpPls1"/> + <String name="ChildName" value="tibmodpar:TIBModLedgeBox"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:DSLedgeBoxY], [tibmodpar:DSLedgeBoxY], [tibmodpar:DSLedgeBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftDet]), ([Det1Z]+[ShiftDet]), ([Det2Z]+[ShiftDet]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring1ur:TIBString1UpPls1"/> + <String name="ChildName" value="tibmodpar:TIBAOHLedge"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:DSLedgeBoxY], [tibmodpar:DSLedgeBoxY], [tibmodpar:DSLedgeBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftAOHLedge]), ([Det1Z]+[ShiftAOHLedge]), ([Det2Z]+[ShiftAOHLedge]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring1ur:TIBString1UpPls1"/> + <String name="ChildName" value="tibmodpar:TIBDSAOHBox"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:DSAOHBoxY], [tibmodpar:DSAOHBoxY], [tibmodpar:DSAOHBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftAOHBox]), ([Det1Z]+[ShiftAOHBox]), ([Det2Z]+[ShiftAOHBox]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring1ur:TIBString1UpPls1"/> + <String name="ChildName" value="tibstringpar:DSMCModConn"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [tibstringpar:MCModConnX], [tibstringpar:MCModConnX], [tibstringpar:MCModConnX]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibstringpar:DSMCModConnY], [tibstringpar:DSMCModConnY], [tibstringpar:DSMCModConnY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftMCModConn]), ([Det1Z]+[ShiftMCModConn]), ([Det2Z]+[ShiftMCModConn]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tibstring2.xml b/examples/DDCMS/data/tibstring2.xml new file mode 100644 index 000000000..dfe479b1b --- /dev/null +++ b/examples/DDCMS/data/tibstring2.xml @@ -0,0 +1,44 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tibstring2.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="StringIntOff" value="38.87*mm"/> + <Constant name="StringExtOff" value="-8.73*mm"/> + <Constant name="StringLoMinL" value="0.5*[tibstringpar:StringL]+[StringIntOff]"/> + <Constant name="StringUpMinL" value="0.5*[tibstringpar:StringL]+[StringExtOff]"/> + <Constant name="StringLoPlsL" value="0.5*[tibstringpar:StringL]-[StringIntOff]"/> + <Constant name="StringUpPlsL" value="0.5*[tibstringpar:StringL]-[StringExtOff]"/> + </ConstantsSection> + <LogicalPartSection label="tibstring2.xml"> + <LogicalPart name="TIBString2Lo1" category="unspecified"> + <rSolid name="tibstringpar:TIBSSString1"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TIBString2Up1" category="unspecified"> + <rSolid name="tibstringpar:TIBSSString1"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tibstring2.xml"> + <PosPart copyNumber="1"> + <rParent name="tibstring2:TIBString2Lo1"/> + <rChild name="tibstring2ll:TIBString2LoMin1"/> + <Translation x="[zero]" y="[zero]" z="-[tibstring2:StringLoPlsL]/2"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring2:TIBString2Lo1"/> + <rChild name="tibstring2lr:TIBString2LoPls1"/> + <Translation x="[zero]" y="[zero]" z="[tibstring2:StringLoMinL]/2"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring2:TIBString2Up1"/> + <rChild name="tibstring2ul:TIBString2UpMin1"/> + <Translation x="[zero]" y="[zero]" z="-[tibstring2:StringUpPlsL]/2"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring2:TIBString2Up1"/> + <rChild name="tibstring2ur:TIBString2UpPls1"/> + <Translation x="[zero]" y="[zero]" z="[tibstring2:StringUpMinL]/2"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tibstring2ll.xml b/examples/DDCMS/data/tibstring2ll.xml new file mode 100644 index 000000000..8c58e5ad5 --- /dev/null +++ b/examples/DDCMS/data/tibstring2ll.xml @@ -0,0 +1,153 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <!-- LAYER 3 INT BW --> + <ConstantsSection label="tibstring2ll.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="FBSign" value="[tibstringpar:BWSign]"/> + <Constant name="IESign" value="[tibstringpar:INT3Sign]"/> + <Constant name="MotherCableL" value="59.99*cm-2*[tibstringpar:MCHeadDz]"/> + <Constant name="ThisStringL" value="[tibstring2:StringLoMinL]"/> + <Constant name="ThatStringL" value="[tibstringpar:StringL]-[ThisStringL]"/> + <Constant name="CoolL" value="0.5*[tibstringpar:StringL]+24.93*mm-2*[tibstringpar:CoolPipeDx]"/> + <Constant name="Det0Z" value="-456.191*mm"/> + <Constant name="Det1Z" value="-246.263*mm"/> + <Constant name="Det2Z" value="-36.0950*mm"/> + <Constant name="ShiftDet" value="-[FBSign]*0.5*[ThatStringL]+[IESign]*[tibmodpar:WaferZ]"/> + <Constant name="ShiftAOHLedge" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibmodpar:AOHLedgeModOffset])"/> + <Constant name="ShiftAOHBox" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibmodpar:AOHBoxDz])"/> + <Constant name="ShiftMCModConn" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibstringpar:MCModConnOffset])"/> + <Constant name="MCHeadZ" value="[FBSign]*(0.5*[ThisStringL]-[tibstringpar:MCHeadDz])"/> + <Constant name="MCZ" value="[FBSign]*(0.5*[ThisStringL]-0.5*[MotherCableL]-2*[tibstringpar:MCHeadDz])"/> + <Constant name="CoolSZ" value="[FBSign]*(0.5*[ThisStringL]-0.5*[CoolL])"/> + <Constant name="CoolWZ" value="[FBSign]*([ThisStringL]/2-[CoolL]-[tibstringpar:CoolPipeDx])"/> + </ConstantsSection> + <SolidSection label="tibstring2ll.xml"> + <Box name="TIBString2LoMinCoolBox" dx="[tibstringpar:CoolBoxDx]" dy="[tibstringpar:CoolBoxDy]" dz="[ThisStringL]/2"/> + <Box name="TIBString2LoMinModuleBox" dx="[tibmodpar:ModuleDx]" dy="[tibmodpar:SSModuleDy]" dz="[ThisStringL]/2"/> + <Box name="TIBString2LoMinCableBox" dx="[tibstringpar:CableBoxDx]" dy="[tibstringpar:SSCableBoxDy]" dz="[ThisStringL]/2"/> + <UnionSolid name="TIBString2LoMinModAndCool"> + <rSolid name="TIBString2LoMinModuleBox"/> + <rSolid name="TIBString2LoMinCoolBox"/> + <Translation x="[zero]" y="[tibstringpar:SSCoolBoxY]" z="[zero]"/> + </UnionSolid> + <UnionSolid name="TIBString2LoMin"> + <rSolid name="TIBString2LoMinModAndCool"/> + <rSolid name="TIBString2LoMinCableBox"/> + <Translation x="[zero]" y="[tibstringpar:SSCableBoxY]" z="[zero]"/> + </UnionSolid> + <Box name="TIBString2LoMinCable" dx="[tibstringpar:MotherCableW]/2" dy="[tibstringpar:MotherCableT]/2" dz="[MotherCableL]/2"/> + <Box name="TIBString2LoMinCoolS" dx="[tibstringpar:CoolPipeDx]" dy="[tibstringpar:CoolPipeDy]" dz="[CoolL]/2"/> + <Box name="TIBString2LoMinCoolW" dx="[tibstringpar:CoolPipeX]+[tibstringpar:CoolPipeDx]" dy="[tibstringpar:CoolPipeDy]" dz="[tibstringpar:CoolPipeDx]"/> + </SolidSection> + <LogicalPartSection label="tibstring2ll.xml"> + <LogicalPart name="TIBString2LoMin1" category="unspecified"> + <rSolid name="TIBString2LoMin"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TIBString2LoMinCable" category="unspecified"> + <rSolid name="TIBString2LoMinCable"/> + <rMaterial name="tibmaterial:TIB_MCable"/> + </LogicalPart> + <LogicalPart name="TIBString2LoMinCoolS" category="unspecified"> + <rSolid name="TIBString2LoMinCoolS"/> + <rMaterial name="tibmaterial:TIB_CoolPipe"/> + </LogicalPart> + <LogicalPart name="TIBString2LoMinCoolW" category="unspecified"> + <rSolid name="TIBString2LoMinCoolW"/> + <rMaterial name="tibmaterial:TIB_CoolPipe"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTrackerZPosAlgo"> + <rParent name="tibstring2ll:TIBString2LoMin1"/> + <String name="ChildName" value="tibmodule2:TIBModule2"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftDet]), ([Det1Z]+[ShiftDet]), ([Det2Z]+[ShiftDet]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> + <PosPartSection label="tibstring2ll.xml"> + <PosPart copyNumber="1"> + <rParent name="tibstring2ll:TIBString2LoMin1"/> + <rChild name="tibstringpar:MCHead"/> + <Translation x="[tibstringpar:MCHeadX]" y="[tibstringpar:SSMCHeadY]" z="[MCHeadZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring2ll:TIBString2LoMin1"/> + <rChild name="tibstring2ll:TIBString2LoMinCable"/> + <Translation x="[tibstringpar:MotherCableX]" y="[tibstringpar:SSMotherCableY]" z="[MCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring2ll:TIBString2LoMin1"/> + <rChild name="tibstring2ll:TIBString2LoMinCoolS"/> + <Translation x="-[tibstringpar:CoolPipeX]" y="[tibstringpar:SSCoolPipeY]" z="[CoolSZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tibstring2ll:TIBString2LoMin1"/> + <rChild name="tibstring2ll:TIBString2LoMinCoolS"/> + <Translation x="[tibstringpar:CoolPipeX]" y="[tibstringpar:SSCoolPipeY]" z="[CoolSZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring2ll:TIBString2LoMin1"/> + <rChild name="tibstring2ll:TIBString2LoMinCoolW"/> + <Translation x="[zero]" y="[tibstringpar:SSCoolPipeY]" z="[CoolWZ]"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring2ll:TIBString2LoMin1"/> + <String name="ChildName" value="tibmodpar:TIBModLedgeBox"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:SSLedgeBoxY], [tibmodpar:SSLedgeBoxY], [tibmodpar:SSLedgeBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftDet]), ([Det1Z]+[ShiftDet]), ([Det2Z]+[ShiftDet]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring2ll:TIBString2LoMin1"/> + <String name="ChildName" value="tibmodpar:TIBAOHLedge"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:SSLedgeBoxY], [tibmodpar:SSLedgeBoxY], [tibmodpar:SSLedgeBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftAOHLedge]), ([Det1Z]+[ShiftAOHLedge]), ([Det2Z]+[ShiftAOHLedge]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:180D, tibstringpar:180D, tibstringpar:180D</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring2ll:TIBString2LoMin1"/> + <String name="ChildName" value="tibmodpar:TIBSSAOHBox"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [tibmodpar:SSAOHBoxX], [tibmodpar:SSAOHBoxX], [tibmodpar:SSAOHBoxX]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:SSAOHBoxY], [tibmodpar:SSAOHBoxY], [tibmodpar:SSAOHBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftAOHBox]), ([Det1Z]+[ShiftAOHBox]), ([Det2Z]+[ShiftAOHBox]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring2ll:TIBString2LoMin1"/> + <String name="ChildName" value="tibstringpar:SSMCModConn"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [tibstringpar:MCModConnX], [tibstringpar:MCModConnX], [tibstringpar:MCModConnX]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibstringpar:SSMCModConnY], [tibstringpar:SSMCModConnY], [tibstringpar:SSMCModConnY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftMCModConn]), ([Det1Z]+[ShiftMCModConn]), ([Det2Z]+[ShiftMCModConn]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tibstring2lr.xml b/examples/DDCMS/data/tibstring2lr.xml new file mode 100644 index 000000000..68b943d83 --- /dev/null +++ b/examples/DDCMS/data/tibstring2lr.xml @@ -0,0 +1,153 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <!-- LAYER 3 INT FW --> + <ConstantsSection label="tibstring2lr.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="FBSign" value="[tibstringpar:FWSign]"/> + <Constant name="IESign" value="[tibstringpar:INT3Sign]"/> + <Constant name="MotherCableL" value="67.44*cm-2*[tibstringpar:MCHeadDz]"/> + <Constant name="ThisStringL" value="[tibstring2:StringLoPlsL]"/> + <Constant name="ThatStringL" value="[tibstringpar:StringL]-[ThisStringL]"/> + <Constant name="CoolL" value="0.5*[tibstringpar:StringL]-42.72*mm-2*[tibstringpar:CoolPipeDx]"/> + <Constant name="Det0Z" value="174.198*mm"/> + <Constant name="Det1Z" value="384.254*mm"/> + <Constant name="Det2Z" value="593.937*mm"/> + <Constant name="ShiftDet" value="-[FBSign]*0.5*[ThatStringL]+[IESign]*[tibmodpar:WaferZ]"/> + <Constant name="ShiftAOHLedge" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibmodpar:AOHLedgeModOffset])"/> + <Constant name="ShiftAOHBox" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibmodpar:AOHBoxDz])"/> + <Constant name="ShiftMCModConn" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibstringpar:MCModConnOffset])"/> + <Constant name="MCHeadZ" value="[FBSign]*(0.5*[ThisStringL]-[tibstringpar:MCHeadDz])"/> + <Constant name="MCZ" value="[FBSign]*(0.5*[ThisStringL]-0.5*[MotherCableL]-2*[tibstringpar:MCHeadDz])"/> + <Constant name="CoolSZ" value="[FBSign]*(0.5*[ThisStringL]-0.5*[CoolL])"/> + <Constant name="CoolWZ" value="[FBSign]*([ThisStringL]/2-[CoolL]-[tibstringpar:CoolPipeDx])"/> + </ConstantsSection> + <SolidSection label="tibstring2lr.xml"> + <Box name="TIBString2LoPlsCoolBox" dx="[tibstringpar:CoolBoxDx]" dy="[tibstringpar:CoolBoxDy]" dz="[ThisStringL]/2"/> + <Box name="TIBString2LoPlsModuleBox" dx="[tibmodpar:ModuleDx]" dy="[tibmodpar:SSModuleDy]" dz="[ThisStringL]/2"/> + <Box name="TIBString2LoPlsCableBox" dx="[tibstringpar:CableBoxDx]" dy="[tibstringpar:SSCableBoxDy]" dz="[ThisStringL]/2"/> + <UnionSolid name="TIBString2LoPlsModAndCool"> + <rSolid name="TIBString2LoPlsModuleBox"/> + <rSolid name="TIBString2LoPlsCoolBox"/> + <Translation x="[zero]" y="[tibstringpar:SSCoolBoxY]" z="[zero]"/> + </UnionSolid> + <UnionSolid name="TIBString2LoPls"> + <rSolid name="TIBString2LoPlsModAndCool"/> + <rSolid name="TIBString2LoPlsCableBox"/> + <Translation x="[zero]" y="[tibstringpar:SSCableBoxY]" z="[zero]"/> + </UnionSolid> + <Box name="TIBString2LoPlsCable" dx="[tibstringpar:MotherCableW]/2" dy="[tibstringpar:MotherCableT]/2" dz="[MotherCableL]/2"/> + <Box name="TIBString2LoPlsCoolS" dx="[tibstringpar:CoolPipeDx]" dy="[tibstringpar:CoolPipeDy]" dz="[CoolL]/2"/> + <Box name="TIBString2LoPlsCoolW" dx="[tibstringpar:CoolPipeX]+[tibstringpar:CoolPipeDx]" dy="[tibstringpar:CoolPipeDy]" dz="[tibstringpar:CoolPipeDx]"/> + </SolidSection> + <LogicalPartSection label="tibstring2lr.xml"> + <LogicalPart name="TIBString2LoPls1" category="unspecified"> + <rSolid name="TIBString2LoPls"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TIBString2LoPlsCable" category="unspecified"> + <rSolid name="TIBString2LoPlsCable"/> + <rMaterial name="tibmaterial:TIB_MCable"/> + </LogicalPart> + <LogicalPart name="TIBString2LoPlsCoolS" category="unspecified"> + <rSolid name="TIBString2LoPlsCoolS"/> + <rMaterial name="tibmaterial:TIB_CoolPipe"/> + </LogicalPart> + <LogicalPart name="TIBString2LoPlsCoolW" category="unspecified"> + <rSolid name="TIBString2LoPlsCoolW"/> + <rMaterial name="tibmaterial:TIB_CoolPipe"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTrackerZPosAlgo"> + <rParent name="tibstring2lr:TIBString2LoPls1"/> + <String name="ChildName" value="tibmodule2:TIBModule2"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftDet]), ([Det1Z]+[ShiftDet]), ([Det2Z]+[ShiftDet]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> + <PosPartSection label="tibstring2lr.xml"> + <PosPart copyNumber="1"> + <rParent name="tibstring2lr:TIBString2LoPls1"/> + <rChild name="tibstringpar:MCHead"/> + <Translation x="[tibstringpar:MCHeadX]" y="[tibstringpar:SSMCHeadY]" z="[MCHeadZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring2lr:TIBString2LoPls1"/> + <rChild name="tibstring2lr:TIBString2LoPlsCable"/> + <Translation x="[tibstringpar:MotherCableX]" y="[tibstringpar:SSMotherCableY]" z="[MCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring2lr:TIBString2LoPls1"/> + <rChild name="tibstring2lr:TIBString2LoPlsCoolS"/> + <Translation x="-[tibstringpar:CoolPipeX]" y="[tibstringpar:SSCoolPipeY]" z="[CoolSZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tibstring2lr:TIBString2LoPls1"/> + <rChild name="tibstring2lr:TIBString2LoPlsCoolS"/> + <Translation x="[tibstringpar:CoolPipeX]" y="[tibstringpar:SSCoolPipeY]" z="[CoolSZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring2lr:TIBString2LoPls1"/> + <rChild name="tibstring2lr:TIBString2LoPlsCoolW"/> + <Translation x="[zero]" y="[tibstringpar:SSCoolPipeY]" z="[CoolWZ]"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring2lr:TIBString2LoPls1"/> + <String name="ChildName" value="tibmodpar:TIBModLedgeBox"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:SSLedgeBoxY], [tibmodpar:SSLedgeBoxY], [tibmodpar:SSLedgeBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftDet]), ([Det1Z]+[ShiftDet]), ([Det2Z]+[ShiftDet]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring2lr:TIBString2LoPls1"/> + <String name="ChildName" value="tibmodpar:TIBAOHLedge"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:SSLedgeBoxY], [tibmodpar:SSLedgeBoxY], [tibmodpar:SSLedgeBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftAOHLedge]), ([Det1Z]+[ShiftAOHLedge]), ([Det2Z]+[ShiftAOHLedge]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring2lr:TIBString2LoPls1"/> + <String name="ChildName" value="tibmodpar:TIBSSAOHBox"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [tibmodpar:SSAOHBoxX], [tibmodpar:SSAOHBoxX], [tibmodpar:SSAOHBoxX]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:SSAOHBoxY], [tibmodpar:SSAOHBoxY], [tibmodpar:SSAOHBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftAOHBox]), ([Det1Z]+[ShiftAOHBox]), ([Det2Z]+[ShiftAOHBox]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring2lr:TIBString2LoPls1"/> + <String name="ChildName" value="tibstringpar:SSMCModConn"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [tibstringpar:MCModConnX], [tibstringpar:MCModConnX], [tibstringpar:MCModConnX]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibstringpar:SSMCModConnY], [tibstringpar:SSMCModConnY], [tibstringpar:SSMCModConnY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftMCModConn]), ([Det1Z]+[ShiftMCModConn]), ([Det2Z]+[ShiftMCModConn]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tibstring2ul.xml b/examples/DDCMS/data/tibstring2ul.xml new file mode 100644 index 000000000..7da6da682 --- /dev/null +++ b/examples/DDCMS/data/tibstring2ul.xml @@ -0,0 +1,153 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <!-- LAYER 3 EXT BW --> + <ConstantsSection label="tibstring2ul.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="FBSign" value="[tibstringpar:BWSign]"/> + <Constant name="IESign" value="[tibstringpar:EXT3Sign]"/> + <Constant name="MotherCableL" value="69.60*cm-2*[tibstringpar:MCHeadDz]"/> + <Constant name="ThisStringL" value="[tibstring2:StringUpMinL]"/> + <Constant name="ThatStringL" value="[tibstringpar:StringL]-[ThisStringL]"/> + <Constant name="CoolL" value="0.5*[tibstringpar:StringL]-20.57*mm-2*[tibstringpar:CoolPipeDx]"/> + <Constant name="Det0Z" value="-605.456*mm"/> + <Constant name="Det1Z" value="-379.133*mm"/> + <Constant name="Det2Z" value="-152.408*mm"/> + <Constant name="ShiftDet" value="-[FBSign]*0.5*[ThatStringL]+[IESign]*[tibmodpar:WaferZ]"/> + <Constant name="ShiftAOHLedge" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibmodpar:AOHLedgeModOffset])"/> + <Constant name="ShiftAOHBox" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibmodpar:AOHBoxDz])"/> + <Constant name="ShiftMCModConn" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibstringpar:MCModConnOffset])"/> + <Constant name="MCHeadZ" value="[FBSign]*(0.5*[ThisStringL]-[tibstringpar:MCHeadDz])"/> + <Constant name="MCZ" value="[FBSign]*(0.5*[ThisStringL]-0.5*[MotherCableL]-2*[tibstringpar:MCHeadDz])"/> + <Constant name="CoolSZ" value="[FBSign]*(0.5*[ThisStringL]-0.5*[CoolL])"/> + <Constant name="CoolWZ" value="[FBSign]*([ThisStringL]/2-[CoolL]-[tibstringpar:CoolPipeDx])"/> + </ConstantsSection> + <SolidSection label="tibstring2ul.xml"> + <Box name="TIBString2UpMinCoolBox" dx="[tibstringpar:CoolBoxDx]" dy="[tibstringpar:CoolBoxDy]" dz="[ThisStringL]/2"/> + <Box name="TIBString2UpMinModuleBox" dx="[tibmodpar:ModuleDx]" dy="[tibmodpar:SSModuleDy]" dz="[ThisStringL]/2"/> + <Box name="TIBString2UpMinCableBox" dx="[tibstringpar:CableBoxDx]" dy="[tibstringpar:SSCableBoxDy]" dz="[ThisStringL]/2"/> + <UnionSolid name="TIBString2UpMinModAndCool"> + <rSolid name="TIBString2UpMinModuleBox"/> + <rSolid name="TIBString2UpMinCoolBox"/> + <Translation x="[zero]" y="[tibstringpar:SSCoolBoxY]" z="[zero]"/> + </UnionSolid> + <UnionSolid name="TIBString2UpMin"> + <rSolid name="TIBString2UpMinModAndCool"/> + <rSolid name="TIBString2UpMinCableBox"/> + <Translation x="[zero]" y="[tibstringpar:SSCableBoxY]" z="[zero]"/> + </UnionSolid> + <Box name="TIBString2UpMinCable" dx="[tibstringpar:MotherCableW]/2" dy="[tibstringpar:MotherCableT]/2" dz="[MotherCableL]/2"/> + <Box name="TIBString2UpMinCoolS" dx="[tibstringpar:CoolPipeDx]" dy="[tibstringpar:CoolPipeDy]" dz="[CoolL]/2"/> + <Box name="TIBString2UpMinCoolW" dx="[tibstringpar:CoolPipeX]+[tibstringpar:CoolPipeDx]" dy="[tibstringpar:CoolPipeDy]" dz="[tibstringpar:CoolPipeDx]"/> + </SolidSection> + <LogicalPartSection label="tibstring2ul.xml"> + <LogicalPart name="TIBString2UpMin1" category="unspecified"> + <rSolid name="TIBString2UpMin"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TIBString2UpMinCable" category="unspecified"> + <rSolid name="TIBString2UpMinCable"/> + <rMaterial name="tibmaterial:TIB_MCable"/> + </LogicalPart> + <LogicalPart name="TIBString2UpMinCoolS" category="unspecified"> + <rSolid name="TIBString2UpMinCoolS"/> + <rMaterial name="tibmaterial:TIB_CoolPipe"/> + </LogicalPart> + <LogicalPart name="TIBString2UpMinCoolW" category="unspecified"> + <rSolid name="TIBString2UpMinCoolW"/> + <rMaterial name="tibmaterial:TIB_CoolPipe"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTrackerZPosAlgo"> + <rParent name="tibstring2ul:TIBString2UpMin1"/> + <String name="ChildName" value="tibmodule2:TIBModule2"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftDet]), ([Det1Z]+[ShiftDet]), ([Det2Z]+[ShiftDet]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:180D, tibstringpar:180D, tibstringpar:180D</Vector> + </Algorithm> + <PosPartSection label="tibstring2ul.xml"> + <PosPart copyNumber="1"> + <rParent name="tibstring2ul:TIBString2UpMin1"/> + <rChild name="tibstringpar:MCHead"/> + <Translation x="[tibstringpar:MCHeadX]" y="[tibstringpar:SSMCHeadY]" z="[MCHeadZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring2ul:TIBString2UpMin1"/> + <rChild name="tibstring2ul:TIBString2UpMinCable"/> + <Translation x="[tibstringpar:MotherCableX]" y="[tibstringpar:SSMotherCableY]" z="[MCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring2ul:TIBString2UpMin1"/> + <rChild name="tibstring2ul:TIBString2UpMinCoolS"/> + <Translation x="-[tibstringpar:CoolPipeX]" y="[tibstringpar:SSCoolPipeY]" z="[CoolSZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tibstring2ul:TIBString2UpMin1"/> + <rChild name="tibstring2ul:TIBString2UpMinCoolS"/> + <Translation x="[tibstringpar:CoolPipeX]" y="[tibstringpar:SSCoolPipeY]" z="[CoolSZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring2ul:TIBString2UpMin1"/> + <rChild name="tibstring2ul:TIBString2UpMinCoolW"/> + <Translation x="[zero]" y="[tibstringpar:SSCoolPipeY]" z="[CoolWZ]"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring2ul:TIBString2UpMin1"/> + <String name="ChildName" value="tibmodpar:TIBModLedgeBox"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:SSLedgeBoxY], [tibmodpar:SSLedgeBoxY], [tibmodpar:SSLedgeBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftDet]), ([Det1Z]+[ShiftDet]), ([Det2Z]+[ShiftDet]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:180D, tibstringpar:180D, tibstringpar:180D</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring2ul:TIBString2UpMin1"/> + <String name="ChildName" value="tibmodpar:TIBAOHLedge"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:SSLedgeBoxY], [tibmodpar:SSLedgeBoxY], [tibmodpar:SSLedgeBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftAOHLedge]), ([Det1Z]+[ShiftAOHLedge]), ([Det2Z]+[ShiftAOHLedge]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:180D, tibstringpar:180D, tibstringpar:180D</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring2ul:TIBString2UpMin1"/> + <String name="ChildName" value="tibmodpar:TIBSSAOHBox"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [tibmodpar:SSAOHBoxX], [tibmodpar:SSAOHBoxX], [tibmodpar:SSAOHBoxX]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:SSAOHBoxY], [tibmodpar:SSAOHBoxY], [tibmodpar:SSAOHBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftAOHBox]), ([Det1Z]+[ShiftAOHBox]), ([Det2Z]+[ShiftAOHBox]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:180D, tibstringpar:180D, tibstringpar:180D</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring2ul:TIBString2UpMin1"/> + <String name="ChildName" value="tibstringpar:SSMCModConn"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [tibstringpar:MCModConnX], [tibstringpar:MCModConnX], [tibstringpar:MCModConnX]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibstringpar:SSMCModConnY], [tibstringpar:SSMCModConnY], [tibstringpar:SSMCModConnY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftMCModConn]), ([Det1Z]+[ShiftMCModConn]), ([Det2Z]+[ShiftMCModConn]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tibstring2ur.xml b/examples/DDCMS/data/tibstring2ur.xml new file mode 100644 index 000000000..f7432b35e --- /dev/null +++ b/examples/DDCMS/data/tibstring2ur.xml @@ -0,0 +1,153 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <!-- LAYER 3 EXT FW --> + <ConstantsSection label="tibstring2ur.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="FBSign" value="[tibstringpar:FWSign]"/> + <Constant name="IESign" value="[tibstringpar:EXT3Sign]"/> + <Constant name="MotherCableL" value="56.14*cm-2*[tibstringpar:MCHeadDz]"/> + <Constant name="ThisStringL" value="[tibstring2:StringUpPlsL]"/> + <Constant name="ThatStringL" value="[tibstringpar:StringL]-[ThisStringL]"/> + <Constant name="CoolL" value="0.5*[tibstringpar:StringL]-13.76*mm-2*[tibstringpar:CoolPipeDx]"/> + <Constant name="Det0Z" value="74.5760*mm"/> + <Constant name="Det1Z" value="301.441*mm"/> + <Constant name="Det2Z" value="527.901*mm"/> + <Constant name="ShiftDet" value="-[FBSign]*0.5*[ThatStringL]+[IESign]*[tibmodpar:WaferZ]"/> + <Constant name="ShiftAOHLedge" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibmodpar:AOHLedgeModOffset])"/> + <Constant name="ShiftAOHBox" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibmodpar:AOHBoxDz])"/> + <Constant name="ShiftMCModConn" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibstringpar:MCModConnOffset])"/> + <Constant name="MCHeadZ" value="[FBSign]*(0.5*[ThisStringL]-[tibstringpar:MCHeadDz])"/> + <Constant name="MCZ" value="[FBSign]*(0.5*[ThisStringL]-0.5*[MotherCableL]-2*[tibstringpar:MCHeadDz])"/> + <Constant name="CoolSZ" value="[FBSign]*(0.5*[ThisStringL]-0.5*[CoolL])"/> + <Constant name="CoolWZ" value="[FBSign]*([ThisStringL]/2-[CoolL]-[tibstringpar:CoolPipeDx])"/> + </ConstantsSection> + <SolidSection label="tibstring2ur.xml"> + <Box name="TIBString2UpPlsCoolBox" dx="[tibstringpar:CoolBoxDx]" dy="[tibstringpar:CoolBoxDy]" dz="[ThisStringL]/2"/> + <Box name="TIBString2UpPlsModuleBox" dx="[tibmodpar:ModuleDx]" dy="[tibmodpar:SSModuleDy]" dz="[ThisStringL]/2"/> + <Box name="TIBString2UpPlsCableBox" dx="[tibstringpar:CableBoxDx]" dy="[tibstringpar:SSCableBoxDy]" dz="[ThisStringL]/2"/> + <UnionSolid name="TIBString2UpPlsModAndCool"> + <rSolid name="TIBString2UpPlsModuleBox"/> + <rSolid name="TIBString2UpPlsCoolBox"/> + <Translation x="[zero]" y="[tibstringpar:SSCoolBoxY]" z="[zero]"/> + </UnionSolid> + <UnionSolid name="TIBString2UpPls"> + <rSolid name="TIBString2UpPlsModAndCool"/> + <rSolid name="TIBString2UpPlsCableBox"/> + <Translation x="[zero]" y="[tibstringpar:SSCableBoxY]" z="[zero]"/> + </UnionSolid> + <Box name="TIBString2UpPlsCable" dx="[tibstringpar:MotherCableW]/2" dy="[tibstringpar:MotherCableT]/2" dz="[MotherCableL]/2"/> + <Box name="TIBString2UpPlsCoolS" dx="[tibstringpar:CoolPipeDx]" dy="[tibstringpar:CoolPipeDy]" dz="[CoolL]/2"/> + <Box name="TIBString2UpPlsCoolW" dx="[tibstringpar:CoolPipeX]+[tibstringpar:CoolPipeDx]" dy="[tibstringpar:CoolPipeDy]" dz="[tibstringpar:CoolPipeDx]"/> + </SolidSection> + <LogicalPartSection label="tibstring2ur.xml"> + <LogicalPart name="TIBString2UpPls1" category="unspecified"> + <rSolid name="TIBString2UpPls"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TIBString2UpPlsCable" category="unspecified"> + <rSolid name="TIBString2UpPlsCable"/> + <rMaterial name="tibmaterial:TIB_MCable"/> + </LogicalPart> + <LogicalPart name="TIBString2UpPlsCoolS" category="unspecified"> + <rSolid name="TIBString2UpPlsCoolS"/> + <rMaterial name="tibmaterial:TIB_CoolPipe"/> + </LogicalPart> + <LogicalPart name="TIBString2UpPlsCoolW" category="unspecified"> + <rSolid name="TIBString2UpPlsCoolW"/> + <rMaterial name="tibmaterial:TIB_CoolPipe"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTrackerZPosAlgo"> + <rParent name="tibstring2ur:TIBString2UpPls1"/> + <String name="ChildName" value="tibmodule2:TIBModule2"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftDet]), ([Det1Z]+[ShiftDet]), ([Det2Z]+[ShiftDet]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:180D, tibstringpar:180D, tibstringpar:180D</Vector> + </Algorithm> + <PosPartSection label="tibstring2ur.xml"> + <PosPart copyNumber="1"> + <rParent name="tibstring2ur:TIBString2UpPls1"/> + <rChild name="tibstringpar:MCHead"/> + <Translation x="[tibstringpar:MCHeadX]" y="[tibstringpar:SSMCHeadY]" z="[MCHeadZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring2ur:TIBString2UpPls1"/> + <rChild name="tibstring2ur:TIBString2UpPlsCable"/> + <Translation x="[tibstringpar:MotherCableX]" y="[tibstringpar:SSMotherCableY]" z="[MCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring2ur:TIBString2UpPls1"/> + <rChild name="tibstring2ur:TIBString2UpPlsCoolS"/> + <Translation x="-[tibstringpar:CoolPipeX]" y="[tibstringpar:SSCoolPipeY]" z="[CoolSZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tibstring2ur:TIBString2UpPls1"/> + <rChild name="tibstring2ur:TIBString2UpPlsCoolS"/> + <Translation x="[tibstringpar:CoolPipeX]" y="[tibstringpar:SSCoolPipeY]" z="[CoolSZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring2ur:TIBString2UpPls1"/> + <rChild name="tibstring2ur:TIBString2UpPlsCoolW"/> + <Translation x="[zero]" y="[tibstringpar:SSCoolPipeY]" z="[CoolWZ]"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring2ur:TIBString2UpPls1"/> + <String name="ChildName" value="tibmodpar:TIBModLedgeBox"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:SSLedgeBoxY], [tibmodpar:SSLedgeBoxY], [tibmodpar:SSLedgeBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftDet]), ([Det1Z]+[ShiftDet]), ([Det2Z]+[ShiftDet]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:180D, tibstringpar:180D, tibstringpar:180D</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring2ur:TIBString2UpPls1"/> + <String name="ChildName" value="tibmodpar:TIBAOHLedge"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:SSLedgeBoxY], [tibmodpar:SSLedgeBoxY], [tibmodpar:SSLedgeBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftAOHLedge]), ([Det1Z]+[ShiftAOHLedge]), ([Det2Z]+[ShiftAOHLedge]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring2ur:TIBString2UpPls1"/> + <String name="ChildName" value="tibmodpar:TIBSSAOHBox"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [tibmodpar:SSAOHBoxX], [tibmodpar:SSAOHBoxX], [tibmodpar:SSAOHBoxX]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:SSAOHBoxY], [tibmodpar:SSAOHBoxY], [tibmodpar:SSAOHBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftAOHBox]), ([Det1Z]+[ShiftAOHBox]), ([Det2Z]+[ShiftAOHBox]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:180D, tibstringpar:180D, tibstringpar:180D</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring2ur:TIBString2UpPls1"/> + <String name="ChildName" value="tibstringpar:SSMCModConn"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [tibstringpar:MCModConnX], [tibstringpar:MCModConnX], [tibstringpar:MCModConnX]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibstringpar:SSMCModConnY], [tibstringpar:SSMCModConnY], [tibstringpar:SSMCModConnY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftMCModConn]), ([Det1Z]+[ShiftMCModConn]), ([Det2Z]+[ShiftMCModConn]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tibstring3.xml b/examples/DDCMS/data/tibstring3.xml new file mode 100644 index 000000000..63b17e298 --- /dev/null +++ b/examples/DDCMS/data/tibstring3.xml @@ -0,0 +1,44 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tibstring3.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="StringIntOff" value="-42.17*mm"/> + <Constant name="StringExtOff" value="6.59*mm"/> + <Constant name="StringLoMinL" value="0.5*[tibstringpar:StringL]+[StringIntOff]"/> + <Constant name="StringUpMinL" value="0.5*[tibstringpar:StringL]+[StringExtOff]"/> + <Constant name="StringLoPlsL" value="0.5*[tibstringpar:StringL]-[StringIntOff]"/> + <Constant name="StringUpPlsL" value="0.5*[tibstringpar:StringL]-[StringExtOff]"/> + </ConstantsSection> + <LogicalPartSection label="tibstring3.xml"> + <LogicalPart name="TIBString3Lo1" category="unspecified"> + <rSolid name="tibstringpar:TIBSSString1"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TIBString3Up1" category="unspecified"> + <rSolid name="tibstringpar:TIBSSString1"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tibstring3.xml"> + <PosPart copyNumber="1"> + <rParent name="tibstring3:TIBString3Lo1"/> + <rChild name="tibstring3ll:TIBString3LoMin1"/> + <Translation x="[zero]" y="[zero]" z="-[tibstring3:StringLoPlsL]/2"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring3:TIBString3Lo1"/> + <rChild name="tibstring3lr:TIBString3LoPls1"/> + <Translation x="[zero]" y="[zero]" z="[tibstring3:StringLoMinL]/2"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring3:TIBString3Up1"/> + <rChild name="tibstring3ul:TIBString3UpMin1"/> + <Translation x="[zero]" y="[zero]" z="-[tibstring3:StringUpPlsL]/2"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring3:TIBString3Up1"/> + <rChild name="tibstring3ur:TIBString3UpPls1"/> + <Translation x="[zero]" y="[zero]" z="[tibstring3:StringUpMinL]/2"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tibstring3ll.xml b/examples/DDCMS/data/tibstring3ll.xml new file mode 100644 index 000000000..9e71f99ca --- /dev/null +++ b/examples/DDCMS/data/tibstring3ll.xml @@ -0,0 +1,153 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <!-- LAYER 4 INT BW --> + <ConstantsSection label="tibstring3ll.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="FBSign" value="[tibstringpar:BWSign]"/> + <Constant name="IESign" value="[tibstringpar:INT4Sign]"/> + <Constant name="MotherCableL" value="67.04*cm-2*[tibstringpar:MCHeadDz]"/> + <Constant name="ThisStringL" value="[tibstring3:StringLoMinL]"/> + <Constant name="ThatStringL" value="[tibstringpar:StringL]-[ThisStringL]"/> + <Constant name="CoolL" value="0.5*[tibstringpar:StringL]-45.52*mm-2*[tibstringpar:CoolPipeDx]"/> + <Constant name="Det0Z" value="-605.456*mm"/> + <Constant name="Det1Z" value="-391.972*mm"/> + <Constant name="Det2Z" value="-178.218*mm"/> + <Constant name="ShiftDet" value="-[FBSign]*0.5*[ThatStringL]+[IESign]*[tibmodpar:WaferZ]"/> + <Constant name="ShiftAOHLedge" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibmodpar:AOHLedgeModOffset])"/> + <Constant name="ShiftAOHBox" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibmodpar:AOHBoxDz])"/> + <Constant name="ShiftMCModConn" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibstringpar:MCModConnOffset])"/> + <Constant name="MCHeadZ" value="[FBSign]*(0.5*[ThisStringL]-[tibstringpar:MCHeadDz])"/> + <Constant name="MCZ" value="[FBSign]*(0.5*[ThisStringL]-0.5*[MotherCableL]-2*[tibstringpar:MCHeadDz])"/> + <Constant name="CoolSZ" value="[FBSign]*(0.5*[ThisStringL]-0.5*[CoolL])"/> + <Constant name="CoolWZ" value="[FBSign]*([ThisStringL]/2-[CoolL]-[tibstringpar:CoolPipeDx])"/> + </ConstantsSection> + <SolidSection label="tibstring3ll.xml"> + <Box name="TIBString3LoMinCoolBox" dx="[tibstringpar:CoolBoxDx]" dy="[tibstringpar:CoolBoxDy]" dz="[ThisStringL]/2"/> + <Box name="TIBString3LoMinModuleBox" dx="[tibmodpar:ModuleDx]" dy="[tibmodpar:SSModuleDy]" dz="[ThisStringL]/2"/> + <Box name="TIBString3LoMinCableBox" dx="[tibstringpar:CableBoxDx]" dy="[tibstringpar:SSCableBoxDy]" dz="[ThisStringL]/2"/> + <UnionSolid name="TIBString3LoMinModAndCool"> + <rSolid name="TIBString3LoMinModuleBox"/> + <rSolid name="TIBString3LoMinCoolBox"/> + <Translation x="[zero]" y="[tibstringpar:SSCoolBoxY]" z="[zero]"/> + </UnionSolid> + <UnionSolid name="TIBString3LoMin"> + <rSolid name="TIBString3LoMinModAndCool"/> + <rSolid name="TIBString3LoMinCableBox"/> + <Translation x="[zero]" y="[tibstringpar:SSCableBoxY]" z="[zero]"/> + </UnionSolid> + <Box name="TIBString3LoMinCable" dx="[tibstringpar:MotherCableW]/2" dy="[tibstringpar:MotherCableT]/2" dz="[MotherCableL]/2"/> + <Box name="TIBString3LoMinCoolS" dx="[tibstringpar:CoolPipeDx]" dy="[tibstringpar:CoolPipeDy]" dz="[CoolL]/2"/> + <Box name="TIBString3LoMinCoolW" dx="[tibstringpar:CoolPipeX]+[tibstringpar:CoolPipeDx]" dy="[tibstringpar:CoolPipeDy]" dz="[tibstringpar:CoolPipeDx]"/> + </SolidSection> + <LogicalPartSection label="tibstring3ll.xml"> + <LogicalPart name="TIBString3LoMin1" category="unspecified"> + <rSolid name="TIBString3LoMin"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TIBString3LoMinCable" category="unspecified"> + <rSolid name="TIBString3LoMinCable"/> + <rMaterial name="tibmaterial:TIB_MCable"/> + </LogicalPart> + <LogicalPart name="TIBString3LoMinCoolS" category="unspecified"> + <rSolid name="TIBString3LoMinCoolS"/> + <rMaterial name="tibmaterial:TIB_CoolPipe"/> + </LogicalPart> + <LogicalPart name="TIBString3LoMinCoolW" category="unspecified"> + <rSolid name="TIBString3LoMinCoolW"/> + <rMaterial name="tibmaterial:TIB_CoolPipe"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTrackerZPosAlgo"> + <rParent name="tibstring3ll:TIBString3LoMin1"/> + <String name="ChildName" value="tibmodule2:TIBModule2"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftDet]), ([Det1Z]+[ShiftDet]), ([Det2Z]+[ShiftDet]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:180D, tibstringpar:180D, tibstringpar:180D</Vector> + </Algorithm> + <PosPartSection label="tibstring3ll.xml"> + <PosPart copyNumber="1"> + <rParent name="tibstring3ll:TIBString3LoMin1"/> + <rChild name="tibstringpar:MCHead"/> + <Translation x="[tibstringpar:MCHeadX]" y="[tibstringpar:SSMCHeadY]" z="[MCHeadZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring3ll:TIBString3LoMin1"/> + <rChild name="tibstring3ll:TIBString3LoMinCable"/> + <Translation x="[tibstringpar:MotherCableX]" y="[tibstringpar:SSMotherCableY]" z="[MCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring3ll:TIBString3LoMin1"/> + <rChild name="tibstring3ll:TIBString3LoMinCoolS"/> + <Translation x="-[tibstringpar:CoolPipeX]" y="[tibstringpar:SSCoolPipeY]" z="[CoolSZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tibstring3ll:TIBString3LoMin1"/> + <rChild name="tibstring3ll:TIBString3LoMinCoolS"/> + <Translation x="[tibstringpar:CoolPipeX]" y="[tibstringpar:SSCoolPipeY]" z="[CoolSZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring3ll:TIBString3LoMin1"/> + <rChild name="tibstring3ll:TIBString3LoMinCoolW"/> + <Translation x="[zero]" y="[tibstringpar:SSCoolPipeY]" z="[CoolWZ]"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring3ll:TIBString3LoMin1"/> + <String name="ChildName" value="tibmodpar:TIBModLedgeBox"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:SSLedgeBoxY], [tibmodpar:SSLedgeBoxY], [tibmodpar:SSLedgeBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftDet]), ([Det1Z]+[ShiftDet]), ([Det2Z]+[ShiftDet]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:180D, tibstringpar:180D, tibstringpar:180D</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring3ll:TIBString3LoMin1"/> + <String name="ChildName" value="tibmodpar:TIBAOHLedge"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:SSLedgeBoxY], [tibmodpar:SSLedgeBoxY], [tibmodpar:SSLedgeBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftAOHLedge]), ([Det1Z]+[ShiftAOHLedge]), ([Det2Z]+[ShiftAOHLedge]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:180D, tibstringpar:180D, tibstringpar:180D</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring3ll:TIBString3LoMin1"/> + <String name="ChildName" value="tibmodpar:TIBSSAOHBox"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [tibmodpar:SSAOHBoxX], [tibmodpar:SSAOHBoxX], [tibmodpar:SSAOHBoxX]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:SSAOHBoxY], [tibmodpar:SSAOHBoxY], [tibmodpar:SSAOHBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftAOHBox]), ([Det1Z]+[ShiftAOHBox]), ([Det2Z]+[ShiftAOHBox]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:180D, tibstringpar:180D, tibstringpar:180D</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring3ll:TIBString3LoMin1"/> + <String name="ChildName" value="tibstringpar:SSMCModConn"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [tibstringpar:MCModConnX], [tibstringpar:MCModConnX], [tibstringpar:MCModConnX]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibstringpar:SSMCModConnY], [tibstringpar:SSMCModConnY], [tibstringpar:SSMCModConnY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftMCModConn]), ([Det1Z]+[ShiftMCModConn]), ([Det2Z]+[ShiftMCModConn]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tibstring3lr.xml b/examples/DDCMS/data/tibstring3lr.xml new file mode 100644 index 000000000..112fcf3ff --- /dev/null +++ b/examples/DDCMS/data/tibstring3lr.xml @@ -0,0 +1,153 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <!-- LAYER 4 INT FW --> + <ConstantsSection label="tibstring3lr.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="FBSign" value="[tibstringpar:FWSign]"/> + <Constant name="IESign" value="[tibstringpar:INT4Sign]"/> + <Constant name="MotherCableL" value="60.25*cm-2*[tibstringpar:MCHeadDz]"/> + <Constant name="ThisStringL" value="[tibstring3:StringLoPlsL]"/> + <Constant name="ThatStringL" value="[tibstringpar:StringL]-[ThisStringL]"/> + <Constant name="CoolL" value="0.5*[tibstringpar:StringL]+38.08*mm-2*[tibstringpar:CoolPipeDx]"/> + <Constant name="Det0Z" value="33.5070*mm"/> + <Constant name="Det1Z" value="247.444*mm"/> + <Constant name="Det2Z" value="461.110*mm"/> + <Constant name="ShiftDet" value="-[FBSign]*0.5*[ThatStringL]+[IESign]*[tibmodpar:WaferZ]"/> + <Constant name="ShiftAOHLedge" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibmodpar:AOHLedgeModOffset])"/> + <Constant name="ShiftAOHBox" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibmodpar:AOHBoxDz])"/> + <Constant name="ShiftMCModConn" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibstringpar:MCModConnOffset])"/> + <Constant name="MCHeadZ" value="[FBSign]*(0.5*[ThisStringL]-[tibstringpar:MCHeadDz])"/> + <Constant name="MCZ" value="[FBSign]*(0.5*[ThisStringL]-0.5*[MotherCableL]-2*[tibstringpar:MCHeadDz])"/> + <Constant name="CoolSZ" value="[FBSign]*(0.5*[ThisStringL]-0.5*[CoolL])"/> + <Constant name="CoolWZ" value="[FBSign]*([ThisStringL]/2-[CoolL]-[tibstringpar:CoolPipeDx])"/> + </ConstantsSection> + <SolidSection label="tibstring3lr.xml"> + <Box name="TIBString3LoPlsCoolBox" dx="[tibstringpar:CoolBoxDx]" dy="[tibstringpar:CoolBoxDy]" dz="[ThisStringL]/2"/> + <Box name="TIBString3LoPlsModuleBox" dx="[tibmodpar:ModuleDx]" dy="[tibmodpar:SSModuleDy]" dz="[ThisStringL]/2"/> + <Box name="TIBString3LoPlsCableBox" dx="[tibstringpar:CableBoxDx]" dy="[tibstringpar:SSCableBoxDy]" dz="[ThisStringL]/2"/> + <UnionSolid name="TIBString3LoPlsModAndCool"> + <rSolid name="TIBString3LoPlsModuleBox"/> + <rSolid name="TIBString3LoPlsCoolBox"/> + <Translation x="[zero]" y="[tibstringpar:SSCoolBoxY]" z="[zero]"/> + </UnionSolid> + <UnionSolid name="TIBString3LoPls"> + <rSolid name="TIBString3LoPlsModAndCool"/> + <rSolid name="TIBString3LoPlsCableBox"/> + <Translation x="[zero]" y="[tibstringpar:SSCableBoxY]" z="[zero]"/> + </UnionSolid> + <Box name="TIBString3LoPlsCable" dx="[tibstringpar:MotherCableW]/2" dy="[tibstringpar:MotherCableT]/2" dz="[MotherCableL]/2"/> + <Box name="TIBString3LoPlsCoolS" dx="[tibstringpar:CoolPipeDx]" dy="[tibstringpar:CoolPipeDy]" dz="[CoolL]/2"/> + <Box name="TIBString3LoPlsCoolW" dx="[tibstringpar:CoolPipeX]+[tibstringpar:CoolPipeDx]" dy="[tibstringpar:CoolPipeDy]" dz="[tibstringpar:CoolPipeDx]"/> + </SolidSection> + <LogicalPartSection label="tibstring3lr.xml"> + <LogicalPart name="TIBString3LoPls1" category="unspecified"> + <rSolid name="TIBString3LoPls"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TIBString3LoPlsCable" category="unspecified"> + <rSolid name="TIBString3LoPlsCable"/> + <rMaterial name="tibmaterial:TIB_MCable"/> + </LogicalPart> + <LogicalPart name="TIBString3LoPlsCoolS" category="unspecified"> + <rSolid name="TIBString3LoPlsCoolS"/> + <rMaterial name="tibmaterial:TIB_CoolPipe"/> + </LogicalPart> + <LogicalPart name="TIBString3LoPlsCoolW" category="unspecified"> + <rSolid name="TIBString3LoPlsCoolW"/> + <rMaterial name="tibmaterial:TIB_CoolPipe"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTrackerZPosAlgo"> + <rParent name="tibstring3lr:TIBString3LoPls1"/> + <String name="ChildName" value="tibmodule2:TIBModule2"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftDet]), ([Det1Z]+[ShiftDet]), ([Det2Z]+[ShiftDet]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:180D, tibstringpar:180D, tibstringpar:180D</Vector> + </Algorithm> + <PosPartSection label="tibstring3lr.xml"> + <PosPart copyNumber="1"> + <rParent name="tibstring3lr:TIBString3LoPls1"/> + <rChild name="tibstringpar:MCHead"/> + <Translation x="[tibstringpar:MCHeadX]" y="[tibstringpar:SSMCHeadY]" z="[MCHeadZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring3lr:TIBString3LoPls1"/> + <rChild name="tibstring3lr:TIBString3LoPlsCable"/> + <Translation x="[tibstringpar:MotherCableX]" y="[tibstringpar:SSMotherCableY]" z="[MCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring3lr:TIBString3LoPls1"/> + <rChild name="tibstring3lr:TIBString3LoPlsCoolS"/> + <Translation x="-[tibstringpar:CoolPipeX]" y="[tibstringpar:SSCoolPipeY]" z="[CoolSZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tibstring3lr:TIBString3LoPls1"/> + <rChild name="tibstring3lr:TIBString3LoPlsCoolS"/> + <Translation x="[tibstringpar:CoolPipeX]" y="[tibstringpar:SSCoolPipeY]" z="[CoolSZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring3lr:TIBString3LoPls1"/> + <rChild name="tibstring3lr:TIBString3LoPlsCoolW"/> + <Translation x="[zero]" y="[tibstringpar:SSCoolPipeY]" z="[CoolWZ]"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring3lr:TIBString3LoPls1"/> + <String name="ChildName" value="tibmodpar:TIBModLedgeBox"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:SSLedgeBoxY], [tibmodpar:SSLedgeBoxY], [tibmodpar:SSLedgeBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftDet]), ([Det1Z]+[ShiftDet]), ([Det2Z]+[ShiftDet]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:180D, tibstringpar:180D, tibstringpar:180D</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring3lr:TIBString3LoPls1"/> + <String name="ChildName" value="tibmodpar:TIBAOHLedge"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:SSLedgeBoxY], [tibmodpar:SSLedgeBoxY], [tibmodpar:SSLedgeBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftAOHLedge]), ([Det1Z]+[ShiftAOHLedge]), ([Det2Z]+[ShiftAOHLedge]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring3lr:TIBString3LoPls1"/> + <String name="ChildName" value="tibmodpar:TIBSSAOHBox"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [tibmodpar:SSAOHBoxX], [tibmodpar:SSAOHBoxX], [tibmodpar:SSAOHBoxX]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:SSAOHBoxY], [tibmodpar:SSAOHBoxY], [tibmodpar:SSAOHBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftAOHBox]), ([Det1Z]+[ShiftAOHBox]), ([Det2Z]+[ShiftAOHBox]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:180D, tibstringpar:180D, tibstringpar:180D</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring3lr:TIBString3LoPls1"/> + <String name="ChildName" value="tibstringpar:SSMCModConn"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [tibstringpar:MCModConnX], [tibstringpar:MCModConnX], [tibstringpar:MCModConnX]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibstringpar:SSMCModConnY], [tibstringpar:SSMCModConnY], [tibstringpar:SSMCModConnY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftMCModConn]), ([Det1Z]+[ShiftMCModConn]), ([Det2Z]+[ShiftMCModConn]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tibstring3ul.xml b/examples/DDCMS/data/tibstring3ul.xml new file mode 100644 index 000000000..37334b4e3 --- /dev/null +++ b/examples/DDCMS/data/tibstring3ul.xml @@ -0,0 +1,153 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <!-- LAYER 4 EXT BW --> + <ConstantsSection label="tibstring3ul.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="FBSign" value="[tibstringpar:BWSign]"/> + <Constant name="IESign" value="[tibstringpar:EXT4Sign]"/> + <Constant name="MotherCableL" value="55.99*cm-2*[tibstringpar:MCHeadDz]"/> + <Constant name="ThisStringL" value="[tibstring3:StringUpMinL]"/> + <Constant name="ThatStringL" value="[tibstringpar:StringL]-[ThisStringL]"/> + <Constant name="CoolL" value="0.5*[tibstringpar:StringL]-13.19*mm-2*[tibstringpar:CoolPipeDx]"/> + <Constant name="Det0Z" value="-531.792*mm"/> + <Constant name="Det1Z" value="-304.048*mm"/> + <Constant name="Det2Z" value="-76.0150*mm"/> + <Constant name="ShiftDet" value="-[FBSign]*0.5*[ThatStringL]+[IESign]*[tibmodpar:WaferZ]"/> + <Constant name="ShiftAOHLedge" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibmodpar:AOHLedgeModOffset])"/> + <Constant name="ShiftAOHBox" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibmodpar:AOHBoxDz])"/> + <Constant name="ShiftMCModConn" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibstringpar:MCModConnOffset])"/> + <Constant name="MCHeadZ" value="[FBSign]*(0.5*[ThisStringL]-[tibstringpar:MCHeadDz])"/> + <Constant name="MCZ" value="[FBSign]*(0.5*[ThisStringL]-0.5*[MotherCableL]-2*[tibstringpar:MCHeadDz])"/> + <Constant name="CoolSZ" value="[FBSign]*(0.5*[ThisStringL]-0.5*[CoolL])"/> + <Constant name="CoolWZ" value="[FBSign]*([ThisStringL]/2-[CoolL]-[tibstringpar:CoolPipeDx])"/> + </ConstantsSection> + <SolidSection label="tibstring3ul.xml"> + <Box name="TIBString3UpMinCoolBox" dx="[tibstringpar:CoolBoxDx]" dy="[tibstringpar:CoolBoxDy]" dz="[ThisStringL]/2"/> + <Box name="TIBString3UpMinModuleBox" dx="[tibmodpar:ModuleDx]" dy="[tibmodpar:SSModuleDy]" dz="[ThisStringL]/2"/> + <Box name="TIBString3UpMinCableBox" dx="[tibstringpar:CableBoxDx]" dy="[tibstringpar:SSCableBoxDy]" dz="[ThisStringL]/2"/> + <UnionSolid name="TIBString3UpMinModAndCool"> + <rSolid name="TIBString3UpMinModuleBox"/> + <rSolid name="TIBString3UpMinCoolBox"/> + <Translation x="[zero]" y="[tibstringpar:SSCoolBoxY]" z="[zero]"/> + </UnionSolid> + <UnionSolid name="TIBString3UpMin"> + <rSolid name="TIBString3UpMinModAndCool"/> + <rSolid name="TIBString3UpMinCableBox"/> + <Translation x="[zero]" y="[tibstringpar:SSCableBoxY]" z="[zero]"/> + </UnionSolid> + <Box name="TIBString3UpMinCable" dx="[tibstringpar:MotherCableW]/2" dy="[tibstringpar:MotherCableT]/2" dz="[MotherCableL]/2"/> + <Box name="TIBString3UpMinCoolS" dx="[tibstringpar:CoolPipeDx]" dy="[tibstringpar:CoolPipeDy]" dz="[CoolL]/2"/> + <Box name="TIBString3UpMinCoolW" dx="[tibstringpar:CoolPipeX]+[tibstringpar:CoolPipeDx]" dy="[tibstringpar:CoolPipeDy]" dz="[tibstringpar:CoolPipeDx]"/> + </SolidSection> + <LogicalPartSection label="tibstring3ul.xml"> + <LogicalPart name="TIBString3UpMin1" category="unspecified"> + <rSolid name="TIBString3UpMin"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TIBString3UpMinCable" category="unspecified"> + <rSolid name="TIBString3UpMinCable"/> + <rMaterial name="tibmaterial:TIB_MCable"/> + </LogicalPart> + <LogicalPart name="TIBString3UpMinCoolS" category="unspecified"> + <rSolid name="TIBString3UpMinCoolS"/> + <rMaterial name="tibmaterial:TIB_CoolPipe"/> + </LogicalPart> + <LogicalPart name="TIBString3UpMinCoolW" category="unspecified"> + <rSolid name="TIBString3UpMinCoolW"/> + <rMaterial name="tibmaterial:TIB_CoolPipe"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTrackerZPosAlgo"> + <rParent name="tibstring3ul:TIBString3UpMin1"/> + <String name="ChildName" value="tibmodule2:TIBModule2"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftDet]), ([Det1Z]+[ShiftDet]), ([Det2Z]+[ShiftDet]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> + <PosPartSection label="tibstring3ul.xml"> + <PosPart copyNumber="1"> + <rParent name="tibstring3ul:TIBString3UpMin1"/> + <rChild name="tibstringpar:MCHead"/> + <Translation x="[tibstringpar:MCHeadX]" y="[tibstringpar:SSMCHeadY]" z="[MCHeadZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring3ul:TIBString3UpMin1"/> + <rChild name="tibstring3ul:TIBString3UpMinCable"/> + <Translation x="[tibstringpar:MotherCableX]" y="[tibstringpar:SSMotherCableY]" z="[MCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring3ul:TIBString3UpMin1"/> + <rChild name="tibstring3ul:TIBString3UpMinCoolS"/> + <Translation x="-[tibstringpar:CoolPipeX]" y="[tibstringpar:SSCoolPipeY]" z="[CoolSZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tibstring3ul:TIBString3UpMin1"/> + <rChild name="tibstring3ul:TIBString3UpMinCoolS"/> + <Translation x="[tibstringpar:CoolPipeX]" y="[tibstringpar:SSCoolPipeY]" z="[CoolSZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring3ul:TIBString3UpMin1"/> + <rChild name="tibstring3ul:TIBString3UpMinCoolW"/> + <Translation x="[zero]" y="[tibstringpar:SSCoolPipeY]" z="[CoolWZ]"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring3ul:TIBString3UpMin1"/> + <String name="ChildName" value="tibmodpar:TIBModLedgeBox"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:SSLedgeBoxY], [tibmodpar:SSLedgeBoxY], [tibmodpar:SSLedgeBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftDet]), ([Det1Z]+[ShiftDet]), ([Det2Z]+[ShiftDet]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring3ul:TIBString3UpMin1"/> + <String name="ChildName" value="tibmodpar:TIBAOHLedge"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:SSLedgeBoxY], [tibmodpar:SSLedgeBoxY], [tibmodpar:SSLedgeBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftAOHLedge]), ([Det1Z]+[ShiftAOHLedge]), ([Det2Z]+[ShiftAOHLedge]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:180D, tibstringpar:180D, tibstringpar:180D</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring3ul:TIBString3UpMin1"/> + <String name="ChildName" value="tibmodpar:TIBSSAOHBox"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [tibmodpar:SSAOHBoxX], [tibmodpar:SSAOHBoxX], [tibmodpar:SSAOHBoxX]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:SSAOHBoxY], [tibmodpar:SSAOHBoxY], [tibmodpar:SSAOHBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftAOHBox]), ([Det1Z]+[ShiftAOHBox]), ([Det2Z]+[ShiftAOHBox]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring3ul:TIBString3UpMin1"/> + <String name="ChildName" value="tibstringpar:SSMCModConn"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [tibstringpar:MCModConnX], [tibstringpar:MCModConnX], [tibstringpar:MCModConnX]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibstringpar:SSMCModConnY], [tibstringpar:SSMCModConnY], [tibstringpar:SSMCModConnY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftMCModConn]), ([Det1Z]+[ShiftMCModConn]), ([Det2Z]+[ShiftMCModConn]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tibstring3ur.xml b/examples/DDCMS/data/tibstring3ur.xml new file mode 100644 index 000000000..5eff5d77e --- /dev/null +++ b/examples/DDCMS/data/tibstring3ur.xml @@ -0,0 +1,153 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <!-- LAYER 4 EXT FW --> + <ConstantsSection label="tibstring3ur.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="FBSign" value="[tibstringpar:FWSign]"/> + <Constant name="IESign" value="[tibstringpar:EXT4Sign]"/> + <Constant name="MotherCableL" value="69.88*cm-2*[tibstringpar:MCHeadDz]"/> + <Constant name="ThisStringL" value="[tibstring3:StringUpPlsL]"/> + <Constant name="ThatStringL" value="[tibstringpar:StringL]-[ThisStringL]"/> + <Constant name="CoolL" value="0.5*[tibstringpar:StringL]-15.18*mm-2*[tibstringpar:CoolPipeDx]"/> + <Constant name="Det0Z" value="149.865*mm"/> + <Constant name="Det1Z" value="377.804*mm"/> + <Constant name="Det2Z" value="605.456*mm"/> + <Constant name="ShiftDet" value="-[FBSign]*0.5*[ThatStringL]+[IESign]*[tibmodpar:WaferZ]"/> + <Constant name="ShiftAOHLedge" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibmodpar:AOHLedgeModOffset])"/> + <Constant name="ShiftAOHBox" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibmodpar:AOHBoxDz])"/> + <Constant name="ShiftMCModConn" value="[ShiftDet]+[IESign]*([tibmodpar:ModuleDz]+[tibstringpar:MCModConnOffset])"/> + <Constant name="MCHeadZ" value="[FBSign]*(0.5*[ThisStringL]-[tibstringpar:MCHeadDz])"/> + <Constant name="MCZ" value="[FBSign]*(0.5*[ThisStringL]-0.5*[MotherCableL]-2*[tibstringpar:MCHeadDz])"/> + <Constant name="CoolSZ" value="[FBSign]*(0.5*[ThisStringL]-0.5*[CoolL])"/> + <Constant name="CoolWZ" value="[FBSign]*([ThisStringL]/2-[CoolL]-[tibstringpar:CoolPipeDx])"/> + </ConstantsSection> + <SolidSection label="tibstring3ur.xml"> + <Box name="TIBString3UpPlsCoolBox" dx="[tibstringpar:CoolBoxDx]" dy="[tibstringpar:CoolBoxDy]" dz="[ThisStringL]/2"/> + <Box name="TIBString3UpPlsModuleBox" dx="[tibmodpar:ModuleDx]" dy="[tibmodpar:SSModuleDy]" dz="[ThisStringL]/2"/> + <Box name="TIBString3UpPlsCableBox" dx="[tibstringpar:CableBoxDx]" dy="[tibstringpar:SSCableBoxDy]" dz="[ThisStringL]/2"/> + <UnionSolid name="TIBString3UpPlsModAndCool"> + <rSolid name="TIBString3UpPlsModuleBox"/> + <rSolid name="TIBString3UpPlsCoolBox"/> + <Translation x="[zero]" y="[tibstringpar:SSCoolBoxY]" z="[zero]"/> + </UnionSolid> + <UnionSolid name="TIBString3UpPls"> + <rSolid name="TIBString3UpPlsModAndCool"/> + <rSolid name="TIBString3UpPlsCableBox"/> + <Translation x="[zero]" y="[tibstringpar:SSCableBoxY]" z="[zero]"/> + </UnionSolid> + <Box name="TIBString3UpPlsCable" dx="[tibstringpar:MotherCableW]/2" dy="[tibstringpar:MotherCableT]/2" dz="[MotherCableL]/2"/> + <Box name="TIBString3UpPlsCoolS" dx="[tibstringpar:CoolPipeDx]" dy="[tibstringpar:CoolPipeDy]" dz="[CoolL]/2"/> + <Box name="TIBString3UpPlsCoolW" dx="[tibstringpar:CoolPipeX]+[tibstringpar:CoolPipeDx]" dy="[tibstringpar:CoolPipeDy]" dz="[tibstringpar:CoolPipeDx]"/> + </SolidSection> + <LogicalPartSection label="tibstring3ur.xml"> + <LogicalPart name="TIBString3UpPls1" category="unspecified"> + <rSolid name="TIBString3UpPls"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TIBString3UpPlsCable" category="unspecified"> + <rSolid name="TIBString3UpPlsCable"/> + <rMaterial name="tibmaterial:TIB_MCable"/> + </LogicalPart> + <LogicalPart name="TIBString3UpPlsCoolS" category="unspecified"> + <rSolid name="TIBString3UpPlsCoolS"/> + <rMaterial name="tibmaterial:TIB_CoolPipe"/> + </LogicalPart> + <LogicalPart name="TIBString3UpPlsCoolW" category="unspecified"> + <rSolid name="TIBString3UpPlsCoolW"/> + <rMaterial name="tibmaterial:TIB_CoolPipe"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTrackerZPosAlgo"> + <rParent name="tibstring3ur:TIBString3UpPls1"/> + <String name="ChildName" value="tibmodule2:TIBModule2"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftDet]), ([Det1Z]+[ShiftDet]), ([Det2Z]+[ShiftDet]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> + <PosPartSection label="tibstring3ur.xml"> + <PosPart copyNumber="1"> + <rParent name="tibstring3ur:TIBString3UpPls1"/> + <rChild name="tibstringpar:MCHead"/> + <Translation x="[tibstringpar:MCHeadX]" y="[tibstringpar:SSMCHeadY]" z="[MCHeadZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring3ur:TIBString3UpPls1"/> + <rChild name="tibstring3ur:TIBString3UpPlsCable"/> + <Translation x="[tibstringpar:MotherCableX]" y="[tibstringpar:SSMotherCableY]" z="[MCZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring3ur:TIBString3UpPls1"/> + <rChild name="tibstring3ur:TIBString3UpPlsCoolS"/> + <Translation x="-[tibstringpar:CoolPipeX]" y="[tibstringpar:SSCoolPipeY]" z="[CoolSZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tibstring3ur:TIBString3UpPls1"/> + <rChild name="tibstring3ur:TIBString3UpPlsCoolS"/> + <Translation x="[tibstringpar:CoolPipeX]" y="[tibstringpar:SSCoolPipeY]" z="[CoolSZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibstring3ur:TIBString3UpPls1"/> + <rChild name="tibstring3ur:TIBString3UpPlsCoolW"/> + <Translation x="[zero]" y="[tibstringpar:SSCoolPipeY]" z="[CoolWZ]"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring3ur:TIBString3UpPls1"/> + <String name="ChildName" value="tibmodpar:TIBModLedgeBox"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:SSLedgeBoxY], [tibmodpar:SSLedgeBoxY], [tibmodpar:SSLedgeBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftDet]), ([Det1Z]+[ShiftDet]), ([Det2Z]+[ShiftDet]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring3ur:TIBString3UpPls1"/> + <String name="ChildName" value="tibmodpar:TIBAOHLedge"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [zero], [zero], [zero]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:SSLedgeBoxY], [tibmodpar:SSLedgeBoxY], [tibmodpar:SSLedgeBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftAOHLedge]), ([Det1Z]+[ShiftAOHLedge]), ([Det2Z]+[ShiftAOHLedge]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring3ur:TIBString3UpPls1"/> + <String name="ChildName" value="tibmodpar:TIBSSAOHBox"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [tibmodpar:SSAOHBoxX], [tibmodpar:SSAOHBoxX], [tibmodpar:SSAOHBoxX]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibmodpar:SSAOHBoxY], [tibmodpar:SSAOHBoxY], [tibmodpar:SSAOHBoxY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftAOHBox]), ([Det1Z]+[ShiftAOHBox]), ([Det2Z]+[ShiftAOHBox]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerXYZPosAlgo"> + <rParent name="tibstring3ur:TIBString3UpPls1"/> + <String name="ChildName" value="tibstringpar:SSMCModConn"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="XPositions" type="numeric" nEntries="3"> + [tibstringpar:MCModConnX], [tibstringpar:MCModConnX], [tibstringpar:MCModConnX]</Vector> + <Vector name="YPositions" type="numeric" nEntries="3"> + [tibstringpar:SSMCModConnY], [tibstringpar:SSMCModConnY], [tibstringpar:SSMCModConnY]</Vector> + <Vector name="ZPositions" type="numeric" nEntries="3"> + ([Det0Z]+[ShiftMCModConn]), ([Det1Z]+[ShiftMCModConn]), ([Det2Z]+[ShiftMCModConn]) </Vector> + <Vector name="Rotations" type="string" nEntries="3"> + tibstringpar:NULL, tibstringpar:NULL, tibstringpar:NULL</Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tibstringpar.xml b/examples/DDCMS/data/tibstringpar.xml new file mode 100644 index 000000000..3c073613f --- /dev/null +++ b/examples/DDCMS/data/tibstringpar.xml @@ -0,0 +1,118 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tibstringpar.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="StringL" value="2*[tib:TIBDz]"/> + <Constant name="BWSign" value="-1."/> + <Constant name="FWSign" value="+1."/> + <Constant name="INT1Sign" value="-1."/> + <Constant name="EXT1Sign" value="+1."/> + <Constant name="INT2Sign" value="+1."/> + <Constant name="EXT2Sign" value="-1."/> + <Constant name="INT3Sign" value="-1."/> + <Constant name="EXT3Sign" value="+1."/> + <Constant name="INT4Sign" value="+1."/> + <Constant name="EXT4Sign" value="-1."/> + <Constant name="MCHeadDx" value="16.0*mm"/> + <Constant name="MCHeadDy" value="2.5*mm"/> + <Constant name="MCHeadDz" value="22.0*mm"/> + <Constant name="MCHeadX" value="[zero]"/> + <Constant name="SSMCHeadY" value="-[tibmodpar:SSModuleDy]-2*[tibstringpar:CoolBoxDy]-2*[tibstringpar:SSCableBoxDy]+[tibstringpar:MCHeadDy]"/> + <Constant name="DSMCHeadY" value="-[tibmodpar:DSModuleDy]-2*[tibstringpar:CoolBoxDy]-2*[tibstringpar:DSCableBoxDy]+[tibstringpar:MCHeadDy]"/> + <Constant name="MotherCableW" value="2.40*cm"/> + <Constant name="MotherCableT" value="1.20*mm"/> + <Constant name="MotherCableX" value="[zero]"/> + <Constant name="SSMotherCableY" value="-[tibmodpar:SSModuleDy]-2*[tibstringpar:CoolBoxDy]-2*[tibstringpar:SSCableBoxDy]+0.5*[tibstringpar:MotherCableT]"/> + <Constant name="DSMotherCableY" value="-[tibmodpar:DSModuleDy]-2*[tibstringpar:CoolBoxDy]-2*[tibstringpar:DSCableBoxDy]+0.5*[tibstringpar:MotherCableT]"/> + <Constant name="CoolTubeD" value="2.8*mm"/> + <!-- For bw comp to be removed --> + <Constant name="CoolPipeDx" value="2.25*mm"/> + <Constant name="CoolPipeDy" value="1.05*mm"/> + <Constant name="CoolPipeX" value="27.0*mm"/> + <Constant name="SSCoolPipeY" value="-[tibmodpar:SSModuleDy]-2*[tibstringpar:CoolBoxDy]+[tibstringpar:CoolPipeDy]"/> + <Constant name="DSCoolPipeY" value="-[tibmodpar:DSModuleDy]-2*[tibstringpar:CoolBoxDy]+[tibstringpar:CoolPipeDy]"/> + <Constant name="CoolTubeW" value="[CoolTubeD]+[CoolTubeSep]"/> + <!-- For bw comp to be removed --> + <Constant name="CoolBoxDx" value="30.0*mm"/> + <Constant name="CoolBoxDy" value="1.4*mm"/> + <Constant name="SSCoolBoxY" value="-[tibmodpar:SSModuleDy]-[tibstringpar:CoolBoxDy]"/> + <Constant name="DSCoolBoxY" value="-[tibmodpar:DSModuleDy]-[tibstringpar:CoolBoxDy]"/> + <Constant name="CoolTubeSep" value="5.40*cm"/> + <Constant name="CableBoxDx" value="16.0*mm"/> + <Constant name="SSCableBoxDy" value="2.3*mm"/> + <Constant name="SSCableBoxY" value="-[tibmodpar:SSModuleDy]-2*[tibstringpar:CoolBoxDy]-[tibstringpar:SSCableBoxDy]"/> + <Constant name="DSCableBoxDy" value="1.7*mm"/> + <Constant name="DSCableBoxY" value="-[tibmodpar:DSModuleDy]-2*[tibstringpar:CoolBoxDy]-[tibstringpar:DSCableBoxDy]"/> + <Constant name="SSMCModConnDx" value="6.9*mm"/> + <Constant name="DSMCModConnDx" value="7.4*mm"/> + <Constant name="SSMCModConnDy" value="0.5*([tibmodpar:SSAOHBoxY]-[tibmodpar:AOHBoxDy]-[tibstringpar:SSMotherCableY]-0.5*[tibstringpar:MotherCableT])"/> + <Constant name="DSMCModConnDy" value="0.5*([tibmodpar:DSAOHBoxY]-[tibmodpar:AOHBoxDy]-[tibstringpar:DSMotherCableY]-0.5*[tibstringpar:MotherCableT])"/> + <Constant name="SSMCModConnDz" value="5.7*mm"/> + <Constant name="DSMCModConnDz" value="9.7*mm"/> + <Constant name="MCModConnX" value="[zero]"/> + <Constant name="SSMCModConnY" value="-[tibmodpar:SSModuleDy]-2*[tibstringpar:CoolBoxDy]-2*[tibstringpar:SSCableBoxDy]+[tibstringpar:SSMCModConnDy]+[tibstringpar:MotherCableT]"/> + <Constant name="DSMCModConnY" value="-[tibmodpar:DSModuleDy]-2*[tibstringpar:CoolBoxDy]-2*[tibstringpar:DSCableBoxDy]+[tibstringpar:DSMCModConnDy]+[tibstringpar:MotherCableT]"/> + <Constant name="MCModConnOffset" value="[tibmodpar:AOHModOffset]+[tibmodpar:AOHLedgeSideDz]"/> + <Constant name="SideCutDx" value="[tibmodpar:DSModuleSideCutDx]"/> + <Constant name="SideCutX" value="[tibmodpar:ModuleDx]-[SideCutDx]+0.3*mm"/> + </ConstantsSection> + <SolidSection label="tibstringpar.xml"> + <Box name="TIBStringCoolBox" dx="[tibstringpar:CoolBoxDx]" dy="[tibstringpar:CoolBoxDy]" dz="[tibstringpar:StringL]/2"/> + <Box name="TIBSSStringModuleBox" dx="[tibmodpar:ModuleDx]" dy="[tibmodpar:SSModuleDy]" dz="[tibstringpar:StringL]/2"/> + <Box name="TIBSSStringCableBox" dx="[tibstringpar:CableBoxDx]" dy="[tibstringpar:SSCableBoxDy]" dz="[tibstringpar:StringL]/2"/> + <UnionSolid name="TIBSSStringModAndCool"> + <rSolid name="TIBSSStringModuleBox"/> + <rSolid name="TIBStringCoolBox"/> + <Translation x="[zero]" y="[tibstringpar:SSCoolBoxY]" z="[zero]"/> + </UnionSolid> + <UnionSolid name="TIBSSString1"> + <rSolid name="TIBSSStringModAndCool"/> + <rSolid name="TIBSSStringCableBox"/> + <Translation x="[zero]" y="[tibstringpar:SSCableBoxY]" z="[zero]"/> + </UnionSolid> + <Box name="TIBDSString1MainPart" dx="[tibmodpar:ModuleDx]" dy="[tibmodpar:DSModuleDy]" dz="[tibstringpar:StringL]/2"/> + <Box name="TIBDSString1SideCut" dx="[SideCutDx]" dy="[tibmodpar:DSModuleSideCutDy]" dz="[tibstringpar:StringL]/2+[tibmodpar:SideCutExtraZ]"/> + <Box name="TIBDSStringCableBox" dx="[tibstringpar:CableBoxDx]" dy="[tibstringpar:DSCableBoxDy]" dz="[tibstringpar:StringL]/2"/> + <SubtractionSolid name="TIBDSString1LeftCutted"> + <rSolid name="TIBDSString1MainPart"/> + <rSolid name="TIBDSString1SideCut"/> + <Translation x="-[SideCutX]" y="[tibmodpar:DSModuleSideCutY]" z="[zero]"/> + </SubtractionSolid> + <SubtractionSolid name="TIBDSStringModuleBox"> + <rSolid name="TIBDSString1LeftCutted"/> + <rSolid name="TIBDSString1SideCut"/> + <Translation x="[SideCutX]" y="[tibmodpar:DSModuleSideCutY]" z="[zero]"/> + </SubtractionSolid> + <UnionSolid name="TIBDSStringModAndCool"> + <rSolid name="TIBDSStringModuleBox"/> + <rSolid name="TIBStringCoolBox"/> + <Translation x="[zero]" y="[tibstringpar:DSCoolBoxY]" z="[zero]"/> + </UnionSolid> + <UnionSolid name="TIBDSString1"> + <rSolid name="TIBDSStringModAndCool"/> + <rSolid name="TIBDSStringCableBox"/> + <Translation x="[zero]" y="[tibstringpar:DSCableBoxY]" z="[zero]"/> + </UnionSolid> + <Box name="MCHead" dx="[tibstringpar:MCHeadDx]" dy="[tibstringpar:MCHeadDy]" dz="[tibstringpar:MCHeadDz]"/> + <Box name="SSMCModConn" dx="[tibstringpar:SSMCModConnDx]" dy="[tibstringpar:SSMCModConnDy]" dz="[tibstringpar:SSMCModConnDz]"/> + <Box name="DSMCModConn" dx="[tibstringpar:DSMCModConnDx]" dy="[tibstringpar:DSMCModConnDy]" dz="[tibstringpar:DSMCModConnDz]"/> + </SolidSection> + <LogicalPartSection label="tibstringpar.xml"> + <LogicalPart name="MCHead" category="unspecified"> + <rSolid name="MCHead"/> + <rMaterial name="tibmaterial:TIB_MCHead"/> + </LogicalPart> + <LogicalPart name="SSMCModConn" category="unspecified"> + <rSolid name="SSMCModConn"/> + <rMaterial name="tibmaterial:TIB_SSMCModConn"/> + </LogicalPart> + <LogicalPart name="DSMCModConn" category="unspecified"> + <rSolid name="DSMCModConn"/> + <rMaterial name="tibmaterial:TIB_DSMCModConn"/> + </LogicalPart> + </LogicalPartSection> + <RotationSection label="tibstringpar.xml"> + <Rotation name="180D" thetaX="90*deg" phiX="180*deg" thetaY="90*deg" phiY="90*deg" thetaZ="180*deg" phiZ="0*deg"/> + <Rotation name="90XD" thetaX="90*deg" phiX="90*deg" thetaY="0*deg" phiY="0*deg" thetaZ="90*deg" phiZ="0*deg"/> + </RotationSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tibtidcommonmaterial.xml b/examples/DDCMS/data/tibtidcommonmaterial.xml new file mode 100644 index 000000000..e2033d466 --- /dev/null +++ b/examples/DDCMS/data/tibtidcommonmaterial.xml @@ -0,0 +1,570 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <MaterialSection label="tibtidcommonmaterial.xml"> + <CompositeMaterial name="TIBTID_CCUM" density="0.81143*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.19505"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.37418"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.00724"> + <rMaterial name="materials:Silicon" /> + </MaterialFraction> + <MaterialFraction fraction="0.02789"> + <rMaterial name="materials:SMD_metal" /> + </MaterialFraction> + <MaterialFraction fraction="0.08519"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.00067"> + <rMaterial name="materials:Silicon" /> + </MaterialFraction> + <MaterialFraction fraction="0.00469"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00322"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.00067"> + <rMaterial name="materials:Silicon" /> + </MaterialFraction> + <MaterialFraction fraction="0.00808"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00556"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.16432"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.12324"> + <rMaterial name="materials:T_Bronze" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="T_FiberPigtail" density="1.08988*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.03793"> + <rMaterial name="materials:Quartz" /> + </MaterialFraction> + <MaterialFraction fraction="0.0503"> + <rMaterial name="materials:Acrylate" /> + </MaterialFraction> + <MaterialFraction fraction="0.50313"> + <rMaterial name="materials:Acrylate" /> + </MaterialFraction> + <MaterialFraction fraction="0.40864"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="T_PigtailMUConn" density="1.09775*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.30468"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.56497"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.13035"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIBTID_T_RuggRibbon" density="0.84212*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.67168"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.13807"> + <rMaterial name="trackermaterial:T_Kevlar" /> + </MaterialFraction> + <MaterialFraction fraction="0.06511"> + <rMaterial name="materials:Acrylate" /> + </MaterialFraction> + <MaterialFraction fraction="0.0538"> + <rMaterial name="materials:Quartz" /> + </MaterialFraction> + <MaterialFraction fraction="0.07134"> + <rMaterial name="materials:Acrylate" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="T_Cu10mmPipe" density="3.22429*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.5279"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.4721"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="T_Al6mmPipe" density="2.13004*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.3874"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.6126"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="T_MedCABMaleConn" density="1.65926*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.10693"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.37453"> + <rMaterial name="materials:T_Bronze" /> + </MaterialFraction> + <MaterialFraction fraction="0.11664"> + <rMaterial name="materials:Tin" /> + </MaterialFraction> + <MaterialFraction fraction="0.25758"> + <rMaterial name="materials:Brass" /> + </MaterialFraction> + <MaterialFraction fraction="0.14432"> + <rMaterial name="materials:Iron" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="T_MedCABFemaleConn" density="1.89866*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.34829"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.28641"> + <rMaterial name="materials:T_Bronze" /> + </MaterialFraction> + <MaterialFraction fraction="0.10193"> + <rMaterial name="materials:Tin" /> + </MaterialFraction> + <MaterialFraction fraction="0.20814"> + <rMaterial name="materials:Brass" /> + </MaterialFraction> + <MaterialFraction fraction="0.05522"> + <rMaterial name="materials:Iron" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="T_MedPLCCMaleConn" density="1.45510*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.13829"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.31405"> + <rMaterial name="materials:T_Bronze" /> + </MaterialFraction> + <MaterialFraction fraction="0.11316"> + <rMaterial name="materials:Tin" /> + </MaterialFraction> + <MaterialFraction fraction="0.28495"> + <rMaterial name="materials:Brass" /> + </MaterialFraction> + <MaterialFraction fraction="0.14956"> + <rMaterial name="materials:Iron" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="T_MedPLCCFemaleConn" density="1.75960*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.39851"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.24109"> + <rMaterial name="materials:T_Bronze" /> + </MaterialFraction> + <MaterialFraction fraction="0.09357"> + <rMaterial name="materials:Tin" /> + </MaterialFraction> + <MaterialFraction fraction="0.22177"> + <rMaterial name="materials:Brass" /> + </MaterialFraction> + <MaterialFraction fraction="0.04505"> + <rMaterial name="materials:Iron" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="T_MedusaWire" density="2.40567*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.70862"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.29138"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIBTID_ServiceCylinder" density="0.52518*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.47614"> + <rMaterial name="tibtidcommonmaterial:T_MedusaWire" /> + </MaterialFraction> + <MaterialFraction fraction="0.21076"> + <rMaterial name="tibtidcommonmaterial:T_Al6mmPipe" /> + </MaterialFraction> + <MaterialFraction fraction="0.16286"> + <rMaterial name="tibtidcommonmaterial:T_FiberPigtail" /> + </MaterialFraction> + <MaterialFraction fraction="0.02128"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.02601"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.0604"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.01334"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + <MaterialFraction fraction="0.00686"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.00231"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.01469"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.00536"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIBTID_ServiceDisk1" density="1.1412*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.26175"> + <rMaterial name="tibtidcommonmaterial:T_MedusaWire" /> + </MaterialFraction> + <MaterialFraction fraction="0.10683"> + <rMaterial name="tibtidcommonmaterial:T_Al6mmPipe" /> + </MaterialFraction> + <MaterialFraction fraction="0.0895"> + <rMaterial name="tibtidcommonmaterial:T_FiberPigtail" /> + </MaterialFraction> + <MaterialFraction fraction="0.01171"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.01429"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.29722"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.11443"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.10428"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIBTID_ServiceDisk2" density="0.684*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.26175"> + <rMaterial name="tibtidcommonmaterial:T_MedusaWire" /> + </MaterialFraction> + <MaterialFraction fraction="0.10683"> + <rMaterial name="tibtidcommonmaterial:T_Al6mmPipe" /> + </MaterialFraction> + <MaterialFraction fraction="0.0895"> + <rMaterial name="tibtidcommonmaterial:T_FiberPigtail" /> + </MaterialFraction> + <MaterialFraction fraction="0.01171"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.01429"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.29722"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.11443"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.10428"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIBTID_OptoPanelFront" density="0.077952*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.8808"> + <rMaterial name="tibtidcommonmaterial:TIBTID_T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.08973"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.02947"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIBTID_OptoConnectors" density="0.530415*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.12072"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.02314"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.00586"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.43309"> + <rMaterial name="trackermaterial:T_Ribbon12xMUConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.41719"> + <rMaterial name="tibtidcommonmaterial:T_PigtailMUConn" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIBTID_OptoPanelBackInner" density="0.181308*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.19522"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.51268"> + <rMaterial name="tibtidcommonmaterial:T_FiberPigtail" /> + </MaterialFraction> + <MaterialFraction fraction="0.03886"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.25324"> + <rMaterial name="trackermaterial:T_Silicone_Gel" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIBTID_OptoPanelBackOuter" density="0.159924*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.20963"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.20893"> + <rMaterial name="tibtidcommonmaterial:TIBTID_T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.58144"> + <rMaterial name="tibtidcommonmaterial:T_FiberPigtail" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIBTID_Margherita" density="1.2580195*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.25645"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.02389"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00576"> + <rMaterial name="materials:Gold" /> + </MaterialFraction> + <MaterialFraction fraction="0.02917"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + <MaterialFraction fraction="0.00414"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.0032"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.00158"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.00751"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00228"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.13467"> + <rMaterial name="tibtidcommonmaterial:T_MedCABMaleConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.03841"> + <rMaterial name="tibtidcommonmaterial:T_MedPLCCMaleConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.39282"> + <rMaterial name="tibtidcommonmaterial:T_MedusaWire" /> + </MaterialFraction> + <MaterialFraction fraction="0.07999"> + <rMaterial name="tibtidcommonmaterial:T_Al6mmPipe" /> + </MaterialFraction> + <MaterialFraction fraction="0.02012"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIBTID_PowerConnectors" density="0.424932*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.1342"> + <rMaterial name="trackermaterial:CAB_Al60TIBTID" /> + </MaterialFraction> + <MaterialFraction fraction="0.09401"> + <rMaterial name="trackermaterial:MS_CntrlTIBTID" /> + </MaterialFraction> + <MaterialFraction fraction="0.05887"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.54781"> + <rMaterial name="tibtidcommonmaterial:T_MedCABFemaleConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.16511"> + <rMaterial name="tibtidcommonmaterial:T_MedPLCCFemaleConn" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIBTID_TSTCabAxial" density="0.89492*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.31327"> + <rMaterial name="trackermaterial:CAB_Al60TIBTID" /> + </MaterialFraction> + <MaterialFraction fraction="0.10473"> + <rMaterial name="trackermaterial:MS_CntrlTIBTID" /> + </MaterialFraction> + <MaterialFraction fraction="0.25567"> + <rMaterial name="tibtidcommonmaterial:T_Cu10mmPipe" /> + </MaterialFraction> + <MaterialFraction fraction="0.0473"> + <rMaterial name="tibtidcommonmaterial:TIBTID_T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.00356"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.27547"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIBTID_TSTCabRadial" density="0.30422*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.41686"> + <rMaterial name="trackermaterial:CAB_Al60TIBTID" /> + </MaterialFraction> + <MaterialFraction fraction="0.13941"> + <rMaterial name="trackermaterial:MS_CntrlTIBTID" /> + </MaterialFraction> + <MaterialFraction fraction="0.38651"> + <rMaterial name="tibtidcommonmaterial:T_Cu10mmPipe" /> + </MaterialFraction> + <MaterialFraction fraction="0.05722"> + <rMaterial name="tibtidcommonmaterial:TIBTID_T_RuggRibbon" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIBTID_PA" density="2.74978*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.44428"> + <rMaterial name="materials:Borosilicate_Glass" /> + </MaterialFraction> + <MaterialFraction fraction="0.48493"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.07079"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIBTID_AOH" density="0.60091*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.31344"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.23771"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.14423"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.08645"> + <rMaterial name="materials:T_Bronze" /> + </MaterialFraction> + <MaterialFraction fraction="0.00612"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.04437"> + <rMaterial name="trackermaterial:T_Barium_Titanate" /> + </MaterialFraction> + <MaterialFraction fraction="0.01304"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.02075"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.06154"> + <rMaterial name="materials:Silicon" /> + </MaterialFraction> + <MaterialFraction fraction="0.07235"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIBTID_DOH" density="0.79092*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.22923"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.18785"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.04401"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.02744"> + <rMaterial name="materials:T_Bronze" /> + </MaterialFraction> + <MaterialFraction fraction="0.00145"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.01117"> + <rMaterial name="trackermaterial:T_Barium_Titanate" /> + </MaterialFraction> + <MaterialFraction fraction="0.01773"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.02595"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.03223"> + <rMaterial name="materials:Silicon" /> + </MaterialFraction> + <MaterialFraction fraction="0.07813"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.07894"> + <rMaterial name="materials:Brass" /> + </MaterialFraction> + <MaterialFraction fraction="0.21661"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.04926"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIBTID_AmphCable" density="2.05153*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.56777"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.22996"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.20227"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIBTID_HybridBoard" density="3.70257*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.26413"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.03035"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.05229"> + <rMaterial name="trackermaterial:T_Silicone_Gel" /> + </MaterialFraction> + <MaterialFraction fraction="0.65323"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIBTID_HybridTails" density="1.61323*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.32847"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.34993"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.3216"> + <rMaterial name="trackermaterial:T_Silicone_Gel" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIBTID_Hybrid" density="2.16228*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.8733"> + <rMaterial name="tibtidcommonmaterial:TIBTID_HybridBoard" /> + </MaterialFraction> + <MaterialFraction fraction="0.07195"> + <rMaterial name="materials:Silicon" /> + </MaterialFraction> + <MaterialFraction fraction="0.00385"> + <rMaterial name="materials:Silicon" /> + </MaterialFraction> + <MaterialFraction fraction="0.00601"> + <rMaterial name="materials:Silicon" /> + </MaterialFraction> + <MaterialFraction fraction="0.00096"> + <rMaterial name="materials:Silicon" /> + </MaterialFraction> + <MaterialFraction fraction="0.00374"> + <rMaterial name="materials:Carbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.00674"> + <rMaterial name="materials:SMD_metal" /> + </MaterialFraction> + <MaterialFraction fraction="0.00466"> + <rMaterial name="materials:Alumina" /> + </MaterialFraction> + <MaterialFraction fraction="0.00541"> + <rMaterial name="materials:SMD_metal" /> + </MaterialFraction> + <MaterialFraction fraction="0.01636"> + <rMaterial name="materials:Alumina" /> + </MaterialFraction> + <MaterialFraction fraction="0.00702"> + <rMaterial name="materials:SMD_metal" /> + </MaterialFraction> + </CompositeMaterial> + </MaterialSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tibtidservices.xml b/examples/DDCMS/data/tibtidservices.xml new file mode 100644 index 000000000..a393af62d --- /dev/null +++ b/examples/DDCMS/data/tibtidservices.xml @@ -0,0 +1,394 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tibtidservices.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <!-- Mother Volume (Polycone) --> + <Constant name="Rin1" value="22.20*cm"/> + <Constant name="Rin1bis" value="21.80*cm"/> + <Constant name="Rin2" value="[tid:Rout]"/> + <!-- 52.0 cm --> + <Constant name="Rin3" value="24.60*cm"/> + <!-- "dente" PXL flange --> + <Constant name="Rin4" value="113.51*cm"/> + <!-- inner R (vs beam) corrected to 113.51 cm as in reality--> + <Constant name="Rout1" value="[tib:Rout]"/> + <!-- 54.0 cm --> + <Constant name="Rout2" value="58.00*cm"/> + <!-- "dente" Margerita flange --> + <Constant name="Rout3" value="116.00*cm"/> + <!-- outer R (vs TST) [was 115.0 cm in tib.xml]; max value: 116.0 tob.xml --> + <Constant name="Zv1" value="71.6*cm"/> + <Constant name="Zv2" value="73.6*cm"/> + <!-- begin of TID envelope cf. tid.xml --> + <Constant name="Zv3" value="110.0*cm"/> + <!-- "dente" Margherita flange --> + <Constant name="Zv4" value="111.3*cm"/> + <Constant name="Zv5" value="112.1*cm"/> + <Constant name="Zv5bis" value="113.1*cm"/> + <!-- "dente" PXL flange --> + <Constant name="Zv6" value="118.0*cm"/> + <Constant name="Zv7" value="123.0*cm"/> + <Constant name="Zv8" value="282.0*cm"/> + <!-- current Z_max in .xml (true: 274.0 cm) --> + <!-- TIB flange --> + <Constant name="TIBFlangeL" value="[Zv2]-[Zv1]"/> + <Constant name="TIBFlangeZ" value="[Zv1]+[TIBFlangeL]/2"/> + <!-- PixelSupport flanges --> + <Constant name="PixelSupportFlangeL" value="[Zv5]-[Zv4]"/> + <Constant name="PixelSupportFlange2L" value="[Zv5bis]-[Zv5]"/> + <Constant name="PixelSupportFlangeZ" value="[Zv4]+[PixelSupportFlangeL]/2"/> + <Constant name="PixelSupportFlange2Z" value="[Zv4]+[PixelSupportFlangeL]+[PixelSupportFlange2L]/2"/> + <Constant name="Rin3bis" value="24.0*cm"/> + <!-- final section of TID support tube --> + <Constant name="TIDSupportL" value="4.9*cm"/> + <Constant name="TIDSupportZ" value="[Zv4]+[TIDSupportL]/2"/> + <!-- 113.75*cm --> + <!-- Power/Control connectors (medusa->CAB60) --> + <Constant name="PowerConnectorsRin" value="76.7*cm"/> + <Constant name="PowerConnectorsRout" value="95.0*cm"/> + <Constant name="PowerConnectorsL" value="3.0*cm"/> + <Constant name="PowerConnectorsZ" value="121.5*cm"/> + <!-- Margherita --> + <Constant name="MargheritaRf" value="60.6*cm"/> + <!-- "front" (lower |z|) --> + <Constant name="MargheritaRb" value="56.0*cm"/> + <!-- "back" (higher |z|) --> + <Constant name="MargheritaZf" value="[Zv6]"/> + <Constant name="MargheritaZm" value="119.7*cm"/> + <Constant name="MargheritaZb" value="[Zv7]-[PowerConnectorsL]"/> + <!-- 120.0cm --> + <!-- Service Cylinder: 73.6< |z| <116.2 cm --> + <Constant name="ServiceCylinderL" value="42.6*cm"/> + <Constant name="ServiceCylinderZ" value="[Zv2]+[ServiceCylinderL]/2"/> + <!-- Service Disk --> + <Constant name="ServiceDiskZf" value="[Zv2]+[ServiceCylinderL]"/> + <Constant name="ServiceDiskZm" value="[Zv6]"/> + <Constant name="ServiceDiskZb" value="[MargheritaZm]"/> + <Constant name="ServiceDiskRin" value="[tid:SupportRin]"/> + <Constant name="ServiceDiskRm" value="58.0*cm"/> + <Constant name="ServiceDiskRout" value="[MargheritaRf]"/> + <Constant name="ServiceDisk2Dz" value="[ServiceDiskZb]/2-[ServiceDiskZf]/2"/> + <Constant name="ServiceDisk2Z" value="[ServiceDiskZb]/2+[ServiceDiskZf]/2"/> + <!-- Optical Panel --> + <Constant name="OpticalPanelZf" value="[Zv4]"/> + <Constant name="OpticalPanelZ1" value="[MargheritaZm]"/> + <Constant name="OpticalPanelZ2" value="[MargheritaZb]"/> + <Constant name="OpticalPanelZb" value="[Zv7]"/> + <Constant name="OptoPanelFrontL" value="3.6*cm"/> + <Constant name="OptoPanelFrontZ" value="[OpticalPanelZf]+[OptoPanelFrontL]/2"/> + <Constant name="OptoConnectorsL" value="5.0*cm"/> + <Constant name="OptoConnectorsZ" value="[OpticalPanelZf]+[OptoPanelFrontL]+[OptoConnectorsL]/2"/> + <Constant name="OptoPanelBackL" value="[OpticalPanelZb]-[OpticalPanelZf]-([OptoPanelFrontL]+[OptoConnectorsL])"/> + <Constant name="OptoPanelBackZ" value="[OpticalPanelZf]+[OptoPanelFrontL]+[OptoConnectorsL]+[OptoPanelBackL]/2"/> + <!-- TST --> + <Constant name="TSTCabContRin" value="95.0*cm"/> + <Constant name="TSTCabAxialR" value="115.3*cm"/> + <Constant name="TSTCabAxialT" value="1.1*cm"/> + <Constant name="TSTCabAxialL" value="142.0*cm"/> + <Constant name="TSTCabAxialZ" value="[Zv7]+[TSTCabAxialL]/2"/> + <Constant name="TSTCabAxialAlT" value="0.1*cm"/> + <!-- TEC Rails --> + <Constant name="TECRailsRin" value="[Rin4]"/> + <!-- directly ontop of the TEC Skin--> + <Constant name="TECRailsRout" value="[TSTCabAxialR]-[TSTCabAxialT]/2"/> + <!-- directly under AxialCables--> + <Constant name="TECRailsPhi" value="-0.664*deg"/> + <Constant name="TECRailsDeltaPhi" value="7.409*deg"/> + <Constant name="TECRailsADz" value="15.30*cm"/> + <Constant name="TECRailsAZ" value="160.25*cm"/> + <Constant name="TECRailsBDz" value="26.65*cm"/> + <Constant name="TECRailsBZ" value="250.10*cm"/> + <Constant name="TECRailsConnectorDz" value="1.25*cm"/> + <Constant name="TECRailsConnectorZDist" value="14.0*cm"/> + <Constant name="TECRailsConnectorZDistB1" value="20.5*cm"/> + <Constant name="TECRailsConnectorZDistB2" value="21.5*cm"/> + <Constant name="TECRailsConnectorZDistB3" value="8.74*cm"/> + <Constant name="TECRailsSupportDz" value="2.85*cm"/> + <Constant name="TECRailsSupportZDist" value="8.0*cm"/> + <Constant name="TECRailsSupportDphi" value="2.877*deg"/> + </ConstantsSection> + <SolidSection label="tibtidservices.xml"> + <Polycone name="TIBTIDServices" startPhi="0*deg" deltaPhi="360*deg"> + <ZSection z="[Zv1]" rMin="[Rin1]" rMax="[Rout1]"/> + <ZSection z="[Zv2]" rMin="[Rin1]" rMax="[Rout1]"/> + <ZSection z="[Zv2]" rMin="[Rin2]" rMax="[Rout1]"/> + <ZSection z="[Zv3]" rMin="[Rin2]" rMax="[Rout1]"/> + <ZSection z="[Zv3]" rMin="[Rin2]" rMax="[Rout2]"/> + <ZSection z="[Zv4]" rMin="[Rin2]" rMax="[Rout2]"/> + <ZSection z="[Zv4]" rMin="[Rin1]" rMax="[Rout2]"/> + <ZSection z="[Zv5]" rMin="[Rin1]" rMax="[Rout2]"/> + <ZSection z="[Zv5]" rMin="[Rin1bis]" rMax="[Rout2]"/> + <ZSection z="[Zv5bis]" rMin="[Rin1bis]" rMax="[Rout2]"/> + <ZSection z="[Zv5bis]" rMin="[Rin3]" rMax="[Rout2]"/> + <ZSection z="[Zv6]" rMin="[Rin3]" rMax="[Rout2]"/> + <ZSection z="[Zv6]" rMin="[Rin3]" rMax="[Rout3]"/> + <ZSection z="[Zv7]" rMin="[Rin3]" rMax="[Rout3]"/> + <ZSection z="[Zv7]" rMin="[Rin4]" rMax="[Rout3]"/> + <ZSection z="[Zv8]" rMin="[Rin4]" rMax="[Rout3]"/> + </Polycone> + <!-- TID support tube not contained in tid.xml volume --> + <Tubs name="TIDSupport" rMin="[tid:SupportRin]" rMax="[tid:SupportRout]" dz="[TIDSupportL]/2" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TIDSupportIn" rMin="[tid:SupportInRin]" rMax="[tid:SupportInRout]" dz="[TIDSupportL]/2" startPhi="0*deg" deltaPhi="360*deg"/> + <!-- "Flangia" TIB --> + <Tubs name="TIBFlange" rMin="[tib:Rin]" rMax="[tib:Rout]" dz="[TIBFlangeL]/2" startPhi="0*deg" deltaPhi="360*deg"/> + <!-- "Service Cylinder --> + <Tubs name="ServiceCylinder" rMin="[Rin2]" rMax="[Rout1]" dz="[ServiceCylinderL]/2" startPhi="0*deg" deltaPhi="360*deg"/> + <!-- Flanges PixelSupport --> + <Tubs name="PixelSupportFlange" rMin="[Rin1]" rMax="[Rin3]" dz="[PixelSupportFlangeL]/2" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="PixelSupportFlange2" rMin="[Rin1bis]" rMax="[Rin3bis]" dz="[PixelSupportFlange2L]/2" startPhi="0*deg" deltaPhi="360*deg"/> + <!-- Optical Panel --> + <Polycone name="OpticalPanel" startPhi="0*deg" deltaPhi="360*deg"> + <ZSection z="[OpticalPanelZf]" rMin="[Rin3]" rMax="[tid:SupportRin]"/> + <ZSection z="[OpticalPanelZ1]" rMin="[Rin3]" rMax="[tid:SupportRin]"/> + <ZSection z="[OpticalPanelZ1]" rMin="[Rin3]" rMax="[MargheritaRb]"/> + <ZSection z="[OpticalPanelZ2]" rMin="[Rin3]" rMax="[MargheritaRb]"/> + <ZSection z="[OpticalPanelZ2]" rMin="[Rin3]" rMax="[PowerConnectorsRin]"/> + <ZSection z="[OpticalPanelZb]" rMin="[Rin3]" rMax="[PowerConnectorsRin]"/> + </Polycone> + <!-- Optical Panel Front --> + <Tubs name="OptoPanelFront" rMin="[Rin3]" rMax="[tid:SupportRin]" dz="[OptoPanelFrontL]/2" startPhi="0*deg" deltaPhi="360*deg"/> + <!-- Optical Connectors --> + <Tubs name="OpticalConnectors" rMin="[Rin3]" rMax="[tid:SupportRin]" dz="[OptoConnectorsL]/2" startPhi="0*deg" deltaPhi="360*deg"/> + <!-- Optical Panel Back r<51.2 cm --> + <Tubs name="OptoPanelBackInner" rMin="[Rin3]" rMax="[tid:SupportRin]" dz="[OptoPanelBackL]/2" startPhi="0*deg" deltaPhi="360*deg"/> + <!-- Optical Panel Back r>51.2 cm --> + <Polycone name="OptoPanelBackOuter" startPhi="0*deg" deltaPhi="360*deg"> + <ZSection z="[OpticalPanelZ1]" rMin="[tid:SupportRin]" rMax="[MargheritaRb]"/> + <ZSection z="[OpticalPanelZ2]" rMin="[tid:SupportRin]" rMax="[MargheritaRb]"/> + <ZSection z="[OpticalPanelZ2]" rMin="[tid:SupportRin]" rMax="[PowerConnectorsRin]"/> + <ZSection z="[OpticalPanelZb]" rMin="[tid:SupportRin]" rMax="[PowerConnectorsRin]"/> + </Polycone> + <!-- "Margherita" Panel --> + <Polycone name="Margherita" startPhi="0*deg" deltaPhi="360*deg"> + <ZSection z="[MargheritaZf]" rMin="[MargheritaRf]" rMax="[TSTCabContRin]"/> + <ZSection z="[MargheritaZm]" rMin="[MargheritaRf]" rMax="[TSTCabContRin]"/> + <ZSection z="[MargheritaZm]" rMin="[MargheritaRb]" rMax="[TSTCabContRin]"/> + <ZSection z="[MargheritaZb]" rMin="[MargheritaRb]" rMax="[TSTCabContRin]"/> + </Polycone> + <!-- Service Disk --> + <Polycone name="ServiceDisk1" startPhi="0*deg" deltaPhi="360*deg"> + <ZSection z="[ServiceDiskZf]" rMin="[MargheritaRb]" rMax="[ServiceDiskRm]"/> + <ZSection z="[ServiceDiskZm]" rMin="[MargheritaRb]" rMax="[ServiceDiskRm]"/> + <ZSection z="[ServiceDiskZm]" rMin="[MargheritaRb]" rMax="[ServiceDiskRout]"/> + <ZSection z="[ServiceDiskZb]" rMin="[MargheritaRb]" rMax="[ServiceDiskRout]"/> + </Polycone> + <Tubs name="ServiceDisk2" rMin="[ServiceDiskRin]" rMax="[MargheritaRb]" dz="[ServiceDisk2Dz]" startPhi="0*deg" deltaPhi="360*deg"/> + <!-- Power/Control connectors --> + <Tubs name="PowerConnectors" rMin="[PowerConnectorsRin]" rMax="[PowerConnectorsRout]" dz="[PowerConnectorsL]/2" startPhi="0*deg" deltaPhi="360*deg"/> + <!-- TST --> + <Polycone name="TSTCabCont" startPhi="0*deg" deltaPhi="360*deg"> + <ZSection z="[Zv6]" rMin="[TSTCabContRin]" rMax="[Rout3]"/> + <ZSection z="[Zv7]" rMin="[TSTCabContRin]" rMax="[Rout3]"/> + <ZSection z="[Zv7]" rMin="[Rin4]" rMax="[Rout3]"/> + <ZSection z="[Zv8]" rMin="[Rin4]" rMax="[Rout3]"/> + </Polycone> + <Tubs name="TSTCabAxial" rMin="[TSTCabAxialR]-[TSTCabAxialT]/2" rMax="[TSTCabAxialR]+[TSTCabAxialT]/2" dz="[TSTCabAxialL]/2" startPhi="0*deg" deltaPhi="360*deg"/> + <Polycone name="TSTCabRadial" startPhi="0*deg" deltaPhi="360*deg"> + <ZSection z="[Zv6]" rMin="[TSTCabContRin]" rMax="[TSTCabContRin]"/> + <ZSection z="[Zv6]+0.8*([Zv7]-[Zv6])" rMin="[TSTCabContRin]" rMax="[TSTCabAxialR]-[TSTCabAxialAlT]+[TSTCabAxialT]/2"/> + <ZSection z="[Zv7]" rMin="[TSTCabContRin]" rMax="[TSTCabAxialR]-[TSTCabAxialAlT]+[TSTCabAxialT]/2"/> + </Polycone> + <!-- TEC Rails --> + <Tubs name="TECRailsA" rMin="[TECRailsRin]" rMax="[TECRailsRout]" dz="[TECRailsADz]" startPhi="[TECRailsDeltaPhi]/2" deltaPhi="[TECRailsDeltaPhi]"/> + <Tubs name="TECRailsB" rMin="[TECRailsRin]" rMax="[TECRailsRout]" dz="[TECRailsBDz]" startPhi="[TECRailsDeltaPhi]/2" deltaPhi="[TECRailsDeltaPhi]"/> + <Tubs name="TECRailsConnector" rMin="[TECRailsRin]" rMax="[TECRailsRout]" dz="[TECRailsConnectorDz]" startPhi="[TECRailsDeltaPhi]/2" deltaPhi="[TECRailsDeltaPhi]"/> + <Tubs name="TECRailsSupport" rMin="[TECRailsRin]" rMax="[TECRailsRout]" dz="[TECRailsSupportDz]" startPhi="[TECRailsDeltaPhi]/2+[TECRailsSupportDphi]/4" deltaPhi="[TECRailsSupportDphi]"/> + </SolidSection> + <LogicalPartSection label="tibtidservices.xml"> + <LogicalPart name="TIDSupport" category="unspecified"> + <rSolid name="TIDSupport"/> + <rMaterial name="trackermaterial:T_CarbonFibreStr"/> + </LogicalPart> + <LogicalPart name="TIDSupportIn" category="unspecified"> + <rSolid name="TIDSupportIn"/> + <rMaterial name="trackermaterial:T_Nomex"/> + </LogicalPart> + <LogicalPart name="TIBFlange" category="unspecified"> + <rSolid name="TIBFlange"/> + <rMaterial name="tibmaterial:TIB_Flange"/> + </LogicalPart> + <LogicalPart name="TIBTIDServiceCylinder" category="unspecified"> + <rSolid name="ServiceCylinder"/> + <rMaterial name="tibtidcommonmaterial:TIBTID_ServiceCylinder"/> + </LogicalPart> + <LogicalPart name="TIBTIDPxlFlange" category="unspecified"> + <rSolid name="PixelSupportFlange"/> + <rMaterial name="trackermaterial:T_FR4"/> + </LogicalPart> + <LogicalPart name="TIBTIDPxlFlange2" category="unspecified"> + <rSolid name="PixelSupportFlange2"/> + <rMaterial name="trackermaterial:T_CarbonFibreStr"/> + </LogicalPart> + <LogicalPart name="TIBTIDOpticalPanel" category="unspecified"> + <rSolid name="OpticalPanel"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TIBTIDOptoPanelFront" category="unspecified"> + <rSolid name="OptoPanelFront"/> + <rMaterial name="tibtidcommonmaterial:TIBTID_OptoPanelFront"/> + </LogicalPart> + <LogicalPart name="TIBTIDOptoConnectors" category="unspecified"> + <rSolid name="OpticalConnectors"/> + <rMaterial name="tibtidcommonmaterial:TIBTID_OptoConnectors"/> + </LogicalPart> + <LogicalPart name="TIBTIDOptoPanelBackInner" category="unspecified"> + <rSolid name="OptoPanelBackInner"/> + <rMaterial name="tibtidcommonmaterial:TIBTID_OptoPanelBackInner"/> + </LogicalPart> + <LogicalPart name="TIBTIDOptoPanelBackOuter" category="unspecified"> + <rSolid name="OptoPanelBackOuter"/> + <rMaterial name="tibtidcommonmaterial:TIBTID_OptoPanelBackOuter"/> + </LogicalPart> + <LogicalPart name="TIBTIDMargherita" category="unspecified"> + <rSolid name="Margherita"/> + <rMaterial name="tibtidcommonmaterial:TIBTID_Margherita"/> + </LogicalPart> + <LogicalPart name="TIBTIDServiceDisk1" category="unspecified"> + <rSolid name="ServiceDisk1"/> + <rMaterial name="tibtidcommonmaterial:TIBTID_ServiceDisk1"/> + </LogicalPart> + <LogicalPart name="TIBTIDServiceDisk2" category="unspecified"> + <rSolid name="ServiceDisk2"/> + <rMaterial name="tibtidcommonmaterial:TIBTID_ServiceDisk2"/> + </LogicalPart> + <LogicalPart name="TIBTIDPowerConnectors" category="unspecified"> + <rSolid name="PowerConnectors"/> + <rMaterial name="tibtidcommonmaterial:TIBTID_PowerConnectors"/> + </LogicalPart> + <LogicalPart name="TIBTIDTSTCabCont" category="unspecified"> + <rSolid name="TSTCabCont"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TIBTIDTSTCabAxial" category="unspecified"> + <rSolid name="TSTCabAxial"/> + <rMaterial name="tibtidcommonmaterial:TIBTID_TSTCabAxial"/> + </LogicalPart> + <LogicalPart name="TIBTIDTSTCabRadial" category="unspecified"> + <rSolid name="TSTCabRadial"/> + <rMaterial name="tibtidcommonmaterial:TIBTID_TSTCabRadial"/> + </LogicalPart> + <!-- TEC Rails --> + <LogicalPart name="TECRailsA" category="unspecified"> + <rSolid name="tibtidservices:TECRailsA"/> + <rMaterial name="tecmaterial:TEC_Rails"/> + </LogicalPart> + <LogicalPart name="TECRailsB" category="unspecified"> + <rSolid name="tibtidservices:TECRailsB"/> + <rMaterial name="tecmaterial:TEC_Rails"/> + </LogicalPart> + <LogicalPart name="TECRailsConnector" category="unspecified"> + <rSolid name="tibtidservices:TECRailsConnector"/> + <rMaterial name="tecmaterial:TEC_RailsConnector"/> + </LogicalPart> + <LogicalPart name="TECRailsSupport" category="unspecified"> + <rSolid name="tibtidservices:TECRailsSupport"/> + <rMaterial name="tecmaterial:TEC_RailsSupport"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tibtidservices.xml"> + <PosPart copyNumber="1"> + <rParent name="tibtidservices:TIDSupport"/> + <rChild name="tibtidservices:TIDSupportIn"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibtidservices:TIBTIDOpticalPanel"/> + <rChild name="tibtidservices:TIBTIDOptoPanelFront"/> + <Translation x="[zero]" y="[zero]" z="[OptoPanelFrontZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibtidservices:TIBTIDOpticalPanel"/> + <rChild name="tibtidservices:TIBTIDOptoConnectors"/> + <Translation x="[zero]" y="[zero]" z="[OptoConnectorsZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibtidservices:TIBTIDOpticalPanel"/> + <rChild name="tibtidservices:TIBTIDOptoPanelBackInner"/> + <Translation x="[zero]" y="[zero]" z="[OptoPanelBackZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibtidservices:TIBTIDOpticalPanel"/> + <rChild name="tibtidservices:TIBTIDOptoPanelBackOuter"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibtidservices:TIBTIDTSTCabCont"/> + <rChild name="tibtidservices:TIBTIDTSTCabAxial"/> + <Translation x="[zero]" y="[zero]" z="[TSTCabAxialZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibtidservices:TIBTIDTSTCabCont"/> + <rChild name="tibtidservices:TIBTIDTSTCabRadial"/> + </PosPart> + <!-- TEC Rails: Connectors --> + <PosPart copyNumber="1"> + <rParent name="tibtidservices:TECRailsA"/> + <rChild name="tibtidservices:TECRailsConnector"/> + <Translation x="[zero]" y="[zero]" z="-[TECRailsConnectorZDist]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tibtidservices:TECRailsA"/> + <rChild name="tibtidservices:TECRailsConnector"/> + <Translation x="[zero]" y="[zero]" z="[zero]"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="tibtidservices:TECRailsA"/> + <rChild name="tibtidservices:TECRailsConnector"/> + <Translation x="[zero]" y="[zero]" z="+[TECRailsConnectorZDist]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibtidservices:TECRailsB"/> + <rChild name="tibtidservices:TECRailsConnector"/> + <Translation x="[zero]" y="[zero]" z="(-[TECRailsConnectorZDistB3]-[TECRailsConnectorZDistB2]-[TECRailsConnectorZDistB1])/2"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tibtidservices:TECRailsB"/> + <rChild name="tibtidservices:TECRailsConnector"/> + <Translation x="[zero]" y="[zero]" z="(-[TECRailsConnectorZDistB3]-[TECRailsConnectorZDistB2]+[TECRailsConnectorZDistB1])/2"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="tibtidservices:TECRailsB"/> + <rChild name="tibtidservices:TECRailsConnector"/> + <Translation x="[zero]" y="[zero]" z="(-[TECRailsConnectorZDistB3]+[TECRailsConnectorZDistB2]+[TECRailsConnectorZDistB1])/2"/> + </PosPart> + <PosPart copyNumber="4"> + <rParent name="tibtidservices:TECRailsB"/> + <rChild name="tibtidservices:TECRailsConnector"/> + <Translation x="[zero]" y="[zero]" z="(+[TECRailsConnectorZDistB3]+[TECRailsConnectorZDistB2]+[TECRailsConnectorZDistB1])/2"/> + </PosPart> + <!-- TEC Rails: Support --> + <PosPart copyNumber="1"> + <rParent name="tibtidservices:TECRailsA"/> + <rChild name="tibtidservices:TECRailsSupport"/> + <Translation x="[zero]" y="[zero]" z="[TECRailsSupportZDist]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibtidservices:TECRailsB"/> + <rChild name="tibtidservices:TECRailsSupport"/> + <Translation x="[zero]" y="[zero]" z="[TECRailsSupportZDist]"/> + </PosPart> + </PosPartSection> + <!-- TEC Rails --> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tibtidservices:TIBTIDTSTCabCont"/> + <String name="ChildName" value="tibtidservices:TECRailsA"/> + <Numeric name="N" value="2"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[TECRailsPhi]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> + 0, 0, [TECRailsAZ] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tibtidservices:TIBTIDTSTCabCont"/> + <String name="ChildName" value="tibtidservices:TECRailsB"/> + <Numeric name="N" value="2"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[TECRailsPhi]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> + 0, 0, [TECRailsBZ] </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tibtidservicesb.xml b/examples/DDCMS/data/tibtidservicesb.xml new file mode 100644 index 000000000..96d4029e4 --- /dev/null +++ b/examples/DDCMS/data/tibtidservicesb.xml @@ -0,0 +1,65 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tibtidservicesb.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <LogicalPartSection label="tibtidservicesb.xml"> + <LogicalPart name="TIBTIDServicesB" category="unspecified"> + <rSolid name="tibtidservices:TIBTIDServices"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="servicescylinderb.xml"> + <PosPart copyNumber="1"> + <rParent name="tibtidservicesb:TIBTIDServicesB"/> + <rChild name="tibtidservices:TIDSupport"/> + <Translation x="[zero]" y="[zero]" z="[tibtidservices:TIDSupportZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibtidservicesb:TIBTIDServicesB"/> + <rChild name="tibtidservices:TIBFlange"/> + <Translation x="[zero]" y="[zero]" z="[tibtidservices:TIBFlangeZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibtidservicesb:TIBTIDServicesB"/> + <rChild name="tibtidservices:TIBTIDServiceCylinder"/> + <Translation x="[zero]" y="[zero]" z="[tibtidservices:ServiceCylinderZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibtidservicesb:TIBTIDServicesB"/> + <rChild name="tibtidservices:TIBTIDPxlFlange"/> + <Translation x="[zero]" y="[zero]" z="[tibtidservices:PixelSupportFlangeZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibtidservicesb:TIBTIDServicesB"/> + <rChild name="tibtidservices:TIBTIDPxlFlange2"/> + <Translation x="[zero]" y="[zero]" z="[tibtidservices:PixelSupportFlange2Z]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibtidservicesb:TIBTIDServicesB"/> + <rChild name="tibtidservices:TIBTIDOpticalPanel"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibtidservicesb:TIBTIDServicesB"/> + <rChild name="tibtidservices:TIBTIDMargherita"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibtidservicesb:TIBTIDServicesB"/> + <rChild name="tibtidservices:TIBTIDServiceDisk1"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibtidservicesb:TIBTIDServicesB"/> + <rChild name="tibtidservices:TIBTIDServiceDisk2"/> + <Translation x="[zero]" y="[zero]" z="[tibtidservices:ServiceDisk2Z]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibtidservicesb:TIBTIDServicesB"/> + <rChild name="tibtidservices:TIBTIDPowerConnectors"/> + <Translation x="[zero]" y="[zero]" z="[tibtidservices:PowerConnectorsZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibtidservicesb:TIBTIDServicesB"/> + <rChild name="tibtidservices:TIBTIDTSTCabCont"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tibtidservicesf.xml b/examples/DDCMS/data/tibtidservicesf.xml new file mode 100644 index 000000000..c8c80d03d --- /dev/null +++ b/examples/DDCMS/data/tibtidservicesf.xml @@ -0,0 +1,65 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tibtidservicesf.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <LogicalPartSection label="tibtidservicesf.xml"> + <LogicalPart name="TIBTIDServicesF" category="unspecified"> + <rSolid name="tibtidservices:TIBTIDServices"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="servicescylinderf.xml"> + <PosPart copyNumber="1"> + <rParent name="tibtidservicesf:TIBTIDServicesF"/> + <rChild name="tibtidservices:TIDSupport"/> + <Translation x="[zero]" y="[zero]" z="[tibtidservices:TIDSupportZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibtidservicesf:TIBTIDServicesF"/> + <rChild name="tibtidservices:TIBFlange"/> + <Translation x="[zero]" y="[zero]" z="[tibtidservices:TIBFlangeZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibtidservicesf:TIBTIDServicesF"/> + <rChild name="tibtidservices:TIBTIDServiceCylinder"/> + <Translation x="[zero]" y="[zero]" z="[tibtidservices:ServiceCylinderZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibtidservicesf:TIBTIDServicesF"/> + <rChild name="tibtidservices:TIBTIDPxlFlange"/> + <Translation x="[zero]" y="[zero]" z="[tibtidservices:PixelSupportFlangeZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibtidservicesf:TIBTIDServicesF"/> + <rChild name="tibtidservices:TIBTIDPxlFlange2"/> + <Translation x="[zero]" y="[zero]" z="[tibtidservices:PixelSupportFlange2Z]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibtidservicesf:TIBTIDServicesF"/> + <rChild name="tibtidservices:TIBTIDOpticalPanel"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibtidservicesf:TIBTIDServicesF"/> + <rChild name="tibtidservices:TIBTIDMargherita"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibtidservicesf:TIBTIDServicesF"/> + <rChild name="tibtidservices:TIBTIDServiceDisk1"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibtidservicesf:TIBTIDServicesF"/> + <rChild name="tibtidservices:TIBTIDServiceDisk2"/> + <Translation x="[zero]" y="[zero]" z="[tibtidservices:ServiceDisk2Z]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibtidservicesf:TIBTIDServicesF"/> + <rChild name="tibtidservices:TIBTIDPowerConnectors"/> + <Translation x="[zero]" y="[zero]" z="[tibtidservices:PowerConnectorsZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tibtidservicesf:TIBTIDServicesF"/> + <rChild name="tibtidservices:TIBTIDTSTCabCont"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tid.xml b/examples/DDCMS/data/tid.xml new file mode 100644 index 000000000..14ea05749 --- /dev/null +++ b/examples/DDCMS/data/tid.xml @@ -0,0 +1,94 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tid.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="Rin" value="22.20*cm"/> + <Constant name="Rout" value="52.00*cm"/> + <Constant name="Zv1" value="73.6*cm"/> + <!-- begin of TID envelope DO NOT TOUCH IT! --> + <Constant name="Zv2" value="111.3*cm"/> + <Constant name="WheelRin" value="22.38*cm"/> + <Constant name="WheelRout" value="51.20*cm"/> + <Constant name="WheelT" value="10.4*cm"/> + <!-- MAX ALLOWED VALUE 10.5 cm --> + <Constant name="WheelDZ0" value="5.5*cm"/> + <!-- Z off of Disk1 --> + <Constant name="WheelDZ" value="12.95*cm"/> + <!-- Z pitch of Disks --> + <Constant name="Wheel0Z" value="[Zv1]+[WheelDZ0]"/> + <Constant name="Wheel1Z" value="[Wheel0Z]+[WheelDZ]"/> + <Constant name="Wheel2Z" value="[Wheel1Z]+[WheelDZ]"/> + <Constant name="RingZ" value="3.50*cm"/> + <Constant name="SupportT" value="0.10*cm"/> + <Constant name="SupportRin" value="[WheelRout]"/> + <Constant name="SupportRout" value="52.00*cm"/> + <Constant name="SupportL" value="37.7*cm"/> + <!-- 37.2+0.5 ie [SideDiskT] included --> + <Constant name="SupportZ" value="[Zv1]+[SupportL]/2"/> + <Constant name="SupportInRin" value="[SupportRin]+[SupportT]"/> + <Constant name="SupportInRout" value="[SupportRout]-[SupportT]"/> + <Constant name="SideDiskRin" value="22.80*cm"/> + <Constant name="SideDiskT" value="0.50*cm"/> + <Constant name="SideDiskZ" value="[Zv1]+[SupportL]-[SideDiskT]/2"/> + <Constant name="SideDiskInT" value="0.50*cm"/> + <!-- "manine" --> + <Constant name="WheelFixDR" value="3.1*cm"/> + <Constant name="WheelFixRout" value="[tidringpar:Rout]"/> + <Constant name="WheelFixDZ" value="1.3*cm"/> + <!-- real value is 5,5 cm but set 1.3 cm to avoid overlaps --> + <Constant name="WheelFixDPhi" value="6.15*deg"/> + <Constant name="WheelFixTR" value="0.8*cm"/> + <Constant name="WheelFixTZ" value="0.4*cm"/> + <Constant name="WheelFixPhi" value="90.0*deg"/> + </ConstantsSection> + <SolidSection label="tid.xml"> + <Polycone name="TID" startPhi="0*deg" deltaPhi="360*deg"> + <ZSection z="[Zv1]" rMin="[Rin]" rMax="[Rout]"/> + <ZSection z="[Zv2]" rMin="[Rin]" rMax="[Rout]"/> + </Polycone> + <Tubs name="TIDWheel" rMin="[WheelRin]" rMax="[WheelRout]" dz="[WheelT]/2" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TIDSupport" rMin="[SupportRin]" rMax="[SupportRout]" dz="[SupportL]/2" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TIDSupportIn" rMin="[SupportInRin]" rMax="[SupportInRout]" dz="[SupportL]/2" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TIDSideDisk" rMin="[SideDiskRin]" rMax="[WheelRout]" dz="[SideDiskT]/2" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TIDSideDiskIn" rMin="[SideDiskRin]" rMax="[WheelRout]" dz="[SideDiskInT]/2" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TIDWheelFix" rMin="[WheelFixRout]-[WheelFixDR]" rMax="[WheelFixRout]" dz="[WheelFixDZ]/2" startPhi="-[WheelFixDPhi]/2" deltaPhi="[WheelFixDPhi]"/> + <Tubs name="TIDWheelFixHole" rMin="[WheelFixRout]-[WheelFixDR]" rMax="[WheelFixRout]-[WheelFixTR]" dz="([WheelFixDZ]-[WheelFixTZ])/2" startPhi="-[WheelFixDPhi]/2" deltaPhi="[WheelFixDPhi]"/> + <SubtractionSolid name="TIDWheelFixCutted"> + <rSolid name="TIDWheelFix"/> + <rSolid name="TIDWheelFixHole"/> + <Translation x="[zero]" y="[zero]" z="-[WheelFixTZ]/2"/> + </SubtractionSolid> + </SolidSection> + <LogicalPartSection label="tid.xml"> + <LogicalPart name="TIDSupport" category="unspecified"> + <rSolid name="TIDSupport"/> + <rMaterial name="trackermaterial:T_CarbonFibreStr"/> + </LogicalPart> + <LogicalPart name="TIDSupportIn" category="unspecified"> + <rSolid name="TIDSupportIn"/> + <rMaterial name="trackermaterial:T_Nomex"/> + </LogicalPart> + <LogicalPart name="TIDSideDisk" category="unspecified"> + <rSolid name="TIDSideDisk"/> + <rMaterial name="trackermaterial:T_CarbonFibreStr"/> + </LogicalPart> + <LogicalPart name="TIDSideDiskIn" category="unspecified"> + <rSolid name="TIDSideDiskIn"/> + <rMaterial name="trackermaterial:T_Nomex"/> + </LogicalPart> + <LogicalPart name="TIDWheelFixCutted" category="unspecified"> + <rSolid name="TIDWheelFixCutted"/> + <rMaterial name="tidmaterial:TID_WheelFixation"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tid.xml"> + <PosPart copyNumber="1"> + <rParent name="tid:TIDSupport"/> + <rChild name="tid:TIDSupportIn"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tid:TIDSideDisk"/> + <rChild name="tid:TIDSideDiskIn"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tidb.xml b/examples/DDCMS/data/tidb.xml new file mode 100644 index 000000000..2d2bfbffb --- /dev/null +++ b/examples/DDCMS/data/tidb.xml @@ -0,0 +1,70 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tidb.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <LogicalPartSection label="tidb.xml"> + <LogicalPart name="TIDB" category="unspecified"> + <rSolid name="tid:TID"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TIDWheelB" category="unspecified"> + <rSolid name="tid:TIDWheel"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tidb.xml"> + <PosPart copyNumber="1"> + <rParent name="tidb:TIDB"/> + <rChild name="tidb:TIDWheelB"/> + <Translation x="[zero]" y="[zero]" z="[tid:Wheel0Z]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tidb:TIDB"/> + <rChild name="tidb:TIDWheelB"/> + <Translation x="[zero]" y="[zero]" z="[tid:Wheel1Z]"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="tidb:TIDB"/> + <rChild name="tidb:TIDWheelB"/> + <Translation x="[zero]" y="[zero]" z="[tid:Wheel2Z]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tidb:TIDWheelB"/> + <rChild name="tidring0b:TIDRing0B"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tidb:TIDWheelB"/> + <rChild name="tidring1b:TIDRing1B"/> + <Translation x="[zero]" y="[zero]" z="[tid:RingZ]"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="tidb:TIDWheelB"/> + <rChild name="tidring2:TIDRing2"/> + <Translation x="[zero]" y="[zero]" z="-[tid:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tidb:TIDB"/> + <rChild name="tid:TIDSupport"/> + <Translation x="[zero]" y="[zero]" z="[tid:SupportZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tidb:TIDB"/> + <rChild name="tid:TIDSideDisk"/> + <Translation x="[zero]" y="[zero]" z="[tid:SideDiskZ]"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tidring0b:TIDRing0B"/> + <String name="ChildName" value="tid:TIDWheelFixCutted"/> + <Numeric name="N" value="3"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tid:WheelFixPhi]"/> + <Numeric name="Radius" value="0"/> + <Vector name="Center" type="numeric" nEntries="3"> + [zero], [zero], -([tidringpar:StructureT]+[tid:WheelFixDZ])/2 + </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tidf.xml b/examples/DDCMS/data/tidf.xml new file mode 100644 index 000000000..2f55447bf --- /dev/null +++ b/examples/DDCMS/data/tidf.xml @@ -0,0 +1,70 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tidf.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <LogicalPartSection label="tidf.xml"> + <LogicalPart name="TIDF" category="unspecified"> + <rSolid name="tid:TID"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TIDWheelF" category="unspecified"> + <rSolid name="tid:TIDWheel"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tidf.xml"> + <PosPart copyNumber="1"> + <rParent name="tidf:TIDF"/> + <rChild name="tidf:TIDWheelF"/> + <Translation x="[zero]" y="[zero]" z="[tid:Wheel0Z]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tidf:TIDF"/> + <rChild name="tidf:TIDWheelF"/> + <Translation x="[zero]" y="[zero]" z="[tid:Wheel1Z]"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="tidf:TIDF"/> + <rChild name="tidf:TIDWheelF"/> + <Translation x="[zero]" y="[zero]" z="[tid:Wheel2Z]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tidf:TIDWheelF"/> + <rChild name="tidring0f:TIDRing0F"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tidf:TIDWheelF"/> + <rChild name="tidring1f:TIDRing1F"/> + <Translation x="[zero]" y="[zero]" z="[tid:RingZ]"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="tidf:TIDWheelF"/> + <rChild name="tidring2:TIDRing2"/> + <Translation x="[zero]" y="[zero]" z="-[tid:RingZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tidf:TIDF"/> + <rChild name="tid:TIDSupport"/> + <Translation x="[zero]" y="[zero]" z="[tid:SupportZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tidf:TIDF"/> + <rChild name="tid:TIDSideDisk"/> + <Translation x="[zero]" y="[zero]" z="[tid:SideDiskZ]"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tidring0f:TIDRing0F"/> + <String name="ChildName" value="tid:TIDWheelFixCutted"/> + <Numeric name="N" value="3"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[tid:WheelFixPhi]"/> + <Numeric name="Radius" value="0"/> + <Vector name="Center" type="numeric" nEntries="3"> + [zero], [zero], -([tidringpar:StructureT]+[tid:WheelFixDZ])/2 + </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tidmaterial.xml b/examples/DDCMS/data/tidmaterial.xml new file mode 100644 index 000000000..f318846ba --- /dev/null +++ b/examples/DDCMS/data/tidmaterial.xml @@ -0,0 +1,340 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <MaterialSection label="tidmaterial.xml"> + <CompositeMaterial name="TID_Mech" density="0.25139*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.11047"> + <rMaterial name="trackermaterial:T_Nomex" /> + </MaterialFraction> + <MaterialFraction fraction="0.83359"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + <MaterialFraction fraction="0.02685"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.02909"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TID_CoolPipe" density="2.17440*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.44661"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.55339"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TID_CoolManifold" density="2.20750*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.48924"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.51076"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TID_WheelFixation" density="4.95593*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.42707"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + <MaterialFraction fraction="0.57293"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TID_ICB1" density="2.21343*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.47891"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.43924"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00545"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.03467"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.02645"> + <rMaterial name="materials:T_Bronze" /> + </MaterialFraction> + <MaterialFraction fraction="0.00107"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.00279"> + <rMaterial name="trackermaterial:T_Barium_Titanate" /> + </MaterialFraction> + <MaterialFraction fraction="0.0012"> + <rMaterial name="materials:Nickel" /> + </MaterialFraction> + <MaterialFraction fraction="0.00664"> + <rMaterial name="trackermaterial:T_Barium_Titanate" /> + </MaterialFraction> + <MaterialFraction fraction="0.00358"> + <rMaterial name="materials:Nickel" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TID_ICB2" density="2.18035*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.48128"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.44148"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.0055"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.03245"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.02476"> + <rMaterial name="materials:T_Bronze" /> + </MaterialFraction> + <MaterialFraction fraction="0.00108"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.00272"> + <rMaterial name="trackermaterial:T_Barium_Titanate" /> + </MaterialFraction> + <MaterialFraction fraction="0.00116"> + <rMaterial name="materials:Nickel" /> + </MaterialFraction> + <MaterialFraction fraction="0.00621"> + <rMaterial name="trackermaterial:T_Barium_Titanate" /> + </MaterialFraction> + <MaterialFraction fraction="0.00335"> + <rMaterial name="materials:Nickel" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TID_ICB3" density="2.83682*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.49183"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.45103"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00369"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.02578"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.01888"> + <rMaterial name="materials:T_Bronze" /> + </MaterialFraction> + <MaterialFraction fraction="0.00075"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.00277"> + <rMaterial name="trackermaterial:T_Barium_Titanate" /> + </MaterialFraction> + <MaterialFraction fraction="0.00119"> + <rMaterial name="materials:Nickel" /> + </MaterialFraction> + <MaterialFraction fraction="0.00265"> + <rMaterial name="trackermaterial:T_Barium_Titanate" /> + </MaterialFraction> + <MaterialFraction fraction="0.00143"> + <rMaterial name="materials:Nickel" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TID_DOHM1" density="2.69687*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.6069"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.12363"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00474"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.07782"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.04334"> + <rMaterial name="materials:T_Bronze" /> + </MaterialFraction> + <MaterialFraction fraction="0.00118"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.00379"> + <rMaterial name="trackermaterial:T_Barium_Titanate" /> + </MaterialFraction> + <MaterialFraction fraction="0.00162"> + <rMaterial name="materials:Nickel" /> + </MaterialFraction> + <MaterialFraction fraction="0.00082"> + <rMaterial name="trackermaterial:T_Barium_Titanate" /> + </MaterialFraction> + <MaterialFraction fraction="0.0008"> + <rMaterial name="materials:Nickel" /> + </MaterialFraction> + <MaterialFraction fraction="0.09165"> + <rMaterial name="tibtidcommonmaterial:TIBTID_CCUM" /> + </MaterialFraction> + <MaterialFraction fraction="0.0169"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.01248"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00259"> + <rMaterial name="materials:Alumina" /> + </MaterialFraction> + <MaterialFraction fraction="0.00078"> + <rMaterial name="materials:Carbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.00192"> + <rMaterial name="materials:SMD_metal" /> + </MaterialFraction> + <MaterialFraction fraction="0.00526"> + <rMaterial name="materials:Silicon" /> + </MaterialFraction> + <MaterialFraction fraction="0.00044"> + <rMaterial name="materials:Silicon" /> + </MaterialFraction> + <MaterialFraction fraction="0.00332"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TID_DOHM2" density="2.43641*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.67179"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.13681"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00337"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.05528"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.03079"> + <rMaterial name="materials:T_Bronze" /> + </MaterialFraction> + <MaterialFraction fraction="0.00084"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.00269"> + <rMaterial name="trackermaterial:T_Barium_Titanate" /> + </MaterialFraction> + <MaterialFraction fraction="0.00115"> + <rMaterial name="materials:Nickel" /> + </MaterialFraction> + <MaterialFraction fraction="0.00058"> + <rMaterial name="trackermaterial:T_Barium_Titanate" /> + </MaterialFraction> + <MaterialFraction fraction="0.00057"> + <rMaterial name="materials:Nickel" /> + </MaterialFraction> + <MaterialFraction fraction="0.0651"> + <rMaterial name="tibtidcommonmaterial:TIBTID_CCUM" /> + </MaterialFraction> + <MaterialFraction fraction="0.012"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.00887"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00184"> + <rMaterial name="materials:Alumina" /> + </MaterialFraction> + <MaterialFraction fraction="0.00056"> + <rMaterial name="materials:Carbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.00136"> + <rMaterial name="materials:SMD_metal" /> + </MaterialFraction> + <MaterialFraction fraction="0.00374"> + <rMaterial name="materials:Silicon" /> + </MaterialFraction> + <MaterialFraction fraction="0.00031"> + <rMaterial name="materials:Silicon" /> + </MaterialFraction> + <MaterialFraction fraction="0.00236"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TID_CoolInsert" density="5.46429*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="1"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="T_TIDModKaptonBox" density="1.25249*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.44711"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.00555"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00844"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.13306"> + <rMaterial name="trackermaterial:T_Barium_Titanate" /> + </MaterialFraction> + <MaterialFraction fraction="0.33267"> + <rMaterial name="trackermaterial:T_Silicone_Gel" /> + </MaterialFraction> + <MaterialFraction fraction="0.03327"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.0399"> + <rMaterial name="materials:Iron" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TID_Spacer" density="2.98720*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.89555"> + <rMaterial name="materials:Alumina" /> + </MaterialFraction> + <MaterialFraction fraction="0.10445"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TID_SSAOHBox" density="0.74445*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.61394"> + <rMaterial name="tibtidcommonmaterial:TIBTID_AOH" /> + </MaterialFraction> + <MaterialFraction fraction="0.04738"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.03257"> + <rMaterial name="materials:T_Bronze" /> + </MaterialFraction> + <MaterialFraction fraction="0.05626"> + <rMaterial name="trackermaterial:T_FR4" /> + </MaterialFraction> + <MaterialFraction fraction="0.03252"> + <rMaterial name="tibtidcommonmaterial:TIBTID_HybridTails" /> + </MaterialFraction> + <MaterialFraction fraction="0.02612"> + <rMaterial name="tibtidcommonmaterial:TIBTID_HybridTails" /> + </MaterialFraction> + <MaterialFraction fraction="0.01776"> + <rMaterial name="materials:Iron" /> + </MaterialFraction> + <MaterialFraction fraction="0.17345"> + <rMaterial name="tidmaterial:TID_CoolPipe" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TID_DSAOHBox" density="0.74445*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="1"> + <rMaterial name="tidmaterial:TID_SSAOHBox" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TID_FiberLayer" density="1.13781*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.68491"> + <rMaterial name="tibtidcommonmaterial:T_FiberPigtail" /> + </MaterialFraction> + <MaterialFraction fraction="0.31509"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TID_ModuleFix" density="1.65714*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.50611"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.49389"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + </CompositeMaterial> + </MaterialSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tidmodpar.xml b/examples/DDCMS/data/tidmodpar.xml new file mode 100644 index 000000000..3113c20ed --- /dev/null +++ b/examples/DDCMS/data/tidmodpar.xml @@ -0,0 +1,81 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tidmodpar.xml" eval="true"> + <Constant name="DetTilt" value="0.100*rad"/> + <Constant name="ModuleThickDS" value="0.710*cm"/> + <Constant name="ModuleThickSS" value="0.552*cm"/> + <Constant name="WaferThick" value="0.032*cm"/> + <Constant name="ActiveZDS" value="0.121*cm"/> + <Constant name="ActiveZSS" value="0*cm"/> + <Constant name="PitchThick" value="0.1130*cm"/> + <Constant name="PitchZDS" value="0.1315*cm"/> + <Constant name="PitchZSS" value="0.0105*cm"/> + <Constant name="HybridHeight" value="2.53*cm"/> + <Constant name="HybridWidth" value="4.70*cm"/> + <Constant name="HybridThick" value="[PitchThick]"/> + <Constant name="HybridZDS" value="[PitchZDS]"/> + <Constant name="HybridZSS" value="[PitchZSS]"/> + <Constant name="KaptonThick" value="0.030*cm"/> + <Constant name="KaptonZDS" value="0.090*cm"/> + <Constant name="KaptonZSS" value="-0.031*cm"/> + <Constant name="KaptonOver" value="0.400*cm"/> + <Constant name="BoxFrameWidth" value="7.70*cm"/> + <Constant name="BoxFrameHeightDS" value="1.95*cm"/> + <Constant name="BoxFrameHeightSS" value="[HybridHeight]"/> + <Constant name="BoxFrameThick" value="0.050*cm"/> + <Constant name="BoxFrameZDS" value="0.050*cm"/> + <Constant name="BoxFrameZSS" value="-0.071*cm"/> + <Constant name="SideFrameThick" value="[BoxFrameThick]"/> + <Constant name="SideFrameZDS" value="[BoxFrameZDS]"/> + <Constant name="SideFrameZSS" value="[BoxFrameZSS]"/> + <Constant name="SideFrameOver" value="0.200*cm"/> + <Constant name="BottomFrameOverDS" value="0.20*cm"/> + <Constant name="BottomFrameOverSS" value="0.15*cm"/> + <Constant name="TopFrameOverDS" value="0.15*cm"/> + <Constant name="TopFrameOverSS" value="0.20*cm"/> + <Constant name="PitchStereoTolerance" value="0.02*cm"/> + <!-- Cool Insert section --> + <Constant name="CoolInsertHeightSS" value="1.4*cm"/> + <Constant name="CoolInsertWidthSS" value="0.8*cm"/> + <Constant name="CoolInsertThickSS" value="0.18*cm"/> + <Constant name="CoolInsertZSS" value="[BoxFrameZSS]-0.5*([BoxFrameThick]+[CoolInsertThickSS])"/> + <Constant name="CoolInsertHeightDS" value="1.3*cm"/> + <Constant name="CoolInsertWidthDS" value="0.7*cm"/> + <Constant name="CoolInsertThickDS" value="0.25*cm"/> + <Constant name="CoolInsertZDS" value="-([KaptonZDS]+0.5*([KaptonThick]+[CoolInsertThickDS]))"/> + <!-- Spacers Section DS modules --> + <Constant name="BottomSpacersHeight" value="2.15*cm"/> + <Constant name="BottomSpacersWidth" value="7.70*cm"/> + <Constant name="BottomSpacersThick" value="0.050*cm"/> + <Constant name="BottomSpacersZ" value="[tid:zero]"/> + <Constant name="SideSpacersHeight" value="3.1*cm"/> + <Constant name="SideSpacersWidth" value="0.9*cm"/> + <!-- ~ 25% smaller then real ones --> + <Constant name="SideSpacersThick" value="[BottomSpacersThick]"/> + <Constant name="SideSpacersZ" value="[BottomSpacersZ]"/> + </ConstantsSection> + <SolidSection label="tidmodpar.xml"> + <Box name="BottomSpacers" dx="[BottomSpacersWidth]/2" dy="[BottomSpacersThick]/2" dz="[BottomSpacersHeight]/2"/> + <Box name="SideSpacers" dx="[SideSpacersWidth]/2" dy="[SideSpacersThick]/2" dz="[SideSpacersHeight]/2"/> + </SolidSection> + <LogicalPartSection label="tidmodpar.xml"> + <LogicalPart name="TIDBottomSpacers" category="unspecified"> + <rSolid name="tidmodpar:BottomSpacers"/> + <rMaterial name="tidmaterial:TID_Spacer"/> + </LogicalPart> + <LogicalPart name="TIDSideSpacers" category="unspecified"> + <rSolid name="tidmodpar:SideSpacers"/> + <rMaterial name="tidmaterial:TID_Spacer"/> + </LogicalPart> + </LogicalPartSection> + <RotationSection label="tidmodpar.xml"> + <Rotation name="90ZD" thetaX="-90*deg" phiX="0*deg" thetaY="180*deg" phiY="0*deg" thetaZ="-90*deg" phiZ="90*deg"/> + <Rotation name="9NYX" thetaX="0*deg" phiX="0*deg" thetaY="90*deg" phiY="90*deg" thetaZ="-90*deg" phiZ="0*deg"/> + <Rotation name="9PYX" thetaX="0*deg" phiX="0*deg" thetaY="90*deg" phiY="-90*deg" thetaZ="90*deg" phiZ="0*deg"/> + <Rotation name="RFI1" thetaX="-90*deg" phiX="0*deg" thetaY="-90*deg" phiY="90*deg" thetaZ="0*deg" phiZ="0*deg"/> + <Rotation name="RFI2" thetaX="90*deg" phiX="0*deg" thetaY="90*deg" phiY="-90*deg" thetaZ="180*deg" phiZ="0*deg"/> + <Rotation name="F100" thetaX="84.2704*deg" phiX="0*deg" thetaY="90*deg" phiY="90*deg" thetaZ="5.7296*deg" phiZ="180*deg"/> + <Rotation name="G100" thetaX="-95.7296*deg" phiX="180*deg" thetaY="-90*deg" phiY="-90*deg" thetaZ="-5.7296*deg" phiZ="180*deg"/> + <Rotation name="R180" thetaX="90*deg" phiX="180*deg" thetaY="90*deg" phiY="-90*deg" thetaZ="0*deg" phiZ="0*deg"/> + </RotationSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tidmodule0.xml b/examples/DDCMS/data/tidmodule0.xml new file mode 100644 index 000000000..bf2657b01 --- /dev/null +++ b/examples/DDCMS/data/tidmodule0.xml @@ -0,0 +1,183 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tidmodule0.xml" eval="true"> + <Constant name="FullHeight" value="11.2936000*cm"/> + <Constant name="ActiveHeight" value="11.0858000*cm"/> + <Constant name="DlTop" value="9.3754000*cm"/> + <Constant name="DlBottom" value="6.3588000*cm"/> + <Constant name="SideWidthTop" value="0.1082551*cm"/> + <Constant name="SideWidthBottom" value="0.0836793*cm"/> + <Constant name="DlHybrid" value="10.403*cm"/> + <Constant name="PitchHeight" value="1.30*cm"/> + <Constant name="BottomFrameHeight" value="0.70*cm"/> + <Constant name="TopFrameHeight" value="[PitchHeight]+[tidmodpar:TopFrameOverDS]+0.6*cm"/> + <Constant name="BoxFrameHeight" value="[tidmodpar:BoxFrameHeightDS]"/> + <Constant name="SideFrameWidth" value="1.35*cm"/> + <Constant name="CoolInsertShift" value="9.78*cm"/> + <Constant name="SideSpacersShift" value="[CoolInsertShift]"/> + <!-- alias for Module Height --> + <Constant name="ModuleHeight" value="[BoxFrameHeight]+[BottomFrameHeight]+[FullHeight]+[TopFrameHeight]- [tidmodpar:TopFrameOverDS]-[tidmodpar:BottomFrameOverDS]"/> + </ConstantsSection> + <Algorithm name="track:DDTIDModuleAlgo"> + <rParent name="tidmodule0l:TIDModule0L"/> + <String name="GeneralMaterial" value="materials:Air"/> + <Numeric name="DetectorNumber" value="2"/> + <Numeric name="ModuleThick" value="[tidmodpar:ModuleThickDS]"/> + <Numeric name="DetTilt" value="[tidmodpar:DetTilt]"/> + <Numeric name="FullHeight" value="[tidmodule0:FullHeight]"/> + <Numeric name="DlTop" value="[tidmodule0:DlTop]"/> + <Numeric name="DlBottom" value="[tidmodule0:DlBottom]"/> + <Numeric name="DlHybrid" value="[tidmodule0:DlHybrid]"/> + <String name="DoComponents" value="Yes"/> + <String name="BoxFrameName" value="tidmodule0:TIDModule0BoxFrame"/> + <String name="BoxFrameMaterial" value="trackermaterial:T_CarbonFibreStr"/> + <Numeric name="BoxFrameWidth" value="[tidmodpar:BoxFrameWidth]"/> + <Numeric name="BoxFrameThick" value="[tidmodpar:BoxFrameThick]"/> + <Numeric name="BoxFrameHeight" value="[tidmodule0:BoxFrameHeight]"/> + <Numeric name="BottomFrameHeight" value="[tidmodule0:BottomFrameHeight]"/> + <Numeric name="BottomFrameOver" value="[tidmodpar:BottomFrameOverDS]"/> + <Numeric name="TopFrameHeight" value="[tidmodule0:TopFrameHeight]"/> + <Numeric name="TopFrameOver" value="[tidmodpar:TopFrameOverDS]"/> + <String name="SideFrameMaterial" value="trackermaterial:T_CarbonFibreStr"/> + <Numeric name="SideFrameWidth" value="[tidmodule0:SideFrameWidth]"/> + <Numeric name="SideFrameThick" value="[tidmodpar:SideFrameThick]"/> + <Numeric name="SideFrameOver" value="[tidmodpar:SideFrameOver]"/> + <Vector name="SideFrameName" type="string" nEntries="2"> + tidmodule0:TIDModule0RphiSideFrame, tidmodule0:TIDModule0StereoSideFrame + </Vector> + <Vector name="HoleFrameName" type="string" nEntries="2"> + tidmodule0:TIDModule0RphiFrameHole, tidmodule0:TIDModule0StereoFrameHole + </Vector> + <Vector name="HoleFrameRotation" type="string" nEntries="2"> + tidmodpar:NULL, tidmodpar:F100 + </Vector> + <String name="KaptonMaterial" value="tidmaterial:T_TIDModKaptonBox"/> + <Numeric name="KaptonThick" value="[tidmodpar:KaptonThick]"/> + <Numeric name="KaptonOver" value="[tidmodpar:KaptonOver]"/> + <Vector name="KaptonName" type="string" nEntries="2"> + tidmodule0:TIDModule0RphiKapton, tidmodule0:TIDModule0StereoKapton + </Vector> + <Vector name="HoleKaptonName" type="string" nEntries="2"> + tidmodule0:TIDModule0RphiKaptonHole, tidmodule0:TIDModule0StereoKaptonHole + </Vector> + <Vector name="HoleKaptonRotation" type="string" nEntries="2"> + tidmodpar:NULL, tidmodpar:F100 + </Vector> + <Vector name="WaferName" type="string" nEntries="2"> + tidmodule0:TIDModule0RphiWafer, tidmodule0:TIDModule0StereoWafer + </Vector> + <String name="WaferMaterial" value="materials:Silicon"/> + <Numeric name="SideWidthTop" value="[SideWidthTop]"/> + <Numeric name="SideWidthBottom" value="[SideWidthBottom]"/> + <Vector name="ActiveName" type="string" nEntries="2"> + tidmodule0:TIDModule0RphiActive, tidmodule0:TIDModule0StereoActive + </Vector> + <String name="ActiveMaterial" value="materials:Silicon"/> + <Numeric name="ActiveHeight" value="[tidmodule0:ActiveHeight]"/> + <Vector name="WaferThick" type="numeric" nEntries="2"> + [tidmodpar:WaferThick], [tidmodpar:WaferThick] + </Vector> + <String name="ActiveRotation" value="tidmodpar:90ZD"/> + <Vector name="BackPlaneThick" type="numeric" nEntries="2"> + 2*[tracker:BackPlaneDz], 2*[tracker:BackPlaneDz] + </Vector> + <String name="HybridName" value="tidmodule0:TIDModule0Hybrid"/> + <String name="HybridMaterial" value="tibtidcommonmaterial:TIBTID_Hybrid"/> + <Numeric name="HybridHeight" value="[tidmodpar:HybridHeight]"/> + <Numeric name="HybridWidth" value="[tidmodpar:HybridWidth]"/> + <Numeric name="HybridThick" value="[tidmodpar:HybridThick]"/> + <Vector name="PitchName" type="string" nEntries="2"> + tidmodule0:TIDModule0RphiPA, tidmodule0:TIDModule0StereoPA + </Vector> + <String name="PitchMaterial" value="tibtidcommonmaterial:TIBTID_PA"/> + <Numeric name="PitchHeight" value="[tidmodule0:PitchHeight]"/> + <Numeric name="PitchThick" value="[tidmodpar:PitchThick]"/> + <Numeric name="PitchStereoTolerance" value="[tidmodpar:PitchStereoTolerance]"/> + <String name="CoolInsertName" value="tidmodule0:TIDCoolInsert"/> + <String name="CoolInsertMaterial" value="tidmaterial:TID_CoolInsert"/> + <Numeric name="CoolInsertHeight" value="[tidmodpar:CoolInsertHeightDS]"/> + <Numeric name="CoolInsertThick" value="[tidmodpar:CoolInsertThickDS]"/> + <Numeric name="CoolInsertWidth" value="[tidmodpar:CoolInsertWidthDS]"/> + </Algorithm> + <Algorithm name="track:DDTIDModuleAlgo"> + <rParent name="tidmodule0r:TIDModule0R"/> + <String name="GeneralMaterial" value="materials:Air"/> + <Numeric name="DetectorNumber" value="2"/> + <Numeric name="ModuleThick" value="[tidmodpar:ModuleThickDS]"/> + <Numeric name="DetTilt" value="[tidmodpar:DetTilt]"/> + <Numeric name="FullHeight" value="[tidmodule0:FullHeight]"/> + <Numeric name="DlTop" value="[tidmodule0:DlTop]"/> + <Numeric name="DlBottom" value="[tidmodule0:DlBottom]"/> + <Numeric name="DlHybrid" value="[tidmodule0:DlHybrid]"/> + <String name="DoComponents" value="No"/> + <String name="BoxFrameName" value="tidmodule0:TIDModule0BoxFrame"/> + <String name="BoxFrameMaterial" value="trackermaterial:T_CarbonFibreStr"/> + <Numeric name="BoxFrameWidth" value="[tidmodpar:BoxFrameWidth]"/> + <Numeric name="BoxFrameThick" value="[tidmodpar:BoxFrameThick]"/> + <Numeric name="BoxFrameHeight" value="[tidmodule0:BoxFrameHeight]"/> + <Numeric name="BottomFrameHeight" value="[tidmodule0:BottomFrameHeight]"/> + <Numeric name="BottomFrameOver" value="[tidmodpar:BottomFrameOverDS]"/> + <Numeric name="TopFrameHeight" value="[tidmodule0:TopFrameHeight]"/> + <Numeric name="TopFrameOver" value="[tidmodpar:TopFrameOverDS]"/> + <String name="SideFrameMaterial" value="trackermaterial:T_CarbonFibreStr"/> + <Numeric name="SideFrameWidth" value="[tidmodule0:SideFrameWidth]"/> + <Numeric name="SideFrameThick" value="[tidmodpar:SideFrameThick]"/> + <Numeric name="SideFrameOver" value="[tidmodpar:SideFrameOver]"/> + <Vector name="SideFrameName" type="string" nEntries="2"> + tidmodule0:TIDModule0RphiSideFrame, tidmodule0:TIDModule0StereoSideFrame + </Vector> + <Vector name="HoleFrameName" type="string" nEntries="2"> + tidmodule0:TIDModule0RphiFrameHole, tidmodule0:TIDModule0StereoFrameHole + </Vector> + <Vector name="HoleFrameRotation" type="string" nEntries="2"> + tidmodpar:NULL, tidmodpar:F100 + </Vector> + <String name="KaptonMaterial" value="tidmaterial:T_TIDModKaptonBox"/> + <Numeric name="KaptonThick" value="[tidmodpar:KaptonThick]"/> + <Numeric name="KaptonOver" value="[tidmodpar:KaptonOver]"/> + <Vector name="KaptonName" type="string" nEntries="2"> + tidmodule0:TIDModule0RphiKapton, tidmodule0:TIDModule0StereoKapton + </Vector> + <Vector name="HoleKaptonName" type="string" nEntries="2"> + tidmodule0:TIDModule0RphiKaptonHole, tidmodule0:TIDModule0StereoKaptonHole + </Vector> + <Vector name="HoleKaptonRotation" type="string" nEntries="2"> + tidmodpar:NULL, tidmodpar:F100 + </Vector> + <Vector name="WaferName" type="string" nEntries="2"> + tidmodule0:TIDModule0RphiWafer, tidmodule0:TIDModule0StereoWafer + </Vector> + <String name="WaferMaterial" value="materials:Silicon"/> + <Numeric name="SideWidthTop" value="[SideWidthTop]"/> + <Numeric name="SideWidthBottom" value="[SideWidthBottom]"/> + <Vector name="ActiveName" type="string" nEntries="2"> + tidmodule0:TIDModule0RphiActive, tidmodule0:TIDModule0StereoActive + </Vector> + <String name="ActiveMaterial" value="materials:Silicon"/> + <Numeric name="ActiveHeight" value="[tidmodule0:ActiveHeight]"/> + <Vector name="WaferThick" type="numeric" nEntries="2"> + [tidmodpar:WaferThick], [tidmodpar:WaferThick] + </Vector> + <String name="ActiveRotation" value="tidmodpar:90ZD"/> + <Vector name="BackPlaneThick" type="numeric" nEntries="2"> + 2*[tracker:BackPlaneDz], 2*[tracker:BackPlaneDz] + </Vector> + <String name="HybridName" value="tidmodule0:TIDModule0Hybrid"/> + <String name="HybridMaterial" value="tibtidcommonmaterial:TIBTID_Hybrid"/> + <Numeric name="HybridHeight" value="[tidmodpar:HybridHeight]"/> + <Numeric name="HybridWidth" value="[tidmodpar:HybridWidth]"/> + <Numeric name="HybridThick" value="[tidmodpar:HybridThick]"/> + <Vector name="PitchName" type="string" nEntries="2"> + tidmodule0:TIDModule0RphiPA, tidmodule0:TIDModule0StereoPA + </Vector> + <String name="PitchMaterial" value="tibtidcommonmaterial:TIBTID_PA"/> + <Numeric name="PitchHeight" value="[tidmodule0:PitchHeight]"/> + <Numeric name="PitchThick" value="[tidmodpar:PitchThick]"/> + <Numeric name="PitchStereoTolerance" value="[tidmodpar:PitchStereoTolerance]"/> + <String name="CoolInsertName" value="tidmodule0:TIDCoolInsert"/> + <String name="CoolInsertMaterial" value="trackermaterial:T_Aluminium"/> + <Numeric name="CoolInsertHeight" value="[tidmodpar:CoolInsertHeightDS]"/> + <Numeric name="CoolInsertThick" value="[tidmodpar:CoolInsertThickDS]"/> + <Numeric name="CoolInsertWidth" value="[tidmodpar:CoolInsertWidthDS]"/> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tidmodule0l.xml b/examples/DDCMS/data/tidmodule0l.xml new file mode 100644 index 000000000..ae3289fbe --- /dev/null +++ b/examples/DDCMS/data/tidmodule0l.xml @@ -0,0 +1,69 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <Algorithm name="track:DDTIDModulePosAlgo"> + <rParent name="tidmodule0l:TIDModule0L"/> + <Numeric name="DetectorNumber" value="2"/> + <Numeric name="ModuleThick" value="[tidmodpar:ModuleThickDS]"/> + <Numeric name="DetTilt" value="-[tidmodpar:DetTilt]"/> + <Numeric name="FullHeight" value="[tidmodule0:FullHeight]"/> + <Numeric name="DlTop" value="[tidmodule0:DlTop]"/> + <Numeric name="DlBottom" value="[tidmodule0:DlBottom]"/> + <Numeric name="DlHybrid" value="[tidmodule0:DlHybrid]"/> + <String name="BoxFrameName" value="tidmodule0:TIDModule0BoxFrame"/> + <Numeric name="BoxFrameHeight" value="[tidmodule0:BoxFrameHeight]"/> + <Numeric name="BoxFrameWidth" value="[tidmodpar:BoxFrameWidth]"/> + <Vector name="BoxFrameZ" type="numeric" nEntries="2"> + [tidmodpar:BoxFrameZDS], -[tidmodpar:BoxFrameZDS] </Vector> + <Numeric name="BottomFrameHeight" value="[tidmodule0:BottomFrameHeight]"/> + <Numeric name="BottomFrameOver" value="[tidmodpar:BottomFrameOverDS]"/> + <Numeric name="TopFrameHeight" value="[tidmodule0:TopFrameHeight]"/> + <Numeric name="TopFrameOver" value="[tidmodpar:TopFrameOverDS]"/> + <Vector name="SideFrameName" type="string" nEntries="2"> + tidmodule0:TIDModule0RphiSideFrame, tidmodule0:TIDModule0StereoSideFrame</Vector> + <Vector name="SideFrameZ" type="numeric" nEntries="2"> + [tidmodpar:SideFrameZDS], -[tidmodpar:SideFrameZDS] </Vector> + <Vector name="SideFrameRotation" type="string" nEntries="2"> + tidmodpar:NULL, tidmodpar:NULL</Vector> + <Numeric name="SideFrameWidth" value="[tidmodule0:SideFrameWidth]"/> + <Numeric name="SideFrameOver" value="[tidmodpar:SideFrameOver]"/> + <Vector name="KaptonName" type="string" nEntries="2"> + tidmodule0:TIDModule0RphiKapton, tidmodule0:TIDModule0StereoKapton</Vector> + <Vector name="KaptonZ" type="numeric" nEntries="2"> + [tidmodpar:KaptonZDS], -[tidmodpar:KaptonZDS] </Vector> + <Vector name="KaptonRotation" type="string" nEntries="2"> + tidmodpar:NULL, tidmodpar:NULL</Vector> + <Vector name="WaferName" type="string" nEntries="2"> + tidmodule0:TIDModule0RphiWafer, tidmodule0:TIDModule0StereoWafer</Vector> + <Vector name="WaferZ" type="numeric" nEntries="2"> + [tidmodpar:ActiveZDS], -[tidmodpar:ActiveZDS] </Vector> + <Vector name="WaferRotation" type="string" nEntries="2"> + tidmodpar:RFI1, tidmodpar:F100</Vector> + <String name="HybridName" value="tidmodule0:TIDModule0Hybrid"/> + <Numeric name="HybridHeight" value="[tidmodpar:HybridHeight]"/> + <Vector name="HybridZ" type="numeric" nEntries="2"> + [tidmodpar:HybridZDS], -[tidmodpar:HybridZDS] </Vector> + <Vector name="PitchName" type="string" nEntries="2"> + tidmodule0:TIDModule0RphiPA, tidmodule0:TIDModule0StereoPA</Vector> + <Numeric name="PitchHeight" value="[tidmodule0:PitchHeight]"/> + <Vector name="PitchZ" type="numeric" nEntries="2"> + [tidmodpar:PitchZDS], -[tidmodpar:PitchZDS] </Vector> + <Vector name="PitchRotation" type="string" nEntries="2"> + tidmodpar:NULL, tidmodpar:9PYX</Vector> + <String name="CoolInsertName" value="tidmodule0:TIDCoolInsert"/> + <Numeric name="CoolInsertHeight" value="[tidmodpar:CoolInsertHeightDS]"/> + <Numeric name="CoolInsertWidth" value="[tidmodpar:CoolInsertWidthDS]"/> + <Numeric name="CoolInsertZ" value="[tidmodpar:CoolInsertZDS]"/> + <Vector name="CoolInsertShift" type="numeric" nEntries="2"> + [tid:zero], [tidmodule0:CoolInsertShift] </Vector> + <String name="DoSpacers" value="Yes"/> + <String name="BottomSpacersName" value="tidmodpar:TIDBottomSpacers"/> + <Numeric name="BottomSpacersHeight" value="[tidmodpar:BottomSpacersHeight]"/> + <Numeric name="BottomSpacersZ" value="[tidmodpar:BottomSpacersZ]"/> + <String name="SideSpacersName" value="tidmodpar:TIDSideSpacers"/> + <Numeric name="SideSpacersHeight" value="[tidmodpar:SideSpacersHeight]"/> + <Numeric name="SideSpacersZ" value="[tidmodpar:SideSpacersZ]"/> + <Numeric name="SideSpacersThick" value="[tidmodpar:SideSpacersThick]"/> + <Numeric name="SideSpacersWidth" value="[tidmodpar:SideSpacersWidth]"/> + <Numeric name="SideSpacersShift" value="[tidmodule0:SideSpacersShift]"/> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tidmodule0r.xml b/examples/DDCMS/data/tidmodule0r.xml new file mode 100644 index 000000000..c37a38ff4 --- /dev/null +++ b/examples/DDCMS/data/tidmodule0r.xml @@ -0,0 +1,69 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <Algorithm name="track:DDTIDModulePosAlgo"> + <rParent name="tidmodule0r:TIDModule0R"/> + <Numeric name="DetectorNumber" value="2"/> + <Numeric name="ModuleThick" value="[tidmodpar:ModuleThickDS]"/> + <Numeric name="DetTilt" value="[tidmodpar:DetTilt]"/> + <Numeric name="FullHeight" value="[tidmodule0:FullHeight]"/> + <Numeric name="DlTop" value="[tidmodule0:DlTop]"/> + <Numeric name="DlBottom" value="[tidmodule0:DlBottom]"/> + <Numeric name="DlHybrid" value="[tidmodule0:DlHybrid]"/> + <String name="BoxFrameName" value="tidmodule0:TIDModule0BoxFrame"/> + <Numeric name="BoxFrameHeight" value="[tidmodule0:BoxFrameHeight]"/> + <Numeric name="BoxFrameWidth" value="[tidmodpar:BoxFrameWidth]"/> + <Vector name="BoxFrameZ" type="numeric" nEntries="2"> + [tidmodpar:BoxFrameZDS], -[tidmodpar:BoxFrameZDS] </Vector> + <Numeric name="BottomFrameHeight" value="[tidmodule0:BottomFrameHeight]"/> + <Numeric name="BottomFrameOver" value="[tidmodpar:BottomFrameOverDS]"/> + <Numeric name="TopFrameHeight" value="[tidmodule0:TopFrameHeight]"/> + <Numeric name="TopFrameOver" value="[tidmodpar:TopFrameOverDS]"/> + <Vector name="SideFrameName" type="string" nEntries="2"> + tidmodule0:TIDModule0RphiSideFrame, tidmodule0:TIDModule0StereoSideFrame</Vector> + <Vector name="SideFrameZ" type="numeric" nEntries="2"> + [tidmodpar:SideFrameZDS], -[tidmodpar:SideFrameZDS] </Vector> + <Vector name="SideFrameRotation" type="string" nEntries="2"> + tidmodpar:NULL, tidmodpar:R180</Vector> + <Numeric name="SideFrameWidth" value="[tidmodule0:SideFrameWidth]"/> + <Numeric name="SideFrameOver" value="[tidmodpar:SideFrameOver]"/> + <Vector name="KaptonName" type="string" nEntries="2"> + tidmodule0:TIDModule0RphiKapton, tidmodule0:TIDModule0StereoKapton</Vector> + <Vector name="KaptonZ" type="numeric" nEntries="2"> + [tidmodpar:KaptonZDS], -[tidmodpar:KaptonZDS] </Vector> + <Vector name="KaptonRotation" type="string" nEntries="2"> + tidmodpar:NULL, tidmodpar:R180</Vector> + <Vector name="WaferName" type="string" nEntries="2"> + tidmodule0:TIDModule0RphiWafer, tidmodule0:TIDModule0StereoWafer</Vector> + <Vector name="WaferZ" type="numeric" nEntries="2"> + [tidmodpar:ActiveZDS], -[tidmodpar:ActiveZDS] </Vector> + <Vector name="WaferRotation" type="string" nEntries="2"> + tidmodpar:RFI1, tidmodpar:G100</Vector> + <String name="HybridName" value="tidmodule0:TIDModule0Hybrid"/> + <Numeric name="HybridHeight" value="[tidmodpar:HybridHeight]"/> + <Vector name="HybridZ" type="numeric" nEntries="2"> + [tidmodpar:HybridZDS], -[tidmodpar:HybridZDS] </Vector> + <Vector name="PitchName" type="string" nEntries="2"> + tidmodule0:TIDModule0RphiPA, tidmodule0:TIDModule0StereoPA</Vector> + <Numeric name="PitchHeight" value="[tidmodule0:PitchHeight]"/> + <Vector name="PitchZ" type="numeric" nEntries="2"> + [tidmodpar:PitchZDS], -[tidmodpar:PitchZDS] </Vector> + <Vector name="PitchRotation" type="string" nEntries="2"> + tidmodpar:NULL, tidmodpar:9NYX</Vector> + <String name="CoolInsertName" value="tidmodule0:TIDCoolInsert"/> + <Numeric name="CoolInsertHeight" value="[tidmodpar:CoolInsertHeightDS]"/> + <Numeric name="CoolInsertWidth" value="[tidmodpar:CoolInsertWidthDS]"/> + <Numeric name="CoolInsertZ" value="[tidmodpar:CoolInsertZDS]"/> + <Vector name="CoolInsertShift" type="numeric" nEntries="2"> + [tid:zero], [tidmodule0:CoolInsertShift] </Vector> + <String name="DoSpacers" value="Yes"/> + <String name="BottomSpacersName" value="tidmodpar:TIDBottomSpacers"/> + <Numeric name="BottomSpacersHeight" value="[tidmodpar:BottomSpacersHeight]"/> + <Numeric name="BottomSpacersZ" value="[tidmodpar:BottomSpacersZ]"/> + <String name="SideSpacersName" value="tidmodpar:TIDSideSpacers"/> + <Numeric name="SideSpacersHeight" value="[tidmodpar:SideSpacersHeight]"/> + <Numeric name="SideSpacersZ" value="[tidmodpar:SideSpacersZ]"/> + <Numeric name="SideSpacersThick" value="[tidmodpar:SideSpacersThick]"/> + <Numeric name="SideSpacersWidth" value="[tidmodpar:SideSpacersWidth]"/> + <Numeric name="SideSpacersShift" value="[tidmodule0:SideSpacersShift]"/> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tidmodule1.xml b/examples/DDCMS/data/tidmodule1.xml new file mode 100644 index 000000000..c78deaff7 --- /dev/null +++ b/examples/DDCMS/data/tidmodule1.xml @@ -0,0 +1,183 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tidmodule1.xml" eval="true"> + <Constant name="FullHeight" value="9.0236000*cm"/> + <Constant name="ActiveHeight" value="8.8160000*cm"/> + <Constant name="DlTop" value="11.2202000*cm"/> + <Constant name="DlBottom" value="8.8096000*cm"/> + <Constant name="SideWidthTop" value="0.1076928*cm"/> + <Constant name="SideWidthBottom" value="0.0822066*cm"/> + <Constant name="DlHybrid" value="12.258*cm"/> + <Constant name="PitchHeight" value="1.40*cm"/> + <Constant name="BottomFrameHeight" value="0.85*cm"/> + <Constant name="TopFrameHeight" value="[PitchHeight]+[tidmodpar:TopFrameOverDS]+0.6*cm"/> + <Constant name="BoxFrameHeight" value="[tidmodpar:BoxFrameHeightDS]"/> + <Constant name="SideFrameWidth" value="1.30*cm"/> + <Constant name="CoolInsertShift" value="9.33*cm"/> + <Constant name="SideSpacersShift" value="[CoolInsertShift]"/> + <!-- alias for Module Height --> + <Constant name="ModuleHeight" value="[BoxFrameHeight]+[BottomFrameHeight]+[FullHeight]+[TopFrameHeight]- [tidmodpar:TopFrameOverDS]-[tidmodpar:BottomFrameOverDS]"/> + </ConstantsSection> + <Algorithm name="track:DDTIDModuleAlgo"> + <rParent name="tidmodule1l:TIDModule1L"/> + <String name="GeneralMaterial" value="materials:Air"/> + <Numeric name="DetectorNumber" value="2"/> + <Numeric name="ModuleThick" value="[tidmodpar:ModuleThickDS]"/> + <Numeric name="DetTilt" value="[tidmodpar:DetTilt]"/> + <Numeric name="FullHeight" value="[tidmodule1:FullHeight]"/> + <Numeric name="DlTop" value="[tidmodule1:DlTop]"/> + <Numeric name="DlBottom" value="[tidmodule1:DlBottom]"/> + <Numeric name="DlHybrid" value="[tidmodule1:DlHybrid]"/> + <String name="DoComponents" value="Yes"/> + <String name="BoxFrameName" value="tidmodule1:TIDModule1BoxFrame"/> + <String name="BoxFrameMaterial" value="trackermaterial:T_CarbonFibreStr"/> + <Numeric name="BoxFrameWidth" value="[tidmodpar:BoxFrameWidth]"/> + <Numeric name="BoxFrameThick" value="[tidmodpar:BoxFrameThick]"/> + <Numeric name="BoxFrameHeight" value="[tidmodule1:BoxFrameHeight]"/> + <Numeric name="BottomFrameHeight" value="[tidmodule1:BottomFrameHeight]"/> + <Numeric name="BottomFrameOver" value="[tidmodpar:BottomFrameOverDS]"/> + <Numeric name="TopFrameHeight" value="[tidmodule1:TopFrameHeight]"/> + <Numeric name="TopFrameOver" value="[tidmodpar:TopFrameOverDS]"/> + <String name="SideFrameMaterial" value="trackermaterial:T_CarbonFibreStr"/> + <Numeric name="SideFrameWidth" value="[tidmodule1:SideFrameWidth]"/> + <Numeric name="SideFrameThick" value="[tidmodpar:SideFrameThick]"/> + <Numeric name="SideFrameOver" value="[tidmodpar:SideFrameOver]"/> + <Vector name="SideFrameName" type="string" nEntries="2"> + tidmodule1:TIDModule1RphiSideFrame, tidmodule1:TIDModule1StereoSideFrame + </Vector> + <Vector name="HoleFrameName" type="string" nEntries="2"> + tidmodule1:TIDModule1RphiFrameHole, tidmodule1:TIDModule1StereoFrameHole + </Vector> + <Vector name="HoleFrameRotation" type="string" nEntries="2"> + tidmodpar:NULL, tidmodpar:F100 + </Vector> + <String name="KaptonMaterial" value="tidmaterial:T_TIDModKaptonBox"/> + <Numeric name="KaptonThick" value="[tidmodpar:KaptonThick]"/> + <Numeric name="KaptonOver" value="[tidmodpar:KaptonOver]"/> + <Vector name="KaptonName" type="string" nEntries="2"> + tidmodule1:TIDModule1RphiKapton, tidmodule1:TIDModule1StereoKapton + </Vector> + <Vector name="HoleKaptonName" type="string" nEntries="2"> + tidmodule1:TIDModule1RphiKaptonHole, tidmodule1:TIDModule1StereoKaptonHole + </Vector> + <Vector name="HoleKaptonRotation" type="string" nEntries="2"> + tidmodpar:NULL, tidmodpar:F100 + </Vector> + <Vector name="WaferName" type="string" nEntries="2"> + tidmodule1:TIDModule1RphiWafer, tidmodule1:TIDModule1StereoWafer + </Vector> + <String name="WaferMaterial" value="materials:Silicon"/> + <Numeric name="SideWidthTop" value="[SideWidthTop]"/> + <Numeric name="SideWidthBottom" value="[SideWidthBottom]"/> + <Vector name="ActiveName" type="string" nEntries="2"> + tidmodule1:TIDModule1RphiActive, tidmodule1:TIDModule1StereoActive + </Vector> + <String name="ActiveMaterial" value="materials:Silicon"/> + <Numeric name="ActiveHeight" value="[tidmodule1:ActiveHeight]"/> + <Vector name="WaferThick" type="numeric" nEntries="2"> + [tidmodpar:WaferThick], [tidmodpar:WaferThick] + </Vector> + <String name="ActiveRotation" value="tidmodpar:90ZD"/> + <Vector name="BackPlaneThick" type="numeric" nEntries="2"> + 2*[tracker:BackPlaneDz], 2*[tracker:BackPlaneDz] + </Vector> + <String name="HybridName" value="tidmodule1:TIDModule1Hybrid"/> + <String name="HybridMaterial" value="tibtidcommonmaterial:TIBTID_Hybrid"/> + <Numeric name="HybridHeight" value="[tidmodpar:HybridHeight]"/> + <Numeric name="HybridWidth" value="[tidmodpar:HybridWidth]"/> + <Numeric name="HybridThick" value="[tidmodpar:HybridThick]"/> + <Vector name="PitchName" type="string" nEntries="2"> + tidmodule1:TIDModule1RphiPA, tidmodule1:TIDModule1StereoPA + </Vector> + <String name="PitchMaterial" value="tibtidcommonmaterial:TIBTID_PA"/> + <Numeric name="PitchHeight" value="[tidmodule1:PitchHeight]"/> + <Numeric name="PitchThick" value="[tidmodpar:PitchThick]"/> + <Numeric name="PitchStereoTolerance" value="[tidmodpar:PitchStereoTolerance]"/> + <String name="CoolInsertName" value="tidmodule1:TIDCoolInsert"/> + <String name="CoolInsertMaterial" value="tidmaterial:TID_CoolInsert"/> + <Numeric name="CoolInsertHeight" value="[tidmodpar:CoolInsertHeightDS]"/> + <Numeric name="CoolInsertThick" value="[tidmodpar:CoolInsertThickDS]"/> + <Numeric name="CoolInsertWidth" value="[tidmodpar:CoolInsertWidthDS]"/> + </Algorithm> + <Algorithm name="track:DDTIDModuleAlgo"> + <rParent name="tidmodule1r:TIDModule1R"/> + <String name="GeneralMaterial" value="materials:Air"/> + <Numeric name="DetectorNumber" value="2"/> + <Numeric name="ModuleThick" value="[tidmodpar:ModuleThickDS]"/> + <Numeric name="DetTilt" value="[tidmodpar:DetTilt]"/> + <Numeric name="FullHeight" value="[tidmodule1:FullHeight]"/> + <Numeric name="DlTop" value="[tidmodule1:DlTop]"/> + <Numeric name="DlBottom" value="[tidmodule1:DlBottom]"/> + <Numeric name="DlHybrid" value="[tidmodule1:DlHybrid]"/> + <String name="DoComponents" value="No"/> + <String name="BoxFrameName" value="tidmodule1:TIDModule1BoxFrame"/> + <String name="BoxFrameMaterial" value="trackermaterial:T_CarbonFibreStr"/> + <Numeric name="BoxFrameWidth" value="[tidmodpar:BoxFrameWidth]"/> + <Numeric name="BoxFrameThick" value="[tidmodpar:BoxFrameThick]"/> + <Numeric name="BoxFrameHeight" value="[tidmodule1:BoxFrameHeight]"/> + <Numeric name="BottomFrameHeight" value="[tidmodule1:BottomFrameHeight]"/> + <Numeric name="BottomFrameOver" value="[tidmodpar:BottomFrameOverDS]"/> + <Numeric name="TopFrameHeight" value="[tidmodule1:TopFrameHeight]"/> + <Numeric name="TopFrameOver" value="[tidmodpar:TopFrameOverDS]"/> + <String name="SideFrameMaterial" value="trackermaterial:T_CarbonFibreStr"/> + <Numeric name="SideFrameWidth" value="[tidmodule1:SideFrameWidth]"/> + <Numeric name="SideFrameThick" value="[tidmodpar:SideFrameThick]"/> + <Numeric name="SideFrameOver" value="[tidmodpar:SideFrameOver]"/> + <Vector name="SideFrameName" type="string" nEntries="2"> + tidmodule1:TIDModule1RphiSideFrame, tidmodule1:TIDModule1StereoSideFrame + </Vector> + <Vector name="HoleFrameName" type="string" nEntries="2"> + tidmodule1:TIDModule1RphiFrameHole, tidmodule1:TIDModule1StereoFrameHole + </Vector> + <Vector name="HoleFrameRotation" type="string" nEntries="2"> + tidmodpar:NULL, tidmodpar:F100 + </Vector> + <String name="KaptonMaterial" value="tidmaterial:T_TIDModKaptonBox"/> + <Numeric name="KaptonThick" value="[tidmodpar:KaptonThick]"/> + <Numeric name="KaptonOver" value="[tidmodpar:KaptonOver]"/> + <Vector name="KaptonName" type="string" nEntries="2"> + tidmodule1:TIDModule1RphiKapton, tidmodule1:TIDModule1StereoKapton + </Vector> + <Vector name="HoleKaptonName" type="string" nEntries="2"> + tidmodule1:TIDModule1RphiKaptonHole, tidmodule1:TIDModule1StereoKaptonHole + </Vector> + <Vector name="HoleKaptonRotation" type="string" nEntries="2"> + tidmodpar:NULL, tidmodpar:F100 + </Vector> + <Vector name="WaferName" type="string" nEntries="2"> + tidmodule1:TIDModule1RphiWafer, tidmodule1:TIDModule1StereoWafer + </Vector> + <String name="WaferMaterial" value="materials:Silicon"/> + <Numeric name="SideWidthTop" value="[SideWidthTop]"/> + <Numeric name="SideWidthBottom" value="[SideWidthBottom]"/> + <Vector name="ActiveName" type="string" nEntries="2"> + tidmodule1:TIDModule1RphiActive, tidmodule1:TIDModule1StereoActive + </Vector> + <String name="ActiveMaterial" value="materials:Silicon"/> + <Numeric name="ActiveHeight" value="[tidmodule1:ActiveHeight]"/> + <Vector name="WaferThick" type="numeric" nEntries="2"> + [tidmodpar:WaferThick], [tidmodpar:WaferThick] + </Vector> + <String name="ActiveRotation" value="tidmodpar:90ZD"/> + <Vector name="BackPlaneThick" type="numeric" nEntries="2"> + 2*[tracker:BackPlaneDz], 2*[tracker:BackPlaneDz] + </Vector> + <String name="HybridName" value="tidmodule1:TIDModule1Hybrid"/> + <String name="HybridMaterial" value="tibtidcommonmaterial:TIBTID_Hybrid"/> + <Numeric name="HybridHeight" value="[tidmodpar:HybridHeight]"/> + <Numeric name="HybridWidth" value="[tidmodpar:HybridWidth]"/> + <Numeric name="HybridThick" value="[tidmodpar:HybridThick]"/> + <Vector name="PitchName" type="string" nEntries="2"> + tidmodule1:TIDModule1RphiPA, tidmodule1:TIDModule1StereoPA + </Vector> + <String name="PitchMaterial" value="tibtidcommonmaterial:TIBTID_PA"/> + <Numeric name="PitchHeight" value="[tidmodule1:PitchHeight]"/> + <Numeric name="PitchThick" value="[tidmodpar:PitchThick]"/> + <Numeric name="PitchStereoTolerance" value="[tidmodpar:PitchStereoTolerance]"/> + <String name="CoolInsertName" value="tidmodule1:TIDCoolInsert"/> + <String name="CoolInsertMaterial" value="trackermaterial:T_Aluminium"/> + <Numeric name="CoolInsertHeight" value="[tidmodpar:CoolInsertHeightDS]"/> + <Numeric name="CoolInsertThick" value="[tidmodpar:CoolInsertThickDS]"/> + <Numeric name="CoolInsertWidth" value="[tidmodpar:CoolInsertWidthDS]"/> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tidmodule1l.xml b/examples/DDCMS/data/tidmodule1l.xml new file mode 100644 index 000000000..a3f151deb --- /dev/null +++ b/examples/DDCMS/data/tidmodule1l.xml @@ -0,0 +1,70 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <Algorithm name="track:DDTIDModulePosAlgo"> + <rParent name="tidmodule1l:TIDModule1L"/> + <Numeric name="DetectorNumber" value="2"/> + <Numeric name="ModuleThick" value="[tidmodpar:ModuleThickDS]"/> + <Numeric name="DetTilt" value="-[tidmodpar:DetTilt]"/> + <Numeric name="FullHeight" value="[tidmodule1:FullHeight]"/> + <Numeric name="DlTop" value="[tidmodule1:DlTop]"/> + <Numeric name="DlBottom" value="[tidmodule1:DlBottom]"/> + <Numeric name="DlHybrid" value="[tidmodule1:DlHybrid]"/> + <String name="BoxFrameName" value="tidmodule1:TIDModule1BoxFrame"/> + <Numeric name="BoxFrameHeight" value="[tidmodule1:BoxFrameHeight]"/> + <Numeric name="BoxFrameWidth" value="[tidmodpar:BoxFrameWidth]"/> + <Vector name="BoxFrameZ" type="numeric" nEntries="2"> + [tidmodpar:BoxFrameZDS], -[tidmodpar:BoxFrameZDS] </Vector> + <Numeric name="BottomFrameHeight" value="[tidmodule1:BottomFrameHeight]"/> + <Numeric name="BottomFrameOver" value="[tidmodpar:BottomFrameOverDS]"/> + <Numeric name="TopFrameHeight" value="[tidmodule1:TopFrameHeight]"/> + <Numeric name="TopFrameOver" value="[tidmodpar:TopFrameOverDS]"/> + <Vector name="SideFrameName" type="string" nEntries="2"> + tidmodule1:TIDModule1RphiSideFrame, tidmodule1:TIDModule1StereoSideFrame</Vector> + <Vector name="SideFrameZ" type="numeric" nEntries="2"> + [tidmodpar:SideFrameZDS], -[tidmodpar:SideFrameZDS] </Vector> + <Vector name="SideFrameRotation" type="string" nEntries="2"> + tidmodpar:NULL, tidmodpar:NULL</Vector> + <Numeric name="SideFrameWidth" value="[tidmodule1:SideFrameWidth]"/> + <Numeric name="SideFrameOver" value="[tidmodpar:SideFrameOver]"/> + <Vector name="KaptonName" type="string" nEntries="2"> + tidmodule1:TIDModule1RphiKapton, tidmodule1:TIDModule1StereoKapton</Vector> + <Vector name="KaptonZ" type="numeric" nEntries="2"> + [tidmodpar:KaptonZDS], -[tidmodpar:KaptonZDS] </Vector> + <Vector name="KaptonRotation" type="string" nEntries="2"> + tidmodpar:NULL, tidmodpar:NULL</Vector> + <Vector name="WaferName" type="string" nEntries="2"> + tidmodule1:TIDModule1RphiWafer, tidmodule1:TIDModule1StereoWafer</Vector> + <Vector name="WaferZ" type="numeric" nEntries="2"> + [tidmodpar:ActiveZDS], -[tidmodpar:ActiveZDS] </Vector> + <Vector name="WaferRotation" type="string" nEntries="2"> + tidmodpar:RFI1, tidmodpar:F100</Vector> + <String name="HybridName" value="tidmodule1:TIDModule1Hybrid"/> + <Numeric name="HybridHeight" value="[tidmodpar:HybridHeight]"/> + <Vector name="HybridZ" type="numeric" nEntries="2"> + [tidmodpar:HybridZDS], -[tidmodpar:HybridZDS] </Vector> + <Vector name="PitchName" type="string" nEntries="2"> + tidmodule1:TIDModule1RphiPA, tidmodule1:TIDModule1StereoPA</Vector> + <Numeric name="PitchHeight" value="[tidmodule1:PitchHeight]"/> + <Vector name="PitchZ" type="numeric" nEntries="2"> + [tidmodpar:PitchZDS], -[tidmodpar:PitchZDS] </Vector> + <Vector name="PitchRotation" type="string" nEntries="2"> + tidmodpar:NULL, tidmodpar:9PYX</Vector> + <String name="CoolInsertName" value="tidmodule1:TIDCoolInsert"/> + <Numeric name="CoolInsertHeight" value="[tidmodpar:CoolInsertHeightDS]"/> + <Numeric name="CoolInsertWidth" value="[tidmodpar:CoolInsertWidthDS]"/> + <Numeric name="CoolInsertZ" value="[tidmodpar:CoolInsertZDS]"/> + <Vector name="CoolInsertShift" type="numeric" nEntries="2"> + [tid:zero], [tidmodule1:CoolInsertShift] + </Vector> + <String name="DoSpacers" value="Yes"/> + <String name="BottomSpacersName" value="tidmodpar:TIDBottomSpacers"/> + <Numeric name="BottomSpacersHeight" value="[tidmodpar:BottomSpacersHeight]"/> + <Numeric name="BottomSpacersZ" value="[tidmodpar:BottomSpacersZ]"/> + <String name="SideSpacersName" value="tidmodpar:TIDSideSpacers"/> + <Numeric name="SideSpacersHeight" value="[tidmodpar:SideSpacersHeight]"/> + <Numeric name="SideSpacersZ" value="[tidmodpar:SideSpacersZ]"/> + <Numeric name="SideSpacersThick" value="[tidmodpar:SideSpacersThick]"/> + <Numeric name="SideSpacersWidth" value="[tidmodpar:SideSpacersWidth]"/> + <Numeric name="SideSpacersShift" value="[tidmodule1:SideSpacersShift]"/> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tidmodule1r.xml b/examples/DDCMS/data/tidmodule1r.xml new file mode 100644 index 000000000..2d884bae4 --- /dev/null +++ b/examples/DDCMS/data/tidmodule1r.xml @@ -0,0 +1,70 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <Algorithm name="track:DDTIDModulePosAlgo"> + <rParent name="tidmodule1r:TIDModule1R"/> + <Numeric name="DetectorNumber" value="2"/> + <Numeric name="ModuleThick" value="[tidmodpar:ModuleThickDS]"/> + <Numeric name="DetTilt" value="[tidmodpar:DetTilt]"/> + <Numeric name="FullHeight" value="[tidmodule1:FullHeight]"/> + <Numeric name="DlTop" value="[tidmodule1:DlTop]"/> + <Numeric name="DlBottom" value="[tidmodule1:DlBottom]"/> + <Numeric name="DlHybrid" value="[tidmodule1:DlHybrid]"/> + <String name="BoxFrameName" value="tidmodule1:TIDModule1BoxFrame"/> + <Numeric name="BoxFrameHeight" value="[tidmodule1:BoxFrameHeight]"/> + <Numeric name="BoxFrameWidth" value="[tidmodpar:BoxFrameWidth]"/> + <Vector name="BoxFrameZ" type="numeric" nEntries="2"> + [tidmodpar:BoxFrameZDS], -[tidmodpar:BoxFrameZDS] </Vector> + <Numeric name="BottomFrameHeight" value="[tidmodule1:BottomFrameHeight]"/> + <Numeric name="BottomFrameOver" value="[tidmodpar:BottomFrameOverDS]"/> + <Numeric name="TopFrameHeight" value="[tidmodule1:TopFrameHeight]"/> + <Numeric name="TopFrameOver" value="[tidmodpar:TopFrameOverDS]"/> + <Vector name="SideFrameName" type="string" nEntries="2"> + tidmodule1:TIDModule1RphiSideFrame, tidmodule1:TIDModule1StereoSideFrame</Vector> + <Vector name="SideFrameZ" type="numeric" nEntries="2"> + [tidmodpar:SideFrameZDS], -[tidmodpar:SideFrameZDS] </Vector> + <Vector name="SideFrameRotation" type="string" nEntries="2"> + tidmodpar:NULL, tidmodpar:R180</Vector> + <Numeric name="SideFrameWidth" value="[tidmodule1:SideFrameWidth]"/> + <Numeric name="SideFrameOver" value="[tidmodpar:SideFrameOver]"/> + <Vector name="KaptonName" type="string" nEntries="2"> + tidmodule1:TIDModule1RphiKapton, tidmodule1:TIDModule1StereoKapton</Vector> + <Vector name="KaptonZ" type="numeric" nEntries="2"> + [tidmodpar:KaptonZDS], -[tidmodpar:KaptonZDS] </Vector> + <Vector name="KaptonRotation" type="string" nEntries="2"> + tidmodpar:NULL, tidmodpar:R180</Vector> + <Vector name="WaferName" type="string" nEntries="2"> + tidmodule1:TIDModule1RphiWafer, tidmodule1:TIDModule1StereoWafer</Vector> + <Vector name="WaferZ" type="numeric" nEntries="2"> + [tidmodpar:ActiveZDS], -[tidmodpar:ActiveZDS] </Vector> + <Vector name="WaferRotation" type="string" nEntries="2"> + tidmodpar:RFI1, tidmodpar:G100</Vector> + <String name="HybridName" value="tidmodule1:TIDModule1Hybrid"/> + <Numeric name="HybridHeight" value="[tidmodpar:HybridHeight]"/> + <Vector name="HybridZ" type="numeric" nEntries="2"> + [tidmodpar:HybridZDS], -[tidmodpar:HybridZDS] </Vector> + <Vector name="PitchName" type="string" nEntries="2"> + tidmodule1:TIDModule1RphiPA, tidmodule1:TIDModule1StereoPA</Vector> + <Numeric name="PitchHeight" value="[tidmodule1:PitchHeight]"/> + <Vector name="PitchZ" type="numeric" nEntries="2"> + [tidmodpar:PitchZDS], -[tidmodpar:PitchZDS] </Vector> + <Vector name="PitchRotation" type="string" nEntries="2"> + tidmodpar:NULL, tidmodpar:9NYX</Vector> + <String name="CoolInsertName" value="tidmodule1:TIDCoolInsert"/> + <Numeric name="CoolInsertHeight" value="[tidmodpar:CoolInsertHeightDS]"/> + <Numeric name="CoolInsertWidth" value="[tidmodpar:CoolInsertWidthDS]"/> + <Numeric name="CoolInsertZ" value="[tidmodpar:CoolInsertZDS]"/> + <Vector name="CoolInsertShift" type="numeric" nEntries="2"> + [tid:zero], [tidmodule1:CoolInsertShift] + </Vector> + <String name="DoSpacers" value="Yes"/> + <String name="BottomSpacersName" value="tidmodpar:TIDBottomSpacers"/> + <Numeric name="BottomSpacersHeight" value="[tidmodpar:BottomSpacersHeight]"/> + <Numeric name="BottomSpacersZ" value="[tidmodpar:BottomSpacersZ]"/> + <String name="SideSpacersName" value="tidmodpar:TIDSideSpacers"/> + <Numeric name="SideSpacersHeight" value="[tidmodpar:SideSpacersHeight]"/> + <Numeric name="SideSpacersZ" value="[tidmodpar:SideSpacersZ]"/> + <Numeric name="SideSpacersThick" value="[tidmodpar:SideSpacersThick]"/> + <Numeric name="SideSpacersWidth" value="[tidmodpar:SideSpacersWidth]"/> + <Numeric name="SideSpacersShift" value="[tidmodule1:SideSpacersShift]"/> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tidmodule2.xml b/examples/DDCMS/data/tidmodule2.xml new file mode 100644 index 000000000..7d9d2ef9d --- /dev/null +++ b/examples/DDCMS/data/tidmodule2.xml @@ -0,0 +1,183 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tidmodule2.xml" eval="true"> + <Constant name="FullHeight" value="11.2736000*cm"/> + <Constant name="ActiveHeight" value="11.0660000*cm"/> + <Constant name="DlTop" value="8.3012000*cm"/> + <Constant name="DlBottom" value="6.4904000*cm"/> + <Constant name="SideWidthTop" value="0.1006846*cm"/> + <Constant name="SideWidthBottom" value="0.0866913*cm"/> + <Constant name="DlHybrid" value="5.887*cm"/> + <Constant name="PitchHeight" value="0.90*cm"/> + <Constant name="BottomFrameHeight" value="[PitchHeight]+[tidmodpar:BottomFrameOverSS]"/> + <Constant name="TopFrameHeight" value="[tidmodpar:TopFrameOverSS]+0.4*cm"/> + <Constant name="BoxFrameHeight" value="[tidmodpar:BoxFrameHeightSS]"/> + <Constant name="SideFrameWidth" value="1.10*cm"/> + <Constant name="CoolInsertShift" value="9.58*cm"/> + <Constant name="SideSpacersShift" value="[CoolInsertShift]"/> + <!-- alias for Module Height --> + <Constant name="ModuleHeight" value="[BoxFrameHeight]+[BottomFrameHeight]+[FullHeight]+[TopFrameHeight]- [tidmodpar:TopFrameOverSS]-[tidmodpar:BottomFrameOverSS]"/> + </ConstantsSection> + <Algorithm name="track:DDTIDModuleAlgo"> + <rParent name="tidmodule2:TIDModule2"/> + <String name="GeneralMaterial" value="materials:Air"/> + <Numeric name="DetectorNumber" value="1"/> + <Numeric name="ModuleThick" value="[tidmodpar:ModuleThickSS]"/> + <Numeric name="DetTilt" value="[tidmodpar:DetTilt]"/> + <Numeric name="FullHeight" value="[tidmodule2:FullHeight]"/> + <Numeric name="DlTop" value="[tidmodule2:DlTop]"/> + <Numeric name="DlBottom" value="[tidmodule2:DlBottom]"/> + <Numeric name="DlHybrid" value="[tidmodule2:DlHybrid]"/> + <String name="DoComponents" value="Yes"/> + <String name="BoxFrameName" value="tidmodule2:TIDModule2BoxFrame"/> + <String name="BoxFrameMaterial" value="trackermaterial:T_CarbonFibreStr"/> + <Numeric name="BoxFrameWidth" value="[tidmodpar:BoxFrameWidth]"/> + <Numeric name="BoxFrameThick" value="[tidmodpar:BoxFrameThick]"/> + <Numeric name="BoxFrameHeight" value="[tidmodule2:BoxFrameHeight]"/> + <Numeric name="BottomFrameHeight" value="[tidmodule2:BottomFrameHeight]"/> + <Numeric name="BottomFrameOver" value="[tidmodpar:BottomFrameOverSS]"/> + <Numeric name="TopFrameHeight" value="[tidmodule2:TopFrameHeight]"/> + <Numeric name="TopFrameOver" value="[tidmodpar:TopFrameOverSS]"/> + <String name="SideFrameMaterial" value="trackermaterial:T_CarbonFibreStr"/> + <Numeric name="SideFrameWidth" value="[tidmodule2:SideFrameWidth]"/> + <Numeric name="SideFrameThick" value="[tidmodpar:SideFrameThick]"/> + <Numeric name="SideFrameOver" value="[tidmodpar:SideFrameOver]"/> + <Vector name="SideFrameName" type="string" nEntries="1"> + tidmodule2:TIDModule2RphiSideFrame + </Vector> + <Vector name="HoleFrameName" type="string" nEntries="1"> + tidmodule2:TIDModule2RphiFrameHole + </Vector> + <Vector name="HoleFrameRotation" type="string" nEntries="1"> + tidmodpar:NULL + </Vector> + <String name="KaptonMaterial" value="tidmaterial:T_TIDModKaptonBox"/> + <Numeric name="KaptonThick" value="[tidmodpar:KaptonThick]"/> + <Numeric name="KaptonOver" value="[tidmodpar:KaptonOver]"/> + <Vector name="KaptonName" type="string" nEntries="1"> + tidmodule2:TIDModule2RphiKapton + </Vector> + <Vector name="HoleKaptonName" type="string" nEntries="1"> + tidmodule2:TIDModule2RphiKaptonHole + </Vector> + <Vector name="HoleKaptonRotation" type="string" nEntries="1"> + tidmodpar:NULL + </Vector> + <Vector name="WaferName" type="string" nEntries="1"> + tidmodule2:TIDModule2RphiWafer + </Vector> + <String name="WaferMaterial" value="materials:Silicon"/> + <Numeric name="SideWidthTop" value="[SideWidthTop]"/> + <Numeric name="SideWidthBottom" value="[SideWidthBottom]"/> + <Vector name="ActiveName" type="string" nEntries="1"> + tidmodule2:TIDModule2RphiActive + </Vector> + <String name="ActiveMaterial" value="materials:Silicon"/> + <Numeric name="ActiveHeight" value="[tidmodule2:ActiveHeight]"/> + <Vector name="WaferThick" type="numeric" nEntries="1"> + [tidmodpar:WaferThick] + </Vector> + <String name="ActiveRotation" value="tidmodpar:90ZD"/> + <Vector name="BackPlaneThick" type="numeric" nEntries="1"> + 2*[tracker:BackPlaneDz] + </Vector> + <String name="HybridName" value="tidmodule2:TIDModule2Hybrid"/> + <String name="HybridMaterial" value="tibtidcommonmaterial:TIBTID_Hybrid"/> + <Numeric name="HybridHeight" value="[tidmodpar:HybridHeight]"/> + <Numeric name="HybridWidth" value="[tidmodpar:HybridWidth]"/> + <Numeric name="HybridThick" value="[tidmodpar:HybridThick]"/> + <Vector name="PitchName" type="string" nEntries="1"> + tidmodule2:TIDModule2RphiPA + </Vector> + <String name="PitchMaterial" value="tibtidcommonmaterial:TIBTID_PA"/> + <Numeric name="PitchHeight" value="[tidmodule2:PitchHeight]"/> + <Numeric name="PitchThick" value="[tidmodpar:PitchThick]"/> + <Numeric name="PitchStereoTolerance" value="[tidmodpar:PitchStereoTolerance]"/> + <String name="CoolInsertName" value="tidmodule2:TIDCoolInsert"/> + <String name="CoolInsertMaterial" value="tidmaterial:TID_CoolInsert"/> + <Numeric name="CoolInsertHeight" value="[tidmodpar:CoolInsertHeightSS]"/> + <Numeric name="CoolInsertThick" value="[tidmodpar:CoolInsertThickSS]"/> + <Numeric name="CoolInsertWidth" value="[tidmodpar:CoolInsertWidthSS]"/> + </Algorithm> + <Algorithm name="track:DDTIDModulePosAlgo"> + <rParent name="tidmodule2:TIDModule2"/> + <Numeric name="DetectorNumber" value="1"/> + <Numeric name="ModuleThick" value="[tidmodpar:ModuleThickSS]"/> + <Numeric name="DetTilt" value="[tidmodpar:DetTilt]"/> + <Numeric name="FullHeight" value="[tidmodule2:FullHeight]"/> + <Numeric name="DlTop" value="[tidmodule2:DlTop]"/> + <Numeric name="DlBottom" value="[tidmodule2:DlBottom]"/> + <Numeric name="DlHybrid" value="[tidmodule2:DlHybrid]"/> + <String name="BoxFrameName" value="tidmodule2:TIDModule2BoxFrame"/> + <Numeric name="BoxFrameHeight" value="[tidmodule2:BoxFrameHeight]"/> + <Numeric name="BoxFrameWidth" value="[tidmodpar:BoxFrameWidth]"/> + <Vector name="BoxFrameZ" type="numeric" nEntries="1"> + [tidmodpar:BoxFrameZSS] + </Vector> + <Numeric name="BottomFrameHeight" value="[tidmodule2:BottomFrameHeight]"/> + <Numeric name="BottomFrameOver" value="[tidmodpar:BottomFrameOverSS]"/> + <Numeric name="TopFrameHeight" value="[tidmodule2:TopFrameHeight]"/> + <Numeric name="TopFrameOver" value="[tidmodpar:TopFrameOverSS]"/> + <Vector name="SideFrameName" type="string" nEntries="1"> + tidmodule2:TIDModule2RphiSideFrame + </Vector> + <Vector name="SideFrameZ" type="numeric" nEntries="1"> + [tidmodpar:SideFrameZSS] + </Vector> + <Vector name="SideFrameRotation" type="string" nEntries="1"> + tidmodpar:NULL + </Vector> + <Numeric name="SideFrameWidth" value="[tidmodule2:SideFrameWidth]"/> + <Numeric name="SideFrameOver" value="[tidmodpar:SideFrameOver]"/> + <Vector name="KaptonName" type="string" nEntries="1"> + tidmodule2:TIDModule2RphiKapton + </Vector> + <Vector name="KaptonZ" type="numeric" nEntries="1"> + [tidmodpar:KaptonZSS] + </Vector> + <Vector name="KaptonRotation" type="string" nEntries="1"> + tidmodpar:NULL + </Vector> + <Vector name="WaferName" type="string" nEntries="1"> + tidmodule2:TIDModule2RphiWafer + </Vector> + <Vector name="WaferZ" type="numeric" nEntries="1"> + [tidmodpar:ActiveZSS] + </Vector> + <Vector name="WaferRotation" type="string" nEntries="1"> + tidmodpar:RFI2 + </Vector> + <String name="HybridName" value="tidmodule2:TIDModule2Hybrid"/> + <Numeric name="HybridHeight" value="[tidmodpar:HybridHeight]"/> + <Vector name="HybridZ" type="numeric" nEntries="1"> + [tidmodpar:HybridZSS] + </Vector> + <Vector name="PitchName" type="string" nEntries="1"> + tidmodule2:TIDModule2RphiPA + </Vector> + <Numeric name="PitchHeight" value="[tidmodule2:PitchHeight]"/> + <Vector name="PitchZ" type="numeric" nEntries="1"> + [tidmodpar:PitchZSS] + </Vector> + <Vector name="PitchRotation" type="string" nEntries="1"> + tidmodpar:NULL + </Vector> + <String name="CoolInsertName" value="tidmodule2:TIDCoolInsert"/> + <Numeric name="CoolInsertHeight" value="[tidmodpar:CoolInsertHeightSS]"/> + <Numeric name="CoolInsertWidth" value="[tidmodpar:CoolInsertWidthSS]"/> + <Numeric name="CoolInsertZ" value="[tidmodpar:CoolInsertZSS]"/> + <Vector name="CoolInsertShift" type="numeric" nEntries="2"> + [tid:zero], [tidmodule2:CoolInsertShift]</Vector> + <String name="DoSpacers" value="No"/> + <!-- everything below is dummy for SS --> + <String name="BottomSpacersName" value="tidmodpar:TIDBottomSpacers"/> + <Numeric name="BottomSpacersHeight" value="[tidmodpar:BottomSpacersHeight]"/> + <Numeric name="BottomSpacersZ" value="[tidmodpar:BottomSpacersZ]"/> + <String name="SideSpacersName" value="tidmodpar:TIDSideSpacers"/> + <Numeric name="SideSpacersHeight" value="[tidmodpar:SideSpacersHeight]"/> + <Numeric name="SideSpacersZ" value="[tidmodpar:SideSpacersZ]"/> + <Numeric name="SideSpacersThick" value="[tidmodpar:SideSpacersThick]"/> + <Numeric name="SideSpacersWidth" value="[tidmodpar:SideSpacersWidth]"/> + <Numeric name="SideSpacersShift" value="[tidmodule2:SideSpacersShift]"/> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tidring0.xml b/examples/DDCMS/data/tidring0.xml new file mode 100644 index 000000000..f42759f4b --- /dev/null +++ b/examples/DDCMS/data/tidring0.xml @@ -0,0 +1,149 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tidring0.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="Rmin" value="22.5261*cm"/> + <Constant name="NPhi" value="24"/> + <Constant name="PhiOff" value="0*deg"/> + <Constant name="ICBR" value="40.250*cm"/> + <Constant name="ICBTailR" value="[ICBR]+[tidringpar:ICBW]/2"/> + <Constant name="RPos" value="[Rmin]+[tidmodule0:ModuleHeight]/2"/> + <Constant name="ICCRPos" value="[Rmin]+[tidmodule0:ModuleHeight]+[tidringpar:ICCROffset]+[tidringpar:ICCH]/2"/> + <Constant name="ICBTailW" value="([tidringpar:Rout]-[ICBTailR]- [tidringpar:ICBTailTol])"/> + <Constant name="ICBTailRPos" value="([tidringpar:Rout]+[ICBTailR]- [tidringpar:ICBTailTol])/2"/> + <Constant name="CCUMrPos" value="[ICBTailR]+2*[tidringpar:ICBTailTol]+[tidringpar:CCUMW]/2"/> + <Constant name="CoolR1" value="[Rmin]+[tidmodule0:ModuleHeight]-[tidmodule0:CoolInsertShift]"/> + <Constant name="CoolR2" value="[Rmin]+[tidmodule0:ModuleHeight]-[tidmodpar:CoolInsertHeightDS]+[tidringpar:CoolD]/2"/> + <Constant name="DOHMrIn" value="44.5*cm"/> + <Constant name="DOHMrOut" value="50.5*cm"/> + <Constant name="DOHMrOff" value="-0.5*cm"/> + <Constant name="DOHMdPhi" value="18*deg"/> + <Constant name="CoolManifoldL" value="17*cm"/> + <Constant name="FlatCablerIn" value="[ICBR]+[tidringpar:ICBW]/2"/> + <Constant name="FlatCablerOut" value="[FlatCablerIn]+6*cm"/> + <Constant name="FlatCabledPhi" value="30*deg"/> + <Constant name="FlatCablephiPos" value="21*deg"/> + <!-- palced symmetrically wrt the MC at 21 deg --> + <Constant name="FlatCablephiPosOff" value="3*deg"/> + <Constant name="FlatCablephiPosL" value="[FlatCablephiPos]-[FlatCablephiPosOff]-[FlatCabledPhi]/2"/> + <Constant name="FlatCablephiPosR" value="[FlatCablephiPos]+[FlatCablephiPosOff]+[FlatCabledPhi]/2"/> + <Constant name="ModuleFixationInsertsInR" value="28.8*cm"/> + <Constant name="ModuleFixationInsertsOutR" value="37.7*cm"/> + </ConstantsSection> + <SolidSection label="tidring0.xml"> + <Tubs name="TIDRing0ICB" rMin="([ICBR]-[tidringpar:ICBW]/2)" rMax="([ICBR]+[tidringpar:ICBW]/2)" dz="[tidringpar:ICBT]/2" startPhi="0*deg" deltaPhi="360.*deg"/> + <Box name="TIDRing0ICBTail" dx="[tidringpar:ICBTailH]/2" dy="[ICBTailW]/2" dz="[tidringpar:ICBTailT]/2"/> + <Torus name="TIDRing0Cool1" innerRadius="[zero]" outerRadius="[tidringpar:CoolD]/2" torusRadius="[CoolR1]" startPhi="0*deg" deltaPhi="360.*deg"/> + <Torus name="TIDRing0Cool2" innerRadius="[zero]" outerRadius="[tidringpar:CoolD]/2" torusRadius="[CoolR2]" startPhi="0*deg" deltaPhi="360.*deg"/> + <Tubs name="TIDRing0DOHM" rMin="([DOHMrIn])" rMax="([DOHMrOut])" dz="[tidringpar:DOHMT]/2" startPhi="-[DOHMdPhi]/2" deltaPhi="[DOHMdPhi]"/> + <Tubs name="TIDRing0FiberLayer" rMin="([ICBR]-[tidringpar:ICBW]/2)" rMax="([ICBR]+[tidringpar:ICBW]/2)" dz="[tidringpar:FiberLayerT]/2" startPhi="0*deg" deltaPhi="360.*deg"/> + <Box name="TIDRing0CoolManifold" dx="[tidringpar:CoolManifoldW]/2" dy="[CoolManifoldL]/2" dz="[tidringpar:CoolManifoldT]/2"/> + <Tubs name="TIDRing0FlatCable" rMin="[FlatCablerIn]" rMax="[FlatCablerOut]" dz="[tidringpar:FlatCableT]/2" startPhi="-[FlatCabledPhi]/2" deltaPhi="[FlatCabledPhi]"/> + </SolidSection> + <LogicalPartSection label="tidring0.xml"> + <LogicalPart name="TIDStructure0" category="unspecified"> + <rSolid name="tidringpar:TIDStructure"/> + <rMaterial name="tidmaterial:TID_Mech"/> + </LogicalPart> + <LogicalPart name="TIDICC0" category="unspecified"> + <rSolid name="tidringpar:TIDICCDS"/> + <rMaterial name="tidmaterial:TID_DSAOHBox"/> + </LogicalPart> + <LogicalPart name="TIDRing0ICBTail" category="unspecified"> + <rSolid name="tidring0:TIDRing0ICBTail"/> + <rMaterial name="tidmaterial:TID_ICB1"/> + </LogicalPart> + <LogicalPart name="TIDRing0ICB" category="unspecified"> + <rSolid name="tidring0:TIDRing0ICB"/> + <rMaterial name="tidmaterial:TID_ICB1"/> + </LogicalPart> + <LogicalPart name="TIDRing0DOHM" category="unspecified"> + <rSolid name="tidring0:TIDRing0DOHM"/> + <rMaterial name="tidmaterial:TID_DOHM1"/> + </LogicalPart> + <LogicalPart name="TIDRing0Cool1" category="unspecified"> + <rSolid name="tidring0:TIDRing0Cool1"/> + <rMaterial name="tidmaterial:TID_CoolPipe"/> + </LogicalPart> + <LogicalPart name="TIDRing0Cool2" category="unspecified"> + <rSolid name="tidring0:TIDRing0Cool2"/> + <rMaterial name="tidmaterial:TID_CoolPipe"/> + </LogicalPart> + <LogicalPart name="TIDRing0FiberLayer" category="unspecified"> + <rSolid name="tidring0:TIDRing0FiberLayer"/> + <rMaterial name="tidmaterial:TID_FiberLayer"/> + </LogicalPart> + <LogicalPart name="TIDRing0CoolManifold" category="unspecified"> + <rSolid name="tidring0:TIDRing0CoolManifold"/> + <rMaterial name="tidmaterial:TID_CoolManifold"/> + </LogicalPart> + <LogicalPart name="TIDRing0FlatCable" category="unspecified"> + <rSolid name="tidring0:TIDRing0FlatCable"/> + <rMaterial name="tibtidcommonmaterial:TIBTID_AmphCable"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tidring0:TIDStructure0"/> + <String name="ChildName" value="tidring0:TIDRing0CoolManifold"/> + <Numeric name="N" value="2"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="113*deg"/> + <Numeric name="Radius" value="[tidringpar:CoolManifoldR]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <!-- Inserts for module fixation --> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tidring0:TIDStructure0"/> + <String name="ChildName" value="tidringpar:TIDModuleFix"/> + <Numeric name="N" value="24"/> + <Numeric name="StartCopyNo" value="3"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="-9.90 *deg"/> + <Numeric name="Radius" value="[ModuleFixationInsertsInR]"/> + <Vector name="Center" type="numeric" nEntries="3"> + [zero], [zero], [zero] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tidring0:TIDStructure0"/> + <String name="ChildName" value="tidringpar:TIDModuleFix"/> + <Numeric name="N" value="24"/> + <Numeric name="StartCopyNo" value="27"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="+9.90*deg"/> + <Numeric name="Radius" value="[ModuleFixationInsertsInR]"/> + <Vector name="Center" type="numeric" nEntries="3"> + [zero], [zero], [zero] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tidring0:TIDStructure0"/> + <String name="ChildName" value="tidringpar:TIDModuleFix"/> + <Numeric name="N" value="24"/> + <Numeric name="StartCopyNo" value="51"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="-5.04*deg"/> + <Numeric name="Radius" value="[ModuleFixationInsertsOutR]"/> + <Vector name="Center" type="numeric" nEntries="3"> + [zero], [zero], [zero] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tidring0:TIDStructure0"/> + <String name="ChildName" value="tidringpar:TIDModuleFix"/> + <Numeric name="N" value="24"/> + <Numeric name="StartCopyNo" value="75"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="+5.04*deg"/> + <Numeric name="Radius" value="[ModuleFixationInsertsOutR]"/> + <Vector name="Center" type="numeric" nEntries="3"> + [zero], [zero], [zero] + </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tidring0b.xml b/examples/DDCMS/data/tidring0b.xml new file mode 100644 index 000000000..6b119b56f --- /dev/null +++ b/examples/DDCMS/data/tidring0b.xml @@ -0,0 +1,140 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tidring0b.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <LogicalPartSection label="tidring0b.xml"> + <LogicalPart name="TIDRing0B" category="unspecified"> + <rSolid name="tidringpar:TIDRing"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tidring0b.xml"> + <PosPart copyNumber="1"> + <rParent name="tidring0b:TIDRing0B"/> + <rChild name="tidring0:TIDStructure0"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tidring0b:TIDRing0B"/> + <rChild name="tidring0:TIDRing0ICB"/> + <Translation x="[zero]" y="[zero]" z="-[tidringpar:ICBZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tidring0b:TIDRing0B"/> + <rChild name="tidring0:TIDRing0ICB"/> + <Translation x="[zero]" y="[zero]" z="[tidringpar:ICBZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tidring0b:TIDRing0B"/> + <rChild name="tidring0:TIDRing0Cool1"/> + <Translation x="[zero]" y="[zero]" z="-[tidringpar:CoolZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tidring0b:TIDRing0B"/> + <rChild name="tidring0:TIDRing0Cool1"/> + <Translation x="[zero]" y="[zero]" z="[tidringpar:CoolZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tidring0b:TIDRing0B"/> + <rChild name="tidring0:TIDRing0Cool2"/> + <Translation x="[zero]" y="[zero]" z="-[tidringpar:CoolZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tidring0b:TIDRing0B"/> + <rChild name="tidring0:TIDRing0Cool2"/> + <Translation x="[zero]" y="[zero]" z="[tidringpar:CoolZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tidring0b:TIDRing0B"/> + <rChild name="tidring0:TIDRing0FiberLayer"/> + <Translation x="[zero]" y="[zero]" z="-[tidringpar:FiberLayerZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tidring0b:TIDRing0B"/> + <rChild name="tidring0:TIDRing0FiberLayer"/> + <Translation x="[zero]" y="[zero]" z="[tidringpar:FiberLayerZ]"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tidring0b:TIDRing0B"/> + <String name="ChildName" value="tidring0:TIDRing0ICBTail"/> + <Numeric name="Radius" value="[tidring0:ICBTailRPos]"/> + <Numeric name="Tilt" value="-90*deg"/> + <Vector name="Phi" type="numeric" nEntries="8"> + 165.0*deg, 60.0*deg, 24.0*deg, 21.0*deg, + 345.0*deg, 240.0*deg, 204.0*deg, 201.0*deg + </Vector> + <Vector name="ZPos" type="numeric" nEntries="8"> + -[tidringpar:ICBZ], [tidringpar:ICBZ], [tidringpar:ICBZ], -[tidringpar:ICBZ], + -[tidringpar:ICBZ], [tidringpar:ICBZ], -[tidringpar:ICBZ], [tidringpar:ICBZ] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tidring0b:TIDRing0B"/> + <String name="ChildName" value="tidringpar:TIDCCUMBox"/> + <Numeric name="Radius" value="[tidring0:CCUMrPos]"/> + <Numeric name="Tilt" value="0*deg"/> + <Vector name="Phi" type="numeric" nEntries="8"> + 165.0*deg, 60.0*deg, 24.0*deg, 21.0*deg, + 345.0*deg, 240.0*deg, 204.0*deg, 201.0*deg + </Vector> + <Vector name="ZPos" type="numeric" nEntries="8"> + -[tidringpar:CCUMZ], [tidringpar:CCUMZ], [tidringpar:CCUMZ], -[tidringpar:CCUMZ], + -[tidringpar:CCUMZ], [tidringpar:CCUMZ],-[tidringpar:CCUMZ], [tidringpar:CCUMZ] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tidring0b:TIDRing0B"/> + <String name="ChildName" value="tidring0:TIDRing0DOHM"/> + <Numeric name="Radius" value="[tidring0:DOHMrOff]"/> + <Numeric name="Tilt" value="0*deg"/> + <Vector name="Phi" type="numeric" nEntries="2"> + 180.0*deg, 45.0*deg + </Vector> + <Vector name="ZPos" type="numeric" nEntries="2"> + -[tidringpar:DOHMZ], [tidringpar:DOHMZ] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tidring0b:TIDRing0B"/> + <String name="ChildName" value="tidring0:TIDRing0FlatCable"/> + <Numeric name="Radius" value="[zero]"/> + <Numeric name="Tilt" value="0*deg"/> + <Vector name="Phi" type="numeric" nEntries="4"> + [tidring0:FlatCablephiPosL], [tidring0:FlatCablephiPosR], + [tidring0:FlatCablephiPosL]+180*deg, [tidring0:FlatCablephiPosR]+180*deg + </Vector> + <Vector name="ZPos" type="numeric" nEntries="4"> + -[tidringpar:FlatCableZ], -[tidringpar:FlatCableZ], + [tidringpar:FlatCableZ], [tidringpar:FlatCableZ] + </Vector> + </Algorithm> + <Algorithm name="track:DDTIDRingAlgo"> + <rParent name="tidring0b:TIDRing0B"/> + <Vector name="ModuleName" type="string" nEntries="2"> + tidmodule0l:TIDModule0L, tidmodule0r:TIDModule0R</Vector> + <String name="ICCName" value="tidring0:TIDICC0"/> + <Numeric name="Number" value="[tidring0:NPhi]"/> + <Numeric name="StartAngle" value="[tidring0:PhiOff]"/> + <Numeric name="ModuleR" value="[tidring0:RPos]"/> + <Vector name="ModuleZ" type="numeric" nEntries="2"> + -[tidringpar:ModuleZDS], [tidringpar:ModuleZDS] </Vector> + <Numeric name="ICCR" value="[tidring0:ICCRPos]"/> + <Numeric name="ICCShift" value="[zero]"/> + <Vector name="ICCZ" type="numeric" nEntries="2"> + -[tidringpar:ICCZ], [tidringpar:ICCZ] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tidring0b:TIDRing0B"/> + <String name="ChildName" value="tidringpar:TIDManifoldFix"/> + <Numeric name="Radius" value="[tidringpar:CoolManifoldR]"/> + <Numeric name="Tilt" value="-90*deg"/> + <Vector name="Phi" type="numeric" nEntries="4"> + 113.0*deg, 113.0*deg, 293.0*deg, 293.0*deg + </Vector> + <Vector name="ZPos" type="numeric" nEntries="4"> + [tidringpar:ManifoldFixZ], -[tidringpar:ManifoldFixZ], + [tidringpar:ManifoldFixZ], -[tidringpar:ManifoldFixZ] + </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tidring0f.xml b/examples/DDCMS/data/tidring0f.xml new file mode 100644 index 000000000..72798fd8e --- /dev/null +++ b/examples/DDCMS/data/tidring0f.xml @@ -0,0 +1,140 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tidring0f.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <LogicalPartSection label="tidring0f.xml"> + <LogicalPart name="TIDRing0F" category="unspecified"> + <rSolid name="tidringpar:TIDRing"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tidring0f.xml"> + <PosPart copyNumber="1"> + <rParent name="tidring0f:TIDRing0F"/> + <rChild name="tidring0:TIDStructure0"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tidring0f:TIDRing0F"/> + <rChild name="tidring0:TIDRing0ICB"/> + <Translation x="[zero]" y="[zero]" z="-[tidringpar:ICBZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tidring0f:TIDRing0F"/> + <rChild name="tidring0:TIDRing0ICB"/> + <Translation x="[zero]" y="[zero]" z="[tidringpar:ICBZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tidring0f:TIDRing0F"/> + <rChild name="tidring0:TIDRing0Cool1"/> + <Translation x="[zero]" y="[zero]" z="-[tidringpar:CoolZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tidring0f:TIDRing0F"/> + <rChild name="tidring0:TIDRing0Cool1"/> + <Translation x="[zero]" y="[zero]" z="[tidringpar:CoolZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tidring0f:TIDRing0F"/> + <rChild name="tidring0:TIDRing0Cool2"/> + <Translation x="[zero]" y="[zero]" z="-[tidringpar:CoolZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tidring0f:TIDRing0F"/> + <rChild name="tidring0:TIDRing0Cool2"/> + <Translation x="[zero]" y="[zero]" z="[tidringpar:CoolZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tidring0f:TIDRing0F"/> + <rChild name="tidring0:TIDRing0FiberLayer"/> + <Translation x="[zero]" y="[zero]" z="-[tidringpar:FiberLayerZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tidring0f:TIDRing0F"/> + <rChild name="tidring0:TIDRing0FiberLayer"/> + <Translation x="[zero]" y="[zero]" z="[tidringpar:FiberLayerZ]"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tidring0f:TIDRing0F"/> + <String name="ChildName" value="tidring0:TIDRing0ICBTail"/> + <Numeric name="Radius" value="[tidring0:ICBTailRPos]"/> + <Numeric name="Tilt" value="-90*deg"/> + <Vector name="Phi" type="numeric" nEntries="8"> + 165.0*deg, 60.0*deg, 24.0*deg, 21.0*deg, + 345.0*deg, 240.0*deg, 204.0*deg, 201.0*deg + </Vector> + <Vector name="ZPos" type="numeric" nEntries="8"> + -[tidringpar:ICBZ], [tidringpar:ICBZ], [tidringpar:ICBZ], -[tidringpar:ICBZ], + -[tidringpar:ICBZ], [tidringpar:ICBZ], -[tidringpar:ICBZ], [tidringpar:ICBZ] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tidring0f:TIDRing0F"/> + <String name="ChildName" value="tidringpar:TIDCCUMBox"/> + <Numeric name="Radius" value="[tidring0:CCUMrPos]"/> + <Numeric name="Tilt" value="0*deg"/> + <Vector name="Phi" type="numeric" nEntries="8"> + 165.0*deg, 60.0*deg, 24.0*deg, 21.0*deg, + 345.0*deg, 240.0*deg, 204.0*deg, 201.0*deg + </Vector> + <Vector name="ZPos" type="numeric" nEntries="8"> + -[tidringpar:CCUMZ], [tidringpar:CCUMZ], [tidringpar:CCUMZ], -[tidringpar:CCUMZ], + -[tidringpar:CCUMZ], [tidringpar:CCUMZ],-[tidringpar:CCUMZ], [tidringpar:CCUMZ] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tidring0f:TIDRing0F"/> + <String name="ChildName" value="tidring0:TIDRing0DOHM"/> + <Numeric name="Radius" value="[tidring0:DOHMrOff]"/> + <Numeric name="Tilt" value="0*deg"/> + <Vector name="Phi" type="numeric" nEntries="2"> + 180.0*deg, 45.0*deg + </Vector> + <Vector name="ZPos" type="numeric" nEntries="2"> + -[tidringpar:DOHMZ], [tidringpar:DOHMZ] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tidring0f:TIDRing0F"/> + <String name="ChildName" value="tidring0:TIDRing0FlatCable"/> + <Numeric name="Radius" value="[zero]"/> + <Numeric name="Tilt" value="0*deg"/> + <Vector name="Phi" type="numeric" nEntries="4"> + [tidring0:FlatCablephiPosL], [tidring0:FlatCablephiPosR], + [tidring0:FlatCablephiPosL]+180*deg, [tidring0:FlatCablephiPosR]+180*deg + </Vector> + <Vector name="ZPos" type="numeric" nEntries="4"> + -[tidringpar:FlatCableZ], -[tidringpar:FlatCableZ], + [tidringpar:FlatCableZ], [tidringpar:FlatCableZ] + </Vector> + </Algorithm> + <Algorithm name="track:DDTIDRingAlgo"> + <rParent name="tidring0f:TIDRing0F"/> + <Vector name="ModuleName" type="string" nEntries="2"> + tidmodule0l:TIDModule0L, tidmodule0r:TIDModule0R</Vector> + <String name="ICCName" value="tidring0:TIDICC0"/> + <Numeric name="Number" value="[tidring0:NPhi]"/> + <Numeric name="StartAngle" value="[tidring0:PhiOff]"/> + <Numeric name="ModuleR" value="[tidring0:RPos]"/> + <Vector name="ModuleZ" type="numeric" nEntries="2"> + -[tidringpar:ModuleZDS], [tidringpar:ModuleZDS] </Vector> + <Numeric name="ICCR" value="[tidring0:ICCRPos]"/> + <Numeric name="ICCShift" value="[zero]"/> + <Vector name="ICCZ" type="numeric" nEntries="2"> + -[tidringpar:ICCZ], [tidringpar:ICCZ] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tidring0f:TIDRing0F"/> + <String name="ChildName" value="tidringpar:TIDManifoldFix"/> + <Numeric name="Radius" value="[tidringpar:CoolManifoldR]"/> + <Numeric name="Tilt" value="-90*deg"/> + <Vector name="Phi" type="numeric" nEntries="4"> + 113.0*deg, 113.0*deg, 293.0*deg, 293.0*deg + </Vector> + <Vector name="ZPos" type="numeric" nEntries="4"> + [tidringpar:ManifoldFixZ], -[tidringpar:ManifoldFixZ], + [tidringpar:ManifoldFixZ], -[tidringpar:ManifoldFixZ] + </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tidring1.xml b/examples/DDCMS/data/tidring1.xml new file mode 100644 index 000000000..beaa0f5f5 --- /dev/null +++ b/examples/DDCMS/data/tidring1.xml @@ -0,0 +1,158 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tidring1.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="Rmin" value="31.5462*cm"/> + <Constant name="NPhi" value="24"/> + <Constant name="PhiOff" value="0*deg"/> + <Constant name="ICBR" value="47.250*cm"/> + <Constant name="ICBTailR" value="[ICBR]+[tidringpar:ICBW]/2"/> + <Constant name="ICBTailH" value="8.6*cm"/> + <Constant name="RPos" value="[Rmin]+[tidmodule1:ModuleHeight]/2"/> + <Constant name="ICCRPos" value="[Rmin]+[tidmodule1:ModuleHeight]+[tidringpar:ICCROffset]+[tidringpar:ICCH]/2"/> + <Constant name="ICBTailW" value="([tidringpar:Rout]-[ICBTailR]- 4*[tidringpar:ICBTailTol])"/> + <Constant name="ICBTailRPos" value="([tidringpar:Rout]+[ICBTailR]- 4*[tidringpar:ICBTailTol])/2"/> + <Constant name="CCUMrPos" value="[tidringpar:Rout]-[tidringpar:CCUMH]/2-2*[tidringpar:ICBTailTol]"/> + <Constant name="CoolR1" value="[Rmin]+[tidmodule1:ModuleHeight]-[tidmodule1:CoolInsertShift]"/> + <Constant name="CoolR2" value="[Rmin]+[tidmodule1:ModuleHeight]-[tidmodpar:CoolInsertHeightDS]+[tidringpar:CoolD]/2"/> + <Constant name="DOHMrIn" value="44.5*cm"/> + <Constant name="DOHMrOut" value="50.5*cm"/> + <Constant name="DOHMrOff" value="-20.5*cm"/> + <Constant name="DOHMdPhi" value="18*deg"/> + <Constant name="DOHMphiPos" value="52.5*deg"/> + <Constant name="CoolManifoldL" value="14*cm"/> + <Constant name="FlatCablerIn" value="[tidringpar:Rin]"/> + <Constant name="FlatCablerOut" value="[FlatCablerIn]+22.5*cm"/> + <Constant name="FlatCabledPhi" value="90*deg"/> + <Constant name="FlatCableHolerIn" value="[tidringpar:Rin]+2.4*cm"/> + <Constant name="FlatCableHolerOut" value="[FlatCablerOut]"/> + <Constant name="FlatCableHoledPhi" value="84*deg"/> + <Constant name="FlatCablephiPosF" value="[DOHMphiPos]+[DOHMdPhi]+[FlatCabledPhi]/2"/> + <!-- tuned by eye --> + <Constant name="FlatCablephiPosB" value="[DOHMphiPos]-[DOHMdPhi]-[FlatCabledPhi]/2"/> + <!-- tuned by eye --> + <Constant name="ModuleFixationInsertsInR" value="36.4*cm"/> + <Constant name="ModuleFixationInsertsOutR" value="44.7*cm"/> + </ConstantsSection> + <SolidSection label="tidring1.xml"> + <Tubs name="TIDRing1ICB" rMin="([ICBR]-[tidringpar:ICBW]/2)" rMax="([ICBR]+[tidringpar:ICBW]/2)" dz="[tidringpar:ICBT]/2" startPhi="0*deg" deltaPhi="360.*deg"/> + <Box name="TIDRing1ICBTail" dx="[ICBTailH]/2" dy="[ICBTailW]/2" dz="[tidringpar:ICBTailT]/2"/> + <Torus name="TIDRing1Cool1" innerRadius="[zero]" outerRadius="[tidringpar:CoolD]/2" torusRadius="[CoolR1]" startPhi="0*deg" deltaPhi="360.*deg"/> + <Torus name="TIDRing1Cool2" innerRadius="[zero]" outerRadius="[tidringpar:CoolD]/2" torusRadius="[CoolR2]" startPhi="0*deg" deltaPhi="360.*deg"/> + <Tubs name="TIDRing1DOHM" rMin="([DOHMrIn])" rMax="([DOHMrOut])" dz="[tidringpar:DOHMT]/2" startPhi="-[DOHMdPhi]/2" deltaPhi="[DOHMdPhi]"/> + <Tubs name="TIDRing1FiberLayer" rMin="([ICBR]-[tidringpar:ICBW]/2)" rMax="([ICBR]+[tidringpar:ICBW]/2)" dz="[tidringpar:FiberLayerT]/2" startPhi="0*deg" deltaPhi="360.*deg"/> + <Box name="TIDRing1CoolManifold" dx="[tidringpar:CoolManifoldW]/2" dy="[CoolManifoldL]/2" dz="[tidringpar:CoolManifoldT]/2"/> + <Tubs name="TIDRing1FlatCable" rMin="[FlatCablerIn]" rMax="[FlatCablerOut]" dz="[tidringpar:FlatCableT]/2" startPhi="-[FlatCabledPhi]/2" deltaPhi="[FlatCabledPhi]"/> + <Tubs name="TIDRing1FlatCableHole" rMin="[FlatCableHolerIn]" rMax="[FlatCableHolerOut]" dz="[tidringpar:FlatCableT]/2" startPhi="-[FlatCableHoledPhi]/2" deltaPhi="[FlatCableHoledPhi]"/> + <SubtractionSolid name="TIDRing1FlatCableCutted"> + <rSolid name="TIDRing1FlatCable"/> + <rSolid name="TIDRing1FlatCableHole"/> + </SubtractionSolid> + </SolidSection> + <LogicalPartSection label="tidring1.xml"> + <LogicalPart name="TIDStructure1" category="unspecified"> + <rSolid name="tidringpar:TIDStructure"/> + <rMaterial name="tidmaterial:TID_Mech"/> + </LogicalPart> + <LogicalPart name="TIDICC1" category="unspecified"> + <rSolid name="tidringpar:TIDICCDS"/> + <rMaterial name="tidmaterial:TID_DSAOHBox"/> + </LogicalPart> + <LogicalPart name="TIDRing1ICBTail" category="unspecified"> + <rSolid name="tidring1:TIDRing1ICBTail"/> + <rMaterial name="tidmaterial:TID_ICB2"/> + </LogicalPart> + <LogicalPart name="TIDRing1ICB" category="unspecified"> + <rSolid name="tidring1:TIDRing1ICB"/> + <rMaterial name="tidmaterial:TID_ICB2"/> + </LogicalPart> + <LogicalPart name="TIDRing1DOHM" category="unspecified"> + <rSolid name="tidring1:TIDRing1DOHM"/> + <rMaterial name="tidmaterial:TID_DOHM1"/> + </LogicalPart> + <LogicalPart name="TIDRing1Cool1" category="unspecified"> + <rSolid name="tidring1:TIDRing1Cool1"/> + <rMaterial name="tidmaterial:TID_CoolPipe"/> + </LogicalPart> + <LogicalPart name="TIDRing1Cool2" category="unspecified"> + <rSolid name="tidring1:TIDRing1Cool2"/> + <rMaterial name="tidmaterial:TID_CoolPipe"/> + </LogicalPart> + <LogicalPart name="TIDRing1FiberLayer" category="unspecified"> + <rSolid name="tidring1:TIDRing1FiberLayer"/> + <rMaterial name="tidmaterial:TID_FiberLayer"/> + </LogicalPart> + <LogicalPart name="TIDRing1CoolManifold" category="unspecified"> + <rSolid name="tidring1:TIDRing1CoolManifold"/> + <rMaterial name="tidmaterial:TID_CoolManifold"/> + </LogicalPart> + <LogicalPart name="TIDRing1FlatCable" category="unspecified"> + <rSolid name="tidring1:TIDRing1FlatCableCutted"/> + <rMaterial name="tibtidcommonmaterial:TIBTID_AmphCable"/> + </LogicalPart> + </LogicalPartSection> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tidring1:TIDStructure1"/> + <String name="ChildName" value="tidring1:TIDRing1CoolManifold"/> + <Numeric name="N" value="2"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="52.5*deg"/> + <Numeric name="Radius" value="[tidringpar:CoolManifoldR]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <!-- Inserts for module fixation --> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tidring1:TIDStructure1"/> + <String name="ChildName" value="tidringpar:TIDModuleFix"/> + <Numeric name="N" value="24"/> + <Numeric name="StartCopyNo" value="3"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="-9.42*deg"/> + <Numeric name="Radius" value="[ModuleFixationInsertsInR]"/> + <Vector name="Center" type="numeric" nEntries="3"> + [zero], [zero], [zero] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tidring1:TIDStructure1"/> + <String name="ChildName" value="tidringpar:TIDModuleFix"/> + <Numeric name="N" value="24"/> + <Numeric name="StartCopyNo" value="27"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="+9.42*deg"/> + <Numeric name="Radius" value="[ModuleFixationInsertsInR]"/> + <Vector name="Center" type="numeric" nEntries="3"> + [zero], [zero], [zero] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tidring1:TIDStructure1"/> + <String name="ChildName" value="tidringpar:TIDModuleFix"/> + <Numeric name="N" value="24"/> + <Numeric name="StartCopyNo" value="51"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="-4.21*deg"/> + <Numeric name="Radius" value="[ModuleFixationInsertsOutR]"/> + <Vector name="Center" type="numeric" nEntries="3"> + [zero], [zero], [zero] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tidring1:TIDStructure1"/> + <String name="ChildName" value="tidringpar:TIDModuleFix"/> + <Numeric name="N" value="24"/> + <Numeric name="StartCopyNo" value="75"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="+4.21*deg"/> + <Numeric name="Radius" value="[ModuleFixationInsertsOutR]"/> + <Vector name="Center" type="numeric" nEntries="3"> + [zero], [zero], [zero] + </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tidring1b.xml b/examples/DDCMS/data/tidring1b.xml new file mode 100644 index 000000000..cdad89830 --- /dev/null +++ b/examples/DDCMS/data/tidring1b.xml @@ -0,0 +1,142 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tidring1b.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <LogicalPartSection label="tidring1b.xml"> + <LogicalPart name="TIDRing1B" category="unspecified"> + <rSolid name="tidringpar:TIDRing"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tidring1b.xml"> + <PosPart copyNumber="1"> + <rParent name="tidring1b:TIDRing1B"/> + <rChild name="tidring1:TIDStructure1"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tidring1b:TIDRing1B"/> + <rChild name="tidring1:TIDRing1ICB"/> + <Translation x="[zero]" y="[zero]" z="-[tidringpar:ICBZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tidring1b:TIDRing1B"/> + <rChild name="tidring1:TIDRing1ICB"/> + <Translation x="[zero]" y="[zero]" z="[tidringpar:ICBZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tidring1b:TIDRing1B"/> + <rChild name="tidring1:TIDRing1Cool1"/> + <Translation x="[zero]" y="[zero]" z="-[tidringpar:CoolZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tidring1b:TIDRing1B"/> + <rChild name="tidring1:TIDRing1Cool1"/> + <Translation x="[zero]" y="[zero]" z="[tidringpar:CoolZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tidring1b:TIDRing1B"/> + <rChild name="tidring1:TIDRing1Cool2"/> + <Translation x="[zero]" y="[zero]" z="-[tidringpar:CoolZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tidring1b:TIDRing1B"/> + <rChild name="tidring1:TIDRing1Cool2"/> + <Translation x="[zero]" y="[zero]" z="[tidringpar:CoolZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tidring1b:TIDRing1B"/> + <rChild name="tidring1:TIDRing1FiberLayer"/> + <Translation x="[zero]" y="[zero]" z="-[tidringpar:FiberLayerZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tidring1b:TIDRing1B"/> + <rChild name="tidring1:TIDRing1FiberLayer"/> + <Translation x="[zero]" y="[zero]" z="[tidringpar:FiberLayerZ]"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tidring1b:TIDRing1B"/> + <String name="ChildName" value="tidring1:TIDRing1ICBTail"/> + <Numeric name="Radius" value="[tidring1:ICBTailRPos]"/> + <Numeric name="Tilt" value="-90*deg"/> + <Vector name="Phi" type="numeric" nEntries="8"> + 167.5*deg, 117.5*deg, 77.5*deg, 27.5*deg, + 347.5*deg, 297.5*deg, 257.5*deg, 207.5*deg + </Vector> + <Vector name="ZPos" type="numeric" nEntries="8"> + -[tidringpar:ICBZ], [tidringpar:ICBZ], -[tidringpar:ICBZ], [tidringpar:ICBZ], + -[tidringpar:ICBZ], [tidringpar:ICBZ], -[tidringpar:ICBZ], [tidringpar:ICBZ] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tidring1b:TIDRing1B"/> + <String name="ChildName" value="tidringpar:TIDCCUMBox"/> + <Numeric name="Radius" value="[tidring1:CCUMrPos]"/> + <Numeric name="Tilt" value="-90*deg"/> + <Vector name="Phi" type="numeric" nEntries="8"> + 167.5*deg, 117.5*deg, 77.5*deg, 27.5*deg, + 347.5*deg, 297.5*deg, 257.5*deg, 207.5*deg + </Vector> + <Vector name="ZPos" type="numeric" nEntries="8"> + -[tidringpar:CCUMZ], [tidringpar:CCUMZ],-[tidringpar:CCUMZ], [tidringpar:CCUMZ], + -[tidringpar:CCUMZ], [tidringpar:CCUMZ],-[tidringpar:CCUMZ], [tidringpar:CCUMZ] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tidring1b:TIDRing1B"/> + <String name="ChildName" value="tidring1:TIDRing1DOHM"/> + <Numeric name="Radius" value="[tidring1:DOHMrOff]"/> + <Numeric name="Tilt" value="0*deg"/> + <Vector name="Phi" type="numeric" nEntries="2"> + [tidring1:DOHMphiPos], [tidring1:DOHMphiPos]+180*deg + </Vector> + <Vector name="ZPos" type="numeric" nEntries="2"> + -[tidringpar:DOHMZ], [tidringpar:DOHMZ] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tidring1b:TIDRing1B"/> + <String name="ChildName" value="tidring1:TIDRing1FlatCable"/> + <Numeric name="Radius" value="[zero]"/> + <Numeric name="Tilt" value="0*deg"/> + <Vector name="Phi" type="numeric" nEntries="4"> + [tidring1:FlatCablephiPosF], [tidring1:FlatCablephiPosF]+180*deg, + [tidring1:FlatCablephiPosB], [tidring1:FlatCablephiPosB]+180*deg + </Vector> + <Vector name="ZPos" type="numeric" nEntries="4"> + -[tidringpar:FlatCableZ], -[tidringpar:FlatCableZ], + [tidringpar:FlatCableZ], [tidringpar:FlatCableZ] + </Vector> + </Algorithm> + <Algorithm name="track:DDTIDRingAlgo"> + <rParent name="tidring1b:TIDRing1B"/> + <Vector name="ModuleName" type="string" nEntries="2"> + tidmodule1l:TIDModule1L, tidmodule1r:TIDModule1R</Vector> + <String name="ICCName" value="tidring1:TIDICC1"/> + <Numeric name="Number" value="[tidring1:NPhi]"/> + <Numeric name="StartAngle" value="[tidring1:PhiOff]"/> + <Numeric name="ModuleR" value="[tidring1:RPos]"/> + <Vector name="ModuleZ" type="numeric" nEntries="2"> + -[tidringpar:ModuleZDS], [tidringpar:ModuleZDS] </Vector> + <Numeric name="ICCR" value="[tidring1:ICCRPos]"/> + <Numeric name="ICCShift" value="[zero]"/> + <Vector name="ICCZ" type="numeric" nEntries="2"> + -[tidringpar:ICCZ], [tidringpar:ICCZ] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tidring1b:TIDRing1B"/> + <String name="ChildName" value="tidringpar:TIDManifoldFix"/> + <Numeric name="Radius" value="[tidringpar:CoolManifoldR]"/> + <Numeric name="Tilt" value="-90*deg"/> + <Vector name="Phi" type="numeric" nEntries="4"> + 52.5*deg, 52.5*deg, 232.5*deg, 232.5*deg + </Vector> + <Vector name="ZPos" type="numeric" nEntries="4"> + [tidringpar:ManifoldFixZ]+[tidringpar:FiberLayerT]+[tidringpar:ICBT] , + -([tidringpar:ManifoldFixZ]+[tidringpar:FiberLayerT]+[tidringpar:ICBT]), + [tidringpar:ManifoldFixZ]+[tidringpar:FiberLayerT]+[tidringpar:ICBT] , + -([tidringpar:ManifoldFixZ]+[tidringpar:FiberLayerT]+[tidringpar:ICBT]) + </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tidring1f.xml b/examples/DDCMS/data/tidring1f.xml new file mode 100644 index 000000000..b23305ca1 --- /dev/null +++ b/examples/DDCMS/data/tidring1f.xml @@ -0,0 +1,142 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tidring1f.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <LogicalPartSection label="tidring1f.xml"> + <LogicalPart name="TIDRing1F" category="unspecified"> + <rSolid name="tidringpar:TIDRing"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tidring1f.xml"> + <PosPart copyNumber="1"> + <rParent name="tidring1f:TIDRing1F"/> + <rChild name="tidring1:TIDStructure1"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tidring1f:TIDRing1F"/> + <rChild name="tidring1:TIDRing1ICB"/> + <Translation x="[zero]" y="[zero]" z="-[tidringpar:ICBZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tidring1f:TIDRing1F"/> + <rChild name="tidring1:TIDRing1ICB"/> + <Translation x="[zero]" y="[zero]" z="[tidringpar:ICBZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tidring1f:TIDRing1F"/> + <rChild name="tidring1:TIDRing1Cool1"/> + <Translation x="[zero]" y="[zero]" z="-[tidringpar:CoolZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tidring1f:TIDRing1F"/> + <rChild name="tidring1:TIDRing1Cool1"/> + <Translation x="[zero]" y="[zero]" z="[tidringpar:CoolZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tidring1f:TIDRing1F"/> + <rChild name="tidring1:TIDRing1Cool2"/> + <Translation x="[zero]" y="[zero]" z="-[tidringpar:CoolZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tidring1f:TIDRing1F"/> + <rChild name="tidring1:TIDRing1Cool2"/> + <Translation x="[zero]" y="[zero]" z="[tidringpar:CoolZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tidring1f:TIDRing1F"/> + <rChild name="tidring1:TIDRing1FiberLayer"/> + <Translation x="[zero]" y="[zero]" z="-[tidringpar:FiberLayerZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tidring1f:TIDRing1F"/> + <rChild name="tidring1:TIDRing1FiberLayer"/> + <Translation x="[zero]" y="[zero]" z="[tidringpar:FiberLayerZ]"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tidring1f:TIDRing1F"/> + <String name="ChildName" value="tidring1:TIDRing1ICBTail"/> + <Numeric name="Radius" value="[tidring1:ICBTailRPos]"/> + <Numeric name="Tilt" value="-90*deg"/> + <Vector name="Phi" type="numeric" nEntries="8"> + 167.5*deg, 117.5*deg, 77.5*deg, 27.5*deg, + 347.5*deg, 297.5*deg, 257.5*deg, 207.5*deg + </Vector> + <Vector name="ZPos" type="numeric" nEntries="8"> + -[tidringpar:ICBZ], [tidringpar:ICBZ], -[tidringpar:ICBZ], [tidringpar:ICBZ], + -[tidringpar:ICBZ], [tidringpar:ICBZ], -[tidringpar:ICBZ], [tidringpar:ICBZ] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tidring1f:TIDRing1F"/> + <String name="ChildName" value="tidringpar:TIDCCUMBox"/> + <Numeric name="Radius" value="[tidring1:CCUMrPos]"/> + <Numeric name="Tilt" value="-90*deg"/> + <Vector name="Phi" type="numeric" nEntries="8"> + 167.5*deg, 117.5*deg, 77.5*deg, 27.5*deg, + 347.5*deg, 297.5*deg, 257.5*deg, 207.5*deg + </Vector> + <Vector name="ZPos" type="numeric" nEntries="8"> + -[tidringpar:CCUMZ], [tidringpar:CCUMZ],-[tidringpar:CCUMZ], [tidringpar:CCUMZ], + -[tidringpar:CCUMZ], [tidringpar:CCUMZ],-[tidringpar:CCUMZ], [tidringpar:CCUMZ] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tidring1f:TIDRing1F"/> + <String name="ChildName" value="tidring1:TIDRing1DOHM"/> + <Numeric name="Radius" value="[tidring1:DOHMrOff]"/> + <Numeric name="Tilt" value="0*deg"/> + <Vector name="Phi" type="numeric" nEntries="2"> + [tidring1:DOHMphiPos], [tidring1:DOHMphiPos]+180*deg + </Vector> + <Vector name="ZPos" type="numeric" nEntries="2"> + -[tidringpar:DOHMZ], [tidringpar:DOHMZ] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tidring1f:TIDRing1F"/> + <String name="ChildName" value="tidring1:TIDRing1FlatCable"/> + <Numeric name="Radius" value="[zero]"/> + <Numeric name="Tilt" value="0*deg"/> + <Vector name="Phi" type="numeric" nEntries="4"> + [tidring1:FlatCablephiPosF], [tidring1:FlatCablephiPosF]+180*deg, + [tidring1:FlatCablephiPosB], [tidring1:FlatCablephiPosB]+180*deg + </Vector> + <Vector name="ZPos" type="numeric" nEntries="4"> + -[tidringpar:FlatCableZ], -[tidringpar:FlatCableZ], + [tidringpar:FlatCableZ], [tidringpar:FlatCableZ] + </Vector> + </Algorithm> + <Algorithm name="track:DDTIDRingAlgo"> + <rParent name="tidring1f:TIDRing1F"/> + <Vector name="ModuleName" type="string" nEntries="2"> + tidmodule1l:TIDModule1L, tidmodule1r:TIDModule1R</Vector> + <String name="ICCName" value="tidring1:TIDICC1"/> + <Numeric name="Number" value="[tidring1:NPhi]"/> + <Numeric name="StartAngle" value="[tidring1:PhiOff]"/> + <Numeric name="ModuleR" value="[tidring1:RPos]"/> + <Vector name="ModuleZ" type="numeric" nEntries="2"> + -[tidringpar:ModuleZDS], [tidringpar:ModuleZDS] </Vector> + <Numeric name="ICCR" value="[tidring1:ICCRPos]"/> + <Numeric name="ICCShift" value="[zero]"/> + <Vector name="ICCZ" type="numeric" nEntries="2"> + -[tidringpar:ICCZ], [tidringpar:ICCZ] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tidring1f:TIDRing1F"/> + <String name="ChildName" value="tidringpar:TIDManifoldFix"/> + <Numeric name="Radius" value="[tidringpar:CoolManifoldR]"/> + <Numeric name="Tilt" value="-90*deg"/> + <Vector name="Phi" type="numeric" nEntries="4"> + 52.5*deg, 52.5*deg, 232.5*deg, 232.5*deg + </Vector> + <Vector name="ZPos" type="numeric" nEntries="4"> + [tidringpar:ManifoldFixZ]+[tidringpar:FiberLayerT]+[tidringpar:ICBT] , + -([tidringpar:ManifoldFixZ]+[tidringpar:FiberLayerT]+[tidringpar:ICBT]), + [tidringpar:ManifoldFixZ]+[tidringpar:FiberLayerT]+[tidringpar:ICBT] , + -([tidringpar:ManifoldFixZ]+[tidringpar:FiberLayerT]+[tidringpar:ICBT]) + </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tidring2.xml b/examples/DDCMS/data/tidring2.xml new file mode 100644 index 000000000..e147d6fad --- /dev/null +++ b/examples/DDCMS/data/tidring2.xml @@ -0,0 +1,287 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tidring2.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="Rmin" value="35.6762*cm"/> + <Constant name="NPhi" value="40"/> + <Constant name="PhiOff" value="0*deg"/> + <Constant name="ICBR" value="33.350*cm"/> + <Constant name="ICBTailR" value="[ICBR]+[tidringpar:ICBW]/2"/> + <Constant name="RPos" value="[Rmin]+[tidmodule2:ModuleHeight]/2"/> + <Constant name="ICCRPos" value="[Rmin]-[tidringpar:ICCROffset]-[tidringpar:ICCH]/2"/> + <Constant name="ICBTailW" value="([tidringpar:Rout]-[ICBTailR]- [tidringpar:ICBTailTol])"/> + <Constant name="ICBTailRPos" value="([tidringpar:Rout]+[ICBTailR]- [tidringpar:ICBTailTol])/2"/> + <Constant name="CCUMrPos" value="[ICBTailR]-[tidringpar:CCUMH]/2"/> + <Constant name="CoolR1" value="[Rmin]+[tidmodpar:CoolInsertHeightSS]-[tidringpar:CoolD]/2"/> + <Constant name="CoolR2" value="[Rmin]+[tidmodule2:CoolInsertShift]"/> + <Constant name="DOHMrIn" value="22.8*cm"/> + <Constant name="DOHMrMed" value="26.5*cm"/> + <Constant name="DOHMrOut" value="29.5*cm"/> + <Constant name="DOHMdPhiIn" value="37*deg"/> + <Constant name="DOHMdPhiOut" value="55*deg"/> + <Constant name="DOHMrOff" value="-0.15*cm"/> + <Constant name="DOHMphiPos" value="157.5*deg"/> + <Constant name="CoolManifoldL" value="8.0*cm"/> + <Constant name="FlatCablerIn" value="[tidringpar:Rin]"/> + <Constant name="FlatCablerOut" value="[FlatCablerIn]+4*cm"/> + <Constant name="FlatCabledPhi" value="35*deg"/> + <Constant name="FlatCablephiPosOff" value="3*deg"/> + <Constant name="FlatCablephiPosL" value="[DOHMphiPos]-[FlatCablephiPosOff]-([DOHMdPhiOut]+[FlatCabledPhi])/2"/> + <Constant name="FlatCablephiPosR" value="[DOHMphiPos]+[FlatCablephiPosOff]+([DOHMdPhiOut]+[FlatCabledPhi])/2"/> + <Constant name="ModuleFixationInsertsInR" value="36.4*cm"/> + <Constant name="ModuleFixationInsertsOutR" value="45.4*cm"/> + </ConstantsSection> + <SolidSection label="tidring2.xml"> + <Tubs name="TIDRing2ICB" rMin="([ICBR]-[tidringpar:ICBW]/2)" rMax="([ICBR]+[tidringpar:ICBW]/2)" dz="[tidringpar:ICBT]/2" startPhi="0*deg" deltaPhi="360.*deg"/> + <Box name="TIDRing2ICBTail" dx="[tidringpar:ICBTailH]/2" dy="[ICBTailW]/2" dz="[tidringpar:ICBTailT]/2"/> + <Torus name="TIDRing2Cool1" innerRadius="[zero]" outerRadius="[tidringpar:CoolD]/2" torusRadius="[CoolR1]" startPhi="0*deg" deltaPhi="360.*deg"/> + <Torus name="TIDRing2Cool2" innerRadius="[zero]" outerRadius="[tidringpar:CoolD]/2" torusRadius="[CoolR2]" startPhi="0*deg" deltaPhi="360.*deg"/> + <Tubs name="TIDRing2DOHMIn" rMin="[DOHMrIn]" rMax="[DOHMrMed]" dz="[tidringpar:DOHMT]/2" startPhi="-[DOHMdPhiIn]/2" deltaPhi="[DOHMdPhiIn]"/> + <Tubs name="TIDRing2DOHMOut" rMin="[DOHMrMed]" rMax="[DOHMrOut]" dz="[tidringpar:DOHMT]/2" startPhi="-[DOHMdPhiOut]/2" deltaPhi="[DOHMdPhiOut]"/> + <UnionSolid name="TIDRing2DOHM"> + <rSolid name="TIDRing2DOHMIn"/> + <rSolid name="TIDRing2DOHMOut"/> + </UnionSolid> + <Tubs name="TIDRing2FiberLayer" rMin="([ICBR]-[tidringpar:ICBW]/2)" rMax="([ICBR]+[tidringpar:ICBW]/2)" dz="[tidringpar:FiberLayerT]/2" startPhi="0*deg" deltaPhi="360.*deg"/> + <Box name="TIDRing2CoolManifold" dx="[tidringpar:CoolManifoldW]/2" dy="[CoolManifoldL]/2" dz="[tidringpar:CoolManifoldT]/2"/> + <Tubs name="TIDRing2FlatCable" rMin="[FlatCablerIn]" rMax="[FlatCablerOut]" dz="[tidringpar:FlatCableT]/2" startPhi="-[FlatCabledPhi]/2" deltaPhi="[FlatCabledPhi]"/> + </SolidSection> + <LogicalPartSection label="tidring2.xml"> + <LogicalPart name="TIDRing2" category="unspecified"> + <rSolid name="tidringpar:TIDRing"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TIDStructure2" category="unspecified"> + <rSolid name="tidringpar:TIDStructure"/> + <rMaterial name="tidmaterial:TID_Mech"/> + </LogicalPart> + <LogicalPart name="TIDICC2" category="unspecified"> + <rSolid name="tidringpar:TIDICCSS"/> + <rMaterial name="tidmaterial:TID_SSAOHBox"/> + </LogicalPart> + <LogicalPart name="TIDRing2ICBTail" category="unspecified"> + <rSolid name="tidring2:TIDRing2ICBTail"/> + <rMaterial name="tidmaterial:TID_ICB3"/> + </LogicalPart> + <LogicalPart name="TIDRing2ICB" category="unspecified"> + <rSolid name="tidring2:TIDRing2ICB"/> + <rMaterial name="tidmaterial:TID_ICB3"/> + </LogicalPart> + <LogicalPart name="TIDRing2DOHM" category="unspecified"> + <rSolid name="tidring2:TIDRing2DOHM"/> + <rMaterial name="tidmaterial:TID_DOHM2"/> + </LogicalPart> + <LogicalPart name="TIDRing2Cool1" category="unspecified"> + <rSolid name="tidring2:TIDRing2Cool1"/> + <rMaterial name="tidmaterial:TID_CoolPipe"/> + </LogicalPart> + <LogicalPart name="TIDRing2Cool2" category="unspecified"> + <rSolid name="tidring2:TIDRing2Cool2"/> + <rMaterial name="tidmaterial:TID_CoolPipe"/> + </LogicalPart> + <LogicalPart name="TIDRing2FiberLayer" category="unspecified"> + <rSolid name="tidring2:TIDRing2FiberLayer"/> + <rMaterial name="tidmaterial:TID_FiberLayer"/> + </LogicalPart> + <LogicalPart name="TIDRing2CoolManifold" category="unspecified"> + <rSolid name="tidring2:TIDRing2CoolManifold"/> + <rMaterial name="tidmaterial:TID_CoolManifold"/> + </LogicalPart> + <LogicalPart name="TIDRing2FlatCable" category="unspecified"> + <rSolid name="tidring2:TIDRing2FlatCable"/> + <rMaterial name="tibtidcommonmaterial:TIBTID_AmphCable"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tidring2.xml"> + <PosPart copyNumber="1"> + <rParent name="tidring2:TIDRing2"/> + <rChild name="tidring2:TIDStructure2"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tidring2:TIDRing2"/> + <rChild name="tidring2:TIDRing2ICB"/> + <Translation x="[zero]" y="[zero]" z="-[tidringpar:ICBZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tidring2:TIDRing2"/> + <rChild name="tidring2:TIDRing2ICB"/> + <Translation x="[zero]" y="[zero]" z="[tidringpar:ICBZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tidring2:TIDRing2"/> + <rChild name="tidring2:TIDRing2Cool1"/> + <Translation x="[zero]" y="[zero]" z="-[tidringpar:CoolZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tidring2:TIDRing2"/> + <rChild name="tidring2:TIDRing2Cool1"/> + <Translation x="[zero]" y="[zero]" z="[tidringpar:CoolZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tidring2:TIDRing2"/> + <rChild name="tidring2:TIDRing2Cool2"/> + <Translation x="[zero]" y="[zero]" z="-[tidringpar:CoolZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tidring2:TIDRing2"/> + <rChild name="tidring2:TIDRing2Cool2"/> + <Translation x="[zero]" y="[zero]" z="[tidringpar:CoolZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tidring2:TIDRing2"/> + <rChild name="tidring2:TIDRing2FiberLayer"/> + <Translation x="[zero]" y="[zero]" z="-[tidringpar:FiberLayerZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tidring2:TIDRing2"/> + <rChild name="tidring2:TIDRing2FiberLayer"/> + <Translation x="[zero]" y="[zero]" z="[tidringpar:FiberLayerZ]"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tidring2:TIDRing2"/> + <String name="ChildName" value="tidring2:TIDRing2ICBTail"/> + <Numeric name="Radius" value="[ICBTailRPos]"/> + <Numeric name="Tilt" value="-90*deg"/> + <Vector name="Phi" type="numeric" nEntries="8"> + 180.0*deg, 135.0*deg, 126.0*deg, 9.0*deg, + 360.0*deg, 315.0*deg, 306.0*deg, 189.0*deg + </Vector> + <Vector name="ZPos" type="numeric" nEntries="8"> + [tidringpar:ICBZ], -[tidringpar:ICBZ], [tidringpar:ICBZ], -[tidringpar:ICBZ], + [tidringpar:ICBZ], -[tidringpar:ICBZ], [tidringpar:ICBZ], -[tidringpar:ICBZ] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tidring2:TIDRing2"/> + <String name="ChildName" value="tidringpar:TIDCCUMBox"/> + <Numeric name="Radius" value="[CCUMrPos]"/> + <Numeric name="Tilt" value="-90*deg"/> + <Vector name="Phi" type="numeric" nEntries="8"> + 180.0*deg, 135.0*deg, 126.0*deg, 9.0*deg, + 360.0*deg, 315.0*deg, 306.0*deg, 189.0*deg + </Vector> + <Vector name="ZPos" type="numeric" nEntries="8"> + [tidringpar:CCUMZ], -[tidringpar:CCUMZ], [tidringpar:CCUMZ], -[tidringpar:CCUMZ], + [tidringpar:CCUMZ], -[tidringpar:CCUMZ], [tidringpar:CCUMZ], -[tidringpar:CCUMZ] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tidring2:TIDRing2"/> + <String name="ChildName" value="tidring2:TIDRing2DOHM"/> + <Numeric name="Radius" value="[tidring2:DOHMrOff]"/> + <Numeric name="Tilt" value="0*deg"/> + <Vector name="Phi" type="numeric" nEntries="2"> + [DOHMphiPos], [DOHMphiPos]+180*deg + </Vector> + <Vector name="ZPos" type="numeric" nEntries="2"> + -[tidringpar:DOHMZ], [tidringpar:DOHMZ] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tidring2:TIDRing2"/> + <String name="ChildName" value="tidring2:TIDRing2FlatCable"/> + <Numeric name="Radius" value="[zero]"/> + <Numeric name="Tilt" value="0*deg"/> + <Vector name="Phi" type="numeric" nEntries="8"> + [FlatCablephiPosL], [FlatCablephiPosR], [FlatCablephiPosL]+180*deg, [FlatCablephiPosR]+180*deg, + [FlatCablephiPosL], [FlatCablephiPosR], [FlatCablephiPosL]+180*deg, [FlatCablephiPosR]+180*deg + </Vector> + <Vector name="ZPos" type="numeric" nEntries="8"> + -[tidringpar:FlatCableZ], -[tidringpar:FlatCableZ], -[tidringpar:FlatCableZ], -[tidringpar:FlatCableZ], + [tidringpar:FlatCableZ], [tidringpar:FlatCableZ], [tidringpar:FlatCableZ], [tidringpar:FlatCableZ] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tidring2:TIDStructure2"/> + <String name="ChildName" value="tidring2:TIDRing2CoolManifold"/> + <Numeric name="N" value="2"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="63.0*deg"/> + <Numeric name="Radius" value="[tidringpar:CoolManifoldR]"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTIDRingAlgo"> + <rParent name="tidring2:TIDRing2"/> + <Vector name="ModuleName" type="string" nEntries="2"> + tidmodule2:TIDModule2, tidmodule2:TIDModule2</Vector> + <String name="ICCName" value="tidring2:TIDICC2"/> + <Numeric name="Number" value="[NPhi]"/> + <Numeric name="StartAngle" value="[PhiOff]"/> + <Numeric name="ModuleR" value="[RPos]"/> + <Vector name="ModuleZ" type="numeric" nEntries="2"> + -[tidringpar:ModuleZSS], [tidringpar:ModuleZSS] </Vector> + <Numeric name="ICCR" value="[ICCRPos]"/> + <Numeric name="ICCShift" value="[tidringpar:ICCW]/2"/> + <Vector name="ICCZ" type="numeric" nEntries="2"> + -[tidringpar:ICCZ], [tidringpar:ICCZ] </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tidring2:TIDRing2"/> + <String name="ChildName" value="tidringpar:TIDManifoldFix"/> + <Numeric name="Radius" value="[tidringpar:CoolManifoldR]"/> + <Numeric name="Tilt" value="-90*deg"/> + <Vector name="Phi" type="numeric" nEntries="4"> + 63.0*deg, 63.0*deg, 243.0*deg, 243.0*deg + </Vector> + <Vector name="ZPos" type="numeric" nEntries="4"> + [tidringpar:ManifoldFixZ], -[tidringpar:ManifoldFixZ], + [tidringpar:ManifoldFixZ], -[tidringpar:ManifoldFixZ] + </Vector> + </Algorithm> + <!-- Inserts for module fixation --> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tidring2:TIDStructure2"/> + <String name="ChildName" value="tidringpar:TIDModuleFixSmall"/> + <Numeric name="N" value="40"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="-5.17*deg"/> + <Numeric name="Radius" value="[ModuleFixationInsertsInR]"/> + <Vector name="Center" type="numeric" nEntries="3"> + [zero], [zero], [zero] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tidring2:TIDStructure2"/> + <String name="ChildName" value="tidringpar:TIDModuleFixSmall"/> + <Numeric name="N" value="40"/> + <Numeric name="StartCopyNo" value="41"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="+5.17*deg"/> + <Numeric name="Radius" value="[ModuleFixationInsertsInR]"/> + <Vector name="Center" type="numeric" nEntries="3"> + [zero], [zero], [zero] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tidring2:TIDStructure2"/> + <String name="ChildName" value="tidringpar:TIDModuleFix"/> + <Numeric name="N" value="40"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="-5.54*deg"/> + <Numeric name="Radius" value="[ModuleFixationInsertsOutR]"/> + <Vector name="Center" type="numeric" nEntries="3"> + [zero], [zero], [zero] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tidring2:TIDStructure2"/> + <String name="ChildName" value="tidringpar:TIDModuleFix"/> + <Numeric name="N" value="40"/> + <Numeric name="StartCopyNo" value="41"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="+5.54*deg"/> + <Numeric name="Radius" value="[ModuleFixationInsertsOutR]"/> + <Vector name="Center" type="numeric" nEntries="3"> + [zero], [zero], [zero] + </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tidringpar.xml b/examples/DDCMS/data/tidringpar.xml new file mode 100644 index 000000000..64a57c8ba --- /dev/null +++ b/examples/DDCMS/data/tidringpar.xml @@ -0,0 +1,86 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tidringpar.xml" eval="true"> + <Constant name="Rin" value="22.50*cm"/> + <Constant name="Rout" value="50.90*cm"/> + <Constant name="RingT" value="3.40*cm"/> + <!-- MAX ALLOWED VALUE 3.5 cm --> + <Constant name="StructureT" value="0.80*cm"/> + <!-- DOHM --> + <Constant name="DOHMT" value="0.22*cm"/> + <Constant name="DOHMZ" value="([StructureT]+[DOHMT])/2"/> + <!-- Flat Amphenol 26 --> + <Constant name="FlatCableT" value="0.06*cm"/> + <Constant name="FlatCableZ" value="([StructureT]+[FlatCableT])/2"/> + <!-- MotherCables --> + <Constant name="ICBW" value="2.50*cm"/> + <Constant name="ICBT" value="0.12*cm"/> + <Constant name="ICBZ" value="([StructureT]+[ICBT])/2"/> + <Constant name="ICBTailH" value="3.26*cm"/> + <Constant name="ICBTailT" value="[ICBT]"/> + <Constant name="ICBTailTol" value="0.05*cm"/> + <!-- Layer of the Fiber Pigtails --> + <Constant name="FiberLayerT" value="0.05*cm"/> + <Constant name="FiberLayerZ" value="([StructureT]+2*[ICBT]+[FiberLayerT])/2"/> + <!-- Cooling Pipes --> + <Constant name="CoolD" value="0.35*cm"/> + <!-- diameter of the pipe --> + <Constant name="CoolZ" value="([StructureT]/2)+0.375*cm"/> + <!-- Cooling Manifolds --> + <Constant name="CoolManifoldR" value="49.00*cm"/> + <Constant name="CoolManifoldW" value="2.00*cm"/> + <Constant name="CoolManifoldT" value="0.80*cm"/> + <Constant name="ManifoldFixH" value="4.0*cm"/> + <Constant name="ManifoldFixW" value="5.6*cm"/> + <Constant name="ManifoldFixT" value="0.20*cm"/> + <Constant name="ManifoldFixZ" value="([StructureT]+[ManifoldFixT])/2"/> + <!-- AOH boxes (bottom side at the same height of cooling pipes) --> + <Constant name="ICCH" value="2.70*cm"/> + <Constant name="ICCW" value="2.80*cm"/> + <Constant name="ICCT" value="0.60*cm"/> + <Constant name="ICCZ" value="[CoolZ]+([ICCT]-[CoolD])/2"/> + <Constant name="ICCROffset" value="0.60*cm"/> + <!-- Modules --> + <Constant name="ModuleZDS" value="1.305*cm"/> + <Constant name="ModuleZSS" value="1.226*cm"/> + <!-- Disk inserts for the fixation of the modules --> + <Constant name="ModuleFixRin" value="0.160*cm"/> + <Constant name="ModuleFixRout" value="0.515*cm"/> + <Constant name="ModuleFixRinSmall" value="0.140*cm"/> + <Constant name="ModuleFixRoutSmall" value="0.410*cm"/> + <Constant name="ModuleFixExtraT" value="[tid:zero]"/> + <!-- CCUM boxes --> + <Constant name="CCUMH" value="3.30*cm"/> + <Constant name="CCUMW" value="2.40*cm"/> + <Constant name="CCUMT" value="0.76*cm"/> + <Constant name="CCUMZ" value="[ICBT]+[FiberLayerT]+([StructureT]+[CCUMT])/2"/> + </ConstantsSection> + <SolidSection label="tidringpar.xml"> + <Tubs name="TIDRing" rMin="[Rin]" rMax="[tid:WheelRout]" dz="[RingT]/2" startPhi="0*deg" deltaPhi="360.*deg"/> + <Tubs name="TIDStructure" rMin="[Rin]" rMax="[Rout]" dz="[StructureT]/2" startPhi="0*deg" deltaPhi="360.*deg"/> + <Box name="TIDICCSS" dx="[ICCW]/2" dy="[ICCT]/2" dz="[ICCH]/2"/> + <Box name="TIDICCDS" dx="[ICCW]" dy="[ICCT]/2" dz="[ICCH]/2"/> + <Box name="TIDCCUM" dx="[CCUMW]/2" dy="[CCUMH]/2" dz="[CCUMT]/2"/> + <Box name="TIDManifoldFix" dx="[ManifoldFixW]/2" dy="[ManifoldFixH]/2" dz="[ManifoldFixT]/2"/> + <Tubs name="TIDModuleFix" rMin="[ModuleFixRin]" rMax="[ModuleFixRout]" dz="[ModuleFixExtraT]+[StructureT]/2" startPhi="0*deg" deltaPhi="360.*deg"/> + <Tubs name="TIDModuleFixSmall" rMin="[ModuleFixRinSmall]" rMax="[ModuleFixRoutSmall]" dz="[ModuleFixExtraT]+[StructureT]/2" startPhi="0*deg" deltaPhi="360.*deg"/> + </SolidSection> + <LogicalPartSection label="tidringpar.xml"> + <LogicalPart name="TIDManifoldFix" category="unspecified"> + <rSolid name="TIDManifoldFix"/> + <rMaterial name="trackermaterial:T_Aluminium"/> + </LogicalPart> + <LogicalPart name="TIDModuleFix" category="unspecified"> + <rSolid name="TIDModuleFix"/> + <rMaterial name="tidmaterial:TID_ModuleFix"/> + </LogicalPart> + <LogicalPart name="TIDModuleFixSmall" category="unspecified"> + <rSolid name="TIDModuleFixSmall"/> + <rMaterial name="tidmaterial:TID_ModuleFix"/> + </LogicalPart> + <LogicalPart name="TIDCCUMBox" category="unspecified"> + <rSolid name="TIDCCUM"/> + <rMaterial name="tibtidcommonmaterial:TIBTID_CCUM"/> + </LogicalPart> + </LogicalPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tob.xml b/examples/DDCMS/data/tob.xml new file mode 100644 index 000000000..d9c4243bd --- /dev/null +++ b/examples/DDCMS/data/tob.xml @@ -0,0 +1,1404 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tob.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="Rin1" value="54.0*cm"/> + <Constant name="Rin2" value="58.0*cm"/> + <Constant name="Rin3" value="1.160*m"/> + <Constant name="Rout" value="1.169*m"/> + <Constant name="Zv0" value="1.100*m"/> + <Constant name="Zv1" value="1.160*m"/> + <Constant name="Zv2" value="1.180*m"/> + <Constant name="Zv3" value="2.820*m"/> + <Constant name="StiffenerL" value="720*mm"/> + <Constant name="StiffenerR" value="0.400*cm"/> + <Constant name="RailTopDy" value="8.5*mm"/> + <Constant name="RailBottomDy" value="15*mm"/> + <Constant name="RailDx" value="4.3*mm"/> + <Constant name="RailL" value="1.100*m"/> + <Constant name="RailInX" value="54.433*cm"/> + <Constant name="StiffenerY" value="2.700*cm"/> + <Constant name="AlPieceR0" value="1.161*m"/> + <Constant name="AlPieceR1" value="1.164*m"/> + <Constant name="AlPieceR2" value="1.169*m"/> + <Constant name="AlPiecePhi1" value="1.535*deg"/> + <Constant name="AlPiecePhi2" value="175.535*deg"/> + <Constant name="AlPiecePhi3" value="1.580*deg"/> + <Constant name="AlPiecePhi4" value="175.180*deg"/> + <Constant name="AlPieceDPhi1" value="4.930*deg"/> + <Constant name="AlPieceDPhi2" value="2.930*deg"/> + <Constant name="AlPieceDPhi3" value="0.240*deg"/> + <Constant name="AlPieceDPhi4" value="3.240*deg"/> + <Constant name="AlPieceDz1" value="5.000*cm"/> + <Constant name="AlPieceDz2" value="0.500*cm"/> + <Constant name="AlPieceZ" value="69.00*cm"/> + <Constant name="CFTubeRin1" value="1.142*m"/> + <Constant name="CFTubeRout1" value="1.160*m"/> + <Constant name="CFTubeRin2" value="55.00*cm"/> + <Constant name="CFTubeRout2" value="57.80*cm"/> + <Constant name="CFTubeL1" value="27.80*cm"/> + <Constant name="CFTubeL2" value="38.80*cm"/> + <Constant name="CFTubeZ" value="69.00*cm"/> + <Constant name="NomexTubeRin1" value="1.1425*m"/> + <Constant name="NomexTubeRout1" value="1.1595*m"/> + <Constant name="NomexTubeRin2" value="55.05*cm"/> + <Constant name="NomexTubeRout2" value="57.75*cm"/> + <Constant name="NomexTubeF1" value="48.633*deg"/> + <Constant name="NomexTubeF2" value="29.346*deg"/> + <Constant name="NomexTubeF3" value="35.774*deg"/> + <Constant name="NomexInPhi1" value="48.214*deg"/> + <Constant name="NomexInPhi2" value="90.000*deg"/> + <Constant name="NomexInPhi3" value="131.790*deg"/> + <Constant name="NomexInPhi4" value="183.214*deg"/> + <Constant name="NomexInPhi5" value="228.214*deg"/> + <Constant name="NomexInPhi6" value="273.214*deg"/> + <Constant name="NomexInPhi7" value="315.000*deg"/> + <Constant name="NomexInPhi8" value="356.785*deg"/> + <Constant name="AlignTubeDx" value="1.150*cm"/> + <Constant name="AlignTubeDy" value="1.338*cm"/> + <Constant name="AlignTubeT" value="0.200*cm"/> + <Constant name="AlignPhi1" value="22.500*deg"/> + <Constant name="AlignPhi2" value="73.928*deg"/> + <Constant name="AlignPhi3" value="106.071*deg"/> + <Constant name="AlignPhi4" value="157.500*deg"/> + <Constant name="AlignPhi5" value="208.929*deg"/> + <Constant name="AlignPhi6" value="247.500*deg"/> + <Constant name="AlignPhi7" value="298.929*deg"/> + <Constant name="AlignPhi8" value="331.071*deg"/> + <Constant name="PottingRin1" value="1.142*m"/> + <Constant name="PottingRout1" value="1.157*m"/> + <Constant name="PottingRin2" value="55.00*cm"/> + <Constant name="PottingRout2" value="57.80*cm"/> + <Constant name="PottingL" value="0.200*cm"/> + <Constant name="PottingZ1" value="108.00*cm"/> + <Constant name="PottingZ2" value="30.00*cm"/> + <Constant name="PottingZ3" value="28.20*cm"/> + <Constant name="ConnectRin1" value="1.157*m"/> + <Constant name="ConnectRout1" value="1.160*m"/> + <Constant name="ConnectL1" value="1.000*cm"/> + <Constant name="ConnectZ11" value="1.090*m"/> + <Constant name="ConnectZ12" value="29.00*cm"/> + <Constant name="ConnectDphi1" value="4.95*deg"/> + <Constant name="ConnectRin2" value="1.141*m"/> + <Constant name="ConnectRout2" value="1.142*m"/> + <Constant name="ExtraConnectL" value="1.360*cm"/> + <Constant name="ConnectStartPhi" value="11.25*deg"/> + <Constant name="ConnectL2" value="2.000*cm+[ExtraConnectL]"/> + <Constant name="ConnectZ21" value="1.058*m-[ExtraConnectL]"/> + <Constant name="ConnectZ22" value="32.20*cm+[ExtraConnectL]"/> + <Constant name="ConnectZ23" value="25.80*cm-[ExtraConnectL]"/> + <Constant name="ConnectDphi2" value="3.51*deg"/> + <Constant name="ConnectRin3" value="1.160*m"/> + <Constant name="ConnectRout3" value="1.161*m"/> + <Constant name="ConnectL3" value="2.000*cm+[ExtraConnectL]"/> + <Constant name="ConnectL23" value="1.000*mm"/> + <Constant name="Connect23ZOffset" value="([ConnectL3]-[ConnectL23])"/> + <Constant name="ConnectDphi3" value="3.46*deg"/> + <Constant name="ConnectRin4" value="57.80*cm"/> + <Constant name="ConnectRout4" value="58.10*cm"/> + <Constant name="ConnectL4" value="1.000*cm"/> + <Constant name="ConnectDphi4" value="9.89*deg"/> + <Constant name="ConnectRin5" value="54.90*cm"/> + <Constant name="ConnectRout5" value="55.00*cm"/> + <Constant name="ConnectL5" value="2.000*cm+[ExtraConnectL]"/> + <Constant name="ConnectDphi5" value="7.30*deg"/> + <Constant name="ConnectRin6" value="57.80*cm"/> + <Constant name="ConnectRout6" value="57.90*cm"/> + <Constant name="ConnectL6" value="2.000*cm+[ExtraConnectL]"/> + <Constant name="ConnectL56" value="[ConnectL23]"/> + <Constant name="Connect56ZOffset" value="([ConnectL6]-[ConnectL56])"/> + <Constant name="ConnectDphi6" value="6.93*deg"/> + <Constant name="Layer0Rin" value="58.20*cm"/> + <Constant name="Layer0Rout" value="64.24*cm"/> + <Constant name="Layer0LowR" value="59.20*cm"/> + <Constant name="Layer0HighR" value="62.40*cm"/> + <Constant name="Layer0CoolRa" value="65.40*cm"/> + <Constant name="Layer0CoolRr" value="66.40*cm"/> + <Constant name="Layer1Rin" value="66.60*cm"/> + <Constant name="Layer1Rout" value="72.80*cm"/> + <Constant name="Layer1LowR" value="67.60*cm"/> + <Constant name="Layer1HighR" value="70.80*cm"/> + <Constant name="Layer1CoolRa" value="74.00*cm"/> + <Constant name="Layer1CoolRr" value="75.00*cm"/> + <Constant name="Layer2Rin" value="75.40*cm"/> + <Constant name="Layer2Rout" value="81.40*cm"/> + <Constant name="Layer2LowR" value="76.40*cm"/> + <Constant name="Layer2HighR" value="79.60*cm"/> + <Constant name="Layer2CoolRa" value="82.50*cm"/> + <Constant name="Layer2CoolRr" value="83.50*cm"/> + <Constant name="Layer3Rin" value="84.10*cm"/> + <Constant name="Layer3Rout" value="89.90*cm"/> + <Constant name="Layer3LowR" value="85.20*cm"/> + <Constant name="Layer3HighR" value="88.40*cm"/> + <Constant name="Layer3CoolRa" value="91.10*cm"/> + <Constant name="Layer3CoolRr" value="92.10*cm"/> + <Constant name="Layer4Rin" value="93.80*cm"/> + <Constant name="Layer4Rout" value="99.60*cm"/> + <Constant name="Layer4LowR" value="94.90*cm"/> + <Constant name="Layer4HighR" value="98.10*cm"/> + <Constant name="Layer4CoolRa" value="100.70*cm"/> + <Constant name="Layer4CoolRr" value="101.70*cm"/> + <Constant name="Layer5Rin" value="105.30*cm"/> + <Constant name="Layer5Rout" value="111.10*cm"/> + <Constant name="Layer5LowR" value="106.40*cm"/> + <Constant name="Layer5HighR" value="109.60*cm"/> + <Constant name="Layer5CoolRa" value="112.20*cm"/> + <Constant name="Layer5CoolRr" value="113.20*cm"/> + <Constant name="RibRin" value="58.10*cm"/> + <Constant name="RibRout" value="115.70*cm"/> + <Constant name="RibDZ" value="0.350*cm"/> + <Constant name="RibZ1" value="109.0*cm"/> + <Constant name="RibZ2" value="29.00*cm"/> + <Constant name="SideDiskDz" value="3.250*cm"/> + <Constant name="SideDiskZ" value="114.05*cm"/> + <Constant name="DetectorTilt" value="0*deg"/> + <Constant name="AxCableRin" value="[Rin3]"/> + <Constant name="AxCableRout" value="[Rout]"/> + <Constant name="AxCableT" value="0.210*cm"/> + <Constant name="AxCableDz" value="([Zv3]-[Zv1])/2"/> + <Constant name="AxCableW" value="22.5*deg"/> + <Constant name="AxCableZ" value="([Zv1]+[Zv3])/2"/> + <Constant name="DOHMsDz" value="0.3*cm"/> + <Constant name="DOHMW" value="47*mm"/> + <Constant name="DOHML" value="71.5*mm"/> + <Constant name="DOHMT" value="3.0*mm"/> + <Constant name="DOHMRadius1" value="690*mm"/> + <Constant name="DOHMRadius2" value="860*mm"/> + <Constant name="DOHMRadius3" value="1040*mm"/> + <Constant name="DOHM_R1_phi1" value="9.417*deg"/> + <Constant name="DOHM_R1_phi2" value="45.383*deg"/> + <Constant name="DOHM_R1_phi3" value="65.583*deg"/> + <Constant name="DOHM_R1_phi4" value="85.118*deg"/> + <Constant name="DOHM_R1_phi5" value="108.583*deg"/> + <Constant name="DOHM_R1_phi6" value="135.918*deg"/> + <Constant name="DOHM_R1_phi7" value="162.083*deg"/> + <Constant name="DOHM_R1_phi8" value="186.918*deg"/> + <Constant name="DOHM_R1_phi9" value="208.083*deg"/> + <Constant name="DOHM_R1_phi10" value="227.418*deg"/> + <Constant name="DOHM_R1_phi11" value="251.083*deg"/> + <Constant name="DOHM_R1_phi12" value="282.418*deg"/> + <Constant name="DOHM_R1_phi13" value="302.083*deg"/> + <Constant name="DOHM_R1_phi14" value="325.918*deg"/> + <Constant name="DOHM_R1_phi15" value="346.083*deg"/> + <Constant name="DOHM_R2_phi1" value="4.066*deg"/> + <Constant name="DOHM_R2_phi2" value="20.066*deg"/> + <Constant name="DOHM_R2_phi3" value="52.066*deg"/> + <Constant name="DOHM_R2_phi4" value="68.066*deg"/> + <Constant name="DOHM_R2_phi5" value="105.567*deg"/> + <Constant name="DOHM_R2_phi6" value="134.067*deg"/> + <Constant name="DOHM_R2_phi7" value="153.067*deg"/> + <Constant name="DOHM_R2_phi8" value="176.067*deg"/> + <Constant name="DOHM_R2_phi9" value="194.067*deg"/> + <Constant name="DOHM_R2_phi10" value="225.567*deg"/> + <Constant name="DOHM_R2_phi11" value="244.067*deg"/> + <Constant name="DOHM_R2_phi12" value="276.067*deg"/> + <Constant name="DOHM_R2_phi13" value="291.067*deg"/> + <Constant name="DOHM_R2_phi14" value="322.067*deg"/> + <Constant name="DOHM_R2_phi15" value="341.067*deg"/> + <Constant name="DOHM_R3_phi1" value="4.055*deg"/> + <Constant name="DOHM_R3_phi2" value="36.055*deg"/> + <Constant name="DOHM_R3_phi3" value="50.055*deg"/> + <Constant name="DOHM_R3_phi4" value="78.055*deg"/> + <Constant name="DOHM_R3_phi5" value="92.055*deg"/> + <Constant name="DOHM_R3_phi6" value="125.055*deg"/> + <Constant name="DOHM_R3_phi7" value="140.055*deg"/> + <Constant name="DOHM_R3_phi8" value="176.055*deg"/> + <Constant name="DOHM_R3_phi9" value="189.055*deg"/> + <Constant name="DOHM_R3_phi10" value="218.055*deg"/> + <Constant name="DOHM_R3_phi11" value="231.055*deg"/> + <Constant name="DOHM_R3_phi12" value="257.055*deg"/> + <Constant name="DOHM_R3_phi13" value="270.055*deg"/> + <Constant name="DOHM_R3_phi14" value="303.055*deg"/> + <Constant name="DOHM_R3_phi15" value="317.055*deg"/> + <Constant name="DOHM_R3_phi16" value="350.055*deg"/> + <Constant name="Tol" value="0.0*mm"/> + </ConstantsSection> + <SolidSection label="tob.xml"> + <Polycone name="TOB" startPhi="0*deg" deltaPhi="360*deg"> + <ZSection z="-[Zv3]" rMin="[Rin3]" rMax="[Rout]"/> + <ZSection z="-[Zv2]" rMin="[Rin3]" rMax="[Rout]"/> + <ZSection z="-[Zv2]" rMin="[Rin2]" rMax="[Rout]"/> + <ZSection z="-[Zv1]" rMin="[Rin2]" rMax="[Rout]"/> + <ZSection z="-[Zv0]" rMin="[Rin2]" rMax="[Rout]"/> + <ZSection z="-[Zv0]" rMin="[Rin1]" rMax="[Rout]"/> + <ZSection z="[Zv0]" rMin="[Rin1]" rMax="[Rout]"/> + <ZSection z="[Zv0]" rMin="[Rin2]" rMax="[Rout]"/> + <ZSection z="[Zv1]" rMin="[Rin2]" rMax="[Rout]"/> + <ZSection z="[Zv2]" rMin="[Rin2]" rMax="[Rout]"/> + <ZSection z="[Zv2]" rMin="[Rin3]" rMax="[Rout]"/> + <ZSection z="[Zv3]" rMin="[Rin3]" rMax="[Rout]"/> + </Polycone> + <Tubs name="TIBStiffener" rMin="[zero]" rMax="[StiffenerR]" dz="[StiffenerL]" startPhi="0*deg" deltaPhi="360*deg"/> + <Box name="TIBRailTop" dx="[RailDx]" dy="[RailTopDy]" dz="[RailL]"/> + <Box name="TIBRailBottom" dx="[RailDx]" dy="[RailBottomDy]" dz="[RailL]"/> + <Tubs name="TOBAlPiece1" rMin="[AlPieceR0]" rMax="[AlPieceR1]" dz="[AlPieceDz1]" startPhi="[AlPiecePhi1]" deltaPhi="[AlPieceDPhi1]"/> + <Tubs name="TOBAlPiece2" rMin="[AlPieceR0]" rMax="[AlPieceR1]" dz="[AlPieceDz1]" startPhi="[AlPiecePhi2]" deltaPhi="[AlPieceDPhi2]"/> + <Tubs name="TOBAlPiece3" rMin="[AlPieceR1]" rMax="[AlPieceR2]" dz="[AlPieceDz2]" startPhi="[AlPiecePhi3]" deltaPhi="[AlPieceDPhi3]"/> + <Tubs name="TOBAlPiece4" rMin="[AlPieceR1]" rMax="[AlPieceR2]" dz="[AlPieceDz2]" startPhi="[AlPiecePhi4]" deltaPhi="[AlPieceDPhi4]"/> + <Tubs name="TOBCFTube1" rMin="[CFTubeRin1]" rMax="[CFTubeRout1]" dz="[CFTubeL1]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBCFTube2" rMin="[CFTubeRin1]" rMax="[CFTubeRout1]" dz="[CFTubeL2]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBCFTube3" rMin="[CFTubeRin2]" rMax="[CFTubeRout2]" dz="[CFTubeL1]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBCFTube4" rMin="[CFTubeRin2]" rMax="[CFTubeRout2]" dz="[CFTubeL2]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBNomexTube1" rMin="[NomexTubeRin1]" rMax="[NomexTubeRout1]" dz="[CFTubeL1]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBNomexTube2" rMin="[NomexTubeRin1]" rMax="[NomexTubeRout1]" dz="[CFTubeL2]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBNomexTube3" rMin="[NomexTubeRin2]" rMax="[NomexTubeRout2]" dz="[CFTubeL1]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBNomexT3In1" rMin="[NomexTubeRin2]" rMax="[NomexTubeRout2]" dz="[CFTubeL1]" startPhi="-[NomexTubeF1]/2" deltaPhi="[NomexTubeF1]"/> + <Tubs name="TOBNomexT3In2" rMin="[NomexTubeRin2]" rMax="[NomexTubeRout2]" dz="[CFTubeL1]" startPhi="-[NomexTubeF2]/2" deltaPhi="[NomexTubeF2]"/> + <Tubs name="TOBNomexT3In3" rMin="[NomexTubeRin2]" rMax="[NomexTubeRout2]" dz="[CFTubeL1]" startPhi="-[NomexTubeF3]/2" deltaPhi="[NomexTubeF3]"/> + <Box name="TOBAlignTube3" dx="[AlignTubeDx]" dy="[AlignTubeDy]" dz="[CFTubeL1]"/> + <Box name="TOBAlignT3In" dx="([AlignTubeDx]-[AlignTubeT])" dy="([AlignTubeDy]-[AlignTubeT])" dz="[CFTubeL1]"/> + <Tubs name="TOBNomexTube4" rMin="[NomexTubeRin2]" rMax="[NomexTubeRout2]" dz="[CFTubeL2]" startPhi="0*deg" deltaPhi="360*deg"/> + <Box name="TOBAlignTube4" dx="[AlignTubeDx]" dy="[AlignTubeDy]" dz="[CFTubeL2]"/> + <Box name="TOBAlignT4In" dx="([AlignTubeDx]-[AlignTubeT])" dy="([AlignTubeDy]-[AlignTubeT])" dz="[CFTubeL2]"/> + <Tubs name="TOBNomexT4In1" rMin="[NomexTubeRin2]" rMax="[NomexTubeRout2]" dz="[CFTubeL2]" startPhi="-[NomexTubeF1]/2" deltaPhi="[NomexTubeF1]"/> + <Tubs name="TOBNomexT4In2" rMin="[NomexTubeRin2]" rMax="[NomexTubeRout2]" dz="[CFTubeL2]" startPhi="-[NomexTubeF2]/2" deltaPhi="[NomexTubeF2]"/> + <Tubs name="TOBNomexT4In3" rMin="[NomexTubeRin2]" rMax="[NomexTubeRout2]" dz="[CFTubeL2]" startPhi="-[NomexTubeF3]/2" deltaPhi="[NomexTubeF3]"/> + <Tubs name="TOBPotting1" rMin="[PottingRin1]" rMax="[PottingRout1]" dz="[PottingL]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBPotting2" rMin="[PottingRin2]" rMax="[PottingRout2]" dz="[PottingL]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBPotting2I1" rMin="[PottingRin2]" rMax="[PottingRout2]" dz="[PottingL]" startPhi="-[NomexTubeF1]/2" deltaPhi="[NomexTubeF1]"/> + <Tubs name="TOBPotting2I2" rMin="[PottingRin2]" rMax="[PottingRout2]" dz="[PottingL]" startPhi="-[NomexTubeF2]/2" deltaPhi="[NomexTubeF2]"/> + <Tubs name="TOBPotting2I3" rMin="[PottingRin2]" rMax="[PottingRout2]" dz="[PottingL]" startPhi="-[NomexTubeF3]/2" deltaPhi="[NomexTubeF3]"/> + <Tubs name="TOBConnect1" rMin="[ConnectRin1]" rMax="[ConnectRout1]" dz="[ConnectL1]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBAlConnect1" rMin="[ConnectRin1]" rMax="[ConnectRout1]" dz="[ConnectL1]" startPhi="-[ConnectDphi1]/2" deltaPhi="[ConnectDphi1]"/> + <Tubs name="TOBConnect2" rMin="[ConnectRin2]" rMax="[ConnectRout2]" dz="[ConnectL2]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBAlConnect2" rMin="[ConnectRin2]" rMax="[ConnectRout2]" dz="[ConnectL2]" startPhi="-[ConnectDphi2]/2" deltaPhi="[ConnectDphi2]"/> + <Tubs name="TOBConnect3" rMin="[ConnectRin3]" rMax="[ConnectRout3]" dz="[ConnectL3]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBAlConnect3" rMin="[ConnectRin3]" rMax="[ConnectRout3]" dz="[ConnectL3]" startPhi="-[ConnectDphi3]/2" deltaPhi="[ConnectDphi3]"/> + <Tubs name="TOBConnect23" rMin="[ConnectRout2]" rMax="[ConnectRin3]" dz="[ConnectL23]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBAlConnect23" rMin="[ConnectRout2]" rMax="[ConnectRin3]" dz="[ConnectL23]" startPhi="-[ConnectDphi3]/2" deltaPhi="[ConnectDphi3]"/> + <Tubs name="TOBConnect4" rMin="[ConnectRin4]" rMax="[ConnectRout4]" dz="[ConnectL4]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBAlConnect4" rMin="[ConnectRin4]" rMax="[ConnectRout4]" dz="[ConnectL4]" startPhi="-[ConnectDphi4]/2" deltaPhi="[ConnectDphi4]"/> + <Tubs name="TOBConnect5" rMin="[ConnectRin5]" rMax="[ConnectRout5]" dz="[ConnectL5]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBAlConnect5" rMin="[ConnectRin5]" rMax="[ConnectRout5]" dz="[ConnectL5]" startPhi="-[ConnectDphi5]/2" deltaPhi="[ConnectDphi5]"/> + <Tubs name="TOBConnect6" rMin="[ConnectRin6]" rMax="[ConnectRout6]" dz="[ConnectL6]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBAlConnect6" rMin="[ConnectRin6]" rMax="[ConnectRout6]" dz="[ConnectL6]" startPhi="-[ConnectDphi6]/2" deltaPhi="[ConnectDphi6]"/> + <Tubs name="TOBConnect56" rMin="[ConnectRout5]" rMax="[ConnectRin6]" dz="[ConnectL56]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBAlConnect56" rMin="[ConnectRout5]" rMax="[ConnectRin6]" dz="[ConnectL56]" startPhi="-[ConnectDphi6]/2" deltaPhi="[ConnectDphi6]"/> + <Tubs name="TOBMidRib0" rMin="[ConnectRin5]" rMax="[Layer0Rin]" dz="[RibDZ]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBMidRib1" rMin="[Layer0Rout]" rMax="[Layer1Rin]" dz="[RibDZ]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBMidRib2" rMin="[Layer1Rout]" rMax="[Layer2Rin]" dz="[RibDZ]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBMidRib3" rMin="[Layer2Rout]" rMax="[Layer3Rin]" dz="[RibDZ]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBMidRib4" rMin="[Layer3Rout]" rMax="[Layer4Rin]" dz="[RibDZ]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBMidRib5" rMin="[Layer4Rout]" rMax="[Layer5Rin]" dz="[RibDZ]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBMidRib6" rMin="[Layer5Rout]" rMax="[RibRout]" dz="[RibDZ]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBLayer0" rMin="[Layer0Rin]" rMax="[Layer0Rout]" dz="[tobrodpar:RodL]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBLayer1" rMin="[Layer1Rin]" rMax="[Layer1Rout]" dz="[tobrodpar:RodL]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBLayer2" rMin="[Layer2Rin]" rMax="[Layer2Rout]" dz="[tobrodpar:RodL]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBLayer3" rMin="[Layer3Rin]" rMax="[Layer3Rout]" dz="[tobrodpar:RodL]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBLayer4" rMin="[Layer4Rin]" rMax="[Layer4Rout]" dz="[tobrodpar:RodL]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBLayer5" rMin="[Layer5Rin]" rMax="[Layer5Rout]" dz="[tobrodpar:RodL]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBSideDisk" rMin="[Rin2]" rMax="[Rin3]" dz="[SideDiskDz]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBAxCabCont" rMin="[AxCableRin]" rMax="[AxCableRout]" dz="[AxCableDz]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBDOHMs" rMin="[Rin2]" rMax="[Rin3]" dz="[DOHMsDz]" startPhi="0*deg" deltaPhi="360*deg"/> + <Box name="TOBDOHM" dx="[DOHMW]" dy="[DOHML]" dz="[DOHMT]-[Tol]"/> + </SolidSection> + <LogicalPartSection label="tob.xml"> + <LogicalPart name="TOB" category="unspecified"> + <rSolid name="TOB"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TIBStiffener" category="unspecified"> + <rSolid name="TIBStiffener"/> + <rMaterial name="trackermaterial:T_CarbonFibreStr"/> + </LogicalPart> + <LogicalPart name="TIBRailTop" category="unspecified"> + <rSolid name="TIBRailTop"/> + <rMaterial name="tobmaterial:TIB_RailTop"/> + </LogicalPart> + <LogicalPart name="TIBRailBottom" category="unspecified"> + <rSolid name="TIBRailBottom"/> + <rMaterial name="tobmaterial:TIB_RailBottom"/> + </LogicalPart> + <LogicalPart name="TOBAlPiece1" category="unspecified"> + <rSolid name="TOBAlPiece1"/> + <rMaterial name="trackermaterial:T_Aluminium"/> + </LogicalPart> + <LogicalPart name="TOBAlPiece2" category="unspecified"> + <rSolid name="TOBAlPiece2"/> + <rMaterial name="trackermaterial:T_Aluminium"/> + </LogicalPart> + <LogicalPart name="TOBAlPiece3" category="unspecified"> + <rSolid name="TOBAlPiece3"/> + <rMaterial name="trackermaterial:T_Aluminium"/> + </LogicalPart> + <LogicalPart name="TOBAlPiece4" category="unspecified"> + <rSolid name="TOBAlPiece4"/> + <rMaterial name="trackermaterial:T_Aluminium"/> + </LogicalPart> + <LogicalPart name="TOBCFTube1" category="unspecified"> + <rSolid name="TOBCFTube1"/> + <rMaterial name="tobmaterial:TOB_CF_Str"/> + </LogicalPart> + <LogicalPart name="TOBCFTube2" category="unspecified"> + <rSolid name="TOBCFTube2"/> + <rMaterial name="tobmaterial:TOB_CF_Str"/> + </LogicalPart> + <LogicalPart name="TOBCFTube3" category="unspecified"> + <rSolid name="TOBCFTube3"/> + <rMaterial name="tobmaterial:TOB_CF_Str"/> + </LogicalPart> + <LogicalPart name="TOBCFTube4" category="unspecified"> + <rSolid name="TOBCFTube4"/> + <rMaterial name="tobmaterial:TOB_CF_Str"/> + </LogicalPart> + <LogicalPart name="TOBNomexTube1" category="unspecified"> + <rSolid name="TOBNomexTube1"/> + <rMaterial name="tobmaterial:TOB_Nomex"/> + </LogicalPart> + <LogicalPart name="TOBNomexTube2" category="unspecified"> + <rSolid name="TOBNomexTube2"/> + <rMaterial name="tobmaterial:TOB_Nomex"/> + </LogicalPart> + <LogicalPart name="TOBNomexTube3" category="unspecified"> + <rSolid name="TOBNomexTube3"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBNomexT3In1" category="unspecified"> + <rSolid name="TOBNomexT3In1"/> + <rMaterial name="tobmaterial:TOB_Nomex"/> + </LogicalPart> + <LogicalPart name="TOBNomexT3In2" category="unspecified"> + <rSolid name="TOBNomexT3In2"/> + <rMaterial name="tobmaterial:TOB_Nomex"/> + </LogicalPart> + <LogicalPart name="TOBNomexT3In3" category="unspecified"> + <rSolid name="TOBNomexT3In3"/> + <rMaterial name="tobmaterial:TOB_Nomex"/> + </LogicalPart> + <LogicalPart name="TOBAlignTube3" category="unspecified"> + <rSolid name="TOBAlignTube3"/> + <rMaterial name="tobmaterial:TOB_CF_Str"/> + </LogicalPart> + <LogicalPart name="TOBAlignT3In" category="unspecified"> + <rSolid name="TOBAlignT3In"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBNomexTube4" category="unspecified"> + <rSolid name="TOBNomexTube4"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBNomexT4In1" category="unspecified"> + <rSolid name="TOBNomexT4In1"/> + <rMaterial name="tobmaterial:TOB_Nomex"/> + </LogicalPart> + <LogicalPart name="TOBNomexT4In2" category="unspecified"> + <rSolid name="TOBNomexT4In2"/> + <rMaterial name="tobmaterial:TOB_Nomex"/> + </LogicalPart> + <LogicalPart name="TOBNomexT4In3" category="unspecified"> + <rSolid name="TOBNomexT4In3"/> + <rMaterial name="tobmaterial:TOB_Nomex"/> + </LogicalPart> + <LogicalPart name="TOBAlignTube4" category="unspecified"> + <rSolid name="TOBAlignTube4"/> + <rMaterial name="tobmaterial:TOB_CF_Str"/> + </LogicalPart> + <LogicalPart name="TOBAlignT4In" category="unspecified"> + <rSolid name="TOBAlignT4In"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBPotting1" category="unspecified"> + <rSolid name="TOBPotting1"/> + <rMaterial name="tobmaterial:TOB_Epoxy"/> + </LogicalPart> + <LogicalPart name="TOBPotting2" category="unspecified"> + <rSolid name="TOBPotting2"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBPotting2I1" category="unspecified"> + <rSolid name="TOBPotting2I1"/> + <rMaterial name="tobmaterial:TOB_Epoxy"/> + </LogicalPart> + <LogicalPart name="TOBPotting2I2" category="unspecified"> + <rSolid name="TOBPotting2I2"/> + <rMaterial name="tobmaterial:TOB_Epoxy"/> + </LogicalPart> + <LogicalPart name="TOBPotting2I3" category="unspecified"> + <rSolid name="TOBPotting2I3"/> + <rMaterial name="tobmaterial:TOB_Epoxy"/> + </LogicalPart> + <LogicalPart name="TOBConnect1" category="unspecified"> + <rSolid name="TOBConnect1"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBAlConnect1" category="unspecified"> + <rSolid name="TOBAlConnect1"/> + <rMaterial name="tobmaterial:TOB_AlCentralConnect"/> + </LogicalPart> + <LogicalPart name="TOBConnect2" category="unspecified"> + <rSolid name="TOBConnect2"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBAlConnect2" category="unspecified"> + <rSolid name="TOBAlConnect2"/> + <rMaterial name="tobmaterial:TOB_AlSideConnect"/> + </LogicalPart> + <LogicalPart name="TOBConnect3" category="unspecified"> + <rSolid name="TOBConnect3"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBAlConnect3" category="unspecified"> + <rSolid name="TOBAlConnect3"/> + <rMaterial name="tobmaterial:TOB_AlSideConnect"/> + </LogicalPart> + <LogicalPart name="TOBConnect23" category="unspecified"> + <rSolid name="TOBConnect23"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBAlConnect23" category="unspecified"> + <rSolid name="TOBAlConnect23"/> + <rMaterial name="trackermaterial:T_Aluminium"/> + </LogicalPart> + <LogicalPart name="TOBConnect4" category="unspecified"> + <rSolid name="TOBConnect4"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBAlConnect4" category="unspecified"> + <rSolid name="TOBAlConnect4"/> + <rMaterial name="tobmaterial:TOB_AlCentralConnect"/> + </LogicalPart> + <LogicalPart name="TOBConnect5" category="unspecified"> + <rSolid name="TOBConnect5"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBAlConnect5" category="unspecified"> + <rSolid name="TOBAlConnect5"/> + <rMaterial name="tobmaterial:TOB_AlSideConnect"/> + </LogicalPart> + <LogicalPart name="TOBConnect6" category="unspecified"> + <rSolid name="TOBConnect6"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBAlConnect6" category="unspecified"> + <rSolid name="TOBAlConnect6"/> + <rMaterial name="tobmaterial:TOB_AlSideConnect"/> + </LogicalPart> + <LogicalPart name="TOBConnect56" category="unspecified"> + <rSolid name="TOBConnect56"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBAlConnect56" category="unspecified"> + <rSolid name="TOBAlConnect56"/> + <rMaterial name="trackermaterial:T_Aluminium"/> + </LogicalPart> + <LogicalPart name="TOBMidRib0" category="unspecified"> + <rSolid name="TOBMidRib0"/> + <rMaterial name="tobmaterial:TOB_middle_ribs"/> + </LogicalPart> + <LogicalPart name="TOBMidRib1" category="unspecified"> + <rSolid name="TOBMidRib1"/> + <rMaterial name="tobmaterial:TOB_middle_ribs"/> + </LogicalPart> + <LogicalPart name="TOBMidRib2" category="unspecified"> + <rSolid name="TOBMidRib2"/> + <rMaterial name="tobmaterial:TOB_middle_ribs"/> + </LogicalPart> + <LogicalPart name="TOBMidRib3" category="unspecified"> + <rSolid name="TOBMidRib3"/> + <rMaterial name="tobmaterial:TOB_middle_ribs"/> + </LogicalPart> + <LogicalPart name="TOBMidRib4" category="unspecified"> + <rSolid name="TOBMidRib4"/> + <rMaterial name="tobmaterial:TOB_middle_ribs"/> + </LogicalPart> + <LogicalPart name="TOBMidRib5" category="unspecified"> + <rSolid name="TOBMidRib5"/> + <rMaterial name="tobmaterial:TOB_middle_ribs"/> + </LogicalPart> + <LogicalPart name="TOBMidRib6" category="unspecified"> + <rSolid name="TOBMidRib6"/> + <rMaterial name="tobmaterial:TOB_middle_ribs"/> + </LogicalPart> + <LogicalPart name="TOBDOHM" category="unspecified"> + <rSolid name="TOBDOHM"/> + <rMaterial name="tobmaterial:TOB_DOHM"/> + </LogicalPart> + <LogicalPart name="TOBLayer0" category="unspecified"> + <rSolid name="TOBLayer0"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBLayer1" category="unspecified"> + <rSolid name="TOBLayer1"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBLayer2" category="unspecified"> + <rSolid name="TOBLayer2"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBLayer3" category="unspecified"> + <rSolid name="TOBLayer3"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBLayer4" category="unspecified"> + <rSolid name="TOBLayer4"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBLayer5" category="unspecified"> + <rSolid name="TOBLayer5"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBSideDisk" category="unspecified"> + <rSolid name="TOBSideDisk"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBAxCabCont" category="unspecified"> + <rSolid name="TOBAxCabCont"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBDOHMs" category="unspecified"> + <rSolid name="TOBDOHMs"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tob.xml"> + <PosPart copyNumber="1"> + <rParent name="tob:TOB"/> + <rChild name="tob:TIBStiffener"/> + <Translation x="[RailInX]" y="[StiffenerY]" z="[zero]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tob:TOB"/> + <rChild name="tob:TIBStiffener"/> + <Translation x="-[RailInX]" y="[StiffenerY]" z="[zero]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tob:TOB"/> + <rChild name="tob:TIBRailTop"/> + <Translation x="[RailInX]" y="-[RailTopDy]" z="[zero]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tob:TOB"/> + <rChild name="tob:TIBRailTop"/> + <Translation x="-[RailInX]" y="-[RailTopDy]" z="[zero]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tob:TOB"/> + <rChild name="tob:TIBRailBottom"/> + <Translation x="[RailInX]" y="-2*[RailTopDy]-[RailBottomDy]" z="[zero]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tob:TOB"/> + <rChild name="tob:TIBRailBottom"/> + <Translation x="-[RailInX]" y="-2*[RailTopDy]-[RailBottomDy]" z="[zero]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tob:TOB"/> + <rChild name="tob:TOBAlPiece1"/> + <Translation x="[zero]" y="[zero]" z="-[AlPieceZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tob:TOB"/> + <rChild name="tob:TOBAlPiece1"/> + <Translation x="[zero]" y="[zero]" z="[AlPieceZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tob:TOB"/> + <rChild name="tob:TOBAlPiece2"/> + <Translation x="[zero]" y="[zero]" z="-[AlPieceZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tob:TOB"/> + <rChild name="tob:TOBAlPiece2"/> + <Translation x="[zero]" y="[zero]" z="[AlPieceZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tob:TOB"/> + <rChild name="tob:TOBAlPiece3"/> + <Translation x="[zero]" y="[zero]" z="-[AlPieceZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tob:TOB"/> + <rChild name="tob:TOBAlPiece3"/> + <Translation x="[zero]" y="[zero]" z="[AlPieceZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tob:TOB"/> + <rChild name="tob:TOBAlPiece4"/> + <Translation x="[zero]" y="[zero]" z="-[AlPieceZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tob:TOB"/> + <rChild name="tob:TOBAlPiece4"/> + <Translation x="[zero]" y="[zero]" z="[AlPieceZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tob:TOB"/> + <rChild name="tob:TOBCFTube1"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tob:TOBCFTube1"/> + <rChild name="tob:TOBNomexTube1"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tob:TOB"/> + <rChild name="tob:TOBCFTube2"/> + <Translation x="[zero]" y="[zero]" z="[CFTubeZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tob:TOB"/> + <rChild name="tob:TOBCFTube2"/> + <Translation x="[zero]" y="[zero]" z="-[CFTubeZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tob:TOBCFTube2"/> + <rChild name="tob:TOBNomexTube2"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tob:TOB"/> + <rChild name="tob:TOBCFTube3"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tob:TOBCFTube3"/> + <rChild name="tob:TOBNomexTube3"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tob:TOBAlignTube3"/> + <rChild name="tob:TOBAlignT3In"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tob:TOB"/> + <rChild name="tob:TOBCFTube4"/> + <Translation x="[zero]" y="[zero]" z="[CFTubeZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tob:TOB"/> + <rChild name="tob:TOBCFTube4"/> + <Translation x="[zero]" y="[zero]" z="-[CFTubeZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tob:TOBCFTube4"/> + <rChild name="tob:TOBNomexTube4"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tob:TOBAlignTube4"/> + <rChild name="tob:TOBAlignT4In"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tob:TOB"/> + <rChild name="tob:TOBLayer0"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tob:TOB"/> + <rChild name="tob:TOBLayer1"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tob:TOB"/> + <rChild name="tob:TOBLayer2"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tob:TOB"/> + <rChild name="tob:TOBLayer3"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tob:TOB"/> + <rChild name="tob:TOBLayer4"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tob:TOB"/> + <rChild name="tob:TOBLayer5"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tob:TOB"/> + <rChild name="tob:TOBSideDisk"/> + <Translation x="[zero]" y="[zero]" z="[SideDiskZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tob:TOB"/> + <rChild name="tob:TOBSideDisk"/> + <rRotation name="tobrodpar:180D"/> + <Translation x="[zero]" y="[zero]" z="-[SideDiskZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tob:TOB"/> + <rChild name="tob:TOBDOHMs"/> + <Translation x="[zero]" y="[zero]" z="[SideDiskZ]+[SideDiskDz]+[DOHMsDz]+[Tol]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tob:TOB"/> + <rChild name="tob:TOBDOHMs"/> + <Translation x="[zero]" y="[zero]" z="-([SideDiskZ]+[SideDiskDz]+[DOHMsDz]+[Tol])"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tob:TOB"/> + <rChild name="tob:TOBAxCabCont"/> + <Translation x="[zero]" y="[zero]" z="[AxCableZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tob:TOB"/> + <rChild name="tob:TOBAxCabCont"/> + <Translation x="[zero]" y="[zero]" z="-[AxCableZ]"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTrackerZPosAlgo"> + <rParent name="tob:TOB"/> + <String name="ChildName" value="tob:TOBPotting1"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="ZPositions" type="numeric" nEntries="6"> + -[PottingZ1],-[PottingZ2],-[PottingZ3], [PottingZ3], [PottingZ2], [PottingZ1] + </Vector> + <Vector name="Rotations" type="string" nEntries="6"> + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, + tobrodpar:NULL, tobrodpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerZPosAlgo"> + <rParent name="tob:TOB"/> + <String name="ChildName" value="tob:TOBPotting2"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="ZPositions" type="numeric" nEntries="6"> + -[PottingZ1],-[PottingZ2],-[PottingZ3], [PottingZ3], [PottingZ2], [PottingZ1] + </Vector> + <Vector name="Rotations" type="string" nEntries="6"> + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, + tobrodpar:NULL, tobrodpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerZPosAlgo"> + <rParent name="tob:TOB"/> + <String name="ChildName" value="tob:TOBConnect2"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="ZPositions" type="numeric" nEntries="6"> + -[ConnectZ21],-[ConnectZ22],-[ConnectZ23], [ConnectZ23], + [ConnectZ22], [ConnectZ21] </Vector> + <Vector name="Rotations" type="string" nEntries="6"> + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, + tobrodpar:NULL, tobrodpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tob:TOBConnect2"/> + <String name="ChildName" value="tob:TOBAlConnect2"/> + <Numeric name="N" value="16"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[ConnectStartPhi]"/> + <Numeric name="Radius" value="0"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tob:TOBConnect2"/> + <String name="ChildName" value="tob:TOBAlConnect2"/> + <Numeric name="N" value="2"/> + <Numeric name="StartCopyNo" value="17"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="0*deg"/> + <Numeric name="Radius" value="0"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerZPosAlgo"> + <rParent name="tob:TOB"/> + <String name="ChildName" value="tob:TOBConnect3"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="ZPositions" type="numeric" nEntries="6"> + -[ConnectZ21],-[ConnectZ22],-[ConnectZ23], [ConnectZ23], + [ConnectZ22], [ConnectZ21] </Vector> + <Vector name="Rotations" type="string" nEntries="6"> + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, + tobrodpar:NULL, tobrodpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerZPosAlgo"> + <rParent name="tob:TOB"/> + <String name="ChildName" value="tob:TOBConnect23"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="ZPositions" type="numeric" nEntries="6"> + -[ConnectZ21]-[Connect23ZOffset],-[ConnectZ22]+[Connect23ZOffset],-[ConnectZ23]-[Connect23ZOffset], [ConnectZ23]+[Connect23ZOffset], + [ConnectZ22]-[Connect23ZOffset], [ConnectZ21]+[Connect23ZOffset] </Vector> + <Vector name="Rotations" type="string" nEntries="6"> + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, + tobrodpar:NULL, tobrodpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tob:TOBConnect3"/> + <String name="ChildName" value="tob:TOBAlConnect3"/> + <Numeric name="N" value="16"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[ConnectStartPhi]"/> + <Numeric name="Radius" value="0"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tob:TOBConnect3"/> + <String name="ChildName" value="tob:TOBAlConnect3"/> + <Numeric name="N" value="2"/> + <Numeric name="StartCopyNo" value="17"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="0*deg"/> + <Numeric name="Radius" value="0"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tob:TOBConnect23"/> + <String name="ChildName" value="tob:TOBAlConnect23"/> + <Numeric name="N" value="16"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[ConnectStartPhi]"/> + <Numeric name="Radius" value="0"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tob:TOBConnect23"/> + <String name="ChildName" value="tob:TOBAlConnect23"/> + <Numeric name="N" value="2"/> + <Numeric name="StartCopyNo" value="17"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="0*deg"/> + <Numeric name="Radius" value="0"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tob:TOBConnect4"/> + <String name="ChildName" value="tob:TOBAlConnect4"/> + <Numeric name="N" value="2"/> + <Numeric name="StartCopyNo" value="17"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="0*deg"/> + <Numeric name="Radius" value="0"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerZPosAlgo"> + <rParent name="tob:TOB"/> + <String name="ChildName" value="tob:TOBConnect5"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="ZPositions" type="numeric" nEntries="6"> + -[ConnectZ21],-[ConnectZ22],-[ConnectZ23], [ConnectZ23], + [ConnectZ22], [ConnectZ21] </Vector> + <Vector name="Rotations" type="string" nEntries="6"> + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, + tobrodpar:NULL, tobrodpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tob:TOBConnect5"/> + <String name="ChildName" value="tob:TOBAlConnect5"/> + <Numeric name="N" value="16"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[ConnectStartPhi]"/> + <Numeric name="Radius" value="0"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tob:TOBConnect5"/> + <String name="ChildName" value="tob:TOBAlConnect5"/> + <Numeric name="N" value="2"/> + <Numeric name="StartCopyNo" value="17"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="0*deg"/> + <Numeric name="Radius" value="0"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerZPosAlgo"> + <rParent name="tob:TOB"/> + <String name="ChildName" value="tob:TOBConnect6"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="ZPositions" type="numeric" nEntries="6"> + -[ConnectZ21],-[ConnectZ22],-[ConnectZ23], [ConnectZ23], + [ConnectZ22], [ConnectZ21] </Vector> + <Vector name="Rotations" type="string" nEntries="6"> + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, + tobrodpar:NULL, tobrodpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerZPosAlgo"> + <rParent name="tob:TOB"/> + <String name="ChildName" value="tob:TOBConnect56"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="ZPositions" type="numeric" nEntries="6"> + -[ConnectZ21]-[Connect56ZOffset],-[ConnectZ22]+[Connect56ZOffset],-[ConnectZ23]-[Connect56ZOffset], [ConnectZ23]+[Connect56ZOffset], + [ConnectZ22]-[Connect56ZOffset], [ConnectZ21]+[Connect56ZOffset] </Vector> + <Vector name="Rotations" type="string" nEntries="6"> + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, + tobrodpar:NULL, tobrodpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tob:TOBConnect6"/> + <String name="ChildName" value="tob:TOBAlConnect6"/> + <Numeric name="N" value="16"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[ConnectStartPhi]"/> + <Numeric name="Radius" value="0"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tob:TOBConnect6"/> + <String name="ChildName" value="tob:TOBAlConnect6"/> + <Numeric name="N" value="2"/> + <Numeric name="StartCopyNo" value="17"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="0*deg"/> + <Numeric name="Radius" value="0"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tob:TOBConnect56"/> + <String name="ChildName" value="tob:TOBAlConnect56"/> + <Numeric name="N" value="16"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="[ConnectStartPhi]"/> + <Numeric name="Radius" value="0"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="tob:TOBConnect56"/> + <String name="ChildName" value="tob:TOBAlConnect56"/> + <Numeric name="N" value="2"/> + <Numeric name="StartCopyNo" value="17"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="0*deg"/> + <Numeric name="Radius" value="0"/> + <Vector name="Center" type="numeric" nEntries="3"> 0, 0, 0 </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerZPosAlgo"> + <rParent name="tob:TOB"/> + <String name="ChildName" value="tob:TOBMidRib0"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="ZPositions" type="numeric" nEntries="4"> + -[RibZ1], -[RibZ2], [RibZ2], [RibZ1] </Vector> + <Vector name="Rotations" type="string" nEntries="4"> + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerZPosAlgo"> + <rParent name="tob:TOB"/> + <String name="ChildName" value="tob:TOBMidRib1"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="ZPositions" type="numeric" nEntries="4"> + -[RibZ1], -[RibZ2], [RibZ2], [RibZ1] </Vector> + <Vector name="Rotations" type="string" nEntries="4"> + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerZPosAlgo"> + <rParent name="tob:TOB"/> + <String name="ChildName" value="tob:TOBMidRib2"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="ZPositions" type="numeric" nEntries="4"> + -[RibZ1], -[RibZ2], [RibZ2], [RibZ1] </Vector> + <Vector name="Rotations" type="string" nEntries="4"> + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerZPosAlgo"> + <rParent name="tob:TOB"/> + <String name="ChildName" value="tob:TOBMidRib3"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="ZPositions" type="numeric" nEntries="4"> + -[RibZ1], -[RibZ2], [RibZ2], [RibZ1] </Vector> + <Vector name="Rotations" type="string" nEntries="4"> + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerZPosAlgo"> + <rParent name="tob:TOB"/> + <String name="ChildName" value="tob:TOBMidRib4"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="ZPositions" type="numeric" nEntries="4"> + -[RibZ1], -[RibZ2], [RibZ2], [RibZ1] </Vector> + <Vector name="Rotations" type="string" nEntries="4"> + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerZPosAlgo"> + <rParent name="tob:TOB"/> + <String name="ChildName" value="tob:TOBMidRib5"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="ZPositions" type="numeric" nEntries="4"> + -[RibZ1], -[RibZ2], [RibZ2], [RibZ1] </Vector> + <Vector name="Rotations" type="string" nEntries="4"> + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerZPosAlgo"> + <rParent name="tob:TOB"/> + <String name="ChildName" value="tob:TOBMidRib6"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="ZPositions" type="numeric" nEntries="4"> + -[RibZ1], -[RibZ2], [RibZ2], [RibZ1] </Vector> + <Vector name="Rotations" type="string" nEntries="4"> + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL</Vector> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAltAlgo"> + <rParent name="tob:TOBLayer0"/> + <String name="ChildName" value="tobrod0:TOBRod0"/> + <Numeric name="Tilt" value="[DetectorTilt]"/> + <Numeric name="StartAngle" value="5.3571*deg"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="RadiusIn" value="[Layer0LowR]"/> + <Numeric name="RadiusOut" value="[Layer0HighR]"/> + <Numeric name="ZPosition" value="[zero]"/> + <Numeric name="Number" value="42"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAltAlgo"> + <rParent name="tob:TOBLayer1"/> + <String name="ChildName" value="tobrod1:TOBRod1"/> + <Numeric name="Tilt" value="[DetectorTilt]"/> + <Numeric name="StartAngle" value="2.1601*deg"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="RadiusIn" value="[Layer1LowR]"/> + <Numeric name="RadiusOut" value="[Layer1HighR]"/> + <Numeric name="ZPosition" value="[zero]"/> + <Numeric name="Number" value="48"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAltAlgo"> + <rParent name="tob:TOBLayer2"/> + <String name="ChildName" value="tobrod2:TOBRod2"/> + <Numeric name="Tilt" value="[DetectorTilt]"/> + <Numeric name="StartAngle" value="13.0309*deg"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="RadiusIn" value="[Layer2LowR]"/> + <Numeric name="RadiusOut" value="[Layer2HighR]"/> + <Numeric name="ZPosition" value="[zero]"/> + <Numeric name="Number" value="54"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAltAlgo"> + <rParent name="tob:TOBLayer3"/> + <String name="ChildName" value="tobrod3:TOBRod3"/> + <Numeric name="Tilt" value="[DetectorTilt]"/> + <Numeric name="StartAngle" value="1.5802*deg"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="RadiusIn" value="[Layer3LowR]"/> + <Numeric name="RadiusOut" value="[Layer3HighR]"/> + <Numeric name="ZPosition" value="[zero]"/> + <Numeric name="Number" value="60"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAltAlgo"> + <rParent name="tob:TOBLayer4"/> + <String name="ChildName" value="tobrod4:TOBRod4"/> + <Numeric name="Tilt" value="[DetectorTilt]"/> + <Numeric name="StartAngle" value="8.4397*deg"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="RadiusIn" value="[Layer4LowR]"/> + <Numeric name="RadiusOut" value="[Layer4HighR]"/> + <Numeric name="ZPosition" value="[zero]"/> + <Numeric name="Number" value="66"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAltAlgo"> + <rParent name="tob:TOBLayer5"/> + <String name="ChildName" value="tobrod5:TOBRod5"/> + <Numeric name="Tilt" value="[DetectorTilt]"/> + <Numeric name="StartAngle" value="1.3779*deg"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="RadiusIn" value="[Layer5LowR]"/> + <Numeric name="RadiusOut" value="[Layer5HighR]"/> + <Numeric name="ZPosition" value="[zero]"/> + <Numeric name="Number" value="74"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tob:TOBNomexTube3"/> + <String name="ChildName" value="tob:TOBNomexT3In1"/> + <Numeric name="Radius" value="[zero]"/> + <Numeric name="Tilt" value="0*deg"/> + <Vector name="Phi" type="numeric" nEntries="5"> + [NomexInPhi1], [NomexInPhi3], [NomexInPhi4], [NomexInPhi6], [NomexInPhi8] + </Vector> + <Vector name="ZPos" type="numeric" nEntries="5"> + [zero], [zero], [zero], [zero], [zero] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tob:TOBNomexTube3"/> + <String name="ChildName" value="tob:TOBNomexT3In2"/> + <Numeric name="Radius" value="[zero]"/> + <Numeric name="Tilt" value="0*deg"/> + <Vector name="Phi" type="numeric" nEntries="2"> + [NomexInPhi2], [NomexInPhi7] + </Vector> + <Vector name="ZPos" type="numeric" nEntries="2"> + [zero], [zero] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tob:TOBNomexTube3"/> + <String name="ChildName" value="tob:TOBNomexT3In3"/> + <Numeric name="Radius" value="[zero]"/> + <Numeric name="Tilt" value="0*deg"/> + <Vector name="Phi" type="numeric" nEntries="1"> + [NomexInPhi5] + </Vector> + <Vector name="ZPos" type="numeric" nEntries="1"> + [zero] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tob:TOBNomexTube3"/> + <String name="ChildName" value="tob:TOBAlignTube3"/> + <Numeric name="Radius" value="([NomexTubeRin2]+[NomexTubeRout2])/2"/> + <Numeric name="Tilt" value="0*deg"/> + <Vector name="Phi" type="numeric" nEntries="8"> + [AlignPhi1], [AlignPhi2], [AlignPhi3], [AlignPhi4], + [AlignPhi5], [AlignPhi6], [AlignPhi7], [AlignPhi8] + </Vector> + <Vector name="ZPos" type="numeric" nEntries="8"> + [zero], [zero], [zero], [zero], [zero], [zero], [zero], [zero] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tob:TOBNomexTube4"/> + <String name="ChildName" value="tob:TOBNomexT4In1"/> + <Numeric name="Radius" value="[zero]"/> + <Numeric name="Tilt" value="0*deg"/> + <Vector name="Phi" type="numeric" nEntries="5"> + [NomexInPhi1], [NomexInPhi3], [NomexInPhi4], [NomexInPhi6], [NomexInPhi8] + </Vector> + <Vector name="ZPos" type="numeric" nEntries="5"> + [zero], [zero], [zero], [zero], [zero] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tob:TOBNomexTube4"/> + <String name="ChildName" value="tob:TOBNomexT4In2"/> + <Numeric name="Radius" value="[zero]"/> + <Numeric name="Tilt" value="0*deg"/> + <Vector name="Phi" type="numeric" nEntries="2"> + [NomexInPhi2], [NomexInPhi7] + </Vector> + <Vector name="ZPos" type="numeric" nEntries="2"> + [zero], [zero] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tob:TOBNomexTube4"/> + <String name="ChildName" value="tob:TOBNomexT4In3"/> + <Numeric name="Radius" value="[zero]"/> + <Numeric name="Tilt" value="0*deg"/> + <Vector name="Phi" type="numeric" nEntries="1"> + [NomexInPhi5] + </Vector> + <Vector name="ZPos" type="numeric" nEntries="1"> + [zero] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tob:TOBNomexTube4"/> + <String name="ChildName" value="tob:TOBAlignTube4"/> + <Numeric name="Radius" value="([NomexTubeRin2]+[NomexTubeRout2])/2"/> + <Numeric name="Tilt" value="0*deg"/> + <Vector name="Phi" type="numeric" nEntries="8"> + [AlignPhi1], [AlignPhi2], [AlignPhi3], [AlignPhi4], + [AlignPhi5], [AlignPhi6], [AlignPhi7], [AlignPhi8] + </Vector> + <Vector name="ZPos" type="numeric" nEntries="8"> + [zero], [zero], [zero], [zero], [zero], [zero], [zero], [zero] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tob:TOBPotting2"/> + <String name="ChildName" value="tob:TOBPotting2I1"/> + <Numeric name="Radius" value="[zero]"/> + <Numeric name="Tilt" value="0*deg"/> + <Vector name="Phi" type="numeric" nEntries="5"> + [NomexInPhi1], [NomexInPhi3], [NomexInPhi4], [NomexInPhi6], [NomexInPhi8] + </Vector> + <Vector name="ZPos" type="numeric" nEntries="5"> + [zero], [zero], [zero], [zero], [zero] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tob:TOBPotting2"/> + <String name="ChildName" value="tob:TOBPotting2I2"/> + <Numeric name="Radius" value="[zero]"/> + <Numeric name="Tilt" value="0*deg"/> + <Vector name="Phi" type="numeric" nEntries="2"> + [NomexInPhi2], [NomexInPhi7] + </Vector> + <Vector name="ZPos" type="numeric" nEntries="2"> + [zero], [zero] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tob:TOBPotting2"/> + <String name="ChildName" value="tob:TOBPotting2I3"/> + <Numeric name="Radius" value="[zero]"/> + <Numeric name="Tilt" value="0*deg"/> + <Vector name="Phi" type="numeric" nEntries="1"> + [NomexInPhi5] + </Vector> + <Vector name="ZPos" type="numeric" nEntries="1"> + [zero] + </Vector> + </Algorithm> + <Algorithm name="track:DDTOBRadCableAlgo"> + <rParent name="tob:TOBSideDisk"/> + <Numeric name="DiskDz" value="[SideDiskDz]"/> + <Numeric name="RMax" value="[Rin3]"/> + <Numeric name="CableT" value="0.7*cm"/> + <Vector name="RodRin" type="numeric" nEntries="6"> + [Layer0LowR], [Layer1LowR], [Layer2LowR], + [Layer3LowR], [Layer4LowR], [Layer5LowR] + </Vector> + <Vector name="RodRout" type="numeric" nEntries="6"> + [Layer0HighR], [Layer1HighR], [Layer2HighR], + [Layer3HighR], [Layer4HighR], [Layer5HighR] + </Vector> + <Vector name="CableMaterial" type="string" nEntries="6"> + tobmaterial:TOB_rad_services1, tobmaterial:TOB_rad_services2, + tobmaterial:TOB_rad_services3, tobmaterial:TOB_rad_services4, + tobmaterial:TOB_rad_services5, tobmaterial:TOB_rad_services6 + </Vector> + <Numeric name="ConnW" value="4.0*cm"/> + <Numeric name="ConnT" value="2.3*cm"/> + <Vector name="ConnMaterial" type="string" nEntries="6"> + tobmaterial:TOB_rib1, tobmaterial:TOB_rib2, tobmaterial:TOB_rib3, + tobmaterial:TOB_rib4, tobmaterial:TOB_rib5, tobmaterial:TOB_rib6 + </Vector> + <Numeric name="CoolRin" value="[zero]"/> + <Numeric name="CoolRout1" value="3.0*mm"/> + <Numeric name="CoolRout2" value="2.8*mm"/> + <Numeric name="CoolStartPhi1" value="0*deg"/> + <Numeric name="CoolDeltaPhi1" value="360*deg"/> + <Numeric name="CoolStartPhi2" value="0*deg"/> + <Numeric name="CoolDeltaPhi2" value="360*deg"/> + <Vector name="CoolR1" type="numeric" nEntries="6"> + [Layer0CoolRa], [Layer1CoolRa], [Layer2CoolRa], + [Layer3CoolRa], [Layer4CoolRa], [Layer5CoolRa] + </Vector> + <Vector name="CoolR2" type="numeric" nEntries="6"> + [Layer0CoolRr], [Layer1CoolRr], [Layer2CoolRr], + [Layer3CoolRr], [Layer4CoolRr], [Layer5CoolRr] + </Vector> + <String name="CoolMaterial1" value="trackermaterial:T_CuNi"/> + <String name="CoolMaterial2" value="trackermaterial:T_C6F14_F2_-30C"/> + <Vector name="RingName" type="string" nEntries="6"> + 1, 2, 3, 4, 5, 6 + </Vector> + </Algorithm> + <Algorithm name="track:DDTOBAxCableAlgo"> + <rParent name="tob:TOBAxCabCont"/> + <Vector name="SectorNumber" type="string" nEntries="18"> + 1 , 2 , 3 , 4 , 5 , 6 , + 7 , 8 , 9 , 10 , 11 , 12 , + 13 , 14 , 15 , 16 , 17 , 18 + </Vector> + <Numeric name="SectorRin" value="[AxCableRin]"/> + <Numeric name="SectorRout" value="[AxCableRout]"/> + <Numeric name="SectorDz" value="[AxCableDz]"/> + <Numeric name="SectorDeltaPhi_B" value="2*deg"/> + <Vector name="SectorStartPhi" type="numeric" nEntries="18"> + -10*deg , 10*deg , 30*deg , 50*deg , 70*deg , 90*deg , + 110*deg , 130*deg , 150*deg , 170*deg , 190*deg , 210*deg , + 230*deg , 250*deg , 270*deg , 290*deg , 310*deg , 330*deg + </Vector> + <Vector name="SectorMaterial_A" type="string" nEntries="18"> + materials:Air , tobmaterial:TOB_ax_services_A2 , + tobmaterial:TOB_ax_services_A3 , tobmaterial:TOB_ax_services_A4 , + tobmaterial:TOB_ax_services_A5 , materials:Air , + tobmaterial:TOB_ax_services_A7 , tobmaterial:TOB_ax_services_A8 , + tobmaterial:TOB_ax_services_A9 , materials:Air , + tobmaterial:TOB_ax_services_A11 , tobmaterial:TOB_ax_services_A12 , + tobmaterial:TOB_ax_services_A13 , tobmaterial:TOB_ax_services_A14 , + materials:Air , tobmaterial:TOB_ax_services_A16 , + tobmaterial:TOB_ax_services_A17 , tobmaterial:TOB_ax_services_A18 + </Vector> + <Vector name="SectorMaterial_B" type="string" nEntries="18"> + materials:Air , tobmaterial:TOB_ax_services_B2 , + tobmaterial:TOB_ax_services_B3 , tobmaterial:TOB_ax_services_B4 , + tobmaterial:TOB_ax_services_B5 , tobmaterial:TOB_ax_services_B6 , + tobmaterial:TOB_ax_services_B7 , tobmaterial:TOB_ax_services_B8 , + tobmaterial:TOB_ax_services_B9 , materials:Air , + tobmaterial:TOB_ax_services_B11 , tobmaterial:TOB_ax_services_B12 , + tobmaterial:TOB_ax_services_B13 , tobmaterial:TOB_ax_services_B14 , + tobmaterial:TOB_ax_services_B15 , tobmaterial:TOB_ax_services_B16 , + tobmaterial:TOB_ax_services_B17 , tobmaterial:TOB_ax_services_B18 + </Vector> + <Vector name="SectorMaterial_C" type="string" nEntries="18"> + materials:Air , tobmaterial:TOB_ax_services_C2 , + tobmaterial:TOB_ax_services_C3 , tobmaterial:TOB_ax_services_C4 , + materials:Air , tobmaterial:TOB_ax_services_C6 , + tobmaterial:TOB_ax_services_C7 , tobmaterial:TOB_ax_services_C8 , + tobmaterial:TOB_ax_services_C9 , materials:Air , + tobmaterial:TOB_ax_services_C11 , tobmaterial:TOB_ax_services_C12 , + tobmaterial:TOB_ax_services_C13 , materials:Air , + tobmaterial:TOB_ax_services_C15 , tobmaterial:TOB_ax_services_C16 , + tobmaterial:TOB_ax_services_C17 , tobmaterial:TOB_ax_services_C18 + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tob:TOBDOHMs"/> + <String name="ChildName" value="tob:TOBDOHM"/> + <Numeric name="Radius" value="[DOHMRadius1]"/> + <Numeric name="Tilt" value="0*deg"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="Phi" type="numeric" nEntries="15"> + [DOHM_R1_phi1] , [DOHM_R1_phi2] , [DOHM_R1_phi3] , [DOHM_R1_phi4] , [DOHM_R1_phi5] , + [DOHM_R1_phi6] , [DOHM_R1_phi7] , [DOHM_R1_phi8] , [DOHM_R1_phi9] , [DOHM_R1_phi10] , + [DOHM_R1_phi11] , [DOHM_R1_phi12] , [DOHM_R1_phi13] , [DOHM_R1_phi14] , [DOHM_R1_phi15] + </Vector> + <Vector name="ZPos" type="numeric" nEntries="15"> + [zero] , [zero] , [zero] , [zero] , [zero] , + [zero] , [zero] , [zero] , [zero] , [zero] , + [zero] , [zero] , [zero] , [zero] , [zero] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tob:TOBDOHMs"/> + <String name="ChildName" value="tob:TOBDOHM"/> + <Numeric name="Radius" value="[DOHMRadius2]"/> + <Numeric name="Tilt" value="0*deg"/> + <Numeric name="StartCopyNo" value="16"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="Phi" type="numeric" nEntries="15"> + [DOHM_R2_phi1] , [DOHM_R2_phi2] , [DOHM_R2_phi3] , [DOHM_R2_phi4] , [DOHM_R2_phi5] , + [DOHM_R2_phi6] , [DOHM_R2_phi7] , [DOHM_R2_phi8] , [DOHM_R2_phi9] , [DOHM_R2_phi10] , + [DOHM_R2_phi11] , [DOHM_R2_phi12] , [DOHM_R2_phi13] , [DOHM_R2_phi14] , [DOHM_R2_phi15] + </Vector> + <Vector name="ZPos" type="numeric" nEntries="15"> + [zero] , [zero] , [zero] , [zero] , [zero] , + [zero] , [zero] , [zero] , [zero] , [zero] , + [zero] , [zero] , [zero] , [zero] , [zero] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerPhiAlgo"> + <rParent name="tob:TOBDOHMs"/> + <String name="ChildName" value="tob:TOBDOHM"/> + <Numeric name="Radius" value="[DOHMRadius3]"/> + <Numeric name="Tilt" value="0*deg"/> + <Numeric name="StartCopyNo" value="31"/> + <Numeric name="IncrCopyNo" value="1"/> + <Vector name="Phi" type="numeric" nEntries="16"> + [DOHM_R3_phi1] , [DOHM_R3_phi2] , [DOHM_R3_phi3] , [DOHM_R3_phi4] , [DOHM_R3_phi5] , + [DOHM_R3_phi6] , [DOHM_R3_phi7] , [DOHM_R3_phi8] , [DOHM_R3_phi9] , [DOHM_R3_phi10] , + [DOHM_R3_phi11] , [DOHM_R3_phi12] , [DOHM_R3_phi13] , [DOHM_R3_phi14] , [DOHM_R3_phi15] , + [DOHM_R3_phi16] + </Vector> + <Vector name="ZPos" type="numeric" nEntries="16"> + [zero] , [zero] , [zero] , [zero] , [zero] , + [zero] , [zero] , [zero] , [zero] , [zero] , + [zero] , [zero] , [zero] , [zero] , [zero] , + [zero] + </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tobmaterial.xml b/examples/DDCMS/data/tobmaterial.xml new file mode 100644 index 000000000..ac5449870 --- /dev/null +++ b/examples/DDCMS/data/tobmaterial.xml @@ -0,0 +1,2248 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <MaterialSection label="tobmaterial.xml"> + <CompositeMaterial name="TOB_PA_rphi" density="2.33941*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.60133"> + <rMaterial name="materials:Borosilicate_Glass" /> + </MaterialFraction> + <MaterialFraction fraction="0.39867"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_PA_ster" density="2.52355*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.61865"> + <rMaterial name="materials:Borosilicate_Glass" /> + </MaterialFraction> + <MaterialFraction fraction="0.38135"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_frame_ele" density="1.53600*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.99614"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + <MaterialFraction fraction="0.00386"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_hybrid_supp" density="3.05582*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="1.00000"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_mod_cool1" density="3.96724*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.81568"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.18432"> + <rMaterial name="materials:Steel-008" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_mod_cool2" density="4.39847*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.65993"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.12667"> + <rMaterial name="materials:Steel-008" /> + </MaterialFraction> + <MaterialFraction fraction="0.21341"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_mod_comp" density="1.37093*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="1.00000"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_sid_rail1" density="1.75613*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.77208"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + <MaterialFraction fraction="0.11196"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.06609"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00796"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.00598"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + <MaterialFraction fraction="0.00796"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.01800"> + <rMaterial name="trackermaterial:T_Barium_Titanate" /> + </MaterialFraction> + <MaterialFraction fraction="0.00996"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_sid_rail2" density="1.51100*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.89734"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + <MaterialFraction fraction="0.09311"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.00955"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_sid_rail1st" density="1.74227*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.77823"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + <MaterialFraction fraction="0.10526"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.06627"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00802"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.00603"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + <MaterialFraction fraction="0.00802"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.01815"> + <rMaterial name="trackermaterial:T_Barium_Titanate" /> + </MaterialFraction> + <MaterialFraction fraction="0.01004"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_sid_rail2st" density="1.50659*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.89997"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + <MaterialFraction fraction="0.09045"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.00958"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ele12" density="2.60162*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.07534"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.66125"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.02667"> + <rMaterial name="materials:SMD_metal" /> + </MaterialFraction> + <MaterialFraction fraction="0.09994"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.00522"> + <rMaterial name="materials:Carbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.03021"> + <rMaterial name="materials:Alumina" /> + </MaterialFraction> + <MaterialFraction fraction="0.09855"> + <rMaterial name="materials:Silicon" /> + </MaterialFraction> + <MaterialFraction fraction="0.00282"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ele34" density="2.60162*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.07534"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.66125"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.02667"> + <rMaterial name="materials:SMD_metal" /> + </MaterialFraction> + <MaterialFraction fraction="0.09994"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.00522"> + <rMaterial name="materials:Carbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.03021"> + <rMaterial name="materials:Alumina" /> + </MaterialFraction> + <MaterialFraction fraction="0.09855"> + <rMaterial name="materials:Silicon" /> + </MaterialFraction> + <MaterialFraction fraction="0.00282"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ele56" density="2.72686*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.07188"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.63088"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.02842"> + <rMaterial name="materials:SMD_metal" /> + </MaterialFraction> + <MaterialFraction fraction="0.09535"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.00554"> + <rMaterial name="materials:Carbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.03055"> + <rMaterial name="materials:Alumina" /> + </MaterialFraction> + <MaterialFraction fraction="0.13336"> + <rMaterial name="materials:Silicon" /> + </MaterialFraction> + <MaterialFraction fraction="0.00403"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_Sens_Interface" density="0.75665*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.99111"> + <rMaterial name="trackermaterial:T_Silicone_Gel" /> + </MaterialFraction> + <MaterialFraction fraction="0.00881"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.00008"> + <rMaterial name="materials:Silicon" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_L12_ICC1" density="1.21506*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.52633"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.23122"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.12043"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.00629"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.09695"> + <rMaterial name="trackermaterial:T_Barium_Titanate" /> + </MaterialFraction> + <MaterialFraction fraction="0.00692"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.01186"> + <rMaterial name="materials:Brass" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_L12_ICC2" density="1.30529*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.48697"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.24364"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.12506"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.00606"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.11564"> + <rMaterial name="trackermaterial:T_Barium_Titanate" /> + </MaterialFraction> + <MaterialFraction fraction="0.00834"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.01428"> + <rMaterial name="materials:Brass" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_L34_ICC1" density="0.82946*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.54002"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.23153"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.11265"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.007"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.09505"> + <rMaterial name="trackermaterial:T_Barium_Titanate" /> + </MaterialFraction> + <MaterialFraction fraction="0.00507"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.00868"> + <rMaterial name="materials:Brass" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_L34_ICC2" density="0.81274*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.50881"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.22587"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.11652"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.00657"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.12407"> + <rMaterial name="trackermaterial:T_Barium_Titanate" /> + </MaterialFraction> + <MaterialFraction fraction="0.00670"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.01147"> + <rMaterial name="materials:Brass" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_L56_ICC1" density="0.85619*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.51768"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.1161"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.05821"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.09756"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.00547"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.00678"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.09209"> + <rMaterial name="trackermaterial:T_Barium_Titanate" /> + </MaterialFraction> + <MaterialFraction fraction="0.00491"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.00564"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00353"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.04434"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00139"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.00667"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.00841"> + <rMaterial name="materials:Brass" /> + </MaterialFraction> + <MaterialFraction fraction="0"> + <rMaterial name="materials:Air" /> + </MaterialFraction> + <MaterialFraction fraction="0.03122"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_L56_ICC2" density="0.88614*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.45982"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.09073"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.07611"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.12696"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.00684"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.00602"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.11379"> + <rMaterial name="trackermaterial:T_Barium_Titanate" /> + </MaterialFraction> + <MaterialFraction fraction="0.00521"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.00554"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00441"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.05545"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00173"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.00834"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0"> + <rMaterial name="materials:Air" /> + </MaterialFraction> + <MaterialFraction fraction="0.03904"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_AOH" density="1.80152*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.26137"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.19822"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.07208"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.12027"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.0051"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.0276"> + <rMaterial name="trackermaterial:T_Barium_Titanate" /> + </MaterialFraction> + <MaterialFraction fraction="0.01088"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.0173"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0"> + <rMaterial name="materials:Air" /> + </MaterialFraction> + <MaterialFraction fraction="0.27912"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.00805"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_CCUM" density="0.92095*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.69356"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.17904"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.08818"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.00313"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.03007"> + <rMaterial name="trackermaterial:T_Barium_Titanate" /> + </MaterialFraction> + <MaterialFraction fraction="0.00603"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_CONN12" density="1.41913*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.00638"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.001"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.0545"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.01058"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.00624"> + <rMaterial name="trackermaterial:T_Silicone_Gel" /> + </MaterialFraction> + <MaterialFraction fraction="0.02384"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.10559"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00377"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.00221"> + <rMaterial name="trackermaterial:T_Silicone_Gel" /> + </MaterialFraction> + <MaterialFraction fraction="0.03578"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.00418"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.00383"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.00971"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.00435"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.00534"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + <MaterialFraction fraction="0.00375"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.0007"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + <MaterialFraction fraction="0.00732"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.0018"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00526"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.00051"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.01317"> + <rMaterial name="trackermaterial:Optical_Fiber" /> + </MaterialFraction> + <MaterialFraction fraction="0.03821"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.31415"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.32868"> + <rMaterial name="trackermaterial:T_Ribbon12xMUConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.00914"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_CONN34" density="0.92279*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.00982"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.00154"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.08382"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.01627"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.00959"> + <rMaterial name="trackermaterial:T_Silicone_Gel" /> + </MaterialFraction> + <MaterialFraction fraction="0.03667"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.16238"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.0058"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.0034"> + <rMaterial name="trackermaterial:T_Silicone_Gel" /> + </MaterialFraction> + <MaterialFraction fraction="0.05502"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.00643"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.00588"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.01494"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.00669"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.00821"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + <MaterialFraction fraction="0.00576"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.00108"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + <MaterialFraction fraction="0.01126"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.00276"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.0081"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.00079"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.01013"> + <rMaterial name="trackermaterial:Optical_Fiber" /> + </MaterialFraction> + <MaterialFraction fraction="0.03233"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.24158"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.25273"> + <rMaterial name="trackermaterial:T_Ribbon12xMUConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.00703"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_CONN56" density="1.29029*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.00702"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.0011"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.05995"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.01163"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.00686"> + <rMaterial name="trackermaterial:T_Silicone_Gel" /> + </MaterialFraction> + <MaterialFraction fraction="0.02622"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.11613"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00415"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.00243"> + <rMaterial name="trackermaterial:T_Silicone_Gel" /> + </MaterialFraction> + <MaterialFraction fraction="0.03935"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.0046"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.00421"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.01068"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.00478"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.00587"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + <MaterialFraction fraction="0.00412"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.00077"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + <MaterialFraction fraction="0.00805"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.00198"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00579"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.00056"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.01086"> + <rMaterial name="trackermaterial:Optical_Fiber" /> + </MaterialFraction> + <MaterialFraction fraction="0.03467"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.25916"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.3615"> + <rMaterial name="trackermaterial:T_Ribbon12xMUConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.00754"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_optfib_L12" density="1.52360*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.28236"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.22972"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.03712"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.45081"> + <rMaterial name="trackermaterial:Optical_Fiber" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_optfib_L34" density="0.84381*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.33607"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.27343"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.04951"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.34099"> + <rMaterial name="trackermaterial:Optical_Fiber" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_optfib_L56" density="0.98768*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.28712"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.2336"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.0423"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.43699"> + <rMaterial name="trackermaterial:Optical_Fiber" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ICB" density="3.22606*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.70424"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.2645"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00469"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.02117"> + <rMaterial name="trackermaterial:T_Barium_Titanate" /> + </MaterialFraction> + <MaterialFraction fraction="0.00505"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.00036"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_DOH" density="1.74606*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.10021"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.08241"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.01198"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.01924"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.00063"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.00484"> + <rMaterial name="trackermaterial:T_Barium_Titanate" /> + </MaterialFraction> + <MaterialFraction fraction="0.00779"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.01236"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0"> + <rMaterial name="materials:Air" /> + </MaterialFraction> + <MaterialFraction fraction="0"> + <rMaterial name="materials:Air" /> + </MaterialFraction> + <MaterialFraction fraction="0"> + <rMaterial name="materials:Air" /> + </MaterialFraction> + <MaterialFraction fraction="0.00288"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.22186"> + <rMaterial name="trackermaterial:Optical_Fiber" /> + </MaterialFraction> + <MaterialFraction fraction="0.06318"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.47262"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_DOHM" density="1.63791*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.28501"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.04856"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.01248"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.01885"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.0002"> + <rMaterial name="materials:Ceramic" /> + </MaterialFraction> + <MaterialFraction fraction="0.00419"> + <rMaterial name="trackermaterial:T_Barium_Titanate" /> + </MaterialFraction> + <MaterialFraction fraction="0.00399"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.00255"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.03088"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0"> + <rMaterial name="materials:Air" /> + </MaterialFraction> + <MaterialFraction fraction="0.00398"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.00254"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + <MaterialFraction fraction="0.00142"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.22035"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.08615"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.01596"> + <rMaterial name="materials:Brass" /> + </MaterialFraction> + <MaterialFraction fraction="0.00131"> + <rMaterial name="materials:Brass" /> + </MaterialFraction> + <MaterialFraction fraction="0.15624"> + <rMaterial name="trackermaterial:T_Ribbon12xMUConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.10535"> + <rMaterial name="tobmaterial:TOB_DOH" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIB_RailTop" density="1.97*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="1."> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TIB_RailBottom" density="0.83*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.95"> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + <MaterialFraction fraction="0.05"> + <rMaterial name="trackermaterial:T_Rohacell" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_AlSideConnect" density="4.54*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="1."> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_AlCentralConnect" density="3.19*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="1."> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_CF_Str" density="1.69*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="1."> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_Epoxy" density="2.64*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="1."> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_Nomex" density="32*mg/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="1."> + <rMaterial name="trackermaterial:T_Nomex" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_middle_ribs" density="1.55*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="1."> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_plate_A" density="674*mg/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="1.00000000"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_plate_B" density="2.526*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="1.00000000"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_plate_C" density="2*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="1.00000000"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_rad_services1" density="0.78663*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.16746"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.03062"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.00452"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.01166"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.01448"> + <rMaterial name="trackermaterial:TOB_Ribbon12xMUConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.08301"> + <rMaterial name="trackermaterial:TOB_DOHM_PowerConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.03826"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.64997"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_rad_services2" density="1.40155*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.17833"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.03222"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.00487"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.00579"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.00685"> + <rMaterial name="trackermaterial:TOB_Ribbon12xMUConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.0896"> + <rMaterial name="trackermaterial:TOB_DOHM_PowerConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.03793"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.64441"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_rad_services3" density="1.76307*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.12662"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0.0707"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.03052"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.00536"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.00411"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.00487"> + <rMaterial name="trackermaterial:TOB_Ribbon12xMUConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.09163"> + <rMaterial name="trackermaterial:TOB_DOHM_PowerConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.03703"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.62915"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_rad_services4" density="2.07459*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.09677"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0.11456"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.03033"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.006"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.00314"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.00337"> + <rMaterial name="trackermaterial:TOB_Ribbon12xMUConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.09787"> + <rMaterial name="trackermaterial:TOB_DOHM_PowerConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.03602"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.61194"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_rad_services5" density="2.42471*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.07424"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0.14105"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.03734"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.00703"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.00241"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.00218"> + <rMaterial name="trackermaterial:TOB_Ribbon12xMUConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.09683"> + <rMaterial name="trackermaterial:TOB_DOHM_PowerConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.03552"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.60339"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_rad_services6" density="2.86547*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.05738"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0.15196"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.05736"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.01002"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.00186"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.00242"> + <rMaterial name="trackermaterial:TOB_Ribbon12xMUConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.11577"> + <rMaterial name="trackermaterial:TOB_DOHM_PowerConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.03353"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.56969"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_rib1" density="0.32766*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.00231"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.00029"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00244"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.00037"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.01656"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.0135"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.0797"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.01456"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.00856"> + <rMaterial name="trackermaterial:T_Silicone_Gel" /> + </MaterialFraction> + <MaterialFraction fraction="0.03531"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.04779"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.00438"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.01044"> + <rMaterial name="materials:Brass" /> + </MaterialFraction> + <MaterialFraction fraction="0.00319"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.00204"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + <MaterialFraction fraction="0.02224"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.11503"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.06666"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.0184"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.00876"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.02224"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.005"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.01222"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + <MaterialFraction fraction="0.00958"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.09861"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.01571"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.19901"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.16509"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_rib2" density="0.32900*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.00231"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.00029"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00244"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.00037"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.01656"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.0135"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.0797"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.01456"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.00856"> + <rMaterial name="trackermaterial:T_Silicone_Gel" /> + </MaterialFraction> + <MaterialFraction fraction="0.0353"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.04778"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.00438"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.01044"> + <rMaterial name="materials:Brass" /> + </MaterialFraction> + <MaterialFraction fraction="0.00319"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.00204"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + <MaterialFraction fraction="0.02224"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.11503"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.06667"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.0184"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.00876"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.02224"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.005"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.01222"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + <MaterialFraction fraction="0.00958"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.09861"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.01571"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.19902"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.1651"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_rib3" density="0.31373*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.00188"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.00024"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00198"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.0003"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.01348"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.01099"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.07554"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.0138"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.00811"> + <rMaterial name="trackermaterial:T_Silicone_Gel" /> + </MaterialFraction> + <MaterialFraction fraction="0.03346"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.04529"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.00356"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.0085"> + <rMaterial name="materials:Brass" /> + </MaterialFraction> + <MaterialFraction fraction="0.0026"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.00166"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + <MaterialFraction fraction="0.02328"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.1204"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.06978"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.01926"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.00917"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.02328"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.00524"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.01279"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + <MaterialFraction fraction="0.01002"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0.09605"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.00822"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.20831"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.1728"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_rib4" density="0.31523*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.00192"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.00024"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00203"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.00031"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.01378"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.01123"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.07721"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.01411"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.00829"> + <rMaterial name="trackermaterial:T_Silicone_Gel" /> + </MaterialFraction> + <MaterialFraction fraction="0.0342"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.04629"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.00364"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.00868"> + <rMaterial name="materials:Brass" /> + </MaterialFraction> + <MaterialFraction fraction="0.00266"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.0017"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + <MaterialFraction fraction="0.02314"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.11964"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.06934"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.01914"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.00912"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.02314"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.0052"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.01271"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + <MaterialFraction fraction="0.00996"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0.09545"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.00817"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.207"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.17172"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_rib5" density="0.31300*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.00174"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.00022"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00184"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.00028"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.01248"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.01017"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.07823"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.0143"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.0084"> + <rMaterial name="trackermaterial:T_Silicone_Gel" /> + </MaterialFraction> + <MaterialFraction fraction="0.03466"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.04691"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.0033"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.00787"> + <rMaterial name="materials:Brass" /> + </MaterialFraction> + <MaterialFraction fraction="0.00241"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.00154"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + <MaterialFraction fraction="0.02305"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.11922"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.06909"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.01907"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.00908"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.02305"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.00519"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.01267"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + <MaterialFraction fraction="0.00993"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0.09511"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.01283"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.20627"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.17111"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_rib6" density="0.30602*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.00159"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.0002"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.00168"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.00026"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.01141"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.0093"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.0715"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.01306"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.00768"> + <rMaterial name="trackermaterial:T_Silicone_Gel" /> + </MaterialFraction> + <MaterialFraction fraction="0.03167"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.04287"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.00302"> + <rMaterial name="trackermaterial:T_G10" /> + </MaterialFraction> + <MaterialFraction fraction="0.00719"> + <rMaterial name="materials:Brass" /> + </MaterialFraction> + <MaterialFraction fraction="0.0022"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0.0014"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + <MaterialFraction fraction="0.02362"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.12216"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.0708"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.01954"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.00931"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + <MaterialFraction fraction="0.02362"> + <rMaterial name="materials:Polyethylene" /> + </MaterialFraction> + <MaterialFraction fraction="0.00531"> + <rMaterial name="materials:T_Kapton" /> + </MaterialFraction> + <MaterialFraction fraction="0.01298"> + <rMaterial name="materials:BGA" /> + </MaterialFraction> + <MaterialFraction fraction="0.01017"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + <MaterialFraction fraction="0"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0.09746"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.0133"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.21136"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.17533"> + <rMaterial name="materials:Epoxy" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_A2" density="0.89125*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.5716"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.18427"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0.07157"> + <rMaterial name="trackermaterial:TOB_DOHM_PowerConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.00959"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.16296"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_A3" density="0.83126*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.55157"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.26343"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0"> + <rMaterial name="trackermaterial:TOB_DOHM_PowerConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.01028"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.17472"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_A4" density="0.64868*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.62828"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.25318"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0"> + <rMaterial name="trackermaterial:TOB_DOHM_PowerConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.00659"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.11195"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_A5" density="0.88745*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.63146"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.12337"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0.07188"> + <rMaterial name="trackermaterial:TOB_DOHM_PowerConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.00963"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.16366"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_A7" density="0.75817*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.53755"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.36103"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0"> + <rMaterial name="trackermaterial:TOB_DOHM_PowerConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.00564"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.09578"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_A8" density="0.84410*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.48282"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.25942"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0.07557"> + <rMaterial name="trackermaterial:TOB_DOHM_PowerConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.01013"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.17207"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_A9" density="0.75437*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.60779"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.29028"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0"> + <rMaterial name="trackermaterial:TOB_DOHM_PowerConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.00567"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.09627"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_A11" density="0.89125*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.5716"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.18427"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0.07157"> + <rMaterial name="trackermaterial:TOB_DOHM_PowerConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.00959"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.16296"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_A12" density="0.71200*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.57132"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.15348"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0.05961"> + <rMaterial name="trackermaterial:TOB_DOHM_PowerConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.01198"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.2036"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_A13" density="0.75437*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.60779"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.29028"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0"> + <rMaterial name="trackermaterial:TOB_DOHM_PowerConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.00567"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.09627"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_A14" density="0.88745*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.63146"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.12337"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0.07188"> + <rMaterial name="trackermaterial:TOB_DOHM_PowerConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.00963"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.16366"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_A16" density="0.81815*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.5604"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.26765"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0.07796"> + <rMaterial name="trackermaterial:TOB_DOHM_PowerConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.00522"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.08876"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_A17" density="0.72557*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.5617"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.22635"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0"> + <rMaterial name="trackermaterial:TOB_DOHM_PowerConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.01178"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.20017"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_A18" density="0.75437*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.60779"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.29028"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0"> + <rMaterial name="trackermaterial:TOB_DOHM_PowerConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.00567"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.09627"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_B2" density="1.48936*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.51373"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.48627"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_B3" density="1.35203*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.46433"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.53567"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_B4" density="1.35203*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.46433"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.53567"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_B5" density="1.46974*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.50723"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.49277"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_B6" density="1.50898*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.52005"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.47995"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_B7" density="1.27356*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.43133"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.56867"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_B8" density="1.33241*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.45645"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.54355"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_B9" density="1.50898*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.52005"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.47995"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_B11" density="1.29318*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.43995"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.56005"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_B12" density="1.50898*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.52005"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.47995"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_B13" density="1.50898*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.52005"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.47995"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_B14" density="1.50898*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.52005"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.47995"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_B15" density="1.48936*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.51373"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.48627"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_B16" density="1.43050*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.49372"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.50628"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_B17" density="1.46974*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.50723"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.49277"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_B18" density="1.46974*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.50723"> + <rMaterial name="trackermaterial:T_RuggRibbon" /> + </MaterialFraction> + <MaterialFraction fraction="0.49277"> + <rMaterial name="trackermaterial:T_Aluminium" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_C2" density="0.87379*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.52472"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.25061"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0.04867"> + <rMaterial name="trackermaterial:TOB_DOHM_PowerConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.00978"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.16622"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_C3" density="0.73462*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.55478"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.14904"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0.08683"> + <rMaterial name="trackermaterial:TOB_DOHM_PowerConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.01164"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.19771"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_C4" density="0.74595*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.54636"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.29355"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0.05701"> + <rMaterial name="trackermaterial:TOB_DOHM_PowerConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.00573"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.09735"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_C6" density="0.86619*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.64696"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.1264"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0.04909"> + <rMaterial name="trackermaterial:TOB_DOHM_PowerConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.00987"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.16768"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_C7" density="0.75057*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.67874"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.21881"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0"> + <rMaterial name="trackermaterial:TOB_DOHM_PowerConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.0057"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.09675"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_C8" density="0.71715*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.49725"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.229"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0.0593"> + <rMaterial name="trackermaterial:TOB_DOHM_PowerConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.01192"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.20252"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_C9" density="0.81055*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.69136"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.13508"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0.07869"> + <rMaterial name="trackermaterial:TOB_DOHM_PowerConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.00527"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.08959"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_C11" density="0.83126*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.55157"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.26343"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0"> + <rMaterial name="trackermaterial:TOB_DOHM_PowerConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.01028"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.17472"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_C12" density="0.73842*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.48294"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.22241"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0.08638"> + <rMaterial name="trackermaterial:TOB_DOHM_PowerConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.01158"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.19669"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_C13" density="0.75437*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.60779"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.29028"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0"> + <rMaterial name="trackermaterial:TOB_DOHM_PowerConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.00567"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.09627"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_C15" density="0.88745*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.63146"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.12337"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0.07188"> + <rMaterial name="trackermaterial:TOB_DOHM_PowerConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.00963"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.16366"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_C16" density="0.75437*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.60779"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.29028"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0"> + <rMaterial name="trackermaterial:TOB_DOHM_PowerConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.00567"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.09627"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_C17" density="0.79316*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.4496"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.27608"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0.08042"> + <rMaterial name="trackermaterial:TOB_DOHM_PowerConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.01078"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.18312"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_ax_services_C18" density="0.81055*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="0.69136"> + <rMaterial name="trackermaterial:CAB_Al36" /> + </MaterialFraction> + <MaterialFraction fraction="0.13508"> + <rMaterial name="trackermaterial:CAB_Al48" /> + </MaterialFraction> + <MaterialFraction fraction="0.07869"> + <rMaterial name="trackermaterial:TOB_DOHM_PowerConn" /> + </MaterialFraction> + <MaterialFraction fraction="0.00527"> + <rMaterial name="trackermaterial:T_Copper" /> + </MaterialFraction> + <MaterialFraction fraction="0.08959"> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C" /> + </MaterialFraction> + </CompositeMaterial> + <CompositeMaterial name="TOB_rod" density="1.796*g/cm3" method="mixture by weight" symbol=" "> + <MaterialFraction fraction="1."> + <rMaterial name="trackermaterial:T_CarbonFibreStr" /> + </MaterialFraction> + </CompositeMaterial> + </MaterialSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tobmodpar.xml b/examples/DDCMS/data/tobmodpar.xml new file mode 100644 index 000000000..0a52fe67f --- /dev/null +++ b/examples/DDCMS/data/tobmodpar.xml @@ -0,0 +1,178 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tobmodpar.xml" eval="true"> + <Constant name="ModuleDx" value="6.000*cm"/> + <Constant name="ModuleDy" value="0.440*cm"/> + <Constant name="ModuleDz" value="12.075*cm"/> + <Constant name="HybridDx" value="3.000*cm"/> + <Constant name="HybridDy" value="0.025*cm"/> + <Constant name="HybridDz" value="1.250*cm"/> + <Constant name="HybridY" value="0.215*cm"/> + <Constant name="HybridZ" value="9.965*cm"/> + <Constant name="PADx" value="4.300*cm"/> + <Constant name="PADy" value="0.055*cm"/> + <Constant name="PA1Dz" value="0.625*cm"/> + <Constant name="PA2Dz1" value="0.8215*cm"/> + <Constant name="PA2Dz2" value="0.3900*cm"/> + <Constant name="PA2Theta" value="2.87237*deg"/> + <Constant name="PAY" value="0.185*cm"/> + <Constant name="PAZ" value="8.060*cm"/> + <Constant name="SideRailDx" value="0.850*cm"/> + <Constant name="SideRailDy" value="0.040*cm"/> + <Constant name="SideRailDz" value="10.50*cm"/> + <Constant name="SideRailX" value="5.150*cm"/> + <Constant name="SideRailY" value="0.125*cm"/> + <Constant name="SideRailZ" value="1.575*cm"/> + <Constant name="FrameDx" value="6.000*cm"/> + <Constant name="FrameDy" value="0.03125*cm"/> + <Constant name="FrameDz" value="2.250*cm"/> + <Constant name="FrameY" value="0.05275*cm"/> + <Constant name="FrameZ" value="9.825*cm"/> + <Constant name="HybSupDx" value="3.500*cm"/> + <Constant name="HybSupDy" value="0.030*cm"/> + <Constant name="HybSupDz" value="1.665*cm"/> + <Constant name="HybSupY" value="0.115*cm"/> + <Constant name="HybSupZ" value="10.35*cm"/> + <Constant name="ModCool1Dx" value="0.800*cm"/> + <Constant name="ModCoolDy" value="0.015*cm"/> + <Constant name="ModCool1Dz" value="1.000*cm"/> + <Constant name="ModCool1X" value="5.200*cm"/> + <Constant name="ModCool1Y" value="0.069*cm"/> + <Constant name="ModCool1Z" value="2.125*cm"/> + <Constant name="ModCool2Dx" value="0.750*cm"/> + <Constant name="ModCool2Dz" value="1.400*cm"/> + <Constant name="ModCool2X" value="5.250*cm"/> + <Constant name="ModCool2Y" value="0.100*cm"/> + <Constant name="ModCool2Z" value="10.325*cm"/> + <Constant name="ModCoolComp1Dx" value="0.800*cm"/> + <Constant name="ModCoolCompDy" value="0.015*cm"/> + <Constant name="ModCoolComp1Dz" value="1.300*cm"/> + <Constant name="ModCoolComp1X" value="5.200*cm"/> + <Constant name="ModCoolComp1Y" value="0.039*cm"/> + <Constant name="ModCoolComp1Z" value="2.125*cm"/> + <Constant name="ModCoolComp2Dx" value="0.800*cm"/> + <Constant name="ModCoolComp2Dz" value="1.300*cm"/> + <Constant name="ModCoolComp2X" value="5.200*cm"/> + <Constant name="ModCoolComp2Y" value="0.130*cm"/> + <Constant name="ModCoolComp2Z" value="10.325*cm"/> + <Constant name="Tilt" value="5.7296*deg"/> + <Constant name="TiltX" value="(90.0*deg-[Tilt])"/> + <Constant name="WaferDx" value="4.818*cm"/> + <Constant name="WaferDy" value="9.450*cm"/> + <Constant name="WaferDz" value="0.025*cm"/> + <Constant name="WaferY" value="0.215*cm"/> + <Constant name="WaferZ" value="2.125*cm"/> + <Constant name="ActiveDx" value="4.6848*cm"/> + <Constant name="ActiveDy" value="9.3067*cm"/> + <Constant name="ActiveDz" value="[WaferDz]-[tracker:BackPlaneDz]"/> + <Constant name="InactiveDy" value="0.1553*cm"/> + <Constant name="GlueDx1" value="4.6848*cm"/> + <Constant name="GlueDx2" value="4.30*cm"/> + <Constant name="GlueDy" value="0.275*cm"/> + <Constant name="GlueDz" value="0.1*cm"/> + <Constant name="GlueSi1Y" value="0.340*cm"/> + <Constant name="GlueSi2Y" value="0.015*cm"/> + <Constant name="GluePAY" value="0.340*cm"/> + <Constant name="GluePAZ" value="7.435*cm"/> + <Constant name="PAX" value="[WaferDy]*sin([Tilt])"/> + <Constant name="GluePAX" value="[WaferDy]*sin([Tilt])"/> + <Constant name="PAYst" value="0.260*cm"/> + <Constant name="GluePAYst" value="0.390*cm"/> + </ConstantsSection> + <SolidSection label="tobmodpar.xml"> + <Box name="TOBModule" dx="[tobmodpar:ModuleDx]" dy="[tobmodpar:ModuleDy]" dz="[tobmodpar:ModuleDz]"/> + <Box name="TOBHybrid" dx="[tobmodpar:HybridDx]" dy="[tobmodpar:HybridDy]" dz="[tobmodpar:HybridDz]"/> + <Box name="TOBWaferRphi" dx="[tobmodpar:WaferDx]" dy="[tobmodpar:WaferDy]" dz="[tobmodpar:WaferDz]"/> + <Box name="TOBActiveRphi" dx="[tobmodpar:ActiveDx]" dy="[tobmodpar:ActiveDy]" dz="[tobmodpar:ActiveDz]"/> + <Box name="TOBPA1" dx="[PADx]" dy="[PADy]" dz="[PA1Dz]"/> + <Trapezoid name="TOBPA2" dz="[PADx]" alp1="0*deg" bl1="[PA2Dz1]" tl1="[PA2Dz1]" h1="[PADy]" alp2="0*deg" bl2="[PA2Dz2]" tl2="[PA2Dz2]" h2="[PADy]" phi="0*deg" theta="[PA2Theta]"/> + <Box name="TOBEncapsulant1" dx="[GlueDx1]" dy="[GlueDy]" dz="[GlueDz]"/> + <Box name="TOBEncapsulant2" dx="[GlueDx2]" dy="[GlueDy]" dz="[GlueDz]"/> + <Box name="TOBEncapsulant3" dx="[GlueDx1]" dy="[GlueDy]*2" dz="[GlueDz]/2"/> + <Box name="TOBSideRailL" dx="[SideRailDx]" dy="[SideRailDy]" dz="[SideRailDz]"/> + <Box name="TOBSideRailR" dx="[SideRailDx]" dy="[SideRailDy]" dz="[SideRailDz]"/> + <Box name="TOBFrame" dx="[FrameDx]" dy="[FrameDy]" dz="[FrameDz]"/> + <Box name="TOBHybSup" dx="[HybSupDx]" dy="[HybSupDy]" dz="[HybSupDz]"/> + <Box name="TOBModCool1" dx="[ModCool1Dx]" dy="[ModCoolDy]" dz="[ModCool1Dz]"/> + <Box name="TOBModCool2" dx="[ModCool2Dx]" dy="[ModCoolDy]" dz="[ModCool2Dz]"/> + <Box name="TOBModCoolComp1" dx="[ModCoolComp1Dx]" dy="[ModCoolCompDy]" dz="[ModCoolComp1Dz]"/> + <Box name="TOBModCoolComp2" dx="[ModCoolComp2Dx]" dy="[ModCoolCompDy]" dz="[ModCoolComp2Dz]"/> + <Box name="TOBInactive" dx="[ActiveDx]" dy="[InactiveDy]" dz="[ActiveDz]"/> + </SolidSection> + <LogicalPartSection label="tobmodpar.xml"> + <LogicalPart name="TOBPA1" category="unspecified"> + <rSolid name="TOBPA1"/> + <rMaterial name="tobmaterial:TOB_PA_rphi"/> + </LogicalPart> + <LogicalPart name="TOBPA2" category="unspecified"> + <rSolid name="TOBPA2"/> + <rMaterial name="tobmaterial:TOB_PA_ster"/> + </LogicalPart> + <LogicalPart name="TOBPAEncaps" category="unspecified"> + <rSolid name="TOBEncapsulant1"/> + <rMaterial name="tobmaterial:TOB_Sens_Interface"/> + </LogicalPart> + <LogicalPart name="TOBPAEncapsSt" category="unspecified"> + <rSolid name="TOBEncapsulant3"/> + <rMaterial name="tobmaterial:TOB_Sens_Interface"/> + </LogicalPart> + <LogicalPart name="TOBSideRailL" category="unspecified"> + <rSolid name="TOBSideRailL"/> + <rMaterial name="tobmaterial:TOB_sid_rail1"/> + </LogicalPart> + <LogicalPart name="TOBSideRailR" category="unspecified"> + <rSolid name="TOBSideRailR"/> + <rMaterial name="tobmaterial:TOB_sid_rail2"/> + </LogicalPart> + <LogicalPart name="TOBSideRailLst" category="unspecified"> + <rSolid name="TOBSideRailL"/> + <rMaterial name="tobmaterial:TOB_sid_rail1st"/> + </LogicalPart> + <LogicalPart name="TOBSideRailRst" category="unspecified"> + <rSolid name="TOBSideRailR"/> + <rMaterial name="tobmaterial:TOB_sid_rail2st"/> + </LogicalPart> + <LogicalPart name="TOBFrame" category="unspecified"> + <rSolid name="TOBFrame"/> + <rMaterial name="tobmaterial:TOB_frame_ele"/> + </LogicalPart> + <LogicalPart name="TOBHybSup" category="unspecified"> + <rSolid name="TOBHybSup"/> + <rMaterial name="tobmaterial:TOB_hybrid_supp"/> + </LogicalPart> + <LogicalPart name="TOBModCool1" category="unspecified"> + <rSolid name="TOBModCool1"/> + <rMaterial name="tobmaterial:TOB_mod_cool1"/> + </LogicalPart> + <LogicalPart name="TOBModCool2" category="unspecified"> + <rSolid name="TOBModCool2"/> + <rMaterial name="tobmaterial:TOB_mod_cool2"/> + </LogicalPart> + <LogicalPart name="TOBModCoolComp1" category="unspecified"> + <rSolid name="TOBModCoolComp1"/> + <rMaterial name="tobmaterial:TOB_mod_comp"/> + </LogicalPart> + <LogicalPart name="TOBModCoolComp2" category="unspecified"> + <rSolid name="TOBModCoolComp2"/> + <rMaterial name="trackermaterial:T_CarbonFibreStr"/> + </LogicalPart> + <LogicalPart name="TOBInactive" category="unspecified"> + <rSolid name="TOBInactive"/> + <rMaterial name="materials:Silicon"/> + </LogicalPart> + <LogicalPart name="TOBSiEncaps" category="unspecified"> + <rSolid name="TOBEncapsulant1"/> + <rMaterial name="tobmaterial:TOB_Sens_Interface"/> + </LogicalPart> + <LogicalPart name="TOBSiBackEncaps" category="unspecified"> + <rSolid name="TOBEncapsulant2"/> + <rMaterial name="trackermaterial:T_Silicone_Gel"/> + </LogicalPart> + </LogicalPartSection> + <RotationSection label="tobmodpar.xml"> + <Rotation name="Rphi" thetaX="90*deg" phiX="0*deg" thetaY="0*deg" phiY="0*deg" thetaZ="-90*deg" phiZ="90*deg"/> + <Rotation name="Ster" thetaX="[TiltX]" phiX="180*deg" thetaY="[Tilt]" phiY="0*deg" thetaZ="90*deg" phiZ="90*deg"/> + <Rotation name="PA" thetaX="0*deg" phiX="0*deg" thetaY="90*deg" phiY="90*deg" thetaZ="-90*deg" phiZ="0*deg"/> + <Rotation name="Activ" thetaX="90*deg" phiX="180*deg" thetaY="90*deg" phiY="270*deg" thetaZ="0*deg" phiZ="0*deg"/> + </RotationSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tobmodule0.xml b/examples/DDCMS/data/tobmodule0.xml new file mode 100644 index 000000000..4141dffeb --- /dev/null +++ b/examples/DDCMS/data/tobmodule0.xml @@ -0,0 +1,267 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tobmodule0.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <SolidSection label="tobmodule0.xml"> + <Box name="TOBModCool01" dx="[tobmodpar:ModCool1Dx]" dy="[tobmodpar:ModCoolDy]" dz="[tobmodpar:ModCool1Dz]"/> + <Box name="TOBModCool02" dx="[tobmodpar:ModCool2Dx]" dy="[tobmodpar:ModCoolDy]" dz="[tobmodpar:ModCool2Dz]"/> + <Box name="TOBWaferSter0" dx="[tobmodpar:WaferDx]" dy="[tobmodpar:WaferDy]" dz="[tobmodpar:WaferDz]"/> + <Box name="TOBActiveSter0" dx="[tobmodpar:ActiveDx]" dy="[tobmodpar:ActiveDy]" dz="[tobmodpar:ActiveDz]"/> + <Box name="TOBModCoolComp01" dx="[tobmodpar:ModCoolComp1Dx]" dy="[tobmodpar:ModCoolCompDy]" dz="[tobmodpar:ModCoolComp1Dz]"/> + <Box name="TOBModCoolComp02" dx="[tobmodpar:ModCoolComp2Dx]" dy="[tobmodpar:ModCoolCompDy]" dz="[tobmodpar:ModCoolComp2Dz]"/> + </SolidSection> + <LogicalPartSection label="tobmodule0.xml"> + <LogicalPart name="TOBModule0" category="unspecified"> + <rSolid name="tobmodpar:TOBModule"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBHybrid0" category="unspecified"> + <rSolid name="tobmodpar:TOBHybrid"/> + <rMaterial name="tobmaterial:TOB_ele12"/> + </LogicalPart> + <LogicalPart name="TOBModCool01" category="unspecified"> + <rSolid name="TOBModCool01"/> + <rMaterial name="tobmaterial:TOB_mod_cool1"/> + </LogicalPart> + <LogicalPart name="TOBModCool02" category="unspecified"> + <rSolid name="TOBModCool02"/> + <rMaterial name="tobmaterial:TOB_mod_cool2"/> + </LogicalPart> + <LogicalPart name="TOBWaferRphi0" category="unspecified"> + <rSolid name="tobmodpar:TOBWaferRphi"/> + <rMaterial name="materials:Silicon"/> + </LogicalPart> + <LogicalPart name="TOBActiveRphi0" category="unspecified"> + <rSolid name="tobmodpar:TOBActiveRphi"/> + <rMaterial name="materials:Silicon"/> + </LogicalPart> + <LogicalPart name="TOBWaferSter0" category="unspecified"> + <rSolid name="TOBWaferSter0"/> + <rMaterial name="materials:Silicon"/> + </LogicalPart> + <LogicalPart name="TOBActiveSter0" category="unspecified"> + <rSolid name="TOBActiveSter0"/> + <rMaterial name="materials:Silicon"/> + </LogicalPart> + <LogicalPart name="TOBModCoolComp01" category="unspecified"> + <rSolid name="TOBModCoolComp01"/> + <rMaterial name="tobmaterial:TOB_mod_comp"/> + </LogicalPart> + <LogicalPart name="TOBModCoolComp02" category="unspecified"> + <rSolid name="TOBModCoolComp02"/> + <rMaterial name="trackermaterial:T_CarbonFibreStr"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tobmodule0.xml"> + <PosPart copyNumber="1"> + <rParent name="tobmodule0:TOBWaferRphi0"/> + <rChild name="tobmodule0:TOBActiveRphi0"/> + <Translation x="[zero]" y="[zero]" z="[tracker:BackPlaneDz]"/> + <rRotation name="tobmodpar:Activ"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule0:TOBActiveRphi0"/> + <rChild name="tobmodpar:TOBInactive"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule0:TOBWaferSter0"/> + <rChild name="tobmodule0:TOBActiveSter0"/> + <Translation x="[zero]" y="[zero]" z="[tracker:BackPlaneDz]"/> + <rRotation name="tobmodpar:Activ"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule0:TOBActiveSter0"/> + <rChild name="tobmodpar:TOBInactive"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodule0:TOBWaferRphi0"/> + <rRotation name="tobmodpar:Rphi"/> + <Translation x="[zero]" y="-[tobmodpar:WaferY]" z="-[tobmodpar:WaferZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodule0:TOBWaferSter0"/> + <rRotation name="tobmodpar:Ster"/> + <Translation x="[zero]" y="[tobmodpar:WaferY]" z="-[tobmodpar:WaferZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodpar:TOBSiEncaps"/> + <rRotation name="tobmodpar:Rphi"/> + <Translation x="[zero]" y="-[tobmodpar:GlueSi1Y]" z="-[tobmodpar:WaferZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodpar:TOBSiEncaps"/> + <rRotation name="tobmodpar:Ster"/> + <Translation x="[zero]" y="[tobmodpar:GlueSi1Y]" z="-[tobmodpar:WaferZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodpar:TOBSiBackEncaps"/> + <rRotation name="tobmodpar:Rphi"/> + <Translation x="[zero]" y="-[tobmodpar:GlueSi2Y]" z="-[tobmodpar:WaferZ]-[tobmodpar:GlueDy]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodpar:TOBSiBackEncaps"/> + <rRotation name="tobmodpar:Rphi"/> + <Translation x="[zero]" y="[tobmodpar:GlueSi2Y]" z="-[tobmodpar:WaferZ]+[tobmodpar:GlueDy]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodule0:TOBHybrid0"/> + <Translation x="[zero]" y="-[tobmodpar:HybridY]" z="[tobmodpar:HybridZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodule0:TOBHybrid0"/> + <Translation x="[zero]" y="[tobmodpar:HybridY]" z="[tobmodpar:HybridZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodpar:TOBPA1"/> + <Translation x="[zero]" y="-[tobmodpar:PAY]" z="[tobmodpar:PAZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodpar:TOBPA2"/> + <rRotation name="tobmodpar:PA"/> + <Translation x="[tobmodpar:PAX]" y="[tobmodpar:PAYst]" z="[tobmodpar:PAZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodpar:TOBPAEncaps"/> + <rRotation name="tobmodpar:Rphi"/> + <Translation x="[zero]" y="-[tobmodpar:GluePAY]" z="[tobmodpar:GluePAZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodpar:TOBPAEncapsSt"/> + <rRotation name="tobmodpar:Ster"/> + <Translation x="[tobmodpar:GluePAX]" y="[tobmodpar:GluePAYst]" z="[tobmodpar:GluePAZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodpar:TOBSideRailL"/> + <Translation x="-[tobmodpar:SideRailX]" y="-[tobmodpar:SideRailY]" z="-[tobmodpar:SideRailZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodpar:TOBSideRailR"/> + <Translation x="[tobmodpar:SideRailX]" y="-[tobmodpar:SideRailY]" z="-[tobmodpar:SideRailZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodpar:TOBSideRailLst"/> + <Translation x="[tobmodpar:SideRailX]" y="[tobmodpar:SideRailY]" z="-[tobmodpar:SideRailZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodpar:TOBSideRailRst"/> + <Translation x="-[tobmodpar:SideRailX]" y="[tobmodpar:SideRailY]" z="-[tobmodpar:SideRailZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodpar:TOBFrame"/> + <Translation x="[zero]" y="-[tobmodpar:FrameY]" z="[tobmodpar:FrameZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodpar:TOBFrame"/> + <Translation x="[zero]" y="[tobmodpar:FrameY]" z="[tobmodpar:FrameZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodpar:TOBHybSup"/> + <Translation x="[zero]" y="-[tobmodpar:HybSupY]" z="[tobmodpar:HybSupZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodpar:TOBHybSup"/> + <Translation x="[zero]" y="[tobmodpar:HybSupY]" z="[tobmodpar:HybSupZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodpar:TOBModCool1"/> + <Translation x="-[tobmodpar:ModCool1X]" y="-[tobmodpar:ModCool1Y]" z="-[tobmodpar:ModCool1Z]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodpar:TOBModCool1"/> + <Translation x="[tobmodpar:ModCool1X]" y="-[tobmodpar:ModCool1Y]" z="-[tobmodpar:ModCool1Z]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodpar:TOBModCoolComp1"/> + <Translation x="-[tobmodpar:ModCoolComp1X]" y="-[tobmodpar:ModCoolComp1Y]" z="-[tobmodpar:ModCoolComp1Z]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodpar:TOBModCoolComp1"/> + <Translation x="[tobmodpar:ModCoolComp1X]" y="-[tobmodpar:ModCoolComp1Y]" z="-[tobmodpar:ModCoolComp1Z]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodpar:TOBModCool2"/> + <Translation x="-[tobmodpar:ModCool2X]" y="-[tobmodpar:ModCool2Y]" z="[tobmodpar:ModCool2Z]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodpar:TOBModCool2"/> + <Translation x="[tobmodpar:ModCool2X]" y="-[tobmodpar:ModCool2Y]" z="[tobmodpar:ModCool2Z]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodpar:TOBModCoolComp2"/> + <Translation x="-[tobmodpar:ModCoolComp2X]" y="-[tobmodpar:ModCoolComp2Y]" z="[tobmodpar:ModCoolComp2Z]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodpar:TOBModCoolComp2"/> + <Translation x="[tobmodpar:ModCoolComp2X]" y="-[tobmodpar:ModCoolComp2Y]" z="[tobmodpar:ModCoolComp2Z]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodule0:TOBModCool01"/> + <Translation x="-[tobmodpar:ModCool1X]" y="[tobmodpar:ModCool1Y]" z="-[tobmodpar:ModCool1Z]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodule0:TOBModCool01"/> + <Translation x="[tobmodpar:ModCool1X]" y="[tobmodpar:ModCool1Y]" z="-[tobmodpar:ModCool1Z]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodule0:TOBModCoolComp01"/> + <Translation x="-[tobmodpar:ModCoolComp1X]" y="[tobmodpar:ModCoolComp1Y]" z="-[tobmodpar:ModCoolComp1Z]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodule0:TOBModCoolComp01"/> + <Translation x="[tobmodpar:ModCoolComp1X]" y="[tobmodpar:ModCoolComp1Y]" z="-[tobmodpar:ModCoolComp1Z]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodule0:TOBModCool02"/> + <Translation x="-[tobmodpar:ModCool2X]" y="[tobmodpar:ModCool2Y]" z="[tobmodpar:ModCool2Z]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodule0:TOBModCool02"/> + <Translation x="[tobmodpar:ModCool2X]" y="[tobmodpar:ModCool2Y]" z="[tobmodpar:ModCool2Z]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodule0:TOBModCoolComp02"/> + <Translation x="-[tobmodpar:ModCoolComp2X]" y="[tobmodpar:ModCoolComp2Y]" z="[tobmodpar:ModCoolComp2Z]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tobmodule0:TOBModule0"/> + <rChild name="tobmodule0:TOBModCoolComp02"/> + <Translation x="[tobmodpar:ModCoolComp2X]" y="[tobmodpar:ModCoolComp2Y]" z="[tobmodpar:ModCoolComp2Z]"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tobmodule2.xml b/examples/DDCMS/data/tobmodule2.xml new file mode 100644 index 000000000..279b548ba --- /dev/null +++ b/examples/DDCMS/data/tobmodule2.xml @@ -0,0 +1,130 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tobmodule2.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <LogicalPartSection label="tobmodule2.xml"> + <LogicalPart name="TOBModule2" category="unspecified"> + <rSolid name="tobmodpar:TOBModule"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBHybrid2" category="unspecified"> + <rSolid name="tobmodpar:TOBHybrid"/> + <rMaterial name="tobmaterial:TOB_ele34"/> + </LogicalPart> + <LogicalPart name="TOBWaferRphi2" category="unspecified"> + <rSolid name="tobmodpar:TOBWaferRphi"/> + <rMaterial name="materials:Silicon"/> + </LogicalPart> + <LogicalPart name="TOBActiveRphi2" category="unspecified"> + <rSolid name="tobmodpar:TOBActiveRphi"/> + <rMaterial name="materials:Silicon"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tobmodule2.xml"> + <PosPart copyNumber="1"> + <rParent name="tobmodule2:TOBWaferRphi2"/> + <rChild name="tobmodule2:TOBActiveRphi2"/> + <Translation x="[zero]" y="[zero]" z="[tracker:BackPlaneDz]"/> + <rRotation name="tobmodpar:Activ"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule2:TOBActiveRphi2"/> + <rChild name="tobmodpar:TOBInactive"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule2:TOBModule2"/> + <rChild name="tobmodule2:TOBWaferRphi2"/> + <rRotation name="tobmodpar:Rphi"/> + <Translation x="[zero]" y="-[tobmodpar:WaferY]" z="-[tobmodpar:WaferZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule2:TOBModule2"/> + <rChild name="tobmodpar:TOBSiEncaps"/> + <rRotation name="tobmodpar:Rphi"/> + <Translation x="[zero]" y="-[tobmodpar:GlueSi1Y]" z="-[tobmodpar:WaferZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule2:TOBModule2"/> + <rChild name="tobmodpar:TOBSiBackEncaps"/> + <rRotation name="tobmodpar:Rphi"/> + <Translation x="[zero]" y="-[tobmodpar:GlueSi2Y]" z="-[tobmodpar:WaferZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule2:TOBModule2"/> + <rChild name="tobmodule2:TOBHybrid2"/> + <Translation x="[zero]" y="-[tobmodpar:HybridY]" z="[tobmodpar:HybridZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule2:TOBModule2"/> + <rChild name="tobmodpar:TOBPA1"/> + <Translation x="[zero]" y="-[tobmodpar:PAY]" z="[tobmodpar:PAZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule2:TOBModule2"/> + <rChild name="tobmodpar:TOBPAEncaps"/> + <rRotation name="tobmodpar:Rphi"/> + <Translation x="[zero]" y="-[tobmodpar:GluePAY]" z="[tobmodpar:GluePAZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule2:TOBModule2"/> + <rChild name="tobmodpar:TOBSideRailL"/> + <Translation x="-[tobmodpar:SideRailX]" y="-[tobmodpar:SideRailY]" z="-[tobmodpar:SideRailZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule2:TOBModule2"/> + <rChild name="tobmodpar:TOBSideRailR"/> + <Translation x="[tobmodpar:SideRailX]" y="-[tobmodpar:SideRailY]" z="-[tobmodpar:SideRailZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule2:TOBModule2"/> + <rChild name="tobmodpar:TOBFrame"/> + <Translation x="[zero]" y="-[tobmodpar:FrameY]" z="[tobmodpar:FrameZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule2:TOBModule2"/> + <rChild name="tobmodpar:TOBHybSup"/> + <Translation x="[zero]" y="-[tobmodpar:HybSupY]" z="[tobmodpar:HybSupZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule2:TOBModule2"/> + <rChild name="tobmodpar:TOBModCool1"/> + <Translation x="-[tobmodpar:ModCool1X]" y="-[tobmodpar:ModCool1Y]" z="-[tobmodpar:ModCool1Z]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tobmodule2:TOBModule2"/> + <rChild name="tobmodpar:TOBModCool1"/> + <Translation x="[tobmodpar:ModCool1X]" y="-[tobmodpar:ModCool1Y]" z="-[tobmodpar:ModCool1Z]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule2:TOBModule2"/> + <rChild name="tobmodpar:TOBModCoolComp1"/> + <Translation x="-[tobmodpar:ModCoolComp1X]" y="-[tobmodpar:ModCoolComp1Y]" z="-[tobmodpar:ModCoolComp1Z]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tobmodule2:TOBModule2"/> + <rChild name="tobmodpar:TOBModCoolComp1"/> + <Translation x="[tobmodpar:ModCoolComp1X]" y="-[tobmodpar:ModCoolComp1Y]" z="-[tobmodpar:ModCoolComp1Z]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule2:TOBModule2"/> + <rChild name="tobmodpar:TOBModCool2"/> + <Translation x="-[tobmodpar:ModCool2X]" y="-[tobmodpar:ModCool2Y]" z="[tobmodpar:ModCool2Z]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tobmodule2:TOBModule2"/> + <rChild name="tobmodpar:TOBModCool2"/> + <Translation x="[tobmodpar:ModCool2X]" y="-[tobmodpar:ModCool2Y]" z="[tobmodpar:ModCool2Z]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule2:TOBModule2"/> + <rChild name="tobmodpar:TOBModCoolComp2"/> + <Translation x="-[tobmodpar:ModCoolComp2X]" y="-[tobmodpar:ModCoolComp2Y]" z="[tobmodpar:ModCoolComp2Z]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tobmodule2:TOBModule2"/> + <rChild name="tobmodpar:TOBModCoolComp2"/> + <Translation x="[tobmodpar:ModCoolComp2X]" y="-[tobmodpar:ModCoolComp2Y]" z="[tobmodpar:ModCoolComp2Z]"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tobmodule4.xml b/examples/DDCMS/data/tobmodule4.xml new file mode 100644 index 000000000..552a871a3 --- /dev/null +++ b/examples/DDCMS/data/tobmodule4.xml @@ -0,0 +1,130 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tobmodule4.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <LogicalPartSection label="tobmodule4.xml"> + <LogicalPart name="TOBModule4" category="unspecified"> + <rSolid name="tobmodpar:TOBModule"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBHybrid4" category="unspecified"> + <rSolid name="tobmodpar:TOBHybrid"/> + <rMaterial name="tobmaterial:TOB_ele56"/> + </LogicalPart> + <LogicalPart name="TOBWaferRphi4" category="unspecified"> + <rSolid name="tobmodpar:TOBWaferRphi"/> + <rMaterial name="materials:Silicon"/> + </LogicalPart> + <LogicalPart name="TOBActiveRphi4" category="unspecified"> + <rSolid name="tobmodpar:TOBActiveRphi"/> + <rMaterial name="materials:Silicon"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tobmodule4.xml"> + <PosPart copyNumber="1"> + <rParent name="tobmodule4:TOBWaferRphi4"/> + <rChild name="tobmodule4:TOBActiveRphi4"/> + <Translation x="[zero]" y="[zero]" z="[tracker:BackPlaneDz]"/> + <rRotation name="tobmodpar:Activ"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule4:TOBActiveRphi4"/> + <rChild name="tobmodpar:TOBInactive"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule4:TOBModule4"/> + <rChild name="tobmodule4:TOBWaferRphi4"/> + <rRotation name="tobmodpar:Rphi"/> + <Translation x="[zero]" y="-[tobmodpar:WaferY]" z="-[tobmodpar:WaferZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule4:TOBModule4"/> + <rChild name="tobmodpar:TOBSiEncaps"/> + <rRotation name="tobmodpar:Rphi"/> + <Translation x="[zero]" y="-[tobmodpar:GlueSi1Y]" z="-[tobmodpar:WaferZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule4:TOBModule4"/> + <rChild name="tobmodpar:TOBSiBackEncaps"/> + <rRotation name="tobmodpar:Rphi"/> + <Translation x="[zero]" y="-[tobmodpar:GlueSi2Y]" z="-[tobmodpar:WaferZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule4:TOBModule4"/> + <rChild name="tobmodule4:TOBHybrid4"/> + <Translation x="[zero]" y="-[tobmodpar:HybridY]" z="[tobmodpar:HybridZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule4:TOBModule4"/> + <rChild name="tobmodpar:TOBPA1"/> + <Translation x="[zero]" y="-[tobmodpar:PAY]" z="[tobmodpar:PAZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule4:TOBModule4"/> + <rChild name="tobmodpar:TOBPAEncaps"/> + <rRotation name="tobmodpar:Rphi"/> + <Translation x="[zero]" y="-[tobmodpar:GluePAY]" z="[tobmodpar:GluePAZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule4:TOBModule4"/> + <rChild name="tobmodpar:TOBSideRailL"/> + <Translation x="-[tobmodpar:SideRailX]" y="-[tobmodpar:SideRailY]" z="-[tobmodpar:SideRailZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule4:TOBModule4"/> + <rChild name="tobmodpar:TOBSideRailR"/> + <Translation x="[tobmodpar:SideRailX]" y="-[tobmodpar:SideRailY]" z="-[tobmodpar:SideRailZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule4:TOBModule4"/> + <rChild name="tobmodpar:TOBFrame"/> + <Translation x="[zero]" y="-[tobmodpar:FrameY]" z="[tobmodpar:FrameZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule4:TOBModule4"/> + <rChild name="tobmodpar:TOBHybSup"/> + <Translation x="[zero]" y="-[tobmodpar:HybSupY]" z="[tobmodpar:HybSupZ]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule4:TOBModule4"/> + <rChild name="tobmodpar:TOBModCool1"/> + <Translation x="-[tobmodpar:ModCool1X]" y="-[tobmodpar:ModCool1Y]" z="-[tobmodpar:ModCool1Z]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tobmodule4:TOBModule4"/> + <rChild name="tobmodpar:TOBModCool1"/> + <Translation x="[tobmodpar:ModCool1X]" y="-[tobmodpar:ModCool1Y]" z="-[tobmodpar:ModCool1Z]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule4:TOBModule4"/> + <rChild name="tobmodpar:TOBModCoolComp1"/> + <Translation x="-[tobmodpar:ModCoolComp1X]" y="-[tobmodpar:ModCoolComp1Y]" z="-[tobmodpar:ModCoolComp1Z]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tobmodule4:TOBModule4"/> + <rChild name="tobmodpar:TOBModCoolComp1"/> + <Translation x="[tobmodpar:ModCoolComp1X]" y="-[tobmodpar:ModCoolComp1Y]" z="-[tobmodpar:ModCoolComp1Z]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule4:TOBModule4"/> + <rChild name="tobmodpar:TOBModCool2"/> + <Translation x="-[tobmodpar:ModCool2X]" y="-[tobmodpar:ModCool2Y]" z="[tobmodpar:ModCool2Z]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tobmodule4:TOBModule4"/> + <rChild name="tobmodpar:TOBModCool2"/> + <Translation x="[tobmodpar:ModCool2X]" y="-[tobmodpar:ModCool2Y]" z="[tobmodpar:ModCool2Z]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobmodule4:TOBModule4"/> + <rChild name="tobmodpar:TOBModCoolComp2"/> + <Translation x="-[tobmodpar:ModCoolComp2X]" y="-[tobmodpar:ModCoolComp2Y]" z="[tobmodpar:ModCoolComp2Z]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tobmodule4:TOBModule4"/> + <rChild name="tobmodpar:TOBModCoolComp2"/> + <Translation x="[tobmodpar:ModCoolComp2X]" y="-[tobmodpar:ModCoolComp2Y]" z="[tobmodpar:ModCoolComp2Z]"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tobrod0.xml b/examples/DDCMS/data/tobrod0.xml new file mode 100644 index 000000000..2fa93358c --- /dev/null +++ b/examples/DDCMS/data/tobrod0.xml @@ -0,0 +1,26 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tobrod0.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <LogicalPartSection label="tobrod0.xml"> + <LogicalPart name="TOBRod0" category="unspecified"> + <rSolid name="tobrodpar:TOBRod"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tobrod0.xml"> + <PosPart copyNumber="1"> + <rParent name="tobrod0:TOBRod0"/> + <rChild name="tobrod0l:TOBRod0L"/> + <rRotation name="tobrodpar:R180"/> + <Translation x="[zero]" y="[zero]" z="-([tobrodpar:RodL]-[tobrodpar:RodDL])/2"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobrod0:TOBRod0"/> + <rChild name="tobrod0h:TOBRod0H"/> + <rRotation name="tobrodpar:R180"/> + <Translation x="[zero]" y="[zero]" z="([tobrodpar:RodL]-[tobrodpar:RodDL])/2"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tobrod0c.xml b/examples/DDCMS/data/tobrod0c.xml new file mode 100644 index 000000000..4f39d1a11 --- /dev/null +++ b/examples/DDCMS/data/tobrod0c.xml @@ -0,0 +1,71 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tobrod0c.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <SolidSection label="tobrod0c.xml"> + <Tubs name="TOBSideCoolTube0" rMin="[zero]" rMax="[tobrodpar:CoolTubeHeavyR]" dz="[tobrodpar:SideCoolL]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBSideCoolFluid0" rMin="[zero]" rMax="[tobrodpar:CoolFluidHeavyR]" dz="[tobrodpar:SideCoolL]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBEndCoolTube0" rMin="[zero]" rMax="[tobrodpar:CoolTubeHeavyR]" dz="[tobrodpar:EndCoolL]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBEndCoolFluid0" rMin="[zero]" rMax="[tobrodpar:CoolFluidHeavyR]" dz="[tobrodpar:EndCoolL]" startPhi="0*deg" deltaPhi="360*deg"/> + <Box name="TOBOptFibre0" dx="[tobrodpar:OptFibreW]" dy="[tobrodpar:OptFibreH]" dz="[tobrodpar:OptFibreL]"/> + <Box name="TOBPlate01" dx="[tobrodpar:SideClampDx]" dy="[tobrodpar:SideClampDy]" dz="[tobrodpar:SideClampHDz]"/> + <Box name="TOBPlate02" dx="[tobrodpar:SideClampDx]" dy="[tobrodpar:SideClampDy]" dz="[tobrodpar:SideClampHDz]"/> + </SolidSection> + <LogicalPartSection label="tobrod0c.xml"> + <LogicalPart name="TOBSideCoolTube0" category="unspecified"> + <rSolid name="TOBSideCoolTube0"/> + <rMaterial name="trackermaterial:T_CuNi"/> + </LogicalPart> + <LogicalPart name="TOBSideCoolFluid0" category="unspecified"> + <rSolid name="TOBSideCoolFluid0"/> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C"/> + </LogicalPart> + <LogicalPart name="TOBEndCoolTube0" category="unspecified"> + <rSolid name="TOBEndCoolTube0"/> + <rMaterial name="trackermaterial:T_CuNi"/> + </LogicalPart> + <LogicalPart name="TOBEndCoolFluid0" category="unspecified"> + <rSolid name="TOBEndCoolFluid0"/> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C"/> + </LogicalPart> + <LogicalPart name="TOBOptFibre0" category="unspecified"> + <rSolid name="TOBOptFibre0"/> + <rMaterial name="tobmaterial:TOB_optfib_L12"/> + </LogicalPart> + <LogicalPart name="TOBPlate01" category="unspecified"> + <rSolid name="TOBPlate01"/> + <rMaterial name="tobmaterial:TOB_plate_B"/> + </LogicalPart> + <LogicalPart name="TOBPlate02" category="unspecified"> + <rSolid name="TOBPlate02"/> + <rMaterial name="tobmaterial:TOB_plate_C"/> + </LogicalPart> + <LogicalPart name="TOBICC01" category="unspecified"> + <rSolid name="tobrodpar:TOBICC1"/> + <rMaterial name="tobmaterial:TOB_L12_ICC1"/> + </LogicalPart> + <LogicalPart name="TOBICC02" category="unspecified"> + <rSolid name="tobrodpar:TOBICC2"/> + <rMaterial name="tobmaterial:TOB_L12_ICC2"/> + </LogicalPart> + <LogicalPart name="TOBRodConn0" category="unspecified"> + <rSolid name="tobrodpar:TOBRodConn"/> + <rMaterial name="tobmaterial:TOB_CONN12"/> + </LogicalPart> + <LogicalPart name="TOBCCUM0" category="unspecified"> + <rSolid name="tobrodpar:TOBCCUM"/> + <rMaterial name="tobmaterial:TOB_CCUM"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tobrod0c.xml"> + <PosPart copyNumber="1"> + <rParent name="tobrod0c:TOBSideCoolTube0"/> + <rChild name="tobrod0c:TOBSideCoolFluid0"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobrod0c:TOBEndCoolTube0"/> + <rChild name="tobrod0c:TOBEndCoolFluid0"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tobrod0h.xml b/examples/DDCMS/data/tobrod0h.xml new file mode 100644 index 000000000..05c2422e9 --- /dev/null +++ b/examples/DDCMS/data/tobrod0h.xml @@ -0,0 +1,144 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tobrod0h.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <LogicalPartSection label="tobrod0h.xml"> + <LogicalPart name="TOBRod0H" category="unspecified"> + <rSolid name="tobrodpar:TOBRodH"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBRodCentral0H" category="unspecified"> + <rSolid name="tobrodpar:TOBRodCentralH"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tobrod0h.xml"> + <PosPart copyNumber="1"> + <rParent name="tobrod0h:TOBRod0H"/> + <rChild name="tobrod0h:TOBRodCentral0H"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTOBRodAlgo"> + <rParent name="tobrod0h:TOBRod0H"/> + <Numeric name="Shift" value="-([tobrodpar:RodL]-[tobrodpar:RodDL])/2"/> + <String name="CentralName" value="tobrod0h:TOBRodCentral0H"/> + <Vector name="SideRodName" type="string" nEntries="2"> + tobrodpar:TOBSideRod1, tobrodpar:TOBSideRod2 + </Vector> + <Vector name="SideRodX" type="numeric" nEntries="2"> + -[tobrodpar:SideRodX], [tobrodpar:SideRodX] + </Vector> + <Vector name="SideRodY" type="numeric" nEntries="2"> + [tobrodpar:RodY], -[tobrodpar:RodY] + </Vector> + <Vector name="SideRodZ" type="numeric" nEntries="2"> + [zero], [tobrodpar:RodDL] + </Vector> + <String name="EndRod1Name" value="tobrodpar:TOBEndRod1"/> + <Vector name="EndRod1Y" type="numeric" nEntries="2"> + -[tobrodpar:RodY], [tobrodpar:RodY] + </Vector> + <Vector name="EndRod1Z" type="numeric" nEntries="2"> + [tobrodpar:EndRod1Z], [tobrodpar:EndRod1Z] + </Vector> + <String name="EndRod2Name" value="tobrodpar:TOBEndRod2"/> + <Numeric name="EndRod2Y" value="-[tobrodpar:EndRod2Y]"/> + <Numeric name="EndRod2Z" value="[tobrodpar:EndRod2Z]"/> + <String name="CableName" value="tobrodpar:TOBCable"/> + <Numeric name="CableZ" value="[tobrodpar:CableZ]"/> + <String name="ClampName" value="tobrodpar:TOBClamp"/> + <Vector name="ClampX" type="numeric" nEntries="4"> + -[tobrodpar:ClampX], -[tobrodpar:ClampX], [tobrodpar:ClampX], + [tobrodpar:ClampX] + </Vector> + <Vector name="ClampZ" type="numeric" nEntries="4"> + [tobrodpar:ClampZ2], [tobrodpar:ClampZ1], [tobrodpar:ClampZ2], + [tobrodpar:ClampZ1] + </Vector> + <String name="SideCoolName" value="tobrod0c:TOBSideCoolTube0"/> + <Vector name="SideCoolX" type="numeric" nEntries="2"> + -[tobrodpar:SideCoolX], [tobrodpar:SideCoolX] + </Vector> + <Vector name="SideCoolY" type="numeric" nEntries="2"> + -[tobrodpar:SideCoolY], -[tobrodpar:SideCoolY] + </Vector> + <Vector name="SideCoolZ" type="numeric" nEntries="2"> + [tobrodpar:SideCoolZ], [tobrodpar:SideCoolZ] + </Vector> + <String name="EndCoolName" value="tobrod0c:TOBEndCoolTube0"/> + <String name="EndCoolRot" value="tobrodpar:90XD"/> + <Numeric name="EndCoolY" value="-[tobrodpar:EndCoolY]"/> + <Numeric name="EndCoolZ" value="[tobrodpar:EndCoolZ]"/> + <String name="OptFibreName" value="tobrod0c:TOBOptFibre0"/> + <Vector name="optFibreX" type="numeric" nEntries="2"> + -[tobrodpar:OptFibreX], [tobrodpar:OptFibreX] + </Vector> + <Vector name="optFibreZ" type="numeric" nEntries="2"> + [tobrodpar:OptFibreZ], [tobrodpar:OptFibreZ] + </Vector> + <String name="SideClamp1Name" value="tobrod0c:TOBPlate01"/> + <Vector name="SideClampX" type="numeric" nEntries="12"> + -[tobrodpar:SideClampX], [tobrodpar:SideClampX], -[tobrodpar:SideClampX], + [tobrodpar:SideClampX], -[tobrodpar:SideClampX], [tobrodpar:SideClampX], + -[tobrodpar:SideClampX], [tobrodpar:SideClampX], -[tobrodpar:SideClampX], + [tobrodpar:SideClampX], -[tobrodpar:SideClampX], [tobrodpar:SideClampX] + </Vector> + <Vector name="SideClamp1DZ" type="numeric" nEntries="12"> + -[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z], + -[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z], + -[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], + [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z] + </Vector> + <String name="SideClamp2Name" value="tobrod0c:TOBPlate02"/> + <Vector name="SideClamp2DZ" type="numeric" nEntries="12"> + [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], + [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], + [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z], + -[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z] + </Vector> + <String name="ModuleName" value="tobmodule0:TOBModule0"/> + <Vector name="ModuleRot" type="string" nEntries="6"> + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:NULL, + tobrodpar:NULL, tobrodpar:180D, tobrodpar:180D</Vector> + <Vector name="ModuleY" type="numeric" nEntries="6"> + [tobrodpar:ModuleY], -[tobrodpar:ModuleY], [tobrodpar:ModuleY], + -[tobrodpar:ModuleY], [tobrodpar:ModuleY], -[tobrodpar:ModuleY] + </Vector> + <Vector name="ModuleZ" type="numeric" nEntries="6"> + [tobrodpar:ModuleZ07], [tobrodpar:ModuleZ08], [tobrodpar:ModuleZ09], + [tobrodpar:ModuleZ10], [tobrodpar:ModuleZ11], [tobrodpar:ModuleZ12] + </Vector> + <Vector name="ICCName" type="string" nEntries="6"> + tobrod0c:TOBICC01, tobrod0c:TOBICC01, tobrod0c:TOBICC02, + tobrod0c:TOBICC02, tobrod0c:TOBCCUM0, tobrod0c:TOBRodConn0 + </Vector> + <Vector name="ICCY" type="numeric" nEntries="6"> + [tobrodpar:ICCY1], -[tobrodpar:ICCY1], [tobrodpar:ICCY1], + -[tobrodpar:ICCY1], [tobrodpar:ICCY2], [tobrodpar:ICCY1] + </Vector> + <Vector name="ICCZ" type="numeric" nEntries="6"> + [tobrodpar:ICCZ07], [tobrodpar:ICCZ08], [tobrodpar:ICCZ09], + [tobrodpar:ICCZ10], [tobrodpar:ICCZ11], [tobrodpar:ICCZ12] + </Vector> + <String name="AOHName" value="tobrodpar:TOBAOH"/> + <Vector name="AOHCopies" type="numeric" nEntries="6"> + 2 , 2 , 4 , 4 , 0 , 0 + </Vector> + <Vector name="AOHx" type="numeric" nEntries="6"> + -[tobrodpar:AOHx] , [tobrodpar:AOHx] , + [tobrodpar:AOHx] , [tobrodpar:AOHx] , + [zero] , [zero] + </Vector> + <Vector name="AOHy" type="numeric" nEntries="6"> + [tobrodpar:AOHy] , -[tobrodpar:AOHy] , + [tobrodpar:AOHy] , -[tobrodpar:AOHy] , + [zero] , [zero] + </Vector> + <Vector name="AOHz" type="numeric" nEntries="6"> + [zero] , [zero] , + [tobrodpar:AOHz] , -[tobrodpar:AOHz] , + [zero] , [zero] + </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tobrod0l.xml b/examples/DDCMS/data/tobrod0l.xml new file mode 100644 index 000000000..a2f04044e --- /dev/null +++ b/examples/DDCMS/data/tobrod0l.xml @@ -0,0 +1,144 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tobrod0l.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <LogicalPartSection label="tobrod0l.xml"> + <LogicalPart name="TOBRod0L" category="unspecified"> + <rSolid name="tobrodpar:TOBRodL"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBRodCentral0L" category="unspecified"> + <rSolid name="tobrodpar:TOBRodCentralL"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tobrod0l.xml"> + <PosPart copyNumber="1"> + <rParent name="tobrod0l:TOBRod0L"/> + <rChild name="tobrod0l:TOBRodCentral0L"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTOBRodAlgo"> + <rParent name="tobrod0l:TOBRod0L"/> + <Numeric name="Shift" value="([tobrodpar:RodL]-[tobrodpar:RodDL])/2"/> + <String name="CentralName" value="tobrod0l:TOBRodCentral0L"/> + <Vector name="SideRodName" type="string" nEntries="2"> + tobrodpar:TOBSideRod1, tobrodpar:TOBSideRod2 + </Vector> + <Vector name="SideRodX" type="numeric" nEntries="2"> + -[tobrodpar:SideRodX], [tobrodpar:SideRodX] + </Vector> + <Vector name="SideRodY" type="numeric" nEntries="2"> + -[tobrodpar:RodY], [tobrodpar:RodY] + </Vector> + <Vector name="SideRodZ" type="numeric" nEntries="2"> + [zero], -[tobrodpar:RodDL] + </Vector> + <String name="EndRod1Name" value="tobrodpar:TOBEndRod1"/> + <Vector name="EndRod1Y" type="numeric" nEntries="2"> + -[tobrodpar:RodY], [tobrodpar:RodY] + </Vector> + <Vector name="EndRod1Z" type="numeric" nEntries="2"> + -[tobrodpar:EndRod1Z], -[tobrodpar:EndRod1Z] + </Vector> + <String name="EndRod2Name" value="tobrodpar:TOBEndRod2"/> + <Numeric name="EndRod2Y" value="[tobrodpar:EndRod2Y]"/> + <Numeric name="EndRod2Z" value="-[tobrodpar:EndRod2Z]"/> + <String name="CableName" value="tobrodpar:TOBCable"/> + <Numeric name="CableZ" value="-[tobrodpar:CableZ]"/> + <String name="ClampName" value="tobrodpar:TOBClamp"/> + <Vector name="ClampX" type="numeric" nEntries="4"> + -[tobrodpar:ClampX], -[tobrodpar:ClampX], [tobrodpar:ClampX], + [tobrodpar:ClampX] + </Vector> + <Vector name="ClampZ" type="numeric" nEntries="4"> + -[tobrodpar:ClampZ1], -[tobrodpar:ClampZ2], -[tobrodpar:ClampZ1], + -[tobrodpar:ClampZ2] + </Vector> + <String name="SideCoolName" value="tobrod0c:TOBSideCoolTube0"/> + <Vector name="SideCoolX" type="numeric" nEntries="2"> + -[tobrodpar:SideCoolX], [tobrodpar:SideCoolX] + </Vector> + <Vector name="SideCoolY" type="numeric" nEntries="2"> + [tobrodpar:SideCoolY], [tobrodpar:SideCoolY] + </Vector> + <Vector name="SideCoolZ" type="numeric" nEntries="2"> + -[tobrodpar:SideCoolZ], -[tobrodpar:SideCoolZ] + </Vector> + <String name="EndCoolName" value="tobrod0c:TOBEndCoolTube0"/> + <String name="EndCoolRot" value="tobrodpar:90XD"/> + <Numeric name="EndCoolY" value="[tobrodpar:EndCoolY]"/> + <Numeric name="EndCoolZ" value="-[tobrodpar:EndCoolZ]"/> + <String name="OptFibreName" value="tobrod0c:TOBOptFibre0"/> + <Vector name="optFibreX" type="numeric" nEntries="2"> + -[tobrodpar:OptFibreX], [tobrodpar:OptFibreX] + </Vector> + <Vector name="optFibreZ" type="numeric" nEntries="2"> + -[tobrodpar:OptFibreZ], -[tobrodpar:OptFibreZ] + </Vector> + <String name="SideClamp1Name" value="tobrod0c:TOBPlate01"/> + <Vector name="SideClampX" type="numeric" nEntries="12"> + -[tobrodpar:SideClampX], [tobrodpar:SideClampX], -[tobrodpar:SideClampX], + [tobrodpar:SideClampX], -[tobrodpar:SideClampX], [tobrodpar:SideClampX], + -[tobrodpar:SideClampX], [tobrodpar:SideClampX], -[tobrodpar:SideClampX], + [tobrodpar:SideClampX], -[tobrodpar:SideClampX], [tobrodpar:SideClampX] + </Vector> + <Vector name="SideClamp1DZ" type="numeric" nEntries="12"> + -[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z], + -[tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], + [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], + [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z] + </Vector> + <String name="SideClamp2Name" value="tobrod0c:TOBPlate02"/> + <Vector name="SideClamp2DZ" type="numeric" nEntries="12"> + [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], + [tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z], + -[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z], + -[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z] + </Vector> + <String name="ModuleName" value="tobmodule0:TOBModule0"/> + <Vector name="ModuleRot" type="string" nEntries="6"> + tobrodpar:NULL, tobrodpar:NULL, tobrodpar:180D, + tobrodpar:180D, tobrodpar:180D, tobrodpar:180D</Vector> + <Vector name="ModuleY" type="numeric" nEntries="6"> + [tobrodpar:ModuleY], -[tobrodpar:ModuleY], [tobrodpar:ModuleY], + -[tobrodpar:ModuleY], [tobrodpar:ModuleY], -[tobrodpar:ModuleY] + </Vector> + <Vector name="ModuleZ" type="numeric" nEntries="6"> + [tobrodpar:ModuleZ01], [tobrodpar:ModuleZ02], [tobrodpar:ModuleZ03], + [tobrodpar:ModuleZ04], [tobrodpar:ModuleZ05], [tobrodpar:ModuleZ06] + </Vector> + <Vector name="ICCName" type="string" nEntries="6"> + tobrod0c:TOBRodConn0, tobrod0c:TOBCCUM0, tobrod0c:TOBICC02, + tobrod0c:TOBICC02, tobrod0c:TOBICC01, tobrod0c:TOBICC01 + </Vector> + <Vector name="ICCY" type="numeric" nEntries="6"> + -[tobrodpar:ICCY1], -[tobrodpar:ICCY2], [tobrodpar:ICCY1], + -[tobrodpar:ICCY1], [tobrodpar:ICCY1], -[tobrodpar:ICCY1] + </Vector> + <Vector name="ICCZ" type="numeric" nEntries="6"> + [tobrodpar:ICCZ01], [tobrodpar:ICCZ02], [tobrodpar:ICCZ03], + [tobrodpar:ICCZ04], [tobrodpar:ICCZ05], [tobrodpar:ICCZ06] + </Vector> + <String name="AOHName" value="tobrodpar:TOBAOH"/> + <Vector name="AOHCopies" type="numeric" nEntries="6"> + 0 , 0 , 4 , 4 , 2 , 2 + </Vector> + <Vector name="AOHx" type="numeric" nEntries="6"> + [zero] , [zero] , + [tobrodpar:AOHx] , [tobrodpar:AOHx] , + [tobrodpar:AOHx] , -[tobrodpar:AOHx] + </Vector> + <Vector name="AOHy" type="numeric" nEntries="6"> + [zero] , [zero] , + [tobrodpar:AOHy] , -[tobrodpar:AOHy] , + [tobrodpar:AOHy] , -[tobrodpar:AOHy] + </Vector> + <Vector name="AOHz" type="numeric" nEntries="6"> + [zero] , [zero] , + [tobrodpar:AOHz] , -[tobrodpar:AOHz] , + [zero] , [zero] + </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tobrod1.xml b/examples/DDCMS/data/tobrod1.xml new file mode 100644 index 000000000..a92e39745 --- /dev/null +++ b/examples/DDCMS/data/tobrod1.xml @@ -0,0 +1,26 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tobrod1.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <LogicalPartSection label="tobrod1.xml"> + <LogicalPart name="TOBRod1" category="unspecified"> + <rSolid name="tobrodpar:TOBRod"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tobrod1.xml"> + <PosPart copyNumber="1"> + <rParent name="tobrod1:TOBRod1"/> + <rChild name="tobrod1l:TOBRod1L"/> + <rRotation name="tobrodpar:180X"/> + <Translation x="[zero]" y="[zero]" z="([tobrodpar:RodL]-[tobrodpar:RodDL])/2"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobrod1:TOBRod1"/> + <rChild name="tobrod1h:TOBRod1H"/> + <rRotation name="tobrodpar:180X"/> + <Translation x="[zero]" y="[zero]" z="-([tobrodpar:RodL]-[tobrodpar:RodDL])/2"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tobrod1h.xml b/examples/DDCMS/data/tobrod1h.xml new file mode 100644 index 000000000..cd8ad1384 --- /dev/null +++ b/examples/DDCMS/data/tobrod1h.xml @@ -0,0 +1,144 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tobrod1h.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <LogicalPartSection label="tobrod1h.xml"> + <LogicalPart name="TOBRod1H" category="unspecified"> + <rSolid name="tobrodpar:TOBRodH"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBRodCentral1H" category="unspecified"> + <rSolid name="tobrodpar:TOBRodCentralH"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tobrod1h.xml"> + <PosPart copyNumber="1"> + <rParent name="tobrod1h:TOBRod1H"/> + <rChild name="tobrod1h:TOBRodCentral1H"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTOBRodAlgo"> + <rParent name="tobrod1h:TOBRod1H"/> + <Numeric name="Shift" value="-([tobrodpar:RodL]-[tobrodpar:RodDL])/2"/> + <String name="CentralName" value="tobrod1h:TOBRodCentral1H"/> + <Vector name="SideRodName" type="string" nEntries="2"> + tobrodpar:TOBSideRod1, tobrodpar:TOBSideRod2 + </Vector> + <Vector name="SideRodX" type="numeric" nEntries="2"> + -[tobrodpar:SideRodX], [tobrodpar:SideRodX] + </Vector> + <Vector name="SideRodY" type="numeric" nEntries="2"> + [tobrodpar:RodY], -[tobrodpar:RodY] + </Vector> + <Vector name="SideRodZ" type="numeric" nEntries="2"> + [zero], [tobrodpar:RodDL] + </Vector> + <String name="EndRod1Name" value="tobrodpar:TOBEndRod1"/> + <Vector name="EndRod1Y" type="numeric" nEntries="2"> + -[tobrodpar:RodY], [tobrodpar:RodY] + </Vector> + <Vector name="EndRod1Z" type="numeric" nEntries="2"> + [tobrodpar:EndRod1Z], [tobrodpar:EndRod1Z] + </Vector> + <String name="EndRod2Name" value="tobrodpar:TOBEndRod2"/> + <Numeric name="EndRod2Y" value="-[tobrodpar:EndRod2Y]"/> + <Numeric name="EndRod2Z" value="[tobrodpar:EndRod2Z]"/> + <String name="CableName" value="tobrodpar:TOBCable"/> + <Numeric name="CableZ" value="[tobrodpar:CableZ]"/> + <String name="ClampName" value="tobrodpar:TOBClamp"/> + <Vector name="ClampX" type="numeric" nEntries="4"> + -[tobrodpar:ClampX], -[tobrodpar:ClampX], [tobrodpar:ClampX], + [tobrodpar:ClampX] + </Vector> + <Vector name="ClampZ" type="numeric" nEntries="4"> + [tobrodpar:ClampZ2], [tobrodpar:ClampZ1], [tobrodpar:ClampZ2], + [tobrodpar:ClampZ1] + </Vector> + <String name="SideCoolName" value="tobrod0c:TOBSideCoolTube0"/> + <Vector name="SideCoolX" type="numeric" nEntries="2"> + -[tobrodpar:SideCoolX], [tobrodpar:SideCoolX] + </Vector> + <Vector name="SideCoolY" type="numeric" nEntries="2"> + -[tobrodpar:SideCoolY], -[tobrodpar:SideCoolY] + </Vector> + <Vector name="SideCoolZ" type="numeric" nEntries="2"> + [tobrodpar:SideCoolZ], [tobrodpar:SideCoolZ] + </Vector> + <String name="EndCoolName" value="tobrod0c:TOBEndCoolTube0"/> + <String name="EndCoolRot" value="tobrodpar:90XD"/> + <Numeric name="EndCoolY" value="-[tobrodpar:EndCoolY]"/> + <Numeric name="EndCoolZ" value="[tobrodpar:EndCoolZ]"/> + <String name="OptFibreName" value="tobrod0c:TOBOptFibre0"/> + <Vector name="optFibreX" type="numeric" nEntries="2"> + -[tobrodpar:OptFibreX], [tobrodpar:OptFibreX] + </Vector> + <Vector name="optFibreZ" type="numeric" nEntries="2"> + [tobrodpar:OptFibreZ], [tobrodpar:OptFibreZ] + </Vector> + <String name="SideClamp1Name" value="tobrod0c:TOBPlate01"/> + <Vector name="SideClampX" type="numeric" nEntries="12"> + -[tobrodpar:SideClampX], [tobrodpar:SideClampX], -[tobrodpar:SideClampX], + [tobrodpar:SideClampX], -[tobrodpar:SideClampX], [tobrodpar:SideClampX], + -[tobrodpar:SideClampX], [tobrodpar:SideClampX], -[tobrodpar:SideClampX], + [tobrodpar:SideClampX], -[tobrodpar:SideClampX], [tobrodpar:SideClampX] + </Vector> + <Vector name="SideClamp1DZ" type="numeric" nEntries="12"> + -[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z], + -[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z], + -[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], + [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z] + </Vector> + <String name="SideClamp2Name" value="tobrod0c:TOBPlate02"/> + <Vector name="SideClamp2DZ" type="numeric" nEntries="12"> + [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], + [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], + [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z], + -[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z] + </Vector> + <String name="ModuleName" value="tobmodule0:TOBModule0"/> + <Vector name="ModuleRot" type="string" nEntries="6"> + tobrodpar:R180, tobrodpar:R180, tobrodpar:R180, + tobrodpar:R180, tobrodpar:180X, tobrodpar:180X</Vector> + <Vector name="ModuleY" type="numeric" nEntries="6"> + [tobrodpar:ModuleY], -[tobrodpar:ModuleY], [tobrodpar:ModuleY], + -[tobrodpar:ModuleY], [tobrodpar:ModuleY], -[tobrodpar:ModuleY] + </Vector> + <Vector name="ModuleZ" type="numeric" nEntries="6"> + [tobrodpar:ModuleZ07], [tobrodpar:ModuleZ08], [tobrodpar:ModuleZ09], + [tobrodpar:ModuleZ10], [tobrodpar:ModuleZ11], [tobrodpar:ModuleZ12] + </Vector> + <Vector name="ICCName" type="string" nEntries="6"> + tobrod0c:TOBICC01, tobrod0c:TOBICC01, tobrod0c:TOBICC02, + tobrod0c:TOBICC02, tobrod0c:TOBCCUM0, tobrod0c:TOBRodConn0 + </Vector> + <Vector name="ICCY" type="numeric" nEntries="6"> + [tobrodpar:ICCY1], -[tobrodpar:ICCY1], [tobrodpar:ICCY1], + -[tobrodpar:ICCY1], [tobrodpar:ICCY2], [tobrodpar:ICCY1] + </Vector> + <Vector name="ICCZ" type="numeric" nEntries="6"> + [tobrodpar:ICCZ07], [tobrodpar:ICCZ08], [tobrodpar:ICCZ09], + [tobrodpar:ICCZ10], [tobrodpar:ICCZ11], [tobrodpar:ICCZ12] + </Vector> + <String name="AOHName" value="tobrodpar:TOBAOH"/> + <Vector name="AOHCopies" type="numeric" nEntries="6"> + 2 , 2 , 4 , 4 , 0 , 0 + </Vector> + <Vector name="AOHx" type="numeric" nEntries="6"> + -[tobrodpar:AOHx] , [tobrodpar:AOHx] , + [tobrodpar:AOHx] , [tobrodpar:AOHx] , + [zero] , [zero] + </Vector> + <Vector name="AOHy" type="numeric" nEntries="6"> + [tobrodpar:AOHy] , -[tobrodpar:AOHy] , + [tobrodpar:AOHy] , -[tobrodpar:AOHy] , + [zero] , [zero] + </Vector> + <Vector name="AOHz" type="numeric" nEntries="6"> + [zero] , [zero] , + [tobrodpar:AOHz] , -[tobrodpar:AOHz] , + [zero] , [zero] + </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tobrod1l.xml b/examples/DDCMS/data/tobrod1l.xml new file mode 100644 index 000000000..776006d83 --- /dev/null +++ b/examples/DDCMS/data/tobrod1l.xml @@ -0,0 +1,144 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tobrod1l.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <LogicalPartSection label="tobrod1l.xml"> + <LogicalPart name="TOBRod1L" category="unspecified"> + <rSolid name="tobrodpar:TOBRodL"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBRodCentral1L" category="unspecified"> + <rSolid name="tobrodpar:TOBRodCentralL"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tobrod1l.xml"> + <PosPart copyNumber="1"> + <rParent name="tobrod1l:TOBRod1L"/> + <rChild name="tobrod1l:TOBRodCentral1L"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTOBRodAlgo"> + <rParent name="tobrod1l:TOBRod1L"/> + <Numeric name="Shift" value="([tobrodpar:RodL]-[tobrodpar:RodDL])/2"/> + <String name="CentralName" value="tobrod1l:TOBRodCentral1L"/> + <Vector name="SideRodName" type="string" nEntries="2"> + tobrodpar:TOBSideRod1, tobrodpar:TOBSideRod2 + </Vector> + <Vector name="SideRodX" type="numeric" nEntries="2"> + -[tobrodpar:SideRodX], [tobrodpar:SideRodX] + </Vector> + <Vector name="SideRodY" type="numeric" nEntries="2"> + -[tobrodpar:RodY], [tobrodpar:RodY] + </Vector> + <Vector name="SideRodZ" type="numeric" nEntries="2"> + [zero], -[tobrodpar:RodDL] + </Vector> + <String name="EndRod1Name" value="tobrodpar:TOBEndRod1"/> + <Vector name="EndRod1Y" type="numeric" nEntries="2"> + -[tobrodpar:RodY], [tobrodpar:RodY] + </Vector> + <Vector name="EndRod1Z" type="numeric" nEntries="2"> + -[tobrodpar:EndRod1Z], -[tobrodpar:EndRod1Z] + </Vector> + <String name="EndRod2Name" value="tobrodpar:TOBEndRod2"/> + <Numeric name="EndRod2Y" value="[tobrodpar:EndRod2Y]"/> + <Numeric name="EndRod2Z" value="-[tobrodpar:EndRod2Z]"/> + <String name="CableName" value="tobrodpar:TOBCable"/> + <Numeric name="CableZ" value="-[tobrodpar:CableZ]"/> + <String name="ClampName" value="tobrodpar:TOBClamp"/> + <Vector name="ClampX" type="numeric" nEntries="4"> + -[tobrodpar:ClampX], -[tobrodpar:ClampX], [tobrodpar:ClampX], + [tobrodpar:ClampX] + </Vector> + <Vector name="ClampZ" type="numeric" nEntries="4"> + -[tobrodpar:ClampZ1], -[tobrodpar:ClampZ2], -[tobrodpar:ClampZ1], + -[tobrodpar:ClampZ2] + </Vector> + <String name="SideCoolName" value="tobrod0c:TOBSideCoolTube0"/> + <Vector name="SideCoolX" type="numeric" nEntries="2"> + -[tobrodpar:SideCoolX], [tobrodpar:SideCoolX] + </Vector> + <Vector name="SideCoolY" type="numeric" nEntries="2"> + [tobrodpar:SideCoolY], [tobrodpar:SideCoolY] + </Vector> + <Vector name="SideCoolZ" type="numeric" nEntries="2"> + -[tobrodpar:SideCoolZ], -[tobrodpar:SideCoolZ] + </Vector> + <String name="EndCoolName" value="tobrod0c:TOBEndCoolTube0"/> + <String name="EndCoolRot" value="tobrodpar:90XD"/> + <Numeric name="EndCoolY" value="[tobrodpar:EndCoolY]"/> + <Numeric name="EndCoolZ" value="-[tobrodpar:EndCoolZ]"/> + <String name="OptFibreName" value="tobrod0c:TOBOptFibre0"/> + <Vector name="optFibreX" type="numeric" nEntries="2"> + -[tobrodpar:OptFibreX], [tobrodpar:OptFibreX] + </Vector> + <Vector name="optFibreZ" type="numeric" nEntries="2"> + -[tobrodpar:OptFibreZ], -[tobrodpar:OptFibreZ] + </Vector> + <String name="SideClamp1Name" value="tobrod0c:TOBPlate01"/> + <Vector name="SideClampX" type="numeric" nEntries="12"> + -[tobrodpar:SideClampX], [tobrodpar:SideClampX], -[tobrodpar:SideClampX], + [tobrodpar:SideClampX], -[tobrodpar:SideClampX], [tobrodpar:SideClampX], + -[tobrodpar:SideClampX], [tobrodpar:SideClampX], -[tobrodpar:SideClampX], + [tobrodpar:SideClampX], -[tobrodpar:SideClampX], [tobrodpar:SideClampX] + </Vector> + <Vector name="SideClamp1DZ" type="numeric" nEntries="12"> + -[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z], + -[tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], + [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], + [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z] + </Vector> + <String name="SideClamp2Name" value="tobrod0c:TOBPlate02"/> + <Vector name="SideClamp2DZ" type="numeric" nEntries="12"> + [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], + [tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z], + -[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z], + -[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z] + </Vector> + <String name="ModuleName" value="tobmodule0:TOBModule0"/> + <Vector name="ModuleRot" type="string" nEntries="6"> + tobrodpar:R180, tobrodpar:R180, tobrodpar:180X, + tobrodpar:180X, tobrodpar:180X, tobrodpar:180X</Vector> + <Vector name="ModuleY" type="numeric" nEntries="6"> + [tobrodpar:ModuleY], -[tobrodpar:ModuleY], [tobrodpar:ModuleY], + -[tobrodpar:ModuleY], [tobrodpar:ModuleY], -[tobrodpar:ModuleY] + </Vector> + <Vector name="ModuleZ" type="numeric" nEntries="6"> + [tobrodpar:ModuleZ01], [tobrodpar:ModuleZ02], [tobrodpar:ModuleZ03], + [tobrodpar:ModuleZ04], [tobrodpar:ModuleZ05], [tobrodpar:ModuleZ06] + </Vector> + <Vector name="ICCName" type="string" nEntries="6"> + tobrod0c:TOBRodConn0, tobrod0c:TOBCCUM0, tobrod0c:TOBICC02, + tobrod0c:TOBICC02, tobrod0c:TOBICC01, tobrod0c:TOBICC01 + </Vector> + <Vector name="ICCY" type="numeric" nEntries="6"> + -[tobrodpar:ICCY1], -[tobrodpar:ICCY2], [tobrodpar:ICCY1], + -[tobrodpar:ICCY1], [tobrodpar:ICCY1], -[tobrodpar:ICCY1] + </Vector> + <Vector name="ICCZ" type="numeric" nEntries="6"> + [tobrodpar:ICCZ01], [tobrodpar:ICCZ02], [tobrodpar:ICCZ03], + [tobrodpar:ICCZ04], [tobrodpar:ICCZ05], [tobrodpar:ICCZ06] + </Vector> + <String name="AOHName" value="tobrodpar:TOBAOH"/> + <Vector name="AOHCopies" type="numeric" nEntries="6"> + 0 , 0 , 4 , 4 , 2 , 2 + </Vector> + <Vector name="AOHx" type="numeric" nEntries="6"> + [zero] , [zero] , + [tobrodpar:AOHx] , [tobrodpar:AOHx] , + [tobrodpar:AOHx] , -[tobrodpar:AOHx] + </Vector> + <Vector name="AOHy" type="numeric" nEntries="6"> + [zero] , [zero] , + [tobrodpar:AOHy] , -[tobrodpar:AOHy] , + [tobrodpar:AOHy] , -[tobrodpar:AOHy] + </Vector> + <Vector name="AOHz" type="numeric" nEntries="6"> + [zero] , [zero] , + [tobrodpar:AOHz] , -[tobrodpar:AOHz] , + [zero] , [zero] + </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tobrod2.xml b/examples/DDCMS/data/tobrod2.xml new file mode 100644 index 000000000..4328e1110 --- /dev/null +++ b/examples/DDCMS/data/tobrod2.xml @@ -0,0 +1,26 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tobrod2.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <LogicalPartSection label="tobrod2.xml"> + <LogicalPart name="TOBRod2" category="unspecified"> + <rSolid name="tobrodpar:TOBRod"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tobrod2.xml"> + <PosPart copyNumber="1"> + <rParent name="tobrod2:TOBRod2"/> + <rChild name="tobrod2l:TOBRod2L"/> + <rRotation name="tobrodpar:R180"/> + <Translation x="[zero]" y="[zero]" z="-([tobrodpar:RodL]-[tobrodpar:RodDL])/2"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobrod2:TOBRod2"/> + <rChild name="tobrod2h:TOBRod2H"/> + <rRotation name="tobrodpar:R180"/> + <Translation x="[zero]" y="[zero]" z="([tobrodpar:RodL]-[tobrodpar:RodDL])/2"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tobrod2c.xml b/examples/DDCMS/data/tobrod2c.xml new file mode 100644 index 000000000..0ff8d42bd --- /dev/null +++ b/examples/DDCMS/data/tobrod2c.xml @@ -0,0 +1,71 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tobrod2c.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <SolidSection label="tobrod2c.xml"> + <Tubs name="TOBSideCoolTube2" rMin="[zero]" rMax="[tobrodpar:CoolTubeLightR]" dz="[tobrodpar:SideCoolL]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBSideCoolFluid2" rMin="[zero]" rMax="[tobrodpar:CoolFluidLightR]" dz="[tobrodpar:SideCoolL]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBEndCoolTube2" rMin="[zero]" rMax="[tobrodpar:CoolTubeLightR]" dz="[tobrodpar:EndCoolL]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBEndCoolFluid2" rMin="[zero]" rMax="[tobrodpar:CoolFluidLightR]" dz="[tobrodpar:EndCoolL]" startPhi="0*deg" deltaPhi="360*deg"/> + <Box name="TOBOptFibre2" dx="[tobrodpar:OptFibreW]" dy="[tobrodpar:OptFibreH]" dz="[tobrodpar:OptFibreL]"/> + <Box name="TOBPlate21" dx="[tobrodpar:SideClampDx]" dy="[tobrodpar:SideClampDy]" dz="[tobrodpar:SideClampLDz]"/> + <Box name="TOBPlate22" dx="[tobrodpar:SideClampDx]" dy="[tobrodpar:SideClampDy]" dz="[tobrodpar:SideClampLDz]"/> + </SolidSection> + <LogicalPartSection label="tobrod2c.xml"> + <LogicalPart name="TOBSideCoolTube2" category="unspecified"> + <rSolid name="TOBSideCoolTube2"/> + <rMaterial name="trackermaterial:T_CuNi"/> + </LogicalPart> + <LogicalPart name="TOBSideCoolFluid2" category="unspecified"> + <rSolid name="TOBSideCoolFluid2"/> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C"/> + </LogicalPart> + <LogicalPart name="TOBEndCoolTube2" category="unspecified"> + <rSolid name="TOBEndCoolTube2"/> + <rMaterial name="trackermaterial:T_CuNi"/> + </LogicalPart> + <LogicalPart name="TOBEndCoolFluid2" category="unspecified"> + <rSolid name="TOBEndCoolFluid2"/> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C"/> + </LogicalPart> + <LogicalPart name="TOBOptFibre2" category="unspecified"> + <rSolid name="TOBOptFibre2"/> + <rMaterial name="tobmaterial:TOB_optfib_L34"/> + </LogicalPart> + <LogicalPart name="TOBPlate21" category="unspecified"> + <rSolid name="TOBPlate21"/> + <rMaterial name="tobmaterial:TOB_plate_B"/> + </LogicalPart> + <LogicalPart name="TOBPlate22" category="unspecified"> + <rSolid name="TOBPlate22"/> + <rMaterial name="tobmaterial:TOB_plate_C"/> + </LogicalPart> + <LogicalPart name="TOBICC21" category="unspecified"> + <rSolid name="tobrodpar:TOBICC1"/> + <rMaterial name="tobmaterial:TOB_L34_ICC1"/> + </LogicalPart> + <LogicalPart name="TOBICC22" category="unspecified"> + <rSolid name="tobrodpar:TOBICC2"/> + <rMaterial name="tobmaterial:TOB_L34_ICC2"/> + </LogicalPart> + <LogicalPart name="TOBRodConn2" category="unspecified"> + <rSolid name="tobrodpar:TOBRodConn"/> + <rMaterial name="tobmaterial:TOB_CONN34"/> + </LogicalPart> + <LogicalPart name="TOBCCUM2" category="unspecified"> + <rSolid name="tobrodpar:TOBCCUM"/> + <rMaterial name="tobmaterial:TOB_CCUM"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tobrod2c.xml"> + <PosPart copyNumber="1"> + <rParent name="tobrod2c:TOBSideCoolTube2"/> + <rChild name="tobrod2c:TOBSideCoolFluid2"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobrod2c:TOBEndCoolTube2"/> + <rChild name="tobrod2c:TOBEndCoolFluid2"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tobrod2h.xml b/examples/DDCMS/data/tobrod2h.xml new file mode 100644 index 000000000..f84dcc6d5 --- /dev/null +++ b/examples/DDCMS/data/tobrod2h.xml @@ -0,0 +1,144 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tobrod2h.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <LogicalPartSection label="tobrod2h.xml"> + <LogicalPart name="TOBRod2H" category="unspecified"> + <rSolid name="tobrodpar:TOBRodH"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBRodCentral2H" category="unspecified"> + <rSolid name="tobrodpar:TOBRodCentralH"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tobrod2h.xml"> + <PosPart copyNumber="1"> + <rParent name="tobrod2h:TOBRod2H"/> + <rChild name="tobrod2h:TOBRodCentral2H"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTOBRodAlgo"> + <rParent name="tobrod2h:TOBRod2H"/> + <Numeric name="Shift" value="-([tobrodpar:RodL]-[tobrodpar:RodDL])/2"/> + <String name="CentralName" value="tobrod2h:TOBRodCentral2H"/> + <Vector name="SideRodName" type="string" nEntries="2"> + tobrodpar:TOBSideRod1, tobrodpar:TOBSideRod2 + </Vector> + <Vector name="SideRodX" type="numeric" nEntries="2"> + -[tobrodpar:SideRodX], [tobrodpar:SideRodX] + </Vector> + <Vector name="SideRodY" type="numeric" nEntries="2"> + [tobrodpar:RodY], -[tobrodpar:RodY] + </Vector> + <Vector name="SideRodZ" type="numeric" nEntries="2"> + [zero], [tobrodpar:RodDL] + </Vector> + <String name="EndRod1Name" value="tobrodpar:TOBEndRod1"/> + <Vector name="EndRod1Y" type="numeric" nEntries="2"> + -[tobrodpar:RodY], [tobrodpar:RodY] + </Vector> + <Vector name="EndRod1Z" type="numeric" nEntries="2"> + [tobrodpar:EndRod1Z], [tobrodpar:EndRod1Z] + </Vector> + <String name="EndRod2Name" value="tobrodpar:TOBEndRod2"/> + <Numeric name="EndRod2Y" value="-[tobrodpar:EndRod2Y]"/> + <Numeric name="EndRod2Z" value="[tobrodpar:EndRod2Z]"/> + <String name="CableName" value="tobrodpar:TOBCable"/> + <Numeric name="CableZ" value="[tobrodpar:CableZ]"/> + <String name="ClampName" value="tobrodpar:TOBClamp"/> + <Vector name="ClampX" type="numeric" nEntries="4"> + -[tobrodpar:ClampX], -[tobrodpar:ClampX], [tobrodpar:ClampX], + [tobrodpar:ClampX] + </Vector> + <Vector name="ClampZ" type="numeric" nEntries="4"> + [tobrodpar:ClampZ2], [tobrodpar:ClampZ1], [tobrodpar:ClampZ2], + [tobrodpar:ClampZ1] + </Vector> + <String name="SideCoolName" value="tobrod2c:TOBSideCoolTube2"/> + <Vector name="SideCoolX" type="numeric" nEntries="2"> + -[tobrodpar:SideCoolX], [tobrodpar:SideCoolX] + </Vector> + <Vector name="SideCoolY" type="numeric" nEntries="2"> + -[tobrodpar:SideCoolY], -[tobrodpar:SideCoolY] + </Vector> + <Vector name="SideCoolZ" type="numeric" nEntries="2"> + [tobrodpar:SideCoolZ], [tobrodpar:SideCoolZ] + </Vector> + <String name="EndCoolName" value="tobrod2c:TOBEndCoolTube2"/> + <String name="EndCoolRot" value="tobrodpar:90XD"/> + <Numeric name="EndCoolY" value="-[tobrodpar:EndCoolY]"/> + <Numeric name="EndCoolZ" value="[tobrodpar:EndCoolZ]"/> + <String name="OptFibreName" value="tobrod2c:TOBOptFibre2"/> + <Vector name="optFibreX" type="numeric" nEntries="2"> + -[tobrodpar:OptFibreX], [tobrodpar:OptFibreX] + </Vector> + <Vector name="optFibreZ" type="numeric" nEntries="2"> + [tobrodpar:OptFibreZ], [tobrodpar:OptFibreZ] + </Vector> + <String name="SideClamp1Name" value="tobrod2c:TOBPlate21"/> + <Vector name="SideClampX" type="numeric" nEntries="12"> + -[tobrodpar:SideClampX], [tobrodpar:SideClampX], -[tobrodpar:SideClampX], + [tobrodpar:SideClampX], -[tobrodpar:SideClampX], [tobrodpar:SideClampX], + -[tobrodpar:SideClampX], [tobrodpar:SideClampX], -[tobrodpar:SideClampX], + [tobrodpar:SideClampX], -[tobrodpar:SideClampX], [tobrodpar:SideClampX] + </Vector> + <Vector name="SideClamp1DZ" type="numeric" nEntries="12"> + -[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z], + -[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z], + -[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], + [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z] + </Vector> + <String name="SideClamp2Name" value="tobrod2c:TOBPlate22"/> + <Vector name="SideClamp2DZ" type="numeric" nEntries="12"> + [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], + [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], + [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z], + -[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z] + </Vector> + <String name="ModuleName" value="tobmodule2:TOBModule2"/> + <Vector name="ModuleRot" type="string" nEntries="6"> + tobrodpar:NULL, tobrodpar:R180, tobrodpar:NULL, + tobrodpar:R180, tobrodpar:180D, tobrodpar:180X</Vector> + <Vector name="ModuleY" type="numeric" nEntries="6"> + [tobrodpar:ModuleY], -[tobrodpar:ModuleY], [tobrodpar:ModuleY], + -[tobrodpar:ModuleY], [tobrodpar:ModuleY], -[tobrodpar:ModuleY] + </Vector> + <Vector name="ModuleZ" type="numeric" nEntries="6"> + [tobrodpar:ModuleZ07], [tobrodpar:ModuleZ08], [tobrodpar:ModuleZ09], + [tobrodpar:ModuleZ10], [tobrodpar:ModuleZ11], [tobrodpar:ModuleZ12] + </Vector> + <Vector name="ICCName" type="string" nEntries="6"> + tobrod2c:TOBICC21, tobrod2c:TOBICC21, tobrod2c:TOBICC22, + tobrod2c:TOBICC22, tobrod2c:TOBCCUM2, tobrod2c:TOBRodConn2 + </Vector> + <Vector name="ICCY" type="numeric" nEntries="6"> + [tobrodpar:ICCY1], -[tobrodpar:ICCY1], [tobrodpar:ICCY1], + -[tobrodpar:ICCY1], [tobrodpar:ICCY2], [tobrodpar:ICCY1] + </Vector> + <Vector name="ICCZ" type="numeric" nEntries="6"> + [tobrodpar:ICCZ07], [tobrodpar:ICCZ08], [tobrodpar:ICCZ09], + [tobrodpar:ICCZ10], [tobrodpar:ICCZ11], [tobrodpar:ICCZ12] + </Vector> + <String name="AOHName" value="tobrodpar:TOBAOH"/> + <Vector name="AOHCopies" type="numeric" nEntries="6"> + 1 , 1 , 2 , 2 , 0 , 0 + </Vector> + <Vector name="AOHx" type="numeric" nEntries="6"> + -[tobrodpar:AOHx] , [tobrodpar:AOHx] , + [tobrodpar:AOHx] , [tobrodpar:AOHx] , + [zero] , [zero] + </Vector> + <Vector name="AOHy" type="numeric" nEntries="6"> + [tobrodpar:AOHy] , -[tobrodpar:AOHy] , + [tobrodpar:AOHy] , -[tobrodpar:AOHy] , + [zero] , [zero] + </Vector> + <Vector name="AOHz" type="numeric" nEntries="6"> + [zero] , [zero] , + [tobrodpar:AOHz] , -[tobrodpar:AOHz] , + [zero] , [zero] + </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tobrod2l.xml b/examples/DDCMS/data/tobrod2l.xml new file mode 100644 index 000000000..d7463b981 --- /dev/null +++ b/examples/DDCMS/data/tobrod2l.xml @@ -0,0 +1,144 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tobrod2l.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <LogicalPartSection label="tobrod2l.xml"> + <LogicalPart name="TOBRod2L" category="unspecified"> + <rSolid name="tobrodpar:TOBRodL"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBRodCentral2L" category="unspecified"> + <rSolid name="tobrodpar:TOBRodCentralL"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tobrod2l.xml"> + <PosPart copyNumber="1"> + <rParent name="tobrod2l:TOBRod2L"/> + <rChild name="tobrod2l:TOBRodCentral2L"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTOBRodAlgo"> + <rParent name="tobrod2l:TOBRod2L"/> + <Numeric name="Shift" value="([tobrodpar:RodL]-[tobrodpar:RodDL])/2"/> + <String name="CentralName" value="tobrod2l:TOBRodCentral2L"/> + <Vector name="SideRodName" type="string" nEntries="2"> + tobrodpar:TOBSideRod1, tobrodpar:TOBSideRod2 + </Vector> + <Vector name="SideRodX" type="numeric" nEntries="2"> + -[tobrodpar:SideRodX], [tobrodpar:SideRodX] + </Vector> + <Vector name="SideRodY" type="numeric" nEntries="2"> + -[tobrodpar:RodY], [tobrodpar:RodY] + </Vector> + <Vector name="SideRodZ" type="numeric" nEntries="2"> + [zero], -[tobrodpar:RodDL] + </Vector> + <String name="EndRod1Name" value="tobrodpar:TOBEndRod1"/> + <Vector name="EndRod1Y" type="numeric" nEntries="2"> + -[tobrodpar:RodY], [tobrodpar:RodY] + </Vector> + <Vector name="EndRod1Z" type="numeric" nEntries="2"> + -[tobrodpar:EndRod1Z], -[tobrodpar:EndRod1Z] + </Vector> + <String name="EndRod2Name" value="tobrodpar:TOBEndRod2"/> + <Numeric name="EndRod2Y" value="[tobrodpar:EndRod2Y]"/> + <Numeric name="EndRod2Z" value="-[tobrodpar:EndRod2Z]"/> + <String name="CableName" value="tobrodpar:TOBCable"/> + <Numeric name="CableZ" value="-[tobrodpar:CableZ]"/> + <String name="ClampName" value="tobrodpar:TOBClamp"/> + <Vector name="ClampX" type="numeric" nEntries="4"> + -[tobrodpar:ClampX], -[tobrodpar:ClampX], [tobrodpar:ClampX], + [tobrodpar:ClampX] + </Vector> + <Vector name="ClampZ" type="numeric" nEntries="4"> + -[tobrodpar:ClampZ1], -[tobrodpar:ClampZ2], -[tobrodpar:ClampZ1], + -[tobrodpar:ClampZ2] + </Vector> + <String name="SideCoolName" value="tobrod2c:TOBSideCoolTube2"/> + <Vector name="SideCoolX" type="numeric" nEntries="2"> + -[tobrodpar:SideCoolX], [tobrodpar:SideCoolX] + </Vector> + <Vector name="SideCoolY" type="numeric" nEntries="2"> + [tobrodpar:SideCoolY], [tobrodpar:SideCoolY] + </Vector> + <Vector name="SideCoolZ" type="numeric" nEntries="2"> + -[tobrodpar:SideCoolZ], -[tobrodpar:SideCoolZ] + </Vector> + <String name="EndCoolName" value="tobrod2c:TOBEndCoolTube2"/> + <String name="EndCoolRot" value="tobrodpar:90XD"/> + <Numeric name="EndCoolY" value="[tobrodpar:EndCoolY]"/> + <Numeric name="EndCoolZ" value="-[tobrodpar:EndCoolZ]"/> + <String name="OptFibreName" value="tobrod2c:TOBOptFibre2"/> + <Vector name="optFibreX" type="numeric" nEntries="2"> + -[tobrodpar:OptFibreX], [tobrodpar:OptFibreX] + </Vector> + <Vector name="optFibreZ" type="numeric" nEntries="2"> + -[tobrodpar:OptFibreZ], -[tobrodpar:OptFibreZ] + </Vector> + <String name="SideClamp1Name" value="tobrod2c:TOBPlate21"/> + <Vector name="SideClampX" type="numeric" nEntries="12"> + -[tobrodpar:SideClampX], [tobrodpar:SideClampX], -[tobrodpar:SideClampX], + [tobrodpar:SideClampX], -[tobrodpar:SideClampX], [tobrodpar:SideClampX], + -[tobrodpar:SideClampX], [tobrodpar:SideClampX], -[tobrodpar:SideClampX], + [tobrodpar:SideClampX], -[tobrodpar:SideClampX], [tobrodpar:SideClampX] + </Vector> + <Vector name="SideClamp1DZ" type="numeric" nEntries="12"> + -[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z], + -[tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], + [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], + [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z] + </Vector> + <String name="SideClamp2Name" value="tobrod2c:TOBPlate22"/> + <Vector name="SideClamp2DZ" type="numeric" nEntries="12"> + [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], + [tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z], + -[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z], + -[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z] + </Vector> + <String name="ModuleName" value="tobmodule2:TOBModule2"/> + <Vector name="ModuleRot" type="string" nEntries="6"> + tobrodpar:NULL, tobrodpar:R180, tobrodpar:180D, + tobrodpar:180X, tobrodpar:180D, tobrodpar:180X</Vector> + <Vector name="ModuleY" type="numeric" nEntries="6"> + [tobrodpar:ModuleY], -[tobrodpar:ModuleY], [tobrodpar:ModuleY], + -[tobrodpar:ModuleY], [tobrodpar:ModuleY], -[tobrodpar:ModuleY] + </Vector> + <Vector name="ModuleZ" type="numeric" nEntries="6"> + [tobrodpar:ModuleZ01], [tobrodpar:ModuleZ02], [tobrodpar:ModuleZ03], + [tobrodpar:ModuleZ04], [tobrodpar:ModuleZ05], [tobrodpar:ModuleZ06] + </Vector> + <Vector name="ICCName" type="string" nEntries="6"> + tobrod2c:TOBRodConn2, tobrod2c:TOBCCUM2, tobrod2c:TOBICC22, + tobrod2c:TOBICC22, tobrod2c:TOBICC21, tobrod2c:TOBICC21 + </Vector> + <Vector name="ICCY" type="numeric" nEntries="6"> + -[tobrodpar:ICCY1], -[tobrodpar:ICCY2], [tobrodpar:ICCY1], + -[tobrodpar:ICCY1], [tobrodpar:ICCY1], -[tobrodpar:ICCY1] + </Vector> + <Vector name="ICCZ" type="numeric" nEntries="6"> + [tobrodpar:ICCZ01], [tobrodpar:ICCZ02], [tobrodpar:ICCZ03], + [tobrodpar:ICCZ04], [tobrodpar:ICCZ05], [tobrodpar:ICCZ06] + </Vector> + <String name="AOHName" value="tobrodpar:TOBAOH"/> + <Vector name="AOHCopies" type="numeric" nEntries="6"> + 0 , 0 , 2 , 2 , 1 , 1 + </Vector> + <Vector name="AOHx" type="numeric" nEntries="6"> + [zero] , [zero] , + [tobrodpar:AOHx] , [tobrodpar:AOHx] , + [tobrodpar:AOHx] , -[tobrodpar:AOHx] + </Vector> + <Vector name="AOHy" type="numeric" nEntries="6"> + [zero] , [zero] , + [tobrodpar:AOHy] , -[tobrodpar:AOHy] , + [tobrodpar:AOHy] , -[tobrodpar:AOHy] + </Vector> + <Vector name="AOHz" type="numeric" nEntries="6"> + [zero] , [zero] , + [tobrodpar:AOHz] , -[tobrodpar:AOHz] , + [zero] , [zero] + </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tobrod3.xml b/examples/DDCMS/data/tobrod3.xml new file mode 100644 index 000000000..8e7c0bffb --- /dev/null +++ b/examples/DDCMS/data/tobrod3.xml @@ -0,0 +1,26 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tobrod3.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <LogicalPartSection label="tobrod3.xml"> + <LogicalPart name="TOBRod3" category="unspecified"> + <rSolid name="tobrodpar:TOBRod"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tobrod3.xml"> + <PosPart copyNumber="1"> + <rParent name="tobrod3:TOBRod3"/> + <rChild name="tobrod3l:TOBRod3L"/> + <rRotation name="tobrodpar:180X"/> + <Translation x="[zero]" y="[zero]" z="([tobrodpar:RodL]-[tobrodpar:RodDL])/2"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobrod3:TOBRod3"/> + <rChild name="tobrod3h:TOBRod3H"/> + <rRotation name="tobrodpar:180X"/> + <Translation x="[zero]" y="[zero]" z="-([tobrodpar:RodL]-[tobrodpar:RodDL])/2"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tobrod3h.xml b/examples/DDCMS/data/tobrod3h.xml new file mode 100644 index 000000000..0a409cb96 --- /dev/null +++ b/examples/DDCMS/data/tobrod3h.xml @@ -0,0 +1,144 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tobrod3h.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <LogicalPartSection label="tobrod3h.xml"> + <LogicalPart name="TOBRod3H" category="unspecified"> + <rSolid name="tobrodpar:TOBRodH"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBRodCentral3H" category="unspecified"> + <rSolid name="tobrodpar:TOBRodCentralH"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tobrod3h.xml"> + <PosPart copyNumber="1"> + <rParent name="tobrod3h:TOBRod3H"/> + <rChild name="tobrod3h:TOBRodCentral3H"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTOBRodAlgo"> + <rParent name="tobrod3h:TOBRod3H"/> + <Numeric name="Shift" value="-([tobrodpar:RodL]-[tobrodpar:RodDL])/2"/> + <String name="CentralName" value="tobrod3h:TOBRodCentral3H"/> + <Vector name="SideRodName" type="string" nEntries="2"> + tobrodpar:TOBSideRod1, tobrodpar:TOBSideRod2 + </Vector> + <Vector name="SideRodX" type="numeric" nEntries="2"> + -[tobrodpar:SideRodX], [tobrodpar:SideRodX] + </Vector> + <Vector name="SideRodY" type="numeric" nEntries="2"> + [tobrodpar:RodY], -[tobrodpar:RodY] + </Vector> + <Vector name="SideRodZ" type="numeric" nEntries="2"> + [zero], [tobrodpar:RodDL] + </Vector> + <String name="EndRod1Name" value="tobrodpar:TOBEndRod1"/> + <Vector name="EndRod1Y" type="numeric" nEntries="2"> + -[tobrodpar:RodY], [tobrodpar:RodY] + </Vector> + <Vector name="EndRod1Z" type="numeric" nEntries="2"> + [tobrodpar:EndRod1Z], [tobrodpar:EndRod1Z] + </Vector> + <String name="EndRod2Name" value="tobrodpar:TOBEndRod2"/> + <Numeric name="EndRod2Y" value="-[tobrodpar:EndRod2Y]"/> + <Numeric name="EndRod2Z" value="[tobrodpar:EndRod2Z]"/> + <String name="CableName" value="tobrodpar:TOBCable"/> + <Numeric name="CableZ" value="[tobrodpar:CableZ]"/> + <String name="ClampName" value="tobrodpar:TOBClamp"/> + <Vector name="ClampX" type="numeric" nEntries="4"> + -[tobrodpar:ClampX], -[tobrodpar:ClampX], [tobrodpar:ClampX], + [tobrodpar:ClampX] + </Vector> + <Vector name="ClampZ" type="numeric" nEntries="4"> + [tobrodpar:ClampZ2], [tobrodpar:ClampZ1], [tobrodpar:ClampZ2], + [tobrodpar:ClampZ1] + </Vector> + <String name="SideCoolName" value="tobrod2c:TOBSideCoolTube2"/> + <Vector name="SideCoolX" type="numeric" nEntries="2"> + -[tobrodpar:SideCoolX], [tobrodpar:SideCoolX] + </Vector> + <Vector name="SideCoolY" type="numeric" nEntries="2"> + -[tobrodpar:SideCoolY], -[tobrodpar:SideCoolY] + </Vector> + <Vector name="SideCoolZ" type="numeric" nEntries="2"> + [tobrodpar:SideCoolZ], [tobrodpar:SideCoolZ] + </Vector> + <String name="EndCoolName" value="tobrod2c:TOBEndCoolTube2"/> + <String name="EndCoolRot" value="tobrodpar:90XD"/> + <Numeric name="EndCoolY" value="-[tobrodpar:EndCoolY]"/> + <Numeric name="EndCoolZ" value="[tobrodpar:EndCoolZ]"/> + <String name="OptFibreName" value="tobrod2c:TOBOptFibre2"/> + <Vector name="optFibreX" type="numeric" nEntries="2"> + -[tobrodpar:OptFibreX], [tobrodpar:OptFibreX] + </Vector> + <Vector name="optFibreZ" type="numeric" nEntries="2"> + [tobrodpar:OptFibreZ], [tobrodpar:OptFibreZ] + </Vector> + <String name="SideClamp1Name" value="tobrod2c:TOBPlate21"/> + <Vector name="SideClampX" type="numeric" nEntries="12"> + -[tobrodpar:SideClampX], [tobrodpar:SideClampX], -[tobrodpar:SideClampX], + [tobrodpar:SideClampX], -[tobrodpar:SideClampX], [tobrodpar:SideClampX], + -[tobrodpar:SideClampX], [tobrodpar:SideClampX], -[tobrodpar:SideClampX], + [tobrodpar:SideClampX], -[tobrodpar:SideClampX], [tobrodpar:SideClampX] + </Vector> + <Vector name="SideClamp1DZ" type="numeric" nEntries="12"> + -[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z], + -[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z], + -[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], + [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z] + </Vector> + <String name="SideClamp2Name" value="tobrod2c:TOBPlate22"/> + <Vector name="SideClamp2DZ" type="numeric" nEntries="12"> + [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], + [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], + [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z], + -[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z] + </Vector> + <String name="ModuleName" value="tobmodule2:TOBModule2"/> + <Vector name="ModuleRot" type="string" nEntries="6"> + tobrodpar:NULL, tobrodpar:R180, tobrodpar:NULL, + tobrodpar:R180, tobrodpar:180D, tobrodpar:180X</Vector> + <Vector name="ModuleY" type="numeric" nEntries="6"> + [tobrodpar:ModuleY], -[tobrodpar:ModuleY], [tobrodpar:ModuleY], + -[tobrodpar:ModuleY], [tobrodpar:ModuleY], -[tobrodpar:ModuleY] + </Vector> + <Vector name="ModuleZ" type="numeric" nEntries="6"> + [tobrodpar:ModuleZ07], [tobrodpar:ModuleZ08], [tobrodpar:ModuleZ09], + [tobrodpar:ModuleZ10], [tobrodpar:ModuleZ11], [tobrodpar:ModuleZ12] + </Vector> + <Vector name="ICCName" type="string" nEntries="6"> + tobrod2c:TOBICC21, tobrod2c:TOBICC21, tobrod2c:TOBICC22, + tobrod2c:TOBICC22, tobrod2c:TOBCCUM2, tobrod2c:TOBRodConn2 + </Vector> + <Vector name="ICCY" type="numeric" nEntries="6"> + [tobrodpar:ICCY1], -[tobrodpar:ICCY1], [tobrodpar:ICCY1], + -[tobrodpar:ICCY1], [tobrodpar:ICCY2], [tobrodpar:ICCY1] + </Vector> + <Vector name="ICCZ" type="numeric" nEntries="6"> + [tobrodpar:ICCZ07], [tobrodpar:ICCZ08], [tobrodpar:ICCZ09], + [tobrodpar:ICCZ10], [tobrodpar:ICCZ11], [tobrodpar:ICCZ12] + </Vector> + <String name="AOHName" value="tobrodpar:TOBAOH"/> + <Vector name="AOHCopies" type="numeric" nEntries="6"> + 1 , 1 , 2 , 2 , 0 , 0 + </Vector> + <Vector name="AOHx" type="numeric" nEntries="6"> + -[tobrodpar:AOHx] , [tobrodpar:AOHx] , + [tobrodpar:AOHx] , [tobrodpar:AOHx] , + [zero] , [zero] + </Vector> + <Vector name="AOHy" type="numeric" nEntries="6"> + [tobrodpar:AOHy] , -[tobrodpar:AOHy] , + [tobrodpar:AOHy] , -[tobrodpar:AOHy] , + [zero] , [zero] + </Vector> + <Vector name="AOHz" type="numeric" nEntries="6"> + [zero] , [zero] , + [tobrodpar:AOHz] , -[tobrodpar:AOHz] , + [zero] , [zero] + </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tobrod3l.xml b/examples/DDCMS/data/tobrod3l.xml new file mode 100644 index 000000000..3683bac4a --- /dev/null +++ b/examples/DDCMS/data/tobrod3l.xml @@ -0,0 +1,144 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tobrod3l.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <LogicalPartSection label="tobrod3l.xml"> + <LogicalPart name="TOBRod3L" category="unspecified"> + <rSolid name="tobrodpar:TOBRodL"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBRodCentral3L" category="unspecified"> + <rSolid name="tobrodpar:TOBRodCentralL"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tobrod3l.xml"> + <PosPart copyNumber="1"> + <rParent name="tobrod3l:TOBRod3L"/> + <rChild name="tobrod3l:TOBRodCentral3L"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTOBRodAlgo"> + <rParent name="tobrod3l:TOBRod3L"/> + <Numeric name="Shift" value="([tobrodpar:RodL]-[tobrodpar:RodDL])/2"/> + <String name="CentralName" value="tobrod3l:TOBRodCentral3L"/> + <Vector name="SideRodName" type="string" nEntries="2"> + tobrodpar:TOBSideRod1, tobrodpar:TOBSideRod2 + </Vector> + <Vector name="SideRodX" type="numeric" nEntries="2"> + -[tobrodpar:SideRodX], [tobrodpar:SideRodX] + </Vector> + <Vector name="SideRodY" type="numeric" nEntries="2"> + -[tobrodpar:RodY], [tobrodpar:RodY] + </Vector> + <Vector name="SideRodZ" type="numeric" nEntries="2"> + [zero], -[tobrodpar:RodDL] + </Vector> + <String name="EndRod1Name" value="tobrodpar:TOBEndRod1"/> + <Vector name="EndRod1Y" type="numeric" nEntries="2"> + -[tobrodpar:RodY], [tobrodpar:RodY] + </Vector> + <Vector name="EndRod1Z" type="numeric" nEntries="2"> + -[tobrodpar:EndRod1Z], -[tobrodpar:EndRod1Z] + </Vector> + <String name="EndRod2Name" value="tobrodpar:TOBEndRod2"/> + <Numeric name="EndRod2Y" value="[tobrodpar:EndRod2Y]"/> + <Numeric name="EndRod2Z" value="-[tobrodpar:EndRod2Z]"/> + <String name="CableName" value="tobrodpar:TOBCable"/> + <Numeric name="CableZ" value="-[tobrodpar:CableZ]"/> + <String name="ClampName" value="tobrodpar:TOBClamp"/> + <Vector name="ClampX" type="numeric" nEntries="4"> + -[tobrodpar:ClampX], -[tobrodpar:ClampX], [tobrodpar:ClampX], + [tobrodpar:ClampX] + </Vector> + <Vector name="ClampZ" type="numeric" nEntries="4"> + -[tobrodpar:ClampZ1], -[tobrodpar:ClampZ2], -[tobrodpar:ClampZ1], + -[tobrodpar:ClampZ2] + </Vector> + <String name="SideCoolName" value="tobrod2c:TOBSideCoolTube2"/> + <Vector name="SideCoolX" type="numeric" nEntries="2"> + -[tobrodpar:SideCoolX], [tobrodpar:SideCoolX] + </Vector> + <Vector name="SideCoolY" type="numeric" nEntries="2"> + [tobrodpar:SideCoolY], [tobrodpar:SideCoolY] + </Vector> + <Vector name="SideCoolZ" type="numeric" nEntries="2"> + -[tobrodpar:SideCoolZ], -[tobrodpar:SideCoolZ] + </Vector> + <String name="EndCoolName" value="tobrod2c:TOBEndCoolTube2"/> + <String name="EndCoolRot" value="tobrodpar:90XD"/> + <Numeric name="EndCoolY" value="[tobrodpar:EndCoolY]"/> + <Numeric name="EndCoolZ" value="-[tobrodpar:EndCoolZ]"/> + <String name="OptFibreName" value="tobrod2c:TOBOptFibre2"/> + <Vector name="optFibreX" type="numeric" nEntries="2"> + -[tobrodpar:OptFibreX], [tobrodpar:OptFibreX] + </Vector> + <Vector name="optFibreZ" type="numeric" nEntries="2"> + -[tobrodpar:OptFibreZ], -[tobrodpar:OptFibreZ] + </Vector> + <String name="SideClamp1Name" value="tobrod2c:TOBPlate21"/> + <Vector name="SideClampX" type="numeric" nEntries="12"> + -[tobrodpar:SideClampX], [tobrodpar:SideClampX], -[tobrodpar:SideClampX], + [tobrodpar:SideClampX], -[tobrodpar:SideClampX], [tobrodpar:SideClampX], + -[tobrodpar:SideClampX], [tobrodpar:SideClampX], -[tobrodpar:SideClampX], + [tobrodpar:SideClampX], -[tobrodpar:SideClampX], [tobrodpar:SideClampX] + </Vector> + <Vector name="SideClamp1DZ" type="numeric" nEntries="12"> + -[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z], + -[tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], + [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], + [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z] + </Vector> + <String name="SideClamp2Name" value="tobrod2c:TOBPlate22"/> + <Vector name="SideClamp2DZ" type="numeric" nEntries="12"> + [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], + [tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z], + -[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z], + -[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z] + </Vector> + <String name="ModuleName" value="tobmodule2:TOBModule2"/> + <Vector name="ModuleRot" type="string" nEntries="6"> + tobrodpar:NULL, tobrodpar:R180, tobrodpar:180D, + tobrodpar:180X, tobrodpar:180D, tobrodpar:180X</Vector> + <Vector name="ModuleY" type="numeric" nEntries="6"> + [tobrodpar:ModuleY], -[tobrodpar:ModuleY], [tobrodpar:ModuleY], + -[tobrodpar:ModuleY], [tobrodpar:ModuleY], -[tobrodpar:ModuleY] + </Vector> + <Vector name="ModuleZ" type="numeric" nEntries="6"> + [tobrodpar:ModuleZ01], [tobrodpar:ModuleZ02], [tobrodpar:ModuleZ03], + [tobrodpar:ModuleZ04], [tobrodpar:ModuleZ05], [tobrodpar:ModuleZ06] + </Vector> + <Vector name="ICCName" type="string" nEntries="6"> + tobrod2c:TOBRodConn2, tobrod2c:TOBCCUM2, tobrod2c:TOBICC22, + tobrod2c:TOBICC22, tobrod2c:TOBICC21, tobrod2c:TOBICC21 + </Vector> + <Vector name="ICCY" type="numeric" nEntries="6"> + -[tobrodpar:ICCY1], -[tobrodpar:ICCY2], [tobrodpar:ICCY1], + -[tobrodpar:ICCY1], [tobrodpar:ICCY1], -[tobrodpar:ICCY1] + </Vector> + <Vector name="ICCZ" type="numeric" nEntries="6"> + [tobrodpar:ICCZ01], [tobrodpar:ICCZ02], [tobrodpar:ICCZ03], + [tobrodpar:ICCZ04], [tobrodpar:ICCZ05], [tobrodpar:ICCZ06] + </Vector> + <String name="AOHName" value="tobrodpar:TOBAOH"/> + <Vector name="AOHCopies" type="numeric" nEntries="6"> + 0 , 0 , 2 , 2 , 1 , 1 + </Vector> + <Vector name="AOHx" type="numeric" nEntries="6"> + [zero] , [zero] , + [tobrodpar:AOHx] , [tobrodpar:AOHx] , + [tobrodpar:AOHx] , -[tobrodpar:AOHx] + </Vector> + <Vector name="AOHy" type="numeric" nEntries="6"> + [zero] , [zero] , + [tobrodpar:AOHy] , -[tobrodpar:AOHy] , + [tobrodpar:AOHy] , -[tobrodpar:AOHy] + </Vector> + <Vector name="AOHz" type="numeric" nEntries="6"> + [zero] , [zero] , + [tobrodpar:AOHz] , -[tobrodpar:AOHz] , + [zero] , [zero] + </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tobrod4.xml b/examples/DDCMS/data/tobrod4.xml new file mode 100644 index 000000000..8720763f4 --- /dev/null +++ b/examples/DDCMS/data/tobrod4.xml @@ -0,0 +1,26 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tobrod4.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <LogicalPartSection label="tobrod4.xml"> + <LogicalPart name="TOBRod4" category="unspecified"> + <rSolid name="tobrodpar:TOBRod"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tobrod4.xml"> + <PosPart copyNumber="1"> + <rParent name="tobrod4:TOBRod4"/> + <rChild name="tobrod4l:TOBRod4L"/> + <rRotation name="tobrodpar:R180"/> + <Translation x="[zero]" y="[zero]" z="-([tobrodpar:RodL]-[tobrodpar:RodDL])/2"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobrod4:TOBRod4"/> + <rChild name="tobrod4h:TOBRod4H"/> + <rRotation name="tobrodpar:R180"/> + <Translation x="[zero]" y="[zero]" z="([tobrodpar:RodL]-[tobrodpar:RodDL])/2"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tobrod4c.xml b/examples/DDCMS/data/tobrod4c.xml new file mode 100644 index 000000000..ee8b86f3f --- /dev/null +++ b/examples/DDCMS/data/tobrod4c.xml @@ -0,0 +1,71 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tobrod4c.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <SolidSection label="tobrod4c.xml"> + <Tubs name="TOBSideCoolTube4" rMin="[zero]" rMax="[tobrodpar:CoolTubeLightR]" dz="[tobrodpar:SideCoolL]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBSideCoolFluid4" rMin="[zero]" rMax="[tobrodpar:CoolFluidLightR]" dz="[tobrodpar:SideCoolL]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBEndCoolTube4" rMin="[zero]" rMax="[tobrodpar:CoolTubeLightR]" dz="[tobrodpar:EndCoolL]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TOBEndCoolFluid4" rMin="[zero]" rMax="[tobrodpar:CoolFluidLightR]" dz="[tobrodpar:EndCoolL]" startPhi="0*deg" deltaPhi="360*deg"/> + <Box name="TOBOptFibre4" dx="[tobrodpar:OptFibreW]" dy="[tobrodpar:OptFibreH]" dz="[tobrodpar:OptFibreL]"/> + <Box name="TOBPlate41" dx="[tobrodpar:SideClampDx]" dy="[tobrodpar:SideClampDy]" dz="[tobrodpar:SideClampLDz]"/> + <Box name="TOBPlate42" dx="[tobrodpar:SideClampDx]" dy="[tobrodpar:SideClampDy]" dz="[tobrodpar:SideClampLDz]"/> + </SolidSection> + <LogicalPartSection label="tobrod4c.xml"> + <LogicalPart name="TOBSideCoolTube4" category="unspecified"> + <rSolid name="TOBSideCoolTube4"/> + <rMaterial name="trackermaterial:T_CuNi"/> + </LogicalPart> + <LogicalPart name="TOBSideCoolFluid4" category="unspecified"> + <rSolid name="TOBSideCoolFluid4"/> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C"/> + </LogicalPart> + <LogicalPart name="TOBEndCoolTube4" category="unspecified"> + <rSolid name="TOBEndCoolTube4"/> + <rMaterial name="trackermaterial:T_CuNi"/> + </LogicalPart> + <LogicalPart name="TOBEndCoolFluid4" category="unspecified"> + <rSolid name="TOBEndCoolFluid4"/> + <rMaterial name="trackermaterial:T_C6F14_F2_-30C"/> + </LogicalPart> + <LogicalPart name="TOBOptFibre4" category="unspecified"> + <rSolid name="TOBOptFibre4"/> + <rMaterial name="tobmaterial:TOB_optfib_L56"/> + </LogicalPart> + <LogicalPart name="TOBPlate41" category="unspecified"> + <rSolid name="TOBPlate41"/> + <rMaterial name="tobmaterial:TOB_plate_B"/> + </LogicalPart> + <LogicalPart name="TOBPlate42" category="unspecified"> + <rSolid name="TOBPlate42"/> + <rMaterial name="tobmaterial:TOB_plate_C"/> + </LogicalPart> + <LogicalPart name="TOBICC41" category="unspecified"> + <rSolid name="tobrodpar:TOBICC1"/> + <rMaterial name="tobmaterial:TOB_L56_ICC1"/> + </LogicalPart> + <LogicalPart name="TOBICC42" category="unspecified"> + <rSolid name="tobrodpar:TOBICC2"/> + <rMaterial name="tobmaterial:TOB_L56_ICC2"/> + </LogicalPart> + <LogicalPart name="TOBRodConn4" category="unspecified"> + <rSolid name="tobrodpar:TOBRodConn"/> + <rMaterial name="tobmaterial:TOB_CONN56"/> + </LogicalPart> + <LogicalPart name="TOBCCUM4" category="unspecified"> + <rSolid name="tobrodpar:TOBCCUM"/> + <rMaterial name="tobmaterial:TOB_CCUM"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tobrod4c.xml"> + <PosPart copyNumber="1"> + <rParent name="tobrod4c:TOBSideCoolTube4"/> + <rChild name="tobrod4c:TOBSideCoolFluid4"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobrod4c:TOBEndCoolTube4"/> + <rChild name="tobrod4c:TOBEndCoolFluid4"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tobrod4h.xml b/examples/DDCMS/data/tobrod4h.xml new file mode 100644 index 000000000..c6e46ad47 --- /dev/null +++ b/examples/DDCMS/data/tobrod4h.xml @@ -0,0 +1,144 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tobrod4h.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <LogicalPartSection label="tobrod4h.xml"> + <LogicalPart name="TOBRod4H" category="unspecified"> + <rSolid name="tobrodpar:TOBRodH"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBRodCentral4H" category="unspecified"> + <rSolid name="tobrodpar:TOBRodCentralH"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tobrod4h.xml"> + <PosPart copyNumber="1"> + <rParent name="tobrod4h:TOBRod4H"/> + <rChild name="tobrod4h:TOBRodCentral4H"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTOBRodAlgo"> + <rParent name="tobrod4h:TOBRod4H"/> + <Numeric name="Shift" value="-([tobrodpar:RodL]-[tobrodpar:RodDL])/2"/> + <String name="CentralName" value="tobrod4h:TOBRodCentral4H"/> + <Vector name="SideRodName" type="string" nEntries="2"> + tobrodpar:TOBSideRod1, tobrodpar:TOBSideRod2 + </Vector> + <Vector name="SideRodX" type="numeric" nEntries="2"> + -[tobrodpar:SideRodX], [tobrodpar:SideRodX] + </Vector> + <Vector name="SideRodY" type="numeric" nEntries="2"> + [tobrodpar:RodY], -[tobrodpar:RodY] + </Vector> + <Vector name="SideRodZ" type="numeric" nEntries="2"> + [zero], [tobrodpar:RodDL] + </Vector> + <String name="EndRod1Name" value="tobrodpar:TOBEndRod1"/> + <Vector name="EndRod1Y" type="numeric" nEntries="2"> + -[tobrodpar:RodY], [tobrodpar:RodY] + </Vector> + <Vector name="EndRod1Z" type="numeric" nEntries="2"> + [tobrodpar:EndRod1Z], [tobrodpar:EndRod1Z] + </Vector> + <String name="EndRod2Name" value="tobrodpar:TOBEndRod2"/> + <Numeric name="EndRod2Y" value="-[tobrodpar:EndRod2Y]"/> + <Numeric name="EndRod2Z" value="[tobrodpar:EndRod2Z]"/> + <String name="CableName" value="tobrodpar:TOBCable"/> + <Numeric name="CableZ" value="[tobrodpar:CableZ]"/> + <String name="ClampName" value="tobrodpar:TOBClamp"/> + <Vector name="ClampX" type="numeric" nEntries="4"> + -[tobrodpar:ClampX], -[tobrodpar:ClampX], [tobrodpar:ClampX], + [tobrodpar:ClampX] + </Vector> + <Vector name="ClampZ" type="numeric" nEntries="4"> + [tobrodpar:ClampZ2], [tobrodpar:ClampZ1], [tobrodpar:ClampZ2], + [tobrodpar:ClampZ1] + </Vector> + <String name="SideCoolName" value="tobrod4c:TOBSideCoolTube4"/> + <Vector name="SideCoolX" type="numeric" nEntries="2"> + -[tobrodpar:SideCoolX], [tobrodpar:SideCoolX] + </Vector> + <Vector name="SideCoolY" type="numeric" nEntries="2"> + -[tobrodpar:SideCoolY], -[tobrodpar:SideCoolY] + </Vector> + <Vector name="SideCoolZ" type="numeric" nEntries="2"> + [tobrodpar:SideCoolZ], [tobrodpar:SideCoolZ] + </Vector> + <String name="EndCoolName" value="tobrod4c:TOBEndCoolTube4"/> + <String name="EndCoolRot" value="tobrodpar:90XD"/> + <Numeric name="EndCoolY" value="-[tobrodpar:EndCoolY]"/> + <Numeric name="EndCoolZ" value="[tobrodpar:EndCoolZ]"/> + <String name="OptFibreName" value="tobrod4c:TOBOptFibre4"/> + <Vector name="optFibreX" type="numeric" nEntries="2"> + -[tobrodpar:OptFibreX], [tobrodpar:OptFibreX] + </Vector> + <Vector name="optFibreZ" type="numeric" nEntries="2"> + [tobrodpar:OptFibreZ], [tobrodpar:OptFibreZ] + </Vector> + <String name="SideClamp1Name" value="tobrod4c:TOBPlate41"/> + <Vector name="SideClampX" type="numeric" nEntries="12"> + -[tobrodpar:SideClampX], [tobrodpar:SideClampX], -[tobrodpar:SideClampX], + [tobrodpar:SideClampX], -[tobrodpar:SideClampX], [tobrodpar:SideClampX], + -[tobrodpar:SideClampX], [tobrodpar:SideClampX], -[tobrodpar:SideClampX], + [tobrodpar:SideClampX], -[tobrodpar:SideClampX], [tobrodpar:SideClampX] + </Vector> + <Vector name="SideClamp1DZ" type="numeric" nEntries="12"> + -[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z], + -[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z], + -[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], + [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z] + </Vector> + <String name="SideClamp2Name" value="tobrod4c:TOBPlate42"/> + <Vector name="SideClamp2DZ" type="numeric" nEntries="12"> + [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], + [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], + [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z], + -[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z] + </Vector> + <String name="ModuleName" value="tobmodule4:TOBModule4"/> + <Vector name="ModuleRot" type="string" nEntries="6"> + tobrodpar:NULL, tobrodpar:R180, tobrodpar:NULL, + tobrodpar:R180, tobrodpar:180D, tobrodpar:180X</Vector> + <Vector name="ModuleY" type="numeric" nEntries="6"> + [tobrodpar:ModuleY], -[tobrodpar:ModuleY], [tobrodpar:ModuleY], + -[tobrodpar:ModuleY], [tobrodpar:ModuleY], -[tobrodpar:ModuleY] + </Vector> + <Vector name="ModuleZ" type="numeric" nEntries="6"> + [tobrodpar:ModuleZ07], [tobrodpar:ModuleZ08], [tobrodpar:ModuleZ09], + [tobrodpar:ModuleZ10], [tobrodpar:ModuleZ11], [tobrodpar:ModuleZ12] + </Vector> + <Vector name="ICCName" type="string" nEntries="6"> + tobrod4c:TOBICC41, tobrod4c:TOBICC41, tobrod4c:TOBICC42, + tobrod4c:TOBICC42, tobrod4c:TOBCCUM4, tobrod4c:TOBRodConn4 + </Vector> + <Vector name="ICCY" type="numeric" nEntries="6"> + [tobrodpar:ICCY1], -[tobrodpar:ICCY1], [tobrodpar:ICCY1], + -[tobrodpar:ICCY1], [tobrodpar:ICCY2], [tobrodpar:ICCY1] + </Vector> + <Vector name="ICCZ" type="numeric" nEntries="6"> + [tobrodpar:ICCZ07], [tobrodpar:ICCZ08], [tobrodpar:ICCZ09], + [tobrodpar:ICCZ10], [tobrodpar:ICCZ11], [tobrodpar:ICCZ12] + </Vector> + <String name="AOHName" value="tobrodpar:TOBAOH"/> + <Vector name="AOHCopies" type="numeric" nEntries="6"> + 1 , 1 , 2 , 2 , 0 , 0 + </Vector> + <Vector name="AOHx" type="numeric" nEntries="6"> + -[tobrodpar:AOHx] , [tobrodpar:AOHx] , + [tobrodpar:AOHx] , [tobrodpar:AOHx] , + [zero] , [zero] + </Vector> + <Vector name="AOHy" type="numeric" nEntries="6"> + [tobrodpar:AOHy] , -[tobrodpar:AOHy] , + [tobrodpar:AOHy] , -[tobrodpar:AOHy] , + [zero] , [zero] + </Vector> + <Vector name="AOHz" type="numeric" nEntries="6"> + [zero] , [zero] , + [tobrodpar:AOHz] , -[tobrodpar:AOHz] , + [zero] , [zero] + </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tobrod4l.xml b/examples/DDCMS/data/tobrod4l.xml new file mode 100644 index 000000000..3402a4469 --- /dev/null +++ b/examples/DDCMS/data/tobrod4l.xml @@ -0,0 +1,144 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tobrod4l.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <LogicalPartSection label="tobrod4l.xml"> + <LogicalPart name="TOBRod4L" category="unspecified"> + <rSolid name="tobrodpar:TOBRodL"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBRodCentral4L" category="unspecified"> + <rSolid name="tobrodpar:TOBRodCentralL"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tobrod4l.xml"> + <PosPart copyNumber="1"> + <rParent name="tobrod4l:TOBRod4L"/> + <rChild name="tobrod4l:TOBRodCentral4L"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTOBRodAlgo"> + <rParent name="tobrod4l:TOBRod4L"/> + <Numeric name="Shift" value="([tobrodpar:RodL]-[tobrodpar:RodDL])/2"/> + <String name="CentralName" value="tobrod4l:TOBRodCentral4L"/> + <Vector name="SideRodName" type="string" nEntries="2"> + tobrodpar:TOBSideRod1, tobrodpar:TOBSideRod2 + </Vector> + <Vector name="SideRodX" type="numeric" nEntries="2"> + -[tobrodpar:SideRodX], [tobrodpar:SideRodX] + </Vector> + <Vector name="SideRodY" type="numeric" nEntries="2"> + -[tobrodpar:RodY], [tobrodpar:RodY] + </Vector> + <Vector name="SideRodZ" type="numeric" nEntries="2"> + [zero], -[tobrodpar:RodDL] + </Vector> + <String name="EndRod1Name" value="tobrodpar:TOBEndRod1"/> + <Vector name="EndRod1Y" type="numeric" nEntries="2"> + -[tobrodpar:RodY], [tobrodpar:RodY] + </Vector> + <Vector name="EndRod1Z" type="numeric" nEntries="2"> + -[tobrodpar:EndRod1Z], -[tobrodpar:EndRod1Z] + </Vector> + <String name="EndRod2Name" value="tobrodpar:TOBEndRod2"/> + <Numeric name="EndRod2Y" value="[tobrodpar:EndRod2Y]"/> + <Numeric name="EndRod2Z" value="-[tobrodpar:EndRod2Z]"/> + <String name="CableName" value="tobrodpar:TOBCable"/> + <Numeric name="CableZ" value="-[tobrodpar:CableZ]"/> + <String name="ClampName" value="tobrodpar:TOBClamp"/> + <Vector name="ClampX" type="numeric" nEntries="4"> + -[tobrodpar:ClampX], -[tobrodpar:ClampX], [tobrodpar:ClampX], + [tobrodpar:ClampX] + </Vector> + <Vector name="ClampZ" type="numeric" nEntries="4"> + -[tobrodpar:ClampZ1], -[tobrodpar:ClampZ2], -[tobrodpar:ClampZ1], + -[tobrodpar:ClampZ2] + </Vector> + <String name="SideCoolName" value="tobrod4c:TOBSideCoolTube4"/> + <Vector name="SideCoolX" type="numeric" nEntries="2"> + -[tobrodpar:SideCoolX], [tobrodpar:SideCoolX] + </Vector> + <Vector name="SideCoolY" type="numeric" nEntries="2"> + [tobrodpar:SideCoolY], [tobrodpar:SideCoolY] + </Vector> + <Vector name="SideCoolZ" type="numeric" nEntries="2"> + -[tobrodpar:SideCoolZ], -[tobrodpar:SideCoolZ] + </Vector> + <String name="EndCoolName" value="tobrod4c:TOBEndCoolTube4"/> + <String name="EndCoolRot" value="tobrodpar:90XD"/> + <Numeric name="EndCoolY" value="[tobrodpar:EndCoolY]"/> + <Numeric name="EndCoolZ" value="-[tobrodpar:EndCoolZ]"/> + <String name="OptFibreName" value="tobrod4c:TOBOptFibre4"/> + <Vector name="optFibreX" type="numeric" nEntries="2"> + -[tobrodpar:OptFibreX], [tobrodpar:OptFibreX] + </Vector> + <Vector name="optFibreZ" type="numeric" nEntries="2"> + -[tobrodpar:OptFibreZ], -[tobrodpar:OptFibreZ] + </Vector> + <String name="SideClamp1Name" value="tobrod4c:TOBPlate41"/> + <Vector name="SideClampX" type="numeric" nEntries="12"> + -[tobrodpar:SideClampX], [tobrodpar:SideClampX], -[tobrodpar:SideClampX], + [tobrodpar:SideClampX], -[tobrodpar:SideClampX], [tobrodpar:SideClampX], + -[tobrodpar:SideClampX], [tobrodpar:SideClampX], -[tobrodpar:SideClampX], + [tobrodpar:SideClampX], -[tobrodpar:SideClampX], [tobrodpar:SideClampX] + </Vector> + <Vector name="SideClamp1DZ" type="numeric" nEntries="12"> + -[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z], + -[tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], + [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], + [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z] + </Vector> + <String name="SideClamp2Name" value="tobrod4c:TOBPlate42"/> + <Vector name="SideClamp2DZ" type="numeric" nEntries="12"> + [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], + [tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z], + -[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z], + -[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z] + </Vector> + <String name="ModuleName" value="tobmodule4:TOBModule4"/> + <Vector name="ModuleRot" type="string" nEntries="6"> + tobrodpar:NULL, tobrodpar:R180, tobrodpar:180D, + tobrodpar:180X, tobrodpar:180D, tobrodpar:180X</Vector> + <Vector name="ModuleY" type="numeric" nEntries="6"> + [tobrodpar:ModuleY], -[tobrodpar:ModuleY], [tobrodpar:ModuleY], + -[tobrodpar:ModuleY], [tobrodpar:ModuleY], -[tobrodpar:ModuleY] + </Vector> + <Vector name="ModuleZ" type="numeric" nEntries="6"> + [tobrodpar:ModuleZ01], [tobrodpar:ModuleZ02], [tobrodpar:ModuleZ03], + [tobrodpar:ModuleZ04], [tobrodpar:ModuleZ05], [tobrodpar:ModuleZ06] + </Vector> + <Vector name="ICCName" type="string" nEntries="6"> + tobrod4c:TOBRodConn4, tobrod4c:TOBCCUM4, tobrod4c:TOBICC42, + tobrod4c:TOBICC42, tobrod4c:TOBICC41, tobrod4c:TOBICC41 + </Vector> + <Vector name="ICCY" type="numeric" nEntries="6"> + -[tobrodpar:ICCY1], -[tobrodpar:ICCY2], [tobrodpar:ICCY1], + -[tobrodpar:ICCY1], [tobrodpar:ICCY1], -[tobrodpar:ICCY1] + </Vector> + <Vector name="ICCZ" type="numeric" nEntries="6"> + [tobrodpar:ICCZ01], [tobrodpar:ICCZ02], [tobrodpar:ICCZ03], + [tobrodpar:ICCZ04], [tobrodpar:ICCZ05], [tobrodpar:ICCZ06] + </Vector> + <String name="AOHName" value="tobrodpar:TOBAOH"/> + <Vector name="AOHCopies" type="numeric" nEntries="6"> + 0 , 0 , 2 , 2 , 1 , 1 + </Vector> + <Vector name="AOHx" type="numeric" nEntries="6"> + [zero] , [zero] , + [tobrodpar:AOHx] , [tobrodpar:AOHx] , + [tobrodpar:AOHx] , -[tobrodpar:AOHx] + </Vector> + <Vector name="AOHy" type="numeric" nEntries="6"> + [zero] , [zero] , + [tobrodpar:AOHy] , -[tobrodpar:AOHy] , + [tobrodpar:AOHy] , -[tobrodpar:AOHy] + </Vector> + <Vector name="AOHz" type="numeric" nEntries="6"> + [zero] , [zero] , + [tobrodpar:AOHz] , -[tobrodpar:AOHz] , + [zero] , [zero] + </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tobrod5.xml b/examples/DDCMS/data/tobrod5.xml new file mode 100644 index 000000000..63d5a052f --- /dev/null +++ b/examples/DDCMS/data/tobrod5.xml @@ -0,0 +1,26 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tobrod5.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <LogicalPartSection label="tobrod5.xml"> + <LogicalPart name="TOBRod5" category="unspecified"> + <rSolid name="tobrodpar:TOBRod"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tobrod5.xml"> + <PosPart copyNumber="1"> + <rParent name="tobrod5:TOBRod5"/> + <rChild name="tobrod5l:TOBRod5L"/> + <rRotation name="tobrodpar:180X"/> + <Translation x="[zero]" y="[zero]" z="([tobrodpar:RodL]-[tobrodpar:RodDL])/2"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="tobrod5:TOBRod5"/> + <rChild name="tobrod5h:TOBRod5H"/> + <rRotation name="tobrodpar:180X"/> + <Translation x="[zero]" y="[zero]" z="-([tobrodpar:RodL]-[tobrodpar:RodDL])/2"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tobrod5h.xml b/examples/DDCMS/data/tobrod5h.xml new file mode 100644 index 000000000..d81623992 --- /dev/null +++ b/examples/DDCMS/data/tobrod5h.xml @@ -0,0 +1,144 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tobrod5h.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <LogicalPartSection label="tobrod5h.xml"> + <LogicalPart name="TOBRod5H" category="unspecified"> + <rSolid name="tobrodpar:TOBRodH"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBRodCentral5H" category="unspecified"> + <rSolid name="tobrodpar:TOBRodCentralH"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tobrod5h.xml"> + <PosPart copyNumber="1"> + <rParent name="tobrod5h:TOBRod5H"/> + <rChild name="tobrod5h:TOBRodCentral5H"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTOBRodAlgo"> + <rParent name="tobrod5h:TOBRod5H"/> + <Numeric name="Shift" value="-([tobrodpar:RodL]-[tobrodpar:RodDL])/2"/> + <String name="CentralName" value="tobrod5h:TOBRodCentral5H"/> + <Vector name="SideRodName" type="string" nEntries="2"> + tobrodpar:TOBSideRod1, tobrodpar:TOBSideRod2 + </Vector> + <Vector name="SideRodX" type="numeric" nEntries="2"> + -[tobrodpar:SideRodX], [tobrodpar:SideRodX] + </Vector> + <Vector name="SideRodY" type="numeric" nEntries="2"> + [tobrodpar:RodY], -[tobrodpar:RodY] + </Vector> + <Vector name="SideRodZ" type="numeric" nEntries="2"> + [zero], [tobrodpar:RodDL] + </Vector> + <String name="EndRod1Name" value="tobrodpar:TOBEndRod1"/> + <Vector name="EndRod1Y" type="numeric" nEntries="2"> + -[tobrodpar:RodY], [tobrodpar:RodY] + </Vector> + <Vector name="EndRod1Z" type="numeric" nEntries="2"> + [tobrodpar:EndRod1Z], [tobrodpar:EndRod1Z] + </Vector> + <String name="EndRod2Name" value="tobrodpar:TOBEndRod2"/> + <Numeric name="EndRod2Y" value="-[tobrodpar:EndRod2Y]"/> + <Numeric name="EndRod2Z" value="[tobrodpar:EndRod2Z]"/> + <String name="CableName" value="tobrodpar:TOBCable"/> + <Numeric name="CableZ" value="[tobrodpar:CableZ]"/> + <String name="ClampName" value="tobrodpar:TOBClamp"/> + <Vector name="ClampX" type="numeric" nEntries="4"> + -[tobrodpar:ClampX], -[tobrodpar:ClampX], [tobrodpar:ClampX], + [tobrodpar:ClampX] + </Vector> + <Vector name="ClampZ" type="numeric" nEntries="4"> + [tobrodpar:ClampZ2], [tobrodpar:ClampZ1], [tobrodpar:ClampZ2], + [tobrodpar:ClampZ1] + </Vector> + <String name="SideCoolName" value="tobrod4c:TOBSideCoolTube4"/> + <Vector name="SideCoolX" type="numeric" nEntries="2"> + -[tobrodpar:SideCoolX], [tobrodpar:SideCoolX] + </Vector> + <Vector name="SideCoolY" type="numeric" nEntries="2"> + -[tobrodpar:SideCoolY], -[tobrodpar:SideCoolY] + </Vector> + <Vector name="SideCoolZ" type="numeric" nEntries="2"> + [tobrodpar:SideCoolZ], [tobrodpar:SideCoolZ] + </Vector> + <String name="EndCoolName" value="tobrod4c:TOBEndCoolTube4"/> + <String name="EndCoolRot" value="tobrodpar:90XD"/> + <Numeric name="EndCoolY" value="-[tobrodpar:EndCoolY]"/> + <Numeric name="EndCoolZ" value="[tobrodpar:EndCoolZ]"/> + <String name="OptFibreName" value="tobrod4c:TOBOptFibre4"/> + <Vector name="optFibreX" type="numeric" nEntries="2"> + -[tobrodpar:OptFibreX], [tobrodpar:OptFibreX] + </Vector> + <Vector name="optFibreZ" type="numeric" nEntries="2"> + [tobrodpar:OptFibreZ], [tobrodpar:OptFibreZ] + </Vector> + <String name="SideClamp1Name" value="tobrod4c:TOBPlate41"/> + <Vector name="SideClampX" type="numeric" nEntries="12"> + -[tobrodpar:SideClampX], [tobrodpar:SideClampX], -[tobrodpar:SideClampX], + [tobrodpar:SideClampX], -[tobrodpar:SideClampX], [tobrodpar:SideClampX], + -[tobrodpar:SideClampX], [tobrodpar:SideClampX], -[tobrodpar:SideClampX], + [tobrodpar:SideClampX], -[tobrodpar:SideClampX], [tobrodpar:SideClampX] + </Vector> + <Vector name="SideClamp1DZ" type="numeric" nEntries="12"> + -[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z], + -[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z], + -[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], + [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z] + </Vector> + <String name="SideClamp2Name" value="tobrod4c:TOBPlate42"/> + <Vector name="SideClamp2DZ" type="numeric" nEntries="12"> + [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], + [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], + [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z], + -[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z] + </Vector> + <String name="ModuleName" value="tobmodule4:TOBModule4"/> + <Vector name="ModuleRot" type="string" nEntries="6"> + tobrodpar:NULL, tobrodpar:R180, tobrodpar:NULL, + tobrodpar:R180, tobrodpar:180D, tobrodpar:180X</Vector> + <Vector name="ModuleY" type="numeric" nEntries="6"> + [tobrodpar:ModuleY], -[tobrodpar:ModuleY], [tobrodpar:ModuleY], + -[tobrodpar:ModuleY], [tobrodpar:ModuleY], -[tobrodpar:ModuleY] + </Vector> + <Vector name="ModuleZ" type="numeric" nEntries="6"> + [tobrodpar:ModuleZ07], [tobrodpar:ModuleZ08], [tobrodpar:ModuleZ09], + [tobrodpar:ModuleZ10], [tobrodpar:ModuleZ11], [tobrodpar:ModuleZ12] + </Vector> + <Vector name="ICCName" type="string" nEntries="6"> + tobrod4c:TOBICC41, tobrod4c:TOBICC41, tobrod4c:TOBICC42, + tobrod4c:TOBICC42, tobrod4c:TOBCCUM4, tobrod4c:TOBRodConn4 + </Vector> + <Vector name="ICCY" type="numeric" nEntries="6"> + [tobrodpar:ICCY1], -[tobrodpar:ICCY1], [tobrodpar:ICCY1], + -[tobrodpar:ICCY1], [tobrodpar:ICCY2], [tobrodpar:ICCY1] + </Vector> + <Vector name="ICCZ" type="numeric" nEntries="6"> + [tobrodpar:ICCZ07], [tobrodpar:ICCZ08], [tobrodpar:ICCZ09], + [tobrodpar:ICCZ10], [tobrodpar:ICCZ11], [tobrodpar:ICCZ12] + </Vector> + <String name="AOHName" value="tobrodpar:TOBAOH"/> + <Vector name="AOHCopies" type="numeric" nEntries="6"> + 1 , 1 , 2 , 2 , 0 , 0 + </Vector> + <Vector name="AOHx" type="numeric" nEntries="6"> + -[tobrodpar:AOHx] , [tobrodpar:AOHx] , + [tobrodpar:AOHx] , [tobrodpar:AOHx] , + [zero] , [zero] + </Vector> + <Vector name="AOHy" type="numeric" nEntries="6"> + [tobrodpar:AOHy] , -[tobrodpar:AOHy] , + [tobrodpar:AOHy] , -[tobrodpar:AOHy] , + [zero] , [zero] + </Vector> + <Vector name="AOHz" type="numeric" nEntries="6"> + [zero] , [zero] , + [tobrodpar:AOHz] , -[tobrodpar:AOHz] , + [zero] , [zero] + </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tobrod5l.xml b/examples/DDCMS/data/tobrod5l.xml new file mode 100644 index 000000000..b4de5ada1 --- /dev/null +++ b/examples/DDCMS/data/tobrod5l.xml @@ -0,0 +1,144 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tobrod5l.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <LogicalPartSection label="tobrod5l.xml"> + <LogicalPart name="TOBRod5L" category="unspecified"> + <rSolid name="tobrodpar:TOBRodL"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TOBRodCentral5L" category="unspecified"> + <rSolid name="tobrodpar:TOBRodCentralL"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="tobrod5l.xml"> + <PosPart copyNumber="1"> + <rParent name="tobrod5l:TOBRod5L"/> + <rChild name="tobrod5l:TOBRodCentral5L"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTOBRodAlgo"> + <rParent name="tobrod5l:TOBRod5L"/> + <Numeric name="Shift" value="([tobrodpar:RodL]-[tobrodpar:RodDL])/2"/> + <String name="CentralName" value="tobrod5l:TOBRodCentral5L"/> + <Vector name="SideRodName" type="string" nEntries="2"> + tobrodpar:TOBSideRod1, tobrodpar:TOBSideRod2 + </Vector> + <Vector name="SideRodX" type="numeric" nEntries="2"> + -[tobrodpar:SideRodX], [tobrodpar:SideRodX] + </Vector> + <Vector name="SideRodY" type="numeric" nEntries="2"> + -[tobrodpar:RodY], [tobrodpar:RodY] + </Vector> + <Vector name="SideRodZ" type="numeric" nEntries="2"> + [zero], -[tobrodpar:RodDL] + </Vector> + <String name="EndRod1Name" value="tobrodpar:TOBEndRod1"/> + <Vector name="EndRod1Y" type="numeric" nEntries="2"> + -[tobrodpar:RodY], [tobrodpar:RodY] + </Vector> + <Vector name="EndRod1Z" type="numeric" nEntries="2"> + -[tobrodpar:EndRod1Z], -[tobrodpar:EndRod1Z] + </Vector> + <String name="EndRod2Name" value="tobrodpar:TOBEndRod2"/> + <Numeric name="EndRod2Y" value="[tobrodpar:EndRod2Y]"/> + <Numeric name="EndRod2Z" value="-[tobrodpar:EndRod2Z]"/> + <String name="CableName" value="tobrodpar:TOBCable"/> + <Numeric name="CableZ" value="-[tobrodpar:CableZ]"/> + <String name="ClampName" value="tobrodpar:TOBClamp"/> + <Vector name="ClampX" type="numeric" nEntries="4"> + -[tobrodpar:ClampX], -[tobrodpar:ClampX], [tobrodpar:ClampX], + [tobrodpar:ClampX] + </Vector> + <Vector name="ClampZ" type="numeric" nEntries="4"> + -[tobrodpar:ClampZ1], -[tobrodpar:ClampZ2], -[tobrodpar:ClampZ1], + -[tobrodpar:ClampZ2] + </Vector> + <String name="SideCoolName" value="tobrod4c:TOBSideCoolTube4"/> + <Vector name="SideCoolX" type="numeric" nEntries="2"> + -[tobrodpar:SideCoolX], [tobrodpar:SideCoolX] + </Vector> + <Vector name="SideCoolY" type="numeric" nEntries="2"> + [tobrodpar:SideCoolY], [tobrodpar:SideCoolY] + </Vector> + <Vector name="SideCoolZ" type="numeric" nEntries="2"> + -[tobrodpar:SideCoolZ], -[tobrodpar:SideCoolZ] + </Vector> + <String name="EndCoolName" value="tobrod4c:TOBEndCoolTube4"/> + <String name="EndCoolRot" value="tobrodpar:90XD"/> + <Numeric name="EndCoolY" value="[tobrodpar:EndCoolY]"/> + <Numeric name="EndCoolZ" value="-[tobrodpar:EndCoolZ]"/> + <String name="OptFibreName" value="tobrod4c:TOBOptFibre4"/> + <Vector name="optFibreX" type="numeric" nEntries="2"> + -[tobrodpar:OptFibreX], [tobrodpar:OptFibreX] + </Vector> + <Vector name="optFibreZ" type="numeric" nEntries="2"> + -[tobrodpar:OptFibreZ], -[tobrodpar:OptFibreZ] + </Vector> + <String name="SideClamp1Name" value="tobrod4c:TOBPlate41"/> + <Vector name="SideClampX" type="numeric" nEntries="12"> + -[tobrodpar:SideClampX], [tobrodpar:SideClampX], -[tobrodpar:SideClampX], + [tobrodpar:SideClampX], -[tobrodpar:SideClampX], [tobrodpar:SideClampX], + -[tobrodpar:SideClampX], [tobrodpar:SideClampX], -[tobrodpar:SideClampX], + [tobrodpar:SideClampX], -[tobrodpar:SideClampX], [tobrodpar:SideClampX] + </Vector> + <Vector name="SideClamp1DZ" type="numeric" nEntries="12"> + -[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z],-[tobrodpar:SideClamp1Z], + -[tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], + [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], + [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z], [tobrodpar:SideClamp1Z] + </Vector> + <String name="SideClamp2Name" value="tobrod4c:TOBPlate42"/> + <Vector name="SideClamp2DZ" type="numeric" nEntries="12"> + [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], [tobrodpar:SideClamp2Z], + [tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z], + -[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z], + -[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z],-[tobrodpar:SideClamp2Z] + </Vector> + <String name="ModuleName" value="tobmodule4:TOBModule4"/> + <Vector name="ModuleRot" type="string" nEntries="6"> + tobrodpar:NULL, tobrodpar:R180, tobrodpar:180D, + tobrodpar:180X, tobrodpar:180D, tobrodpar:180X</Vector> + <Vector name="ModuleY" type="numeric" nEntries="6"> + [tobrodpar:ModuleY], -[tobrodpar:ModuleY], [tobrodpar:ModuleY], + -[tobrodpar:ModuleY], [tobrodpar:ModuleY], -[tobrodpar:ModuleY] + </Vector> + <Vector name="ModuleZ" type="numeric" nEntries="6"> + [tobrodpar:ModuleZ01], [tobrodpar:ModuleZ02], [tobrodpar:ModuleZ03], + [tobrodpar:ModuleZ04], [tobrodpar:ModuleZ05], [tobrodpar:ModuleZ06] + </Vector> + <Vector name="ICCName" type="string" nEntries="6"> + tobrod4c:TOBRodConn4, tobrod4c:TOBCCUM4, tobrod4c:TOBICC42, + tobrod4c:TOBICC42, tobrod4c:TOBICC41, tobrod4c:TOBICC41 + </Vector> + <Vector name="ICCY" type="numeric" nEntries="6"> + -[tobrodpar:ICCY1], -[tobrodpar:ICCY2], [tobrodpar:ICCY1], + -[tobrodpar:ICCY1], [tobrodpar:ICCY1], -[tobrodpar:ICCY1] + </Vector> + <Vector name="ICCZ" type="numeric" nEntries="6"> + [tobrodpar:ICCZ01], [tobrodpar:ICCZ02], [tobrodpar:ICCZ03], + [tobrodpar:ICCZ04], [tobrodpar:ICCZ05], [tobrodpar:ICCZ06] + </Vector> + <String name="AOHName" value="tobrodpar:TOBAOH"/> + <Vector name="AOHCopies" type="numeric" nEntries="6"> + 0 , 0 , 2 , 2 , 1 , 1 + </Vector> + <Vector name="AOHx" type="numeric" nEntries="6"> + [zero] , [zero] , + [tobrodpar:AOHx] , [tobrodpar:AOHx] , + [tobrodpar:AOHx] , -[tobrodpar:AOHx] + </Vector> + <Vector name="AOHy" type="numeric" nEntries="6"> + [zero] , [zero] , + [tobrodpar:AOHy] , -[tobrodpar:AOHy] , + [tobrodpar:AOHy] , -[tobrodpar:AOHy] + </Vector> + <Vector name="AOHz" type="numeric" nEntries="6"> + [zero] , [zero] , + [tobrodpar:AOHz] , -[tobrodpar:AOHz] , + [zero] , [zero] + </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/tobrodpar.xml b/examples/DDCMS/data/tobrodpar.xml new file mode 100644 index 000000000..6680e1258 --- /dev/null +++ b/examples/DDCMS/data/tobrodpar.xml @@ -0,0 +1,176 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tobrodpar.xml" eval="true"> + <Constant name="RodW" value="8.250*cm"/> + <Constant name="RodT" value="1.000*cm"/> + <Constant name="RodL" value="110.80*cm"/> + <Constant name="RodDL" value="1.00*cm"/> + <Constant name="CentralRodW" value="6.250*cm"/> + <Constant name="SideRodW" value="0.600*cm"/> + <Constant name="SideRodT" value="0.060*cm"/> + <Constant name="SideRodX" value="6.850*cm"/> + <Constant name="RodY" value="0.790*cm"/> + <Constant name="EndRod1Z" value="110.2*cm"/> + <Constant name="EndRodT" value="0.055*cm"/> + <Constant name="EndRodL" value="1.300*cm"/> + <Constant name="EndRod2Y" value="0.845*cm"/> + <Constant name="EndRod2Z" value="2.450*cm"/> + <Constant name="CoolTubeLightR" value="0.110*cm"/> + <Constant name="CoolTubeHeavyR" value="0.125*cm"/> + <Constant name="CoolFluidLightR" value="0.100*cm"/> + <Constant name="CoolFluidHeavyR" value="0.115*cm"/> + <Constant name="SideCoolL" value="53.95*cm"/> + <Constant name="SideCoolX" value="6.550*cm"/> + <Constant name="SideCoolY" value="0.200*cm"/> + <Constant name="SideCoolZ" value="56.85*cm"/> + <Constant name="EndCoolL" value="6.250*cm"/> + <Constant name="EndCoolY" value="0.200*cm"/> + <Constant name="EndCoolZ" value="3.100*cm"/> + <Constant name="OptFibreW" value="0.150*cm"/> + <Constant name="OptFibreH" value="0.330*cm"/> + <Constant name="OptFibreL" value="37.50*cm"/> + <Constant name="OptFibreX" value="7.100*cm"/> + <Constant name="OptFibreZ" value="63.35*cm"/> + <Constant name="ClampDx" value="0.350*cm"/> + <Constant name="ClampDy" value="0.780*cm"/> + <Constant name="ClampDz" value="0.850*cm"/> + <Constant name="ClampX" value="7.850*cm"/> + <Constant name="ClampZ1" value="109.0*cm"/> + <Constant name="ClampZ2" value="29.00*cm"/> + <Constant name="SideClampDx" value="0.575*cm"/> + <Constant name="SideClampDy" value="0.145*cm"/> + <Constant name="SideClampLDz" value="1.900*cm"/> + <Constant name="SideClampHDz" value="2.000*cm"/> + <Constant name="SideClampX" value="6.825*cm"/> + <Constant name="SideClamp1Z" value="2.125*cm"/> + <Constant name="SideClamp2Z" value="9.775*cm"/> + <Constant name="CableDx" value="2.500*cm"/> + <Constant name="CableDy" value="0.050*cm"/> + <Constant name="CableDz" value="38.25*cm"/> + <Constant name="CableZ" value="62.25*cm"/> + <Constant name="ICCDx" value="5.900*cm"/> + <Constant name="ICCDy" value="0.125*cm"/> + <Constant name="ICC1Dz" value="2.200*cm"/> + <Constant name="ICC2Dz" value="3.400*cm"/> + <Constant name="ConnDx" value="5.900*cm"/> + <Constant name="ConnDy" value="0.250*cm"/> + <Constant name="ConnDz" value="3.750*cm"/> + <Constant name="CCUMDx" value="5.900*cm"/> + <Constant name="CCUMDy" value="0.125*cm"/> + <Constant name="CCUMDz" value="3.500*cm"/> + <Constant name="ModuleY" value="0.5425*cm"/> + <Constant name="ModuleZ01" value="-96.8564*cm"/> + <Constant name="ModuleZ02" value="-78.3454*cm"/> + <Constant name="ModuleZ03" value="-65.5084*cm"/> + <Constant name="ModuleZ04" value="-47.1914*cm"/> + <Constant name="ModuleZ05" value="-29.4404*cm"/> + <Constant name="ModuleZ06" value="-11.3564*cm"/> + <Constant name="ModuleZ07" value="11.3564*cm"/> + <Constant name="ModuleZ08" value="29.4404*cm"/> + <Constant name="ModuleZ09" value="48.1014*cm"/> + <Constant name="ModuleZ10" value="65.5084*cm"/> + <Constant name="ModuleZ11" value="80.1174*cm"/> + <Constant name="ModuleZ12" value="96.8564*cm"/> + <Constant name="ICCY1" value="0.525*cm"/> + <Constant name="ICCY2" value="0.400*cm"/> + <Constant name="ICCZ01" value="-105.00*cm"/> + <Constant name="ICCZ02" value="-96.60*cm"/> + <Constant name="ICCZ03" value="-81.20*cm"/> + <Constant name="ICCZ04" value="-62.75*cm"/> + <Constant name="ICCZ05" value="-44.05*cm"/> + <Constant name="ICCZ06" value="-25.85*cm"/> + <Constant name="ICCZ07" value="25.85*cm"/> + <Constant name="ICCZ08" value="44.05*cm"/> + <Constant name="ICCZ09" value="64.10*cm"/> + <Constant name="ICCZ10" value="81.20*cm"/> + <Constant name="ICCZ11" value="96.60*cm"/> + <Constant name="ICCZ12" value="105.00*cm"/> + <Constant name="zero" value="0.0*fm"/> + <Constant name="Tol" value="0.0*mm"/> + <Constant name="AOHDx" value="0.5*3.000*cm"/> + <Constant name="AOHDy" value="0.5*0.200*cm"/> + <Constant name="AOHDz" value="0.5*2.300*cm"/> + <Constant name="AOHx" value="[ICCDx]-[AOHDx]-13*mm"/> + <Constant name="AOHy" value="[ICCDy]+[AOHDy]+[Tol]"/> + <Constant name="AOHz" value="12*mm"/> + </ConstantsSection> + <RotationSection label="tobrodpar.xml"> + <Rotation name="000D" thetaX="90*deg" phiX="0*deg" thetaY="90*deg" phiY="90*deg" thetaZ="0*deg" phiZ="0*deg"/> + <Rotation name="180D" thetaX="90*deg" phiX="180*deg" thetaY="90*deg" phiY="90*deg" thetaZ="180*deg" phiZ="0*deg"/> + <Rotation name="180X" thetaX="90*deg" phiX="0*deg" thetaY="90*deg" phiY="-90*deg" thetaZ="180*deg" phiZ="0*deg"/> + <Rotation name="90XD" thetaX="90*deg" phiX="90*deg" thetaY="0*deg" phiY="0*deg" thetaZ="90*deg" phiZ="0*deg"/> + <Rotation name="R180" thetaX="90*deg" phiX="180*deg" thetaY="90*deg" phiY="-90*deg" thetaZ="0*deg" phiZ="0*deg"/> + </RotationSection> + <SolidSection label="tobrodpar.xml"> + <Box name="TOBSideRod1" dx="[SideRodW]" dy="[SideRodT]" dz="([RodL]+[RodDL])/2"/> + <Box name="TOBSideRod2" dx="[SideRodW]" dy="[SideRodT]" dz="([RodL]-[RodDL])/2"/> + <Box name="TOBEndRod1" dx="[CentralRodW]" dy="[SideRodT]" dz="[SideRodW]"/> + <Box name="TOBEndRod2" dx="[CentralRodW]" dy="[EndRodT]" dz="[EndRodL]"/> + <Box name="TOBClamp" dx="[ClampDx]" dy="[ClampDy]" dz="[ClampDz]"/> + <Box name="TOBCable" dx="[CableDx]" dy="[CableDy]" dz="[CableDz]"/> + <Box name="TOBICC1" dx="[ICCDx]" dy="[ICCDy]" dz="[ICC1Dz]"/> + <Box name="TOBICC2" dx="[ICCDx]" dy="[ICCDy]" dz="[ICC2Dz]"/> + <Box name="TOBRodConn" dx="[ConnDx]" dy="[ConnDy]" dz="[ConnDz]"/> + <Box name="TOBCCUM" dx="[CCUMDx]" dy="[CCUMDy]" dz="[CCUMDz]"/> + <Box name="TOBRod" dx="[RodW]" dy="[RodT]" dz="[RodL]"/> + <Box name="TOBRodout" dx="[RodW]" dy="[RodT]" dz="([RodL]+[RodDL])/2"/> + <Box name="TOBRodin" dx="[RodW]+[Tol]" dy="([RodT]/2+[Tol])" dz="[RodDL]"/> + <Box name="TOBAOH" dx="[AOHDx]" dy="[AOHDy]" dz="[AOHDz]"/> + <SubtractionSolid name="TOBRodL"> + <rSolid name="TOBRodout"/> + <rSolid name="TOBRodin"/> + <rRotation name="tobrodpar:000D"/> + <Translation x="[zero]" y="[RodT]/2" z="([RodL]-[RodDL])/2"/> + </SubtractionSolid> + <SubtractionSolid name="TOBRodH"> + <rSolid name="TOBRodout"/> + <rSolid name="TOBRodin"/> + <rRotation name="tobrodpar:000D"/> + <Translation x="[zero]" y="-[RodT]/2" z="-([RodL]-[RodDL])/2"/> + </SubtractionSolid> + <Box name="TOBRod1Cent" dx="[CentralRodW]" dy="[RodT]" dz="([RodL]+[RodDL])/2"/> + <Box name="TOBRod2Cent" dx="([CentralRodW]+[Tol])" dy="([RodT]/2+[Tol])" dz="[RodDL]"/> + <SubtractionSolid name="TOBRodCentralL"> + <rSolid name="TOBRod1Cent"/> + <rSolid name="TOBRod2Cent"/> + <rRotation name="tobrodpar:000D"/> + <Translation x="[zero]" y="[RodT]/2" z="([RodL]-[RodDL])/2"/> + </SubtractionSolid> + <SubtractionSolid name="TOBRodCentralH"> + <rSolid name="TOBRod1Cent"/> + <rSolid name="TOBRod2Cent"/> + <rRotation name="tobrodpar:000D"/> + <Translation x="[zero]" y="-[RodT]/2" z="-([RodL]-[RodDL])/2"/> + </SubtractionSolid> + </SolidSection> + <LogicalPartSection label="tobrodpar.xml"> + <LogicalPart name="TOBSideRod1" category="unspecified"> + <rSolid name="TOBSideRod1"/> + <rMaterial name="tobmaterial:TOB_rod"/> + </LogicalPart> + <LogicalPart name="TOBSideRod2" category="unspecified"> + <rSolid name="TOBSideRod2"/> + <rMaterial name="tobmaterial:TOB_rod"/> + </LogicalPart> + <LogicalPart name="TOBEndRod1" category="unspecified"> + <rSolid name="TOBEndRod1"/> + <rMaterial name="tobmaterial:TOB_rod"/> + </LogicalPart> + <LogicalPart name="TOBEndRod2" category="unspecified"> + <rSolid name="TOBEndRod2"/> + <rMaterial name="tobmaterial:TOB_rod"/> + </LogicalPart> + <LogicalPart name="TOBClamp" category="unspecified"> + <rSolid name="TOBClamp"/> + <rMaterial name="tobmaterial:TOB_plate_A"/> + </LogicalPart> + <LogicalPart name="TOBCable" category="unspecified"> + <rSolid name="TOBCable"/> + <rMaterial name="tobmaterial:TOB_ICB"/> + </LogicalPart> + <LogicalPart name="TOBAOH" category="unspecified"> + <rSolid name="TOBAOH"/> + <rMaterial name="tobmaterial:TOB_AOH"/> + </LogicalPart> + </LogicalPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/tracker.xml b/examples/DDCMS/data/tracker.xml new file mode 100644 index 000000000..e3af37e26 --- /dev/null +++ b/examples/DDCMS/data/tracker.xml @@ -0,0 +1,25 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="tobrodpar.xml" eval="true"> + <Constant name="BackPlaneDz" value="0.015*mm"/> + </ConstantsSection> + <SolidSection label="tracker.xml"> + <Polycone name="Tracker" startPhi="0*deg" deltaPhi="360*deg"> + <ZSection z="-[cms:TrackBeamZ2]" rMin="[cms:TrackBeamR2]" rMax="[cms:TrackCalorR]"/> + <ZSection z="-[cms:TrackBeamZ1]" rMin="[cms:TrackBeamR1]" rMax="[cms:TrackCalorR]"/> + <ZSection z="[cms:TrackBeamZ1]" rMin="[cms:TrackBeamR1]" rMax="[cms:TrackCalorR]"/> + <ZSection z="[cms:TrackBeamZ2]" rMin="[cms:TrackBeamR2]" rMax="[cms:TrackCalorR]"/> + </Polycone> + </SolidSection> + <LogicalPartSection label="tracker.xml"> + <LogicalPart name="Tracker" category="unspecified"> + <rSolid name="Tracker"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + </LogicalPartSection> + <RotationSection label="tracker.xml"> + <Rotation name="180D" thetaX="90*deg" phiX="180*deg" thetaY="90*deg" phiY="90*deg" thetaZ="180*deg" phiZ="0*deg"/> + <Rotation name="R180" thetaX="90*deg" phiX="180*deg" thetaY="90*deg" phiY="-90*deg" thetaZ="0*deg" phiZ="0*deg"/> + <Rotation name="PAA" thetaX="180*deg" phiX="0*deg" thetaY="90*deg" phiY="90*deg" thetaZ="90*deg" phiZ="0*deg"/> + </RotationSection> +</DDDefinition> diff --git a/examples/DDCMS/data/trackerParameters.xml b/examples/DDCMS/data/trackerParameters.xml new file mode 100644 index 000000000..162238388 --- /dev/null +++ b/examples/DDCMS/data/trackerParameters.xml @@ -0,0 +1,45 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="trackerParameters.xml" eval="true"> + <Vector name="vPars" type="numeric" nEntries="6"> + 80, 52, 1, 2, 0, 0 + </Vector> + <Vector name="Subdetector1" type="numeric" nEntries="6"> + 16, 8, 2, 0xF, 0xFF, 0x3F + </Vector> + <Vector name="Subdetector2" type="numeric" nEntries="10"> + 23, 16, 10, 8, 2, 0x3, 0xF, 0x3F, 0x3, 0x3F + </Vector> + <Vector name="Subdetector3" type="numeric" nEntries="12"> + 14, 12, 10, 4, 2, 0, 0x7, 0x3, 0x3, 0x3F, 0x3, 0x3 + </Vector> + <Vector name="Subdetector4" type="numeric" nEntries="12"> + 13, 11, 9, 7, 2, 0, 0x3, 0x3, 0x3, 0x3, 0x1F, 0x3 + </Vector> + <Vector name="Subdetector5" type="numeric" nEntries="10"> + 14, 12, 5, 2, 0, 0x7, 0x3, 0x7F, 0x7, 0x3 + </Vector> + <Vector name="Subdetector6" type="numeric" nEntries="14"> + 18, 14, 12, 8, 5, 2, 0, 0x3, 0xF, 0x3, 0xF, 0x7, 0x7, 0x3 + </Vector> + <Vector name="detIdShifts" type="numeric" nEntries="36"> + -1, 23, -1, + 13, -1, 18, + + 16, 16, 14, + 11, 14, 14, + + 8, 8, 4, + 9, 5, 8, + + 2, 2, 2, + 2, 2, 5, + + 0, 0, 0, + 0, 0, 2, + + -1, -1, -1, + -1, -1, 0 + </Vector> + </ConstantsSection> +</DDDefinition> diff --git a/examples/DDCMS/data/trackerStructureTopology.xml b/examples/DDCMS/data/trackerStructureTopology.xml new file mode 100644 index 000000000..96d7131a0 --- /dev/null +++ b/examples/DDCMS/data/trackerStructureTopology.xml @@ -0,0 +1,321 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <SpecParSection label="spec-pars2.xml"> + <SpecPar name="FullTrackerPar"> + <PartSelector path="//Tracker"/> + <Parameter name="TkDDDStructure" value="FullTracker"/> + </SpecPar> + <SpecPar name="PixelBarrelSubDetPar"> + <PartSelector path="//PixelBarrel"/> + <Parameter name="TkDDDStructure" value="PixelBarrel"/> + </SpecPar> + <SpecPar name="PixelBarrelLayerPar"> + <PartSelector path="//PixelBarrelLayer0"/> + <PartSelector path="//PixelBarrelLayer1"/> + <PartSelector path="//PixelBarrelLayer2"/> + <Parameter name="TkDDDStructure" value="PixelBarrelLayer"/> + </SpecPar> + <SpecPar name="PixelBarrelLadderPar"> + <PartSelector path="//PixelBarrelLadderHalf"/> + <PartSelector path="//PixelBarrelLadderFull"/> + <Parameter name="TkDDDStructure" value="PixelBarrelLadder"/> + </SpecPar> + <SpecPar name="PixelBarrelModulePar"> + <PartSelector path="//PixelBarrelActiveFull"/> + <PartSelector path="//PixelBarrelActiveHalf"/> + <Parameter name="TkDDDStructure" value="PixelBarrelDet"/> + </SpecPar> + <SpecPar name="PixelEndcapSubDetPar"> + <PartSelector path="//PixelForwardZPlus"/> + <PartSelector path="//PixelForwardZMinus"/> + <Parameter name="TkDDDStructure" value="PixelEndcapSubDet"/> + </SpecPar> + <SpecPar name="PixelEndcapDiskPar"> + <PartSelector path="//PixelForwardDiskZMinus"/> + <PartSelector path="//PixelForwardDiskZPlus"/> + <Parameter name="TkDDDStructure" value="PixelEndcapDisk"/> + </SpecPar> + <SpecPar name="PixelEndcapPanelPar"> + <PartSelector path="//PixelForwardPanel3Left"/> + <PartSelector path="//PixelForwardPanel3Right"/> + <PartSelector path="//PixelForwardPanel4Right"/> + <PartSelector path="//PixelForwardPanel4Left"/> + <Parameter name="TkDDDStructure" value="PixelEndcapPanel"/> + </SpecPar> + <SpecPar name="PixelEndcapDetPar"> + <PartSelector path="//PixelForwardActive1x2"/> + <PartSelector path="//PixelForwardActive1x5"/> + <PartSelector path="//PixelForwardActive2x3"/> + <PartSelector path="//PixelForwardActive2x4"/> + <PartSelector path="//PixelForwardActive2x5"/> + <Parameter name="TkDDDStructure" value="PixelEndcapDet"/> + </SpecPar> + <SpecPar name="TIBSubDetPar"> + <PartSelector path="//TIB"/> + <Parameter name="TkDDDStructure" value="TIB"/> + </SpecPar> + <SpecPar name="TIBSubDetLayerPar"> + <PartSelector path="//TIBLayer0"/> + <PartSelector path="//TIBLayer1"/> + <PartSelector path="//TIBLayer2"/> + <PartSelector path="//TIBLayer3"/> + <Parameter name="TkDDDStructure" value="TIBLayer"/> + </SpecPar> + <!--definire plus e minus--> + <SpecPar name="TIBSubDetStringPar"> + <PartSelector path="//TIBString0LoMin1"/> + <PartSelector path="//TIBString0LoPls1"/> + <PartSelector path="//TIBString0UpMin1"/> + <PartSelector path="//TIBString0UpPls1"/> + <PartSelector path="//TIBString1LoMin1"/> + <PartSelector path="//TIBString1LoPls1"/> + <PartSelector path="//TIBString1UpMin1"/> + <PartSelector path="//TIBString1UpPls1"/> + <PartSelector path="//TIBString2LoMin1"/> + <PartSelector path="//TIBString2LoPls1"/> + <PartSelector path="//TIBString2UpMin1"/> + <PartSelector path="//TIBString2UpPls1"/> + <PartSelector path="//TIBString3LoMin1"/> + <PartSelector path="//TIBString3LoPls1"/> + <PartSelector path="//TIBString3UpMin1"/> + <PartSelector path="//TIBString3UpPls1"/> + <Parameter name="TkDDDStructure" value="TIBString"/> + </SpecPar> + <SpecPar name="TIBSubDetGluedDetPar"> + <PartSelector path="//TIBModule0A"/> + <PartSelector path="//TIBModule0B"/> + <Parameter name="TkDDDStructure" value="TIBGluedDet"/> + </SpecPar> + <SpecPar name="TIBSubDetDetPar"> + <PartSelector path="//TIBActiveRphi0"/> + <PartSelector path="//TIBActiveSter0"/> + <PartSelector path="//TIBActiveRphi2"/> + <Parameter name="TkDDDStructure" value="TIBDet"/> + </SpecPar> + <SpecPar name="TIDSubDetPar"> + <PartSelector path="//TIDB"/> + <PartSelector path="//TIDF"/> + <Parameter name="TkDDDStructure" value="TID"/> + </SpecPar> + <SpecPar name="TIDSubDetWheelPar"> + <PartSelector path="//TIDWheelB"/> + <PartSelector path="//TIDWheelF"/> + <Parameter name="TkDDDStructure" value="TIDWheel"/> + </SpecPar> + <SpecPar name="TIDSubDetRingPar"> + <PartSelector path="//TIDRing0F"/> + <PartSelector path="//TIDRing1F"/> + <PartSelector path="//TIDRing0B"/> + <PartSelector path="//TIDRing1B"/> + <PartSelector path="//TIDRing2"/> + <Parameter name="TkDDDStructure" value="TIDRing"/> + </SpecPar> + <SpecPar name="TIDSubDetGluedDetPar"> + <PartSelector path="//TIDModule0L"/> + <PartSelector path="//TIDModule0R"/> + <PartSelector path="//TIDModule1L"/> + <PartSelector path="//TIDModule1R"/> + <Parameter name="TkDDDStructure" value="TIDGluedDet"/> + </SpecPar> + <SpecPar name="TIDSubDetDetPar"> + <PartSelector path="//TIDModule0RphiActive"/> + <PartSelector path="//TIDModule0StereoActive"/> + <PartSelector path="//TIDModule1RphiActive"/> + <PartSelector path="//TIDModule1StereoActive"/> + <PartSelector path="//TIDModule2RphiActive"/> + <Parameter name="TkDDDStructure" value="TIDDet"/> + </SpecPar> + <SpecPar name="TOBSubDetPar"> + <PartSelector path="//TOB"/> + <Parameter name="TkDDDStructure" value="TOB"/> + </SpecPar> + <SpecPar name="TOBSubDetLayerPar"> + <PartSelector path="//TOBLayer0"/> + <PartSelector path="//TOBLayer1"/> + <PartSelector path="//TOBLayer2"/> + <PartSelector path="//TOBLayer3"/> + <PartSelector path="//TOBLayer4"/> + <PartSelector path="//TOBLayer5"/> + <Parameter name="TkDDDStructure" value="TOBLayer"/> + </SpecPar> + <SpecPar name="TOBSubDetRodPar"> + <PartSelector path="//TOBRod0L"/> + <PartSelector path="//TOBRod0H"/> + <PartSelector path="//TOBRod1L"/> + <PartSelector path="//TOBRod1H"/> + <PartSelector path="//TOBRod2L"/> + <PartSelector path="//TOBRod2H"/> + <PartSelector path="//TOBRod3L"/> + <PartSelector path="//TOBRod3H"/> + <PartSelector path="//TOBRod4L"/> + <PartSelector path="//TOBRod4H"/> + <PartSelector path="//TOBRod5L"/> + <PartSelector path="//TOBRod5H"/> + <Parameter name="TkDDDStructure" value="TOBRod"/> + </SpecPar> + <SpecPar name="TOBSubDetGluedDetPar"> + <PartSelector path="//TOBModule0"/> + <Parameter name="TkDDDStructure" value="TOBGluedDet"/> + </SpecPar> + <SpecPar name="TOBSubDetDetPar"> + <PartSelector path="//TOBActiveRphi0"/> + <PartSelector path="//TOBActiveSter0"/> + <PartSelector path="//TOBActiveRphi2"/> + <PartSelector path="//TOBActiveRphi4"/> + <Parameter name="TkDDDStructure" value="TOBDet"/> + </SpecPar> + <SpecPar name="TECSubDetPar"> + <PartSelector path="//TEC"/> + <Parameter name="TkDDDStructure" value="TEC"/> + </SpecPar> + <SpecPar name="TECSubDetWheelPar"> + <PartSelector path="//TECWheelA"/> + <PartSelector path="//TECWheelB"/> + <PartSelector path="//TECWheel6"/> + <!-- special disk that contains the beamsplitters (for alignment)--> + <PartSelector path="//TECWheelC"/> + <PartSelector path="//TECWheelD"/> + <Parameter name="TkDDDStructure" value="TECWheel"/> + </SpecPar> + <SpecPar name="TECSubDetPetalPar"> + <PartSelector path="//TECPetalCont0F"/> + <PartSelector path="//TECPetalCont0B"/> + <PartSelector path="//TECPetalCont3F"/> + <PartSelector path="//TECPetalCont3B"/> + <PartSelector path="//TECPetalCont6F"/> + <PartSelector path="//TECPetalCont6B"/> + <PartSelector path="//TECPetalCont8F"/> + <PartSelector path="//TECPetalCont8B"/> + <Parameter name="TkDDDStructure" value="TECPetal"/> + </SpecPar> + <SpecPar name="TECSubDetRingPar"> + <PartSelector path="//TECRing0F"/> + <PartSelector path="//TECRing0B"/> + <PartSelector path="//TECRing1F"/> + <PartSelector path="//TECRing1B"/> + <PartSelector path="//TECRing2F"/> + <PartSelector path="//TECRing2B"/> + <PartSelector path="//TECRing3F"/> + <PartSelector path="//TECRing3B"/> + <PartSelector path="//TECRing4F"/> + <PartSelector path="//TECRing4B"/> + <PartSelector path="//TECRing5F"/> + <PartSelector path="//TECRing5B"/> + <PartSelector path="//TECRing6F"/> + <PartSelector path="//TECRing6B"/> + <Parameter name="TkDDDStructure" value="TECRing"/> + </SpecPar> + <SpecPar name="TECSubDetGluedDetPar"> + <PartSelector path="//TECModule0"/> + <PartSelector path="//TECModule1"/> + <PartSelector path="//TECModule4"/> + <Parameter name="TkDDDStructure" value="TECGluedDet"/> + </SpecPar> + <SpecPar name="TECSubDetDetPar"> + <PartSelector path="//TECModule0RphiActive"/> + <PartSelector path="//TECModule0StereoActive"/> + <PartSelector path="//TECModule1RphiActive"/> + <PartSelector path="//TECModule1StereoActive"/> + <PartSelector path="//TECModule2RphiActive"/> + <PartSelector path="//TECModule3RphiActive"/> + <PartSelector path="//TECModule4RphiActive"/> + <PartSelector path="//TECModule4StereoActive"/> + <PartSelector path="//TECModule5RphiActive"/> + <PartSelector path="//TECModule6RphiActive"/> + <Parameter name="TkDDDStructure" value="TECDet"/> + </SpecPar> + <SpecPar name="TrackerStereoDetectorsPar"> + <PartSelector path="//TIBActiveSter0"/> + <PartSelector path="//TIDModule0StereoActive"/> + <PartSelector path="//TIDModule1StereoActive"/> + <PartSelector path="//TOBActiveSter0"/> + <PartSelector path="//TECModule0StereoActive"/> + <PartSelector path="//TECModule1StereoActive"/> + <PartSelector path="//TECModule4StereoActive"/> + <Parameter name="TrackerStereoDetectors" value="true"/> + </SpecPar> + <SpecPar name="TrackerAPVNumber6Par"> + <PartSelector path="//TIBActiveRphi0"/> + <PartSelector path="//TIBActiveSter0"/> + <PartSelector path="//TIDModule0RphiActive"/> + <PartSelector path="//TIDModule0StereoActive"/> + <PartSelector path="//TIDModule1RphiActive"/> + <PartSelector path="//TIDModule1StereoActive"/> + <PartSelector path="//TOBActiveRphi4"/> + <PartSelector path="//TECModule0RphiActive"/> + <PartSelector path="//TECModule0StereoActive"/> + <PartSelector path="//TECModule1RphiActive"/> + <PartSelector path="//TECModule1StereoActive"/> + <PartSelector path="//TECModule4RphiActive"/> + <PartSelector path="//TECModule4StereoActive"/> + <Parameter name="SiliconAPVNumber" value="6"/> + </SpecPar> + <SpecPar name="TrackerAPVNumber4Par"> + <PartSelector path="//TIBActiveRphi2"/> + <PartSelector path="//TIDModule2RphiActive"/> + <PartSelector path="//TOBActiveRphi0"/> + <PartSelector path="//TOBActiveSter0"/> + <PartSelector path="//TOBActiveRphi2"/> + <PartSelector path="//TECModule2RphiActive"/> + <PartSelector path="//TECModule3RphiActive"/> + <PartSelector path="//TECModule5RphiActive"/> + <PartSelector path="//TECModule6RphiActive"/> + <Parameter name="SiliconAPVNumber" value="4"/> + </SpecPar> + <SpecPar name="PixelROCRowsPar"> + <PartSelector path="//PixelBarrelActiveFull"/> + <PartSelector path="//PixelBarrelActiveHalf"/> + <PartSelector path="//PixelForwardActive1x2"/> + <PartSelector path="//PixelForwardActive1x5"/> + <PartSelector path="//PixelForwardActive2x3"/> + <PartSelector path="//PixelForwardActive2x4"/> + <PartSelector path="//PixelForwardActive2x5"/> + <Parameter name="PixelROCRows" value="80"/> + </SpecPar> + <SpecPar name="PixelROCColsPar"> + <PartSelector path="//PixelBarrelActiveFull"/> + <PartSelector path="//PixelBarrelActiveHalf"/> + <PartSelector path="//PixelForwardActive1x2"/> + <PartSelector path="//PixelForwardActive1x5"/> + <PartSelector path="//PixelForwardActive2x3"/> + <PartSelector path="//PixelForwardActive2x4"/> + <PartSelector path="//PixelForwardActive2x5"/> + <Parameter name="PixelROCCols" value="52"/> + </SpecPar> + <SpecPar name="PixelROC_XPar"> + <PartSelector path="//PixelBarrelActiveFull"/> + <PartSelector path="//PixelForwardActive2x3"/> + <PartSelector path="//PixelForwardActive2x4"/> + <PartSelector path="//PixelForwardActive2x5"/> + <Parameter name="PixelROC_X" value="2"/> + </SpecPar> + <SpecPar name="PixelROC_X_HalfPar"> + <PartSelector path="//PixelBarrelActiveHalf"/> + <PartSelector path="//PixelForwardActive1x2"/> + <PartSelector path="//PixelForwardActive1x5"/> + <Parameter name="PixelROC_X" value="1"/> + </SpecPar> + <SpecPar name="PixelROC_YPar"> + <PartSelector path="//PixelBarrelActiveFull"/> + <PartSelector path="//PixelBarrelActiveHalf"/> + <Parameter name="PixelROC_Y" value="8"/> + </SpecPar> + <SpecPar name="PixelROC_Y2Par"> + <PartSelector path="//PixelForwardActive1x2"/> + <Parameter name="PixelROC_Y" value="2"/> + </SpecPar> + <SpecPar name="PixelROC_Y3Par"> + <PartSelector path="//PixelForwardActive2x3"/> + <Parameter name="PixelROC_Y" value="3"/> + </SpecPar> + <SpecPar name="PixelROC_Y4Par"> + <PartSelector path="//PixelForwardActive2x4"/> + <Parameter name="PixelROC_Y" value="4"/> + </SpecPar> + <SpecPar name="PixelROC_Y5Par"> + <PartSelector path="//PixelForwardActive1x5"/> + <PartSelector path="//PixelForwardActive2x5"/> + <Parameter name="PixelROC_Y" value="5"/> + </SpecPar> + </SpecParSection> +</DDDefinition> diff --git a/examples/DDCMS/data/trackerbulkhead.xml b/examples/DDCMS/data/trackerbulkhead.xml new file mode 100644 index 000000000..815328970 --- /dev/null +++ b/examples/DDCMS/data/trackerbulkhead.xml @@ -0,0 +1,293 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="trackerbulkhead.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="Rin" value="190*mm"/> + <Constant name="Rout" value="1.233*m"/> + <Constant name="Thick" value="[BulkheadThick]+[BHDiskThick]+[BHCoversThick]"/> + <Constant name="BulkheadZ" value="[tob:Zv3]+0.5*[Thick]"/> + <!--should be 4mm behind TEC is at the end of tob to prevent overlaps--> + <Constant name="BulkheadThick" value="89*mm"/> + <Constant name="BulkheadRout" value="1053*mm"/> + <Constant name="BulkheadRin" value="[tecpetal3:PetalContRmin]"/> + <Constant name="PatchpanelR4" value="1105*mm"/> + <!-- inside of the outer cable region. NOTE: there is a (historical?) gap between R3 and R4 --> + <Constant name="PatchpanelR3" value="[BulkheadRout]"/> + <!-- outside of bulkhead region--> + <Constant name="PatchpanelR2" value="645*mm"/> + <!-- outside of the inner pixel region--> + <Constant name="PatchpanelR1" value="[AlignRingRout]"/> + <!-- inside of the inner pixel region--> + <Constant name="PatchpanelThick" value="[BulkheadThick]"/> + <Constant name="TECPatchpanelWidth" value="35*deg"/> + <!-- <Constant name="PIXPatchpanelWidth1" value="20*deg"/> --> + <Constant name="PIXPatchpanelWidth1" value="10*deg"/> + <Constant name="PIXPatchpanelWidth2" value="160*deg"/> + <Constant name="PIXPatchpanelPhi" value="-100*deg"/> + <Constant name="TECPatchpanelPhi" value="10*deg"/> + <Constant name="PpBoxWidth" value="175*mm"/> + <!-- <Constant name="PpBoxLengthL" value="298.19*mm"/> --> + <Constant name="PpConnectorsLength" value="50.*mm"/> + <Constant name="PpConnectorsThick" value="15.*mm"/> + <!-- <Constant name="PpBoxLengthL" value="154.96*mm"/> --> + <!-- <Constant name="PpBoxLengthL" value="129.96*mm"/> --> + <Constant name="PpBoxLengthL" value="104.96*mm"/> + <!-- <Constant name="PpBoxLengthS" value="143.23*mm"/> --> + <!-- <Constant name="PpBoxLengthS" value="118.23*mm"/> --> + <Constant name="PpBoxLengthS" value="93.23*mm"/> + <Constant name="PpBoxThick" value="0.5*43.43*mm"/> + <Constant name="PpBoxSideX" value="20.2*mm"/> + <Constant name="PpBoxSideY" value="12.5*mm"/> + <Constant name="PpBoxDistX" value="35*mm"/> + <Constant name="PpBoxDistY" value="14*mm"/> + <Constant name="CtrlBoxWidth" value="75*mm"/> + <Constant name="CtrlBoxLength" value="195*mm"/> + <Constant name="CtrlBoxThick" value="25*mm"/> + <Constant name="CtrlBoxDistX" value="73.35*mm"/> + <Constant name="CtrlBoxDistY" value="12.85*mm"/> + <Constant name="AlignRingRin" value="235*mm"/> + <Constant name="AlignRingRout" value="365*mm"/> + <Constant name="AlignRingThick" value="48.5*mm"/> + <Constant name="PixelCablesRin" value="[Rin]"/> + <!-- cables going to pixel patchpanel --> + <Constant name="PixelCablesRout" value="[AlignRingRout]"/> + <Constant name="PixelCablesThick" value="12.2*mm"/> + <Constant name="BHDiskRin" value="[BulkheadRin]"/> + <Constant name="BHDiskRout" value="[BulkheadRout]"/> + <Constant name="BHDiskThick" value="5*mm"/> + <Constant name="BHCoversRin" value="[BulkheadRin]"/> + <Constant name="BHCoversRout" value="[BulkheadRout]"/> + <Constant name="BHCoversThick" value="1.1*mm"/> + </ConstantsSection> + <SolidSection label="trackerbulkhead.xml"> + <Tubs name="TrackerBulkhead" rMin="[Rin]" rMax="[Rout]" dz="0.5*[Thick]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="BHDisk" rMin="[BHDiskRin]" rMax="[BHDiskRout]" dz="0.5*[BHDiskThick]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="BHCovers" rMin="[BHCoversRin]" rMax="[BHCoversRout]" dz="0.5*[BHCoversThick]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="OuterCables" rMin="[PatchpanelR4]" rMax="[Rout]" dz="0.5*[Thick]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TECPatchpanel" rMin="[PatchpanelR2]" rMax="[PatchpanelR3]" dz="0.5*[PatchpanelThick]" startPhi="-[TECPatchpanelWidth]" deltaPhi="[TECPatchpanelWidth]"/> + <Tubs name="PIXPatchpanel1" rMin="[PatchpanelR1]" rMax="[PatchpanelR3]" dz="0.5*[PatchpanelThick]" startPhi="-2*[PIXPatchpanelWidth1]" deltaPhi="[PIXPatchpanelWidth1]"/> + <Tubs name="PIXPatchpanel1b" rMin="[PatchpanelR1]" rMax="[PatchpanelR3]" dz="0.5*[PatchpanelThick]" startPhi="-2*[PIXPatchpanelWidth1]" deltaPhi="[PIXPatchpanelWidth1]"/> + <Tubs name="PIXPatchpanel2" rMin="[PatchpanelR1]" rMax="[PatchpanelR2]" dz="0.5*[PatchpanelThick]" startPhi="-[PIXPatchpanelWidth2]" deltaPhi="[PIXPatchpanelWidth2]"/> + <Tubs name="TECAlignRing" rMin="[AlignRingRin]" rMax="[AlignRingRout]" dz="0.5*[AlignRingThick]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="PixelCables" rMin="[PixelCablesRin]" rMax="[PixelCablesRout]" dz="0.5*[PixelCablesThick]" startPhi="0*deg" deltaPhi="360*deg"/> + <Box name="TECPpConnectors" dx="0.5*[PpConnectorsLength]" dy="0.5*[PpBoxWidth]" dz="0.5*[PpConnectorsThick]"/> + <Box name="TECPpBoxC" dx="0.5*[PpConnectorsLength]" dy="0.5*[PpBoxWidth]" dz="0.5*[PpBoxThick]"/> + <Box name="TECPpBoxL" dx="0.5*[PpBoxLengthL]" dy="0.5*[PpBoxWidth]" dz="0.5*[PpBoxThick]"/> + <Box name="TECPpBoxS" dx="0.5*[PpBoxLengthS]" dy="0.5*[PpBoxWidth]" dz="[PpBoxThick]"/> + <Box name="TECCtrlBox" dx="0.5*[CtrlBoxLength]" dy="0.5*[CtrlBoxWidth]" dz="0.5*[CtrlBoxThick]"/> + </SolidSection> + <LogicalPartSection label="trackerbulkhead.xml"> + <LogicalPart name="TrackerBulkhead" category="unspecified"> + <rSolid name="trackerbulkhead:TrackerBulkhead"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="BHDisk" category="unspecified"> + <rSolid name="BHDisk"/> + <rMaterial name="tecmaterial:TEC_BHDisk"/> + </LogicalPart> + <LogicalPart name="BHCovers" category="unspecified"> + <rSolid name="BHCovers"/> + <rMaterial name="tecmaterial:TEC_BHCovers"/> + </LogicalPart> + <LogicalPart name="OuterCables" category="unspecified"> + <rSolid name="trackerbulkhead:OuterCables"/> + <rMaterial name="trackermaterial:Tk_panels_up"/> + </LogicalPart> + <LogicalPart name="TECPatchpanel" category="unspecified"> + <rSolid name="trackerbulkhead:TECPatchpanel"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="PIXPatchpanel1" category="unspecified"> + <rSolid name="trackerbulkhead:PIXPatchpanel1"/> + <rMaterial name="trackermaterial:Tk_panels_mid1"/> + </LogicalPart> + <LogicalPart name="PIXPatchpanel1b" category="unspecified"> + <rSolid name="trackerbulkhead:PIXPatchpanel1b"/> + <rMaterial name="trackermaterial:Tk_panels_mid1b"/> + </LogicalPart> + <LogicalPart name="PIXPatchpanel2" category="unspecified"> + <rSolid name="trackerbulkhead:PIXPatchpanel2"/> + <rMaterial name="trackermaterial:Tk_panels_mid2"/> + </LogicalPart> + <LogicalPart name="TECAlignRing" category="unspecified"> + <rSolid name="trackerbulkhead:TECAlignRing"/> + <rMaterial name="tecmaterial:TEC_AlignRing"/> + </LogicalPart> + <LogicalPart name="PixelCables" category="unspecified"> + <rSolid name="trackerbulkhead:PixelCables"/> + <rMaterial name="pixbarmaterial:PixelBarrelSupTubCables"/> + </LogicalPart> + <LogicalPart name="TECPpConnectors" category="unspecified"> + <rSolid name="trackerbulkhead:TECPpConnectors"/> + <rMaterial name="tecmaterial:TEC_Connectors"/> + </LogicalPart> + <LogicalPart name="TECPpBoxC" category="unspecified"> + <rSolid name="trackerbulkhead:TECPpBoxC"/> + <rMaterial name="tecmaterial:TEC_PatchpanelBox"/> + </LogicalPart> + <LogicalPart name="TECPpBoxL" category="unspecified"> + <rSolid name="trackerbulkhead:TECPpBoxL"/> + <rMaterial name="tecmaterial:TEC_PatchpanelBox"/> + </LogicalPart> + <LogicalPart name="TECPpBoxS" category="unspecified"> + <rSolid name="trackerbulkhead:TECPpBoxS"/> + <rMaterial name="tecmaterial:TEC_PatchpanelBox"/> + </LogicalPart> + <LogicalPart name="TECCtrlBox" category="unspecified"> + <rSolid name="trackerbulkhead:TECCtrlBox"/> + <rMaterial name="tecmaterial:TEC_PatchCtrlBox"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="trackerbulkhead.xml"> + <PosPart copyNumber="1"> + <rParent name="tracker:Tracker"/> + <rChild name="trackerbulkhead:TrackerBulkhead"/> + <Translation x="[zero]" y="[zero]" z="[BulkheadZ]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tracker:Tracker"/> + <rChild name="trackerbulkhead:TrackerBulkhead"/> + <Translation x="[zero]" y="[zero]" z="-[BulkheadZ]"/> + <rRotation name="tracker:180D"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="trackerbulkhead:TrackerBulkhead"/> + <rChild name="trackerbulkhead:BHDisk"/> + <Translation x="[zero]" y="[zero]" z="-0.5*[Thick]+0.5*[BHDiskThick]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="trackerbulkhead:TrackerBulkhead"/> + <rChild name="trackerbulkhead:BHCovers"/> + <Translation x="[zero]" y="[zero]" z="0.5*[Thick]-0.5*[BHCoversThick]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="trackerbulkhead:TrackerBulkhead"/> + <rChild name="trackerbulkhead:OuterCables"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="trackerbulkhead:TrackerBulkhead"/> + <rChild name="trackerbulkhead:TECAlignRing"/> + <Translation x="[zero]" y="[zero]" z="-0.5*[Thick]+0.5*[AlignRingThick]+[BHDiskThick]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="trackerbulkhead:TrackerBulkhead"/> + <rChild name="trackerbulkhead:PixelCables"/> + <Translation x="[zero]" y="[zero]" z="-0.5*[Thick]+0.5*[PixelCablesThick]+[AlignRingThick]+[BHDiskThick]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="trackerbulkhead:TECPatchpanel"/> + <rChild name="trackerbulkhead:TECPpConnectors"/> + <Translation x="[PatchpanelR2]+0.5*[PpConnectorsLength]+[PpBoxSideX]" y="-0.5*[PpBoxWidth]-[PpBoxSideY]" z="-0.5*[PatchpanelThick]+0.5*[PpBoxThick]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="trackerbulkhead:TECPatchpanel"/> + <rChild name="trackerbulkhead:TECPpConnectors"/> + <Translation x="[PatchpanelR2]+[PpConnectorsLength]+[PpBoxLengthL]+0.5*[PpConnectorsLength]+[PpBoxSideX]" y="-0.5*[PpBoxWidth]-[PpBoxSideY]" z="-0.5*[PatchpanelThick]+0.5*[PpBoxThick]"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="trackerbulkhead:TECPatchpanel"/> + <rChild name="trackerbulkhead:TECPpConnectors"/> + <Translation x="[PatchpanelR2]+0.5*[PpConnectorsLength]+[PpBoxSideX]-[PpBoxDistX]" y="-1.5*[PpBoxWidth]-[PpBoxSideY]-[PpBoxDistY]" z="-0.5*[PatchpanelThick]+0.5*[PpBoxThick]"/> + </PosPart> + <PosPart copyNumber="4"> + <rParent name="trackerbulkhead:TECPatchpanel"/> + <rChild name="trackerbulkhead:TECPpConnectors"/> + <Translation x="[PatchpanelR2]+[PpConnectorsLength]+[PpBoxLengthL]+0.5*[PpConnectorsLength]+[PpBoxSideX]-[PpBoxDistX]" y="-1.5*[PpBoxWidth]-[PpBoxSideY]-[PpBoxDistY]" z="-0.5*[PatchpanelThick]+0.5*[PpBoxThick]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="trackerbulkhead:TECPatchpanel"/> + <rChild name="trackerbulkhead:TECPpBoxC"/> + <Translation x="[PatchpanelR2]+[PpConnectorsLength]+[PpBoxLengthL]+0.5*[PpConnectorsLength]+[PpBoxSideX]" y="-0.5*[PpBoxWidth]-[PpBoxSideY]" z="-0.5*[PatchpanelThick]+[PpConnectorsThick]+0.5*[PpBoxThick]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="trackerbulkhead:TECPatchpanel"/> + <rChild name="trackerbulkhead:TECPpBoxC"/> + <Translation x="[PatchpanelR2]+[PpConnectorsLength]+[PpBoxLengthL]+0.5*[PpConnectorsLength]+[PpBoxSideX]-[PpBoxDistX]" y="-1.5*[PpBoxWidth]-[PpBoxSideY]-[PpBoxDistY]" z="-0.5*[PatchpanelThick]+[PpConnectorsThick]+0.5*[PpBoxThick]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="trackerbulkhead:TECPatchpanel"/> + <rChild name="trackerbulkhead:TECPpBoxL"/> + <Translation x="[PatchpanelR2]+[PpConnectorsLength]+0.5*[PpBoxLengthL]+[PpBoxSideX]" y="-0.5*[PpBoxWidth]-[PpBoxSideY]" z="-0.5*[PatchpanelThick]+0.5*[PpBoxThick]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="trackerbulkhead:TECPatchpanel"/> + <rChild name="trackerbulkhead:TECPpBoxL"/> + <Translation x="[PatchpanelR2]+[PpConnectorsLength]+0.5*[PpBoxLengthL]+[PpBoxSideX]-[PpBoxDistX]" y="-1.5*[PpBoxWidth]-[PpBoxSideY]-[PpBoxDistY]" z="-0.5*[PatchpanelThick]+0.5*[PpBoxThick]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="trackerbulkhead:TECPatchpanel"/> + <rChild name="trackerbulkhead:TECPpBoxS"/> + <Translation x="[PatchpanelR2]+[PpConnectorsLength]+[PpBoxLengthL]+[PpConnectorsLength]+0.5*[PpBoxLengthS]+[PpBoxSideX]" y="-0.5*[PpBoxWidth]-[PpBoxSideY]" z="-0.5*[PatchpanelThick]+[PpBoxThick]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="trackerbulkhead:TECPatchpanel"/> + <rChild name="trackerbulkhead:TECPpBoxS"/> + <Translation x="[PatchpanelR2]+[PpConnectorsLength]+[PpBoxLengthL]+[PpConnectorsLength]+0.5*[PpBoxLengthS]+[PpBoxSideX]-[PpBoxDistX]" y="-1.5*[PpBoxWidth]-[PpBoxSideY]-[PpBoxDistY]" z="-0.5*[PatchpanelThick]+[PpBoxThick]"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="trackerbulkhead:TECPatchpanel"/> + <rChild name="trackerbulkhead:TECCtrlBox"/> + <Translation x="[PatchpanelR2]+0.5*[CtrlBoxLength]+[PpBoxSideX]+[CtrlBoxDistX]" y="-[PpBoxSideY]-2*[PpBoxWidth]-[PpBoxDistY]-[CtrlBoxDistY]-0.5*[CtrlBoxWidth]" z="-0.5*[PatchpanelThick]+0.5*[CtrlBoxThick]"/> + </PosPart> + </PosPartSection> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="trackerbulkhead:TrackerBulkhead"/> + <String name="ChildName" value="trackerbulkhead:TECPatchpanel"/> + <Numeric name="N" value="4"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="-[TECPatchpanelPhi]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> + 0, 0, 0.5*([BHDiskThick] - [BHCoversThick]) </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="trackerbulkhead:TrackerBulkhead"/> + <String name="ChildName" value="trackerbulkhead:TECPatchpanel"/> + <Numeric name="N" value="4"/> + <Numeric name="StartCopyNo" value="5"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="-[TECPatchpanelPhi]-[TECPatchpanelWidth]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> + 0, 0, 0.5*([BHDiskThick] - [BHCoversThick]) </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="trackerbulkhead:TrackerBulkhead"/> + <String name="ChildName" value="trackerbulkhead:PIXPatchpanel1"/> + <Numeric name="N" value="2"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="-[PIXPatchpanelPhi]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> + 0, 0,0.5*([BHDiskThick] - [BHCoversThick]) </Vector> +</Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="trackerbulkhead:TrackerBulkhead"/> + <String name="ChildName" value="trackerbulkhead:PIXPatchpanel1b"/> + <Numeric name="N" value="2"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="-[PIXPatchpanelPhi]+10*deg"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> + 0, 0,0.5*([BHDiskThick] - [BHCoversThick]) </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerAngular"> + <rParent name="trackerbulkhead:TrackerBulkhead"/> + <String name="ChildName" value="trackerbulkhead:PIXPatchpanel2"/> + <Numeric name="N" value="2"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <Numeric name="RangeAngle" value="360*deg"/> + <Numeric name="StartAngle" value="-[TECPatchpanelPhi]-2*[TECPatchpanelWidth]-2*[PIXPatchpanelWidth1]"/> + <Numeric name="Radius" value="[zero]"/> + <Vector name="Center" type="numeric" nEntries="3"> + 0, 0, 0.5*([BHDiskThick] - [BHCoversThick]) </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/trackerother.xml b/examples/DDCMS/data/trackerother.xml new file mode 100644 index 000000000..485afad32 --- /dev/null +++ b/examples/DDCMS/data/trackerother.xml @@ -0,0 +1,388 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="trackerother.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="OuterCylinderRin" value="1.169*m"/> + <Constant name="OuterCylinderRout" value="1.223*m"/> + <Constant name="OuterCylinderL" value="2.650*m"/> + <Constant name="ThermalScreenRin" value="1.181*m"/> + <Constant name="ThermalScreenRout" value="1.193*m"/> + <Constant name="ThermalScreenL" value="2.450*m"/> + <Constant name="ThermalScreenR1" value="[ThermalScreenRin]+3*mm"/> + <Constant name="ThermalScreenR2" value="[ThermalScreenR1]+8*mm"/> + <Constant name="SupportTubeRin" value="[ThermalScreenRout]"/> + <Constant name="SupportTubeRout" value="1.223*m"/> + <Constant name="SupportTubeR1" value="[SupportTubeRin]+2*mm"/> + <Constant name="SupportTubeR2" value="[SupportTubeR1]+25.950*mm"/> + <Constant name="SupportTubeR3" value="[SupportTubeR2]+2*mm"/> + <Constant name="SupportTubeL" value="2.650*m"/> + <Constant name="SupportTubeInsertR" value="5*mm"/> + <Constant name="SupportTubeInsertDz" value="([SupportTubeRout]-[SupportTubeRin])/2-0.010*mm"/> + <Constant name="SupportTubeInsert1Dz" value="([SupportTubeR1]-[SupportTubeRin])/2-0.010*mm"/> + <Constant name="SupportTubeInsert2Dz" value="([SupportTubeR2]-[SupportTubeR1])/2-0.010*mm"/> + <Constant name="SupportTubeInsert3Dz" value="([SupportTubeR3]-[SupportTubeR2])/2-0.010*mm"/> + <Constant name="SupportTubeInsert4Dz" value="([SupportTubeRout]-[SupportTubeR3])/2-0.010*mm"/> + <Constant name="SupportTubeInsertZoff" value="-2.574*m"/> + <Constant name="SupportTubeInsertZpitch" value="143*mm"/> + <Constant name="ThermalScreenManifoldL" value="([SupportTubeL]-[ThermalScreenL])/2"/> + <Constant name="ThermalScreenPlaceholderL" value="3*mm"/> + <Constant name="TrackerRailRout" value="[ThermalScreenRout]"/> + <Constant name="TrackerRailRin" value="[TrackerRailRout]-24*mm"/> + <Constant name="TrackerRailPhiLo" value="-0.067*rad"/> + <Constant name="TrackerRailPhiRange" value="0.10*rad"/> + <Constant name="TrackerRailDR1" value="2*mm"/> + <Constant name="TrackerRailPhi1" value="-0.066892*rad"/> + <Constant name="TrackerRailPhi2" value="-0.012701*rad"/> + <Constant name="TrackerRailPhi3" value="0.016935*rad"/> + <Constant name="TrackerRailPhi4" value="0.0212*rad"/> + <Constant name="TOBRailR" value="5*mm"/> + <Constant name="TOBRailRpos" value="1177*mm"/> + <Constant name="Tol" value="0.0*mm"/> + </ConstantsSection> + <SolidSection label="trackerother.xml"> + <!-- TRACKER SUPPORT TUBE AND THERMAL SCREEN --> + <Tubs name="TrackerOuterCylinder" rMin="[OuterCylinderRin]+[Tol]" rMax="[OuterCylinderRout]" dz="[OuterCylinderL]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TrackerThermalScreen" rMin="[ThermalScreenRin]+[Tol]" rMax="[ThermalScreenRout]-[Tol]" dz="[ThermalScreenL]" startPhi="4*deg" deltaPhi="172*deg"/> + <Tubs name="TrackerThermalScreenCooling" rMin="[ThermalScreenRin]+[Tol]" rMax="[ThermalScreenR1]-[Tol]" dz="[ThermalScreenL]" startPhi="4*deg" deltaPhi="172*deg"/> + <Tubs name="TrackerThermalScreenFoam" rMin="[ThermalScreenR1]+[Tol]" rMax="[ThermalScreenR2]-[Tol]" dz="[ThermalScreenL]" startPhi="4*deg" deltaPhi="172*deg"/> + <Tubs name="TrackerThermalScreenShield" rMin="[ThermalScreenR2]+[Tol]" rMax="[ThermalScreenRout]-[Tol]" dz="[ThermalScreenL]" startPhi="4*deg" deltaPhi="172*deg"/> + <Tubs name="TrackerThermalScreenManifold" rMin="[ThermalScreenRin]+[Tol]" rMax="[ThermalScreenRout]-[Tol]" dz="[ThermalScreenManifoldL]" startPhi="4*deg" deltaPhi="172*deg"/> + <Tubs name="TrackerThermalScreenPlaceholder" rMin="[ThermalScreenRin]+[Tol]" rMax="[ThermalScreenRout]-[Tol]" dz="[ThermalScreenPlaceholderL]" startPhi="4*deg" deltaPhi="172*deg"/> + <Tubs name="TrackerSupportTube" rMin="[SupportTubeRin]+[Tol]" rMax="[SupportTubeRout]-[Tol]" dz="[SupportTubeL]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TrackerSupportTubeCFSkin1" rMin="[SupportTubeRin]+[Tol]" rMax="[SupportTubeR1]-[Tol]" dz="[SupportTubeL]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TrackerSupportTubeNomex" rMin="[SupportTubeR1]+[Tol]" rMax="[SupportTubeR2]-[Tol]" dz="[SupportTubeL]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TrackerSupportTubeCFSkin2" rMin="[SupportTubeR2]+[Tol]" rMax="[SupportTubeR3]-[Tol]" dz="[SupportTubeL]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TrackerSupportTubeShield" rMin="[SupportTubeR3]+[Tol]" rMax="[SupportTubeRout]-[Tol]" dz="[SupportTubeL]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TrackerSupportTubeInsert" rMin="[zero]" rMax="[SupportTubeInsertR]" dz="[SupportTubeInsertDz]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TrackerSupportTubeInsertCFSkin1" rMin="[zero]" rMax="[SupportTubeInsertR]" dz="[SupportTubeInsert1Dz]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TrackerSupportTubeInsertNomex" rMin="[zero]" rMax="[SupportTubeInsertR]" dz="[SupportTubeInsert2Dz]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TrackerSupportTubeInsertCFSkin2" rMin="[zero]" rMax="[SupportTubeInsertR]" dz="[SupportTubeInsert3Dz]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TrackerSupportTubeInsertShield" rMin="[zero]" rMax="[SupportTubeInsertR]" dz="[SupportTubeInsert4Dz]" startPhi="0*deg" deltaPhi="360*deg"/> + <Tubs name="TrackerRail" rMin="[TrackerRailRin]+[Tol]" rMax="[TrackerRailRout]-[Tol]" dz="[SupportTubeL]" startPhi="[TrackerRailPhiLo]" deltaPhi="[TrackerRailPhiRange]"/> + <Tubs name="TrackerRailNomex" rMin="[TrackerRailRin]+[TrackerRailDR1]+[Tol]" rMax="[TrackerRailRout]-[TrackerRailDR1]-[Tol]" dz="[SupportTubeL]" startPhi="[TrackerRailPhi1]" deltaPhi="[TrackerRailPhi2]-[TrackerRailPhi1]"/> + <Tubs name="TrackerRailCFSkin1" rMin="[TrackerRailRin]+[Tol]" rMax="[TrackerRailRin]+[TrackerRailDR1]-[Tol]" dz="[SupportTubeL]" startPhi="[TrackerRailPhi1]" deltaPhi="[TrackerRailPhi2]-[TrackerRailPhi1]"/> + <Tubs name="TrackerRailCFSkin2" rMin="[TrackerRailRout]-[TrackerRailDR1]+[Tol]" rMax="[TrackerRailRout]-[Tol]" dz="[SupportTubeL]" startPhi="[TrackerRailPhi1]" deltaPhi="[TrackerRailPhi2]-[TrackerRailPhi1]"/> + <Tubs name="TrackerRailCF" rMin="[TrackerRailRin]+[Tol]" rMax="[TrackerRailRout]-[Tol]" dz="[SupportTubeL]" startPhi="[TrackerRailPhi2]" deltaPhi="[TrackerRailPhi3]-[TrackerRailPhi2]"/> + <Tubs name="TOBRail" rMin="[zero]" rMax="[TOBRailR]" dz="[SupportTubeL]" startPhi="0*deg" deltaPhi="360*deg"/> + </SolidSection> + <LogicalPartSection label="trackerother.xml"> + <!-- TRACKER SUPPORT TUBE AND THERMAL SCREEN --> + <LogicalPart name="TrackerOuterCylinder" category="unspecified"> + <rSolid name="TrackerOuterCylinder"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TrackerThermalScreen" category="unspecified"> + <rSolid name="TrackerThermalScreen"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TrackerThermalScreenCooling" category="unspecified"> + <rSolid name="TrackerThermalScreenCooling"/> + <rMaterial name="trackermaterial:TS_Cooling"/> + </LogicalPart> + <LogicalPart name="TrackerThermalScreenFoam" category="unspecified"> + <rSolid name="TrackerThermalScreenFoam"/> + <rMaterial name="trackermaterial:T_Rohacell"/> + </LogicalPart> + <LogicalPart name="TrackerThermalScreenShield" category="unspecified"> + <rSolid name="TrackerThermalScreenShield"/> + <rMaterial name="trackermaterial:TS_Shield"/> + </LogicalPart> + <LogicalPart name="TrackerThermalScreenManifold" category="unspecified"> + <rSolid name="TrackerThermalScreenManifold"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TrackerThermalScreenPlaceholder" category="unspecified"> + <rSolid name="TrackerThermalScreenPlaceholder"/> + <rMaterial name="trackermaterial:T_StainlessSteel"/> + </LogicalPart> + <LogicalPart name="TrackerSupportTube" category="unspecified"> + <rSolid name="TrackerSupportTube"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TrackerSupportTubeCFSkin1" category="unspecified"> + <rSolid name="TrackerSupportTubeCFSkin1"/> + <rMaterial name="trackermaterial:T_CarbonFibreStr"/> + </LogicalPart> + <LogicalPart name="TrackerSupportTubeNomex" category="unspecified"> + <rSolid name="TrackerSupportTubeNomex"/> + <rMaterial name="trackermaterial:T_Nomex"/> + </LogicalPart> + <LogicalPart name="TrackerSupportTubeCFSkin2" category="unspecified"> + <rSolid name="TrackerSupportTubeCFSkin2"/> + <rMaterial name="trackermaterial:T_CarbonFibreStr"/> + </LogicalPart> + <LogicalPart name="TrackerSupportTubeShield" category="unspecified"> + <rSolid name="TrackerSupportTubeShield"/> + <rMaterial name="trackermaterial:T_Aluminium"/> + </LogicalPart> + <LogicalPart name="TrackerSupportTubeInsert" category="unspecified"> + <rSolid name="TrackerSupportTubeInsert"/> + <rMaterial name="trackermaterial:T_CarbonFibreStr"/> + </LogicalPart> + <LogicalPart name="TrackerSupportTubeInsertCFSkin1" category="unspecified"> + <rSolid name="TrackerSupportTubeInsertCFSkin1"/> + <rMaterial name="trackermaterial:T_CarbonFibreStr"/> + </LogicalPart> + <LogicalPart name="TrackerSupportTubeInsertNomex" category="unspecified"> + <rSolid name="TrackerSupportTubeInsertNomex"/> + <rMaterial name="trackermaterial:T_CarbonFibreStr"/> + </LogicalPart> + <LogicalPart name="TrackerSupportTubeInsertCFSkin2" category="unspecified"> + <rSolid name="TrackerSupportTubeInsertCFSkin2"/> + <rMaterial name="trackermaterial:T_CarbonFibreStr"/> + </LogicalPart> + <LogicalPart name="TrackerSupportTubeInsertShield" category="unspecified"> + <rSolid name="TrackerSupportTubeInsertShield"/> + <rMaterial name="trackermaterial:T_CarbonFibreStr"/> + </LogicalPart> + <LogicalPart name="TrackerRail" category="unspecified"> + <rSolid name="TrackerRail"/> + <rMaterial name="materials:Air"/> + </LogicalPart> + <LogicalPart name="TrackerRailNomex" category="unspecified"> + <rSolid name="TrackerRailNomex"/> + <rMaterial name="trackermaterial:T_Nomex"/> + </LogicalPart> + <LogicalPart name="TrackerRailCFSkin1" category="unspecified"> + <rSolid name="TrackerRailCFSkin1"/> + <rMaterial name="trackermaterial:T_CarbonFibreStr"/> + </LogicalPart> + <LogicalPart name="TrackerRailCFSkin2" category="unspecified"> + <rSolid name="TrackerRailCFSkin2"/> + <rMaterial name="trackermaterial:T_CarbonFibreStr"/> + </LogicalPart> + <LogicalPart name="TrackerRailCF" category="unspecified"> + <rSolid name="TrackerRailCF"/> + <rMaterial name="trackermaterial:T_CarbonFibreStr"/> + </LogicalPart> + <LogicalPart name="TOBRail" category="unspecified"> + <rSolid name="TOBRail"/> + <rMaterial name="trackermaterial:T_CarbonFibreStr"/> + </LogicalPart> + </LogicalPartSection> + <PosPartSection label="trackerother.xml"> + <!-- TRACKER SUPPORT TUBE AND THERMAL SCREEN --> + <PosPart copyNumber="1"> + <rParent name="tracker:Tracker"/> + <rChild name="trackerother:TrackerOuterCylinder"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="trackerother:TrackerOuterCylinder"/> + <rChild name="trackerother:TrackerThermalScreen"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="trackerother:TrackerOuterCylinder"/> + <rChild name="trackerother:TrackerThermalScreen"/> + <rRotation name="tracker:R180"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="trackerother:TrackerThermalScreen"/> + <rChild name="trackerother:TrackerThermalScreenCooling"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="trackerother:TrackerThermalScreen"/> + <rChild name="trackerother:TrackerThermalScreenFoam"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="trackerother:TrackerThermalScreen"/> + <rChild name="trackerother:TrackerThermalScreenShield"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="trackerother:TrackerOuterCylinder"/> + <rChild name="trackerother:TrackerSupportTube"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="trackerother:TrackerSupportTube"/> + <rChild name="trackerother:TrackerSupportTubeCFSkin1"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="trackerother:TrackerSupportTube"/> + <rChild name="trackerother:TrackerSupportTubeNomex"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="trackerother:TrackerSupportTube"/> + <rChild name="trackerother:TrackerSupportTubeCFSkin2"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="trackerother:TrackerSupportTube"/> + <rChild name="trackerother:TrackerSupportTubeShield"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="trackerother:TrackerThermalScreenManifold"/> + <rChild name="trackerother:TrackerThermalScreenPlaceholder"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="trackerother:TrackerOuterCylinder"/> + <rChild name="trackerother:TrackerThermalScreenManifold"/> + <Translation x="[zero]" y="[zero]" z="[ThermalScreenL]+[ThermalScreenManifoldL]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="trackerother:TrackerOuterCylinder"/> + <rChild name="trackerother:TrackerThermalScreenManifold"/> + <rRotation name="tracker:R180"/> + <Translation x="[zero]" y="[zero]" z="[ThermalScreenL]+[ThermalScreenManifoldL]"/> + </PosPart> + <PosPart copyNumber="3"> + <rParent name="trackerother:TrackerOuterCylinder"/> + <rChild name="trackerother:TrackerThermalScreenManifold"/> + <Translation x="[zero]" y="[zero]" z="-([ThermalScreenL]+[ThermalScreenManifoldL])"/> + </PosPart> + <PosPart copyNumber="4"> + <rParent name="trackerother:TrackerOuterCylinder"/> + <rChild name="trackerother:TrackerThermalScreenManifold"/> + <rRotation name="tracker:R180"/> + <Translation x="[zero]" y="[zero]" z="-([ThermalScreenL]+[ThermalScreenManifoldL])"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="trackerother:TrackerOuterCylinder"/> + <rChild name="trackerother:TrackerRail"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="trackerother:TrackerOuterCylinder"/> + <rChild name="trackerother:TrackerRail"/> + <rRotation name="tracker:180D"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="trackerother:TrackerRail"/> + <rChild name="trackerother:TrackerRailNomex"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="trackerother:TrackerRail"/> + <rChild name="trackerother:TrackerRailCFSkin1"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="trackerother:TrackerRail"/> + <rChild name="trackerother:TrackerRailCFSkin2"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="trackerother:TrackerRail"/> + <rChild name="trackerother:TrackerRailCF"/> + </PosPart> + <PosPart copyNumber="1"> + <rParent name="trackerother:TrackerRail"/> + <rChild name="trackerother:TOBRail"/> + <Translation x="[TOBRailRpos]*cos([TrackerRailPhi4])" y="[TOBRailRpos]*sin([TrackerRailPhi4])" z="[zero]"/> + </PosPart> + </PosPartSection> + <!-- TRACKER SUPPORT TUBE AND THERMAL SCREEN --> + <Algorithm name="track:DDTrackerLinear"> + <rParent name="trackerother:TrackerSupportTubeCFSkin1"/> + <String name="ChildName" value="trackerother:TrackerSupportTubeInsertCFSkin1"/> + <Numeric name="Number" value="36"/> + <Numeric name="Theta" value="0*deg"/> + <Numeric name="Phi" value="0*deg"/> + <Numeric name="Offset" value="[SupportTubeInsertZoff]"/> + <Numeric name="Delta" value="[SupportTubeInsertZpitch]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <String name="Rotation" value="tracker:PAA"/> + <Vector name="Center" type="numeric" nEntries="3"> + [SupportTubeRin]+[SupportTubeInsert1Dz], [zero], [zero] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerLinear"> + <rParent name="trackerother:TrackerSupportTubeCFSkin1"/> + <String name="ChildName" value="trackerother:TrackerSupportTubeInsertCFSkin1"/> + <Numeric name="Number" value="36"/> + <Numeric name="Theta" value="0*deg"/> + <Numeric name="Phi" value="0*deg"/> + <Numeric name="Offset" value="[SupportTubeInsertZoff]"/> + <Numeric name="Delta" value="[SupportTubeInsertZpitch]"/> + <Numeric name="StartCopyNo" value="37"/> + <Numeric name="IncrCopyNo" value="1"/> + <String name="Rotation" value="tracker:PAA"/> + <Vector name="Center" type="numeric" nEntries="3"> + -([SupportTubeRin]+[SupportTubeInsert1Dz]), [zero], [zero] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerLinear"> + <rParent name="trackerother:TrackerSupportTubeNomex"/> + <String name="ChildName" value="trackerother:TrackerSupportTubeInsertNomex"/> + <Numeric name="Number" value="36"/> + <Numeric name="Theta" value="0*deg"/> + <Numeric name="Phi" value="0*deg"/> + <Numeric name="Offset" value="[SupportTubeInsertZoff]"/> + <Numeric name="Delta" value="[SupportTubeInsertZpitch]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <String name="Rotation" value="tracker:PAA"/> + <Vector name="Center" type="numeric" nEntries="3"> + [SupportTubeR1]+[SupportTubeInsert2Dz], [zero], [zero] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerLinear"> + <rParent name="trackerother:TrackerSupportTubeNomex"/> + <String name="ChildName" value="trackerother:TrackerSupportTubeInsertNomex"/> + <Numeric name="Number" value="36"/> + <Numeric name="Theta" value="0*deg"/> + <Numeric name="Phi" value="0*deg"/> + <Numeric name="Offset" value="[SupportTubeInsertZoff]"/> + <Numeric name="Delta" value="[SupportTubeInsertZpitch]"/> + <Numeric name="StartCopyNo" value="37"/> + <Numeric name="IncrCopyNo" value="1"/> + <String name="Rotation" value="tracker:PAA"/> + <Vector name="Center" type="numeric" nEntries="3"> + -([SupportTubeR1]+[SupportTubeInsert2Dz]), [zero], [zero] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerLinear"> + <rParent name="trackerother:TrackerSupportTubeCFSkin2"/> + <String name="ChildName" value="trackerother:TrackerSupportTubeInsertCFSkin2"/> + <Numeric name="Number" value="36"/> + <Numeric name="Theta" value="0*deg"/> + <Numeric name="Phi" value="0*deg"/> + <Numeric name="Offset" value="[SupportTubeInsertZoff]"/> + <Numeric name="Delta" value="[SupportTubeInsertZpitch]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <String name="Rotation" value="tracker:PAA"/> + <Vector name="Center" type="numeric" nEntries="3"> + [SupportTubeR2]+[SupportTubeInsert3Dz], [zero], [zero] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerLinear"> + <rParent name="trackerother:TrackerSupportTubeCFSkin2"/> + <String name="ChildName" value="trackerother:TrackerSupportTubeInsertCFSkin2"/> + <Numeric name="Number" value="36"/> + <Numeric name="Theta" value="0*deg"/> + <Numeric name="Phi" value="0*deg"/> + <Numeric name="Offset" value="[SupportTubeInsertZoff]"/> + <Numeric name="Delta" value="[SupportTubeInsertZpitch]"/> + <Numeric name="StartCopyNo" value="37"/> + <Numeric name="IncrCopyNo" value="1"/> + <String name="Rotation" value="tracker:PAA"/> + <Vector name="Center" type="numeric" nEntries="3"> + -([SupportTubeR2]+[SupportTubeInsert3Dz]), [zero], [zero] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerLinear"> + <rParent name="trackerother:TrackerSupportTubeShield"/> + <String name="ChildName" value="trackerother:TrackerSupportTubeInsertShield"/> + <Numeric name="Number" value="36"/> + <Numeric name="Theta" value="0*deg"/> + <Numeric name="Phi" value="0*deg"/> + <Numeric name="Offset" value="[SupportTubeInsertZoff]"/> + <Numeric name="Delta" value="[SupportTubeInsertZpitch]"/> + <Numeric name="StartCopyNo" value="1"/> + <Numeric name="IncrCopyNo" value="1"/> + <String name="Rotation" value="tracker:PAA"/> + <Vector name="Center" type="numeric" nEntries="3"> + [SupportTubeR3]+[SupportTubeInsert4Dz], [zero], [zero] + </Vector> + </Algorithm> + <Algorithm name="track:DDTrackerLinear"> + <rParent name="trackerother:TrackerSupportTubeShield"/> + <String name="ChildName" value="trackerother:TrackerSupportTubeInsertShield"/> + <Numeric name="Number" value="36"/> + <Numeric name="Theta" value="0*deg"/> + <Numeric name="Phi" value="0*deg"/> + <Numeric name="Offset" value="[SupportTubeInsertZoff]"/> + <Numeric name="Delta" value="[SupportTubeInsertZpitch]"/> + <Numeric name="StartCopyNo" value="37"/> + <Numeric name="IncrCopyNo" value="1"/> + <String name="Rotation" value="tracker:PAA"/> + <Vector name="Center" type="numeric" nEntries="3"> + -([SupportTubeR3]+[SupportTubeInsert4Dz]), [zero], [zero] + </Vector> + </Algorithm> +</DDDefinition> diff --git a/examples/DDCMS/data/trackerpixbar.xml b/examples/DDCMS/data/trackerpixbar.xml new file mode 100644 index 000000000..41c645081 --- /dev/null +++ b/examples/DDCMS/data/trackerpixbar.xml @@ -0,0 +1,9 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <PosPartSection label="trackerpixbar.xml"> + <PosPart copyNumber="1"> + <rParent name="tracker:Tracker"/> + <rChild name="pixbar:PixelBarrel"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/trackerpixfwd.xml b/examples/DDCMS/data/trackerpixfwd.xml new file mode 100644 index 000000000..ba606869d --- /dev/null +++ b/examples/DDCMS/data/trackerpixfwd.xml @@ -0,0 +1,20 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="trackerpixfwd.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + <Constant name="zPos" value="[pixfwd:ZPixelForward]"/> + </ConstantsSection> + <PosPartSection label="trackerpixfwd.xml"> + <PosPart copyNumber="1"> + <rParent name="tracker:Tracker"/> + <rChild name="pixfwd:PixelForwardZPlus"/> + <Translation x="[zero]" y="[zero]" z="[zPos]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tracker:Tracker"/> + <rChild name="pixfwd:PixelForwardZMinus"/> + <Translation x="[zero]" y="[zero]" z="-[zPos]"/> + <rRotation name="pixfwdCommon:Y180"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/trackertec.xml b/examples/DDCMS/data/trackertec.xml new file mode 100644 index 000000000..f05001446 --- /dev/null +++ b/examples/DDCMS/data/trackertec.xml @@ -0,0 +1,19 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <ConstantsSection label="trackertec.xml" eval="true"> + <Constant name="zero" value="0.0*fm"/> + </ConstantsSection> + <PosPartSection label="trackertec.xml"> + <PosPart copyNumber="1"> + <rParent name="tracker:Tracker"/> + <rChild name="tec:TEC"/> + <Translation x="[zero]" y="[zero]" z="[tec:ZPos]"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tracker:Tracker"/> + <rChild name="tec:TEC"/> + <rRotation name="tracker:180D"/> + <Translation x="[zero]" y="[zero]" z="-[tec:ZPos]"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/trackertib.xml b/examples/DDCMS/data/trackertib.xml new file mode 100644 index 000000000..0f5a2fee5 --- /dev/null +++ b/examples/DDCMS/data/trackertib.xml @@ -0,0 +1,9 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <PosPartSection label="trackertib.xml"> + <PosPart copyNumber="1"> + <rParent name="tracker:Tracker"/> + <rChild name="tib:TIB"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/trackertibtidservices.xml b/examples/DDCMS/data/trackertibtidservices.xml new file mode 100644 index 000000000..17eff4145 --- /dev/null +++ b/examples/DDCMS/data/trackertibtidservices.xml @@ -0,0 +1,14 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <PosPartSection label="tibtidservices.xml"> + <PosPart copyNumber="1"> + <rParent name="tracker:Tracker"/> + <rChild name="tibtidservicesf:TIBTIDServicesF"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tracker:Tracker"/> + <rChild name="tibtidservicesb:TIBTIDServicesB"/> + <rRotation name="tracker:180D"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/trackertid.xml b/examples/DDCMS/data/trackertid.xml new file mode 100644 index 000000000..6318f4bdc --- /dev/null +++ b/examples/DDCMS/data/trackertid.xml @@ -0,0 +1,14 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <PosPartSection label="trackertid.xml"> + <PosPart copyNumber="1"> + <rParent name="tracker:Tracker"/> + <rChild name="tidf:TIDF"/> + </PosPart> + <PosPart copyNumber="2"> + <rParent name="tracker:Tracker"/> + <rChild name="tidb:TIDB"/> + <rRotation name="tracker:180D"/> + </PosPart> + </PosPartSection> +</DDDefinition> diff --git a/examples/DDCMS/data/trackertob.xml b/examples/DDCMS/data/trackertob.xml new file mode 100644 index 000000000..921eece57 --- /dev/null +++ b/examples/DDCMS/data/trackertob.xml @@ -0,0 +1,9 @@ +<?xml version="1.0"?> +<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> + <PosPartSection label="trackertob.xml"> + <PosPart copyNumber="1"> + <rParent name="tracker:Tracker"/> + <rChild name="tob:TOB"/> + </PosPart> + </PosPartSection> +</DDDefinition> -- GitLab