sábado, febrero 28, 2009

Gráfico "científico"

Siempre me gustaron los gráficos científicos, me refiero a los que salen en revistas como Nature, Science, PNAS, etc. Por lo general usan SigmaPlot, MathCad y esas cosas, aunque a veces se puede ser un Excel (y suele quedar horrible). En este caso me tocó hacer un gráfico "a mano", esto es, sin usar ningún programa de terceros, sino lo hice yo. La idea era representar uno de estos eventos una alineamiento de 2 secuencias nucleotidicas: Mutacion, Inserción y Deleción. Las mutaciones (cambio de un nucleotido a otro) se tiene que representar por una barra de un color segun el nucleotido. Las inserciones y deleciones son barras grises con un tamaño y orientación en función de la magntud del evento.

Los datos los tenia que sacar de planillas, como por ejemplo esta: Planilla 36

Muestro esa porque el siguiente gráfico tiene (entre otras) a la barra generada en base a esa planilla:

Gráfico de comparación de secuencias nucleotidicas

Aqui está el código, es el que produjo esto, pero no es final porque aun quedan hacer algunas modificaciones con respecto al orden de las figuras, pero no con los graficos en si.



#!/home/user/MMC-SD/partition1/py252/bin/python

import xlrd
import glob
#f_inXLS = '/home/sbassi/bioinfo/INTA/ejemploSNPs.xls'
#outfile = '/tmp/out.svg'
outfile = '/mnt/hda2/all.svg'
f_inXLS = 'ejemplo SNPs.xls'

outfh = open(outfile,'w')

svgini = '''<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="4000" height="1000" version="1.1"
xmlns="http://www.w3.org/2000/svg">'''
svgend = '</svg>'

def grafica
(xlsfin,outfh,j,tdetodos):
book = xlrd.open_workbook(xlsfin)
sh = book.sheet_by_index(0)
datos = []
largototal = sh.nrows
for rx in
range(1,largototal):
n_orden = int(sh.row(rx)[0].value)
color = ''
signo = '+'
valor = 1
if sh.row(rx)[1].value == 1:
color = 'red'
elif sh.row(rx)[2].value == 1:
color = 'green'
elif sh.row(rx)[3].value == 1:
color = 'blue'
elif sh.row(rx)[4].value == 1:
color = 'black'
if sh.row(rx)[5].value != 0:
valor = abs(int(sh.row(rx)[5].value))
signo = '+' if sh.row(rx)[5].value>0 else '-'
color = 'grey'
elif sh.row(rx)[6].value != 0:
valor = abs(int(sh.row(rx)[6].value))
signo = '+' if sh.row(rx)[6].value>0 else '-'
color = 'grey'
elif sh.row(rx)[7].value != 0:
valor = abs(int(sh.row(rx)[7].value))
signo = '+' if sh.row(rx)[7].value>0 else '-'
color = 'grey'
elif sh.row(rx)[8].value != 0:
valor = abs(int(sh.row(rx)[8].value))
signo = '+' if sh.row(rx)[8].value>0 else '-'
color = 'grey'
if not color:
color = 'white'
datos.append((n_orden, color, valor, signo))
print 'largototal',largototal
print
'tdetodos',tdetodos
outfh.write
('<g transform="translate(%s,%s)">\n'%
(((tdetodos)),j*50))
tdetodos += largototal+20
outfh.write('<text style="font-size:12;font-weight:bold;\
font-family:Consolas;fill:black" x="100" \
y="175" >
%s</text>'%(xlsfin))
outfh.write('<line x1="100" y1="150" x2="%s" y2="150" \
style="stroke:black;stroke-width:1"/>\n'
%
(100+largototal))
#out += htmlini
multiplic_alto = 5
for dato in datos:
#print dato
x = 100+dato[0]
#h = 10
if dato[3]=='+':
y = 150-(dato[2]*multiplic_alto)
h = 150-y
else
:
y = 150
h = multiplic_alto*dato[2]
if dato[1]!='white':
outfh.write('<rect x="%s" y="%s" width="1" \
height="
%s" style="fill:%s;stroke-width:0"/>\n'
% (x,y,h,dato[1]))
outfh.write('</g>\n')
return outfh,tdetodos

outfh.write
(svgini)
i = 0
j = 0
tdetodos = 0
for fn in glob.glob('*.xls'):
if 'ejemplo' not in str(fn) and 'my' not in str(fn):
#print ' a'
print fn
outfh, tdetodos
= grafica(fn,outfh,j,tdetodos)
i+=1
if i==5:
i=0
tdetodos = 0
j+=1


outfh.write
(svgend)
outfh.close()

Etiquetas: ,

jueves, febrero 26, 2009

Prueba, no molestar!

Probando meter codigo, si funciona pondré algo coherente (o al menos lo intentaré).


from __future__ import with_statement
from Bio import SeqIO, SeqRecord, Seq

#para planillas html de Laura
ain='/mnt/hda2/bio/cln.txt'

cln=set()
with open(ain) as f:
for line in f:
cln.add(line[:-1])
#print line,

#sco esas del fasta y las pongo en otro fasta.
#recorro el fasta
i = 0
fasta69 = []
for record in SeqIO.parse(open('/mnt/hda2/bio/bacs.v247.seq'), "fasta") :
if record.id in cln:
fasta69.append(record)

with open('/mnt/hda2/bio/fasta69.txt','w') as outf:
SeqIO.write(fasta69,outf,"fasta")


Etiquetas: ,

lunes, febrero 16, 2009

Frente a la comisaria


Frente a la comisaria
Originally uploaded by sbassi
Esta foto mia salió hoy en La Nación, la envié hace como un mes a la sección de "Soy Corresponsal" y ahora la han publicado.

domingo, febrero 15, 2009

Salsa BBQ


Salsa BBQ
Originally uploaded by sbassi
Esta es la salsa barbacoa (BBQ), ideal para carne de pollo y cerdo. La receta:


Ingredientes:

Tomates (1/2 litro)
2 o 3 cucharadas de azucar negra
1 cucharada de miel
salsa de soja
jugo de 1 naranja
1 cucharada de mostaza
1 cucharada de salsa Tabasco
ajo dorado en manteca y aceite

Se hace el ajo en la manteca y aceite y luego se mezclan los demas ingredientes. Hay que dejar calentar a fuego medio hasta hervor. Luego a fuego minimo hasta que esté espeso con la consistencia que les guste. Apagar y dejar enfriar antes de poner en el recipiente (frasco de ketchup por ejemplo).

Etiquetas: , ,

jueves, febrero 12, 2009

Asambleistas: A protestar a Google!

Google Buys ? A Paper Mill? - washingtonpost.com

Google se compró una papelera en Finlandia. ¿Protestarán los asambleistas en frente de Google?

En realidad parece que usarán las instalaciones como datacenter :). Probablemenete con el frio que hace alli se ahorren refrigerar los equipos, que no es un costo menor en los grandes datacenters. Se comentaba que por eso se iban a instalar en Islandia, pero quizas por los problemas derivados de la crisis cambiaron de planes. Si no sabes de que estoy hablando, mirá este post sobre Islandia.

miércoles, febrero 11, 2009

Saudi judge sentences pregnant gang-rape victim to 100 lashes for committing adultery | Mail Online

Saudi judge sentences pregnant gang-rape victim to 100 lashes for committing adultery | Mail Online


En Arabia Saudita 5 tipos violan a una chica, la embarazan y luego al intentar abortar la multan (a la victima) con 100 latigazos por "adulterio" (aunque no estaba casada).

No es la primera vez que pasa ni será la última. A pesar de esto todavia hay gente que dice que hay que respetar todas las culturas.

¿Quien cumple años mañana?

dsc01050

Les recomiendo el último número de "National Geographic en español" que trae un articulo sobre Evolución, tanto "clasica" como "molecular". Cuesta solo $8.5, un precio de regalo considerando que te sirve por muchos años mientras que revistas descartables tipo "Pronto" cuestan lo mismo o mas. Vi que tenia una nota sobre como hacen para escaparse desde Corea del Norte al su vecino del sur (via China y otros paises).

dsc01012

Etiquetas:

martes, febrero 10, 2009

Como obtener el register.com auth code

Tenia un dominio registrado en Register.com. Dicho registrador es el mas caro de todos. Algunos se preguntarán porque se me ocurrió registrar un dominio ahi, sabiendo que era el mas caro del planeta. Register.com suele ser usado por quienes no tienen experiencia y compran lo primero que ven. Muchos han registrado ahi tambien cuando no habia otro lugar para hacerlo (y cobraban como u$100 al año). Pero la gran mayoria de ellos se mudaron a otros registradores mas baratos, ya que Register.com no ofrece nada distinto para justificar la diferencia de precio. Salvo por ahi la atención telefonica, cosa que rara vez hace falta. Justamente lo que voy a contar ahora es sobre como dicha "atención" es mas una carga que un beneficio. Con respecto a porque tenia un dominio ahi, es por una oferta donde me daban un dominio gratis por un año. El único "inconveniente" era recibir cada tanto algun spam de register.com ofreciendo servicios para ese dominio, asi que era bastante inocuo. Tambien me pidieron la tarjeta de credito, pero le di una que vencia antes del año asi que cuando se acabe el plazo no la podrian usar para renovar el registro.
Ahora que se aproxima la fecha de vencimiento y para evitar pagar como u$20 de renovación, decidí transferir el dominio a Godaddy.com donde me cobran u$8 al año.
Para transferir el dominio, Godaddy me pide un "Authorization Code" que me lo tiene que el registrador anterior (register.com). Voy a mi cuenta en Register.com y veo un cartel que dice que para obtener un "auth code" que llame a un numero gratuito en USA para solicitarlo:

Register.com customer's may obtain their authorization code by contacting us at the following numbers, between the hours of 8am-6pm EST/EDT Monday to Friday:
Toll free within the U.S. and Canada: (877) 866-0045
Outside the U.S. and Canada: (902) 749-2056
Llamé ayer (usando Skype), me atienden, me hacen esperar y luego me dicen que se pasó la hora. Aunque llamé dentro del horario pero me atendieron mas tarde porque me hicieron esperar 10 minutos. OK, hoy volvi a llamar con varias horas de anticipación al horario de cierre. Todo bien, me atienden y me preguntan para que llamo y cuando les digo que es para obtener el "auth code" me dice que hay 11 minutos de demora para hablar con el encargado de eso. Me hacen esperar 12 minutos y luego me atiende el encargado de transferencias. Me pregunta datos de la cuenta, y como no anda la verificación de la pregunta secreta (sospecho porque no entendió mi respuesta) me mandó un numero de verificación de 8 digitos que le tuve que leer. Con ese me envió el auth code (como 16 digitos, casi todos 0).
En resumen, luego de 25 minutos de "trabajo" pude obtenerlo. Hay gente que prefiere pagar u$20 antes que perder 25 minutos. Entre la llamada internacional (no todos tienen Skype) y tener que hablar en inglés limita mucho la posibilidad de transferir el dominio. Moraleja: No usen Register.com, hay muchos que dan el mismo servicio y con menor costo.

Etiquetas:

lunes, febrero 09, 2009

¿Los padres de la patria eran pedófilos? - Criticadigital.com

¿Los padres de la patria eran pedófilos? - Criticadigital.com

Según los criterios actuales, si, sin duda. Antes que nada la nota está en el contexto del caso Corsi, un terapeuta acusado de abuso sexual, pero igual este tema va mas alla de un caso particular y realmente no tiene nada que ver un abuso con una relación consentida. San Martín de 34 se empomó Remedios de Escalada a los 14 años. Belgrano de 47 salió con Dolores de 15. Perón de 47 con una de 17. Hoy los tildarían de degenerados. En el caso de San Martín no se si no iria preso. Aunque la declaración universal de los derechos humanos dice:

Artículo 16
1. Los hombres y las mujeres, a partir de la edad núbil, tienen derecho, sin restricción alguna por motivos de raza, nacionalidad o religión, a casarse y fundar una familia, y disfrutarán de iguales derechos en cuanto al matrimonio, durante el matrimonio y en caso de disolución del matrimonio.

Tambien hay que tener en cuenta que antes vivian mucho menos, asi que tenia su lógica que el matrimonio comience antes. Por ejemplo Remedios de Escalada murió a los 25. Hoy a esa edad la mayoria de las mujeres aun no están casadas y muchas ni planes deben tener siquiera. Aunque esto se aplicaba a toda la sociedad de aquel entonces, no solo para los "padres de la patria".

¿Entonces "está bien" lo que pasaba antes o es mejor la situación actual? La pregunta no tiene mucho sentido. Si quiero ponerme del lado de Alejandro Dolina cuando cuenta historias de vidas notables y termina diciendo: "Tal protagonista murio a los (inserte numero de años <25)", dando a entender luego que hoy en dia hay cada pelotudo de 30 y pico que tiene todo servido y se cree un adolescente incapaz de cualquier cosa. Ahora lo que sigue no lo dice Dolina, lo agrego yo: "Considerar a los adolescentes sexualmente capaces como nenes, no hace otra cosa mas que quitarles responsabilidad y contribuir a una adolescencia eterna como artificial y perjudicial."

lunes, febrero 02, 2009

Coleco


Coleco
Originally uploaded by sbassi
¿Les mostré mi Coleco?

Según la wikipedia:

La ColecoVision es una consola de videojuegos de segunda generación lanzada al mercado estadounidense en agosto de 1982 por la empresa Coleco.

La ColecoVision ofrecía para su tiempo gráficos y jugabilidad de calidad arcade, la capacidad de jugar con cartuchos de su principal competidora la Atari 2600, y medios para ampliar el hardware del sistema. La ColecoVision se lanza con un catálogo inicial de 12 juegos con otros 10 títulos programados a lo largo de 1982. En total, aproximadamente 100 títulos se lanzaron como cartuchos para la consola entre 1982 y 1984.[2