THStack grid lines

I am plotting projections of 2d histograms that pass a TCutG. I then THStack them together and plot them. The projections are TH1D* and they are 70% transparent, however only the first histogram in the THStack is actually plotted as 70% transparent.

Why is this? How can I make them all 70% transparent?

OR

How can I plot the grid lines on top of the THStack plots?

The code snippet that produces these plots is below
Thanks,

Jeremy



[code]/////////////////////////////// noMask create colorcoded ADC projection stack ///////////////////////////////////
printf("////////////////////// noMask create colorcoded ADC projection stack ///////////////////////////////////\n");
TLegend* noMask_pidCuts_stack_legend = new TLegend(stack_leg_x_start,0.6,stack_leg_x_stop,0.89);
noMask_pidCuts_stack_legend->SetTextFont(42);
noMask_pidCuts_stack_legend->SetTextSize(0.03);
noMask_pidCuts_stack_legend->AddEntry(noMaskAlphasEn,noMaskAlphasEn_percent_char,“f”);
noMask_pidCuts_stack_legend->AddEntry(noMaskFragsEn,noMaskFragsEn_percent_char,“f”);
noMask_pidCuts_stack_legend->AddEntry(noMaskFragsUnlikelyEn,noMaskFragsUnlikelyEn_percent_char,“f”);
noMask_pidCuts_stack_legend->AddEntry(noMaskAlphasEn_alphaCut_short_low,noMaskAlphasEn_alphaCut_short_low_percent_char,“f”);
noMask_pidCuts_stack_legend->AddEntry(noMaskAlphasEn_short_higher,noMaskAlphasEn_short_higher_percent_char,“f”);
noMask_pidCuts_stack_legend->AddEntry(noMaskAlphasEn_long,noMaskAlphasEn_long_percent_char,“f”);
noMask_pidCuts_stack_legend->AddEntry(noMaskAlphasEn_long_low,noMaskAlphasEn_long_low_percent_char,“f”);
noMask_pidCuts_stack_legend->AddEntry(noMaskAlphasEn_long_high,noMaskAlphasEn_long_high_percent_char,“f”);
THStack* noMask_pidCuts_En_Stack = new THStack(“noMask_pidCuts_En_Stack”,"");
noMask_pidCuts_En_Stack->Add(noMaskFragsEn);
noMask_pidCuts_En_Stack->Add(noMaskFragsUnlikelyEn);
noMask_pidCuts_En_Stack->Add(noMaskAlphasEn);
noMask_pidCuts_En_Stack->Add(noMaskAlphasEn_long);
noMask_pidCuts_En_Stack->Add(noMaskAlphasEn_long_low);
noMask_pidCuts_En_Stack->Add(noMaskAlphasEn_long_high);
noMask_pidCuts_En_Stack->Add(noMaskAlphasEn_short_higher);
noMask_pidCuts_En_Stack->Add(noMaskAlphasEn_alphaCut_short_low);
noMask_pidCuts_En_Stack->SetMinimum(0.5);
noMask_pidCuts_En_Stack->SetMaximum(maxY_energy);
noMask_pidCuts_En_Stack->Draw();
c1->SetLogx(0);c1->SetLogy(1);
noMask_pidCuts_En_Stack->GetXaxis()->SetTitle(“Track Energy [MeV]”);
noMask_pidCuts_En_Stack->GetXaxis()->CenterTitle();
noMask_pidCuts_En_Stack->GetXaxis()->SetRangeUser(0.4,15);
noMask_pidCuts_En_Stack->SetTitle(“noMask_pidCuts_En_Stack_logy”);
noMask_pidCuts_stack_legend->Draw();
c1->SaveAs(“noMask_pidCuts_En_Stack_logy_lowEn.png”);
c1->SetLogx(1);
noMask_pidCuts_En_Stack->SetTitle(“noMask_pidCuts_En_Stack_logxy”);
noMask_pidCuts_En_Stack->Draw();
noMask_pidCuts_En_Stack->GetXaxis()->SetRangeUser(0.4,160);
noMask_pidCuts_stack_legend->Draw();
c1->Update();
c1->SaveAs(“noMask_pidCuts_En_Stack_logxy_fullEn.png”);
/////////////////////////////// cft create colorcoded ADC projection stack ///////////////////////////////////
printf("////////////////////// cft create colorcoded ADC projection stack ///////////////////////////////////\n");
TLegend* cft_pidCuts_stack_legend = new TLegend(stack_leg_x_start,0.6,stack_leg_x_stop,0.89);
cft_pidCuts_stack_legend->SetTextFont(42);
cft_pidCuts_stack_legend->SetTextSize(0.03);
cft_pidCuts_stack_legend->AddEntry(cftAlphasEn,cftAlphasEn_percent_char,“f”);
cft_pidCuts_stack_legend->AddEntry(cftFragsEn,cftFragsEn_percent_char,“f”);
cft_pidCuts_stack_legend->AddEntry(cftFragsUnlikelyEn,cftFragsUnlikelyEn_percent_char,“f”);
cft_pidCuts_stack_legend->AddEntry(cftAlphasEn_alphaCut_short_low,cftAlphasEn_alphaCut_short_low_percent_char,“f”);
cft_pidCuts_stack_legend->AddEntry(cftAlphasEn_short_higher,cftAlphasEn_short_higher_percent_char,“f”);
cft_pidCuts_stack_legend->AddEntry(cftAlphasEn_long,cftAlphasEn_long_percent_char,“f”);
cft_pidCuts_stack_legend->AddEntry(cftAlphasEn_long_low,cftAlphasEn_long_low_percent_char,“f”);
cft_pidCuts_stack_legend->AddEntry(cftAlphasEn_long_high,cftAlphasEn_long_high_percent_char,“f”);
THStack* cft_pidCuts_En_Stack = new THStack(“cft_pidCuts_En_Stack”,"");
cft_pidCuts_En_Stack->Add(cftFragsEn);
cft_pidCuts_En_Stack->Add(cftFragsUnlikelyEn);
cft_pidCuts_En_Stack->Add(cftAlphasEn);
cft_pidCuts_En_Stack->Add(cftAlphasEn_long);
cft_pidCuts_En_Stack->Add(cftAlphasEn_long_low);
cft_pidCuts_En_Stack->Add(cftAlphasEn_long_high);
cft_pidCuts_En_Stack->Add(cftAlphasEn_short_higher);
cft_pidCuts_En_Stack->Add(cftAlphasEn_alphaCut_short_low);
cft_pidCuts_En_Stack->SetMaximum(maxY_energy);
cft_pidCuts_En_Stack->SetMinimum(0.5);
cft_pidCuts_En_Stack->Draw();
c1->SetLogx(0);c1->SetLogy(1);
cft_pidCuts_En_Stack->GetXaxis()->SetTitle(“Track Energy [MeV]”);
cft_pidCuts_En_Stack->GetXaxis()->CenterTitle();
cft_pidCuts_En_Stack->GetXaxis()->SetRangeUser(0.4,15);
cft_pidCuts_En_Stack->SetTitle(“cft_pidCuts_En_Stack_logy”);
cft_pidCuts_stack_legend->Draw();
c1->SaveAs(“cft_pidCuts_En_Stack_logy_lowEn.png”);
c1->SetLogx(1);
cft_pidCuts_En_Stack->SetTitle(“cft_pidCuts_En_Stack_logxy”);
cft_pidCuts_En_Stack->Draw();
cft_pidCuts_En_Stack->GetXaxis()->SetRangeUser(0.4,160);
cft_pidCuts_stack_legend->Draw();
c1->Update();
c1->SaveAs(“cft_pidCuts_En_Stack_logxy_fullEn.png”);

//////////////////// alpha/frag stacks comparison /////////////
printf("\n//////////////////// noMask stacks comparison /////////////\n\n");
TLegend* noMaskEnStack_legend = new TLegend(0.5,0.75,0.85,0.89);
noMaskEnStack_legend->SetTextFont(42);
noMaskEnStack_legend->SetTextSize(0.03);
noMaskEnStack_legend->AddEntry((TObject*)0,noMaskFragChar,"");
noMaskEnStack_legend->AddEntry((TObject*)0,noMaskAlphaChar,"");
THStack* noMaskEnStack = new THStack(“noMaskEnStack”,"");
noMaskFragsEn->SetFillColorAlpha(kViolet,0.3);
noMaskFragsEn->SetLineWidth((Width_t)1);
noMaskFragsEn->SetLineColor(kViolet);
noMaskAlphasEn->SetFillColorAlpha(kSpring,0.3);
noMaskAlphasEn->SetLineWidth((Width_t)1);
noMaskAlphasEn->SetLineColor(kSpring);
noMaskEnStack->Add(noMaskFragsEn);
noMaskEnStack->Add(noMaskAlphasEn);
noMaskEnStack->SetMinimum(0.5);
noMaskEnStack->SetMaximum(maxY_energy);
noMaskEnStack->Draw();
noMaskEnStack->GetXaxis()->SetRangeUser(0.4,15);
c1->SetLogx(0);c1->SetLogy(1);
noMaskEnStack->SetTitle(“noMaskLvEn_stack energy projection”);
noMaskEnStack->GetXaxis()->SetTitle(“Track Energy [MeV]”);
noMaskEnStack->GetXaxis()->CenterTitle();
c1->Update();
sprintf(c1PlotName,"%s.preamp%d.noMaskEn.lowEn.logy.png",actinide,preamp);
c1->SaveAs(c1PlotName,“recreate”);
noMaskEnStack->GetXaxis()->SetRangeUser(0.4,160);
c1->SetLogx(1);c1->SetLogy(1);
c1->Update();
sprintf(c1PlotName,"%s.preamp%d.noMaskEn.fullEn.logxy.png",actinide,preamp);
c1->SaveAs(c1PlotName,“recreate”);
printf("\n//////////////////// cft stacks comparison /////////////\n\n");
TLegend* cftEnStack_legend = new TLegend(0.5,0.75,0.85,0.89);
cftEnStack_legend->SetTextFont(42);
cftEnStack_legend->SetTextSize(0.03);
cftEnStack_legend->AddEntry((TObject*)0,cftFragChar,"");
cftEnStack_legend->AddEntry((TObject*)0,cftAlphaChar,"");
THStack* cftEnStack = new THStack(“cftEnStack”,"");
cftFragsEn->SetFillColorAlpha(kViolet,0.3);
cftFragsEn->SetLineWidth((Width_t)1);
cftFragsEn->SetLineColor(kViolet);
cftAlphasEn->SetFillColorAlpha(kSpring,0.3);
cftAlphasEn->SetLineWidth((Width_t)1);
cftAlphasEn->SetLineColor(kSpring);
cftEnStack->Add(cftFragsEn);
cftEnStack->Add(cftAlphasEn);
cftEnStack->SetMinimum(0.5);
cftEnStack->SetMaximum(maxY_energy);
cftEnStack->Draw();
c1->SetLogx(0);c1->SetLogy(1);
cftEnStack->GetXaxis()->SetRangeUser(0.4,15);
cftEnStack->SetTitle(“cftLvEn_stack energy projection”);
cftEnStack->GetXaxis()->SetTitle(“Track Energy [MeV]”);
cftEnStack->GetXaxis()->CenterTitle();
c1->Update();
sprintf(c1PlotName,"%s.preamp%d.cftEn.lowEn.logy.png",actinide,preamp);
c1->SaveAs(c1PlotName,“recreate”);
cftEnStack->GetXaxis()->SetRangeUser(0.4,160);
c1->SetLogx(1);c1->SetLogy(1);
c1->Update();
sprintf(c1PlotName,"%s.preamp%d.cftEn.fullEn.logxy.png",actinide,preamp);
c1->SaveAs(c1PlotName,“recreate”);[/code]

You should define a transparent color individually for each histogram in the stack

gPad->RedrawAxis() will do that

This doesn’t work in my macro or in the ROOT interactive environment. I am suspicious of how similar (or different) gStyle/gPad/gROOT work in batch mode vs the ROOT interactive environment: Is gPad supposed to work in batch mode?

How do I define a transparent color?

It is interesting that the last histogram added to the stack does appear translucent as I intend. See for yourself: change which histogram is added last using the below snippet (which runs in my root interactive session after I load the histograms)

folder containing macro + histograms (50MB):
https://drive.google.com/open?id=0B0yo8W35DM9AaTRDcndmZDhtNjQ

Thanks!

This snippet runs in my (macOS sierra, root_v6.08.00) ROOT interactive environment:

TCanvas* c1 = new TCanvas("c1","c1",1000,700);
c1->SetGrid(1);
c1->SetRightMargin(0.1);
c1->SetLeftMargin(0.08);
c1->SetBorderMode(-1);
c1->SetBorderSize(100);
c1->SetHighLightColor(kRed);
c1->Paint();
c1->SetLogx(1);c1->SetLogy(1);
double maxY_energy = 1.5*noMaskEn->GetMaximum();
cftFragsEn->SetFillColorAlpha(kViolet,0.7);
cftFragsUnlikelyEn->SetFillColorAlpha(kViolet-9,0.7);
cftAlphasEn->SetFillColorAlpha(kSpring,0.7);
cftAlphasEn_long->SetFillColorAlpha(kCyan,0.7);
cftAlphasEn_long_low->SetFillColorAlpha(kYellow,0.7);
cftAlphasEn_long_high->SetFillColorAlpha(kBlue,0.7);
cftAlphasEn_short_higher->SetFillColorAlpha(kOrange+7,0.7);
cftAlphasEn_alphaCut_short_low->SetFillColorAlpha(kRed,0.7);

THStack* cft_pidCuts_En_Stack = new THStack("cft_pidCuts_En_Stack","");
cft_pidCuts_En_Stack->Add(cftFragsUnlikelyEn);
cft_pidCuts_En_Stack->Add(cftAlphasEn_long);
cft_pidCuts_En_Stack->Add(cftAlphasEn_long_low);
cft_pidCuts_En_Stack->Add(cftAlphasEn_long_high);
cft_pidCuts_En_Stack->Add(cftAlphasEn_short_higher);
cft_pidCuts_En_Stack->Add(cftAlphasEn_alphaCut_short_low);
cft_pidCuts_En_Stack->Add(cftFragsEn);
cft_pidCuts_En_Stack->Add(cftAlphasEn);
cft_pidCuts_En_Stack->SetMaximum(maxY_energy);
cft_pidCuts_En_Stack->SetMinimum(0.5);
cft_pidCuts_En_Stack->Draw();
gPad->RedrawAxis();
c1->ForceUpdate();

Can you post a piece of code we can run ?