96 , fSepType(from.fSepType)
98 Log() << kFATAL <<
"COPY CONSTRUCTOR NOT IMPLEMENTED" <<
Endl;
128 Log() << kFATAL <<
"<DTExplore> Null pointer given!" <<
Endl;
131 std::vector<TH1D*> hsig, hbkg, hsig_unw, hbkg_unw;
134 hsig_unw.reserve(fDim);
135 hbkg_unw.reserve(fDim);
136 for (
Int_t idim = 0; idim < fDim; idim++) {
138 TString::Format(
"signal[%i]", idim), fNBin, fXmin[idim], fXmax[idim]));
140 TString::Format(
"background[%i]", idim), fNBin, fXmin[idim], fXmax[idim]));
142 TString::Format(
"signal_unw[%i]", idim), fNBin, fXmin[idim], fXmax[idim]));
144 TString::Format(
"background_unw[%i]", idim), fNBin, fXmin[idim], fXmax[idim]));
148 PDEFoamVect cellSize(GetTotDim()), cellPosi(GetTotDim());
149 cell->
GetHcub(cellPosi, cellSize);
152 std::vector<Double_t> lb(GetTotDim());
153 std::vector<Double_t> ub(GetTotDim());
154 for (
Int_t idim = 0; idim < GetTotDim(); idim++) {
155 lb[idim] = VarTransformInvers(idim, cellPosi[idim] - std::numeric_limits<float>::epsilon());
156 ub[idim] = VarTransformInvers(idim, cellPosi[idim] + cellSize[idim] + std::numeric_limits<float>::epsilon());
162 Log() << kFATAL <<
"<PDEFoamDecisionTree::Explore>: cast failed: "
163 <<
"PDEFoamDensityBase* --> PDEFoamDecisionTreeDensity*" <<
Endl;
175 Double_t nTotS = hsig.at(0)->Integral(0, hsig.at(0)->GetNbinsX() + 1);
176 Double_t nTotB = hbkg.at(0)->Integral(0, hbkg.at(0)->GetNbinsX() + 1);
177 Double_t nTotS_unw = hsig_unw.at(0)->Integral(0, hsig_unw.at(0)->GetNbinsX() + 1);
178 Double_t nTotB_unw = hbkg_unw.at(0)->Integral(0, hbkg_unw.at(0)->GetNbinsX() + 1);
180 for (
Int_t idim = 0; idim < fDim; ++idim) {
181 Double_t nSelS = hsig.at(idim)->GetBinContent(0);
182 Double_t nSelB = hbkg.at(idim)->GetBinContent(0);
183 Double_t nSelS_unw = hsig_unw.at(idim)->GetBinContent(0);
184 Double_t nSelB_unw = hbkg_unw.at(idim)->GetBinContent(0);
185 for (
Int_t jLo = 1; jLo < fNBin; jLo++) {
186 nSelS += hsig.at(idim)->GetBinContent(jLo);
187 nSelB += hbkg.at(idim)->GetBinContent(jLo);
188 nSelS_unw += hsig_unw.at(idim)->GetBinContent(jLo);
189 nSelB_unw += hbkg_unw.at(idim)->GetBinContent(jLo);
193 if (!((nSelS_unw + nSelB_unw) >= GetNmin() &&
194 (nTotS_unw - nSelS_unw + nTotB_unw - nSelB_unw) >= GetNmin()))
200 Double_t gain = fSepType->GetSeparationGain(nSelS, nSelB, nTotS, nTotB);
202 if (gain >= maxGain) {
210 if (kBest >= fDim || kBest < 0) {
221 if (nTotB + nTotS > 0)
222 cell->
SetIntg(nTotS / (nTotB + nTotS));
231 SetCellElement(cell, 0, nTotS + nTotB);
234 for (
UInt_t ih = 0; ih < hsig.size(); ih++)
delete hsig.at(ih);
235 for (
UInt_t ih = 0; ih < hbkg.size(); ih++)
delete hbkg.at(ih);
236 for (
UInt_t ih = 0; ih < hsig_unw.size(); ih++)
delete hsig_unw.at(ih);
237 for (
UInt_t ih = 0; ih < hbkg_unw.size(); ih++)
delete hbkg_unw.at(ih);
1-D histogram with a double per channel (see TH1 documentation)
void SetXdiv(Double_t Xdiv)
void CalcVolume()
Calculates volume of the cell using size params which are calculated.
void SetDriv(Double_t Driv)
void GetHcub(PDEFoamVect &, PDEFoamVect &) const
Provides size and position of the cell These parameter are calculated by analyzing information in all...
void SetIntg(Double_t Intg)
This is a concrete implementation of PDEFoam.
virtual void FillHistograms(TMVA::Volume &, std::vector< TH1D * > &, std::vector< TH1D * > &, std::vector< TH1D * > &, std::vector< TH1D * > &)
Fill the given histograms with signal and background events, which are found in the volume.
This PDEFoam variant acts like a decision tree and stores in every cell the discriminant.
virtual void Explore(PDEFoamCell *Cell)
Internal subprogram used by Create.
PDEFoamDecisionTree()
Default constructor for streamer, user should not use it.
virtual ~PDEFoamDecisionTree()
Destructor deletes fSepType.
This PDEFoam variant stores in every cell the discriminant.
An interface to calculate the "SeparationGain" for different separation criteria used in various trai...
Volume for BinarySearchTree.
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
MsgLogger & Endl(MsgLogger &ml)