diff --git a/Release/dreqPy/docs/CMIP6_MIP_tables.xlsx b/Release/dreqPy/docs/CMIP6_MIP_tables.xlsx
index c7598ce..b5eb5c8 100644
Binary files a/Release/dreqPy/docs/CMIP6_MIP_tables.xlsx and b/Release/dreqPy/docs/CMIP6_MIP_tables.xlsx differ
diff --git a/Release/dreqPy/docs/dreq.xml b/Release/dreqPy/docs/dreq.xml
index b873a87..0e2592f 100644
--- a/Release/dreqPy/docs/dreq.xml
+++ b/Release/dreqPy/docs/dreq.xml
@@ -1,11 +1,11 @@
-Draft CMIP6 Data Request [01.00.27]
+Draft CMIP6 Data Request [01.00.29]
The CMIP6 Data Request will specify the variables requested for the CMIP6 archive, and the detail the experiments and time slices for which they are required.
Martin Juckes
-2018-07-25
+2018-12-11
CF Standard Name table; CMIP6 Controlled Vocabularies; ESDOC CMIP6 Experiment Documentation
-01.00.27
+01.00.29
@@ -15,10 +15,8 @@
-
-
@@ -31,14 +29,12 @@
-
-
@@ -67,16 +63,15 @@
+
-
-
@@ -86,7 +81,6 @@
-
@@ -111,13 +105,11 @@
-
-
@@ -150,7 +142,6 @@
-
@@ -166,7 +157,6 @@
-
@@ -201,7 +191,6 @@
-
@@ -225,7 +214,6 @@
-
@@ -241,26 +229,19 @@
-
-
-
-
-
-
-
@@ -288,7 +269,6 @@
-
@@ -318,17 +298,14 @@
-
-
-
@@ -494,7 +471,6 @@
-
@@ -518,7 +494,6 @@
-
@@ -539,12 +514,10 @@
-
-
@@ -701,11 +674,14 @@
+
+
+
+
+
-
-
@@ -895,176 +871,164 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -2128,7 +2092,6 @@
-
@@ -2145,7 +2108,6 @@
-
@@ -2404,7 +2366,6 @@
-
@@ -2438,7 +2399,6 @@
-
@@ -2693,15 +2653,6 @@
-
-
-
-
-
-
-
-
-
@@ -2900,7 +2851,6 @@
-
@@ -3167,92 +3117,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -3339,7 +3203,6 @@
-
@@ -3367,7 +3230,6 @@
-
@@ -3391,11 +3253,9 @@
-
-
@@ -3423,7 +3283,6 @@
-
@@ -3582,78 +3441,73 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
@@ -3704,75 +3558,75 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
+
-
-
+
+
-
+
-
+
-
+
-
-
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
+
+
@@ -3784,70 +3638,70 @@
-
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
+
+
-
-
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
+
+
+
@@ -3858,9 +3712,9 @@
-
-
-
+
+
+
@@ -3869,56 +3723,56 @@
-
-
-
+
+
+
-
+
-
-
-
-
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
@@ -3928,69 +3782,69 @@
-
+
-
-
-
-
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
+
-
+
-
-
-
-
+
+
+
+
@@ -3998,7 +3852,7 @@
-
+
@@ -4008,47 +3862,47 @@
-
+
-
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -4062,57 +3916,57 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -4125,43 +3979,43 @@
-
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
@@ -4169,178 +4023,174 @@
-
-
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
-
+
+
+
-
+
-
-
-
-
-
+
+
+
+
+
@@ -4351,23 +4201,23 @@
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
@@ -4378,15 +4228,15 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
+
@@ -4398,314 +4248,314 @@
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
+
-
-
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
+
-
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
+
-
-
-
-
+
+
+
+
-
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
-
-
+
+
+
+
-
+
-
+
-
-
+
+
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -4713,44 +4563,44 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
-
-
+
+
+
+
-
-
+
+
-
-
-
+
+
+
@@ -4765,51 +4615,51 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
+
-
-
-
-
+
+
+
+
-
-
+
+
-
-
+
+
-
+
-
-
-
+
+
+
@@ -4818,7 +4668,7 @@
-
+
@@ -4829,10 +4679,10 @@
-
-
-
-
+
+
+
+
@@ -4841,8 +4691,8 @@
-
-
+
+
@@ -4852,29 +4702,29 @@
-
-
-
-
-
-
+
+
+
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
@@ -4883,24 +4733,24 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
+
+
@@ -4911,55 +4761,55 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -4973,8 +4823,8 @@
-
-
+
+
@@ -4997,11 +4847,11 @@
-
-
+
+
-
+
@@ -5013,14 +4863,14 @@
-
-
+
+
-
+
@@ -5031,31 +4881,31 @@
-
+
-
+
-
-
-
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
+
-
-
-
-
-
+
+
+
+
+
@@ -5077,15 +4927,15 @@
-
+
-
+
-
-
+
+
@@ -5094,13 +4944,13 @@
-
+
-
+
-
-
-
+
+
+
@@ -5116,13 +4966,13 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
@@ -5132,15 +4982,15 @@
-
+
-
-
+
+
@@ -5151,204 +5001,203 @@
-
+
-
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
+
+
-
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
+
+
+
@@ -5376,28 +5225,28 @@
-
+
-
-
-
+
+
+
-
-
+
+
-
+
-
-
+
+
-
-
+
+
-
+
@@ -5405,7 +5254,7 @@
-
+
@@ -5413,87 +5262,87 @@
-
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -5513,18 +5362,18 @@
-
+
-
-
-
-
-
-
+
+
+
+
+
+
@@ -5535,13 +5384,13 @@
-
-
+
+
-
+
-
+
@@ -5551,72 +5400,72 @@
-
-
-
-
-
+
+
+
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
+
@@ -5624,18 +5473,18 @@
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
+
@@ -5644,81 +5493,81 @@
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -5732,31 +5581,31 @@
-
-
-
-
+
+
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
@@ -5767,49 +5616,53 @@
-
-
-
-
-
+
+
+
+
+
+
-
+
-
-
-
+
+
+
-
+
-
-
-
+
+
-
+
+
+
-
-
-
+
+
+
+
-
+
+
-
+
@@ -5819,45 +5672,39 @@
-
-
+
-
-
-
-
-
+
+
+
+
+
-
-
-
+
-
+
-
-
-
+
+
-
-
-
+
-
+
@@ -5885,6 +5732,7 @@
+
@@ -5893,7 +5741,6 @@
-
@@ -5923,8 +5770,8 @@
-
-
+
+
@@ -5947,13 +5794,12 @@
-
-
+
+
-
@@ -5985,6 +5831,7 @@
+
@@ -6046,7 +5893,7 @@
-
+
@@ -6095,24 +5942,24 @@
-
-
-
-
+
+
+
+
-
-
+
+
-
+
-
+
-
+
-
+
@@ -6128,7 +5975,6 @@
-
@@ -6166,13 +6012,13 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
@@ -6212,10 +6058,9 @@
-
-
+
@@ -6272,12 +6117,6 @@
-
-
-
-
-
-
@@ -6286,7 +6125,7 @@
-
+
@@ -6299,7 +6138,7 @@
-
+
@@ -6313,7 +6152,6 @@
-
@@ -6389,6 +6227,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -6402,7 +6254,6 @@
-
@@ -6412,43 +6263,43 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -6456,55 +6307,64 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -6514,265 +6374,283 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -6785,115 +6663,132 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -6903,106 +6798,105 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -7013,286 +6907,298 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
@@ -7311,22 +7217,18 @@
-
-
-
-
@@ -7337,7 +7239,6 @@
-
@@ -7364,7 +7265,6 @@
-
@@ -7407,7 +7307,6 @@
-
@@ -7431,15 +7330,11 @@
-
-
-
-
@@ -7471,14 +7366,10 @@
-
-
-
-
@@ -7496,31 +7387,23 @@
-
-
-
-
-
-
-
-
@@ -7530,9 +7413,7 @@
-
-
@@ -7540,7 +7421,6 @@
-
@@ -7548,16 +7428,13 @@
-
-
-
@@ -7569,25 +7446,17 @@
-
-
-
-
-
-
-
-
@@ -7604,7 +7473,6 @@
-
@@ -7622,7 +7490,6 @@
-
@@ -7638,7 +7505,6 @@
-
@@ -7671,7 +7537,6 @@
-
@@ -7685,7 +7550,6 @@
-
@@ -7699,23 +7563,19 @@
-
-
+
-
-
-
@@ -7737,7 +7597,6 @@
-
@@ -7745,18 +7604,15 @@
-
-
-
@@ -7764,7 +7620,6 @@
-
@@ -7776,6 +7631,7 @@
+
@@ -7788,34 +7644,27 @@
-
-
-
-
-
-
-
@@ -7841,7 +7690,6 @@
-
@@ -7849,23 +7697,15 @@
-
-
-
-
-
-
-
-
@@ -7875,11 +7715,8 @@
-
-
-
@@ -7888,19 +7725,15 @@
-
-
-
-
@@ -7909,29 +7742,28 @@
-
-
-
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
+
-
+
-
+
-
+
@@ -7942,12 +7774,12 @@
-
+
-
+
@@ -7958,36 +7790,36 @@
-
+
-
+
-
+
-
+
-
-
-
+
+
+
-
-
+
+
-
+
-
+
@@ -8009,7 +7841,7 @@
-
+
@@ -8025,7 +7857,7 @@
-
+
@@ -8036,52 +7868,53 @@
-
-
-
-
+
+
+
+
-
+
-
-
-
+
+
+
-
-
+
+
-
+
-
+
-
+
-
+
+
-
+
-
+
@@ -8092,7 +7925,7 @@
-
+
@@ -8111,28 +7944,28 @@
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
@@ -8140,7 +7973,7 @@
-
+
@@ -8151,23 +7984,23 @@
-
-
+
+
-
+
-
+
-
-
+
+
-
-
+
+
@@ -8186,23 +8019,23 @@
-
-
+
+
-
+
-
+
-
+
-
+
@@ -8212,30 +8045,30 @@
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
@@ -8243,11 +8076,11 @@
-
+
-
+
-
+
@@ -8257,30 +8090,30 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
+
+
@@ -8297,16 +8130,16 @@
-
+
-
+
-
+
-
+
@@ -8318,109 +8151,109 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -8429,7 +8262,7 @@
-
+
@@ -8437,10 +8270,8 @@
-
-
@@ -8452,6 +8283,7 @@
+
@@ -8461,17 +8293,15 @@
-
+
-
-
@@ -8481,7 +8311,6 @@
-
@@ -8490,14 +8319,11 @@
-
-
-
@@ -8513,6 +8339,7 @@
+
@@ -8541,6 +8368,7 @@
+
@@ -8570,6 +8398,7 @@
+
@@ -8589,8 +8418,6 @@
-
-
@@ -8607,13 +8434,12 @@
-
+
-
@@ -8633,19 +8459,16 @@
-
-
-
@@ -8655,7 +8478,6 @@
-
@@ -8667,7 +8489,6 @@
-
@@ -8689,7 +8510,6 @@
-
@@ -8718,12 +8538,10 @@
-
-
@@ -8733,7 +8551,6 @@
-
@@ -8747,14 +8564,13 @@
-
+
-
@@ -8763,7 +8579,6 @@
-
@@ -8781,10 +8596,10 @@
-
+
@@ -8793,14 +8608,12 @@
-
-
@@ -8811,6 +8624,7 @@
+
@@ -8819,38 +8633,18 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -8858,9 +8652,7 @@
-
-
@@ -8872,60 +8664,27 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -8948,6 +8707,7 @@
+
@@ -9019,8 +8779,8 @@
-
+
@@ -9066,7 +8826,6 @@
-
@@ -9091,7 +8850,6 @@
-
@@ -9100,7 +8858,6 @@
-
@@ -9138,22 +8895,19 @@
-
-
-
-
+
@@ -9193,7 +8947,7 @@
-
+
@@ -9212,14 +8966,15 @@
+
-
+
-
+
@@ -9308,6 +9063,7 @@
+
@@ -9327,6 +9083,7 @@
+
@@ -9374,6 +9131,7 @@
+
@@ -9411,30 +9169,22 @@
-
-
-
-
-
-
-
-
@@ -9518,22 +9268,18 @@
-
-
-
-
-
+
@@ -9561,6 +9307,7 @@
+
@@ -9590,19 +9337,15 @@
-
-
-
-
-
+
@@ -9617,7 +9360,6 @@
-
@@ -9626,22 +9368,16 @@
-
-
-
-
-
-
@@ -9655,11 +9391,10 @@
-
-
+
@@ -9672,7 +9407,6 @@
-
@@ -9682,7 +9416,6 @@
-
@@ -9692,12 +9425,10 @@
-
-
@@ -9718,17 +9449,15 @@
-
-
-
+
@@ -9761,10 +9490,8 @@
-
-
@@ -9783,6 +9510,7 @@
+
@@ -9833,6 +9561,7 @@
+
@@ -9856,6 +9585,7 @@
+
@@ -9879,9 +9609,7 @@
-
-
@@ -9901,9 +9629,7 @@
-
-
@@ -10021,16 +9747,11 @@
-
-
-
-
-
@@ -10049,18 +9770,15 @@
-
-
-
@@ -10072,10 +9790,8 @@
-
-
@@ -10083,7 +9799,6 @@
-
@@ -10095,7 +9810,6 @@
-
@@ -10109,18 +9823,14 @@
-
-
-
-
@@ -10128,29 +9838,21 @@
-
-
-
-
-
-
-
-
@@ -10159,7 +9861,6 @@
-
@@ -10192,7 +9893,6 @@
-
@@ -10214,6 +9914,7 @@
+
@@ -10233,11 +9934,11 @@
-
+
@@ -10269,7 +9970,6 @@
-
@@ -10287,23 +9987,19 @@
-
-
-
-
@@ -10312,7 +10008,6 @@
-
@@ -10322,21 +10017,18 @@
-
-
-
+
-
@@ -10346,8 +10038,6 @@
-
-
@@ -10366,6 +10056,7 @@
+
@@ -10384,12 +10075,10 @@
-
-
@@ -10403,15 +10092,13 @@
-
-
-
+
@@ -10426,7 +10113,6 @@
-
@@ -10437,6 +10123,7 @@
+
@@ -10470,8 +10157,8 @@
-
+
@@ -10509,7 +10196,6 @@
-
@@ -10522,53 +10208,40 @@
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
@@ -10576,67 +10249,39 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -10650,7 +10295,6 @@
-
@@ -10684,34 +10328,26 @@
-
-
-
-
-
-
-
-
@@ -10725,38 +10361,30 @@
-
-
-
-
-
-
-
-
@@ -10781,9 +10409,7 @@
-
-
@@ -10793,18 +10419,15 @@
-
-
-
@@ -10813,15 +10436,12 @@
-
-
-
@@ -10833,31 +10453,26 @@
-
+
-
-
-
-
-
@@ -10865,12 +10480,11 @@
-
-
+
@@ -10888,7 +10502,6 @@
-
@@ -10929,7 +10542,6 @@
-
@@ -10949,10 +10561,8 @@
-
-
@@ -10963,7 +10573,6 @@
-
@@ -10983,7 +10592,6 @@
-
@@ -10992,7 +10600,6 @@
-
@@ -11012,7 +10619,6 @@
-
@@ -11026,7 +10632,6 @@
-
@@ -11043,7 +10648,6 @@
-
@@ -11056,18 +10660,15 @@
-
+
-
-
-
@@ -11078,7 +10679,6 @@
-
@@ -11106,7 +10706,6 @@
-
@@ -11151,22 +10750,19 @@
-
-
-
-
+
@@ -11190,23 +10786,19 @@
-
-
-
-
@@ -11216,9 +10808,7 @@
-
-
@@ -11250,8 +10840,6 @@
-
-
@@ -11264,7 +10852,6 @@
-
@@ -11289,7 +10876,6 @@
-
@@ -11309,12 +10895,9 @@
-
-
-
@@ -11323,7 +10906,6 @@
-
@@ -11340,7 +10922,6 @@
-
@@ -11357,18 +10938,15 @@
-
+
-
-
-
@@ -11379,6 +10957,7 @@
+
@@ -11399,35 +10978,24 @@
-
-
-
-
-
-
-
-
-
-
-
@@ -11452,6 +11020,7 @@
+
@@ -11513,12 +11082,7 @@
-
-
-
-
-
@@ -11537,8 +11101,6 @@
-
-
@@ -11589,7 +11151,6 @@
-
@@ -11597,10 +11158,6 @@
-
-
-
-
@@ -11615,49 +11172,38 @@
-
-
-
-
-
+
-
-
-
-
-
-
+
-
-
@@ -11686,7 +11232,6 @@
-
@@ -11729,19 +11274,14 @@
-
-
-
-
-
@@ -11754,14 +11294,12 @@
-
-
@@ -11788,9 +11326,8 @@
-
-
+
@@ -11853,15 +11390,10 @@
-
-
-
-
-
@@ -11872,13 +11404,11 @@
-
-
@@ -11893,25 +11423,20 @@
-
-
-
-
+
-
-
@@ -11919,21 +11444,16 @@
-
-
-
+
-
-
-
@@ -11942,8 +11462,8 @@
-
+
@@ -11956,7 +11476,6 @@
-
@@ -11964,14 +11483,13 @@
-
+
-
@@ -11983,7 +11501,6 @@
-
@@ -12006,21 +11523,18 @@
-
-
-
@@ -12085,7 +11599,6 @@
-
@@ -12095,17 +11608,15 @@
-
-
-
+
@@ -12237,18 +11748,16 @@
-
+
-
-
@@ -12260,18 +11769,15 @@
-
-
-
@@ -12286,16 +11792,14 @@
-
-
-
-
+
+
@@ -12329,7 +11833,7 @@
-
+
@@ -12339,7 +11843,6 @@
-
@@ -12367,12 +11870,10 @@
-
-
@@ -12387,12 +11888,10 @@
-
-
@@ -12418,7 +11917,6 @@
-
@@ -12469,7 +11967,6 @@
-
@@ -12490,23 +11987,18 @@
-
-
-
-
-
@@ -12520,15 +12012,14 @@
-
+
-
@@ -12570,7 +12061,6 @@
-
@@ -12585,8 +12075,8 @@
-
+
@@ -12615,12 +12105,10 @@
-
-
@@ -12646,7 +12134,6 @@
-
@@ -12654,21 +12141,17 @@
-
-
-
-
@@ -12681,7 +12164,6 @@
-
@@ -12691,10 +12173,8 @@
-
-
@@ -12712,7 +12192,6 @@
-
@@ -12722,7 +12201,6 @@
-
@@ -12757,9 +12235,7 @@
-
-
@@ -12781,7 +12257,6 @@
-
@@ -12823,14 +12298,12 @@
-
-
@@ -12871,7 +12344,6 @@
-
@@ -12881,7 +12353,6 @@
-
@@ -12904,7 +12375,6 @@
-
@@ -12919,10 +12389,7 @@
-
-
-
@@ -12938,22 +12405,19 @@
-
-
-
-
+
@@ -12997,8 +12461,6 @@
-
-
@@ -13028,7 +12490,6 @@
-
@@ -13050,14 +12511,13 @@
-
-
+
@@ -13066,9 +12526,7 @@
-
-
@@ -13086,7 +12544,6 @@
-
@@ -13098,9 +12555,7 @@
-
-
@@ -13111,7 +12566,6 @@
-
@@ -13145,7 +12599,6 @@
-
@@ -13158,7 +12611,6 @@
-
@@ -13168,7 +12620,6 @@
-
@@ -13187,11 +12638,11 @@
-
+
@@ -13232,13 +12683,10 @@
-
-
-
@@ -13252,7 +12700,6 @@
-
@@ -13281,7 +12728,6 @@
-
@@ -13297,16 +12743,15 @@
-
+
-
-
+
@@ -13802,7 +13247,6 @@
-
@@ -13821,13 +13265,13 @@
-
+
@@ -13837,7 +13281,6 @@
-
@@ -13876,7 +13319,6 @@
-
@@ -13889,7 +13331,6 @@
-
@@ -13898,8 +13339,6 @@
-
-
@@ -13913,45 +13352,26 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -13986,7 +13406,6 @@
-
@@ -14019,7 +13438,6 @@
-
@@ -14032,7 +13450,6 @@
-
@@ -14045,17 +13462,13 @@
-
-
-
-
@@ -14077,7 +13490,6 @@
-
@@ -14086,7 +13498,6 @@
-
@@ -14102,7 +13513,6 @@
-
@@ -14120,10 +13530,8 @@
-
-
@@ -14165,9 +13573,9 @@
-
+
@@ -14178,21 +13586,20 @@
-
+
-
-
+
@@ -14200,15 +13607,15 @@
+
-
+
-
@@ -14252,7 +13659,7 @@
-
+
@@ -14324,11 +13731,11 @@
-
+
-
+
@@ -14585,7 +13992,7 @@
-
+
@@ -14605,7 +14012,7 @@
-
+
@@ -14626,9 +14033,9 @@
-
-
-
+
+
+
@@ -15290,22 +14697,22 @@
-
+
-
+
-
+
-
+
-
+
-
+
@@ -15620,7 +15027,7 @@
-
+
@@ -15677,6 +15084,10 @@
+
+
+
+
@@ -15989,6 +15400,7 @@
+
@@ -16050,7 +15462,7 @@
-
+
@@ -16143,27 +15555,29 @@
-
-
-
-
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
+
-
-
+
+
@@ -16580,7 +15994,7 @@
-
+
@@ -16652,12 +16066,18 @@
+
+
+
+
+
+
@@ -16670,6 +16090,13 @@
+
+
+
+
+
+
+
@@ -16694,12 +16121,15 @@
+
+
+
@@ -16761,7 +16191,7 @@
-
+
@@ -16825,10 +16255,10 @@
-
-
-
-
+
+
+
+
@@ -16851,8 +16281,8 @@
-
-
+
+
@@ -17365,7 +16795,7 @@
-
+
@@ -17460,9 +16890,9 @@
-
-
-
+
+
+
@@ -17533,42 +16963,42 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
@@ -17586,29 +17016,29 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -17616,17 +17046,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -18164,7 +17594,7 @@
-
+
@@ -18246,9 +17676,9 @@
-
+
-
+
@@ -18280,6 +17710,8 @@
+
+
@@ -18433,7 +17865,7 @@
-
+
@@ -18493,59 +17925,59 @@
-
-
-
-
-
-
+
+
+
+
+
+
-
-
+
+
-
+
-
+
-
+
-
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -18554,45 +17986,45 @@
-
+
-
+
-
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
@@ -18607,19 +18039,19 @@
-
+
-
-
-
-
+
+
+
+
-
+
-
-
+
+
@@ -18632,55 +18064,55 @@
-
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
-
+
-
-
-
+
+
+
-
-
+
+
-
+
-
+
-
-
-
-
+
+
+
+
@@ -18688,37 +18120,37 @@
-
+
-
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -18728,53 +18160,53 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
+
-
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
+
-
+
-
-
+
+
-
-
-
+
+
+
@@ -18783,429 +18215,429 @@
-
-
-
+
+
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
+
-
-
-
+
+
+
-
-
-
-
+
+
+
+
-
-
+
+
-
-
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
+
+
+
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
-
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
-
-
+
+
+
+
-
-
+
+
-
+
-
+
-
-
+
+
-
+
-
-
-
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
+
+
-
+
-
-
-
-
+
+
+
+
-
-
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
+
-
-
-
-
-
+
+
+
+
+
-
+
@@ -19213,47 +18645,47 @@
-
+
-
-
+
+
-
-
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
+
+
+
+
-
+
-
-
-
-
+
+
+
+
@@ -19261,65 +18693,65 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
+
+
-
+
-
-
+
+
-
-
-
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
@@ -19337,32 +18769,32 @@
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
-
-
+
+
+
@@ -19373,189 +18805,188 @@
-
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
-
+
+
+
-
-
-
-
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
-
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
+
-
+
-
+
-
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
+
+
@@ -19572,53 +19003,53 @@
-
+
-
+
-
+
-
-
-
-
-
+
+
+
+
+
-
-
-
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
@@ -19626,15 +19057,15 @@
-
+
-
-
-
-
-
+
+
+
+
+
@@ -19643,17 +19074,18 @@
-
+
+
-
+
-
-
+
+
-
-
+
+
@@ -19662,61 +19094,61 @@
-
-
-
-
-
+
+
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
+
+
+
+
-
+
-
-
+
+
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
@@ -19725,34 +19157,34 @@
-
-
+
+
-
-
-
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
+
+
@@ -19762,20 +19194,21 @@
-
-
-
+
+
+
+
-
+
@@ -19787,16 +19220,14 @@
-
+
-
-
-
+
@@ -19833,7 +19264,6 @@
-
@@ -19874,7 +19304,7 @@
-
+
@@ -19896,7 +19326,7 @@
-
+
@@ -19904,8 +19334,8 @@
-
-
+
+
@@ -19922,17 +19352,19 @@
-
+
-
+
-
+
+
+
@@ -19940,10 +19372,11 @@
-
-
+
+
+
-
+
@@ -19955,7 +19388,7 @@
-
+
@@ -19964,19 +19397,23 @@
-
+
+
+
+
+
-
+
-
+
@@ -20009,18 +19446,19 @@
-
-
-
+
+
+
+
-
+
@@ -20042,7 +19480,7 @@
-
+
@@ -20060,9 +19498,9 @@
-
-
-
+
+
+
@@ -20070,12 +19508,13 @@
-
-
-
+
+
+
+
@@ -20085,7 +19524,7 @@
-
+
@@ -20096,7 +19535,7 @@
-
+
@@ -20108,7 +19547,6 @@
-
@@ -20194,6 +19632,7 @@
+
@@ -20201,10 +19640,12 @@
+
+
-
-
+
+
@@ -20212,7 +19653,7 @@
-
+
@@ -20227,7 +19668,7 @@
-
+
@@ -20239,16 +19680,21 @@
+
-
-
+
+
+
+
+
+
diff --git a/Release/dreqPy/docs/dreq2Defn.xml b/Release/dreqPy/docs/dreq2Defn.xml
index 5dd36de..0c19f34 100644
--- a/Release/dreqPy/docs/dreq2Defn.xml
+++ b/Release/dreqPy/docs/dreq2Defn.xml
@@ -109,8 +109,8 @@ xsi:schemaLocation="http://w3id.org/cmip6dr/ns vocabFrameworkSchema_v01beta.xsd"
-
-
+
+
@@ -183,7 +183,7 @@ xsi:schemaLocation="http://w3id.org/cmip6dr/ns vocabFrameworkSchema_v01beta.xsd"
-
+
diff --git a/Release/dreqPy/docs/dreq2Sample.xml b/Release/dreqPy/docs/dreq2Sample.xml
index e5185b4..e2f255d 100644
--- a/Release/dreqPy/docs/dreq2Sample.xml
+++ b/Release/dreqPy/docs/dreq2Sample.xml
@@ -6,126 +6,126 @@ xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:pav="http://purl.org/pav/2.3"
xmlns="urn:w3id.org:cmip6.dreq.dreq:a">
-Draft CMIP6 Data Request [01.00.27]
+Draft CMIP6 Data Request [01.00.29]
The CMIP6 Data Request will specify the variables requested for the CMIP6 archive, and the detail the experiments and time slices for which they are required.
Martin Juckes
-2018-07-25
+2018-12-11
CF Standard Name table; CMIP6 Controlled Vocabularies; ESDOC CMIP6 Experiment Documentation
-01.00.27
+01.00.29
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/Release/dreqPy/docs/dreq2Schema.xsd b/Release/dreqPy/docs/dreq2Schema.xsd
index 2318d1b..82a0466 100644
--- a/Release/dreqPy/docs/dreq2Schema.xsd
+++ b/Release/dreqPy/docs/dreq2Schema.xsd
@@ -488,7 +488,7 @@
xs:stringDescriptionegid;
xs:stringIdentifier for experiment groupmip;
xs:stringMIP defining experimentmcfg;
- xs:stringModel categorytier;
+ xs:stringModel Source Typestier;
aa:st__integerListMonIncTier of experimentnstart;
xs:integerNumber of start datesstarty;
xs:stringStart yearendy;
diff --git a/Release/dreqPy/docs/dreqML.pdf b/Release/dreqPy/docs/dreqML.pdf
index 05c4122..54d2608 100644
Binary files a/Release/dreqPy/docs/dreqML.pdf and b/Release/dreqPy/docs/dreqML.pdf differ
diff --git a/Release/dreqPy/docs/dreqPy.pdf b/Release/dreqPy/docs/dreqPy.pdf
index 0aca69c..310fba9 100644
Binary files a/Release/dreqPy/docs/dreqPy.pdf and b/Release/dreqPy/docs/dreqPy.pdf differ
diff --git a/Release/dreqPy/docs/dreqSupp.xml b/Release/dreqPy/docs/dreqSupp.xml
index 667a542..ed542cb 100644
--- a/Release/dreqPy/docs/dreqSupp.xml
+++ b/Release/dreqPy/docs/dreqSupp.xml
@@ -1,127 +1,127 @@
-CMIP6 Data Request Supplement [01.00.27]
+CMIP6 Data Request Supplement [01.00.29]
The CMIP6 Data Request will specify the variables requested for the CMIP6 archive, and the detail the experiments and time slices for which they are required.
Martin Juckes
-2018-07-26
+2018-12-11
CF Standard Name table; CMIP6 Controlled Vocabularies; ESDOC CMIP6 Experiment Documentation
-01.00.27
+01.00.29
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -135,11 +135,10 @@
-
+
-
@@ -159,9 +158,7 @@
-
-
@@ -177,10 +174,10 @@
+
-
@@ -193,7 +190,7 @@
-
+
@@ -207,7 +204,7 @@
-
+
@@ -215,12 +212,12 @@
+
-
diff --git a/Release/dreqPy/dreq.py b/Release/dreqPy/dreq.py
index 398a500..48c6432 100644
--- a/Release/dreqPy/dreq.py
+++ b/Release/dreqPy/dreq.py
@@ -3,7 +3,7 @@
1. A collection of records
2. Index
"""
-import xml, string, collections
+import xml, collections
import xml.dom
import xml.dom.minidom
import re, shelve, os, sys
@@ -33,13 +33,26 @@
"""
+dreqMonitoring = '''
+
+
+'''
+
+
jsh='''
+%s
-'''
+''' % dreqMonitoring
def dref(i,x):
return i._inx.uid[i.__dict__[x]]
@@ -977,21 +990,22 @@ def __init__(self, xmlVersion=None, dreqXML=None, configdoc=None, useShelve=Fals
## dreqItemBase._htmlStyle['__general__'] = {'addRemarks':True}
- self.pageTmpl = """
%s
+ self.pageTmpl = """%%s
+%%s
+
%s
-
-
+
-%s
+%%s
-"""
+""" % dreqMonitoring
def getHtmlItemStyle(self, sect):
"""Get the styling method associated with a given section."""
diff --git a/Release/dreqPy/extensions/collect.py b/Release/dreqPy/extensions/collect.py
index c75c2bd..a042962 100644
--- a/Release/dreqPy/extensions/collect.py
+++ b/Release/dreqPy/extensions/collect.py
@@ -3,13 +3,23 @@
import collections
+def _expt__CMORvar(self):
+ """Return set of CMORvar item identifiers for CMORvars requested for this experiment"""
+ cmv = set()
+ for u in self._get__requestItem():
+ ri = self._inx.uid[u]
+ rl = self._inx.uid[ri.rlid]
+ for i in rl._get__CMORvar():
+ cmv.add(i)
+ return cmv
+
def _expt__requestItem(self):
"""Return set of request item item identifiers for request items linked directly or indirectly to this experiment"""
s = set()
for u in [self.uid,self.mip,self.egid]:
- if 'requestItem' in self._inx.uid[u].a:
- for x in self._inx.uid[u].a['requestItem']:
+ if 'requestItem' in self._inx.iref_by_sect[u].a:
+ for x in self._inx.iref_by_sect[u].a['requestItem']:
s.add(x)
return s
@@ -245,6 +255,7 @@ def add(dq):
"""Add extensions to data request section classes."""
dq.coll['mip'].items[0].__class__._get__expt = _mip__expt
dq.coll['experiment'].items[0].__class__._get__requestItem = _expt__requestItem
+ dq.coll['experiment'].items[0].__class__._get__CMORvar = _expt__CMORvar
dq.coll['requestItem'].items[0].__class__._get__expt = _requestItem__expt
dq.coll['requestLink'].items[0].__class__._get__expt = _requestLink__expt
dq.coll['requestLink'].items[0].__class__._get__CMORvar = _requestLink__CMORvar
diff --git a/Release/dreqPy/extensions/versions.py b/Release/dreqPy/extensions/versions.py
index 9ef813d..80f443c 100644
--- a/Release/dreqPy/extensions/versions.py
+++ b/Release/dreqPy/extensions/versions.py
@@ -13,13 +13,13 @@ def compare(self, oth,count=True,lst='short',sect='CMORvar' ):
if k not in this._uidDict:
n0 += 1
if lst != None:
- print 'Only in %s: %s [%s]' % (oth.version, k, that._uidDict[k].label )
+ print ( 'Only in %s: %s [%s]' % (oth.version, k, that._uidDict[k].label ) )
for k in sorted( this._uidDict.keys() ):
if k not in that._uidDict:
n1 += 1
if lst != None:
- print 'Only in %s: %s [%s]' % (self.version, k, this._uidDict[k].label )
+ print ( 'Only in %s: %s [%s]' % (self.version, k, this._uidDict[k].label ) )
elif this._uidDict[k].__dict__ != that._uidDict[k].__dict__:
n2 += 1
@@ -29,16 +29,16 @@ def compare(self, oth,count=True,lst='short',sect='CMORvar' ):
for i in s1 + s2 + s3:
cc[i] += 1
if lst == 'long':
- print 'Changed in %s -- %s: %s [%s], {%s|%s|%s}' % (self.version,oth.version, k, this._uidDict[k].label, str(s1),str(s2),str(s3) )
+ print ('Changed in %s -- %s: %s [%s], {%s|%s|%s}' % (self.version,oth.version, k, this._uidDict[k].label, str(s1),str(s2),str(s3) ) )
if n0 == 0 and n1 == 0:
- print '%s (%s --> %s):: No additons or removals' % (sect,oth.version,self.version)
+ print ('%s (%s --> %s):: No additons or removals' % (sect,oth.version,self.version) )
else:
- print '%s (%s --> %s):: Added %s, Removed %s' % (sect,oth.version,self.version,n1,n0)
- print '%s:: Number changed in %s -- %s: %s' % (sect, self.version,oth.version,n2)
+ print ('%s (%s --> %s):: Added %s, Removed %s' % (sect,oth.version,self.version,n1,n0) )
+ print ('%s:: Number changed in %s -- %s: %s' % (sect, self.version,oth.version,n2) )
if n2 > 0:
msg = '; '.join( ['%s: %s' % (k,cc[k]) for k in sorted(cc.keys())] )
- print '%s:: Attribute changes: %s' % (sect,msg)
+ print ('%s:: Attribute changes: %s' % (sect,msg) )
def fetch(self,version=None, vdir=None):
files = ['dreq.xml', 'dreq2Defn.xml', 'dreqSupp.xml', 'dreqSuppDefn.xml']
@@ -53,7 +53,7 @@ def fetch(self,version=None, vdir=None):
u = utmpl % (version,f)
page = requests.get(u)
md5 = hashlib.md5(page.text.encode('utf-8')).hexdigest()
- print version, f, md5
+ print ( (version, f, md5 ) )
oo = open( '%s/%s/%s' % (vdir,version,f), 'w' )
oo.write( page.text.encode('utf-8') )
oo.close()
diff --git a/Release/dreqPy/makeTables.py b/Release/dreqPy/makeTables.py
index 7d82891..c379c0f 100644
--- a/Release/dreqPy/makeTables.py
+++ b/Release/dreqPy/makeTables.py
@@ -215,6 +215,12 @@ def stidLink01(self,a,targ,frm='',ann=''):
else:
return '%s [%s]: %s [%s]' % ( targ._h.title, a, targ.__href__(label=targ.title), targ.label )
+ def baseLink01(self,targ,frm='',ann=''):
+ if targ._h.label == 'remarks':
+ return 'Broken link [%s]' % ( targ.__href__() )
+ else:
+ return '%s: %s' % ( targ.label, targ.__href__(odir='../u/',label=targ.title) )
+
def rqlLink02(self,targ,frm='',ann=''):
t2 = targ._inx.uid[targ.refid]
if t2._h.label == 'remarks':
@@ -230,7 +236,11 @@ def rqiLink02(self,targ,frm='',ann=''):
if t2._h.label == 'remarks':
return '%s: %s' % ( targ.__href__(odir='../u/', label=targ.title), "Link to request link broken" )
else:
- t3 = t2._inx.uid[t2.refid]
+ try:
+ t3 = t2._inx.uid[t2.refid]
+ except:
+ print t2.uid, t2.__dict__
+ raise
if t3._h.label == 'remarks':
return '%s [%s]: %s' % ( targ.__href__(odir='../u/', label=targ.title), t2.__href__(odir='../u/', label=t2.title),"Link to request group broken" )
else:
@@ -258,7 +268,7 @@ def cmvLink(self,targ,frm='',ann=''):
return '%s {%s}: %s [%s: %s] (%s)' % ( targ.__href__(odir='../u/', label=targ.label), targ.mipTable, targ.title, targ.frequency, t2.title, nrq )
def objLink(self,targ,frm='',ann=''):
- return '%s: %s' % ( targ.label, targ.__href__(odir='../u/', label=targ.title,title=targ.description) )
+ return '%s [%s]: %s' % ( targ.label, targ.mip, targ.__href__(odir='../u/', label=targ.title,title=targ.description) )
def unitLink(self,targ,frm='',ann=''):
return '%s [%s]: %s' % ( targ.text, targ.label, targ.__href__(odir='../u/', label=targ.title) )
@@ -287,14 +297,19 @@ def cmLink(self,targ,frm='',ann=''):
return '%s [%s]: %s {%s/%s}' % ( targ.cell_methods,targ.label, targ.__href__(odir='../u/', label=targ.title),sz0,sz1 )
def objLnkLink(self,targ,frm='',ann=''):
+ lab1 = targ.title
+ if lab1 == '':
+ lab1 = targ.label
+
if frm == 'objective':
t2 = targ._inx.uid[targ.rid]
t3 = targ._inx.uid[t2.refid]
thislab = '%s (%s)' % (t2.mip,t3.label)
- return '%s: %s' % ( t2.title, t2.__href__(odir='../u/',label=thislab) )
+ ##return '%s: %s' % ( t2.title, t2.__href__(odir='../u/',label=thislab) )
+ return '%s: %s' % ( targ.__href__(odir='../u/',label=lab1), t2.__href__(odir='../u/',label=thislab, title=t2.title) )
else:
t2 = targ._inx.uid[targ.oid]
- return '%s: %s' % ( t2.label, t2.__href__(odir='../u/',label=t2.title) )
+ return '%s: %s' % ( targ.__href__(odir='../u/',label=lab1), t2.__href__(odir='../u/',label=t2.label, title=t2.title) )
def labTtl(self,targ,frm='',ann=''):
return '%s: %s' % ( targ.__href__(odir='../u/', label=targ.label), targ.title )
@@ -376,6 +391,7 @@ def run():
dq.itemStyles['structure'] = styls.strLink
dq.itemStyles['cellMethods'] = styls.cmLink
dq.itemStyles['remarks'] = styls.remarkLink
+ dq.itemStyles['exptgroup'] = styls.baseLink01
dq.itemStyles['objectiveLink'] = styls.objLnkLink
dq.itemStyles['requestVarGroup'] = styls.vgrpLink
dq.itemStyles['miptable'] = styls.miptableLink
diff --git a/Release/dreqPy/misc_utils.py b/Release/dreqPy/misc_utils.py
index 9bc0040..30215c3 100644
--- a/Release/dreqPy/misc_utils.py
+++ b/Release/dreqPy/misc_utils.py
@@ -1,4 +1,4 @@
-import collections, string , os, sys
+import collections, os, sys
import logging
import time
import difflib
@@ -125,9 +125,9 @@ def rankCMORvars(dq):
if i.title != ic.title:
print ( '%s: %s, %s' % (kk, ic.title, i.title) )
kd += 1
- if string.find( ic.modeling_realm, ' ' ) != -1:
- for x in string.split( ic.modeling_realm ):
- r.add( string.strip( x ) )
+ if ic.modeling_realm.find( ' ' ) != -1:
+ for x in ic.modeling_realm.split( ):
+ r.add( x.strip( ) )
elif ic.modeling_realm not in ['__unset__','']:
r.add( ic.modeling_realm )
if 'requestVar' in dq.inx.iref_by_sect[ic.uid].a:
@@ -160,9 +160,9 @@ def rankVars(dq):
if 'CMORvar' in dq.inx.iref_by_sect[i.uid].a:
for cmv in dq.inx.iref_by_sect[i.uid].a['CMORvar']:
ic = dq.inx.uid[cmv]
- if string.find( ic.modeling_realm, ' ' ) != -1:
- for x in string.split( ic.modeling_realm ):
- r.add( string.strip( x ) )
+ if ic.modeling_realm.find( ' ' ) != -1:
+ for x in ic.modeling_realm.split( ):
+ r.add( x.strip( ) )
elif ic.modeling_realm not in ['__unset__','']:
r.add( ic.modeling_realm )
if 'requestVar' in dq.inx.iref_by_sect[cmv].a:
@@ -363,7 +363,7 @@ def getExptByThisMip(self,mip,rqi,tiermax=1):
self.expts[ex.mip].add(id)
self.exrqi[id].add( i.uid )
ks = sorted( list( self.expts.keys() ) )
- xx = string.join( ['%s: %s' % (k,len(self.expts[k])) for k in ks], ', ' )
+ xx = ', '.join( ['%s: %s' % (k,len(self.expts[k])) for k in ks] )
print ( '%s:: %s' % (mip,xx) )
class c1(object):
diff --git a/Release/dreqPy/overviewTabs.py b/Release/dreqPy/overviewTabs.py
index 84abe01..0bf3fce 100644
--- a/Release/dreqPy/overviewTabs.py
+++ b/Release/dreqPy/overviewTabs.py
@@ -1,15 +1,19 @@
-
-import collections, string, os
+import collections, os
import xlsxwriter
try:
import dreq
+ import scope_utils
+ import table_utils
except:
import dreqPy.dreq as dreq
+ import dreqPy.scope_utils as scope_utils
+ import dreqPy.table_utils as table_utils
jsh='''
-'''
+%s
+''' % dreq.dreqMonitoring
def vfmt( x ):
if x < 1.e9:
@@ -44,7 +48,7 @@ def __init__(self,sc,mt_tables,tiermax=1,pmax=1,only=False,vols=None,fnm='new',m
self.fnm = fnm
assert vols == None or type(vols) == type( () ), 'vols argument must be none or tuple of length 2: %s' % type(vols)
self.dq = sc.dq
- self.mips = ['CMIP','AerChemMIP', 'C4MIP', 'CFMIP', 'DAMIP', 'DCPP', 'FAFMIP', 'GeoMIP', 'GMMIP', 'HighResMIP', 'ISMIP6', 'LS3MIP', 'LUMIP', 'OMIP', 'PAMIP', 'PMIP', 'RFMIP', 'ScenarioMIP', 'VolMIP', 'CORDEX', 'DynVar', 'SIMIP', 'VIACSAB']
+ self.mips = ['CMIP'] + scope_utils.mips
self.mipsp = self.mips[:-4]
self.sc = sc
self.pmax=pmax
@@ -138,10 +142,10 @@ def makeMMhtml(self,m,m2):
##print ('INFO.mmhtml.00001: %s, %s' % (kc,len( self.cc[kc].a.keys() ) ) )
if len( self.cc[kc].a.keys() ) == 0:
return
- if not os.path.isdir( 'tabs03' ):
+ if not os.path.isdir( 'html/tabs03' ):
print ( 'WARNING.makeMMhtml: creating directory for html files: tabs03' )
- os.mkdir( 'tabs03' )
- oo = open( 'tabs03/%s' % fss, 'w' )
+ os.mkdir( 'html/tabs03' )
+ oo = open( 'html/tabs03/%s' % fss, 'w' )
ttl = 'Data requested by %s from %s experiments (tier %s, priority %s)' % (m,m2,self.tiermax,self.pmax)
jsh = ''
pream = '%s
\n' % ttl
@@ -300,5 +304,5 @@ def writeMips(self,sss=False):
import dreqPy.scope as scope
import dreqPy.makeTables as makeTables
sc = scope.dreqQuery()
- r = r1( sc, makeTables.tables, tiermax=1, pmax=1 )
- r = r1( sc, makeTables.tables, tiermax=3, pmax=3 )
+ r = r1( sc, table_utils.tables, tiermax=1, pmax=1 )
+ r = r1( sc, table_utils.tables, tiermax=3, pmax=3 )
diff --git a/Release/dreqPy/packageConfig.py b/Release/dreqPy/packageConfig.py
index eeb4fa9..93d0387 100644
--- a/Release/dreqPy/packageConfig.py
+++ b/Release/dreqPy/packageConfig.py
@@ -16,7 +16,7 @@
VERSION_DEFAULT_DIR = os.path.join(HOME, '.dreqPy')
VERSION_DIR = os.environ.get('DRQ_VERSION_DIR', VERSION_DEFAULT_DIR)
-__version__ = "01.00.27"
+__version__ = "01.00.29"
__versionComment__ = "Version %s" % __version__
__title__ = "dreqPy"
__description__ = "CMIP6 Data Request Python API"
diff --git a/Release/dreqPy/scope.py b/Release/dreqPy/scope.py
index af61ff3..59d096a 100644
--- a/Release/dreqPy/scope.py
+++ b/Release/dreqPy/scope.py
@@ -17,15 +17,17 @@ def __init__(self):
if imm == 1:
from utilities import cmvFilter, gridOptionSort
import misc_utils
+ import scope_utils
import fgrid
import volsum
else:
+ import dreqPy.scope_utils as scope_utils
import dreqPy.volsum as volsum
import dreqPy.fgrid as fgrid
from dreqPy.utilities import cmvFilter, gridOptionSort
import dreqPy.misc_utils as misc_utils
-import collections, string, operator
+import collections, operator
import sys, os
def intdict():
@@ -247,8 +249,9 @@ def __init__(self,dq=None,tierMax=1):
self.exptFilterBlack = None
self.uniqueRequest = False
- self.mips = set( [x.label for x in self.dq.coll['mip'].items ] )
- self.mips = ['CMIP','AerChemMIP', 'C4MIP', 'CFMIP', 'DAMIP', 'DCPP', 'FAFMIP', 'GeoMIP', 'GMMIP', 'HighResMIP', 'ISMIP6', 'LS3MIP', 'LUMIP', 'OMIP', 'PAMIP', 'PMIP', 'RFMIP', 'ScenarioMIP', 'VolMIP', 'CORDEX', 'DynVar', 'SIMIP', 'VIACSAB']
+ ##self.mips = set( [x.label for x in self.dq.coll['mip'].items ] )
+ ##self.mips = ['CMIP','AerChemMIP', 'C4MIP', 'CFMIP', 'DAMIP', 'DCPP', 'FAFMIP', 'GeoMIP', 'GMMIP', 'HighResMIP', 'ISMIP6', 'LS3MIP', 'LUMIP', 'OMIP', 'PAMIP', 'PMIP', 'RFMIP', 'ScenarioMIP', 'VolMIP', 'CORDEX', 'DynVar', 'SIMIP', 'VIACSAB']
+ self.mips = ['CMIP'] + scope_utils.mips
self.mipsp = self.mips[:-4]
self.cmvGridId, i4 = fgrid.fgrid( self.dq )
assert len(i4) == 0
@@ -1007,8 +1010,8 @@ def rqiByMip( self, mip):
l2.append( self.dq.inx.uid[u] )
l20 = self.rqiByMip0( mip )
- for i in l20:
- assert i in l2
+ ##for i in l20:
+ ##assert i in l2
return l2
@@ -1061,7 +1064,6 @@ def checkDir(self,odir,msg):
print ('Created directory %s for: %s' % (odir,msg) )
def xlsByMipExpt(self,m,ex,pmax,odir='xls',xls=True,txt=False,txtOpts=None):
- import scope_utils
mxls = scope_utils.xlsTabs(self,tiermax=self.tierMax,pmax=pmax,xls=xls, txt=txt, txtOpts=txtOpts,odir=odir)
mlab = misc_utils.setMlab( m )
mxls.run( m, mlab=mlab )
@@ -1598,7 +1600,7 @@ class dreqUI(object):
-------------------------
-v : print version and exit;
--unitTest : run some simple tests;
- -m : MIP of list of MIPs (comma separated; for objective selection see note [1] below);
+ -m : MIP of list of MIPs (comma separated; use '_all_' for all; for objective selection see note [1] below);
-l : List for options:
o: objectives
e: experiments
@@ -1621,10 +1623,12 @@ class dreqUI(object):
--omitCmip : omit the CMIP core data request (included by default);
--allgrd : When a variable is requested on multiple grids, archive all grids requested (default: only the finest resolution);
--unique : List only variables which are requested uniquely by this MIP, for at least one experiment;
- --esm : include ESM experiments (default is to omit esm-hist etc from volume estimates);
- --txt : Create text file with requested variables;
+ --esm : include ESM experiments (default is to omit esm-hist etc from volume estimates; over-ridden by --mcat);
+ --txt : Create text (tab seperated variables) file with requested variables; the files are placed in the same directory as xls files;
--mcfg : Model configuration: 7 integers, comma separated, 'nho','nlo','nha','nla','nlas','nls','nh1'
default: 259200,60,64800,40,20,5,100
+ --mcat [none]: Source types inlcuded in model, as comma separated list: only experiments with all required source types are included in volume estimates. Set to 'none' to turn off filtering;
+ --mcat-strict : if present, the experiments are filtered to those with the specified configuration, not allowing components to be switched off;
--txtOpts : options for content of text file: (v|c)[(+|-)att1[,att2[...]]]
--xlsDir : Directory in which to place variable listing [xls];
--xmlVersion : version number of XML document [only with extension enabled -- not stable];
@@ -1641,7 +1645,7 @@ class dreqUI(object):
drq -m HighResMIP:Ocean.DiurnalCycle
"""
def __init__(self,args):
- self.adict = {}
+ self.adict = {'mcatStrict':False}
self.knownargs = {'-m':('m',True), '-p':('p',True), '-e':('e',True), '-t':('t',True), \
'-h':('h',False), '--printLinesMax':('plm',True), \
'-l':('l',True),
@@ -1661,6 +1665,8 @@ def __init__(self,args):
'--allgrd':('allgrd',False), \
'--unique':('unique',False), \
'--mcfg':('mcfg',True), \
+ '--mcat':('mcat',True), \
+ '--mcatStrict':('mcatStrict',False), \
'--txtOpts':('txtOpts',True), \
'--xmlVersion':('xmlVersion',True), \
'--xlsDir':('xlsdir',True), '--xls':('xls',False) \
@@ -1681,6 +1687,9 @@ def __init__(self,args):
assert self.checkArgs( notKnownArgs ), 'FATAL ERROR 001: Arguments not recognised: %s' % (str(notKnownArgs) )
+ if self.adict.get('mcat','none') != 'none':
+ self.adict['esm'] = True
+
if 'm' in self.adict:
if self.adict['m'] == '_all_':
pass
@@ -1699,6 +1708,14 @@ def __init__(self,args):
if 'omitcmip' not in self.adict and 'CMIP' not in self.adict['m']:
self.adict['m'].add( 'CMIP' )
+ if self.adict.get('mcat','none') != 'none':
+ stys = self.adict['mcat'].split(',')
+ stys_pp = stys[:]
+ if 'AOGCM' in stys:
+ stys_pp.append( 'AGCM' )
+ if 'AGCM' in stys_pp:
+ stys_pp += ['LAND','RAD']
+ self.adict['_mcat'] = (stys,stys_pp)
if 'grdpol' in self.adict:
assert self.adict['grdpol'] in ['native','1deg'], 'Grid policy argument --grdpol must be native or 1deg : %s' % self.adict['grdpol']
@@ -1784,13 +1801,14 @@ def run(self, dq=None):
return
if 'mcfg' in self.adict:
- ll = string.split( self.adict['mcfg'], ',' )
+ ll = self.adict['mcfg'].split( ',' )
assert len(ll) == 7, 'Length of model configuration argument must be 7 comma separated integers: %s' % self.adict['mcfg']
lli = [ int(x) for x in ll]
self.sc = dreqQuery( dq=self.dq )
self.sc.intersection = self.intersection
+
if 'grdforce' in self.adict:
self.sc.gridPolicyForce = self.adict['grdforce']
if 'grdpol' in self.adict:
@@ -1817,6 +1835,7 @@ def run(self, dq=None):
if doSf:
self.adict['sf'] = True
assert not ('legacy' in self.adict and 'sf' in self.adict), "Conflicting command line argument, 'legacy' and 'sf': use only one of these"
+
if makeXls or makeTxt or doSf:
xlsOdir = self.adict.get( 'xlsdir', 'xls' )
self.sc.checkDir( xlsOdir, 'xls files' )
@@ -1893,10 +1912,54 @@ def run(self, dq=None):
for e in ['esm-hist','esm-hist-ext','esm-piControl','piControl-spinup','esm-piControl-spinup']:
ss.add( self.sc.exptByLabel[ e ] )
self.sc.exptFilterBlack = ss
+
+ if self.sc.exptFilterBlack != None and self.sc.exptFilter != None:
+ ss = [x for x in self.sc.exptFilter if x not in self.sc.exptFilterBlack]
+ if len(ss) == 0:
+ print ( """WARNING: filter settings give no experiments: try using --esm flag: by default esm experiments are filtered out""" )
+ return
+
+
+ makeTxt = self.adict.get( 'txt', False )
makeXls = self.adict.get( 'xls', False )
+ if 'txtOpts' in self.adict:
+ if self.adict['txtOpts'][0] == 'v':
+ txtOpts = NT_txtopts( 'var' )
+ else:
+ txtOpts = NT_txtopts( 'cmv' )
+ else:
+ txtOpts=None
+
+ exptFilters = collections.defaultdict( set )
+ for i in self.dq.coll['experiment'].items:
+## required
+ tt = tuple( i.mcfg.split( '|' )[0].strip().split(' ') )
+## allowed
+ uu = tuple( i.mcfg.split( '|' )[1].strip().split(' ') )
+ exptFilters[(tt,uu)].add(i.uid)
+## NB this is the default##
if 'sf' in self.adict:
- vs = volsum.vsum( self.sc, odsz, npy, odir=xlsOdir, tabByFreqRealm=tabByFreqRealm )
+ if self.adict.get('mcat','none') != 'none':
+ thisFilter = set()
+ ##self.sc.exptFilter = set()
+ for tt,uu in exptFilters:
+ t1 = all( [x in self.adict['_mcat'][1] for x in tt] )
+ if self.adict['mcatStrict']:
+ t1 = t1 and all( [x in (tt + uu) for x in self.adict['_mcat'][0] ] )
+ if t1:
+ thisFilter = thisFilter.union( exptFilters[(tt,uu)] )
+ if self.sc.exptFilter == None:
+ self.sc.exptFilter = thisFilter
+ else:
+ self.sc.exptFilter = thisFilter.intersection( self.sc.exptFilter )
+ if len( self.sc.exptFilter ) == 0:
+ print ( 'WARNING: filter settings give no experiments' )
+ return
+
+ ##vs = volsum.vsum( self.sc, odsz, npy, odir=xlsOdir, tabByFreqRealm=tabByFreqRealm, txt=makeTxt,txtOpts=txtOpts, exptFilter=exptFilters['AOGCM'] )
+ vs = volsum.vsum( self.sc, odsz, npy, odir=xlsOdir, tabByFreqRealm=tabByFreqRealm, txt=makeTxt,txtOpts=txtOpts )
+ self.vs = vs
vs.run( self.adict['m'], '%s/requestVol_%s_%s_%s' % (xlsOdir,mlab,tierMax,pmax), pmax=pmax, doxlsx=makeXls )
totalOnly = False
if len( self.adict['m'] ) == 1 or totalOnly:
@@ -1935,18 +1998,10 @@ def run(self, dq=None):
adsCount = self.adict.get( 'count', False )
self.getVolByMip(pmax,eid,adsCount)
- makeTxt = self.adict.get( 'txt', False )
+
if makeXls or makeTxt:
mips = self.adict['m']
- if 'txtOpts' in self.adict:
- if self.adict['txtOpts'][0] == 'v':
- txtOpts = NT_txtopts( 'var' )
- else:
- txtOpts = NT_txtopts( 'cmv' )
- else:
- txtOpts=None
-
self.sc.xlsByMipExpt(mips,eid,pmax,odir=xlsOdir,xls=makeXls,txt=makeTxt,txtOpts=txtOpts)
def printListCc(self,cc):
diff --git a/Release/dreqPy/scope_utils.py b/Release/dreqPy/scope_utils.py
index 13c5aa4..61e538a 100644
--- a/Release/dreqPy/scope_utils.py
+++ b/Release/dreqPy/scope_utils.py
@@ -1,4 +1,4 @@
-import collections, string
+import collections
try:
import table_utils
except:
@@ -6,6 +6,8 @@
##NT_txtopts = collections.namedtuple( 'txtopts', ['mode'] )
+mips = ['AerChemMIP', 'CDRMIP', 'C4MIP', 'CFMIP', 'DAMIP', 'DCPP', 'FAFMIP', 'GeoMIP', 'GMMIP', 'HighResMIP', 'ISMIP6', 'LS3MIP', 'LUMIP', 'OMIP', 'PAMIP', 'PMIP', 'RFMIP', 'ScenarioMIP', 'VolMIP', 'CORDEX', 'DynVar', 'SIMIP', 'VIACSAB']
+
class c1(object):
def __init__(self):
self.a = collections.defaultdict( int )
@@ -22,7 +24,7 @@ def __init__(self,sc,tiermax=1,pmax=1,xls=True, txt=False, txtOpts=None, odir='x
self.doXls = xls
self.doTxt = txt
- self.mips = ['AerChemMIP', 'C4MIP', 'CFMIP', 'DAMIP', 'DCPP', 'FAFMIP', 'GeoMIP', 'GMMIP', 'HighResMIP', 'ISMIP6', 'LS3MIP', 'LUMIP', 'OMIP', 'PAMIP', 'PMIP', 'RFMIP', 'ScenarioMIP', 'VolMIP', 'CORDEX', 'DynVar', 'SIMIP', 'VIACSAB']
+ self.mips = mips
self.mipsp = ['DECK','CMIP6',] + self.mips[:-4]
self.tabs = table_utils.tables( sc, xls=xls, txt=txt, txtOpts=txtOpts, odir=odir )
diff --git a/Release/dreqPy/simpleCheck.py b/Release/dreqPy/simpleCheck.py
index d6e5879..b4a6240 100644
--- a/Release/dreqPy/simpleCheck.py
+++ b/Release/dreqPy/simpleCheck.py
@@ -9,7 +9,9 @@
##from . import __init__
##DOC_DIR = __init__.DOC_DIR
-import string, os, sys, collections
+import os, sys, collections
+
+usingPython3 = sys.version_info >= (3,0)
try:
import pkgutil
@@ -144,14 +146,42 @@ def _clear_ch04(self):
os.unlink( '.simpleCheck_check2_err.txt' )
os.unlink( '.simpleCheck_check2.txt' )
- def _ch04_checkCmd(self):
- import os
+ def _getCmd(self):
if self.entryPoint == 'drq':
- cmd = 'drq'
+ self.cmd = 'drq'
else:
- cmd = 'python dreqCmdl.py'
+ if usingPython3:
+ self.cmd = 'python3 dreqCmdl.py'
+ else:
+ self.cmd = 'python dreqCmdl.py'
+
+ def _ch05_checkMcfg(self):
+ self._getCmd()
+ thisCmd = '%s -m CMIP -e historical --mcfg 259200,60,64800,40,20,5,100' % self.cmd
+ os.popen( '%s 2> .simpleCheck_check5_err.txt 1>.simpleCheck_check5.txt' % thisCmd ).readlines()
+
+ ii = open( '.simpleCheck_check5_err.txt' ).readlines()
+ if len(ii) > 0:
+ print ( 'WARNING[005]: failed to get volume est. with command line call' )
+ self.ok = False
+ ##self._clear_ch04()
+ return
+
+ ii = open( '.simpleCheck_check5.txt' ).readlines()
+ if len(ii) < 1:
+ print ( 'WARNING[006]: failed to get get volume est. with command line call' )
+ self.ok = False
+ ##self._clear_ch04()
+ return
+
+ self.ok = True
+ return
+
+ def _ch04_checkCmd(self):
+ import os
+ self._getCmd()
- os.popen( '%s -v 2> .simpleCheck_check2_err.txt 1>.simpleCheck_check2.txt' % cmd ).readlines()
+ os.popen( '%s -v 2> .simpleCheck_check2_err.txt 1>.simpleCheck_check2.txt' % self.cmd ).readlines()
ii = open( '.simpleCheck_check2_err.txt' ).readlines()
if len(ii) > 0:
diff --git a/Release/dreqPy/table_utils.py b/Release/dreqPy/table_utils.py
index 4747ae5..9169d55 100644
--- a/Release/dreqPy/table_utils.py
+++ b/Release/dreqPy/table_utils.py
@@ -146,7 +146,7 @@ def cmvtabrec(self,j,t,orec):
raise
if self.txt:
- self.oo.write( '\t'.join( [t,] + orec) + '\n' )
+ self.oo.write( '\t'.join( [t,] + [x.replace('"',"'") for x in orec]) + '\n' )
def varrec(self,j,orec):
if self.xls:
@@ -158,7 +158,7 @@ def varrec(self,j,orec):
def var(self):
if self.xls:
- self.sht = self.newSheet( 'var' )
+ self.sht = self.newSheet( 'var' )
j = 0
hrec = ['Long name', 'units', 'description', 'Variable Name', 'CF Standard Name' ]
if self.xls:
@@ -366,10 +366,19 @@ def __init__(self, sc, subset=None, mcfgNote=None, dest='tables/test', skipped=s
thisp = str( min( pdict[cmv.uid] ) )
else:
thisp = str(cmv.defaultPriority)
- print 'ERROR.priority.0101: ',cmv.label,dest
+ print ('ERROR.priority.0101: %s, %s ' % (cmv.label,dest) )
else:
thisp = str(cmv.defaultPriority)
- orec = [thisp,var.title, var.units, var.description, cmv.description, var.label, var.sn, strc.cell_methods, cmv.positive, cmv.type, dims, cmv.label, cmv.modeling_realm, cmv.frequency, strc.cell_measures, cmv.prov,cmv.provNote,str(cmv.rowIndex),cmv.uid,cmv.vid,cmv.stid,strc.title, valid_min, valid_max, ok_min_mean_abs, ok_max_mean_abs]
+#
+# avoid duplication of information (added in 01.00.29)
+##
+ if cmv.description != var.description:
+ cmmt = cmv.description
+ else:
+ cmmt = ''
+ orec = [thisp,var.title, var.units, var.description, cmmt, var.label, var.sn, strc.cell_methods, cmv.positive, cmv.type, dims, cmv.label, cmv.modeling_realm, cmv.frequency, strc.cell_measures, cmv.prov,cmv.provNote,str(cmv.rowIndex),cmv.uid,cmv.vid,cmv.stid,strc.title, valid_min, valid_max, ok_min_mean_abs, ok_max_mean_abs]
+
+##
except:
print ('FAILED TO CONSTRUCT RECORD: %s [%s], %s [%s]' % (cmv.uid,cmv.label,var.uid,var.label) )
raise
@@ -417,7 +426,6 @@ def __init__(self, sc, subset=None, mcfgNote=None, dest='tables/test', skipped=s
if type( priority ) != type(1):
thisp = priority
priority = thisp[1]
- ##print 'ERROR in priority type[2]: ',priority, tslice[cmv.uid]
orec[0] = '%s' % priority
if tsmode[:4] in ['simp','bran']:
@@ -437,7 +445,7 @@ def __init__(self, sc, subset=None, mcfgNote=None, dest='tables/test', skipped=s
orec.append( grid )
if orec[0] in [0,'0',None]:
- print 'ERROR.priority.006: ',orec,dest
+ print ('ERROR.priority.006: %s, %s ' % (orec,dest))
if withoo:
oo.write( '\t'.join(orec ) + '\n' )
j+=1
diff --git a/Release/dreqPy/volsum.py b/Release/dreqPy/volsum.py
index e3f13ef..53bec73 100644
--- a/Release/dreqPy/volsum.py
+++ b/Release/dreqPy/volsum.py
@@ -58,15 +58,21 @@ def close(self):
self.wb.close()
class vsum(object):
- def __init__(self,sc,odsz,npy,exptFilter=None, odir='xls', tabByFreqRealm=False):
+ def __init__(self,sc,odsz,npy,exptFilter=None, odir='xls', tabByFreqRealm=False,txt=False,txtOpts=None):
self.tabByFreqRealm = tabByFreqRealm
+ self.doTxt = txt
+ self.txtOpts = txtOpts
idir = dreq.DOC_DIR
if 'collect' not in sc.dq._extensions_:
extCollect.add(sc.dq)
self.sc = sc
self.exptMipRql = collections.defaultdict( set )
+ if exptFilter != None:
+ assert type( exptFilter ) == type( set() ), 'FATAl.vsum.001: exptFilter argument must be type set: %s' % type( exptFilter )
for i in self.sc.dq.coll['requestLink'].items:
expts = requestLink__expt(i,rql=[i.uid,])
+ if exptFilter != None:
+ expts = exptFilter.intersection( expts )
for e in expts:
self.exptMipRql[ (i.mip,self.sc.dq.inx.uid[e].label) ].add( i.uid)
self.odsz=odsz
@@ -76,6 +82,7 @@ def __init__(self,sc,odsz,npy,exptFilter=None, odir='xls', tabByFreqRealm=False)
self.accum = False
self.odir = odir
self.efnsfx = ''
+ self.accPdict = collections.defaultdict( set )
if sc.gridPolicyForce == 'native':
self.efnsfx = '_fn'
elif sc.gridPolicyForce == '1deg':
@@ -109,20 +116,27 @@ def analAll(self,pmax,mips=None,html=True,makeTabs=True):
if mips == None:
theseMips = ['TOTAL',] + self.sc.mips
else:
- theseMips = mips
+ theseMips = list(mips)
+
+## move *TOTAL to end of list.
+ if '*TOTAL' in theseMips:
+ theseMips.remove( '*TOTAL' )
+ theseMips.append( '*TOTAL' )
self.rres = {}
self.rresu = {}
for m in theseMips:
olab = m
+ useAccPdict = False
if m == '*TOTAL':
- thism = theseMips.copy()
+ thism = theseMips[:]
if type( thism ) == type( set() ):
thism.remove( '*TOTAL' )
else:
- thism.pop( '*TOTAL' )
+ thism.remove( '*TOTAL' )
olab = misc_utils.setMlab( thism )
+ useAccPdict = True
elif type( theseMips ) == type( dict() ):
thism = {m:theseMips[m]}
else:
@@ -134,7 +148,7 @@ def analAll(self,pmax,mips=None,html=True,makeTabs=True):
self.run( thism, '%s/requestVol_%s_%s_%s' % (self.odir,olab,self.sc.tierMax,pmax), pmax=pmax,doxlsx=makeTabs )
- self.anal(olab=olab,doUnique='TOTAL' in theseMips, makeTabs=makeTabs)
+ self.anal(olab=olab,doUnique='TOTAL' in theseMips, makeTabs=makeTabs, useAccPdict=useAccPdict)
ttl = sum( [x for k,x in self.res['vu'].items()] )*2.*1.e-12
volsmm[m] = self.res['vm']
volsmmt[m] = self.res['vmt']
@@ -189,7 +203,7 @@ def xlsDest(self,mode,olab,lab2):
else:
return '%s/%s_%s_%s_%s_%s%s' % (self.odir,self.xlsPrefixM,olab,lab2,self.sc.tierMax,self.pmax,self.efnsfx)
- def anal(self,olab=None,doUnique=False,makeTabs=False,mode='full'):
+ def anal(self,olab=None,doUnique=False,makeTabs=False,mode='full',useAccPdict=False):
vmt = collections.defaultdict( int )
vm = collections.defaultdict( int )
ve = collections.defaultdict( int )
@@ -249,12 +263,12 @@ def anal(self,olab=None,doUnique=False,makeTabs=False,mode='full'):
ss = ss.union( lm[m] )
if makeTabs:
##table_utils.makeTab(self.sc.dq, subset=lm[m], dest=self.xlsDest('m',olab,m), collected=cc[m],exptUid=self.sc.exptByLabel.get(m,m) )
- table_utils.makeTab(self.sc, subset=lm[m], dest=self.xlsDest('m',olab,m), collected=cc[m] )
+ table_utils.makeTab(self.sc, subset=lm[m], dest=self.xlsDest('m',olab,m), collected=cc[m], txt=self.doTxt, txtOpts=self.txtOpts )
if olab != None and makeTabs:
- table_utils.makeTab(self.sc, subset=ss, dest=self.xlsDest('m',olab,'TOTAL'), collected=cct)
+ table_utils.makeTab(self.sc, subset=ss, dest=self.xlsDest('m',olab,'TOTAL'), collected=cct, txt=self.doTxt, txtOpts=self.txtOpts )
if olab != 'TOTAL' and doUnique:
- table_utils.makeTab(self.sc, subset=s_lm, dest=self.xlsDest('m',olab,'Unique'), collected=s_cc)
+ table_utils.makeTab(self.sc, subset=s_lm, dest=self.xlsDest('m',olab,'Unique'), collected=s_cc, txt=self.doTxt, txtOpts=self.txtOpts )
cc = collections.defaultdict( dict )
ucc = collections.defaultdict( dict )
@@ -265,7 +279,12 @@ def anal(self,olab=None,doUnique=False,makeTabs=False,mode='full'):
if olab != None and makeTabs:
el = self.sc.dq.inx.uid[e].label
- if olab in ['Total','TOTAL']:
+ if useAccPdict:
+ pdict = collections.defaultdict( set )
+ for vid, p in self.accPdict[e]:
+ pdict[vid].add( p )
+
+ elif olab in ['Total','TOTAL']:
pdict = None
elif (olab,el) in self.exptMipRql:
pdict = collections.defaultdict( set )
@@ -274,8 +293,9 @@ def anal(self,olab=None,doUnique=False,makeTabs=False,mode='full'):
for rqvid in self.sc.dq.inx.iref_by_sect[rql.refid].a['requestVar']:
rqv = self.sc.dq.inx.uid[rqvid]
pdict[rqv.vid].add( rqv.priority )
+ self.accPdict[e].add( (rqv.vid,rqv.priority) )
else:
- print 'INFO.00201: olab,e not found:',olab,el
+ print ( 'INFO.00201: olab,e not found:',olab,el )
pdict = None
tslice = {}
@@ -284,7 +304,7 @@ def anal(self,olab=None,doUnique=False,makeTabs=False,mode='full'):
tslice[v] = self.sc.cmvts[v][e]
dest = self.xlsDest('e',olab,el)
mode ='e'
- table_utils.makeTab(self.sc, subset=lex[e], dest=self.xlsDest(mode,olab,el), collected=cc[e],byFreqRealm=self.tabByFreqRealm, tslice=tslice, exptUid=e, tabMode=mode, pdict=pdict)
+ table_utils.makeTab(self.sc, subset=lex[e], dest=self.xlsDest(mode,olab,el), collected=cc[e],byFreqRealm=self.tabByFreqRealm, tslice=tslice, exptUid=e, tabMode=mode, pdict=pdict, txt=self.doTxt, txtOpts=self.txtOpts )
if olab != 'TOTAL' and doUnique:
for e,t in s_vet:
@@ -292,7 +312,7 @@ def anal(self,olab=None,doUnique=False,makeTabs=False,mode='full'):
for e in sorted( uve.keys() ):
if olab != None and makeTabs:
el = self.sc.dq.inx.uid[e].label
- table_utils.makeTab(self.sc, subset=s_lex[e], dest=self.xlsDest('u',olab,el), collected=ucc[e])
+ table_utils.makeTab(self.sc, subset=s_lex[e], dest=self.xlsDest('u',olab,el), collected=ucc[e], txt=self.doTxt, txtOpts=self.txtOpts)
self.res = { 'vmt':vmt, 'vet':vet, 'vm':vm, 'uve':uve, 've':ve, 'lm':lm, 'lex':lex, 'vu':vu, 'cc':cc, 'cct':cct, 'vf':vf}
diff --git a/Release/dreqPy/vrev.py b/Release/dreqPy/vrev.py
index 4158458..d3469d4 100644
--- a/Release/dreqPy/vrev.py
+++ b/Release/dreqPy/vrev.py
@@ -23,9 +23,13 @@ def chk2(self,vn,byExpt=False, byBoth=False):
cc = {}
l = dq.inx.iref_by_sect[v.uid].a['CMORvar']
for i in l:
- r = dq.inx.uid[i]
- kk = '%s.%s' % (r.mipTable, r.label )
- cc[i] = (kk,self.chkCmv( i, byExpt=byExpt, byBoth=byBoth ) )
+ try:
+ r = dq.inx.uid[i]
+ kk = '%s.%s' % (r.mipTable, r.label )
+ cc[i] = (kk,self.chkCmv( i, byExpt=byExpt, byBoth=byBoth ) )
+ except:
+ print ( 'failed at uid = %s' % i )
+ raise
return cc
@@ -110,7 +114,7 @@ def chkCmv(self,cmvid, byExpt=False, byBoth=False,expt=None):
if byExpt or byBoth:
s3 = set()
- if expt != None:
+ if expt != None and expt in self.sc.rqLinkByExpt:
for i in s2:
if i in self.sc.rqLinkByExpt[expt]:
s3.add(i)