#1. Go to your C drive, make a file called "Workbench" if it is not already made. #2. Place your output files in Workbench. # Make sure your file begins with J_ and ends with .z # # In the lines of code blocked off under each linkage type header (lines 510 and on): #3. Place the name the J-coupling you want to extract in the red quotation marks. # Keep the quotation marks. # Fill out torsion1, torsion2, angle_r, n_isomers, n_atoms, atom1, atom2, # J_name in the last line of code and shifta, and shiftb in line _. # Follow the format presented in the second-to-last line of code (The one that # begins with a #). If you are wondering what any of these variables are, # look at the definitions provided below. # If you want to extract multiple J-couplings, Just copy and paste the last # line of code and change atom1, atom2 and J_name to match the atoms # associated with your new coupling. # Click the "Run" button (looks like a green triangle, in top left of screen # under the "Help" tab.) # # # DEFINITIONS: # # torsion1 and torsion2 = The two torsion angles you are scanning across. # e.g. if you have a file named "J_phi15_psi30.z" phi is torsion1 and psi # is torsion2. # # angle_r = Step-size for torsions 1 and 2. # e.g. if you are scanning every 15 degrees along phi & psi, angle_r is 15. # # # n_isomers = The number of conformers you expect to have in your output file. # e.g. if you are scanning across all psi with a step-size of 15, you # should have 24 conformers. # # # n_atoms = The total number of atoms in your molecule. # # atom1 and atom2 = The index numbers associated with the two atoms involved # in the J-coupling you are extracting. Atom1 should be the # SMALLER number. # e.g. Let's say that you are extracting 3J C2'-C1'-O2-C2. When you first # made your molecule, C2 was assigned an index of 20 and C2' was # assigned an index of 24. This would mean that atom1 is 20 and atom2 # is 24. # # shift1 and shift 2 = A phase shift should be applied in case not all # structures use the same reference atoms to define # torsion1 and torsion2 during the optimization steps. # If all torsion references are consistent, shifta = 0 # and shiftb = 0. Otherwise, shifta phase shifts torsion1 # and shiftb phase shifts torsion2 # # J_name = The name of the J-coupling that you are extracting. # # Workbench should now have an Excel Sheet containing all of your J-couplings. # #4. Before removing your files from Workbench, # move to the 2D_J_Plotter, trimmer, and get_trig scripts for this molecule # to maximize efficiency. # #5. Once all files are for this molecule are generated, move the files to another # folder and then remove them from the Workbench. # #6. Repeat for each structure you want to process. import numpy as np def label_lines(lst,file_name,wd): J = open(str(wd)+'J_'+str(file_name)+'.z', 'r') #if J.closed == False: # print "J has been succesfully opened!" linenum = 0 for line in J: line = line.rstrip() lst[linenum] = lst.get(linenum, str(line)) linenum = linenum + 1 #print linenum return lst J.close() lines = {} def define_boundaries(query,file_name,wd): J = open(str(wd)+'J_'+str(file_name)+'.z', 'r') linenum = 0 k = len(query) for line in J: line = line.rstrip() linenum = linenum + 1 for i in xrange(len(line)-k+1): if query == line[i : i+k]: num = linenum return int(num) J.close() if J.closed == True: print "J has been succesfully closed!" output = {} def find_Js(inpt,strt,end,output): for i in xrange(strt,end): output[(i-strt)] = output.get((i-strt),inpt[i]) return output def numerize(inpt,output): for i in inpt: string = inpt[i] new_string = string.replace("D","E") output[i] = output.get(i,str(new_string)) lst = {} def extract_specific_J(lst,n_atoms,atom1,atom2): column = atom1%5 cluster = (atom1-1)//5 + 1 shave = -cluster + 1 for i in xrange(1,cluster): shave = shave + 5*i row = n_atoms*(cluster-1) - shave +atom2 if column == 1: J = float(lst[row][8:21]) if column == 2: J = float(lst[row][22:35]) if column == 3: J = float(lst[row][36:49]) if column == 4: J = float(lst[row][50:63]) if column == 0: J = float(lst[row][64:77]) return J from xlwt import * def enter_the_matrix(matrix,new_matrix,J_name,shift1,shift2,wd): #print matrix for i in xrange(len(matrix)): if matrix[i][0] + shift1 == 360: new_row = [0,matrix[i][1]+shift2,matrix[i][2]] new_matrix.append(new_row) for i in xrange(len(matrix)): if matrix[i][1] + shift2 == 360: new_row = [matrix[i][0]+shift1,0,matrix[i][2]] new_matrix.append(new_row) for i in xrange(len(matrix)): if matrix[i][0] + shift1 == 360 and matrix[i][1] + shift2 == 360: new_row = [0,0,matrix[i][2]] new_matrix.append(new_row) for i in xrange(len(matrix)): new_row = [matrix[i][0]+shift1,matrix[i][1]+shift2,matrix[i][2]] new_matrix.append(new_row) for i in xrange(len(new_matrix)): if new_matrix[i][0] > 360: new_matrix[i][0] = new_matrix[i][0]-360 if new_matrix[i][0] < 0: new_matrix[i][0] = new_matrix[i][0]+360 if new_matrix[i][1] > 360: new_matrix[i][1] = new_matrix[i][1]-360 if new_matrix[i][1] < 0: new_matrix[i][1] = new_matrix[i][1]+360 w = Workbook() Array = w.add_sheet('Array') for i in xrange(len(new_matrix)): Array.write(i,0,int(new_matrix[i][0])) Array.write(i,1,int(new_matrix[i][1])) try: Array.write(i,2,float(new_matrix[i][2])) except ValueError: Array.write(i,2,str(new_matrix[i][2])) w.save(str(wd)+'Array '+str(J_name)+'.xls') def extract_Js(file_name,angle_r,n_isomers,n_atoms,atom1,atom2,torsion1,theta1,torsion2,theta2,matrix,wd): qry_strt = "Total nuclear spin-spin coupling J" qry_end = "End of" inpt = {} lst_int = {} try: lst_int = find_Js(label_lines(inpt,file_name,wd),(define_boundaries(qry_strt,file_name,wd)),(define_boundaries(qry_end,file_name,wd)),lst_int) output = {} numerize(lst_int,output) row = [] row.append(int(theta1)) row.append(int(theta2)) row.append(extract_specific_J(output,n_atoms,atom1,atom2)) matrix.append(row) except IOError: print("WARNING! The structure "+str(torsion1)+str(theta1)+"_"+str(torsion2)+str(theta2)+" could not be extracted!") def extract_alot_of_Js(torsion1,torsion2,angle_r,n_isomers,n_atoms,atom1,atom2,J_name,shift1,shift2,wd): print "Now extracting %s." % (J_name) matrix = [] for i in xrange(1,n_isomers+1): theta_one = angle_r*i if theta_one > 360: theta1 = theta_one - 360 elif theta_one <= 0: theta1 = theta_one + 360 else: theta1 = theta_one for i in xrange(1,n_isomers+1): theta_two = angle_r*i if theta_two > 360: theta2 = theta_two - 360 elif theta_two <= 0: theta2 = theta_two + 360 else: theta2 = theta_two extract_Js(str(torsion1)+str(theta1)+"_"+str(torsion2)+str(theta2),angle_r,n_isomers,n_atoms,atom1,atom2,torsion1,theta1,torsion2,theta2,matrix,wd) new_matrix = [] enter_the_matrix(matrix,new_matrix,J_name,shift1,shift2,wd) def find_shift(query,file_name,wd): Optim = open(str(wd)+'J_'+str(file_name)+'.z', 'r') k = len(query) linenum = 0 for line in Optim: line = line.rstrip() linenum = linenum + 1 for i in xrange(len(line)-k+1): if query == line[i : i+k]: shift = float(line[27:36]) Optim.close() return shift def extract_shifts(file_name,angle_r,n_isomers,n_atoms,atom,atom_type,torsion1,theta1,torsion2,theta2,matrix,wd): qry = str(atom)+" "+str(atom_type)+" Isotropic = " try: row = [] row.append(int(theta1)) row.append(int(theta2)) if atom_type == "C": row.append(136.1678-find_shift(qry,file_name,wd)+49.5) elif atom_type == "H": row.append(31.905-find_shift(qry,file_name,wd)) matrix.append(row) #136.1678 = carbon chemical shielding tensor for methanol #49.5 = experimental chemical shift for methanol relative to TMS #31.905 = proton chemical shielding tensor for methanol except IOError: print("WARNING! The structure "+str(torsion1)+str(theta1)+"_"+str(torsion2)+str(theta2)+" could not be extracted!") def extract_alot_of_shifts(torsion1,torsion2,angle_r,n_isomers,n_atoms,atom,atom_type,atom_name,shift1,shift2,wd): print "Now extracting %s." % (str(atom_name)) matrix = [] for i in xrange(1,n_isomers+1): theta_one = angle_r*i if theta_one > 360: theta1 = theta_one - 360 elif theta_one <= 0: theta1 = theta_one + 360 else: theta1 = theta_one for i in xrange(1,n_isomers+1): theta_two = angle_r*i if theta_two > 360: theta2 = theta_two - 360 elif theta_two <= 0: theta2 = theta_two + 360 else: theta2 = theta_two extract_shifts(str(torsion1)+str(theta1)+"_"+str(torsion2)+str(theta2),angle_r,n_isomers,n_atoms,atom,atom_type,torsion1,theta1,torsion2,theta2,matrix,wd) new_matrix = [] enter_the_matrix(matrix,new_matrix,str(atom_name),shift1,shift2,wd) def extract_specific_distance(lst,atom1,atom2): atom1x = float(lst[atom1][21:29]) atom1y = float(lst[atom1][31:39]) atom1z = float(lst[atom1][41:49]) atom2x = float(lst[atom2][21:29]) atom2y = float(lst[atom2][31:39]) atom2z = float(lst[atom2][41:49]) distance = ((atom1x-atom2x)**2+(atom1y-atom2y)**2+(atom1z-atom2z)**2)**0.5 return distance def extract_distances(file_name,angle_r,n_isomers,atom1,atom2,torsion1,theta1,torsion2,theta2,matrix,wd): qry_strt = "Symbolic Z-matrix" qry_end = "Input orientation" inpt = {} lst_int = {} try: lst_int = find_Js(label_lines(inpt,file_name,wd),define_boundaries(qry_strt,file_name,wd),define_boundaries(qry_end,file_name,wd),lst_int) row = [] #print row row.append(int(theta1)) row.append(int(theta2)) row.append(extract_specific_distance(lst_int,atom1,atom2)) matrix.append(row) except IOError: print("WARNING! The structure "+str(torsion1)+str(theta1)+"_"+str(torsion2)+str(theta2)+" could not be extracted!") def extract_alot_of_distances(torsion1,torsion2,angle_r,n_isomers,atom1,atom2,bond_name,shift1,shift2,wd): print "Now extracting %s." % (str(bond_name)+" Distance") matrix = [] for i in xrange(1,n_isomers+1): theta_one = angle_r*i if theta_one > 360: theta1 = theta_one - 360 elif theta_one <= 0: theta1 = theta_one + 360 else: theta1 = theta_one for i in xrange(1,n_isomers+1): theta_two = angle_r*i if theta_two > 360: theta2 = theta_two - 360 elif theta_two <= 0: theta2 = theta_two + 360 else: theta2 = theta_two extract_distances(str(torsion1)+str(theta1)+"_"+str(torsion2)+str(theta2),angle_r,n_isomers,atom1,atom2,torsion1,theta1,torsion2,theta2,matrix,wd) new_matrix = [] enter_the_matrix(matrix,new_matrix,str(bond_name)+" Distance",shift1,shift2,wd) def extract_specific_angle(lst,atom1,atom2,atom3): atom1x = float(lst[atom1][21:29]) atom1y = float(lst[atom1][31:39]) atom1z = float(lst[atom1][41:49]) atom2x = float(lst[atom2][21:29]) atom2y = float(lst[atom2][31:39]) atom2z = float(lst[atom2][41:49]) atom3x = float(lst[atom3][21:29]) atom3y = float(lst[atom3][31:39]) atom3z = float(lst[atom3][41:49]) distance1 = ((atom1x-atom2x)**2+(atom1y-atom2y)**2+(atom1z-atom2z)**2)**0.5 distance2 = ((atom2x-atom3x)**2+(atom2y-atom3y)**2+(atom2z-atom3z)**2)**0.5 angle = np.arccos(np.dot([atom1x-atom2x,atom1y-atom2y,atom1z-atom2z],[atom3x-atom2x,atom3y-atom2y,atom3z-atom2z])/(distance1*distance2))*57.2958 return angle def extract_angles(file_name,angle_r,n_isomers,atom1,atom2,atom3,torsion1,theta1,torsion2,theta2,matrix,wd): qry_strt = "Symbolic Z-matrix" qry_end = "Input orientation" inpt = {} lst_int = {} try: lst_int = find_Js(label_lines(inpt,file_name,wd),define_boundaries(qry_strt,file_name,wd),define_boundaries(qry_end,file_name,wd),lst_int) row = [] #print row row.append(int(theta1)) row.append(int(theta2)) row.append(extract_specific_angle(lst_int,atom1,atom2,atom3)) matrix.append(row) except IOError: print("WARNING! The structure "+str(torsion1)+str(theta1)+"_"+str(torsion2)+str(theta2)+" could not be extracted!") def extract_alot_of_angles(torsion1,torsion2,angle_r,n_isomers,atom1,atom2,atom3,angle_name,shift1,shift2,wd): print "Now extracting %s." % (str(angle_name)+" Angle") matrix = [] for i in xrange(1,n_isomers+1): theta_one = angle_r*i if theta_one > 360: theta1 = theta_one - 360 elif theta_one <= 0: theta1 = theta_one + 360 else: theta1 = theta_one for i in xrange(1,n_isomers+1): theta_two = angle_r*i if theta_two > 360: theta2 = theta_two - 360 elif theta_two <= 0: theta2 = theta_two + 360 else: theta2 = theta_two extract_angles(str(torsion1)+str(theta1)+"_"+str(torsion2)+str(theta2),angle_r,n_isomers,atom1,atom2,atom3,torsion1,theta1,torsion2,theta2,matrix,wd) new_matrix = [] enter_the_matrix(matrix,new_matrix,str(angle_name)+" Angle",shift1,shift2,wd) def extract_specific_dihedral(lst,atom1,atom2,atom3,atom4): atom1x = float(lst[atom1][21:29]) atom1y = float(lst[atom1][31:39]) atom1z = float(lst[atom1][41:49]) atom2x = float(lst[atom2][21:29]) atom2y = float(lst[atom2][31:39]) atom2z = float(lst[atom2][41:49]) atom3x = float(lst[atom3][21:29]) atom3y = float(lst[atom3][31:39]) atom3z = float(lst[atom3][41:49]) atom4x = float(lst[atom4][21:29]) atom4y = float(lst[atom4][31:39]) atom4z = float(lst[atom4][41:49]) v1=[atom2x-atom1x,atom2y-atom1y,atom2z-atom1z] v2=[atom3x-atom2x,atom3y-atom2y,atom3z-atom2z] v3=[atom4x-atom3x,atom4y-atom3y,atom4z-atom3z] n1=np.cross(v1,v2) n2=np.cross(v2,v3) distance1 = (n1[0]**2+n1[1]**2+n1[2]**2)**0.5 distance2 = (n2[0]**2+n2[1]**2+n2[2]**2)**0.5 dihedral = np.arccos(np.dot(n1,n2)/(distance1*distance2))*57.2958 crisscross=np.cross(n1,n2) distance3 = (crisscross[0]**2+crisscross[1]**2+crisscross[2]**2)**0.5 distance4 = (v2[0]**2+v2[1]**2+v2[2]**2)**0.5 trigger = np.dot(crisscross,v2)/(distance3*distance4) if trigger < 0.5: dihedral = 360.0 - dihedral return dihedral else: return dihedral def extract_dihedrals(file_name,angle_r,n_isomers,atom1,atom2,atom3,atom4,torsion1,theta1,torsion2,theta2,matrix,wd): #print "Now Reading: %s." % (file_name) qry_strt = "Symbolic Z-matrix" qry_end = "Input orientation" inpt = {} lst_int = {} try: lst_int = find_Js(label_lines(inpt,file_name,wd),define_boundaries(qry_strt,file_name,wd),define_boundaries(qry_end,file_name,wd),lst_int) row = [] #print row row.append(int(theta1)) row.append(int(theta2)) row.append(extract_specific_dihedral(lst_int,atom1,atom2,atom3,atom4)) matrix.append(row) except IOError: print("WARNING! The structure "+str(torsion1)+str(theta1)+"_"+str(torsion2)+str(theta2)+" could not be extracted!") def extract_alot_of_dihedrals(torsion1,torsion2,angle_r,n_isomers,atom1,atom2,atom3,atom4,dihedral_name,shift1,shift2,wd): print "Now extracting %s." % (str(dihedral_name)+" Dihedral") matrix = [] for i in xrange(1,n_isomers+1): theta_one = angle_r*i if theta_one > 360: theta1 = theta_one - 360 elif theta_one <= 0: theta1 = theta_one + 360 else: theta1 = theta_one for i in xrange(1,n_isomers+1): theta_two = angle_r*i if theta_two > 360: theta2 = theta_two - 360 elif theta_two <= 0: theta2 = theta_two + 360 else: theta2 = theta_two extract_dihedrals(str(torsion1)+str(theta1)+"_"+str(torsion2)+str(theta2),angle_r,n_isomers,atom1,atom2,atom3,atom4,torsion1,theta1,torsion2,theta2,matrix,wd) new_matrix = [] enter_the_matrix(matrix,new_matrix,str(dihedral_name)+" Dihedral",shift1,shift2,wd) #Set your working directory! wd = "/Users/Desktop/Workbench/" #Specify phase shifts! shifta = 0 shiftb = 0 #If O5' is the reference for phi and Ci-1 is the reference for psi # Use a shift of -120 to make Hi the reference for psi, Use a shift of 120 to make Ci+1 the reference. # Use a shift of -120 to make C2' the reference for phi, Use a shift of 120 to make H1' the reference. #FORMAT: extract_alot_of_Js(torsion1,torsion2,angle_r,n_isomers,n_atoms,atom1,atom2,J_name,shift1,shift2) # extract_alot_of_shifts(torsion1,torsion2,angle_r,n_isomers,n_atoms,atom,atom_type,atom_name,shift1,shift2,wd) # extract_alot_of_distances(torsion1,torsion2,angle_r,n_isomers,atom1,atom2,bond_name,shift1,shift2,wd) # extract_alot_of_angles(torsion1,torsion2,angle_r,n_isomers,atom1,atom2,atom3,angle_name,shift1,shift2,wd) # extract_alot_of_dihedrals(torsion1,torsion2,angle_r,n_isomers,atom1,atom2,atom3,atom4,dihedral_name,shift1,shift2,wd) # # if error "an integer is required" (line 98) occurs, check all .z file size should be ~285 kb # if file is 60 or less means calc failed and can not be read, remove this file and rerun code #order of atom numbers matters, smaller number most go first to properly extract J value #1-2 linkages #extract_alot_of_Js("psi","phi",15,24,48,2,8,"3J C2'-C1'-O2-C2",shifta,shiftb,wd) #extract_alot_of_Js("psi","phi",15,24,48,8,25,"3J H1'-C1'-O2-C2",shifta,shiftb,wd) #extract_alot_of_Js("psi","phi",15,24,48,1,8,"2J C1'-O2-C2",shifta,shiftb,wd) #extract_alot_of_Js("psi","phi",15,24,48,2,25,"2J C2'-C1'-H1'",shifta,shiftb,wd) #extract_alot_of_Js("psi","phi",15,24,48,1,7,"3J C1'-O2-C2-C1",shifta,shiftb,wd) #extract_alot_of_Js("psi","phi",15,24,48,1,9,"3J C1'-O2-C2-C3",shifta,shiftb,wd) #extract_alot_of_Js("psi","phi",15,24,48,1,37,"3J C1'-O2-C2-H2",shifta,shiftb,wd) #extract_alot_of_Js("psi","phi",15,24,48,7,37,"2J C1-C2-H2",shifta,shiftb,wd) #extract_alot_of_Js("psi","phi",15,24,48,9,37,"2J C3-C2-H2",shifta,shiftb,wd) #extract_alot_of_Js("psi","phi",15,24,48,7,9,"2J C1-C2-C3",shifta,shiftb,wd) #1-3 Linkages #extract_alot_of_Js("phi","psi",15,24,48,2,24,"3J C2'-C1'-O3-C3",shifta,shiftb,wd) #extract_alot_of_Js("phi","psi",15,24,48,6,24,"3J H1'-C1'-O3-C3",shifta,shiftb,wd) #extract_alot_of_Js("phi","psi",15,24,48,3,24,"2J C1'-O3-C3",shifta,shiftb,wd) #extract_alot_of_Js("phi","psi",15,24,48,2,6,"2J C2'-C1'-H1'",shifta,shiftb,wd) #extract_alot_of_Js("phi","psi",15,24,48,3,26,"3J C1'-O3-C3-C2",shifta,shiftb,wd) #extract_alot_of_Js("phi","psi",15,24,48,3,31,"3J C1'-O3-C3-C4",shifta,shiftb,wd) #extract_alot_of_Js("phi","psi",15,24,48,3,25,"3J C1'-O3-C3-H3",shifta,shiftb,wd) #extract_alot_of_Js("phi","psi",15,24,48,25,26,"2J C2-C3-H3",shifta,shiftb,wd) #extract_alot_of_Js("phi","psi",15,24,48,25,31,"2J C4-C3-H3",shifta,shiftb,wd) #extract_alot_of_Js("phi","psi",15,24,48,26,31,"2J C2-C3-C4",shifta,shiftb,wd) #aNANA2-3bMan #extract_alot_of_Js("phi","psi",15,24,55,3,10,"3J C3'-C2'-O3-C3",shifta,shiftb,wd) #extract_alot_of_Js("phi","psi",15,24,55,3,8,"3J C1'-C2'-O3-C3",shifta,shiftb,wd) #extract_alot_of_Js("phi","psi",15,24,55,3,9,"2J C2'-O3-C3",shifta,shiftb,wd)# #extract_alot_of_Js("phi","psi",15,24,55,8,10,"2J C3'-C2'-C1'",shifta,shiftb,wd) #extract_alot_of_Js("phi","psi",15,24,55,9,44,"2J H3a'-C3'-C2'",shifta,shiftb,wd) #extract_alot_of_Js("phi","psi",15,24,55,9,43,"2J H3b'-C3'-C3'",shifta,shiftb,wd) #extract_alot_of_Js("phi","psi",15,24,55,2,9,"3J C2'-O3-C3-C2",shifta,shiftb,wd) #extract_alot_of_Js("phi","psi",15,24,55,4,9,"3J C2'-O3-C3-C4",shifta,shiftb,wd) #extract_alot_of_Js("phi","psi",15,24,55,9,32,"3J C2'-O3-C3-H3",shifta,shiftb,wd) #extract_alot_of_Js("phi","psi",15,24,55,2,32,"2J C2-C3-H3",shifta,shiftb,wd) #extract_alot_of_Js("phi","psi",15,24,55,4,32,"2J C4-C3-H3",shifta,shiftb,wd) #extract_alot_of_Js("phi","psi",15,24,55,2,4,"2J C2-C3-C4",shifta,shiftb,wd) #1-4 Linkages #extract_alot_of_Js("psi","phi",15,24,48,2,44,"3J C2'-C1'-O1'-C4",shifta,shiftb,wd) #extract_alot_of_Js("psi","phi",15,24,48,44,47,"3J H1'-C1'-O1'-C4",shifta,shiftb,wd) #extract_alot_of_Js("psi","phi",15,24,48,44,46,"2J C1'-O1'-C4",shifta,shiftb,wd) #extract_alot_of_Js("psi","phi",15,24,48,2,47,"2J C2'-C1'-H1'",shifta,shiftb,wd) #extract_alot_of_Js("psi","phi",15,24,48,21,46,"3J C1'-O1'-C4-C3",shifta,shiftb,wd) #extract_alot_of_Js("psi","phi",15,24,48,22,46,"3J C1'-O1'-C4-C5",shifta,shiftb,wd) #extract_alot_of_Js("psi","phi",15,24,48,45,46,"3J C1'-O1'-C4-H4",shifta,shiftb,wd) #extract_alot_of_Js("psi","phi",15,24,48,21,45,"2J C3-C4-H4",shifta,shiftb,wd) #extract_alot_of_Js("psi","phi",15,24,48,22,45,"2J C5-C4-H4",shifta,shiftb,wd) #extract_alot_of_Js("psi","phi",15,24,48,21,22,"2J C3-C4-C5",shifta,shiftb,wd) #1-6 Linkages #extract_alot_of_Js("psi","phi",15,24,48,17,24,"3J C2'-C1'-O6-C6",shifta,shiftb,wd) #extract_alot_of_Js("psi","phi",15,24,48,9,24,"3J H1'-C1'-O6-C6",shifta,shiftb,wd) #extract_alot_of_Js("psi","phi",15,24,48,5,17,"2J C1'-O6-C6",shifta,shiftb,wd) #extract_alot_of_Js("psi","phi",15,24,48,9,28,"2J C2'-C1'-H1'",shifta,shiftb,wd) #extract_alot_of_Js("psi","phi",15,24,48,9,26,"3J C1'-O6-C6-C5",shifta,shiftb,wd) #extract_alot_of_Js("psi","phi",15,24,48,9,25,"3J C1'-O6-C6-H6a",shifta,shiftb,wd) #extract_alot_of_Js("psi","phi",15,24,48,25,28,"3J C1'-O6-C6-H6b",shifta,shiftb,wd) #extract_alot_of_Js("psi","phi",15,24,48,9,25,"3J H4-C4-C5-C6",shifta,shiftb,wd) #extract_alot_of_Js("psi","phi",15,24,48,25,28,"3J C4-C5-C6-H6a",shifta,shiftb,wd) #extract_alot_of_Js("psi","phi",15,24,48,25,28,"3J C4-C5-C6-H6b",shifta,shiftb,wd) #extract_alot_of_Js("psi","phi",15,24,48,25,26,"2J C5-C6-H6a",shifta,shiftb,wd) #extract_alot_of_Js("psi","phi",15,24,48,26,28,"2J C5-C6-H6b",shifta,shiftb,wd) #extract_alot_of_Js("psi","phi",15,24,48,25,26,"2J H5-C5-C6",shifta,shiftb,wd) #extract_alot_of_Js("psi","phi",15,24,48,26,28,"2J C4-C5-C6",shifta,shiftb,wd) #extract_alot_of_Js("psi","phi",15,24,48,25,26,"2J H4-C4-C5",shifta,shiftb,wd)