Making more than one .csv file

Hi, I’m trying to make some .csv file.

I made a fission neutron.
I want to track the energy of incident neutron and specific fission fragment(C12).
Then save the data into “Neutron.csv” and “C12.csv”

I know this process needs RunAction & SteppingAction.
So I tried like this.

***************** RunAction.cc ***************** G4AnalysisManager* analysisManager = G4AnalysisManager::Instance();
analysisManager -> OpenFile(“Neutron_data”);
analysisManager -> CreateNtuple(“step”, “step”);
analysisManager -> CreateNtupleIColumn(“eventID”);
analysisManager -> CreateNtupleIColumn(“parentID”);
analysisManager -> CreateNtupleIColumn(“volumeID”);
analysisManager -> CreateNtupleDColumn(“edep”);
analysisManager -> CreateNtupleSColumn(“particle name”);
analysisManager -> FinishNtuple();
G4AnalysisManager* AM = G4AnalysisManager::Instance();
AM -> OpenFile(“C12_data”);
AM -> CreateNtuple(“step”, “step”);
AM -> CreateNtupleIColumn(“eventID”);
AM -> CreateNtupleIColumn(“parentID”);
AM -> CreateNtupleIColumn(“volumeID”);
AM -> CreateNtupleDColumn(“edep”);
AM -> CreateNtupleSColumn(“particle name”);
AM -> FinishNtuple();


************** SteppingAciton.cc **************
G4AnalysisManager* analysisManager = G4AnalysisManager::Instance();
if(parentID == 0)
{
//analysisManager -> OpenFile(“Neutron_data”);
//analysisManager -> Write();
analysisManager -> FillNtupleIColumn(0, eventID);
analysisManager -> FillNtupleIColumn(1, parentID);
analysisManager -> FillNtupleIColumn(2, volumeID);
analysisManager -> FillNtupleDColumn(3, totalEdep);
analysisManager -> FillNtupleSColumn(4, particleName);
analysisManager -> AddNtupleRow();
}
else if(particleName == “C12”)
{
analysisManager -> OpenFile(“C12_data”);
analysisManager -> FillNtupleIColumn(0, eventID);
analysisManager -> FillNtupleIColumn(1, parentID);
analysisManager -> FillNtupleIColumn(2, volumeID);
analysisManager -> FillNtupleDColumn(3, totalEdep);
analysisManager -> FillNtupleSColumn(4, particleName);
analysisManager -> AddNtupleRow();
}


By compile and run this with [/run/beamOn 1], the data of C12 is written on the “Neutron_data.csv” file not on a “C12_data.csv”.

How can I fix this? Or which part of manual should I look for?

The user guide on the analysis can be found here. In Files handling you can read that "The analysis manager can handle only one base file at a time. ". You can open a new file only after the previous one was closed. Also, note that your AM and analysisManager point to the same instance of the G4AnalysisManager (as they should).

Hi,

As the CSV format does not support writing several ntuples in one file, it creates automatically a file per ntuple. So in your case you can do:

G4AnalysisManager::Instance();
analysisManager -> OpenFile(“Data”);
analysisManager -> CreateNtuple(“Neutron”, “Neutron step”); // ntuple id = 0
// ...
analysisManager -> CreateNtuple(“C12”, “C12_step”);  // ntuple id = 1
// ...

Then when filling ntuple, you have to provide the ntupleId and ntupleColumnId; eg:

if (parentID == 0) {
  analysisManager -> FillNtupleIColumn(0, 0, eventID);
// ...
} else {
  analysisManager -> FillNtupleIColumn(1, 0, eventID);
}

This will produce 2 files Data_Neutron.csv and Data_C12.csv.

Best regards,

I’ll try out this to my code. Thank you for your comment Ivana.