110 likes | 222 Views
Amr and Lyman. A website using XAMPP apache that allows fasta inputs of proteins and search using BLASTP to retrieve similar proteins
E N D
A website using XAMPP apache that allows fasta inputs of proteins and search using BLASTP to retrieve similar proteins • It then extracts all ligands out of them and provide comprehensive information regarding the ligand which includes Image, SMILES, Structure, Formula and Chemical Name • The site also provide the ability to visualize those PDBs using VMD and create density map on the fly for them using Situs module in VMD. • The service can be extended in the future to provide more information
Steps: 1-Installing XAMPP (mainly here we want apache server and perl) 2-Installing Blast and formatting the PDB fasta files to be ready for dealing with as an input Database for BLAST. 3-Writing HMTL page that can allow uploading fasta file.
4-Writing CGI script which can do the following: • Run BLAST using the fasta query • Retrieve blast results as xml using qx • Parsing xml output ( differ if fasta query is single or multiple sequences) • Retrieve ligands using REST pdb service for each Protein • Filter ligands of no importance like metals .... • Retrieve information regarding each ligand like MWT, smiles, structure, formula and image using both PDB REST service and LigandEXPOwebsite. • Generate an output of all of these information as HTML page
Each protein retrieved from the blast run has button which on clicking trigger another CGI script that receive the PDB entry as an input for further manipulation. • The other CGI script will do the following : Download PDB file Open the PDB file using VMD Generate density map using Situsby creating TCL script and run them using VMD Visualize the density map using VMD
sub ligand { my ($ligand) = @_; #input PDB code my $site = "http://www.rcsb.org/pdb/rest/ligandInfo?structureId=$ligand"; my $agent = LWP::UserAgent->new(); my $content = $agent->get($site); #retrieve date from website corresponding to PDB code my $content2 = $content->as_string; $content2 =~ m|(<stru[\S\s]*>)|; #retrieve only the data between <struc and > my $parsed = XMLin($1); #parsing the XML retrieved return $parsed; }
my $blast = "blastp -query $filename -dbpdb -outfmt 5"; #the output is in xml format • my $output = qx{$blast}; • my $parsed = XMLin($output); # the Blast result is parsed
##$VAR1 = { # 'BlastOutput_query-ID' => 'Query_1', # 'BlastOutput_iterations' => { # 'Iteration' => [ <--------this array will disappear if we have only one query # iteration hash < ----------------{ 'Iteration_query-ID' => 'Query_1', # 'Iteration_hits' => { # 'Hit' => [ # { # 'Hit_id' => 'gnl|BL_ORD_ID|230409', # 'Hit_num' => '1',......}] # {'Iteration_query-ID' => 'Query_2',
print <<END_HTML; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <body> <form action="map.cgi" method="post" enctype="multipart/form-data"> <input type="hidden" name="hide" value="$hit->{'Hit_def'}"/> <p><input type="submit" name="Submit" value="PDB INFO" /></p> </form> </body> </html> END_HTML
sub image { my ($id) = @_; $id =~ m|(\w)|; my $link = "http://ligand-expo.rcsb.org/reports/$1/$id/$id.gif"; return $link; }