pe_instance_2.loadFile( pdbfile2)

statistics_collector.add_pose_energies( pe_instance_1)
statistics_collector.add_pose_energies( pe_instance_2)

#########################################
error_combined_scored = False



#combination of score terms
score_terms_to_be_combined = ['faketerm1', 'faketerm2']
for aminoacid in aminoacids:
    statistics_collector.restype_av_scores[aminoacid].calculate_sum_of_several_score_terms(score_terms_to_be_combined)

print 'statistics for ALA and fakterm1+faketerm2: ', statistics_collector.calculate_averages_and_stddevs('ALA', 'faketerm1+faketerm2')

if statistics_collector.calculate_averages_and_stddevs('ALA', 'faketerm1+faketerm2') != (2.25, 1.75):
    error_combined_scored = True



score_terms_to_be_combined2 = ['faketerm3', 'faketerm2']
statistics_collector.restype_av_scores['GLU'].calculate_sum_of_several_score_terms(score_terms_to_be_combined2)


#print 'statistics for GLU and fakterm3+faketerm2: ', statistics_collector.calculate_averages_and_stddevs('GLU', 'faketerm3+faketerm2')

#print "hack"
#print statistics_collector.calculate_averages_and_stddevs('GLU', 'faketerm3+faketerm2')
inlist = open(pdb_listfile, 'r')
liste = inlist.readlines()
FileList = []
for item in liste:
    FileList.append(item.rstrip('\n'))
inlist.close()

statistics_collector_from_all_pdb = ResTypesStatisticsCollector()

for filename in FileList:
    pe_instance = PoseEnergies()
    pe_instance.loadFile(filename)
    statistics_collector_from_all_pdb.add_pose_energies(pe_instance)

#print 'total all pdb', statistics_collector_from_all_pdb.calculate_averages_and_stddevs('SER', 'rama')


error_adding_data_seen = False

all_pdb_result = statistics_collector_from_all_pdb.calculate_averages_and_stddevs('SER', 'rama')
archive_result = statistics_collector_from_pdb.calculate_averages_and_stddevs('SER', 'rama')
if  round( all_pdb_result[0], 5 )!= round( archive_result[0], 5):
    error_adding_data_seen = True

if  round( all_pdb_result[1], 5 )!= round( archive_result[1], 5):
    error_adding_data_seen = True

if error_adding_data_seen:
    print 'Error in adding archived data to calculated data!'
else:
    print 'No error seen in adding archvied data to calculated data!'
filename2 = 'serin-only-test-pdb.txt'

statistics_collector_from_pdb1 = ResTypesStatisticsCollector()
statistics_collector_from_pdb2 = ResTypesStatisticsCollector()


pe_instance1 = PoseEnergies()
pe_instance1.loadFile(filename1)
statistics_collector_from_pdb1.add_pose_energies(pe_instance1)

pe_instance2 = PoseEnergies()
pe_instance2.loadFile(filename2)
statistics_collector_from_pdb2.add_pose_energies(pe_instance2)

mean1 = statistics_collector_from_pdb1.calculate_averages_and_stddevs_from_subset('SER', 'rama', range(10,21))[0]
stddev1 = statistics_collector_from_pdb1.calculate_averages_and_stddevs_from_subset('SER', 'rama', range(10,21))[1]
mean2 = statistics_collector_from_pdb2.calculate_averages_and_stddevs('SER', 'rama')[0]
stddev2 = statistics_collector_from_pdb2.calculate_averages_and_stddevs('SER', 'rama')[1]



#print statistics_collector_from_pdb1.calculate_averages_and_stddevs_from_subset('SER', 'rama', range(10, 21))
#print statistics_collector_from_pdb2.calculate_averages_and_stddevs('SER', 'rama')

if not (round(mean1, 6) == round(mean2, 6) and round(stddev1, 6) == round(stddev2, 6)):
	print 'ERROR: calculating stddev and mean from a subset (depending on amount of neighbors) does not work correctly!'
else:
	print 'No errror seen in calculating stddev and mean from a subset (depending on amount of neighbors)'

#print statistics_collector_from_pdb1.calculate_averages_and_stddevs_from_subset('SER', 'rama', range(10, 21)), statistics_collector_from_pdb2.calculate_averages_and_stddevs('SER', 'rama')
if not error1_seen:
	print "No error when calculating mean and stddev for a single .pdb-file"
else:
	print "There was an error when calculating mean and standard deviation for a single .pdb-file"





####################################################################
#test: mean and stddev out of two .pdb-files

error2_seen = False


if statistics_collector.calculate_averages_and_stddevs("GLU", 'faketerm2')[1] != np.std([0, 0, 5, 6, 6]) or pose_energies.calculate_averages_and_stddevs("GLU", 'faketerm2')[0] != np.mean([0, 0, 5, 6, 6]):
	error1_seen = True
elif statistics_collector.calculate_averages_and_stddevs("MET", 'faketerm1')[1] != np.std([1, 4, 4]) or pose_energies.calculate_averages_and_stddevs("MET", 'faketerm1')[0] != np.mean([1, 4, 4]):
	error1_seen = True
elif statistics_collector.calculate_averages_and_stddevs("ASP", 'faketerm3')[1] != np.std([7, 6]) or pose_energies.calculate_averages_and_stddevs("ASP", 'faketerm3')[0] != np.mean([7, 6]):
	error1_seen = True
elif statistics_collector.calculate_averages_and_stddevs("TRP", 'faketerm4')[1] != 0 or pose_energies.calculate_averages_and_stddevs("TRP", 'faketerm4')[0] != 0:
	error1_seen = True

if not error2_seen:
	print "No error when calculating mean and stddev multiple .pdb-files"
else:
	print "There was an error when calculating mean and standard deviation for multiple .pdb-files"


######################################################################