Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion core/base/inc/TObject.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ class TObject {

static void SavePrimitiveConstructor(std::ostream &out, TClass *cl, const char *variable_name, const char *constructor_agrs = "", Bool_t empty_line = kTRUE);

static TString SavePrimitiveVector(std::ostream &out, const char *prefix, Int_t len, Double_t *arr, Bool_t empty_line = kFALSE);
static TString SavePrimitiveVector(std::ostream &out, const char *prefix, Int_t len, Double_t *arr, Int_t flag = 0);

static void SavePrimitiveDraw(std::ostream &out, const char *variable_name, Option_t *option = nullptr);

Expand Down
31 changes: 24 additions & 7 deletions core/base/src/TObject.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -784,18 +784,33 @@ void TObject::SavePrimitiveConstructor(std::ostream &out, TClass *cl, const char
/// Save array in the output stream "out" as vector.
/// Create unique variable name based on prefix value
/// Returns name of vector which can be used in constructor or in other places of C++ code
/// If flag === kTRUE, just add empty line
/// If flag === 111, check if array is empty and return nullptr or <vectorname>.data()

TString TObject::SavePrimitiveVector(std::ostream &out, const char *prefix, Int_t len, Double_t *arr, Bool_t empty_line)
TString TObject::SavePrimitiveVector(std::ostream &out, const char *prefix, Int_t len, Double_t *arr, Int_t flag)
{
thread_local int vectid = 0;

TString vectame = TString::Format("%s_vect%d", prefix, vectid++);

if (empty_line)
if (flag == (Int_t) kTRUE)
out << " \n";
else if (flag == 111) {
// check if array empty or contains only zeros
Bool_t empty = kTRUE;
if (arr)
for(Int_t n = 0; n < len; ++n)
if (arr[n]) {
empty = kFALSE;
break;
}

if (empty)
return "nullptr";
}

TString vectname = TString::Format("%s_vect%d", prefix, vectid++);

out << " std::vector<Double_t> " << vectame;
if (len > 0 && arr) {
out << " std::vector<Double_t> " << vectname;
if (len > 0) {
const auto old_precision{out.precision()};
constexpr auto max_precision{std::numeric_limits<double>::digits10 + 1};
out << std::setprecision(max_precision);
Expand All @@ -812,7 +827,9 @@ TString TObject::SavePrimitiveVector(std::ostream &out, const char *prefix, Int_
out << std::setprecision(old_precision);
}
out << ";\n";
return vectame;
if (flag == 111)
vectname.Append(".data()"); // just to be used as args
return vectname;
}

////////////////////////////////////////////////////////////////////////////////
Expand Down
2 changes: 2 additions & 0 deletions graf2d/graf/inc/TGraphPolar.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ class TGraphPolar : public TGraphErrors {

TGraphPolargram *CreatePolargram(const char *opt);

void SavePrimitive(std::ostream &out, Option_t *option = "") override;

void Draw(Option_t* options = "") override;
Bool_t GetOptionAxis() {return fOptionAxis;}
void SetMaxRadial(Double_t maximum = 1); //*MENU*
Expand Down
1 change: 1 addition & 0 deletions graf2d/graf/inc/TGraphPolargram.h
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ class TGraphPolargram: public TNamed, public TAttText, public TAttLine {
void ExecuteEvent(Int_t event, Int_t px, Int_t py) override;
void PaintCircle(Double_t x, Double_t y, Double_t r,
Double_t phimin, Double_t phimax, Double_t theta);
void SavePrimitive(std::ostream &out, Option_t *option = "") override;
void SetAxisAngle(Double_t angle = 0); //*MENU*
void SetNdivPolar(Int_t Ndiv = 508); //*MENU*
void SetNdivRadial(Int_t Ndiv = 508); //*MENU*
Expand Down
28 changes: 28 additions & 0 deletions graf2d/graf/src/TGraphPolar.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -212,3 +212,31 @@ TGraphPolargram *TGraphPolar::CreatePolargram(const char *opt)

return new TGraphPolargram("Polargram", rwrmin, rwrmax, rwtmin, rwtmax, opt);
}

////////////////////////////////////////////////////////////////////////////////
/// Save primitive as a C++ statement(s) on output stream out

void TGraphPolar::SavePrimitive(std::ostream &out, Option_t *option /*= ""*/)
{
auto xname = SavePrimitiveVector(out, "polar_fx", fNpoints, fX, kTRUE);
auto yname = SavePrimitiveVector(out, "polar_fy", fNpoints, fY);
auto exname = SavePrimitiveVector(out, "polar_fex", fNpoints, fEX, 111);
auto eyname = SavePrimitiveVector(out, "polar_fey", fNpoints, fEY, 111);

SavePrimitiveConstructor(
out, Class(), "polar",
TString::Format("%d, %s.data(), %s.data(), %s, %s", fNpoints, xname.Data(), yname.Data(), exname.Data(), eyname.Data()), kFALSE);

SavePrimitiveNameTitle(out, "polar");

SaveFillAttributes(out, "polar", 0, 1001);
SaveLineAttributes(out, "polar", 1, 1, 1);
SaveMarkerAttributes(out, "polar", 1, 1, 1);

if (fPolargram) {
fPolargram->SavePrimitive(out, "nodraw");
out << " polar->SetPolargram(polargram);\n";
}

SavePrimitiveDraw(out, "polar", option);
}
49 changes: 49 additions & 0 deletions graf2d/graf/src/TGraphPolargram.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ End_Macro
#include "TGaxis.h"
#include "THLimitsFinder.h"
#include "TVirtualPad.h"
#include "TColor.h"
#include "TLatex.h"
#include "TEllipse.h"
#include "TMath.h"
Expand Down Expand Up @@ -962,3 +963,51 @@ void TGraphPolargram::SetTwoPi()
{
SetRangePolar(0,2*TMath::Pi());
}


////////////////////////////////////////////////////////////////////////////////
/// Save TGraphPolargram as primitive

void TGraphPolargram::SavePrimitive(std::ostream &out, Option_t *option)
{
if (!option || strcmp(option, "nodraw"))
return;

TString opt = "";
if (fDegree)
opt = "d";
else if (fGrad)
opt = "g";

SavePrimitiveConstructor(
out, Class(), "polargram",
TString::Format("\"%s\", %g, %g, %g, %g, \"%s\"", GetName(), fRwrmin, fRwrmax, fRwtmin, fRwtmax, opt.Data()));

SaveLineAttributes(out, "polargram", -1, -1, -1);
SaveTextAttributes(out, "polargram", -1, -1, -1, -1, -1);

if (fAxisAngle)
out << " polargram->SetAxisAngle(" << fAxisAngle / TMath::Pi() * 180 << ");\n";

if (fNdivPol != 508)
out << " polargram->SetNdivPolar(" << fNdivPol << ");\n";
out << " polargram->SetPolarLabelColor(" << TColor::SavePrimitiveColor(fPolarLabelColor) << ");\n";
out << " polargram->SetPolarLabelFont(" << fPolarLabelFont << ");\n";
out << " polargram->SetPolarLabelSize(" << fPolarTextSize << ");\n";
if (fPolarOffset != 0.04)
out << " polargram->SetPolarOffset(" << fPolarOffset << ");\n";
out << " polargram->SetTickpolarSize(" << fTickpolarSize << ");\n";
if (fPolarLabels)
for(Int_t n = 0; n < fNdivPol; n++)
if (!fPolarLabels[n].IsNull())
out << " polargram->SetPolarLabel(\"" << fPolarLabels[n] << "\");\n";

if (fNdivRad != 508)
out << " polargram->SetNdivRadial(" << fNdivRad << ");\n";
out << " polargram->SetRadialLabelColor(" << TColor::SavePrimitiveColor(fRadialLabelColor) << ");\n";
out << " polargram->SetRadialLabelFont(" << fRadialLabelFont << ");\n";
out << " polargram->SetRadialLabelSize(" << fRadialTextSize << ");\n";
if (fRadialOffset != 0.04)
out << " polargram->SetRadialOffset(" << fRadialOffset << ");\n";
}

14 changes: 7 additions & 7 deletions hist/hist/src/TGraph2DAsymmErrors.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -581,17 +581,17 @@ void TGraph2DAsymmErrors::SavePrimitive(std::ostream &out, Option_t *option)
TString arrx = SavePrimitiveVector(out, "gr2daerr_x", fNpoints, fX, kTRUE);
TString arry = SavePrimitiveVector(out, "gr2daerr_y", fNpoints, fY);
TString arrz = SavePrimitiveVector(out, "gr2daerr_z", fNpoints, fZ);
TString arrexl = SavePrimitiveVector(out, "gr2daerr_exl", fNpoints, fEXlow);
TString arrexh = SavePrimitiveVector(out, "gr2daerr_exh", fNpoints, fEXhigh);
TString arreyl = SavePrimitiveVector(out, "gr2daerr_eyl", fNpoints, fEYlow);
TString arreyh = SavePrimitiveVector(out, "gr2daerr_eyh", fNpoints, fEYhigh);
TString arrezl = SavePrimitiveVector(out, "gr2daerr_ezl", fNpoints, fEZlow);
TString arrezh = SavePrimitiveVector(out, "gr2daerr_ezh", fNpoints, fEZhigh);
TString arrexl = SavePrimitiveVector(out, "gr2daerr_exl", fNpoints, fEXlow, 111);
TString arrexh = SavePrimitiveVector(out, "gr2daerr_exh", fNpoints, fEXhigh, 111);
TString arreyl = SavePrimitiveVector(out, "gr2daerr_eyl", fNpoints, fEYlow, 111);
TString arreyh = SavePrimitiveVector(out, "gr2daerr_eyh", fNpoints, fEYhigh, 111);
TString arrezl = SavePrimitiveVector(out, "gr2daerr_ezl", fNpoints, fEZlow, 111);
TString arrezh = SavePrimitiveVector(out, "gr2daerr_ezh", fNpoints, fEZhigh, 111);

SavePrimitiveConstructor(
out, Class(), "gr2daerr",
TString::Format(
"%d, %s.data(), %s.data(), %s.data(), %s.data(), %s.data(), %s.data(), %s.data(), %s.data(), %s.data()",
"%d, %s.data(), %s.data(), %s.data(), %s, %s, %s, %s, %s, %s",
fNpoints, arrx.Data(), arry.Data(), arrz.Data(), arrexl.Data(), arrexh.Data(), arreyl.Data(), arreyh.Data(),
arrezl.Data(), arrezh.Data()),
kFALSE);
Expand Down
8 changes: 4 additions & 4 deletions hist/hist/src/TGraph2DErrors.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -455,12 +455,12 @@ void TGraph2DErrors::SavePrimitive(std::ostream &out, Option_t *option)
TString arrx = SavePrimitiveVector(out, "gr2derr_x", fNpoints, fX, kTRUE);
TString arry = SavePrimitiveVector(out, "gr2derr_y", fNpoints, fY);
TString arrz = SavePrimitiveVector(out, "gr2derr_z", fNpoints, fZ);
TString arrex = SavePrimitiveVector(out, "gr2derr_ex", fNpoints, fEX);
TString arrey = SavePrimitiveVector(out, "gr2derr_ey", fNpoints, fEY);
TString arrez = SavePrimitiveVector(out, "gr2derr_ez", fNpoints, fEZ);
TString arrex = SavePrimitiveVector(out, "gr2derr_ex", fNpoints, fEX, 111);
TString arrey = SavePrimitiveVector(out, "gr2derr_ey", fNpoints, fEY, 111);
TString arrez = SavePrimitiveVector(out, "gr2derr_ez", fNpoints, fEZ, 111);

SavePrimitiveConstructor(out, Class(), "gr2derr",
TString::Format("%d, %s.data(), %s.data(), %s.data(), %s.data(), %s.data(), %s.data()",
TString::Format("%d, %s.data(), %s.data(), %s.data(), %s, %s, %s",
fNpoints, arrx.Data(), arry.Data(), arrz.Data(), arrex.Data(), arrey.Data(),
arrez.Data()),
kFALSE);
Expand Down
10 changes: 5 additions & 5 deletions hist/hist/src/TGraphAsymmErrors.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -1243,13 +1243,13 @@ void TGraphAsymmErrors::SavePrimitive(std::ostream &out, Option_t *option /*= ""
{
auto xname = SavePrimitiveVector(out, "grae_fx", fNpoints, fX, kTRUE);
auto yname = SavePrimitiveVector(out, "grae_fy", fNpoints, fY);
auto exlname = SavePrimitiveVector(out, "grae_fexl", fNpoints, fEXlow);
auto exhname = SavePrimitiveVector(out, "grae_fexh", fNpoints, fEXhigh);
auto eylname = SavePrimitiveVector(out, "grae_feyl", fNpoints, fEYlow);
auto eyhname = SavePrimitiveVector(out, "grae_feyh", fNpoints, fEYhigh);
auto exlname = SavePrimitiveVector(out, "grae_fexl", fNpoints, fEXlow, 111);
auto exhname = SavePrimitiveVector(out, "grae_fexh", fNpoints, fEXhigh, 111);
auto eylname = SavePrimitiveVector(out, "grae_feyl", fNpoints, fEYlow, 111);
auto eyhname = SavePrimitiveVector(out, "grae_feyh", fNpoints, fEYhigh, 111);

SavePrimitiveConstructor(out, Class(), "grae",
TString::Format("%d, %s.data(), %s.data(), %s.data(), %s.data(), %s.data(), %s.data()",
TString::Format("%d, %s.data(), %s.data(), %s, %s, %s, %s",
fNpoints, xname.Data(), yname.Data(), exlname.Data(), exhname.Data(),
eylname.Data(), eyhname.Data()),
kFALSE);
Expand Down
19 changes: 9 additions & 10 deletions hist/hist/src/TGraphBentErrors.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -551,18 +551,17 @@ void TGraphBentErrors::SavePrimitive(std::ostream &out, Option_t *option /*= ""*
{
auto xname = SavePrimitiveVector(out, "grbe_fx", fNpoints, fX, kTRUE);
auto yname = SavePrimitiveVector(out, "grbe_fy", fNpoints, fY);
auto exlname = SavePrimitiveVector(out, "grbe_fexl", fNpoints, fEXlow);
auto exhname = SavePrimitiveVector(out, "grbe_fexh", fNpoints, fEXhigh);
auto eylname = SavePrimitiveVector(out, "grbe_feyl", fNpoints, fEYlow);
auto eyhname = SavePrimitiveVector(out, "grbe_feyh", fNpoints, fEYhigh);
auto exldname = SavePrimitiveVector(out, "grbe_fexld", fNpoints, fEXlowd);
auto exhdname = SavePrimitiveVector(out, "grbe_fexhd", fNpoints, fEXhighd);
auto eyldname = SavePrimitiveVector(out, "grbe_feyld", fNpoints, fEYlowd);
auto eyhdname = SavePrimitiveVector(out, "grbe_feyhd", fNpoints, fEYhighd);
auto exlname = SavePrimitiveVector(out, "grbe_fexl", fNpoints, fEXlow, 111);
auto exhname = SavePrimitiveVector(out, "grbe_fexh", fNpoints, fEXhigh, 111);
auto eylname = SavePrimitiveVector(out, "grbe_feyl", fNpoints, fEYlow, 111);
auto eyhname = SavePrimitiveVector(out, "grbe_feyh", fNpoints, fEYhigh, 111);
auto exldname = SavePrimitiveVector(out, "grbe_fexld", fNpoints, fEXlowd, 111);
auto exhdname = SavePrimitiveVector(out, "grbe_fexhd", fNpoints, fEXhighd, 111);
auto eyldname = SavePrimitiveVector(out, "grbe_feyld", fNpoints, fEYlowd, 111);
auto eyhdname = SavePrimitiveVector(out, "grbe_feyhd", fNpoints, fEYhighd, 111);

SavePrimitiveConstructor(out, Class(), "grbe",
TString::Format("%d, %s.data(), %s.data(), %s.data(), %s.data(), %s.data(), %s.data(), "
"%s.data(), %s.data(), %s.data(), %s.data()",
TString::Format("%d, %s.data(), %s.data(), %s, %s, %s, %s, %s, %s, %s, %s",
fNpoints, xname.Data(), yname.Data(), exlname.Data(), exhname.Data(),
eylname.Data(), eyhname.Data(), exldname.Data(), exhdname.Data(),
eyldname.Data(), eyhdname.Data()),
Expand Down
6 changes: 3 additions & 3 deletions hist/hist/src/TGraphErrors.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -722,12 +722,12 @@ void TGraphErrors::SavePrimitive(std::ostream &out, Option_t *option /*= ""*/)
{
auto xname = SavePrimitiveVector(out, "gre_fx", fNpoints, fX, kTRUE);
auto yname = SavePrimitiveVector(out, "gre_fy", fNpoints, fY);
auto exname = SavePrimitiveVector(out, "gre_fex", fNpoints, fEX);
auto eyname = SavePrimitiveVector(out, "gre_fey", fNpoints, fEY);
auto exname = SavePrimitiveVector(out, "gre_fex", fNpoints, fEX, 111);
auto eyname = SavePrimitiveVector(out, "gre_fey", fNpoints, fEY, 111);

SavePrimitiveConstructor(
out, Class(), "gre",
TString::Format("%d, %s.data(), %s.data(), %s.data(), %s.data()", fNpoints, xname.Data(), yname.Data(), exname.Data(), eyname.Data()), kFALSE);
TString::Format("%d, %s.data(), %s.data(), %s, %s", fNpoints, xname.Data(), yname.Data(), exname.Data(), eyname.Data()), kFALSE);

SaveHistogramAndFunctions(out, "gre", option);
}
Expand Down
Loading