TIMD integration.py
From Rizzo_Lab
import math, sys import os.path from math import sqrt #to use the script, choose the right filename prefix ################################################################################################################# ## loops over "fn" of output files . ## fn = file number ## lambda is the name of a function in python!!!!don't use it as a variable. def read_dvdl_out(filename): lamb=[];dvdl = [];err = []; file_op = open(filename, 'r'); lines = file_op.readlines(); for line in lines: linesplit = line.split() #split on white space if ( len(linesplit) > 0 ): lamb.append(float(linesplit[0])); dvdl.append(float(linesplit[1])); err.append(float(linesplit[2])); file_op.close(); if ( lamb[0] != 0 ): ynew = (lamb[0]*dvdl[1]-lamb[1]*dvdl[0])/(lamb[0]-lamb[1]); lamb.insert(0, float(0)); dvdl.insert(0, ynew); err.insert(0, err[0]); if ( lamb[len(lamb)-1] != 1): i = len(lamb); ynew = ( dvdl[i-1]*(lamb[i-2]-1)+dvdl[i-2]*(1-lamb[i-1]) )/(lamb[i-2]-lamb[i-1]); lamb.append(float(1)); dvdl.append(ynew); err.append(err[i-1]); i = len(lamb); ##print i; width = []; for j in range(0,i): if (i == 1 ): width.insert(j,1); elif (j == 0 ): width.insert(j,0.5 * (lamb[j] + lamb[j+1])); elif (j == i-1): width.insert(j,1-0.5*(lamb[j]+lamb[j-1])); else: width.insert(j,0.5*(lamb[j+1]-lamb[j-1])); return lamb,dvdl,err,width; ################################################################################################################# def integration_dvdl( lamb,dvdl,err,width ): tot_dvdl = 0; tot_err = 0; i = len(lamb); for j in range(0,i): tot_dvdl += width[j]*dvdl[j]; tot_err += width[j]*err[j]; return tot_dvdl, tot_err; ###### def write_dvdl_prep( dvdl,rms_dvdl,file): length = len(dvdl); for i in range(1,length+1): file.write( "%5.3f%9.3f%6.3f" %(i/10.0,dvdl[i-1],rms_dvdl[i-1]) ); file.write( "\n" ); return; ################################################################################################################# def main(): ########integration for dvdl at different lambda values filename = "integ_prep_step1"; lamb,dvdl,err,width = read_dvdl_out(filename); tot_dvdl, tot_err = integration_dvdl(lamb,dvdl,err,width); print "Total DV/DL:",tot_dvdl,"+-",tot_err; ################################################################################################################# main()