Browse Source

Intermediate checkin; many repairs to advanced options

Ethy Cannon 9 years ago
parent
commit
0616ac9200
3 changed files with 453 additions and 295 deletions
  1. 406 257
      includes/blast_ui.form_advanced_options.inc
  2. 27 19
      includes/blast_ui.form_per_program.inc
  3. 20 19
      theme/blast_report.tpl.php

+ 406 - 257
includes/blast_ui.form_advanced_options.inc

@@ -23,6 +23,18 @@
  *   The current state fo the form passed in as $form.
  */
 function blast_ui_blastn_advanced_options_form(&$form, $form_state) {
+  $all_job_data = variable_get('job_data', '');
+  if (isset($_GET['jid']) && isset($all_job_data)) {    
+     $jid = base64_decode($_GET['jid']);
+     $job_data = $all_job_data[$jid];
+  }
+  else {
+    $job_data = array();
+    $jid = 0;
+  }
+echo "job data for $jid:<pre>";var_dump($job_data);echo "</pre>";
+  $defaults = _get_default_values($job_data, 'blastn');
+echo "DEFAULTS <pre>";var_dump($defaults);echo "</pre>";
 
   // General parameters
   //.........................
@@ -36,31 +48,23 @@ function blast_ui_blastn_advanced_options_form(&$form, $form_state) {
   $form['ALG']['GParam']['maxTarget'] = array(
     '#type' => 'select',
     '#title' => t('Max target sequences:'),
-    '#options' => array(
-      10 => t('10'),
-      50 => t('50'),
-      100 => t('100'),
-      250 => t('250'),
-      500 => t('500'),
-      1000 => t('1000'),
-      5000 => t('5000'),
-      10000 => t('10000'),
-      20000 => t('20000'),
-    ),
-    '#default_value' => 2,
+    '#options' => _get_max_target('blastn'),
+    '#default_value' => $defaults['max_target_seqs'],
     '#description' => t('Select the maximum number of aligned sequences to display'),
   );
 
+/*eksc- remove until we learn how this is implemented by NCBI
   $form['ALG']['GParam']['shortQueries'] = array(
     '#type' => 'checkbox',
     '#title' => t('Automatically adjust parameters for short input sequences'),
-    '#default_value' => TRUE,
+    '#default_value' => $short_queries,
   );
+*/
 
   $form['ALG']['GParam']['eVal'] = array(
     '#type' => 'textfield',
     '#title' => t('e-Value (Expected Threshold)'),
-    '#default_value' => 10,
+    '#default_value' => $defaults['evalue'],
     '#size' => 12,
     '#maxlength' => 20,
     '#description' => t('Expected number of chance matches in a random model. This number should be give in a decimal format. <a href="http://www.ncbi.nlm.nih.gov/BLAST/blastcgihelp.shtml#expect" target="_blank">More Information</a> | <a href="https://www.youtube.com/watch?v=nO0wJgZRZJs" target="_blank">Expect value vedio tutorial</a>'),
@@ -69,32 +73,21 @@ function blast_ui_blastn_advanced_options_form(&$form, $form_state) {
   $form['ALG']['GParam']['wordSize'] = array(
     '#type' => 'select',
     '#title' => t('Word size:'),
-    '#options' => array(
-      7 => t('7'),  
-      11 => t('11'),
-      15 => t('15'),
-      16 => t('16'),
-      20 => t('20'),
-      24 => t('24'),
-      28 => t('28'),
-      32 => t('32'),
-      48 => t('48'),
-      64 => t('64'),
-      128 => t('128'),
-      256 => t('256'),
-    ),
-    '#default_value' => 3,
+    '#options' => _get_word_size('blastn'),
+    '#default_value' => $defaults['word_size'],
     '#description' => t('The length of the seed that initiates an alignment'),
   );
 
+/*eksc- remove until we learn how to imlement this one
   $form['ALG']['GParam']['qRange'] = array(
     '#type' => 'textfield',
     '#title' => t('Max matches in a query range'),
-    '#default_value' => 0,
+    '#default_value' => $defaults['num_alignments'],
     '#size' => 12,
     '#maxlength' => 20,
-    '#description' => t('Limit the number of matches to a query range. This option is useful if many strong matches to one part of a query may prevent BLAST from presenting weaker matches to another part of the query.'),
+    '#description' => t('Limit the number of matches to a query range. This option is useful if many strong matches to one part of a query prevents BLAST from presenting weaker matches to another part of the query.'),
   );
+*/
 
   // Scoring parameters
   //.........................
@@ -108,34 +101,18 @@ function blast_ui_blastn_advanced_options_form(&$form, $form_state) {
   $form['ALG']['SParam']['M&MScores'] = array(
     '#type' => 'select',
     '#title' => t('Match/Mismatch Scores:'),
-    '#options' => array(
-       0 => t('1,-2'),
-       1 => t('1,-3'),
-       2 => t('1,-4'),
-       3 => t('2,-3'),
-       4 => t('4,-5'),
-       5 => t('1,-1'),
-     ),
-    '#default_value' => 0,
+    '#options' => _get_match_mismatch('blastn'),
+    '#default_value' => $defaults['matchmiss'],
     '#description' => t('Reward and penalty for matching and mismatching bases.'),
    );
 
    $form['ALG']['SParam']['gapCost'] = array(
     '#type' => 'select',
     '#title' => t('Gap Costs:'),
-    '#options' => array(
-      0 => t('Existence: 5 Extension: 2'),
-      1 => t('Existence: 2 Extension: 2'),
-      2 => t('Existence: 1 Extension: 2'),
-      3 => t('Existence: 0 Extension: 2'),
-      4 => t('Existence: 3 Extension: 1'),
-      5 => t('Existence: 2 Extension: 1'),
-      6 => t('Existence: 1 Extension: 1'),
-    ),
-    '#default_value' => 0,
+    '#options' => _get_gap('blastn'),
+    '#default_value' => $defaults['gap'],
     '#description' => t('Cost to create and extend a gap in an alignment. Linear costs are available only with megablast and are determined by the match/mismatch scores.'),
   );
-
 }
 
 /**
@@ -151,7 +128,6 @@ function blast_ui_blastn_advanced_options_form_validate($form, $form_state) { }
  * @see blast_ui_blastn_advanced_options_form().
  */
 function blast_ui_blastn_advanced_options_form_submit($form, $form_state) {
-
   $eVal = $form_state['values']['eVal'];
 
   $trgtKey = $form_state['values']['maxTarget'];
@@ -161,77 +137,21 @@ function blast_ui_blastn_advanced_options_form_submit($form, $form_state) {
   $wordSize = $form['ALG']['GParam']['wordSize']['#options'][$wsKey];
 
   // Expand Gap Cost key into open and extend penalties
-  $gapKey = $form_state['values']['gapCost'];
-  switch ($gapKey) {
-   case 0:
-      $gapOpen = 5;
-      $gapExtend = 2;
-      break;
-   case 1:
-      $gapOpen = 2;
-      $gapExtend = 2;
-      break;
-   case 2:
-      $gapOpen = 1;
-      $gapExtend = 2;
-      break;
-   case 3:
-      $gapOpen = 0;
-      $gapExtend = 2;
-      break;
-   case 4:
-      $gapOpen = 3;
-      $gapExtend = 1;
-      break;
-   case 5:
-      $gapOpen = 2;
-      $gapExtend = 1;
-      break;
-   case 6:
-      $gapOpen = 1;
-      $gapExtend = 1;
-      break;
-  }
+  $gap = _set_gap($form_state['values']['gapCost']);
 
   // Epand Match/Mismatch option into penalty/reward values
-  // @todo Amir: Is the switch supposed to be for $scoreKey?
-  $scoreKey = $form_state['values']['M&MScores'];
-  switch ($gapKey) {
-   case 0:
-      $penalty = -2;
-      $reward = 1;
-      break;
-   case 1:
-      $penalty = -3;
-      $reward = 1;
-      break;
-   case 2:
-      $penalty = -4;
-      $reward = 1;
-      break;
-   case 3:
-      $penalty = -3;
-      $reward = 2;
-      break;
-   case 4:
-      $penalty = -5;
-      $reward = 4;
-      break;
-   case 5:
-      $penalty = -1;
-      $reward = 1;
-      break;
-  }
+  $m_m = _set_match_mismatch($form_state['values']['M&MScores']);
 
   return array(
-    'evalue' => $eVal,
-    'word_size' => $wordSize,
-    'gapopen' => $gapOpen,
-    'gapextend' => $gapExtend,
-    'penalty' =>  $penalty,
-    'reward' => $reward
+  	'max_target_seqs' => $numAlign,
+    'evalue'          => $eVal,
+    'word_size'       => $wordSize,
+    'gapopen'         => $gap['gapOpen'],
+    'gapextend'       => $gap['gapExtend'],
+    'penalty'         => $m_m['penalty'],
+    'reward'          => $m_m['reward'],
   );
-}
+}//blast_ui_blastn_advanced_options_form_submit
 
 /**
  * @section
@@ -251,6 +171,18 @@ function blast_ui_blastn_advanced_options_form_submit($form, $form_state) {
  *   The current state fo the form passed in as $form.
  */
 function blast_ui_blastx_advanced_options_form(&$form, $form_state) {
+  $all_job_data = variable_get('job_data', '');
+  if (isset($_GET['jid']) && isset($all_job_data)) {    
+     $jid = base64_decode($_GET['jid']);
+     $job_data = $all_job_data[$jid];
+  }
+  else {
+    $job_data = array();
+    $jid = 0;
+  }
+echo "job data for $jid:<pre>";var_dump($job_data);echo "</pre>";
+  $defaults = _get_default_values($job_data, 'blastx');
+echo "DEFAULTS <pre>";var_dump($defaults);echo "</pre>";
 
    $form['ALG']['GParam'] = array(
    '#type' => 'fieldset',
@@ -261,44 +193,33 @@ function blast_ui_blastx_advanced_options_form(&$form, $form_state) {
   $form['ALG']['GParam']['maxTarget'] = array(
     '#type' => 'select',
     '#title' => t('Max target sequences:'),
-    '#options' => array(
-      10 => t('10'),
-      50 => t('50'),
-      100 => t('100'),
-      250 => t('250'),
-      500 => t('500'),
-      1000 => t('1000'),
-      5000 => t('5000'),
-      10000 => t('10000'),
-      20000 => t('20000'),
-    ),
-    '#default_value' => 2,
+    '#options' => _get_max_target('blastx'),
+    '#default_value' => $defaults['max_target_seqs'],
     '#description' => t('Select the maximum number of aligned sequences to display'),
   );
 
   $form['ALG']['GParam']['eVal'] = array(
     '#type' => 'textfield',
     '#title' => t('e-Value (Expected Threshold)'),
-    '#default_value' => 0.01,
+    '#default_value' => $defaults['evalue'],
     '#size' => 12,
     '#maxlength' => 20,
     '#description' => t('Expected number of chance matches in a random model. This number should be give in a decimal format. <a href="http://www.ncbi.nlm.nih.gov/BLAST/blastcgihelp.shtml#expect" target="_blank">More Information</a> | <a href="https://www.youtube.com/watch?v=nO0wJgZRZJs" target="_blank">Expect value vedio tutorial</a>'),
   );
 
- $form['ALG']['GParam']['shortQueries'] = array(
+/*eksc- need to learn how this is implemented for blastx
+  $form['ALG']['GParam']['shortQueries'] = array(
     '#type' => 'checkbox',
     '#title' => t('Automatically adjust parameters for short input sequences'),
     '#default_value' => TRUE,
   );
+*/
 
   $form['ALG']['GParam']['wordSize'] = array(
     '#type' => 'select',
     '#title' => t('Word size:'),
-    '#options' => array(
-      2 => t('2'),
-      3 => t('3'),
-    ),
-    '#default_value' => 1,
+    '#options' => _get_word_size('blastx'),
+    '#default_value' => $defaults['word_size'],
     '#description' => t('The length of the seed that initiates an alignment'),
   );
 
@@ -311,45 +232,46 @@ function blast_ui_blastx_advanced_options_form(&$form, $form_state) {
     '#collapsible' => FALSE,
   );
 
-  $options_first = _ajax_example_get_first_dropdown_options();
-  $selected = isset($form_state['values']['MATRIX'] ) 
-      ? $form_state['values']['MATRIX'] : key($options_first);
-
-  $form['ALG']['SParam']['MATRIX'] = array(
+  $matrix_options = _get_matrix_options();
+  $form['ALG']['SParam']['Matrix'] = array(
     '#type' => 'select',
     '#title' => 'Matrix',
-    '#options' => $options_first,
-    '#default_value' => $selected,
+    '#options' => $matrix_options,
+    '#default_value' => $default['matrix'],
     '#description' => t('Assigns a score for aligning pairs of residues, and determines overall alignment score..'),
     '#ajax' => array(
-      'callback' => 'ajax_example_dependent_dropdown_callback',
+      'callback' => 'ajax_dependent_dropdown_callback',
       'wrapper' => 'dropdown-second-replace',
     ),
   );
 
+/*eksc- probably not used for blastx
   $form['ALG']['SParam']['gapCost'] = array(
     '#type' => 'select',
     '#title' => t('Gap Costs:'),
     '#prefix' => '<div id="dropdown-second-replace">',
     '#suffix' => '</div>',
-    '#options' => _ajax_example_get_second_dropdown_options($selected),
+    '#options' => _get_gap_for_matrix($selected),
     '#default_value' => 2,
     '#description' => t('Cost to create and extend a gap in an alignment.'),
   );
+*/
 
+/*eksc- NOT match/mismatch but instead computational adjustments; 
+        need to learn how there are implemented for blastx
   $form['ALG']['SParam']['M&MScores'] = array(
     '#type' => 'select',
     '#title' => t('Match/Mismatch Scores:'),
     '#options' => array(
-      0 => t('No adjustment'),
-      1 => t('Composition-based statistics'),
-      2 => t('Conditional compositional score matrix adjustment'),
-      3 => t('Universal composition score matrix adjustment '),
-    ),
+				0 => t('No adjustment'),
+				1 => t('Composition-based statistics'),
+				2 => t('Conditional compositional score matrix adjustment'),
+				3 => t('Universal composition score matrix adjustment '),
+			),
     '#default_value' => 2,
     '#description' => t('Matrix adjustment method to compensate for amino acid composition of sequences'),
   );
-
+*/
 }
 
 /**
@@ -367,7 +289,7 @@ function blast_ui_blastx_advanced_options_form_validate($form, $form_state) { }
 function blast_ui_blastx_advanced_options_form_submit($form, $form_state) {
 
   // Same as blastp form submit
-  return blast_ui_blastp_advanced_options_form($form, $form_state);
+  return blast_ui_blastp_advanced_options_form_submit($form, $form_state);
 
 }
 
@@ -389,6 +311,18 @@ function blast_ui_blastx_advanced_options_form_submit($form, $form_state) {
  *   The current state fo the form passed in as $form.
  */
 function blast_ui_blastp_advanced_options_form(&$form, $form_state) {
+  $all_job_data = variable_get('job_data', '');
+  if (isset($_GET['jid']) && isset($all_job_data)) {    
+     $jid = base64_decode($_GET['jid']);
+     $job_data = $all_job_data[$jid];
+  }
+  else {
+    $job_data = array();
+    $jid = 0;
+  }
+echo "job data for $jid:<pre>";var_dump($job_data);echo "</pre>";
+  $defaults = _get_default_values($job_data, 'blastp');
+echo "DEFAULTS <pre>";var_dump($defaults);echo "</pre>";
 
   //General parameters
 
@@ -401,31 +335,23 @@ function blast_ui_blastp_advanced_options_form(&$form, $form_state) {
   $form['ALG']['GParam']['maxTarget'] = array(
     '#type' => 'select',
     '#title' => t('Max target sequences:'),
-    '#options' => array(
-       10 => t('10'),
-       50 => t('50'),
-       100 => t('100'),
-       250 => t('250'),
-       500 => t('500'),
-       1000 => t('1000'),
-       5000 => t('5000'),
-       10000 => t('10000'),
-       20000 => t('20000'),
-    ),
-    '#default_value' => 2,
+    '#options' => _get_max_target('blastp'),
+    '#default_value' => $defaults['max_target_seqs'],
     '#description' => t('Select the maximum number of aligned sequences to display'),
   );
 
+/*eksc- remove until we learn how this is implemented
   $form['ALG']['GParam']['shortQueries'] = array(
    '#type' => 'checkbox',
    '#title' => t('Automatically adjust parameters for short input sequences'),
    '#default_value' => TRUE,
   );
+*/
 
   $form['ALG']['GParam']['eVal'] = array(
     '#type' => 'textfield',
     '#title' => t('e-value(Expect threshold)'),
-    '#default_value' => 10,
+    '#default_value' => $defaults['evalue'],
     '#size' => 12,
     '#maxlength' => 20,
     '#description' => t('Expected number of chance matches in a random model.'),
@@ -434,22 +360,21 @@ function blast_ui_blastp_advanced_options_form(&$form, $form_state) {
   $form['ALG']['GParam']['wordSize'] = array(
     '#type' => 'select',
     '#title' => t('Word size:'),
-    '#options' => array(
-       2 => t('2'),
-       3 => t('3'),
-    ),
-    '#default_value' => 1,
+    '#options' => _get_word_size('blastp'),
+    '#default_value' => $defaults['word_size'],
     '#description' => t('The length of the seed that initiates an alignment'),
   );
 
+/*eksc- remove until we learn how to implement
   $form['ALG']['GParam']['qRange'] = array(
    '#type' => 'textfield',
    '#title' => t('Max matches in a query range'),
-   '#default_value' => 0,
+   '#default_value' => $defaults['num_alignments'],
    '#size' => 12,
    '#maxlength' => 20,
    '#description' => t('Limit the number of matches to a query range. This option is useful if many strong matches to one part of a query may prevent BLAST from presenting weaker matches to another part of the query.'),
   );
+*/
 
   // Scoring parameters
 
@@ -459,31 +384,33 @@ function blast_ui_blastp_advanced_options_form(&$form, $form_state) {
    '#collapsible' => FALSE,
   );
 
-  $options_first = _ajax_example_get_first_dropdown_options();
-  $selected = isset($form_state['values']['MATRIX'] ) ? $form_state['values']['MATRIX'] : key($options_first);
-
-  $form['ALG']['SParam']['MATRIX'] = array(
+  $matrix_options = _get_matrix_options();
+  $form['ALG']['SParam']['Matrix'] = array(
     '#type' => 'select',
     '#title' => 'Matrix',
-    '#options' => $options_first,
-    '#default_value' => $selected,
+    '#options' => $matrix_options,
+    '#default_value' => $defaults['matrix'],
     '#description' => t('Assigns a score for aligning pairs of residues, and determines overall alignment score..'),
     '#ajax' => array(
-      'callback' => 'ajax_example_dependent_dropdown_callback',
+      'callback' => 'ajax_dependent_dropdown_callback',
       'wrapper' => 'dropdown-second-replace',
     ),
   );
 
+/*eksc- probably not used for blastp
   $form['ALG']['SParam']['gapCost'] = array(
     '#type' => 'select',
     '#title' => t('Gap Costs:'),
     '#prefix' => '<div id="dropdown-second-replace">',
     '#suffix' => '</div>',
-    '#options' => _ajax_example_get_second_dropdown_options($selected),
+    '#options' => _get_gap_for_matrix($selected),
     '#default_value' => 2,
     '#description' => t('Cost to create and extend a gap in an alignment.'),
   );
+*/
 
+/*eksc- NOT match/mismatch but instead computational adjustments; 
+        need to learn how there are implemented for blastp
   $form['ALG']['SParam']['M&MScores'] = array(
     '#type' => 'select',
     '#title' => t('Match/Mismatch Scores:'),
@@ -496,11 +423,11 @@ function blast_ui_blastp_advanced_options_form(&$form, $form_state) {
     '#default_value' => 2,
     '#description' => t('Matrix adjustment method to compensate for amino acid composition of sequences'),
   );
-
-}
+*/
+}//blast_ui_blastp_advanced_options_form
 
 /**
- * Validate the advanced options provided by the BLASTn form above.
+ * Validate the advanced options provided by the BLASTp form above.
  *
  * @see blast_ui_blastp_advanced_options_form().
  */
@@ -522,10 +449,9 @@ function blast_ui_blastp_advanced_options_form_submit($form, $form_state) {
   $wordSize = $form['ALG']['GParam']['wordSize']['#options'][$wsKey];
 
   // Expand Gap Cost key into open and extend penalties
-  $gapKey = $form_state['values']['MATRIX'];
-  switch ($gapKey) {
-   case 0:
-     $matrix ="PAM30";
+  $matrix = $form_state['values']['Matrix'];
+  switch ($matrix) {
+   case 'PAM30':
      $gapKey = $form_state['values']['gapCost'];
      switch ($gapKey) {
       case 0:
@@ -554,8 +480,7 @@ function blast_ui_blastp_advanced_options_form_submit($form, $form_state) {
          break;
      }
      break;
-   case 1:
-     $matrix ="PAM70";
+   case 'PAM70':
      $gapKey = $form_state['values']['gapCost'];
      switch ($gapKey) {
       case 0:
@@ -584,8 +509,7 @@ function blast_ui_blastp_advanced_options_form_submit($form, $form_state) {
          break;
      }
      break;
-   case 2:
-     $matrix ="PAM250";
+   case 'PAM250':
      $gapKey = $form_state['values']['gapCost'];
      switch ($gapKey) {
       case 0:
@@ -650,8 +574,7 @@ function blast_ui_blastp_advanced_options_form_submit($form, $form_state) {
          break;
      }
      break;
-   case 3:
-     $matrix ="BLOSUM80";
+   case 'BLOSUM80':
      $gapKey = $form_state['values']['gapCost'];
      switch ($gapKey) {
       case 0:
@@ -680,8 +603,7 @@ function blast_ui_blastp_advanced_options_form_submit($form, $form_state) {
          break;
      }
       break;
-   case 4:
-     $matrix ="BLOSUM62";
+   case 'BLOSUM62':
      $gapKey = $form_state['values']['gapCost'];
      switch ($gapKey) {
       case 0:
@@ -730,8 +652,7 @@ function blast_ui_blastp_advanced_options_form_submit($form, $form_state) {
          break;
      }
       break;
-   case 5:
-     $matrix ="BLOSUM45";
+   case 'BLOSUM45':
      $gapKey = $form_state['values']['gapCost'];
      switch ($gapKey) {
       case 0:
@@ -784,8 +705,7 @@ function blast_ui_blastp_advanced_options_form_submit($form, $form_state) {
          break;
      }
      break;
-   case 6:
-     $matrix ="BLOSUM50";
+   case 'BLOSUM50':
      $gapKey = $form_state['values']['gapCost'];
      switch ($gapKey) {
       case 0:
@@ -850,8 +770,7 @@ function blast_ui_blastp_advanced_options_form_submit($form, $form_state) {
          break;
      }
      break;
-   case 7:
-     $matrix ="BLOSUM90";
+   case 'BLOSUM90':
      $gapKey = $form_state['values']['gapCost'];
      switch ($gapKey) {
       case 0:
@@ -885,42 +804,47 @@ function blast_ui_blastp_advanced_options_form_submit($form, $form_state) {
      }
      break;
   }
+  
+//eksc- need to implement query range limit
+//  $num_alignments = 0;
 
   return array(
-    'evalue' => $eVal,
-    'word_size' => $wordSize,
-    'gapopen' => $gapOpen,
-    'gapextend' => $gapExtend,
-    'matrix' => $matrix
+  	'max_target_seqs' => $numAlign,
+    'evalue'          => $eVal,
+    'word_size'       => $wordSize,
+    'gapopen'         => $gapOpen,
+    'gapextend'       => $gapExtend,
+//    'num_alignments'  => $num_alignments,
+    'matrix'          => $matrix,
   );
-}
+}//blast_ui_blastp_advanced_options_form_submit
 
 /**
- * Fill the first dropdown list with appropriate options
+ * Fill the matrix dropdown list with appropriate options
  *
  * @return
  * An array consisting of matrices name for the first dropdown list
  */
-function _ajax_example_get_first_dropdown_options() {
+function _get_matrix_options() {
   return drupal_map_assoc(array(
-  t('PAM30'),
-  t('PAM70'),
-  t('PAM250'),
-  t('BLOSUM80'),
-  t('BLOSUM62'),
-  t('BLOSUM45'),
-  t('BLOSUM50'),
-  t('BLOSUM90'),
+		t('PAM30'),
+		t('PAM70'),
+		t('PAM250'),
+		t('BLOSUM80'),
+		t('BLOSUM62'),
+		t('BLOSUM45'),
+		t('BLOSUM50'),
+		t('BLOSUM90'),
   ));
 }
 
 /**
- * Fill the second dropdown list with appropriate options
+ * Fill the gap penalty dropdown list with appropriate options given selected matrix
  *
  * @return
  * An array containing open and extension gap values for the chosen matrix (to fill the second dropdown list)
  */
-function _ajax_example_get_second_dropdown_options($key = '') {
+function _get_gap_for_matrix($key = '') {
   $options = array(
     t('PAM30') => drupal_map_assoc(array(
       t('Existence: 7 Extension: 2'),
@@ -1016,18 +940,20 @@ function _ajax_example_get_second_dropdown_options($key = '') {
       t('Existence: 10 Extension: 1'),
       t('Existence: 9 Extension: 1'),
     )),
-    );
-    if (isset($options[$key])) {
-      return $options[$key];
-    } else {
-      return array();
-    }
-}
+  );
+  
+	if (isset($options[$key])) {
+		return $options[$key];
+	} 
+	else {
+		return array();
+	}
+}//_get_gap_for_matrix
 
 /**
  * Respond to Ajax dropdown call
  */
-function ajax_example_dependent_dropdown_callback($form, $form_state) {
+function ajax_dependent_dropdown_callback($form, $form_state) {
   return $form['ALG']['SParam']['gapCost'];
 }
 
@@ -1049,6 +975,18 @@ function ajax_example_dependent_dropdown_callback($form, $form_state) {
  *   The current state fo the form passed in as $form.
  */
 function blast_ui_tblastn_advanced_options_form(&$form, $form_state) {
+  $all_job_data = variable_get('job_data', '');
+  if (isset($_GET['jid']) && isset($all_job_data)) {    
+     $jid = base64_decode($_GET['jid']);
+     $job_data = $all_job_data[$jid];
+  }
+  else {
+    $job_data = array();
+    $jid = 0;
+  }
+echo "job data for $jid:<pre>";var_dump($job_data);echo "</pre>";
+  $defaults = _get_default_values($job_data, 'tblastn');
+echo "DEFAULTS <pre>";var_dump($defaults);echo "</pre>";
 
   $form['ALG']['GParam'] = array(
    '#type' => 'fieldset',
@@ -1059,44 +997,33 @@ function blast_ui_tblastn_advanced_options_form(&$form, $form_state) {
   $form['ALG']['GParam']['maxTarget'] = array(
     '#type' => 'select',
     '#title' => t('Max target sequences:'),
-    '#options' => array(
-      10 => t('10'),
-      50 => t('50'),
-      100 => t('100'),
-      250 => t('250'),
-      500 => t('500'),
-      1000 => t('1000'),
-      5000 => t('5000'),
-      10000 => t('10000'),
-      20000 => t('20000'),
-    ),
-    '#default_value' => 2,
+    '#options' => _get_max_target('tblastn'),
+    '#default_value' => $defaults['max_target_seqs'],
     '#description' => t('Select the maximum number of aligned sequences to display'),
   );
 
   $form['ALG']['GParam']['eVal'] = array(
     '#type' => 'textfield',
     '#title' => t('e-Value (Expected Threshold)'),
-    '#default_value' => 10,
+    '#default_value' => $defaults['evalue'],
     '#size' => 12,
     '#maxlength' => 20,
     '#description' => t('Expected number of chance matches in a random model. This number should be give in a decimal format. <a href="http://www.ncbi.nlm.nih.gov/BLAST/blastcgihelp.shtml#expect" target="_blank">More Information</a> | <a href="https://www.youtube.com/watch?v=nO0wJgZRZJs" target="_blank">Expect value vedio tutorial</a>'),
   );
 
- $form['ALG']['GParam']['shortQueries'] = array(
+/*eksc- need to learn how this is implemented for tblastn
+  $form['ALG']['GParam']['shortQueries'] = array(
     '#type' => 'checkbox',
     '#title' => t('Automatically adjust parameters for short input sequences'),
     '#default_value' => TRUE,
   );
+*/
 
   $form['ALG']['GParam']['wordSize'] = array(
     '#type' => 'select',
     '#title' => t('Word size:'),
-    '#options' => array(
-      2 => t('2'),
-      3 => t('3'),
-    ),
-    '#default_value' => 1,
+    '#options' => _get_word_size('tblastn'),
+    '#default_value' => $defaults['word_size'],
     '#description' => t('The length of the seed that initiates an alignment'),
   );
 
@@ -1109,17 +1036,15 @@ function blast_ui_tblastn_advanced_options_form(&$form, $form_state) {
     '#collapsible' => FALSE,
   );
 
-  $options_first = _ajax_example_get_first_dropdown_options();
-  $selected = isset($form_state['values']['MATRIX'] ) ? $form_state['values']['MATRIX'] : key($options_first);
-
-  $form['ALG']['SParam']['MATRIX'] = array(
+  $matrix_options = _get_matrix_options();
+  $form['ALG']['SParam']['Matrix'] = array(
     '#type' => 'select',
     '#title' => 'Matrix',
-    '#options' => $options_first,
-    '#default_value' => $selected,
+    '#options' => $matrix_options,
+    '#default_value' => $defaults['matrix'],
     '#description' => t('Assigns a score for aligning pairs of residues, and determines overall alignment score..'),
     '#ajax' => array(
-      'callback' => 'ajax_example_dependent_dropdown_callback',
+      'callback' => 'ajax_dependent_dropdown_callback',
       'wrapper' => 'dropdown-second-replace',
     ),
   );
@@ -1129,11 +1054,13 @@ function blast_ui_tblastn_advanced_options_form(&$form, $form_state) {
     '#title' => t('Gap Costs:'),
     '#prefix' => '<div id="dropdown-second-replace">',
     '#suffix' => '</div>',
-    '#options' => _ajax_example_get_second_dropdown_options($selected),
+    '#options' => _get_gap_for_matrix($$default['matrix']),
     '#default_value' => 2,
     '#description' => t('Cost to create and extend a gap in an alignment.'),
   );
 
+/*eksc- NOT match/mismatch but instead computational adjustments; 
+        need to learn how there are implemented for tblastn
   $form['ALG']['SParam']['M&MScores'] = array(
     '#type' => 'select',
     '#title' => t('Match/Mismatch Scores:'),
@@ -1146,8 +1073,8 @@ function blast_ui_tblastn_advanced_options_form(&$form, $form_state) {
     '#default_value' => 2,
     '#description' => t('Matrix adjustment method to compensate for amino acid composition of sequences'),
   );
-
-}
+*/
+}//blast_ui_tblastn_advanced_options_form
 
 /**
  * Validate the advanced options provided by the tBLASTn form above.
@@ -1163,6 +1090,228 @@ function blast_ui_tblastn_advanced_options_form_validate($form, $form_state) { }
  */
 function blast_ui_tblastn_advanced_options_form_submit($form, $form_state) {
 
-  return blast_ui_blastn_advanced_options_form_submit($form, $form_state);
+  return blast_ui_blastp_advanced_options_form_submit($form, $form_state);
 
 }
+
+/*
+ * Get default form values; may come from saved job data if user is re-running
+ *   a previous job.
+ */
+function _get_default_values($job_data) {
+echo "job data in function<pre>";var_dump($job_data);echo "</pre>";
+  // restore previous values or set to default
+  $max_target = (isset($job_data['options']['max_target_seqs'])) 
+  					? $job_data['options']['max_target_seqs'] : 10;
+  $short_queries = (isset($job_data['options']['shortQueries'])) 
+  					? $job_data['options']['shortQueries'] : true;
+  $evalue = (isset($job_data['options']['evalue'])) 
+  					? $job_data['options']['evalue'] : .001;
+  $word_size = (isset($job_data['options']['word_size'])) 
+  					? $job_data['options']['word_size'] : 11;
+  					
+//eksc- need to learn how this is implemented:
+//  q-range
+
+  $matchmiss = 0;
+  $reward = (isset($job_data['options']['reward'])) 
+  					? $job_data['options']['reward'] : 1;
+  $penalty = (isset($job_data['options']['penalty'])) 
+  					? $job_data['options']['penalty'] : -2;
+  if ($reward == 1) {
+  	switch ($penalty) {
+  		case -1: $matchmiss = 5; break;
+  	  case -2: $matchmiss = 0; break;
+  	  case -3: $matchmiss = 1; break;
+  	  case -4: $matchmiss = 2; break;
+  	}
+  }
+  else if ($reward == 2) {
+  	$matchmiss = 3;
+  }
+  else if ($reward == 3) {
+  	 $matchmis = 4;
+  }
+  else if ($eward == 4) {
+  	 $matchmiss = 5;
+  }
+  
+  $gap = 0;
+  $gapopen = (isset($job_data['options']['gapopen'])) 
+  					? $job_data['options']['gapopen'] : 5;
+  $gapextend = (isset($job_data['options']['gapextend'])) 
+  					? $job_data['options']['gapextend'] : 2;
+  if ($gapextend == 2) {
+  	switch ($gapopen) {
+  		case 5: $gap = 0; break;
+  		case 2: $gap = 1; break;
+  		case 1: $gap = 2; break;
+  		case 0: $gap = 3; break;
+  	}
+  }
+  else if ($gapextend == 1) {
+  	switch ($gapopen) {
+  		case 3: $gap = 4;
+  		case 2: $gap = 5;
+  		case 1: $gap = 6;
+  	}
+  }
+  
+// eksc- need to implement query range limit
+//  $num_alignments = 0;
+  
+  $matrix = (isset($job_data['options']['matrix'])) 
+  					? $job_data['options']['matrix'] : 'PAM30';
+  return array(
+  	'max_target_seqs' => $max_target,
+  	'short_queries'   => $short_queries,
+  	'word_size'       => $word_size,
+  	'evalue'          => $evalue,
+  	'matchmiss'       => $matchmiss,
+  	'gap'             => $gap,
+//  	'num_alignments' => $num_alignments,
+    'matrix'          => $matrix,
+  );
+}//_get_default_values
+
+function _get_max_target($which) {
+	switch ($which) {
+	  case 'blastn':
+	  case 'blastx':
+	  case 'blastp':
+	  case 'tblastn':
+			return array(
+				10 => t('10'),
+				50 => t('50'),
+				100 => t('100'),
+				250 => t('250'),
+				500 => t('500'),
+				1000 => t('1000'),
+				5000 => t('5000'),
+				10000 => t('10000'),
+				20000 => t('20000'),
+			);
+	}//switch
+}
+
+function _get_word_size($which) {
+	switch ($which) {
+		case 'blastn':
+			 return array(
+				 7 => t('7'),  
+				 11 => t('11'),
+				 15 => t('15'),
+				 16 => t('16'),
+				 20 => t('20'),
+				 24 => t('24'),
+				 28 => t('28'),
+				 32 => t('32'),
+				 48 => t('48'),
+				 64 => t('64'),
+			 	 128 => t('128'),
+				 256 => t('256'),
+	    );
+    case 'blastx':
+    case 'blastp':
+    case 'tblastn':
+    	return array(
+        2 => t('2'),
+        3 => t('3'),
+      );
+	}//switch
+}
+
+function _get_match_mismatch($which) {
+	switch ($which) {
+		case 'blastn':
+      return array(
+				 0 => t('1,-2'),
+				 1 => t('1,-3'),
+				 2 => t('1,-4'),
+				 3 => t('2,-3'),
+				 4 => t('4,-5'),
+				 5 => t('1,-1'),
+      );
+  }//switch
+}
+
+function _get_gap($which) {
+	switch ($which) {
+		case 'blastn':
+      return array(
+				0 => t('Existence: 5 Extension: 2'),
+				1 => t('Existence: 2 Extension: 2'),
+				2 => t('Existence: 1 Extension: 2'),
+				3 => t('Existence: 0 Extension: 2'),
+				4 => t('Existence: 3 Extension: 1'),
+				5 => t('Existence: 2 Extension: 1'),
+				6 => t('Existence: 1 Extension: 1'),
+      );
+   }//switch
+}
+
+function _set_gap($gap_key) {
+ switch ($gap_key) {
+   case 0:
+      $gapOpen = 5;
+      $gapExtend = 2;
+      break;
+   case 1:
+      $gapOpen = 2;
+      $gapExtend = 2;
+      break;
+   case 2:
+      $gapOpen = 1;
+      $gapExtend = 2;
+      break;
+   case 3:
+      $gapOpen = 0;
+      $gapExtend = 2;
+      break;
+   case 4:
+      $gapOpen = 3;
+      $gapExtend = 1;
+      break;
+   case 5:
+      $gapOpen = 2;
+      $gapExtend = 1;
+      break;
+   case 6:
+      $gapOpen = 1;
+      $gapExtend = 1;
+      break;
+  }//switch
+  
+  return array('gapOpen' => $gapOpen, 'gapExtend' => $gapExtend);
+}
+
+function _set_match_mismatch($m_m) {
+  switch ($m_m) {
+   case 0:
+      $penalty = -2;
+      $reward = 1;
+      break;
+   case 1:
+      $penalty = -3;
+      $reward = 1;
+      break;
+   case 2:
+      $penalty = -4;
+      $reward = 1;
+      break;
+   case 3:
+      $penalty = -3;
+      $reward = 2;
+      break;
+   case 4:
+      $penalty = -5;
+      $reward = 4;
+      break;
+   case 5:
+      $penalty = -1;
+      $reward = 1;
+      break;
+  }//switch
+  
+  return array('penalty' => $penalty, 'reward' => $reward);
+}

+ 27 - 19
includes/blast_ui.form_per_program.inc

@@ -23,12 +23,14 @@ function blast_ui_per_blast_program_form($form, $form_state) {
   // @deepaksomanadh - Code added for edit and resubmit funcitonality
   //   Approach: persist the form data and read it back using JobID
   $job_data = variable_get('job_data', '');
-  if(isset($_GET['jid']) && isset($job_data)) {    
-      $jid = base64_decode($_GET['jid']);
-  }  else {
-      $job_data = array();
-      $jid = 0;
+  if (isset($_GET['jid']) && isset($job_data)) {    
+    $jid = base64_decode($_GET['jid']);
+  }  
+  else {
+    $job_data = array();
+    $jid = 0;
   }
+  
   // Determine the BLAST program.
   $query_type = $form_state['build_info']['args'][0];
   $db_type = $form_state['build_info']['args'][1];
@@ -361,16 +363,14 @@ your sequence headers include pipes (i.e.: | ) they adhere to '
 
       $error = TRUE;
     }
-
   }
   // Otherwise, we are using one of the website provided BLAST databases so form the
   // BLAST command accordingly
   elseif ($form_state['dbFlag'] == 'blastdb') {
-
     $selected_db = $form_state['values']['SELECT_DB'];
     $blastdb_node = node_load($selected_db);
+    $blastdb_name = $blastdb_node->db_name;
     $blastdb_with_path = $blastdb_node->db_path;
-
   }
 
   // Now let each program process it's own advanced options.
@@ -382,6 +382,9 @@ your sequence headers include pipes (i.e.: | ) they adhere to '
       array($form, &$form_state)
     );
   }
+  else {
+  	$advanced_options = array('none' => 0);
+  }
 
   // Set BLAST db paths
   if ($mdb_type == 'nucl' && preg_match('/\.[pn]al/', $blastdb_with_path) == 0) {    
@@ -428,20 +431,20 @@ your sequence headers include pipes (i.e.: | ) they adhere to '
   
     $job_data[$job_id] = 
       array(
-        'program' => $blast_program,
-        'job_url' => current_path(),
-        'fasta' => $seq_content,
+        'program'   => $blast_program,
+        'job_url'   => current_path(),
+        'fasta'     => $seq_content,
         'query_def' => $query_def,
-        'db_name' => $blastdb_node->db_name,
+        'db_name'   => $db_name,
         'db_option' => $selected_db,
-        'options' => $advanced_options,
+        'options'   => $advanced_options,
       );
     
     variable_set('job_data', $job_data);
     //@deepaksomanadh create session and save the recent jobs in respective session
-    if (session_status() === PHP_SESSION_NONE){
-          session_start();
-      }
+    if (session_status() === PHP_SESSION_NONE) {
+       session_start();
+    }
     $sid = session_id();
     $job_encode_id = base64_encode($job_id);
     $job_url = "blast/report/$job_encode_id";
@@ -451,18 +454,23 @@ your sequence headers include pipes (i.e.: | ) they adhere to '
     $session_jobs = $all_jobs[$sid];
     $session_jobs[$job_id] = array(
                               'job_output_url'=> $job_url, 
-                              'query_defs' => $query_def,
-                              'program' => $blast_program,
+                              'query_defs'    => $query_def,
+                              'target'        => $blastdb_name,
+                              'program'       => $blast_program,
+                              'date'          => date('Y-M-d h:i:s'),
                              );
     $all_jobs[$sid] = $session_jobs;
     $_SESSION['all_jobs'] = $all_jobs;
   
-    tripal_jobs_launch(1, $job_id);
+//    tripal_jobs_launch(1, $job_id);
+    
     //Encode the job_id
     $job_encode_id = base64_encode($job_id);
+    
     // Redirect to the BLAST results page
     drupal_goto("blast/report/$job_encode_id");
   }
+  
   // We check if $error is set to TRUE because if so then the error has already
   // been reported.
   elseif (!$error) {

+ 20 - 19
theme/blast_report.tpl.php

@@ -1,12 +1,3 @@
-<script type="text/javascript">
-  window.onload = function() {
-    if (!window.location.hash) {
-      window.location = window.location + '#loaded';
-      window.location.reload();
-    }
-  }
-</script>
- 
 <?php
 
 /**
@@ -24,7 +15,7 @@ if ($blastdb->linkout->none === FALSE) {
   $linkout = TRUE;
   $linkout_regex = $blastdb->linkout->regex;
 //eksc- linkout vs gbrowse
-  if (isset($blastdb->linkout->db_id->urlprefix) AND !empty($blastdb->linkout->db_id->urlprefix)) {
+  if (isset($blastdb->linkout->db_id->urlprefix) && !empty($blastdb->linkout->db_id->urlprefix)) {
     $linkout_urlprefix = $blastdb->linkout->db_id->urlprefix;
 
     // Furthermore, check that we can determine the URL.
@@ -51,8 +42,15 @@ $no_hits = TRUE;
 
 ?>
 
-<!-- JQuery controlling display of the alignment information (hidden by default) -->
 <script type="text/javascript">
+  window.onload = function() {
+    if (!window.location.hash) {
+      window.location = window.location + '#loaded';
+      window.location.reload();
+    }
+  }
+
+  // JQuery controlling display of the alignment information (hidden by default)
   $(document).ready(function(){
 
     // Hide the alignment rows in the table
@@ -82,6 +80,7 @@ $no_hits = TRUE;
   <a href="<?php print '../../' . $tsv_filename; ?>">Tab-Delimited</a>,
   <a href="<?php print '../../' . $xml_filename; ?>">XML</a>
 </p>
+
 <!--  @deepaksomanadh: For displaying BLAST command details -->
 <table>
 <tr>
@@ -93,6 +92,7 @@ $no_hits = TRUE;
 <?php 
   // get input sequences from job_data variable
 
+echo "job data:<pre>";var_dump($job_id_data);echo "</pre>";
   $query_def = $job_id_data['query_def'];
   echo "<td>";
   echo "<ol>";
@@ -101,11 +101,8 @@ $no_hits = TRUE;
     echo  $row . "</li>";
   }
   echo "</ol></td>";
-  echo "<td>" .   $job_id_data['db_name'] . "</td>"
- ?> 
-
-
-<?php
+  echo "<td>" .   $job_id_data['db_name'] . "</td>";
+ 
   include_once("blast_align_image.php");
  
   //display the BLAST command without revealing the internal path
@@ -411,14 +408,18 @@ else {
 <strong> Recent Jobs </strong>
 <ol>
 <?php
+echo "<pre>";var_dump($job_id_data);echo "</pre>";
     $sid = session_id();  
     $jobs = $_SESSION['all_jobs'][$sid];
 
-    foreach ( $jobs as $job) {
+    foreach ($jobs as $job) {
+echo "<pre>";var_dump($job);echo "</pre>";
       echo "<li>";
       $q_def = !isset($job['query_defs'][0]) ? "Query" : $job['query_defs'][0];
-      echo "<a href='" . "../../" . $job['job_output_url'] ."' >"  
-              . $q_def ."->". $job['program'] . "</a>";
+      echo "
+        <a href='" . "../../" . $job['job_output_url'] ."'>
+          Q:$q_def, T:" . $job['target'] . ' (' . $job['program'] . ') - ' . $job['date'] . "
+        </a>";
       echo "</li>";
     }
 ?>