本文整理汇总了C++中TVirtualPad::cd方法的典型用法代码示例。如果您正苦于以下问题:C++ TVirtualPad::cd方法的具体用法?C++ TVirtualPad::cd怎么用?C++ TVirtualPad::cd使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TVirtualPad
的用法示例。
在下文中一共展示了TVirtualPad::cd方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: HighlightFragment
//______________________________________________________________________________
void HighlightFragment()
{
// TODO templates: what and how highlighing
if (!gPad || !gr) return;
// not correct
TVirtualPad *ph = (TVirtualPad *)gPad->FindObject("ph");
if (!ph) {
ph = new TPad("ph", "ph", 0.0, 0.2, 1.0, 1.0);
ph->SetFillColor(kBlue-10);
ph->Draw();
}
Int_t ih = gr->GetHighlightPoint();
if (ih == -1) return;
TRsnFragment *frag = group->FragmentAt(ih);
if (!frag) return;
TVirtualPad *save = gPad;
ph->cd();
TObject *element = frag->FindElement(tagname);
if (!element) ph->Clear();
else element->Draw();
save->cd();
}
示例2: GetPad
//________________________________________________________
TVirtualPad* GFHistManager::GetPad(Int_t layer, Int_t histNum)
{
// pointer to pad where hists from layer/histNum are painted in
// callable after draw!
Int_t totHistsYet = 0;
Int_t numHists = 0;
TCanvas *can = NULL;
for (Int_t numCan = 0; ; ++numCan) {
can = this->GetCanvas(layer, numCan);
if (!can) break;
numHists = TMath::Max(1, this->NumberOfSubPadsOf(can));
totHistsYet += numHists;
if (totHistsYet > histNum) {
totHistsYet -= numHists;
break;
}
}
TVirtualPad *result = NULL;
if (can) {
TVirtualPad *oldPad = gPad;
if (numHists <= 1) can->cd(0); // one hist per canvas: no pads!
else can->cd(histNum - totHistsYet + 1);
result = gPad;
oldPad->cd();
}
return result;
}
示例3: DynamicExec
void DynamicExec()
{
// Example of function called when a mouse event occurs in a pad.
// When moving the mouse in the canvas, a second canvas shows the
// projection along X of the bin corresponding to the Y position
// of the mouse. The resulting histogram is fitted with a gaussian.
// A "dynamic" line shows the current bin position in Y.
// This more elaborated example can be used as a starting point
// to develop more powerful interactive applications exploiting CINT
// as a development engine.
//
// Author: Rene Brun
TObject *select = gPad->GetSelected();
if(!select) return;
if (!select->InheritsFrom("TH2")) {gPad->SetUniqueID(0); return;}
TH2 *h = (TH2*)select;
gPad->GetCanvas()->FeedbackMode(kTRUE);
//erase old position and draw a line at current position
int pyold = gPad->GetUniqueID();
int px = gPad->GetEventX();
int py = gPad->GetEventY();
float uxmin = gPad->GetUxmin();
float uxmax = gPad->GetUxmax();
int pxmin = gPad->XtoAbsPixel(uxmin);
int pxmax = gPad->XtoAbsPixel(uxmax);
if(pyold) gVirtualX->DrawLine(pxmin,pyold,pxmax,pyold);
gVirtualX->DrawLine(pxmin,py,pxmax,py);
gPad->SetUniqueID(py);
Float_t upy = gPad->AbsPixeltoY(py);
Float_t y = gPad->PadtoY(upy);
//create or set the new canvas c2
TVirtualPad *padsav = gPad;
TCanvas *c2 = (TCanvas*)gROOT->GetListOfCanvases()->FindObject("c2");
if(c2) delete c2->GetPrimitive("Projection");
else c2 = new TCanvas("c2","Projection Canvas",710,10,700,500);
c2->SetGrid();
c2->cd();
//draw slice corresponding to mouse position
Int_t biny = h->GetYaxis()->FindBin(y);
TH1D *hp = h->ProjectionX("",biny,biny);
hp->SetFillColor(38);
char title[80];
sprintf(title,"Projection of biny=%d",biny);
hp->SetName("Projection");
hp->SetTitle(title);
hp->Fit("gaus","ql");
hp->GetFunction("gaus")->SetLineColor(kRed);
hp->GetFunction("gaus")->SetLineWidth(6);
c2->Update();
padsav->cd();
}
示例4: exec2
void exec2()
{
if (!gPad) {
Error("exec2", "gPad is null, you are not supposed to run this macro");
return;
}
TObject *select = gPad->GetSelected();
if(!select) return;
if (!select->InheritsFrom(TH2::Class())) {gPad->SetUniqueID(0); return;}
gPad->GetCanvas()->FeedbackMode(kTRUE);
//erase old position and draw a line at current position
int pyold = gPad->GetUniqueID();
int px = gPad->GetEventX();
int py = gPad->GetEventY();
float uxmin = gPad->GetUxmin();
float uxmax = gPad->GetUxmax();
int pxmin = gPad->XtoAbsPixel(uxmin);
int pxmax = gPad->XtoAbsPixel(uxmax);
if(pyold) gVirtualX->DrawLine(pxmin,pyold,pxmax,pyold);
gVirtualX->DrawLine(pxmin,py,pxmax,py);
gPad->SetUniqueID(py);
Float_t upy = gPad->AbsPixeltoY(py);
Float_t y = gPad->PadtoY(upy);
//create or set the new canvas c2
TVirtualPad *padsav = gPad;
TCanvas *c2 = (TCanvas*)gROOT->GetListOfCanvases()->FindObject("c2");
if(c2) delete c2->GetPrimitive("Projection");
else c2 = new TCanvas("c2");
c2->cd();
//draw slice corresponding to mouse position
TH2 *h = (TH2*)select;
Int_t biny = h->GetYaxis()->FindBin(y);
TH1D *hp = h->ProjectionX("",biny,biny);
char title[80];
sprintf(title,"Projection of biny=%d",biny);
hp->SetName("Projection");
hp->SetTitle(title);
hp->Fit("gaus","ql");
c2->Update();
padsav->cd();
}
示例5: fixsplithist
void fixsplithist(TH1* htop, TH1* hbot){
TVirtualPad* pmain = TVirtualPad::Pad()->GetCanvas();
if(!pmain) return;
TVirtualPad* p1 = pmain->cd(1);
TVirtualPad* p2 = pmain->cd(2);
if(!p1 || !p2) return;
double scale = p1->GetHNDC() / p2->GetHNDC();
double s = htop->GetYaxis()->GetLabelSize() * scale;
double ss = htop->GetYaxis()->GetLabelSize();
hbot->GetYaxis()->SetLabelSize(s);
htop->GetYaxis()->SetLabelSize(ss);
s = htop->GetYaxis()->GetTitleSize() * scale;
hbot->GetYaxis()->SetTitleSize(s);
hbot->GetYaxis()->SetTitleOffset(0.5);
htop->GetYaxis()->SetTitleOffset(0.5);
s = htop->GetYaxis()->GetLabelOffset() * scale;
s = htop->GetXaxis()->GetLabelSize() * scale;
hbot->GetXaxis()->SetLabelSize(s);
htop->GetXaxis()->SetLabelSize(0.);
s = htop->GetXaxis()->GetTitleSize() * scale;
hbot->GetXaxis()->SetTitleSize(s);
s = htop->GetXaxis()->GetLabelOffset() * scale;
hbot->GetXaxis()->SetLabelOffset(s);
hbot->GetYaxis()->SetNdivisions(5);
}
示例6: SpiderIdentification
//.........这里部分代码省略.........
}
}
tmpCut = (TList*)fGrid->GetCuts()->Clone("tmpCuts");
}
fGrid->Clear();
if (fScaledHisto) delete fScaledHisto;
KVHistoManipulator hm;
TF1 RtLt("RtLt", Form("x*%lf", fSfx), 0, tmpHisto->GetXaxis()->GetXmax());
TF1 RtLty("RtLty", Form("x*%lf", fSfy), 0, tmpHisto->GetXaxis()->GetXmax());
fScaledHisto = (TH2F*)hm.ScaleHisto(tmpHisto, &RtLt, &RtLty);
if (fIdentificator) delete fIdentificator;
fIdentificator = new KVSpiderIdentificator(fScaledHisto, fXm * fSfx, fYm * fSfy);
switch (fPiedType) {
case kUser:
fIdentificator->SetX0(fPdx * fSfx);
fIdentificator->SetY0(fPdy * fSfy);
break;
case kAuto:
break;
case kNone:
fIdentificator->SetX0(0.);
fIdentificator->SetY0(0.);
}
fIdentificator->SetParameters(fSpFactor);
fIdentificator->SetNangles(fAnglesUp, fAnglesDown);
fIdentificator->SetAlpha(fAlpha);
fProgressBar->SetRange(0, fAnglesUp + fAnglesDown + 1);
fProgressBar->Reset();
fIdentificator->Connect("Increment(Float_t)", "TGHProgressBar", fProgressBar, "SetPosition(Float_t)");
fTestButton->SetEnabled(kFALSE);
fCloseButton->SetEnabled(kFALSE);
fIdentificator->ProcessIdentification();
fTestButton->SetEnabled(kTRUE);
fCloseButton->SetEnabled(kTRUE);
fIdentificator->Disconnect("Increment(Float_t)", fProgressBar, "SetPosition(Float_t)");
fProgressBar->Reset();
if (fDebug) fIdentificator->Draw(fOption.Data());
TList* ll = (TList*)fIdentificator->GetListOfLines();
KVIDZALine* TheLine = 0;
int zmax = 0;
KVSpiderLine* spline = 0;
TIter next_line(ll);
while ((spline = (KVSpiderLine*)next_line())) {
if ((spline->GetN() > 10)) { //&&(spline->GetX(0)<=fIdentificator->GetX0()+200.))
TF1* ff1 = 0;
if (type == kSiCsI) ff1 = spline->GetFunction(fPdx * fSfx, TMath::Max(fScaledHisto->GetXaxis()->GetXmax() * 0.9, spline->GetX(spline->GetN() - 1)));
else if (type == kSiSi) ff1 = spline->GetFunction(fPdx * fSfx, TMath::Min(fScaledHisto->GetXaxis()->GetXmax() * 0.9, spline->GetX(spline->GetN() - 1) * 1.5));
else if (type == kChIoSi) ff1 = spline->GetFunction(fPdx * fSfx, TMath::Min(fScaledHisto->GetXaxis()->GetXmax() * 0.9, spline->GetX(spline->GetN() - 1) * 1.5));
else ff1 = spline->GetFunction();
if ((type == kSiCsI) && (ff1->GetParameter(1) >= 3000. || (ff1->GetParameter(2) <= 0.35) || (ff1->GetParameter(2) >= 1.))) {
Info("SpiderIdentification", "Z = %d has been rejected (fit parameters)", spline->GetZ());
continue;
}
TheLine = (KVIDZALine*)((KVIDZAGrid*)fGrid)->NewLine("ID");
TheLine->SetZ(spline->GetZ());
double min, max;
ff1->GetRange(min, max);
double step = TMath::Min((max - min) * 0.05, 20.); //20.;
double stepmax = (max - min) * 0.2; //800.;
double x = 0.;
for (x = min + 1; x < max + step; x += step) {
if (step <= stepmax) step *= 1.3;
if (ff1->Eval(x) < 4000) TheLine->SetPoint(TheLine->GetN(), x, ff1->Eval(x));
}
if (max > x) TheLine->SetPoint(TheLine->GetN(), max, ff1->Eval(max));
fGrid->Add("ID", TheLine);
if (spline->GetZ() >= zmax) zmax = spline->GetZ();
} else {
Info("SpiderIdentification", "Z = %d has been rejected (too few points)", spline->GetZ());
}
}
TF1 fx("fx12", Form("x/%lf", fSfx), 0., fScaledHisto->GetNbinsX() * 1.);
TF1 fy("fy12", Form("x/%lf", fSfy), 0., fScaledHisto->GetNbinsY() * 1.);
fGrid->Scale(&fx, &fy);
if (fUseCut) delete tmpHisto;
if (tmpCut) fGrid->GetCuts()->AddAll(tmpCut);
pad->cd();
fGrid->Draw();
pad->Modified();
pad->Update();
DoClose();
}
示例7: danss_calc_ratio
//.........这里部分代码省略.........
hSum[6]->Add(h[4]);
hSum[6]->Add(h[7]);
hSum[6]->Add(h[12]);
hSum[6]->Add(h[14]);
hSum[7]->Add(h[0]);
hSum[7]->Add(h[2]);
hSum[7]->Add(h[5]);
hSum[7]->Add(h[8]);
hSum[7]->Add(h[13]);
hRatio[4]->Divide(hSum[7], hSum[6]);
// OctoberNovember (21 + 23 + 26 + 29) / (18 + 19 + 22 + 24 + 27 + 30)
hSum[8]->Add(h[18]);
hSum[8]->Add(h[19]);
hSum[8]->Add(h[22]);
hSum[8]->Add(h[24]);
hSum[8]->Add(h[27]);
hSum[8]->Add(h[30]);
hSum[9]->Add(h[21]);
hSum[9]->Add(h[23]);
hSum[9]->Add(h[26]);
hSum[9]->Add(h[29]);
hRatio[5]->Divide(hSum[9], hSum[8]);
// DecemberJanuary (34 + 37 + 40) / (32 + 35 + 38 + 41)
hSum[10]->Add(h[32]);
hSum[10]->Add(h[35]);
hSum[10]->Add(h[38]);
hSum[10]->Add(h[41]);
hSum[11]->Add(h[34]);
hSum[11]->Add(h[37]);
hSum[11]->Add(h[40]);
hRatio[6]->Divide(hSum[11], hSum[10]);
cv->Divide(2, 1);
pd = cv->cd(1);
pd->Divide(1, 2);
pd->cd(1);
hSum[0]->SetTitle("Up - Middle - Down;MeV;mHz");
hSum[0]->SetLineColor(kRed);
hSum[2]->SetLineColor(kGreen);
hSum[1]->SetLineColor(kBlue);
for (i=0; i<4; i++) hSum[i]->SetLineWidth(2);
hSum[0]->Draw();
hSum[2]->Draw("same");
hSum[1]->Draw("same");
val = hSum[0]->IntegralAndError(1, 35, err);
sprintf(str, "Up = %5.2f+-%4.2f", val, err);
txt->SetTextColor(kRed);
txt->DrawTextNDC(0.4, 0.85, str);
val = hSum[2]->IntegralAndError(1, 35, err);
sprintf(str, "Mid = %5.2f+-%4.2f", val, err);
txt->SetTextColor(kGreen);
txt->DrawTextNDC(0.4, 0.8, str);
val = hSum[1]->IntegralAndError(1, 35, err);
sprintf(str, "Down = %5.2f+-%4.2f", val, err);
txt->SetTextColor(kBlue);
txt->DrawTextNDC(0.4, 0.75, str);
pd->cd(2);
hSum[3]->SetTitle("Average of all positions;MeV;mHz");
hSum[3]->SetLineColor(kBlack);
hSum[3]->Draw();
val = hSum[3]->IntegralAndError(1, 35, err);
sprintf(str, "Avr = %5.2f+-%4.2f", val, err);
txt->SetTextColor(kBlack);
txt->DrawTextNDC(0.4, 0.8, str);
示例8: makeqaplot
void makeqaplot(int run=0, int plt=0, int save=0){
runnum=run;
yearday=run/1000;
if(save==0) {png=0; pdf=0;}
if(save==1) {png=1; pdf=0;}
if(save==2) {png=0; pdf=1;}
if(save==3) {png=1; pdf=1;}
c1 = new TCanvas("c1","QA",50,50,800,800);
gStyle->SetLabelSize(0.04,"xy");
//colortable();
gStyle->SetPalette(1);
gStyle->SetStatW(0.4);
char fname[50];
if(run==0) {sprintf(fname,"fgtQA.root");}
else {sprintf(fname,"%d/fgtQA_%d.root",yearday,run);}
cout << "Opening "<<fname<<endl;
file=new TFile(fname,"");
char c[50];
if(plt==0 || plt==1) {
gStyle->SetOptStat(111110);
c1->Divide(1,3);
for(int i=0; i<3; i++){
TVirtualPad* pad = c1->cd(i+1);
int log=0;
if(i>0) {log=1;}
pad->SetLogy(log);
hist0[i]=(TH1F*) file->Get(cHist[i]);
hist0[i]->SetFillColor(kBlue);
hist0[i]->Draw();
if(i==2){
float ntot = float(hist0[i]->GetEntries());
if(ntot>0.0){
int nbin = hist0[i]->GetNbinsX();
float nofgt = hist0[i]->Integral(1,1);
int bin = hist0[i]->FindBin(float(kFgtNumElecIds));
float nonzs = hist0[i]->Integral(bin-1,nbin+1);
float zs = hist0[i]->Integral(2,bin-2);
hist0[i]->GetXaxis()->SetRange(2, bin-2);
float mean = hist0[i]->GetMean() / float(kFgtNumElecIds);
char c[100];
sprintf(c,"Total %d",ntot); TText *t1 = new TText(0.3,0.8,c); t1->SetNDC(); t1->SetTextSize(0.06); t1->Draw();
sprintf(c,"NoFGT %d (%5.2f)",nofgt,nofgt/ntot); TText *t2 = new TText(0.3,0.7,c); t2->SetNDC(); t2->SetTextSize(0.06); t2->Draw();
sprintf(c,"NoneZS %d (%5.2f)",nonzs,nonzs/ntot); TText *t3 = new TText(0.3,0.6,c); t3->SetNDC(); t3->SetTextSize(0.06); t3->Draw();
sprintf(c,"ZS %d (%5.2f)",zs,zs/ntot); TText *t4 = new TText(0.3,0.5,c); t4->SetNDC(); t4->SetTextSize(0.06); t4->Draw();
sprintf(c,"Mean ZS data size/fullsize= %5.3f",mean); TText *t5 = new TText(0.3,0.4,c); t5->SetNDC(); t5->SetTextSize(0.06); t5->Draw();
if(mean>0.08) { t5->SetTextColor(2); }
else { t5->SetTextColor(4); }
}
}
}
c1->Update();
save("plot");
}
if(plt==0 || plt==2) {
c1->Clear();
gStyle->SetOptStat(0);
gStyle->SetOptTitle(0);
c1->Divide(1,3);
for(int i=3; i<6; i++){ hist0[i]=(TH1F*) file->Get(cHist[i]); }
int nevt=hist0[5]->GetEntries();
printf("Nevent=%d\n",nevt);
TVirtualPad* pad;
pad=c1->cd(1); pad->SetLogy(); pad->SetTopMargin(0.01); pad->SetRightMargin(0.01);
hist0[3]->GetXaxis()->SetLabelSize(0.07); hist0[3]->GetYaxis()->SetLabelSize(0.07);
hist0[3]->SetFillColor(kRed); hist0[3]->Scale(1/float(nevt)); hist0[3]->Draw();
TText *tx= new TText(0.87,0.0,"EleID"); tx->SetNDC(); tx->SetTextSize(0.1); tx->Draw();
TText *t3= new TText(0.05,0.1,"F3=frac in 3sig/2tb"); t3->SetNDC(); t3->SetTextSize(0.08); t3->SetTextAngle(90); t3->Draw();
pad=c1->cd(2); pad->SetLogy(); pad->SetTopMargin(0.01); pad->SetRightMargin(0.01);
hist0[4]->GetXaxis()->SetLabelSize(0.07); hist0[4]->GetYaxis()->SetLabelSize(0.07);
hist0[4]->SetFillColor(kBlue); hist0[4]->Scale(1/float(nevt)); hist0[4]->Draw();
tx->Draw();
TText *t4= new TText(0.05,0.1,"F10=frac in 10sig & >500"); t4->SetNDC(); t4->SetTextSize(0.08); t4->SetTextAngle(90); t4->Draw();
float min=-4;
int max=hist0[3]->GetNbinsX();
printf("Max=%d\n",max);
TH1F *h1 = new TH1F("ZSdataFrac","ZSdataFrac",50,min,0);
TH1F *h2 = new TH1F("10SigmaFrac","10SigmaFrac",50,min,0);
float f1[kFgtNumElecIds],f2[kFgtNumElecIds];
for(int i=0; i<max; i++){
f1[i] = log10(hist0[3]->GetBinContent(i+1)); if(f1[i]<min) {f1[i]=min;} h1->Fill(f1[i]);
f2[i] = log10(hist0[4]->GetBinContent(i+1)); if(f2[i]<min) {f2[i]=min;} h2->Fill(f2[i]);
}
pad = c1->cd(3); pad->Divide(2,1);
TVirtualPad *pad2;
pad2 = pad->cd(1);
pad2->SetLogy(); pad2->SetTopMargin(0.01); pad2->SetRightMargin(0.01);
h1->GetXaxis()->SetLabelSize(0.1); h1->GetYaxis()->SetLabelSize(0.1);
h2->GetXaxis()->SetLabelSize(0.1); h2->GetYaxis()->SetLabelSize(0.1);
h1->SetLineColor(kRed); h2->SetLineColor(kBlue);
if(h1->GetMaximum()>h2->GetMaximum()){
h1->Draw(); h2->Draw("SAME");
}else{
h2->Draw(); h1->Draw("SAME");
}
//.........这里部分代码省略.........
示例9: validation
void validation()
{
msglvl[DBG] = SILENT;
msglvl[INF] = VISUAL;
msglvl[WRN] = VISUAL;
msglvl[ERR] = VISUAL;
msglvl[FAT] = VISUAL;
TDirectory* oldDir = gDirectory; // remember old directory
style();
Int_t g4bin = (ng4bins/g4max+1); //==> g^4=1 ==> SSM !
TString suffix = "";
if(doTruth) suffix = "_truth";
TString mctype = (isMC11c) ? "mc11c" : "mc11a";
// TString fBGname = "plots/ZP_2dtemplates_"+mctype+"_33st_overallEWkF_noInAmpSigEWkF_noHighMbins_wthOfficialZP_Xmass2000.root";
// TString fBGname = "plots/ZP_2dtemplates_"+mctype+"_33st_noKKtmplates_overallEWkF_noInAmpSigEWkF_noTruth_wthOfficialZP_treeLevelMass_Xmass2000.root";
// TString fBGname = "plots/ZP_2dtemplates_"+mctype+"_33st_noKKtmplates_overallEWkF_noInAmpSigEWkF_wthOfficialZP_treeLevelMass_Xmass2000.root";
// TString fBGname = "plots/ZP_2dtemplates_mc11c_33st_noKKtmplates_overallEWkF_noInAmpSigEWkF_wthOfficialZP_fixedBWwidth_treeLevelMass_Xmass2000.root";
// TString fBGname = "plots/ZP_2dtemplates_mc11c_33st_noKKtmplates_overallEWkF_noInAmpSigEWkF_noTruth_wthOfficialZP_treeLevelMass_Xmass2000.root";
// TString fBGname = "plots/ZP_2dtemplates_"+mctype+"_33st_noKKtmplates_overallEWkF_noInAmpSigEWkF_noTruth_wthOfficialZP_treeLevelMass_Xmass2000.root";
// TString fBGname = "plots/ZP_2dtemplates_"+mctype+"_33st_noKKtmplates_overallEWkF_noInAmpSigEWkF_noTruth_wthOfficialZP_fixedBWwidth_treeLevelMass_Xmass2000.root";
TLegend* legR = new TLegend(0.15,0.75,0.35,0.85,NULL,"brNDC");
legR->SetFillStyle(4000); //will be transparent
legR->SetFillColor(0);
legR->SetTextFont(42);
TH1D* hDummy = new TH1D("","",1,0.,1.);
hDummy->SetMarkerStyle(20);
hDummy->SetMarkerSize(0.8);
hDummy->SetMarkerColor(kBlack);
if(!doResiduals) legR->AddEntry(hDummy,"#frac{template}{official}","lep");
else legR->AddEntry(hDummy,"#frac{template - official}{#sqrt{#delta^{2}template + #delta^{2}official}}","lep");
TPaveText* ptxt = new TPaveText(0.145,0.35,0.245,0.55,"NDC");
TText* txt;
ptxt->SetTextSize(0.03);
ptxt->SetBorderSize(0);
ptxt->SetFillStyle(4000); //will be transparent
ptxt->SetFillColor(0);
ptxt->SetTextAlign(12);
txt = ptxt->AddText("This range");
txt = ptxt->AddText("is chopped");
txt = ptxt->AddText("before the");
txt = ptxt->AddText("template is");
txt = ptxt->AddText("handed to");
txt = ptxt->AddText("BAT (limit).");
oldDir->cd();
TString fBGname = "plots/validation/ZP_2dtemplates_mc11c_33st_noKKtmplates_wthOfficialZP_treeLevelMass_Xmass2000.root";
TFile* fD = new TFile(fBGname,"READ");
TH1D* hDY = NULL;
if(doTruth) hDY = (TH1D*)fD->Get("hMass_DYmumu_truth")->Clone();
else hDY = (TH1D*)fD->Get("hMass_DYmumu")->Clone();
hDY->SetLineColor(kMagenta-5);
hDY->SetMarkerColor(kMagenta-5);
oldDir->cd();
TFile* fDYrozmin = new TFile("plots/mass_plot_tables_3st.root","READ");
TH1D* hDYrozmin = (TH1D*)fDYrozmin->Get("mass_log_dy")->Clone();
hDYrozmin = (TH1D*)hGeV2TeV(hDYrozmin)->Clone();
hDYrozmin = (TH1D*)hChopper(hDYrozmin,bins2chop)->Clone();
oldDir->cd();
TFile* f1dTemplates = new TFile("plots/ZpSignal_MM_MC11c_5points.root","READ");
TObjArray* toarr1d = new TObjArray();
toarr1d->Read("template");
TMapTSP2TH1D h1dBrandeisTmpltMap;
double Nflat = 399948;
double sigmaflat = 4.3988E+07*nb2fb;
double Lmcflat = Nflat/sigmaflat;
double scale = luminosity/Lmcflat;
TH1D* h1dTmp = NULL;
h1dTmp = (TH1D*)((TObjArray*)toarr1d->At(0/*22*/))->Clone();
h1dTmp->Scale(scale);
h1dTmp = (TH1D*)hChopper(h1dTmp,bins2chop)->Clone();
h1dTmp->Add(hDYrozmin);
h1dBrandeisTmpltMap.insert( make_pair("1000",(TH1D*)resetErrors(h1dTmp)->Clone("1000")) );
h1dTmp = NULL;
h1dTmp = (TH1D*)((TObjArray*)toarr1d->At(1/*28*/))->Clone();
h1dTmp->Scale(scale);
h1dTmp = (TH1D*)hChopper(h1dTmp,bins2chop)->Clone();
h1dTmp->Add(hDYrozmin);
h1dBrandeisTmpltMap.insert( make_pair("1250",(TH1D*)resetErrors(h1dTmp)->Clone("1250")) );
h1dTmp = NULL;
h1dTmp = (TH1D*)((TObjArray*)toarr1d->At(2/*34*/))->Clone();
h1dTmp->Scale(scale);
h1dTmp = (TH1D*)hChopper(h1dTmp,bins2chop)->Clone();
h1dTmp->Add(hDYrozmin);
h1dBrandeisTmpltMap.insert( make_pair("1500",(TH1D*)resetErrors(h1dTmp)->Clone("1500")) );
h1dTmp = NULL;
h1dTmp = (TH1D*)((TObjArray*)toarr1d->At(3/*40*/))->Clone();
h1dTmp->Scale(scale);
h1dTmp = (TH1D*)hChopper(h1dTmp,bins2chop)->Clone();
h1dTmp->Add(hDYrozmin);
//.........这里部分代码省略.........
示例10: DrawTwoInPad
void DrawTwoInPad(TVirtualPad* p,
Int_t sub,
TH1* h1,
TH1* h2,
Bool_t ratio,
Bool_t logy=false,
Bool_t legend=false)
{
TVirtualPad* pp = p->cd(sub);
pp->SetRightMargin(0.02);
pp->SetLeftMargin(0.10);
TVirtualPad* ppp = pp;
if (ratio) {
pp->Divide(1,2,0,0);
ppp = pp->cd(1);
ppp->SetRightMargin(0.02);
}
if (logy) ppp->SetLogy();
TH1* hs[] = { h1, h2, 0 };
if (h1->GetMaximum() < h2->GetMaximum()) {
hs[0] = h2;
hs[1] = h1;
}
TH1** ph = hs;
Double_t size = (ratio ? 0.1 : 0.05);
Double_t off = (ratio ? 0.6 : 0.5);
h1->SetFillStyle(3004);
h2->SetFillStyle(3005);
while (*ph) {
TString opt("hist");
if (ph != hs) opt.Append(" same");
TH1* copy = (*ph)->DrawCopy(opt);
copy->GetXaxis()->SetLabelSize(2*size);
copy->GetYaxis()->SetLabelSize(size);
copy->GetYaxis()->SetTitleSize(size);
copy->GetYaxis()->SetTitleOffset(off);
copy->SetYTitle(copy->GetTitle());
copy->SetTitle("");
copy->SetDirectory(0);
ph++;
}
TString s1 = h1->GetYaxis()->GetTitle();
TString s2 = h2->GetYaxis()->GetTitle();
if (legend) {
TLegend* l = new TLegend(0.6, 0.1, 0.9, 0.9);
l->SetBorderSize(0);
TLegendEntry* e = l->AddEntry("dummy", s1, "lf");
l->SetFillColor(kWhite);
e->SetFillColor(kBlack);
e->SetFillStyle(h1->GetFillStyle());
e = l->AddEntry("dummy", s2, "lf");
e->SetFillColor(kBlack);
e->SetFillStyle(h2->GetFillStyle());
l->Draw();
}
if (!ratio) return;
ppp = pp->cd(2);
ppp->SetRightMargin(0.02);
TH1* r = static_cast<TH1*>(h1->Clone(Form("ratio%s", h1->GetName())));
r->SetDirectory(0);
r->SetTitle("");
r->GetXaxis()->SetLabelSize(size);
r->GetYaxis()->SetLabelSize(size);
r->GetYaxis()->SetTitleSize(0.9*size);
r->GetYaxis()->SetTitleOffset(0.9*off);
r->SetMarkerStyle(20);
r->SetMarkerColor(h1->GetFillColor()+1);
r->SetFillStyle(3007);
r->SetYTitle(Form("#frac{%s}{%s}", s1.Data(), s2.Data()));
// r->Add(h2, -1);
// r->Divide(h1);
if (!r->IsA()->InheritsFrom(TProfile::Class())) {
r->GetSumw2()->Set(0); // r->Sumw2(false);
h2->GetSumw2()->Set(0); // h2->Sumw2(false);
}
r->Divide(h2);
Printf("%s", r->GetName());
for (UShort_t bin = 1; bin <= r->GetNbinsX(); bin++) {
Printf(" bin # %2d: Diff=%g+/-%g", bin, r->GetBinContent(bin),
r->GetBinError(bin));
r->SetBinError(bin, 0);
}
r->GetSumw2()->Set(0); //r->Sumw2(false);
r->SetMarkerSize(4);
r->SetMaximum(r->GetMaximum()*1.2);
r->SetMinimum(r->GetMinimum()*0.8);
r->Draw("hist text30");
p->Modified();
p->Update();
p->cd();
}