Changeset 2f89d9e in tol
- Timestamp:
- Apr 13, 2009, 11:12:35 AM (18 years ago)
- Branches:
- 1941-docker-image-to-test, devel, master
- Children:
- 2237f44
- Parents:
- 7dd5275
- Location:
- tol/stdlib/math/stat/models/bayesian/bysMcmc/bsr
- Files:
-
- 2 edited
-
_oneNode.tol (modified) (4 diffs)
-
dynhlm/_db_api.estim.tol (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
tol/stdlib/math/stat/models/bayesian/bysMcmc/bsr/_oneNode.tol
r7dd5275 r2f89d9e 37 37 }; 38 38 39 Text _.autodoc.member.BuildModelDef = 40 "Creates a BSR model definition with structure of BSR.ModelDef\n" 39 /////////////////////////////////////////////////////////////////////////// 40 Class ModelData 41 /////////////////////////////////////////////////////////////////////////// 42 { 43 Code LPI = BysMcmc::Bsr::OneNode::LPI; 44 //Mandatory members 45 Set _.docInfo; //BSR.DocInfo 46 Set _.linearParamInfo; //Set of Bsr.OneNode.LinearParamInfo 47 VMatrix _.Y; //Output data 48 VMatrix _.X; //Input data 49 Real _.sigma; //Sigma prior value, or ? to freely simulate it 50 //Optional members 51 Text _.segmentName = "Obs"; //Node name 52 Set _.orderRelation = Copy(Empty); //Set of Bsr.OrderRelation.Info\n" 53 Set _.arima = Copy(Empty); //Set of ARIMAStruct\n" 54 Real _.sigmaPriorWeight = 0; //Weight for Bsr.Sigma.Prior.InverseGamma\n" 55 Set _.timeInfo = Copy(Empty) //BSR.NoiseTimeInfo\n" 56 }; 57 58 /////////////////////////////////////////////////////////////////////////// 59 Text _.autodoc.member.GetCycler = 60 "Creates a BysMcmc:Cycler for a generic OneNode model\n" 41 61 "Model must have just one node, usually observational and dense." 42 62 "Model is defined as a BSR basic and an optional set of non linear filters." 43 "BSR will be built from simplified data argument matching this API" 44 "NameBlock data = \n" 45 "[[\n" 46 "//Mandatory members \n" 47 " Set _.docInfo //BSR.DocInfo \n" 48 " Text _.segmentName; //Node name\n" 49 " Set _.linearParamInfo; //Set of Bsr.OneNode.LinearParamInfo\n" 50 " Anything _.Y; //Output data (Matrix or VMatrix)\n" 51 " Anything _.X; //Input data (Matrix or VMatrix)\n" 52 " Real _.sigma; //Sigma prior value, or ? to freely simulate it\n" 53 "//Optional members \n" 54 " Set _.orderRelation; //Set of Bsr.OrderRelation.Info\n" 55 " Set _.arima; //Set of ARIMAStruct\n" 56 " Real _.sigmaPriorWeight; //Weight for Bsr.Sigma.Prior.InverseGamma\n" 57 " Set _.timeInfo; //BSR.NoiseTimeInfo\n" 58 "]];\n"; 59 Set BuildModelDef(NameBlock data, Config config_) 60 /////////////////////////////////////////////////////////////////////////// 61 { 62 Text _MID = "[EstimOneNode]"; 63 "BSR will be built from simplified data argument"; 64 Cycler GetCycler(ModelData data, Set nonLinFil, Config config_) 65 /////////////////////////////////////////////////////////////////////////// 66 { 67 Text _MID = "[BysMcmc::Bsr::OneNode::GetCycler]"; 63 68 //WriteLn(_MID+" TRACE 1"); 64 69 //Output matrix 65 VMatrix Y = If(ObjectExist("VMatrix","data::_.Y"), 66 data::_.Y, Mat2VMat(data::_.Y,FALSE,1,0)); 70 VMatrix Y = data::_.Y; 67 71 //WriteLn(_MID+" TRACE 2"); 68 72 //Input matrix 69 VMatrix X = If(ObjectExist("VMatrix","data::_.X"), 70 data::_.X, Mat2VMat(data::_.X,FALSE,1,0)); 73 VMatrix X = data::_.X; 71 74 72 75 //WriteLn(_MID+" TRACE 3"); … … 236 239 //WriteLn(_MID+" TRACE 9"); 237 240 //Building generic model definition 238 BSR.ModelDef (241 Set modelDef = BSR.ModelDef ( 239 242 docInfo = data::_.docInfo, 240 243 linearBlock, … … 248 251 VMatrix a = domain.a << order.a, 249 252 VMatrix A = domain.A << order.A 250 ) 251 }; 252 253 Text _.autodoc.member.Estim = 254 "Estimates a model with just one node, usually observational and dense." 255 "Model is defined as a BSR basic and an optional set of non linear filters." 256 "BSR will be built from simplified data argument matching this API" 257 "NameBlock data = \n" 258 "[[\n" 259 "//Mandatory members \n" 260 " Set _.docInfo //BSR.DocInfo \n" 261 " Text _.segmentName; //Node name\n" 262 " Set _.linearParamInfo; //Set of Bsr.OneNode.LinearParamInfo\n" 263 " Anything _.Y; //Output data (Matrix or VMatrix)\n" 264 " Anything _.X; //Input data (Matrix or VMatrix)\n" 265 " Real _.sigma; //Sigma prior value, or ? to freely simulate it\n" 266 "//Optional members \n" 267 " Set _.orderRelation; //Set of Bsr.OrderRelation.Info\n" 268 " Set _.arima; //Set of ARIMAStruct\n" 269 " Real _.sigmaPriorWeight; //Weight for Bsr.Sigma.Prior.InverseGamma\n" 270 " Set _.timeInfo; //BSR.NoiseTimeInfo\n" 271 "]];\n"; 272 Set Estim(NameBlock data, Set nonLinFil, Config config_) 273 /////////////////////////////////////////////////////////////////////////// 274 { 275 Text _MID = "[EstimOneNode]"; 276 //Data source for model defining 277 Set modelDef = BuildModelDef(data, config_); 278 Set result = If(Not(config_::mcmc.sampleLength), [[data, modelDef]], 279 { 280 //WriteLn(_MID+" TRACE 10"); 281 //Calling BSR simulator 282 Set aux = BysMcmc::Bsr::Gibbs::EstimParsed 283 ( 284 modelDef, 285 nonLinFil, 286 config_, 287 BysMcmc::NoNotifier(0) 288 ); 289 //WriteLn(_MID+" TRACE 11"); 290 //Adding data source information 291 [[data]]<<aux 292 }); 293 //Checks unique name and prepares for hashed searching by name 294 Real SetIndexByName(result); 253 ); 254 BysMcmc::Cycler cycler = BysMcmc::Bsr::Gibbs::GetCyclerFromParsed 255 ( 256 modelDef, 257 nonLinFil, 258 config_, 259 BysMcmc::NoNotifier(0) 260 ); 261 Set Append(cycler::auxInfo,[[data]]); 295 262 //WriteLn(_MID+" TRACE 12"); 296 result 297 }; 263 cycler 264 }; 265 266 /////////////////////////////////////////////////////////////////////////// 267 Class Probit 268 /////////////////////////////////////////////////////////////////////////// 269 { 270 BysMcmc::Estimation _.estim; 271 Matrix _.param; 298 272 299 /////////////////////////////////////////////////////////////////////////// 300 Text _.autodoc.member.EstimProbit = 301 "Estimates a probit model with just one node, usually observational and " 302 "dense." 303 "Model is defined as a BSR basic and an non linear ProbitFilter." 304 "BSR will be built from simplified data argument matching the same API " 305 "used by BysMcmc::Bsr::Gibbs::EstimOneNode, fixing _.sigma to 1" 306 "NameBlock data = \n" 307 "[[\n" 308 "//Mandatory members \n" 309 " Set _.docInfo //BSR.DocInfo \n" 310 " Text _.segmentName; //Node name\n" 311 " Set _.linearParamInfo; //Set of Bsr.OneNode.LinearParamInfo\n" 312 " Anything _.Y; //Output data (Matrix or VMatrix)\n" 313 " Anything _.X; //Input data (Matrix or VMatrix)\n" 314 " Real _.sigma = 1; //Sigma value or ? to simulate it\n" 315 "//Optional members \n" 316 " Set _.orderRelation; //Set of Bsr.OrderRelation.Info\n" 317 " Set _.arima; //Set of ARIMAStruct\n" 318 " Set _.timeInfo; //Set of BSR.NoiseTimeInfo\n" 319 "]];\n"; 320 NameBlock EstimProbit(NameBlock data, Config config_) 273 ////////////////////////////////////////////////////////////////////////// 274 Text _.autodoc.member.GetProbPoint = 275 "Returns output probabilities for given input matrix and parameters " 276 "vector"; 277 Matrix GetProbPoint(Matrix X, Matrix beta) 278 ////////////////////////////////////////////////////////////////////////// 279 { 280 F01(X*beta) 281 }; 282 ////////////////////////////////////////////////////////////////////////// 283 Text _.autodoc.member.GetProbAvg = 284 "Returns output probabilities for given input matrix and average vector " 285 "of simulated parameters"; 286 Matrix GetProbAvg(Matrix X) 287 ////////////////////////////////////////////////////////////////////////// 288 { 289 GetProbPoint(X,_.param) 290 }; 291 ////////////////////////////////////////////////////////////////////////// 292 Text _.autodoc.member.GetProb = 293 "Returns output probabilities for given input matrix integrated " 294 "over all simulated vectors of parameters"; 295 Matrix GetProb(Matrix X) 296 //////////////////////////////////////////////////////////////////////// 297 { 298 Real numSim = Rows(_.estim::report::mcmc); 299 Matrix prob = Rand(Rows(X),1,0,0); 300 Set For(1,numSim,Real (Real sim) 301 { 302 Matrix pr=GetProbPoint(X,Tra(SubRow(_.estim::report::mcmc,[[sim]]))); 303 Matrix prob := prob + pr; 304 0 305 }); 306 prob*(1/numSim) 307 } 308 }; 309 310 /////////////////////////////////////////////////////////////////////////// 311 Text _.autodoc.member.GetCyclerProbit = 312 "Creates a BysMcmc:Cycler for a probit OneNode model\n" 313 "Model is defined as a BSR basic and an non linear ProbitFilter."; 314 Cycler GetCyclerProbit(ModelData data, Config config_) 321 315 ////////////////////////////////////////////////////////////////////////////// 322 316 { … … 328 322 Real enabled = True, 329 323 data::_.segmentName, 330 data::_.Y,324 VMat2Mat(data::_.Y), 331 325 UnknownDate, 332 326 UnknownDate) 333 327 ]]}; 328 BysMcmc::Cycler cycler = BysMcmc::Bsr::OneNode::GetCycler 329 (data, nonLinFil, config_); 330 cycler 331 }; 332 333 /////////////////////////////////////////////////////////////////////////// 334 Text _.autodoc.member.GetProbit = 335 "Creates a BysMcmc::Bsr::OneNode::Probit object from an estimated model"; 336 Probit GetProbit(Estimation estim) 337 ////////////////////////////////////////////////////////////////////////////// 338 { 339 BysMcmc::Bsr::OneNode::Probit probit = 334 340 [[ 335 Set _.estim = BysMcmc::Bsr::OneNode::Estim 336 (data, nonLinFil, config_); 337 Matrix _.param = If(Not(config_::mcmc.sampleLength), Rand(0,0,0,0), 338 Tra(_.estim::param.average)); 339 340 ////////////////////////////////////////////////////////////////////////// 341 Text _.autodoc.member.GetProbPoint = 342 "Returns output probabilities for given input matrix and parameters " 343 "vector"; 344 Matrix GetProbPoint(Matrix X, Matrix beta) 345 ////////////////////////////////////////////////////////////////////////// 346 { 347 F01(X*beta) 348 }; 349 ////////////////////////////////////////////////////////////////////////// 350 Text _.autodoc.member.GetProbAvg = 351 "Returns output probabilities for given input matrix and average vector " 352 "of simulated parameters"; 353 Matrix GetProbAvg(Matrix X) 354 ////////////////////////////////////////////////////////////////////////// 355 { 356 GetProbPoint(X,_.param) 357 }; 358 ////////////////////////////////////////////////////////////////////////// 359 Text _.autodoc.member.GetProb = 360 "Returns output probabilities for given input matrix integrated " 361 "over all simulated vectors of parameters"; 362 Matrix GetProb(Matrix X) 363 //////////////////////////////////////////////////////////////////////// 364 { 365 Real numSim = Rows(_.estim::report::mcmc); 366 Matrix prob = Rand(Rows(X),1,0,0); 367 Set For(1,numSim,Real (Real sim) 368 { 369 Matrix pr=GetProbPoint(X,Tra(SubRow(_.estim::report::mcmc,[[sim]]))); 370 Matrix prob := prob + pr; 371 0 372 }); 373 prob*(1/numSim) 374 } 341 BysMcmc::Estimation _.estim = estim; 342 Matrix _.param = If(Not(_.estim::cycler::_.config::mcmc.sampleLength), 343 Rand(0,0,0,0), 344 Tra(_.estim::param.average)) 375 345 ]] 376 346 } 347 377 348 ]]; -
tol/stdlib/math/stat/models/bayesian/bysMcmc/bsr/dynhlm/_db_api.estim.tol
r7dd5275 r2f89d9e 8 8 //////////////////////////////////////////////////////////////////////////// 9 9 //Stores in database CODA report information of a given estimation 10 Real SaveParamStats(Text dbName, Text model, Text session, Setestim)10 Real SaveParamStats(Text dbName, Text model, Text session, Estimation estim) 11 11 //////////////////////////////////////////////////////////////////////////// 12 12 { … … 208 208 }; 209 209 210 //////////////////////////////////////////////////////////////////////////// 211 Notifier DBNotifier(Text dbName, 212 Text model, 213 Text session) 214 //////////////////////////////////////////////////////////////////////////// 215 { 216 //Creates the data base notifier of current status 217 BysMcmc::Notifier dbNotifier = 218 [[ 219 Text _.dbName = dbName; 220 Text _.model = model; 221 Text _.session = session; 222 Real _.nErr = Copy(NError); 223 Real _.nWar = Copy(NWarning); 224 NameBlock _table = BysMcmc::Bsr::DynHlm::DBApi::_.table; 225 226 //Generic events notifier 227 Real notify_messages(Real unused) 228 { 229 Real DBExecQuery( 230 "UPDATE "+_.dbName+"."+_table::EstimStatus+"\n"+ 231 "SET nu_error = "+IntText(NError-_.nErr)+" \n"+ 232 "WHERE id_model='"+_.model+"' AND id_session='"+_.session+"';"); 233 Real DBExecQuery( 234 "UPDATE "+_.dbName+"."+_table::EstimStatus+"\n"+ 235 "SET nu_warning = "+IntText(NWarning-_.nWar)+" \n"+ 236 "WHERE id_model='"+_.model+"' AND id_session='"+_.session+"';"); 237 1 238 }; 239 //Generic events notifier 240 Real notify_process(Text processField) 241 { 242 WriteLn("[dbNotifier] notify_process("+processField+")"); 243 Real notify_messages(0); 244 Real DBExecQuery( 245 "UPDATE "+_.dbName+"."+_table::EstimStatus+"\n"+ 246 "SET "+processField+" = "+ 247 BysMcmc::Bsr::DynHlm::DBApi::SqlFormatDate(Now)+" \n"+ 248 "WHERE id_model='"+_.model+"' AND id_session='"+_.session+"';"); 249 1 250 }; 251 252 //Model load event notifier 253 Real loading(Real unused) 254 { 255 Real notify_process("dh_loading") 256 }; 257 //Model parser event notifier 258 Real parsing(Real unused) 259 { 260 Real notify_process("dh_parsing") 261 }; 262 //Initialization event notifier 263 Real initializing(Real numVar, Text path) 264 { 265 Real notify_process("dh_initializing"); 266 Real DBExecQuery( 267 "UPDATE "+_.dbName+"."+_table::EstimStatus+"\n"+ 268 "SET nu_mcmc_var = "+IntText(numVar)+" \n"+ 269 "WHERE id_model='"+_.model+"' AND id_session='"+_.session+"';"); 270 Real DBExecQuery( 271 "UPDATE "+_.dbName+"."+_table::EstimStatus+"\n"+ 272 "SET te_path_data_out = '"+path+"' \n"+ 273 "WHERE id_model='"+_.model+"' AND id_session='"+_.session+"';"); 274 1 275 }; 276 //Simulation events notifier 277 Real simulating(Real numSim, Real timeAvg) 278 { 279 Real If(!numSim, notify_process("dh_simulating"), notify_messages(0)); 280 Real DBExecQuery( 281 "UPDATE "+_.dbName+"."+_table::EstimStatus+"\n"+ 282 "SET nu_mcmc_currentLength = "+IntText(numSim)+" \n"+ 283 "WHERE id_model='"+_.model+"' AND id_session='"+_.session+"';"); 284 Real DBExecQuery( 285 "UPDATE "+_.dbName+"."+_table::EstimStatus+"\n"+ 286 "SET vl_mcmc_time_avg = "<<timeAvg+" \n"+ 287 "WHERE id_model='"+_.model+"' AND id_session='"+_.session+"';"); 288 1 289 }; 290 //Report event notifier 291 Real reporting(Real unused) 292 { 293 Real notify_process("dh_reporting") 294 }; 295 //Evaluation event notifier 296 Real evaluating(Real unused) 297 { 298 Real notify_process("dh_evaluating") 299 }; 300 //Evaluation event notifier 301 Real saving(Real unused) 302 { 303 Real notify_process("dh_saving") 304 }; 305 //Process termination event notifier 306 Real ending(Real unused) 307 { 308 Real notify_process("dh_ending"); 309 BysMcmc::Bsr::DynHlm::DBApi::ModSes.SetBlocked( 310 _.dbName, _.model, _.session, false); 311 1 312 } 313 ]] 314 }; 315 210 316 211 317 //////////////////////////////////////////////////////////////////////////// … … 214 320 //Returns the MCMC, the CODA report and the evaluation time series and 215 321 //effects using parameter average. 216 Set Estim(Text dbName,217 Text model,218 Text session,219 Text resultRootPath,220 NameBlock seriesHandler,221 NameBlock config)322 Cycler GetCycler(Text dbName, 323 Text model, 324 Text session, 325 Text resultRootPath, 326 NameBlock seriesHandler, 327 NameBlock config) 222 328 //////////////////////////////////////////////////////////////////////////// 223 329 { … … 253 359 "NULL)"); //dh_ending 254 360 255 //Creates the data base notifier of current status 256 BysMcmc::Notifier dbNotifier = 257 [[ 258 Text _.dbName = dbName; 259 Text _.model = model; 260 Text _.session = session; 261 Real _.nErr = Copy(NError); 262 Real _.nWar = Copy(NWarning); 263 264 //Generic events notifier 265 Real notify_messages(Real unused) 266 { 267 Real DBExecQuery( 268 "UPDATE "+_.dbName+"."+_table::EstimStatus+"\n"+ 269 "SET nu_error = "+IntText(NError-_.nErr)+" \n"+ 270 "WHERE id_model='"+_.model+"' AND id_session='"+_.session+"';"); 271 Real DBExecQuery( 272 "UPDATE "+_.dbName+"."+_table::EstimStatus+"\n"+ 273 "SET nu_warning = "+IntText(NWarning-_.nWar)+" \n"+ 274 "WHERE id_model='"+_.model+"' AND id_session='"+_.session+"';"); 275 1 276 }; 277 //Generic events notifier 278 Real notify_process(Text processField) 279 { 280 WriteLn("[dbNotifier] notify_process("+processField+")"); 281 Real notify_messages(0); 282 Real DBExecQuery( 283 "UPDATE "+_.dbName+"."+_table::EstimStatus+"\n"+ 284 "SET "+processField+" = "+ 285 BysMcmc::Bsr::DynHlm::DBApi::SqlFormatDate(Now)+" \n"+ 286 "WHERE id_model='"+_.model+"' AND id_session='"+_.session+"';"); 287 1 288 }; 289 290 //Model load event notifier 291 Real loading(Real unused) 292 { 293 Real notify_process("dh_loading") 294 }; 295 //Model parser event notifier 296 Real parsing(Real unused) 297 { 298 Real notify_process("dh_parsing") 299 }; 300 //Initialization event notifier 301 Real initializing(Real numVar, Text path) 302 { 303 Real notify_process("dh_initializing"); 304 Real DBExecQuery( 305 "UPDATE "+_.dbName+"."+_table::EstimStatus+"\n"+ 306 "SET nu_mcmc_var = "+IntText(numVar)+" \n"+ 307 "WHERE id_model='"+_.model+"' AND id_session='"+_.session+"';"); 308 Real DBExecQuery( 309 "UPDATE "+_.dbName+"."+_table::EstimStatus+"\n"+ 310 "SET te_path_data_out = '"+path+"' \n"+ 311 "WHERE id_model='"+_.model+"' AND id_session='"+_.session+"';"); 312 1 313 }; 314 //Simulation events notifier 315 Real simulating(Real numSim, Real timeAvg) 316 { 317 Real If(!numSim, notify_process("dh_simulating"), notify_messages(0)); 318 Real DBExecQuery( 319 "UPDATE "+_.dbName+"."+_table::EstimStatus+"\n"+ 320 "SET nu_mcmc_currentLength = "+IntText(numSim)+" \n"+ 321 "WHERE id_model='"+_.model+"' AND id_session='"+_.session+"';"); 322 Real DBExecQuery( 323 "UPDATE "+_.dbName+"."+_table::EstimStatus+"\n"+ 324 "SET vl_mcmc_time_avg = "<<timeAvg+" \n"+ 325 "WHERE id_model='"+_.model+"' AND id_session='"+_.session+"';"); 326 1 327 }; 328 //Report event notifier 329 Real reporting(Real unused) 330 { 331 Real notify_process("dh_reporting") 332 }; 333 //Evaluation event notifier 334 Real evaluating(Real unused) 335 { 336 Real notify_process("dh_evaluating") 337 }; 338 //Evaluation event notifier 339 Real saving(Real unused) 340 { 341 Real notify_process("dh_saving") 342 }; 343 //Process termination event notifier 344 Real ending(Real unused) 345 { 346 Real notify_process("dh_ending"); 347 BysMcmc::Bsr::DynHlm::DBApi::ModSes.SetBlocked( 348 _.dbName, _.model, _.session, false); 349 1 350 } 351 ]]; 352 361 BysMcmc::Notifier dbNotifier = DBNotifier(dbName,model,session); 353 362 Real dbNotifier::loading(0); 354 363 NameBlock model.def = BysMcmc::Bsr::DynHlm::DBApi::LoadModelDef … … 360 369 seriesHandler 361 370 ); 362 Set bsr.estim_ = BysMcmc::Bsr::Gibbs::EstimAndNotify 363 ( model.def, config, dbNotifier); 364 Set bsr.estim = If(Not(config::do.linear.effects),bsr.estim_, 371 BysMcmc::Cycler cycler = 372 BysMcmc::Bsr::Gibbs::GetCycler(model.def, config, dbNotifier); 373 Set Append(cycler::auxInfo, [[series.handler]]); 374 cycler 375 }; 376 377 //////////////////////////////////////////////////////////////////////////// 378 Real CloseModel(Estimation estim) 379 //////////////////////////////////////////////////////////////////////////// 380 { 381 BysMcmc::Config config = estim::cycler::_.config; 382 Real If(config::do.linear.effects, 365 383 { 366 Set linear.effects= GetLinearBlkEffects(367 bsr.estim_::report::colNames,368 bsr.estim_::param.average,369 bsr.estim_::sampler,370 series.handler);371 bsr.estim_ << [[linear.effects]]384 Set estim::linear.effects := GetLinearBlkEffects( 385 estim::report::colNames, 386 estim::param.average, 387 estim::cycler::_.sampler, 388 estim::cycler::auxInfo::series.handler); 389 1 372 390 }); 373 Real SetIndexByName(bsr.estim);374 391 Real If(config::do.save.DBApi.Estim.Oza, 375 392 { 376 Real dbNotifier::saving(0);377 Real Ois.Store( bsr.estim, bsr.estim::ascii+".estim.oza");393 Real estim::cycler::_.notifier::saving(0); 394 Real Ois.Store([[estim]], estim::cycler::auxInfo::ascii+".estim.oza"); 378 395 1 379 396 }); 380 397 Real If(config::do.report,BysMcmc::Bsr::DynHlm::DBApi::SaveParamStats 381 398 ( 382 dbName,383 id_model,384 id_session,385 bsr.estim399 estim::cycler::_.notifier::_.dbName, 400 estim::cycler::_.notifier::_.model, 401 estim::cycler::_.notifier::_.session, 402 estim 386 403 )); 387 Real dbNotifier::ending(0);388 bsr.estim404 Real estim::cycler::_.notifier::ending(0); 405 1 389 406 }; 390 407
Note: See TracChangeset
for help on using the changeset viewer.
