39 ClassImp(TMVA::GeneticRange);
45 TMVA::GeneticRange::GeneticRange( TRandom3*rnd, Interval *interval )
49 fFrom = fInterval->GetMin();
50 fTo = fInterval->GetMax();
51 fNbins= fInterval->GetNbins();
52 fTotalLength = fTo-fFrom;
54 fRandomGenerator = rnd;
60 Double_t TMVA::GeneticRange::RandomDiscrete()
62 Double_t value = fRandomGenerator->Uniform(0, 1);
63 return fInterval->GetElement( Int_t(value*fNbins) );
76 Double_t TMVA::GeneticRange::Random( Bool_t near, Double_t value, Double_t spread, Bool_t mirror )
78 if (fInterval->GetNbins() > 0) {
79 return RandomDiscrete();
81 else if (fFrom == fTo) {
86 ret = fRandomGenerator->Gaus( value, fTotalLength*spread );
87 if (mirror )
return ReMapMirror( ret );
88 else return ReMap( ret );
90 return fRandomGenerator->Uniform(fFrom, fTo);
96 Double_t TMVA::GeneticRange::ReMap( Double_t val )
98 if (fFrom >= fTo )
return val;
99 if (val < fFrom )
return ReMap( (val-fFrom) + fTo );
100 if (val >= fTo )
return ReMap( (val-fTo) + fFrom );
107 Double_t TMVA::GeneticRange::ReMapMirror( Double_t val )
109 if (fFrom >= fTo )
return val;
110 if (val < fFrom )
return ReMap( fFrom - (val-fFrom) );
111 if (val >= fTo )
return ReMap( fTo - (val-fTo) );
118 TMVA::GeneticRange::~GeneticRange()