Suggerimenti per ottenere un codice di tracciamento del fascio di elettroni open source in corso

7

Lavoro nel campo della fisica degli acceleratori e della radiazione di sincrotrone. Gli elettroni ad alta energia che circolano in anelli di grandi dimensioni di magneti producono raggi X che sono usati per una varietà di diversi tipi di scienza.

Gestire e migliorare queste strutture richiede il controllo e la modellazione del fascio di elettroni mentre circola nell'anello. Un codice per modellarlo richiede fondamentalmente che i tracker seguano gli elettroni attraverso gli elementi (qualcosa chiamato un integratore simplettico), e quindi il calcolo dei diversi parametri associati a questo movimento. Il problema con questi codici è che ogni struttura ha il proprio (forse 4-5 codici diversi, alcuni con più versioni). In linea di principio il codice non è così complesso. E come progetto di modellazione, si potrebbe pensare che abbia un interesse generale. Chi non vuole essere in grado di creare una traccia nello spazio con i magneti e osservare la circolazione degli elettroni?

Esiste un codice basato su Matlab per fare ciò chiamato Accelerator Toolbox, ma il creatore del codice non è più nel campo. Inserisco il codice in Sourceforge sotto il nome atcollab . La risorsa base è un insieme di integratori simplettici scritti in C. Questi sono poi compilati in codice mex e interfacciati tramite Matlab. È stato utile inserire il codice su Sourceforge per scambiare il codice, ma la comunità degli utenti è piuttosto piccola e la maggior parte è troppo impegnata per dedicarsi molto tempo alla collaborazione. Quindi, in termini di miglioramento del codice, non penso che abbia avuto tanto successo.

Qualsiasi parte di questa immagine potrebbe essere ricreata senza troppe difficoltà, ma nel complesso è un po 'complessa, e poiché ogni laboratorio ha una propria installazione con un sacco di codice aggiuntivo e strumenti sviluppati localmente, le persone lo trovano difficile lavorare insieme e condividere il codice. In qualche modo penso che dobbiamo coinvolgere una comunità più ampia nel nostro sviluppo, o semplicemente utilizzare alcuni strumenti standard. Ma per quello, suppongo debba essere di interesse generale. Penso che gli integratori simplettici possano avere un interesse generale. E la parte relativa a un'architettura plug-in per costruire l'anello dovrebbe adattarsi ad altri modelli. Oppure l'altra opzione è accettare semplicemente che questo non è un problema di interesse generale e lavorare di più nella nostra piccola comunità.

Sarebbero graditi suggerimenti o aneddoti di esperienza analoga.

    
posta Boaz 14.11.2011 - 10:58
fonte

3 risposte

5

Penso che la cosa principale che devi fare sia creare contatti con più persone in posizioni simili su altri scynchrotrons. Condividi il tuo codice e le tue idee con più persone e potresti essere in grado di convincerle a condividere il loro codice con te o almeno a contribuire a migliorare il tuo codice.

Se non c'è abbastanza sovrapposizione tra ciò che sta facendo il progetto comunale e ciò che fa ogni singolo laboratorio, allora sarà difficile motivare i tuoi collaboratori esistenti, per non parlare di nuovi. Puoi discutere con i tuoi attuali collaboratori che cosa può essere fatto per aiutare più persone a utilizzare il software nel progetto. Forse alcune persone preferiscono fare qualcosa in un modo leggermente diverso da come lo fai al momento e questo è un ostacolo alla loro inclusione.

Per trovare nuovi collaboratori, puoi dare la caccia attraverso articoli scientifici pubblicati da sincrotroni in tutto il mondo, alla ricerca di persone che fanno lo stesso tipo di lavoro che stai facendo. Un'altra opzione è quella di andare alle conferenze e creare più contatti in questo modo.

Diamond Light Source , la struttura britannica di Synchrotron, ha deciso di rilasciare il suo software di acquisizione dati e analisi dati utente in GPL alcuni anni fa. Il sito web OpenGda ci ha permesso di entrare in contatto con una serie di sincrotroni in tutto il mondo che stanno iniziando a distribuire GDA su beamline presso le loro strutture.

Potresti voler consultare il Computational Science sito di scambio di stack, si sta trasformando in una risorsa piuttosto utile.

Inoltre, parlando di scienze aperte, per un ottimo esempio di crowdsource scienza, dai un'occhiata a foldit . Sfruttare la tenacia, l'intuizione e l'ingenuità dei giocatori permette alla scienza di fare cose come Decode AIDS Protein Quel ricercatore bloccato per 15 anni in appena 3 settimane .

    
risposta data 14.11.2011 - 18:07
fonte
2

Dato che stai chiedendo "suggerimenti o aneddoti", c'è un TED Talk rilevante "Open science now!" che menziona anche in un momento la condivisione del codice sorgente¹.

Più in generale, ci sono alcuni problemi con questi progetti open source:

  1. La comunità scientifica non ha ancora una cultura open source e di condivisione del codice rispetto agli sviluppatori di software. Dal momento che non desiderano aprire il proprio codice sorgente alla community per la revisione², avranno meno possibilità di utilizzare quotidianamente un codice open source.

  2. La comunità scientifica è disparata. Voglio dire, quando ottengo un codice sorgente C # da CodePlex, sono abbastanza sicuro che si compilerà bene con il mio ultimo Visual Studio, o avrò bisogno di scaricare e installare solo un paio di componenti aggiuntivi per farlo funzionare. Al contrario, un codice FORTRAN scritto da uno scienziato è stato scritto per essere ottimizzato per essere eseguito sulle workstation del suo laboratorio. È probabile che, quando qualcuno proverà a distribuire lo stesso progetto in un altro ambiente con un po 'di altra configurazione, non verrà compilato, o non verrà eseguito come previsto⁴.

  3. Per un progetto open source, più grande è il pubblico di destinazione, più grande è la possibilità di avere successo. Quando pubblichi un'applicazione Java, stai mirando a migliaia e migliaia di sviluppatori. C, Java, C #, le comunità JavaScript sono così grandi che qualsiasi libreria open source può essere interessante per pochi. Al contrario, "la fisica dell'acceleratore e la radiazione di sincrotrone", essendo un argomento molto interessante, è, beh, troppo difficile da essere compreso da tutti.

  4. Ci sono siti web ben conosciuti costruiti da o per le comunità di sviluppatori per condividere il codice open source. CodePlex è un esempio. Dato che molti sviluppatori visitano questi siti web, sei sicuro che se pubblichi il tuo codice qui, alcuni lo vedranno. Al contrario, non ci sono siti web famosi per codice open source relativi a "fisica dell'acceleratore e radiazione di sincrotrone" visitati ogni giorno da migliaia di persone. Se vuoi condividere il tuo codice, devi parlare con le persone in diretta e fare molto più sforzo per essere conosciuto.

¹ Parlando di progetti wiki scientifici che hanno fallito, Michael Nielsen aggiunge (6:10): "Non sono solo le scienze della scienza. Ispirato da Facebook, molte organizzazioni hanno cercato di creare social network per gli scienziati, che si connetteranno gli scienziati ad altre persone con interessi simili, così possono condividere cose come dati o codice che scrivono [...] Se ti iscrivi a uno di questi siti, scoprirai che sono essenzialmente vuoto ".

² Pubblica il tuo codice computer: è abbastanza buono di Nick Barnes in Nature, 14 ottobre th 2010, vol. 467, 753.

³ Perché la programmazione scientifica non calcola di Zeeya Merali in Nature, 14 ottobre th 2010, vol. 467, 777

⁴ Non sto dicendo che gli scienziati stiano scrivendo codice cattivo. È più che hanno obiettivi diversi. Gli sviluppatori sono addestrati a scrivere codice compatibile, leggibile e non ottimizzato. Se inizierò a fare piccole modifiche per guadagnare qualche millisecondo di rendimento, rendendo il codice difficile da capire, i miei colleghi mi chiederanno se sono pazzo. Se uno scienziato inizierà a scrivere codice per leggibilità e compatibilità, e il codice verrà eseguito per cinque giorni invece di quattro e mezzo, ci saranno problemi.

    
risposta data 16.11.2011 - 00:20
fonte
1

Penso che un modo per abbattere un progetto del genere in qualcosa di gestibile sia pensare prima a un modo comune per descrivere i metadati dei tuoi modelli in modo dichiarativo. In altre parole, intendo un tipo di schema comune o linguaggio di marcatura per descrivere cosa sia un modello "(l'input) e quali sono i risultati dell'analisi (l'output).

Immagino che ogni struttura abbia modi completamente diversi di rappresentare l'input dei loro codici e allo stesso modo modi molto diversi di rappresentare i risultati delle loro analisi? Direi anche che questo è principalmente ciò che impedisce alle persone di essere flessibili nel provare nuove implementazioni.

Se puoi introdurre un formato di interscambio di informazioni utilizzabile, è molto più facile per le persone provare le tue implementazioni. Allo stesso modo, la gente che scrive / migliora le nuove implementazioni può utilizzare lo schema di markup come punto di partenza.

Qualcosa come questo è in corso da molto tempo nella comunità della spettroscopia. Hanno introdotto linguaggi di markup per la spettroscopia analitica ( animl ). Non posso garantire quanto successo abbia avuto lo sforzo, ma l'idea è sana.

    
risposta data 16.11.2011 - 17:08
fonte

Leggi altre domande sui tag