Professional Documents
Culture Documents
Hướng dẫn sử dụng macro xử lý phổ bằng ROOT
Hướng dẫn sử dụng macro xử lý phổ bằng ROOT
Hướng dẫn sử dụng macro xử lý phổ bằng ROOT
ng Nguyn Phng
dnphuong1984@gmail.com
Ngy 24 thng 11 nm 2014
M u
Ti liu cn c
ng Nguyn Phng
Ti liu ni b NMTP
3.1
c ph
(b) Ph
60
Co ca Amptek
3.2
Tm nh
ng Nguyn Phng
Ti liu ni b NMTP
3.3
c lng v tr phng nn
Cng tng t nh vi tm nh, vic c lng phng nn lin tc c thc hin thng qua
phng thc TSpectrum::Background. Hnh 3 trnh by vic c lng phng nn lin tc vi (a)
ph Raman v (b) ph phng nn phng x HPGe, vi ng mu th hin phng nn c
lng c. Cc hnh (c) v (d) l cc ph Raman v phng nn phng x sau khi tr i phng
nn lin tc.
Hnh 3: Mt s v d c lng phng nn lin tc bng macro Spectrum_analysis trong hnh (a)
v (b); tr phng nn trong hnh (c) v (d)
ng Nguyn Phng
3.4
Ti liu ni b NMTP
Lm khp, tch nh
(x x0 )2
G(x) = A exp
2 2
Lorentz
L(x) =
1
1
2
(x x0 )2 + ( 12 )2
exp(x) = ea+bx
Hnh 5 trnh by kt qu lm khp s liu vi hai nh Gauss v phng nn tyn tnh cho cc ph
tn x tia X v ph gamma ca ngun 60 Co.
(b) Kt qu lm khp ca ph
60
Co
ng Nguyn Phng
Ti liu ni b NMTP
ng Nguyn Phng
Ti liu ni b NMTP
Rename v i tn ca batch file li cho tng ng vi tn v nh dng ca file ph, chng trnh
s t ng cp nht v thc thi file ph .
Gi s nh ta c mt file ph Genie2K c tn l Spectrum.txt. c file ph ny, ta c th i
tn file run.GraftedETFE.ETFE.bat li thnh run.Spectrum.TKA.bat, chng trnh s tm file c
tn tng ng (trong cng th mc) v c file theo nh dng nh ta khai bo.
Hnh 6 cho ta mt v d v giao din xut hin khi chy mt batch file.
Cc thc x l ph vi macro
5.1
Hm chnh ca macro
u tin chng ta s tm hiu cch thc thit lp cc x l ph cho macro. Trong phn ny chng
ta s lm quen vi hm chnh ca macro, hm ny s c tn trng vi tn file macro m trong
trng hp ny l Spectrum_analysis.
Cc bn m file macro v tm n hm Spectrum_analsyis(), cc bn s thy hm ny c ni dung
nh sau
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
Main function
*/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
int Spectrum_ana lysis ( TString filename = " GraftedETFE . txt " , TString
filetype = " ETFE " , bool showplot = false )
{
................................
................................
................................
}
6
ng Nguyn Phng
Ti liu ni b NMTP
Hm Spectrum_analsyis() c tt c 3 i s
i s th nht c kiu TString khai bo tn ca file ph, y l i s quan trng nht
(tt nhin, lm sao chng ta c th x l ph nu khng bit l ph no), gi tr bn phi
ca du = l gi tr mc nh c gn cho i s nu khng c gi tr no c truyn
TString filename = " GraftedETFE . txt "
i s th hai cng c kiu TString, khai bo nh dng ca file ph cn c, hin ti macro
c sn 4 nh dng ph l ph tn x ETFE (k hiu "ETFE"), ph Genie2K (k hiu "TKA"),
ph Amptek (k hiu "MCA") v ph ca c s d liu RRUFF (k hiu "RRUFF")
TString filetype = " ETFE "
i s th ba c kiu bool ch nhn mt trong hai gi tr true hoc false (hay 1 hoc 0),
i s ny c nhim v bt tt ch hin th hnh v th khi thc thi macro (chng ta
s ni sau)
bool showplot = false
By gi chng ta s i vo ni dung u tin ca macro
/* ******** Thiet lap ******** */
if (! showplot ) gROOT - > SetBatch ( true ) ;
setPlotStyle () ;
/* ******** Thong tin ******** */
info () ;
Dng lnh u tin dng iu khin bt tt ch hin th th khi chy chng trnh thng
qua i s showplot m ta ni trn. i s ny c mc nh gi tr false tc l hnh
v th s khng xut hin khi thc thi macro (chng ta s xut hnh v ra thng file). Vic thit
lp ch hin th hnh v ca ROOT c thc hin thng qua bin ton cc gROOT
if (! showplot ) gROOT - > SetBatch ( true ) ;
(nu gi tr truyn cho SetBatch() l true th chng trnh s c thc hin ch batch mode
tc l khng hin th hnh v, ngoi ra ta cng c th thit lp ch ny thng qua ty chnh -b
khi chy root).
Hai lnh tip theo
setPlotStyle () ;
v
info () ;
s gi cc hm thit lp kiu v v in ra thng tin ca macro (nhng ni dung nm trong hm
info()).
Phn c d liu ca ph
l khi lnh di y
ng Nguyn Phng
break ;
case TKA :
errcode =
break ;
case MCA :
errcode =
break ;
case RRUFF :
errcode =
break ;
default :
std :: cerr
errcode =
Ti liu ni b NMTP
read_TKA ( filename , h ) ;
read_MCA ( filename , h ) ;
read_RRUFF ( filename , h ) ;
<< " Error : Undefined file type " << std :: endl ;
1;
}
if ( errcode ) return errcode ;
Trong chng ta s so snh kiu nh dng filetype vi cc kiu c sn trong macro v gi cc
hm c d liu tng ng (read_ETFE(), read_TKA(), read_MCA() hay read_RRUFF()), trong
trng hp khng c kiu nh dng no ph hp, chng trnh s xut ra cu bo li
std :: cerr << " Error : Undefined file type " << std :: endl ;
y cc bn cn lu mt iu l gi tr so snh ca chng ta khng phi l cc chui, bi v
theo c php C++ chun lnh switch ... case ... khng so snh cc chui2 . Tuy nhin trong
trng hp ny cc bn li c th so snh chui bi v khi thc thi macro chng ta s dng trnh
thng dch CINT ch khng phi trnh bin dch C++, v trnh thng dch CINT chp nhn vic
so snh chui. Mt cch khc so snh chui l cc bn c th s dng chui cc cu lnh iu
kin if ... else if ... else if ... else ... so snh.
Mc d vy y ti li khng mun so snh chui m mun th mt cch khc, trong trng hp
ny l to ra mt kiu d liu lit k thng qua t kha enum, u im ca cch ny l s trnh
c vic phi so snh chui nhng vn c th s dng c switch ... case ... trong hm
chnh so snh cc nh dng v gi hm c ph hp.
Nu cc bn nhn ln pha trn ca hm Spectrum_analsyis(), cc bn s thy mt on code
sau
enum types { ETFE , TKA , MCA , RRUFF , NONE };
types hash_types ( TString type )
{
if ( type == " ETFE " ) return ETFE ;
if ( type == " TKA " )
return TKA ;
if ( type == " MCA " )
return MCA ;
if ( type == " RRUFF " ) return RRUFF ;
return NONE ;
}
y chng ta to ra mt kiu d liu mi l types c 5 gi tr l ETFE, TKA, MCA, RRUFF,
NONE, c k hiu trng vi gi tr ca chui nh dng. Sau l mt hm hash_types(TString)
nhn vo gi tr ca chui, thc hin so snh v tr v kiu d liu types tng ng. Chng ta s
s dng d liu kiu types ny thc hin so snh vi switch ... case ...
2
ng Nguyn Phng
Ti liu ni b NMTP
Cc bn cng c th s dng cch thc tng t vi cc s nguyn v bin hng thay v to mt kiu d liu
mi.
ng Nguyn Phng
Ti liu ni b NMTP
10
ng Nguyn Phng
Ti liu ni b NMTP
11
ng Nguyn Phng
Ti liu ni b NMTP
std :: cout << " Estimating background : " << std :: endl ;
TH1F * bkg = bkgEstimation (h , 5 , " B a c k I n c re a s i n g W i n d o w " ) ;
draw (h , bkg ) ;
std :: cout << " Fitting peaks : " << std :: endl ;
multipeakFitting (h , 2 , 10 , 25) ;
return 0;
}
5.2
Hm lm khp nhiu nh ph
ng Nguyn Phng
Ti liu ni b NMTP
tin cng ng ngha vi vic truyn a ch ca mng, cc phn t tip theo c th d dng suy
ra c. Trong trng hp ca x, n ch c mt gi tr nn ta s s dng phn t u tin x[0]
trong tnh ton.
Cc hm m t phng nn cng c nh ngha theo cch thc tng t
// Exponential Background function
double exponential ( double *x , double * par )
{
return TMath :: Exp ( par [0] + par [1]* x [0]) ;
}
// Linear Background function
double linear ( double *x , double * par )
{
return par [0] + par [1]* x [0];
}
Sau khi c cc hm m t nh v phng nn, ta s tip tc xy dng nh tng cu hai hm
ny, y chnh l hm m ta s s dng lm khp, trong trng hp ny ti xin ly v d hm
Gauss m t nh v hm tuyn tnh m t phng nn, ta c hm tng nh sau
// Gaussian Peaks + Background
double gaussianF ( double *x , double * par )
{
double f ;
f = linear (x ,& par [1]) ;
for ( int i = 1; i <= par [0]; ++ i ) {
f += gaussianPeak (x ,& par [ i *3]) ;
}
return f ;
}
Bin f s lu tr v tr v gi tr tnh c. Mc ch ca hm tng gaussianF() khi c xy
dng l phc v cho vic lm khp nhiu hm do ta phi tnh ton sao cho hm ny c
xy dng mt cch uyn chuyn, gi tr f c th tnh c vi s lng hm nh Gauss thay i
(khng nht thit l ch mt hm Gauss). bit c s lng nh Gauss cn lm khp, ta cn
phi truyn thng tin vo hm gaussianF(). C nhiu cch thc hin vic ny, y ti s
s dng ngay chnh mng tham s par c truyn cho hm, c th l phn t u tin par[0] s
mang thng tin v s lng nh Gauss cn lm khp. Nh vy chng ta s s dng phn t tham
s t par[1] tr i.
u tin gi tr ca f s c gn cho gi tr ca phng tuyn tnh
f = linear (x ,& par [1]) ;
Do chng ta s dng phn t u tin cha thng tin v s lng nh nn hm linear(
x,par) s s dng t par[1] tr i, c php &par[1] s gn a ch phn t th hai ca mng
par[] thuc hm gaussianF() cho a ch ca phn t u tin (par[0]) trong hm linear()4 .
Sau chng ta s cng dn cc gi tr ca cc nh Gauss vo bin f trc khi tr gi tr ny v
cho hm
for ( int i = 1; i <= par [0]; ++ i ) {
4
13
ng Nguyn Phng
Ti liu ni b NMTP
ng Nguyn Phng
Ti liu ni b NMTP
ng Nguyn Phng
Ti liu ni b NMTP
16
ng Nguyn Phng
5.3
Ti liu ni b NMTP
Hm v th
17
ng Nguyn Phng
Ti liu ni b NMTP
Li kt