+ extended docu
[qpalma.git] / qpalma / SettingsParser.py
index 700c896..83b0858 100644 (file)
 #
 
 import os 
+import re
 import os.path 
 import sys 
+import pdb
 
 jp = os.path.join
 
@@ -26,7 +28,10 @@ def parseSettingsFile(filename):
       if (not line.strip()) or line.startswith('#'):
          pass
       else:
-         key, val = line.strip().replace(' ', '').split('=')
+         line = line.strip()
+         line = re.sub('\s', '', line)  
+         key, val = line.split('=')
+
          settings[key] = val
 
    return settings
@@ -67,18 +72,39 @@ def makeSettings(settings):
    except:
       print 'Error: There was a problem generating the logfile %s' % settings['global_log_fn']
 
-   try:
-      settings['num_splits'] = int(settings['num_splits'])
-   except:
-      print 'Error: num_splits has to be a positive integer'
+   # addd checking support!!
+   settings['allowed_fragments'] = eval(settings['allowed_fragments'])
 
-   try:
-      settings['prb_offset'] = int(settings['prb_offset'])
-   except:
-      print 'Error: prb_offset has to be a positive integer'
+   TF = [True,False]
 
-   settings['allowed_fragments'] = eval(settings['allowed_fragments'])
-   settings['half_window_size']  = int(settings['half_window_size'])
+   # convert and check all boolean parameters
+   for parameter in ['enable_quality_scores', 'enable_intron_length', 'enable_splice_scores',\
+   'remove_duplicate_scores', 'print_matrix']:
+
+      try:
+         settings[parameter]   = eval(settings[parameter])
+         assert settings[parameter] in TF
+      except:
+         print "Unexpected error:", sys.exc_info()[0]
+         print 'The value of %s has to be either True or False!'%parameter
+
+   # now convert and check all integer parameters
+   for parameter in ['matchmatrixCols', 'matchmatrixRows', 'numAccSuppPoints', 'numConstraintsPerRound',\
+   'numDonSuppPoints', 'numLengthSuppPoints', 'numQualPlifs', 'numQualSuppPoints', 'anzpath', 'iter_steps',\
+   'max_intron_len', 'max_qual', 'min_intron_len', 'min_qual', 'totalQualSuppPoints','C','num_splits','prb_offset','half_window_size']:
+         
+      try:
+         settings[parameter] = int(settings[parameter])
+      except:
+         print 'Error: %s has to be an integer!'%parameter
+
+   # now convert and check all integer parameters
+   for parameter in ['max_svm_score','min_svm_score']:
+         
+      try:
+         settings[parameter] = float(settings[parameter])
+      except:
+         print 'Error: %s has to be an float!'%parameter
 
    return settings
 
@@ -95,3 +121,6 @@ def parseSettings(filename):
    settings = makeSettings(settings)
    #assert checkSettings(settings)
    return settings
+
+if __name__ == '__main__':
+   print parseSettings(sys.argv[1])