File indexing completed on 2026-04-10 07:49:20
0001
0002 """
0003 From perusing the gdml physvol/@copynumber
0004
0005 * 3inch inside lInnerWater : 300000,..,325599
0006 * 20inch inside lInnerWater : "0",1,2,..,17611 (covers both NNVT and Hamamatsu)
0007 * 20inch inside lOuterWaterPool : 30000,...,32399
0008
0009
0010 In [19]: g0.volume_summary()
0011 25600 : PMT_3inch_log0x3a2e430 : lInnerWater0x30e63a0
0012 12612 : NNVTMCPPMTlMaskVirtual0x32a56c0 : lInnerWater0x30e63a0
0013 5000 : HamamatsuR12860lMaskVirtual0x3290b70 : lInnerWater0x30e63a0
0014 2400 : mask_PMT_20inch_vetolMaskVirtual0x3297630 : lOuterWaterPool0x30e5550
0015 590 : lUpper0x3176610 : lInnerWater0x30e63a0
0016 590 : lFasteners0x312e0c0 : lInnerWater0x30e63a0
0017 590 : lSteel0x30e7840 : lInnerWater0x30e63a0
0018 590 : lAddition0x31bd480 : lInnerWater0x30e63a0
0019 64 : lCoating0x4507f00 : lPanelTape0x4507d70
0020 64 : lXJfixture0x320b990 : lTarget0x30e7080 lInnerWater0x30e63a0
0021 63 : lWallff_0x45078b0 : lAirTT0x4507630
0022 56 : lXJanchor0x32053d0 : lInnerWater0x30e63a0
0023 36 : lSJFixture0x3210660 : lTarget0x30e7080
0024 8 : lSJReceiver0x3215330 : lTarget0x30e7080
0025 4 : lPanel0x4507be0 : lPlanef_0x4507ad0
0026 2 : lSJCLSanchor0x320f450 : lTarget0x30e7080
0027 2 : lPlanef_0x4507ad0 : lWallff_0x45078b0
0028 1 : lUpperChimney0x4502a10 : lExpHall0x30dfd90
0029 1 : NNVTMCPPMT_PMT_20inch_inner2_log0x32a40d0 : NNVTMCPPMT_PMT_20inch_body_log0x32a3db0
0030 1 : HamamatsuR12860_PMT_20inch_inner2_log0x32a9750 : HamamatsuR12860_PMT_20inch_body_log0x32a9400
0031 1 : lAirTT0x4507630 : lExpHall0x30dfd90
0032
0033
0034
0035 """
0036 import logging, textwrap
0037 log = logging.getLogger(__name__)
0038
0039 from opticks.analytic.gdml import GDML
0040 specs_ = lambda s:filter(lambda s:s[0] != "#", filter(None,textwrap.dedent(s).split("\n")))
0041
0042
0043 if __name__ == '__main__':
0044
0045
0046 lvx = specs_(r"""
0047 lInnerWater
0048 """
0049 )
0050 ilv = 0
0051
0052 labels = specs_(r"""
0053 #tds_ngt
0054 tds_ngt_pcnk
0055 """
0056 )
0057
0058
0059 g0 = GDML.parse("$OPTICKS_PREFIX/%s.gdml" % labels[0])
0060 g0.smry()
0061
0062
0063 lv0 = g0.find_one_volume(lvx[ilv])
0064 print("lv0:%s [%s]" % (lv0.name, lvx[ilv]) )
0065
0066 npmt = len(lv0.elem.xpath("./physvol[starts-with(@name,'pLPMT')]"))
0067 ncop = len(lv0.elem.xpath("./physvol[starts-with(@name,'pLPMT')]/@copynumber"))
0068 print("npmt:%d ncop:%d" % (npmt, ncop))
0069
0070
0071 if len(labels)>1:
0072 g1 = GDML.parse("$OPTICKS_PREFIX/%s.gdml" % labels[1])
0073 g1.smry()
0074
0075
0076 lv1 = g1.find_one_volume(lvx[ilv])
0077 print("lv1:%s" % lv1 )
0078 pass
0079
0080
0081
0082