33 #ifndef SOURCE_PROCESSES_ELECTROMAGNETIC_DNA_UTILS_INCLUDE_G4DNAREVERTPROBABILITY_HH_ 34 #define SOURCE_PROCESSES_ELECTROMAGNETIC_DNA_UTILS_INCLUDE_G4DNAREVERTPROBABILITY_HH_ 54 fToleranceProba(toleranceY)
60 fIncreasingCumulativeFunction = 0.;
64 fXmax(xmax), fXmin(xmin), fToleranceProba(toleranceY)
75 fIncreasingCumulativeFunction = 0;
101 fToleranceProba = toleranceY;
105 double proposedProba,
107 double& returnedValue)
109 bool returnFlag =
false;
111 if(proposedProba < nextProba - fToleranceProba)
113 if(fIncreasingCumulativeFunction > 0)
115 if(proposedXValue > fXmin) fXmin = proposedXValue;
117 else if(fIncreasingCumulativeFunction < 0)
119 if(proposedXValue < fXmax) fXmax = proposedXValue;
122 returnedValue = (fXmax +
fXmin) / 2.;
125 else if(proposedProba > nextProba + fToleranceProba)
127 if(fIncreasingCumulativeFunction > 0)
129 if(proposedXValue < fXmax)
131 fXmax = proposedXValue;
134 else if(fIncreasingCumulativeFunction < 0)
136 if(proposedXValue > fXmin)
138 fXmin = proposedXValue;
142 returnedValue = (fXmax +
fXmin) / 2.;
148 if(fIncreasingCumulativeFunction < 0)
151 fXmax = proposedXValue;
153 else if(fIncreasingCumulativeFunction > 0)
155 fXmin = proposedXValue;
168 double Revert(
double probaForSearchedTime,
172 bool notFound =
true;
176 fIncreasingCumulativeFunction = (funct(fXmax) - funct(fXmin))
181 double newProba = funct(x);
183 if(
Propose(x, newProba, probaForSearchedTime, proposedX))
G4DNARevertProbability(double toleranceY)
bool Propose(double proposedXValue, double proposedProba, double nextProba, double &returnedValue)
void SetTolerance(double toleranceY)
G4DNARevertProbability(double xmin, double xmax, double toleranceY)
void SetBoundaries(double xmin, double xmax)
G4double(* function)(G4double)
double fIncreasingCumulativeFunction
double Revert(double probaForSearchedTime, std::function< double(double)> &funct)