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