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
  2. DIMENSIONE PAGINA A PLOTTING AREA
  3. COORDINATE UTENTE
  4. MODULI GRAFICI
    1. Linea Continua fra punti
    2. Marker
    3. Marker con barre errori
    4. Histogrammi
    5. Curve di livello
    6. Mosaico
    7. Testo
    8. Legenda
    9. Shading tra curve
    10. Next
    11. End
  5. FILE DI INPUT
  6. LISTATO, COMPILAZIONE ED ESECUZIONE DI GZP2


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.


3 - COORDINATE UTENTE

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.