diff --git a/examples/IntegrationBenchmark/ci_tests/benchmark_files/g4_em3_10e7_e-.csv b/examples/IntegrationBenchmark/ci_tests/benchmark_files/g4_em3_10e7_e-.csv index f17f5942..6cde91ca 100644 --- a/examples/IntegrationBenchmark/ci_tests/benchmark_files/g4_em3_10e7_e-.csv +++ b/examples/IntegrationBenchmark/ci_tests/benchmark_files/g4_em3_10e7_e-.csv @@ -1,20 +1,19 @@ # SPDX-FileCopyrightText: 2025 CERN # SPDX-License-Identifier: Apache-2.0 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164 -632000.000000, 4935904.807235, 2067681.219723, 10817348.033835, 4652808.964481, 21759654.716231, 8872559.667941, 38101147.278062, 14667074.319649, 59561627.597277, 21812166.186228, 85121390.786117, 29829544.966153, 113136863.968630, 38145594.998370, 141652035.389032, 46168807.237441, 168772222.386522, 53366610.209459, 192804642.988706, 59339871.659475, 212660463.995667, 63828960.728752, 227493030.987364, 66779680.261129, 237320491.790007, 68224363.315416, 242082768.419004, 68259130.377539, 242125459.241164, 67089413.700681, 238313343.197046, 64980289.911834, 231268188.668933, 62106694.223492, 221694024.431019, 58705582.686640, 210338888.881714, 54963708.365911, 197672042.315242, 51008206.279529, 184214263.601070, 46982861.465768, 170472159.911487, 42996517.085610, 156809060.899967, 39132661.333756, 143390805.139382, 35405727.969016, 130485079.048902, 31903914.654955, 118199567.446830, 28640433.980095, 106632109.561498, 25611025.513306, 95892382.026735, 22832932.785157, 85890665.139340, 20268966.935101, 76756516.425228, 17977802.332241, 68402294.415370, 15896316.915125, 60805758.697437, 14033607.191009, 53964781.863895, 12359666.254762, 47804739.186649, 10874181.223620, 42272927.705339, 9547794.970939, 37317344.606297, 8374448.486389, 32882154.903887, 7333253.978184, 28952529.638793, 6407437.977734, 25459928.651274, 5610760.361541, 22370990.792553, 4896267.424939, 19630521.840216, 4270280.757062, 17207247.715592, 3725508.653188, 15064875.986944, 3241049.780358, 13178986.315325, 2822074.699503, 11529019.561029, 2459800.910841, 10085914.435962, 2139134.874759, 8788121.399646, 1858460.499969, 7651507.815570, 1614094.900772, 6630999.723361, 1394888.457241, 5581284.321531, 977588.396671, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 -632000.000000, 4939395.054500, 2066032.134165, 10816060.079490, 4651520.293435, 21753241.626099, 8870027.711329, 38096133.421854, 14672784.695025, 59603833.803519, 21819553.989556, 85168251.908615, 29849268.187424, 113209534.568114, 38165286.395952, 141673108.187960, 46168833.257361, 168804915.678407, 53367118.593894, 192891001.533545, 59334133.344082, 212693740.596160, 63820573.467387, 227562584.073237, 66770725.482241, 237208354.336581, 68193267.783126, 241999002.414323, 68245444.613940, 242157503.217118, 67124334.889040, 238399442.162183, 64996419.731945, 231351267.584934, 62130893.444816, 221781558.643838, 58736948.207189, 210422503.430165, 54973062.864930, 197699399.784403, 51027051.299242, 184270733.219152, 46991471.245226, 170555635.631179, 43027462.251011, 156828814.147204, 39116421.592894, 143389936.236964, 35404979.889947, 130425500.592323, 31910594.460210, 118182561.353814, 28641582.152041, 106589271.645849, 25586859.107955, 95790356.214382, 22802064.170636, 85846402.065784, 20273209.136014, 76712447.537127, 17966174.101287, 68369094.752490, 15886424.612942, 60779024.597604, 14017714.115167, 53917865.178220, 12340723.389493, 47766056.316192, 10862437.676334, 42234631.044201, 9539649.158431, 37288104.956103, 8364792.647108, 32856706.798397, 7321220.481180, 28921283.024805, 6407771.310880, 25432194.783392, 5599289.495173, 22332857.033199, 4893163.148285, 19594805.492583, 4265894.811306, 17186381.227374, 3718254.114732, 15043904.733081, 3243809.086459, 13168760.448014, 2821597.032691, 11524473.951175, 2464885.056399, 10078736.092917, 2134512.022349, 8781463.793221, 1857201.104347, 7649653.304916, 1611650.464387, 6621986.977524, 1392852.765394, 5579870.215238, 979778.580557, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 -632000.000000, 4935301.933809, 2062615.957505, 10796334.619373, 4645010.414247, 21733889.330269, 8861278.566489, 38066935.953229, 14649289.303667, 59509959.168430, 21790316.857077, 85098470.879857, 29826506.082596, 113125942.316013, 38165693.010405, 141675520.922737, 46190184.472506, 168829883.802662, 53384484.134401, 192879339.987515, 59329692.875633, 212761365.568878, 63860230.075254, 227640742.990654, 66790854.213649, 237319008.306846, 68217302.003157, 242022053.818779, 68261524.778911, 242124565.016365, 67088267.372768, 238350666.801817, 64985465.504062, 231311083.528422, 62140855.044416, 221776943.065151, 58729012.740140, 210373561.115455, 54957996.556874, 197710505.856166, 51033521.791282, 184341686.334713, 47028403.464432, 170578995.352123, 43001527.161846, 156776218.400999, 39105181.691414, 143360923.852941, 35413935.870708, 130452993.368812, 31888396.737913, 118187052.549221, 28637100.434747, 106621481.553766, 25589295.637005, 95810265.929132, 22827123.454676, 85888152.211073, 20269835.052983, 76719428.494756, 17968844.811785, 68407285.202268, 15897262.508648, 60799919.832103, 14027244.345753, 53959897.735443, 12353465.670518, 47786273.328195, 10864480.487975, 42223737.973017, 9536310.211999, 37263211.215345, 8359402.234154, 32856631.682179, 7325717.981620, 28921429.668586, 6404314.294242, 25439917.268298, 5601116.193434, 22354642.006791, 4898388.969462, 19613483.995292, 4269369.820618, 17199280.304910, 3719657.705128, 15054289.872595, 3243218.520372, 13179059.327961, 2821450.109498, 11522812.187594, 2458899.911264, 10065843.129265, 2136796.525969, 8770428.878208, 1852525.409578, 7643766.145684, 1607147.656933, 6601646.612646, 1392920.567895, 5580213.964365, 979980.198752, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 -632000.000000, 4939933.896133, 2064592.471675, 10815435.242517, 4652869.849675, 21750954.670519, 8866989.444913, 38080442.218298, 14657702.109385, 59583754.670395, 21815809.180944, 85163624.414143, 29855785.519123, 113195397.282254, 38164639.224174, 141710267.877536, 46182816.676288, 168787770.727385, 53369900.804267, 192835980.276860, 59319674.707880, 212603909.994938, 63794296.267743, 227487128.555985, 66764121.678374, 237200279.665250, 68186819.797539, 241895447.324875, 68207408.448597, 241974875.061430, 67094490.625090, 238251739.097962, 64981434.802498, 231310145.561526, 62141040.906827, 221812074.793389, 58740746.653262, 210390627.310205, 54986840.562884, 197721442.713138, 51028521.188442, 184307012.057097, 47000725.230527, 170577666.732743, 43006904.763406, 156869387.599659, 39132460.348107, 143444563.846432, 35432320.440411, 130486422.826574, 31916406.254840, 118178159.659859, 28623235.836502, 106619173.797339, 25611428.734589, 95851806.915860, 22828293.004382, 85916212.716601, 20276258.653758, 76788549.199912, 17984015.757552, 68417526.301031, 15905361.227422, 60812914.780778, 14028433.443492, 53953433.359714, 12348853.183547, 47789980.658483, 10868968.731013, 42268112.144777, 9540540.849506, 37296857.424371, 8371823.652667, 32873082.084075, 7329409.524783, 28915832.009796, 6408907.399749, 25438290.282108, 5607322.701253, 22347044.580758, 4888835.656064, 19606890.717691, 4271689.692518, 17196425.810292, 3722603.197973, 15061199.032250, 3242960.220594, 13176543.985644, 2819770.925018, 11533552.433910, 2458138.323093, 10074773.615494, 2139331.069431, 8790059.612390, 1859685.842088, 7641027.723285, 1608922.826794, 6616579.474489, 1392946.143322, 5584394.961291, 979751.195685, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 -600400.000000, 4689503.759436, 1960642.636265, 10256450.983083, 4415116.767732, 20646488.756998, 8416608.862962, 36199328.026211, 13935571.807690, 56580791.162344, 20701397.708431, 80847003.588829, 28333042.715262, 107455428.083272, 36245514.109399, 134575049.956155, 43853257.727967, 160340768.950490, 50698668.843046, 183241702.088662, 56387293.305268, 202066664.209378, 60621537.977780, 216150266.362259, 63436482.831678, 225417962.180207, 64797074.644696, 229880571.105473, 64833927.872176, 230025809.144340, 63748050.141305, 226407262.760912, 61741497.009894, 219733791.468264, 59031866.285605, 210716173.457553, 55806121.501287, 199881707.245508, 52245636.627447, 187876554.336221, 48494877.615244, 175111617.274363, 44654975.104155, 162003898.852121, 40858066.417192, 148969658.215118, 37175282.630877, 136242785.685690, 33661325.154632, 123994942.962206, 30315416.301344, 112278868.470971, 27178923.179389, 101255188.172018, 24314898.163200, 91057228.266312, 21674611.980798, 81603941.195554, 19280224.283415, 72902938.126431, 17080216.874633, 64996183.073669, 15095904.665297, 57759451.381346, 13326302.019545, 51247853.258467, 11731323.838616, 45391310.435892, 10319710.925996, 40120710.447757, 9062772.408568, 35406850.211070, 7943120.644752, 31216551.755929, 6956633.910671, 27476050.738305, 6086853.914663, 24150549.679200, 5315608.707578, 21227825.714952, 4652158.444104, 18637079.915509, 4053882.825072, 16317620.956413, 3539842.036835, 14299432.688614, 3082819.341061, 12520839.700240, 2679788.402563, 10954416.235047, 2333025.040449, 9565562.563164, 2028619.067438, 8346851.666799, 1767134.547868, 7275005.988767, 1533548.826834, 6295629.394041, 1326167.152790, 5302589.718170, 928709.380311, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 -632000.000000, 4941939.029405, 2067007.626937, 10812387.062927, 4652062.624311, 21751257.317188, 8868027.542322, 38099626.069739, 14656249.387916, 59538534.946626, 21800273.058871, 85120126.114527, 29817720.783625, 113154983.399443, 38144358.220201, 141654148.208571, 46178504.489059, 168798276.456952, 53367512.035647, 192867859.486572, 59336613.492207, 212681394.909415, 63835726.101004, 227553395.159512, 66783949.052231, 237304205.847305, 68218331.485502, 242018563.983487, 68272962.369908, 242171053.019517, 67100717.243491, 238372527.978485, 64989514.224299, 231393472.926635, 62138998.244353, 221818295.937663, 58732392.691251, 210357084.457059, 54979205.094099, 197717600.351156, 51017785.578677, 184303447.622012, 47002055.088045, 170508070.917669, 43008812.946645, 156774846.215230, 39120177.745056, 143350488.169338, 35398119.992441, 130433551.622628, 31913349.037535, 118174218.467140, 28626289.835000, 106603927.827386, 25596152.684174, 95841573.537360, 22816005.860928, 85881926.871170, 20275924.592759, 76741640.357582, 17963782.593500, 68385091.494238, 15897467.207929, 60807904.468855, 14025007.761467, 53961305.699380, 12359407.552440, 47764364.349073, 10858620.100039, 42227315.330359, 9529864.972158, 37270860.627956, 8356509.267563, 32868269.805019, 7322851.674621, 28931792.105551, 6408718.231122, 25428597.330981, 5602939.343684, 22335986.086932, 4891581.955537, 19595829.812202, 4264626.687778, 17183552.554987, 3720540.914046, 15066303.575058, 3242894.398469, 13187390.452305, 2824016.116662, 11529933.936133, 2456645.888451, 10074495.847676, 2138033.917164, 8792045.774037, 1860199.444116, 7647003.487408, 1610362.163231, 6627502.837669, 1394428.173491, 5580332.189260, 978455.875890, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 -600400.000000, 4693832.379845, 1962780.533973, 10279729.372476, 4419314.395336, 20657995.623079, 8418817.257336, 36185588.075258, 13940566.689305, 56597362.615701, 20727412.502723, 80868977.387587, 28332395.860945, 107498512.457933, 36249954.719162, 134655988.079696, 43884054.008143, 160432767.251392, 50711654.025386, 183277121.112065, 56381534.752213, 202061803.737558, 60650956.591655, 216142387.249409, 63425170.764436, 225366812.158496, 64786251.753203, 229888897.104103, 64835711.688914, 230014841.557523, 63727348.155965, 226423220.856266, 61753857.823659, 219784405.195245, 59029840.070786, 210647711.355139, 55785072.650967, 199857558.670185, 52242611.969764, 187791278.309655, 48448607.678709, 175040761.833665, 44636536.971883, 161961938.697237, 40846684.322610, 148975647.206866, 37163949.583162, 136208938.303656, 33641766.268105, 123914869.940552, 30309126.878321, 112258725.437229, 27210476.819487, 101248384.054505, 24309203.680795, 91019732.158279, 21656488.549405, 81533413.789968, 19250626.178252, 72870741.758217, 17069671.554372, 64974638.442213, 15090574.021728, 57764050.597615, 13316447.463874, 51251251.387617, 11742008.674747, 45396215.007401, 10321497.048904, 40135168.379015, 9068204.676466, 35449145.805375, 7948932.350574, 31245289.618700, 6966447.054883, 27493992.863366, 6089187.009248, 24183486.978474, 5325876.146550, 21244917.425917, 4651623.273066, 18641656.016397, 4059673.528437, 16351286.293872, 3542017.281543, 14314789.258939, 3080714.291625, 12520018.567358, 2685172.067674, 10955176.889562, 2333890.452042, 9574744.478434, 2030141.433845, 8351932.044992, 1766312.527492, 7272219.358197, 1530554.037984, 6287890.935467, 1323549.163344, 5307403.887139, 929667.184907, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 -632000.000000, 4944423.190458, 2067628.418190, 10824651.016652, 4654932.742441, 21761596.846903, 8868140.425985, 38137740.394089, 14685464.115800, 59632694.344776, 21831671.780220, 85195593.149268, 29852062.255486, 113254107.121881, 38197885.570202, 141830800.563875, 46234427.356804, 168988187.173727, 53421940.304342, 193009005.008189, 59362177.964837, 212818724.046001, 63881889.126368, 227676548.655568, 66793110.197685, 237301757.717518, 68206288.312348, 241993797.212390, 68245803.997613, 242087699.883059, 67115413.048401, 238390161.054825, 65030786.436676, 231368937.043489, 62124539.256439, 221762700.804828, 58711026.070483, 210337680.025220, 54957625.280041, 197640834.234530, 50992761.899000, 184218591.010558, 46963765.686775, 170457282.637315, 42982647.228602, 156744610.373985, 39109829.422627, 143318647.974174, 35381308.794456, 130405353.215869, 31883551.009306, 118124932.918829, 28622097.107575, 106565060.893340, 25589973.247150, 95772236.186300, 22796333.802681, 85819327.437130, 20262481.477144, 76690434.257749, 17945898.655374, 68332487.405238, 15881512.500230, 60750010.873589, 14020676.196358, 53920138.195925, 12342574.889178, 47742812.662439, 10849194.192396, 42199648.001819, 9527145.885678, 37258746.549485, 8351150.729634, 32830952.522350, 7319535.714977, 28897438.904332, 6408242.224762, 25414371.837037, 5598684.509945, 22331520.488438, 4888184.547932, 19580185.359881, 4263452.222133, 17179594.650987, 3723658.273631, 15046390.516363, 3237588.298022, 13160261.674446, 2823174.365455, 11519927.682043, 2455793.384798, 10075281.587820, 2136284.925695, 8783213.495397, 1857815.185129, 7646921.280619, 1615662.712265, 6631113.025387, 1396350.573438, 5588959.124196, 981101.684100, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 -632000.000000, 4938239.648781, 2065941.067836, 10810662.559404, 4653792.569668, 21751234.610894, 8868941.618559, 38115427.620438, 14676047.298518, 59615293.091604, 21825317.932731, 85148046.295918, 29852665.430080, 113209893.252586, 38180408.652015, 141725703.663472, 46196846.126300, 168883091.175126, 53380039.538635, 192910167.326425, 59359714.988708, 212727241.239099, 63834185.135641, 227605829.727856, 66792595.010055, 237351443.283975, 68226674.343065, 242019214.754612, 68245728.690633, 242176273.835069, 67133162.272394, 238435793.079225, 65020313.311089, 231365473.016678, 62135142.480046, 221844679.861584, 58745790.868847, 210370104.161454, 54982294.073205, 197697081.477977, 50998189.085437, 184191534.377217, 46968684.966908, 170475738.955845, 42990162.005289, 156792874.874357, 39108744.626450, 143340272.106275, 35414886.770738, 130411562.115210, 31902666.211948, 118140457.946272, 28633931.633135, 106564736.538672, 25579731.759553, 95789525.541734, 22804925.820112, 85857135.635098, 20270608.242189, 76730649.107376, 17969763.220557, 68354551.494796, 15886939.383892, 60781637.120453, 14023509.051570, 53937191.720003, 12348096.498314, 47768919.574232, 10863132.063318, 42203968.418520, 9526760.990188, 37251089.596327, 8355740.651923, 32827461.434533, 7316267.763969, 28896216.088637, 6404214.597213, 25422487.939182, 5593163.727475, 22325854.963522, 4883962.652374, 19588356.236591, 4262410.296770, 17188322.026899, 3724577.607445, 15051446.616058, 3236093.767427, 13174936.017165, 2820731.691558, 11522131.593247, 2455741.152870, 10059276.063131, 2136302.249074, 8780080.786975, 1854004.457894, 7642536.286684, 1611426.681824, 6610582.391405, 1391689.628765, 5579758.784255, 978138.437677, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 -632000.000000, 4940826.994679, 2067754.395101, 10818502.378178, 4649401.759991, 21747730.636488, 8862426.803321, 38098347.064763, 14665356.636690, 59570672.976086, 21806607.719447, 85153180.516057, 29835341.991346, 113203171.062825, 38180962.170482, 141741534.364391, 46216273.466685, 168943490.191927, 53425365.429611, 192963829.321057, 59363853.171910, 212791016.987852, 63886536.399967, 227714900.301386, 66803363.251448, 237345216.024146, 68208205.258969, 241972081.390227, 68232433.488371, 242134005.762287, 67101413.793866, 238304088.530723, 64974345.263180, 231318580.033416, 62108490.067080, 221769414.830002, 58721698.219186, 210327248.615972, 54940912.581244, 197611045.012344, 50987322.031544, 184154848.118159, 46967814.475823, 170497748.956685, 42987545.023115, 156766451.918006, 39110852.700489, 143332117.796542, 35412569.582450, 130394867.817764, 31905821.393166, 118153393.808572, 28635954.148594, 106611076.610221, 25594158.406142, 95845507.212924, 22814562.612006, 85882006.514052, 20273057.193624, 76756804.796776, 17976552.952017, 68397542.124418, 15900972.954662, 60807846.516980, 14030933.131027, 53966637.301697, 12361466.193234, 47790792.096255, 10869123.433205, 42242457.167167, 9539748.761727, 37278536.566774, 8361806.787068, 32858807.532701, 7326951.332774, 28930794.666119, 6404647.559328, 25416357.758114, 5593075.294333, 22335160.062592, 4889359.918237, 19599289.982739, 4262841.118447, 17170550.451350, 3715012.500395, 15038454.547031, 3239641.406880, 13168868.317606, 2819403.328816, 11509515.846591, 2453596.309937, 10060448.515725, 2138143.735816, 8774983.728613, 1856151.869004, 7643588.563172, 1610352.650672, 6606759.198852, 1388809.237090, 5572756.413962, 976805.093609, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 -632000.000000, 4937393.670365, 2065556.146944, 10806670.321115, 4649859.079632, 21751911.362973, 8865056.769122, 38115206.774124, 14672315.442935, 59587203.421678, 21836653.580652, 85195436.125442, 29853897.887488, 113226819.201089, 38162151.062855, 141759741.983070, 46216400.778251, 168912487.858385, 53412398.452050, 192977254.049879, 59363917.506509, 212778747.710807, 63847517.410182, 227577444.116993, 66766433.341284, 237214505.319233, 68175994.834234, 241916298.747535, 68224387.376288, 242108701.052276, 67088229.598975, 238285562.182953, 64974542.971851, 231276541.303397, 62128444.667970, 221797927.705116, 58763706.588998, 210407951.023451, 54968907.698533, 197680985.795983, 51017062.573437, 184269635.096365, 47012731.840824, 170493145.987731, 43002733.647806, 156787470.536196, 39115421.384863, 143376285.753590, 35402446.482424, 130466939.799755, 31907993.200074, 118159712.210286, 28625983.659692, 106616994.584631, 25614473.671018, 95820056.116491, 22816871.658206, 85849279.728494, 20260841.870268, 76708300.925174, 17950656.478064, 68385567.843943, 15888232.173509, 60807687.681304, 14020670.103148, 53930698.384902, 12356480.281161, 47774231.090223, 10864073.601665, 42229288.441555, 9543850.427408, 37291061.058185, 8369187.381360, 32865683.912949, 7326047.657497, 28897767.097688, 6398700.346587, 25405015.827236, 5595539.237572, 22322606.372997, 4887526.256377, 19581347.830662, 4263565.942464, 17183531.670528, 3715286.909225, 15056846.032243, 3240781.126239, 13172134.276592, 2823215.473165, 11514897.552143, 2456918.807539, 10055364.356436, 2133530.499466, 8776084.214380, 1856318.495180, 7654142.245423, 1612221.398517, 6610436.668482, 1392043.696904, 5589567.074214, 977181.198904, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 -632000.000000, 4942930.237905, 2065673.184172, 10810642.031702, 4649409.375209, 21753649.105345, 8862079.123025, 38109199.028729, 14674077.897080, 59588908.138492, 21818000.039745, 85198319.126840, 29852111.881950, 113253005.016883, 38194849.670635, 141718395.968297, 46194907.680632, 168874322.949815, 53375470.381451, 192884524.015307, 59347063.286082, 212725498.528913, 63827736.170218, 227585574.919227, 66782024.618880, 237279903.742557, 68214899.496300, 241974628.868332, 68243280.558650, 242112304.862697, 67086773.091595, 238252042.521811, 64951576.223356, 231243758.978212, 62097004.296384, 221676515.063902, 58710370.440259, 210314729.633348, 54965350.962538, 197645095.811830, 50997676.892568, 184234881.484106, 46985978.123883, 170473537.868247, 43005440.516180, 156793994.477458, 39113452.978630, 143406300.399449, 35408394.162105, 130463202.131259, 31917020.447671, 118171205.039581, 28640197.621190, 106616192.952876, 25614791.037785, 95887403.647922, 22819957.683014, 85911023.980385, 20276714.559927, 76727287.746327, 17963757.785144, 68375131.202597, 15891861.559768, 60833742.137380, 14027561.567181, 53953339.979451, 12358182.912699, 47803506.340757, 10863667.119849, 42226178.503302, 9538505.738466, 37300325.737620, 8371346.570219, 32880453.759156, 7324281.650252, 28922135.506464, 6406106.844641, 25436441.841106, 5599534.588148, 22352773.422917, 4891496.622709, 19618907.759750, 4269704.002286, 17200867.374448, 3720495.891642, 15061188.410770, 3245932.870925, 13183463.418760, 2824899.416220, 11512906.175453, 2458496.963537, 10065099.245762, 2137787.976595, 8776462.852658, 1854800.259539, 7643563.270676, 1610009.999428, 6611724.286773, 1393665.067744, 5583456.581154, 979323.607578, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 -632000.000000, 4940614.912863, 2069398.866838, 10817516.830690, 4653717.168357, 21758434.025336, 8871996.958685, 38141419.295019, 14683811.607373, 59649690.055395, 21839798.343386, 85257789.573938, 29874405.002654, 113305608.000385, 38190090.757832, 141819845.263211, 46222908.968476, 168946367.447814, 53407463.842965, 193010050.685739, 59385871.516888, 212852586.007940, 63873409.243305, 227709994.582917, 66800934.022541, 237374603.351393, 68224302.193022, 242056925.452705, 68239967.096142, 242091444.610333, 67100054.269530, 238296586.407119, 64996292.656222, 231360104.258658, 62110693.279617, 221768136.964844, 58713683.291215, 210321454.910718, 54965496.936056, 197644228.982934, 50993060.148764, 184232379.411204, 46987426.672112, 170485528.293550, 42981595.608665, 156755771.890176, 39114492.356780, 143291272.239365, 35397865.373888, 130383211.613367, 31904193.013390, 118155668.830638, 28621118.928658, 106572740.307296, 25601846.759865, 95797130.009570, 22804419.237431, 85819110.367221, 20262844.256360, 76710998.010603, 17975361.328156, 68363990.613093, 15875233.072028, 60757759.055517, 14001190.246146, 53916384.198023, 12333595.654335, 47711104.987196, 10849325.924655, 42190868.366150, 9525156.933407, 37237462.653230, 8342640.555527, 32813872.956315, 7313655.108823, 28908767.011513, 6406223.156688, 25415093.088391, 5600457.233786, 22312935.343425, 4884699.373082, 19581673.831377, 4261208.424543, 17167409.094590, 3716674.355308, 15028369.552986, 3239365.269209, 13140392.601373, 2817612.922384, 11511734.377597, 2453695.806260, 10055481.481830, 2136483.080513, 8771754.545071, 1851397.352019, 7634808.104611, 1608230.631097, 6598647.067930, 1388924.695236, 5569515.730726, 977750.532594, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 -600400.000000, 4695426.763780, 1963911.973744, 10282555.589606, 4423074.960639, 20675134.145188, 8430617.160180, 36235923.758870, 13947411.423591, 56642953.664144, 20740807.414481, 80940816.219854, 28366958.016967, 107589004.943862, 36282245.135174, 134712804.910813, 43925583.493094, 160460593.798779, 50736997.787395, 183314531.412802, 56401288.827158, 202128468.893056, 60687640.536476, 216338164.450083, 63466691.242884, 225564899.513639, 64835304.819826, 229962194.517453, 64857648.463133, 230099304.997296, 63772852.178306, 226520319.500984, 61768820.256742, 219824327.848528, 59016412.064020, 210627636.325800, 55747966.169939, 199812283.677462, 52217932.002735, 187784923.933894, 48470082.848721, 175059946.175925, 44619736.201824, 161881475.587479, 40833128.666043, 148913938.756376, 37147835.022666, 136148528.240709, 33642694.001223, 123885176.555853, 30304429.984122, 112207795.115961, 27183370.332863, 101209196.310395, 24310084.508934, 91032673.532161, 21670257.445500, 81560405.159784, 19250275.359184, 72860671.991036, 17069051.043009, 64964188.206260, 15094254.607412, 57732012.575185, 13304980.613607, 51206196.215039, 11736083.962572, 45340271.992036, 10317081.772420, 40096445.921506, 9055883.594843, 35396796.771591, 7934678.163956, 31179441.393962, 6953130.633629, 27449760.718954, 6082919.559308, 24134132.656034, 5309442.615343, 21187026.278610, 4636042.082556, 18605885.081739, 4048424.888439, 16296113.109782, 3530869.213411, 14278441.958850, 3069442.332323, 12493523.043692, 2674516.718482, 10918713.601074, 2331332.640104, 9552875.504146, 2027132.638616, 8320462.071870, 1756275.689065, 7248446.942968, 1525549.114966, 6278487.170901, 1319482.571953, 5290084.740583, 926531.934617, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 -614800.000000, 4800510.383422, 2011186.423459, 10519119.554424, 4528591.783696, 21174993.015555, 8626081.205341, 37085796.536812, 14277509.912852, 58007457.943879, 21251529.270395, 82880126.441223, 29032784.390959, 110176461.950545, 37144722.743752, 137908370.309438, 44948271.665204, 164300933.045217, 51942372.418509, 187673552.329045, 57742464.404385, 206976475.976261, 62124333.766084, 221397222.148385, 64958273.392338, 230873183.683868, 66371285.847686, 235446954.060102, 66414022.622246, 235581499.954352, 65275580.627917, 231865034.460080, 63219603.496342, 224999544.779798, 60424214.114658, 215696891.345863, 57122269.834884, 204603000.383649, 53467685.089611, 192290303.735244, 49621049.294415, 179214250.186731, 45697242.024607, 165860563.582627, 41831435.222785, 152487417.028507, 38060014.305674, 139480162.503348, 34458182.744264, 126913105.316849, 31034833.694582, 114948738.196944, 27851067.467565, 103698215.073485, 24913947.762291, 93226885.146382, 22201686.634521, 83520320.110044, 19717922.268490, 74617436.984268, 17476053.471715, 66506871.084912, 15452852.159946, 59155786.757686, 13642155.708798, 52469250.078896, 12007807.421788, 46470894.429433, 10567557.455666, 41067506.404277, 9276473.845198, 36239798.419510, 8126556.953641, 31928136.060400, 7121363.395227, 28127983.653960, 6232314.925408, 24723156.103504, 5438838.922709, 21711985.431019, 4750106.367016, 19051567.532774, 4148399.825246, 16693031.641434, 3614365.215292, 14628710.712107, 3147622.824275, 12799250.003941, 2744500.808521, 11195706.713099, 2385299.180242, 9786173.004360, 2074100.514261, 8532804.108132, 1800060.350236, 7426650.291461, 1566037.011057, 6427848.822011, 1352501.461269, 5414730.907516, 950905.293305, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 -632000.000000, 4937144.041343, 2063937.730492, 10807268.103196, 4647846.109348, 21749604.138959, 8869112.826915, 38102569.214732, 14663397.746968, 59602360.234144, 21821484.606565, 85207324.794703, 29861071.045683, 113279159.548098, 38188635.906141, 141799301.856949, 46227582.213047, 168952176.941972, 53418975.377492, 193048676.558795, 59390954.801962, 212842689.743313, 63877604.509486, 227728376.404781, 66816471.452530, 237363258.352020, 68230583.368524, 242086208.389092, 68265689.140691, 242192050.472596, 67100878.953093, 238333403.918158, 64964776.056374, 231353118.845688, 62128711.054482, 221749339.747998, 58718506.507065, 210299712.053747, 54951491.163190, 197609362.862944, 50990484.034834, 184196721.586993, 46966193.729603, 170482227.403160, 43000675.037661, 156799472.781965, 39137912.625899, 143355971.192280, 35384048.952501, 130406294.431901, 31888112.974042, 118188328.825470, 28631249.434301, 106646359.508534, 25603402.350809, 95840486.953057, 22808603.836788, 85863037.149725, 20269844.594848, 76735391.130403, 17950797.319754, 68309212.019078, 15865434.965217, 60732656.219748, 14004323.115493, 53894791.070230, 12338673.819518, 47729380.605185, 10844720.653132, 42194661.801811, 9527212.937712, 37249952.467350, 8359457.997632, 32822662.278636, 7307005.653753, 28880700.735007, 6397538.747393, 25379345.725255, 5587922.468118, 22326951.473310, 4890441.600623, 19580107.929287, 4268893.792366, 17169756.574995, 3718404.753593, 15032743.382458, 3237437.549521, 13157418.304755, 2820230.873173, 11511148.451833, 2453042.829964, 10047400.092100, 2132094.742907, 8760733.950032, 1852851.039429, 7627621.166083, 1608769.797111, 6601760.394225, 1390425.897977, 5565283.879241, 975301.923483, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 - +632000.000000, 4939133.621000, 2069433.294398, 10824141.336863, 4660156.033426, 21761641.689438, 8874287.718717, 38116894.322059, 14680707.970087, 59607765.250734, 21837083.110757, 85180735.354869, 29857833.286706, 113243886.536033, 38178042.144523, 141741816.378411, 46210547.700444, 168917420.249112, 53390970.751249, 192927549.785108, 59354593.961262, 212780063.506090, 63868065.835993, 227541672.637512, 66780709.432841, 237322549.168612, 68215158.466923, 242014889.439764, 68267035.901847, 242231167.720873, 67127591.519237, 238398067.855040, 65026412.355542, 231379047.489118, 62144314.316695, 221820240.812823, 58728278.420644, 210379348.790165, 54976540.633222, 197690521.282366, 51029156.398405, 184259347.118236, 46988650.891463, 170459176.578924, 42992062.728553, 156743667.755653, 39109641.164001, 143330019.080494, 35388303.781758, 130397568.867641, 31887380.795308, 118126987.043369, 28617439.319502, 106555820.039482, 25595152.487149, 95817399.744954, 22823196.290633, 85863668.003509, 20258404.812951, 76711154.020048, 17962182.932888, 68367900.869259, 15883360.116428, 60768935.169540, 14019560.757969, 53939186.079607, 12345750.050778, 47744961.387252, 10861704.334309, 42212639.283662, 9524824.678231, 37264498.392866, 8353871.547570, 32834170.463145, 7322129.281585, 28899068.673709, 6403939.066591, 25407905.356397, 5599444.484783, 22324425.336299, 4883003.415305, 19590445.545021, 4263838.308849, 17168445.866055, 3718911.804742, 15045638.350975, 3238414.921185, 13153770.644040, 2820500.201498, 11507232.479837, 2450179.135420, 10058532.499372, 2130605.872858, 8763269.562613, 1853305.867999, 7629779.833201, 1610061.490551, 6615319.659277, 1391986.060548, 5564062.170865, 976012.507540, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 +632000.000000, 4941752.885875, 2068561.380422, 10817778.253563, 4649814.495371, 21760264.965356, 8875516.051788, 38128034.461262, 14666534.060420, 59590234.296959, 21817264.231121, 85177108.648793, 29842228.811116, 113242628.421951, 38175396.103486, 141772077.374672, 46218157.191719, 168926686.780407, 53386570.866260, 192978080.338515, 59365069.556423, 212803200.278187, 63888204.534784, 227650588.044165, 66808382.331394, 237329800.666259, 68231600.157042, 242011633.689664, 68253316.682837, 242139898.369093, 67104261.785235, 238341709.932022, 64996093.966578, 231367836.615860, 62130694.058237, 221751771.233198, 58723014.517328, 210361242.652814, 54973990.968352, 197698194.466794, 51017622.852243, 184235754.022525, 46973305.680299, 170498495.694543, 42995460.555622, 156751630.112199, 39099114.351805, 143284729.938823, 35395581.725368, 130380592.529527, 31896941.782351, 118083141.232553, 28612485.875223, 106572241.795098, 25591037.285380, 95786014.038196, 22798943.567242, 85821959.645071, 20269830.520080, 76696450.236392, 17952387.853528, 68364812.133365, 15896842.122853, 60794806.028182, 14017806.585682, 53923636.848141, 12356431.866438, 47754611.088948, 10851390.061792, 42195368.099144, 9538346.440054, 37267875.611481, 8361584.489150, 32851483.349380, 7317563.473947, 28915882.070883, 6406694.917060, 25413405.268760, 5592883.602189, 22322938.749108, 4887429.496317, 19592269.387330, 4269793.558495, 17176284.690146, 3720072.731643, 15046973.166606, 3238623.871341, 13166650.277977, 2822957.591102, 11513153.756661, 2457936.095223, 10074886.216876, 2139924.740400, 8777197.556381, 1853126.657255, 7643650.034087, 1613415.441775, 6618410.264077, 1392047.857833, 5584773.035786, 978851.658766, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 +614800.000000, 4801661.184943, 2006336.591943, 10508482.425019, 4520903.424123, 21143304.028537, 8610905.975693, 37053226.472036, 14269887.888862, 57959230.080857, 21227228.718611, 82839791.618914, 29013429.036616, 110096619.785048, 37126016.749237, 137832717.490472, 44941787.252108, 164306655.058202, 51933191.437240, 187667660.142832, 57747014.282494, 206965296.422953, 62103753.283756, 221405622.459911, 64949503.236491, 230842866.703688, 66341046.043211, 235470002.941177, 66396973.718028, 235630570.601112, 65299905.359661, 231880143.361786, 63207557.072610, 225028691.684948, 60449901.167396, 215755923.746715, 57154044.337555, 204655311.622160, 53470122.287745, 192319731.570098, 49628727.903521, 179256054.485744, 45711007.294157, 165858552.340569, 41834336.199768, 152542596.890364, 38069290.352779, 139477835.645823, 34453279.715280, 126924709.062969, 31041416.883308, 114941113.433899, 27840023.194203, 103687778.904193, 24907425.930530, 93214622.595530, 22196291.206472, 83510487.133656, 19698736.073815, 74608663.954813, 17469684.534672, 66527670.679998, 15457588.937487, 59118290.235742, 13632508.911515, 52465262.160679, 12011616.035024, 46450796.020426, 10566729.368717, 41078069.826438, 9282613.549171, 36259363.557782, 8134686.468438, 31950332.651054, 7123441.482301, 28127301.127946, 6228164.658013, 24732985.296678, 5442296.853962, 21717653.545210, 4754042.800494, 19059327.329775, 4144928.895892, 16699632.384580, 3615279.764911, 14640791.661836, 3154807.782696, 12809190.726643, 2743695.249521, 11199101.198941, 2385527.550514, 9782680.147030, 2076067.303922, 8541801.852778, 1805552.607113, 7437306.121740, 1568611.160591, 6432572.682759, 1356033.406718, 5427826.547223, 951161.950409, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 +632000.000000, 4939632.497446, 2065909.286762, 10813979.879707, 4651323.130551, 21756264.897188, 8866849.762401, 38119789.027075, 14675369.053321, 59633048.328748, 21823589.167133, 85185687.069695, 29855428.980596, 113238052.578602, 38190902.185878, 141817546.437386, 46225505.161185, 168972538.100428, 53434727.527027, 193053892.747634, 59403065.041574, 212871667.314877, 63886542.585935, 227718206.201376, 66826426.629981, 237401336.910155, 68249303.145348, 242062517.111808, 68254911.049623, 242157296.769526, 67085564.283923, 238308361.359988, 64982467.875364, 231271673.146660, 62119701.565221, 221757226.194896, 58723561.129097, 210314986.624604, 54938113.694196, 197606587.140769, 50987751.536639, 184207042.415200, 46968485.765682, 170477021.706997, 42993737.949389, 156716121.656115, 39105871.842664, 143318484.436127, 35404522.068198, 130399881.282627, 31891669.159828, 118137421.388383, 28636990.049642, 106592584.547500, 25576254.109956, 95795484.563603, 22806472.276145, 85847353.815089, 20262700.451340, 76699330.003188, 17961815.317790, 68348720.221985, 15877152.120320, 60745444.197768, 14014428.754924, 53929752.306529, 12349989.612881, 47757777.264986, 10854019.466662, 42197787.275340, 9530557.342400, 37241750.394386, 8354526.491859, 32813032.232325, 7310995.416562, 28897147.133481, 6400440.269382, 25403011.348033, 5592559.693012, 22330556.601681, 4892833.492660, 19600023.743890, 4259302.500643, 17168537.231871, 3719745.189206, 15035999.842786, 3235065.387106, 13171959.047563, 2824491.579010, 11518645.620196, 2455439.500695, 10053359.908219, 2133440.187598, 8778358.888020, 1860022.237095, 7646444.140805, 1609463.371451, 6606622.771500, 1391572.626009, 5581930.505197, 979671.732222, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 +632000.000000, 4938956.960521, 2065942.159765, 10823682.182192, 4657464.840806, 21764014.880677, 8876263.915639, 38145761.752671, 14686666.495754, 59608971.716037, 21840394.078108, 85241987.756170, 29853733.885329, 113295424.162210, 38204073.830978, 141818002.293387, 46219645.283835, 168923387.254526, 53388414.661417, 192957533.563593, 59342607.323854, 212708495.162173, 63832551.527864, 227621759.628232, 66774461.140469, 237271862.782090, 68210828.628625, 241974443.908795, 68236412.070303, 242126651.836661, 67088121.197923, 238372321.277938, 65000018.764088, 231294156.415774, 62126565.410916, 221744485.329957, 58721819.298652, 210379249.953824, 54974596.479772, 197701976.322406, 51018541.155452, 184298417.710916, 47001904.124833, 170555940.054978, 43009817.123479, 156801305.045363, 39115322.058055, 143387843.928702, 35418450.717180, 130461661.903261, 31924324.767932, 118188123.032329, 28626653.720616, 106562760.399490, 25593194.913757, 95819932.918148, 22800957.751204, 85813460.393561, 20255012.836266, 76696257.346975, 17965294.547682, 68340617.521990, 15874616.516921, 60762383.346896, 14012412.093716, 53901056.575731, 12348702.460094, 47737521.999794, 10850006.257531, 42196609.584126, 9530898.471373, 37271607.299114, 8352051.480092, 32816158.736069, 7315115.126267, 28899674.659756, 6399701.498212, 25393501.216549, 5599273.157225, 22319150.692375, 4882562.964930, 19583227.753839, 4259994.473784, 17173718.361612, 3716188.746111, 15049955.110464, 3238762.370941, 13155039.362891, 2817865.940386, 11504617.460168, 2449399.036507, 10052927.585798, 2131491.491510, 8767196.101391, 1850599.746820, 7632076.721974, 1607719.187713, 6598663.934989, 1391502.737958, 5574939.923926, 975651.024396, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 +632000.000000, 4935565.995833, 2066585.639944, 10806558.793497, 4648955.489297, 21743254.755439, 8858349.139193, 38085347.997479, 14667662.213560, 59578837.145416, 21819401.711263, 85155670.136573, 29847563.620898, 113217843.614484, 38180945.655444, 141752548.077965, 46192958.379816, 168844436.754895, 53375015.240079, 192909770.662422, 59341538.491099, 212727978.189561, 63842640.197985, 227556612.343931, 66779898.135191, 237247873.105809, 68228201.781814, 242021343.936823, 68253884.045250, 242144638.479882, 67109939.401907, 238392582.287618, 65006401.696225, 231329984.973069, 62114160.610341, 221779451.249737, 58711231.600239, 210384370.074270, 54977195.516861, 197706513.690065, 51010318.647243, 184250216.146722, 46996921.565117, 170543090.990619, 43009765.509540, 156797389.406295, 39125439.562996, 143376616.450824, 35401723.890780, 130415494.019288, 31889926.737087, 118138964.117737, 28625220.659543, 106577302.488691, 25591160.149252, 95822624.520279, 22813094.758967, 85859816.074332, 20268731.713935, 76723810.706355, 17965502.260363, 68368362.926757, 15883831.401450, 60752978.489304, 14012108.390460, 53927679.247832, 12344717.221344, 47767562.481516, 10856974.457779, 42230782.804375, 9544805.224202, 37290464.800443, 8365086.701514, 32833673.188333, 7315124.478578, 28907928.373586, 6410062.458402, 25435499.290095, 5597851.503303, 22335014.722267, 4893958.998010, 19609316.828292, 4266581.042916, 17194347.376198, 3720118.868229, 15050218.646274, 3247111.791106, 13176381.348366, 2822050.266003, 11527372.214266, 2460812.427060, 10077262.504452, 2134714.246018, 8785323.194847, 1858334.749852, 7651108.140297, 1611251.541973, 6620552.690120, 1395760.509774, 5587300.327404, 980860.813874, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 +632000.000000, 4937831.275256, 2064589.438420, 10818854.319496, 4652956.497983, 21759033.606338, 8869548.950611, 38125831.814552, 14681969.197189, 59631774.135147, 21815364.109819, 85185295.839079, 29852502.682318, 113238739.440638, 38184187.436494, 141729908.879365, 46192807.535448, 168858594.860654, 53382288.010837, 192923737.493492, 59352195.633378, 212714147.389606, 63828029.522406, 227560869.712094, 66762533.464314, 237227866.165416, 68184951.902977, 242018317.966366, 68239122.943938, 242131456.717327, 67121840.854320, 238345613.070384, 65011573.595498, 231362473.582999, 62115351.626010, 221858074.050686, 58731132.588418, 210339736.402729, 54966299.288251, 197709889.339488, 51016814.032486, 184297044.492931, 47002693.867638, 170524994.081141, 42996647.816780, 156824840.635518, 39119673.836985, 143360598.497447, 35397751.317953, 130447365.051435, 31905144.570144, 118201042.832651, 28642753.345700, 106609331.349253, 25595276.578212, 95826959.366244, 22808159.929493, 85827296.535045, 20277697.280580, 76746245.233658, 17970051.729844, 68358415.475982, 15877515.766026, 60782241.815619, 14018845.894908, 53913206.293496, 12340454.857424, 47751825.430783, 10859985.559163, 42197401.461189, 9526896.413921, 37238656.253929, 8344806.071404, 32824906.045999, 7317828.029180, 28907262.350408, 6403303.086583, 25422833.691370, 5596293.457535, 22326661.951500, 4886634.458083, 19597821.895373, 4265983.766566, 17177830.462357, 3719548.957172, 15039552.849824, 3242264.142556, 13157318.412266, 2819508.884559, 11522130.986552, 2453730.116354, 10058555.623390, 2139972.910656, 8776332.479881, 1855047.465054, 7646324.888226, 1610770.148455, 6607920.973886, 1392450.786081, 5573502.204523, 979843.846274, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 +632000.000000, 4941153.624474, 2067041.469119, 10825154.959348, 4654309.439309, 21758805.351177, 8872888.154286, 38117831.203692, 14669057.483603, 59576282.483074, 21811332.987864, 85171730.468583, 29848160.782435, 113221720.135192, 38175360.229216, 141750902.524057, 46205055.209039, 168938405.924417, 53409638.404173, 192946835.812884, 59360995.526433, 212807512.304903, 63880100.199572, 227646097.576325, 66793917.637038, 237352097.808903, 68216797.393801, 242041045.668162, 68220446.641377, 242020131.946882, 67070389.589631, 238234899.610257, 64962521.345114, 231262502.079239, 62093980.342767, 221631999.512472, 58695079.002939, 210289422.973977, 54939942.525392, 197632927.195526, 50987020.948739, 184150248.351253, 46992720.492892, 170442130.723711, 42967122.681767, 156771519.225621, 39125719.804887, 143337953.465230, 35406402.665689, 130430694.777427, 31907854.854186, 118178735.838628, 28640342.959167, 106630676.904001, 25613366.813408, 95845572.841852, 22820462.506144, 85873918.689138, 20263181.954495, 76746552.506447, 17984481.559508, 68434018.521825, 15907144.159324, 60816875.726718, 14041002.737528, 54002535.994015, 12359818.467141, 47812131.921616, 10871878.069044, 42261604.884948, 9536989.591386, 37297184.809957, 8365970.831561, 32880933.973641, 7331960.029953, 28953007.343535, 6405316.501372, 25424709.497757, 5602185.923724, 22343397.267807, 4889429.606679, 19602708.873024, 4266041.295647, 17180702.047904, 3721118.535479, 15044545.396084, 3239182.888535, 13174321.124902, 2816496.051344, 11513739.336200, 2458502.958896, 10072905.061329, 2139196.795383, 8786559.617766, 1854993.475842, 7644384.501264, 1607762.623690, 6623978.538582, 1390550.041378, 5579007.402694, 976451.240630, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 +632000.000000, 4937784.754536, 2063312.773196, 10793316.369162, 4644742.473946, 21723580.191196, 8856961.946743, 38075059.216136, 14648753.750947, 59553700.002596, 21818819.847215, 85137173.870760, 29838474.939495, 113158632.765725, 38147190.422537, 141649773.771692, 46183910.328407, 168800476.301709, 53369237.458269, 192848052.601470, 59368681.231723, 212715172.021406, 63838551.695909, 227630254.543052, 66796822.931741, 237344470.101576, 68225788.733134, 242039673.809864, 68262187.447941, 242138167.812115, 67125014.002840, 238366451.576816, 64977065.102409, 231356271.051505, 62128966.746165, 221732238.669144, 58721951.068169, 210295415.111721, 54969883.127353, 197637246.285640, 50981452.114259, 184153598.988858, 46965611.783673, 170464790.946647, 43006684.051807, 156798988.572505, 39147518.513932, 143425629.883301, 35415446.442567, 130514455.476596, 31905752.254070, 118199247.763951, 28636878.524563, 106623094.126552, 25609375.333676, 95845544.539072, 22803679.708436, 85897714.311687, 20284431.076431, 76745576.036374, 17975974.604861, 68395641.106401, 15889985.018206, 60796353.141963, 14019604.212533, 53976608.796631, 12358098.863508, 47789303.029476, 10865073.566337, 42257099.646915, 9546350.493462, 37302191.971181, 8366204.840959, 32872925.675629, 7332368.295698, 28927077.126615, 6409695.596765, 25429131.748787, 5603086.051814, 22340699.320128, 4897184.669817, 19608448.597429, 4270621.535905, 17204639.991210, 3722154.417539, 15057006.265350, 3241978.286641, 13185336.709548, 2821666.502789, 11521339.139016, 2463567.219289, 10079985.702513, 2138664.757692, 8783283.534296, 1855633.658894, 7635449.965286, 1611292.528181, 6618740.281599, 1392764.497715, 5575340.618394, 981462.607188, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 +600400.000000, 4695165.272534, 1964960.208137, 10279133.732856, 4420192.442654, 20674031.542074, 8426695.917376, 36216024.692422, 13953060.589508, 56653648.554944, 20745037.611334, 80958208.709909, 28366289.275070, 107603281.571660, 36294030.905665, 134716176.051403, 43911553.343770, 160508248.452051, 50747059.403956, 183343366.398917, 56396547.174174, 202155475.943445, 60665033.842070, 216250981.319413, 63451994.250142, 225446506.173062, 64787862.212232, 229864287.888307, 64806807.577476, 229992944.860069, 63757911.225189, 226423296.230708, 61708912.106312, 219724775.917570, 59011440.851614, 210616057.475803, 55773317.806754, 199778689.849405, 52203712.875919, 187713872.022779, 48456936.650096, 174999565.014375, 44628183.861200, 161927514.983580, 40833232.593433, 148914457.644295, 37143019.313797, 136204984.157045, 33636806.428235, 123929940.856537, 30303063.939700, 112234437.768470, 27200410.812410, 101291030.337498, 24319817.148691, 91032843.858725, 21663388.584048, 81552474.766801, 19255568.530152, 72888649.544614, 17062242.017126, 64970265.356462, 15099970.740721, 57752947.318630, 13311115.593877, 51230736.783444, 11737922.763337, 45371538.226016, 10316662.476985, 40109020.924432, 9061846.323748, 35425522.675250, 7955862.916981, 31235958.560417, 6961974.355710, 27475171.015624, 6084735.636662, 24155538.763832, 5318632.991456, 21218415.306748, 4647014.971522, 18627094.093736, 4053832.282900, 16325682.383610, 3537085.800251, 14287644.272387, 3075549.242287, 12509333.338820, 2678950.320350, 10940661.150245, 2333106.139768, 9557867.881099, 2025300.793595, 8328894.717301, 1761550.874741, 7265952.589606, 1526728.058912, 6278021.306801, 1321376.917022, 5297110.869586, 926780.271196, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 +632000.000000, 4936516.130379, 2065758.096244, 10805527.968704, 4652126.586901, 21754793.133100, 8865760.786597, 38081334.506954, 14659368.977201, 59527675.183546, 21798810.999157, 85097265.300206, 29826695.876285, 113109557.219463, 38148673.117371, 141643870.520915, 46166415.491975, 168741096.602048, 53362652.942131, 192793630.933964, 59301865.623741, 212569674.963518, 63808089.655138, 227543587.491716, 66775337.567524, 237267497.641059, 68193855.635250, 241981737.407058, 68262606.045379, 242138302.839196, 67090088.508256, 238268105.260653, 64983055.531540, 231270490.018976, 62123283.758225, 221751711.577491, 58718314.941179, 210362201.951974, 54981641.776980, 197699507.750631, 51035366.881760, 184320976.049221, 46987554.084722, 170527753.959588, 43033174.567644, 156856289.287619, 39131215.186082, 143423422.657008, 35425438.176049, 130527463.301555, 31925096.900025, 118223564.880937, 28641410.265779, 106632468.606340, 25590384.137114, 95842442.387952, 22824318.511658, 85939826.334083, 20282769.293637, 76755745.959121, 17974864.719728, 68412431.267861, 15896653.233328, 60872959.639164, 14046205.806319, 53990518.437063, 12359313.148770, 47821186.005259, 10877006.439355, 42256773.244810, 9542823.086948, 37320733.161220, 8370448.491872, 32893214.640144, 7329652.422158, 28946143.254775, 6412187.874659, 25460334.416620, 5603186.783226, 22349276.644912, 4893590.052426, 19605265.201944, 4269547.671351, 17181691.353715, 3721941.009256, 15055369.258243, 3238598.713761, 13170134.227331, 2822458.831254, 11519629.208536, 2457610.262822, 10066963.238064, 2139160.831069, 8783674.514984, 1854531.008146, 7650220.206511, 1612646.425272, 6615226.138706, 1393099.263221, 5574033.012553, 977882.187657, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 +632000.000000, 4938872.756718, 2065444.654395, 10802630.544672, 4651124.603989, 21751126.214988, 8865442.714920, 38130716.717166, 14682462.460349, 59618498.871948, 21826643.885277, 85183352.724211, 29853596.157012, 113244286.457007, 38181012.963868, 141776731.713503, 46219130.224799, 168912564.253561, 53428571.054474, 193011725.276561, 59365559.519728, 212739832.654277, 63832542.858053, 227623786.175534, 66773552.835169, 237361383.799629, 68207180.980732, 241963791.657975, 68235019.247132, 242061531.808029, 67089021.522756, 238347669.885303, 65017681.037133, 231376685.575774, 62126496.727010, 221793066.192971, 58775072.979322, 210416362.090455, 54972389.604063, 197653744.388503, 51002365.982421, 184236783.570791, 46984350.394939, 170468338.636048, 42984701.115242, 156748887.014384, 39109409.233829, 143339362.440845, 35402444.592933, 130404500.128484, 31880721.566052, 118126600.607626, 28622410.557623, 106591165.215896, 25607725.086871, 95817222.251857, 22806038.331061, 85847280.181821, 20274251.633309, 76712099.528966, 17960041.007091, 68385192.346780, 15893977.636256, 60814344.362563, 14024096.838899, 53916490.973680, 12349994.184678, 47757323.385513, 10865834.939780, 42207917.869102, 9527146.340078, 37248820.509538, 8352284.386659, 32838158.280212, 7313839.967179, 28890115.495422, 6408050.065500, 25421012.131559, 5591236.374645, 22347928.337198, 4891281.217310, 19582571.988354, 4263519.605822, 17186939.217822, 3727580.501845, 15048832.641296, 3245543.791250, 13185304.723105, 2820267.520333, 11508329.259624, 2455586.416415, 10057352.667706, 2134667.195262, 8771721.684626, 1857932.061060, 7640545.756653, 1610591.364884, 6613754.584246, 1394994.447619, 5578438.752548, 975147.737096, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 +600400.000000, 4691222.674482, 1961602.701157, 10268097.083409, 4411714.273130, 20661848.992086, 8417880.634849, 36190457.985602, 13923011.064569, 56596645.919329, 20721259.220604, 80891222.072479, 28348818.800289, 107533752.177870, 36256341.867648, 134617232.812413, 43892893.754363, 160375024.084901, 50704114.273043, 183200614.161588, 56371999.989697, 202081553.728981, 60659723.151598, 216218506.448788, 63452253.917862, 225423805.029800, 64818016.593446, 229915577.395493, 64838177.655237, 230052954.128615, 63745310.432883, 226476743.086073, 61743276.804548, 219788724.097714, 59028066.088292, 210670725.923390, 55774335.494508, 199854846.571270, 52221855.037010, 187822841.110847, 48455166.120115, 175076168.595179, 44640903.132604, 161958819.736684, 40839288.788897, 148936749.944585, 37146941.820598, 136184074.407359, 33644230.783624, 123900989.087127, 30307056.681621, 112258473.781396, 27186908.305479, 101250022.398823, 24326321.607446, 91099804.896791, 21702682.327711, 81610802.343190, 19270392.196549, 72934332.450916, 17074669.657756, 64950160.311289, 15094016.785575, 57758742.381726, 13322475.056153, 51263991.430856, 11738065.677486, 45393328.946105, 10323892.294455, 40117103.081970, 9063407.184170, 35398401.408530, 7943456.930846, 31215775.579299, 6956036.048360, 27477477.044468, 6089563.910403, 24147635.078674, 5322533.671487, 21229810.250065, 4648189.716157, 18627355.251543, 4055759.495055, 16332436.136959, 3531077.294902, 14299013.615705, 3075282.639786, 12511812.632089, 2685244.900527, 10943622.509335, 2332733.395162, 9560665.040523, 2028828.689676, 8330092.823364, 1762764.768827, 7259389.153715, 1530837.131386, 6289076.762040, 1322959.824850, 5294276.009776, 929510.106985, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 +632000.000000, 4939088.508001, 2065365.950975, 10809363.898227, 4649624.936430, 21735455.841156, 8863391.888227, 38067514.220399, 14655590.629407, 59568122.718502, 21804802.290482, 85141362.714851, 29845285.446799, 113145397.743392, 38154854.451555, 141693585.189533, 46180338.500207, 168774714.006908, 53359979.618894, 192835289.147361, 59334249.635300, 212660807.640678, 63823908.623690, 227608971.956769, 66799505.611828, 237268374.939964, 68201511.193320, 241925768.233044, 68229608.253287, 242028639.379309, 67096835.343374, 238293846.704302, 64982466.666620, 231331602.831540, 62131854.147830, 221809357.314649, 58724368.325208, 210412843.473390, 55000539.195387, 197749633.379252, 51035881.766709, 184330223.453959, 46992612.562105, 170584455.513399, 43001322.867080, 156872123.732989, 39135871.726632, 143413625.488652, 35420673.747759, 130476262.788936, 31923349.288241, 118221239.239688, 28633631.742702, 106625952.103755, 25610968.533230, 95859955.288402, 22827064.276221, 85901835.494524, 20283966.069270, 76752069.233662, 17973979.949562, 68386896.884629, 15896512.525257, 60792866.393808, 14024676.179273, 53921328.104050, 12345405.576964, 47763464.664418, 10860809.617746, 42244971.245208, 9532834.163991, 37265633.174752, 8358894.883432, 32849523.503133, 7328364.787710, 28907957.432662, 6405854.442409, 25424545.374024, 5600311.734420, 22331495.372954, 4887880.853298, 19586590.034609, 4264924.483350, 17189149.945997, 3720950.129389, 15061057.146232, 3241813.021973, 13174278.334544, 2823891.081331, 11545595.933203, 2457217.569182, 10078628.246011, 2141249.613939, 8792155.591128, 1856632.856869, 7645604.567049, 1611519.271811, 6618878.919754, 1392120.884180, 5587691.302338, 981363.860168, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 +600400.000000, 4693805.870825, 1962824.289239, 10275604.881275, 4419208.997287, 20654429.715843, 8421080.897881, 36193858.285825, 13938346.733687, 56586463.149705, 20726667.804809, 80866376.609489, 28333367.917967, 107490466.559143, 36243599.169564, 134621475.053192, 43867502.362532, 160396822.210023, 50713704.272732, 183275408.148284, 56372019.840356, 202113209.408412, 60652487.494845, 216209491.444656, 63430917.427770, 225406161.430168, 64801023.969708, 229880954.874922, 64855860.392739, 230025532.487265, 63735296.144419, 226423752.153464, 61741611.330630, 219774959.768757, 59016624.091523, 210707996.635309, 55807244.257009, 199891191.139362, 52239496.614521, 187816179.060199, 48457326.615026, 175059661.709101, 44632723.228750, 161944268.108221, 40861745.828804, 148998844.131742, 37169299.711300, 136213013.218267, 33641692.141670, 123884219.715574, 30303347.429393, 112232569.005982, 27196834.140132, 101244605.170130, 24324433.820064, 91022918.766052, 21665953.411379, 81554267.257396, 19256006.512678, 72858965.236642, 17066803.341016, 64965434.056288, 15094679.932931, 57776076.496091, 13324127.571333, 51237946.846240, 11733554.046117, 45413368.199176, 10323847.298982, 40135081.129373, 9063120.034947, 35424051.626545, 7945163.444726, 31228163.233589, 6964530.066502, 27464609.160928, 6081038.952134, 24156993.583793, 5316192.346832, 21225018.390661, 4646494.008766, 18623732.925882, 4058058.760518, 16338695.057390, 3536155.710604, 14315782.859109, 3080081.242352, 12513680.341980, 2681834.939930, 10955703.293071, 2337623.314358, 9578473.809667, 2030339.469881, 8353885.976914, 1764636.830103, 7269229.499181, 1530519.814386, 6289121.177257, 1322077.571525, 5307964.387765, 927949.999987, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 +632000.000000, 4945176.691134, 2068672.852904, 10819027.150680, 4654711.192995, 21775920.123431, 8876937.489504, 38123148.054896, 14666181.825980, 59582199.996947, 21805100.397897, 85151508.428336, 29842152.518810, 113193603.005396, 38162365.113285, 141678252.936836, 46181451.897610, 168831184.942730, 53400836.256768, 192916090.966539, 59368117.773959, 212756705.216169, 63842908.497707, 227576582.702139, 66774664.263627, 237291432.846850, 68203822.419050, 242029621.633272, 68272701.911356, 242157505.931471, 67099888.790865, 238327630.858197, 64982420.429815, 231342865.792322, 62132437.992749, 221759698.414450, 58708129.354590, 210300876.313193, 54960438.204039, 197633320.508296, 51005810.634731, 184231207.264320, 46998973.562320, 170530271.311547, 43002237.526658, 156770224.266823, 39111341.869003, 143359805.744190, 35407824.254267, 130427274.510841, 31912778.644172, 118217724.310018, 28642619.098551, 106623275.005108, 25589379.089834, 95825906.816943, 22814435.099430, 85920199.092520, 20277953.698829, 76754334.850794, 17968424.245743, 68365115.994741, 15882757.522672, 60781918.549868, 14009780.688547, 53911078.748906, 12338575.364934, 47744153.008357, 10851958.201549, 42235395.689542, 9532417.024611, 37279389.019614, 8366695.097101, 32867748.386821, 7322850.255152, 28928652.168078, 6405349.164817, 25450325.686655, 5601602.917030, 22358634.989020, 4892307.570589, 19611389.884647, 4271590.957794, 17192238.951027, 3719839.162108, 15049005.793175, 3238290.990242, 13167335.203113, 2820275.091447, 11525193.641676, 2460231.520125, 10066423.882174, 2134804.374437, 8777734.826129, 1856529.207281, 7650995.855932, 1611351.312843, 6612734.295573, 1390347.821425, 5582005.422263, 978368.974249, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000 diff --git a/include/AdePT/core/AdePTTransport.cuh b/include/AdePT/core/AdePTTransport.cuh index acdb1be3..e4c6e948 100644 --- a/include/AdePT/core/AdePTTransport.cuh +++ b/include/AdePT/core/AdePTTransport.cuh @@ -56,6 +56,7 @@ inline __constant__ __device__ struct G4HepEmData g4HepEmData; inline __constant__ __device__ adeptint::VolAuxData *gVolAuxData = nullptr; inline __constant__ __device__ double BzFieldValue = 0; +inline __constant__ __device__ bool ApplyCuts = false; bool InitializeVolAuxArray(adeptint::VolAuxArray &array) { @@ -108,6 +109,13 @@ G4HepEmState *InitG4HepEm() return state; } +bool InitializeApplyCuts(bool applycuts) +{ + // Initialize ApplyCut + COPCORE_CUDA_CHECK(cudaMemcpyToSymbol(ApplyCuts, &applycuts, sizeof(bool))); + return true; +} + // Kernel function to initialize tracks comming from a Geant4 buffer __global__ void InitTracks(adeptint::TrackData *trackinfo, int ntracks, int startTrack, int event, Secondaries secondaries, const vecgeom::VPlacedVolume *world, AdeptScoring *userScoring, diff --git a/include/AdePT/core/AdePTTransport.h b/include/AdePT/core/AdePTTransport.h index 4ac7e5bb..71cdc174 100644 --- a/include/AdePT/core/AdePTTransport.h +++ b/include/AdePT/core/AdePTTransport.h @@ -70,6 +70,8 @@ class AdePTTransport : public AdePTTransportInterface { /// @brief Create material-cut couple index array /// @brief Initialize service and copy geometry & physics data on device void Initialize(bool common_data = false); + /// @brief Initializes the ApplyCut flag. Can only be called after G4 Physics is build + bool InitializeApplyCuts(bool applycuts); /// @brief Final cleanup void Cleanup(); /// @brief Interface for transporting a buffer of tracks in AdePT. diff --git a/include/AdePT/core/AdePTTransport.icc b/include/AdePT/core/AdePTTransport.icc index b30427a5..9cf53ebd 100644 --- a/include/AdePT/core/AdePTTransport.icc +++ b/include/AdePT/core/AdePTTransport.icc @@ -25,6 +25,7 @@ namespace adept_impl { /// Forward declarations for methods implemented in AdePTTransport.cu using TrackBuffer = adeptint::TrackBuffer; bool InitializeField(double); +bool InitializeApplyCuts(bool); bool InitializeVolAuxArray(adeptint::VolAuxArray &); void FreeVolAuxArray(adeptint::VolAuxArray &); G4HepEmState *InitG4HepEm(); @@ -60,6 +61,12 @@ bool AdePTTransport::InitializeField(double bz) return adept_impl::InitializeField(bz); } +template +bool AdePTTransport::InitializeApplyCuts(bool applycuts) +{ + return adept_impl::InitializeApplyCuts(applycuts); +} + template void AdePTTransport::AddTrack(int pdg, int parent_id, double energy, double x, double y, double z, double dirx, double diry, double dirz, double globalTime, diff --git a/include/AdePT/core/AdePTTransportInterface.hh b/include/AdePT/core/AdePTTransportInterface.hh index aa3d366d..2f44b1de 100644 --- a/include/AdePT/core/AdePTTransportInterface.hh +++ b/include/AdePT/core/AdePTTransportInterface.hh @@ -41,6 +41,8 @@ public: virtual void SetCUDAStackLimit(int limit) = 0; /// @brief Initialize service and copy geometry & physics data on device virtual void Initialize(bool common_data = false) = 0; + /// @brief Initialize the ApplyCuts flag on device + virtual bool InitializeApplyCuts(bool applycuts) = 0; /// @brief Interface for transporting a buffer of tracks in AdePT. virtual void Shower(int event, int threadId) = 0; virtual void Cleanup() = 0; diff --git a/include/AdePT/core/AdePTTransportStruct.cuh b/include/AdePT/core/AdePTTransportStruct.cuh index d1b5011f..0a552c69 100644 --- a/include/AdePT/core/AdePTTransportStruct.cuh +++ b/include/AdePT/core/AdePTTransportStruct.cuh @@ -109,5 +109,6 @@ extern __constant__ struct G4HepEmData g4HepEmData; extern __constant__ __device__ adeptint::VolAuxData *gVolAuxData; extern __constant__ __device__ double BzFieldValue; +extern __constant__ __device__ bool ApplyCuts; } // namespace adept_impl #endif diff --git a/include/AdePT/kernels/electrons.cuh b/include/AdePT/kernels/electrons.cuh index 312af544..c3ef4dd1 100644 --- a/include/AdePT/kernels/electrons.cuh +++ b/include/AdePT/kernels/electrons.cuh @@ -271,200 +271,253 @@ static __device__ __forceinline__ void TransportElectrons(adept::TrackManager= 0) - adept_scoring::RecordHit(userScoring, currentTrack.parentID, - IsElectron ? 0 : 1, // Particle type - elTrack.GetPStepLength(), // Step length - energyDeposit, // Total Edep - &navState, // Pre-step point navstate - &preStepPos, // Pre-step point position - &preStepDir, // Pre-step point momentum direction - nullptr, // Pre-step point polarization - preStepEnergy, // Pre-step point kinetic energy - IsElectron ? -1 : 1, // Pre-step point charge - &nextState, // Post-step point navstate - &pos, // Post-step point position - &dir, // Post-step point momentum direction - nullptr, // Post-step point polarization - eKin, // Post-step point kinetic energy - IsElectron ? -1 : 1, // Post-step point charge - 0, -1); // eventID and threadID (not needed here) - // Save the `number-of-interaction-left` in our track. for (int ip = 0; ip < 4; ++ip) { double numIALeft = theTrack->GetNumIALeft(ip); currentTrack.numIALeft[ip] = numIALeft; } + bool reached_interaction = true; + bool cross_boundary = false; + + const double theElCut = g4HepEmData.fTheMatCutData->fMatCutData[auxData.fMCIndex].fSecElProdCutE; + const double theGammaCut = g4HepEmData.fTheMatCutData->fMatCutData[auxData.fMCIndex].fSecGamProdCutE; + if (stopped) { if (!IsElectron) { // Annihilate the stopped positron into two gammas heading to opposite // directions (isotropic). - Track &gamma1 = secondaries.gammas->NextTrack(); - Track &gamma2 = secondaries.gammas->NextTrack(); - - adept_scoring::AccountProduced(userScoring, /*numElectrons*/ 0, /*numPositrons*/ 0, /*numGammas*/ 2); - - const double cost = 2 * currentTrack.Uniform() - 1; - const double sint = sqrt(1 - cost * cost); - const double phi = k2Pi * currentTrack.Uniform(); - double sinPhi, cosPhi; - sincos(phi, &sinPhi, &cosPhi); - gamma1.InitAsSecondary(pos, navState, globalTime); - newRNG.Advance(); - gamma1.parentID = currentTrack.parentID; - gamma1.rngState = newRNG; - gamma1.eKin = copcore::units::kElectronMassC2; - gamma1.dir.Set(sint * cosPhi, sint * sinPhi, cost); - - gamma2.InitAsSecondary(pos, navState, globalTime); - // Reuse the RNG state of the dying track. - gamma2.parentID = currentTrack.parentID; - gamma2.rngState = currentTrack.rngState; - gamma2.eKin = copcore::units::kElectronMassC2; - gamma2.dir = -gamma1.dir; + // Apply cuts + if (ApplyCuts && (copcore::units::kElectronMassC2 < theGammaCut)) { + // Deposit the energy here and don't initialize any secondaries + energyDeposit += 2 * copcore::units::kElectronMassC2; + } else { + Track &gamma1 = secondaries.gammas->NextTrack(); + Track &gamma2 = secondaries.gammas->NextTrack(); + + adept_scoring::AccountProduced(userScoring, /*numElectrons*/ 0, /*numPositrons*/ 0, /*numGammas*/ 2); + + const double cost = 2 * currentTrack.Uniform() - 1; + const double sint = sqrt(1 - cost * cost); + const double phi = k2Pi * currentTrack.Uniform(); + double sinPhi, cosPhi; + sincos(phi, &sinPhi, &cosPhi); + + gamma1.InitAsSecondary(pos, navState, globalTime); + newRNG.Advance(); + gamma1.parentID = currentTrack.parentID; + gamma1.rngState = newRNG; + gamma1.eKin = copcore::units::kElectronMassC2; + gamma1.dir.Set(sint * cosPhi, sint * sinPhi, cost); + + gamma2.InitAsSecondary(pos, navState, globalTime); + // Reuse the RNG state of the dying track. + gamma2.parentID = currentTrack.parentID; + gamma2.rngState = currentTrack.rngState; + gamma2.eKin = copcore::units::kElectronMassC2; + gamma2.dir = -gamma1.dir; + } } // Particles are killed by not enqueuing them into the new activeQueue. - continue; + // continue; } - if (nextState.IsOnBoundary()) { - // For now, just count that we hit something. - - // Kill the particle if it left the world. - if (!nextState.IsOutside()) { - - // Move to the next boundary. - navState = nextState; - // Check if the next volume belongs to the GPU region and push it to the appropriate queue -#ifndef ADEPT_USE_SURF - const int nextlvolID = navState.Top()->GetLogicalVolume()->id(); -#else - const int nextlvolID = navState.GetLogicalId(); -#endif - VolAuxData const &nextauxData = auxDataArray[nextlvolID]; - if (nextauxData.fGPUregion > 0) - survive(); - else { - // To be safe, just push a bit the track exiting the GPU region to make sure - // Geant4 does not relocate it again inside the same region - pos += kPushOutRegion * dir; - survive(/*leak*/ true); + if (!stopped) { + if (nextState.IsOnBoundary()) { + // For now, just count that we hit something. + reached_interaction = false; + // Kill the particle if it left the world. + if (!nextState.IsOutside()) { + // Mark the particle. We need to change its navigation state to the next volume before enqueuing it + // This will happen after recordinf the step + cross_boundary = true; } + // Particle left the world, don't enqueue it + // continue; + } else if (!propagated || restrictedPhysicalStepLength) { + // Did not yet reach the interaction point due to error in the magnetic + // field propagation. Try again next time. + survive(); + reached_interaction = false; + // continue; + } else if (winnerProcessIndex < 0) { + // No discrete process, move on. + survive(); + reached_interaction = false; + // continue; } - continue; - } else if (!propagated || restrictedPhysicalStepLength) { - // Did not yet reach the interaction point due to error in the magnetic - // field propagation. Try again next time. - survive(); - continue; - } else if (winnerProcessIndex < 0) { - // No discrete process, move on. - survive(); - continue; } - // Reset number of interaction left for the winner discrete process. - // (Will be resampled in the next iteration.) - currentTrack.numIALeft[winnerProcessIndex] = -1.0; - - // Check if a delta interaction happens instead of the real discrete process. - if (G4HepEmElectronManager::CheckDelta(&g4HepEmData, theTrack, currentTrack.Uniform())) { - // A delta interaction happened, move on. - survive(); - continue; - } - - // Perform the discrete interaction, make sure the branched RNG state is - // ready to be used. - newRNG.Advance(); - // Also advance the current RNG state to provide a fresh round of random - // numbers after MSC used up a fair share for sampling the displacement. - currentTrack.rngState.Advance(); - - const double theElCut = g4HepEmData.fTheMatCutData->fMatCutData[auxData.fMCIndex].fSecElProdCutE; - - switch (winnerProcessIndex) { - case 0: { - // Invoke ionization (for e-/e+): - double deltaEkin = (IsElectron) ? G4HepEmElectronInteractionIoni::SampleETransferMoller(theElCut, eKin, &rnge) - : G4HepEmElectronInteractionIoni::SampleETransferBhabha(theElCut, eKin, &rnge); + if (reached_interaction && !stopped) { + // Reset number of interaction left for the winner discrete process. + // (Will be resampled in the next iteration.) + currentTrack.numIALeft[winnerProcessIndex] = -1.0; + + // Check if a delta interaction happens instead of the real discrete process. + if (G4HepEmElectronManager::CheckDelta(&g4HepEmData, theTrack, currentTrack.Uniform())) { + // A delta interaction happened, move on. + survive(); + // continue; + } else { + // Perform the discrete interaction, make sure the branched RNG state is + // ready to be used. + newRNG.Advance(); + // Also advance the current RNG state to provide a fresh round of random + // numbers after MSC used up a fair share for sampling the displacement. + currentTrack.rngState.Advance(); + + switch (winnerProcessIndex) { + case 0: { + // Invoke ionization (for e-/e+): + double deltaEkin = (IsElectron) + ? G4HepEmElectronInteractionIoni::SampleETransferMoller(theElCut, eKin, &rnge) + : G4HepEmElectronInteractionIoni::SampleETransferBhabha(theElCut, eKin, &rnge); + + double dirPrimary[] = {dir.x(), dir.y(), dir.z()}; + double dirSecondary[3]; + G4HepEmElectronInteractionIoni::SampleDirections(eKin, deltaEkin, dirSecondary, dirPrimary, &rnge); + + adept_scoring::AccountProduced(userScoring, /*numElectrons*/ 1, /*numPositrons*/ 0, /*numGammas*/ 0); + + // Apply cuts + if (ApplyCuts && (deltaEkin < theElCut)) { + // Deposit the energy here and kill the secondary + energyDeposit += deltaEkin; + + } else { + Track &secondary = secondaries.electrons->NextTrack(); + secondary.InitAsSecondary(pos, navState, globalTime); + secondary.parentID = currentTrack.parentID; + secondary.rngState = newRNG; + secondary.eKin = deltaEkin; + secondary.dir.Set(dirSecondary[0], dirSecondary[1], dirSecondary[2]); + } - double dirPrimary[] = {dir.x(), dir.y(), dir.z()}; - double dirSecondary[3]; - G4HepEmElectronInteractionIoni::SampleDirections(eKin, deltaEkin, dirSecondary, dirPrimary, &rnge); + eKin -= deltaEkin; + dir.Set(dirPrimary[0], dirPrimary[1], dirPrimary[2]); + survive(); + break; + } + case 1: { + // Invoke model for Bremsstrahlung: either SB- or Rel-Brem. + double logEnergy = std::log(eKin); + double deltaEkin = eKin < g4HepEmPars.fElectronBremModelLim + ? G4HepEmElectronInteractionBrem::SampleETransferSB( + &g4HepEmData, eKin, logEnergy, auxData.fMCIndex, &rnge, IsElectron) + : G4HepEmElectronInteractionBrem::SampleETransferRB( + &g4HepEmData, eKin, logEnergy, auxData.fMCIndex, &rnge, IsElectron); + + double dirPrimary[] = {dir.x(), dir.y(), dir.z()}; + double dirSecondary[3]; + G4HepEmElectronInteractionBrem::SampleDirections(eKin, deltaEkin, dirSecondary, dirPrimary, &rnge); + + adept_scoring::AccountProduced(userScoring, /*numElectrons*/ 0, /*numPositrons*/ 0, /*numGammas*/ 1); + + // Apply cuts + if (ApplyCuts && (deltaEkin < theGammaCut)) { + // Deposit the energy here and kill the secondary + energyDeposit += deltaEkin; + + } else { + Track &gamma = secondaries.gammas->NextTrack(); + gamma.InitAsSecondary(pos, navState, globalTime); + gamma.parentID = currentTrack.parentID; + gamma.rngState = newRNG; + gamma.eKin = deltaEkin; + gamma.dir.Set(dirSecondary[0], dirSecondary[1], dirSecondary[2]); + } - Track &secondary = secondaries.electrons->NextTrack(); + eKin -= deltaEkin; + dir.Set(dirPrimary[0], dirPrimary[1], dirPrimary[2]); + survive(); + break; + } + case 2: { + // Invoke annihilation (in-flight) for e+ + double dirPrimary[] = {dir.x(), dir.y(), dir.z()}; + double theGamma1Ekin, theGamma2Ekin; + double theGamma1Dir[3], theGamma2Dir[3]; + G4HepEmPositronInteractionAnnihilation::SampleEnergyAndDirectionsInFlight( + eKin, dirPrimary, &theGamma1Ekin, theGamma1Dir, &theGamma2Ekin, theGamma2Dir, &rnge); + + // TODO: In principle particles are produced, then cut before stacking them. It seems correct to count them + // here + adept_scoring::AccountProduced(userScoring, /*numElectrons*/ 0, /*numPositrons*/ 0, /*numGammas*/ 2); + + // Apply cuts + if (ApplyCuts && (theGamma1Ekin < theGammaCut)) { + // Deposit the energy here and kill the secondaries + energyDeposit += theGamma1Ekin; + + } else { + Track &gamma1 = secondaries.gammas->NextTrack(); + gamma1.InitAsSecondary(pos, navState, globalTime); + gamma1.parentID = currentTrack.parentID; + gamma1.rngState = newRNG; + gamma1.eKin = theGamma1Ekin; + gamma1.dir.Set(theGamma1Dir[0], theGamma1Dir[1], theGamma1Dir[2]); + } + if (ApplyCuts && (theGamma2Ekin < theGammaCut)) { + // Deposit the energy here and kill the secondaries + energyDeposit += theGamma2Ekin; + + } else { + Track &gamma2 = secondaries.gammas->NextTrack(); + gamma2.InitAsSecondary(pos, navState, globalTime); + // Reuse the RNG state of the dying track. (This is done for efficiency, if the particle is cut + // the state is not reused, but this shouldn't be an issue) + gamma2.parentID = currentTrack.parentID; + gamma2.rngState = currentTrack.rngState; + gamma2.eKin = theGamma2Ekin; + gamma2.dir.Set(theGamma2Dir[0], theGamma2Dir[1], theGamma2Dir[2]); + } - adept_scoring::AccountProduced(userScoring, /*numElectrons*/ 1, /*numPositrons*/ 0, /*numGammas*/ 0); + // The current track is killed by not enqueuing into the next activeQueue. + break; + } + } + } + } - secondary.InitAsSecondary(pos, navState, globalTime); - secondary.parentID = currentTrack.parentID; - secondary.rngState = newRNG; - secondary.eKin = deltaEkin; - secondary.dir.Set(dirSecondary[0], dirSecondary[1], dirSecondary[2]); + // Redord the step. Edep includes the continuous energy loss and edep from secondaries which were cut + if (energyDeposit > 0 && auxData.fSensIndex >= 0) + adept_scoring::RecordHit(userScoring, currentTrack.parentID, + IsElectron ? 0 : 1, // Particle type + elTrack.GetPStepLength(), // Step length + energyDeposit, // Total Edep + &navState, // Pre-step point navstate + &preStepPos, // Pre-step point position + &preStepDir, // Pre-step point momentum direction + nullptr, // Pre-step point polarization + preStepEnergy, // Pre-step point kinetic energy + IsElectron ? -1 : 1, // Pre-step point charge + &nextState, // Post-step point navstate + &pos, // Post-step point position + &dir, // Post-step point momentum direction + nullptr, // Post-step point polarization + eKin, // Post-step point kinetic energy + IsElectron ? -1 : 1, // Post-step point charge + 0, -1); // eventID and threadID (not needed here) - eKin -= deltaEkin; - dir.Set(dirPrimary[0], dirPrimary[1], dirPrimary[2]); - survive(); - break; - } - case 1: { - // Invoke model for Bremsstrahlung: either SB- or Rel-Brem. - double logEnergy = std::log(eKin); - double deltaEkin = eKin < g4HepEmPars.fElectronBremModelLim - ? G4HepEmElectronInteractionBrem::SampleETransferSB(&g4HepEmData, eKin, logEnergy, - auxData.fMCIndex, &rnge, IsElectron) - : G4HepEmElectronInteractionBrem::SampleETransferRB(&g4HepEmData, eKin, logEnergy, - auxData.fMCIndex, &rnge, IsElectron); - - double dirPrimary[] = {dir.x(), dir.y(), dir.z()}; - double dirSecondary[3]; - G4HepEmElectronInteractionBrem::SampleDirections(eKin, deltaEkin, dirSecondary, dirPrimary, &rnge); - - Track &gamma = secondaries.gammas->NextTrack(); - adept_scoring::AccountProduced(userScoring, /*numElectrons*/ 0, /*numPositrons*/ 0, /*numGammas*/ 1); - - gamma.InitAsSecondary(pos, navState, globalTime); - gamma.parentID = currentTrack.parentID; - gamma.rngState = newRNG; - gamma.eKin = deltaEkin; - gamma.dir.Set(dirSecondary[0], dirSecondary[1], dirSecondary[2]); - - eKin -= deltaEkin; - dir.Set(dirPrimary[0], dirPrimary[1], dirPrimary[2]); - survive(); - break; - } - case 2: { - // Invoke annihilation (in-flight) for e+ - double dirPrimary[] = {dir.x(), dir.y(), dir.z()}; - double theGamma1Ekin, theGamma2Ekin; - double theGamma1Dir[3], theGamma2Dir[3]; - G4HepEmPositronInteractionAnnihilation::SampleEnergyAndDirectionsInFlight( - eKin, dirPrimary, &theGamma1Ekin, theGamma1Dir, &theGamma2Ekin, theGamma2Dir, &rnge); - - Track &gamma1 = secondaries.gammas->NextTrack(); - Track &gamma2 = secondaries.gammas->NextTrack(); - adept_scoring::AccountProduced(userScoring, /*numElectrons*/ 0, /*numPositrons*/ 0, /*numGammas*/ 2); - - gamma1.InitAsSecondary(pos, navState, globalTime); - gamma1.parentID = currentTrack.parentID; - gamma1.rngState = newRNG; - gamma1.eKin = theGamma1Ekin; - gamma1.dir.Set(theGamma1Dir[0], theGamma1Dir[1], theGamma1Dir[2]); - - gamma2.InitAsSecondary(pos, navState, globalTime); - // Reuse the RNG state of the dying track. - gamma2.parentID = currentTrack.parentID; - gamma2.rngState = currentTrack.rngState; - gamma2.eKin = theGamma2Ekin; - gamma2.dir.Set(theGamma2Dir[0], theGamma2Dir[1], theGamma2Dir[2]); - - // The current track is killed by not enqueuing into the next activeQueue. - break; - } + if (cross_boundary) { + // Move to the next boundary. + navState = nextState; + // Check if the next volume belongs to the GPU region and push it to the appropriate queue +#ifndef ADEPT_USE_SURF + const int nextlvolID = navState.Top()->GetLogicalVolume()->id(); +#else + const int nextlvolID = navState.GetLogicalId(); +#endif + VolAuxData const &nextauxData = auxDataArray[nextlvolID]; + if (nextauxData.fGPUregion > 0) + survive(); + else { + // To be safe, just push a bit the track exiting the GPU region to make sure + // Geant4 does not relocate it again inside the same region + pos += kPushOutRegion * dir; + survive(/*leak*/ true); + } } } } diff --git a/include/AdePT/kernels/gammas.cuh b/include/AdePT/kernels/gammas.cuh index 787dcabd..444cd631 100644 --- a/include/AdePT/kernels/gammas.cuh +++ b/include/AdePT/kernels/gammas.cuh @@ -119,6 +119,11 @@ __global__ void TransportGammas(adept::TrackManager *gammas, Secondaries theTrack->SetGStepLength(geometryStepLength); theTrack->SetOnBoundary(nextState.IsOnBoundary()); + // Update the flight times of the particle + double deltaTime = theTrack->GetGStepLength() / copcore::units::kCLight; + globalTime += deltaTime; + localTime += deltaTime; + int winnerProcessIndex; if (nextState.IsOnBoundary()) { // For now, just count that we hit something. @@ -163,28 +168,29 @@ __global__ void TransportGammas(adept::TrackManager *gammas, Secondaries G4HepEmGammaManager::SampleInteraction(&g4HepEmData, &gammaTrack, currentTrack.Uniform()); winnerProcessIndex = theTrack->GetWinnerProcessIndex(); + // NOTE: no simple re-drawing is possible for gamma-nuclear, since HowFar returns now smaller steps due to the gamma-nuclear + // reactions in comparison to without gamma-nuclear reactions. Thus, an empty step without a reaction is needed to + // compensate for the smaller step size returned by HowFar. // Reset number of interaction left for the winner discrete process also in the currentTrack (SampleInteraction() // resets it for theTrack), will be resampled in the next iteration. currentTrack.numIALeft[0] = -1.0; } - // Update the flight times of the particle - double deltaTime = theTrack->GetGStepLength() / copcore::units::kCLight; - globalTime += deltaTime; - localTime += deltaTime; - // Perform the discrete interaction. G4HepEmRandomEngine rnge(¤tTrack.rngState); // We might need one branched RNG state, prepare while threads are synchronized. RanluxppDouble newRNG(currentTrack.rngState.Branch()); + const double theElCut = g4HepEmData.fTheMatCutData->fMatCutData[auxData.fMCIndex].fSecElProdCutE; + const double theGammaCut = g4HepEmData.fTheMatCutData->fMatCutData[auxData.fMCIndex].fSecGamProdCutE; + switch (winnerProcessIndex) { case 0: { // Invoke gamma conversion to e-/e+ pairs, if the energy is above the threshold. if (eKin < 2 * copcore::units::kElectronMassC2) { survive(); - continue; + break; } double logEnergy = std::log(eKin); @@ -197,23 +203,58 @@ __global__ void TransportGammas(adept::TrackManager *gammas, Secondaries G4HepEmGammaInteractionConversion::SampleDirections(dirPrimary, dirSecondaryEl, dirSecondaryPos, elKinEnergy, posKinEnergy, &rnge); - Track &electron = secondaries.electrons->NextTrack(); - Track &positron = secondaries.positrons->NextTrack(); - adept_scoring::AccountProduced(userScoring, /*numElectrons*/ 1, /*numPositrons*/ 1, /*numGammas*/ 0); - electron.InitAsSecondary(pos, navState, globalTime); - electron.parentID = currentTrack.parentID; - electron.rngState = newRNG; - electron.eKin = elKinEnergy; - electron.dir.Set(dirSecondaryEl[0], dirSecondaryEl[1], dirSecondaryEl[2]); + // Check the cuts and deposit energy in this volume if needed + double edep = 0; - positron.InitAsSecondary(pos, navState, globalTime); - // Reuse the RNG state of the dying track. - positron.parentID = currentTrack.parentID; - positron.rngState = currentTrack.rngState; - positron.eKin = posKinEnergy; - positron.dir.Set(dirSecondaryPos[0], dirSecondaryPos[1], dirSecondaryPos[2]); + if (ApplyCuts && elKinEnergy < theElCut) { + // Deposit the energy here and kill the secondary + edep = elKinEnergy; + } else { + Track &electron = secondaries.electrons->NextTrack(); + electron.InitAsSecondary(pos, navState, globalTime); + electron.parentID = currentTrack.parentID; + electron.rngState = newRNG; + electron.eKin = elKinEnergy; + electron.dir.Set(dirSecondaryEl[0], dirSecondaryEl[1], dirSecondaryEl[2]); + } + + if (ApplyCuts && (copcore::units::kElectronMassC2 < theGammaCut && posKinEnergy < theElCut)) { + // Deposit: posKinEnergy + 2 * copcore::units::kElectronMassC2 and kill the secondary + edep += posKinEnergy + 2 * copcore::units::kElectronMassC2; + } else { + Track &positron = secondaries.positrons->NextTrack(); + positron.InitAsSecondary(pos, navState, globalTime); + // Reuse the RNG state of the dying track. + positron.parentID = currentTrack.parentID; + positron.rngState = currentTrack.rngState; + positron.eKin = posKinEnergy; + positron.dir.Set(dirSecondaryPos[0], dirSecondaryPos[1], dirSecondaryPos[2]); + } + + // If there is some edep from cutting particles, record the step + if (edep > 0) { + if (auxData.fSensIndex >= 0) + adept_scoring::RecordHit(userScoring, + currentTrack.parentID, // Track ID + 2, // Particle type + geometryStepLength, // Step length + edep, // Total Edep + &navState, // Pre-step point navstate + &preStepPos, // Pre-step point position + &preStepDir, // Pre-step point momentum direction + nullptr, // Pre-step point polarization + preStepEnergy, // Pre-step point kinetic energy + 0, // Pre-step point charge + &nextState, // Post-step point navstate + &pos, // Post-step point position + &dir, // Post-step point momentum direction + nullptr, // Post-step point polarization + 0, // Post-step point kinetic energy + 0, // Post-step point charge + 0, -1); // event and thread ID + } // The current track is killed by not enqueuing into the next activeQueue. break; @@ -223,19 +264,24 @@ __global__ void TransportGammas(adept::TrackManager *gammas, Secondaries constexpr double LowEnergyThreshold = 100 * copcore::units::eV; if (eKin < LowEnergyThreshold) { survive(); - continue; + break; } const double origDirPrimary[] = {dir.x(), dir.y(), dir.z()}; double dirPrimary[3]; - const double newEnergyGamma = + double newEnergyGamma = G4HepEmGammaInteractionCompton::SamplePhotonEnergyAndDirection(eKin, dirPrimary, origDirPrimary, &rnge); vecgeom::Vector3D newDirGamma(dirPrimary[0], dirPrimary[1], dirPrimary[2]); const double energyEl = eKin - newEnergyGamma; - if (energyEl > LowEnergyThreshold) { + + adept_scoring::AccountProduced(userScoring, /*numElectrons*/ 1, /*numPositrons*/ 0, /*numGammas*/ 0); + + // Check the cuts and deposit energy in this volume if needed + double edep = 0; + + if (ApplyCuts ? energyEl > theElCut : energyEl > LowEnergyThreshold) { // Create a secondary electron and sample/compute directions. Track &electron = secondaries.electrons->NextTrack(); - adept_scoring::AccountProduced(userScoring, /*numElectrons*/ 1, /*numPositrons*/ 0, /*numGammas*/ 0); electron.InitAsSecondary(pos, navState, globalTime); electron.parentID = currentTrack.parentID; @@ -244,39 +290,29 @@ __global__ void TransportGammas(adept::TrackManager *gammas, Secondaries electron.dir = eKin * dir - newEnergyGamma * newDirGamma; electron.dir.Normalize(); } else { - if (auxData.fSensIndex >= 0) - adept_scoring::RecordHit(userScoring, - currentTrack.parentID, // Track ID - 2, // Particle type - geometryStepLength, // Step length - 0, // Total Edep - &navState, // Pre-step point navstate - &preStepPos, // Pre-step point position - &preStepDir, // Pre-step point momentum direction - nullptr, // Pre-step point polarization - preStepEnergy, // Pre-step point kinetic energy - 0, // Pre-step point charge - &nextState, // Post-step point navstate - &pos, // Post-step point position - &dir, // Post-step point momentum direction - nullptr, // Post-step point polarization - newEnergyGamma, // Post-step point kinetic energy - 0, // Post-step point charge - 0, -1); // event and thread ID + edep = energyEl; } // Check the new gamma energy and deposit if below threshold. + // Using same hardcoded very LowEnergyThreshold as G4HepEm if (newEnergyGamma > LowEnergyThreshold) { eKin = newEnergyGamma; dir = newDirGamma; survive(); } else { + edep += newEnergyGamma; + newEnergyGamma = 0.; + // The current track is killed by not enqueuing into the next activeQueue. + } + + // If there is some edep from cutting particles, record the step + if (edep > 0) { if (auxData.fSensIndex >= 0) adept_scoring::RecordHit(userScoring, currentTrack.parentID, // Track ID 2, // Particle type geometryStepLength, // Step length - 0, // Total Edep + edep, // Total Edep &navState, // Pre-step point navstate &preStepPos, // Pre-step point position &preStepDir, // Pre-step point momentum direction @@ -290,7 +326,6 @@ __global__ void TransportGammas(adept::TrackManager *gammas, Secondaries newEnergyGamma, // Post-step point kinetic energy 0, // Post-step point charge 0, -1); // event and thread ID - // The current track is killed by not enqueuing into the next activeQueue. } break; } @@ -303,7 +338,7 @@ __global__ void TransportGammas(adept::TrackManager *gammas, Secondaries double edep = bindingEnergy; const double photoElecE = eKin - edep; - if (photoElecE > theLowEnergyThreshold) { + if (ApplyCuts ? photoElecE > theElCut : photoElecE > theLowEnergyThreshold) { // Create a secondary electron and sample directions. Track &electron = secondaries.electrons->NextTrack(); adept_scoring::AccountProduced(userScoring, /*numElectrons*/ 1, /*numPositrons*/ 0, /*numGammas*/ 0); @@ -318,6 +353,7 @@ __global__ void TransportGammas(adept::TrackManager *gammas, Secondaries electron.eKin = photoElecE; electron.dir.Set(dirPhotoElec[0], dirPhotoElec[1], dirPhotoElec[2]); } else { + // If the secondary electron is cut, deposit all the energy of the gamma in this volume edep = eKin; } if (auxData.fSensIndex >= 0) diff --git a/src/AdePTTrackingManager.cc b/src/AdePTTrackingManager.cc index 5ba213ac..6c04f227 100644 --- a/src/AdePTTrackingManager.cc +++ b/src/AdePTTrackingManager.cc @@ -9,6 +9,7 @@ #include "G4Event.hh" #include "G4RunManager.hh" #include "G4TransportationManager.hh" +#include "G4EmParameters.hh" #include "G4Electron.hh" #include "G4Gamma.hh" @@ -109,6 +110,11 @@ void AdePTTrackingManager::BuildPhysicsTable(const G4ParticleDefinition &part) void AdePTTrackingManager::PreparePhysicsTable(const G4ParticleDefinition &part) { + if (fAdePTInitialized) { + // Set ApplyCuts flag on device since now G4 physics is initialized + fAdeptTransport->InitializeApplyCuts(G4EmParameters::Instance()->ApplyCuts()); + } + // Prepare PhysicsTable for G4HepEm fHepEmTrackingManager->PreparePhysicsTable(part);