Hi all,
I have been trying to convert my log histograms to linear and have been having some difficulty. Once the script is executed, nothing happens. I might be over complicating the script but I have tried the SetLogy() command as well. Any help is appreciated. Thank you 
linear_histogram.C (3.3 KB)
~/carolina/build/8.7MeV_coincidence_gates_labr_labr/gated_coincidences_total_projections/projx$ ./linear_histogram
Warning in <TFile::Append>: Replacing existing TH1: gate (Potential memory leak).
*** Break *** segmentation violation
===========================================================
There was a crash.
This is the entire stack trace of all threads:
===========================================================
#0 0x00007f851eeea45a in __GI___wait4 (pid=10602, stat_loc=stat_loc
entry=0x7fffa0aff618, options=options
entry=0, usage=usage
entry=0x0) at ../sysdeps/unix/sysv/linux/wait4.c:30
#1 0x00007f851eeea41b in __GI___waitpid (pid=<optimized out>, stat_loc=stat_loc
entry=0x7fffa0aff618, options=options
entry=0) at ./posix/waitpid.c:38
#2 0x00007f851ee50bcb in do_system (line=<optimized out>) at ../sysdeps/posix/system.c:171
#3 0x00007f8520317494 in TUnixSystem::StackTrace() () from /usr/local/lib/libCore.so
#4 0x00007f8520314795 in TUnixSystem::DispatchSignals(ESignals) () from /usr/local/lib/libCore.so
#5 <signal handler called>
#6 0x0000558cde6e07d2 in DrawLinearHistogram() ()
#7 0x0000558cde6e0c48 in main ()
===========================================================
The lines below might hint at the cause of the crash.
You may get help by asking at the ROOT forum https://root.cern.ch/forum
Only if you are really convinced it is a bug in ROOT then please submit a
report at https://root.cern.ch/bugs Please post the ENTIRE stack trace
from above as an attachment in addition to anything else
that might help us fixing this issue.
===========================================================
#6 0x0000558cde6e07d2 in DrawLinearHistogram() ()
#7 0x0000558cde6e0c48 in main ()
===========================================================
P.S. please use ``` symbols to format your console output
Dear @Xavier_James ,
First off, I just wanted to point out that your code contains many new
without the corresponding delete
. This is recipe for disaster. Please refrain from using this pattern in your C++ code. Instead of new
you should use stack-based variables or std::unique_ptr
.
That said, I don’t understand what you are trying to do exactly. Your initial post said
I have been trying to convert my log histograms to linear
But I don’t see this being done in the script. The histogram you retrieve from the file with this line
linearHist = (TH1D*)file->Get("gate");
is called linearHist
. So I assume it’s already “linear” and you don’t need to convert it “from log to linear”.
Second, the stack trace you provide in your second post doesn’t tell us a lot, since you are probably not using a ROOT build with debug symbols enabled (and that’s not really the point here), but it may very well be just due to usage of a dangling pointer or use-after-free (again another point in favor of discouraging the use of new
in your code).
SetLogy()
should be probably called on the canvas, directly after creation
TCanvas c;
c.SetLogy();
But again, I’m not sure that’s what you are trying to do in the first place. Let me know.
Cheers,
Vincenzo
1 Like