Changeset 622

Show
Ignore:
Timestamp:
09/16/09 22:52:57 (15 years ago)
Author:
smidl
Message:

astyle

Files:
7 modified

Legend:

Unmodified
Added
Removed
  • applications/bdmtoolbox/mex/estimator.cpp

    r611 r622  
    99        {rank="same"; "Data Source"; "Bayesian Model"} 
    1010        "Data Source" -> "Bayesian Model" [label="data"]; 
    11         "Bayesian Model" -> "Result Logger" [label="estimated\n statistics"];  
     11        "Bayesian Model" -> "Result Logger" [label="estimated\n statistics"]; 
    1212        "Data Source" -> "Result Logger" [label="Simulated\n data"]; 
    1313} 
    1414\enddot 
    1515 
    16 Here,  
     16Here, 
    1717\li Data Source is an object (class DS) providing sequential data, \f$ [d_1, d_2, \ldots d_t] \f$. 
    1818\li Bayesian Model is an object (class BM) performing Bayesian filtering, 
     
    6565void mexFunction ( int n_output, mxArray *output[], int n_input, const mxArray *input[] ) { 
    6666        // Check the number of inputs and output arguments 
    67         if(n_input<2) mexErrMsgTxt("Usage:\n"   
    68                 "result=estimator(system, estimators, experiment, logger)\n" 
    69                 "  system     = struct('class','datasource',...);  % Estimated system\n" 
    70                 "  estimators = {struct('class','estimator',...),  % Estimators\n" 
    71                 "                struct('class','estimator',...),...} \n" 
    72                 "  === optional ===" 
    73                 "  experiment = struct('ndat',10);                 % number of data in experiment, full length of finite datasources, 10 otherwise \n" 
    74                 "  logger     = struct('class','mexlogger');       % How to store results, default=mexlog, i.e. matlab structure\n\n" 
    75                 "see documentation of classes datasource, BM, and mexlogger and their offsprings in BDM."); 
    76          
     67        if ( n_input<2 ) mexErrMsgTxt ( "Usage:\n" 
     68                                                "result=estimator(system, estimators, experiment, logger)\n" 
     69                                                "  system     = struct('class','datasource',...);  % Estimated system\n" 
     70                                                "  estimators = {struct('class','estimator',...),  % Estimators\n" 
     71                                                "                struct('class','estimator',...),...} \n" 
     72                                                "  === optional ===" 
     73                                                "  experiment = struct('ndat',10);                 % number of data in experiment, full length of finite datasources, 10 otherwise \n" 
     74                                                "  logger     = struct('class','mexlogger');       % How to store results, default=mexlog, i.e. matlab structure\n\n" 
     75                                                "see documentation of classes datasource, BM, and mexlogger and their offsprings in BDM." ); 
     76 
    7777        RV::clear_all(); 
    78         //CONFIG  
     78        //CONFIG 
    7979        UImxArray Cfg; 
    80         try{ 
    81         Cfg.addGroup(input[0],"system"); 
    82         Cfg.addList(input[1],"estimators"); 
    83         if (n_input>2){ 
    84                 Cfg.addGroup(input[2],"experiment"); 
    85         } 
    86         if (n_input>3){ 
    87                 Cfg.addGroup(input[3],"logger"); 
    88         }/*else{ 
     80        try { 
     81                Cfg.addGroup ( input[0],"system" ); 
     82                Cfg.addList ( input[1],"estimators" ); 
     83                if ( n_input>2 ) { 
     84                        Cfg.addGroup ( input[2],"experiment" ); 
     85                } 
     86                if ( n_input>3 ) { 
     87                        Cfg.addGroup ( input[3],"logger" ); 
     88                }/*else{ 
    8989                // define logger as mexlog 
    9090                Setting &S=Cfg.getRoot(); 
     
    9797                S["logger"]["maxlen"]=maxlen; 
    9898        }*/ 
    99         } catch(SettingException e){it_error("error: "+string(e.getPath()));} 
     99        } catch ( SettingException e ) { 
     100                it_error ( "error: "+string ( e.getPath() ) ); 
     101        } 
    100102 
    101103        //DBG 
    102         Cfg.writeFile("estimator.cfg"); 
     104        Cfg.writeFile ( "estimator.cfg" ); 
    103105 
    104106#else 
     
    112114        UIFile Cfg ( fname ); 
    113115#endif 
    114          
    115         shared_ptr<DS> Ds = UI::build<DS>( Cfg, "system" ); 
    116         Array<shared_ptr<BM> > Es;      UI::get(Es,Cfg, "estimators" ); 
     116 
     117        shared_ptr<DS> Ds = UI::build<DS> ( Cfg, "system" ); 
     118        Array<shared_ptr<BM> > Es; 
     119        UI::get ( Es,Cfg, "estimators" ); 
    117120        long Ndat=10; 
    118         if (Cfg.exists("experiment")) { 
    119                 if (Cfg.lookupValue ( "experiment.ndat",Ndat )) { 
    120                         bdm_assert(Ndat<=Ds->max_length(), "Data source has less data then required"); 
     121        if ( Cfg.exists ( "experiment" ) ) { 
     122                if ( Cfg.lookupValue ( "experiment.ndat",Ndat ) ) { 
     123                        bdm_assert ( Ndat<=Ds->max_length(), "Data source has less data then required" ); 
    121124                }; 
    122125        } else { 
    123                 if (Ds->max_length() < inf) { 
     126                if ( Ds->max_length() < inf ) { 
    124127                        Ndat=Ds->max_length(); 
    125                 };// else Ndat=10; 
     128                } 
     129                ;// else Ndat=10; 
    126130        } 
    127         shared_ptr<logger> L = UI::build<logger>( Cfg, "logger",UI::optional); 
    128         if (!L) { 
    129                 #ifdef MEX 
     131        shared_ptr<logger> L = UI::build<logger> ( Cfg, "logger",UI::optional ); 
     132        if ( !L ) { 
     133#ifdef MEX 
    130134                //mex logger has only from_setting constructor - we  have to fill it... 
    131                 L=new mexlog(Ndat); 
    132                 #else 
     135                L=new mexlog ( Ndat ); 
     136#else 
    133137                L=new stdlog(); 
    134                 #endif 
     138#endif 
    135139        } 
    136          
     140 
    137141        Ds->log_add ( *L ); 
    138142        string Ename; 
    139143        Setting &S=Cfg; 
    140         for (int i=0; i<Es.length(); i++){ 
    141                 try{ 
    142                         UI::get(Ename, S["estimators"][i], "name"); 
    143                 } catch (UIException e){ 
    144                         Ename="Est"+num2str(i); 
     144        for ( int i=0; i<Es.length(); i++ ) { 
     145                try { 
     146                        UI::get ( Ename, S["estimators"][i], "name" ); 
     147                } catch ( UIException e ) { 
     148                        Ename="Est"+num2str ( i ); 
    145149                } 
    146                  
    147                 Es(i)->log_add(*L,Ename); // estimate 
     150 
     151                Es ( i )->log_add ( *L,Ename ); // estimate 
    148152        } 
    149                 L->init(); 
     153        L->init(); 
    150154 
    151155        vec dt=zeros ( Ds->_drv()._dsize() );   //data variable 
    152         Array<datalink*> Dls(Es.length());  
    153         for (int i=0; i<Es.length(); i++){ 
    154                 Dls(i)=new datalink( Es(i)->_drv(),Ds->_drv() ); //datalink between a datasource and estimator 
     156        Array<datalink*> Dls ( Es.length() ); 
     157        for ( int i=0; i<Es.length(); i++ ) { 
     158                Dls ( i ) =new datalink ( Es ( i )->_drv(),Ds->_drv() ); //datalink between a datasource and estimator 
    155159        } 
    156          
     160 
    157161        for ( int tK=0;tK<Ndat;tK++ ) { 
    158162                Ds->getdata ( dt );                                     // read data 
    159163                Ds->logit ( *L ); 
    160                  
    161                 for (int i=0; i<Es.length(); i++){ 
    162                         Es(i)->bayes ( Dls(i)->pushdown ( dt ) );               // update estimates 
    163                         Es(i)->logit (*L); 
     164 
     165                for ( int i=0; i<Es.length(); i++ ) { 
     166                        Es ( i )->bayes ( Dls ( i )->pushdown ( dt ) );         // update estimates 
     167                        Es ( i )->logit ( *L ); 
    164168                } 
    165169                L->step(); 
     
    171175 
    172176#ifdef MEX 
    173         mexlog* mL=dynamic_cast<mexlog*>(L.get()); 
     177        mexlog* mL=dynamic_cast<mexlog*> ( L.get() ); 
    174178 
    175         if (mL) { // user wants output!! 
     179        if ( mL ) { // user wants output!! 
    176180                if ( n_output<1 ) mexErrMsgTxt ( "Wrong number of output variables!" ); 
    177181                output[0] = mL->toCell(); 
  • applications/bdmtoolbox/mex/merger.cpp

    r569 r622  
    2929 
    3030#ifdef MEX 
    31 void mexFunction (int n_output, mxArray *output[], int n_input, const mxArray *input[]) 
    32 { 
     31void mexFunction ( int n_output, mxArray *output[], int n_input, const mxArray *input[] ) { 
    3332        // Check the number of inputs and output arguments 
    34         if (n_input != 3) mexErrMsgTxt ("Usage:\n" 
    35                                             "result=merger(sources, support, merger)\n" 
    36                                             "  sources= { struct('class','epdf'),... };  % cell of pdfs (epdfs or mpdfs) to be merged,\n" 
    37                                             "  support= struct(\n" 
    38                                             "           grid    = {[dim1_start,dim1_end], [dim2_start, dim2_end]...}  %support boundary \n" 
    39                                             "           nbins   = [bins_in_dim1, bins_in_dim2,...]                    %fixed \n" 
    40                                             "         === OR ==\n" 
    41                                             "           pdf     = struct('class','epdf'); % pdf to draw samples from\n" 
    42                                             "           nsamples= 100;                    % number of samples\n" 
    43                                             "           );\n" 
    44                                             "        If all elements are present,  (grid,nbins) is used;\n" 
    45                                             "  merger = struct('class','merger_*');       % object to be used for merging,\n\n" 
    46                                             "see documentation of classes epdf, mpdf, merger_base and their offsprings in BDM."); 
     33        if ( n_input != 3 ) mexErrMsgTxt ( "Usage:\n" 
     34                                                   "result=merger(sources, support, merger)\n" 
     35                                                   "  sources= { struct('class','epdf'),... };  % cell of pdfs (epdfs or mpdfs) to be merged,\n" 
     36                                                   "  support= struct(\n" 
     37                                                   "           grid    = {[dim1_start,dim1_end], [dim2_start, dim2_end]...}  %support boundary \n" 
     38                                                   "           nbins   = [bins_in_dim1, bins_in_dim2,...]                    %fixed \n" 
     39                                                   "         === OR ==\n" 
     40                                                   "           pdf     = struct('class','epdf'); % pdf to draw samples from\n" 
     41                                                   "           nsamples= 100;                    % number of samples\n" 
     42                                                   "           );\n" 
     43                                                   "        If all elements are present,  (grid,nbins) is used;\n" 
     44                                                   "  merger = struct('class','merger_*');       % object to be used for merging,\n\n" 
     45                                                   "see documentation of classes epdf, mpdf, merger_base and their offsprings in BDM." ); 
    4746        RV::clear_all(); 
    4847        // LOAD CONFIG 
    4948        UImxArray Cfg; 
    50         Cfg.addList (input[0], "Sources"); 
    51         Cfg.addGroup (input[1], "Support"); 
    52         Cfg.addGroup (input[2], "Merger"); 
     49        Cfg.addList ( input[0], "Sources" ); 
     50        Cfg.addGroup ( input[1], "Support" ); 
     51        Cfg.addGroup ( input[2], "Merger" ); 
    5352 
    5453        //DBG 
    55         Cfg.writeFile ("merger.cfg"); 
     54        Cfg.writeFile ( "merger.cfg" ); 
    5655#else 
    5756int main() { 
    58         UIFile Cfg ("merger.cfg"); 
     57        UIFile Cfg ( "merger.cfg" ); 
    5958#endif 
    6059        // Sources 
    6160        Array<shared_ptr<mpdf> > Sources; 
    6261        //abuse Mer to store sources 
    63         Setting& _Sources = Cfg.lookup ("Sources"); 
     62        Setting& _Sources = Cfg.lookup ( "Sources" ); 
    6463        int Slen = _Sources.getLength(); 
    65         Sources.set_size (Slen); 
    66         for (int i = 0; i < Slen; i++) { 
     64        Sources.set_size ( Slen ); 
     65        for ( int i = 0; i < Slen; i++ ) { 
    6766                try { 
    68                         shared_ptr<mpdf> mtmp = UI::build<mpdf> (_Sources, i); 
    69                         Sources (i) = mtmp; 
    70                 } catch (UIException) { 
     67                        shared_ptr<mpdf> mtmp = UI::build<mpdf> ( _Sources, i ); 
     68                        Sources ( i ) = mtmp; 
     69                } catch ( UIException ) { 
    7170                        // it is not mpdf - see if it is epdf 
    7271                        try { 
    73                                 shared_ptr<epdf> etmp = UI::build<epdf> (_Sources, i); 
    74                                 if (etmp) { 
    75                                         Sources (i) = new mepdf (etmp); // hopefully OK 
     72                                shared_ptr<epdf> etmp = UI::build<epdf> ( _Sources, i ); 
     73                                if ( etmp ) { 
     74                                        Sources ( i ) = new mepdf ( etmp ); // hopefully OK 
    7675                                } 
    77                         } catch (UIException &e) { 
    78                                 it_error ("No mpdfs or epdfs found! " + string (e.what())); 
    79                         } catch (std::exception e) { 
    80                                 it_error ("Error in UI at " + _Sources[i].getPath()); 
     76                        } catch ( UIException &e ) { 
     77                                it_error ( "No mpdfs or epdfs found! " + string ( e.what() ) ); 
     78                        } catch ( std::exception e ) { 
     79                                it_error ( "Error in UI at " + _Sources[i].getPath() ); 
    8180                        } 
    82                 } catch (std::exception &e) { 
    83                         it_error ("Error in UI at " + _Sources[i].getPath()); 
     81                } catch ( std::exception &e ) { 
     82                        it_error ( "Error in UI at " + _Sources[i].getPath() ); 
    8483                } 
    8584        } 
    8685 
    87         shared_ptr<merger_base> Merger = UI::build<merger_base> (Cfg, "Merger"); 
     86        shared_ptr<merger_base> Merger = UI::build<merger_base> ( Cfg, "Merger" ); 
    8887 
    8988        // Support 
    9089        try { 
    91                 shared_ptr<rectangular_support> RecSup = UI::build<rectangular_support> (Cfg, "Support"); 
    92                 Merger->set_support(*RecSup); 
    93         } 
    94         catch (UIException &e) { 
    95                 shared_ptr<discrete_support> DisSup = UI::build<discrete_support> (Cfg, "Support"); 
    96                 Merger->set_support (*DisSup); 
     90                shared_ptr<rectangular_support> RecSup = UI::build<rectangular_support> ( Cfg, "Support" ); 
     91                Merger->set_support ( *RecSup ); 
     92        } catch ( UIException &e ) { 
     93                shared_ptr<discrete_support> DisSup = UI::build<discrete_support> ( Cfg, "Support" ); 
     94                Merger->set_support ( *DisSup ); 
    9795        } 
    9896// COMPUTE RESULTS 
    99         Merger->set_sources (Sources);  
     97        Merger->set_sources ( Sources ); 
    10098        Merger->merge(); 
    10199 
    102100// save results 
    103         Array<vec> source_vals (Sources.length()); 
    104         for (int i = 0;i < Sources.length();i++) { 
     101        Array<vec> source_vals ( Sources.length() ); 
     102        for ( int i = 0;i < Sources.length();i++ ) { 
    105103                datalink_m2e dl; 
    106                 dl.set_connection (Sources (i)->_rv(), Sources (i)->_rvc(), Merger->_rv()); 
     104                dl.set_connection ( Sources ( i )->_rv(), Sources ( i )->_rvc(), Merger->_rv() ); 
    107105 
    108                 vec ll (Merger->_Smp()._samples().length()); 
    109                 for (int j = 0; j < Merger->_Smp()._samples().length(); j++) { 
    110                         vec dt = dl.pushdown (Merger->_Smp()._samples() (j)); 
    111                         vec dtc = dl.get_cond (Merger->_Smp()._samples() (j)); 
    112                         ll (j) = Sources (i)->evallogcond (dt, dtc); 
     106                vec ll ( Merger->_Smp()._samples().length() ); 
     107                for ( int j = 0; j < Merger->_Smp()._samples().length(); j++ ) { 
     108                        vec dt = dl.pushdown ( Merger->_Smp()._samples() ( j ) ); 
     109                        vec dtc = dl.get_cond ( Merger->_Smp()._samples() ( j ) ); 
     110                        ll ( j ) = Sources ( i )->evallogcond ( dt, dtc ); 
    113111                } 
    114112 
    115                 vec sll = exp (ll); 
     113                vec sll = exp ( ll ); 
    116114 
    117                 source_vals (i) = sll / sum (sll); 
     115                source_vals ( i ) = sll / sum ( sll ); 
    118116        } 
    119117 
    120         merger_mix* MerMix=dynamic_cast<merger_mix*>(Merger.get()); 
     118        merger_mix* MerMix=dynamic_cast<merger_mix*> ( Merger.get() ); 
    121119        vec mix_val; 
    122                          
    123         if (MerMix){ 
    124                 vec ll (Merger->_Smp()._samples().length()); 
    125                 for (int j = 0; j < Merger->_Smp()._samples().length(); j++) { 
    126                         ll (j) = Merger->evallog (Merger->_Smp()._samples() (j)); 
     120 
     121        if ( MerMix ) { 
     122                vec ll ( Merger->_Smp()._samples().length() ); 
     123                for ( int j = 0; j < Merger->_Smp()._samples().length(); j++ ) { 
     124                        ll ( j ) = Merger->evallog ( Merger->_Smp()._samples() ( j ) ); 
    127125                } 
    128          
    129                 vec sll = exp (ll); 
    130          
    131                 mix_val = sll / sum (sll); 
     126 
     127                vec sll = exp ( ll ); 
     128 
     129                mix_val = sll / sum ( sll ); 
    132130        } 
    133131 
     
    135133        mxArray* tmp ; 
    136134        // Save results 
    137         if (n_output > 0) { 
    138                 tmp = mxCreateStructMatrix (1, 1, 0, NULL); 
     135        if ( n_output > 0 ) { 
     136                tmp = mxCreateStructMatrix ( 1, 1, 0, NULL ); 
    139137                //support 
    140138                Array<vec> &samples = Merger->_Smp()._samples(); 
    141                 if (samples.size() > 0) { 
    142                         mxArray* fld = mxCreateDoubleMatrix (samples (0).length(), samples.size(), mxREAL); 
    143                         Arrayvec2mxArray (samples, fld); 
    144                         mxReplaceFieldNM (tmp, "support", fld); 
     139                if ( samples.size() > 0 ) { 
     140                        mxArray* fld = mxCreateDoubleMatrix ( samples ( 0 ).length(), samples.size(), mxREAL ); 
     141                        Arrayvec2mxArray ( samples, fld ); 
     142                        mxReplaceFieldNM ( tmp, "support", fld ); 
    145143                } 
    146144 
    147145                //weights 
    148146                vec &w = Merger->_Smp()._w(); 
    149                 mxArray* fldw = mxCreateDoubleMatrix (1, w.length(), mxREAL); 
    150                 vec2mxArray (w, fldw); 
    151                 mxReplaceFieldNM (tmp, "weights", fldw); 
     147                mxArray* fldw = mxCreateDoubleMatrix ( 1, w.length(), mxREAL ); 
     148                vec2mxArray ( w, fldw ); 
     149                mxReplaceFieldNM ( tmp, "weights", fldw ); 
    152150 
    153151                //mixture values 
    154                 if (mix_val.length()>0){ 
    155                         mxArray* fldm = mxCreateDoubleMatrix (1, w.length(), mxREAL); 
    156                         vec2mxArray (mix_val, fldm); 
    157                         mxReplaceFieldNM (tmp, "mix", fldm); 
     152                if ( mix_val.length() >0 ) { 
     153                        mxArray* fldm = mxCreateDoubleMatrix ( 1, w.length(), mxREAL ); 
     154                        vec2mxArray ( mix_val, fldm ); 
     155                        mxReplaceFieldNM ( tmp, "mix", fldm ); 
    158156                } 
    159157                // sources 
    160158                char srcstr[20]; 
    161                 for (int i = 0;i < Sources.length();i++) { 
    162                         sprintf (srcstr, "source%d", i + 1); 
    163                         mxArray* fldw = mxCreateDoubleMatrix (1, source_vals (i).length(), mxREAL); 
    164                         vec2mxArray (source_vals (i), fldw); 
    165                         mxReplaceFieldNM (tmp, srcstr, fldw); 
     159                for ( int i = 0;i < Sources.length();i++ ) { 
     160                        sprintf ( srcstr, "source%d", i + 1 ); 
     161                        mxArray* fldw = mxCreateDoubleMatrix ( 1, source_vals ( i ).length(), mxREAL ); 
     162                        vec2mxArray ( source_vals ( i ), fldw ); 
     163                        mxReplaceFieldNM ( tmp, srcstr, fldw ); 
    166164                } 
    167165 
  • applications/bdmtoolbox/mex/mxstruct2config.cpp

    r391 r622  
    22 
    33void mexFunction ( int n_output, mxArray *output[], int n_input, const mxArray *input[] ) { 
    4         UImxArray F (input[0]); 
    5         string filename = mxArray2string(input[1]); 
    6         F.writeFile(filename.c_str()); 
     4        UImxArray F ( input[0] ); 
     5        string filename = mxArray2string ( input[1] ); 
     6        F.writeFile ( filename.c_str() ); 
    77} 
  • applications/bdmtoolbox/mex/simulator.cpp

    r617 r622  
    1212\enddot 
    1313 
    14 Here,  
     14Here, 
    1515\li Data Source is an object (class DS) providing sequential data, \f$ [d_1, d_2, \ldots d_t] \f$. 
    1616\li Result Logger is an object (class logger) dedicated to storing important data from the experiment. 
     
    5656void mexFunction ( int n_output, mxArray *output[], int n_input, const mxArray *input[] ) { 
    5757        // Check the number of inputs and output arguments 
    58         if(n_input<1) mexErrMsgTxt("Usage:\n"   
    59                 "result=simulator(system,  experiment, logger)\n" 
    60                 "  system     = struct('class','datasource',...);  % Estimated system\n" 
    61                 "  === optional ===" 
    62                 "  experiment = struct('ndat',10);                 % number of data in experiment, full length of finite datasources, 10 otherwise \n" 
    63                 "  logger     = struct('class','mexlogger');       % How to store results, default=mexlog, i.e. matlab structure\n\n" 
    64                 "see documentation of classes datasource and mexlogger and their offsprings in BDM."); 
    65          
     58        if ( n_input<1 ) mexErrMsgTxt ( "Usage:\n" 
     59                                                "result=simulator(system,  experiment, logger)\n" 
     60                                                "  system     = struct('class','datasource',...);  % Estimated system\n" 
     61                                                "  === optional ===" 
     62                                                "  experiment = struct('ndat',10);                 % number of data in experiment, full length of finite datasources, 10 otherwise \n" 
     63                                                "  logger     = struct('class','mexlogger');       % How to store results, default=mexlog, i.e. matlab structure\n\n" 
     64                                                "see documentation of classes datasource and mexlogger and their offsprings in BDM." ); 
     65 
    6666        RV::clear_all(); 
    67         //CONFIG  
     67        //CONFIG 
    6868        UImxArray Cfg; 
    69         try{ 
    70         Cfg.addGroup(input[0],"system"); 
    71         if (n_input>2){ 
    72                 Cfg.addGroup(input[1],"experiment"); 
    73         } 
    74         if (n_input>3){ 
    75                 Cfg.addGroup(input[2],"logger"); 
    76         }/*else{ 
     69        try { 
     70                Cfg.addGroup ( input[0],"system" ); 
     71                if ( n_input>2 ) { 
     72                        Cfg.addGroup ( input[1],"experiment" ); 
     73                } 
     74                if ( n_input>3 ) { 
     75                        Cfg.addGroup ( input[2],"logger" ); 
     76                }/*else{ 
    7777                // define logger as mexlog 
    7878                Setting &S=Cfg.getRoot(); 
     
    8585                S["logger"]["maxlen"]=maxlen; 
    8686        }*/ 
    87         } catch(SettingException e){it_error("error: "+string(e.getPath()));} 
     87        } catch ( SettingException e ) { 
     88                it_error ( "error: "+string ( e.getPath() ) ); 
     89        } 
    8890 
    8991        //DBG 
    90         Cfg.writeFile("simulator.cfg"); 
     92        Cfg.writeFile ( "simulator.cfg" ); 
    9193 
    9294#else 
     
    100102        UIFile Cfg ( fname ); 
    101103#endif 
    102          
    103         shared_ptr<DS> Ds = UI::build<DS>( Cfg, "system" ); 
     104 
     105        shared_ptr<DS> Ds = UI::build<DS> ( Cfg, "system" ); 
    104106        long Ndat=10; 
    105         if (Cfg.exists("experiment")) { 
    106                 if (Cfg.lookupValue ( "experiment.ndat",Ndat )) { 
    107                         bdm_assert(Ndat<=Ds->max_length(), "Data source has less data then required"); 
     107        if ( Cfg.exists ( "experiment" ) ) { 
     108                if ( Cfg.lookupValue ( "experiment.ndat",Ndat ) ) { 
     109                        bdm_assert ( Ndat<=Ds->max_length(), "Data source has less data then required" ); 
    108110                }; 
    109111        } else { 
    110                 if (Ds->max_length() < std::numeric_limits< int >::max()) { 
     112                if ( Ds->max_length() < std::numeric_limits< int >::max() ) { 
    111113                        Ndat=Ds->max_length(); 
    112                 };// else Ndat=10; 
     114                } 
     115                ;// else Ndat=10; 
    113116        } 
    114         shared_ptr<logger> L = UI::build<logger>( Cfg, "logger",UI::optional); 
    115         if (!L) { 
    116                 #ifdef MEX 
     117        shared_ptr<logger> L = UI::build<logger> ( Cfg, "logger",UI::optional ); 
     118        if ( !L ) { 
     119#ifdef MEX 
    117120                //mex logger has only from_setting constructor - we  have to fill it... 
    118                 L=new mexlog(Ndat); 
    119                 #else 
     121                L=new mexlog ( Ndat ); 
     122#else 
    120123                L=new stdlog(); 
    121                 #endif 
     124#endif 
    122125        } 
    123          
     126 
    124127        Ds->log_add ( *L ); 
    125128        L->init(); 
     
    130133                Ds->getdata ( dt );                                     // read data 
    131134                Ds->logit ( *L ); 
    132                  
     135 
    133136                L->step(); 
    134137                Ds->step();                                                     // simulator step 
     
    139142 
    140143#ifdef MEX 
    141         mexlog* mL=dynamic_cast<mexlog*>(L.get()); 
     144        mexlog* mL=dynamic_cast<mexlog*> ( L.get() ); 
    142145 
    143         if (mL) { // user wants output!! 
     146        if ( mL ) { // user wants output!! 
    144147                if ( n_output<1 ) mexErrMsgTxt ( "Wrong number of output variables!" ); 
    145148                output[0] = mL->toCell(); 
  • applications/bdmtoolbox/tutorial/arx_mex_test.cfg

    r568 r622  
    11//Data generating system 
    2 system = { type="external"; filename="arx_test.cfg"; path="system";}; 
     2system = { type="external"; 
     3           filename="arx_test.cfg"; 
     4           path="system"; 
     5         }; 
    36 
    47//store results 
     
    69        type= "mexlog"; 
    710        maxlen = 90; // 
    8     //dirname = "exp/ax"; 
     11        //dirname = "exp/ax"; 
    912}; 
    1013 
    1114//estimation 
    1215estimator = { 
    13    type = "ARX"; 
    14         y = {type="RV"; names=("y"); }; 
     16        type = "ARX"; 
     17        y = {type="RV"; 
     18             names= ( "y" ); 
     19            }; 
    1520        rgr = {type="RV"; 
    16                 names = ("y","y","y","u"); 
    17                 times = [-1, -2, -3, -1]; 
    18         }; 
     21               names = ( "y","y","y","u" ); 
     22               times = [-1, -2, -3, -1]; 
     23              }; 
    1924 
    2025        //optional fields 
    21         dV0 = matrix(5,1,[1e-3, 1e-5, 1e-5, 1e-5, 1e-5]); //default: 1e-3 for y, 1e-5 for rgr 
     26        dV0 = matrix ( 5,1,[1e-3, 1e-5, 1e-5, 1e-5, 1e-5] ); //default: 1e-3 for y, 1e-5 for rgr 
    2227        //nu0 = 8.;      //default: rgrlen + 2 
    2328        frg = .9991;    // forgetting, default frg=1.0 
     
    2530 
    2631//experiment description 
    27 experiment:{ 
     32experiment: { 
    2833        ndat = 90; 
    2934}; 
  • applications/bdmtoolbox/tutorial/arx_test.cfg

    r357 r622  
    22system = { 
    33        class = "ArxDS"; 
    4         y = {class="RV"; names=("y", "u");}; 
    5         u = {class="RV"; names=(); }; 
     4        y = {class="RV"; 
     5             names= ( "y", "u" ); 
     6            }; 
     7        u = {class="RV"; 
     8             names=(); 
     9            }; 
    610        rgr = {class="RV"; 
    7                 names = ("y","y","y","u"); 
    8                 times = [-1, -2, -3, -1]; 
    9         }; 
     11               names = ( "y","y","y","u" ); 
     12               times = [-1, -2, -3, -1]; 
     13              }; 
    1014        //AR parameters 
    11         theta = (2,4,[0.8, -0.3, 0.4, 1.0, 
    12                       0.0, 0.0, 0.0, 0.0]); 
     15        theta = ( 2,4,[0.8, -0.3, 0.4, 1.0, 
     16                       0.0, 0.0, 0.0, 0.0] ); 
    1317        // offset 
    1418        offset = [0.0, 0.0]; 
    1519        //variance 
    16         r = (2,2,[0.1, 0.0, 
    17                  0.0, 1.0] ); 
     20        r = ( 2,2,[0.1, 0.0, 
     21                   0.0, 1.0] ); 
    1822        // log also theta 
    1923        opt="L_theta"; 
     
    3034estimator = { 
    3135        class = "ARX"; 
    32         y = {class="RV"; names=("y"); }; 
     36        y = {class="RV"; 
     37             names= ( "y" ); 
     38            }; 
    3339        rgr = {class="RV"; 
    34                 names = ("y","y","y","u"); 
    35                 times = [-1, -2, -3, -1]; 
    36         }; 
     40               names = ( "y","y","y","u" ); 
     41               times = [-1, -2, -3, -1]; 
     42              }; 
    3743 
    3844        //optional fields 
     
    4349 
    4450//experiment description 
    45 experiment:{ 
     51experiment: { 
    4652        ndat = 9000; 
    4753}; 
  • library/bdm/itpp_ext.cpp

    r587 r622  
    1818// from  algebra/lapack.h 
    1919 
    20 extern "C" {  /* QR factorization of a general matrix A  */ 
    21         void dgeqrf_ ( int *m, int *n, double *a, int *lda, double *tau, double *work, 
    22         int *lwork, int *info ); 
     20extern "C"    /* QR factorization of a general matrix A  */ 
     21{ 
     22        void dgeqrf_ (int *m, int *n, double *a, int *lda, double *tau, double *work, 
     23                      int *lwork, int *info); 
    2324}; 
    2425 
    25 namespace itpp { 
    26 Array<int> to_Arr ( const ivec &indices ) { 
    27         Array<int> a ( indices.size() ); 
    28         for ( int i = 0; i < a.size(); i++ ) { 
    29                 a ( i ) = indices ( i ); 
     26namespace itpp 
     27{ 
     28Array<int> to_Arr (const ivec &indices) 
     29{ 
     30        Array<int> a (indices.size()); 
     31        for (int i = 0; i < a.size(); i++) { 
     32                a (i) = indices (i); 
    3033        } 
    3134        return a; 
    3235} 
    3336 
    34 ivec linspace ( int from, int to ) { 
     37ivec linspace (int from, int to) 
     38{ 
    3539        int n = to - from + 1; 
    3640        int i; 
    37         it_assert_debug ( n > 0, "wrong linspace" ); 
    38         ivec iv ( n ); 
    39         for ( i = 0; i < n; i++ ) iv ( i ) = from + i; 
     41        it_assert_debug (n > 0, "wrong linspace"); 
     42        ivec iv (n); 
     43        for (i = 0; i < n; i++) iv (i) = from + i; 
    4044        return iv; 
    4145}; 
    4246 
    43 void set_subvector ( vec &ov, const ivec &iv, const vec &v ) { 
    44         it_assert_debug ( ( iv.length() <= v.length() ), 
     47void set_subvector (vec &ov, const ivec &iv, const vec &v) 
     48{ 
     49        it_assert_debug ( (iv.length() <= v.length()), 
    4550                          "Vec<>::set_subvector(ivec, vec<Num_T>): Indexing out " 
    46                           "of range of v" ); 
    47         for ( int i = 0; i < iv.length(); i++ ) { 
    48                 it_assert_debug ( iv ( i ) < ov.length(), 
    49                                   "Vec<>::set_subvector(ivec, vec<Num_T>): Indexing out " 
    50                                   "of range of v" ); 
    51                 ov ( iv ( i ) ) = v ( i ); 
    52         } 
    53 } 
    54  
    55 vec get_vec ( const vec &v, const ivec &indexlist ) { 
     51                          "of range of v"); 
     52        for (int i = 0; i < iv.length(); i++) { 
     53                it_assert_debug (iv (i) < ov.length(), 
     54                                 "Vec<>::set_subvector(ivec, vec<Num_T>): Indexing out " 
     55                                 "of range of v"); 
     56                ov (iv (i)) = v (i); 
     57        } 
     58} 
     59 
     60vec get_vec (const vec &v, const ivec &indexlist) 
     61{ 
    5662        int size = indexlist.size(); 
    57         vec temp ( size ); 
    58         for ( int i = 0; i < size; ++i ) { 
    59                 temp ( i ) = v._data() [indexlist ( i ) ]; 
     63        vec temp (size); 
     64        for (int i = 0; i < size; ++i) { 
     65                temp (i) = v._data() [indexlist (i) ]; 
    6066        } 
    6167        return temp; 
     
    6874#define R_FINITE std::isfinite 
    6975 
    70 bvec operator> ( const vec &t1, const vec &t2 ) { 
    71         it_assert_debug ( t1.length() == t2.length(), "Vec<>::operator>(): different size of vectors" ); 
    72         bvec temp ( t1.length() ); 
    73         for ( int i = 0; i < t1.length(); i++ ) 
    74                 temp ( i ) = ( t1[i] > t2[i] ); 
     76bvec operator> (const vec &t1, const vec &t2) 
     77{ 
     78        it_assert_debug (t1.length() == t2.length(), "Vec<>::operator>(): different size of vectors"); 
     79        bvec temp (t1.length()); 
     80        for (int i = 0; i < t1.length(); i++) 
     81                temp (i) = (t1[i] > t2[i]); 
    7582        return temp; 
    7683} 
    7784 
    78 bvec operator< ( const vec &t1, const vec &t2 ) { 
    79         it_assert_debug ( t1.length() == t2.length(), "Vec<>::operator>(): different size of vectors" ); 
    80         bvec temp ( t1.length() ); 
    81         for ( int i = 0; i < t1.length(); i++ ) 
    82                 temp ( i ) = ( t1[i] < t2[i] ); 
     85bvec operator< (const vec &t1, const vec &t2) 
     86{ 
     87        it_assert_debug (t1.length() == t2.length(), "Vec<>::operator>(): different size of vectors"); 
     88        bvec temp (t1.length()); 
     89        for (int i = 0; i < t1.length(); i++) 
     90                temp (i) = (t1[i] < t2[i]); 
    8391        return temp; 
    8492} 
    8593 
    8694 
    87 bvec operator& ( const bvec &a, const bvec &b ) { 
    88         it_assert_debug ( b.size() == a.size(), "operator&(): Vectors of different lengths" ); 
    89  
    90         bvec temp ( a.size() ); 
    91         for ( int i = 0; i < a.size(); i++ ) { 
    92                 temp ( i ) = a ( i ) & b ( i ); 
     95bvec operator& (const bvec &a, const bvec &b) 
     96{ 
     97        it_assert_debug (b.size() == a.size(), "operator&(): Vectors of different lengths"); 
     98 
     99        bvec temp (a.size()); 
     100        for (int i = 0; i < a.size(); i++) { 
     101                temp (i) = a (i) & b (i); 
    93102        } 
    94103        return temp; 
    95104} 
    96105 
    97 bvec operator| ( const bvec &a, const bvec &b ) { 
    98         it_assert_debug ( b.size() != a.size(), "operator&(): Vectors of different lengths" ); 
    99  
    100         bvec temp ( a.size() ); 
    101         for ( int i = 0; i < a.size(); i++ ) { 
    102                 temp ( i ) = a ( i ) | b ( i ); 
     106bvec operator| (const bvec &a, const bvec &b) 
     107{ 
     108        it_assert_debug (b.size() != a.size(), "operator&(): Vectors of different lengths"); 
     109 
     110        bvec temp (a.size()); 
     111        for (int i = 0; i < a.size(); i++) { 
     112                temp (i) = a (i) | b (i); 
    103113        } 
    104114        return temp; 
     
    106116 
    107117//#if 0 
    108 Gamma_RNG::Gamma_RNG ( double a, double b ) { 
    109         setup ( a, b ); 
    110 } 
    111 double  Gamma_RNG::sample() { 
     118Gamma_RNG::Gamma_RNG (double a, double b) 
     119{ 
     120        setup (a, b); 
     121} 
     122double  Gamma_RNG::sample() 
     123{ 
    112124        //A copy of rgamma code from the R package!! 
    113125        // 
     
    147159        double scale = 1.0 / beta; 
    148160 
    149         if ( !R_FINITE ( a ) || !R_FINITE ( scale ) || a < 0.0 || scale <= 0.0 ) { 
    150                 it_error ( "Gamma_RNG wrong parameters" ); 
    151         } 
    152  
    153         if ( a < 1. ) { /* GS algorithm for parameters a < 1 */ 
    154                 if ( a == 0 ) 
     161        if (!R_FINITE (a) || !R_FINITE (scale) || a < 0.0 || scale <= 0.0) { 
     162                it_error ("Gamma_RNG wrong parameters"); 
     163        } 
     164 
     165        if (a < 1.) {  /* GS algorithm for parameters a < 1 */ 
     166                if (a == 0) 
    155167                        return 0.; 
    156168                e = 1.0 + exp_m1 * a; 
    157                 for ( ;; ) {  //VS repeat 
     169                for (;;) {    //VS repeat 
    158170                        p = e * unif_rand(); 
    159                         if ( p >= 1.0 ) { 
    160                                 x = -log ( ( e - p ) / a ); 
    161                                 if ( exp_rand() >= ( 1.0 - a ) * log ( x ) ) 
     171                        if (p >= 1.0) { 
     172                                x = -log ( (e - p) / a); 
     173                                if (exp_rand() >= (1.0 - a) * log (x)) 
    162174                                        break; 
    163175                        } else { 
    164                                 x = exp ( log ( p ) / a ); 
    165                                 if ( exp_rand() >= x ) 
     176                                x = exp (log (p) / a); 
     177                                if (exp_rand() >= x) 
    166178                                        break; 
    167179                        } 
     
    173185 
    174186        /* Step 1: Recalculations of s2, s, d if a has changed */ 
    175         if ( a != aa ) { 
     187        if (a != aa) { 
    176188                aa = a; 
    177189                s2 = a - 0.5; 
    178                 s = sqrt ( s2 ); 
     190                s = sqrt (s2); 
    179191                d = sqrt32 - s * 12.0; 
    180192        } 
     
    186198        x = s + 0.5 * t; 
    187199        ret_val = x * x; 
    188         if ( t >= 0.0 ) 
     200        if (t >= 0.0) 
    189201                return scale * ret_val; 
    190202 
    191203        /* Step 3: u = 0,1 - uniform sample. squeeze acceptance (s) */ 
    192204        u = unif_rand(); 
    193         if ( ( d * u ) <= ( t * t * t ) ) 
     205        if ( (d * u) <= (t * t * t)) 
    194206                return scale * ret_val; 
    195207 
    196208        /* Step 4: recalculations of q0, b, si, c if necessary */ 
    197209 
    198         if ( a != aaa ) { 
     210        if (a != aaa) { 
    199211                aaa = a; 
    200212                r = 1.0 / a; 
    201                 q0 = ( ( ( ( ( ( q7 * r + q6 ) * r + q5 ) * r + q4 ) * r + q3 ) * r 
    202                          + q2 ) * r + q1 ) * r; 
     213                q0 = ( ( ( ( ( (q7 * r + q6) * r + q5) * r + q4) * r + q3) * r 
     214                         + q2) * r + q1) * r; 
    203215 
    204216                /* Approximation depending on size of parameter a */ 
     
    206218                /* were established by numerical experiments */ 
    207219 
    208                 if ( a <= 3.686 ) { 
     220                if (a <= 3.686) { 
    209221                        b = 0.463 + s + 0.178 * s2; 
    210222                        si = 1.235; 
    211223                        c = 0.195 / s - 0.079 + 0.16 * s; 
    212                 } else if ( a <= 13.022 ) { 
     224                } else if (a <= 13.022) { 
    213225                        b = 1.654 + 0.0076 * s2; 
    214226                        si = 1.68 / s + 0.275; 
     
    222234        /* Step 5: no quotient test if x not positive */ 
    223235 
    224         if ( x > 0.0 ) { 
     236        if (x > 0.0) { 
    225237                /* Step 6: calculation of v and quotient q */ 
    226                 v = t / ( s + s ); 
    227                 if ( fabs ( v ) <= 0.25 ) 
    228                         q = q0 + 0.5 * t * t * ( ( ( ( ( ( a7 * v + a6 ) * v + a5 ) * v + a4 ) * v 
    229                                                      + a3 ) * v + a2 ) * v + a1 ) * v; 
     238                v = t / (s + s); 
     239                if (fabs (v) <= 0.25) 
     240                        q = q0 + 0.5 * t * t * ( ( ( ( ( (a7 * v + a6) * v + a5) * v + a4) * v 
     241                                                     + a3) * v + a2) * v + a1) * v; 
    230242                else 
    231                         q = q0 - s * t + 0.25 * t * t + ( s2 + s2 ) * log ( 1.0 + v ); 
     243                        q = q0 - s * t + 0.25 * t * t + (s2 + s2) * log (1.0 + v); 
    232244 
    233245 
    234246                /* Step 7: quotient acceptance (q) */ 
    235                 if ( log ( 1.0 - u ) <= q ) 
     247                if (log (1.0 - u) <= q) 
    236248                        return scale * ret_val; 
    237249        } 
    238250 
    239         for ( ;; ) { //VS repeat 
     251        for (;;) {  //VS repeat 
    240252                /* Step 8: e = standard exponential deviate 
    241253                 *      u =  0,1 -uniform deviate 
     
    244256                u = unif_rand(); 
    245257                u = u + u - 1.0; 
    246                 if ( u < 0.0 ) 
     258                if (u < 0.0) 
    247259                        t = b - si * e; 
    248260                else 
    249261                        t = b + si * e; 
    250262                /* Step  9:  rejection if t < tau(1) = -0.71874483771719 */ 
    251                 if ( t >= -0.71874483771719 ) { 
     263                if (t >= -0.71874483771719) { 
    252264                        /* Step 10:      calculation of v and quotient q */ 
    253                         v = t / ( s + s ); 
    254                         if ( fabs ( v ) <= 0.25 ) 
     265                        v = t / (s + s); 
     266                        if (fabs (v) <= 0.25) 
    255267                                q = q0 + 0.5 * t * t * 
    256                                     ( ( ( ( ( ( a7 * v + a6 ) * v + a5 ) * v + a4 ) * v + a3 ) * v 
    257                                         + a2 ) * v + a1 ) * v; 
     268                                    ( ( ( ( ( (a7 * v + a6) * v + a5) * v + a4) * v + a3) * v 
     269                                        + a2) * v + a1) * v; 
    258270                        else 
    259                                 q = q0 - s * t + 0.25 * t * t + ( s2 + s2 ) * log ( 1.0 + v ); 
     271                                q = q0 - s * t + 0.25 * t * t + (s2 + s2) * log (1.0 + v); 
    260272                        /* Step 11:      hat acceptance (h) */ 
    261273                        /* (if q not positive go to step 8) */ 
    262                         if ( q > 0.0 ) { 
     274                        if (q > 0.0) { 
    263275                                // TODO: w = expm1(q); 
    264                                 w = exp ( q ) - 1; 
     276                                w = exp (q) - 1; 
    265277                                /*  ^^^^^ original code had approximation with rel.err < 2e-7 */ 
    266278                                /* if t is rejected sample again at step 8 */ 
    267                                 if ( ( c * fabs ( u ) ) <= ( w * exp ( e - 0.5 * t * t ) ) ) 
     279                                if ( (c * fabs (u)) <= (w * exp (e - 0.5 * t * t))) 
    268280                                        break; 
    269281                        } 
     
    275287 
    276288 
    277 bool qr ( const mat &A, mat &R ) { 
     289bool qr (const mat &A, mat &R) 
     290{ 
    278291        int info; 
    279292        int m = A.rows(); 
    280293        int n = A.cols(); 
    281294        int lwork = n; 
    282         int k = std::min ( m, n ); 
    283         vec tau ( k ); 
    284         vec work ( lwork ); 
     295        int k = std::min (m, n); 
     296        vec tau (k); 
     297        vec work (lwork); 
    285298 
    286299        R = A; 
     
    288301        // perform workspace query for optimum lwork value 
    289302        int lwork_tmp = -1; 
    290         dgeqrf_ ( &m, &n, R._data(), &m, tau._data(), work._data(), &lwork_tmp, 
    291                   &info ); 
    292         if ( info == 0 ) { 
    293                 lwork = static_cast<int> ( work ( 0 ) ); 
    294                 work.set_size ( lwork, false ); 
    295         } 
    296         dgeqrf_ ( &m, &n, R._data(), &m, tau._data(), work._data(), &lwork, &info ); 
     303        dgeqrf_ (&m, &n, R._data(), &m, tau._data(), work._data(), &lwork_tmp, 
     304                 &info); 
     305        if (info == 0) { 
     306                lwork = static_cast<int> (work (0)); 
     307                work.set_size (lwork, false); 
     308        } 
     309        dgeqrf_ (&m, &n, R._data(), &m, tau._data(), work._data(), &lwork, &info); 
    297310 
    298311        // construct R 
    299         for ( int i = 0; i < m; i++ ) 
    300                 for ( int j = 0; j < std::min ( i, n ); j++ ) 
    301                         R ( i, j ) = 0; 
    302  
    303         return ( info == 0 ); 
     312        for (int i = 0; i < m; i++) 
     313                for (int j = 0; j < std::min (i, n); j++) 
     314                        R (i, j) = 0; 
     315 
     316        return (info == 0); 
    304317} 
    305318 
    306319//#endif 
    307 std::string num2str ( double d ) { 
     320std::string num2str (double d) 
     321{ 
    308322        char tmp[20];//that should do 
    309         sprintf ( tmp, "%f", d ); 
    310         return std::string ( tmp ); 
     323        sprintf (tmp, "%f", d); 
     324        return std::string (tmp); 
    311325}; 
    312 std::string num2str ( int i ) { 
     326std::string num2str (int i) 
     327{ 
    313328        char tmp[10];//that should do 
    314         sprintf ( tmp, "%d", i ); 
    315         return std::string ( tmp ); 
     329        sprintf (tmp, "%d", i); 
     330        return std::string (tmp); 
    316331}; 
    317332 
     
    321336#define el 0.5772156649015329 
    322337 
    323 double psi ( double x ) { 
     338double psi (double x) 
     339{ 
    324340        double s, ps, xa, x2; 
    325341        int n, k; 
     
    335351        }; 
    336352 
    337         xa = fabs ( x ); 
     353        xa = fabs (x); 
    338354        s = 0.0; 
    339         if ( ( x == ( int ) x ) && ( x <= 0.0 ) ) { 
     355        if ( (x == (int) x) && (x <= 0.0)) { 
    340356                ps = 1e308; 
    341357                return ps; 
    342358        } 
    343         if ( xa == ( int ) xa ) { 
     359        if (xa == (int) xa) { 
    344360                n = xa; 
    345                 for ( k = 1; k < n; k++ ) { 
     361                for (k = 1; k < n; k++) { 
    346362                        s += 1.0 / k; 
    347363                } 
    348364                ps =  s - el; 
    349         } else if ( ( xa + 0.5 ) == ( ( int ) ( xa + 0.5 ) ) ) { 
     365        } else if ( (xa + 0.5) == ( (int) (xa + 0.5))) { 
    350366                n = xa - 0.5; 
    351                 for ( k = 1; k <= n; k++ ) { 
    352                         s += 1.0 / ( 2.0 * k - 1.0 ); 
     367                for (k = 1; k <= n; k++) { 
     368                        s += 1.0 / (2.0 * k - 1.0); 
    353369                } 
    354370                ps = 2.0 * s - el - 1.386294361119891; 
    355371        } else { 
    356                 if ( xa < 10.0 ) { 
    357                         n = 10 - ( int ) xa; 
    358                         for ( k = 0; k < n; k++ ) { 
    359                                 s += 1.0 / ( xa + k ); 
     372                if (xa < 10.0) { 
     373                        n = 10 - (int) xa; 
     374                        for (k = 0; k < n; k++) { 
     375                                s += 1.0 / (xa + k); 
    360376                        } 
    361377                        xa += n; 
    362378                } 
    363                 x2 = 1.0 / ( xa * xa ); 
    364                 ps = log ( xa ) - 0.5 / xa + x2 * ( ( ( ( ( ( ( a[7] * x2 + a[6] ) * x2 + a[5] ) * x2 + 
    365                                                         a[4] ) * x2 + a[3] ) * x2 + a[2] ) * x2 + a[1] ) * x2 + a[0] ); 
     379                x2 = 1.0 / (xa * xa); 
     380                ps = log (xa) - 0.5 / xa + x2 * ( ( ( ( ( ( (a[7] * x2 + a[6]) * x2 + a[5]) * x2 + 
     381                                                        a[4]) * x2 + a[3]) * x2 + a[2]) * x2 + a[1]) * x2 + a[0]); 
    366382                ps -= s; 
    367383        } 
    368         if ( x < 0.0 ) 
    369                 ps = ps - M_PI * std::cos ( M_PI * x ) / std::sin ( M_PI * x ) - 1.0 / x; 
     384        if (x < 0.0) 
     385                ps = ps - M_PI * std::cos (M_PI * x) / std::sin (M_PI * x) - 1.0 / x; 
    370386        return ps; 
    371387} 
    372388 
    373 void triu(mat &A){ 
    374         for(int i=1;i<A.rows();i++) { // row cycle 
    375                 for (int j=0; j<i; j++) {A(i,j)=0;} 
    376         } 
    377 } 
    378  
    379 class RandunStorage{ 
    380         const int A; 
    381         const int M; 
    382         static double seed; 
    383         static int counter; 
     389void triu (mat &A) 
     390{ 
     391        for (int i = 1;i < A.rows();i++) { // row cycle 
     392                for (int j = 0; j < i; j++) {A (i, j) = 0;} 
     393        } 
     394} 
     395 
     396class RandunStorage 
     397{ 
     398                const int A; 
     399                const int M; 
     400                static double seed; 
     401                static int counter; 
    384402        public: 
    385                 RandunStorage(): A(16807), M(2147483647) {}; 
    386                 void set_seed(double seed0){seed=seed0;} 
    387                 double get(){ 
     403                RandunStorage() : A (16807), M (2147483647) {}; 
     404                void set_seed (double seed0) {seed = seed0;} 
     405                double get() { 
    388406                        long long tmp = A * seed; 
    389407                        tmp = tmp % M; 
    390408                        seed = tmp; 
    391                         counter++;  
    392                         return seed/M;} 
     409                        counter++; 
     410                        return seed / M; 
     411                } 
    393412}; 
    394413static RandunStorage randun_global_storage; 
    395 double RandunStorage::seed=1111111; 
    396 int RandunStorage::counter=0; 
    397 double randun(){return randun_global_storage.get();}; 
    398 vec randun(int n){vec res(n); for(int i=0;i<n;i++){res(i)=randun();}; return res;}; 
    399 mat randun(int n, int m){mat res(n,m); for(int i=0;i<n*m;i++){res(i)=randun();}; return res;}; 
     414double RandunStorage::seed = 1111111; 
     415int RandunStorage::counter = 0; 
     416double randun() {return randun_global_storage.get();}; 
     417vec randun (int n) {vec res (n); for (int i = 0;i < n;i++) {res (i) = randun();}; return res;}; 
     418mat randun (int n, int m) {mat res (n, m); for (int i = 0;i < n*m;i++) {res (i) = randun();}; return res;}; 
     419 
    400420ivec unique (const ivec &in) 
    401421{