@@ -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
252249def 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