/scripts/add_entry_v2
PHP | 631 lines | 511 code | 65 blank | 55 comment | 81 complexity | a0d4b3dcc0d7deb8ad7417862b486955 MD5 | raw file
- #!/usr/bin/php -q
- <?php
- include("viper_connect.php");
- include("fetch_info.php");
- include("cli_compatibility.php");
- function field_input($name, $default) {
- // if($default==NULL) $default="NA";
- print "$name [$default]: ";
- $value = trim(fgets(STDIN));
- if(!$value) $value = $default;
- return $value;
- }
- $admin_base_dir = "/usr/people/viperdb/www/html/Admin";
- system("clear");
- print "\nThis is add_entry. Always press enter for [default] value.\n\n";
- #$database = field_input("Database to use:", "viperdb");
- #$database = trim($database);
- $server= "viperdb";
- $result = @mysql_pconnect($server, "viperdbadmin", "ccmv1m4x");
- if(!$result) {
- print "Failed to connect to database $database.\n";
- exit();
- }
- $database = "viperdb";
- if(!mysql_select_db($database)) {
- print "Failed to select database $database.\n";
- exit();
- }
- print "Enter entry (PDB) id for new entry: ";
- $vdb = trim(fgets(STDIN));
- $vdb = strtolower($vdb);
- $query = "select entry_key from MMS_ENTRY where id = '$vdb'";
- $result = mysql_query($query);
- $entry_exists = mysql_num_rows($result);
- #if it exists delete?
- if($entry_exists){
- print " WARNING: Entry $vdb already is in the db.\n";
- print " The entry WILL BE DELETED if you press 'Enter'. Ctrl-C to quit.\n";
- fgets(STDIN);
- $delete_entry = field_input(" Are you sure you want to delete entry $vdb (Y|N)", "N");
- if($delete_entry=="Y"){
- $row = mysql_fetch_array($result);
- $entry_key = $row[0];
- mysql_free_result($result);
- $cmd="./delete_entry.pl -d $database -e $entry_key";
- system($cmd);
- }
- else{ print "\nThank you for using add_entry\n";exit(); }
- }
- #if it doesn't exist create
- else{
- print " Entry $vdb is new\n";
- }
- $cmd="./pdbase_batch $vdb";
- print "\n Creating it in db: '$cmd'\n";
-
- $output = array();
- $return_var = 0;
- $failed=0;
- exec($cmd, $output, $return_var);
- //echo "\n return val: $return_var\n"; /* 126 */
- foreach($output as $o){
- echo "$o\n";
- $string = "FAILED";
- $container = $o;
- if(strstr($container,$string)) {
- $failed=1;
- } else {
- }
- }
- if($failed){ print "\n\nSorry, something seems to have failed.\n\n"; exit();}
- $result = mysql_query($query);
- $row = mysql_fetch_array($result);
- $entry_key = $row[0];
- mysql_free_result($result);
- print " New entry key: $entry_key\n\n";
- #------------------ viper table ---------------------
- #$pdb = field_input("PDB ID", NULL);
- $pdb = field_input("PDB ID", $vdb);
- $name = field_input("Name", fetchName($entry_key));
- $pubmed = field_input("Pubmed ID", fetchCitation($entry_key, $pdb));
- update_STRUCT_REF($entry_key);
- $taxa = fetchTaxa($entry_key);
- $taxinfo = split_taxastring($taxa);
- if(isset($taxinfo['genome']))
- $genome = field_input("\nGenome", $taxinfo['genome']);
- else {
- print " ... no accession code or server error ...";
- $genome = field_input("\nGenome", "NA");
- }
- if(isset($taxinfo['family']))
- $family = field_input("Family", $taxinfo['family']);
- else $family = field_input("Family", "NA");
- if(isset($taxinfo['genus']))
- $genus = field_input("Genus", $taxinfo['genus']);
- else $genus = field_input("Genus", "NA");
- print "Enter comma separated list of know hosts for this entry\n";
- print "Possible options include: Plant,Archea,Yeast,Bacteria,Insect,Animal,etc.\n";
- $hosts = field_input("Hosts", "NA");
- $resolution = field_input("Resolution", fetchResolution($entry_key));
- $serotype = field_input("Serotype (0 if unique, else 1)", 0);
- if($serotype) {
- //$unique_relative_id = field_input("Unique Relative ID", NULL);
- $unique_relative_id = field_input("Unique Relative ID", "NA");
- }
- else{
- $unique_relative_id = $vdb;
- }
- //$lattice = field_input("Lattice", NULL);
- $lattice = field_input("Lattice", "NA");
- $layers = field_input("Layers", 1);
- // Deposition date extracted from PDB website
- print "\nDo you want me to get the deposition date from the PDB website?\n";
- $fetch_depo_date = field_input("(Y|N)", "Y");
- if($fetch_depo_date == "Y"){
- $cmd="./get_deposition_date.sh ".$vdb."|grep '>>'|awk '{print $2}'";
- //print $cmd;
- $date=system($cmd);
- }
- else {
- print "Then please check http://www.rcsb.org/pdb/explore/explore.do?structureId=$vdb\n";
- $date="NA";
- }
- $date=field_input("Deposition Date", $date);
- system("clear");
- print "\nThank you. Now select an option:\n";
- print " [1] Use viperize to generate PDB to VIPER matrix\n";
- print " [2] Read PDB to VIPER matrix from viper.mtx (file must exist)\n";
- print " [3] Use Unit Matrix\n";
- $use_viperize=field_input("default ", 1);
- $matrix = array();
- switch($use_viperize){
- case 1:
- exec("/var/www/html/Admin/viperize /var/www/html/Viperdb/Entries/pdb/$vdb.pdb", $matrix);
- break;
- case 2:
- exec("/bin/cat viper.mtx", $matrix);
- break;
- case 3:
- exec("/bin/cat unit.mtx", $matrix);
- break;
- }
- print "$matrix[0]\n$matrix[1]\n$matrix[2]\n";
- $line1 = preg_split("/\s+/", trim($matrix[0]));
- $line2 = preg_split("/\s+/", trim($matrix[1]));
- $line3 = preg_split("/\s+/", trim($matrix[2]));
- print "\nPDB to VIPER matrix used is: \n";
- print "$line1[0] $line1[1] $line1[2]\n";
- print "$line2[0] $line2[1] $line2[2]\n";
- print "$line3[0] $line3[1] $line3[2]\n";
- print "$line1[3] $line2[3] $line3[3]\n";
- print "\nYou might want to check if this matrix gives the right VIPERdb orientation.\nUse it to transform the original PDB coordinates and look at the final structure.\nPress enter to continue. ";
- fgets(STDIN);
- #-------------------- layer and layer_chain --------------
- $tnumbers = array();
- $layer_names = array();
- $layer_ids = array();
- $sub_names = array();
- $min_ds = array();
- $ave_ds = array();
- $max_ds = array();
- $chain_key = array();
- $is_T3=0;
- $correct_T3="N";
- $i = 0;
- while($i < $layers) {
- $this_layer=$i+1;
- system("clear");
- print "\nInformation for layer $this_layer:\n";
- $tnumbers[$i] = field_input("T-Number (i.e. 1,3,pT3,etc)", 1);
- if($tnumbers[$i]==3)$is_T3=1;
- if($layers > 1) {
- if($this_layer == 1) {
- $defname = "inner";
- $defid = $vdb."_inner";
- }
- else {
- $defname = "outer";
- $defid = $vdb."_outer";
- }
- $layer_names[$i] = field_input("Layer Name (outer/inner)", $defname);
- $layer_ids[$i] = field_input("Layer ID (i.e. 1EJ6_INNER)", $defid);
- $sub_names[$i] = field_input("Subunit Name (i.e. VP7)", "NA");
- }
-
- #print possible chain options
- print "\nAssociate current layer with one or more entities listed below: \n";
- $results = mysql_query("select entity_key, type, pdbx_description, pdbx_fragment from ENTITY where entry_key='$entry_key'");
- $num_rows = mysql_num_rows($results);
- if($num_rows > 0) {
- $ent_tmp="";
- while($row = mysql_fetch_array($results)) {
- print "-- $row[entity_key] : $row[type], $row[pdbx_description]\n";
- $ent_tmp .= $row['entity_key'] . " ";
- }
- $entities_r = field_input("Entities (select #'s from above)", rtrim($ent_tmp));
- $entities = preg_split("/\s+/", trim($entities_r));
- $chain_key[$i] = $entities;
- $i++;
- }
- else {
- print "WARNING: Something wrong happened, couldn't find an entity_key for entry_key $entry_key layer $i\n";
- }
- }
- if($is_T3) $correct_T3 = field_input("Correct for T3 (Y|N)", "N");
- if($correct_T3 == "Y"){
- # VMAT CORRECTION for T=3 Entries
- $m1[0]= 0.30902; $m1[1]= 0.80902; $m1[2]=-0.50000;
- $m2[0]=-0.80902; $m2[1]= 0.50000; $m2[2]= 0.30902;
- $m3[0]= 0.50000; $m3[1]= 0.30902; $m3[2]= 0.80902;
- # 0.000000000 0.000000000 0.000000000
- $ret1[0] = $m1[0]*$line1[0]+$m1[1]*$line2[0]+$m1[2]*$line3[0];
- $ret1[1] = $m1[0]*$line1[1]+$m1[1]*$line2[1]+$m1[2]*$line3[1];
- $ret1[2] = $m1[0]*$line1[2]+$m1[1]*$line2[2]+$m1[2]*$line3[2];
- $ret2[0] = $m2[0]*$line1[0]+$m2[1]*$line2[0]+$m2[2]*$line3[0];
- $ret2[1] = $m2[0]*$line1[1]+$m2[1]*$line2[1]+$m2[2]*$line3[1];
- $ret2[2] = $m2[0]*$line1[2]+$m2[1]*$line2[2]+$m2[2]*$line3[2];
- $ret3[0] = $m3[0]*$line1[0]+$m3[1]*$line2[0]+$m3[2]*$line3[0];
- $ret3[1] = $m3[0]*$line1[1]+$m3[1]*$line2[1]+$m3[2]*$line3[1];
- $ret3[2] = $m3[0]*$line1[2]+$m3[1]*$line2[2]+$m3[2]*$line3[2];
- $ret1[3] = $m1[0]*$line1[3]+$m1[1]*$line2[3]+$m1[2]*$line3[3];
- $ret2[3] = $m2[0]*$line1[3]+$m2[1]*$line2[3]+$m2[2]*$line3[3];
- $ret3[3] = $m3[0]*$line1[3]+$m3[1]*$line2[3]+$m3[2]*$line3[3];
- $line1[0]=$ret1[0];
- $line1[1]=$ret1[1];
- $line1[2]=$ret1[2];
- $line1[3]=$ret1[3];
- $line2[0]=$ret2[0];
- $line2[1]=$ret2[1];
- $line2[2]=$ret2[2];
- $line2[3]=$ret2[3];
- $line3[0]=$ret3[0];
- $line3[1]=$ret3[1];
- $line3[2]=$ret3[2];
- $line3[3]=$ret3[3];
- print "\n\n-- VMAT CORRECTION done:\n\n";
- print "$line1[0] $line1[1] $line1[2]\n";
- print "$line2[0] $line2[1] $line2[2]\n";
- print "$line3[0] $line3[1] $line3[2]\n";
- print "$line1[3] $line2[3] $line3[3]\n";
- }
- else print "\n\n-- No T=3 VMAT CORRECTION made\n";
- print "\n\nPress 'Enter' to continue\n";
- fgets(STDIN);
- system("clear");
- print "\nChecking for changes in chain IDs:\n";
- # check if chain id's have changed from cif file (this info is already in the database)
- $chain_ID_changed = 0;
- $q = "select distinct auth_asym_id,label_asym_id,pdbx_description from ATOM_SITE,ENTITY where ATOM_SITE.entry_key = ENTITY.entry_key and label_entity_key = entity_key
- and ATOM_SITE.entry_key = $entry_key and label_asym_id is not NULL";
- $result = mysql_query($q);
- $num_rows = mysql_num_rows($result);
- echo "\n\n$num_rows rows returned:\n\n";
- while($row = mysql_fetch_array($result)){
- $auth=$row['auth_asym_id'];
- $label=$row['label_asym_id'];
- $descr=$row['pdbx_description'];
- if ($auth != $label) {
- $chain_ID_changed = 1;
- print "\nWARNING!!";
- print "\nOriginal chain ID $auth ($descr) found in PDB HAS BEEN CHANGED in CIF File to $label,\n";
- print "\nNOTE: As a standard procedure, WATER asym_id HAS to be set as 'W' and METALS to 'M'. If this was not done automatically, please do it manually now.\n\n";
- print "What do you want me to do?:\n";
- print " [1] Change it back to $auth\n";
- print " [2] Provide your own label\n";
- print " [3] It's fine, I know what I'm doing.\n";
- $asym_id_changed=field_input("default ", 1);
- switch($asym_id_changed){
- case 1:
- $cmd="./rename_chain.pl $entry_key A $auth $auth";
- system($cmd);
- break;
- case 2:
- $new_label=field_input("Enter new Label ", "W");
- $cmd="./rename_chain.pl $entry_key A $auth $new_label";
- system($cmd);
- break;
- case 3:
- print "I hope you're right... left as is.\n\n";
- break;
- }
- }
- else {
- print "Chain ID $auth: ($descr) --No change found\n";
- }
- }
- print "\nPress 'Enter' to continue\n";
- fgets(STDIN);
- #----------------------------------------------------------------------------
- system("clear");
- #insert entry into database
- print "\nWe are ready to insert data into viperdb. Press 'Enter', or 'Ctrl+C' to quit.\n";
- fgets(STDIN);
- #insert viper
- $query =
- "INSERT INTO viper (
- entry_key, entry_id, name, genome, genus, family, host,
- serotype, unique_relative_id, layers, matrix_0_0, matrix_0_1,
- matrix_0_2, matrix_1_0, matrix_1_1, matrix_1_2, matrix_2_0,
- matrix_2_1, matrix_2_2, vector_0, vector_1, vector_2,
- times_viewed,private
- )
- VALUES(
- '$entry_key', '$vdb', '$name', '$genome', '$genus', '$family','$hosts',
- '$serotype', '$unique_relative_id', '$layers', $line1[0],
- $line1[1], $line1[2], $line2[0], $line2[1], $line2[2], $line3[0],
- $line3[1], $line3[2], $line1[3], $line2[3], $line3[3],
- 0,0
- )";
- $results = mysql_query($query);
- if(!$results) {
- print "\n\n\nERROR: Insert failed. " .mysql_error(). "\n\n\n";
- exit();
- }
- #update possible NULL fields
- if($pdb) {
- $query = "UPDATE viper SET pdb_id='$pdb' where entry_key='$entry_key'";
- mysql_query($query);
- }
- if($pubmed) {
- $query = "UPDATE viper SET pubmed_id='$pubmed' where entry_key='$entry_key'";
- mysql_query($query);
- }
- if($lattice) {
- $query = "UPDATE viper SET lattice='$lattice' where entry_key='$entry_key'";
- mysql_query($query);
- }
- if($resolution) {
- $query = "UPDATE viper SET resolution='$resolution' where entry_key='$entry_key'";
- mysql_query($query);
- }
- mysql_query("UPDATE MMS_ENTRY SET deposition_date='".$date."' WHERE id='".$vdb."'")
- or die(mysql_error());
- #flag entry obsolete, so it doesn't show up until ready
- $query = "update viper set supercede='1' where entry_key='$entry_key'";
- mysql_query($query);
- #insert layer
- $i = 0;
- while($i < $layers) {
- //Make a third, "complete" layer
- if ($layers == 2) {
- $layers ++;
- }
-
- $this_layer=$i+1;
- if ($i == 2) {
- $query = "INSERT INTO layer (entry_key, entry_id) VALUES ('$entry_key','$vdb')";
- array_push($layer_names,"complete");
- array_push($layer_ids,"$vdb"."_COMPLETE");
- array_push($sub_names,"");
- }
- else {
- $query = "INSERT INTO layer (entry_key, entry_id, tnumber) VALUES('$entry_key','$vdb','$tnumbers[$i]')";
- }
- //On the complete layer, insert only a certain amount of information
- mysql_query($query);
- #find layer key
- #The ordering is required to ensure that layers are given unique keys.
- $query = "select layer_key from layer where entry_key='$entry_key' order by layer_key DESC";
- $result = mysql_query($query);
- $row = mysql_fetch_array($result);
- $layer_key = $row[0];
- #possible null fields
- if(isset($layer_names[$i])) {
- $query = "UPDATE layer SET layer_name='$layer_names[$i]' where entry_key='$entry_key' && layer_key=$layer_key";
- mysql_query($query);
- $layer[$i]=$layer_names[$i];
- }
- if(isset($layer_ids[$i])) {
- $query = "UPDATE layer SET layer_id='$layer_ids[$i]' where entry_key='$entry_key' && layer_key=$layer_key";
- mysql_query($query);
- # $layer[$i]=$layer_ids[$i];
- }
- if(isset($sub_names[$i])) {
- $query = "UPDATE layer SET subunit_name='$sub_names[$i]' where entry_key='$entry_key' && layer_key=$layer_key";
- mysql_query($query);
- # $layer[$i]=$sub_names[$i];
- }
- #insert layer_chain
- if($i != 2) {
- $j = 0;
- while($j < count($chain_key[$i])) {
- $ch = $chain_key[$i][$j];
- $query = "INSERT INTO layer_chain (layer_chain_key, layer_key,
- entry_key, entry_id)
- VALUES($ch, $layer_key, $entry_key, '$vdb')";
- //print "$query\n";
- //print_r($chain_key);
- //print_r($chain_key[$i][$j]);
- mysql_query($query);
- $j++;
- }
- }
- print "\nCalculating diameters";
- #create the vdb file for this layer
- #$outfile = "/var/www/html/VDB/$vdb.vdb";
- #$outfile = "/var/www/html/VDB/$vdb"."_"."$layer[$i].vdb";
- $outfile = "/var/www/html/VDB/$vdb.vdb";
- if($layers > 1 && ($i != 2)) {
- echo "\n\nlayer_key=$layer_key was assigned to layer $layer[$i]. \n\n";
- $outfile = "/var/www/html/VDB/$vdb"."_"."$layer[$i].vdb";
- system("/var/www/html/Viperdb/$database"."_prot_na_pdb.pl -entry $vdb -layer $layer[$i] -o $outfile");
- }
- else {
- system("/var/www/html/Viperdb/$database"."_prot_na_pdb.pl -entry $vdb -o $outfile");
- }
- unset($diameters_r);
- exec("/var/www/html/Admin/diameters.pl $outfile", $diameters_r);
- $diameters = explode(" ", trim($diameters_r[0]));
- $min_ds[$i] = $diameters[0];
- $ave_ds[$i] = $diameters[1];
- $max_ds[$i] = $diameters[2];
- #echo "\n\nLayer $layer_ids[$i] in $outfile: Min $min_ds[$i], AVG $ave_ds[$i], Max $max_ds[$i]. Updating db with layer_key=$layer_key.\n\n";
- echo "\n\nLayer in $outfile: Min $min_ds[$i], AVG $ave_ds[$i], Max $max_ds[$i]. Updating db with layer_key=$layer_key.\n\n";
- $query = "UPDATE layer SET min_diameter='$min_ds[$i]', ave_diameter='$ave_ds[$i]', max_diameter='$max_ds[$i]' where entry_key='$entry_key' && layer_key=$layer_key";
- mysql_query($query);
- $i++;
- }
- # reset the amount of layers.
- if ($layers == 3){
- echo"layercheck";
- # $layers = 2;
- }
- # find out how many and what are the chains
- $q = "select distinct label_asym_id from ATOM_SITE where ATOM_SITE.entry_key = $entry_key and label_asym_id is not NULL";
- $result = mysql_query($q);
- $num_chains = mysql_num_rows($result);
- echo "\n\n$num_chains chains found\n\n";
- $list_of_chains="";
- $my_chains = array();
- $i=0;
- while($row = mysql_fetch_array($result)){
- $i++;
- $my_chains[$i]=$row['label_asym_id'];
- $list_of_chains .= $my_chains[$i] . ", ";
- #print "$i, $my_chains[$i]";
- }
- #print $list_of_chains;
- $chain_moved=0;
- $move_chain = "Y";
- $move_all = "Y";
- while($move_chain=="Y" || $move_chain=="y"){
- $move_chain = field_input("Do you want to move a chain before proceding? (Y|N)", "N");
- if($move_chain=="Y" || $move_chain=="y"){
- $chain_moved=1;
- if($move_all=="Y" || $move_all=="y"){
- $move_all = field_input("Do you want to move all chains at once? (Y|N)", "N");
- if($move_all=="N" || $move_all=="n") {
- print "\n Continue with individual chains \n\n";
- }
- else if($move_all=="Y" || $move_all=="y") {
- $new_place = field_input("Choose Transformation Matrix (1-60) ", "1");
- print "Moving chain ";
- for($i=1;$i<=$num_chains;$i++) {
- print "$my_chains[$i], ";
- $cmd="./move_chain.pl $vdb $my_chains[$i] $new_place";
- system($cmd);
- }
- print "\n\nDone moving all chains.\n\n";
- break;
- }
- else {
- print " ERROR!! I dont recognize option $move_all\n\n\n";
- exit;
- }
- }
- $chain_to_move = field_input("Input Chain ID ($list_of_chains) ", "A");
- $new_place = field_input("Choose Transformation Matrix (1-60) ", "1");
- $cmd="./move_chain.pl $vdb $chain_to_move $new_place";
- system($cmd);
- print "Done moving chain $chain_to_move using transformation matrix $new_place.\n\n";
- }
- }
- # system("clear");
- if($chain_moved){
- print "\nI need to re-create the vdb file\n";
- $outfile = "/var/www/html/VDB/$vdb.vdb";
- system("/var/www/html/Viperdb/$database"."_prot_na_pdb.pl -entry $vdb -o $outfile");
- }
- $skip_entry_analysis = field_input("Do you want to skip the analysis for: $vdb (Y|N)", "N");
- $cmd="./new_entry.awk $vdb ";
- for ($i = 0; $i < ($layers-1); $i++) {
- $cmd .= $vdb.'_'.$layer_names[$i]." ";
- }
- if (strtolower($skip_entry_analysis) == 'y') {
- $cmd .= "yes";
- print "\n\n Press 'Enter' to proceed with image creation ($cmd) or 'Ctrl+C' to quit. \n\n";
- }
- else {
- print "\n\n Press 'Enter' to procede with analysis ($cmd) or 'Ctrl+C' to quit.\n\n";
- }
- fgets(STDIN);
- system($cmd);
- fgets(STDIN);
- system("clear");
- # -------------
- # blur.sh and do_image are run once for every kind of entry
- # -------------
- # fgets(STDIN);
- # #system("cd "$admin_base_dir);
- # system("clear");
- # $cmd="./blur.sh $vdb";
- # print "\n\n Press 'Enter' to proceed with image creation ($cmd) or 'Ctrl+C' to quit.\n\n";
- # fgets(STDIN);
- # system($cmd);
- #
- # fgets(STDIN);
- # #system("cd "$admin_base_dir);
- # system("clear");
- # $cmd="./do_image $vdb";
- # print "\n\n Press 'Enter' to proceed with image creation ($cmd) or 'Ctrl+C' to quit.\n\n";
- # fgets(STDIN);
- # system($cmd);
- $i=0;
- $current_layer = $vdb;
- while ($i < $layers){
- if ($layer_names && ($layer_names[$i] == 'complete')) {
- $current_layer = $vdb;
- }
- else {
- $current_layer = $vdb." ".$layer_names[$i];
- }
- system("clear");
- $cmd = "./blur_v2.sh $current_layer";
- print "\n\n Press 'Enter' to proceed with layer image creation ($cmd) or 'Ctrl+C' to quit.\n\n";
- fgets(STDIN);
- system($cmd);
- fgets(STDIN);
- system("clear");
- $cmd = "./do_image_v2 $current_layer";
- print "\n\n Press 'Enter' to proceed with layer image creation ($cmd) or 'Ctrl+C' to quit.\n\n";
- fgets(STDIN);
- system($cmd);
- $i++;
- }
- $is_user_submitted = field_input("Is this an User Submitted Entry? (Y|N)", "N");
- if($is_user_submitted=="N" || $is_user_submitted=="n"){
- $query = "UPDATE viper SET supercede=NULL where entry_id='$vdb'";
- mysql_query($query);
- print "\nDB 'supercede' has been updated to NULL\n";
- }
- else print "\nNo need to update DB 'supercede'\n";
- print "\n\n That's all.\n\n";
- ?>