forked from 541435721/myVTKPythonLibrary
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcomputeHelixTransverseSheetAngles.py
More file actions
114 lines (92 loc) · 3.94 KB
/
computeHelixTransverseSheetAngles.py
File metadata and controls
114 lines (92 loc) · 3.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#coding=utf8
########################################################################
### ###
### Created by Martin Genet, 2012-2016 ###
### ###
### University of California at San Francisco (UCSF), USA ###
### Swiss Federal Institute of Technology (ETH), Zurich, Switzerland ###
### École Polytechnique, Palaiseau, France ###
### ###
########################################################################
import math
import numpy
import myVTKPythonLibrary as myVTK
########################################################################
def computeHelixTransverseSheetAngles(
farray_eRR,
farray_eCC,
farray_eLL,
farray_eF,
farray_eS,
farray_eN,
use_new_definition=False,
verbose=1):
myVTK.myPrint(verbose, "*** computeHelixTransverseSheetAngles ***")
n_tuples = farray_eRR.GetNumberOfTuples()
assert (farray_eCC.GetNumberOfTuples() == n_tuples)
assert (farray_eLL.GetNumberOfTuples() == n_tuples)
assert (farray_eF.GetNumberOfTuples() == n_tuples)
assert (farray_eS.GetNumberOfTuples() == n_tuples)
assert (farray_eN.GetNumberOfTuples() == n_tuples)
farray_angle_helix = myVTK.createFloatArray("angle_helix", 1, n_tuples)
farray_angle_trans = myVTK.createFloatArray("angle_trans", 1, n_tuples)
farray_angle_sheet = myVTK.createFloatArray("angle_sheet", 1, n_tuples)
eRR = numpy.empty(3)
eCC = numpy.empty(3)
eLL = numpy.empty(3)
eF = numpy.empty(3)
for k_tuple in xrange(n_tuples):
farray_eRR.GetTuple(k_tuple, eRR)
farray_eCC.GetTuple(k_tuple, eCC)
farray_eLL.GetTuple(k_tuple, eLL)
farray_eF.GetTuple(k_tuple, eF)
eF -= numpy.dot(eF, eRR) * eRR
eF /= numpy.linalg.norm(eF)
angle_helix = math.copysign(1., numpy.dot(eF, eCC)) * math.asin(min(1., max(-1., numpy.dot(eF, eLL)))) * (180./math.pi)
farray_angle_helix.SetTuple1(k_tuple, angle_helix)
eF = numpy.array(farray_eF.GetTuple(k_tuple))
eF -= numpy.dot(eF, eLL) * eLL
eF /= numpy.linalg.norm(eF)
angle_trans = math.copysign(-1., numpy.dot(eF, eCC)) * math.asin(min(1., max(-1., numpy.dot(eF, eRR)))) * (180./math.pi)
farray_angle_trans.SetTuple1(k_tuple, angle_trans)
#if (use_new_definition):
#assert 0, "TODO"
#else:
#assert 0, "TODO"
return (farray_angle_helix,
farray_angle_trans,
farray_angle_sheet)
########################################################################
def addHelixTransverseSheetAngles(
ugrid,
type_of_support="cell",
use_new_definition=False,
verbose=1):
myVTK.myPrint(verbose, "*** addHelixTransverseSheetAngles ***")
if (type_of_support == "cell"):
ugrid_data = ugrid.GetCellData()
elif (type_of_support == "point"):
ugrid_data = ugrid.GetPointData()
farray_eRR = ugrid_data.GetArray("eRR")
farray_eCC = ugrid_data.GetArray("eCC")
farray_eLL = ugrid_data.GetArray("eLL")
farray_eF = ugrid_data.GetArray("eF")
farray_eS = ugrid_data.GetArray("eS")
farray_eN = ugrid_data.GetArray("eN")
(farray_angle_helix,
farray_angle_trans,
farray_angle_sheet) = computeHelixTransverseSheetAngles(
farray_eRR=farray_eRR,
farray_eCC=farray_eCC,
farray_eLL=farray_eLL,
farray_eF=farray_eF,
farray_eS=farray_eS,
farray_eN=farray_eN,
use_new_definition=use_new_definition,
verbose=verbose-1)
ugrid_data.AddArray(farray_angle_helix)
ugrid_data.AddArray(farray_angle_trans)
ugrid_data.AddArray(farray_angle_sheet)
return (farray_angle_helix,
farray_angle_trans,
farray_angle_sheet)