| 1 | |
| 2 | |
| 3 | |
| 4 | |
| 5 | == Where is the test code? == |
| 6 | |
| 7 | 1. The code is on cp3wks05 in the directory /Users/madgraph/TestMG |
| 8 | 1. He is also available via CVS: ''cvs co !TestMG'' . He is suppose to be place on same directory as MG_ME |
| 9 | |
| 10 | == How do you execute the test? == |
| 11 | |
| 12 | you can run two different types of tests: "fast" and "full" (see next section for details). |
| 13 | The main script that controls the various tests is a Python script called test.py. |
| 14 | Here are some examples of commands you can type to perform the tests: |
| 15 | |
| 16 | * $>./test.py fast all (to do all available checks in the "fast" mode) |
| 17 | * $>./test.py fast MW (to check only MadWeight in the "fast" mode) |
| 18 | * $>./test.py full all (to do all available checks in the "full" mode) |
| 19 | * $>./test.py fast MW (to check MadWeight MadWeight in the "full" mode) |
| 20 | * $>./test.py MW/NAME (to launch only the fast test NAME in MW) |
| 21 | |
| 22 | |
| 23 | == What is the difference between the "fast" mode and the "full" mode? == |
| 24 | |
| 25 | These are two different levels of test, for each module in MadGraph: |
| 26 | * the "FAST" mode is intended to be rapid. It should not last much more than 10 minutes or so. You can use it to check whether |
| 27 | some modifications in a specific module (e.g. MadOnia) do not interfere with the good-working of other modules (e.g. MadDipol). |
| 28 | * the "FULL" mode is intended to check that ''all the results'' you can produce with a specific updated module is in agreement with the results from the previous version of this module. |
| 29 | |
| 30 | Essentially, if you update a specific module ''mymod'', you can run the test script in "fast" mode to test all the modules, |
| 31 | |
| 32 | $>./test.py fast all |
| 33 | |
| 34 | and in "full" mode to test specifically ''mymod'' |
| 35 | |
| 36 | $>./test.py full mymod |
| 37 | |
| 38 | NOTE: for the moment only madonia has is own full test. |
| 39 | |
| 40 | == Structure of the code == |
| 41 | |
| 42 | All required information to test a specific module is contained in one given |
| 43 | directory located in /Users/madgraph/TEST. This directory should be named |
| 44 | as '''test_????'''. For a specific test in this module, the relevant files are recorded |
| 45 | in a sub-directory '''fast_???''' or '''full_???'''. Each of these test directories contains |
| 46 | |
| 47 | 1. all input Cards or files required to perform the test, |
| 48 | 1. the file '''move_files_level1''' |
| 49 | which specifies which input files should be copied at level 1 (i.e. before the execution of any script) |
| 50 | and in which directory they must be copied in, |
| 51 | 1. the file '''routine_level1''' specifies which scripts should be executed first (usually ./bin/newprocess) |
| 52 | 1. the file '''move_files_level2''' |
| 53 | which specifies which input files should be copied at level 2 (i.e. after the execution of the scripts mentioned in the file routine_level1) |
| 54 | and in which directory they must be copied in, |
| 55 | 1. the file '''routine_level2''' specifies which scripts should be executed at level 2 (such as ./bin/generate_events) |
| 56 | 1. the file '''dir_test.py''' which specifies how to extract the results to be compared with the expected one (see section [http://cp3wks05.fynu.ucl.ac.be/twiki/bin/view/Software/TestProgram#How_to_write_dir_test_py how define dir_test.py]) |
| 57 | 1. the file '''expected_results.txt''' which contains the reference results. |
| 58 | |
| 59 | Note: the above files can also be placed in the directory '''test_????'''. They are then used in case there is no such file in the '''fast_????''' (or '''full_????''') directory. |
| 60 | |
| 61 | == How does it work? == |
| 62 | 1. The script test.py copies the directory "Template" into "Auto_test_???" |
| 63 | 1. It copies the input files according to the prescription given in '''move_files_level1''' |
| 64 | 1. It launches executables (such as new_process) according to the prescription given in '''routine_level1'''. |
| 65 | The paths are expected to be given from the main directory of the Template copy. |
| 66 | 1. It copies the input files according to the prescription given in '''move_files_level2''' |
| 67 | 1. It launches executables (such as generate_events) according to the prescription given in '''routine_level2'''. |
| 68 | The paths are expected to be given from the main directory of the Template copy. |
| 69 | 1. A python code collects the results. |
| 70 | 1. These results are compared to the expected one written in '''expected_results.txt''' |
| 71 | |
| 72 | |
| 73 | == How to implement a new test? == |
| 74 | |
| 75 | |
| 76 | 1. First create a new directory in TEST for your module: $>mkdir test_MYMOD |
| 77 | 1. $>cd test_MYMOD |
| 78 | 1. Create a directory for a specific test $> mkdir fast_NAME or $>mkdir full_NAME |
| 79 | 1. $> cd fast_NAME |
| 80 | 1. Define the six files '''move_files_level1''', '''move_files_level2''', '''routine_level1''' , '''routine_level2''', |
| 81 | '''dir_test.py''', '''expected_results.txt''' and import a copy of all input cards (or files) in this directory. |
| 82 | |
| 83 | |
| 84 | === A practical way to develop all those things... === |
| 85 | |
| 86 | This is only a proposition of the different step used to devellop a new step |
| 87 | 1. Create your new test directory |
| 88 | 1. The defines the four files '''move_files_level1''', '''move_files_level2''', '''routine_level1''' , '''routine_level2''' (this should be easy) |
| 89 | 1. Copy the default files /Users/madgraph/TEST/Python_lib/dir_test_default.py in your directory '''fast_????''' (respectively '''full_????''') |
| 90 | 1. Change his name in dir_test.py |
| 91 | 1. Launch the test: (in TEST)$> ./test.py test_????/fast_???? (respectively for full) |
| 92 | 1. Edit the value of actif and put this value to zero (avoid the overwriting of the Template copy and the execution of the different test script) |
| 93 | 1. Implement your python (or external) routine and test this one with (in TEST)$> ./test.py test_MYMOD/fast_MYTEST |
| 94 | 1. When the last step works correctly, remove the line actif=0 of the file dir_test.py |
| 95 | 1. Copy the file test_result.dat in 'expected_result.dat': (in fast_???) $> cp test_results.dat expected_results.dat |
| 96 | 1. add the third column (precision requirment) in the file expected_results.dat |
| 97 | 1. launch completly your test to be sure that everithing is fine. (in TEST)$> ./test.py test_MYMOD/fast_MYTEST |
| 98 | 1. store your module on the cvs |
| 99 | |
| 100 | === How to write input files? === |
| 101 | ==== How to write "move_files_level1" and "move_files_level2" ? ==== |
| 102 | |
| 103 | This files contains two columns. |
| 104 | 1. The first one indicates the name of the files to copy (path starting from directory '''fast_????''' (or '''full_????''') |
| 105 | 1. The second indicates where to copy the files (path starting from the main directory of the Template copy) |
| 106 | All lines begining with a # not taking into account |
| 107 | |
| 108 | ==== How to write "routine_level1" and "routine_level2"? ==== |
| 109 | |
| 110 | Those files are simply batch files. They will be executed from the main directory of the Template copy. |
| 111 | A good way to code those files will be to redirect all the output. |
| 112 | |
| 113 | ==== How to write "dir_test.py" ? ==== |
| 114 | |
| 115 | 1. First copy the file /Users/madgraph/TEST/Python_lib/dir_test_default.py in your fast_???? (or full_????) directory |
| 116 | 1. Change his name in dir_test.py |
| 117 | 1. Then follows the instruction inside (All the line starting with '#>>' indicates an action to perform). |
| 118 | |
| 119 | This files indicates how to use an external programs and what you have to do if you choose to implement your python code. |
| 120 | |
| 121 | ==== How to write "expected_results.txt" ? ==== |
| 122 | This files must contains three columns |
| 123 | 1. the first one is of string symbolizing the result (this string must be unique) |
| 124 | 1. The second one is the expected value |
| 125 | 1. The third one is the difference pourcentage authorize without warning. |
| 126 | a. if you want to compare string put 's' |
| 127 | a. if you want to have exact value put '0' |
| 128 | |
| 129 | ==== How to write "test_results.txt" ? ==== |
| 130 | If you choose to develop your own code to collect data, you have to write explicitly the file 'test_result.txt' (in the directory '''fast_????''' or '''full_????''') |
| 131 | This files must contains two columns |
| 132 | 1. The first one is of string symbolizing the result (this string must be unique) |
| 133 | 1. The second one is the related value |
| 134 | |
| 135 | |
| 136 | == Discussion/Idea? == |
| 137 | |
| 138 | |
| 139 | |
| 140 | |
| 141 | -- Main.OlivierMattelaer - 18 Nov 2008 |