HEPtech     - ROOTにおける"名前"などの文字列処理 : TString -
トップページ | Tips | Topics
<ROOTにおける"名前"などの文字列処理 : TString>

 特にROOTにおいて、"名前"などで文字列を便利に扱えるTString(というか、Form)について説明します。

 例えばあるパラメータのそれぞれの値に対するヒストグラムを作るために、 同じようなTH1Dなどを大量に作りたいという事は少なくないでしょう。 単にnewで複数生成できればラクなのですが、ROOTは名前でオブジェクトを管理しているので、 同じ名前で生成するとダブってると言って怒られてしまいます。 このような場合、以下のようにするとラクで安全です。

#include "TString.h"

const int nParam=10;
TH1D *energy[nParam], *time[nParam];
for ( int i=0;<nParam;i++ ){
    energy[i]=new TH1F(Form("energy%d",i+1),"",100,0.,100.);
    time[i]=new TH1F(Form("time%d",i+1),"",100,-20.,20.);
}

 使い方はstdio.h/csdioのsprintfと同じですが、自分である長さのcharの配列を用意しなくて良いので安全です。 あるいは、上記のようにして作った、条件の異なるROOTファイルが複数ある時などは、

#include "TString.h"

const int nFiles=5;
const int nParams=10;
TFile* f[nFiles];
TH1D *energy[nFiles][nParam], *time[nFiles][nParam];
for ( int i=0;i<nFiles;i++ ){
    f[i]=new TFile(Form("param%d.root",i+1));
    for ( int j=0;j<nParams;j++ ){
        energy[i][j]=(TH1D*)f[i]->Get(Form("energy%d",j+1));
        time[i][j]=(TH1D*)f[i]->Get(Form("time%d",j+1));
    }
}

というように、簡潔にまとめて記述できるのでオススメです、お試しあれ。

2005-2017 HEPtech All rights reserved. Link/Unlink free.
inserted by FC2 system