12 de diciembre de 2011

Sincronizando el Protein Data Bank

Hola,
para los que trabajamos de manera habitual con archivos del Protein Data Bank es muy conveniente tener acceso a la colección de estructuras en formato PDB. Ojo, necesitarás al menos unos 14Gb de disco, pero tendrás al  alcance de tu mano más de 77 mil estructuras de proteínas (y sus ligandos). La sección de descargas del PDB ofrece varias opciones, pero en mi opinión, si necesitas acceder desde tus programas a los archivos PDB sin supervisión, lo más eficiente es tener una copia local, lo que en la jerga se llama mirror o sitio espejo. Como el PDB se va actualizando semanalmente y no sólo se añaden entradas nuevas, si no que se van corrigiendo o completando estructuras antiguas, el proceso de sincronización no es tan sencillo como pudiera parecer. Es aquí donde nos salva la vida el software rsync, parte integrante de cualquier Linux moderno, que permite hacer estas actualizaciones de manera eficiente, y que fácilmente podemos añadir a un cron semanal:

 #!/usr/bin/perl -w   
 use strict;  
   
 my $PDBSERVER = 'rsync.wwpdb.org';  
 my $PDBPORT  = 33444;  
 my $LOCALPDBDIR = '/path/to/my/PDB/mirror/';  
 my $LOGFILE   = '/path/to/PDBmirror.log';  
   
 my $rsync_command = "/usr/bin/rsync -rlpt -v -z --delete --exclude=biounit ".  
      "--exclude=monomers --exclude=status --exclude=obsolete --exclude=models ".  
      "--exclude=mmCIF --exclude=nmr_restraints* --exclude=structure_factors " .  
   "--exclude=XML --exclude=XML-extatom --exclude=XML-noatom ".  
      "--port=$PDBPORT $PDBSERVER\::ftp_data/ $LOCALPDBDIR";  
   
 open(LOG,">$LOGFILE") || die "# $0 : cannot write to $LOGFILE\n";  
 open(RSYNC,"$rsync_command 2>&1 |") || die "# $0 : cannot execute $rsync_command\n";  
 while(<RSYNC>)  
 {  
   print LOG;   
   if(/rsync: failed to connect to/)  
   {  
       die "# $0 : error:\n$_\n";  
   }  
 }  
 close(RSYNC);  
 close(LOG);  

Un saludo, Bruno

1 comentario: