Forum

Nome Utente:
Password:
Riconoscimi automaticamente
 Tutti i Forum
 MolecularLab
 Bioinformatica
 Tool per visualizzazione grafica di simulazioni molecolari
 Nuova Discussione  Nuovo Sondaggio Nuovo Sondaggio
 Rispondi Aggiungi ai Preferiti Aggiungi ai Preferiti
Cerca nelle discussioni
I seguenti utenti stanno leggendo questo Forum Qui c'è:

Aggiungi Tag Aggiungi i tag

Quanto è utile/interessante questa discussione:

Autore Discussione  

Selenocisteina
Nuovo Arrivato

lucy


64 Messaggi

Inserito il - 09 luglio 2012 : 18:16:26  Mostra Profilo  Visita l'Homepage di Selenocisteina Invia a Selenocisteina un Messaggio Privato  Rispondi Quotando
Ciao a tutti,
devo scrivere un programma che faccia una simulazione del movimento (urti compresi, anche se semplificati) di una serie (con numero variabile) di ioni chiusi in una scatola 2d, evolvendo il sistema a tempi discreti e osservando il movimento delle particelle. Il problema è che non so come visualizzare poi graficamente i dati che ottengo.

Ho abbastanza esperienza nell'uso di R, ma mi sembra che lì si possano fare solo una serie di grafici statici, perciò poi mi dovrei mettere ad affiancarli tutti. Inoltre, ho anche un paio di altri problemi, come il fatto che dovrei fare la massa dei "pallini" proporzionata a quella delle particelle, e con R non so come si faccia.

Tralasciando l'ipotesi di farlo a mano a ogni step di tempo con Excel :D, esiste qualche tool rapido - preferibilmente online - per visualizzare questo genere di cose? Mi servirebbe qualcosa dove posso uploadare rapidamente i dati relativi alla posizione delle particelle, alla loro carica (con un codice colore magari) e alla loro massa, e poi vedere l'evoluzione del sistema tipo "filmato".

Grazie :)

kORdA
Utente Attivo

newkORdA

Prov.: Milano
Città: Monza


1303 Messaggi

Inserito il - 09 luglio 2012 : 18:37:56  Mostra Profilo  Visita l'Homepage di kORdA  Clicca per vedere l'indirizzo MSN di kORdA Invia a kORdA un Messaggio Privato  Rispondi Quotando
Caspita, chi è quel pazzoide che ti ha dato una commissione del genere? E soprattutto a che scopo?

Comunque, io userei un altro genere di approccio. Per ogni timeframe, mi costruirei un file in formato pdb in cui trascriverei le coordinate atomiche degli ioni al tempo X. Quindi metterei tutti questi snapshot in un unico multi-pdb e lo farei girare con un viewer tipo VMD o PyMol (che ci pensano già di conto loro a sistemare le dimensioni dei diversi tipi atomici).

Detta cosi sembra semplice, quanta dimestichezza hai a scrivere codice?

http://www.linkedin.com/in/dariocorrada
Torna all'inizio della Pagina

Selenocisteina
Nuovo Arrivato

lucy



64 Messaggi

Inserito il - 09 luglio 2012 : 19:11:05  Mostra Profilo  Visita l'Homepage di Selenocisteina Invia a Selenocisteina un Messaggio Privato  Rispondi Quotando
Grazie mille della risposta kORda! Nessun pazzoide, è un lavoro meramente didattico (sto studiando un linguaggio di programmazione), la simulazione non ha pretesa né assolutamente possibilità di essere realistica. Semplicemente, è un programma che genera una serie di "ioni" (particelle circolari in 2d con carica elettrica, raggio, massa note) e fa aggiornamenti a tempi discreti della loro posizione, velocità e accelerazione (calcolando solo la forza elettrica generata dalle cariche) e considerando (in maniera approssimativa) alcuni degli urti che si possono avere (per esempio, particelle di segno diverso si fondono, le altre rimbalzano etc). Non c'è niente di dettagliato sulla struttura chimica delle particelle (altrimenti mi starei già sparando).
Mi servirebbe un tool al quale posso dare appunto le coordinate che il programma ha generato per ogni particella nei diversi step temporali, e che mi metta insieme tutte queste coordinate facendo vedere un "video" del movimento delle particelle-"ioni". Una cosa molto semplice, ma appunto perché inutile non penso esista niente di prefatto.
Torna all'inizio della Pagina

chick80
Moderatore

DNA

Città: Edinburgh


11491 Messaggi

Inserito il - 09 luglio 2012 : 19:52:29  Mostra Profilo  Visita l'Homepage di chick80 Invia a chick80 un Messaggio Privato  Rispondi Quotando
Per creare dei video in R puoi (non le sole opzioni):

1) usare il pacchetto animation che ti permette di esportare GIF animate, video swf e video avi, mp4 etc (per questi ultimi è richiesta l'installazione di FFmpeg)

2) usare imageMagik per concatenare delle JPEG (assumo l'uso di Linux, ma puoi ovviamente adattare per Windows):


for (i in 1:10) 
  {
  jpeg("/tmp/immagine%02d.jpg") # Nota che R è intelligente e ti codifica il nome da solo ;)
  # plot del frame i
  }
dev.off()
system("convert -delay 0.5 immagine*.jpg output.mpg")


Esempi pratici qui: http://ryouready.wordpress.com/2010/11/21/animate-gif-images-in-r-imagemagick/

Citazione:
Dovrei fare la massa dei "pallini" proporzionata a quella delle particelle


Qualcosa così ti piace?

npoints <- 100
posx = sample(seq(0, 1, 0.01), npoints, replace=T)
posy = sample(seq(0, 1, 0.01), npoints, replace=T)
pointSize = sample(seq(0, 5, 0.1), npoints, replace=T)

plot(posx, posy, pch=20, cex=pointSize, xlim=c(0,1), ylim=c(0,1))

Sei un nuovo arrivato?
Leggi il regolamento del forum e presentati qui

My photo portfolio (now on G+!)
Torna all'inizio della Pagina

kORdA
Utente Attivo

newkORdA

Prov.: Milano
Città: Monza


1303 Messaggi

Inserito il - 10 luglio 2012 : 09:18:46  Mostra Profilo  Visita l'Homepage di kORdA  Clicca per vedere l'indirizzo MSN di kORdA Invia a kORdA un Messaggio Privato  Rispondi Quotando
ugh, anche con tutte le semplificazioni del caso mi sembra un task abbastanza tosto per imparare a usare un linguaggio di programmazione. Per semplificarti notevolmente la vita io ti consiglierei di scrivere in output un file multi-pdb, qui trovi tutte le specifiche del caso http://www.wwpdb.org/docs.html anche se di tutto questo credo che per te sia sufficiente produrre un pdb del tipo

TITLE    THIS IS A SIMULATION BOX
MODEL    0
HETATM 9029 PB    PB L 218      28.553  -6.926  67.292  1.00  0.00          PB  
HETATM 9030 CL    CL M 218      30.938  53.215  67.292  1.00  0.00          CL  
TER
ENDMDL
TITLE    THIS IS A SIMULATION BOX
MODEL    1
HETATM 9029 PB    PB L 218      29.553  -5.926  67.292  1.00  0.00          PB  
HETATM 9030 CL    CL M 218      29.938  52.215  67.292  1.00  0.00          CL  
TER
ENDMDL
[...]

Visto che vuoi fare la simulazione in 2D terrai le coordinate atomiche Z uguali per tutte le particelle. Prodotto questo file lo puoi successivamente caricare su VMD http://www.ks.uiuc.edu/Research/vmd/ e farti un filmato con la rappresentazione che più ti aggrada

http://www.linkedin.com/in/dariocorrada
Torna all'inizio della Pagina

Selenocisteina
Nuovo Arrivato

lucy



64 Messaggi

Inserito il - 10 luglio 2012 : 19:07:15  Mostra Profilo  Visita l'Homepage di Selenocisteina Invia a Selenocisteina un Messaggio Privato  Rispondi Quotando
Grazie mille a entrambi! Mi sa che per curiosità proverò entrambe le soluzioni :)
chick80, non pensavo fosse così semplice con R, e dire che avevo anche cercato, ma non riuscivo a pensare alle keyword giuste e non trovavo un bel niente!
kORdA, in realtà davvero si tratta di una simulazione molto semplice che segue un paio di leggi di meccanica classica molto molto basilari (per dire, negli urti non si calcola nemmeno che le particelle potrebbero sfregare l'una sull'altra prima di "rimbalzare", ma si semplifica semplicemente con urto perfettamente elastico in 2d). La difficoltà è solo nel capire la fisica, anche se basilare, mentre, una volta capite le leggi, per l'implementazione ci vuole massimo un paio di giorni. L'unico problema è che il linguaggio è il C, perciò a volte bisogna fare dei gran giri per cose che in altri linguaggi sarebbero un po' più immediate!
Torna all'inizio della Pagina

chick80
Moderatore

DNA

Città: Edinburgh


11491 Messaggi

Inserito il - 10 luglio 2012 : 19:42:43  Mostra Profilo  Visita l'Homepage di chick80 Invia a chick80 un Messaggio Privato  Rispondi Quotando
In C puoi sempre usare delle API di fisica già pronte, come Box2D o Chipmunk.

Nota che Box2D è rilasciato sotto licenza zlib, mentre Chipmunk esiste in versione "base" sotto licenza MIT o in versione Pro/Enterprise, con condizioni varie d'uso (ma sempre sotto licenza MIT). Ovviamente a te basta la versione base.

Sei un nuovo arrivato?
Leggi il regolamento del forum e presentati qui

My photo portfolio (now on G+!)
Torna all'inizio della Pagina

Selenocisteina
Nuovo Arrivato

lucy



64 Messaggi

Inserito il - 10 luglio 2012 : 19:48:09  Mostra Profilo  Visita l'Homepage di Selenocisteina Invia a Selenocisteina un Messaggio Privato  Rispondi Quotando
Grazie :). Le conoscevo già, ma il succo del lavoro che sto facendo è implementare la cosa da zero (anzi, sto usando solo le librerie proprio basilari, molte funzioni le sto re-implementando), perché appunto il lavoro non ha pretese di utilità ma solo di apprendimento delle basi, e quindi non credo sarebbero accettate "scorciatoie".
Torna all'inizio della Pagina

chick80
Moderatore

DNA

Città: Edinburgh


11491 Messaggi

Inserito il - 10 luglio 2012 : 20:21:46  Mostra Profilo  Visita l'Homepage di chick80 Invia a chick80 un Messaggio Privato  Rispondi Quotando
Chiaro, comunque la cosa interessante è che sono librerie opensource e quindi puoi sempre sbirciare cosa succede "dietro le quinte" in caso fossi bloccata.
Va bene reinventare la ruota... ma fino ad un certo punto!

Sei un nuovo arrivato?
Leggi il regolamento del forum e presentati qui

My photo portfolio (now on G+!)
Torna all'inizio della Pagina

kORdA
Utente Attivo

newkORdA

Prov.: Milano
Città: Monza


1303 Messaggi

Inserito il - 11 luglio 2012 : 08:54:43  Mostra Profilo  Visita l'Homepage di kORdA  Clicca per vedere l'indirizzo MSN di kORdA Invia a kORdA un Messaggio Privato  Rispondi Quotando
ah, io mi tiro fuori allora. Il linguaggio C per me è ancora alieno, io avrei pensato di fare un agevole perlettone

http://www.linkedin.com/in/dariocorrada
Torna all'inizio della Pagina

Selenocisteina
Nuovo Arrivato

lucy



64 Messaggi

Inserito il - 24 luglio 2012 : 14:53:19  Mostra Profilo  Visita l'Homepage di Selenocisteina Invia a Selenocisteina un Messaggio Privato  Rispondi Quotando
chick80 ho una domanda per te: ho fatto come dicevi con R, ma non mi funziona perché mi continua a fare overwrite dello stesso file jpg.

Il codice che ho usato è:

j = 1;
k = j + 49;
for(n in 1:(nrow(prove_c)/50)){
jpeg(file="frame%02d.jpg");
plot(prove_c[j:k,1], prove_c[j:k,2], pch=20, cex=prove_c[j:k,7], xlim=c(0,200), ylim=c(0,200), col=prove_col[j:k]);
dev.off();
j = k + 1;
k = j + 49;
}

Il sistema è composto da 50 particelle, e per comodità ho messo il nuovo stato del sistema di seguito a quello precedente (perciò la riga 51esima del dataframe è la 1a particella nel suo nuovo stato). La posizione x è la prima colonna del dataframe, la y la seconda e le dimensioni sono nella settima.

Il problema è che se metto dev.off() fuori dal ciclo for mi dice "Warning: too many open devices", mentre se lo metto dentro mi riscrive tutti i frame sullo stesso file.
Se uso un'altra funzione che non sia plot non mi prende tutti i parametri (tipo col), ma inoltre non capisco perché così non gli vada bene. :(


[EDIT] Ho risolto, sostituendo nella funzione per creare il file immagine: png(paste(n, "png", sep="."), width=400, height=400);
Torna all'inizio della Pagina

kORdA
Utente Attivo

newkORdA

Prov.: Milano
Città: Monza


1303 Messaggi

Inserito il - 24 luglio 2012 : 15:27:23  Mostra Profilo  Visita l'Homepage di kORdA  Clicca per vedere l'indirizzo MSN di kORdA Invia a kORdA un Messaggio Privato  Rispondi Quotando
Due suggerimenti veloci veloci, poi magari chick80 approfondirà...

Citazione:
Il problema è che se metto dev.off() fuori dal ciclo for mi dice "Warning: too many open devices", mentre se lo metto dentro mi riscrive tutti i frame sullo stesso file.

è corretto che stia dentro il ciclo, ogni volta che fai dev.off() finalizzi l'immagine plottata. Se fosse fuori avresti un mucchio di immagini illeggibili, perchè ancora aperte.

Prob, c'è qualche problema nel rinominare i nuovi file (ie lo %02d di jpeg(file="frame%02d.jpg"); a quale variabile incrementale si riferisce?)

http://www.linkedin.com/in/dariocorrada
Torna all'inizio della Pagina

Selenocisteina
Nuovo Arrivato

lucy



64 Messaggi

Inserito il - 24 luglio 2012 : 15:46:02  Mostra Profilo  Visita l'Homepage di Selenocisteina Invia a Selenocisteina un Messaggio Privato  Rispondi Quotando
Grazie dei commenti. :)

Sì, anche secondo me il dev.off() deve stare all'interno del ciclo per le ragioni che mi dici, anche perché notavo che negli esempi postati da chick80 usa la funzione "new.plot", che suppongo rigeneri il grafico ogni volta (risolvendo il problema dei grafici singoli che si vanno a sovrapporre).

Anche io non capisco molto bene a che variabile incrementale si riferisca quel parametro, e non riesco a farlo funzionare, mentre assegnando come nome file una stringa che contiene la mia variabile n mi genera i file corretti.

Torna all'inizio della Pagina

chick80
Moderatore

DNA

Città: Edinburgh


11491 Messaggi

Inserito il - 24 luglio 2012 : 16:31:51  Mostra Profilo  Visita l'Homepage di chick80 Invia a chick80 un Messaggio Privato  Rispondi Quotando
Citazione:
lo %02d di jpeg(file="frame%02d.jpg"); a quale variabile incrementale si riferisce?


A nessuna, in teoria è la stessa funzione jpeg che dovrebbe farlo... magari è dipendente dall'OS.
Ad ogni modo la tua soluzione è perfetta :)

Sei un nuovo arrivato?
Leggi il regolamento del forum e presentati qui

My photo portfolio (now on G+!)
Torna all'inizio della Pagina

Selenocisteina
Nuovo Arrivato

lucy



64 Messaggi

Inserito il - 25 luglio 2012 : 17:58:52  Mostra Profilo  Visita l'Homepage di Selenocisteina Invia a Selenocisteina un Messaggio Privato  Rispondi Quotando
Grazie dell'aiuto! Per il dubbio che è rimasto, io ho provato con Ubuntu, quasi quasi farò una prova con Windows e vedrò se aggiorna il nome file da solo :)
Torna all'inizio della Pagina
  Discussione  

Quanto è utile/interessante questa discussione:

 Nuova Discussione  Nuovo Sondaggio Nuovo Sondaggio
 Rispondi Aggiungi ai Preferiti Aggiungi ai Preferiti
Cerca nelle discussioni
Vai a:
MolecularLab.it © 2003-18 MolecularLab.it Torna all'inizio della Pagina