本文整理汇总了C++中TH1::SetTitle方法的典型用法代码示例。如果您正苦于以下问题:C++ TH1::SetTitle方法的具体用法?C++ TH1::SetTitle怎么用?C++ TH1::SetTitle使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TH1
的用法示例。
在下文中一共展示了TH1::SetTitle方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GetOne
TH1* GetOne(UShort_t sNN, const TString& trigger)
{
Long_t p = gROOT->ProcessLine(Form("Drawer::GetStack(0, \"pp\", %d, "
"\"%s\", false, true)",
sNN, trigger.Data()));
THStack* s = (THStack*)p;
TList* l = s->GetHists();
TH1* h = 0;
TIter n(l);
l->ls();
while ((h = static_cast<TH1*>(n()))) {
TString m(h->GetName());
if (m.EqualTo("dndetaForward_all")) break;
}
if (h) {
switch (sNN) {
case 900: h->SetTitle("900GeV"); h->SetMarkerColor(kRed+2); break;
case 2760: h->SetTitle("2.76TeV"); h->SetMarkerColor(kGreen+2); break;
case 7000: h->SetTitle("7TeV"); h->SetMarkerColor(kBlue+2); break;
case 8000: h->SetTitle("8TeV"); h->SetMarkerColor(kBlack); break;
}
}
return h;
}
示例2: QAvertex
void QAvertex(const Char_t *fdata, const Char_t *fmc)
{
style();
TFile *fdtin = TFile::Open(fdata);
TList *ldtin = (TList *)fdtin->Get("clist");
TH2 *hdtin = (TH2 *)ldtin->FindObject("zv");
TH1 *hdt = (TH1 *)ldtin->FindObject("zvNoSel");
SetHistoStyle(hdt, 20, kRed+1);
hdt->Scale(1. / hdt->Integral());
TH1 *hdt0010 = hdtin->ProjectionX("hdt0010", 1, 4);
SetHistoStyle(hdt0010, 20, kRed+1);
hdt0010->Scale(1. / hdt0010->Integral());
TH1 *hdt7080 = hdtin->ProjectionX("hdt7080", 11, 11);
SetHistoStyle(hdt7080, 25, kAzure-3);
hdt7080->Scale(1. / hdt7080->Integral());
TFile *fmcin = TFile::Open(fmc);
TList *lmcin = (TList *)fmcin->Get("clist");
TH1 *hmc = (TH1 *)lmcin->FindObject("zvNoSel");
SetHistoStyle(hmc, 25, kAzure-3);
hmc->Scale(1. / hmc->Integral());
TCanvas *c = new TCanvas("cVertex", "cVertex", 800, 800);
TH1 * hfr = c->DrawFrame(-20., 0., 20., 0.1);
hfr->SetTitle(";#it{z}_{vtx};");
hdt0010->Draw("same");
hdt7080->Draw("same");
TLegend *legend = new TLegend(0.20, 0.18+0.60, 0.50, 0.30+0.60);
legend->SetFillColor(0);
legend->SetBorderSize(0);
legend->SetTextFont(42);
legend->SetTextSize(0.04);
legend->AddEntry(hdt0010, "0-10%", "p");
legend->AddEntry(hdt7080, "70-80%", "p");
legend->Draw("same");
c->SaveAs(canvasPrefix+"vertex.pdf");
TCanvas *c1 = new TCanvas("cVertexDataMC", "cVertexDataMC", 800, 800);
hfr = c1->DrawFrame(-20., 0., 20., 0.1);
hfr->SetTitle(";#it{z}_{vtx};");
hdt->Draw("same");
hmc->Draw("same");
legend = new TLegend(0.20, 0.18+0.60, 0.50, 0.30+0.60);
legend->SetFillColor(0);
legend->SetBorderSize(0);
legend->SetTextFont(42);
legend->SetTextSize(0.04);
legend->AddEntry(hdt, "data", "p");
legend->AddEntry(hmc, "Monte Carlo", "p");
legend->Draw("same");
c1->SaveAs(canvasPrefix+"vertexDataMC.pdf");
//return 0;
}
示例3: QAcentrality
void QAcentrality(const Char_t *fdata)
{
style();
TFile *fin = TFile::Open(fdata);
TList *lin = (TList *)fin->Get("clist");
lin->ls();
TH1 *hin = (TH1 *)lin->FindObject("EvCentrDist");
Float_t sum = 1.2 * hin->Integral(hin->FindBin(0.1), hin->FindBin(79.9));
hin->Scale(1. / sum);
SetHistoStyle(hin, 20, kRed+1);
TCanvas *c = new TCanvas("cQAcentrality", "cQAcentrality", 800, 800);
TH1 * hfr = c->DrawFrame(0., 0.005, 100., 0.015);
hfr->SetTitle(";centrality percentile;events");
hin->Draw("same");
c->SaveAs(canvasPrefix+"centrality.pdf");
TH2 *hinv0 = (TH2 *)lin->FindObject("V0");
TCanvas *cv0 = new TCanvas("cQAcentralityV0", "cQAcentralityV0", 800, 800);
cv0->SetLogx();
cv0->SetLogz();
// TH1 * hfrv0 = cv0->DrawFrame(100., -0.5, 50000., 10.5);
// DrawBinLabelsY(hfrv0, kTRUE);
// hfrv0->SetTitle(";V0 signal;");
//hinv0->Draw("same,col");
hinv0->Draw("col");
cv0->SaveAs(canvasPrefix+"centralityV0.pdf");
}
示例4: DrawNext
// draw the next waveform that we find associated with an event
void DrawNext(void)
{
static Int_t evno=0;
if (tree == nullptr) {
tree = (TTree*)gROOT->FindObject("FragmentTree");
}
tree->SetBranchAddress("TFragment", &frag);
do {
tree->GetEntry(evno++);
} while (frag->wavebuffer.empty());
cout<<"Event number "<<evno<<endl;
frag->Print();
//printf("wavebuffer.size() = %i\n",wavebuffer.size());
TH1 *his = makeHisto(frag->wavebuffer);
TChannel *chan = TChannel::GetChannel(frag->ChannelAddress);
// if(chan && (strncmp(chan->GetChannelName(),"DSC",3)==0))
// TH1 *his = makeDescantHisto(frag->wavebuffer);
if(chan)
his->SetTitle(chan->GetChannelName());
his->Draw();
}
示例5: SetTitle
void SetTitle(TH1& h, TString Xtitle, TString Ytitle, TString title){
h.GetXaxis()->SetTitle(Xtitle);
h.GetYaxis()->SetTitle(Ytitle);
h.GetXaxis()->CenterTitle();
h.GetYaxis()->CenterTitle();
h.SetTitle(title);
}
示例6: set
histoBook* histoBook::set( string param, string p1, string p2, string p3, string p4 ){
// force the param name to lowercase
transform(param.begin(), param.end(), param.begin(), ::tolower);
TH1* h = get( styling );
if ( h ){
if ( "title" == param ){
h->SetTitle( p1.c_str() );
} else if ( "x" == param ){
h->GetXaxis()->SetTitle( p1.c_str() );
} else if ( "y" == param ){
h->GetYaxis()->SetTitle( p1.c_str() );
} else if ( "legend" == param ){
if ( p2 == "")
p2="lpf";
legend->AddEntry( h, p1.c_str(), p2.c_str() );
legend->Draw();
} else if ( "draw" == param ){
drawOption = p1;
}
}
return this;
}
示例7: DrawNP
TCanvas* DrawNP(int np, TObjArray* harr, TCanvas* cnv)
{
if (!harr) harr = &histoArr;
if (!cnv) cnv = new TCanvas(Form("cnv%d",np),Form("cnv%d",np),900,700);
cnv->Clear();
cnv->Divide(2,1);
cnv->cd(1);
//
TH1* dxodd = (TH1*)harr->At(np*10+kDTXodd);
TH1* dxevn = (TH1*)harr->At(np*10+kDTXeven);
TH1* dxoddS =(TH1*)harr->At(np*10+kDTXoddSPL);
TH1* dxevnS =(TH1*)harr->At(np*10+kDTXevenSPL);
double max = TMath::Max(dxodd->GetMaximum(),dxevn->GetMaximum());
dxodd->SetMaximum(1.1*max);
dxodd->GetXaxis()->SetTitle("#DeltaX, #mum");
dxodd->SetTitle(Form("#DeltaX for clSize=%d",np));
dxodd->Fit("gaus","","");
dxevn->Fit("gaus","","sames");
//
dxoddS->Draw("sames");
dxevnS->Draw("sames");
//
gPad->Modified();
gPad->Update();
SetStPadPos(dxodd,0.75,0.97,0.8,1., -1,dxodd->GetLineColor());
SetStPadPos(dxevn,0.75,0.97,0.6,0.8, -1,dxevn->GetLineColor());
SetStPadPos(dxoddS,0.75,0.97,0.4,0.6, -1,dxoddS->GetLineColor());
SetStPadPos(dxevnS,0.75,0.97,0.2,0.4, -1,dxevnS->GetLineColor());
//
cnv->cd(2);
TH1* dz = (TH1*)harr->At(np*10+kDTZ);
dz->SetTitle(Form("#DeltaZ for clSize=%d",np));
dz->GetXaxis()->SetTitle("#DeltaZ, #mum");
dz->Fit("gaus");
TH1* dzS = (TH1*)harr->At(np*10+kDTZSPL);
dz->Draw("sames");
gPad->Modified();
gPad->Update();
SetStPadPos(dz,0.75,0.97,0.8,1., -1, dz->GetLineColor());
SetStPadPos(dzS,0.75,0.97,0.5,0.7, -1, dzS->GetLineColor());
gPad->Modified();
gPad->Update();
//
cnv->cd();
return cnv;
}
示例8: showGraph
void showGraph(double canvasSizeX, double canvasSizeY,
TGraph* graph,
bool useLogScaleX, double xMin, double xMax, const std::string& xAxisTitle, double xAxisOffset,
bool useLogScaleY, double yMin, double yMax, const std::string& yAxisTitle, double yAxisOffset,
const std::string& outputFileName)
{
TCanvas* canvas = new TCanvas("canvas", "canvas", canvasSizeX, canvasSizeY);
canvas->SetFillColor(10);
canvas->SetBorderSize(2);
canvas->SetTopMargin(0.05);
canvas->SetLeftMargin(0.19);
canvas->SetBottomMargin(0.19);
canvas->SetRightMargin(0.05);
canvas->SetLogx(useLogScaleX);
canvas->SetLogy(useLogScaleY);
TH1* dummyHistogram = new TH1D("dummyHistogram", "dummyHistogram", 10, xMin, xMax);
dummyHistogram->SetTitle("");
dummyHistogram->SetStats(false);
dummyHistogram->SetMinimum(yMin);
dummyHistogram->SetMaximum(yMax);
dummyHistogram->Draw("axis");
TAxis* xAxis = dummyHistogram->GetXaxis();
xAxis->SetTitle(xAxisTitle.data());
xAxis->SetTitleOffset(xAxisOffset);
xAxis->SetTitleSize(0.065);
xAxis->SetLabelSize(0.055);
xAxis->SetLabelOffset(0.01);
xAxis->SetTickLength(0.055);
xAxis->SetNdivisions(505);
TAxis* yAxis = dummyHistogram->GetYaxis();
yAxis->SetTitle(yAxisTitle.data());
yAxis->SetTitleOffset(yAxisOffset);
yAxis->SetTitleSize(0.070);
yAxis->SetLabelSize(0.055);
yAxis->SetLabelOffset(0.01);
yAxis->SetTickLength(0.055);
yAxis->SetNdivisions(505);
graph->SetMarkerColor(1);
graph->SetLineColor(1);
graph->Draw("p");
canvas->Update();
size_t idx = outputFileName.find_last_of('.');
std::string outputFileName_plot = std::string(outputFileName, 0, idx);
if ( useLogScaleY ) outputFileName_plot.append("_log");
else outputFileName_plot.append("_linear");
if ( idx != std::string::npos ) canvas->Print(std::string(outputFileName_plot).append(std::string(outputFileName, idx)).data());
canvas->Print(std::string(outputFileName_plot).append(".png").data());
//canvas->Print(std::string(outputFileName_plot).append(".pdf").data());
//canvas->Print(std::string(outputFileName_plot).append(".root").data());
delete dummyHistogram;
delete canvas;
}
示例9: TreeDraw
void OnlineGUI::TreeDraw(vector <TString> command) {
// Called by DoDraw(), this will plot a Tree Variable
TString var = command[0];
// Combine the cuts (definecuts and specific cuts)
TCut cut = "";
TString tempCut;
if(command.size()>1) {
tempCut = command[1];
vector <TString> cutIdents = fConfig->GetCutIdent();
for(UInt_t i=0; i<cutIdents.size(); i++) {
if(tempCut.Contains(cutIdents[i])) {
TString cut_found = (TString)fConfig->GetDefinedCut(cutIdents[i]);
tempCut.ReplaceAll(cutIdents[i],cut_found);
}
}
cut = (TCut)tempCut;
}
// Determine which Tree the variable comes from, then draw it.
UInt_t iTree;
if(command[4].IsNull()) {
iTree = GetTreeIndex(var);
} else {
iTree = GetTreeIndexFromName(command[4]);
}
TString drawopt = command[2];
Int_t errcode=0;
if(drawopt.IsNull() && var.Contains(":")) drawopt = "box";
if(drawopt=="scat") drawopt = "";
if (iTree <= fRootTree.size() ) {
errcode = fRootTree[iTree]->Draw(var,cut,drawopt,
1000000000,fTreeEntries[iTree]);
TObject *hobj = (TObject*)gROOT->FindObject("htemp");
if(errcode==-1) {
BadDraw(var+" not found");
} else if (errcode!=0) {
if(!command[3].IsNull()) {
TH1* thathist = (TH1*)hobj;
thathist->SetTitle(command[3]);
}
} else {
BadDraw("Empty Histogram");
}
} else {
BadDraw(var+" not found");
if (fConfig->IsMonitor()){
// Maybe we missed it... look again. I dont like the code
// below... maybe I can come up with something better
GetFileObjects();
GetRootTree();
GetTreeVars();
}
}
}
示例10: QAoccupancy
void QAoccupancy(const Char_t *fdata, const Char_t *fmc)
{
style();
TFile *fdtin = TFile::Open(fdata);
TList *ldtin = (TList *)fdtin->Get("clist");
TH2 *hdtin = (TH2 *)ldtin->FindObject("NClustersSPD2");
TProfile *pdtin = hdtin->ProfileY("pdtin_clusters");
pdtin->SetMarkerStyle(20);
pdtin->SetMarkerSize(2);
pdtin->SetMarkerColor(kAzure-3);
TFile *fmcin = TFile::Open(fmc);
TList *lmcin = (TList *)fmcin->Get("clist");
TH2 *hmcin = (TH2 *)lmcin->FindObject("NClustersSPD2");
TProfile *pmcin = hmcin->ProfileY("pmcin_clusters");
pmcin->SetMarkerStyle(25);
pmcin->SetMarkerSize(2);
pmcin->SetMarkerColor(kRed+1);
TCanvas *c = new TCanvas("cOccupancy", "cOccupancy", 800, 800);
c->SetLogy();
TH1 * hfr = c->DrawFrame(-0.5, 2., 10.5, 500.);
DrawBinLabelsX(hfr, kTRUE);
hfr->SetTitle(";;#LT#it{N}_{clusters,SPD-1}#GT");
pdtin->DrawCopy("same");
pmcin->DrawCopy("same");
TLegend *legend = new TLegend(0.20, 0.18, 0.50, 0.30);
legend->SetFillColor(0);
legend->SetBorderSize(0);
legend->SetTextFont(42);
legend->SetTextSize(0.04);
legend->AddEntry(pdtin, "data", "pl");
legend->AddEntry(pmcin, "Monte Carlo", "pl");
legend->Draw("same");
c->SaveAs(canvasPrefix+"occupancy.pdf");
return;
TCanvas *cr = new TCanvas("cOccupancyr", "cOccupancyr", 800, 800);
// hfr = cr->DrawFrame(-0.5, 0.75, 10.5, 1.25);
// DrawBinLabelsX(hfr, kTRUE);
// hfr->SetTitle(";;#LT#it{N}_{clusters,SPD-1}#GT ratio");
pdtin->SetLineColor(kAzure-3);
pdtin->SetLineWidth(3);
pdtin->Divide(pmcin);
pdtin->Draw("same,histo");
legend = new TLegend(0.505025, 0.760673, 0.805276, 0.930142);
legend->SetFillColor(0);
legend->SetBorderSize(0);
legend->SetTextFont(42);
legend->SetTextSize(0.04);
legend->AddEntry(pdtin, "data / Monte Carlo", "l");
legend->Draw("same");
cr->SaveAs(canvasPrefix+"occupancyr.pdf");
}
示例11: compareDYTemplates
void compareDYTemplates(TString baseURL="~/scratch0/top-newjec/syst_plotter.root")
{
TString ch[]={"ee","mumu"};
TString categs[]={"eq1jets",""};
for(size_t ich=0; ich<2; ich++)
{
for(size_t icat=0; icat<2; icat++)
{
TObjArray lowMet = getDistributionFromPlotter(ch[ich]+"_"+categs[icat]+"lowmetdilarccosine",baseURL);
TH1 *lowMetH = (TH1 *) ((TList *)lowMet.At(3))->At(3);
formatPlot(lowMetH,1,1,1,24,0,false,false,1,1,1);
lowMetH->SetTitle("E_{T}^{miss}<30 GeV/c^{2}");
lowMetH->Scale(1./lowMetH->Integral());
TObjArray highMet = getDistributionFromPlotter(ch[ich]+"_"+categs[icat]+"dilarccosine",baseURL);
TH1 *highMetH = (TH1 *) ((TList *)highMet.At(3))->At(3);
formatPlot(highMetH,1,1,1,20,0,false,false,1,1,1);
highMetH->SetTitle("E_{T}^{miss}>30 GeV/c^{2}");
highMetH->Scale(1./highMetH->Integral());
TString channelTitle(ich==0 ? "ee" : "#mu#mu");
if(categs[icat]=="eq1jets") channelTitle += "+ 1 jet";
else channelTitle += "+ #geq 2 jets";
//draw
TString plot(ch[ich]+categs[icat]+"_anglecomparison");
TCanvas *cnv = getNewCanvas(plot+"c",plot+"c",false);
cnv->Clear();
cnv->SetWindowSize(600,600);
cnv->cd();
TList *mc = new TList; mc->Add(lowMetH);
TList *data = new TList; data->Add(highMetH);
TList *spimpose = new TList;
TLegend *leg=showPlotsAndMCtoDataComparison(cnv,*mc,*spimpose,*data,false);
TPad *p=(TPad *)cnv->cd(1);
formatForCmsPublic(p,leg,"CMS simulation, " + channelTitle, 4);
cnv->SaveAs(plot+".C");
cnv->SaveAs(plot+".pdf");
cnv->SaveAs(plot+".png");
}
}
}
示例12: tit
/**
* Create ratios to other data
*
* @param ib Bin number
* @param res Result
* @param alice ALICE result if any
* @param cms CMS result if any
* @param all Stack to add ratio to
*/
void Ratio2Stack(Int_t ib, TH1* res, TGraph* alice, TGraph* cms, THStack* all)
{
if (!all || !res || !(alice || cms)) return;
Int_t off = 5*ib;
TGraph* gs[] = { (alice ? alice : cms), (alice ? cms : 0), 0 };
TGraph** pg = gs;
while (*pg) {
TGraph* g = *pg;
const char* n = (g == alice ? "ALICE" : "CMS");
TH1* r = static_cast<TH1*>(res->Clone(Form("ratio%s", n)));
TString tit(r->GetTitle());
tit.ReplaceAll("Corrected", Form("Ratio to %s", n));
r->SetTitle(tit);
r->SetMarkerColor(g->GetMarkerColor());
r->SetLineColor(g->GetLineColor());
TObject* tst = r->FindObject("legend");
if (tst) r->GetListOfFunctions()->Remove(tst);
for (Int_t i = 1; i <= r->GetNbinsX(); i++) {
Double_t c = r->GetBinContent(i);
Double_t e = r->GetBinError(i);
Double_t o = g->Eval(r->GetBinCenter(i));
if (o < 1e-12) {
r->SetBinContent(i, 0);
r->SetBinError(i, 0);
continue;
}
r->SetBinContent(i, (c - o) / o + off);
r->SetBinError(i, e / o);
}
all->Add(r);
pg++;
}
TLegend* leg = StackLegend(all);
if (!leg) return;
TString txt = res->GetTitle();
txt.ReplaceAll("Corrected P(#it{N}_{ch}) in ", "");
if (ib == 0) txt.Append(" "); // (#times1)");
// else if (ib == 1) txt.Append(" (#times10)");
else txt.Append(Form(" (+%d)", off));
TObject* dummy = 0;
TLegendEntry* e = leg->AddEntry(dummy, txt, "p");
e->SetMarkerStyle(res->GetMarkerStyle());
e->SetMarkerSize(res->GetMarkerSize());
e->SetMarkerColor(kBlack);
e->SetFillColor(0);
e->SetFillStyle(0);
e->SetLineColor(kBlack);
}
示例13: draw_output_stat
void plotter::draw_output_stat(TH1* output_, TH1* stat_, TH1D* truth_, bool norm, TString file_name){
// std::vector<double> sys = get_sys_errors();
// TH1* output_sys = add_error_bar(output, sys);
TH1* output = (TH1*) output_->Clone("output");
TH1* stat = (TH1*) stat_->Clone("stat");
TH1D* truth = (TH1D*) truth_->Clone("truth");
TCanvas *c = new TCanvas("c","",600,600);
double ymax;
gPad->SetLeftMargin(0.15);
if(truth->GetMaximum() > output->GetMaximum()) ymax = 1.5 * truth->GetMaximum();
else ymax = 1.5 * output->GetMaximum();
TGaxis::SetMaxDigits(3);
output->SetTitle(" ");
output->GetYaxis()->SetRangeUser(0., ymax);
output->GetXaxis()->SetTitle("Leading-jet mass [GeV]");
if(norm) output->GetYaxis()->SetTitle("#frac{1}{#sigma} #frac{d#sigma}{dm_{jet}} [#frac{1}{GeV}]");
else output->GetYaxis()->SetTitle("events");
output->GetYaxis()->SetTitleOffset(1.1);
output->GetXaxis()->SetTitleOffset(0.9);
output->GetYaxis()->SetTitleSize(0.05);
output->GetXaxis()->SetTitleSize(0.05);
output->GetYaxis()->SetNdivisions(505);
output->SetLineColor(kBlack);
output->SetMarkerColor(kBlack);
output->SetMarkerStyle(8);
output->SetMarkerSize(1);
output->Draw("E1");
stat->SetLineColor(kBlack);
stat->SetMarkerColor(kBlack);
stat->SetMarkerStyle(8);
stat->SetMarkerSize(1);
gStyle->SetEndErrorSize(5);
truth->SetLineWidth(3);
truth->SetLineColor(kRed);
truth->SetLineStyle(2);
truth->Draw("HIST SAME");
stat->Draw("E1 SAME");
output->Draw("E1 SAME");
TLegend *l=new TLegend(0.5,0.65,0.85,0.85);
l->SetBorderSize(0);
l->SetFillStyle(0);
l->AddEntry(output,"data unfolded","pl");
l->AddEntry(truth,"MC particle level","pl");
l->SetTextSize(0.04);
l->Draw();
c->SaveAs(directory + file_name + ".pdf");
delete c;
}
示例14: DrawSkippable
void DrawSkippable(TTree* tree, const char* what, const char* where, Bool_t draw = true) {
//cerr << "Doing " << what << " which is " << skip << endl;
if (draw) {
TString cut = what;
cut.Append(">>");
cut.Append(where);
tree->Draw(cut.Data(),"","goff");
TH1* h = (TH1*)gDirectory->FindObject(where);
if (h) h->SetTitle(Form("histo made from T->Draw(\"%s\")",what));
} else {
gSkipped.Add(new TNamed(where,where));
}
};
示例15: makeCDF
TH1* makeCDF(TH1* h) {
TString sName(TString(h->GetName())+TString("_CDF"));
TString sTitle(TString(h->GetTitle())+TString(" CDF"));
TH1* hOut = (TH1*) h->Clone(sName);
hOut->SetTitle(sTitle);
hOut->Reset();
double cdf = 0;
for (int ibin=0; ibin < h->GetNbinsX()+2; ++ibin) {
cdf += h->GetBinContent(ibin);
hOut->SetBinContent(ibin,cdf);
}
hOut->Scale(1.0/(h->Integral(0,h->GetNbinsX()+1)));
return hOut;
}