Profile with variable bin size

Hi ROOTers,

I’ve a profile where I put in X-Axis MC energies values between 0 MeV to 25GeV, in the Y-Axis I’ve calorimeter energies between 0 MeV to 5GeV. I need to create a profile with variable bin size. So that things look a little less crazy. I would say 200 MeV bins up to 1 GeV, then 500 MeV bins up to 5 GeV, then 1 GeV bins up to 10 GeV, and then 2 GeV bins up to 20 GeV.
It is not correct what I am trying to do and I need HELP :

#############################################
file = TFile(‘Result.root’,‘recreate’)
scale = [0,1000,5000,10000,25000]
Scale = array(‘d’,scale)
nbins = len(scale)-1
profile = TProfile(“Result”,“Result”,nbins,Scale)
PrimEnergy = GetPrimaryEnergy()
nP = len(PrimEnergy)
SimEnergy = GetScatterEnergy(channel.rstrip(’\n\r’))
nS = len(SimEnergy)
for i in xrange(nS):
profile.Fill(PrimEnergy[i],SimEnergy[i])
for j in xrange(nP):
Energy = profile.GetBinContent(j)
if Energy<1000 and Energy>0 :
profile.SetBinContent(200,Energy)
if Energy>1000 and Energy<5000 :
profile.SetBinContent(500,Energy)
if Energy<10000 and Energy>5000 :
profile.SetBinContent(1000,Energy)
if Energy10000 :
profile.SetBinContent(2000,Energy)
profile.Draw()
file.Write()
###################################################

So, I obtain a profile with just 4 points for each interval.

Thank you in advance
Zineb
zineb idrissi

Posts: 2
Joined: Wed Apr 30, 2014 0:50

Hi,

I am not sure I have fully understood what you would like to do. The code creating a profile with variable bins and filling it seems fine to me. But why do you want to set the bin content for the profile ?
A profile is not really designed to set the bin content, and you should not use that function. The profile computes it from the average of the filled values. If you set the bin content, you should set also the bin entries.

Lorenzo