47  : 
name(theName), 
n(0), sum(0.), mean(0.), var(0.), sd(0.), 
r(0.), efficiency(0.),
    48    r2eff(0.), r2int(0.), shift(0.), vov(0.), fom(0.), largest(0.),
    49    largest_score_happened(0), mean_1(0.), var_1(0.), sd_1(0.), r_1(0.),
    50    shift_1(0.), vov_1(0.), fom_1(0.), noBinOfHistory(16), slope(0.),
    51    noBinOfPDF(10), minimizer(0), noPass(0), noTotal(8), statsAreUpdated(true)
    52    , showHistory(true) , calcSLOPE(true)
    94       G4cout << 
"Warning: G4convergenceTester expects zero or positive number as inputs, but received a negative number." << 
G4endl;
   106           std::vector< G4double >::iterator it; 
   146    std::map< G4int , G4double >::iterator it;
   151       var += ( xi - 
mean ) * ( xi - mean );
   153       vov += ( xi - 
mean ) * ( xi - mean ) * ( xi - 
mean ) * ( xi - mean );
   166       sd = std::sqrt ( 
var );
   182    G4double spend_time_of_largest = 0.0;
   185       if ( std::abs ( it->second ) > 
largest )
   219    if ( 
var_1 != 0.0 ) {
   245       G4int j = int ( i * 0.05 );
   297       G4int nonzero_till_ith = 0;
   300       std::map< G4int , G4double >::iterator it;
   304          if ( it->first <= ith )
   312       if ( nonzero_till_ith == 0 ) 
continue; 
   314       mean_till_ith = mean_till_ith / ( ith+1 ); 
   324          if ( it->first <= ith )
   327          sum_x2_till_ith += xi * xi; 
   328          var_till_ith += ( xi - mean_till_ith ) * ( xi - mean_till_ith );
   329          shift_till_ith += ( xi - mean_till_ith ) * ( xi - mean_till_ith ) * ( xi - mean_till_ith );
   330          vov_till_ith += ( xi - mean_till_ith ) * ( xi - mean_till_ith ) * ( xi - mean_till_ith ) * ( xi - mean_till_ith );
   334       var_till_ith += ( (ith+1) - nonzero_till_ith ) * mean_till_ith * mean_till_ith;
   335       vov_till_ith += ( (ith+1) - nonzero_till_ith ) * mean_till_ith * mean_till_ith * mean_till_ith * mean_till_ith ;
   338       if ( var_till_ith == 0 ) 
continue; 
   339       vov_till_ith = vov_till_ith / ( var_till_ith * var_till_ith ) - 1.0 / (ith+1); 
   342       var_till_ith = var_till_ith / ( ith+1 - 1 );
   345       sd_history [ i-1 ] = std::sqrt( var_till_ith );
   346       r_history [ i-1 ] = std::sqrt( var_till_ith ) / mean_till_ith / std::sqrt ( 1.0*(ith+1) );
   350       shift_till_ith += ( (ith+1) - nonzero_till_ith ) * mean_till_ith * mean_till_ith * mean_till_ith * ( -1 );
   351       shift_till_ith = shift_till_ith / ( 2 * var_till_ith * (ith+1) );
   354       e_history [ i-1 ] = 1.0*nonzero_till_ith / (ith+1);
   357       G4double sum_till_ith =  mean_till_ith * (ith+1); 
   358       r2int_history [ i-1 ] = ( sum_x2_till_ith ) / ( sum_till_ith * sum_till_ith ) - 1 / ( 
e_history [ i-1 ] * (ith+1) );
   372    out << std::setprecision( 6 );
   375    out << 
"G4ConvergenceTester Output Result of " << 
name << 
G4endl;
   376    out << std::setw(20) << 
"EFFICIENCY = " << std::setw(13)  << 
efficiency << 
G4endl;
   377    out << std::setw(20) << 
"MEAN = " << std::setw(13) << 
mean << 
G4endl;
   378    out << std::setw(20) << 
"VAR = " << std::setw(13) << 
var << 
G4endl;
   379    out << std::setw(20) << 
"SD = " << std::setw(13) << 
sd << 
G4endl;
   380    out << std::setw(20) << 
"R = " << std::setw(13) << 
r << 
G4endl;
   381    out << std::setw(20) << 
"SHIFT = "<< std::setw(13) << 
shift << 
G4endl;
   382    out << std::setw(20) << 
"VOV = "<< std::setw(13) << 
vov << 
G4endl;
   383    out << std::setw(20) << 
"FOM = "<< std::setw(13) << 
fom << 
G4endl;
   387       out << std::setw(20) << 
"Affected Mean = " << std::setw(13) << 
mean_1 << 
" and its ratio to orignal is " << 
mean_1/
mean << 
G4endl;
   389       out << std::setw(20) << 
"Affected Mean = " << std::setw(13) << 
mean_1 << 
G4endl;
   392       out << std::setw(20) << 
"Affected VAR = " << std::setw(13) << 
var_1 << 
" and its ratio to orignal is " << 
var_1/
var << 
G4endl;
   394       out << std::setw(20) << 
"Affected VAR = " << std::setw(13) << 
var_1 << 
G4endl;
   397       out << std::setw(20) << 
"Affected R = " << std::setw(13) << 
r_1 << 
" and its ratio to orignal is " << 
r_1/
r << 
G4endl;
   399       out << std::setw(20) << 
"Affected R = " << std::setw(13) << 
r_1 << 
G4endl;
   402       out << std::setw(20) << 
"Affected SHIFT = " << std::setw(13) << 
shift_1 << 
" and its ratio to orignal is " << 
shift_1/
shift << 
G4endl;
   404       out << std::setw(20) << 
"Affected SHIFT = " << std::setw(13) << 
shift_1 << 
G4endl;
   407       out << std::setw(20) << 
"Affected FOM = " << std::setw(13) << 
fom_1 << 
" and its ratio to orignal is " << 
fom_1/
fom << 
G4endl;
   409       out << std::setw(20) << 
"Affected FOM = " << std::setw(13) << 
fom_1 << 
G4endl;
   413       out << 
"Number of events of this run is too small to do convergence tests." << 
G4endl;
   424          out << 
"SLOPE is large enough" << 
G4endl; 
   428          out << 
"SLOPE is not large enough" << 
G4endl; 
   431       out << 
"Number of non zero history too small to calculate SLOPE" << 
G4endl;
   434    out << 
"This result passes " << 
noPass << 
" / "<< 
noTotal << 
" Convergence Test." << 
G4endl; 
   443       out << 
"Number of events of this run is too small to show history." << 
G4endl;
   447    out << std::setprecision( 6 );
   450    out << 
"G4ConvergenceTester Output History of " << 
name << 
G4endl;
   452        << std::setw(13) << 
"var"    453        << std::setw(13) << 
"sd"    454        << std::setw(13) << 
"r"    455        << std::setw(13) << 
"vov"    456        << std::setw(13) << 
"fom"    457        << std::setw(13) << 
"shift"    458        << std::setw(13) << 
"e"   459        << std::setw(13) << 
"r2eff"   460        << std::setw(13) << 
"r2int"    464       out << std::setw( 4) << i << 
" "    485    std::vector<G4double> first_ally;
   486    std::vector<G4double> second_ally;
   495    first_ally.resize( N );
   496    second_ally.resize( N );
   500    if ( sum_of_var == 0.0 ) {
   501       out << 
"Variances in all historical grids are zero." << 
G4endl; 
   502       out << 
"Terminating checking behavior of statistics numbers." << 
G4endl; 
   508    for ( i = 0 ; i < 
N ; i++ ) 
   515    t = pearson_r * std::sqrt ( ( N - 2 ) / ( 1 - pearson_r * pearson_r ) );
   519       out << 
"MEAN distribution is  RANDOM" << 
G4endl; 
   524       out << 
"MEAN distribution is not RANDOM" << 
G4endl; 
   530    for ( i = 0 ; i < 
N ; i++ ) 
   537    t = pearson_r * std::sqrt ( ( N - 2 ) / ( 1 - pearson_r * pearson_r ) );
   541       out << 
"r follows 1/std::sqrt(N)" << 
G4endl; 
   546       out << 
"r does not follow 1/std::sqrt(N)" << 
G4endl; 
   551       out << 
"r is monotonically decrease " << 
G4endl;
   555       out << 
"r is NOT monotonically decrease " << 
G4endl;
   570    for ( i = 0 ; i < 
N ; i++ ) 
   577    t = pearson_r * std::sqrt ( ( N - 2 ) / ( 1 - pearson_r * pearson_r ) );
   581       out << 
"VOV follows 1/std::sqrt(N)" << 
G4endl; 
   586       out << 
"VOV does not follow 1/std::sqrt(N)" << 
G4endl; 
   591       out << 
"VOV is monotonically decrease " << 
G4endl;
   595       out << 
"VOV is NOT monotonically decrease " << 
G4endl;
   600    for ( i = 0 ; i < 
N ; i++ ) 
   607    t = pearson_r * std::sqrt ( ( N - 2 ) / ( 1 - pearson_r * pearson_r ) );
   611       out << 
"FOM distribution is RANDOM" << 
G4endl; 
   616       out << 
"FOM distribution is not RANDOM" << 
G4endl; 
   629    for ( i = 0 ; i < 
N ; i++ )
   631       first_mean += first_ally [ i ]; 
   632       second_mean += second_ally [ i ]; 
   634    first_mean = first_mean / 
N;
   635    second_mean = second_mean / 
N;
   638    for ( i = 0 ; i < 
N ; i++ )
   640       a += ( first_ally [ i ] - first_mean ) * ( second_ally [ i ] - second_mean );
   645    for ( i = 0 ; i < 
N ; i++ )
   647       b1 += ( first_ally [ i ] - first_mean ) * ( first_ally [ i ] - first_mean );
   648       b2 += ( second_ally [ i ] - second_mean ) * ( second_ally [ i ] - second_mean );
   651    G4double rds = a / std::sqrt ( b1 * b2 );  
   661    std::vector<G4double>::iterator it;
   662    for ( it = ally.begin() ; it != ally.end() - 1 ; it++ )
   664       if ( *it < *(it+1) ) 
return FALSE;
   694    if ( max*0.99 < min )  
   701    std::vector < G4double >  pdf_grid;
   706    G4double log10_max = std::log10( max );
   707    G4double log10_min = std::log10( min );
   708    G4double log10_delta = log10_max - log10_min;
   711       pdf_grid[i] = std::pow ( 10.0 , log10_max - log10_delta/10.0*(i) );    
   715    std::vector < G4double >  pdf;
   716    pdf.resize( noBinOfPDF ); 
   718    for ( 
G4int j=0 ; j < last ; j ++ )
   720       for ( 
G4int i = 0 ; i < 11 ; i++ )
   724             pdf[i] += 1.0 / ( pdf_grid[i] - pdf_grid[i+1] ) / 
n;
   731    f_xi.resize( noBinOfPDF );
   732    f_yi.resize( noBinOfPDF );
   736       f_xi[i] = (pdf_grid[i]+pdf_grid[i+1])/2;
   772       return 3.402823466e+38;  
   776       return 3.402823466e+38;  
   783    for ( i = 0 ; i < int ( 
f_yi.size() ) ; i++ )
   786       if ( ( 1 + k * 
f_xi [ i ] / a ) < 0 )
   792          y += ( 
f_yi [ i ] - 1/a*std::pow (  1 + k * 
f_xi [ i ] / a , - 1/k - 1 ) ) * ( 
f_yi [ i ] - 1/a*std::pow ( 1 + k * 
f_xi [ i ] / a , - 1/k - 1 ) );
 G4bool is_monotonically_decrease(std::vector< G4double >)
 
G4double slope_fitting_function(std::vector< G4double >)
 
std::vector< G4double > largest_scores
 
std::vector< G4double > sd_history
 
std::vector< G4double > cpu_time
 
std::vector< G4double > r2int_history
 
std::map< G4int, G4double > nonzero_histories
 
std::vector< G4double > mean_history
 
std::vector< G4double > f_xi
 
G4SimplexDownhill< G4ConvergenceTester > * minimizer
 
void check_stat_history(std::ostream &out=G4cout)
 
std::vector< G4double > e_history
 
std::vector< G4int > history_grid
 
std::vector< G4double > vov_history
 
G4GLOB_DLL std::ostream G4cout
 
std::vector< G4double > GetMinimumPoint()
 
void calc_grid_point_of_history()
 
std::vector< G4double > r2eff_history
 
void calc_slope_fit(std::vector< G4double >)
 
std::vector< G4double > shift_history
 
void ShowHistory(std::ostream &out=G4cout)
 
G4double GetUserElapsed() const
 
G4int largest_score_happened
 
G4double GetSystemElapsed() const
 
std::vector< G4double > var_history
 
std::vector< G4double > r_history
 
void ShowResult(std::ostream &out=G4cout)
 
std::vector< G4double > fom_history
 
std::vector< G4double > f_yi
 
G4double calc_Pearson_r(G4int, std::vector< G4double >, std::vector< G4double >)
 
G4ConvergenceTester(G4String theName="NONAME")