33 #ifndef ROOT_TMVA_MethodCuts
34 #define ROOT_TMVA_MethodCuts
61 class MethodCuts :
public MethodBase,
public IFitterTarget {
65 MethodCuts(
const TString& jobName,
66 const TString& methodTitle,
68 const TString& theOption =
"MC:150:10000:");
70 MethodCuts( DataSetInfo& theData,
71 const TString& theWeightFile);
74 static MethodCuts* DynamicCast( IMethod* method ) {
return dynamic_cast<MethodCuts*
>(method); }
76 virtual ~MethodCuts(
void );
78 virtual Bool_t HasAnalysisType( Types::EAnalysisType type, UInt_t numberClasses, UInt_t numberTargets );
83 using MethodBase::ReadWeightsFromStream;
85 void AddWeightsXMLTo (
void* parent )
const;
87 void ReadWeightsFromStream( std::istream & i );
88 void ReadWeightsFromXML (
void* wghtnode );
91 Double_t GetMvaValue( Double_t* err = 0, Double_t* errUpper = 0 );
94 void WriteMonitoringHistosToFile(
void )
const;
97 void TestClassification();
100 Double_t GetSeparation ( TH1*, TH1* )
const {
return -1; }
101 Double_t GetSeparation ( PDF* = 0, PDF* = 0 )
const {
return -1; }
102 Double_t GetSignificance(
void )
const {
return -1; }
103 Double_t GetmuTransform ( TTree *) {
return -1; }
104 Double_t GetEfficiency (
const TString&, Types::ETreeType, Double_t& );
105 Double_t GetTrainingEfficiency(
const TString& );
108 Double_t GetRarity( Double_t, Types::ESBType )
const {
return 0; }
111 Double_t ComputeEstimator( std::vector<Double_t> & );
113 Double_t EstimatorFunction( std::vector<Double_t> & );
114 Double_t EstimatorFunction( Int_t ievt1, Int_t ievt2 );
116 void SetTestSignalEfficiency( Double_t effS ) { fTestSignalEff = effS; }
119 void PrintCuts( Double_t effS )
const;
120 Double_t GetCuts ( Double_t effS, std::vector<Double_t>& cutMin, std::vector<Double_t>& cutMax )
const;
121 Double_t GetCuts ( Double_t effS, Double_t* cutMin, Double_t* cutMax )
const;
124 const Ranking* CreateRanking() {
return 0; }
126 void DeclareOptions();
127 void ProcessOptions();
130 static const Double_t fgMaxAbsCutVal;
138 void MakeClassSpecific( std::ostream&,
const TString& )
const;
141 void GetHelpMessage()
const;
146 enum EFitMethodType { kUseMonteCarlo = 0,
147 kUseGeneticAlgorithm,
148 kUseSimulatedAnnealing,
151 kUseMonteCarloEvents };
157 enum EEffMethod { kUseEventSelection = 0,
161 enum EFitParameters { kNotEnforced = 0,
168 EFitMethodType fFitMethod;
170 EEffMethod fEffMethod;
171 std::vector<EFitParameters>* fFitParams;
172 Double_t fTestSignalEff;
175 Double_t* fCutRangeMin;
176 Double_t* fCutRangeMax;
177 std::vector<Interval*> fCutRange;
180 BinarySearchTree* fBinaryTreeS;
181 BinarySearchTree* fBinaryTreeB;
186 Double_t* fTmpCutMin;
187 Double_t* fTmpCutMax;
193 std::vector<Int_t>* fRangeSign;
197 std::vector<Double_t>* fMeanS;
198 std::vector<Double_t>* fMeanB;
199 std::vector<Double_t>* fRmsS;
200 std::vector<Double_t>* fRmsB;
205 std::vector<TH1*>* fVarHistS;
206 std::vector<TH1*>* fVarHistB;
207 std::vector<TH1*>* fVarHistS_smooth;
208 std::vector<TH1*>* fVarHistB_smooth;
209 std::vector<PDF*>* fVarPdfS;
210 std::vector<PDF*>* fVarPdfB;
213 Bool_t fNegEffWarning;
218 void MatchParsToCuts(
const std::vector<Double_t>&, Double_t*, Double_t* );
219 void MatchParsToCuts( Double_t*, Double_t*, Double_t* );
221 void MatchCutsToPars( std::vector<Double_t>&, Double_t*, Double_t* );
222 void MatchCutsToPars( std::vector<Double_t>&, Double_t**, Double_t**, Int_t ibin );
226 void CreateVariablePDFs(
void );
229 void GetEffsfromSelection( Double_t* cutMin, Double_t* cutMax,
230 Double_t& effS, Double_t& effB );
232 void GetEffsfromPDFs( Double_t* cutMin, Double_t* cutMax,
233 Double_t& effS, Double_t& effB );
238 ClassDef(MethodCuts,0);