81 MethodBase( jobName,
Types::kPDEFoam, methodTitle, dsi, theOption, theTargetDir )
92 , fMultiTargetRegression(kFALSE)
98 , fKernelEstimator(
NULL)
99 , fTargetSelectionStr("
Mean")
100 , fTargetSelection(
kMean)
101 , fFillFoamWithOrigWeights(kFALSE)
102 , fUseYesNoCell(kFALSE)
104 , fDTSeparation(
kFoam)
129 , fMultiTargetRegression(
kFALSE)
135 , fKernelEstimator(
NULL)
136 , fTargetSelectionStr(
"Mean")
137 , fTargetSelection(
kMean)
138 , fFillFoamWithOrigWeights(
kFALSE)
141 , fDTSeparation(
kFoam)
206 DeclareOptionRef(
fFrac = 0.001,
"TailCut",
"Fraction of outlier events that are excluded from the foam in each dimension" );
207 DeclareOptionRef(
fVolFrac = 1./15.,
"VolFrac",
"Size of sampling box, used for density calculation during foam build-up (maximum value: 1.0 is equivalent to volume of entire foam)");
250 Log() <<
kWARNING <<
"TailCut not in [0.,1] ==> using 0.001 instead" <<
Endl;
255 Log() <<
kWARNING <<
"invalid number of active cells specified: " 263 Log() <<
kFATAL <<
"Decision tree logic works only for a single foam (SigBgSeparate=F)" <<
Endl;
271 else if (
fDTLogic ==
"MisClassificationError")
273 else if (
fDTLogic ==
"CrossEntropy")
275 else if (
fDTLogic ==
"GiniIndexWithLaplace")
277 else if (
fDTLogic ==
"SdivSqrtSplusB")
281 <<
", setting to None" <<
Endl;
295 Log() <<
kWARNING <<
"Warning: number of targets > 1" 296 <<
" and MultiTargetRegression=F was set, this makes no sense!" 297 <<
" --> I'm setting MultiTargetRegression=T" <<
Endl;
331 for (
UInt_t dim=0; dim<kDim; dim++) {
338 Int_t rangehistbins = 10000;
344 for (
UInt_t dim=0; dim<kDim; dim++) {
366 for (
UInt_t dim=0; dim<kDim; dim++) {
367 range_h[dim] =
new TH1F(
Form(
"range%i", dim),
"range", rangehistbins, xmin[dim], xmax[dim]);
373 for (
UInt_t dim=0; dim<kDim; dim++) {
386 for (
UInt_t dim=0; dim<kDim; dim++) {
387 for (
Int_t i=1; i<(rangehistbins+1); i++) {
388 if (range_h[dim]->Integral(0, i) > nevoutside) {
393 for (
Int_t i=rangehistbins; i>0; i--) {
394 if (range_h[dim]->Integral(i, (rangehistbins+1)) > nevoutside) {
405 for (
UInt_t dim=0; dim<kDim; dim++) {
406 fXmin.push_back(xmin[dim]);
407 fXmax.push_back(xmax[dim]);
415 for (
UInt_t dim=0; dim<kDim; dim++)
427 Log() <<
kVERBOSE <<
"Calculate Xmin and Xmax for every dimension" <<
Endl;
444 if (
DataInfo().GetNormalization() !=
"EQUALNUMEVENTS" ) {
446 <<
" chosen. Note that only NormMode=EqualNumEvents" 447 <<
" ensures that Discriminant values correspond to" 448 <<
" signal probabilities." <<
Endl;
465 fFoam.at(i)->DeleteBinarySearchTree();
478 foamcaption[0] =
"SignalFoam";
479 foamcaption[1] =
"BgFoam";
481 for(
int i=0; i<2; i++) {
485 Log() <<
kVERBOSE <<
"Filling binary search tree of " << foamcaption[i]
486 <<
" with events" <<
Endl;
490 if ((i==0 &&
DataInfo().IsSignal(ev)) || (i==1 && !
DataInfo().IsSignal(ev)))
492 fFoam.back()->FillBinarySearchTree(ev);
495 Log() <<
kINFO <<
"Build up " << foamcaption[i] <<
Endl;
496 fFoam.back()->Create();
503 if ((i==0 &&
DataInfo().IsSignal(ev)) || (i==1 && !
DataInfo().IsSignal(ev)))
505 fFoam.back()->FillFoamCells(ev, weight);
518 Log() <<
kVERBOSE <<
"Filling binary search tree of discriminator foam with events" <<
Endl;
523 fFoam.back()->FillBinarySearchTree(ev);
526 Log() <<
kINFO <<
"Build up discriminator foam" <<
Endl;
527 fFoam.back()->Create();
535 fFoam.back()->FillFoamCells(ev, weight);
540 fFoam.back()->Finalize();
556 Log() <<
kVERBOSE <<
"Filling binary search tree of multiclass foam " 557 << iClass <<
" with events" <<
Endl;
562 fFoam.back()->FillBinarySearchTree(ev);
565 Log() <<
kINFO <<
"Build up multiclass foam " << iClass <<
Endl;
566 fFoam.back()->Create();
575 fFoam.back()->FillFoamCells(ev, weight);
580 fFoam.back()->Finalize();
592 Log() <<
kFATAL <<
"Can't do mono-target regression with " 605 fFoam.back()->FillBinarySearchTree(ev);
608 Log() <<
kINFO <<
"Build mono target regression foam" <<
Endl;
609 fFoam.back()->Create();
617 fFoam.back()->FillFoamCells(ev, weight);
622 fFoam.back()->Finalize();
636 Log() <<
kFATAL <<
"LinNeighbors kernel currently not supported" 637 <<
" for multi target regression" <<
Endl;
641 Log() <<
kVERBOSE <<
"Filling binary search tree of multi target regression foam with events" 648 std::vector<Float_t> targets(ev->
GetTargets());
650 for (
UInt_t i = 0; i < targets.size(); ++i)
651 ev->
SetVal(i+nVariables, targets.at(i));
654 fFoam.back()->FillBinarySearchTree(ev);
660 Log() <<
kINFO <<
"Build multi target regression foam" <<
Endl;
661 fFoam.back()->Create();
669 std::vector<Float_t> targets = ev->
GetTargets();
672 for (
UInt_t i = 0; i < targets.size(); ++i)
673 ev->
SetVal(i+nVariables, targets.at(i));
676 fFoam.back()->FillFoamCells(ev, weight);
709 std::vector<Float_t> xvec = ev->
GetValues();
717 if ( (density_sig+density_bg) > 0 )
718 discr = density_sig/(density_sig+density_bg);
728 if (err || errUpper) {
730 if (err != 0) *err = discr_error;
731 if (errUpper != 0) *errUpper = discr_error;
735 return (discr < 0.5 ? -1 : 1);
755 const std::vector<Float_t>& xvec = ev->
GetValues();
764 if ((neventsS > 1e-10) || (neventsB > 1e-10)) {
766 mvaError =
TMath::Sqrt(
Sqr(scaleB * neventsB /
Sqr(neventsS + scaleB * neventsB) * errorS) +
767 Sqr(scaleB * neventsS /
Sqr(neventsS + scaleB * neventsB) * errorB));
786 std::vector<Float_t> xvec = ev->
GetValues();
793 std::vector<Float_t> temp;
795 temp.reserve(nClasses);
796 for (
UInt_t iClass = 0; iClass < nClasses; ++iClass) {
800 for (
UInt_t iClass = 0; iClass < nClasses; ++iClass) {
802 for (
UInt_t j = 0; j < nClasses; ++j) {
804 norm +=
exp(temp[j] - temp[iClass]);
821 std::vector<Float_t> importance(
GetNvar(), 0);
824 for (
UInt_t ifoam = 0; ifoam <
fFoam.size(); ++ifoam) {
827 std::vector<UInt_t> nCuts(
fFoam.at(ifoam)->GetTotDim(), 0);
833 std::vector<Float_t> tmp_importance;
835 sumOfCuts += nCuts.at(ivar);
836 tmp_importance.push_back( nCuts.at(ivar) );
842 tmp_importance.at(ivar) /= sumOfCuts;
844 tmp_importance.at(ivar) = 0;
848 importance.at(ivar) += tmp_importance.at(ivar) /
fFoam.size();
897 for (
UInt_t idim=0; idim<num_vars; idim++) {
938 std::vector<Double_t>
box;
939 for (
Int_t idim = 0; idim < dim; ++idim) {
994 <<
" currently not supported" <<
Endl;
1004 Log() <<
kFATAL <<
"Decision tree cell split algorithm is only" 1005 <<
" available for (multi) classification with a single" 1006 <<
" PDE-Foam (SigBgSeparate=F)" <<
Endl;
1012 else Log() <<
kFATAL <<
"PDEFoam pointer not set, exiting.." <<
Endl;
1050 std::vector<Float_t> vals = ev->
GetValues();
1053 Log() <<
kWARNING <<
"<GetRegressionValues> value vector is empty. " <<
Endl;
1058 std::map<Int_t, Float_t> xvec;
1059 for (
UInt_t i=0; i<vals.size(); ++i)
1060 xvec.insert(std::pair<Int_t, Float_t>(i, vals.at(i)));
1062 std::vector<Float_t> targets =
fFoam.at(0)->GetCellValue( xvec,
kValue );
1066 Log() <<
kFATAL <<
"Something wrong with multi-target regression foam: " 1067 <<
"number of targets does not match the DataSet()" <<
Endl;
1068 for(
UInt_t i=0; i<targets.size(); i++)
1200 TFile *rootFile = 0;
1201 if (
fCompress) rootFile =
new TFile(rfname,
"RECREATE",
"foamfile", 9);
1202 else rootFile =
new TFile(rfname,
"RECREATE");
1206 Log() <<
"writing foam " <<
fFoam.at(i)->GetFoamName().Data()
1207 <<
" to file" <<
Endl;
1208 fFoam.at(i)->Write(
fFoam.at(i)->GetFoamName().Data());
1212 Log() <<
kINFO <<
"Foams written to file: " 1235 Bool_t CutNmin, CutRMSmin;
1259 fXmin.assign(kDim, 0);
1260 fXmax.assign(kDim, 0);
1263 for (
UInt_t i=0; i<kDim; i++)
1264 istr >>
fXmin.at(i);
1265 for (
UInt_t i=0; i<kDim; i++)
1266 istr >>
fXmax.at(i);
1301 if (
gTools().HasAttr(wghtnode,
"FillFoamWithOrigWeights"))
1303 if (
gTools().HasAttr(wghtnode,
"UseYesNoCell"))
1312 fXmin.assign(kDim, 0);
1313 fXmax.assign(kDim, 0);
1317 for (
UInt_t counter=0; counter<kDim; counter++) {
1321 Log() <<
kFATAL <<
"dimension index out of range:" << i <<
Endl;
1326 void *xmax_wrap = xmin_wrap;
1327 for (
UInt_t counter=0; counter<kDim; counter++) {
1331 Log() <<
kFATAL <<
"dimension index out of range:" << i <<
Endl;
1369 Log() <<
kWARNING <<
"<ReadClonedFoamFromFile>: NULL pointer given" <<
Endl;
1381 Log() <<
kWARNING <<
"<ReadClonedFoamFromFile>: " << foamname
1382 <<
" could not be cloned!" <<
Endl;
1404 TFile *rootFile =
new TFile( rfname,
"READ" );
1421 fFoam.push_back(foam);
1448 case 0:
return kNone;
1449 case 1:
return kGaus;
1450 case 2:
return kLinN;
1452 Log() <<
kWARNING <<
"<UIntToKernel>: unknown kernel number: " << iker <<
Endl;
1464 case 0:
return kMean;
1465 case 1:
return kMpv;
1467 Log() <<
kWARNING <<
"<UIntToTargetSelection>: unknown method TargetSelection: " << its <<
Endl;
1478 for (
UInt_t ifoam=0; ifoam<
fFoam.size(); ifoam++) {
1479 for (
Int_t idim=0; idim<
fFoam.at(ifoam)->GetTotDim(); idim++) {
1483 fFoam.at(ifoam)->AddVariableName(
DataInfo().GetVariableInfo(idim).GetExpression().
Data());
1504 Log() <<
"PDE-Foam is a variation of the PDE-RS method using a self-adapting" <<
Endl;
1505 Log() <<
"binning method to divide the multi-dimensional variable space into a" <<
Endl;
1506 Log() <<
"finite number of hyper-rectangles (cells). The binning algorithm " <<
Endl;
1507 Log() <<
"adjusts the size and position of a predefined number of cells such" <<
Endl;
1508 Log() <<
"that the variance of the signal and background densities inside the " <<
Endl;
1509 Log() <<
"cells reaches a minimum" <<
Endl;
1513 Log() <<
"The PDEFoam classifier supports two different algorithms: " <<
Endl;
1515 Log() <<
" (1) Create one foam, which stores the signal over background" <<
Endl;
1516 Log() <<
" probability density. During foam buildup the variance of the" <<
Endl;
1517 Log() <<
" discriminant inside the cells is minimised." <<
Endl;
1519 Log() <<
" Booking option: SigBgSeparated=F" <<
Endl;
1521 Log() <<
" (2) Create two separate foams, one for the signal events and one for" <<
Endl;
1522 Log() <<
" background events. During foam buildup the variance of the" <<
Endl;
1523 Log() <<
" event density inside the cells is minimised separately for" <<
Endl;
1524 Log() <<
" signal and background." <<
Endl;
1526 Log() <<
" Booking option: SigBgSeparated=T" <<
Endl;
1528 Log() <<
"The following options can be set (the listed values are found to be a" <<
Endl;
1529 Log() <<
"good starting point for most applications):" <<
Endl;
1531 Log() <<
" SigBgSeparate False Separate Signal and Background" <<
Endl;
1532 Log() <<
" TailCut 0.001 Fraction of outlier events that excluded" <<
Endl;
1533 Log() <<
" from the foam in each dimension " <<
Endl;
1534 Log() <<
" VolFrac 0.0666 Volume fraction (used for density calculation" <<
Endl;
1535 Log() <<
" during foam build-up) " <<
Endl;
1536 Log() <<
" nActiveCells 500 Maximal number of active cells in final foam " <<
Endl;
1537 Log() <<
" nSampl 2000 Number of MC events per cell in foam build-up " <<
Endl;
1538 Log() <<
" nBin 5 Number of bins used in foam build-up " <<
Endl;
1539 Log() <<
" Nmin 100 Number of events in cell required to split cell" <<
Endl;
1540 Log() <<
" Kernel None Kernel type used (possible valuses are: None," <<
Endl;
1542 Log() <<
" Compress True Compress foam output file " <<
Endl;
1544 Log() <<
" Additional regression options:" <<
Endl;
1546 Log() <<
"MultiTargetRegression False Do regression with multiple targets " <<
Endl;
1547 Log() <<
" TargetSelection Mean Target selection method (possible valuses are: " <<
Endl;
1548 Log() <<
" Mean, Mpv)" <<
Endl;
1552 Log() <<
"The performance of the two implementations was found to be similar for" <<
Endl;
1553 Log() <<
"most examples studied. For the same number of cells per foam, the two-" <<
Endl;
1554 Log() <<
"foam option approximately doubles the amount of computer memory needed" <<
Endl;
1555 Log() <<
"during classification. For special cases where the event-density" <<
Endl;
1556 Log() <<
"distribution of signal and background events is very different, the" <<
Endl;
1557 Log() <<
"two-foam option was found to perform significantly better than the" <<
Endl;
1558 Log() <<
"option with only one foam." <<
Endl;
1560 Log() <<
"In order to gain better classification performance we recommend to set" <<
Endl;
1561 Log() <<
"the parameter \"nActiveCells\" to a high value." <<
Endl;
1563 Log() <<
"The parameter \"VolFrac\" specifies the size of the sampling volume" <<
Endl;
1564 Log() <<
"during foam buildup and should be tuned in order to achieve optimal" <<
Endl;
1565 Log() <<
"performance. A larger box leads to a reduced statistical uncertainty" <<
Endl;
1566 Log() <<
"for small training samples and to smoother sampling. A smaller box on" <<
Endl;
1567 Log() <<
"the other hand increases the sensitivity to statistical fluctuations" <<
Endl;
1568 Log() <<
"in the training samples, but for sufficiently large training samples" <<
Endl;
1569 Log() <<
"it will result in a more precise local estimate of the sampled" <<
Endl;
1570 Log() <<
"density. In general, higher dimensional problems require larger box" <<
Endl;
1571 Log() <<
"sizes, due to the reduced average number of events per box volume. The" <<
Endl;
1572 Log() <<
"default value of 0.0666 was optimised for an example with 5" <<
Endl;
1573 Log() <<
"observables and training samples of the order of 50000 signal and" <<
Endl;
1574 Log() <<
"background events each." <<
Endl;
1576 Log() <<
"Furthermore kernel weighting can be activated, which will lead to an" <<
Endl;
1577 Log() <<
"additional performance improvement. Note that Gauss weighting will" <<
Endl;
1578 Log() <<
"significantly increase the response time of the method. LinNeighbors" <<
Endl;
1579 Log() <<
"weighting performs a linear interpolation with direct neighbor cells" <<
Endl;
1580 Log() <<
"for each dimension and is much faster than Gauss weighting." <<
Endl;
1582 Log() <<
"The classification results were found to be rather insensitive to the" <<
Endl;
1583 Log() <<
"values of the parameters \"nSamples\" and \"nBin\"." <<
Endl;
void Train(void)
Train PDE-Foam depending on the set options.
PDEFoamCell * GetDau1() const
std::vector< Float_t > fXmax
virtual Int_t Fill(Double_t x)
Increment bin with abscissa X by 1.
UInt_t GetNVariables() const
TString fTargetSelectionStr
virtual void Reset()
reset MethodPDEFoam:
MsgLogger & Endl(MsgLogger &ml)
Bool_t fFillFoamWithOrigWeights
UInt_t KernelToUInt(EKernel ker) const
void GetNCuts(PDEFoamCell *cell, std::vector< UInt_t > &nCuts)
Fill in 'nCuts' the number of cuts made in every foam dimension, starting at the root cell 'cell'...
PDEFoam * InitFoam(TString, EFoamType, UInt_t cls=0)
Create a new PDEFoam, set the PDEFoam options (nCells, nBin, Xmin, Xmax, etc.) and initialize the PDE...
TString & ReplaceAll(const TString &s1, const TString &s2)
void PrintCoefficients(void)
OptionBase * DeclareOptionRef(T &ref, const TString &name, const TString &desc="")
Bool_t fMultiTargetRegression
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format...
UInt_t GetNVariables() const
access the number of variables through the datasetinfo
virtual TObject * Get(const char *namecycle)
Return pointer to object identified by namecycle.
1-D histogram with a float per channel (see TH1 documentation)}
void SetXmin(Int_t idim, Double_t wmin)
set lower foam bound in dimension idim
TransformationHandler & GetTransformationHandler(Bool_t takeReroutedIfAvailable=true)
void TrainUnifiedClassification(void)
Create only one unified foam (fFoam[0]) whose cells contain the average discriminator (N_sig)/(N_sig ...
void FillVariableNamesToFoam() const
store the variable names in all foams
UInt_t GetNClasses() const
UInt_t GetNTargets() const
virtual Double_t GetBinLowEdge(Int_t bin) const
return bin lower edge for 1D historam Better to use h1.GetXaxis().GetBinLowEdge(bin) ...
void box(Int_t pat, Double_t x1, Double_t y1, Double_t x2, Double_t y2)
void GetHelpMessage() const
provide help message
const TString & GetInputLabel(Int_t i) const
Long64_t GetNEvtBkgdTrain()
return number of background training events in dataset
const TString & GetNormalization() const
void ReadWeightsFromStream(std::istream &i)
read options and internal parameters
virtual ~MethodPDEFoam(void)
destructor
const Event * GetEvent() const
DataSetInfo & DataInfo() const
Bool_t DoRegression() const
void SetMinType(EMsgType minType)
void SetVal(UInt_t ivar, Float_t val)
set variable ivar to val
void DeclareOptions()
Declare MethodPDEFoam options.
Double_t GetWeight() const
return the event weight - depending on whether the flag IgnoreNegWeightsInTraining is or not...
std::vector< Float_t > fXmin
Long64_t GetNTrainingEvents() const
void SetXminXmax(TMVA::PDEFoam *)
Set Xmin, Xmax for every dimension in the given pdefoam object.
PDEFoam * ReadClonedFoamFromFile(TFile *, const TString &)
Reads a foam with name 'foamname' from file, and returns a clone of the foam.
void SetMaxDepth(UInt_t maxdepth)
std::vector< Float_t > & GetTargets()
UInt_t GetNEvents() const
temporary event when testing on a different DataSet than the own one
void SetnSampl(Long_t nSampl)
Bool_t DoMulticlass() const
void AddWeightsXMLTo(void *parent) const
create XML output of PDEFoam method variables
void SetXmax(Int_t idim, Double_t wmax)
set upper foam bound in dimension idim
Float_t GetTarget(UInt_t itgt) const
Double_t CalculateMVAError()
Calculate the error on the Mva value.
void Init(void)
default initialization called by all constructors
const char * GetName() const
Returns name of object.
void CalcXminXmax()
Determine foam range [fXmin, fXmax] for all dimensions, such that a fraction of 'fFrac' events lie ou...
virtual Bool_t HasAnalysisType(Types::EAnalysisType type, UInt_t numberClasses, UInt_t numberTargets)
PDEFoam can handle classification with multiple classes and regression with one or more regression-ta...
Double_t Mean(Long64_t n, const T *a, const Double_t *w=0)
PDEFoamKernelBase * fKernelEstimator
EKernel UIntToKernel(UInt_t iker)
convert UInt_t to EKernel (used for reading weight files)
char * Form(const char *fmt,...)
ETargetSelection UIntToTargetSelection(UInt_t its)
convert UInt_t to ETargetSelection (used for reading weight files)
Double_t GetMvaValue(Double_t *err=0, Double_t *errUpper=0)
Return Mva-Value.
void SetTarget(UInt_t itgt, Float_t value)
set the target value (dimension itgt) to value
void TrainMultiTargetRegression(void)
Training one (multi target regression) foam, whose cells contain the average event density...
UInt_t TargetSelectionToUInt(ETargetSelection ts) const
void SetDensity(PDEFoamDensityBase *dens)
MethodPDEFoam(const TString &jobName, const TString &methodTitle, DataSetInfo &dsi, const TString &theOption="PDEFoam", TDirectory *theTargetDir=0)
init PDEFoam objects
void SetDim(Int_t kDim)
Sets dimension of cubical space.
void MakeClassSpecific(std::ostream &, const TString &) const
write PDEFoam-specific classifier response NOT IMPLEMENTED YET!
TString GetWeightFileName() const
retrieve weight file name
void TrainSeparatedClassification(void)
Creation of 2 separated foams: one for signal events, one for backgound events.
void WriteFoamsToFile() const
Write PDEFoams to file.
UInt_t GetNVariables() const
Float_t GetValue(UInt_t ivar) const
return value of i'th variable
Bool_t IgnoreEventsWithNegWeightsInTraining() const
void ReadWeightsFromXML(void *wghtnode)
read PDEFoam variables from xml weight file
void TrainMultiClassification()
Create one unified foam (see TrainUnifiedClassification()) for each class, where the cells of foam i ...
Describe directory structure in memory.
void SetnCells(Long_t nCells)
std::vector< Float_t > * fMulticlassReturnVal
Long64_t GetNEvtSigTrain()
return number of signal training events in dataset
std::vector< PDEFoam * > fFoam
PDEFoamCell * GetDau0() const
void AddPreDefVal(const T &)
PDEFoamKernelBase * CreatePDEFoamKernel()
create a pdefoam kernel estimator, depending on the current value of fKernel
void TrainMonoTargetRegression(void)
Training one (mono target regression) foam, whose cells contain the average 0th target.
virtual TObject * Clone(const char *newname="") const
Make a clone of an object using the Streamer facility.
const std::vector< Float_t > & GetMulticlassValues()
Get the multiclass MVA response for the PDEFoam classifier.
#define REGISTER_METHOD(CLASS)
for example
const Ranking * CreateRanking()
Compute ranking of input variables from the number of cuts made in each PDEFoam dimension.
Abstract ClassifierFactory template that handles arbitrary types.
void DeleteFoams()
Deletes all trained foams.
std::vector< Float_t > & GetValues()
virtual void AddRank(const Rank &rank)
Add a new rank take ownership of it.
virtual void DeclareCompatibilityOptions()
options that are used ONLY for the READER to ensure backward compatibility they are hence without any...
ETargetSelection fTargetSelection
Double_t GetOriginalWeight() const
void SetEvPerBin(Int_t EvPerBin)
EDTSeparation fDTSeparation
std::vector< Float_t > * fRegressionReturnVal
virtual const std::vector< Float_t > & GetRegressionValues()
Return regression values for both multi- and mono-target regression.
Double_t Sqrt(Double_t x)
void ProcessOptions()
process user options
UInt_t GetNTargets() const
access the number of targets through the datasetinfo
double norm(double *x, double *p)
void DeclareCompatibilityOptions()
options that are used ONLY for the READER to ensure backward compatibility
virtual void SetAnalysisType(Types::EAnalysisType type)
void ReadFoamsFromFile()
read foams from file
void SetSignalReferenceCut(Double_t cut)
virtual void Close(Option_t *option="")
Close a file.
const char * Data() const