本文整理汇总了C++中TAxis::SetBinLabel方法的典型用法代码示例。如果您正苦于以下问题:C++ TAxis::SetBinLabel方法的具体用法?C++ TAxis::SetBinLabel怎么用?C++ TAxis::SetBinLabel使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TAxis
的用法示例。
在下文中一共展示了TAxis::SetBinLabel方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: labelBins
void labelBins( TH1F* hist ) {
TAxis* xaxis = hist->GetXaxis() ;
for ( int mbi=0; mbi<hist->GetNbinsX(); mbi++ ) {
char label[1000] ;
sprintf( label, "MET%d", mbi+1 ) ;
xaxis->SetBinLabel( mbi+1, label ) ;
} // mbi.
}
示例2: reportCutFlow
// Report cut flow findings to screen
void DileptonAnalyzer::reportCutFlow( TFile & outputFile ) {
// Store in a TProfile
TProfile *cutFlow = new TProfile("cutFlow","Cut flow for final set of analysis cuts",20,0.5,20.5,-9.9e9,9.9e9);
TAxis *cutFlowAxis = cutFlow->GetXaxis();
for ( unsigned int iCut = 0; iCut < cutNamesInOrder_.size(); iCut++ ) {
cutFlow->Fill( iCut+1, cutFlowMap_[cutNamesInOrder_[iCut]]);
cutFlowAxis->SetBinLabel( iCut+1, cutNamesInOrder_[iCut]);
}
outputFile.cd();
cutFlow->Write();
}
示例3: cutflow
AndSelection::AndSelection(const ptree & cfg, InputManager & in, OutputManager & out): cutflow(0), cutflow_raw(0){
// get selections as string:
std::string ids = cfg.get<string>("selections");
vector<string> vids;
boost::split(vids, ids, boost::algorithm::is_space(), boost::algorithm::token_compress_on);
for(const string & id : vids){
sel_handles.push_back(in.get_handle<bool>(id));
}
string hname = cfg.get<string>("cutflow_hname", "");
if(!hname.empty()){
cutflow = new TH1D(hname.c_str(), hname.c_str(), vids.size()+1, 0, vids.size()+1);
cutflow_raw = new TH1D((hname + "_raw").c_str(), (hname + "_raw").c_str(), vids.size()+1, 0, vids.size()+1);
for(TH1D * h : {cutflow, cutflow_raw}){
h->Sumw2();
TAxis * x = h->GetXaxis();
x->SetBinLabel(1, "before cuts");
for(auto i=0ul; i < vids.size(); ++i){
x->SetBinLabel(i+2, vids[i].c_str());
}
out.put(h->GetName(), h);
}
}
weight_handle = in.get_handle<double>("weight");
}
示例4: bookHist
TH1F* bookHist(const char* hname, const char* htitle, int nBinsMET, int nBinsHT, int sampleIndex ) {
int nbins = nBinsMET*(nBinsHT+1) + 1 ;
TH1F* retVal = new TH1F( hname, htitle, nbins, 0.5+0.05*(sampleIndex-5), nbins+0.5+0.05*(sampleIndex-5) ) ;
TAxis* xaxis = retVal->GetXaxis() ;
for ( int mbi=0; mbi<nBinsMET; mbi++ ) {
for ( int hbi=0; hbi<nBinsHT; hbi++ ) {
int histbin = 1 + (nBinsHT+1)*mbi + hbi + 1 ;
char binlabel[1000] ;
sprintf( binlabel, "M%d_H%d", mbi+1, hbi+1 ) ;
xaxis->SetBinLabel( histbin, binlabel ) ;
} // hbi.
} // mbi.
retVal->SetLabelSize(0.055,"x") ;
xaxis->LabelsOption("v") ;
return retVal ;
}
示例5: bookHist
TH1F* bookHist(const char* hname, const char* htitle, const char* selstring, int nbjet, int nBinsMET, int nBinsHT ) {
int nbins = nBinsMET*(nBinsHT+1) + 1 ;
TH1F* retVal = new TH1F( hname, htitle, nbins, 0.5 + 0.1*(nbjet-2), nbins+0.5 + 0.1*(nbjet-2) ) ;
TAxis* xaxis = retVal->GetXaxis() ;
for ( int mbi=0; mbi<nBinsMET; mbi++ ) {
for ( int hbi=0; hbi<nBinsHT; hbi++ ) {
int histbin = 1 + (nBinsHT+1)*mbi + hbi + 1 ;
char binlabel[1000] ;
sprintf( binlabel, "%s_M%d_H%d_%db", selstring, mbi+1, hbi+1, nbjet ) ;
xaxis->SetBinLabel( histbin, binlabel ) ;
} // hbi.
} // mbi.
retVal->SetLabelSize(0.055,"x") ;
xaxis->LabelsOption("v") ;
return retVal ;
}
示例6: storeSignalEfficiencies
void DileptonAnalyzer::storeSignalEfficiencies( TFile & outputFile ) {
// Store in a TProfile
TProfile *sigEffOne = new TProfile("SignalEfficOneDecay","Signal efficiencies when one exotic decays in this channel",10,0.5,10.5,-9.9e9,9.9e9);
TAxis *sigEffOneAxis = sigEffOne->GetXaxis();
TProfile *sigEffTwo = new TProfile("SignalEfficTwoDecay","Signal efficiencies when two exotic decays in this channel",10,0.5,10.5,-9.9e9,9.9e9);
TAxis *sigEffTwoAxis = sigEffTwo->GetXaxis();
// Fill set of 3 bins in each TProfile for each exotic
for ( int iExotic = 0; iExotic < nSignalParticles_; iExotic++ ) {
TString axisTitle;
sigEffOne->Fill( iExotic*nSignalParticles_+1, numEvents_oneSensitiveDecay_[iExotic] );
axisTitle.Form("Number of events coming into macro for exotic %d",signalPdgId_[iExotic]);
sigEffOneAxis->SetBinLabel( iExotic*nSignalParticles_+1, axisTitle.Data());
sigEffOne->Fill( iExotic*nSignalParticles_+2, numExoticsRECO_oneSensitiveDecay_[iExotic] );
axisTitle.Form("Number of candidates RECO'd for exotic %d",signalPdgId_[iExotic]);
sigEffOneAxis->SetBinLabel( iExotic*nSignalParticles_+2, axisTitle.Data());
sigEffOne->Fill( iExotic*nSignalParticles_+3, numExoticsCorrectRECO_oneSensitiveDecay_[iExotic] );
axisTitle.Form("Number of exotics correctly RECO'd for exotic %d",signalPdgId_[iExotic]);
sigEffOneAxis->SetBinLabel( iExotic*nSignalParticles_+3, axisTitle.Data());
sigEffTwo->Fill( iExotic*nSignalParticles_+1, numEvents_twoSensitiveDecay_[iExotic] );
axisTitle.Form("Number of events coming into macro for exotic %d",signalPdgId_[iExotic]);
sigEffTwoAxis->SetBinLabel( iExotic*nSignalParticles_+1, axisTitle.Data());
sigEffTwo->Fill( iExotic*nSignalParticles_+2, numExoticsRECO_twoSensitiveDecay_[iExotic] );
axisTitle.Form("Number of candidates RECO'd for exotic %d",signalPdgId_[iExotic]);
sigEffTwoAxis->SetBinLabel( iExotic*nSignalParticles_+2, axisTitle.Data());
sigEffTwo->Fill( iExotic*nSignalParticles_+3, numExoticsCorrectRECO_twoSensitiveDecay_[iExotic] );
axisTitle.Form("Number of exotics correctly RECO'd for exotic %d",signalPdgId_[iExotic]);
sigEffTwoAxis->SetBinLabel( iExotic*nSignalParticles_+3, axisTitle.Data());
}
outputFile.cd();
sigEffOne->Write();
sigEffTwo->Write();
}
示例7: looperCR2lep
int looperCR2lep( analysis* myAnalysis, sample* mySample, int nEvents = -1, bool fast = true) {
// Benchmark
TBenchmark *bmark = new TBenchmark();
bmark->Start("benchmark");
// Setup
TChain *chain = mySample->GetChain();
TString sampleName = mySample->GetLabel();
const int nSigRegs = myAnalysis->GetSigRegionsAll().size();
const int nVariations = mySample->IsData() ? 0 : myAnalysis->GetSystematics(false).size();
bool isFastsim = mySample->IsSignal();
cout << "\nSample: " << sampleName.Data() << " (CR2L";
if( myContext.GetJesDir() == contextVars::kUp ) cout << ", JES up";
else if( myContext.GetJesDir() == contextVars::kDown ) cout << ", JES down";
cout << ")" << endl;
myContext.SetUseRl( true );
/////////////////////////////////////////////////////////
// Histograms
TDirectory *rootdir = gDirectory->GetDirectory("Rint:"); // Use TDirectories to assist in memory management
TDirectory *histdir = new TDirectory( "histdir", "histdir", "", rootdir );
TDirectory *systdir = new TDirectory( "systdir", "systdir", "", rootdir );
TDirectory *zerodir = new TDirectory( "zerodir", "zerodir", "", rootdir );
TH1::SetDefaultSumw2();
TH1D* h_bkgtype_sum[nSigRegs][nVariations+1];
TH1D* h_evttype_sum[nSigRegs][nVariations+1];
TH2D* h_sigyields[nSigRegs][nVariations+1];
TH1D* h_bkgtype[nSigRegs][nVariations+1]; // per-file versions for zeroing
TH1D* h_evttype[nSigRegs][nVariations+1];
TH1D *h_mt[nSigRegs];
TH1D *h_met[nSigRegs];
TH1D *h_mt2w[nSigRegs];
TH1D *h_chi2[nSigRegs];
TH1D *h_htratio[nSigRegs];
TH1D *h_mindphi[nSigRegs];
TH1D *h_ptb1[nSigRegs];
TH1D *h_drlb1[nSigRegs];
TH1D *h_ptlep[nSigRegs];
TH1D *h_metht[nSigRegs];
TH1D *h_dphilw[nSigRegs];
TH1D *h_njets[nSigRegs];
TH1D *h_nbtags[nSigRegs];
TH1D *h_ptj1[nSigRegs];
TH1D *h_j1btag[nSigRegs];
TH1D *h_modtop[nSigRegs];
TH1D *h_dphilmet[nSigRegs];
TH1D *h_mlb[nSigRegs];
vector<TString> regNames = myAnalysis->GetSigRegionLabelsAll();
vector<sigRegion*> sigRegions = myAnalysis->GetSigRegionsAll();
vector<systematic*> variations = myAnalysis->GetSystematics(false);
for( int i=0; i<nSigRegs; i++ ) {
TString plotLabel = sampleName + "_" + regNames.at(i);
systdir->cd();
for( int j=1; j<=nVariations; j++ ) {
TString varName = variations.at(j-1)->GetNameLong();
h_bkgtype_sum[i][j] = new TH1D( "bkgtype_" + plotLabel + "_" + varName, "Yield by background type", 5, 0.5, 5.5);
h_evttype_sum[i][j] = new TH1D( "evttype_" + regNames.at(i) + "_" + varName, "Yield by event type", 6, 0.5, 6.5);
h_sigyields[i][j] = new TH2D( "sigyields_" + regNames.at(i) + "_" + varName, "Signal yields by mass point", 37,99,1024, 19,-1,474 );
}
histdir->cd();
h_bkgtype_sum[i][0] = new TH1D( "bkgtype_" + plotLabel, "Yield by background type", 5, 0.5, 5.5);
h_evttype_sum[i][0] = new TH1D( "evttype_" + regNames.at(i), "Yield by event type", 6, 0.5, 6.5);
h_sigyields[i][0] = new TH2D( "sigyields_" + regNames.at(i), "Signal yields by mass point", 37,99,1024, 19,-1,474 );
h_mt[i] = new TH1D( "mt_" + plotLabel, "Transverse mass", 80, 0, 800);
h_met[i] = new TH1D( "met_" + plotLabel, "MET", 40, 0, 1000);
h_mt2w[i] = new TH1D( "mt2w_" + plotLabel, "MT2W", 50, 0, 500);
h_chi2[i] = new TH1D( "chi2_" + plotLabel, "Hadronic #chi^{2}", 50, 0, 15);
h_htratio[i] = new TH1D( "htratio_" + plotLabel, "H_{T} ratio", 50, 0, 1);
h_mindphi[i] = new TH1D( "mindphi_" + plotLabel, "min #Delta#phi(j12,MET)", 63, 0, 3.15);
h_ptb1[i] = new TH1D( "ptb1_" + plotLabel, "p_{T} (b1)", 50, 0, 500);
h_drlb1[i] = new TH1D( "drlb1_" + plotLabel, "#DeltaR (lep, b1)", 50, 0, 5);
h_ptlep[i] = new TH1D( "ptlep_" + plotLabel, "p_{T} (lep)", 50, 0, 500);
h_metht[i] = new TH1D( "metht_" + plotLabel, "MET/sqrt(HT)", 50, 0, 100);
h_dphilw[i] = new TH1D( "dphilw_" + plotLabel, "#Delta#phi (lep,W)", 63, 0, 3.15);
h_njets[i] = new TH1D( "njets_" + plotLabel, "Number of jets", 16, -0.5, 15.5);
h_nbtags[i] = new TH1D( "nbtags_" + plotLabel, "Number of b-tags", 7, -0.5, 6.5);
h_ptj1[i] = new TH1D( "ptj1_" + plotLabel, "Leading jet p_{T}", 40, 0, 1000);
h_j1btag[i] = new TH1D( "j1btag_" + plotLabel, "Is leading jet b-tagged?", 2, -0.5, 1.5);
h_modtop[i] = new TH1D( "modtop_" + plotLabel, "Modified topness", 30, -15., 15.);
h_dphilmet[i] = new TH1D( "dphilmet_"+ plotLabel, "#Delta#phi (lep1, MET)", 63, 0., 3.15);
h_mlb[i] = new TH1D( "mlb_" + plotLabel, "M_{lb}", 50, 0., 500.);
for( int j=0; j<=nVariations; j++ ) {
TAxis* axis = h_bkgtype_sum[i][j]->GetXaxis();
axis->SetBinLabel( 1, "2+lep" );
//.........这里部分代码省略.........
示例8: write
void SampleDiagnostics::write() const
{
if (passedRate == 0) {
std::cerr << "WARNING : No accumulated rate for " << name << ". Maybe you just didn't run over it/them?" << std::endl;
return;
}
//.. Histogram output .......................................................
const Int_t numDatasets = static_cast<Int_t>(size());
const UInt_t numBins = numDatasets + 3;
TH2* hCorrelation = new TH2F("h_correlation_" + name, name, numBins, 0, numBins, numBins, 0, numBins);
TH2* hSharedRate = new TH2F("h_shared_rate_" + name, name, numBins, 0, numBins, numBins, 0, numBins);
//...........................................................................
Double_t overhead = 0;
Double_t overheadErr = 0;
for (Int_t iSet = 0, xBin = 1; iSet < numDatasets; ++iSet, ++xBin) {
const Dataset& dataset = at(iSet);
if (!dataset.isNewTrigger) {
overhead += dataset.rate;
overheadErr += dataset.rateUncertainty2; // I think this is over-estimating it because the values are NOT uncorrelated, but oh well
}
if (iSet == firstNewTrigger) ++xBin;
if (dataset.rate == 0) continue;
for (Int_t jSet = 0, yBin = 1; jSet <= numDatasets; ++jSet, ++yBin) {
if (jSet == firstNewTrigger) ++yBin;
if (jSet == numDatasets) ++yBin;
hCorrelation->SetBinContent (xBin, yBin, commonRates[iSet][jSet] / dataset.rate);
hCorrelation->SetBinError (xBin, yBin, ratioError(commonRates[iSet][jSet], commonRateUncertainties2[iSet][jSet], dataset.rate, dataset.rateUncertainty2));
hSharedRate ->SetBinContent (xBin, yBin, commonRates[iSet][jSet]);
hSharedRate ->SetBinError (xBin, yBin, TMath::Sqrt(commonRateUncertainties2[iSet][jSet]));
} // end loop over other datasets
// Rightmost column is the fraction of rate out of the total
hCorrelation->SetBinContent (numBins, xBin, dataset.rate / passedRate);
hCorrelation->SetBinError (numBins, xBin, ratioError(dataset.rate, dataset.rateUncertainty2, passedRate, passedRateUncertainty2));
hSharedRate ->SetBinContent (numBins, xBin, dataset.rate);
hSharedRate ->SetBinError (numBins, xBin, TMath::Sqrt(dataset.rateUncertainty2));
} // end loop over datasets
// Top-right cell is the total overhead for the _current_ datasets (not including new triggers)
hSharedRate ->SetBinContent (numBins, numBins, overhead);
hSharedRate ->SetBinError (numBins, numBins, TMath::Sqrt(overheadErr));
overheadErr = ratioError (overhead, overheadErr, passedRate, passedRateUncertainty2);
overhead /= passedRate; // Can only do this after error is computed
overhead -= 1;
hCorrelation->SetBinContent (numBins, numBins, overhead);
hCorrelation->SetBinError (numBins, numBins, overheadErr);
//...........................................................................
// Histogram format
hCorrelation->SetTitle (TString::Format("%s (overhead = %.3g%% #pm %.3g%%)" , hCorrelation->GetTitle(), 100*overhead, 100*overheadErr));
hSharedRate ->SetTitle (TString::Format("%s (total rate = %.3g #pm %.3g Hz)", hSharedRate ->GetTitle(), passedRate, TMath::Sqrt(passedRateUncertainty2)));
hCorrelation->SetZTitle ("(X #cap Y) / X"); hSharedRate->SetZTitle ("X #cap Y");
hCorrelation->SetOption ("colz"); hSharedRate->SetOption ("colz");
hCorrelation->SetStats (kFALSE); hSharedRate->SetStats (kFALSE);
hCorrelation->SetMinimum(0); hSharedRate->SetMinimum(0);
hCorrelation->SetMaximum(1);
std::vector<TAxis*> axes;
axes.push_back(hCorrelation->GetXaxis()); axes.push_back(hCorrelation->GetYaxis());
axes.push_back(hSharedRate ->GetXaxis()); axes.push_back(hSharedRate ->GetYaxis());
const UInt_t numAxes = axes.size();
for (UInt_t iAxis = 0; iAxis < numAxes; ++iAxis) {
TAxis* axis = axes[iAxis];
for (Int_t iSet = 0, bin = 1; iSet < numDatasets; ++iSet, ++bin) {
if (iSet == firstNewTrigger) ++bin;
axis->SetBinLabel(bin, at(iSet).name);
} // end loop over datasets
axis->SetLabelSize (0.04f);
axis->LabelsOption ("v");
axis->SetTitle (iAxis % 2 == 0 ? "X" : "Y");
} // end loop over axes to format
hCorrelation->GetXaxis()->SetBinLabel(numBins, "rate / total");
hCorrelation->GetYaxis()->SetBinLabel(numBins, "overlap / rate");
hSharedRate ->GetXaxis()->SetBinLabel(numBins, "rate");
hSharedRate ->GetYaxis()->SetBinLabel(numBins, "overlap");
if (gDirectory->GetDirectory("unnormalized") == 0)
gDirectory->mkdir("unnormalized");
gDirectory->cd("unnormalized"); hSharedRate ->Write();
gDirectory->cd("/"); hCorrelation->Write();
//...........................................................................
}
示例9: constrained_scan
//.........这里部分代码省略.........
int nscan(1000) ;
for ( int xi=0; xi<nscan; xi++ ) {
double x = poiVals[0] + xi*(poiVals[npoiPoints-1]-poiVals[0])/(nscan-1) ;
double twoDeltalnL = graph -> Eval( x, 0, "S" ) ;
if ( poiMinus1stdv < 0. && twoDeltalnL < 1.0 ) { poiMinus1stdv = x ; printf(" set m1 : %d, x=%g, 2dnll=%g\n", xi, x, twoDeltalnL) ;}
if ( poiMinus2stdv < 0. && twoDeltalnL < 4.0 ) { poiMinus2stdv = x ; printf(" set m2 : %d, x=%g, 2dnll=%g\n", xi, x, twoDeltalnL) ;}
if ( twoDeltalnL < twoDeltalnLMin ) { poiBest = x ; twoDeltalnLMin = twoDeltalnL ; }
if ( twoDeltalnLMin < 0.3 && poiPlus1stdv < 0. && twoDeltalnL > 1.0 ) { poiPlus1stdv = x ; printf(" set p1 : %d, x=%g, 2dnll=%g\n", xi, x, twoDeltalnL) ;}
if ( twoDeltalnLMin < 0.3 && poiPlus2stdv < 0. && twoDeltalnL > 4.0 ) { poiPlus2stdv = x ; printf(" set p2 : %d, x=%g, 2dnll=%g\n", xi, x, twoDeltalnL) ;}
if ( xi%100 == 0 ) { printf( " %4d : poi=%6.2f, 2DeltalnL = %6.2f\n", xi, x, twoDeltalnL ) ; }
}
printf("\n\n POI estimate : %g +%g -%g [%g,%g], two sigma errors: +%g -%g [%g,%g]\n\n",
poiBest,
(poiPlus1stdv-poiBest), (poiBest-poiMinus1stdv), poiMinus1stdv, poiPlus1stdv,
(poiPlus2stdv-poiBest), (poiBest-poiMinus2stdv), poiMinus2stdv, poiPlus2stdv
) ;
printf(" %s val,pm1sig,pm2sig: %7.2f %7.2f %7.2f %7.2f %7.2f\n",
new_poi_name, poiBest, (poiPlus1stdv-poiBest), (poiBest-poiMinus1stdv), (poiPlus2stdv-poiBest), (poiBest-poiMinus2stdv) ) ;
char htitle[1000] ;
sprintf(htitle, "%s profile likelihood scan: -2ln(L/Lm)", new_poi_name ) ;
TH1F* hscan = new TH1F("hscan", htitle, 10, poiMinVal, poiMaxVal ) ;
hscan->SetMinimum(0.) ;
hscan->SetMaximum(ymax) ;
hscan->DrawCopy() ;
graph->SetLineColor(4) ;
graph->SetLineWidth(3) ;
graph->Draw("CP") ;
gPad->SetGridx(1) ;
gPad->SetGridy(1) ;
cscan->Update() ;
TLine* line = new TLine() ;
line->SetLineColor(2) ;
line->DrawLine(poiMinVal, 1., poiPlus1stdv, 1.) ;
line->DrawLine(poiMinus1stdv,0., poiMinus1stdv, 1.) ;
line->DrawLine(poiPlus1stdv ,0., poiPlus1stdv , 1.) ;
TText* text = new TText() ;
text->SetTextSize(0.04) ;
char tstring[1000] ;
sprintf( tstring, "%s = %.1f +%.1f -%.1f", new_poi_name, poiBest, (poiPlus1stdv-poiBest), (poiBest-poiMinus1stdv) ) ;
text -> DrawTextNDC( 0.15, 0.85, tstring ) ;
sprintf( tstring, "68%% interval [%.1f, %.1f]", poiMinus1stdv, poiPlus1stdv ) ;
text -> DrawTextNDC( 0.15, 0.78, tstring ) ;
char hname[1000] ;
sprintf( hname, "hscanout_%s", new_poi_name ) ;
TH1F* hsout = new TH1F( hname,"scan results",4,0.,4.) ;
double obsVal(-1.) ;
hsout->SetBinContent(1, obsVal ) ;
hsout->SetBinContent(2, poiPlus1stdv ) ;
hsout->SetBinContent(3, poiBest ) ;
hsout->SetBinContent(4, poiMinus1stdv ) ;
TAxis* xaxis = hsout->GetXaxis() ;
xaxis->SetBinLabel(1,"Observed val.") ;
xaxis->SetBinLabel(2,"Model+1sd") ;
xaxis->SetBinLabel(3,"Model") ;
xaxis->SetBinLabel(4,"Model-1sd") ;
char outrootfile[10000] ;
sprintf( outrootfile, "%s/scan-ff-%s.root", outputdir.Data(), new_poi_name ) ;
char outpdffile[10000] ;
sprintf( outpdffile, "%s/scan-ff-%s.pdf", outputdir.Data(), new_poi_name ) ;
cscan->Update() ; cscan->Draw() ;
printf("\n Saving %s\n", outpdffile ) ;
cscan->SaveAs( outpdffile ) ;
//--- save in root file
printf("\n Saving %s\n", outrootfile ) ;
TFile fout(outrootfile,"recreate") ;
graph->Write() ;
hsout->Write() ;
fout.Close() ;
delete ws ;
wstf->Close() ;
} // constrained_scan.
示例10: drawXS
//.........这里部分代码省略.........
Double_t ymax = nChannel + ymin + ylegend;
TH2F* h2 = new TH2F("h2_" + suffix, "", 100, xmin, xmax, 100, ymin, ymax);
h2->Draw();
// NLO WZ cross-section
//----------------------------------------------------------------------------
TBox* nlo = new TBox(1. - xs_nlo_left [theCharge] / xs_nlo[theCharge], ymin,
1. + xs_nlo_right[theCharge] / xs_nlo[theCharge], ymax - ylegend);
nlo->SetLineColor(0);
nlo->SetFillColor(kGray);
nlo->SetFillStyle(1001);
nlo->Draw("e2,same");
TLine* line = new TLine(1., ymin, 1., ymax - ylegend);
line->SetLineColor(kGray+1);
line->SetLineWidth(2);
line->Draw("same");
// Cross sections
//----------------------------------------------------------------------------
gLumi->Draw("p,same");
gSyst->Draw("p,same");
gStat->Draw("p,same");
// Labels
//----------------------------------------------------------------------------
for (UInt_t i=0; i<nChannel; i++) {
Double_t x = gStat->GetX()[i];
Double_t y = gStat->GetY()[i];
Double_t gStatError = gStat->GetErrorX(i);
Double_t gSystError = gSyst->GetErrorX(i);
Double_t gLumiError = gLumi->GetErrorX(i);
DrawTLatex(42, xmin+0.06, y+0.15, 0.035, 12,
Form("%s %.2f #pm %.2f",
lChannel[i].Data(), x, gLumiError), 0);
gLumiError = sqrt(gLumiError*gLumiError - gSystError*gSystError);
gSystError = sqrt(gSystError*gSystError - gStatError*gStatError);
DrawTLatex(42, xmin+0.06, y-0.15, 0.025, 12,
Form("%.2f #pm %.2f #pm %.2f #pm %.2f",
x, gStatError, gSystError, gLumiError), 0);
}
DrawTLatex(42, 0.050, 0.975, _bigLabelSize, 13, "CMS Preliminary");
DrawTLatex(42, 0.940, 0.983, _bigLabelSize, 33,
Form("#sqrt{s} = 7 TeV, L = %.1f fb^{-1}", luminosity/1e3));
TString swz = "";
if (theCharge == WPlus) swz = "W^{+}Z";
else if (theCharge == WMinus) swz = "W^{-}Z";
else swz = "W^{#pm}Z";
h2->GetXaxis()->CenterTitle();
h2->GetXaxis()->SetTitleOffset(1.4);
h2->GetXaxis()->SetTitle(Form("#sigma_{%s}^{exp} / #sigma_{%s}^{theory}",
swz.Data(),
swz.Data()));
h2->GetYaxis()->SetTitle("");
// Remove y-axis labels
//----------------------------------------------------------------------------
TAxis* yaxis = h2->GetYaxis();
for (Int_t j=1; j<yaxis->GetNbins(); j++) yaxis->SetBinLabel(j, "");
// Additional legend
//----------------------------------------------------------------------------
DrawLegend(0.645, 0.840, gStat, " stat.", "lp");
DrawLegend(0.645, 0.795, nlo, " theory", "f");
DrawLegend(0.800, 0.840, gSyst, " syst.", "l");
DrawLegend(0.800, 0.795, gLumi, " lumi.", "l");
// Save
//----------------------------------------------------------------------------
canvas->Update();
canvas->GetFrame()->DrawClone();
canvas->RedrawAxis();
canvas->SaveAs(Form("pdf/ratioNLO_%s.pdf", suffix.Data()));
canvas->SaveAs(Form("png/ratioNLO_%s.png", suffix.Data()));
}
示例11: outputdir
//.........这里部分代码省略.........
double poiMinus2stdv(-1.) ;
double poiPlus2stdv(-1.) ;
double twoDeltalnLMin(1e9) ;
int nscan(1000) ;
for ( int xi=0; xi<nscan; xi++ ) {
double x = poiVals[0] + xi*(poiVals[npoiPoints-1]-poiVals[0])/(nscan-1) ;
double twoDeltalnL = graph -> Eval( x, 0, "S" ) ;
if ( poiMinus1stdv < 0. && twoDeltalnL < 1.0 ) { poiMinus1stdv = x ; printf(" set m1 : %d, x=%g, 2dnll=%g\n", xi, x, twoDeltalnL) ;}
if ( poiMinus2stdv < 0. && twoDeltalnL < 4.0 ) { poiMinus2stdv = x ; printf(" set m2 : %d, x=%g, 2dnll=%g\n", xi, x, twoDeltalnL) ;}
if ( twoDeltalnL < twoDeltalnLMin ) { poiBest = x ; twoDeltalnLMin = twoDeltalnL ; }
if ( twoDeltalnLMin < 0.3 && poiPlus1stdv < 0. && twoDeltalnL > 1.0 ) { poiPlus1stdv = x ; printf(" set p1 : %d, x=%g, 2dnll=%g\n", xi, x, twoDeltalnL) ;}
if ( twoDeltalnLMin < 0.3 && poiPlus2stdv < 0. && twoDeltalnL > 4.0 ) { poiPlus2stdv = x ; printf(" set p2 : %d, x=%g, 2dnll=%g\n", xi, x, twoDeltalnL) ;}
if ( xi%100 == 0 ) { printf( " %4d : poi=%6.2f, 2DeltalnL = %6.2f\n", xi, x, twoDeltalnL ) ; }
}
printf("\n\n POI estimate : %g +%g -%g [%g,%g], two sigma errors: +%g -%g [%g,%g]\n\n",
poiBest,
(poiPlus1stdv-poiBest), (poiBest-poiMinus1stdv), poiMinus1stdv, poiPlus1stdv,
(poiPlus2stdv-poiBest), (poiBest-poiMinus2stdv), poiMinus2stdv, poiPlus2stdv
) ;
printf(" %s val,pm1sig,pm2sig: %7.2f %7.2f %7.2f %7.2f %7.2f\n",
new_poi_name, poiBest, (poiPlus1stdv-poiBest), (poiBest-poiMinus1stdv), (poiPlus2stdv-poiBest), (poiBest-poiMinus2stdv) ) ;
char htitle[1000] ;
sprintf(htitle, "%s profile likelihood scan: -2ln(L/Lm)", new_poi_name ) ;
TH1F* hscan = new TH1F("hscan", htitle, 10, poiMinVal, poiMaxVal ) ;
hscan->SetMinimum(0.) ;
hscan->SetMaximum(ymax) ;
hscan->DrawCopy() ;
graph->SetLineColor(4) ;
graph->SetLineWidth(3) ;
graph->Draw("CP") ;
gPad->SetGridx(1) ;
gPad->SetGridy(1) ;
cscan->Update() ;
TLine* line = new TLine() ;
line->SetLineColor(2) ;
line->DrawLine(poiMinVal, 1., poiPlus1stdv, 1.) ;
line->DrawLine(poiMinus1stdv,0., poiMinus1stdv, 1.) ;
line->DrawLine(poiPlus1stdv ,0., poiPlus1stdv , 1.) ;
TText* text = new TText() ;
text->SetTextSize(0.04) ;
char tstring[1000] ;
sprintf( tstring, "%s = %.1f +%.1f -%.1f", new_poi_name, poiBest, (poiPlus1stdv-poiBest), (poiBest-poiMinus1stdv) ) ;
text -> DrawTextNDC( 0.15, 0.85, tstring ) ;
sprintf( tstring, "68%% interval [%.1f, %.1f]", poiMinus1stdv, poiPlus1stdv ) ;
text -> DrawTextNDC( 0.15, 0.78, tstring ) ;
char hname[1000] ;
sprintf( hname, "hscanout_%s", new_poi_name ) ;
TH1F* hsout = new TH1F( hname,"scan results",4,0.,4.) ;
double obsVal(-1.) ;
hsout->SetBinContent(1, obsVal ) ;
hsout->SetBinContent(2, poiPlus1stdv ) ;
hsout->SetBinContent(3, poiBest ) ;
hsout->SetBinContent(4, poiMinus1stdv ) ;
TAxis* xaxis = hsout->GetXaxis() ;
xaxis->SetBinLabel(1,"Observed val.") ;
xaxis->SetBinLabel(2,"Model+1sd") ;
xaxis->SetBinLabel(3,"Model") ;
xaxis->SetBinLabel(4,"Model-1sd") ;
char outrootfile[10000] ;
sprintf( outrootfile, "%s/scan-ff-%s.root", outputdir.Data(), new_poi_name ) ;
char outpdffile[10000] ;
sprintf( outpdffile, "%s/scan-ff-%s.pdf", outputdir.Data(), new_poi_name ) ;
cscan->Update() ; cscan->Draw() ;
printf("\n Saving %s\n", outpdffile ) ;
cscan->SaveAs( outpdffile ) ;
//--- save in root file
printf("\n Saving %s\n", outrootfile ) ;
TFile fout(outrootfile,"recreate") ;
graph->Write() ;
hsout->Write() ;
fout.Close() ;
delete ws ;
wstf->Close() ;
}
示例12: main
//.........这里部分代码省略.........
TObjArray *branches = events->GetListOfBranches();
if (branches == 0) {
cerr << programName << ": tree \"Events\" in file " << fileName << " contains no branches" << endl;
return 7004;
}
bool verbose = vm.count(kVerboseOpt) > 0;
BranchVector v;
const size_t n = branches->GetEntries();
cout << fileName << " has " << n << " branches" << endl;
for (size_t i = 0; i < n; ++i) {
TBranch *b = dynamic_cast<TBranch *>(branches->At(i));
assert(b != 0);
string name(b->GetName());
if (name == "EventAux")
continue;
size_type s = GetTotalSize(b, verbose);
v.push_back(make_pair(b->GetName(), s));
}
if (vm.count(kAlphabeticOrderOpt)) {
sort(v.begin(), v.end(), sortByName());
} else {
sort(v.begin(), v.end(), sortByCompressedSize());
}
bool plot = (vm.count(kPlotOpt) > 0);
bool save = (vm.count(kSavePlotOpt) > 0);
int top = n;
if (vm.count(kPlotTopOpt) > 0)
top = vm[kPlotTopOpt].as<int>();
TH1F uncompressed("uncompressed", "branch sizes", top, -0.5, -0.5 + top);
TH1F compressed("compressed", "branch sizes", top, -0.5, -0.5 + top);
int x = 0;
TAxis *cxAxis = compressed.GetXaxis();
TAxis *uxAxis = uncompressed.GetXaxis();
for (BranchVector::const_iterator b = v.begin(); b != v.end(); ++b) {
const string &name = b->first;
size_type size = b->second;
cout << size << " " << name << endl;
if (x < top) {
cxAxis->SetBinLabel(x + 1, name.c_str());
uxAxis->SetBinLabel(x + 1, name.c_str());
compressed.Fill(x, size.second);
uncompressed.Fill(x, size.first);
x++;
}
}
// size_type branchSize = GetTotalBranchSize( events );
// cout << "total branches size: " << branchSize.first << " bytes (uncompressed), "
// << branchSize.second << " bytes (compressed)"<< endl;
size_type totalSize = GetTotalSize(events);
cout << "total tree size: " << totalSize.first << " bytes (uncompressed), " << totalSize.second
<< " bytes (compressed)" << endl;
double mn = DBL_MAX;
for (int i = 1; i <= top; ++i) {
double cm = compressed.GetMinimum(i), um = uncompressed.GetMinimum(i);
if (cm > 0 && cm < mn)
mn = cm;
if (um > 0 && um < mn)
mn = um;
}
mn *= 0.8;
double mx = max(compressed.GetMaximum(), uncompressed.GetMaximum());
mx *= 1.2;
uncompressed.SetMinimum(mn);
uncompressed.SetMaximum(mx);
compressed.SetMinimum(mn);
// compressed.SetMaximum( mx );
cxAxis->SetLabelOffset(-0.32);
cxAxis->LabelsOption("v");
cxAxis->SetLabelSize(0.03);
uxAxis->SetLabelOffset(-0.32);
uxAxis->LabelsOption("v");
uxAxis->SetLabelSize(0.03);
compressed.GetYaxis()->SetTitle("Bytes");
compressed.SetFillColor(kBlue);
compressed.SetLineWidth(2);
uncompressed.GetYaxis()->SetTitle("Bytes");
uncompressed.SetFillColor(kRed);
uncompressed.SetLineWidth(2);
if (plot) {
string plotName = vm[kPlotOpt].as<string>();
gROOT->SetStyle("Plain");
gStyle->SetOptStat(kFALSE);
gStyle->SetOptLogy();
TCanvas c;
uncompressed.Draw();
compressed.Draw("same");
c.SaveAs(plotName.c_str());
}
if (save) {
string fileName = vm[kSavePlotOpt].as<string>();
TFile f(fileName.c_str(), "RECREATE");
compressed.Write();
uncompressed.Write();
f.Close();
}
return 0;
}