66using std::vector, std::setw, std::istream, std::ostream;
85 if (fgTools != 0) {
delete fgTools.load(); fgTools=0; }
92 fRegexp(
"$&|!%^&()'<>?= "),
128 if ((S->GetNbinsX() != B->
GetNbinsX()) || (S->GetNbinsX() <= 0)) {
129 Log() << kFATAL <<
"<GetSeparation> signal and background"
130 <<
" histograms have different number of bins: "
136 S->GetXaxis()->GetXmax() <= S->GetXaxis()->GetXmin()) {
137 Log() << kINFO << S->GetXaxis()->GetXmin() <<
" " << B->
GetXaxis()->
GetXmin()
139 <<
" " << S->GetXaxis()->GetXmax() <<
" " << S->GetXaxis()->GetXmin() <<
Endl;
140 Log() << kFATAL <<
"<GetSeparation> signal and background"
141 <<
" histograms have different or invalid dimensions:" <<
Endl;
149 if (
nS > 0 &&
nB > 0) {
159 Log() << kWARNING <<
"<GetSeparation> histograms with zero entries: "
160 <<
nS <<
" : " <<
nB <<
" cannot compute separation"
180 Log() << kFATAL <<
"<GetSeparation> Mismatch in PDF limits: "
209 Log() << kFATAL <<
"<Tools::ComputeStat> value vector is zero pointer" <<
Endl;
211 if ( events.size() !=
valVec->size() )
212 Log() << kWARNING <<
"<Tools::ComputeStat> event and value vector have different lengths "
213 << events.size() <<
"!=" <<
valVec->size() <<
Endl;
281 si->Transpose( *
si );
285 d->Mult( (*
si), (*
symMat) ); (*d) *= (*s);
290 for (i=0; i<
n; i++) {
291 for (
j=0;
j<
n;
j++) {
293 (i ==
j && (*
d)(i,i) < 0)) {
295 Log() << kWARNING <<
"<GetSQRootMatrix> error in matrix diagonalization; printed S and B" <<
Endl;
301 for (i=0; i<
n; i++)
for (
j=0;
j<
n;
j++)
if (
j != i) (*d)(i,
j) = 0;
327 if (
covMat == 0)
return 0;
330 if (nvar !=
covMat->GetNcols())
331 Log() << kFATAL <<
"<GetCorrelationMatrix> input matrix not quadratic" <<
Endl;
342 Log() <<
"<GetCorrelationMatrix> zero variances for variables "
388 if (
theHist->GetSumOfWeights() != 0) {
450 if (list->GetSize() < 1) {
451 Log() << kFATAL <<
"<ParseANNOptionString> unrecognized option string: " <<
theOptions <<
Endl;
455 nodes->push_back( atoi( ((
TObjString*)list->At(0))->GetString() ) );
458 if (list->GetSize() > 1) {
459 for (
Int_t i=1; i<list->GetSize(); i++) {
463 if (s.
Length() > 1) nodes->push_back( nvar + atoi(&s[1]) );
464 else nodes->push_back( nvar );
466 else if ((
a = atoi( s )) > 0) nodes->push_back( atoi(s ) );
468 Log() << kFATAL <<
"<ParseANNOptionString> unrecognized option string: " <<
theOptions <<
Endl;
492 Log() << kFATAL <<
"<CheckSplines> Spline failed sanity criterion; "
493 <<
" relative deviation from histogram: " <<
dev
494 <<
" in (bin, value): (" <<
ibin <<
", " <<
x <<
")" <<
Endl;
508 if (
a.size() !=
b.size()) {
521 for (
UInt_t i=0; i<
v.size();i++)
v[i]*=
f;
529 for (
UInt_t i=0; i<
v.size();i++)
v[i]*=
f;
545 if (
v[0][
j-1] >
v[0][
j]) {
547 temp =
v[k][
j-1];
v[k][
j-1] =
v[k][
j];
v[k][
j] = temp;
572 if (
v[0][
j-1] <
v[0][
j]) {
574 temp =
v[k][
j-1];
v[k][
j-1] =
v[k][
j];
v[k][
j] = temp;
592 if (
hi == 0)
return -1;
623 if (
hi == 0.)
return -1;
632 for (
Int_t ix=1; ix<=
h.GetNbinsX(); ix++) {
635 corrRatio /= pow(
h.ProjectionY()->GetRMS(),2);
644 if (
h.Integral(
bin_x,
bin_x,1,
h.GetNbinsY()) == 0.) {
return 0;}
646 TH1* py =
h.ProjectionY();
647 for (
Int_t y = 1;
y <=
h.GetNbinsY();
y++){
660 if (
h.GetNbinsX() !=
h.GetNbinsY()) {
661 Log() << kFATAL <<
"<TransposeHist> cannot transpose non-quadratic histogram" <<
Endl;
665 for (
Int_t ix=1; ix <=
h.GetNbinsX(); ix++){
666 for (
Int_t iy=1; iy <=
h.GetNbinsY(); iy++){
715 std::vector<TString>
v = SplitString( s,
':' );
716 for (std::vector<TString>::iterator it =
v.begin(); it !=
v.end(); ++it) {
717 if ((*it ==
"v" || *it ==
"verbose") && !it->Contains(
"!")) isVerbose =
kTRUE;
730 UsefulSortDescending(
vtemp);
741 UsefulSortAscending(
vtemp);
750 if (
v.empty())
return -1;
753 for (
UInt_t i=0; i<
v.size(); i++){
767 if (
v.empty())
return -1;
770 for (
UInt_t i=0; i<
v.size(); i++){
804 snew.ReplaceAll(
"::",
r );
805 snew.ReplaceAll(
"$",
"_S_" );
806 snew.ReplaceAll(
"&",
"_A_" );
807 snew.ReplaceAll(
"%",
"_MOD_" );
808 snew.ReplaceAll(
"|",
"_O_" );
809 snew.ReplaceAll(
"*",
"_T_" );
810 snew.ReplaceAll(
"/",
"_D_" );
811 snew.ReplaceAll(
"+",
"_P_" );
812 snew.ReplaceAll(
"-",
"_M_" );
813 snew.ReplaceAll(
" ",
"_" );
814 snew.ReplaceAll(
"[",
"_" );
815 snew.ReplaceAll(
"]",
"_" );
816 snew.ReplaceAll(
"=",
"_E_" );
817 snew.ReplaceAll(
">",
"_GT_" );
818 snew.ReplaceAll(
"<",
"_LT_" );
819 snew.ReplaceAll(
"(",
"_" );
820 snew.ReplaceAll(
")",
"_" );
878 std::cout <<
"Unknown color " <<
c << std::endl;
893 if ((
UInt_t)values.size() != nvar) {
894 logger << kFATAL <<
"<FormattedOutput> fatal error with dimensions: "
895 << values.size() <<
" OR " <<
" != " << nvar <<
Endl;
941 if ((
UInt_t)M.GetNcols() != nvar || (
UInt_t)M.GetNrows() != nvar) {
942 logger << kFATAL <<
"<FormattedOutput> fatal error with dimensions: "
943 << M.GetNcols() <<
" OR " << M.GetNrows() <<
" != " << nvar <<
" ==> abort" <<
Endl;
986 const std::vector<TString>&
vert,
const std::vector<TString>&
horiz,
1042 return ( unit ==
"" ? title : ( title +
" [" + unit +
"]" ) );
1060 os << val <<
" :: ";
1062 for (
int i=0; i<4; i++) {
1081 for (
int i=0; i<4; i++) {
1083 *((
char*)
ap+i) =
'\0'+
c[i];
1096 return xmlengine().HasAttr(node,
attrname);
1105 const char *
nodename = xmlengine().GetNodeName(node);
1106 Log() << kFATAL <<
"Trying to read non-existing attribute '" <<
attrname <<
"' from xml node '" <<
nodename <<
"'" <<
Endl;
1108 const char* val = xmlengine().GetAttr(node,
attrname);
1133 if( node == 0 )
return kFALSE;
1142 void* par = xmlengine().GetParent(
child);
1152 void* ch = xmlengine().GetChild(parent);
1154 while (ch!=0 &&
strcmp(xmlengine().GetNodeName(ch),
childname) != 0) ch = xmlengine().GetNext(ch);
1164 void* ch = xmlengine().GetNext(
prevchild);
1166 while (ch!=0 &&
strcmp(xmlengine().GetNodeName(ch),
childname)!=0) ch = xmlengine().GetNext(ch);
1176 return xmlengine().GetNodeContent(node);
1184 return xmlengine().GetNodeName(node);
1192 return xmlengine().AddRawLine( node, raw );
1201 std::vector<TString>
splitV;
1206 if ( !
splitOpt.Contains(separator) ) {
1225 std::stringstream s;
1227 return TString(s.str().c_str());
1235 std::stringstream s;
1237 return TString(s.str().c_str());
1245 void*
matnode = xmlengine().NewChild(node, 0,
name);
1246 xmlengine().NewAttr(
matnode,0,
"Rows", StringFromInt(
mat->GetNrows()) );
1247 xmlengine().NewAttr(
matnode,0,
"Columns", StringFromInt(
mat->GetNcols()) );
1248 std::stringstream s;
1249 for (
Int_t row = 0; row<
mat->GetNrows(); row++) {
1250 for (
Int_t col = 0; col<
mat->GetNcols(); col++) {
1254 xmlengine().AddRawLine(
matnode, s.str().c_str() );
1262 WriteTMatrixDToXML( node,
name, &
mat );
1270 ReadTMatrixDFromXML( node,
name, &
mat );
1271 for (
int i=0;i<
vec->GetNoElements();++i) (*
vec)[i] =
mat[0][i];
1278 if (
strcmp(xmlengine().GetNodeName(node),
name)!=0){
1279 Log() << kWARNING <<
"Possible Error: Name of matrix in weight file"
1280 <<
" does not match name of matrix passed as argument!" <<
Endl;
1283 ReadAttr( node,
"Rows",
nrows );
1284 ReadAttr( node,
"Columns",
ncols );
1286 Log() << kWARNING <<
"Possible Error: Dimension of matrix in weight file"
1287 <<
" does not match dimension of matrix passed as argument!" <<
Endl;
1290 const char*
content = xmlengine().GetNodeContent(node);
1294 s >> (*mat)[row][col];
1304 std::cout << std::endl;
1305 std::cout << Color(
"bold") <<
"TMVA -- Toolkit for Multivariate Data Analysis" << Color(
"reset") << std::endl;
1307 std::cout <<
" " <<
"Copyright (C) 2005-2010 CERN, MPI-K Heidelberg, Us of Bonn and Victoria" << std::endl;
1308 std::cout <<
" " <<
"Home page: http://tmva.sf.net" << std::endl;
1309 std::cout <<
" " <<
"Citation info: http://tmva.sf.net/citeTMVA.html" << std::endl;
1310 std::cout <<
" " <<
"License: http://tmva.sf.net/LICENSE" << std::endl << std::endl;
1327 static const char *
const months[] = {
"Jan",
"Feb",
"Mar",
"Apr",
"May",
1328 "Jun",
"Jul",
"Aug",
"Sep",
"Oct",
1348 case kStandardWelcomeMsg:
1349 logger << Color(
"white") <<
"TMVA -- Toolkit for Multivariate Analysis" << Color(
"reset") <<
Endl;
1350 logger <<
"Copyright (C) 2005-2006 CERN, LAPP & MPI-K Heidelberg and Victoria U." <<
Endl;
1351 logger <<
"Home page https://root.cern/manual/tmva/" <<
Endl;
1354 case kIsometricWelcomeMsg:
1356 logger <<
" /\\ \\ /\\__\\ /\\__\\ /\\ \\ " <<
Endl;
1357 logger <<
" \\:\\ \\ /::| | /:/ / /::\\ \\ " <<
Endl;
1358 logger <<
" \\:\\ \\ /:|:| | /:/ / /:/\\:\\ \\ " <<
Endl;
1359 logger <<
" /::\\ \\ /:/|:|__|__ /:/__/ ___ /::\\~\\:\\ \\ " <<
Endl;
1360 logger <<
" /:/\\:\\__\\ /:/ |::::\\__\\ |:| | /\\__\\ /:/\\:\\ \\:\\__\\ " <<
Endl;
1361 logger <<
" /:/ \\/__/ \\/__/~~/:/ / |:| |/:/ / \\/__\\:\\/:/ / " <<
Endl;
1362 logger <<
"/:/ / /:/ / |:|__/:/ / \\::/ / " <<
Endl;
1363 logger <<
"\\/__/ /:/ / \\::::/__/ /:/ / " <<
Endl;
1368 case kBlockWelcomeMsg:
1370 logger <<
"_|_|_|_|_| _| _| _| _| _|_| " <<
Endl;
1371 logger <<
" _| _|_| _|_| _| _| _| _| " <<
Endl;
1372 logger <<
" _| _| _| _| _| _| _|_|_|_| " <<
Endl;
1377 case kLeanWelcomeMsg:
1379 logger <<
"_/_/_/_/_/ _/ _/ _/ _/ _/_/ " <<
Endl;
1380 logger <<
" _/ _/_/ _/_/ _/ _/ _/ _/ " <<
Endl;
1381 logger <<
" _/ _/ _/ _/ _/ _/ _/_/_/_/ " <<
Endl;
1386 case kLogoWelcomeMsg:
1388 logger <<
"_/_/_/_/_/ _| _| _| _| _|_| " <<
Endl;
1389 logger <<
" _/ _|_| _|_| _| _| _| _| " <<
Endl;
1390 logger <<
" _/ _| _| _| _| _| _|_|_|_| " <<
Endl;
1395 case kSmall1WelcomeMsg:
1398 logger <<
" | | | |\\/| |\\ V / _ \\ " <<
Endl;
1402 case kSmall2WelcomeMsg:
1405 logger <<
" | | | |\\/| |\\ \\ / / _ \\ " <<
Endl;
1406 logger <<
" | | | | | | \\ V / ___ \\ " <<
Endl;
1410 case kOriginalWelcomeMsgColor:
1411 logger << kINFO <<
"" << Color(
"red")
1412 <<
"_______________________________________" << Color(
"reset") <<
Endl;
1413 logger << kINFO <<
"" << Color(
"blue")
1414 << Color(
"red_bgd") << Color(
"bwhite") <<
" // " << Color(
"reset")
1415 << Color(
"white") << Color(
"blue_bgd")
1416 <<
"|\\ /|| \\ // /\\\\\\\\\\\\\\\\\\\\\\\\ \\ \\ \\ " << Color(
"reset") <<
Endl;
1417 logger << kINFO <<
""<< Color(
"blue")
1418 << Color(
"red_bgd") << Color(
"white") <<
"// " << Color(
"reset")
1419 << Color(
"white") << Color(
"blue_bgd")
1420 <<
"| \\/ || \\// /--\\\\\\\\\\\\\\\\\\\\\\\\ \\ \\ \\" << Color(
"reset") <<
Endl;
1423 case kOriginalWelcomeMsgBW:
1425 <<
"_______________________________________" <<
Endl;
1426 logger << kINFO <<
" // "
1427 <<
"|\\ /|| \\ // /\\\\\\\\\\\\\\\\\\\\\\\\ \\ \\ \\ " <<
Endl;
1429 <<
"| \\/ || \\// /--\\\\\\\\\\\\\\\\\\\\\\\\ \\ \\ \\" <<
Endl;
1445 logger <<
"A. Hoecker, P. Speckmayer, J. Stelzer, J. Therhaag, E. von Toerne, H. Voss" <<
Endl;
1446 logger <<
"\"TMVA - Toolkit for Multivariate Data Analysis\" PoS ACAT:040,2007. e-Print: physics/0703039" <<
Endl;
1451 logger <<
" author = \"Hoecker, Andreas and Speckmayer, Peter and Stelzer, Joerg " <<
Endl;
1452 logger <<
" and Therhaag, Jan and von Toerne, Eckhard and Voss, Helge\"," <<
Endl;
1453 logger <<
" title = \"{TMVA: Toolkit for multivariate data analysis}\"," <<
Endl;
1458 logger <<
" eprint = \"physics/0703039\"," <<
Endl;
1459 logger <<
" archivePrefix = \"arXiv\"," <<
Endl;
1460 logger <<
" SLACcitation = \"%%CITATION = PHYSICS/0703039;%%\"" <<
Endl;
1467 logger <<
" A.~Hoecker, P.~Speckmayer, J.~Stelzer, J.~Therhaag, E.~von Toerne, H.~Voss" <<
Endl;
1468 logger <<
" %``TMVA: Toolkit for multivariate data analysis,''" <<
Endl;
1469 logger <<
" PoS A {\\bf CAT} (2007) 040" <<
Endl;
1470 logger <<
" [arXiv:physics/0703039]." <<
Endl;
1471 logger <<
" %%CITATION = POSCI,ACAT,040;%%" <<
Endl;
1479 <<
"For citation information, please visit: http://tmva.sf.net/citeTMVA.html"
1488 return !(
h.GetXaxis()->GetXbins()->fN);
1493std::vector<TMatrixDSym*>*
1497 for (std::vector<const Event*>::const_iterator it = events.begin(),
itEnd = events.end(); it !=
itEnd; ++it)
1512std::vector<TMatrixDSym*>*
1515 if (events.empty()) {
1516 Log() << kWARNING <<
" Asked to calculate a covariance matrix for an empty event vectors.. sorry cannot do that -> return NULL"<<
Endl;
1524 nvars =events.at(0)->GetNVariables ();
1525 ntgts =events.at(0)->GetNTargets ();
1526 nspcts=events.at(0)->GetNSpectators();
1534 std::vector<TVectorD*>*
vec =
new std::vector<TVectorD*>(
matNum);
1535 std::vector<TMatrixD*>*
mat2 =
new std::vector<TMatrixD*>(
matNum);
1536 std::vector<Double_t> count(
matNum);
1558 for (
UInt_t i=0; i<events.size(); i++) {
1562 cls =
ev->GetClass();
1565 std::vector<Float_t>
input;
1566 std::vector<Char_t>
mask;
1580 count.at(
matNum-1)+=weight;
1584 (*v)(
ivar) += xi*weight;
1585 (*m)(
ivar,
ivar) += (xi*xi*weight);
1595 count.at(
cls)+=weight;
1600 (*v)(
ivar) += xi*weight;
1601 (*m)(
ivar,
ivar) += (xi*xi*weight);
1612 std::vector<TMatrixDSym*>*
mat =
new std::vector<TMatrixDSym*>(
matNum);
1640template <
typename Iterator,
typename WeightIterator>
1647 while ( first != last )
1658 ::Error(
"TMVA::Tools::Mean",
"sum of weights <= 0 ?! that's a bit too much of negative event weights :) ");
1664 while ( first != last )
1670 sum += (*w) * (*first);
1676 ::Error(
"TMVA::Tools::Mean",
"sum of weights <= 0 ?! that's a bit too much of negative event weights :) ");
1686template <
typename T>
1701template <
typename Iterator,
typename WeightIterator>
1712 while ( first != last ) {
1722 while ( first != last ) {
1742template <
typename T>
1782 const char *val = xmlengine().GetAttr(node,
attrname);
1783 if (val ==
nullptr) {
1784 const char *
nodename = xmlengine().GetNodeName(node);
1785 Log() << kFATAL <<
"Trying to read non-existing attribute '" <<
attrname <<
"' from xml node '" <<
nodename <<
"'"
1794 const char *val = xmlengine().GetAttr(node,
attrname);
1795 if (val ==
nullptr) {
1796 const char *
nodename = xmlengine().GetNodeName(node);
1797 Log() << kFATAL <<
"Trying to read non-existing attribute '" <<
attrname <<
"' from xml node '" <<
nodename <<
"'"
1806 const char *val = xmlengine().GetAttr(node,
attrname);
1807 if (val ==
nullptr) {
1808 const char *
nodename = xmlengine().GetNodeName(node);
1809 Log() << kFATAL <<
"Trying to read non-existing attribute '" <<
attrname <<
"' from xml node '" <<
nodename <<
"'"
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
void Error(const char *location, const char *msgfmt,...)
Use this function in case an error occurred.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void input
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t mask
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t r
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t result
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t child
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t format
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char mx
TMatrixTSym< Double_t > TMatrixDSym
TMatrixT< Double_t > TMatrixD
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
TVectorT< Double_t > TVectorD
#define TMVA_RELEASE_DATE
const_iterator begin() const
const_iterator end() const
1-D histogram with a float per channel (see TH1 documentation)
TH1 is the base class of all histogram classes in ROOT.
virtual Double_t GetBinCenter(Int_t bin) const
Return bin center for 1D histogram.
virtual Int_t GetNbinsX() const
virtual Double_t GetBinContent(Int_t bin) const
Return content of bin number bin.
virtual Double_t GetSumOfWeights() const
Return the sum of weights excluding under/overflows.
virtual void Sumw2(Bool_t flag=kTRUE)
Create structure to store sum of squares of weights.
2-D histogram with a float per channel (see TH1 documentation)
Service class for 2-D histogram classes.
ostringstream derivative to redirect and format output
PDF wrapper for histograms; uses user-defined spline interpolation.
Collectable string class.
Base class for spline implementation containing the Draw/Paint methods.
void ToLower()
Change string to lower-case.
const char * Data() const
TString & ReplaceAll(const TString &s1, const TString &s2)
void ToUpper()
Change string to upper case.
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
A TTree represents a columnar dataset.
XMLNodePointer_t NewChild(XMLNodePointer_t parent, XMLNsPointer_t ns, const char *name, const char *content=nullptr)
create new child element for parent node
XMLAttrPointer_t NewAttr(XMLNodePointer_t xmlnode, XMLNsPointer_t, const char *name, const char *value)
creates new attribute for xmlnode, namespaces are not supported for attributes
Bool_t AddComment(XMLNodePointer_t parent, const char *comment)
Adds comment line to the node.
MsgLogger & Endl(MsgLogger &ml)
Double_t RMS(Long64_t n, const T *a, const Double_t *w=nullptr)
Returns the Standard Deviation of an array a with length n.
Short_t Max(Short_t a, Short_t b)
Returns the largest of a and b.
Double_t Log(Double_t x)
Returns the natural logarithm of x.
Double_t Sqrt(Double_t x)
Returns the square root of x.
Double_t Mean(Long64_t n, const T *a, const Double_t *w=nullptr)
Returns the weighted mean of an array a with length n.
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.
static uint64_t sum(uint64_t i)