import sys import math # Given a list of eigenvalues (evals) and a list eigenvectors (evecs) calculate S2 # using an iRED approach def CalcS2(evals,evecs) : prod = [] n = len(evals) for i in range(n) : s = [] for j in range(n) : s.append(evecs[i][j]*evecs[i][j]) prod.append(s) s2 = [] for i in range(n) : s = 0.0 for j in range(n) : if (j>=5) : s += evals[j]*prod[j][i] s2.append(1.0-s) return s2 # Read an output file from ptraj containing eigenvectors and eigenvalues def ReadIredFile(filename) : f = open(filename,'r') # Read the header header = f.readline() vals = f.readline().strip().split() n = int(vals[0]) for i in range(int(math.ceil(n/7.0))) : f.readline() # Read all eigenvalues and eigenvectors evals = [] evecs = [] for i in (range(n)) : header = f.readline() vals = f.readline().strip().split() evals.append(float(vals[1])) vec = [] for i in range(int(math.ceil(n/7.0))) : vals = f.readline().strip().split() for v in vals : vec.append(float(v)) evecs.append(vec) f.close() return(evals,evecs) # If this is run from the command-line read a file and print S2 to standard output if __name__ == '__main__' : filname = '' if len(sys.argv) == 1 : print "Enter the name of ired vector-file: " filename = raw_input() else : filename = sys.argv[1] (evals,evecs) = ReadIredFile(filename) s2s = CalcS2(evals,evecs) for x in s2s : print " %.8e" % x