Logo ROOT   6.16/01
Reference Guide
DataSetInfo.cxx
Go to the documentation of this file.
1// @(#)root/tmva $Id$
2// Author: Joerg Stelzer, Peter Speckmeier
3
4/**********************************************************************************
5 * Project: TMVA - a Root-integrated toolkit for multivariate data analysis *
6 * Package: TMVA *
7 * Class : DataSetInfo *
8 * Web : http://tmva.sourceforge.net *
9 * *
10 * Description: *
11 * Implementation (see header for description) *
12 * *
13 * Authors (alphabetical): *
14 * Peter Speckmayer <speckmay@mail.cern.ch> - CERN, Switzerland *
15 * Joerg Stelzer <Joerg.Stelzer@cern.ch> - DESY, Germany *
16 * *
17 * Copyright (c) 2008: *
18 * CERN, Switzerland *
19 * MPI-K Heidelberg, Germany *
20 * DESY Hamburg, Germany *
21 * *
22 * Redistribution and use in source and binary forms, with or without *
23 * modification, are permitted according to the terms listed in LICENSE *
24 * (http://tmva.sourceforge.net/LICENSE) *
25 **********************************************************************************/
26
27/*! \class TMVA::DataSetInfo
28\ingroup TMVA
29
30Class that contains all the data information.
31
32*/
33
34#include <vector>
35
36#include "TEventList.h"
37#include "TFile.h"
38#include "TH1.h"
39#include "TH2.h"
40#include "TProfile.h"
41#include "TRandom3.h"
42#include "TMatrixF.h"
43#include "TVectorF.h"
44#include "TMath.h"
45#include "TROOT.h"
46#include "TObjString.h"
47
48#include "TMVA/MsgLogger.h"
49#include "TMVA/Tools.h"
50#include "TMVA/DataSet.h"
51#include "TMVA/DataSetInfo.h"
52#include "TMVA/DataSetManager.h"
53#include "TMVA/Event.h"
54
55#include "TMVA/Types.h"
56#include "TMVA/VariableInfo.h"
57
58////////////////////////////////////////////////////////////////////////////////
59/// constructor
60
62 : TObject(),
63 fDataSetManager(NULL),
64 fName(name),
65 fDataSet( 0 ),
66 fNeedsRebuilding( kTRUE ),
67 fVariables(),
68 fTargets(),
69 fSpectators(),
70 fClasses( 0 ),
71 fNormalization( "NONE" ),
72 fSplitOptions(""),
73 fTrainingSumSignalWeights(-1),
74 fTrainingSumBackgrWeights(-1),
75 fTestingSumSignalWeights (-1),
76 fTestingSumBackgrWeights (-1),
77 fOwnRootDir(0),
78 fVerbose( kFALSE ),
79 fSignalClass(0),
80 fTargetsForMulticlass(0),
81 fLogger( new MsgLogger("DataSetInfo", kINFO) )
82{
83}
84
85////////////////////////////////////////////////////////////////////////////////
86/// destructor
87
89{
90 ClearDataSet();
91
92 for(UInt_t i=0, iEnd = fClasses.size(); i<iEnd; ++i) {
93 delete fClasses[i];
94 }
95
96 delete fTargetsForMulticlass;
97
98 delete fLogger;
99}
100
101////////////////////////////////////////////////////////////////////////////////
102
104{
105 if(fDataSet!=0) { delete fDataSet; fDataSet=0; }
106}
107
108////////////////////////////////////////////////////////////////////////////////
109
110void
112{
113 fLogger->SetMinType(t);
114}
115
116////////////////////////////////////////////////////////////////////////////////
117
119{
120 ClassInfo* theClass = GetClassInfo(className);
121 if (theClass) return theClass;
122
123
124 fClasses.push_back( new ClassInfo(className) );
125 fClasses.back()->SetNumber(fClasses.size()-1);
126
127 //Log() << kHEADER << Endl;
128
129 Log() << kHEADER << Form("[%s] : ",fName.Data()) << "Added class \"" << className << "\""<< Endl;
130
131 Log() << kDEBUG <<"\t with internal class number " << fClasses.back()->GetNumber() << Endl;
132
133
134 if (className == "Signal") fSignalClass = fClasses.size()-1; // store the signal class index ( for comparison reasons )
135
136 return fClasses.back();
137}
138
139////////////////////////////////////////////////////////////////////////////////
140
142{
143 for (std::vector<ClassInfo*>::iterator it = fClasses.begin(); it < fClasses.end(); ++it) {
144 if ((*it)->GetName() == name) return (*it);
145 }
146 return 0;
147}
148
149////////////////////////////////////////////////////////////////////////////////
150
152{
153 try {
154 return fClasses.at(cls);
155 }
156 catch(...) {
157 return 0;
158 }
159}
160
161////////////////////////////////////////////////////////////////////////////////
162
164{
165 for (UInt_t cls = 0; cls < GetNClasses() ; cls++) {
166 Log() << kINFO << Form("Dataset[%s] : ",fName.Data()) << "Class index : " << cls << " name : " << GetClassInfo(cls)->GetName() << Endl;
167 }
168}
169
170////////////////////////////////////////////////////////////////////////////////
171
173{
174 return (ev->GetClass() == fSignalClass);
175}
176
177////////////////////////////////////////////////////////////////////////////////
178
180{
181 if( !fTargetsForMulticlass ) fTargetsForMulticlass = new std::vector<Float_t>( GetNClasses() );
182 // fTargetsForMulticlass->resize( GetNClasses() );
183 fTargetsForMulticlass->assign( GetNClasses(), 0.0 );
184 fTargetsForMulticlass->at( ev->GetClass() ) = 1.0;
185 return fTargetsForMulticlass;
186}
187
188
189////////////////////////////////////////////////////////////////////////////////
190
192{
193 Bool_t hasCuts = kFALSE;
194 for (std::vector<ClassInfo*>::iterator it = fClasses.begin(); it < fClasses.end(); ++it) {
195 if( TString((*it)->GetCut()) != TString("") ) hasCuts = kTRUE;
196 }
197 return hasCuts;
198}
199
200////////////////////////////////////////////////////////////////////////////////
201
203{
204 ClassInfo* ptr = GetClassInfo(className);
205 return ptr?ptr->GetCorrelationMatrix():0;
206}
207
208////////////////////////////////////////////////////////////////////////////////
209/// add a variable (can be a complex expression) to the set of
210/// variables used in the MV analysis
211
213 const TString& title,
214 const TString& unit,
215 Double_t min, Double_t max,
216 char varType,
217 Bool_t normalized,
218 void* external )
219{
220 TString regexpr = expression; // remove possible blanks
221 regexpr.ReplaceAll(" ", "" );
222 fVariables.push_back(VariableInfo( regexpr, title, unit,
223 fVariables.size()+1, varType, external, min, max, normalized ));
224 fNeedsRebuilding = kTRUE;
225 return fVariables.back();
226}
227
228////////////////////////////////////////////////////////////////////////////////
229/// add variable with given VariableInfo
230
232 fVariables.push_back(VariableInfo( varInfo ));
233 fNeedsRebuilding = kTRUE;
234 return fVariables.back();
235}
236
237////////////////////////////////////////////////////////////////////////////////
238/// add a variable (can be a complex expression) to the set of
239/// variables used in the MV analysis
240
242 const TString& title,
243 const TString& unit,
244 Double_t min, Double_t max,
245 Bool_t normalized,
246 void* external )
247{
248 TString regexpr = expression; // remove possible blanks
249 regexpr.ReplaceAll(" ", "" );
250 char type='F';
251 fTargets.push_back(VariableInfo( regexpr, title, unit,
252 fTargets.size()+1, type, external, min,
253 max, normalized ));
254 fNeedsRebuilding = kTRUE;
255 return fTargets.back();
256}
257
258////////////////////////////////////////////////////////////////////////////////
259/// add target with given VariableInfo
260
262 fTargets.push_back(VariableInfo( varInfo ));
263 fNeedsRebuilding = kTRUE;
264 return fTargets.back();
265}
266
267////////////////////////////////////////////////////////////////////////////////
268/// add a spectator (can be a complex expression) to the set of spectator variables used in
269/// the MV analysis
270
272 const TString& title,
273 const TString& unit,
274 Double_t min, Double_t max, char type,
275 Bool_t normalized, void* external )
276{
277 TString regexpr = expression; // remove possible blanks
278 regexpr.ReplaceAll(" ", "" );
279 fSpectators.push_back(VariableInfo( regexpr, title, unit,
280 fSpectators.size()+1, type, external, min, max, normalized ));
281 fNeedsRebuilding = kTRUE;
282 return fSpectators.back();
283}
284
285////////////////////////////////////////////////////////////////////////////////
286/// add spectator with given VariableInfo
287
289 fSpectators.push_back(VariableInfo( varInfo ));
290 fNeedsRebuilding = kTRUE;
291 return fSpectators.back();
292}
293
294////////////////////////////////////////////////////////////////////////////////
295/// find variable by name
296
298{
299 for (UInt_t ivar=0; ivar<GetNVariables(); ivar++)
300 if (var == GetVariableInfo(ivar).GetInternalName()) return ivar;
301
302 for (UInt_t ivar=0; ivar<GetNVariables(); ivar++)
303 Log() << kINFO << Form("Dataset[%s] : ",fName.Data()) << GetVariableInfo(ivar).GetInternalName() << Endl;
304
305 Log() << kFATAL << Form("Dataset[%s] : ",fName.Data()) << "<FindVarIndex> Variable \'" << var << "\' not found." << Endl;
306
307 return -1;
308}
309
310////////////////////////////////////////////////////////////////////////////////
311/// set the weight expressions for the classes
312/// if class name is specified, set only for this class
313/// if class name is unknown, register new class with this name
314
315void TMVA::DataSetInfo::SetWeightExpression( const TString& expr, const TString& className )
316{
317 if (className != "") {
318 TMVA::ClassInfo* ci = AddClass(className);
319 ci->SetWeight( expr );
320 }
321 else {
322 // no class name specified, set weight for all classes
323 if (fClasses.empty()) {
324 Log() << kWARNING << Form("Dataset[%s] : ",fName.Data()) << "No classes registered yet, cannot specify weight expression!" << Endl;
325 }
326 for (std::vector<ClassInfo*>::iterator it = fClasses.begin(); it < fClasses.end(); ++it) {
327 (*it)->SetWeight( expr );
328 }
329 }
330}
331
332////////////////////////////////////////////////////////////////////////////////
333
335{
336 GetClassInfo(className)->SetCorrelationMatrix(matrix);
337}
338
339////////////////////////////////////////////////////////////////////////////////
340/// set the cut for the classes
341
342void TMVA::DataSetInfo::SetCut( const TCut& cut, const TString& className )
343{
344 if (className == "") { // if no className has been given set the cut for all the classes
345 for (std::vector<ClassInfo*>::iterator it = fClasses.begin(); it < fClasses.end(); ++it) {
346 (*it)->SetCut( cut );
347 }
348 }
349 else {
350 TMVA::ClassInfo* ci = AddClass(className);
351 ci->SetCut( cut );
352 }
353}
354
355////////////////////////////////////////////////////////////////////////////////
356/// set the cut for the classes
357
358void TMVA::DataSetInfo::AddCut( const TCut& cut, const TString& className )
359{
360 if (className == "") { // if no className has been given set the cut for all the classes
361 for (std::vector<ClassInfo*>::iterator it = fClasses.begin(); it < fClasses.end(); ++it) {
362 const TCut& oldCut = (*it)->GetCut();
363 (*it)->SetCut( oldCut+cut );
364 }
365 }
366 else {
367 TMVA::ClassInfo* ci = AddClass(className);
368 ci->SetCut( ci->GetCut()+cut );
369 }
370}
371
372////////////////////////////////////////////////////////////////////////////////
373/// returns list of variables
374
375std::vector<TString> TMVA::DataSetInfo::GetListOfVariables() const
376{
377 std::vector<TString> vNames;
378 std::vector<TMVA::VariableInfo>::const_iterator viIt = GetVariableInfos().begin();
379 for(;viIt != GetVariableInfos().end(); ++viIt) vNames.push_back( (*viIt).GetExpression() );
380
381 return vNames;
382}
383
384////////////////////////////////////////////////////////////////////////////////
385/// calculates the correlation matrices for signal and background,
386/// prints them to standard output, and fills 2D histograms
387
389{
390
391 Log() << kHEADER //<< Form("Dataset[%s] : ",fName.Data())
392 << "Correlation matrix (" << className << "):" << Endl;
393 gTools().FormattedOutput( *CorrelationMatrix( className ), GetListOfVariables(), Log() );
394}
395
396////////////////////////////////////////////////////////////////////////////////
397
399 const TString& hName,
400 const TString& hTitle ) const
401{
402 if (m==0) return 0;
403
404 const UInt_t nvar = GetNVariables();
405
406 // workaround till the TMatrix templates are commonly used
407 // this keeps backward compatibility
408 TMatrixF* tm = new TMatrixF( nvar, nvar );
409 for (UInt_t ivar=0; ivar<nvar; ivar++) {
410 for (UInt_t jvar=0; jvar<nvar; jvar++) {
411 (*tm)(ivar, jvar) = (*m)(ivar,jvar);
412 }
413 }
414
415 TH2F* h2 = new TH2F( *tm );
416 h2->SetNameTitle( hName, hTitle );
417
418 for (UInt_t ivar=0; ivar<nvar; ivar++) {
419 h2->GetXaxis()->SetBinLabel( ivar+1, GetVariableInfo(ivar).GetTitle() );
420 h2->GetYaxis()->SetBinLabel( ivar+1, GetVariableInfo(ivar).GetTitle() );
421 }
422
423 // present in percent, and round off digits
424 // also, use absolute value of correlation coefficient (ignore sign)
425 h2->Scale( 100.0 );
426 for (UInt_t ibin=1; ibin<=nvar; ibin++) {
427 for (UInt_t jbin=1; jbin<=nvar; jbin++) {
428 h2->SetBinContent( ibin, jbin, Int_t(h2->GetBinContent( ibin, jbin )) );
429 }
430 }
431
432 // style settings
433 const Float_t labelSize = 0.055;
434 h2->SetStats( 0 );
435 h2->GetXaxis()->SetLabelSize( labelSize );
436 h2->GetYaxis()->SetLabelSize( labelSize );
437 h2->SetMarkerSize( 1.5 );
438 h2->SetMarkerColor( 0 );
439 h2->LabelsOption( "d" ); // diagonal labels on x axis
440 h2->SetLabelOffset( 0.011 );// label offset on x axis
441 h2->SetMinimum( -100.0 );
442 h2->SetMaximum( +100.0 );
443
444 // -------------------------------------------------------------------------------------
445 // just in case one wants to change the position of the color palette axis
446 // -------------------------------------------------------------------------------------
447 // gROOT->SetStyle("Plain");
448 // TStyle* gStyle = gROOT->GetStyle( "Plain" );
449 // gStyle->SetPalette( 1, 0 );
450 // TPaletteAxis* paletteAxis
451 // = (TPaletteAxis*)h2->GetListOfFunctions()->FindObject( "palette" );
452 // -------------------------------------------------------------------------------------
453
454 Log() << kDEBUG << Form("Dataset[%s] : ",fName.Data()) << "Created correlation matrix as 2D histogram: " << h2->GetName() << Endl;
455
456 return h2;
457}
458
459////////////////////////////////////////////////////////////////////////////////
460/// returns data set
461
463{
464 if (fDataSet==0 || fNeedsRebuilding) {
465 if(fDataSet!=0) ClearDataSet();
466 // fDataSet = DataSetManager::Instance().CreateDataSet(GetName()); //DSMTEST replaced by following lines
467 if( !fDataSetManager )
468 Log() << kFATAL << Form("Dataset[%s] : ",fName.Data()) << "DataSetManager has not been set in DataSetInfo (GetDataSet() )." << Endl;
469 fDataSet = fDataSetManager->CreateDataSet(GetName());
470
471 fNeedsRebuilding = kFALSE;
472 }
473 return fDataSet;
474}
475
476////////////////////////////////////////////////////////////////////////////////
477
479{
480 if(all)
481 return fSpectators.size();
482 UInt_t nsp(0);
483 for(std::vector<VariableInfo>::const_iterator spit=fSpectators.begin(); spit!=fSpectators.end(); ++spit) {
484 if(spit->GetVarType()!='C') nsp++;
485 }
486 return nsp;
487}
488
489////////////////////////////////////////////////////////////////////////////////
490
492{
493 Int_t maxL = 0;
494 for (UInt_t cl = 0; cl < GetNClasses(); cl++) {
495 if (TString(GetClassInfo(cl)->GetName()).Length() > maxL) maxL = TString(GetClassInfo(cl)->GetName()).Length();
496 }
497
498 return maxL;
499}
500
501////////////////////////////////////////////////////////////////////////////////
502
504{
505 Int_t maxL = 0;
506 for (UInt_t i = 0; i < GetNVariables(); i++) {
507 if (TString(GetVariableInfo(i).GetExpression()).Length() > maxL) maxL = TString(GetVariableInfo(i).GetExpression()).Length();
508 }
509
510 return maxL;
511}
512
513////////////////////////////////////////////////////////////////////////////////
514
516{
517 Int_t maxL = 0;
518 for (UInt_t i = 0; i < GetNTargets(); i++) {
519 if (TString(GetTargetInfo(i).GetExpression()).Length() > maxL) maxL = TString(GetTargetInfo(i).GetExpression()).Length();
520 }
521
522 return maxL;
523}
524
525////////////////////////////////////////////////////////////////////////////////
526
528 if (fTrainingSumSignalWeights<0) Log() << kFATAL << Form("Dataset[%s] : ",fName.Data()) << " asking for the sum of training signal event weights which is not initialized yet" << Endl;
529 return fTrainingSumSignalWeights;
530}
531
532////////////////////////////////////////////////////////////////////////////////
533
535 if (fTrainingSumBackgrWeights<0) Log() << kFATAL << Form("Dataset[%s] : ",fName.Data()) << " asking for the sum of training backgr event weights which is not initialized yet" << Endl;
536 return fTrainingSumBackgrWeights;
537}
538
539////////////////////////////////////////////////////////////////////////////////
540
542 if (fTestingSumSignalWeights<0) Log() << kFATAL << Form("Dataset[%s] : ",fName.Data()) << " asking for the sum of testing signal event weights which is not initialized yet" << Endl;
543 return fTestingSumSignalWeights ;
544}
545
546////////////////////////////////////////////////////////////////////////////////
547
549 if (fTestingSumBackgrWeights<0) Log() << kFATAL << Form("Dataset[%s] : ",fName.Data()) << " asking for the sum of testing backgr event weights which is not initialized yet" << Endl;
550 return fTestingSumBackgrWeights ;
551}
552
int Int_t
Definition: RtypesCore.h:41
unsigned int UInt_t
Definition: RtypesCore.h:42
const Bool_t kFALSE
Definition: RtypesCore.h:88
bool Bool_t
Definition: RtypesCore.h:59
double Double_t
Definition: RtypesCore.h:55
float Float_t
Definition: RtypesCore.h:53
const Bool_t kTRUE
Definition: RtypesCore.h:87
int type
Definition: TGX11.cxx:120
TMatrixT< Float_t > TMatrixF
Definition: TMatrixFfwd.h:22
char * Form(const char *fmt,...)
virtual void SetLabelSize(Float_t size=0.04)
Set size of axis labels The size is expressed in per cent of the pad width.
Definition: TAttAxis.cxx:204
virtual void SetMarkerColor(Color_t mcolor=1)
Set the marker color.
Definition: TAttMarker.h:38
virtual void SetMarkerSize(Size_t msize=1)
Set the marker size.
Definition: TAttMarker.h:41
virtual void SetBinLabel(Int_t bin, const char *label)
Set label for bin.
Definition: TAxis.cxx:809
A specialized string object used for TTree selections.
Definition: TCut.h:25
virtual void SetLabelOffset(Float_t offset=0.005, Option_t *axis="X")
Set offset between axis and axis' labels.
Definition: Haxis.cxx:267
virtual void LabelsOption(Option_t *option="h", Option_t *axis="X")
Set option(s) to draw axis with labels.
Definition: TH1.cxx:5105
TAxis * GetXaxis()
Get the behaviour adopted by the object about the statoverflows. See EStatOverflows for more informat...
Definition: TH1.h:316
virtual void SetMaximum(Double_t maximum=-1111)
Definition: TH1.h:394
TAxis * GetYaxis()
Definition: TH1.h:317
virtual void SetMinimum(Double_t minimum=-1111)
Definition: TH1.h:395
virtual void SetNameTitle(const char *name, const char *title)
Change the name and title of this histogram.
Definition: TH1.cxx:8296
virtual void Scale(Double_t c1=1, Option_t *option="")
Multiply this histogram by a constant c1.
Definition: TH1.cxx:6126
virtual void SetStats(Bool_t stats=kTRUE)
Set statistics option on/off.
Definition: TH1.cxx:8312
2-D histogram with a float per channel (see TH1 documentation)}
Definition: TH2.h:250
Service class for 2-Dim histogram classes.
Definition: TH2.h:30
virtual Double_t GetBinContent(Int_t bin) const
Return content of bin number bin.
Definition: TH2.h:84
virtual void SetBinContent(Int_t bin, Double_t content)
Set bin content.
Definition: TH2.cxx:2500
Class that contains all the information of a class.
Definition: ClassInfo.h:49
const TMatrixD * GetCorrelationMatrix() const
Definition: ClassInfo.h:66
const TCut & GetCut() const
Definition: ClassInfo.h:64
void SetCut(const TCut &cut)
Definition: ClassInfo.h:58
void SetWeight(const TString &weight)
Definition: ClassInfo.h:57
void SetNumber(const UInt_t index)
Definition: ClassInfo.h:59
Bool_t HasCuts() const
UInt_t GetNSpectators(bool all=kTRUE) const
ClassInfo * AddClass(const TString &className)
const TMatrixD * CorrelationMatrix(const TString &className) const
Int_t GetTargetNameMaxLength() const
virtual ~DataSetInfo()
destructor
Definition: DataSetInfo.cxx:88
Double_t GetTestingSumBackgrWeights()
void SetMsgType(EMsgType t) const
VariableInfo & AddTarget(const TString &expression, const TString &title, const TString &unit, Double_t min, Double_t max, Bool_t normalized=kTRUE, void *external=0)
add a variable (can be a complex expression) to the set of variables used in the MV analysis
DataSet * GetDataSet() const
returns data set
DataSetInfo(const TString &name="Default")
constructor
Definition: DataSetInfo.cxx:61
TH2 * CreateCorrelationMatrixHist(const TMatrixD *m, const TString &hName, const TString &hTitle) const
VariableInfo & AddSpectator(const TString &expression, const TString &title, const TString &unit, Double_t min, Double_t max, char type='F', Bool_t normalized=kTRUE, void *external=0)
add a spectator (can be a complex expression) to the set of spectator variables used in the MV analys...
std::vector< TString > GetListOfVariables() const
returns list of variables
ClassInfo * GetClassInfo(Int_t clNum) const
Double_t GetTrainingSumSignalWeights()
void PrintClasses() const
Int_t GetClassNameMaxLength() const
Double_t GetTrainingSumBackgrWeights()
void PrintCorrelationMatrix(const TString &className)
calculates the correlation matrices for signal and background, prints them to standard output,...
void SetCut(const TCut &cut, const TString &className)
set the cut for the classes
Double_t GetTestingSumSignalWeights()
Int_t FindVarIndex(const TString &) const
find variable by name
VariableInfo & AddVariable(const TString &expression, const TString &title="", const TString &unit="", Double_t min=0, Double_t max=0, char varType='F', Bool_t normalized=kTRUE, void *external=0)
add a variable (can be a complex expression) to the set of variables used in the MV analysis
Int_t GetVariableNameMaxLength() const
Bool_t IsSignal(const Event *ev) const
void SetWeightExpression(const TString &exp, const TString &className="")
set the weight expressions for the classes if class name is specified, set only for this class if cla...
void AddCut(const TCut &cut, const TString &className)
set the cut for the classes
std::vector< Float_t > * GetTargetsForMulticlass(const Event *ev)
void SetCorrelationMatrix(const TString &className, TMatrixD *matrix)
void ClearDataSet() const
Class that contains all the data information.
Definition: DataSet.h:69
UInt_t GetClass() const
Definition: Event.h:81
ostringstream derivative to redirect and format output
Definition: MsgLogger.h:59
void FormattedOutput(const std::vector< Double_t > &, const std::vector< TString > &, const TString titleVars, const TString titleValues, MsgLogger &logger, TString format="%+1.3f")
formatted output of simple table
Definition: Tools.cxx:899
Class for type info of MVA input variable.
Definition: VariableInfo.h:47
virtual const char * GetName() const
Returns name of object.
Definition: TNamed.h:47
Mother of all ROOT objects.
Definition: TObject.h:37
Basic string class.
Definition: TString.h:131
Ssiz_t Length() const
Definition: TString.h:405
TString & ReplaceAll(const TString &s1, const TString &s2)
Definition: TString.h:687
std::string GetName(const std::string &scope_name)
Definition: Cppyy.cxx:146
void AddClass(const char *cname, Version_t id, const std::type_info &info, DictFuncPtr_t dict, Int_t pragmabits)
Global function called by the ctor of a class's init class (see the ClassImp macro).
Tools & gTools()
MsgLogger & Endl(MsgLogger &ml)
Definition: MsgLogger.h:158
Double_t Log(Double_t x)
Definition: TMath.h:748
auto * m
Definition: textangle.C:8