Skip to content

Commit d65382c

Browse files
committed
Write data to csv file after each family rather than after entire set of families
This is so you can view progress if things crash midway also saves family names alphabetically
1 parent 86267b6 commit d65382c

1 file changed

Lines changed: 79 additions & 80 deletions

File tree

testing/evaluateKinetics.py

Lines changed: 79 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -233,20 +233,17 @@ def obtainKineticsFamilyStatistics(FullDatabase, trialDir):
233233
as it would add non-exact rules to the rule count)
234234
"""
235235
allFamilyNames=FullDatabase.kinetics.families.keys()
236-
allFamilyNames.sort() # Perform test on families alphabetically
237-
238-
familyCount={}
236+
allFamilyNames.sort(key=str.lower) # Perform test on families alphabetically
239237

240-
for familyName in allFamilyNames:
241-
family=FullDatabase.kinetics.families[familyName]
242-
print "Processing", familyName + '...', '(' + str(len(family.rules.entries)) + ' rate rules)'
243-
familyCount[familyName]=countNodes(family)
244-
245238
with open(os.path.join(trialDir, 'FamilyStatistics.csv'), 'wb') as csvfile:
246239
csvwriter=csv.writer(csvfile)
247240
csvwriter.writerow(['Family','Number of Rules', 'Top Node 1', 'Number of Groups', 'Top Node 2', 'Number of Groups', 'Top Node 3', 'Number of Groups'])
248-
for key, value in familyCount.iteritems():
249-
csvwriter.writerow(value)
241+
242+
for familyName in allFamilyNames:
243+
family=FullDatabase.kinetics.families[familyName]
244+
print "Processing", familyName + '...', '(' + str(len(family.rules.entries)) + ' rate rules)'
245+
# Save to csv file
246+
csvwriter.writerow(countNodes(family))
250247

251248

252249
def compareNIST(FullDatabase, trialDir):
@@ -262,50 +259,50 @@ def compareNIST(FullDatabase, trialDir):
262259

263260

264261
allFamilyNames=FullDatabase.kinetics.families.keys()
265-
allFamilyNames.sort() # Perform test on families alphabetically
262+
allFamilyNames.sort(key=str.lower) # Perform test on families alphabetically
266263

267264
QDict={}
268265

269-
for familyName in allFamilyNames:
270-
family=FullDatabase.kinetics.families[familyName]
271-
print "Processing", familyName + '...', '(' + str(len(family.rules.entries)) + ' rate rules)'
272-
if len(family.rules.entries) < 2:
273-
print ' Skipping', familyName, ': only has one rate rule...'
274-
else:
275-
exactKinetics, approxKinetics = getKineticsDepository(FullDatabase, family, 'NIST')
276-
277-
#prune for exact matches only
278-
keysToRemove=[]
279-
for key, kinetics in approxKinetics.iteritems():
280-
if not re.search('Exact', kinetics.comment):
281-
keysToRemove.append(key)
282-
283-
for key in keysToRemove:
284-
del approxKinetics[key]
285-
286-
parityData=analyzeForParity(exactKinetics, approxKinetics, cutoff=8.0)
287-
288-
if len(parityData)<2:
289-
print ' Skipping', familyName, ': {} reactions were compared...'.format(len(parityData))
290-
continue
291-
QDict[familyName]=calculateQ(parityData)
292-
createParityPlot(parityData)
293-
plt.title(familyName)
294-
plt.savefig(os.path.join(trialDir, familyName +'.png'))
295-
plt.clf()
296-
297-
if not os.path.exists(os.path.join(os.path.join(trialDir, 'ParityData'))):
298-
os.makedirs(os.path.join(trialDir, 'ParityData'))
299-
300-
with open(os.path.join(trialDir, 'ParityData', familyName + '.csv'), 'wb') as csvfile:
301-
csvwriter=csv.writer(csvfile)
302-
for key, value in parityData.iteritems():
303-
csvwriter.writerow([key, value[0]/value[1], approxKinetics[key].comment])
304-
305266
with open(os.path.join(trialDir, 'QDict_LOO.csv'), 'wb') as csvfile:
306267
csvwriter=csv.writer(csvfile)
307-
for key, value in QDict.iteritems():
308-
csvwriter.writerow([key, value])
268+
for familyName in allFamilyNames:
269+
family=FullDatabase.kinetics.families[familyName]
270+
print "Processing", familyName + '...', '(' + str(len(family.rules.entries)) + ' rate rules)'
271+
if len(family.rules.entries) < 2:
272+
print ' Skipping', familyName, ': only has one rate rule...'
273+
else:
274+
exactKinetics, approxKinetics = getKineticsDepository(FullDatabase, family, 'NIST')
275+
276+
#prune for exact matches only
277+
keysToRemove=[]
278+
for key, kinetics in approxKinetics.iteritems():
279+
if not re.search('Exact', kinetics.comment):
280+
keysToRemove.append(key)
281+
282+
for key in keysToRemove:
283+
del approxKinetics[key]
284+
285+
parityData=analyzeForParity(exactKinetics, approxKinetics, cutoff=8.0)
286+
287+
if len(parityData)<2:
288+
print ' Skipping', familyName, ': {} reactions were compared...'.format(len(parityData))
289+
continue
290+
QDict[familyName]=calculateQ(parityData)
291+
createParityPlot(parityData)
292+
plt.title(familyName)
293+
plt.savefig(os.path.join(trialDir, familyName +'.png'))
294+
plt.clf()
295+
296+
if not os.path.exists(os.path.join(os.path.join(trialDir, 'ParityData'))):
297+
os.makedirs(os.path.join(trialDir, 'ParityData'))
298+
299+
with open(os.path.join(trialDir, 'ParityData', familyName + '.csv'), 'wb') as paritycsvfile:
300+
paritycsvwriter=csv.writer(paritycsvfile)
301+
for key, value in parityData.iteritems():
302+
paritycsvwriter.writerow([key, value[0]/value[1], approxKinetics[key].comment])
303+
304+
# Save data to csv file
305+
csvwriter.writerow([familyName, QDict[familyName]])
309306

310307

311308

@@ -328,42 +325,44 @@ def leaveOneOut(FullDatabase, trialDir, averaging=True):
328325
os.makedirs(trialDir)
329326

330327
allFamilyNames=FullDatabase.kinetics.families.keys()
331-
allFamilyNames.sort() # Perform test on families alphabetically
328+
allFamilyNames.sort(key=str.lower) # Perform test on families alphabetically
332329
QDict={}
333330

334-
for familyName in allFamilyNames:
335-
family=FullDatabase.kinetics.families[familyName]
336-
print "Processing", familyName + '...', '(' + str(len(family.rules.entries)) + ' rate rules)'
337-
if len(family.rules.entries) < 2:
338-
print ' Skipping', familyName, ': only has one rate rule...'
339-
else:
340-
if not averaging:
341-
# Pre-average the family if averaging is not turned on
342-
family.fillKineticsRulesByAveragingUp()
343-
exactKinetics, approxKinetics = getKineticsLeaveOneOut(family, averaging)
344-
parityData=analyzeForParity(exactKinetics, approxKinetics, cutoff=8.0)
345-
346-
if len(parityData)<2:
347-
print ' Skipping', familyName, ': {} rate rules were compared...'.format(len(parityData))
348-
continue
349-
QDict[familyName]=calculateQ(parityData)
350-
createParityPlot(parityData)
351-
plt.title(familyName)
352-
plt.savefig(os.path.join(trialDir, familyName +'.png'))
353-
plt.clf()
354-
355-
if not os.path.exists(os.path.join(os.path.join(trialDir, 'ParityData'))):
356-
os.makedirs(os.path.join(trialDir, 'ParityData'))
357-
358-
with open(os.path.join(trialDir, 'ParityData', familyName + '.csv'), 'wb') as csvfile:
359-
csvwriter=csv.writer(csvfile)
360-
for key, value in parityData.iteritems():
361-
csvwriter.writerow([key, value[0]/value[1], approxKinetics[key].comment])
362331

363332
with open(os.path.join(trialDir, 'QDict_LOO.csv'), 'wb') as csvfile:
364333
csvwriter=csv.writer(csvfile)
365-
for key, value in QDict.iteritems():
366-
csvwriter.writerow([key, value])
334+
335+
for familyName in allFamilyNames:
336+
family=FullDatabase.kinetics.families[familyName]
337+
print "Processing", familyName + '...', '(' + str(len(family.rules.entries)) + ' rate rules)'
338+
if len(family.rules.entries) < 2:
339+
print ' Skipping', familyName, ': only has one rate rule...'
340+
else:
341+
if not averaging:
342+
# Pre-average the family if averaging is not turned on
343+
family.fillKineticsRulesByAveragingUp()
344+
exactKinetics, approxKinetics = getKineticsLeaveOneOut(family, averaging)
345+
parityData=analyzeForParity(exactKinetics, approxKinetics, cutoff=8.0)
346+
347+
if len(parityData)<2:
348+
print ' Skipping', familyName, ': {} rate rules were compared...'.format(len(parityData))
349+
continue
350+
QDict[familyName]=calculateQ(parityData)
351+
createParityPlot(parityData)
352+
plt.title(familyName)
353+
plt.savefig(os.path.join(trialDir, familyName +'.png'))
354+
plt.clf()
355+
356+
if not os.path.exists(os.path.join(os.path.join(trialDir, 'ParityData'))):
357+
os.makedirs(os.path.join(trialDir, 'ParityData'))
358+
359+
with open(os.path.join(trialDir, 'ParityData', familyName + '.csv'), 'wb') as paritycsvfile:
360+
paritycsvwriter=csv.writer(paritycsvfile)
361+
for key, value in parityData.iteritems():
362+
paritycsvwriter.writerow([key, value[0]/value[1], approxKinetics[key].comment])
363+
364+
# Save to csv file
365+
csvwriter.writerow([familyName, QDict[familyName]])
367366

368367
return
369368

0 commit comments

Comments
 (0)