hướng dẫn cơ bản xử lý phổ gamma bằng root
TRANSCRIPT
-
8/11/2019 Hng dn c bn x l ph gamma bng ROOT
1/11
Hng dn c bn x l ph gamma bng ROOT
ng Nguyn [email protected]
Ngy 30 thng 9 nm 2014
Nh l mt phn m rng ca tp ti liu Hng dn s dng ROOT cho h iu hnhWindows1, bi vit ny s hng dn cc bn mt s cch thc c bn c mt file ph dngtext v x l ph vi cng c ROOT. Mc d bi vit ch ch yu tp trung vo cch thc x lph gamma nhng ngi c hon ton c th p dng cc kin thc c c vo trong vic
x l cc loi ph khc mt khi nm c cch thc hot ng ca chng trnh.
1 c file ph
Thng thng cc ph s c lu li di dng cc file s liu (phn ln l dng text nu kchthc d liu khng qu ln) tin cho vic x l offline. Trong phn ny chng ta s hc cchc ph t mt file dng text v lu vo trong histogram phc v cho cc bc x l tiptheo.
tin cho vic minh ha, ta s s dng mt file ph gamma ca ngun 60Co 1024 knh(download ti http://goo.gl/wQeh2m). Ph gamma ny c hai nh tng ng vi nng lng
1173 v 1332keV
.u tin, chng ta s to mt file macro x l ph c tn l pho_gamma.c, Trong file macrony, ta to mt hm c tn pho_gamma() (lu rng tn hm phi trng vi tn ca file)
void pho_gamma ( ){
}
K tip chng ta s khai bo mt histogram 1-chiu cha ph
void pho_gamma ( )
{ / / K ha i b ao h i s t og r a mTH1F h1 = new TH1F ( "h1", "Pho Co60 1024 kenh", 1 0 2 4 , 1 , 1 0 2 4) ;
}
B ba tham s cui cng (1024,1,1024)dng khai bo ln lt s knh (1024), gi tr ngvi knh u tin (1) v knh cui cng (1024).
Trong trng hp ta mun v ph theo nng lng ta c th khai bo nh sau
double nang_luong (i n t kenh ){
c o n s t d o ub l e A = 1 . 0 ; // g ia t r i v i du
c o n s t d o ub l e B = 0 . 0 ; // g ia t r i v i du1Xem ti http://goo.gl/olLp5o
1
http://goo.gl/wQeh2mhttp://goo.gl/olLp5ohttp://goo.gl/olLp5ohttp://goo.gl/wQeh2m -
8/11/2019 Hng dn c bn x l ph gamma bng ROOT
2/11
ng Nguyn Phng Ti liu ni b NMTP
r e t u r n ( Akenh+B ) ;}
void pho_gamma ( ){
/ / K ha i b ao h i s t og r a m
TH1F h1 = new TH1F ( "h1", "Pho Co
60 1024 kenh", 1 0 2 4 , nang_luong ( 1) ,nang_luong (10 24) ) ;
}
vi nang_luong(kenh) l hm tr v gi tr nng lng tng ng vi knh da vo ngchun nng lng ta chun trc .
Sau khi hon thnh vic khai bo histogram, cng vic tip theo chng ta s l tin hnh mfile c s liu, c 2 cch thc hin vic ny
Cch 1: s dng th vin stdio
// Mo f i l e pho Co60. dat
FILE file = fopen ( "Co60. dat ", " r " ) ;
// Doc f i l e phoi n t i = 0 ;double sodem;w h i l e ( !feof ( file ) ) {
fscanf ( file,"%l f " ,& sodem ) ;h1>SetBinContent(++i,sodem ) ;
}
// Dong f i l e phofclose ( file ) ;
Cch 2: s dng th vin iostream
// Mo f i l e pho Co60. datifstream file ( "Co60. dat " ) ;
// Doc f i l e phoi n t i = 0 ;double sodem;w h i l e ( !file.eo f ( ) ) {
file >> sodem;h1>SetBinContent(++i,sodem ) ;
}
// Dong f i l e phofile.close ( ) ;
Lu :
Trong mt s trng hp, d liu ph c cha c nhng thng tin v detector, ngun(mu) o, thi gian o,... (thng nm u file), do chng ta c th s phi thay icch c file cho ph hp vi tng trng hp c th.
Do s liu ph gamma ghi nhn sn s m theo knh nn ta s dng SetBinContent() gn thng gi tr cho knh tng ng. Trong trng hp s liu th (ch c gi tr nng
lng hoc in th ghi nhn, cha sp xp s m theo knh), ta c th s dng phngthc Fill() ghi nhn gi tr cho knh tng ng, vd:
2
-
8/11/2019 Hng dn c bn x l ph gamma bng ROOT
3/11
ng Nguyn Phng Ti liu ni b NMTP
h1>Fill ( nangluong ) ;
Trong trng hp cn v ph, ta g
h1>Draw ( ) ;
Nu mun thm thng tin ca hai trc x v y khi v ph, ta thm cc dng lnh sau trc dnglnh h1->Draw()
h1>GetXaxis ( )>SetTitle ( "Channel" ) ;h1>GetYaxis ( )>SetTitle ( "Number of e n t r ie s " ) ;
Sau khi thc hin xong tt c cc bc lit k, file macro pho_gamma.cin hnh c ni dungnh sau
void pho_gamma ( ){
/ / K ha i b ao h i s t og r a mTH1F h1 = new TH1F ( "h1", "Pho Co60 1024 kenh", 1 02 4 , 1 , 1 0 2 4) ;
// Mo f i l e pho Co60. datifstream file ( "Co60. dat " ) ;
// Doc f i l e phoi n t i = 0 ;double sodem;w h i l e ( !file.eo f ( ) ) {
file >> sodem;h1>SetBinContent(++i,sodem ) ;
}
// Dong f i l e phofile.close ( ) ;
// Ve phoh1>GetXaxis ( )>SetTitle ( "Channel" ) ;h1>GetYaxis ( )>SetTitle ( "Number of e n t r ie s " ) ;h1>Draw ( ) ;
}
thc thi file macro trong ROOT, ti du nhc ta g lnh root -l ng nhp vo ROOT,
sau g .x pho_gamma.c> root lroot [ 0 ] . x pho_gamma. c
hoc n gin hn bng cch g trc tip
> root l pho_gamma. c
Kt qu v ph c cho nh trong Hnh1.
thot khi ROOT ta g
root [ 1 ] . q
3
-
8/11/2019 Hng dn c bn x l ph gamma bng ROOT
4/11
ng Nguyn Phng Ti liu ni b NMTP
Hnh 1: Ph ca ngun 60Co 1024 knh
2 Lm khp nh ph v phng nn
2.1 Lm khp vi 1 nh
Gi s ta mun lm khp nh nng lng 1173keV theo dng Gaussian
f(x) =Aexp (x x0)
2
22 (1)
trong A l cao nh, x0 l v tr ca nh v l lch chun ca phn b nh. Vphng nn c dng tuyn tnh (a thc bc nht)
g(x) =ax+b (2)
Ta khai bo hai hm nh v phng nn trong ROOT nh sau
// Ham mo ta dinh dang GaussianTF1 dinh = new TF 1 ( "dinh", " [0 ] TMath : : Gaus ( x , [ 1 ] , [ 2 ] ) ", min, ma x ) ;// Ham mo t a phong nen dang da t huc bac 1
TF1
phongnen = new TF 1 ( "phongnen", " [ 0 ] + [ 1 ]
x", min, max ) ;
Chng ta nh ngha hai hm dinh (3 tham s)v phongnen (2 tham s) tng ng vi dngca nh v phng nn m ta cn lm khp. Hai gi tr minvmaxtng ng vi khong gi tr(khong knh) m ta cn lm khp. Ngoi ra ta cng c th s dng cc hm tch hp c sntrongTF1 khai bo
// Ham mo ta dinh dang GaussianTF1 dinh = new TF 1 ( "dinh", "gaus", min, ma x ) ;// Ham mo t a phong nen dang da t huc bac 1TF1 phongnen = new TF 1 ( "phongnen", " p o l 1 ", min, ma x ) ;
K , ta s nh ngha hm cn lm khp l tng ca hai hm ny
// Ham lam khop bang t ong c ua ham dinh va phong nenTF1 f = new TF 1 ( " f ", "dinh+phongnen", min, max ) ;
4
-
8/11/2019 Hng dn c bn x l ph gamma bng ROOT
5/11
ng Nguyn Phng Ti liu ni b NMTP
Hmfs c tt c 5 tham s, trong ba tham s u tin (c ch s t 0 n 2) s tng ngvi cc tham s ca nh v 2 tham s cui s tng ng vi phng nn.
Trong trng hp mun cung cp gi tr c lng (v tr nh, rng nh,...) cho cc thams trong qu trnh lm khp, ta c th s dng hm SetParameter()
// Tham so dau vaof>SetParameter (1 ,680) ; // u oc l uo ng v i t r i di nh ( tham s o c o c h i s o 1 )f>SetParameter (2 ,10) ; // u oc l uo ng be r on g d i nh ( tham s o c o c h i s o 2 )
lm khp histogram, ta g
h1>Fit ( " f " ) ;
Sau khi thm phn lm khp, file pho_gamma.cc ni dung nh sau
void pho_gamma ( ){
TH1F h1 = new TH1F ( "h1", "Pho Co60 1024 kenh", 1 02 4 , 1 , 1 0 2 4) ;ifstream file ( "Co60. dat " ) ;
i n t i = 0 ;double sodem;w h i l e ( !file.eo f ( ) ) {
file >> sodem;h1>SetBinContent(++i,sodem ) ;
}file.close ( ) ;
// Khai bao ham c an lam khopdouble mi n = 650 , ma x = 7 3 0;
TF 1 dinh = new TF1 ( "dinh", " [0 ] TMath : : Gaus( x , [ 1 ] , [ 2 ] ) ",min, ma x ) ;TF 1 phongnen = new TF1 ( "phongnen", " [ 0 ] + [ 1 ] x", min, ma x ) ;TF 1 f = new TF1 ( " f ", "dinh+phongnen", min, ma x ) ;
// T ien hanh lam khopf>SetParameter (1 ,680) ; // uoc l u on g v i t r i d in hf>SetParameter (2 ,10) ; // u o c l u o ng do r o n g d i nhh1>Fi t ( " f " ) ;
}
Kt qu lm khp2 c cho di y v trong Hnh2
FC N =190921 FROM MIGRAD STATUS=CONVERGED 38 8 CALLS 38 9 TOTALED M =6.14761 e09 STRATEGY= 1 ERROR MATRIXUNCERTAINTY 1 . 9 per cent
EXT PARAMETER STEP FIRST
NO. NAME VALUE ERROR SIZE DERIVATIVE1 p0 2 . 1 6 9 8 5 e+03 1 .0 28 33 e+01 7.58175 e03 1 .9 20 97 e062 p1 6 . 9 4 7 1 8 e+02 6 .6 98 16 e02 5.47668 e07 6.69323 e043 p2 1 . 5 8 8 6 7 e+01 5 .9 06 63 e02 8 . 796 92 e05 1 .0 57 71 e034 p3 4 . 5 5 6 1 4 e+02 1 .0 97 15 e+00 7 .7 73 81 e04 7 .5 75 60 e065 p4 3.34368e01 1 . 45 069 e03 9.55275 e07 8.72390 e02
Trong , p0,...,p4l cc tham s c lm khp. truy xut cc tham s c lm khp, ta
s dng hm GetParameters()2Cng c c s dng lm khp y l lp TMinuit(xem thm ti http://goo.gl/T7TOvy).
5
http://goo.gl/T7TOvyhttp://goo.gl/T7TOvy -
8/11/2019 Hng dn c bn x l ph gamma bng ROOT
6/11
ng Nguyn Phng Ti liu ni b NMTP
f l o a t par;f>GetParameters ( pa r ) ;
Hnh 2: Kt qu lm khp nh 1173keV
Lm khp vi hm do ngi dng t nh ngha Trong trng hp s dng hm dongi dng t nh ngha, trc tin ta cn phi khai bo cc dng ca hm cn lm khp
// Ham mo t a dinh dang G auss iandouble dinh (double x, double par ) {
r e t u r n ( par[ 0 ] TMath: : Gaus ( x[ 0 ] ,pa r[ 1 ] ,pa r[ 2 ] ) ) ;}
// Ham mo t a phong nen dang da t huc bac 1double phongnen (double x, double par ) {
r e t u r n par[ 0 ] + pa r[ 1 ] x[ 0 ] ;}
Hm cn lm khp l tng ca hai hm dinh()v phongnen()
// Ham lam khop bang t ong c ua ham dinh G aussian va phong nendouble tong (double x, double par ) {r e t u r n ( dinh ( x,pa r )+phongnen ( x ,& pa r[ 3 ] ) ) ;
}
Hm tong()c tt c 5 tham s, trong 3 tham s u (c ch s t 0 n 2) l cc tham sm t nh Gaussian v 2 tham s cui (c ch s 3 v 4) m t phng nn. Do trong ta chcn khai bo dinh(x,par)(tng ng vi dinh(x,&par[0]), cn i vi hm phng nn tacn khai bo phongnen(x,&par[3]) gn tham s th t (c ch s 3) cho tham s u tinca hm phng nn.
Trong hm pho_gamma()ta khai bo mt i tng thuc lp TF1 tng ng vi hm cn lm
khp/ / Tao ham f t r o n g k ho an g ( min , max ) c o 5 tham s o ( 3 c ho d in h , 2 c ho p ho ng
nen)
6
-
8/11/2019 Hng dn c bn x l ph gamma bng ROOT
7/11
ng Nguyn Phng Ti liu ni b NMTP
TF1 f = new TF 1 ( " f ", tong, min, max, 5 ) ;
Sau khi nh ngha hm f, cch thc lm khp cng tng t nh hng dn trn.
2.2 Lm khp vi nhiu nh
Tng t nh vi cch thc lm khp mt nh nhng thay v ch khai bo 1 hm cho 1 nhduy nht, ta s khai bo thm cc hm nh na tng ng vi s lng nh cn lm khp.
Trong v d ny, ta s tin hnh lm khp hai nh 1173 v 1332keV cng lc.
void pho_gamma ( ){
TH1F h1 = new TH1F ( "h1", "Pho Co60 1024 kenh", 1 02 4 , 1 , 1 0 2 4) ;ifstream file ( "Co60. dat " ) ;
i n t i = 0 ;double sodem;
w h i l e ( !file.eo f ( ) ) {file >> sodem;h1>SetBinContent(++i,sodem ) ;
}file.close ( ) ;
// Khai bao ham c an lam khopdouble mi n = 650 , ma x = 8 4 0;TF 1 dinh1 = new TF 1 ( "dinh1", " [0 ] TMath : : Gaus ( x , [ 1 ] , [ 2 ] ) ",min, ma x ) ;TF 1 dinh2 = new TF 1 ( "dinh2", " [0 ] TMath : : Gaus ( x , [ 1 ] , [ 2 ] ) ",min, ma x ) ;TF 1 phongnen = new TF1 ( "phongnen", " [ 0 ] + [ 1 ] x", min, ma x ) ;TF 1 f = new TF1 ( " f ", "dinh1+dinh2+phongnen", min, ma x ) ;
// T ien hanh lam khopf>SetParameter (1 ,680) ; // u oc l u on g v i t r i dinh 1f>SetParameter (2 ,10) ; // u o c l u o ng do r o n g d i nh 1f>SetParameter (4 ,800) ; // u oc l u on g v i t r i dinh 2f>SetParameter (5 ,10) ; // u o c l u o ng do r o n g d i nh 2h1>Fi t ( " f " ) ;
}
Kt qu thu c nh sau
FC N =129525 FROM MIGRAD STATUS=CONVERGED 77 8 CALLS 77 9 TOTALED M =1.28668 e07 STRATEGY= 1 ERROR MATRIX
UNCERTAINTY 1 . 7 per centEXT PARAMETER STEP FIRST
NO. NAME VALUE ERROR SIZE DERIVATIVE1 p0 2 . 1 8 3 1 7 e+03 1 .0 10 23 e+01 1 .1 94 52 e02 4 .6 47 91 e052 p1 6 . 9 4 6 5 6 e+02 6 .5 49 87 e02 4 . 240 25 e05 4.75500 e033 p2 1 . 6 0 2 1 1 e+01 5 .7 15 97 e02 7.22233 e05 1 .0 66 56 e024 p3 1 . 8 3 7 5 7 e+03 8 .8 67 22 e+00 6.74572 e03 9 .5 44 55 e065 p4 7 . 8 7 3 2 9 e+02 7 .0 59 84 e02 7 . 153 74 e05 1.11855 e036 p5 1 . 6 0 2 3 4 e+01 5 .5 48 44 e02 3.39193 e05 6.49520 e037 p6 4 . 4 9 7 8 7 e+02 1 .0 84 71 e+00 4.24501 e04 1 .3 27 24 e048 p7 3.49310e01 1 . 42 140 e03 4 . 716 60 e07 2 .0 57 78 e01
7
-
8/11/2019 Hng dn c bn x l ph gamma bng ROOT
8/11
ng Nguyn Phng Ti liu ni b NMTP
Hnh 3: Kt qu lm khp hai nh 1173 v 1332keV
3 TSpectrum
TSpectrum l mt lp c xy dng nhm phc v cho nhu cu x l ph, c bit l phgamma. M ngun gc ca lp ny c vit bi Miroslav Morhac bng ngn ng lp trnh Cv vit li bng C++ bi Rene Brun. Cc bn c th tham kho thm thng tin v lp ny tihttp://root.cern.ch/root/html530/TSpectrum.html .
Khai bo khai bo mt i tng thuc lp TSpectrumta g
TSpectrum s = new TSpectrum ( ) ;
c lng phng nn thng qua hm Background(), hm ny s tnh ton ph phng nnthng qua thut ton SNIP (Sensitive Nonlinear Iterative Peak) c cng thc nh sau
vp(i) = min
vp1(i),
vp1(i+p) +vp1(ip)
2
(3)
vipl s ln lp v il v tr knh. c lng phng nn di chn hai nh ph 60Co ta lm nh sau
void pho_gamma ( ){
TH1F h1 = new TH1F ( "h1", "Pho Co60 1024 kenh", 1 02 4 , 1 , 1 0 2 4) ;ifstream file ( "Co60. dat " ) ;
i n t i = 0 ;double sodem;w h i l e ( !file.eo f ( ) ) {
file >> sodem;h1
>SetBinContent(++i,sodem ) ;
}file.close ( ) ;
8
http://root.cern.ch/root/html530/TSpectrum.htmlhttp://root.cern.ch/root/html530/TSpectrum.htmlhttp://root.cern.ch/root/html530/TSpectrum.html -
8/11/2019 Hng dn c bn x l ph gamma bng ROOT
9/11
ng Nguyn Phng Ti liu ni b NMTP
h1>GetXaxis ( )>SetRange (600 ,1000 ) ; / / kh oa ng g i a t r i ( k ho an g ken h )c an u oc l u o ng p ho ng n en
h1>Draw ( ) ; / / ve ph o
// Khai bao TSpectrumTSpectrum s = new TSpectrum ( ) ;
// Uoc l uo ng phong nen v o i s o l a n l a p l a 50/ / s u dung o p t io n " same " d e v e p hong nen t r e n c un g d o t h i v o i phoTH1F background = s>Background ( h1,50 , "same" ) ;
}
Hnh 4: Kt qu c lng phng nn di chn hai nh 1173 v 1332keV
Mt s option c th c s dng trong hm Background()gm c:
BackIncreasingWindow: y l option mc nh cho hm
BackOrderN: s dng phng php clipping filter, vi N= 2, 4, 6, 8
nosmoothing: khng lm trn (mc nh l c lm trn)
BackSmoothingN: rng ca s lm trn, vi N = 3, 5, 7, 9, 11, 13, 15
Compton: s dng nu c cnh Compton (Compton edge) trong vng lm khp
same: hin th kt qu trn cng th vi ph
Tm nh thng qua hm Search(). Phng php tm nh y c da trn phngphp vi phn bc hai c lm trn. Cch thc thc hin nh sau
void pho_gamma ( ){
TH1F h1 = new TH1F ( "h1", "Pho Co60 1024 kenh", 1 02 4 , 1 , 1 0 2 4) ;ifstream file ( "Co60. dat " ) ;
i n t i = 0 ;
9
-
8/11/2019 Hng dn c bn x l ph gamma bng ROOT
10/11
ng Nguyn Phng Ti liu ni b NMTP
double sodem;w h i l e ( !file.eo f ( ) ) {
file >> sodem;h1>SetBinContent(++i,sodem ) ;
}file.close ( ) ;
// Khai bao TSpectrumTSpectrum s = new TSpectrum ( ) ;
// Tim d in h v o i c ac tham s o l a n l u o t l a :// ( hist ogr am , s igma , "op t ion " , t hr e shol d )i n t sodinh = s>Search ( h1, 2 , "", 0 . 2 0 ) ;
}
Hnh 5: Kt qu tm nh ca ph 60Co, v tr ca cc nh c nh du bi tam gic mu
Chc nng ca cc tham s trong hm Search() nh sau:
histogram: ph cn tm nh.
sigma: rng nh. Trong trng hp nh ti knh i c hiu gia s m nh v sm trung bnh ca hai knh (i
3*sigma, i + 3*sigma) nh hn threshold, nh ny s
b loi b.
threshold: cc nh c s m nh hn tch ca thresholdv s m ca nh cao nht sb loi b (gi tr mc nh l 0.05).
option:
noMarkov: khng s dng thut ton chui Markov (mc nh l c s dng)
goff: khng lu d liu v v kt qu tm nh
nodraw: khng v ph vi kt qu tm nh
thu c thng tin v s lng nh tm c v v tr cc nh ta c th truy xut cc thnhphn fNPeaksv fPositionXthng qua cc hm
10
-
8/11/2019 Hng dn c bn x l ph gamma bng ROOT
11/11
ng Nguyn Phng Ti liu ni b NMTP
i n t sodinh = s>GetNPeaks ( ) ; / / s o l u on g d i nh t im d uo cf l o a t vitri = s>GetPositionX ( ) ; / / mang ( a r r ay ) ch ua v i t r i c ac d in h
Ti liu[1] http://root.cern.ch/root/html/TF1.html
[2] http://root.cern.ch/root/html530/TSpectrum.html
11
http://root.cern.ch/root/html/TF1.htmlhttp://root.cern.ch/root/html530/TSpectrum.htmlhttp://root.cern.ch/root/html530/TSpectrum.htmlhttp://root.cern.ch/root/html/TF1.html