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

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();

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.