Geant 4 生成 ROOT 文件(初学)

exmapleB4b 源代码 B4bRunAction.cc(部分)

1. 在 RunAction() 构造函数中,定义 直方图或TTree 的格式

  // Create analysis manager
  // The choice of analysis technology is done via selectin of a namespace
  // in B4Analysis.hh
  auto analysisManager = G4AnalysisManager::Instance();
  G4cout << "Using " << analysisManager->GetType() << G4endl;

  // Create directories 
  //analysisManager->SetHistoDirectoryName("histograms");
  //analysisManager->SetNtupleDirectoryName("ntuple");
  analysisManager->SetVerboseLevel(1);
  analysisManager->SetNtupleMerging(true);
    // Note: merging ntuples is available only with Root output

  // Book histograms, ntuple
  //
  
  // Creating histograms,生成四个1维直方图 TH1D
  //
  analysisManager->CreateH1("Eabs","Edep in absorber", 100, 0., 800*MeV);
  analysisManager->CreateH1("Egap","Edep in gap", 100, 0., 100*MeV);
  analysisManager->CreateH1("Labs","trackL in absorber", 100, 0., 1*m);
  analysisManager->CreateH1("Lgap","trackL in gap", 100, 0., 50*cm);

  // Creating ntuple,生成 TTree,每行四个数据
  //
  analysisManager->CreateNtuple("B4", "Edep and TrackL");
  analysisManager->CreateNtupleDColumn("Eabs");
  analysisManager->CreateNtupleDColumn("Egap");
  analysisManager->CreateNtupleDColumn("Labs");
  analysisManager->CreateNtupleDColumn("Lgap");
  analysisManager->FinishNtuple();
}

2. 在 BeginOfRunAction() 函数中,生成一个root文件,名称为B4

void B4RunAction::BeginOfRunAction(const G4Run* /*run*/)
{ 
  //inform the runManager to save random number seed
  //G4RunManager::GetRunManager()->SetRandomNumberStore(true);
  
  // Get analysis manager
  auto analysisManager = G4AnalysisManager::Instance();

  // Open an output file
  //
  G4String fileName = "B4";
  analysisManager->OpenFile(fileName);
}

3. 在 EndOfRunAction() 函数中,保存数据(analysis manager)到root文件

void B4RunAction::EndOfRunAction(const G4Run* /*run*/)
{
  // print histogram statistics
  // 该部分可查阅源代码

  // save histograms & ntuple
  //
  analysisManager->Write();
  analysisManager->CloseFile();
}

4. 在需要抽取数据的文件中,向 analysis manager 填充数据:源代码 B4bcEventAction.cc(部分)

  // Fill histograms, ntuple
  //

  // get analysis manager
  auto analysisManager = G4AnalysisManager::Instance();
 
  // fill histograms
  analysisManager->FillH1(0, absoHit->GetEdep());
  analysisManager->FillH1(1, gapHit->GetEdep());
  analysisManager->FillH1(2, absoHit->GetTrackLength());
  analysisManager->FillH1(3, gapHit->GetTrackLength());
  
  // fill ntuple
  analysisManager->FillNtupleDColumn(0, absoHit->GetEdep());
  analysisManager->FillNtupleDColumn(1, gapHit->GetEdep());
  analysisManager->FillNtupleDColumn(2, absoHit->GetTrackLength());
  analysisManager->FillNtupleDColumn(3, gapHit->GetTrackLength());
  analysisManager->AddNtupleRow(); 

5. 输出文件:

TFile**		B4.root	
 TFile*		B4.root	
  KEY: TTree	B4;1	Edep and TrackL
  KEY: TH1D	Eabs;1	Edep in absorber
  KEY: TH1D	Egap;1	Edep in gap
  KEY: TH1D	Labs;1	trackL in absorber
  KEY: TH1D	Lgap;1	trackL in gap

6. 查看数据或绘图:

B4->Show()/Scan()/Print()
Eabs->Draw()
root [2] B4->Show(0)
======> EVENT:0
 Eabs            = 46.0496
 Egap            = 3.95037
 Labs            = 32.332
 Lgap            = 17.8681

注:其他信息

AnalysisManager类信息:http://www.apc.univ-paris7.fr/~franco/g4doxy4.10/html/class_analysis_manager.html

B5RunAction信息:http://geant4-userdoc.web.cern.ch/geant4-userdoc/Doxygen/examples_doc/html/B5RunAction_8cc_source.html

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值