|Message: Re: drawing histograms using ROOT in Example N02||Not Logged In (login)|
Click on the Forum title, e.g. on the "Forums by Category" page, to read a sequence of postings to the Forum and its threads all in one page. If you are only interested in one thread or the thread following a specific posting, click the thread or the posting, which takes you to a smaller page, which contains only the part you are interested in and may be easier to navigate.
Messages are "chained" if there are only replies at the first level, i.e. 1/1.html, 1/1/1.html etc. In case of "chained" messages the message number is replaced by the icon and there is no indentation.
Inline: Display the subject line only or also the text of the posting(s); for the choice "All" the "Outline" choices are switched off.
|1||0||1||no text / full text of posting|
|2||1||All||text for level 1 only / text for All postings|
Outline: Choose the depth of the posting thread, successive toggle controls provide increasing detail.
|1||2||1||2 levels / 1 level (original posting)|
|2||3||2||3 levels / 2 levels|
|3||3||All||3 levels / all levels (all postings)|
On Thu, 09 Aug 2012 19:34:27 GMT, nimishak wrote:
> I'm working on Example N02 given in the section Novice Examples of > Geant4 documentation. I wish to draw histograms for the energy deposited > in each step of the process, by using ROOT.
I guess that you want to have one histogram for your job, which will show the range of energies deposited at each step. Is that correct?
> For this, in the source code > of N02TrackerHit.cc, I'm adding the following commands in the > constructor N02TrackerHit: > > f= new TFile("edep.root", "RECREATE"); h = new TH1F("h", "energy > deposited", 1000, 0, 1000); h = GetXAxis()->SetTitle("Energy (keV)");
This is going to create a new TFile (all writing to the same file on disk!) for every hit which is created. I don't think that was your intention.
> In the deconstructor, I do: > > f->Write(); f->Close(); Delete f; > > In the class Print, I added: > > h->fill(fEdep); > > But this code is not working. I think that there can be two following > reasons: > > 1. The commands of root in the constructor are called for each hit, so > it's creating a histogram for the energy deposited in each step for each > hit, instead of one histogram for the energy deposited in the entire > process.
Correct; see above.
You should probably do the histogramming in G4UserRunAction.
You want to open just one ROOT file for the whole job (or a new ROOT file for each beamOn, and use the run number (G4Run::GetRunID()) as part of the filename), and you want to create a single histogram at that point. Do this in yourRunAction::BeginOfRunAction(), and save the histogram pointer in a data member of that class.
Then, in yourRunAction::transferEvent(), you can get the hit collection you created out of the G4Event pointer, loop over the hits in the collection, and fill the histogram.
Finally, in yourRunAction::EndOfRunAction(), you should call h->Write() to make sure the histogram data is written to the file, then close the file and delete everything.
|Inline Depth:||Outline Depth:||Add message:|