yoda is hosted by Hepforge, IPPP Durham
YODA - Yet more Objects for Data Analysis 2.0.3

Persistency writer for YODA flat text format. More...

#include <WriterYODA1.h>

Inheritance diagram for YODA::WriterYODA1:
YODA::Writer

Static Public Member Functions

static Writercreate ()
 Singleton creation function.
 

Protected Member Functions

void writeAO (std::ostream &stream, const AnalysisObject &c)
 
void writeCounter (std::ostream &stream, const Counter &c)
 
void writeHisto1D (std::ostream &stream, const Histo1D &h)
 
void writeHisto2D (std::ostream &stream, const Histo2D &h)
 
void writeProfile1D (std::ostream &stream, const Profile1D &p)
 
void writeProfile2D (std::ostream &stream, const Profile2D &p)
 
void writeScatter1D (std::ostream &stream, const Scatter1D &s)
 
void writeScatter2D (std::ostream &stream, const Scatter2D &s)
 
void writeScatter3D (std::ostream &stream, const Scatter3D &s)
 
- Protected Member Functions inherited from YODA::Writer
virtual void writeHead (std::ostream &)
 Write any opening boilerplate required by the format to stream.
 
virtual void writeBody (std::ostream &stream, const AnalysisObject *ao)
 Write the body elements corresponding to AnalysisObject ao to stream.
 
virtual void writeBody (std::ostream &stream, const AnalysisObject &ao)
 Write the body elements corresponding to AnalysisObject pointer ao to stream.
 
template<typename T >
std::enable_if_t< DerefableToAO< T >::value > writeBody (std::ostream &stream, const T &ao)
 Write the body elements corresponding to AnalysisObject ao to stream.
 
virtual void writeFoot (std::ostream &stream)
 Write any closing boilerplate required by the format to stream.
 

Additional Inherited Members

- Public Member Functions inherited from YODA::Writer
virtual ~Writer ()
 Virtual destructor.
 
void setPrecision (int precision)
 Set precision of numerical quantities in this writer's output.
 
void setAOPrecision (const bool needsDP=false)
 Set precision of numerical quantities for current AO in this writer's output.
 
void useCompression (const bool compress=true)
 Use libz compression?
 
void write (const std::string &filename, const AnalysisObject &ao)
 Write out object ao to file filename.
 
void write (std::ostream &stream, const AnalysisObject &ao)
 Write out object ao to output stream stream.
 
template<typename T >
std::enable_if_t< DerefableToAO< T >::value > write (std::ostream &stream, const T &ao)
 Write out pointer-like object ao to output stream stream.
 
template<typename T >
std::enable_if_t< DerefableToAO< T >::value > write (const std::string &filename, const T &ao)
 Write out pointer-like object ao to file filename.
 
void write (std::ostream &stream, const std::vector< const AnalysisObject * > &aos)
 
template<typename RANGE >
std::enable_if_t< CIterable< RANGE >::value > write (std::ostream &stream, const RANGE &aos)
 
template<typename RANGE >
std::enable_if_t< CIterable< RANGE >::value > write (const std::string &filename, const RANGE &aos)
 Write out a collection of objects objs to file filename.
 
template<typename AOITER >
void write (std::ostream &stream, const AOITER &begin, const AOITER &end)
 
template<typename AOITER >
void write (const std::string &filename, const AOITER &begin, const AOITER &end)
 

Detailed Description

Persistency writer for YODA flat text format.

Definition at line 20 of file WriterYODA1.h.

Member Function Documentation

◆ create()

Writer & YODA::WriterYODA1::create ( )
static

Singleton creation function.

Definition at line 21 of file WriterYODA1.cc.

21 {
22 static WriterYODA1 _instance;
23 _instance.setPrecision(6);
24 return _instance;
25 }

References YODA::Writer::setPrecision().

◆ writeAO()

void YODA::WriterYODA1::writeAO ( std::ostream &  stream,
const AnalysisObject c 
)
protectedvirtual

Implements YODA::Writer.

Definition at line 42 of file WriterYODA1.cc.

42 {
43 const string aotype = ao.type();
44 if (aotype == "Counter") {
45 writeCounter(stream, dynamic_cast<const Counter&>(ao));
46 } else if (aotype == "Histo1D") {
47 writeHisto1D(stream, dynamic_cast<const Histo1D&>(ao));
48 } else if (aotype == "Histo2D") {
49 writeHisto2D(stream, dynamic_cast<const Histo2D&>(ao));
50 } else if (aotype == "Profile1D") {
51 writeProfile1D(stream, dynamic_cast<const Profile1D&>(ao));
52 } else if (aotype == "Profile2D") {
53 writeProfile2D(stream, dynamic_cast<const Profile2D&>(ao));
54 } else if (aotype == "Scatter1D") {
55 writeScatter1D(stream, dynamic_cast<const Scatter1D&>(ao));
56 } else if (aotype == "Scatter2D") {
57 writeScatter2D(stream, dynamic_cast<const Scatter2D&>(ao));
58 } else if (aotype == "Scatter3D") {
59 writeScatter3D(stream, dynamic_cast<const Scatter3D&>(ao));
60 } else {
61 stream << "# Type " << aotype << " not supported in the legacy writer.\n";
62 // Skip writing other AO types since they were not supported in YODA1.
63 }
64 }
void writeScatter1D(std::ostream &stream, const Scatter1D &s)
void writeCounter(std::ostream &stream, const Counter &c)
void writeScatter3D(std::ostream &stream, const Scatter3D &s)
void writeScatter2D(std::ostream &stream, const Scatter2D &s)
void writeHisto1D(std::ostream &stream, const Histo1D &h)
void writeProfile1D(std::ostream &stream, const Profile1D &p)
void writeProfile2D(std::ostream &stream, const Profile2D &p)
void writeHisto2D(std::ostream &stream, const Histo2D &h)
BinnedHisto< double, double > Histo2D
Definition Histo.h:355
ScatterND< 3 > Scatter3D
Definition Scatter.h:904
BinnedHisto< double > Histo1D
User-friendly familiar names (continuous axes only)
Definition Histo.h:354
BinnedProfile< double > Profile1D
User-friendly familiar names (continuous axes only)
Definition Profile.h:350
BinnedProfile< double, double > Profile2D
Definition Profile.h:351
ScatterND< 1 > Scatter1D
Definition Scatter.h:902
ScatterND< 2 > Scatter2D
Definition Scatter.h:903

References YODA::AnalysisObject::type(), writeCounter(), writeHisto1D(), writeHisto2D(), writeProfile1D(), writeProfile2D(), writeScatter1D(), writeScatter2D(), and writeScatter3D().

◆ writeCounter()

void YODA::WriterYODA1::writeCounter ( std::ostream &  stream,
const Counter c 
)
protected

Definition at line 67 of file WriterYODA1.cc.

67 {
68 ios_base::fmtflags oldflags = os.flags();
69 os << scientific << showpoint << setprecision(_aoprecision);
70
71 os << "BEGIN YODA_" << Utils::toUpper("COUNTER") << "_V2 " << c.path() << "\n";
72 _writeAnnotations(os, c);
73 os << "# sumW\t sumW2\t numEntries\n";
74 os << c.sumW() << "\t" << c.sumW2() << "\t" << c.numEntries() << "\n";
75 os << "END YODA_" << Utils::toUpper("COUNTER") << "_V2\n\n";
76
77 os.flags(oldflags);
78 }

References YODA::Counter::numEntries(), YODA::AnalysisObject::path(), YODA::Counter::sumW(), and YODA::Counter::sumW2().

Referenced by writeAO().

◆ writeHisto1D()

void YODA::WriterYODA1::writeHisto1D ( std::ostream &  stream,
const Histo1D h 
)
protected

Definition at line 81 of file WriterYODA1.cc.

81 {
82 ios_base::fmtflags oldflags = os.flags();
83 os << scientific << showpoint << setprecision(_aoprecision);
84
85 os << "BEGIN YODA_" << Utils::toUpper("HISTO1D") << "_V2 " << h.path() << "\n";
86 _writeAnnotations(os, h);
87 os << "# Mean: " << h.xMean() << "\n";
88 os << "# Area: " << h.integral() << "\n";
89 os << "# ID\t ID\t sumw\t sumw2\t sumwx\t sumwx2\t numEntries\n";
90 os << "Total \tTotal \t";
91 os << h.sumW() << "\t" << h.sumW2() << "\t";
92 os << h.sumWA(0) << "\t" << h.sumWA2(0) << "\t";
93 os << h.numEntries() << "\n";
94 os << "Underflow\tUnderflow\t";
95 os << h.bin(0).sumW() << "\t" << h.bin(0).sumW2() << "\t";
96 os << h.bin(0).sumWX() << "\t" << h.bin(0).sumWX2() << "\t";
97 os << h.bin(0).numEntries() << "\n";
98 os << "Overflow\tOverflow\t";
99 os << h.bin(h.numBins()+1).sumW() << "\t" << h.bin(h.numBins()+1).sumW2() << "\t";
100 os << h.bin(h.numBins()+1).sumWX() << "\t" << h.bin(h.numBins()+1).sumWX2() << "\t";
101 os << h.bin(h.numBins()+1).numEntries() << "\n";
102 os << "# xlow\t xhigh\t sumw\t sumw2\t sumwx\t sumwx2\t numEntries\n";
103 for (const auto& b : h.bins()) {
104 os << b.xMin() << "\t" << b.xMax() << "\t";
105 os << b.sumW() << "\t" << b.sumW2() << "\t";
106 os << b.sumWX() << "\t" << b.sumWX2() << "\t";
107 os << b.numEntries() << "\n";
108 }
109 os << "END YODA_" << Utils::toUpper("HISTO1D") << "_V2\n\n";
110
111 os.flags(oldflags);
112 }

References YODA::BinnedStorage< BinContentT, AxisT >::bin(), YODA::BinnedStorage< BinContentT, AxisT >::bins(), YODA::DbnStorage< DbnN, AxisT >::integral(), YODA::BinnedStorage< BinContentT, AxisT >::numBins(), YODA::DbnStorage< DbnN, AxisT >::numEntries(), YODA::AnalysisObject::path(), YODA::DbnStorage< DbnN, AxisT >::sumW(), YODA::DbnStorage< DbnN, AxisT >::sumW2(), YODA::DbnStorage< DbnN, AxisT >::sumWA(), and YODA::DbnStorage< DbnN, AxisT >::sumWA2().

Referenced by writeAO().

◆ writeHisto2D()

void YODA::WriterYODA1::writeHisto2D ( std::ostream &  stream,
const Histo2D h 
)
protected
Todo:
Disabled for now, reinstate with a full set of outflow info to allow marginalisation

Definition at line 115 of file WriterYODA1.cc.

115 {
116 ios_base::fmtflags oldflags = os.flags();
117 os << scientific << showpoint << setprecision(_aoprecision);
118 os << "BEGIN YODA_" << Utils::toUpper("HISTO2D") << "_V2 " << h.path() << "\n";
119 _writeAnnotations(os, h);
120 //if ( h.totalDbn().numEntries() > 0 )
121 os << "# Mean: (" << h.xMean() << ", " << h.yMean() << ")\n";
122 os << "# Volume: " << h.integral() << "\n";
123 os << "# ID\t ID\t sumw\t sumw2\t sumwx\t sumwx2\t sumwy\t sumwy2\t sumwxy\t numEntries\n";
124 // Total distribution
125 os << "Total \tTotal \t";
126 os << h.sumW() << "\t" << h.sumW2() << "\t";
127 os << h.sumWA(0) << "\t" << h.sumWA2(0) << "\t";
128 os << h.sumWA(1) << "\t" << h.sumWA2(1) << "\t";
129 os << h.crossTerm(0,1) << "\t";
130 os << h.numEntries() << "\n";
131 // Outflows
133 os << "# 2D outflow persistency not currently supported until API is stable\n";
134 // Bins
135 os << "# xlow\t xhigh\t ylow\t yhigh\t sumw\t sumw2\t sumwx\t sumwx2\t sumwy\t sumwy2\t sumwxy\t numEntries\n";
136 for (const auto& b : h.bins()) {
137 os << b.xMin() << "\t" << b.xMax() << "\t";
138 os << b.yMin() << "\t" << b.yMax() << "\t";
139 os << b.sumW() << "\t" << b.sumW2() << "\t";
140 os << b.sumWX() << "\t" << b.sumWX2() << "\t";
141 os << b.sumWY() << "\t" << b.sumWY2() << "\t";
142 os << b.sumWXY() << "\t";
143 os << b.numEntries() << "\n";
144 }
145 os << "END YODA_" << Utils::toUpper("HISTO2D") << "_V2\n\n";
146
147 os.flags(oldflags);
148 }

References YODA::BinnedStorage< BinContentT, AxisT >::bins(), YODA::DbnStorage< DbnN, AxisT >::crossTerm(), YODA::DbnStorage< DbnN, AxisT >::integral(), YODA::DbnStorage< DbnN, AxisT >::numEntries(), YODA::AnalysisObject::path(), YODA::DbnStorage< DbnN, AxisT >::sumW(), YODA::DbnStorage< DbnN, AxisT >::sumW2(), YODA::DbnStorage< DbnN, AxisT >::sumWA(), and YODA::DbnStorage< DbnN, AxisT >::sumWA2().

Referenced by writeAO().

◆ writeProfile1D()

void YODA::WriterYODA1::writeProfile1D ( std::ostream &  stream,
const Profile1D p 
)
protected

Definition at line 151 of file WriterYODA1.cc.

151 {
152 ios_base::fmtflags oldflags = os.flags();
153 os << scientific << showpoint << setprecision(_aoprecision);
154
155 os << "BEGIN YODA_" << Utils::toUpper("PROFILE1D") << "_V2 " << p.path() << "\n";
156 _writeAnnotations(os, p);
157 os << "# ID\t ID\t sumw\t sumw2\t sumwx\t sumwx2\t sumwy\t sumwy2\t numEntries\n";
158 os << "Total \tTotal \t";
159 os << p.sumW() << "\t" << p.sumW2() << "\t";
160 os << p.sumWA(0) << "\t" << p.sumWA2(0) << "\t";
161 os << p.sumWA(1) << "\t" << p.sumWA2(1) << "\t";
162 os << p.numEntries() << "\n";
163 os << "Underflow\tUnderflow\t";
164 os << p.bin(0).sumW() << "\t" << p.bin(0).sumW2() << "\t";
165 os << p.bin(0).sumWX() << "\t" << p.bin(0).sumWX2() << "\t";
166 os << p.bin(0).sumWY() << "\t" << p.bin(0).sumWY2() << "\t";
167 os << p.bin(0).numEntries() << "\n";
168 os << "Overflow\tOverflow\t";
169 os << p.bin(p.numBins()+1).sumW() << "\t" << p.bin(p.numBins()+1).sumW2() << "\t";
170 os << p.bin(p.numBins()+1).sumWX() << "\t" << p.bin(p.numBins()+1).sumWX2() << "\t";
171 os << p.bin(p.numBins()+1).sumWY() << "\t" << p.bin(p.numBins()+1).sumWY2() << "\t";
172 os << p.bin(p.numBins()+1).numEntries() << "\n";
173 os << "# xlow\t xhigh\t sumw\t sumw2\t sumwx\t sumwx2\t sumwy\t sumwy2\t numEntries\n";
174 for (const auto& b : p.bins()) {
175 os << b.xMin() << "\t" << b.xMax() << "\t";
176 os << b.sumW() << "\t" << b.sumW2() << "\t";
177 os << b.sumWX() << "\t" << b.sumWX2() << "\t";
178 os << b.sumWY() << "\t" << b.sumWY2() << "\t";
179 os << b.numEntries() << "\n";
180 }
181 os << "END YODA_" << Utils::toUpper("PROFILE1D") << "_V2\n\n";
182
183 os.flags(oldflags);
184 }

References YODA::BinnedStorage< BinContentT, AxisT >::bin(), YODA::BinnedStorage< BinContentT, AxisT >::bins(), YODA::BinnedStorage< BinContentT, AxisT >::numBins(), YODA::DbnStorage< DbnN, AxisT >::numEntries(), YODA::AnalysisObject::path(), YODA::DbnStorage< DbnN, AxisT >::sumW(), YODA::DbnStorage< DbnN, AxisT >::sumW2(), YODA::DbnStorage< DbnN, AxisT >::sumWA(), and YODA::DbnStorage< DbnN, AxisT >::sumWA2().

Referenced by writeAO().

◆ writeProfile2D()

void YODA::WriterYODA1::writeProfile2D ( std::ostream &  stream,
const Profile2D p 
)
protected
Todo:
Disabled for now, reinstate with a full set of outflow info to allow marginalisation

Definition at line 187 of file WriterYODA1.cc.

187 {
188 ios_base::fmtflags oldflags = os.flags();
189 os << scientific << showpoint << setprecision(_aoprecision);
190
191 os << "BEGIN YODA_" << Utils::toUpper("PROFILE2D") << "_V2 " << p.path() << "\n";
192 _writeAnnotations(os, p);
193 os << "# sumw\t sumw2\t sumwx\t sumwx2\t sumwy\t sumwy2\t sumwz\t sumwz2\t sumwxy\t numEntries\n";
194 // Total distribution
195 os << "Total \tTotal \t";
196 os << p.sumW() << "\t" << p.sumW2() << "\t";
197 os << p.sumWA(0) << "\t" << p.sumWA2(0) << "\t";
198 os << p.sumWA(1) << "\t" << p.sumWA2(1) << "\t";
199 os << p.sumWA(2) << "\t" << p.sumWA2(2) << "\t";
200 os << p.crossTerm(0,1) << "\t"; // << td.sumWXZ() << "\t" << td.sumWYZ() << "\t";
201 os << p.numEntries() << "\n";
202 // Outflows
204 os << "# 2D outflow persistency not currently supported until API is stable\n";
205 // Bins
206 os << "# xlow\t xhigh\t ylow\t yhigh\t sumw\t sumw2\t sumwx\t sumwx2\t sumwy\t sumwy2\t sumwz\t sumwz2\t sumwxy\t numEntries\n";
207 for (const auto& b : p.bins()) {
208 os << b.xMin() << "\t" << b.xMax() << "\t";
209 os << b.yMin() << "\t" << b.yMax() << "\t";
210 os << b.sumW() << "\t" << b.sumW2() << "\t";
211 os << b.sumWX() << "\t" << b.sumWX2() << "\t";
212 os << b.sumWY() << "\t" << b.sumWY2() << "\t";
213 os << b.sumWZ() << "\t" << b.sumWZ2() << "\t";
214 os << b.sumWXY() << "\t"; // << b.sumWXZ() << "\t" << b.sumWYZ() << "\t";
215 os << b.numEntries() << "\n";
216 }
217 os << "END YODA_" << Utils::toUpper("PROFILE2D") << "_V2\n\n";
218
219 os.flags(oldflags);
220 }

References YODA::BinnedStorage< BinContentT, AxisT >::bins(), YODA::DbnStorage< DbnN, AxisT >::crossTerm(), YODA::DbnStorage< DbnN, AxisT >::numEntries(), YODA::AnalysisObject::path(), YODA::DbnStorage< DbnN, AxisT >::sumW(), YODA::DbnStorage< DbnN, AxisT >::sumW2(), YODA::DbnStorage< DbnN, AxisT >::sumWA(), and YODA::DbnStorage< DbnN, AxisT >::sumWA2().

Referenced by writeAO().

◆ writeScatter1D()

void YODA::WriterYODA1::writeScatter1D ( std::ostream &  stream,
const Scatter1D s 
)
protected

Definition at line 223 of file WriterYODA1.cc.

223 {
224 ios_base::fmtflags oldflags = os.flags();
225 os << scientific << showpoint << setprecision(_aoprecision);
226
227 // we promised not to modify const s, but we want to add an annotation
228 // we did not promise to not modify the *clone* of s...
229 auto sclone = s.clone();
230
231 os << "BEGIN YODA_" << Utils::toUpper("SCATTER1D") << "_V2 " << s.path() << "\n";
232 _writeAnnotations(os, sclone);
233
234 //write headers
235 std::string headers="# xval\t xerr-\t xerr+\t";
236 os << headers << "\n";
237
238 //write points
239 for (const Point1D& pt : s.points()) {
240 // fill central value
241 os << pt.x() << "\t" << pt.xErrMinus() << "\t" << pt.xErrPlus() ;
242 os << "\n";
243 }
244 os << "END YODA_" << Utils::toUpper("SCATTER1D") << "_V2\n\n";
245
246 os << flush;
247 os.flags(oldflags);
248 }
PointND< 1 > Point1D
User-familiar alias.
Definition Point.h:715

References YODA::ScatterND< N >::clone(), YODA::AnalysisObject::path(), and YODA::ScatterND< N >::points().

Referenced by writeAO().

◆ writeScatter2D()

void YODA::WriterYODA1::writeScatter2D ( std::ostream &  stream,
const Scatter2D s 
)
protected
Todo:
Change ordering to {vals} {errs} {errs} ...
Todo:
Change ordering to {vals} {errs} {errs} ...

Definition at line 251 of file WriterYODA1.cc.

251 {
252 ios_base::fmtflags oldflags = os.flags();
253 os << scientific << showpoint << setprecision(_aoprecision);
254 os << "BEGIN YODA_" << Utils::toUpper("SCATTER2D") << "_V2 " << s.path() << "\n";
255
256 // Write annotations.
257 // We promised not to modify const s, but we want to add an annotation;
258 // We did not promise to not modify the *clone* of s;
259 // Judge not, lest ye be judged
260 auto sclone = s.clone();
261 _writeAnnotations(os, sclone);
262
263 //write headers
265 std::string headers="# xval\t xerr-\t xerr+\t yval\t yerr-\t yerr+\t";
266 os << headers << "\n";
267
268 //write points
269 for (const Point2D& pt : s.points()) {
271 // fill central value
272 os << pt.x() << "\t" << pt.xErrMinus() << "\t" << pt.xErrPlus() << "\t";
273 os << pt.y() << "\t" << pt.yErrMinus() << "\t" << pt.yErrPlus() ;
274 os << "\n";
275 }
276 os << "END YODA_" << Utils::toUpper("SCATTER2D") << "_V2\n\n";
277
278 os << flush;
279 os.flags(oldflags);
280 }
PointND< 2 > Point2D
Definition Point.h:716

References YODA::ScatterND< N >::clone(), YODA::AnalysisObject::path(), and YODA::ScatterND< N >::points().

Referenced by writeAO().

◆ writeScatter3D()

void YODA::WriterYODA1::writeScatter3D ( std::ostream &  stream,
const Scatter3D s 
)
protected
Todo:
Change ordering to {vals} {errs} {errs} ...
Todo:
Change ordering to {vals} {errs} {errs} ...

Definition at line 283 of file WriterYODA1.cc.

283 {
284 ios_base::fmtflags oldflags = os.flags();
285 os << scientific << showpoint << setprecision(_aoprecision);
286 os << "BEGIN YODA_" << Utils::toUpper("SCATTER3D") << "_V2 " << s.path() << "\n";
287
288 // write annotations
289 // we promised not to modify const s, but we want to add an annotation
290 // we did not promise to not modify the *clone* of s...
291 auto sclone = s.clone();
292 _writeAnnotations(os, sclone);
293
294 //write headers
296 std::string headers="# xval\t xerr-\t xerr+\t yval\t yerr-\t yerr+\t zval\t zerr-\t zerr+\t";
297 os << headers << "\n";
298
299 //write points
300 for (const Point3D& pt : s.points()) {
302 // fill central value
303 os << pt.x() << "\t" << pt.xErrMinus() << "\t" << pt.xErrPlus() << "\t";
304 os << pt.y() << "\t" << pt.yErrMinus() << "\t" << pt.yErrPlus() << "\t";
305 os << pt.z() << "\t" << pt.zErrMinus() << "\t" << pt.zErrPlus() ;
306 os << "\n";
307 }
308 os << "END YODA_" << Utils::toUpper("SCATTER3D") << "_V2\n\n";
309
310 os << flush;
311 os.flags(oldflags);
312 }
PointND< 3 > Point3D
Definition Point.h:717

References YODA::ScatterND< N >::clone(), YODA::AnalysisObject::path(), and YODA::ScatterND< N >::points().

Referenced by writeAO().


The documentation for this class was generated from the following files: