| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 | <?phpfunction 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;}
 |