Merging bins of 3D histograms

Hi Root team,

I have a 3D histogram, I need to merge some bins of its axis. For example the bins are like now [15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100…,150]

I need them like {15, 20, 25, 30, 35, 40, 45, 50, 60, 80, 150}

Hi,
Rebinning a multi-dimensional histogram in a new user defined variable binning is not supported for 2D and 3D histograms. It is however available for 1D histograms.
You will have to implement yourself, creating a new histogram and then copying the content in the new bins, using SetBinContent.

If you need any help doing this, please let me know

Best regards

Lorenzo

(post deleted by author)

HI, I was try like this, by defining a new histogram new_num, and getting content from old and were setting to new, but I’m getting an infinite loop and not getting bin content, I count for num->GetBinContent(1,1,1), but it is giving zero. Can you give any suggestions?

double edgesx[] = {15, 20, 25, 30, 35, 40, 45, 50, 60, 80, 150};
double edgesy[] = {-2.47, -2.37, -2.01, -1.81, -1.52, -1.37, -1.15, -0.80,
-0.60, -0.10, 0.00, 0.10, 0.60, 0.80, 1.15, 1.37, 1.52,
1.81, 2.01, 2.37, 2.47};
double edgesz[] = {50., 51., 52., 53., 54., 55., 56., 57., 58., 59.,
60., 61., 62., 63., 64., 65., 66., 67., 68., 69.,
70., 71., 72., 73., 74., 75., 76., 77., 78., 79.,
80., 81., 82., 83., 84., 85., 86., 87., 88., 89.,
90., 91., 92., 93., 94., 95., 96., 97., 98., 99.,
100.,101.,102.,103.,104.,105.,106.,107.,108.,109.,
110.,111.,112.,113.,114.,115.,116.,117.,118.,119.,
120.,121.,122.,123.,124.,125.,126.,127.,128.,129.,
130.,131.,132.,133.,134.,135.,136.,137.,138.,139.,
140.,141.,142.,143.,144.,145.,146.,147.,148.,149.,
150.,151.,152.,153.,154.,155.,156.,157.,158.,159.,
160.,161.,162.,163.,164.,165.,166.,167.,168.,169.,
170.,171.,172.,173.,174.,175.,176.,177.,178.,179.,
180.,181.,182.,183.,184.,185.,186.,187.,188.,189.,
190.,191.,192.,193.,194.,195.,196.,197.,198.,199.,
200.,201.,202.,203.,204.,205.,206.,207.,208.,209.,
210.,211.,212.,213.,214.,215.,216.,217.,218.,219.,
220.,221.,222.,223.,224.,225.,226.,227.,228.,229.,
230.,231.,232.,233.,234.,235.,236.,237.,238.,239.,
240.,241.,242.,243.,244.,245.,246.,247.,248.,249.,
250.};
TH3D *new_num = new TH3D(“new_num”, “new_num”, 10 ,edgesx ,20 ,edgesy, 200 ,edgesz);

TAxis *xaxis = num->GetXaxis();
TAxis *yaxis = num->GetYaxis();
TAxis *zaxis = num->GetZaxis();

for (int i = xaxis->GetFirst() ; i < xaxis->GetLast() + 1 ; i++) {
for (int j = xaxis->GetFirst() ; j < yaxis->GetLast() + 1 ; j++) {
for (int k = zaxis->GetFirst() ; k < zaxis->GetLast() + 1 ; j++) {
if (i >= 0 && i <= 7) {
new_num->SetBinContent(i,j,k,num->GetBinContent(i,j,k));
}
if (i >= 8 && i <= 9) {
new_num->SetBinContent(8,j,k,num->GetBinContent(i,j,k));
}
if (i >= 10 && i <= 13) {
new_num->SetBinContent(9,j,k,num->GetBinContent(i,j,k));
}
if (i >= 14 && i <= 27) {
new_num->SetBinContent(10,j,k,num->GetBinContent(i,j,k));
}
}
}
}
new_num->Draw();