blast_seg.c
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:163k
源码类别:

生物技术

开发平台:

C/C++

  1.    69534.762324, 69543.824745, 69552.887281, 69561.949933, 69571.012701, 69580.075585, 69589.138585, 69598.201700, 
  2.    69607.264932, 69616.328279, 69625.391742, 69634.455321, 69643.519016, 69652.582827, 69661.646753, 69670.710795, 
  3.    69679.774953, 69688.839227, 69697.903616, 69706.968121, 69716.032742, 69725.097478, 69734.162330, 69743.227298, 
  4.    69752.292381, 69761.357580, 69770.422895, 69779.488325, 69788.553871, 69797.619532, 69806.685309, 69815.751202, 
  5.    69824.817210, 69833.883333, 69842.949572, 69852.015927, 69861.082397, 69870.148982, 69879.215683, 69888.282499, 
  6.    69897.349431, 69906.416478, 69915.483641, 69924.550919, 69933.618312, 69942.685821, 69951.753445, 69960.821185, 
  7.    69969.889039, 69978.957009, 69988.025095, 69997.093295, 70006.161611, 70015.230042, 70024.298589, 70033.367250, 
  8.    70042.436027, 70051.504919, 70060.573926, 70069.643049, 70078.712286, 70087.781639, 70096.851107, 70105.920690, 
  9.    70114.990388, 70124.060201, 70133.130129, 70142.200172, 70151.270331, 70160.340604, 70169.410992, 70178.481496, 
  10.    70187.552114, 70196.622848, 70205.693696, 70214.764659, 70223.835738, 70232.906931, 70241.978239, 70251.049662, 
  11.    70260.121200, 70269.192853, 70278.264621, 70287.336503, 70296.408501, 70305.480613, 70314.552840, 70323.625182, 
  12.    70332.697639, 70341.770210, 70350.842896, 70359.915697, 70368.988613, 70378.061643, 70387.134788, 70396.208048, 
  13.    70405.281423, 70414.354912, 70423.428516, 70432.502234, 70441.576067, 70450.650015, 70459.724078, 70468.798254, 
  14.    70477.872546, 70486.946952, 70496.021473, 70505.096108, 70514.170858, 70523.245722, 70532.320701, 70541.395794, 
  15.    70550.471002, 70559.546324, 70568.621760, 70577.697311, 70586.772977, 70595.848757, 70604.924651, 70614.000660, 
  16.    70623.076783, 70632.153020, 70641.229372, 70650.305838, 70659.382418, 70668.459113, 70677.535922, 70686.612845, 
  17.    70695.689883, 70704.767034, 70713.844300, 70722.921681, 70731.999175, 70741.076784, 70750.154507, 70759.232344, 
  18.    70768.310295, 70777.388360, 70786.466540, 70795.544833, 70804.623241, 70813.701763, 70822.780399, 70831.859149, 
  19.    70840.938013, 70850.016991, 70859.096083, 70868.175289, 70877.254609, 70886.334043, 70895.413591, 70904.493253, 
  20.    70913.573029, 70922.652919, 70931.732923, 70940.813041, 70949.893272, 70958.973618, 70968.054077, 70977.134651, 
  21.    70986.215338, 70995.296139, 71004.377054, 71013.458082, 71022.539225, 71031.620481, 71040.701851, 71049.783335, 
  22.    71058.864932, 71067.946644, 71077.028469, 71086.110407, 71095.192460, 71104.274626, 71113.356905, 71122.439299, 
  23.    71131.521806, 71140.604426, 71149.687160, 71158.770008, 71167.852970, 71176.936045, 71186.019233, 71195.102536, 
  24.    71204.185951, 71213.269480, 71222.353123, 71231.436879, 71240.520749, 71249.604732, 71258.688829, 71267.773039, 
  25.    71276.857363, 71285.941799, 71295.026350, 71304.111014, 71313.195791, 71322.280681, 71331.365685, 71340.450802, 
  26.    71349.536033, 71358.621377, 71367.706834, 71376.792404, 71385.878088, 71394.963885, 71404.049796, 71413.135819, 
  27.    71422.221956, 71431.308206, 71440.394569, 71449.481045, 71458.567635, 71467.654338, 71476.741154, 71485.828083, 
  28.    71494.915125, 71504.002280, 71513.089548, 71522.176930, 71531.264424, 71540.352032, 71549.439753, 71558.527586, 
  29.    71567.615533, 71576.703593, 71585.791766, 71594.880051, 71603.968450, 71613.056962, 71622.145586, 71631.234324, 
  30.    71640.323174, 71649.412138, 71658.501214, 71667.590403, 71676.679705, 71685.769120, 71694.858648, 71703.948288, 
  31.    71713.038042, 71722.127908, 71731.217887, 71740.307979, 71749.398184, 71758.488501, 71767.578931, 71776.669474, 
  32.    71785.760129, 71794.850897, 71803.941778, 71813.032772, 71822.123878, 71831.215097, 71840.306429, 71849.397873, 
  33.    71858.489430, 71867.581099, 71876.672881, 71885.764776, 71894.856783, 71903.948903, 71913.041135, 71922.133480, 
  34.    71931.225937, 71940.318507, 71949.411190, 71958.503984, 71967.596892, 71976.689911, 71985.783043, 71994.876288, 
  35.    72003.969645, 72013.063115, 72022.156696, 72031.250391, 72040.344197, 72049.438116, 72058.532147, 72067.626291, 
  36.    72076.720547, 72085.814915, 72094.909395, 72104.003988, 72113.098693, 72122.193510, 72131.288440, 72140.383482, 
  37.    72149.478636, 72158.573902, 72167.669280, 72176.764771, 72185.860373, 72194.956088, 72204.051915, 72213.147854, 
  38.    72222.243906, 72231.340069, 72240.436344, 72249.532732, 72258.629231, 72267.725843, 72276.822567, 72285.919402, 
  39.    72295.016350, 72304.113410, 72313.210581, 72322.307865, 72331.405261, 72340.502768, 72349.600388, 72358.698119, 
  40.    72367.795962, 72376.893918, 72385.991985, 72395.090164, 72404.188455, 72413.286857, 72422.385372, 72431.483998, 
  41.    72440.582737, 72449.681587, 72458.780548, 72467.879622, 72476.978807, 72486.078104, 72495.177513, 72504.277034, 
  42.    72513.376666, 72522.476410, 72531.576265, 72540.676233, 72549.776312, 72558.876502, 72567.976805, 72577.077219, 
  43.    72586.177744, 72595.278381, 72604.379130, 72613.479990, 72622.580962, 72631.682045, 72640.783240, 72649.884547, 
  44.    72658.985965, 72668.087494, 72677.189135, 72686.290888, 72695.392751, 72704.494727, 72713.596814, 72722.699012, 
  45.    72731.801321, 72740.903742, 72750.006275, 72759.108919, 72768.211674, 72777.314540, 72786.417518, 72795.520607, 
  46.    72804.623808, 72813.727120, 72822.830543, 72831.934077, 72841.037723, 72850.141480, 72859.245348, 72868.349327, 
  47.    72877.453418, 72886.557619, 72895.661932, 72904.766357, 72913.870892, 72922.975538, 72932.080296, 72941.185165, 
  48.    72950.290145, 72959.395236, 72968.500438, 72977.605751, 72986.711175, 72995.816710, 73004.922356, 73014.028114, 
  49.    73023.133982, 73032.239962, 73041.346052, 73050.452253, 73059.558566, 73068.664989, 73077.771523, 73086.878168, 
  50.    73095.984924, 73105.091791, 73114.198769, 73123.305858, 73132.413057, 73141.520368, 73150.627789, 73159.735321, 
  51.    73168.842964, 73177.950718, 73187.058583, 73196.166558, 73205.274644, 73214.382841, 73223.491149, 73232.599567, 
  52.    73241.708096, 73250.816736, 73259.925486, 73269.034348, 73278.143320, 73287.252402, 73296.361595, 73305.470899, 
  53.    73314.580314, 73323.689839, 73332.799474, 73341.909221, 73351.019077, 73360.129045, 73369.239123, 73378.349311, 
  54.    73387.459610, 73396.570020, 73405.680540, 73414.791170, 73423.901911, 73433.012763, 73442.123725, 73451.234797, 
  55.    73460.345980, 73469.457273, 73478.568677, 73487.680191, 73496.791815, 73505.903550, 73515.015395, 73524.127351, 
  56.    73533.239416, 73542.351592, 73551.463879, 73560.576276, 73569.688783, 73578.801400, 73587.914127, 73597.026965, 
  57.    73606.139913, 73615.252972, 73624.366140, 73633.479419, 73642.592808, 73651.706307, 73660.819916, 73669.933635, 
  58.    73679.047465, 73688.161404, 73697.275454, 73706.389614, 73715.503884, 73724.618264, 73733.732754, 73742.847354, 
  59.    73751.962064, 73761.076884, 73770.191814, 73779.306854, 73788.422005, 73797.537265, 73806.652635, 73815.768115, 
  60.    73824.883705, 73833.999405, 73843.115215, 73852.231135, 73861.347164, 73870.463304, 73879.579553, 73888.695913, 
  61.    73897.812382, 73906.928961, 73916.045650, 73925.162448, 73934.279357, 73943.396375, 73952.513503, 73961.630741, 
  62.    73970.748088, 73979.865545, 73988.983112, 73998.100789, 74007.218575, 74016.336472, 74025.454477, 74034.572593, 
  63.    74043.690818, 74052.809153, 74061.927597, 74071.046151, 74080.164814, 74089.283588, 74098.402470, 74107.521463, 
  64.    74116.640565, 74125.759776, 74134.879097, 74143.998528, 74153.118068, 74162.237717, 74171.357476, 74180.477344, 
  65.    74189.597322, 74198.717410, 74207.837607, 74216.957913, 74226.078329, 74235.198854, 74244.319488, 74253.440232, 
  66.    74262.561085, 74271.682048, 74280.803120, 74289.924301, 74299.045591, 74308.166991, 74317.288500, 74326.410119, 
  67.    74335.531847, 74344.653684, 74353.775630, 74362.897685, 74372.019850, 74381.142124, 74390.264507, 74399.386999, 
  68.    74408.509601, 74417.632311, 74426.755131, 74435.878060, 74445.001098, 74454.124245, 74463.247501, 74472.370867, 
  69.    74481.494341, 74490.617925, 74499.741617, 74508.865419, 74517.989330, 74527.113349, 74536.237478, 74545.361716, 
  70.    74554.486062, 74563.610518, 74572.735082, 74581.859756, 74590.984538, 74600.109430, 74609.234430, 74618.359539, 
  71.    74627.484758, 74636.610085, 74645.735520, 74654.861065, 74663.986719, 74673.112481, 74682.238352, 74691.364332, 
  72.    74700.490421, 74709.616619, 74718.742925, 74727.869340, 74736.995864, 74746.122497, 74755.249238, 74764.376088, 
  73.    74773.503047, 74782.630114, 74791.757290, 74800.884575, 74810.011969, 74819.139471, 74828.267082, 74837.394801, 
  74.    74846.522629, 74855.650565, 74864.778611, 74873.906764, 74883.035026, 74892.163397, 74901.291877, 74910.420465, 
  75.    74919.549161, 74928.677966, 74937.806879, 74946.935901, 74956.065031, 74965.194270, 74974.323617, 74983.453073, 
  76.    74992.582637, 75001.712309, 75010.842090, 75019.971980, 75029.101977, 75038.232083, 75047.362298, 75056.492620, 
  77.    75065.623051, 75074.753590, 75083.884238, 75093.014994, 75102.145858, 75111.276831, 75120.407911, 75129.539100, 
  78.    75138.670397, 75147.801803, 75156.933316, 75166.064938, 75175.196668, 75184.328506, 75193.460453, 75202.592507, 
  79.    75211.724670, 75220.856940, 75229.989319, 75239.121806, 75248.254401, 75257.387104, 75266.519915, 75275.652835, 
  80.    75284.785862, 75293.918997, 75303.052240, 75312.185592, 75321.319051, 75330.452618, 75339.586294, 75348.720077, 
  81.    75357.853968, 75366.987967, 75376.122074, 75385.256289, 75394.390612, 75403.525043, 75412.659582, 75421.794228, 
  82.    75430.928983, 75440.063845, 75449.198815, 75458.333893, 75467.469078, 75476.604372, 75485.739773, 75494.875282, 
  83.    75504.010899, 75513.146624, 75522.282456, 75531.418396, 75540.554444, 75549.690599, 75558.826863, 75567.963233, 
  84.    75577.099712, 75586.236298, 75595.372992, 75604.509793, 75613.646702, 75622.783719, 75631.920843, 75641.058075, 
  85.    75650.195415, 75659.332862, 75668.470417, 75677.608079, 75686.745848, 75695.883726, 75705.021710, 75714.159802, 
  86.    75723.298002, 75732.436309, 75741.574724, 75750.713246, 75759.851876, 75768.990613, 75778.129457, 75787.268409, 
  87.    75796.407468, 75805.546634, 75814.685908, 75823.825290, 75832.964778, 75842.104374, 75851.244077, 75860.383888, 
  88.    75869.523806, 75878.663831, 75887.803964, 75896.944203, 75906.084550, 75915.225005, 75924.365566, 75933.506235, 
  89.    75942.647011, 75951.787894, 75960.928884, 75970.069982, 75979.211186, 75988.352498, 75997.493917, 76006.635443, 
  90.    76015.777076, 76024.918816, 76034.060664, 76043.202618, 76052.344680, 76061.486848, 76070.629124, 76079.771507, 
  91.    76088.913996, 76098.056593, 76107.199297, 76116.342108, 76125.485025, 76134.628050, 76143.771182, 76152.914420, 
  92.    76162.057766, 76171.201218, 76180.344777, 76189.488444, 76198.632217, 76207.776097, 76216.920084, 76226.064177, 
  93.    76235.208378, 76244.352685, 76253.497100, 76262.641621, 76271.786248, 76280.930983, 76290.075824, 76299.220773, 
  94.    76308.365828, 76317.510989, 76326.656258, 76335.801633, 76344.947114, 76354.092703, 76363.238398, 76372.384200, 
  95.    76381.530108, 76390.676124, 76399.822245, 76408.968474, 76418.114809, 76427.261251, 76436.407799, 76445.554454, 
  96.    76454.701215, 76463.848083, 76472.995057, 76482.142138, 76491.289326, 76500.436620, 76509.584021, 76518.731528, 
  97.    76527.879141, 76537.026861, 76546.174688, 76555.322621, 76564.470660, 76573.618806, 76582.767058, 76591.915417, 
  98.    76601.063882, 76610.212453, 76619.361131, 76628.509915, 76637.658805, 76646.807802, 76655.956905, 76665.106114, 
  99.    76674.255430, 76683.404852, 76692.554380, 76701.704015, 76710.853755, 76720.003602, 76729.153556, 76738.303615, 
  100.    76747.453781, 76756.604052, 76765.754431, 76774.904915, 76784.055505, 76793.206202, 76802.357004, 76811.507913, 
  101.    76820.658928, 76829.810049, 76838.961276, 76848.112609, 76857.264049, 76866.415594, 76875.567245, 76884.719003, 
  102.    76893.870866, 76903.022836, 76912.174911, 76921.327092, 76930.479380, 76939.631773, 76948.784273, 76957.936878, 
  103.    76967.089589, 76976.242406, 76985.395330, 76994.548359, 77003.701493, 77012.854734, 77022.008081, 77031.161533, 
  104.    77040.315092, 77049.468756, 77058.622526, 77067.776402, 77076.930383, 77086.084471, 77095.238664, 77104.392963, 
  105.    77113.547368, 77122.701878, 77131.856495, 77141.011216, 77150.166044, 77159.320977, 77168.476017, 77177.631161, 
  106.    77186.786412, 77195.941768, 77205.097229, 77214.252797, 77223.408470, 77232.564248, 77241.720133, 77250.876122, 
  107.    77260.032218, 77269.188419, 77278.344725, 77287.501137, 77296.657655, 77305.814278, 77314.971006, 77324.127840, 
  108.    77333.284780, 77342.441825, 77351.598976, 77360.756232, 77369.913593, 77379.071060, 77388.228632, 77397.386310, 
  109.    77406.544093, 77415.701982, 77424.859976, 77434.018075, 77443.176279, 77452.334589, 77461.493005, 77470.651525, 
  110.    77479.810151, 77488.968883, 77498.127719, 77507.286661, 77516.445708, 77525.604860, 77534.764118, 77543.923481, 
  111.    77553.082949, 77562.242522, 77571.402200, 77580.561984, 77589.721873, 77598.881867, 77608.041966, 77617.202170, 
  112.    77626.362480, 77635.522894, 77644.683414, 77653.844039, 77663.004769, 77672.165604, 77681.326544, 77690.487589, 
  113.    77699.648739, 77708.809994, 77717.971354, 77727.132819, 77736.294390, 77745.456065, 77754.617845, 77763.779730, 
  114.    77772.941720, 77782.103815, 77791.266015, 77800.428320, 77809.590730, 77818.753245, 77827.915864, 77837.078589, 
  115.    77846.241418, 77855.404353, 77864.567392, 77873.730536, 77882.893784, 77892.057138, 77901.220596, 77910.384160, 
  116.    77919.547828, 77928.711600, 77937.875478, 77947.039460, 77956.203547, 77965.367739, 77974.532035, 77983.696436, 
  117.    77992.860942, 78002.025553, 78011.190268, 78020.355088, 78029.520012, 78038.685041, 78047.850175, 78057.015414, 
  118.    78066.180757, 78075.346204, 78084.511756, 78093.677413, 78102.843174, 78112.009040, 78121.175011, 78130.341086, 
  119.    78139.507265, 78148.673549, 78157.839938, 78167.006431, 78176.173028, 78185.339730, 78194.506536, 78203.673447, 
  120.    78212.840462, 78222.007582, 78231.174806, 78240.342135, 78249.509568, 78258.677105, 78267.844746, 78277.012492, 
  121.    78286.180343, 78295.348297, 78304.516356, 78313.684520, 78322.852787, 78332.021159, 78341.189635, 78350.358216, 
  122.    78359.526900, 78368.695689, 78377.864583, 78387.033580, 78396.202682, 78405.371887, 78414.541197, 78423.710612, 
  123.    78432.880130, 78442.049753, 78451.219479, 78460.389310, 78469.559245, 78478.729284, 78487.899427, 78497.069675, 
  124.    78506.240026, 78515.410481, 78524.581041, 78533.751704, 78542.922472, 78552.093344, 78561.264319, 78570.435399, 
  125.    78579.606583, 78588.777870, 78597.949262, 78607.120757, 78616.292357, 78625.464060, 78634.635868, 78643.807779, 
  126.    78652.979794, 78662.151914, 78671.324137, 78680.496464, 78689.668894, 78698.841429, 78708.014068, 78717.186810, 
  127.    78726.359656, 78735.532606, 78744.705660, 78753.878817, 78763.052079, 78772.225444, 78781.398913, 78790.572485, 
  128.    78799.746162, 78808.919942, 78818.093826, 78827.267813, 78836.441905, 78845.616100, 78854.790398, 78863.964800, 
  129.    78873.139306, 78882.313916, 78891.488629, 78900.663446, 78909.838366, 78919.013390, 78928.188518, 78937.363749, 
  130.    78946.539084, 78955.714522, 78964.890064, 78974.065710, 78983.241458, 78992.417311, 79001.593267, 79010.769326, 
  131.    79019.945489, 79029.121756, 79038.298125, 79047.474599, 79056.651175, 79065.827856, 79075.004639, 79084.181526, 
  132.    79093.358517, 79102.535610, 79111.712808, 79120.890108, 79130.067512, 79139.245019, 79148.422630, 79157.600344, 
  133.    79166.778161, 79175.956081, 79185.134105, 79194.312232, 79203.490462, 79212.668796, 79221.847233, 79231.025773, 
  134.    79240.204416, 79249.383163, 79258.562012, 79267.740965, 79276.920021, 79286.099181, 79295.278443, 79304.457809, 
  135.    79313.637277, 79322.816849, 79331.996524, 79341.176302, 79350.356183, 79359.536168, 79368.716255, 79377.896445, 
  136.    79387.076739, 79396.257135, 79405.437635, 79414.618237, 79423.798943, 79432.979751, 79442.160663, 79451.341678, 
  137.    79460.522795, 79469.704016, 79478.885339, 79488.066765, 79497.248295, 79506.429927, 79515.611662, 79524.793500, 
  138.    79533.975441, 79543.157485, 79552.339631, 79561.521881, 79570.704233, 79579.886688, 79589.069246, 79598.251907, 
  139.    79607.434671, 79616.617537, 79625.800506, 79634.983578, 79644.166753, 79653.350030, 79662.533410, 79671.716893, 
  140.    79680.900479, 79690.084167, 79699.267958, 79708.451852, 79717.635849, 79726.819948, 79736.004149, 79745.188454, 
  141.    79754.372861, 79763.557370, 79772.741982, 79781.926697, 79791.111515, 79800.296435, 79809.481457, 79818.666582, 
  142.    79827.851810, 79837.037140, 79846.222573, 79855.408108, 79864.593746, 79873.779486, 79882.965329, 79892.151274, 
  143.    79901.337322, 79910.523472, 79919.709725, 79928.896080, 79938.082537, 79947.269097, 79956.455759, 79965.642524, 
  144.    79974.829391, 79984.016360, 79993.203432, 80002.390606, 80011.577882, 80020.765261, 80029.952742, 80039.140326, 
  145.    80048.328011, 80057.515799, 80066.703690, 80075.891682, 80085.079777, 80094.267974, 80103.456273, 80112.644675, 
  146.    80121.833178, 80131.021784, 80140.210492, 80149.399302, 80158.588215, 80167.777229, 80176.966346, 80186.155565, 
  147.    80195.344886, 80204.534309, 80213.723834, 80222.913462, 80232.103191, 80241.293023, 80250.482956, 80259.672992, 
  148.    80268.863130, 80278.053369, 80287.243711, 80296.434155, 80305.624700, 80314.815348, 80324.006098, 80333.196950, 
  149.    80342.387903, 80351.578959, 80360.770116, 80369.961376, 80379.152737, 80388.344201, 80397.535766, 80406.727433, 
  150.    80415.919202, 80425.111073, 80434.303045, 80443.495120, 80452.687296, 80461.879575, 80471.071955, 80480.264437, 
  151.    80489.457020, 80498.649706, 80507.842493, 80517.035382, 80526.228373, 80535.421465, 80544.614659, 80553.807955, 
  152.    80563.001353, 80572.194852, 80581.388453, 80590.582156, 80599.775960, 80608.969866, 80618.163874, 80627.357984, 
  153.    80636.552195, 80645.746507, 80654.940921, 80664.135437, 80673.330055, 80682.524774, 80691.719594, 80700.914516, 
  154.    80710.109540, 80719.304665, 80728.499892, 80737.695220, 80746.890650, 80756.086181, 80765.281814, 80774.477548, 
  155.    80783.673384, 80792.869321, 80802.065360, 80811.261500, 80820.457741, 80829.654084, 80838.850528, 80848.047074, 
  156.    80857.243721, 80866.440469, 80875.637319, 80884.834270, 80894.031323, 80903.228476, 80912.425732, 80921.623088, 
  157.    80930.820546, 80940.018105, 80949.215765, 80958.413527, 80967.611390, 80976.809354, 80986.007419, 80995.205586, 
  158.    81004.403853, 81013.602222, 81022.800693, 81031.999264, 81041.197937, 81050.396710, 81059.595585, 81068.794561, 
  159.    81077.993638, 81087.192817, 81096.392096, 81105.591477, 81114.790958, 81123.990541, 81133.190225, 81142.390010, 
  160.    81151.589896, 81160.789883, 81169.989971, 81179.190160, 81188.390450, 81197.590841, 81206.791333, 81215.991926, 
  161.    81225.192620, 81234.393415, 81243.594311, 81252.795307, 81261.996405, 81271.197604, 81280.398904, 81289.600304, 
  162.    81298.801805, 81308.003408, 81317.205111, 81326.406915, 81335.608820, 81344.810826, 81354.012932, 81363.215140, 
  163.    81372.417448, 81381.619857, 81390.822367, 81400.024977, 81409.227689, 81418.430501, 81427.633413, 81436.836427, 
  164.    81446.039541, 81455.242756, 81464.446072, 81473.649489, 81482.853006, 81492.056624, 81501.260342, 81510.464161, 
  165.    81519.668081, 81528.872102, 81538.076223, 81547.280444, 81556.484767, 81565.689189, 81574.893713, 81584.098337, 
  166.    81593.303062, 81602.507887, 81611.712813, 81620.917839, 81630.122966, 81639.328193, 81648.533521, 81657.738949, 
  167.    81666.944478, 81676.150107, 81685.355837, 81694.561667, 81703.767598, 81712.973629, 81722.179761, 81731.385992, 
  168.    81740.592325, 81749.798758, 81759.005291, 81768.211924, 81777.418658, 81786.625492, 81795.832427, 81805.039462, 
  169.    81814.246597, 81823.453833, 81832.661168, 81841.868605, 81851.076141, 81860.283778, 81869.491515, 81878.699352, 
  170.    81887.907290, 81897.115327, 81906.323465, 81915.531703, 81924.740042, 81933.948480, 81943.157019, 81952.365658, 
  171.    81961.574397, 81970.783236, 81979.992176, 81989.201215, 81998.410355, 82007.619595, 82016.828935, 82026.038374, 
  172.    82035.247915, 82044.457555, 82053.667295, 82062.877135, 82072.087075, 82081.297116, 82090.507256, 82099.717496, 
  173.    82108.927837 
  174.   }; 
  175. #define AA20    2
  176. #define LN20    2.9957322735539909
  177. #define CHAR_SET 128
  178. typedef struct SSequence
  179.   {
  180.    struct SSequence* parent;
  181.    char* seq;
  182.    Alpha* palpha;
  183.    Int4 start;
  184.    Int4 length;
  185.    Int4 bogus;
  186.    Boolean punctuation;
  187.    Int4* composition;
  188.    Int4* state;
  189.    double entropy;
  190. } SSequence;
  191. typedef struct SSeg
  192.   {
  193.    int begin;
  194.    int end;
  195.    struct SSeg *next;
  196.   } SSeg;
  197. /*---------------------------------------------------------------(SeqNew)---*/
  198. static SSequence* SeqNew(void)
  199. {
  200.    SSequence* seq;
  201.    seq = (SSequence*) calloc(1, sizeof(SSequence));
  202.    if (seq==NULL)
  203.      {
  204.       /* raise error flag and etc. */
  205.       return(seq);
  206.      }
  207.    seq->parent = (SSequence*) NULL;
  208.    seq->seq = (char*) NULL;
  209.    seq->palpha = (Alpha*) NULL;
  210.    seq->start = seq->length = 0;
  211.    seq->bogus = seq->punctuation = FALSE;
  212.    seq->composition = seq->state = (Int4*) NULL;
  213.    seq->entropy = (double) 0.0;
  214.    return(seq);
  215. }
  216. /*------------------------------------------------------------(AlphaFree)---*/
  217. static void AlphaFree (Alpha* palpha)
  218.   {
  219.    if (!palpha) return;
  220.    sfree (palpha->alphaindex);
  221.    sfree (palpha->alphaflag);
  222.    sfree (palpha->alphachar);
  223.    sfree (palpha);
  224.    return;
  225.  }
  226. /*--------------------------------------------------------------(SeqFree)---*/
  227. static void SeqFree(SSequence* seq)
  228. {
  229.    if (seq==NULL) return;
  230.    sfree(seq->seq);
  231.    AlphaFree(seq->palpha);
  232.    sfree(seq->composition);
  233.    sfree(seq->state);
  234.    sfree(seq);
  235.    return;
  236. }
  237. /*--------------------------------------------------------------(SSegFree)---*/
  238. static void SegFree(SSeg* seg)
  239. {
  240.    SSeg* nextseg;
  241.    while (seg)
  242.      {
  243.       nextseg = seg->next;
  244.       sfree(seg);
  245.       seg = nextseg;
  246.      }
  247.    return;
  248. }
  249. /*--------------------------------------------------------------(hasdash)---*/
  250. static Boolean hasdash(SSequence* win)
  251. {
  252. register char *seq, *seqmax;
  253. seq = win->seq;
  254. seqmax = seq + win->length;
  255. while (seq < seqmax) {
  256. if (*seq++ == '-')
  257. return TRUE;
  258. }
  259. return FALSE;
  260. }
  261. /*------------------------------------------------------------(state_cmp)---*/
  262. static int state_cmp(const void* s1, const void* s2)
  263. {
  264. int *np1, *np2;
  265. np1 = (int *) s1;
  266. np2 = (int *) s2;
  267. return (*np2 - *np1);
  268. }
  269. /*---------------------------------------------------------------(compon)---*/
  270. static void compon(SSequence* win)
  271. {
  272. Int4* comp;
  273. Int4 letter;
  274. char* seq,* seqmax;
  275.         Int4* alphaindex;
  276.         unsigned char* alphaflag;
  277.         Int4 alphasize;
  278.         alphasize = win->palpha->alphasize;
  279.         alphaindex = win->palpha->alphaindex;
  280.         alphaflag = win->palpha->alphaflag;
  281. win->composition = comp =
  282.                 (Int4*) calloc(alphasize, sizeof(Int4));
  283. seq = win->seq;
  284. seqmax = seq + win->length;
  285. while (seq < seqmax) {
  286. letter = *seq++;
  287. if (!alphaflag[letter])
  288. comp[alphaindex[letter]]++;
  289.       else win->bogus++;
  290. }
  291. return;
  292. }
  293. /*--------------------------------------------------------------(stateon)---*/
  294. static void stateon(SSequence* win)
  295. {
  296. Int4 letter, nel, c;
  297.         Int4 alphasize;
  298.         alphasize = win->palpha->alphasize;
  299. if (win->composition == NULL)
  300. compon(win);
  301. win->state = (Int4*) calloc((alphasize+1), sizeof(win->state[0]));
  302. for (letter = nel = 0; letter < alphasize; ++letter) {
  303. if ((c = win->composition[letter]) == 0)
  304. continue;
  305. win->state[nel++] = c;
  306. }
  307. for (letter = nel; letter < alphasize+1; ++letter)
  308. win->state[letter] = 0;
  309. qsort(win->state, nel, sizeof(win->state[0]), state_cmp);
  310. return;
  311. }
  312. /*--------------------------------------------------------------(openwin)---*/
  313. static SSequence* openwin(SSequence* parent, Int4 start, Int4 length)
  314. {
  315.    SSequence* win;
  316.    if (start<0 || length<0 || start+length>parent->length)
  317.      {
  318.       return((SSequence*) NULL);
  319.      }
  320.    win = (SSequence*) calloc(1, sizeof(SSequence));
  321. /*---                                          ---[set links, up and down]---*/
  322.    win->parent = parent;
  323.    win->palpha = parent->palpha;
  324. /*---                          ---[install the local copy of the sequence]---*/
  325.    win->start = start;
  326.    win->length = length;
  327. #if 0                                                    /* Hi Warren! */
  328.    win->seq = (char*) calloc(length + 1, sizeof(char));
  329.    memcpy(win->seq, (parent->seq)+start, length);
  330.    win->seq[length] = '';
  331. #else
  332. win->seq = parent->seq + start;
  333. #endif
  334.         win->bogus = 0;
  335. win->punctuation = FALSE;
  336. win->entropy = -2.;
  337. win->state = (Int4*) NULL;
  338. win->composition = (Int4*) NULL;
  339. stateon(win);
  340. return win;
  341. }
  342. /*--------------------------------------------------------------(entropy)---*/
  343. static double entropy(Int4* sv)
  344.   {double ent;
  345.    Int4 i, total;
  346.    total = 0;
  347.    for (i=0; sv[i]!=0; i++)
  348.      {
  349.       total += sv[i];
  350.      }
  351.    if (total==0) return(0.);
  352.    ent = 0.0;
  353.    for (i=0; sv[i]!=0; i++)
  354.      {
  355.       ent += ((double)sv[i])*log(((double)sv[i])/(double)total)/LN2;
  356.      }
  357.    ent = fabs(ent/(double)total);
  358.    return(ent);
  359.   }
  360. /*----------------------------------------------------------(decrementsv)---*/
  361. static void decrementsv(Int4* sv, Int4 class)
  362. {
  363. Int4 svi;
  364. while ((svi = *sv++) != 0) {
  365. if (svi == class && *sv < class) {
  366. sv[-1] = svi - 1;
  367. break;
  368. }
  369. }
  370. }
  371. /*----------------------------------------------------------(incrementsv)---*/
  372. static void incrementsv(Int4* sv, Int4 class)
  373. {
  374. for (;;) {
  375. if (*sv++ == class) {
  376. sv[-1]++;
  377. break;
  378. }
  379. }
  380. }
  381. /*------------------------------------------------------------(shiftwin1)---*/
  382. static Int4 shiftwin1(SSequence* win)
  383. {
  384. Int4 j, length;
  385. Int4* comp;
  386.         Int4* alphaindex;
  387.         unsigned char* alphaflag;
  388. length = win->length;
  389. comp = win->composition;
  390.         alphaindex = win->palpha->alphaindex;
  391.         alphaflag = win->palpha->alphaflag;
  392. if ((++win->start + length) > win->parent->length) {
  393. --win->start;
  394. return FALSE;
  395. }
  396. if (!alphaflag[j = win->seq[0]])
  397. decrementsv(win->state, comp[alphaindex[j]]--);
  398.         else win->bogus--;
  399. j = win->seq[length];
  400. ++win->seq;
  401. if (!alphaflag[j])
  402. incrementsv(win->state, comp[alphaindex[j]]++);
  403.         else win->bogus++;
  404. if (win->entropy > -2.)
  405. win->entropy = entropy(win->state);
  406. return TRUE;
  407. }
  408. /*-------------------------------------------------------------(closewin)---*/
  409. static void closewin(SSequence* win)
  410. {
  411.    if (win==NULL) return;
  412.    if (win->state!=NULL)       sfree(win->state);
  413.    if (win->composition!=NULL) sfree(win->composition);
  414.    sfree(win);
  415.    return;
  416. }
  417. /*----------------------------------------------------------------(enton)---*/
  418. static void enton(SSequence* win)
  419.   {
  420.    if (win->state==NULL) {stateon(win);}
  421.    win->entropy = entropy(win->state);
  422.    return;
  423.   }
  424. /*---------------------------------------------------------------(seqent)---*/
  425. static double* seqent(SSequence* seq, Int4 window, Int4 maxbogus)
  426. {
  427.    SSequence* win;
  428.    double* H;
  429.    Int4 i, first, last, downset, upset;
  430.    downset = (window+1)/2 - 1;
  431.    upset = window - downset;
  432.    if (window>seq->length)
  433.      {
  434.       return((double*) NULL);
  435.      }
  436.    H = (double*) calloc(seq->length, sizeof(double));
  437.    for (i=0; i<seq->length; i++)
  438.      {
  439.       H[i] = -1.;
  440.      }
  441.    win = openwin(seq, 0, window);
  442.    enton(win);
  443.    first = downset;
  444.    last = seq->length - upset;
  445.    for (i=first; i<=last; i++)
  446.      {
  447.       if (seq->punctuation && hasdash(win))
  448.         {
  449.          H[i] = -1.;
  450.          shiftwin1(win);
  451.          continue;
  452.         }
  453.       if (win->bogus > maxbogus)
  454.         {
  455.          H[i] = -1.;
  456.          shiftwin1(win);
  457.          continue;
  458.         }
  459.       H[i] = win->entropy;
  460.       shiftwin1(win);
  461.      }
  462.    closewin(win);
  463.    return(H);
  464. }
  465. /*------------------------------------------------------------(appendseg)---*/
  466. static void
  467. appendseg(SSeg* segs, SSeg* seg)
  468.   {SSeg* temp;
  469.    temp = segs;
  470.    while (TRUE)
  471.      {
  472.       if (temp->next==NULL)
  473.         {
  474.          temp->next = seg;
  475.          break;
  476.         }
  477.       else
  478.         {
  479.          temp = temp->next;
  480.         }
  481.      }
  482.    return;
  483.   }
  484. /*---------------------------------------------------------------(findlo)---*/
  485. static Int4 findlo(Int4 i, Int4 limit, double hicut, double* H)
  486.   {
  487.    Int4 j;
  488.    for (j=i; j>=limit; j--)
  489.      {
  490.       if (H[j]==-1) break;
  491.       if (H[j]>hicut) break;
  492.      }
  493.    return(j+1);
  494.   }
  495. /*---------------------------------------------------------------(findhi)---*/
  496. static Int4 findhi(Int4 i, Int4 limit, double hicut, double* H)
  497.   {
  498.    Int4 j;
  499.    for (j=i; j<=limit; j++)
  500.      {
  501.       if (H[j]==-1) break;
  502.       if (H[j]>hicut) break;
  503.      }
  504.    return(j-1);
  505.   }
  506. /*---------------------------------------------------------------(lnperm)---*/
  507. static double lnperm(Int4* sv, Int4 tot)
  508.   {
  509.    double ans;
  510.    Int4 i;
  511.    ans = lnfact[tot];
  512.    for (i=0; sv[i]!=0; i++) 
  513.      {
  514.       ans -= lnfact[sv[i]];
  515.      }
  516.    return(ans);
  517.   }
  518. /*----------------------------------------------------------------(lnass)---*/
  519. static double lnass(Int4* sv, Int4 alphasize)
  520. {
  521. double ans;
  522. int svi, svim1;
  523. int class, total;
  524. int    i;
  525. ans = lnfact[alphasize];
  526. if (sv[0] == 0)
  527. return ans;
  528. total = alphasize;
  529. class = 1;
  530. svi = *sv;
  531. svim1 = sv[0];
  532. for (i=0;; svim1 = svi) {
  533.         if (++i==alphasize) {
  534.         ans -= lnfact[class];
  535. break;
  536.       }
  537. else if ((svi = *++sv) == svim1) {
  538. class++;
  539. continue;
  540. }
  541. else {
  542. total -= class;
  543. ans -= lnfact[class];
  544. if (svi == 0) {
  545. ans -= lnfact[total];
  546. break;
  547. }
  548. else {
  549. class = 1;
  550. continue;
  551. }
  552. }
  553. }
  554. return ans;
  555. }
  556. /*--------------------------------------------------------------(getprob)---*/
  557. static double getprob(Int4* sv, Int4 total, Alpha* palpha)
  558.   {
  559.    double ans, ans1, ans2 = 0, totseq;
  560.    /* #define LN20 2.9957322735539909 */
  561.    /* #define LN4 1.3862943611198906 */
  562.    totseq = ((double) total) * palpha->lnalphasize;
  563. /*
  564.    ans = lnass(sv, palpha->alphasize) + lnperm(sv, total) - totseq;
  565. */
  566.    ans1 = lnass(sv, palpha->alphasize);
  567.    if (ans1 > -100000.0 && sv[0] != INT4_MIN)
  568.    {
  569. ans2 = lnperm(sv, total);
  570.    }
  571.    else
  572.    {
  573. #ifdef ERR_POST_EX_DEFINED
  574.         ErrPostEx (SEV_ERROR, 0, 0, "Illegal value returned by lnass");
  575. #endif
  576.    }
  577.    ans = ans1 + ans2 - totseq;
  578. /*
  579. fprintf(stderr, "%lf %lf %lfn", ans, ans1, ans2);
  580. */
  581.    return ans;
  582.   }
  583. /*-----------------------------------------------------------------(trim)---*/
  584. static void trim(SSequence* seq, Int4* leftend, Int4* rightend,
  585.                  SegParameters* sparamsp)
  586.   {
  587.    SSequence* win;
  588.    double prob, minprob;
  589.    Int4 shift, len, i;
  590.    Int4 lend, rend;
  591.    Int4 minlen;
  592.    Int4 maxtrim;
  593. /* fprintf(stderr, "%d %dn", *leftend, *rightend);  */
  594.    lend = 0;
  595.    rend = seq->length - 1;
  596.    minlen = 1;
  597.    maxtrim = sparamsp->maxtrim;
  598.    if ((seq->length-maxtrim)>minlen) minlen = seq->length-maxtrim;
  599.    minprob = 1.;
  600. /*   fprintf(stderr, "n");                                           -*/
  601.    for (len=seq->length; len>minlen; len--)
  602.      {
  603. /*      fprintf(stderr, "%5d ", len);                                 -*/
  604.       win = openwin(seq, 0, len);
  605.       i = 0;
  606.       shift = TRUE;
  607.       while (shift)
  608.         {
  609.          prob = getprob(win->state, len, sparamsp->palpha);
  610. /*         realprob = exp(prob);                 (for tracing the trim)-*/
  611. /*         fprintf(stderr, "%2e ", realprob);                          -*/
  612.          if (prob<minprob)
  613.            {
  614.             minprob = prob;
  615.             lend = i;
  616.             rend = len + i - 1;
  617.            }
  618.          shift = shiftwin1(win);
  619.          i++;
  620.         }
  621.       closewin(win);
  622. /*      fprintf(stderr, "n");                                       -*/
  623.      }
  624. /*   fprintf(stderr, "%d-%d ", *leftend, *rightend);                 -*/
  625.    *leftend = *leftend + lend;
  626.    *rightend = *rightend - (seq->length - rend - 1);
  627. /*   fprintf(stderr, "%d-%dn", *leftend, *rightend);                -*/
  628.    closewin(seq);
  629.    return;
  630.   }
  631. /*---------------------------------------------------------------(SegSeq)---*/
  632. static void SegSeq(SSequence* seq, SegParameters* sparamsp, SSeg* *segs,
  633.                    Int4 offset)
  634. {
  635.    SSeg* seg,* leftsegs;
  636.    SSequence* leftseq;
  637.    Int4 window;
  638.    double locut, hicut;
  639.    Int4 maxbogus;
  640.    Int4 downset, upset;
  641.    Int4 first, last, lowlim;
  642.    Int4 loi, hii, i;
  643.    Int4 leftend, rightend, lend, rend;
  644.    double* H;
  645.    if (sparamsp->window<=0) return;
  646.    if (sparamsp->locut<=0.) sparamsp->locut = 0.;
  647.    if (sparamsp->hicut<=0.) sparamsp->hicut = 0.;
  648.    window = sparamsp->window;
  649.    locut = sparamsp->locut;
  650.    hicut = sparamsp->hicut;
  651.    downset = (window+1)/2 - 1;
  652.    upset = window - downset;
  653.    maxbogus = sparamsp->maxbogus;
  654.       
  655.    H = seqent(seq, window, maxbogus);
  656.    if (H==NULL) return;
  657.    first = downset;
  658.    last = seq->length - upset;
  659.    lowlim = first;
  660.    for (i=first; i<=last; i++)
  661.      {
  662.       if (H[i] <= locut && H[i] != -1.0)
  663.         {
  664.          loi = findlo(i, lowlim, hicut, H);
  665.          hii = findhi(i, last, hicut, H);
  666.          leftend = loi - downset;
  667.          rightend = hii + upset - 1;
  668.          trim(openwin(seq, leftend, rightend-leftend+1), &leftend, &rightend,
  669.               sparamsp);
  670.          if (i+upset-1<leftend)   /* check for trigger window in left trim */
  671.            {
  672.             lend = loi - downset;
  673.             rend = leftend - 1;
  674.             leftseq = openwin(seq, lend, rend-lend+1);
  675.             leftsegs = (SSeg*) NULL;
  676.             SegSeq(leftseq, sparamsp, &leftsegs, offset+lend);
  677.             if (leftsegs!=NULL)
  678.               {
  679.                if (*segs==NULL) *segs = leftsegs;
  680.                else appendseg(*segs, leftsegs);
  681.               }
  682.             closewin(leftseq);
  683. /*          trim(openwin(seq, lend, rend-lend+1), &lend, &rend);
  684.             seg = (SSeg*) calloc(1, sizeof(SSeg));
  685.             seg->begin = lend;
  686.             seg->end = rend;
  687.             seg->next = (SSeg*) NULL;
  688.             if (segs==NULL) segs = seg;
  689.             else appendseg(segs, seg);  */
  690.            }
  691.          seg = (SSeg*) calloc(1, sizeof(SSeg));
  692.          seg->begin = leftend + offset;
  693.          seg->end = rightend + offset;
  694.          seg->next = (SSeg*) NULL;
  695.          if (*segs==NULL) *segs = seg;
  696.          else appendseg(*segs, seg);
  697.          i = MIN(hii, rightend+downset);
  698.          lowlim = i + 1;
  699. /*       i = hii;     this ignores the trimmed residues... */
  700.         }
  701.      }
  702.    sfree(H);
  703.    return;
  704. }
  705. /*------------------------------------------------------------(mergesegs)---*/
  706. /* merge together overlapping segments, 
  707. hilenmin also does something, but we need to ask Scott Federhen what?
  708. */
  709. static void mergesegs(SSequence* seq, SSeg* segs, Boolean overlaps)
  710. {
  711.    SSeg* seg,* nextseg;
  712.    Int4 hilenmin; /* hilenmin yet unset */
  713.    Int4 len;
  714.    hilenmin = 0;               /* hilenmin - temporary default */
  715.    if (overlaps == FALSE) 
  716. return;
  717.    if (segs==NULL) return;
  718.    if (segs->begin<hilenmin) segs->begin = 0;
  719.    seg = segs;
  720.    nextseg = seg->next;
  721.    while (nextseg!=NULL)
  722.      {
  723.       if (seg->end>=nextseg->begin && seg->end>=nextseg->end)
  724.         {
  725.          seg->next = nextseg->next;
  726.          sfree(nextseg);
  727.          nextseg = seg->next;
  728.          continue;
  729.         }
  730.       if (seg->end>=nextseg->begin)               /* overlapping segments */
  731.         {
  732.          seg->end = nextseg->end;
  733.          seg->next = nextseg->next;
  734.          sfree(nextseg);
  735.          nextseg = seg->next;
  736.          continue;
  737.         }
  738.       len = nextseg->begin - seg->end - 1;
  739.       if (len<hilenmin)                            /* short hient segment */
  740.         {
  741.          seg->end = nextseg->end;
  742.          seg->next = nextseg->next;
  743.          sfree(nextseg);
  744.          nextseg = seg->next;
  745.          continue;
  746.         }
  747.       seg = nextseg;
  748.       nextseg = seg->next;
  749.      }
  750.    len = seq->length - seg->end - 1;
  751.    if (len<hilenmin) seg->end = seq->length - 1;
  752.    return;
  753. }
  754. static Int2 SegsToBlastSeqLoc(SSeg* segs, Int4 offset, BlastSeqLoc** seg_locs)
  755. {
  756.    SSeqRange* dip;
  757.    BlastSeqLoc* last_slp = NULL,* head_slp = NULL;
  758.    for ( ; segs; segs = segs->next) {
  759.       dip = (SSeqRange*) calloc(1, sizeof(SSeqRange));
  760.       dip->left = segs->begin + offset;
  761.       dip->right = segs->end + offset;
  762.       if (!last_slp) {
  763.          last_slp = ListNodeAddPointer(&head_slp, 0, dip);
  764.       } else {
  765.          last_slp = ListNodeAddPointer(&last_slp, 0, dip);
  766.       }
  767.    }
  768.    *seg_locs = head_slp;
  769.    return 0;
  770. }
  771. /*------------------------------------------------------------(AA20alpha)---*/
  772. static Alpha* AA20alpha_std (void)
  773. {
  774.    Alpha* palpha;
  775.    Int4* alphaindex;
  776.    unsigned char* alphaflag;
  777.    char* alphachar;
  778.    Uint1 c, i;
  779.    palpha = (Alpha*) calloc(1, sizeof(Alpha));
  780.    palpha->alphabet = AA20;
  781.    palpha->alphasize = 20;
  782.    palpha->lnalphasize = LN20;
  783.    alphaindex = (Int4*) calloc(CHAR_SET , sizeof(Int4));
  784.    alphaflag = (unsigned char*) calloc(CHAR_SET , sizeof(char));
  785.    alphachar = (char*) calloc(palpha->alphasize , sizeof(char));
  786.    for (c=0, i=0; c<128; c++)
  787.      {
  788.         if (c == 1 || (c >= 3 && c <= 20) || c == 22) {
  789.            alphaflag[c] = FALSE; 
  790.            alphaindex[c] = i; 
  791.            alphachar[i] = c;
  792.            ++i;
  793.         } else {
  794.            alphaflag[c] = TRUE; alphaindex[c] = 20;
  795.         }
  796.      }
  797.    palpha->alphaindex = alphaindex;
  798.    palpha->alphaflag = alphaflag;
  799.    palpha->alphachar = alphachar;
  800.    return (palpha);
  801. }
  802. /*-------------------------------------------------------(SegParametersNewAa)---*/
  803. SegParameters* SegParametersNewAa (void)
  804. {
  805.    SegParameters* sparamsp;
  806.    sparamsp = (SegParameters*) calloc(1, sizeof(SegParameters));
  807.    sparamsp->window = 12;
  808.    sparamsp->locut = 2.2;
  809.    sparamsp->hicut = 2.5;
  810.    sparamsp->period = 1;
  811.    sparamsp->hilenmin = 0;
  812.    sparamsp->overlaps = FALSE;
  813.    sparamsp->maxtrim = 50;
  814.    sparamsp->maxbogus = 2;
  815.    sparamsp->palpha = AA20alpha_std();
  816.    return (sparamsp);
  817. }
  818. /*-------------------------------------------------------(SegParametersCheck)---*/
  819. static void SegParametersCheck (SegParameters* sparamsp)
  820. {
  821.    if (!sparamsp) return;
  822.    if (sparamsp->window <= 0) sparamsp->window = 12;
  823.    if (sparamsp->locut < 0.0) sparamsp->locut = 0.0;
  824. /* if (sparamsp->locut > sparamsp->palpha->lnalphasize)
  825.        sparamsp->locut = sparamsp->palpha->lnalphasize; */
  826.    if (sparamsp->hicut < 0.0) sparamsp->hicut = 0.0;
  827. /* if (sparamsp->hicut > sparamsp->palpha->lnalphasize)
  828.        sparamsp->hicut = sparamsp->palpha->lnalphasize; */
  829.    if (sparamsp->locut > sparamsp->hicut)
  830.        sparamsp->hicut = sparamsp->locut;
  831.    if (sparamsp->maxbogus < 0)
  832.        sparamsp->maxbogus = 0;
  833.    if (sparamsp->maxbogus > sparamsp->window)
  834.        sparamsp->maxbogus = sparamsp->window;
  835.    if (sparamsp->period <= 0) sparamsp->period = 1;
  836.    if (sparamsp->maxtrim < 0) sparamsp->maxtrim = 0;
  837.    return;
  838. }
  839. /*--------------------------------------------------------(SegParametersFree)---*/
  840. void SegParametersFree(SegParameters* sparamsp)
  841. {
  842.    if (!sparamsp) return;
  843.    AlphaFree(sparamsp->palpha);
  844.    sfree(sparamsp);
  845.    return;
  846. }
  847. /*------------------------------------------------------------(AlphaCopy)---*/
  848. static Alpha* AlphaCopy (Alpha* palpha)
  849. {
  850.    Alpha* pbeta;
  851.    Int2 i;
  852.    if (!palpha) return((Alpha*) NULL);
  853.    pbeta = (Alpha*) calloc(1, sizeof(Alpha));
  854.    pbeta->alphabet = palpha->alphabet;
  855.    pbeta->alphasize = palpha->alphasize;
  856.    pbeta->lnalphasize = palpha->lnalphasize;
  857.    pbeta->alphaindex = (Int4*) calloc(CHAR_SET , sizeof(Int4));
  858.    pbeta->alphaflag = (unsigned char*) calloc(CHAR_SET , sizeof(char));
  859.    pbeta->alphachar = (char*) calloc(palpha->alphasize , sizeof(char));
  860.    for (i=0; i<CHAR_SET; i++)
  861.      {
  862.       pbeta->alphaindex[i] = palpha->alphaindex[i];
  863.       pbeta->alphaflag[i] = palpha->alphaflag[i];
  864.      }
  865.    for (i=0; i<palpha->alphasize; i++)
  866.      {
  867.       pbeta->alphachar[i] = palpha->alphachar[i];
  868.      }
  869.    return(pbeta);
  870. }
  871. Int2 SeqBufferSeg (Uint1* sequence, Int4 length, Int4 offset,
  872.                      SegParameters* sparamsp, BlastSeqLoc** seg_locs)
  873. {
  874.    SSequence* seqwin;
  875.    SSeg* segs;
  876.    Boolean params_allocated = FALSE;
  877.    
  878.    SegParametersCheck (sparamsp);
  879.    
  880.    /* check seg parameters */
  881.    
  882.    if (!sparamsp) {
  883.       params_allocated = TRUE;
  884.       sparamsp = SegParametersNewAa();
  885.       SegParametersCheck (sparamsp);
  886.       if (!sparamsp) {
  887. #ifdef ERR_POST_EX_DEFINED
  888.          ErrPostEx (SEV_WARNING, 0, 0, "null parameters object");
  889.          ErrShow();
  890. #endif
  891.          return -1;
  892.       }
  893.    }
  894.    
  895.    /* make an old-style genwin sequence window object */
  896.     
  897.    seqwin = SeqNew();
  898.    seqwin->seq = (char*) sequence;
  899.    seqwin->length = length;
  900.    seqwin->palpha = AlphaCopy(sparamsp->palpha);
  901.    
  902.    /* seg the sequence */
  903.    
  904.    segs = (SSeg*) NULL;
  905.    SegSeq (seqwin, sparamsp, &segs, 0);
  906.    /* merge the segment if desired. */
  907.    if (sparamsp->overlaps)
  908.       mergesegs(seqwin, segs, sparamsp->overlaps);
  909.    /* convert segs to seqlocs */
  910.    SegsToBlastSeqLoc(segs, offset, seg_locs);   
  911.    
  912.    /* clean up & return */
  913.    seqwin->seq = NULL;
  914.    SeqFree (seqwin);
  915.    SegFree (segs);
  916.    if(params_allocated)
  917.        SegParametersFree(sparamsp);
  918.    
  919.    return 0;
  920. }