Warning: Trying to access array offset on value of type null in /home/site/wwwroot/lib/plugins/move/action/rename.php on line 42
Warning: Cannot modify header information - headers already sent by (output started at /home/site/wwwroot/lib/plugins/move/action/rename.php:42) in /home/site/wwwroot/inc/Action/Export.php on line 106
Warning: Cannot modify header information - headers already sent by (output started at /home/site/wwwroot/lib/plugins/move/action/rename.php:42) in /home/site/wwwroot/inc/Action/Export.php on line 106
Warning: Cannot modify header information - headers already sent by (output started at /home/site/wwwroot/lib/plugins/move/action/rename.php:42) in /home/site/wwwroot/inc/Action/Export.php on line 106
====== List #list Command ======
#list is a new feature in v6. It's super-useful for running multiple refinements on different data sets or running multiple models against a single data set. Some things you can do are below. There are lots more!
Typical syntax is:
num_runs 5
Backup_INP
#list pa_val {
0.1
0.2
0.3
0.4
0.5
}
prm pa = pa_val(Run_Number);
By default refinement results aren't written to the INP file. This can be changed with the lines below, where inp_filename.inp is the name of your INP file. Note that out_file uses a "string equation". The "Backup_INP" macro creates a backup of your input file. This is useful as if you mess up with #list you can write a blank .inp file (essentially deleting your .inp).
Backup_INP
out_file ="inp_filename.inp";
If you step through a set of pa values and fit the data with each value Topas won't save the "best answer" by default. This can be changed with a simple macro:
macro Save_Best
{
#if (Run_Number == 0)
prm Best_Rwp_ = 9999;
#else
prm Best_Rwp_ = #include Best_Rwp_.txt;
#endif
out Best_Rwp_.txt Out(If(Get(r_wp) < Best_Rwp_, Get(r_wp), Best_Rwp_))
out_file = If(Get(r_wp) < Best_Rwp_, Concat(String(INP_File), ".OUT"), "");
}
You can easily automate refinements using the #list command and [[string_equations|string equations]]. Just give the filenames in the #list command and use something like "xdd filename(Run_Number)". You can add experimental information like time/temperature/etc in the #list command.
For results files you can e.g. delete old files and write header lines with commands like the ones below. If you backup only for run 0 then you won't get annoying screen "flashes":
#if (Run_Number == 0)
Backup_INP
system_before_save_OUT { del results.txt }
out "results.txt" append
Out_String(" 01_range 02_temp 03_time 04_r_wp 05_height 06_err 07_bval 08_err 09_perc_cubic \n")
#endif
There's a step by step tutorial on using #list to refine a series of data sets sequentially [[http://community.dur.ac.uk/john.evans/topas_workshop/tutorial_multitopas.htm|here]].
Here's an example of how to vary a specific parameter (the sample height) in the input file from Martin Fisch:
/*
Copy paste this file to an .inp file and run with Topas 6
It shows how the #list command can be used to perform pattern
simulations. In this case, specimen displacement is varied.
Note that the list parameter (h_err) is used via a macro
in order to use it in the file name of the saved scan.
*/
yobs_eqn = 0;
min 20
max 150
del 0.01
num_runs 11
#list h_err {
-0.25
-0.20
-0.15
-0.10
-0.05
0.00
0.05
0.10
0.15
0.20
0.25
}
macro displacement { h_err(Run_Number) }
Specimen_Displacement(, displacement )
lam ymin_on_ymax 0.0001
Lam_recs
{ 0.0159 1.534753 3.6854
0.5691 1.540596 0.4370
0.0762 1.541058 0.6000
0.2517 1.544410 0.5200
0.0871 1.544721 0.6200 }
LP_Factor(0)
Rp 240
Rs 240
Slit_Width(0.07)
Divergence (0.25)
axial_conv
filament_length 12
sample_length 9.5
receiving_slit_length 15
primary_soller_angle 2.55
secondary_soller_angle 2.55
str
phase_name "LaB6"
a 4.1569162
b =Get(a);
c =Get(a);
space_group "Pm-3m"
site La1 x 0 y 0 z 0 occ La 1 beq 0.5
site B1 x 0.5 y 0.5 z 0.19 occ B 1 beq 0.5
scale 0.0001
seed 10
xdd_out LaB6_Displacement_##displacement##.xy load out_record out_fmt out_eqn
{
" %11.6f " = X;
" %11.6f\n " = Rand_Normal(Ycalc, Sqrt(Ycalc));
}
There's an example of how to name .out files by Run_Number at: [[saving_out_files_as_a_function_of_run_number|Saving .out Files as a Function of Run Number]]