84 Log() << kFATAL <<
"COPY CONSTRUCTOR NOT IMPLEMENTED" <<
Endl;
95 std::vector<Float_t> values = ev->
GetValues();
96 std::vector<Float_t> tvalues = VarTransform(values);
102 SetCellElement(cell, 0, GetCellElement(cell, 0) + wt);
104 SetCellElement(cell, 1, GetCellElement(cell, 1) + wt);
114 for (
Long_t iCell = 0; iCell <= fLastCe; iCell++) {
115 if (!(fCells[iCell]->GetStat()))
118 Double_t n_sig = GetCellElement(fCells[iCell], 0);
119 Double_t n_bg = GetCellElement(fCells[iCell], 1);
122 Log() << kWARNING <<
"Negative number of signal events in cell " << iCell
123 <<
": " << n_sig <<
". Set to 0." <<
Endl;
127 Log() << kWARNING <<
"Negative number of background events in cell " << iCell
128 <<
": " << n_bg <<
". Set to 0." <<
Endl;
133 if (n_sig + n_bg > 0) {
135 SetCellElement(fCells[iCell], 0, n_sig / (n_sig + n_bg));
137 SetCellElement(fCells[iCell], 1,
TMath::Sqrt(Sqr(n_sig / Sqr(n_sig + n_bg))*n_sig +
138 Sqr(n_bg / Sqr(n_sig + n_bg))*n_bg));
141 SetCellElement(fCells[iCell], 0, 0.5);
142 SetCellElement(fCells[iCell], 1, 1.);
174 if ((idim1 >= GetTotDim()) || (idim1 < 0) ||
175 (idim2 >= GetTotDim()) || (idim2 < 0) ||
177 Log() << kFATAL <<
"<Project2>: wrong dimensions given: "
178 << idim1 <<
", " << idim2 <<
Endl;
184 Log() << kWARNING <<
"Warning: number of bins too big: " << nbin
185 <<
" Using 1000 bins for each dimension instead." <<
Endl;
187 }
else if (nbin < 1) {
188 Log() << kWARNING <<
"Wrong bin number: " << nbin
189 <<
"; set nbin=50" <<
Endl;
199 h1 =
new TH2D(hname.
Data(),
Form(
"var%d vs var%d", idim1, idim2), nbin, fXmin[idim1], fXmax[idim1], nbin, fXmin[idim2], fXmax[idim2]);
201 if (!
h1)
Log() << kFATAL <<
"ERROR: Can not create histo" << hname <<
Endl;
212 std::map<Int_t, Float_t> txvec;
218 std::vector<TMVA::PDEFoamCell*> cells = FindCells(txvec);
223 for (std::vector<TMVA::PDEFoamCell*>::const_iterator it = cells.begin();
224 it != cells.end(); ++it) {
226 PDEFoamVect cellPosi(GetTotDim()), cellSize(GetTotDim());
227 (*it)->GetHcub(cellPosi, cellSize);
230 std::vector<Float_t> tvec;
231 for (
Int_t i = 0; i < GetTotDim(); ++i) {
232 if (i != idim1 && i != idim2)
233 tvec.push_back(cellPosi[i] + 0.5 * cellSize[i]);
235 tvec.push_back(txvec[i]);
239 if (kernel != NULL) {
240 cv = kernel->
Estimate(
this, tvec, cell_value);
242 cv = GetCellValue(FindCell(tvec), cell_value);
244 if (cell_value ==
kValue) {
248 for (
Int_t d1 = 0; d1 < GetTotDim(); ++d1) {
249 if ((d1 != idim1) && (d1 != idim2))
250 area_cell *= cellSize[d1];
char * Form(const char *fmt,...)
virtual Double_t GetBinCenter(Int_t bin) const
Return center of bin.
virtual void SetRangeUser(Double_t ufirst, Double_t ulast)
Set the viewing range for the axis from ufirst to ulast (in user coordinates).
virtual Int_t GetNbinsY() const
TAxis * GetXaxis()
Get the behaviour adopted by the object about the statoverflows. See EStatOverflows for more informat...
virtual Int_t GetNbinsX() const
virtual void SetBinContent(Int_t bin, Double_t content)
Set bin content see convention for numbering bins in TH1::GetBin In case the bin number is greater th...
virtual Double_t GetBinContent(Int_t bin) const
Return content of bin number bin.
2-D histogram with a double per channel (see TH1 documentation)}
std::vector< Float_t > & GetValues()
This PDEFoam variant stores in every cell the discriminant.
virtual void FillFoamCells(const Event *ev, Float_t wt)
This function fills an event into the discriminant PDEFoam.
virtual void Finalize()
Calc discriminator and its error for every cell and save it to the cell.
virtual TH2D * Project2(Int_t, Int_t, ECellValue, PDEFoamKernelBase *, UInt_t)
Project foam variable idim1 and variable idim2 to histogram.
PDEFoamDiscriminant()
Default constructor for streamer, user should not use it.
This class is the abstract kernel interface for PDEFoam.
virtual Float_t Estimate(PDEFoam *, std::vector< Float_t > &, ECellValue)=0
Implementation of PDEFoam.
const char * Data() const
MsgLogger & Endl(MsgLogger &ml)
Double_t Sqrt(Double_t x)