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
*******************************************************************************