Hello Rooters,
I am having a segmentation fault in my TCanvas array. This was working fine with the 2D array. When I add a third set of TCanvas gave me a segmentation fault.
int i_theta_bins = 4;
int n_p = 6;
int sectors=6;
TH1F *h_pimMX2array_3fold_bgnd[i_theta_bins][n_p][sectors];
char histName_3fold_bgnd[64];
for (int isec=0; isec<sectors; isec++) {
for (int ith=0; ith<i_theta_bins; ith++) {
for (int ippim=0; ippim<n_p; ippim++) {
sprintf(histName_3fold_bgnd,"h_pimMX23foldbgndarray_p%03d_th%03d_sec%03d",ippim,ith,isec);
h_pimMX2array_3fold_bgnd[ith][ippim][isec] = new TH1F(histName,"3fold and 4fold Missing pimMassSq",300,-0.5,0.5);
h_pimMX2array_3fold_bgnd[ith][ippim][isec]->SetTitle(Form("P bin %d / th bin %d / sec %d ",ippim,ith,isec));
}
}
}
//Filling histograms
//TCanvas array
double n3bgnd[i_theta_bins][n_p][sectors];
double n4bgnd[i_theta_bins][n_p][sectors];
double bgnd_norm[i_theta_bins][n_p][sectors];
TCanvas *canEfficiency[6];
char canName[32], canLabel[48];
for (int isec=0; isec< 6; isec++){
// sprintf(canName,"CanEfficiency%03d",isec);
// sprintf(canLabel,"Sector %03d Efficiency",isec);
// canEfficiency[isec]= new TCanvas(canName,canLabel,12000,6000);
canEfficiency[isec]= new TCanvas(Form("canEfficiency%d",isec));
canEfficiency[isec]->Divide(6,4);
for (int ith=0; ith< i_theta_bins ; ith++) {
for (int ippim=0; ippim<n_p; ippim++){
n3bgnd[i_theta_bins][n_p][sectors] =h_pimMX2array_3fold_bgnd[ith][ippim][isec]->GetEntries();
// remove overflows and underflows (should be 0)
n3bgnd[i_theta_bins][n_p][sectors] += -h_pimMX2array_3fold_bgnd[ith][ippim][isec]->GetBinContent(0,0);
n3bgnd[i_theta_bins][n_p][sectors] += -h_pimMX2array_3fold_bgnd[ith][ippim][isec]->GetBinContent(h_pimMX2array_3fold_bgnd[ith][ippim][isec]->GetNbinsX()+1);
n4bgnd[i_theta_bins][n_p] [sectors]=h_pimMX2array_4fold_bgnd_notexc[ith][ippim][isec]->GetEntries();
n4bgnd[i_theta_bins][n_p][sectors] += -h_pimMX2array_4fold_bgnd_notexc[ith][ippim][isec]->GetBinContent(0,0);
n4bgnd[i_theta_bins][n_p][sectors] += -h_pimMX2array_4fold_bgnd_notexc[ith][ippim][isec]->GetBinContent(h_pimMX2array_4fold_bgnd_notexc[ith][ippim][isec]->GetNbinsX()+1);
// printf("4fold_bngd_notExc events = %f \n", n4bgnd[i_theta_bins][n_p]);
bgnd_norm[i_theta_bins][n_p][sectors] = n3bgnd[i_theta_bins][n_p][sectors]/n4bgnd[i_theta_bins][n_p][sectors];
TH1F *h_pimMX2array_3fold_norm =(TH1F*)h_pimMX2array_4fold_exc_notexc[ith][ippim][isec]->Clone("h_pimMX2array_3fold_norm");
h_pimMX2array_3fold_norm->Add(h_pimMX2array_4fold_exc_notexc[ith][ippim][isec],bgnd_norm[i_theta_bins][n_p][sectors]-1.0);
TH1F* Neg_Normalized_bgnd=( TH1F* )h_pimMX2array_3fold_norm->Clone("Neg_Normalized_bgnd");
Neg_Normalized_bgnd->Scale(-1);
TH1F* h_pimMX2array_1=(TH1F*) h_pimMX2array[ith][ippim][isec]->Clone("h_pimMX2array_1");
h_pimMX2array_1->Add(Neg_Normalized_bgnd);
TH1F*h_pimMX2array_4fold_exc_notexc_1=(TH1F*) h_pimMX2array_4fold_exc_notexc[ith][ippim][isec]->Clone("h_pimMX2array_4fold_exc_notexc_1");
h_pimMX2array_4fold_exc_notexc_1->Scale(-1);
h_pimMX2array_4fold_exc_notexc_1->Add(h_pimMX2array_4fold[ith][ippim][isec]);
TH1F* Efficiency=(TH1F*)h_pimMX2array_4fold_exc_notexc_1->Clone("Efficiency");
Efficiency->Divide(h_pimMX2array_1);
k++;
canEfficiency[isec]->cd(k);h_pimMX2array[ith][ippim][isec]->SetLineColor(kGreen);h_pimMX2array[ith][ippim][isec]->Draw();
canEfficiency[isec]->cd(k); h_pimMX2array_4fold[ith][ippim][isec]->SetLineColor(kYellow);h_pimMX2array_4fold[ith][ippim][isec]->Draw("sames");
canEfficiency[isec]->cd(k); h_pimMX2array_4fold_exc_notexc[ith][ippim][isec]->SetLineColor(kCyan);h_pimMX2array_4fold_exc_notexc[ith][ippim][isec]->Draw("sames");
canEfficiency[isec] ->cd(k); h_pimMX2array_4fold_bgnd_notexc[ith][ippim][isec]->SetLineColor(6);h_pimMX2array_4fold_bgnd_notexc[ith][ippim][isec]->Draw("sames");
canEfficiency[isec]->cd(k); h_pimMX2array_3fold_bgnd[ith][ippim][isec]->SetLineColor(8);h_pimMX2array_3fold_bgnd[ith][ippim][isec]->Draw("sames");
canEfficiency[isec]->cd(k); h_pimMX2array_3fold_norm->SetLineColor(9);h_pimMX2array_3fold_norm->Draw("sames");
canEfficiency[isec]->cd(k); h_pimMX2array_1->SetLineColor(1);h_pimMX2array_1->Draw("sames");
canEfficiency[isec]->cd(k); h_pimMX2array_4fold_exc_notexc_1->SetLineColor(2);h_pimMX2array_4fold_exc_notexc_1->Draw("sames");
}
}
}
As I realized , the segmentation fault happed after I added following part.
TCanvas *canEfficiency[6];
char canName[32], canLabel[48];
for (int isec=0; isec< 6; isec++){
// sprintf(canName,"CanEfficiency%03d",isec);
// sprintf(canLabel,"Sector %03d Efficiency",isec);
// canEfficiency[isec]= new TCanvas(canName,canLabel,12000,6000);
canEfficiency[isec]= new TCanvas(Form("canEfficiency%d",isec));
canEfficiency[isec]->Divide(6,4);
it’s not even creating my 6 canvases.
Just see only one plot.
thanks
Dil