|  | @@ -1,238 +0,0 @@
 | 
	
		
			
				|  |  | -<?php
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -function blast_nucleotide_form($form, &$form_state) {
 | 
	
		
			
				|  |  | -  
 | 
	
		
			
				|  |  | -//Nucleotide BLAST
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$form['nBLAST'] = array(
 | 
	
		
			
				|  |  | -    '#type' => 'fieldset',
 | 
	
		
			
				|  |  | -    '#title' => t('Standard Nucleotide BLAST'),
 | 
	
		
			
				|  |  | -    '#collapsible' => TRUE, 
 | 
	
		
			
				|  |  | -    '#collapsed' => FALSE,  
 | 
	
		
			
				|  |  | -  );
 | 
	
		
			
				|  |  | -$form['nBLAST']['FASTA'] = array(
 | 
	
		
			
				|  |  | -    '#type' => 'textarea',
 | 
	
		
			
				|  |  | -    '#title' => t('Enter FASTA sequence(s)'),
 | 
	
		
			
				|  |  | -    '#description'=>t('Enter query sequence(s) in the text area.'),
 | 
	
		
			
				|  |  | -  );
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Upload a file as an alternative to enter a query sequence 
 | 
	
		
			
				|  |  | -$form['#attributes']['enctype'] = 'multipart/form-data';
 | 
	
		
			
				|  |  | -$form['nBLAST']['UPLOAD'] = array(
 | 
	
		
			
				|  |  | -  	'#prefix' => 'Or upload your query files:	',
 | 
	
		
			
				|  |  | -  	'#type' => 'file',
 | 
	
		
			
				|  |  | -  	'#description' => t('Please give a text a FASTA file, not a MS-Word or other document, you can upload up to 10 Mb.'),
 | 
	
		
			
				|  |  | -  );
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -//DATABASE//
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	$form['DB'] = array(
 | 
	
		
			
				|  |  | -    '#type' => 'fieldset',
 | 
	
		
			
				|  |  | -    '#title' => t('BLAST Assembled KnowPulse Genomes'),
 | 
	
		
			
				|  |  | -    '#collapsible' => TRUE, 
 | 
	
		
			
				|  |  | -    '#collapsed' => FALSE,  
 | 
	
		
			
				|  |  | -  );
 | 
	
		
			
				|  |  | -  
 | 
	
		
			
				|  |  | -//  //$options =  _DB_options(); 
 | 
	
		
			
				|  |  | -//  $form['DB']['SELECT_DB'] = array(
 | 
	
		
			
				|  |  | -//       '#type' => 'select',
 | 
	
		
			
				|  |  | -//       '#title' => t('KnowPulse Databases:'),
 | 
	
		
			
				|  |  | -//       '#options' => $options,
 | 
	
		
			
				|  |  | -//       '#default_value' => NULL,
 | 
	
		
			
				|  |  | -//   );
 | 
	
		
			
				|  |  | -  
 | 
	
		
			
				|  |  | -// Upload a file as an alternative to enter a query sequence 
 | 
	
		
			
				|  |  | -  $form['#attributes']['enctype'] = 'multipart/form-data';
 | 
	
		
			
				|  |  | -  $form['DB']['DBUPLOAD'] = array(
 | 
	
		
			
				|  |  | -  	'#prefix' => 'Or upload your own dataset:	',
 | 
	
		
			
				|  |  | -  	'#type' => 'file',
 | 
	
		
			
				|  |  | -  	'#description' => t('Please give a text or a FASTA file, not a MS-Word or other document, you can upload up to 10 Mb.'),
 | 
	
		
			
				|  |  | -  );
 | 
	
		
			
				|  |  | -  
 | 
	
		
			
				|  |  | -//Algorithm parameters
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	$form['ALG'] = array(
 | 
	
		
			
				|  |  | -    '#type' => 'fieldset',
 | 
	
		
			
				|  |  | -    '#title' => t('Algorithm parameters'),
 | 
	
		
			
				|  |  | -    '#collapsible' => TRUE, 
 | 
	
		
			
				|  |  | -    '#collapsed' => TRUE,  
 | 
	
		
			
				|  |  | -  );
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -//General parameters  
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  $form['ALG']['GParam'] = array(
 | 
	
		
			
				|  |  | -    '#type' => 'fieldset',
 | 
	
		
			
				|  |  | -    '#title' => t('General parameters'),
 | 
	
		
			
				|  |  | -    '#collapsible' => FALSE,
 | 
	
		
			
				|  |  | -  );
 | 
	
		
			
				|  |  | -  
 | 
	
		
			
				|  |  | -  $form['ALG']['GParam']['maxTarget'] = array(
 | 
	
		
			
				|  |  | -       '#type' => 'select',
 | 
	
		
			
				|  |  | -       '#title' => t('Max target sequences:'),
 | 
	
		
			
				|  |  | -       '#options' => array(
 | 
	
		
			
				|  |  | -          0 => t('10'),
 | 
	
		
			
				|  |  | -          1 => t('50'),
 | 
	
		
			
				|  |  | -          2 => t('100'),
 | 
	
		
			
				|  |  | -          3 => t('250'),
 | 
	
		
			
				|  |  | -          4 => t('500'),
 | 
	
		
			
				|  |  | -          5 => t('1000'),
 | 
	
		
			
				|  |  | -          6 => t('5000'),
 | 
	
		
			
				|  |  | -          7 => t('10000'),
 | 
	
		
			
				|  |  | -          8 => t('20000'),
 | 
	
		
			
				|  |  | -       ),
 | 
	
		
			
				|  |  | -       '#default_value' => 2,
 | 
	
		
			
				|  |  | -       '#description' => t('Select the maximum number of aligned sequences to display'),
 | 
	
		
			
				|  |  | -   );
 | 
	
		
			
				|  |  | -  
 | 
	
		
			
				|  |  | -  $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('Expect threshold'), 
 | 
	
		
			
				|  |  | -  '#default_value' => 10, 
 | 
	
		
			
				|  |  | -  '#size' => 12, 
 | 
	
		
			
				|  |  | -  '#maxlength' => 20, 
 | 
	
		
			
				|  |  | -  '#description' => t('Expected number of chance matches in a random model.'),
 | 
	
		
			
				|  |  | -);
 | 
	
		
			
				|  |  | -	
 | 
	
		
			
				|  |  | -	 $form['ALG']['GParam']['wordSize'] = array(
 | 
	
		
			
				|  |  | -       '#type' => 'select',
 | 
	
		
			
				|  |  | -       '#title' => t('Word size:'),
 | 
	
		
			
				|  |  | -       '#options' => array(
 | 
	
		
			
				|  |  | -          0 => t('16'),
 | 
	
		
			
				|  |  | -          1 => t('20'),
 | 
	
		
			
				|  |  | -          2 => t('24'),
 | 
	
		
			
				|  |  | -          3 => t('28'),
 | 
	
		
			
				|  |  | -          4 => t('32'),
 | 
	
		
			
				|  |  | -          5 => t('48'),
 | 
	
		
			
				|  |  | -          6 => t('64'),
 | 
	
		
			
				|  |  | -          7 => t('128'),
 | 
	
		
			
				|  |  | -          8 => t('256'),
 | 
	
		
			
				|  |  | -       ),
 | 
	
		
			
				|  |  | -       '#default_value' => 3,
 | 
	
		
			
				|  |  | -       '#description' => t('The length of the seed that initiates an alignment'),
 | 
	
		
			
				|  |  | -   );
 | 
	
		
			
				|  |  | -  
 | 
	
		
			
				|  |  | -$form['ALG']['GParam']['qRange'] = array(
 | 
	
		
			
				|  |  | -  '#type' => 'textfield', 
 | 
	
		
			
				|  |  | -  '#title' => t('Max matches in a query range'), 
 | 
	
		
			
				|  |  | -  '#default_value' => 0, 
 | 
	
		
			
				|  |  | -  '#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
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  $form['ALG']['SParam'] = array(
 | 
	
		
			
				|  |  | -    '#type' => 'fieldset',
 | 
	
		
			
				|  |  | -    '#title' => t('Scoring parameters'),
 | 
	
		
			
				|  |  | -    '#collapsible' => FALSE, 
 | 
	
		
			
				|  |  | -  );
 | 
	
		
			
				|  |  | -  
 | 
	
		
			
				|  |  | -  $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,
 | 
	
		
			
				|  |  | -       '#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('Linear'),
 | 
	
		
			
				|  |  | -          1 => t('Extension: 5 Extension: 2'),
 | 
	
		
			
				|  |  | -          2 => t('Extension: 2 Extension: 2'),
 | 
	
		
			
				|  |  | -          3 => t('Extension: 1 Extension: 2'),
 | 
	
		
			
				|  |  | -          4 => t('Extension: 0 Extension: 2'),
 | 
	
		
			
				|  |  | -          5 => t('Extension: 3 Extension: 1'),
 | 
	
		
			
				|  |  | -          6 => t('Extension: 2 Extension: 1'),
 | 
	
		
			
				|  |  | -          7 => t('Extension: 1 Extension: 1'),
 | 
	
		
			
				|  |  | -       ),
 | 
	
		
			
				|  |  | -       '#default_value' => 0,
 | 
	
		
			
				|  |  | -       '#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.'),
 | 
	
		
			
				|  |  | -   );
 | 
	
		
			
				|  |  | -  
 | 
	
		
			
				|  |  | -//Submit 
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  $form['submit'] = array(
 | 
	
		
			
				|  |  | -    '#type' => 'submit',
 | 
	
		
			
				|  |  | -    '#default_value' => ' BLAST ',
 | 
	
		
			
				|  |  | -  );
 | 
	
		
			
				|  |  | -  
 | 
	
		
			
				|  |  | -  return $form;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -function blast_nucleotide_form_validate($form, &$form_state) {
 | 
	
		
			
				|  |  | -   $fastaSeq = $form_state['input']['FASTA'];
 | 
	
		
			
				|  |  | -   dpm($form_state, $name = NULL);
 | 
	
		
			
				|  |  | -   if (isset($fastaSeq)) {
 | 
	
		
			
				|  |  | -      if(_validateFasta($fastaSeq)){
 | 
	
		
			
				|  |  | -          form_set_error('nBLAST', t('Error: Failed to read the Blast query: Wrong format provided for FASTA nucleotide sequence'));
 | 
	
		
			
				|  |  | -      } else {
 | 
	
		
			
				|  |  | -         //
 | 
	
		
			
				|  |  | -      }  
 | 
	
		
			
				|  |  | -   }
 | 
	
		
			
				|  |  | -   $upQuery = file_save_upload('UPLOAD', array('file_validate_extensions' => array('txt fasta fa fna')), FILE_EXISTS_RENAME);
 | 
	
		
			
				|  |  | -   if ($upQuery) {
 | 
	
		
			
				|  |  | -      $upQuery_uri = $upQuery->uri;
 | 
	
		
			
				|  |  | -      $upQuery_path = drupal_realpath($upQuery_uri);
 | 
	
		
			
				|  |  | -      $upQuery_content = file_get_contents($upQuery_path);
 | 
	
		
			
				|  |  | -      if(_validateFasta($upQuery_content)){
 | 
	
		
			
				|  |  | -          form_set_error('nBLAST', t('Error: Failed to upload the Blast query: Wrong format provided for FASTA nucleotide sequence'));
 | 
	
		
			
				|  |  | -      } else {
 | 
	
		
			
				|  |  | -         //
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -   }
 | 
	
		
			
				|  |  | -   
 | 
	
		
			
				|  |  | -   $upDB = file_save_upload('DBUPLOAD', array('file_validate_extensions' => array('txt fasta fa fna')), FILE_EXISTS_RENAME);
 | 
	
		
			
				|  |  | -   if ($upDB) {
 | 
	
		
			
				|  |  | -      $upDB_uri = $upDB->uri;
 | 
	
		
			
				|  |  | -      $upDB_path = drupal_realpath($upDB_uri);
 | 
	
		
			
				|  |  | -      $upDB_content = file_get_contents($upDB_path); 
 | 
	
		
			
				|  |  | -      if(_validateFasta($upDB_content)){
 | 
	
		
			
				|  |  | -          form_set_error('DB', t('Error: Failed to upload the Blast reference file: Wrong format provided for FASTA nucleotide sequence'));
 | 
	
		
			
				|  |  | -      } else {
 | 
	
		
			
				|  |  | -         //Build a Blast DB?
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -   }
 | 
	
		
			
				|  |  | -   
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -function blast_nucleotide_form_submit($form, &$form_state) {
 | 
	
		
			
				|  |  | -  //dpm($form_state['values'], $name = NULL);
 | 
	
		
			
				|  |  | -  //$output = shell_exec("water -asequence $aSeq -bsequence $selectedDB -gapopen 10 -gapextend 2 -outfile /tmp/$jobID.water ");
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -function _validateFasta($sequence) {
 | 
	
		
			
				|  |  | -	$fastaIdRegEx = '/^>.*(\\n|\\r)/';
 | 
	
		
			
				|  |  | -	$fastaSeqRegEx = '/[^acgntuACGNTU\n\r]/';
 | 
	
		
			
				|  |  | -	if ( preg_match($fastaSeqRegEx,$sequence) && !(preg_match($fastaIdRegEx,$sequence)) ) {
 | 
	
		
			
				|  |  | -      $flag = 1;
 | 
	
		
			
				|  |  | -  } else {
 | 
	
		
			
				|  |  | -   $flag = 0;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -	
 | 
	
		
			
				|  |  | -  return $flag;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -function _DB_options() {
 | 
	
		
			
				|  |  | -  $type = 'BLASTDB';
 | 
	
		
			
				|  |  | -  $nodes  = node_load_multiple(array(), array('type' => $type));
 | 
	
		
			
				|  |  | -  return $nodes;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -}
 |