Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-10 07:49:20

0001 #!/usr/bin/env python
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     #g0.volume_summary()
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"))  # 1..17611
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         #g1.volume_summary()
0075 
0076         lv1 = g1.find_one_volume(lvx[ilv])
0077         print("lv1:%s" % lv1 )
0078     pass
0079 
0080 
0081 
0082