+ extended docu
[qpalma.git] / qpalma / SettingsParser.py
index ac66128..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
@@ -44,51 +49,78 @@ def makeSettings(settings):
    settings['postproc_dir'] = jp(result_dir, 'postprocessing')
    settings['prediction_dir'] = jp(result_dir, 'prediction')
    settings['training_dir'] = jp(result_dir, 'training')
+   settings['alignment_dir'] = jp(result_dir, 'alignment')
 
    for dir_name in ['approximation_dir','dataset_dir', 'preproc_dir', 'postproc_dir',\
-     'prediction_dir', 'training_dir']:
+     'prediction_dir', 'training_dir', 'alignment_dir']:
       try:
          os.mkdir(settings[dir_name])
          continue
       except:
          print ('Error: There was a problem generating the subdirectory: %s' % dir_name)
 
+   #assert checkSettings(settings),'Check your settings some entries were invalid!'
+
    ddir = settings['dataset_dir']
    settings['prediction_dataset_fn']      = jp(ddir,'prediction_data.pickle')
    settings['prediction_dataset_keys_fn'] = jp(ddir,'prediction_data.keys.pickle')
    settings['training_dataset_fn']        = jp(ddir,'training_data.pickle')
    settings['training_dataset_keys_fn']   = jp(ddir,'training_data.keys.pickle')
 
-
    try:
-      os.mkdir(settings['global_log_fn'])
+      os.mknod(settings['global_log_fn'])
    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'])
-   settings['half_window_size']  = int(settings['half_window_size'])
+
+   TF = [True,False]
+
+   # 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
 
 
 def checkSettings(settings):
    for (key, val,) in settings.items():
-      if key.endswith('_fn'):
-         assert os.path.exists(val), 'Error: Path/File %s with value %s does not seem to exist!' % (key,val)
-      if key.endswith('_dir'):
+      if key.endswith('_fn') or key.endswith('_dir'):
          assert os.path.exists(val), 'Error: Path/File %s with value %s does not seem to exist!' % (key,val)
-
    return True
 
 
 def parseSettings(filename):
    settings = parseSettingsFile(filename)
    settings = makeSettings(settings)
-   assert checkSettings(settings),'Check your settings some entries were invalid!'
-
+   #assert checkSettings(settings)
    return settings
+
+if __name__ == '__main__':
+   print parseSettings(sys.argv[1])