File indexing completed on 2026-04-09 07:49:13
0001
0002
0003 import numpy as np
0004 from numpy.linalg import multi_dot
0005
0006 from opticks.ana.fold import Fold
0007 from opticks.CSG.CSGFoundry import CSGFoundry
0008 from opticks.ana.eprint import eprint, epr
0009 from opticks.sysrap.stree import stree
0010
0011
0012 def check_inverse_pair(f, a_="inst", b_="iinst" ):
0013 """
0014 :param f: Fold instance
0015
0016 CAUTION : this clears the identity info prior to checking transforms
0017 """
0018 a = getattr(f, a_)
0019 b = getattr(f, b_)
0020
0021 a[:,:,3] = [0.,0.,0.,1.]
0022 b[:,:,3] = [0.,0.,0.,1.]
0023
0024 assert len(a) == len(b)
0025
0026 chk = np.zeros( (len(a), 4, 4) )
0027 for i in range(len(a)): chk[i] = np.dot( a[i], b[i] )
0028 chk -= np.eye(4)
0029
0030 print("check_inverse_pair : %s %s " % (a_, b_))
0031 print(chk.min(), chk.max())
0032
0033
0034 def compare_f_with_cf(f, cf ):
0035 print("compare_f_with_cf")
0036 eprint("(cf.inst - f.inst_f4).max()", globals(), locals())
0037 eprint("(cf.inst - f.inst_f4).min()", globals(), locals())
0038
0039
0040 def check_inst(f, cf):
0041
0042 eprint("np.abs(cf.inst-f.inst_f4).max()", globals(), locals() )
0043 w = epr("w = np.where( np.abs(cf.inst-f.inst_f4) > 0.0001 )", globals(), locals() )
0044
0045 check_inverse_pair(f, "inst", "iinst" )
0046 check_inverse_pair(f, "inst_f4", "iinst_f4" )
0047 compare_f_with_cf(f, cf )
0048
0049 a_inst = cf.inst.copy()
0050 b_inst = f.inst_f4.copy()
0051
0052 print("a_inst[-1]")
0053 print(a_inst[-1])
0054 print("b_inst[-1]")
0055 print(b_inst[-1])
0056
0057
0058
0059 if __name__ == '__main__':
0060
0061 acf = CSGFoundry.Load("$A_CFBASE")
0062 print(acf)
0063
0064 bcf = CSGFoundry.Load("$B_CFBASE")
0065 print(bcf)
0066
0067 """
0068
0069 node : (23518, 4, 4) : /tmp/blyth/opticks/ntds3_aug5/G4CXOpticks/CSGFoundry/node.npy
0070 itra : (8159, 4, 4) : /tmp/blyth/opticks/ntds3_aug5/G4CXOpticks/CSGFoundry/itra.npy
0071 meshname : (139,) : /tmp/blyth/opticks/ntds3_aug5/G4CXOpticks/CSGFoundry/meshname.txt
0072 meta : (7,) : /tmp/blyth/opticks/ntds3_aug5/G4CXOpticks/CSGFoundry/meta.txt
0073 primname : (3248,) : /tmp/blyth/opticks/ntds3_aug5/G4CXOpticks/CSGFoundry/primname.txt
0074 mmlabel : (10,) : /tmp/blyth/opticks/ntds3_aug5/G4CXOpticks/CSGFoundry/mmlabel.txt
0075 tran : (8159, 4, 4) : /tmp/blyth/opticks/ntds3_aug5/G4CXOpticks/CSGFoundry/tran.npy
0076 inst : (48477, 4, 4) : /tmp/blyth/opticks/ntds3_aug5/G4CXOpticks/CSGFoundry/inst.npy
0077 solid : (10, 3, 4) : /tmp/blyth/opticks/ntds3_aug5/G4CXOpticks/CSGFoundry/solid.npy
0078 prim : (3248, 4, 4) : /tmp/blyth/opticks/ntds3_aug5/G4CXOpticks/CSGFoundry/prim.npy
0079 """
0080
0081 eprint("np.all( acf.node == bcf.node )", globals(), locals() )
0082 eprint("np.all( acf.itra == bcf.itra )", globals(), locals() )
0083 eprint("np.all( acf.meshname == bcf.meshname )", globals(), locals() )
0084
0085 eprint("np.all( acf.primname == bcf.primname )", globals(), locals() )
0086 eprint("np.all( acf.mmlabel == bcf.mmlabel )", globals(), locals() )
0087 eprint("np.all( acf.tran == bcf.tran )", globals(), locals() )
0088 eprint("np.all( acf.inst == bcf.inst )", globals(), locals() )
0089 eprint("np.all( acf.inst[:,:,:3] == bcf.inst[:,:,:3] ) ", globals(), locals(), tail=" exclude 4th column" )
0090 eprint("np.all( acf.solid == bcf.solid )", globals(), locals() )
0091 eprint("np.all( acf.prim == bcf.prim ) ", globals(), locals() )
0092
0093
0094
0095