作业 5.1 液体闪烁体的脉冲形状甄别(PSD)

要求

    1. 按下列做法处理脉冲波形,进行中子/伽马粒子甄别
    1. 利用FoM评估脉冲形状效果,给出最佳的fast和total的时间范围
  • 数据来源:中国原子能科学研究院串列终端
  • 探测器 2x2 英寸 BC501A 液体闪烁体探测器
  • 放射源:钚碳中子源
  • 数据采集:XIA 数字化采集卡,500M-14bit

最佳参数下的效果

psd2

数据处理方法

打开root文件

  • 在终端打开文件
    • root -l liquidpsd.root
  • 观察文件内容
    • root [1] .ls
      TFile**        liquidpsd.root  
      TFile*     liquidpsd.root  
      KEY: TGraph   g00000;1    
      KEY: TGraph   g00001;1    
      KEY: TGraph   g00002;1    
      KEY: TGraph   g00003;1
      
  • 文件内包含10000个TGraph,name为“g00000”-“g10000”;
In [1]:
TCanvas *c1=new TCanvas;
TFile *f=new TFile("liquidpsd.root");

观察波形

  • 每个波形基线有~1650左右偏置
  • 各波形之间时间没有对齐
    • 上升沿以及峰顶没有对齐
In [2]:
c1->Clear();
g00020->SetLineColor(kBlue);
g00020->Draw();
g00030->SetLineColor(kRed);
g00030->Draw("same");
c1->Draw();

数据处理

  1. 基线修正

    • 求每个波形偏置的平均值 $y_{base}=\frac{1}{40.}\sum_{i=0}^{40}y[n]$,生成新波形 $y_b[n]=y[n]-y_{base}$。

    代码示例

In [3]:
void BaseCorrection(int gindex, TGraph *gb)
{
    //从文件指针*f中得到name为“g00020”的TGraph指针,Form()函数用法与c语言中的printf类似;
    TGraph *g=(TGraph*)f->Get(Form("g%05d",gindex));
    double *y=g->GetY();//将TGraph的y轴数值按顺序填入数组y;
    double yb[250];
    double base=0; 
    for(int i=0;i<40;i++) {
        base += y[i];
    }
    base /=40.;
    cout<<base<<endl;
    gb->Clear();
    gb->SetTitle(Form("gindex=%d",gindex));
    for(int i=0;i<250;i++) {
        yb[i]=y[i]-base;
        gb->SetPoint(i,i,yb[i]);
    } 
}
In [4]:
TGraph *gb=new TGraph;
In [5]:
BaseCorrection(30,gb);
1662.92
In [6]:
c1->Clear();
gb->Draw();
c1->Draw();
  1. 时间对齐
    • 找出每个波形的最高点位置,将波形的最高点对齐到59.

代码示例

In [7]:
void TimeCorrection(TGraph *gb, TGraph *gc)
{
    double *y=gb->GetY();//将TGraph的y轴数值按顺序填入数组y;
    gc->Clear();
    double yc[250];
    int xmax=TMath::LocMax(250,y);//TMath::LocMax(n,data),从data数组的0-n范围内找到最大值,返回最大值所在的数组索引数字
    cout<<xmax<<endl;
    int dx=59-xmax;
    for(int i=0;i<250;i++) {
        if(i+dx<0 || i+dx>=250) yc[i]=0;//防止数组超界
        else yc[i]=y[i+dx];
        gc->SetPoint(i,i,yc[i]);
    }  
    gc->SetTitle(gb->GetTitle());
}
In [8]:
TGraph *gc=new TGraph;
In [9]:
TimeCorrection(gb,gc);
61
In [10]:
c1->Clear();
g00030->SetMaximum(3500);
g00030->SetMinimum(-50);
g00030->Draw();
gb->Draw("same");
gb->SetLineColor(kRed);
gc->Draw("same");
gc->SetLineColor(kBlue);
c1->Draw();
  1. 其他步骤:
    1. 遍历所有的波形,每个波形修正基线和时间后,求出脉冲快成分的面积(fast)和脉冲总面积(total)
  • 求面积方法,对于TGraph *g;
    int t0=50;//fast,total门的左边界
    int t1=70;//fast的右边界
    int t2=250;//total的右边界
    double fast=0;
    double total=0;
    double tail;
    double *y=g->GetY();
    for(int i=t0;i<t1;i++) fast += y[i];
    for(int i=t0;i<t2;i++) total += y[i];
    tail=total-fast;
    double psd=tail/total;
    
    1. 将 tail(Y)-total(X) 填入TH2D;psd(Y)- total(X) 填入TH2D,观察脉冲形状甄别的效果
    2. 改变t0,t1,t2的参数,寻找脉冲形状甄别效果最佳的参数值。
      • 用FoM(Figure Of Merit)来评估,FoM值越大,效果越好。
      • FoM的定义见下图

psd

tips:寻找最佳参数的方法

  • 进行初步的粒子甄别,画出 $Q_{tail} - Q_{total}$ 二维关联图,得到中子和gamma波形各自满足的条件
    • 如neutron:psd>0.3 && total>20000 (选择能量稍微大一些的区域,能量大的区域中子和gamma的区分比低能区域更好)。
  • 选取 1000 个中子波形,逐一进行能量归一(面积为1),然后将 1000 个归一后的波形取平均,得到平均中子波形。同理对伽马波形进行处理,得到平均伽马波形。将平均中子、平均伽马波形画在一个图中。并对两个波形做差,可以得到中子/伽马波形的差异图(下图红线)。
  • 由中子/伽马波形差异图,可以确定最佳的积分短门。 中子伽马脉冲差异