Comparison of Hi-C experiments


In [2]:
from pytadbit.mapping.analyze import eig_correlate_matrices, correlate_matrices
from pytadbit import load_hic_data_from_reads
from cPickle import load
from matplotlib import pyplot as plt

In [3]:
reso = 200000
base_path = 'results/fragment/{0}/03_filtering/valid_reads12_{0}.tsv'
bias_path = 'results/fragment/{1}/04_normalizing/biases_{0}_{1}.pick'
bads_path = 'results/fragment/{1}/04_normalizing/bad_columns_{0}_{1}.pick'

Write a little function to load HiCData obeject


In [10]:
def my_load_hic_data(renz, rep, reso):
    hic_data = load_hic_data_from_reads(base_path.format(renz), resolution=reso)
    hic_data.bias = load(open(bias_path.format(reso, renz)))
    hic_data.bads = load(open(bads_path.format(reso, renz)))
    return hic_data

Between conditions

HindIII


In [11]:
renz1 = 'HindIII'
renz2 = 'MboI'

In [12]:
hic_data1 = my_load_hic_data(renz1, reso)
hic_data2 = my_load_hic_data(renz2, reso)

In [13]:
## this part is to "tune" the plot ##
plt.figure(figsize=(9, 6))
axe = plt.subplot()
axe.grid()
axe.set_xticks(range(0, 55, 5))
axe.set_xticklabels(['%d Mb' % int(i * 0.2) if i else '' for i in range(0, 55, 5)], rotation=-45)
#####################################

_ = correlate_matrices(hic_data1, hic_data2, max_dist=50, show=False, axe=axe, normalized=True)



In [16]:
hic_data1 = my_load_hic_data(renz1, rep1, 1000000)
hic_data2 = my_load_hic_data(renz2, rep2, 1000000)

In [17]:
corrs = eig_correlate_matrices(hic_data1, hic_data2, show=True, aspect='auto', normalized=True)

for cor in corrs:
    print ' '.join(['%5.3f' % (c) for c in cor]) + '\n'


0.998 0.118 0.068 0.010 0.024 0.004

0.159 0.991 0.003 0.006 0.006 0.001

0.081 0.008 0.981 0.103 0.001 0.006

0.025 0.004 0.102 0.979 0.014 0.012

0.022 0.002 0.003 0.011 0.979 0.009

0.001 0.000 0.006 0.017 0.011 0.972

NcoI


In [18]:
renz1 = 'NcoI'
renz2 = 'NcoI'
rep1  = 'T0'
rep2  = 'T60'

In [19]:
hic_data1 = my_load_hic_data(renz1, rep1, reso)
hic_data2 = my_load_hic_data(renz2, rep2, reso)

In [20]:
## this part is to "tune" the plot ##
plt.figure(figsize=(9, 6))
axe = plt.subplot()
axe.grid()
axe.set_xticks(range(0, 55, 5))
axe.set_xticklabels(['%d Mb' % int(i * 0.2) if i else '' for i in range(0, 55, 5)], rotation=-45)
#####################################

_ = correlate_matrices(hic_data1, hic_data2, max_dist=50, show=False, axe=axe)



In [21]:
hic_data1 = my_load_hic_data(renz1, rep1, 1000000)
hic_data2 = my_load_hic_data(renz2, rep2, 1000000)

In [22]:
corrs = eig_correlate_matrices(hic_data1, hic_data2, show=True, aspect='auto', normalized=True)

for cor in corrs:
    print ' '.join(['%5.3f' % (c) for c in cor]) + '\n'


0.991 0.005 0.007 0.005 0.010 0.005

0.006 0.973 0.136 0.037 0.059 0.020

0.005 0.139 0.959 0.153 0.032 0.068

0.001 0.013 0.159 0.968 0.038 0.004

0.009 0.064 0.022 0.040 0.974 0.086

0.012 0.008 0.042 0.029 0.081 0.674

Between replicates with different restriction enzymes

T0


In [23]:
renz1 = 'HindIII'
renz2 = 'NcoI'
rep1  = 'T0'
rep2  = 'T0'

In [24]:
hic_data1 = my_load_hic_data(renz1, rep1, reso)
hic_data2 = my_load_hic_data(renz2, rep2, reso)

In [25]:
## this part is to "tune" the plot ##
plt.figure(figsize=(9, 6))
axe = plt.subplot()
axe.grid()
axe.set_xticks(range(0, 55, 5))
axe.set_xticklabels(['%d Mb' % int(i * 0.2) if i else '' for i in range(0, 55, 5)], rotation=-45)
#####################################

_ = correlate_matrices(hic_data1, hic_data2, max_dist=50, show=False, axe=axe)



In [26]:
hic_data1 = my_load_hic_data(renz1, rep1, 1000000)
hic_data2 = my_load_hic_data(renz2, rep2, 1000000)

In [27]:
corrs = eig_correlate_matrices(hic_data1, hic_data2, show=True, aspect='auto', normalized=True)

for cor in corrs:
    print ' '.join(['%5.3f' % (c) for c in cor]) + '\n'


0.572 0.104 0.019 0.084 0.127 0.048

0.479 0.006 0.045 0.382 0.018 0.133

0.043 0.061 0.039 0.090 0.147 0.076

0.022 0.120 0.754 0.298 0.079 0.027

0.106 0.005 0.137 0.059 0.057 0.082

0.011 0.240 0.182 0.271 0.120 0.104

T60


In [28]:
renz1 = 'HindIII'
renz2 = 'NcoI'
rep1  = 'T60'
rep2  = 'T60'

In [29]:
hic_data1 = my_load_hic_data(renz1, rep1, reso)
hic_data2 = my_load_hic_data(renz2, rep2, reso)

In [30]:
## this part is to "tune" the plot ##
plt.figure(figsize=(9, 6))
axe = plt.subplot()
axe.grid()
axe.set_xticks(range(0, 55, 5))
axe.set_xticklabels(['%d Mb' % int(i * 0.2) if i else '' for i in range(0, 55, 5)], rotation=-45)
#####################################

_ = correlate_matrices(hic_data1, hic_data2, max_dist=50, show=False, axe=axe)



In [31]:
hic_data1 = my_load_hic_data(renz1, rep1, 1000000)
hic_data2 = my_load_hic_data(renz2, rep2, 1000000)

In [33]:
corrs = eig_correlate_matrices(hic_data1, hic_data2, show=True, aspect='auto', normalized=True)

for cor in corrs:
    print ' '.join(['%5.3f' % (c) for c in cor]) + '\n'


0.188 0.133 0.126 0.002 0.294 0.480

0.829 0.345 0.145 0.082 0.042 0.003

0.011 0.491 0.322 0.333 0.081 0.141

0.119 0.211 0.602 0.501 0.281 0.065

0.286 0.660 0.443 0.144 0.015 0.188

0.126 0.131 0.028 0.552 0.312 0.036

Merge Hi-C experiments

Once agreed that experiments are similar, they can be merged.

Here is a simple way to merge valid pairs. Arguably we may want to merge unfiltered data but the difference would be minimal specially with non-replicates.


In [34]:
from pytadbit.mapping import merge_2d_beds

In [36]:
! mkdir -p results/fragment/both_T0/
! mkdir -p results/fragment/both_T60/
! mkdir -p results/fragment/both_T0/03_filtering/
! mkdir -p results/fragment/both_T60/03_filtering/

In [37]:
renz1 = 'HindIII'
renz2 = 'NcoI'
rep   = 'T60'

hic_data1 = 'results/fragment/{0}_{1}/03_filtering/valid_reads12_{0}_{1}.tsv'.format(renz1, rep)
hic_data2 = 'results/fragment/{0}_{1}/03_filtering/valid_reads12_{0}_{1}.tsv'.format(renz2, rep)
hic_data  = 'results/fragment/both_{0}/03_filtering/valid_reads12_{0}.tsv'.format(rep)

merge_2d_beds(hic_data1, hic_data2, hic_data)


Out[37]:
13646392

In [38]:
renz1 = 'HindIII'
renz2 = 'NcoI'
rep   = 'T0'

hic_data1 = 'results/fragment/{0}_{1}/03_filtering/valid_reads12_{0}_{1}.tsv'.format(renz1, rep)
hic_data2 = 'results/fragment/{0}_{1}/03_filtering/valid_reads12_{0}_{1}.tsv'.format(renz2, rep)
hic_data  = 'results/fragment/both_{0}/03_filtering/valid_reads12_{0}.tsv'.format(rep)

merge_2d_beds(hic_data1, hic_data2, hic_data)


Out[38]:
14830146

Normalizing merged data


In [44]:
from pytadbit.mapping.analyze import hic_map
from cPickle import dump

In [39]:
! mkdir -p results/fragment/both_T0/04_normalizing
! mkdir -p results/fragment/both_T60/04_normalizing

All in one loop to:

  • filter
  • normalize
  • generate intra-chromosome and genomic matrices

all at diferent resolutions, and for both time points


In [ ]:
for rep in ['T0', 'T60']:
    print ' -', rep
    for reso in [1000000, 300000, 100000]:
        print '   *', reso
        # load hic_data
        hic_data = load_hic_data_from_reads(
            'results/fragment/both_{0}/03_filtering/valid_reads12_{0}.tsv'.format(rep),
            reso)
        # filter columns
        hic_data.filter_columns(draw_hist=False, min_count=10, by_mean=True)
        # normalize
        hic_data.normalize_hic(iterations=0)
        # save biases to reconstruct normalization
        out = open('results/fragment/both_{1}/04_normalizing/biases_{0}_{1}.pick'.format(reso, rep), 'w')
        dump(hic_data.bias, out)
        out.close()
        # save filtered out columns
        out = open('results/fragment/both_{1}/04_normalizing/bad_columns_{0}_{1}.pick'.format(reso, rep), 'w')
        dump(hic_data.bads, out)
        out.close()
        # save data as raw matrix per chromsome
        hic_map(hic_data, by_chrom='intra', normalized=False,
                savedata='results/fragment/both_{1}/04_normalizing/{0}_raw'.format(reso, rep))
        # save data as normalized matrix per chromosome
        hic_map(hic_data, by_chrom='intra', normalized=True,
                savedata='results/fragment/both_{1}/04_normalizing/{0}_norm'.format(reso, rep))
        # if the resolution is low save the full genomic matrix
        if reso > 500000:
            hic_map(hic_data, by_chrom=False, normalized=False, 
                    savefig ='results/fragment/both_{1}/04_normalizing/{0}_raw.png'.format(reso, rep),
                    savedata='results/fragment/both_{1}/04_normalizing/{0}_raw.mat'.format(reso, rep))

            hic_map(hic_data, by_chrom=False, normalized=True,
                    savefig ='results/fragment/both_{1}/04_normalizing/{0}_norm.png'.format(reso, rep) ,
                    savedata='results/fragment/both_{1}/04_normalizing/{0}_norm.mat'.format(reso, rep))


WARNING: removing columns having less than 20 counts:
   124   127   128   129   130   131   132   133   134   135   136   137   138   139   140   141   142   143   742   931
   932  1095  1295  1586  1587  1588  1589  1590  1591  1592  1593  1594  1595  1596  1597  1598  1599  1600  1601  1721
  1866  1867  1868  2085  2086  2087  2088  2089  2090  2091  2092  2093  2094  2095  2096  2097  2098  2099  2100  2101
  2102  2200  2201  2202  2203  2204  2205  2206  2207  2208  2209  2210  2211  2212  2213  2214  2215  2217  2293  2307
  2308  2309  2310  2311  2312  2313  2314  2315  2316  2317  2318  2319  2320  2321  2322  2323  2324  2447  2448  2449
  2450  2451  2452  2453  2454  2455  2601  2602  2603  2604  2691  2692  2752  2790  2791  2792  2793  2794  2801  2837
  2838  2839  2840  2841  2842  2843  2844  2845  2846  2850  2851  2888  2889  2947  2948  2949  3044  3045  3046  3047
  3067  3068  3069  3072  3073  3074  3075  3076  3077  3078  3079  3080  3081  3082  3083  3084  3085  3086  3087  3088
  3089  3090  3091  3092  3093  3094  3095  3096  3097  3098  3099  3100  3101  3102

WARNING: removing columns having less than 822.413 counts:
   121   123   124   126   127   128   129   130   131   132   133   134   135   136   137   138   139   140   141   142
   143   145   339   340   343   492   585   691   742   882   930   931   932   953  1094  1095  1096  1097  1124  1294
  1295  1296  1378  1397  1440  1441  1585  1586  1587  1588  1589  1590  1591  1592  1593  1594  1595  1596  1597  1598
  1599  1600  1601  1602  1603  1608  1609  1721  1866  1867  1868  2085  2086  2087  2088  2089  2090  2091  2092  2093
  2094  2095  2096  2097  2098  2099  2100  2101  2102  2200  2201  2202  2203  2204  2205  2206  2207  2208  2209  2210
  2211  2212  2213  2214  2215  2216  2217  2218  2293  2306  2307  2308  2309  2310  2311  2312  2313  2314  2315  2316
  2317  2318  2319  2320  2321  2322  2323  2324  2326  2329  2336  2337  2338  2339  2340  2425  2426  2443  2447  2448
  2449  2450  2451  2452  2453  2454  2455  2525  2537  2538  2601  2602  2603  2604  2605  2691  2692  2720  2752  2789
  2790  2791  2792  2793  2794  2796  2801  2802  2837  2838  2839  2840  2841  2842  2843  2844  2845  2846  2847  2850
  2851  2888  2889  2947  2948  2949  3044  3045  3046  3047  3048  3049  3050  3051  3052  3053  3054  3055  3056  3057
  3058  3059  3060  3061  3062  3063  3064  3065  3066  3067  3068  3069  3070  3071  3072  3073  3074  3075  3076  3077
  3078  3079  3080  3081  3082  3083  3084  3085  3086  3087  3088  3089  3090  3091  3092  3093  3094  3095  3096  3097
  3098  3099  3100  3101  3102
 - T0
   * 1000000
Found 245 of 3102 columns with poor signal
iterative correction
  - copying matrix
  - computing baises
rescaling to factor 1
   *
WARNING: removing columns having less than 20 counts:
    44   403   410   411   412   413   414   415   419   420   421   422   423   424   425   426   427   428   429   430
   431   432   433   434   435   436   437   438   439   440   441   442   443   444   445   446   447   448   449   450
   451   452   453   454   455   456   457   458   459   460   461   462   463   464   465   466   467   468   469   470
   471   472   473   474   475   476   477   702   811   812   819  1128  1133  1134  1518  1608  1637  2466  2467  2468
  2469  2470  2471  2934  3093  3094  3095  3096  3097  3098  3099  3100  3101  3540  3637  3638  3639  3641  3642  3643
  3644  3646  3647  3648  3650  3651  3736  3737  3739  3740  3967  3968  4110  4305  4306  4307  4308  4309  4310  4311
  4312  4313  4646  4648  4668  5272  5273  5274  5275  5276  5277  5278  5279  5280  5281  5282  5283  5284  5285  5286
  5287  5288  5289  5290  5291  5292  5293  5294  5295  5296  5297  5298  5299  5300  5301  5302  5303  5304  5305  5306
  5307  5308  5309  5310  5311  5312  5313  5314  5315  5316  5317  5318  5319  5320  5321  5322  5323  5324  5325  5326
  5327  5588  5721  5722  5723  5724  5725  5726  5727  6205  6206  6207  6208  6209  6210  6211  6212  6213  6214  6215
  6522  6931  6932  6933  6934  6935  6936  6937  6938  6939  6940  6941  6942  6943  6944  6945  6946  6947  6948  6949
  6950  6951  6952  6953  6954  6955  6956  6957  6958  6959  6960  6961  6962  6963  6964  6965  6966  6967  6968  6969
  6970  6971  6972  6973  6974  6975  6976  6977  6978  6979  6980  6981  6982  6983  6984  6985  6986  6987  6988  6989
  6990  6991  7313  7314  7315  7316  7317  7318  7319  7320  7321  7322  7323  7324  7325  7326  7327  7328  7329  7330
  7331  7332  7333  7334  7335  7336  7337  7338  7339  7340  7341  7342  7343  7344  7345  7346  7347  7348  7349  7350
  7351  7352  7353  7354  7355  7356  7357  7358  7359  7360  7361  7362  7363  7364  7365  7367  7368  7369  7370  7371
  7372  7623  7624  7625  7626  7665  7666  7667  7670  7671  7672  7673  7674  7675  7676  7677  7678  7679  7680  7681
  7682  7683  7684  7685  7686  7687  7688  7689  7690  7691  7692  7693  7694  7695  7696  7697  7698  7699  7700  7701
  7702  7703  7704  7705  7706  7707  7708  7709  7710  7711  7712  7713  7714  7715  7716  7717  7718  7719  7720  7721
  7722  7723  7724  7725  7729  7731  7732  7733  7734  7763  7764  7765  7766  8061  8064  8121  8132  8133  8134  8135
  8136  8137  8138  8139  8140  8141  8142  8143  8144  8145  8146  8147  8148  8149  8150  8151  8152  8153  8154  8155
  8156  8157  8158  8159  8160  8161  8162  8163  8311  8312  8433  8440  8465  8466  8467  8643  8644  8645  8646  8647
  8648  8649  8650  8651  8652  8653  8654  8655  8656  8657  8752  8940  8941  8942  8943  8944  8945  8946  8947  8987
  9039  9040  9142  9143  9144  9145  9146  9147  9148  9269  9270  9271  9272  9273  9274  9275  9276  9277  9278  9279
  9280  9281  9282  9283  9284  9287  9288  9289  9291  9292  9294  9296  9306  9307  9308  9309  9310  9311  9425  9426
  9427  9428  9429  9430  9431  9432  9433  9434  9435  9436  9437  9438  9439  9440  9441  9442  9443  9444  9445  9446
  9447  9448  9449  9450  9451  9452  9453  9454  9455  9456  9457  9458  9459  9468  9469  9470  9471  9472  9473  9474
  9595  9596  9597  9598  9599  9600  9601  9602  9603  9791  9792  9793  9794  9795  9796  9797  9798  9799  9800  9801
  9802 10114 10115 10116 10117 10118 10119 10120 10121 10122 10123 10124 10125 10129 10131 10132 10133 10136 10137 10140
 10141 10142 10143 10144 10145 10146 10148 10151 10152 10157 10158 10160 10166 10167 10168 10170 10171 10175 10176 10177
 10178 10183 10184 10185 10187 10188 10189 10190 10191 10192 10193 10194 10195 10196 10197 10198 10199 10200 10201 10202
 10204 10205 10206 10207 10208 10209 10210 10211 10212 10213 10214 10215 10216 10217 10218 10219 10220 10221 10222 10223
 10224 10225 10226 10227 10228 10229 10230 10231 10232 10233 10234 10235 10236 10237 10238 10239 10240 10241 10242 10243
 10244 10245 10246 10247 10248 10249 10250 10251 10252 10253 10254 10255 10256 10257 10258 10259 10260 10261 10262 10263
 10264 10265 10266 10267 10268 10269 10270 10271 10272 10273 10274 10275 10276 10277 10278 10279 10280 10281 10282 10283
 10284 10285 10286 10287 10288 10289 10290 10291 10292 10293 10294 10295 10296 10297 10298 10299 10300 10301 10302 10303
 10304 10305 10306

WARNING: removing columns having less than 485.414 counts:
     1     2     9    44    58   401   402   403   404   407   408   409   410   411   412   413   414   415   416   418
   419   420   421   422   423   424   425   426   427   428   429   430   431   432   433   434   435   436   437   438
   439   440   441   442   443   444   445   446   447   448   449   450   451   452   453   454   455   456   457   458
   459   460   461   462   463   464   465   466   467   468   469   470   471   472   473   474   475   476   477   478
   481   482   483   484   485   488   496   498   499   702   811   812   813   819   835  1122  1123  1128  1129  1130
  1132  1133  1134  1135  1138  1139  1140  1141  1142  1143  1144  1145  1155  1197  1266  1518  1608  1637  1638  1859
  1880  1943  1944  1945  1946  1947  1948  1949  1950  2415  2464  2465  2466  2467  2468  2469  2470  2471  2528  2529
  2932  2933  2934  3090  3091  3092  3093  3094  3095  3096  3097  3098  3099  3100  3101  3166  3167  3168  3169  3170
  3171  3172  3533  3539  3540  3636  3637  3638  3639  3640  3641  3642  3643  3644  3645  3646  3647  3648  3650  3651
  3736  3737  3738  3739  3740  3741  3745  3766  3967  3968  4110  4305  4306  4307  4308  4309  4310  4311  4312  4313
  4315  4322  4585  4586  4587  4605  4642  4643  4645  4646  4647  4648  4649  4650  4651  4667  4668  4669  4683  4684
  4790  4791  4792  4793  4794  4795  5258  5259  5260  5261  5262  5269  5271  5272  5273  5274  5275  5276  5277  5278
  5279  5280  5281  5282  5283  5284  5285  5286  5287  5288  5289  5290  5291  5292  5293  5294  5295  5296  5297  5298
  5299  5300  5301  5302  5303  5304  5305  5306  5307  5308  5309  5310  5311  5312  5313  5314  5315  5316  5317  5318
  5319  5320  5321  5322  5323  5324  5325  5326  5327  5328  5329  5330  5331  5333  5334  5335  5337  5338  5342  5344
  5346  5347  5348  5349  5350  5351  5352  5353  5354  5464  5571  5588  5719  5721  5722  5723  5724  5725  5726  5727
  5729  5838  6035  6036  6037  6038  6040  6044  6205  6206  6207  6208  6209  6210  6211  6212  6213  6214  6215  6216
  6522  6523  6526  6527  6931  6932  6933  6934  6935  6936  6937  6938  6939  6940  6941  6942  6943  6944  6945  6946
  6947  6948  6949  6950  6951  6952  6953  6954  6955  6956  6957  6958  6959  6960  6961  6962  6963  6964  6965  6966
  6967  6968  6969  6970  6971  6972  6973  6974  6975  6976  6977  6978  6979  6980  6981  6982  6983  6984  6985  6986
  6987  6988  6989  6990  6991  6992  6993  7305  7312  7313  7314  7315  7316  7317  7318  7319  7320  7321  7322  7323
  7324  7325  7326  7327  7328  7329  7330  7331  7332  7333  7334  7335  7336  7337  7338  7339  7340  7341  7342  7343
  7344  7345  7346  7347  7348  7349  7350  7351  7352  7353  7354  7355  7356  7357  7358  7359  7360  7361  7362  7363
  7364  7365  7366  7367  7368  7369  7370  7371  7372  7373  7374  7375  7376  7377  7378  7618  7623  7624  7625  7626
  7665  7666  7667  7668  7669  7670  7671  7672  7673  7674  7675  7676  7677  7678  7679  7680  7681  7682  7683  7684
  7685  7686  7687  7688  7689  7690  7691  7692  7693  7694  7695  7696  7697  7698  7699  7700  7701  7702  7703  7704
  7705  7706  7707  7708  7709  7710  7711  7712  7713  7714  7715  7716  7717  7718  7719  7720  7721  7722  7723  7724
  7725  7727  7728  7729  7730  7731  7732  7733  7734  7735  7739  7740  7741  7742  7743  7747  7763  7764  7765  7766
  7767  7768  7769  7770  7771  7772  7773  7774  7775  7776  7777  7778  7779  7890  8058  8059  8060  8061  8062  8063
  8064  8065  8071  8108  8117  8119  8120  8121  8131  8132  8133  8134  8135  8136  8137  8138  8139  8140  8141  8142
  8143  8144  8145  8146  8147  8148  8149  8150  8151  8152  8153  8154  8155  8156  8157  8158  8159  8160  8161  8162
  8163  8164  8247  8311  8312  8315  8316  8390  8391  8392  8393  8394  8395  8396  8397  8398  8399  8432  8433  8434
  8435  8436  8437  8438  8439  8440  8463  8464  8465  8466  8467  8642  8643  8644  8645  8646  8647  8648  8649  8650
  8651  8652  8653  8654  8655  8656  8657  8658  8752  8858  8860  8861  8873  8927  8940  8941  8942  8943  8944  8945
  8946  8947  8948  8987  8991  8992  9038  9039  9040  9041  9053  9142  9143  9144  9145  9146  9147  9148  9268  9269
  9270  9271  9272  9273  9274  9275  9276  9277  9278  9279  9280  9281  9282  9283  9284  9285  9287  9288  9289  9290
  9291  9292  9294  9296  9297  9300  9306  9307  9308  9309  9310  9311  9314  9425  9426  9427  9428  9429  9430  9431
  9432  9433  9434  9435  9436  9437  9438  9439  9440  9441  9442  9443  9444  9445  9446  9447  9448  9449  9450  9451
  9452  9453  9454  9455  9456  9457  9458  9459  9460  9464  9465  9468  9469  9470  9471  9472  9473  9474  9475  9476
  9477  9486  9487  9495  9496  9504  9594  9595  9596  9597  9598  9599  9600  9601  9602  9603  9790  9791  9792  9793
  9794  9795  9796  9797  9798  9799  9800  9801  9802  9861  9904 10047 10109 10114 10115 10116 10117 10118 10119 10120
 10121 10122 10123 10124 10125 10126 10127 10128 10129 10130 10131 10132 10133 10134 10135 10136 10137 10138 10139 10140
 10141 10142 10143 10144 10145 10146 10147 10148 10149 10150 10151 10152 10153 10154 10155 10156 10157 10158 10159 10160
 10161 10162 10163 10164 10165 10166 10167 10168 10169 10170 10171 10172 10173 10174 10175 10176 10177 10178 10179 10180
 10181 10182 10183 10184 10185 10186 10187 10188 10189 10190 10191 10192 10193 10194 10195 10196 10197 10198 10199 10200
 10201 10202 10203 10204 10205 10206 10207 10208 10209 10210 10211 10212 10213 10214 10215 10216 10217 10218 10219 10220
 10221 10222 10223 10224 10225 10226 10227 10228 10229 10230 10231 10232 10233 10234 10235 10236 10237 10238 10239 10240
 10241 10242 10243 10244 10245 10246 10247 10248 10249 10250 10251 10252 10253 10254 10255 10256 10257 10258 10259 10260
 10261 10262 10263 10264 10265 10266 10267 10268 10269 10270 10271 10272 10273 10274 10275 10276 10277 10278 10279 10280
 10281 10282 10283 10284 10285 10286 10287 10288 10289 10290 10291 10292 10293 10294 10295 10296 10297 10298 10299 10300
 10301 10302 10303 10304 10305 10306
 300000
Found 1006 of 10306 columns with poor signal
iterative correction
  - copying matrix
  - computing baises
rescaling to factor 1
   *

In [ ]: