44
55from exatomic .exa import DataFrame
66import numpy as np
7- # import pandas as pd
7+ import pandas as pd
88
99class Gradient (DataFrame ):
1010 """
@@ -14,3 +14,40 @@ class Gradient(DataFrame):
1414 _index = 'gradient'
1515 _columns = ['Z' , 'atom' , 'fx' , 'fy' , 'fz' , 'symbol' , 'frame' ]
1616 _categories = {'frame' : np .int64 , 'atom' : np .int64 , 'symbol' : str }
17+
18+ @property
19+ def stats (self ):
20+ cols = ['fx' , 'fy' , 'fz' ]
21+ srs = []
22+ for _ , data in self .groupby ('frame' ):
23+ norms = np .linalg .norm (data [cols ].values , axis = 1 )
24+ rms = np .sqrt (np .mean (np .square (norms )))
25+ avg = np .mean (norms )
26+ max = norms .max ()
27+ min = norms .min ()
28+ sr = pd .Series ([rms , avg , max , min ], index = ['rms' , 'mean' ,
29+ 'max' , 'min' ])
30+ srs .append (sr )
31+ df = pd .concat (srs , axis = 1 , ignore_index = True ).T
32+ return df
33+
34+ @property
35+ def rms_grad (self ):
36+ cols = ['fx' , 'fy' , 'fz' ]
37+ arr = []
38+ for _ , data in self .groupby ('frame' ):
39+ val = np .sqrt (np .mean (np .square (data [cols ].values )))
40+ arr .append (val )
41+ rms = pd .Series (arr )
42+ return rms
43+
44+ @property
45+ def avg_grad (self ):
46+ cols = ['fx' , 'fy' , 'fz' ]
47+ arr = []
48+ for _ , data in self .groupby ('frame' ):
49+ val = np .mean (data [cols ].values )
50+ arr .append (val )
51+ avg = pd .Series (arr )
52+ return avg
53+
0 commit comments