GZP2 a Plotting Program for PGPLOT
Coded by G. POLLAROLO
Dipartimento di Fisica Teorica, Università di Torino
Via Pietro Giuria 1, 10125 TORINO (Italy)
INDICE
1 - INTRODUZIONE.
GZP2 e' un programma, basato sulla libreria PGPLOT della Caltech University (USA) che permette di fare semplici grafici usando files prodotti dall'utente.
Il programma e' stato concepito modularmente in modo da poter essere facilmente modificabile ed integrabile con nuovi elemente che via via si rendano necessari. Il programma puo' essere eseguito sia in modo interattivo che atraverso una command file, a seconda del device prescelto produce o una nuova window sullo schermo in cui vengono visualizzate le varie curve oppure produce una file che puo' essere stampata sulle varie PS printers.
Per quanto riguarda i colori che sono permessi si faccia riferimento alla seguente tabellina:
n - nero c - ciano (azzurro) w - bianco v - violetto (magenta) r - rosso y - giallo b - blu m - marrone g - verde
2 - DIMENSIONE PAGINA E PLOTTING AREA
Il primo modulo definisce le dimensioni della pagina e dell'area in cui si vogliono fare apparire i grafici e definisce il tipo di assi cartesiani che si vogliono fare (linx,liny), (linx,logy), e le altre combinazioni. Per questo modulo sono necessarie due linee di input, per esempio
>19.0 28.0 10.0 14.0 5.0 6.0 (6f6.1) >0,0 (*)
questo significa che si vuole usare una pagina di dimensioni 19x28 cm e su questa si vuole fare un grafico di dimensioni 10x14 cm (plotting area) la cui origine e' posta a 5x6 cm dal vertice in basso a sinistra. Si noti che tutte le dimensioni, date in cm, sono solo valide quando si usa il devise per produrre un grafico su carta. Nel caso si voglia il grafico sullo schermo le dimensioni vengono scalte opportunamente in accordo alle dimensioni dello schermo, questo scaling mantiene pero' le proporzioni corrette.
Il secondo modulo definisce, nelle coordinate dell'utente le dimensioni dell'area nella quale si vogliono rappresentare i grafici. Di questo modulo fanno parte essenziale anche i label con cui si vogliono definire gli assi ed il titolo che si vuole dare al plot stesso e che apparira' sopra la plotting area. Per questo modulo sono necessarie sei linee di input, per esempio:
>Titolo Grafico (*) >sotto titolo (*) >0.,50.,10.,2 (*) >x-axis (*) >0.,200.,50.,5 (*) >y-axis (*)
Con questi parametri verra disegnato un rettangolo, di dimensioni definite precedentemente, e che servira a rappresentare una curva che si pensa definitia nella regioni (0,50) per x e (o,200) per y. Sotto l'asse delle x appariranno i label numerici ad intervalli di 10 (anche un thick mark verra' disegnato) ed il corripondente label alphanumerico. Corrispondentemente a fianco dell'asse y. I due numeri 2 e 5 indica il numero di piccoli tick che devono dividere gli intervalli principali. Ovviamente il grafico avra' il titolo indicato (si puo' lasciare una linea bianca.
4 - MODULI GRAFICI VERI E PROPRII
I moduli che seguono servono a costruire il vero e proprio grafico al momento si possono eseguire
- curva continua - marker - marker con error bars, sia in verticale (con scale sia log che lin) che in orizzontale (solo con scala lineare) - histogrammi - testo - curve di livello - superfice con toni di grigio (mosaico)
La descrizione di tutti questi module viene fatta di seguito facendo vedere direttamente le linee di input e commentandole nella speranza che il tutto rimanga chiaro.
4.1 - Linea continua tra punti
>r,c--,3,6,2.,10.,0. >line.dat
Descrizione:
r campo colore (rosso, vedi tabellina) c linea continua tra punti -- SOLID line - DASH line -. DASH-DOT line .. DOT-DOT line
I due interi che seguono lo stile della linea indicano le colonne della file line.dat che devono essere usate quale x and y della curva da disegnare. Se questi numeri sono ignorati allora il programma assume 1 e 2 rispettivamente. Gli ultime tre numeri reali, 2.,10.,0. costituiscono il coefficente di scala e di traslazione lungo la x e la y per i valori riportati nella file line.dat. Se ignorati si assumono rispettivamente 1 ed 0.,0.. Per i piu' sofisticati dopo questi tre numeri potete aggiurnerne un altro per lo spessore della linea, 1 e' il default.
4.2 - Marker
>r,p09,3,6,10,0.,0. >marker.dat
Descrizione:
r campo colore (rosso, vedi tabellina) p mette un marker ogni punto 09 l'indicatore del marker (PGPLOT manual)
I due interi che seguono lo stile della linea indicano le colonne della file line.dat che devono essere usate quale x and y della curva da disegnare. Se questi numeri sono ignorati allora il programma assume 1 e 2 rispettivamente. Gli ultime tre numeri reali, 10.,0.,0. costituiscono il coefficente scaling e traslazione (prima x dopo y) se ignorati si assumono rispettivamente 1,0,0.
4.3 - Marker con barre errori
>r,e16 >data.dat ( deve contenere: x, y, abs_y_err )
Descrizione:
r campo colore (rosso, vedi tabellina, non ancora implementata) e mette un marker e una barra di errore (verticale) a ogni punto della file data.dat (Con E maiuscolo , ontre alla barra verticale si aggiunge anche quella orizzontale) 16 l'indicatore del marker (PGPLOT manual)
4.4 - Histogrammi
>r,h--,s09,3,6,1.,10.,-5. >hist.dat
Descrizione:
r campo colore (rosso, vedi tabellina) h fa un istogramma -- SOLID line - DASH line -. DASH-DOT line .. DOT-DOT line s per shading l' istogramma (non ancora implementato) 09 indica il shading pattern
I due interi che seguono lo stile della linea indicano le colonne della file line.dat che devono essere usate quale x and y della curva da disegnare. Se questi numeri sono ignorati allora il programma assume 1 e 2 rispettivamente. Gli ultime tre numeri reali, 1.,10.,-5. costituiscono il coefficente di scaling e traslazione (x,ed y) per i valori riportati in file, se ignorati si assumono rispettivamente 1.,0. ed 0.
4.5 - Curve di livello
>r,k >surf.dat >--,0.,10.,2. >end
Descrizione:
r campo colore (rosso, vedi tabellina) k draw linee di contorno -- SOLID line - DASH line -. DASH-DOT line .. DOT-DOT line end per terminare la seguenza delle linee di livello
Gli ultimi due punti indicamo le altezze a cui le linee di livello devo essere disegnate (zmin,zmax,dz) della superfice definita nella file SURF.DAT. Questa file deve contenere nella sua prima linea la definizione della regione in cui la superfice e' definita cioe' xmin,xmax,dx e ymin,ymax,dy e poi i valore di z(x_i,y_j) su corrispondenti grid points. (sono letti in free format)
4.6 - Mosaico
Molte volte per rappresentare una superfice (quando e' con segno definito) e' conveniente usare una scala di grigi. Questo e' quello che fa mosaico, con le istruzioni>w,m >for027.dat >0.,50. >n
Descrizione:
w campo colore (bianco, vedi tabellina) (non usato) m rappresenta la superfice con toni di grigio 1 scala di colore desiderata (scegliere tra 0,1,2 e 3) surf.dat file definente la superfice (la stessa delle linee di livello) Questa file deve contenere nella sua prima linea la definizione della regione in cui la superfice e' definita cioe' xmin,xmax,dx e ymin,ymax,dy e poi i valore di z(x_i,y_j) su corrispondenti grid points. (sono letti in free format) 0.,50 definisco lo zmin,zmax della superfice n non si vuole il wedge con la scala di grigi. Se si vuole la scala di colori usata si possono usare le opzioni t (top), b (botton), l (left) and r (right) seguiti da due numeri che definiscono l'altezza del wedge e lo spostamente dall.asse in questione. In generale potete scrivere (t,2.,5.)
4.6 - Testo
>r,t,1. >text >5.,2.
Descrizione:
r campo colore (rosso, vedi tabellina) t aggiunge la stringa text nella poling area Il numero che segue costituisce lo scaling factor per la dimensione del carattere (se manca si assume 1). NB. se usate T maiuscolo allora la posizione e data in centimetri rispetto alla origine. Con questa obzione potete anche routare il testo di un desiderato angolo. inseritelo dopo lo scaling factor. text stringa di testo. Per quanto riguarda la stringa di testo per far comparire lettere greche, caratteri corsivi, subscript e upperscript potete usare la solita convenzione di TEX (LATEX) avendo cura di usare le parentesi graffe anche per un solo caratter (si applica nel caso di subsript and upper script) Ricordarsi che si puo' stampare al massimo una stringa di una trentina di caratteri speciali. 5.,2. coordinate (x,y) definenti la posizione di partenza del testo nel sistema di corrdinate dell'utente.
4.7 - Legenda
>w,l,ru >w,c--,theory >w,p15,data >w,s01,error band >end
Descrizione:
w Campo Colore (non usato in questo contesto, vedi sotto) l richiede al programma di fare una legenda localizzata nella ru parte superiore destra (upper right)della plotting area. Sono permesse altre posizioni per localizzare la legenda precisamente: lu,rd ld sperando che il loro significato sia chiaro. NB: ru ed ur sono equivalenti. end per terminare gli entry della legenda Spero che le altre informazioni che definiscono il contenuto della legenda che si vuole scrivere siano chiare. NB: Nella prima linea di comando, dopo l'istruzione ru si puo aggiungere un numero (nel sistema di riferimento dell.utente) che defisce di quanto la legenda debba essere spostata orizzontalmente per evitare eventuali sovrapposizioni con le curve disegnate.
4.9 - Shading tra curve
>y,s--,1,2,1.,0.,0. >file1.dat >y,s--,1,2,10.,0.002,0.03 >file2.dat >1
Descrizione:
y campo di colore (vedere la tabellina) s shading tra le curve definite nelle file1.dat e file2.dat 1,2 colonne nelle file che definiscono la x e la y rispettivamente 1.,0.,0. fattore di scala della curva e shift's lungo la x ed y rispettivaemte 1. shading pattern (come per gli istogrammi). In questo caso full.
4.8 - Next
> .......... > next 1 > ..........
Descrizione:
Questo comando e' esenziale quando si vogliono generare piu' plots sulla stessa pagina Dopo questo comando bisogna ridare al programma tutte le informazioni per il plot iniziando dalla dimensione della pagina (ovviamente non dobbiamo modificare il device usato). In questo caso i parametri che definiscono le dimensioni della pagina non hanno significato e quelli che definiscono la posizione dell'origine sono interpretati come uno shift che definisce la nuova origine rispetto alla vecchia (sembra una definizioni bizzarra ma dopo un po' la trovere estremamente utile) Per capire come il comando next deve essere usato per produrre una pagina con 6 differenti plots si faccia riferimento alla schema che segue (il significa dei parametri (1,2 e 3) e' troppo lungo da spiegare provateli e credo ne capirete il funzionamento, ricordatevi che le labels degli assi sono facoltative)
+------------+------------+------------ ! ! ! ! next 2 ! next 3 ! next3 ! ! ! +------------+------------+------------ ! ! ! ! ! next 1 ! next 1 ! ! ! +------------+------------+------------
4.10 - End
>end
Descrizione:
Per terminare il programma GZP2. A questo punto verra' richiesto di inviare un carriage-return per cancellare la window creata.
5 - FILE DI INPUT
Personalmete trovo molto utile generare programmi usando una file di input che contiene tutte le informazioni nenessarie, per questo dopo la richiesta del device che si vuole usare viene richiesta il nome di una file che contiene le varie istruzioni per generare il plot. Se a questa richiesta si risponde con un carriage_return signifa che si vuole generare il plot interattivamente, cioe rispondendo alle varie domande che il programma fa di volta in volta.
Qui di seguito riporto una file di input (GZP2.INP), spero sia chiara
La file GZP2.INP ------------------------------------------------------ 19. 28. 6. 9.0 4. 3. 0,1 5.,20.,5. r (fm) 0.0001,300.,1. W (MeV) w,c--,1,2 ca60snps.op w,t ps 8, 0.001 next 2 6. 9.0 8. 0. 0,1 5.,20.,5. r (fm) 0.0001,300.,1. w,c--,1,2 ca60snns.op w,e10 error.dat w,t ns 8, 0.001 w,t 60Ca 15. 0.8 next 1 6. 6.0 -8. 12. 0,0 40.,140.,20.,2 theta -100.,20.,20.,1 Q (MeV) w,k for027.dat;-4 --,50,2000,100 end next 2 6. 6.0 8. 0. 0,0 40.,140.,20.,2 theta -100.,20.,20.,1 w,m1 for027.dat;-4 0.,50. n ------------------------------------------------------
6 - LISTATO, COMPILAZIONE ED ESECUZIONE DI GZP2.
Per le persone pigre che non vogliono perdere tempo in quanto hanno qualche cosa di piu' importante da fare, (questa e' la solita scusa che si adotta in questi casi) possono eseguire direttamente il programma in questione semplicemente digitando il comando:
$ gzp2
e seguire le varie istruzioni che il programma richiede. Si raccomanda una rilettura del capitolo precedente (file di Input)
Per le persone che sono interessate a capire il contenuto di un programma che usano, prima di far vedere il listato del programma due parole sulla sua compilazione. Come ho gia detto il programma si basa sulla libreria PGPLOT per cui nella fase di compilazione e di link bisogna fornire indicazioni sul dove si trova detta libreria. Per fare questo io suggerisco di creare una command file che contiene tutte le informazioni che sono necessarie e che usa uno dei suoi argomenti come il nome del programma che si deve linkcare (ohibo che brutta parola) con la libreria PGPLOT una command file che soddispa questa esigensa e' per esempio la file (che chiameremo) flpg che segue
#!/bin/csh if (-f $1.f) then f77 -L/usr/shlib/X11 -lX11 -L/usr/local/share/pgplot -lpgplot $1.f -o $1 else echo "File does not exist" endif
Questa file viene eseguita con il comando
$ flpg gzp2
(il $ altro non e' che il promt della csh) e genera un file gzp2 che puo' essere direttamente eseguita con il comando
$ gzp2
Di seguito gzp2 chiedera' le varie istruzioni che gli necessitano e che in parte possono essere contenute in una file di input(vedi sopra).
Il listato del programma gzp2 può essese consultato on_line.