From 2bbfbc5d2520efe3a35be96ec79dd22569c093b2 Mon Sep 17 00:00:00 2001 From: kyjung Date: Tue, 27 Jan 2026 12:14:41 -0500 Subject: [PATCH 1/5] TMS TF final design, orthogonal configuration with pattern 8*(X+Y) + 22*(X+X+Y) --- duneggd/Config/TMS.cfg | 21 ++++++++++++++++----- duneggd/SubDetector/TMS.py | 24 +++++++++++------------- 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/duneggd/Config/TMS.cfg b/duneggd/Config/TMS.cfg index 2b03bcd7..d978d227 100644 --- a/duneggd/Config/TMS.cfg +++ b/duneggd/Config/TMS.cfg @@ -15,15 +15,26 @@ BFieldDownHigh = '(0.0 T, 1.0 T, 0 T)' Module_layers_thin=34 Module_layers_thick=22 -Module_layers_double=25 +Module_layers_double=25 -# c,d geometries -thin_horizontal = [1, 4, 7, 14, 21, 28] -thick_horizontal = [0, 7, 14,21] -double_horizontal = [6, 13,20,24] +#Default, orhogonal design, 8*(X+Y) + 22*(X+X+Y) cassettes. +thin_horizontal = [1,3,5,7,9,11,13,15,18,21,24,27,30,33] +thick_horizontal = [1,4,7,10,13,16,19] +double_horizontal = [0,3,6,9,12,15,18,21,24] +thin_Y = [2, 4, 6, 8, 10, 12, 14, 16, 17, 19, 20, 22, 23, 25, 26, 28, 29, 31, 32, 34] #vertical bars +thick_Y = [0, 2, 3, 5, 6, 8, 9, 11, 12, 14, 15, 17, 18, 20, 21] +double_Y = [1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 20, 22, 23] + +# PDR test c,d geometries +#thin_horizontal = [1, 4, 7, 14, 21, 28] +#thick_horizontal = [0, 7, 14,21] +#double_horizontal = [6, 13,20,24] thin_U = [2, 5, 8, 10, 12, 15, 17, 19, 22, 24, 26, 29, 31, 33] thick_U = [1, 3, 5, 8, 10, 12, 15, 17, 19] double_U = [0, 2, 4, 7, 9, 11, 14, 16, 18,21,23] thin_V = [3, 6, 9, 11, 13, 16, 18, 20, 23, 25, 27, 30, 32, 34] thick_V = [2, 4, 6, 9, 11, 13, 16, 18, 20] double_V = [1, 3, 5, 8, 10, 12, 15, 17,19, 22] + + + diff --git a/duneggd/SubDetector/TMS.py b/duneggd/SubDetector/TMS.py index 0d8b67ad..53b8b140 100644 --- a/duneggd/SubDetector/TMS.py +++ b/duneggd/SubDetector/TMS.py @@ -4,7 +4,7 @@ from gegede import Quantity as Q global Pos class tmsBuilder(gegede.builder.Builder): - def configure(self, mat=None, thinbox1Dimension=None, gapPosition=None, BFieldUpLow = None, BFieldUpHigh = None, BFieldDownLow = None , BFieldDownHigh = None, thin_horizontal=None, thick_horizontal=None, double_horizontal=None, thin_U=None, thick_U=None, double_U=None, thin_V=None, thick_V=None, double_V=None, **kwds): + def configure(self, mat=None, thinbox1Dimension=None, gapPosition=None, BFieldUpLow = None, BFieldUpHigh = None, BFieldDownLow = None , BFieldDownHigh = None, thin_horizontal=None, thick_horizontal=None, double_horizontal=None, thin_U=None, thick_U=None, double_U=None, thin_V=None, thick_V=None, double_V=None, thin_Y=None, thick_Y=None, double_Y=None, **kwds): self.BFieldUpLow = BFieldUpLow self.BFieldUpHigh = BFieldUpHigh self.BFieldDownLow = BFieldDownLow @@ -21,15 +21,18 @@ def configure(self, mat=None, thinbox1Dimension=None, gapPosition=None, BFieldUp self.thin_V = thin_V self.thick_V = thick_V self.double_V = double_V + self.thin_Y = thin_Y + self.thick_Y = thick_Y + self.double_Y = double_Y def construct(self, geom): six_width = False #6m - hybrid = False #6m, 4.2c, UVX set by rules in TMS.cfg - XY = False #6m, 4.2d, XY UVX set by rules in TMS.cfg - PDR_3_2b = True #7m, 3.2b, UVXUVXUVX... + hybrid = False #4.2c, UVX set by rules in TMS.cfg + XY = True #4.2d, orthogonal set by rules in TMS.cfg + PDR_3_2b = False #7m, 3.2b, UVXUVXUVX... #Make Boxes for steel and logical volumes @@ -560,6 +563,7 @@ def construct(self, geom): tms_lv.placements.append(thin_Modlayer_pla_first[module].name) elif XY: + # Very first layer consist of Y X before the first steel plate to improve matching performace. thinModlayer_pos_first = [geom.structure.Position('q')]*(Module_layers_thin+1) thin_Modlayer_pla_first = [geom.structure.Placement('r',volume=Module_layer_lv4,pos=thinModlayer_pos[1])]*(Module_layers_thin+1) zpos = -Q("3.650m") -Q("0.0325m") -Q("0.065m") # first layer of thin steel - half plane thickness + plane thickness @@ -580,9 +584,7 @@ def construct(self, geom): #4_2d if module in self.thin_horizontal: thin_Modlayer_pla_first[module] = geom.structure.Placement( 'thinModlayerpla'+self.name+str(module), volume=Module_layer_lv3, pos=thinModlayer_pos_first[module] )#x - if module in self.thin_U: - thin_Modlayer_pla_first[module] = geom.structure.Placement( 'thinModlayerpla'+self.name+str(module), volume=Module_layer_lv4, pos=thinModlayer_pos_first[module] )#y - if module in self.thin_V: + if module in self.thin_Y: thin_Modlayer_pla_first[module] = geom.structure.Placement( 'thinModlayerpla'+self.name+str(module), volume=Module_layer_lv4, pos=thinModlayer_pos_first[module] )#y tms_lv.placements.append(thin_Modlayer_pla_first[module].name) @@ -630,9 +632,7 @@ def construct(self, geom): #4_2d if module in self.thick_horizontal: thick_Modlayer_pla[module] = geom.structure.Placement( 'thickModlayerpla'+self.name+str(module), volume=Module_layer_lv3, pos=thickModlayer_pos[module] )#x - if module in self.thick_U: - thick_Modlayer_pla[module] = geom.structure.Placement( 'thickModlayerpla'+self.name+str(module), volume=Module_layer_lv4, pos=thickModlayer_pos[module] ) - if module in self.thick_V: + if module in self.thick_Y: thick_Modlayer_pla[module] = geom.structure.Placement( 'thickModlayerpla'+self.name+str(module), volume=Module_layer_lv4, pos=thickModlayer_pos[module] ) elif PDR_3_2b: #3_2b @@ -670,9 +670,7 @@ def construct(self, geom): #XY version (XY) if module in self.double_horizontal: double_Modlayer_pla[module] = geom.structure.Placement( 'doubleModlayerpla'+self.name+str(module), volume=Module_layer_lv3, pos=doubleModlayer_pos[module] ) - if module in self.double_U: - double_Modlayer_pla[module] = geom.structure.Placement( 'doubleModlayerpla'+self.name+str(module), volume=Module_layer_lv4, pos=doubleModlayer_pos[module] ) - if module in self.double_V: + if module in self.double_Y: double_Modlayer_pla[module] = geom.structure.Placement( 'doubleModlayerpla'+self.name+str(module), volume=Module_layer_lv4, pos=doubleModlayer_pos[module] ) elif PDR_3_2b: #UVX From c500ca02de40f0878aec6fcbc1d6928b71548bb0 Mon Sep 17 00:00:00 2001 From: kyjung Date: Tue, 27 Jan 2026 12:26:37 -0500 Subject: [PATCH 2/5] TMS TF final design, orthogonal configuration with pattern 8*(X+Y) + 22*(X+X+Y) --- duneggd/Config/TMS.cfg | 6 +++--- duneggd/SubDetector/TMS.py | 14 +++++++------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/duneggd/Config/TMS.cfg b/duneggd/Config/TMS.cfg index d978d227..b2bf0834 100644 --- a/duneggd/Config/TMS.cfg +++ b/duneggd/Config/TMS.cfg @@ -21,9 +21,9 @@ Module_layers_double=25 thin_horizontal = [1,3,5,7,9,11,13,15,18,21,24,27,30,33] thick_horizontal = [1,4,7,10,13,16,19] double_horizontal = [0,3,6,9,12,15,18,21,24] -thin_Y = [2, 4, 6, 8, 10, 12, 14, 16, 17, 19, 20, 22, 23, 25, 26, 28, 29, 31, 32, 34] #vertical bars -thick_Y = [0, 2, 3, 5, 6, 8, 9, 11, 12, 14, 15, 17, 18, 20, 21] -double_Y = [1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 20, 22, 23] +thin_X = [2, 4, 6, 8, 10, 12, 14, 16, 17, 19, 20, 22, 23, 25, 26, 28, 29, 31, 32, 34] #vertical bars +thick_X = [0, 2, 3, 5, 6, 8, 9, 11, 12, 14, 15, 17, 18, 20, 21] +double_X = [1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 20, 22, 23] # PDR test c,d geometries #thin_horizontal = [1, 4, 7, 14, 21, 28] diff --git a/duneggd/SubDetector/TMS.py b/duneggd/SubDetector/TMS.py index 53b8b140..02fff00c 100644 --- a/duneggd/SubDetector/TMS.py +++ b/duneggd/SubDetector/TMS.py @@ -4,7 +4,7 @@ from gegede import Quantity as Q global Pos class tmsBuilder(gegede.builder.Builder): - def configure(self, mat=None, thinbox1Dimension=None, gapPosition=None, BFieldUpLow = None, BFieldUpHigh = None, BFieldDownLow = None , BFieldDownHigh = None, thin_horizontal=None, thick_horizontal=None, double_horizontal=None, thin_U=None, thick_U=None, double_U=None, thin_V=None, thick_V=None, double_V=None, thin_Y=None, thick_Y=None, double_Y=None, **kwds): + def configure(self, mat=None, thinbox1Dimension=None, gapPosition=None, BFieldUpLow = None, BFieldUpHigh = None, BFieldDownLow = None , BFieldDownHigh = None, thin_horizontal=None, thick_horizontal=None, double_horizontal=None, thin_U=None, thick_U=None, double_U=None, thin_V=None, thick_V=None, double_V=None, thin_X=None, thick_X=None, double_X=None, **kwds): self.BFieldUpLow = BFieldUpLow self.BFieldUpHigh = BFieldUpHigh self.BFieldDownLow = BFieldDownLow @@ -21,9 +21,9 @@ def configure(self, mat=None, thinbox1Dimension=None, gapPosition=None, BFieldUp self.thin_V = thin_V self.thick_V = thick_V self.double_V = double_V - self.thin_Y = thin_Y - self.thick_Y = thick_Y - self.double_Y = double_Y + self.thin_X = thin_X + self.thick_X = thick_X + self.double_X = double_X @@ -584,7 +584,7 @@ def construct(self, geom): #4_2d if module in self.thin_horizontal: thin_Modlayer_pla_first[module] = geom.structure.Placement( 'thinModlayerpla'+self.name+str(module), volume=Module_layer_lv3, pos=thinModlayer_pos_first[module] )#x - if module in self.thin_Y: + if module in self.thin_X: thin_Modlayer_pla_first[module] = geom.structure.Placement( 'thinModlayerpla'+self.name+str(module), volume=Module_layer_lv4, pos=thinModlayer_pos_first[module] )#y tms_lv.placements.append(thin_Modlayer_pla_first[module].name) @@ -632,7 +632,7 @@ def construct(self, geom): #4_2d if module in self.thick_horizontal: thick_Modlayer_pla[module] = geom.structure.Placement( 'thickModlayerpla'+self.name+str(module), volume=Module_layer_lv3, pos=thickModlayer_pos[module] )#x - if module in self.thick_Y: + if module in self.thick_X: thick_Modlayer_pla[module] = geom.structure.Placement( 'thickModlayerpla'+self.name+str(module), volume=Module_layer_lv4, pos=thickModlayer_pos[module] ) elif PDR_3_2b: #3_2b @@ -670,7 +670,7 @@ def construct(self, geom): #XY version (XY) if module in self.double_horizontal: double_Modlayer_pla[module] = geom.structure.Placement( 'doubleModlayerpla'+self.name+str(module), volume=Module_layer_lv3, pos=doubleModlayer_pos[module] ) - if module in self.double_Y: + if module in self.double_X: double_Modlayer_pla[module] = geom.structure.Placement( 'doubleModlayerpla'+self.name+str(module), volume=Module_layer_lv4, pos=doubleModlayer_pos[module] ) elif PDR_3_2b: #UVX From c6fecefb560014aea9a45e7ff83f70173a44c15f Mon Sep 17 00:00:00 2001 From: kyjung Date: Tue, 27 Jan 2026 12:34:05 -0500 Subject: [PATCH 3/5] TMS TF final design, orthogonal configuration with pattern 8*(X+Y) + 22*(X+X+Y) --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7cd97337..8ad57dd1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ These geometry releases were tagged as `Descriptive_tag_v_X.Y.Z`. ### Changed - Removed the stale SAND tracker geometry options from the default `sandopt` list. Only the supported full STT, full Drift-Chamber and Initial STT geometries are now built. +- Updated TMS cassette ordering to the final design (50 X, 32 Y; 8×(X+Y) + 22×(X+X+Y)) ## [v2025.08.11] From 02f2a15c95484d749eba14c328b65d68fdecc25c Mon Sep 17 00:00:00 2001 From: kyjung Date: Wed, 28 Jan 2026 10:14:42 -0500 Subject: [PATCH 4/5] TMS TF final design, orthogonal configuration with pattern 8*(X+Y) + 22*(X+X+Y) --- duneggd/Config/TMS.cfg | 6 +++--- duneggd/SubDetector/TMS.py | 22 +++++++++++----------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/duneggd/Config/TMS.cfg b/duneggd/Config/TMS.cfg index b2bf0834..2bd60eac 100644 --- a/duneggd/Config/TMS.cfg +++ b/duneggd/Config/TMS.cfg @@ -21,9 +21,9 @@ Module_layers_double=25 thin_horizontal = [1,3,5,7,9,11,13,15,18,21,24,27,30,33] thick_horizontal = [1,4,7,10,13,16,19] double_horizontal = [0,3,6,9,12,15,18,21,24] -thin_X = [2, 4, 6, 8, 10, 12, 14, 16, 17, 19, 20, 22, 23, 25, 26, 28, 29, 31, 32, 34] #vertical bars -thick_X = [0, 2, 3, 5, 6, 8, 9, 11, 12, 14, 15, 17, 18, 20, 21] -double_X = [1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 20, 22, 23] +thin_vertical = [2, 4, 6, 8, 10, 12, 14, 16, 17, 19, 20, 22, 23, 25, 26, 28, 29, 31, 32, 34] #vertical bars +thick_vertical = [0, 2, 3, 5, 6, 8, 9, 11, 12, 14, 15, 17, 18, 20, 21] +double_vertical = [1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 20, 22, 23] # PDR test c,d geometries #thin_horizontal = [1, 4, 7, 14, 21, 28] diff --git a/duneggd/SubDetector/TMS.py b/duneggd/SubDetector/TMS.py index 02fff00c..73e863f9 100644 --- a/duneggd/SubDetector/TMS.py +++ b/duneggd/SubDetector/TMS.py @@ -4,7 +4,7 @@ from gegede import Quantity as Q global Pos class tmsBuilder(gegede.builder.Builder): - def configure(self, mat=None, thinbox1Dimension=None, gapPosition=None, BFieldUpLow = None, BFieldUpHigh = None, BFieldDownLow = None , BFieldDownHigh = None, thin_horizontal=None, thick_horizontal=None, double_horizontal=None, thin_U=None, thick_U=None, double_U=None, thin_V=None, thick_V=None, double_V=None, thin_X=None, thick_X=None, double_X=None, **kwds): + def configure(self, mat=None, thinbox1Dimension=None, gapPosition=None, BFieldUpLow = None, BFieldUpHigh = None, BFieldDownLow = None , BFieldDownHigh = None, thin_horizontal=None, thick_horizontal=None, double_horizontal=None, thin_U=None, thick_U=None, double_U=None, thin_V=None, thick_V=None, double_V=None, thin_vertical=None, thick_vertical=None, double_vertical=None, **kwds): self.BFieldUpLow = BFieldUpLow self.BFieldUpHigh = BFieldUpHigh self.BFieldDownLow = BFieldDownLow @@ -21,18 +21,18 @@ def configure(self, mat=None, thinbox1Dimension=None, gapPosition=None, BFieldUp self.thin_V = thin_V self.thick_V = thick_V self.double_V = double_V - self.thin_X = thin_X - self.thick_X = thick_X - self.double_X = double_X + self.thin_vertical = thin_vertical + self.thick_vertical = thick_vertical + self.double_vertical = double_vertical def construct(self, geom): - six_width = False #6m - hybrid = False #4.2c, UVX set by rules in TMS.cfg - XY = True #4.2d, orthogonal set by rules in TMS.cfg - PDR_3_2b = False #7m, 3.2b, UVXUVXUVX... + six_width = False #6m wide configuration + hybrid = False # 4.2c (stereo): double scintillator layers (U,V) placed, before the first steel plate and subsequently according to TMS.cfg rules + XY = True # 4.2d (orthogonal): double scintillator layers (X,Y) placed, before the first steel plate and subsequently according to TMS.cfg rules + PDR_3_2b = False # 7 m configuration, PDR 3.2b: repeating UVX pattern (UVXUVXUVX...) #Make Boxes for steel and logical volumes @@ -584,7 +584,7 @@ def construct(self, geom): #4_2d if module in self.thin_horizontal: thin_Modlayer_pla_first[module] = geom.structure.Placement( 'thinModlayerpla'+self.name+str(module), volume=Module_layer_lv3, pos=thinModlayer_pos_first[module] )#x - if module in self.thin_X: + if module in self.thin_vertical: thin_Modlayer_pla_first[module] = geom.structure.Placement( 'thinModlayerpla'+self.name+str(module), volume=Module_layer_lv4, pos=thinModlayer_pos_first[module] )#y tms_lv.placements.append(thin_Modlayer_pla_first[module].name) @@ -632,7 +632,7 @@ def construct(self, geom): #4_2d if module in self.thick_horizontal: thick_Modlayer_pla[module] = geom.structure.Placement( 'thickModlayerpla'+self.name+str(module), volume=Module_layer_lv3, pos=thickModlayer_pos[module] )#x - if module in self.thick_X: + if module in self.thick_vertical: thick_Modlayer_pla[module] = geom.structure.Placement( 'thickModlayerpla'+self.name+str(module), volume=Module_layer_lv4, pos=thickModlayer_pos[module] ) elif PDR_3_2b: #3_2b @@ -670,7 +670,7 @@ def construct(self, geom): #XY version (XY) if module in self.double_horizontal: double_Modlayer_pla[module] = geom.structure.Placement( 'doubleModlayerpla'+self.name+str(module), volume=Module_layer_lv3, pos=doubleModlayer_pos[module] ) - if module in self.double_X: + if module in self.double_vertical: double_Modlayer_pla[module] = geom.structure.Placement( 'doubleModlayerpla'+self.name+str(module), volume=Module_layer_lv4, pos=doubleModlayer_pos[module] ) elif PDR_3_2b: #UVX From fd65a71cc5ffc9fce752e570375f8766a0fecd3e Mon Sep 17 00:00:00 2001 From: Lukas Koch Date: Wed, 28 Jan 2026 17:19:35 +0100 Subject: [PATCH 5/5] Fix online 3D viewer. --- .github/workflows/tests.yml | 7 +++++++ jsroot/jsroot.htm | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index c1242935..39aa69e9 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -96,6 +96,13 @@ jobs: do root "gdml2root.C(\"$F\", \"jsroot/${F%.gdml}.root\")" done + - name: Add files to dropdown menu + run: | + for F in *.gdml + do + sed -i -e "s||${F%.gdml}.root;|" jsroot/jsroot.htm + done + sed -i -e "s|;||" jsroot/jsroot.htm - name: Replace heading in html run: | sed -i -e "s|master|$GITHUB_REF_NAME|" jsroot/index.htm diff --git a/jsroot/jsroot.htm b/jsroot/jsroot.htm index 1848f04c..3ccf719b 100644 --- a/jsroot/jsroot.htm +++ b/jsroot/jsroot.htm @@ -15,7 +15,7 @@ -
+
loading scripts ...