Diploma Thesis Percolation Simulation
C++ Sourcecode Documentation

www.AndreasKrueger.de/thesis/code

Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members  

ff Namespace Reference


Compounds

class  arguments1
class  fillingfactor_functions

Typedefs

typedef measure< REAL > measuredouble

Functions

bool is_there_a_spanning_cluster (REAL ff, arguments1 &arg)
int bracket_ff (bool(*f)(REAL, arguments1 &), arguments1 &arg, REAL left, REAL right, REAL tol, measuredouble &result)
int find_one_ffc (REAL left, REAL right, REAL tol, sphere *spheres, NUMLIST &L_sph, string &throwtime, const char *clusteranalysis_file, measuredouble &one_ffc, clock_t &brackettime)
bool find_mean_ffc (NUMBER N, int dim, COUNTER at_least, REAL mean_tolerance, REAL left, REAL right, REAL loose_tolerance, const char *clusteranalysis_file, const char *bestresults_file, muvarskewkurt< REAL > &result_ffc, minmax &result_minmax)
void find_ffc_scanning_N_and_dim (int lowerdim, int upperdim, REAL lower_N, NUMBER upper_N, REAL tolerance, COUNTER at_least)
void find_ffc_frontend ()
int find_one_ff_with_criterion (bool(*criterion)(REAL, arguments1 &), REAL parameter, REAL left, REAL right, REAL tol, sphere *spheres, NUMLIST &L_sph, string &throwtime, const char *clusteranalysis_file, measuredouble &one_ff, clock_t &brackettime)
bool find_mean_ff_with_criterion (bool(*criterion)(REAL, arguments1 &), REAL parameter, string namecriterion, REAL(*ff_guessed)(NUMBER, int, REAL), NUMBER N, int dim, COUNTER at_least, REAL accuracy, REAL left, REAL right, REAL loose_tolerance, const char *clusteranalysis_file, const char *bestresults_file, muvarskewkurt< REAL > &result_ff, minmax &result_minmax)
void find_ff_with_criterion_scanning_N_and_dim (bool(*criterion)(REAL, arguments1 &), REAL parameter, string namecriterion, REAL(*ff_guessed)(NUMBER, int, REAL), int lowerdim, int upperdim, REAL lower_N, NUMBER upper_N, REAL tolerance, COUNTER at_least)
bool is_there_only_one_cluster (REAL ff, arguments1 &arg)
REAL ff_all_in1clst_guessed (NUMBER N, int dim, REAL ratio)
bool is_the_numberofcl_smaller_than_a_ratio (REAL ff, arguments1 &arg)
REAL ffnoc_guessed (NUMBER N, int dim, REAL ratio)
bool is_the_biggestcluster_bigger_than_a_ratio (REAL ff, arguments1 &arg)
REAL ffbig_guessed (NUMBER N, int dim, REAL ratio)
bool is_the_incl_meancluster_bigger_than_a_ratio (REAL ff, arguments1 &arg)
REAL ffmean1_guessed (NUMBER N, int dim, REAL ratio)
void load_stepfunctions (fillingfactor_functions *stepfn)
fillingfactor_functions give_one_stepfunction (int num)
void find_ff_with_criterion_frontend ()

Variables

const int N_STEPFN = 5


Typedef Documentation

typedef measure<REAL> ff::measuredouble
 

Definition at line 21 of file ff.h.

Referenced by bracket_ff().


Function Documentation

int bracket_ff bool(*    f)(REAL, arguments1 &),
arguments1   arg,
REAL    left,
REAL    right,
REAL    tol,
measuredouble   result
 

Definition at line 76 of file ff.h.

References ASCII_PLUSMINUS, measuredouble, and REAL.

Referenced by find_one_ff_with_criterion(), and find_one_ffc().

00079                                                                  {
00080         REAL l,m,r;
00081         bool fl,fm,fr;
00082         l=left; r=right; 
00083 //      if (l>r) swap(l, r);            // ATTENTION: ok this way?
00084         if (l>r) return 2;                      //
00085         fl=f(l,arg);
00086         if (fl==true) return -1;  // missed left (percolates already at left bracket of interval)
00087         if (l==r) return (fl==true)?-1:+1; // the percolationpoint is left:right of point==intervall
00088         fr=f(r,arg);
00089         if (fr==false) return +1; // missed right (percolates already at right bracket of interval)
00090 
00091         m=l+(r-l)/2;            // middle is the best guess
00092 
00093         while (r-l>tol){
00094                 fm=f(m,arg);
00095                 if (fm==1){
00096                         r=m; fr=fm;
00097                 }
00098                 else {
00099                         l=m; fr=fm;
00100                 }
00101                 m=l+(r-l)/2;
00102                 cout << "m= "<<m<<ASCII_PLUSMINUS<<(r-l)/2<<"  "<<flush;
00103         }
00104         result=measuredouble (m, (r-l)/2);
00105         return 0;  // and result
00106 }

REAL ff_all_in1clst_guessed NUMBER    N,
int    dim,
REAL    ratio
 

Definition at line 555 of file ff.h.

References NUMBER, REAL, and saturating_fillingfactor().

Referenced by load_stepfunctions().

00555                                                           {
00556         return saturating_fillingfactor(dim,N);
00557 }

REAL ffbig_guessed NUMBER    N,
int    dim,
REAL    ratio
 

Definition at line 591 of file ff.h.

References ff_critical_guessed(), NUMBER, and REAL.

Referenced by load_stepfunctions().

00591                                                  {
00592         return (1+ratio) * ff_critical_guessed(N, dim);
00593 }

REAL ffmean1_guessed NUMBER    N,
int    dim,
REAL    ratio
 

Definition at line 605 of file ff.h.

References ff_critical_guessed(), NUMBER, and REAL.

Referenced by load_stepfunctions().

00605                                                    {
00606         return (1+ratio) * ff_critical_guessed(N, dim);
00607 }

REAL ffnoc_guessed NUMBER    N,
int    dim,
REAL    ratio
 

Definition at line 570 of file ff.h.

References ff_critical_guessed(), fillingfactor_noc1percent(), NUMBER, and REAL.

Referenced by load_stepfunctions().

00570                                                  {
00571         // TODO:
00572         // interpolation between noc1% and noc90%
00573         //
00574         if (ratio==0.01) return fillingfactor_noc1percent(dim,N);
00575         else{
00576                 if (ratio >0.2) return 0.5*ff_critical_guessed(N, dim);
00577                 else return 1.5*ff_critical_guessed(N, dim);
00578         }
00579 }

void find_ff_with_criterion_frontend  
 

Definition at line 657 of file ff.h.

References COUNTER, find_ff_with_criterion_scanning_N_and_dim(), ff::fillingfactor_functions::fn, load_stepfunctions(), log(), MAXDIM, MAXNUMBER, N_STEPFN, ff::fillingfactor_functions::name, NUMBER, REAL, rounded(), and ff::fillingfactor_functions::theory.

Referenced by main().

00657                                        {
00658         cout<<"Fillingfactor-Fillingstation - Hello in parameter-space!\n\n";
00659         cout<<"\nPlease type in the range of N (number of spheres) you are interested in."<<endl;
00660         cout<<"The lower number will be doubled while <= the upper number."<<endl;
00661         cout<<"Attention: The algorithm is optimized for these N only:"<<endl;
00662         cout<<"312(type in 312.5), 625, 1250, 2500, 5000, 10000, 20000, 40000, 80000, 160000, 320000";
00663         cout<<endl;
00664 
00665         REAL lower_N=78; NUMBER upper_N=MAXNUMBER;
00666         do{
00667                 cout<<"[1..."<<MAXNUMBER<<", 1..."<<MAXNUMBER<<"] ";
00668                 cin >> lower_N>>upper_N;
00669         }while (lower_N>upper_N || lower_N<1 || upper_N<1 || lower_N>MAXNUMBER ||upper_N>MAXNUMBER);
00670 
00671         cout<<"\nThanks.\nYou can now choose, which fillingfactor you want to find out:\nI want the mean\n";
00672         cout<<"(1) critical fillingfactor (spanning-cluster from left to right)\n";
00673         cout<<"(2) ff for which every single sphere belongs to the one big cluster\n";
00674         cout<<"(3) ff for which the number-of-clusters == given percentage of the # of spheres\n";
00675         cout<<"(4) ff for which the size of the biggest-cluster == given percentage of the # of spheres\n";
00676         cout<<"(5) ff for which the mean-clustersize == given percentage of the # of spheres\n";
00677         cout<<"Choose a number: ";
00678         int criterion=1;
00679         do {
00680                 cin>>criterion;
00681         } while (criterion < 1 || criterion >5);
00682 
00683         cout<<"Thanks. So be it.\n";
00684         char buffer[5]; sprintf(buffer, "", "");
00685         REAL percent=50;
00686 
00687         if (criterion>2){
00688                 cout<<"Now please give the percentage";
00689                 REAL percent_step=100/(REAL)lower_N;
00690                 do{
00691                         cout<<"[ "<<percent_step<<"% ; "<<100-percent_step<<"% ]  ";
00692                         cin >>percent;
00693                 } while (percent<percent_step || percent>100-percent_step);
00694                 if (percent<10) sprintf(buffer, "%1.0f%c", percent,'%');
00695                 else sprintf(buffer, "%2.0f%c", percent,'%');
00696         }
00697 
00698         fillingfactor_functions stepfn[N_STEPFN+1];     load_stepfunctions(stepfn);
00699 
00700         string namecriterion                                            =stepfn[criterion].name+buffer;
00701         bool (* stepfn_criterion)(REAL, arguments1&)=stepfn[criterion].fn;
00702         REAL (* ff_guessed)(NUMBER,int,REAL)            =stepfn[criterion].theory;
00703 
00704         cout<<"OK. GREAT! You have chosen ("<<criterion<<") >> "<<namecriterion<<" << Please remember this!";
00705         cout<<"\n\n ... the simulation will take some time."<<endl;
00706         cout<<"The higher your wanted dimension, the slower (above dim~7 really dramatic!)!"<<endl;
00707         cout<<"Please now type in the range of dimensions you are interested in"<<endl;
00708 
00709         int lowerdim=1, upperdim=MAXDIM;
00710         do{
00711                 cout<<"[1..."<<MAXDIM<<", 1..."<<MAXDIM<<"] ";
00712                 cin >> lowerdim>>upperdim;
00713         }while(lowerdim>upperdim || lowerdim<1 || upperdim<1 || lowerdim>MAXDIM ||upperdim>MAXDIM);
00714 
00715         cout<<"Very good.\nNow...how good shall the result be?";
00716         cout<<"\nPlease type in the target accuracy in %";
00717         REAL tol=5;
00718         do{
00719                 cout<<"[0.1 ... 50]";
00720                 cin >> tol;
00721         }while (tol<0.01 || tol>50 );
00722         tol/=100.0;
00723 
00724         cout<<"OK.\nNow...how many ff-values shall there be AT LEAST for each configuration?";
00725         cout<<"\nPlease type e.g. in 30 for high N, 70 for low N: ";
00726         COUNTER at_least=50;
00727         do{
00728                 cout<<"[0 ... 150] ";
00729                 cin >> at_least;
00730         }while (at_least<1);
00731 
00732         cout<<"\nOK, now you can switch off the monitor to save energy..."<<endl;
00733         COUNTER confs=rounded(log((REAL)upper_N/lower_N)/log(2.0)+1)*(upperdim-lowerdim+1);
00734         cout<<"I will simulate these "<<confs<<" configurations and save the results to disk"<<endl;
00735         find_ff_with_criterion_scanning_N_and_dim(stepfn_criterion, percent/100, namecriterion, ff_guessed,
00736                                                                                           lowerdim, upperdim, lower_N, upper_N, tol, at_least);
00737 }

void find_ff_with_criterion_scanning_N_and_dim bool(*    criterion)(REAL, arguments1 &),
REAL    parameter,
string    namecriterion,
REAL(*    ff_guessed)(NUMBER, int, REAL),
int    lowerdim,
int    upperdim,
REAL    lower_N,
NUMBER    upper_N,
REAL    tolerance,
COUNTER    at_least
 

Definition at line 485 of file ff.h.

References COUNTER, datafiles::create_clusteranalysis_resultfile(), datafiles::create_ff_bestresults_file(), FILEHEAD2, find_mean_ff_with_criterion(), heat_random_generator(), NUMBER, REAL, SEED7, and timestamp_fullyear().

Referenced by find_ff_with_criterion_frontend(), and commandline::start_subprg().

00488                                                                                                                             {
00489         srand( SEED7 );                 // set the random generator     to a seed 
00490         cout <<endl;
00491         heat_random_generator();
00492         cout <<endl;
00493         // write File-Intro to bracket-results
00494         string clusteranalysis_file=""; 
00495         clusteranalysis_file=(clusteranalysis_file+FILEHEAD2)+"single-results-"
00496                                                   +timestamp_fullyear()+".txt";
00497         create_clusteranalysis_resultfile(clusteranalysis_file.c_str(), namecriterion);
00498 
00499         // write File-Intro to best results 
00500         string bestresults_file=""; 
00501         bestresults_file=bestresults_file+FILEHEAD2+"best-results_"+namecriterion+"_"+timestamp_fullyear()+".txt";
00502         create_ff_bestresults_file(bestresults_file.c_str(), namecriterion);
00503 
00504         REAL miss_tolerance=0.04;       // more than these outliers on one side -> enlarge intervall (0.02)
00505         REAL shrink_last_intervall=0.15;  // heuristic: doubling N decreases fluctuations by ... (0.1)
00506 
00507         REAL left=0.85;         // only the start intervall (for the first N in each dim)
00508         REAL right=1.25;                // for high N [0.85;1.1]; for beginning with low N [0.4;1.8]
00509                                                         // minmax for N=160000 0.96/0.83 to 1.04/1.06 (2dim/6dim)
00510 
00511         int dimsteps=upperdim-lowerdim+1;
00512         minmax* intervall=new minmax[dimsteps+1];
00513 
00514         REAL ffc_theo;                                                          // set starting values for left & right
00515         int i; for (i=0;i<dimsteps+1;i++) {
00516                 ffc_theo=ff_guessed((NUMBER)lower_N,lowerdim+i, parameter); 
00517                 intervall[i]=minmax(left*ffc_theo, right*ffc_theo);
00518         }
00519 
00520         
00521         muvarskewkurt<REAL> ff; minmax mm;
00522         NUMBER N;       int dim;
00523 
00524         for (REAL N_=lower_N;N_<=upper_N;N_*=2){
00525                 N=(NUMBER)floor(N_);
00526 
00527                 for (dim=lowerdim;dim<upperdim+1;dim++){
00528                         mm=intervall[dim-lowerdim];
00529                         left=mm.min; right=mm.max;
00530                         find_mean_ff_with_criterion(criterion, parameter, namecriterion, ff_guessed,
00531                                          N, dim, at_least, tolerance,
00532                                          left, right, miss_tolerance, 
00533                                          clusteranalysis_file.c_str(), bestresults_file.c_str(),
00534                                          ff, mm);
00535                         intervall[dim-lowerdim]=minmax(mm.min+(ff.mu.av()-mm.min)*shrink_last_intervall, 
00536                                                                                    mm.max-(mm.max-ff.mu.av())*shrink_last_intervall) ;
00537                 }
00538         }
00539         delete[] intervall;
00540 }

void find_ffc_frontend  
 

Definition at line 290 of file ff.h.

References COUNTER, find_ffc_scanning_N_and_dim(), log(), MAXDIM, MAXNUMBER, NUMBER, REAL, and rounded().

Referenced by main().

00290                          {
00291         cout<<"Hello!\nThe simulation will take some time."<<endl;
00292         cout<<"The higher the wanted dimension, the slower!"<<endl;
00293         cout<<"Please type in the range of dimensions you are interested in"<<endl;
00294 
00295         int lowerdim=1, upperdim=MAXDIM;
00296         do{
00297                 cout<<"[1..."<<MAXDIM<<", 1..."<<MAXDIM<<"] ";
00298                 cin >> lowerdim>>upperdim;
00299         }while(lowerdim>upperdim || lowerdim<1 || upperdim<1 || lowerdim>MAXDIM ||upperdim>MAXDIM);
00300         cout<<"\nThanks.\nNow type in the range of N (number of spheres) you are interested in."<<endl;
00301         cout<<"The lower number will be doubled while <= the upper number."<<endl;
00302         cout<<"Attention: The algorithm is optimized for these N only:"<<endl;
00303         cout<<"312(type in 312.5), 625, 1250, 2500, 5000, 10000, 20000, 40000, 80000, 160000, 320000";
00304         cout<<endl;
00305 
00306         REAL lower_N=78; NUMBER upper_N=MAXNUMBER;
00307         do{
00308                 cout<<"[1..."<<MAXNUMBER<<", 1..."<<MAXNUMBER<<"] ";
00309                 cin >> lower_N>>upper_N;
00310         }while (lower_N>upper_N || lower_N<1 || upper_N<1 || lower_N>MAXNUMBER ||upper_N>MAXNUMBER);
00311 
00312         cout<<"Very good.\nNow...how good shall the result be?";
00313         cout<<"\nPlease type in the target accuracy in %";
00314         REAL tol=5;
00315         do{
00316                 cout<<"[0.1 ... 50]";
00317                 cin >> tol;
00318         }while (tol<0.01 || tol>50 );
00319         tol/=100.0;
00320 
00321         cout<<"OK.\nNow...how many ff-values shall there be AT LEAST for each configuration?";
00322         cout<<"\nPlease type e.g. in 50 for high N, 150 for low N: ";
00323         COUNTER at_least=50;
00324         do{
00325                 cout<<"[0 ... 150] ";
00326                 cin >> at_least;
00327         }while (at_least<1);
00328 
00329         cout<<"\nOK, now you can switch off the monitor to save energy..."<<endl;
00330         COUNTER confs=rounded(log((REAL)upper_N/lower_N)/log(2.0)+1)*(upperdim-lowerdim+1);
00331         cout<<"I will simulate these "<<confs<<" configurations and save the results to disk"<<endl;
00332         find_ffc_scanning_N_and_dim(lowerdim, upperdim, lower_N, upper_N, tol, at_least);
00333 }

void find_ffc_scanning_N_and_dim int    lowerdim,
int    upperdim,
REAL    lower_N,
NUMBER    upper_N,
REAL    tolerance,
COUNTER    at_least
 

Definition at line 238 of file ff.h.

References COUNTER, datafiles::create_clusteranalysis_resultfile(), datafiles::create_ffc_bestresults_file(), ff_critical_guessed(), FILEHEAD2, find_mean_ffc(), heat_random_generator(), NUMBER, REAL, SEED7, and timestamp_fullyear().

Referenced by find_ffc_frontend().

00239                                                                                                   {
00240         srand( SEED7 );                 // set the random generator     to a seed 
00241         cout <<endl;
00242         heat_random_generator();
00243         cout <<endl;
00244         // write File-Intro to bracket-results
00245         string clusteranalysis_file=""; 
00246         clusteranalysis_file=(clusteranalysis_file+FILEHEAD2)+"single-results-"
00247                                                   +timestamp_fullyear()+".txt";
00248         create_clusteranalysis_resultfile(clusteranalysis_file.c_str(), "critical");
00249 
00250         // write File-Intro to best results 
00251         string bestresults_file=""; 
00252         bestresults_file=(bestresults_file+FILEHEAD2)+"best-results-"+timestamp_fullyear()+".txt";
00253         create_ffc_bestresults_file(bestresults_file.c_str());
00254 
00255         REAL miss_tolerance=0.04;       // more than these outliers on one side -> enlarge intervall (0.02)
00256         REAL shrink_last_intervall=0.1;  // heuristic: doubling N decreases fluctuations by ... (0.1)
00257 
00258         REAL left=0.93;         // only the start intervall (for the first N in each dim)
00259         REAL right=1.03;                // for high N [0.85;1.1]; for beginning with low N [0.4;1.8]
00260                                                         // minmax for N=160000 0.96/0.83 to 1.04/1.06 (2dim/6dim)
00261 
00262         int dimsteps=upperdim-lowerdim+1;
00263         minmax* intervall=new minmax[dimsteps+1];
00264         REAL ffc_theo;                                                          // set starting values for left & right
00265         int i; for (i=0;i<dimsteps+1;i++) {
00266                 ffc_theo=ff_critical_guessed((NUMBER)lower_N,lowerdim+i); 
00267                 intervall[i]=minmax(left*ffc_theo, right*ffc_theo);
00268         }
00269         
00270         muvarskewkurt<REAL> ffc; minmax mm;
00271         NUMBER N;       int dim;
00272 
00273         for (REAL N_=lower_N;N_<=upper_N;N_*=2){
00274                 N=(NUMBER)floor(N_);
00275 
00276                 for (dim=lowerdim;dim<upperdim+1;dim++){
00277                         mm=intervall[dim-lowerdim];
00278                         left=mm.min; right=mm.max;
00279                         find_mean_ffc(N, dim, at_least, tolerance,
00280                                          left, right, miss_tolerance, 
00281                                          clusteranalysis_file.c_str(), bestresults_file.c_str(),
00282                                          ffc, mm);
00283                         intervall[dim-lowerdim]=minmax(mm.min+(ffc.mu.av()-mm.min)*shrink_last_intervall, 
00284                                                                                    mm.max-(mm.max-ffc.mu.av())*shrink_last_intervall) ;
00285                 }
00286         }
00287         delete[] intervall;
00288 }

bool find_mean_ff_with_criterion bool(*    criterion)(REAL, arguments1 &),
REAL    parameter,
string    namecriterion,
REAL(*    ff_guessed)(NUMBER, int, REAL),
NUMBER    N,
int    dim,
COUNTER    at_least,
REAL    accuracy,
REAL    left,
REAL    right,
REAL    loose_tolerance,
const char *    clusteranalysis_file,
const char *    bestresults_file,
muvarskewkurt< REAL > &    result_ff,
minmax &    result_minmax
 

Definition at line 368 of file ff.h.

References ASCII_PLUSMINUS, measure< REAL >::av(), COUNTER, datafiles::create_ff_file(), FILEHEAD2, find_one_ff_with_criterion(), give_short_timestamp(), GRIDSIZE, increasing_integers(), NUMBER, REAL, measure< REAL >::sdev(), set_dim(), throw_spheres(), datafiles::write_best_ff_line(), datafiles::write_best_ff_outofmemory(), and datafiles::write_ff_line().

Referenced by find_ff_with_criterion_scanning_N_and_dim().

00374 {
00375         sphere *spheres = new sphere[N+1];
00376         if (spheres==NULL) {
00377                 write_best_ff_outofmemory(bestresults_file,N,dim,
00378                                         ("find_"+namecriterion+"(...): sphere *spheres").c_str());
00379                 result_minmax=minmax(left,right);
00380                 return false;
00381         }
00382 
00383         set_dim(spheres,0,N,dim);
00384         NUMLIST all; increasing_integers (all, N);      
00385 
00386         cout <<"\nN="<<N<<" dim="<<dim<<" Create the datafile..."<<endl;
00387         char buffer[100];
00388         sprintf(buffer, "-%ddim-N%d-M%d-T%1.3f.txt",                            
00389                                            dim, N, at_least, accuracy); 
00390         string fn=""; fn=FILEHEAD2+namecriterion+buffer;
00391         create_ff_file(fn.c_str(), namecriterion);
00392 
00393         REAL ff_theo=ff_guessed(N,dim, parameter);                                      
00394         REAL tolerance_absolute=accuracy*ff_theo;
00395 
00396         cout<<"Now I find the "<<namecriterion<<" of single realizations in ("<<left<<", "<<right<<") with ";   
00397         cout<<ASCII_PLUSMINUS<<tolerance_absolute<<" ("<<tolerance_absolute/ff_theo*100<<"%)"<<endl;
00398         cout<<"until the mean is found "<<ASCII_PLUSMINUS<<accuracy*ff_theo;
00399         cout<<" ("<<accuracy*100<<"%)\n"<<endl;
00400 
00401         measuredouble one_ff;           
00402         std::list<REAL> results;
00403         muvarskewkurt<REAL> ff;
00404         minmax mm;      // use only once! then .reset() ! 
00405 
00406         string throwtime;
00407         COUNTER nn=1;
00408         COUNTER missedleft=0;COUNTER missedright=0;
00409         REAL errorsum=0;
00410         string foundtime;
00411 
00412         clock_t totaltime, brackettime, intervalltime; 
00413         totaltime=clock(); 
00414         int missed;
00415         REAL new_shot=2.0;      // if missed, then double/half that intervall border
00416         REAL enlarger=0.05; // too many outliers -> add 5% to intervall border
00417         REAL l,r;                       // temporary left, right until missed==0
00418         REAL dummy=1.0; // for calculate_moments result type
00419 
00420         do{  // until accurracy of mean sufficient
00421                 throw_spheres(spheres, all);            
00422                 throwtime=give_short_timestamp(); 
00423                 brackettime=0;
00424                 l=left; r=right;
00425                         // the 'theoretical' value (if it is to big) is only used for the first 5 single_ff's 
00426                 if (nn>5) tolerance_absolute=accuracy * minof2<REAL>(ff_theo, ff.mu.av());
00427                         
00428                 do{ // until single realization bracketed (== not missed)
00429                         missed=find_one_ff_with_criterion(criterion, parameter, 
00430                                                                                 l, r, tolerance_absolute, spheres, all, throwtime,
00431                                                                                 clusteranalysis_file, one_ff, intervalltime);
00432                         brackettime+=intervalltime;
00433 
00434                         if (missed==-1)  { 
00435                                 cout<<"mL "<<flush;
00436                                 missedleft++; 
00437                                 l/=new_shot; // for this realization only
00438                                 if (missedleft/(REAL)nn>loose_tolerance) { 
00439                                         left-=left*enlarger;  
00440                                         cout<<" eL<<< ("<<left<<", "<<right<<")"<<flush;  }
00441                         }
00442                         if (missed==+1) {
00443                                 cout<<"mR "<<flush;
00444                                 missedright++;
00445                                 r*=new_shot; // for this realization only
00446                                 if (missedright/(REAL)nn>loose_tolerance) {
00447                                         right+=right*enlarger;  
00448                                         cout<<" eR>>> ("<<left<<", "<<right<<")"<<flush;  }
00449                         }
00450                         if (missed==2) {
00451                                 cout<<"\nError: left bracket > right bracket (Please mail: cpp__at__AndreasKrueger__dot__de)\n"<<endl;
00452                                 exit(2);
00453                         }
00454                 } while (missed!=0);
00455 
00456                 mm.set_if_more_extreme(one_ff.av());
00457                 errorsum+=one_ff.sdev();
00458                 results.push_back(one_ff.av());
00459 
00460                 ff=calculate_moments<REAL,REAL>(&manipdata<REAL>::linear, (REAL)42, results, dummy);
00461                 ff.mu.set_sdev(ff.mu.sdev()+errorsum/nn); // add the mean measurement error
00462                 ff.sdev_of_mean(nn);                                    // this reduces the dev's to ~1/sqrt(nn)
00463                 foundtime=give_short_timestamp(); 
00464 
00465                 write_ff_line(fn.c_str(),N,dim, GRIDSIZE, one_ff, brackettime, 
00466                                            nn, missedleft, missedright, ff, foundtime.c_str());
00467 
00468                 cout<<"\nloop_"<<nn<<" (ml:"<<missedleft<<", mr:"<<missedright<<") mu=";
00469                 cout<<ff.mu<<"\t (N="<<N<<", dim="<<dim<<")"<<endl<<endl;
00470 
00471                 nn++;
00472 
00473         }while (nn<=at_least || ff.mu.sdev()>accuracy*ff.mu.av());
00474 
00475         totaltime=clock()-totaltime;
00476         write_best_ff_line(bestresults_file,N,dim,GRIDSIZE, ff, nn-1, missedleft, missedright, 
00477                                                 mm.min, mm.max, totaltime, foundtime.c_str());
00478         
00479         result_ff=ff; result_minmax=mm;
00480         // return-by-reference: ffc and result_minmax
00481         return true;
00482 }

bool find_mean_ffc NUMBER    N,
int    dim,
COUNTER    at_least,
REAL    mean_tolerance,
REAL    left,
REAL    right,
REAL    loose_tolerance,
const char *    clusteranalysis_file,
const char *    bestresults_file,
muvarskewkurt< REAL > &    result_ffc,
minmax &    result_minmax
 

Definition at line 128 of file ff.h.

References ASCII_PLUSMINUS, measure< REAL >::av(), COUNTER, datafiles::create_ffc_file(), ff_critical_guessed(), FILEHEAD2, find_one_ffc(), give_short_timestamp(), GRIDSIZE, increasing_integers(), NUMBER, REAL, measure< REAL >::sdev(), set_dim(), throw_spheres(), datafiles::write_best_ff_line(), datafiles::write_best_ff_outofmemory(), and datafiles::write_ff_line().

Referenced by find_ffc_scanning_N_and_dim().

00132 {
00133         sphere *spheres = new sphere[N+1];
00134         if (spheres==NULL) {
00135                 write_best_ff_outofmemory(bestresults_file,N,dim,
00136                                                                    "find_ffc(...): sphere *spheres");
00137                 result_minmax=minmax(left,right);
00138                 return false;
00139         }
00140 
00141         set_dim(spheres,0,N,dim);
00142         NUMLIST all; increasing_integers (all, N);      
00143 
00144         cout <<"\nN="<<N<<" dim="<<dim<<" Create the datafile..."<<endl;
00145         char buffer[100];
00146         sprintf(buffer, "ffc-%ddim-N%d-M%d-T%1.3f.txt",                         
00147                                                    dim, N, at_least, mean_tolerance); 
00148         string fn=""; fn=fn+FILEHEAD2+buffer;
00149         create_ffc_file(fn.c_str());                                                            
00150 
00151         REAL ffc_theo=ff_critical_guessed(N,dim);                                       
00152         REAL tolerance_absolute=mean_tolerance*ffc_theo;
00153 
00154         cout<<"Now I find the ffc of single realizations in ("<<left<<", "<<right<<") with ";   
00155         cout<<ASCII_PLUSMINUS<<tolerance_absolute<<" ("<<tolerance_absolute/ffc_theo*100<<"%)"<<endl;
00156         cout<<"until the mean is found "<<ASCII_PLUSMINUS<<mean_tolerance*ffc_theo;
00157         cout<<" ("<<mean_tolerance*100<<"%)\n"<<endl;
00158 
00159         measuredouble one_ffc;          
00160         std::list<REAL> results;
00161         muvarskewkurt<REAL> ffc;
00162         minmax mm;      // use only once! then .reset() ! 
00163 
00164         string throwtime;
00165         COUNTER nn=1;
00166         COUNTER missedleft=0;COUNTER missedright=0;
00167         REAL errorsum=0;
00168         string foundtime;
00169 
00170         clock_t totaltime, brackettime, intervalltime; 
00171         totaltime=clock(); 
00172         int missed;
00173         REAL new_shot=2.0;      // if missed, then double/half that intervall border
00174         REAL enlarger=0.05; // too many outliers -> add 5% to intervall border
00175         REAL l,r;                       // temporary left, right until missed==0
00176         REAL dummy=1.0; // for calculate_moments result type
00177 
00178         do{  // until accurracy of mean sufficient
00179                 throw_spheres(spheres, all);            
00180                 throwtime=give_short_timestamp(); 
00181                 brackettime=0;
00182                 l=left; r=right;
00183                 do{ // until single realization bracketed (= not missed)
00184                         missed=find_one_ffc(l, r, tolerance_absolute, spheres, all, throwtime,          //
00185                                                                   clusteranalysis_file, one_ffc, intervalltime);
00186                         brackettime+=intervalltime;
00187 
00188                         if (missed==-1)  { 
00189                                 cout<<"mL "<<flush;
00190                                 missedleft++; 
00191                                 l/=new_shot; // for this realization only
00192                                 if (missedleft/(REAL)nn>loose_tolerance) { 
00193                                         left-=left*enlarger;  
00194                                         cout<<" eL<<< ("<<left<<", "<<right<<")"<<flush;  }
00195                         }
00196                         if (missed==+1) {
00197                                 cout<<"mR "<<flush;
00198                                 missedright++;
00199                                 r*=new_shot; // for this realization only
00200                                 if (missedright/(REAL)nn>loose_tolerance) {
00201                                         right+=right*enlarger;  
00202                                         cout<<" eR>>> ("<<left<<", "<<right<<")"<<flush;  }
00203                         }
00204                         if (missed==2) {
00205                                 cout<<"\nError: left bracket > right bracket (Please mail: cpp__at__AndreasKrueger__dot__de)\n"<<endl;
00206                                 exit(2);
00207                         }
00208                 } while (missed!=0);
00209 
00210                 mm.set_if_more_extreme(one_ffc.av());
00211                 errorsum+=one_ffc.sdev();
00212                 results.push_back(one_ffc.av());
00213 
00214                 ffc=calculate_moments<REAL,REAL>(&manipdata<REAL>::linear, (REAL)42, results, dummy);
00215                 ffc.mu.set_sdev(ffc.mu.sdev()+errorsum/nn); // add the mean measurement error
00216                 ffc.sdev_of_mean(nn);                                   // this reduces the dev's to ~1/sqrt(nn)
00217                 foundtime=give_short_timestamp(); 
00218 
00219                 write_ff_line(fn.c_str(),N,dim, GRIDSIZE, one_ffc, brackettime, 
00220                                            nn, missedleft, missedright, ffc, foundtime.c_str());
00221 
00222                 cout<<"\nloop_"<<nn<<" (ml:"<<missedleft<<", mr:"<<missedright<<") mu=";
00223                 cout<<ffc.mu<<"\t (N="<<N<<", dim="<<dim<<")"<<endl<<endl;
00224 
00225                 nn++;
00226         }while (nn<=at_least || ffc.mu.sdev()>mean_tolerance*ffc.mu.av());
00227 
00228         totaltime=clock()-totaltime;
00229         write_best_ff_line(bestresults_file,N,dim,GRIDSIZE, ffc, nn-1, missedleft, missedright, 
00230                                                 mm.min, mm.max, totaltime, foundtime.c_str());
00231         
00232         result_ffc=ffc; result_minmax=mm;
00233         // return-by-reference: ffc and result_minmax
00234         return true;
00235 }

int find_one_ff_with_criterion bool(*    criterion)(REAL, arguments1 &),
REAL    parameter,
REAL    left,
REAL    right,
REAL    tol,
sphere   spheres,
NUMLIST   L_sph,
string &    throwtime,
const char *    clusteranalysis_file,
measuredouble   one_ff,
clock_t &    brackettime
 

Definition at line 347 of file ff.h.

References bracket_ff(), getdim(), NUMBER, and REAL.

Referenced by find_mean_ff_with_criterion().

00350                                                                                                        {
00351 
00352         NUMBER N=L_sph.size();
00353         int dim=getdim(spheres[L_sph.front()]);
00354 
00355         REAL dummy=42;
00356         arguments1 arg(N,dim,spheres, &L_sph, dummy, &throwtime, clusteranalysis_file, parameter);
00357         measuredouble ff;
00358 
00359         brackettime=clock();
00360         int missed=bracket_ff(criterion, arg, left,right, tol, ff);
00361         brackettime=clock()-brackettime;
00362 
00363         if (missed==0) one_ff=ff;
00364         else one_ff=0;
00365         return missed;
00366 }

int find_one_ffc REAL    left,
REAL    right,
REAL    tol,
sphere   spheres,
NUMLIST   L_sph,
string &    throwtime,
const char *    clusteranalysis_file,
measuredouble   one_ffc,
clock_t &    brackettime
 

Definition at line 108 of file ff.h.

References bracket_ff(), getdim(), is_there_a_spanning_cluster(), NUMBER, and REAL.

Referenced by find_mean_ffc().

00110                                                                                                                 {
00111 
00112         NUMBER N=L_sph.size();
00113         int dim=getdim(spheres[L_sph.front()]);
00114 
00115         REAL dummy=42;
00116         arguments1 arg(N,dim,spheres, &L_sph, dummy, &throwtime, clusteranalysis_file, dummy);
00117         measuredouble ffc;
00118 
00119         brackettime=clock();
00120         int missed=bracket_ff(&is_there_a_spanning_cluster, arg, left,right, tol, ffc);
00121         brackettime=clock()-brackettime;
00122 
00123         if (missed==0) one_ffc=ffc;
00124         else one_ffc=0;
00125         return missed;
00126 }

fillingfactor_functions give_one_stepfunction int    num
 

Definition at line 641 of file ff.h.

References ff::fillingfactor_functions::fn, load_stepfunctions(), N_STEPFN, ff::fillingfactor_functions::name, and ff::fillingfactor_functions::theory.

Referenced by optimize::test_average_time_for_specified_cuts().

00641                                                       {
00642     fillingfactor_functions all_stepfns[N_STEPFN+1];
00643         load_stepfunctions(all_stepfns);
00644 
00645         fillingfactor_functions stepfn;
00646         stepfn.name=all_stepfns[num].name;
00647         stepfn.fn=all_stepfns[num].fn;
00648         stepfn.theory=all_stepfns[num].theory;
00649 
00650         return stepfn;
00651 }

bool is_the_biggestcluster_bigger_than_a_ratio REAL    ff,
arguments1   arg
 

Definition at line 581 of file ff.h.

References ff::arguments1::clusteranalysis_file, ff::arguments1::dim, give_radius(), GRIDSIZE, ff::arguments1::L_sph_numbers, ff::arguments1::N, ff::arguments1::parameter, REAL, counters::setR_count_analyze_step(), ff::arguments1::spheres, ff::arguments1::throwtime, and datafiles::write_one_result().

Referenced by load_stepfunctions().

00581                                                                         {
00582         REAL RaDIuS=give_radius(ff, arg.N, GRIDSIZE, arg.dim);
00583         one_result step;
00584         clock_t dummy1, dummy2;
00585         step= setR_count_analyze_step(arg.N, arg.dim, arg.spheres, 
00586                                           *(arg.L_sph_numbers), RaDIuS, *arg.throwtime, dummy1, dummy2);
00587         write_one_result(arg.clusteranalysis_file, ff, step, arg.N, arg.dim, GRIDSIZE);
00588 
00589         return (step.biggest_clsz > arg.N * arg.parameter);
00590 }

bool is_the_incl_meancluster_bigger_than_a_ratio REAL    ff,
arguments1   arg
 

Definition at line 595 of file ff.h.

References ff::arguments1::clusteranalysis_file, ff::arguments1::dim, give_radius(), GRIDSIZE, ff::arguments1::L_sph_numbers, ff::arguments1::N, ff::arguments1::parameter, REAL, counters::setR_count_analyze_step(), ff::arguments1::spheres, ff::arguments1::throwtime, and datafiles::write_one_result().

Referenced by load_stepfunctions().

00595                                                                           {
00596         REAL RaDIuS=give_radius(ff, arg.N, GRIDSIZE, arg.dim);
00597         one_result step;
00598         clock_t dummy1, dummy2;
00599         step= setR_count_analyze_step(arg.N, arg.dim, arg.spheres, 
00600                                           *(arg.L_sph_numbers), RaDIuS, *arg.throwtime, dummy1, dummy2);
00601         write_one_result(arg.clusteranalysis_file, ff, step, arg.N, arg.dim, GRIDSIZE);
00602 
00603         return (step.mean_clsz > arg.N * arg.parameter);
00604 }

bool is_the_numberofcl_smaller_than_a_ratio REAL    ff,
arguments1   arg
 

Definition at line 560 of file ff.h.

References ff::arguments1::clusteranalysis_file, ff::arguments1::dim, give_radius(), GRIDSIZE, ff::arguments1::L_sph_numbers, ff::arguments1::N, ff::arguments1::parameter, REAL, counters::setR_count_analyze_step(), ff::arguments1::spheres, ff::arguments1::throwtime, and datafiles::write_one_result().

Referenced by load_stepfunctions().

00560                                                                      {
00561         REAL RaDIuS=give_radius(ff, arg.N, GRIDSIZE, arg.dim);
00562         one_result step;
00563         clock_t dummy1, dummy2;
00564         step= setR_count_analyze_step(arg.N, arg.dim, arg.spheres, 
00565                                           *(arg.L_sph_numbers), RaDIuS, *arg.throwtime, dummy1, dummy2);
00566         write_one_result(arg.clusteranalysis_file, ff, step, arg.N, arg.dim, GRIDSIZE);
00567 
00568         return (step.numberof_cl < arg.N * arg.parameter);
00569 }

bool is_there_a_spanning_cluster REAL    ff,
arguments1   arg
 

Definition at line 59 of file ff.h.

References ff::arguments1::clusteranalysis_file, ff::arguments1::dim, give_radius(), GRIDSIZE, ff::arguments1::L_sph_numbers, ff::arguments1::N, REAL, counters::setR_count_analyze_step(), ff::arguments1::spheres, ff::arguments1::throwtime, and datafiles::write_one_result().

Referenced by find_one_ffc(), and load_stepfunctions().

00059                                                           {
00060         REAL RaDIuS=give_radius(ff, arg.N, GRIDSIZE, arg.dim);
00061         one_result step;
00062         clock_t dummy1, dummy2;
00063 
00064         step= setR_count_analyze_step(arg.N, arg.dim, arg.spheres, 
00065                                           *(arg.L_sph_numbers), RaDIuS, *arg.throwtime, dummy1, dummy2);
00066 
00067         write_one_result(arg.clusteranalysis_file, ff, step, arg.N, arg.dim, GRIDSIZE);
00068 
00069         return step.perc_lr();
00070 }

bool is_there_only_one_cluster REAL    ff,
arguments1   arg
 

Definition at line 544 of file ff.h.

References ff::arguments1::clusteranalysis_file, ff::arguments1::dim, give_radius(), GRIDSIZE, ff::arguments1::L_sph_numbers, ff::arguments1::N, REAL, counters::setR_count_analyze_step(), ff::arguments1::spheres, ff::arguments1::throwtime, and datafiles::write_one_result().

Referenced by load_stepfunctions().

00544                                                         {
00545         REAL RaDIuS=give_radius(ff, arg.N, GRIDSIZE, arg.dim);
00546         one_result step;
00547         clock_t dummy1, dummy2;
00548         step= setR_count_analyze_step(arg.N, arg.dim, arg.spheres, 
00549                                           *(arg.L_sph_numbers), RaDIuS, *arg.throwtime, dummy1, dummy2);
00550         write_one_result(arg.clusteranalysis_file, ff, step, arg.N, arg.dim, GRIDSIZE);
00551 
00552         return (step.numberof_cl == 1);
00553 }

void load_stepfunctions fillingfactor_functions   stepfn
 

Definition at line 619 of file ff.h.

References ff_all_in1clst_guessed(), ffbig_guessed(), ffmean1_guessed(), ffnoc_guessed(), ff::fillingfactor_functions::fn, is_the_biggestcluster_bigger_than_a_ratio(), is_the_incl_meancluster_bigger_than_a_ratio(), is_the_numberofcl_smaller_than_a_ratio(), is_there_a_spanning_cluster(), is_there_only_one_cluster(), ff::fillingfactor_functions::name, and ff::fillingfactor_functions::theory.

Referenced by find_ff_with_criterion_frontend(), give_one_stepfunction(), and commandline::start_subprg().

00619                                                         {
00620         stepfn[1].fn=&is_there_a_spanning_cluster;
00621         stepfn[1].name="ffc";
00622         stepfn[1].theory=&ff_critical_guessed;
00623 
00624         stepfn[2].fn=&is_there_only_one_cluster;
00625         stepfn[2].name="ff_allin1clst";
00626         stepfn[2].theory=&ff_all_in1clst_guessed;
00627 
00628         stepfn[3].fn=&is_the_numberofcl_smaller_than_a_ratio;
00629         stepfn[3].name="ff_noc";
00630         stepfn[3].theory=&ffnoc_guessed;
00631 
00632         stepfn[4].fn=&is_the_biggestcluster_bigger_than_a_ratio;
00633         stepfn[4].name="ff_biggest";
00634         stepfn[4].theory=&ffbig_guessed;
00635 
00636         stepfn[5].fn=&is_the_incl_meancluster_bigger_than_a_ratio;
00637         stepfn[5].name="ff_incl-mean";
00638         stepfn[5].theory=&ffmean1_guessed;
00639 }


Variable Documentation

const int ff::N_STEPFN = 5
 

Definition at line 617 of file ff.h.

Referenced by find_ff_with_criterion_frontend(), and give_one_stepfunction().




Diploma Thesis Sourcecode Documentation
check out the text and the executable binaries

www.AndreasKrueger.de/thesis/code