Documentation personnelle sur paw

C. Bérat, ISN Grenoble



+++++ page +++++

	suppression du numero de page, de la date 
	        opt nopg
	        opt ndat

	taille et police du titre de la page (titre global)
		set gsiz    
	        set gfon    (-30 : bold italique)

	distance entre titre et haut de page
	        set ygti


+++++ titre +++++

	suppression du titre de l'histogramme
	        set utit

	taille et police du titre de l'histogramme
		set tsiz
		set tfon

	distance entre titre et histogramme
	        set yhti
	
+++++ statistique  +++++

	suppression des statistiques
	        opt nsta

	taille et police des statistiques
		set csiz
		set cfon


+++++ axes   +++++

	taille et police des chiffres sur les axes
		set vsiz
		set vfon

	retracer les axes de l'histo
	        ticks ' ' i  j      (i "j#
	        < => "g#

+++++ legende  +++++

	legende pour un type de marqueur
		key x y No_mark 'bla'

	boites hachurees (par exemple)
		igset bord 1		: trace le bord du rectangle
		igset fais 3		: type de remplissage
		igset fasi 275		: definition du style de hachures
		igset faci 4		: couleur des hachures (remplissage)
		igset plci 4		: meme couleur pour le bord du
					  rectangle
		igset txci 4		: meme couleur pour le texte a cote
					  du rectangle


****************************************************************************
********************* extraits de macros ************************************

****************************************************************************
tracer d'un histo a 2 dimensions avec un effet de degrade dans les couleurs

Set NCOl 28
Pal 1
Conto IDH 20 3

h/pl IDH colz 

++++ exemple : macro mydeg

macro mydeg his col

* arguments: 1=no de l'histo
*            2= couleur du degrade 'blue' ou 'green'
* definition d'une table de couleurs
* plot du degrade   
   
if [col]='blue' then
color_table  9 0.9  1 1
color_table 10 0.   1 1
color_table 11 0. 0.9 1
color_table 12 0. 0.8 1
color_table 13 0. 0.7 1
color_table 14 0. 0.6 1
color_table 15 0. 0.5 1
color_table 16 0. 0.4 1
color_table 17 0. 0.3 1
color_table 18 0. 0.2 1
color_table 19 0  0.1 1
color_table 20 0. 0.  1 
 endif
 
 if [col]='green' then
color_table  9 1  1  0.9
color_table 10 1  1   0
color_table 11 0.9 1 0
color_table 12 0.8 1 0
color_table 13 0.7 1 0
color_table 14 0.6 1 0
color_table 15 0.5 1 0
color_table 16 0.4 1 0
color_table 17 0.3 1 0
color_table 18 0.2 1 0
color_table 19 0.1 1 0
color_table 20 0.  1 0 
   endif
   
palette 1 12 0 10 11 12 13 14 15 16 17 18 19 20
contour [1] 12 3

return



*******************************************************************************
creation d'un vecteur et remplissage en lisant des donnees 
*******************************************************************************

ve/del s1
ve/create s1(3,10)
ve/read s1 om.dat ! 'o'


*******************************************************************************
tracer le contenu d'un vecteur (marker, line) dans un cadre avec axes
*******************************************************************************

null 2. 50 70. 100.
pmarker 10 s1(1,1:10) s1(2,1:10)
pline 10 s1(1,1:10) s1(2,1:10)


*******************************************************************************
faire une boucle
*******************************************************************************

i1 = 5
loop1:
   h/pl [i1]
   h/del [i1]
   i1 = [i1]+1
   if [i1] > 7 go to end1
   go to loop1
end1:
   

*******************************************************************************
 definir des histogrammes mono ou bi dimensionnels (avec ou sans titre)
*******************************************************************************


h/del 1
h/del 2
h/del 200
1dhisto 1 'space track multiplicity in microstrips' 40 0. 40.
1dhisto 2 ' ' 30 0. 30.
2dhisto 200 'preliminary vertex position: y vs x ' 100 -1450. -1250. 100 -2. 3.



*******************************************************************************
faire un fit
*******************************************************************************
(au prealable, definir un vecteur 'par', et si on utilise une fonction
differente d'une gaussienne, le remplir avec une premiere serie de valeurs;
               definir, si besoin est, la fonction toto.for)
dans l'exemple ci-dessous : 
  fit de l'histo no 1000 avec toto.for (fct a 2 param.)
   "        "         "         "       du canal 20 au canal 40
   "        "         "         "       du canal 20 au canal 40, avec likelihood


histo/fit 1000 toto.for ! 2 par         
histo/fit 1000(20:40) toto.for ! 2 par
histo/fit 1000(20:40) toto.for l 2 par

une fois que le fit est termine, on peut en obtenir le trace avec 
h/pl 1000 (h/pl 1000 e donne un histo avec barres d'erreur)

pour afficher les stat. du fit :
opt fit
set fit 111    (parametres + erreurs)


*******************************************************************************
creer, lire et lister un Ntuple a partir d'un fichier
*******************************************************************************


ntu/create 1000 filt 28 ' ' 10000 x y z muo mumsp mumsmax  it el mask lall_
l1 l2 l3 msmax msmin bmax1 bmax2 vtx minmst maxmst_
 minif1 minif2 wlmin wlmax ommin ommax diff iev
ntu/lis 
nt/read 1000 /us2/safe/corinne/[1].res
ntu/pri 1000


*******************************************************************************
creer SUR DISQUE, lire et lister un Ntuple a partir d'un GROS fichier
*******************************************************************************
h/file  1  toto.ntu  8192  n        (toto.ntu :fichier sur disque)
cdir //pawc
nt/create 1000  'nom' npar  '//lun1'  6000
nt/read 1000 /us2/safe/corinne/fichier.dat
ntu/pri 1000


*******************************************************************************
definir des coupures sur les variables du ntuple
*******************************************************************************

* all
ntu/cut $9 iev>0

* rejected
ntu/cut $1 l1=0.or.l2=0.or.l3=0.or.lall=0
ntu/cut $2 msmax=0.or.msmin=0
ntu/cut $3 bmax1=0.or.bmax2=0
ntu/cut $4 vtx=0
ntu/cut $5 minif1=0.or.minif2=0.or.minmst=0.or.maxmst=0
ntu/cut $6 wlmin=0.or.wlmax=0
ntu/cut $7 ommin=0.or.ommax=0
ntu/cut $8 diff=0

ntu/cut $10 wlmin=0.or.wlmax=0.or.ommin=0.or.ommax=0
ntu/cut $11 $1.or.$2.or.$3.or.$4.or.$5.or.$10.or.$8



*******************************************************************************
tracer une variable versus l'autre dans un bidim defini 
(avec ou sans condition) et mettre un texte en legende
*******************************************************************************

zone 3 2
title_global 'events rejected by [L] ch equip. length'

2dhisto 100  ' ' 100. -1600. 200. 100 -2. 1.5

ntu/pl 1000.y%x ! -100
text -1550. -2.4 'reference = all events in input' .3

ntu/pl 1000.y%x l1=0 ! -100
text -1550. -2.4 'not enough hits in crate 1' .3
ntu/pl 1000.y%x l2=0 ! -100
text -1550. -2.4 'not enough hits in crate 2' .3

zone 3 2 5 s
ntu/pl 1000.y%x l3=0 ! -100
text -1550. -2.4 'not enough hits in crate 3' .3
ntu/pl 1000.y%x lall=0 ! -100
text -1550. -2.4 'too many hits (sum over all crates)' .3



*******************************************************************************
tracer une variable versus l'autre, une troisieme etant mise comme
poids (valeur affichee)
*******************************************************************************
ntu/pl 200.fm2%fmu sx1x1 ! ! -1 text




*******************************************************************************
tracer une variable dans un histo defini
(avec ou sans condition)      et mettre un texte en legende
*******************************************************************************



title_global 'track multiplicities'

h/del 1
h/del 2
h/del 3

1dhisto 1 ' ' 30 0. 30.
* max 1  500
1dhisto 2 ' ' 40 0. 40.
* max 2  600
1dhisto 3 ' ' 60 0. 60.
* max 3  300

ntu/pl 1000.muo ! ! ! -1 
text 1. -80. 'trk mult. in [W], all events' .3
ntu/pl 1000.mumsp ! ! ! -2 
text 1. -100. 'space trk mult. in ms, all events' .3
ntu/pl 1000.mumsmax ! ! ! -3 
text 1. -50. 'max. trk mult. in proj in ms, all events' .3

ntu/pl 1000.muo $1 ! ! -1 
text 1. -1.5 'trk mult. in [W], event rejected by [L]-ch.' .3
ntu/pl 1000.mumsp $1 ! ! -2 
text 1. -1. 'space trk mult. in ms, event rejected by [L]-ch.' .3
ntu/pl 1000.mumsmax $1 ! ! -3 
text 1. -1. 'max. trk mult. in proj in ms, event rejected by [L]-ch.' .3


*******************************************************************************
mettre une coupure en parametre dans une macro
*******************************************************************************


zone 1 2
ntu/pl 1000.y%x [1] ! -200

zone 2 2 3 s

ntu/pl 1000.mumsp [1] ! -1
ntu/pl 1000.muo [1] ! -2


*******************************************************************************
passer une coupure en parametre a une macro
*******************************************************************************

opla
exec kum/level.kumac $9
clops
shell mv paw.ps paw0.ps
message paw0.ps

set mtyp 31
set mscf .6
opla
exec kum/level.kumac $1
clops
shell mv paw.ps paw1.ps
message paw1.ps

set mtyp 1
set mscf 1


*******************************************************************************
supperposer 2 histogrammes issus d'un Ntuple 
diviser 2 histogrammes dont le contenu vient d'un Ntuple
*******************************************************************************


h/del 201
h/del 202
h/del [2]

1dhisto 201 ' ' 100 0. 200. 
1dhisto 202 ' ' 100 0. 200. 

set hcol 1007
ntu/pl 1000.el it=1  -201 
set hcol 1008
ntu/pl 1000.el it=1.and.[1] -202 ! !  s 
set hcol 4
h/pl 202 s
ticks ' ' 0 0

divide 202 201 [2]


*******************************************************************************
Introduire une routine (fortran) dans une macro et l'appeler 
(dans cet exemple, on obtient le contenu d'un histo pour faire des operations)
*******************************************************************************


ve/del x
ve/del y
ve/create x(100)
ve/create y(100)

shell rm test.dat
appli comis quit
      subroutine in
      vector x(100)
      vector y(100)
      open(unit=10,file='test.dat',status='unknown')
      xtot=0.
      ytot=0.
      do  i=1,100
      xtot=xtot+x(i)
      ytot=ytot+y(i)
      enddo
      rapp = 100.*ytot/xtot
      write(6,100) xtot,ytot,rapp,p
      write(10,100) xtot,ytot,rapp,p
 100  format(2f8.0,f8.2,f8.1)
      close(10)
      end
quit

pcut = 2.
loop1:

   h/del 10
   h/del 20
   1dhisto 10 'tracks with P "g# '//[pcut]//' whose pieces are reconstructed' 100. 0. 300.
   1dhisto 20 'fully reconstructed tracks with P "g# '//[pcut] 100. 0. 300.

   ntu/pl 1000.abs(p) $14.and.abs(p).gt.[pcut] ! ! -10
   ntu/pl 1000.abs(p) $14.and.brid=1.and.abs(p).gt.[pcut] ! ! -20

   hi/get_vect/contents 10 x
   hi/get_vect/contents 20 y
   call in
  
   pcut = [pcut] + 2.
   if [pcut] > 12. go to end1

   go to loop1

end1:


*******************************************************************************
Creer une fonction fortran, contenant dans un common toutes les variables
d'une ntuple, pour faire des calculs a l'aide de ces variables  
*******************************************************************************

nt/uwfun 4000 name.for 		! 4000 = No de la ntuple
ed name.for			! pour editer et modifier la routine cree 
ntu/pl  4000.name.for           ! trace la variable issue de la fonction
                             
ntu/pl 4000.name(par)    	! si on veut passer un parametre a la fonction
				! pour plus de surete, la faire executer
				! d'abord avec ntu/pl 4000.name.for


*******************************************************************************
exemple de macros

*******************************************************************************
Determination d'efficacite:
A partir de variables dans un Ntuple, trace dans des spectres definis, dans
une certaine gamme de valeurs; boucle pour parcourir le spectre des valeurs
de la variable; superposition de spectres; division.
*******************************************************************************
Macro enlam

opt nopg
opt ndat
set hcol 1.01				! joli boite
set bcol 1.01				! avec ombre
set csiz .8				! taille des stat.
set cfon -40
set stat 110010				! entries, overflow, underflow 

set tfon -60
set yhti .9
zone 3 3


id1  = 100				!
amin =0.				! initialisations

loop1:					! debut de boucle
   amax=[amin]+20.			! definition du min et max des histos, compteur.
   id1  = [id1]+1			! No du 1er histo
   id1s = [id1]+100			! No de 2eme histo				
   message [amin] [amax]		! impression des limites des histo a l'ecran
   1dhisto [id1] '[L] energy' 40 [amin] [amax] 	! definition des 2 histo   
   1dhisto [id1s] '[L] energy' 40 [amin] [amax] 

   color_table 11 0.9 0.8 0.9			! definition d'une nouvelle couleur
   set hcol 4					! couleur du  1er trace (ligne)
   ntu/pl 1000.el it=1 ! ! -[id1]		! trace de la variable, dans 1er histo
   set hcol 1011 				! couleur du  2eme trace (remplissage)
   ntu/pl 1000.el it=1.and.$31 ! ! -[id1s] s    ! trace dans 2eme histo, en superposant
   ticks ' ' 0 0				! retrace des axes (effaces par le remplissage)

   amin = [amax]		
   if [amin]>160 go to end1		! test si fin de boucle
go to loop1				! retour au debut de boucle

end1:					! fin de la 1ere boucle


id3   = 300				! 
id1   = 100				! 
amin=0.					!
set hcol 1				! ligne noire	
set hwid 2				! epaisseur double

loop3:					! debut 2eme boucle
   amax= [amin]+20.			! definition du min et max des histos
   id1 = [id1]+1			! No de 1er histo
   id2 = [id1]+100			! no du 2eme histo
   id3 = [id3]+1			! No du 3eme histo

   h/del 1				! precaution avant division
   divide [id2] [id1] 1			! division 2eme par 1er, resultat dans No 1
   h/copy 1 [id3] 'efficiency'		! copy de No 1 dans 3eme histo : permet de
   h/pl [id3]				! lui donner un titre - trace

   amin = [amax]			! 
   if [amin]>180 go to end3		! test si fin de boucle
go to loop3				!retour en debut de 2eme boucle

end3:					! fin de boucle


set stat 001111				! 
zone					! retour aux conditions standards
title_global ' '			! 
set hwid 1

return


*******************************************************************************
Trace de courbes
A partir de donnees dans des fichiers, trace de courbes d'efficacite
*******************************************************************************
macro results

* definir la page
zone 3 2
opt nopg
opt ndat

* definir les parametres du texte, la taille des marqueurs
* l'epaisseur les lignes
igset txci 1
igset txfp -40
igset mscf 0.75
igset lwid 1.5

* definir le titre global
set gfon -30
set ygti 0.5
title_global 'preliminary results on track reconstruction efficiency'

* parametres du titre des axes
set ylab 0.5
set xlab 1.
set asiz 0.3
set lfon -10


* trace des courbes
exec ms_graph.kumac
atitle 'P (GeV/c)'  'efficiency (%)'
exec lm_graph.kumac
atitle 'P (GeV/c)'  'efficiency (%)'
exec om_graph.kumac
atitle 'P (GeV/c)'  'efficiency (%)'
exec br_graph.kumac
atitle 'P (GeV/c)'  'efficiency (%)'
exec all_graph.kumac
atitle 'P (GeV/c)'  'efficiency (%)'

* texte en commentaires
text 65. 95. 'plots of integrated efficiency' 0.3
text 65. 93. 'i.e. reconstruction efficiency for ' 0.3
text 65. 91. 'tracks with momentum greater than ...' 0.3
text 65. 87. 'simulated data "j# ' 0.3
text 65. 85. '1000 events D+ "5# K- [p]+[p]+' 0.3

return


*************
macro courbe

nmax=10

ve/del s1
ve/create s1(3,10)
ve/read s1 'ms.dat' ! 'o'
null 2. 50 70. 100.

exec courbe_1.kumac
exec courbe_2.kumac


text 49. 76. 'microstrips' .4 0 'r'
igset txci 2
text 49. 72. ' v17.6' 0.3 0 'r'
igset txci 4
text 49. 74. ' v17.8' 0.3 0 'r'
igset txci 1

return

*************
macro courbe_1

igset mtyp 27
igset pmci 2
igset plci 2
pmarker 10 s1(1,1:10) s1(2,1:10)
pline 10 s1(1,1:10) s1(2,1:10)
return

*************
macro courbe_2

igset mscf .75
igset mtyp 22
igset pmci 4
igset plci 4
pmarker 10 s1(1,1:10) s1(3,1:10)
pline 10 s1(1,1:10) s1(3,1:10)
return


*******************************************************************************
Trace d'histogrammes (a partir d'un ntuple)
dont le contenu sert a determiner une efficacite grace a une routine qui
imprime des resultats dans un fichier.
*******************************************************************************
macro pbridge

zone 3 5

set stat 10
opt ndat
opt nopg
set tsiz 0.2
set csiz 1.2

* bridging efficiency
ntu/cuts $11 ms=1.and.lm=1.and.om=1.and.vx.lt.-1327.2
ntu/cuts $12 lm=1.and.om=1.and.vx.ge.-1327.2.and.vx.lt.-649.2
ntu/cuts $13 om=1.and.vx.ge.-649.2
ntu/cuts $14 $11.or.$12.or.$13

ve/del x
ve/del y
ve/create x(100)
ve/create y(100)

shell rm test.dat
appli comis quit
      subroutine in
      vector x(100)
      vector y(100)
      open(unit=10,file='test.dat',status='unknown')
      xtot=0.
      ytot=0.
      do  i=1,100
      xtot=xtot+x(i)
      ytot=ytot+y(i)
      enddo
      rapp = 100.*ytot/xtot
      write(6,100) xtot,ytot,rapp,p
      write(10,100) xtot,ytot,rapp,p
 100  format(2f8.0,f8.2,f8.1)
      close(10)
      end
quit


pcut = 2.
loop1:

   1dhisto 10 'tracks with P "g# '//[pcut]//' whose pieces are reconstructed' 100. 0. 300.
   1dhisto 20 'fully reconstructed tracks with P "g# '//[pcut] 100. 0. 300.
   1dhisto 30 'bridging efficiency' 100. 0. 300.

   ntu/pl 1000.abs(p) $14.and.abs(p).gt.[pcut] ! ! -10
   ntu/pl 1000.abs(p) $14.and.brid=1.and.abs(p).gt.[pcut] ! ! -20
   divide 20 10 30
   opt nsta
   h/pl 30
   opt stat

   hi/get_vect/contents 10 x
   hi/get_vect/contents 20 y
   call in

   h/del 10
   h/del 20
   h/del 30
  
   pcut = [pcut] + 2.
   if [pcut] > 12. go to end1
   wait ! -1

   go to loop1

end1:

pcut = 20.
loop2:

   1dhisto 10 'tracks with P "g# '//[pcut]//' whose pieces are reconstructed' 100. 0. 300.
   1dhisto 20 'fully reconstructed tracks with P "g# '//[pcut] 100. 0. 300.
   1dhisto 30 'bridging efficiency' 100. 0. 300.

   ntu/pl 1000.abs(p) $14.and.abs(p).gt.[pcut] ! ! -10
   ntu/pl 1000.abs(p) $14.and.brid=1.and.abs(p).gt.[pcut] ! ! -20
   divide 20 10 30
   opt nsta
   h/pl 30
   opt stat

   hi/get_vect/contents 10 x
   hi/get_vect/contents 20 y
   call in

   h/del 10
   h/del 20
   h/del 30
  
   pcut = [pcut] + 10.
   if [pcut] > 50. go to end2
   go to loop2

end2:

return

*******************************************************************************