├── .gitignore
├── LICENSE
├── README.md
├── build
└── lib
│ └── pydoppler
│ ├── __init__.py
│ ├── fortran_code
│ ├── cclock.f
│ ├── clock.f
│ ├── dop.f
│ ├── dop.in
│ ├── emap.par
│ ├── emap_ori.par
│ ├── fort.10
│ ├── hclock.f
│ ├── iclock.f
│ ├── lobe.f
│ └── makefile
│ ├── mynormalize.py
│ ├── pydoppler.py
│ └── test_data
│ ├── output_images
│ ├── Average_Spec.png
│ ├── Doppler_Map.png
│ ├── Reconstruction.png
│ └── Trail.png
│ ├── sample_script.py
│ └── ugem99
│ ├── txhugem4004
│ ├── txhugem4005
│ ├── txhugem4006
│ ├── txhugem4007
│ ├── txhugem4008
│ ├── txhugem4009
│ ├── txhugem4010
│ ├── txhugem4011
│ ├── txhugem4012
│ ├── txhugem4013
│ ├── txhugem4014
│ ├── txhugem4015
│ ├── txhugem4016
│ ├── txhugem4017
│ ├── txhugem4018
│ ├── txhugem4019
│ ├── txhugem4020
│ ├── txhugem4021
│ ├── txhugem4022
│ ├── txhugem4023
│ ├── txhugem4024
│ ├── txhugem4025
│ ├── txhugem4026
│ ├── txhugem4027
│ ├── txhugem4028
│ ├── txhugem4029
│ ├── txhugem4030
│ ├── txhugem4031
│ └── ugem0all.fas
├── dist
├── pydoppler-0.2.0-py3-none-any.whl
└── pydoppler-0.2.0.tar.gz
├── pydoppler.egg-info
├── PKG-INFO
├── SOURCES.txt
├── dependency_links.txt
└── top_level.txt
├── pydoppler
├── __init__.py
├── fortran_code
│ ├── cclock.f
│ ├── clock.f
│ ├── dop.f
│ ├── dop.in
│ ├── emap.par
│ ├── emap_ori.par
│ ├── fort.10
│ ├── hclock.f
│ ├── iclock.f
│ ├── lobe.f
│ └── makefile
├── mynormalize.py
├── pydoppler.py
└── test_data
│ ├── output_images
│ ├── Average_Spec.png
│ ├── Doppler_Map.png
│ ├── Reconstruction.png
│ └── Trail.png
│ ├── sample_script.py
│ └── ugem99
│ ├── txhugem4004
│ ├── txhugem4005
│ ├── txhugem4006
│ ├── txhugem4007
│ ├── txhugem4008
│ ├── txhugem4009
│ ├── txhugem4010
│ ├── txhugem4011
│ ├── txhugem4012
│ ├── txhugem4013
│ ├── txhugem4014
│ ├── txhugem4015
│ ├── txhugem4016
│ ├── txhugem4017
│ ├── txhugem4018
│ ├── txhugem4019
│ ├── txhugem4020
│ ├── txhugem4021
│ ├── txhugem4022
│ ├── txhugem4023
│ ├── txhugem4024
│ ├── txhugem4025
│ ├── txhugem4026
│ ├── txhugem4027
│ ├── txhugem4028
│ ├── txhugem4029
│ ├── txhugem4030
│ ├── txhugem4031
│ └── ugem0all.fas
├── setup.cfg
└── setup.py
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | *.whl
3 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2019 The Python Packaging Authority
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in all
11 | copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19 | SOFTWARE.
20 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # PyDoppler
2 |
3 | This is the repository for a python wrapper for Henk Spruit's doppler tomography software.
4 | This code can produce a trail spectra of a dataset, and perform
5 | Doppler tomography maps. It is intended to be a light-weight code for
6 | single emission line datasets.
7 | The code will be able to:
8 | - [x] Load and normalise spectra
9 | - [x] Plot a trail spectra at initial phase resolution and binned
10 | - [x] Run Doppler tomography and plot reconstructed spectra
11 | - [ ] Perform initial spectra binning into user-defined phase bins
12 | - [ ] User-friendly functions
13 | - [ ] Auto-save figures.
14 |
15 | The original code and IDL interface can be found at:
16 | * https://wwwmpa.mpa-garching.mpg.de/~henk/
17 |
18 | At the moment, there are many features that haven't been implemented. However, the code will be updated
19 | continuously. If you have any queries/comments/bug reports please send an e-mail to:
20 | * jvhs1 (at) st-andrews.ac.uk
21 |
22 | ## Acknowledgment
23 |
24 | If you make use of this software, please acknowledge the original code and this repository with the following citations:
25 | * Spruit 1998, arXiv, astro-ph/9806141 (https://ui.adsabs.harvard.edu/abs/1998astro.ph..6141S/abstract)
26 | * Hernandez Santisteban, 2021, ASCL, 6003 (https://ui.adsabs.harvard.edu/abs/2021ascl.soft06003H/abstract)
27 |
28 | ## Requirements & Installation
29 |
30 | The doppler tomography code is written in fortran. Please ensure that you have a fortran compiler installed.
31 | At the moment, only gfortran is supported.
32 |
33 |
34 | Python >3.0 version is required (No tests have been done for backwards compatibility with python 2.X).
35 |
36 | You can download and install PyDoppler via pip. In a terminal command line, just type:
37 |
38 | ```
39 | pip install pydoppler
40 | ```
41 |
42 | If you need to upgrade the package to the latest version, you can do this with
43 | ```
44 | pip install pydoppler -upgrade
45 | ```
46 |
47 | ## Section 1: Usage
48 |
49 | You can use the sample_script.py file to run all the relevant commands
50 | _shown in sections 2 and 3_ from a terminal command line as:
51 | ```
52 | python sample_scipt.py
53 | ```
54 | or in a python console:
55 | ```python
56 | run sample_scipt.py
57 | ```
58 | This will read all the files, normalise the spectra, perform Doppler
59 | tomography and output the results. In the following sections, I will briefly
60 | explain each main routine.
61 |
62 | ## Section 2: How to load data
63 |
64 | ### Section 2.1: Test case - the accreting white dwarf - U Gem
65 |
66 | You can start to test PyDoppler with a test dataset kindly provided by J. Echevarria and published
67 | in Echevarria et al. 2007, AJ, 134, 262 (https://ui.adsabs.harvard.edu/abs/2007AJ....134..262E/abstract).
68 | To copy the data to your working directory, open a (i)python console and run the
69 | following commands:
70 | ```python
71 | import pydoppler
72 |
73 | pydoppler.test_data()
74 |
75 | ```
76 | This will create a subdirectory (called ugem99) in your current working directory
77 | which will contain text files for each spectra (txtugem40*). The format of
78 | each spectrum file is two columns: _Wavelength_ and _Flux_.
79 | * Wavelength is assumed to be in Angstrom.
80 | * Don't use headers in the files or us a _#_ at the start of the line, so it
81 | will be ignored.
82 |
83 | In addition, a phase file (ugem0all.fas) will be added inside the ugem99
84 | directory which contains the name
85 | of each spectrum file and its corresponding orbital phase.
86 | This is a two column file with the following format:
87 | ```
88 | txtugem4004 0.7150
89 | txtugem4005 0.7794
90 | .
91 | .
92 | .
93 | ```
94 |
95 | ### Section 2.2: Load your data
96 | I recommend to stick to the previous file format (as in the test dataset):
97 |
98 | * Individual spectra. Two-column files, _space separated_: Wavelength Flux
99 | * Phase file. Two-column file, _space separated_: Spectrum_name Orbital_Phase
100 |
101 | and the following directory tree in order for PyDoppler to work properly:
102 |
103 | ```
104 | wrk_dir
105 | ├── data_dir (your target)
106 | │ │
107 | │ ├── individual_spectra (N spectra)
108 | │ │
109 | │ └── phases_file
110 | │
111 | └── fortran_code_files
112 | ```
113 |
114 | ## Section 3: Doppler tomography tutorial
115 | Before running any routines, verify that you have added all the relevant
116 | parameters into the PyDoppler object.
117 |
118 | * _NOTE:_ The pydoppler.spruit() will also copy into the working directory
119 | a copy of a sample script (sample_scipt.py) with all the commands in the
120 | following tutorial. The code will add a new script (e.g. sample_scipt-1.py)
121 | if you use the "install_force=True" keyword, it will not overwrite the one
122 | found in the directory.
123 |
124 | ```python
125 | import pydoppler
126 |
127 | # Load base object for tomography
128 | dop = pydoppler.spruit()
129 |
130 | # Basic data for the tomography to work
131 | dop.object = 'U Gem'
132 | dop.base_dir = 'ugem99' # Base directory for input spectra
133 | dop.list = 'ugem0all.fas' # Name of the input file
134 | dop.lam0 = 6562.8 # Wavelength zero in units of the original spectra
135 | dop.delta_phase = 0.003 # Exposure time in terms of orbital phase
136 | dop.delw = 35 # size of Doppler map in wavelength centred at lam0
137 | dop.overs = 0.3 # between 0-1, Undersampling of the spectra. 1= Full resolution
138 | dop.gama = 36.0 # Systemic velocity in km /s
139 | dop.nbins = 28 # Number of bins. Only supported the number of spectra at the moment
140 | ```
141 |
142 | ### Section 3.1: Read the data
143 | This routine reads in the raw data and prepares the files for further
144 | processing.
145 | ```python
146 | # Read in the individual spectra and orbital phase information
147 | dop.Foldspec()
148 | ```
149 | ```
150 | 001 txhugem4004 0.715 2048
151 | 002 txhugem4005 0.7794 2048
152 | 003 txhugem4006 0.8348 2048
153 | 004 txhugem4007 0.8942 2048
154 | 005 txhugem4008 0.9518 2048
155 | 006 txhugem4009 0.0072 2048
156 | 007 txhugem4010 0.0632 2048
157 | 008 txhugem4011 0.1186 2048
158 | 009 txhugem4012 0.1745 2048
159 | 010 txhugem4013 0.2344 2048
160 | 011 txhugem4014 0.2904 2048
161 | 012 txhugem4015 0.3724 2048
162 | 013 txhugem4016 0.4283 2048
163 | 014 txhugem4017 0.4866 2048
164 | 015 txhugem4018 0.5425 2048
165 | 016 txhugem4019 0.5979 2048
166 | 017 txhugem4020 0.6544 2048
167 | 018 txhugem4021 0.7098 2048
168 | 019 txhugem4022 0.7652 2048
169 | 020 txhugem4023 0.8195 2048
170 | 021 txhugem4024 0.8772 2048
171 | 022 txhugem4025 0.9269 2048
172 | 023 txhugem4026 0.9614 2048
173 | 024 txhugem4027 0.9959 2048
174 | 025 txhugem4028 0.0304 2048
175 | 026 txhugem4029 0.0648 2048
176 | 027 txhugem4030 0.1027 2048
177 | 028 txhugem4031 0.1372 2048
178 | ```
179 |
180 | ### Section 2.2: Normalise the data and set doppler files
181 | You will need to define a continnum band - one at each side of the emission line -
182 | to fit and later subtract the continuum. This normalised spectra will be put in
183 | in a file to be read by the fortran code.
184 | ```python
185 | # Normalise the spectra
186 | dop.Dopin(continnum_band=[6500,6537,6591,6620],
187 | plot_median=False,poly_degree=2)
188 | ```
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 | ### Section 2.3: Run the fortran code
197 | Now, let's run the tomography software!
198 | ```python
199 | # Perform tomography
200 | dop.Syncdop()
201 | ```
202 |
203 | The output of the fortran code is:
204 | ```
205 | nvp 477
206 | (28, 477)
207 | nv 143 143
208 | Estimated Memory required 354 Mbytes
209 | parameter (nd=npm*nvpm,nr=0.8*nvm*nvm)
210 |
211 | parameter (nt=nvpm*npm+nvm*nvpm*3+2*npm*nvm)
212 |
213 | parameter (nri=0.9*nvm*nt/nd,ndi=0.9*nvm*nt/nr)
214 |
215 | c parameters for emap routines
216 |
217 | parameter (nf=nd,nfp=ndi,nrp=nri)
218 |
219 | parameter (ni=nvm,nj=nvm)
220 |
221 | parameter (nch=1,nsu=1)
222 |
223 | * Computing MEM tomogram
224 | cp -f cclock.f clock.f ; gfortran -O -w -o dopp dop.f clock.f
225 | dopp
226 | make: dopp: No such file or directory
227 | make: *** [dop.out] Error 1
228 | RL max entropy, floating defaults
229 | ih 0 (log likelihood)
230 | iw 0 (no error bars read in)
231 | pb0,pb1 0.950 1.050
232 | ns 7
233 | ac 8.00E-04
234 | nim 150
235 | al0, alf, nal 0.0020 1.7000 -1
236 | clim 1.6000
237 | ipri 2
238 | norm 1
239 | wid, af 0.10E+07 1.0000
240 | HOLAQQ NOW 2Q
241 | cpu for geometry 0.19
242 | HOLAQQQQ
243 | it H+alfa*S delta
244 | 1 3.064384039127E+04 8.97E-01
245 | 2 3.124296879919E+04 8.88E-01
246 | 3 3.174029201244E+04 8.10E-01
247 | 4 3.187324638623E+04 6.27E-01
248 | 5 3.189338120949E+04 4.84E-01
249 | 6 3.189804389182E+04 3.63E-01
250 | 7 3.189972657354E+04 2.60E-01
251 | 8 3.190005031439E+04 2.13E-01
252 | 9 3.190020880677E+04 1.65E-01
253 | 10 3.190026635720E+04 1.43E-01
254 | 11 3.190030859976E+04 1.14E-01
255 | 12 3.190032174052E+04 9.00E-02
256 | 13 3.190032685539E+04 7.44E-02
257 | 14 3.190032853609E+04 5.82E-02
258 | 15 3.190032918090E+04 4.18E-02
259 | 16 3.190032942768E+04 2.94E-02
260 | 17 3.190032951013E+04 2.23E-02
261 | 18 3.190032954797E+04 1.53E-02
262 | 19 3.190032956032E+04 1.32E-02
263 | 20 3.190032956654E+04 9.57E-03
264 | 21 3.190032956866E+04 5.22E-03
265 | 22 3.190032956935E+04 1.92E-03
266 | 23 3.190032956960E+04 2.18E-03
267 | 24 3.190032956968E+04 8.18E-04
268 | 25 3.190032956971E+04 4.46E-04
269 | ni, al, hs, rr: 25 0.00200 0.319003296E+05 1.48261 1.60000
270 | cpu for iteration 0.81
271 | entropy -2.4072E+04
272 | ```
273 | ### Section 2.4: Plot the tomography map
274 | This routine will display the outcome of the Doppler tomography. You can overplot
275 | contours and streams.
276 | ```python
277 | # Read and plot map
278 | cb,data = dop.Dopmap(limits=[0.05,0.99],colorbar=True,cmaps=cm.mamga_r,
279 | smooth=False,remove_mean=False)
280 | # Overplot the donor contours, keplerian and ballistic streams
281 | qm=0.35 # mass ratio M_2 / M_1
282 | k1 = 107 # Semi amplitude of the primary in km/s
283 | inc=70 # inclination angle, in degrees
284 | m1=1.2 # Mass of the primary in solar masses
285 | porb=0.1769061911 # orbital period in days
286 |
287 |
288 | pydoppler.stream(qm,k1,porb,m1,inc)
289 | ```
290 |
291 |
292 |
293 |
294 | ### Section 2.5: Spectra reconstruction
295 | Always check that reconstructed spectra looks like the original one. A good
296 | rule of thumb "If a feature on the Doppler tomogram is not in the trail
297 | spectrum, most likely its not real!"
298 |
299 | ```python
300 | # plot trail spectra
301 | cb2,cb3,dmr,dm = dop.Reco(colorbar=True,limits=[.05,0.95],cmaps=cm.magma_r)
302 | ```
303 | where the output variables cb2 and cb3 hold the colorbar objects (if selected); dmr and dm hold the data cubes for the reconstructed trail spectra and the binned data, respectively.
304 |
305 |
306 |
307 |
308 | ## Section 3: Extra commands
309 | There are many other commands that will interact with the Doppler tomogram. As
310 | usual, you can update them inside the pydoppler.spruit object as we did in
311 | section 2. The configurable parameters are:
312 | ```python3
313 | dop.ih = 0 # type of likelihood function (ih=1 for chi-squared)
314 | dop.iw = 0 # iw=1 if error bars are to be read and used
315 | dop.pb0 = 0.95 # range of phases to be ignored, between 0 and 1
316 | dop.pb1 = 1.05 # range of phases to be ignored, between 1 and 2
317 | dop.ns = 7 # smearing width in default map
318 | dop.ac = 8e-4 # accuracy of convergence
319 | dop.nim = 150 # max no of iterations
320 | dop.al0 = 0.002 # starting value of alfa
321 | dop.alf = 1.7 # factor
322 | dop.nal = 0 # max number of alfas
323 | dop.clim = 1.6 # 'C-aim'
324 | dop.ipri = 2 # printout control for standard output channel (ipr=2 for full)
325 | dop.norm = 1 # norm=1 for normalization to flat light curve
326 | dop.wid = 10e5 # width of central absorption fudge
327 | dop.af = 0.0 # amplitude of central absorption fudge
328 | ```
329 |
330 | ## Section 4: Troubleshoot
331 | This is an early version of the wrapper. Things will go wrong. If you find a
332 | bug or need a feature, I will try my best to work it out. If you think you can
333 | add to this wrapper, I encourage you push new changes and contribute to it.
334 |
--------------------------------------------------------------------------------
/build/lib/pydoppler/__init__.py:
--------------------------------------------------------------------------------
1 | __modules__ = ['pydoppler']
2 | from .pydoppler import spruit, rebin_trail, stream, test_data
3 |
4 | __version__ = "0.2.0"
5 |
--------------------------------------------------------------------------------
/build/lib/pydoppler/fortran_code/cclock.f:
--------------------------------------------------------------------------------
1 | subroutine clock(t)
2 | real*8 t
3 | real*4 ta(2)
4 | x=dtime(ta)
5 | t=t+ta(1)
6 | return
7 | end
8 |
--------------------------------------------------------------------------------
/build/lib/pydoppler/fortran_code/clock.f:
--------------------------------------------------------------------------------
1 | subroutine clock(t)
2 | real*8 t
3 | real*4 ta(2)
4 | x=dtime(ta)
5 | t=t+ta(1)
6 | return
7 | end
8 |
--------------------------------------------------------------------------------
/build/lib/pydoppler/fortran_code/dop.f:
--------------------------------------------------------------------------------
1 | program dopmap
2 | c Version 2.0
3 | c HCS 3-3-1999
4 | c version for arbitrary phase bins
5 | implicit real*8 (a-h,o-z)
6 | real*4 dpx
7 | include 'emap.par'
8 | common/phases/dpha(npm)
9 | c the 'd' lines are the nonsense IBM machines need to make them stop on an overflow.
10 | c include '/usr/include/fpdc.h'
11 | c include '/usr/include/fexcp.h'
12 | dimension dat(nd),pha(npm),vp(nvpm)
13 | real*4 p(ndi,nr),pt(nri,nd)
14 | dimension vmo(nr),vmb(nr),dato(nd),datb(nd),eb(nd)
15 | dimension reco(nvm,nvm),dpxu(nvm,nvm)
16 | character*20 spec
17 | character*80 idat
18 | common /folds/ nph,nvp
19 | common /foldn/ nv,indx(nr),indy(nr),nol
20 | common /difpix/ dpx(nr,4)
21 | common /cabsf/ wid,af
22 | c fpstat(fpve)=.true.
23 | c fpstat(fpoe)=.true.
24 | c fpstat(fpue)=.true.
25 | c fpstat(fpze)=.true.
26 | c fpstat(fpxe)=.false.
27 | c call fpsets(fpstat)
28 | c call signal(sigtrap,xl__trce)
29 | pi2=8*atan(1.)
30 |
31 | c read parameter file
32 | call repar(ns,ac,nim,
33 | * al0,alf,nal,clim,ipri,spec,ih,iw,pb0,pb1,norm)
34 | c set baseline level to be added to spectrum (fraction of the avg of entire spectrum)
35 | bfa=0.1
36 | write(*,'('' HOLAQQ NOW 2Q'')')
37 | c read input data
38 | open(4,file=spec)
39 | read(4,*) nph,nvp,w0
40 | read(4,'(a)') idat
41 | if (nph.ne.npm) call erri('nph.ne.npm',nph,npm)
42 | if (nvp.ne.nvpm) call erri('nvp.ne.npvm',nvp,nvpm)
43 | nv=nvm
44 | nil=nvp*nph
45 | read(4,*) (pha(i),i=1,nph)
46 | read(4,*) iph
47 | if (iph.eq.1) then
48 | read(4,*) (dpha(i),i=1,nph)
49 | else
50 | do i=1,nph
51 | dpha(i)=1./nph
52 | enddo
53 | endif
54 | do i=1,nph
55 | pha(i)=pha(i)*pi2
56 | dpha(i)=dpha(i)*pi2
57 | enddo
58 | c make blanking array corresponding to (pb0,pb1)
59 | call blanks(pha,nph,pb0,pb1)
60 | read(4,*) (vp(i),i=1,nvp)
61 | read(4,*) (dat(i),i=1,nil)
62 | if (iw.eq.1) read(4,*) (eb(i),i=1,nil)
63 | close(4)
64 | call clock(t1)
65 | call prom(va,nv,pha,nph,vp,nvp,pt,p)
66 | call clock(t2)
67 | write(10,'('' cpu for geometry'',f10.2)')t2-t1
68 | if (ipri.gt.0) write(*,'('' cpu for geometry'',f10.2)')t2-t1
69 | t1=t2
70 | c compute a baseline flux to add to dat
71 | call basel(dat,nph,nvp,bfa,bf,nv,va,pt,datb,vmb)
72 | c add baseline to dat, put weighting map into dato
73 | do i=1,nil
74 | dat(i)=dat(i)+datb(i)
75 | if (dat(i).lt.bf/3) then
76 | dat(i)=1e-5*bf
77 | dato(i)=0
78 | else
79 | dato(i)=1
80 | endif
81 | enddo
82 | c normalize to constant wavelength-integrated flux
83 | if (norm.eq.1) call norms(dat,pb0,pb1,pha,nph,nvp)
84 | c sum of light
85 | sdat=0
86 | do i=1,nil
87 | sdat=sdat+dat(i)
88 | enddo
89 |
90 | c make error bars relative
91 | do i=1,nil
92 | eb(i)=eb(i)/dat(i)
93 | enddo
94 | c weights
95 | call weighd(dat,datb,pha,nph,nvp,eb,iw)
96 |
97 | c reconstruction
98 | c initialize (flat)
99 | write(*,'('' HOLAQQQQ'')')
100 | do j=1,nol
101 | vmo(j)=sdat/nol
102 | enddo
103 | c decreasing sequence of alfas until required fit to input data
104 | call alfs(dat,eb,iw,p,pt,al0,alf,nal,ac,nim,vmo,
105 | * dato,nil,nol,nit,al,rr,ns,ih,clim,ipri,ier,t2,sx)
106 | if (ier.eq.2) then
107 | write(*,'('' no converged models, returning starting image'')')
108 | al=al0
109 | rr=100
110 | endif
111 | if (ier.eq.1) write(*,'('' last converged model has rr='',
112 | * f7.4,'', >clim='',f7.4)') rr,clim
113 | if (ipri.gt.0) write(*,'('' entropy'', 1pe12.4)')sx
114 | c make an identification number
115 | s1=0
116 | s2=0
117 | m=max(1,nol/30)
118 | do i=1,nol,m
119 | s1=s1+vmo(i)
120 | enddo
121 | m=max(1,nil/30)
122 | do i=1,nil,m
123 | s2=s2+dat(i)
124 | enddo
125 | fident=sin(100*(s1/s2))
126 | c normalize dopmap to input units (probably mJy's) x Hz per (cm/s)^2 in v-space
127 | c velocity grid size
128 | dv=2*va/(nv-1)
129 | delv2=dv**2
130 | c frequency grid size
131 | dev=(vp(nvp)-vp(1))/(nvp-1)
132 | denu=dev/w0*1e8
133 | do i=1,nol
134 | vmo(i)=(vmo(i)-vmb(i))/delv2*denu
135 | enddo
136 | c make unfolded reconstructed image
137 | do j=1,nol
138 | reco(indx(j),indy(j))=vmo(j)
139 | enddo
140 |
141 | open(3,file='dop.out')
142 | c write array sizes, w0, identification
143 | write(3,'(3i5,f10.3,f20.15)')nph,nvp,nvm,w0,fident
144 | c copy second line of input data file
145 | write(3,*)idat
146 | c copy phase and velocity coordinates of input spectrum
147 | write(3,'(1p8e13.4E3)')(pha(i),i=1,nph)
148 | write(3,*)iph
149 | if (iph.eq.1) write(3,'(1p8e13.4E3)')(dpha(i),i=1,nph)
150 | write(3,'(1p8e13.4E3)')(vp(i),i=1,nvp)
151 | c write input spectrum
152 | write(3,'(1p8e13.4E3)')(dat(i)-datb(i),i=1,nil)
153 | write(3,'(2i3,2f7.3,i4,2e13.4E3,f7.3,i3,e13.4E3,f7.3)')
154 | * ih,iw,pb0/pi2,pb1/pi2,ns,ac,al,clim,norm,wid,af
155 | c write dopmap and reco
156 | write(3,'(i4,1pe13.4E3,'' dopmap '')')nv,va
157 | write(3,'(1p6e13.4E3)')((reco(i,j),j=1,nv),i=1,nv)
158 | write(3,'(i6,'' reconstructed data '')')nil
159 | write(3,'(1p6e13.4E3)')(dato(i)-datb(i),i=1,nil)
160 | write(3,'(i6,'' 4 change maps '')')nv
161 | do ii=1,4
162 | do j=1,nol
163 | dpxu(indx(j),indy(j))=dpx(j,ii)
164 | enddo
165 | write(3,'(1p6e13.4E3)')((dpxu(i,j),j=1,nv),i=1,nv)
166 | enddo
167 | close(3)
168 | end
169 |
170 | c block data
171 | c include '/usr/include/fpdc.h'
172 | c include '/usr/include/fpdt.h'
173 | c end
174 |
175 | subroutine basel(dat,nph,nvp,bfa,bf,nv,va,pt,datb,vmb)
176 | c compute a baseline flux to get a flat background level in dopmap
177 | c datb is the data corresponding to a flat (circular) dopmap
178 | c vmb is the corresponding flat dopmap
179 | implicit real*8 (a-h,o-z)
180 | include 'emap.par'
181 | common /foldn/ nvf,indx(nr),indy(nr),nol
182 | dimension dat(*),datb(*),vmb(*)
183 | if (nol.gt.nr) call errb('nol>nr',nol,nr)
184 |
185 | c make circle of radius va on a zero background
186 | fv2=nv/2.
187 | dv=2*va/(nv-1)
188 | do ir=1,nol
189 | ix=indx(ir)
190 | iy=indy(ir)
191 | vx=dv*(ix-fv2-0.5)
192 | vy=dv*(iy-fv2-0.5)
193 | v=sqrt(vx**2+vy**2)
194 | vmb(ir)=0.
195 | if (v.lt.va) vmb(ir)=1
196 | enddo
197 |
198 | nil=nph*nvp
199 | c produce spectrum from this map
200 | call fproj(pt,nil,nol,vmb,datb)
201 | c value at v=0
202 | d0=datb(nvp/2*nph)
203 | c find avg of dat
204 | avg=0.
205 | do i=1,nil
206 | avg=avg+dat(i)
207 | enddo
208 | avg=avg/nil
209 | c baseline level to add
210 | bf=bfa*avg
211 | c normalize datb
212 | do i=1,nil
213 | datb(i)=bf*datb(i)/d0
214 | enddo
215 | c normalize background map
216 | do j=1,nol
217 | vmb(j)=vmb(j)*bf/d0
218 | enddo
219 | return
220 | end
221 |
222 | subroutine blanks(pha,nph,pb0,pb1)
223 | c make blanking array corresponding to (pb0,pb1)
224 | c pb0-pb1: phase range with weight 0 (used for ignoring eclipsed part of data)
225 | implicit real*8 (a-h,o-z)
226 | include 'emap.par'
227 | dimension pha(*)
228 | common/blank/bl(npm)
229 | logical bl
230 | pi2=8*atan(1.)
231 | c get max and min values of phase
232 | phmin=pha(1)
233 | phmax=pha(1)
234 | do i=2,nph
235 | if (pha(i).lt.phmin) phmin=pha(i)
236 | if (pha(i).gt.phmax) phmax=pha(i)
237 | enddo
238 | c number of cycles present
239 | nphmi=int(phmin/pi2)
240 | if (nphmi.lt.0.) nphmi=nphmi-1
241 | nphma=int(phmax/pi2)
242 | if (nphma.lt.0.) nphma=nphma-1
243 | c reduce blanking region to phases around 0
244 | npb1=int(pb1/pi2)
245 | if (npb1.lt.0.) npb1=npb1-1
246 | pb0=pb0-npb1*pi2
247 | pb1=pb1-npb1*pi2
248 | do i=1,nph
249 | c use only non-blanked region for making average
250 | bl(i)=.false.
251 | do ic=nphmi,nphma+1
252 | if (pha(i).gt.pb0+ic*pi2.and.pha(i).lt.pb1+ic*pi2)
253 | * bl(i)=.true.
254 | enddo
255 | enddo
256 | return
257 | end
258 |
259 | subroutine norms(dat,pb0,pb1,pha,nph,nvp)
260 | c normalize by a phase-dependent factor to make wavelength-integrated
261 | c light constant with phase.
262 | implicit real*8 (a-h,o-z)
263 | include 'emap.par'
264 | dimension dat(npm,nvpm),pha(*),wi(npm)
265 | common/blank/bl(npm)
266 | logical bl
267 | pi2=8*atan(1.)
268 | ws=0
269 | np=0
270 | c use only non-blanked region for making average
271 | do i=1,nph
272 | wi(i)=0
273 | if (.not.bl(i)) then
274 | np=np+1
275 | do j=1,nvp
276 | wi(i)=wi(i)+dat(i,j)
277 | enddo
278 | endif
279 | ws=ws+wi(i)
280 | enddo
281 | ws=ws/np
282 | do i=1,nph
283 | wi(i)=wi(i)/ws
284 | enddo
285 | c measure minimum of wi
286 | wim=0
287 | do i=1,nph
288 | if (wi(i).lt.wim) wim=wi(i)
289 | enddo
290 | c set an overall level to be added before normalization
291 | wl=0
292 | wlm=0.3
293 | if (wim.lt.wlm) then wl=wlm-wim
294 | do i=1,nph
295 | if (wi(i).ne.0.) then
296 | do j=1,nvp
297 | dat(i,j)=dat(i,j)*(1+wl)/(wi(i)+wl)
298 | enddo
299 | endif
300 | enddo
301 | return
302 | end
303 |
304 | subroutine alfs(dat,eb,iw,p,pt,al0,alf,nal,ac,nim,vmo,
305 | * dato,nil,nol,nit,alx,rr,ns,ih,clim,ipri,ier,t2,sx)
306 | c sequence of models with decreasing alfas, starting at al0, in factors
307 | c of alf, max no of models nal, each converged to accuracy ac, until
308 | c rms difference with input data dat is less than clim
309 | c ier=0: normal return
310 | c ier=1: last converged model differs more than clim from input light curve
311 | c ier=2: no converged models in entire sequence
312 | implicit real*8 (a-h,o-z)
313 | include 'emap.par'
314 | c dopmaps
315 | dimension vm1(nr),vmo(*)
316 | c projection matrix
317 | real*4 p(nfp,nr),pt(nrp,nf)
318 | c input data
319 | dimension dat(nd),eb(nd),dat1(nd),dato(nd)
320 | c parameters of penalty functions
321 | logical cont
322 | ier=0
323 | c copy input into temporary image
324 | do j=1,nol
325 | vm1(j)=vmo(j)
326 | enddo
327 | c initialize number of converged models
328 | nco=0
329 | c alpha- loop
330 | rr=100
331 | ial=0
332 | cont=.true.
333 | call clock(t2)
334 | t1=t2
335 | c if nal<0 converge abs(nal) models irrespective of clim
336 | if (nal.lt.0) then
337 | nal1=-nal
338 | else
339 | nal1=nal
340 | endif
341 | do while (ial.lt.nal1.and.(rr.gt.clim.or.nal.lt.0).and.cont)
342 | ial=ial+1
343 | c next alfa value
344 | if (nal.lt.0) then
345 | al=al0*alf**(1-ial)
346 | else
347 | al=alfa(al0,ial,alf,rr,clim)
348 | endif
349 | aci=ac
350 | flim=1e5
351 | c converge with Lucy's ME scheme
352 | call rldop(dat,p,pt,al,ac,flim,nim,vm1,nil,nol,nit,hs,
353 | * ns,ih,ipri,sf,ierr)
354 | if (ierr.eq.1) write(10,'('' not converged'')')
355 | if (ierr.eq.2) write(10,'('' not monotonic'')')
356 | if (ierr.eq.3) write(10,'('' not converged, not monotonic'')')
357 | if (ierr.eq.4) write(10,'('' stuck at vanishing updates'')')
358 | if (ipri.gt.0) then
359 | if (ierr.eq.1) write(*,'('' not converged'')')
360 | if (ierr.eq.2) write(*,'('' not monotonic'')')
361 | if (ierr.eq.3) write(*,'('' not converged, not monotonic'')')
362 | if (ierr.eq.4) write(*,'('' stuck at vanishing updates'')')
363 | endif
364 | c reconstructed spectrum
365 | call fproj(pt,nil,nol,vm1,dat1)
366 | c converged at this alpha, save.
367 | nco=nco+1
368 | do j=1,nol
369 | vmo(j)=vm1(j)
370 | enddo
371 | do k=1,nil
372 | dato(k)=dat1(k)
373 | enddo
374 | alx=al
375 | sx=sf
376 | c rms difference w/r input light curve
377 | rr0=rr
378 | rr=rrms(dat,eb,iw,dat1,nil)
379 | if (iw.eq.0) then
380 | c measure accuracy of reconstruction relative to point-to-point noise in data
381 | rn=rmsn(dat,dat1)
382 | rr=rr/rn
383 | endif
384 | c summary of this iteration to activity log file
385 | write(10,'('' ni, al, hs, rr:'',i5,
386 | * f8.5,e17.9,2f8.5)')nit,al,hs,rr,clim
387 | call clock(t2)
388 | write(10,'('' cpu for iteration'',f8.2)')t2-t1
389 | if (ipri.gt.0) then
390 | write(*,'('' ni, al, hs, rr:'',i5,
391 | * f8.5,e17.9,2f8.5)')nit,al,hs,rr,clim
392 | write(*,'('' cpu for iteration'',f8.2)')t2-t1
393 | endif
394 | t1=t2
395 | c continue if no converged models found yet, or if acceptable error
396 | c return from last model
397 | cont = nco.eq.0.or.ierr.eq.0.or.ierr.eq.2
398 | enddo
399 | if (nco.eq.0) ier=2
400 | if (.not.cont) then
401 | ier=1
402 | rr=rr0
403 | endif
404 | return
405 | end
406 |
407 | subroutine repar(ns,ac,nim,
408 | * al0,alf,nal,clim,ipri,spec,ih,iw,pb0,pb1,norm)
409 | c read input parameters
410 | implicit real*8 (a-h,o-z)
411 | include 'emap.par'
412 | character*(*) spec
413 | character*40 txt
414 | c output channels
415 | dimension kch(2)
416 | common /fold/ nvx,nvy
417 | common /cabsf/ wid,af
418 | pi2=8*atan(1.)
419 | c input data file
420 | open(4,file='dop.in')
421 | c type of likelihood to be used (0=log, 1=weighted log, 2=rms, 3=weighted rms)
422 | read(4,*)ih
423 | c read weights from lightcurve file if iw=1
424 | read(4,*)iw
425 | c read range of phases to be ignored in mapping and convert to radians
426 | read(4,*)pb0,pb1
427 | if(pb1-1.gt.pb0) call errb('all phases ignored:',pb0,pb1)
428 | if(pb1.lt.pb0) call errb('pb0 must be nr in prom',ir,nr)
602 | indx(ir)=ix
603 | indy(ir)=iy
604 | do ip=1,nph
605 | c line-of sight velocity at phase bin edges
606 | vp0=vx*sfl(ip)-vy*cfl(ip)
607 | vp1=vx*sfu(ip)-vy*cfu(ip)
608 | if (vp0.gt.vp1) then
609 | vpma=vp0+dv/2
610 | vpmi=vp1-dv/2
611 | else
612 | vpma=vp1+dv/2
613 | vpmi=vp0-dv/2
614 | endif
615 | c estimate near which line-sight bins these are
616 | ka=(vpma-vpl(1))/dvi+1
617 | ki=(vpmi-vpl(1))/dvi+1
618 | if (vpmi.lt.vpl(-1))
619 | * call errb('vpmi,vpl(-1):',vpmi,vpl(-1))
620 | if (vpma.gt.vpl(nvp+2))
621 | * call errb('vpma,vpl(nvp+2):',vpma,vpl(nvp+2))
622 | c get first vpl(i)nd in weighd',nil,nd)
806 | do i=1,nph
807 | do j=1,nvp
808 | inp=i+(j-1)*nph
809 | w(inp)=1
810 | if (f0(inp).eq.0.) w(inp)=0
811 | if (bl(i)) w(inp)=0
812 | enddo
813 | enddo
814 | if (iw.eq.1) then
815 | c multiply by weights from error bars
816 | do i=1,nil
817 | w(i)=w(i)*f(i)/eb(i)
818 | enddo
819 | endif
820 | c normalize to average=1
821 | x=0
822 | do i=1,nil
823 | x=x+w(i)
824 | enddo
825 | do i=1,nil
826 | w(i)=w(i)/x*nph
827 | enddo
828 | return
829 | end
830 |
831 | subroutine rldop(pht,p,pt,al,ac,flim,nim,ps,nil,nol,nit,hs,
832 | * ns,ih,ipri,s,ierr)
833 | c interface to rlfldn for doppler mapping
834 | c RL iteration with floating default, converged to accuracy ac
835 | c input:
836 | c pht: input data, nil: length of input data, nol: length of solution
837 | c p(i,j): probability p(x|xi), al: entropy weight, ac: accuracy of convergence,
838 | c pt: transpose of p,
839 | c flim: max acceleration parameter, nim: max no of iterations
840 | c ns: smearing width (passed on to chims)
841 | c ih: type of likelihood function (subroutines like, lamun)
842 | c ipri: printout control
843 | c out:
844 | c ps: solution, nit: no of iterations, hs: optimum function Q.
845 | c nit: number of iterations
846 | c s: entropy
847 | c ierr: 0 (OK), 1 (not converged) or 2 (not monotonic)
848 | implicit real*8 (a-h,o-z)
849 | dimension pht(*),p(*),pt(*),ps(*)
850 | dum=0
851 | idum=1
852 | epc=1
853 | call rlfldn(pht,p,pt,al,ac,flim,nim,ps,nil,nol,nit,hs,
854 | * idum,idum,ns,epc,idum,dum,idum,ih,ipri,dum,s,ierr)
855 | return
856 | end
857 |
858 | subroutine chims(ps,chi,id1,id2,id3,ns,du1,id4,du2,id5,du3)
859 | c default map routine to interface dopmap with emap routines
860 | c id1-5 and du1-3 are dummies
861 | implicit real*8 (a-h,o-z)
862 | include 'emap.par'
863 | dimension ps(*),chi(nr)
864 | dimension x2(nvm,nvm),y2(nvm,nvm)
865 | common /foldn/ nv,indx(nr),indy(nr),nol
866 | c reset x2
867 | do i=1,nv
868 | do j=1,nv
869 | x2(i,j)=0
870 | enddo
871 | enddo
872 | c fold x into x2 using `backdoor' information from /foldn/
873 | do j=1,nol
874 | x2(indx(j),indy(j))=ps(j)
875 | enddo
876 | ic=0
877 | jc=0
878 | im=1
879 | call chimg(x2,y2,nv,ic,nv,jc,im,ns)
880 | c unfold y2
881 | do j=1,nol
882 | chi(j)=y2(indx(j),indy(j))
883 | enddo
884 | return
885 | end
886 |
887 | subroutine chimsi(ps,chi,id,k,nc,inc,ns,epc,ico,rdf,msu,wbkg)
888 | c default map routine to interface dopmap with emap routines.
889 | c since there are no sub-surfaces in dopmap, chimsi does the same thing
890 | c as chims
891 | implicit real*8 (a-h,o-z)
892 | call chims(ps,chi,id,nc,inc,ns,epc,ico,rdf,msu,wbkg)
893 | return
894 | end
895 |
896 | subroutine wpar(npm,nvpm,nvm,nri,ndi)
897 | c write a parameter file with updated values for npm,nvpm,nvm,nri,ndi
898 | implicit real*8 (a-h,o-z)
899 | open(11,file='emap.par.new')
900 | write(11,'('' parameter (npm='',i3,'',nvpm='',i3,
901 | * '',nvm='',i3,'')'')')npm,nvpm,nvm
902 | write(11,'('' parameter (nd=npm*nvpm,nr=nvm*nvm)'')')
903 | write(11,'('' parameter (nri='',i4,'',ndi='',i4,'')'')')
904 | * nri,ndi
905 | write(11,'(''c parameters for emap routines'')')
906 | write(11,'('' parameter (nf=nd,nfp=ndi,nrp=nri)'')')
907 | write(11,'('' parameter (ni=nvm,nj=nvm)'')')
908 | write(11,'('' parameter (nch=1,nsu=1)'')')
909 | close(11)
910 | return
911 | end
912 |
913 | function alfa(al0,ial,alf,rr,clim)
914 | c next alfa value. last value is chosen to land rr close to clim
915 | implicit real*8 (a-h,o-z)
916 | common /alkeep/ rr2,rr1
917 | rr1=rr2
918 | rr2=rr
919 | if (rr.gt.sqrt(alf)*clim.or.ial.lt.3) then
920 | al=al0/alf**(ial-1)
921 | else
922 | dl2=log(rr1/rr2)
923 | dl=log(rr/clim)
924 | x=dl/dl2
925 | if (x.gt.1.) then
926 | al=al0/alf**(ial-1)
927 | else
928 | alfr=exp(x*log(alf))
929 | al=al0/alf**(ial-2)/alfr
930 | endif
931 | endif
932 | alfa=al
933 | return
934 | end
935 |
936 | subroutine chimg(x2,y2,nam,ic,nbm,jc,im,ns)
937 | c gaussian smearing with half-width ns, by consecutive 1-d smearing in x and y
938 | implicit real*8 (a-h,o-z)
939 | include 'emap.par'
940 | parameter (ms=100)
941 | dimension x2(ni,nj), y2(ni,nj)
942 | common /first/ smp(-ms:ms),ns0,ns1
943 | dimension t1(-ms:ni+ms),t2(-ms:nj+ms)
944 | if (ns0.ne.ns) then
945 | c (re)make smearing matrix smp if value of ns is new.
946 | w=1.5
947 | c actual smearing width used is w times 1/e width
948 | ns1=w*ns
949 | if (ns1.gt.ms) call errb('ns1>ms in chimg',ns1,ms)
950 | ns0=ns
951 | s=0
952 | do i=-ns1,ns1
953 | smp(i)=exp(-float(i*i)/ns**2)
954 | s=s+smp(i)
955 | enddo
956 | c normalize
957 | do i=-ns1,ns1
958 | smp(i)=smp(i)/s
959 | enddo
960 | endif
961 |
962 | c smear in j-direction
963 | do i=1,nam
964 | c extend ith column of x2 into t2, taking properties of boundary into account
965 | do j=-ns1,0
966 | if (jc.eq.1) then
967 | c wraparound
968 | t2(j)=x2(i,j+nbm)
969 | else
970 | c fold back
971 | t2(j)=x2(i,2-j-1)
972 | endif
973 | enddo
974 | do j=1,nbm
975 | t2(j)=x2(i,j)
976 | enddo
977 | do j=nbm+1,nbm+ns1
978 | if (jc.eq.1) then
979 | t2(j)=x2(i,j-nbm)
980 | else
981 | t2(j)=x2(i,2*nbm-j+1)
982 | endif
983 | enddo
984 | c smear t2, result into y2
985 | do j=1,nbm
986 | s=0
987 | do js=-ns1,ns1
988 | s=s+t2(j+js)*smp(js)
989 | enddo
990 | y2(i,j)=s
991 | enddo
992 | enddo
993 |
994 | c smear in i-direction
995 | do j=1,nbm
996 | c extend jth row of y2 into t1, taking properties of boundary into account
997 | do i=-ns1,0
998 | if (ic.eq.1) then
999 | c wraparound
1000 | t1(i)=y2(i+nam,j)
1001 | else
1002 | c fold back
1003 | t1(i)=y2(2-i-1,j)
1004 | endif
1005 | enddo
1006 | do i=1,nam
1007 | t1(i)=y2(i,j)
1008 | enddo
1009 | do i=nam+1,nam+ns1
1010 | if (ic.eq.1) then
1011 | t1(i)=y2(i-nam,j)
1012 | else
1013 | t1(i)=y2(2*nam-i+1,j)
1014 | endif
1015 | enddo
1016 | c smear t1, result into y2
1017 | do i=1,nam
1018 | s=0
1019 | do is=-ns1,ns1
1020 | s=s+t1(i+is)*smp(is)
1021 | enddo
1022 | y2(i,j)=s
1023 | enddo
1024 | enddo
1025 | return
1026 | end
1027 |
1028 | subroutine rlfldn(pht,p,pt,al,ac,flim,nim,ps,nil,nol,nit,hs,
1029 | * nc,inc,ns,epc,ico,rdf,msu,ih,ipri,wbkg,s,ierr)
1030 | c RL iteration with floating default, converged to accuracy ac
1031 | c input:
1032 | c pht: input data, nil: length of input data, nol: length of solution
1033 | c p(i,j): probability p(x|xi), al: entropy weight, ac: accuracy of convergence,
1034 | c flim: max acceleration parameter, nim: max no of iterations
1035 | c nil: no of phases, nol: size of image, nc: no of components of default,
1036 | c epc: the weights of each of these components, inc: indices for the types of
1037 | c component.
1038 | c out:
1039 | c ps: solution, nit: no of iterations, hs: optimum function Q.
1040 | c ih: type of likelihood function (subroutines like, lamun)
1041 | c ierr: 0 (OK), 1 (not converged) or 2 (not monotonic)
1042 | c ipri: printout control
1043 | implicit real*8 (a-h,o-z)
1044 | real*4 dpx
1045 | include 'emap.par'
1046 | dimension pht(*),ps(*),inc(nch,nsu),ns(nch,nsu),epc(*),ico(*)
1047 | real*4 p(nfp,nr),pt(nrp,nf)
1048 | dimension ph(nf),dha(nr),dsa(nr),chi(nr,nch),tem(nr),
1049 | * ex(nr),dps(nr),dps0(nr)
1050 | common /difpix/ dpx(nr,4)
1051 | ierr=0
1052 | del=1
1053 | nit=0
1054 | hs=0
1055 | c sum of light curve
1056 | spt=0
1057 | do i=1,nil
1058 | spt=spt+pht(i)
1059 | enddo
1060 | do while (del.gt.ac.and.nit.lt.nim)
1061 | nit=nit+1
1062 | c phi (forward projection step)
1063 | call fproj(pt,nil,nol,ps,ph)
1064 | c magic statement: On HP's, code crashes with bus error if this line is removed:
1065 | if (nit.lt.0) write(*,*)1
1066 | if (al.le.0.) then
1067 | c measure convergence by diff between ph and pht
1068 | av=0
1069 | sm=0
1070 | do i=1,nil
1071 | av=av+pht(i)
1072 | sm=sm+(pht(i)-ph(i))**2
1073 | enddo
1074 | rm=sqrt(sm/nil)
1075 | av=av/nil
1076 | del=rm/av
1077 | endif
1078 | c H and dH/dpsi
1079 | call like(pht,ph,p,nil,nol,ih,h,dha)
1080 | c sum of psi*dH/dpsi and sum of psi
1081 | su=0
1082 | sup=0
1083 | do j=1,nol
1084 | su=su+ps(j)*dha(j)
1085 | sup=sup+ps(j)
1086 | enddo
1087 | c delta-H (in same array as dha)
1088 | do j=1,nol
1089 | dha(j)=dha(j)+(-su/sup+spt/sup-1)
1090 | enddo
1091 | c entropy
1092 | if (al.gt.0.) call entr(ps,nil,nol,s,dsa,chi,tem,ex,nc,inc,ns,
1093 | * epc,ico,rdf,msu,wbkg)
1094 | c sum of psi*dS/dpsi
1095 | su=0
1096 | do k=1,nol
1097 | su=su+ps(k)*dsa(k)
1098 | enddo
1099 | c Delta-S (in same array as dsa)
1100 | do j=1,nol
1101 | dsa(j)=dsa(j)-su/sup
1102 | enddo
1103 | c save old value of Q
1104 | hs0=hs
1105 | c current value of Q
1106 | hs=h+al*s
1107 | c warning if not monotonic
1108 | if (nit.ne.1.and.hs.lt.hs0) ierr=2
1109 | c new dpsi
1110 | do j=1,nol
1111 | dps(j)=ps(j)*(dha(j)+al*dsa(j))
1112 | enddo
1113 | if (nit.eq.1) then
1114 | do j=1,nol
1115 | dps0(j)=dps(j)
1116 | enddo
1117 | endif
1118 |
1119 | c determine optimum direction and factor for update, from dps0 and dps.
1120 | c (generalization of Lucy's acceleration)
1121 | c derivatives of Q w/r to lambda and mu at current psi
1122 | call lamun(pht,ps,dps0,dps,pt,ph,chi,tem,ex,al,nil,nol,
1123 | * fla,fmu,nc,inc,ns,epc,ico,rdf,msu,ih,wbkg)
1124 | c length of multiplier
1125 | amu=sqrt(fla**2+fmu**2)
1126 | c direction (normalized) of optimum
1127 | fla=fla/amu
1128 | fmu=fmu/amu
1129 | c find max of amu
1130 | flm=0
1131 | jlm=0
1132 | do j=1,nol
1133 | c value of prospective update
1134 | xx=fla*dps0(j)+fmu*dps(j)
1135 | if (xx.lt.0) then
1136 | c positivity not maintained at this value of amu, get max
1137 | fl=-xx/ps(j)
1138 | if (fl.gt.flm) then
1139 | flm=fl
1140 | jlm=j
1141 | endif
1142 | endif
1143 | enddo
1144 | if (flm.gt.0.) then
1145 | c positivity restriction limits amu
1146 | c safety factor 0.9
1147 | flm=dmin1(flim,0.9/flm)
1148 | else
1149 | c take overall limit
1150 | flm=flim
1151 | endif
1152 | amu=dmin1(amu,flm)
1153 | c check if amu has been small for awhile
1154 | call zcheck(amu,nit,20,0.01d0,ierr)
1155 | if (ierr.eq.4) return
1156 | c having found amu, update psi
1157 | do j=1,nol
1158 | up=fmu*dps(j)+fla*dps0(j)
1159 | ps(j)=ps(j)+amu*up
1160 | c save direction of old dps
1161 | dps0(j)=up
1162 | enddo
1163 |
1164 | if (al.gt.0.) then
1165 | del=0
1166 | do j=1,nol
1167 | c measure of convergence (Lucy's eq 17)
1168 | dj=abs(dha(j)+al*dsa(j))/(abs(dha(j))+al*abs(dsa(j)))
1169 | del=del+dj**2
1170 | enddo
1171 | del=sqrt(del/nol)
1172 | endif
1173 | c store change
1174 | do j=1,nol
1175 | dpx(j,mod(nit,4)+1)=dha(j)+al*dsa(j)
1176 | enddo
1177 | c printout
1178 | if (nit.eq.1) then
1179 | write(10,'('' it H+alfa*S delta'')')
1180 | if (ipri.gt.1)
1181 | * write(*,'('' it H+alfa*S delta'')')
1182 | endif
1183 | if (nit.ne.1.and.hs.lt.hs0) then
1184 | c line summary to activity log file
1185 | write(10,'(i4,1pe20.12,e11.2,'' **'')')nit,hs,del
1186 | if (ipri.gt.1)
1187 | * write(*,'(i4,1pe20.12,e11.2,'' **'')')nit,hs,del
1188 | else
1189 | write(10,'(i4,1pe20.12,e11.2)')nit,hs,del
1190 | if (ipri.gt.1)
1191 | * write(*,'(i4,1pe20.12,e11.2)')nit,hs,del
1192 | endif
1193 | c renormalize (mostly to strip accumulating numerical noise)
1194 | su=0
1195 | do j=1,nol
1196 | su=su+ps(j)
1197 | enddo
1198 | do j=1,nol
1199 | ps(j)=ps(j)*spt/su
1200 | enddo
1201 | enddo
1202 | if (nit.ge.nim) then
1203 | c not converged at this value of ac
1204 | hs=0
1205 | c return last value of del
1206 | ac=del
1207 | c error flag
1208 | ierr=ierr+1
1209 | endif
1210 | return
1211 | end
1212 |
1213 | subroutine like(pht,ph,p,nil,nol,ih,h,dha)
1214 | c likelihood function h and its derivative w/r psi, dha
1215 | implicit real*8 (a-h,o-z)
1216 | include 'emap.par'
1217 | dimension pht(*),ph(*),dha(*)
1218 | real*4 p(nfp,nr)
1219 | dimension phh(nf)
1220 | common /weights/ w(nf)
1221 | h=0
1222 | if (ih.eq.0) then
1223 | c log likelihood
1224 | do i=1,nil
1225 | h=h+w(i)*(pht(i)*log(ph(i))-ph(i))
1226 | enddo
1227 | else
1228 | c rms
1229 | do i=1,nil
1230 | h=h-w(i)*(pht(i)-ph(i))**2
1231 | enddo
1232 | c normalizing factor
1233 | h=h*nil
1234 | endif
1235 | c Delta-H
1236 | if (ih.eq.0) then
1237 | c log likelihood
1238 | do i=1,nil
1239 | phh(i)=w(i)*(pht(i)/ph(i)-1)
1240 | enddo
1241 | call bproj(p,nil,nol,phh,dha)
1242 | else
1243 | c rms
1244 | do i=1,nil
1245 | phh(i)=2*nil*w(i)*(pht(i)-ph(i))
1246 | enddo
1247 | call bproj(p,nil,nol,phh,dha)
1248 | endif
1249 | return
1250 | end
1251 |
1252 | subroutine zcheck(amu,nit,nz,amc,ierr)
1253 | c set ierr=4 if past nz amu values were less than amc
1254 | implicit real*8 (a-h,o-z)
1255 | common /zsave/ am(30)
1256 | if (nz.gt.30) call errb('nz>30 in zcheck',nz,30)
1257 | am(mod(nit,nz)+1)=amu
1258 | if (nit.ge.nz) then
1259 | ama=0
1260 | do i=1,nz
1261 | if(am(i).gt.ama) ama=am(i)
1262 | enddo
1263 | if (ama.lt.amc) ierr=4
1264 | endif
1265 | return
1266 | end
1267 |
1268 | subroutine entr(ps,nil,nol,s,sp,chi,tem,ex,nc,inc,ns,epc,ico,
1269 | * rdf,msu,wbkg)
1270 | c entropy part of `objective function' Q.
1271 | c input: ps (current reconstruction),
1272 | c output: s (S), sp (dS/dpsi)
1273 | implicit real*8 (a-h,o-z)
1274 | include 'emap.par'
1275 | dimension ps(*),sp(*),chi(nr,nch),tem(*),ex(*),inc(nch,nsu),
1276 | * ns(nch,nsu),epc(*),ico(*)
1277 | dimension x(nr),y(nr,nch)
1278 | if (nc.gt.nch) call errb('nc>nch in entr',nc,nch)
1279 | c make chi's
1280 | call chims(ps,chi,1,nc,inc,ns,epc,ico,rdf,msu,wbkg)
1281 | c entropy
1282 | s=0
1283 | do j=1,nol
1284 | tem(j)=log(ps(j))
1285 | ex(j)=0
1286 | do k=1,nc
1287 | if (epc(k).ne.0.) then
1288 | fe=epc(k)*log(chi(j,k))
1289 | ex(j)=ex(j)+fe
1290 | tem(j)=tem(j)-fe
1291 | endif
1292 | enddo
1293 | ex(j)=exp(ex(j))
1294 | s=s-ps(j)*(tem(j)-1)-ex(j)
1295 | enddo
1296 | c derivative wr to psi_j, first the psilogpsi part
1297 | do j=1,nol
1298 | sp(j)=-tem(j)
1299 | enddo
1300 | c add terms due to dependence of chi on psi
1301 | do k=1,nc
1302 | if (epc(k).ne.0.) then
1303 | do j=1,nol
1304 | x(j)=(ps(j)-ex(j))/chi(j,k)
1305 | enddo
1306 | call chimsi(x,y,-1,k,nc,inc,ns,epc,ico,rdf,msu,wbkg)
1307 | do j=1,nol
1308 | sp(j)=sp(j)+epc(k)*y(j,k)
1309 | enddo
1310 | endif
1311 | enddo
1312 | return
1313 | end
1314 |
1315 | subroutine lamun(pht,ps,dps1,dps2,pt,ph,chi,tem,ex,al,nil,nol,
1316 | * fla,fmu,nc,inc,ns,epc,ico,rdf,msu,ih,wbkg)
1317 | c optimal lambda and mu from first and second derivatives of Q
1318 | implicit real*8 (a-h,o-z)
1319 | include 'emap.par'
1320 | dimension pht(*),ps(*),dps1(*),dps2(*),ph(*),chi(nr,nch),
1321 | * tem(*),ex(*),inc(nch,nsu),ns(nch,nsu),epc(*),ico(*)
1322 | real*4 pt(nrp,nf)
1323 | dimension dph1(nf),dph2(nf),dch1(nr,nch),dch2(nr,nch)
1324 | common /weights/ w(nf)
1325 | c changes in phi and chi corresponding to dps0, dps
1326 | call fproj(pt,nil,nol,dps1,dph1)
1327 | call fproj(pt,nil,nol,dps2,dph2)
1328 | if (al.gt.0.) then
1329 | call chims(dps1,dch1,1,nc,inc,ns,epc,ico,rdf,msu,wbkg)
1330 | call chims(dps2,dch2,1,nc,inc,ns,epc,ico,rdf,msu,wbkg)
1331 | endif
1332 | c first and second derivatives
1333 | hl=0
1334 | hll=0
1335 | hm=0
1336 | hlm=0
1337 | hmm=0
1338 | sl=0
1339 | sll=0
1340 | sm=0
1341 | slm=0
1342 | smm=0
1343 | c likelihood term
1344 | if (ih.eq.0) then
1345 | c log likelihood
1346 | do i=1,nil
1347 | phw=pht(i)*w(i)
1348 | dpp=pht(i)/ph(i)-1
1349 | xl=dph1(i)/ph(i)
1350 | xm=dph2(i)/ph(i)
1351 | hl=hl+w(i)*dph1(i)*dpp
1352 | hll=hll-xl**2*phw
1353 | hlm=hlm-xl*xm*phw
1354 | hm=hm+w(i)*dph2(i)*dpp
1355 | hmm=hmm-xm**2*phw
1356 | enddo
1357 | else
1358 | c rms likelihood
1359 | do i=1,nil
1360 | x=pht(i)-ph(i)
1361 | xl=dph1(i)
1362 | xm=dph2(i)
1363 | hl=hl+2*w(i)*x*xl
1364 | hll=hll-2*w(i)*xl**2
1365 | hlm=hlm-2*w(i)*xl*xm
1366 | hm=hm+2*w(i)*x*xm
1367 | hmm=hmm-2*w(i)*xm**2
1368 | enddo
1369 | hl=hl*nil
1370 | hm=hm*nil
1371 | hll=hll*nil
1372 | hmm=hmm*nil
1373 | hlm=hlm*nil
1374 | endif
1375 | c entropy terms
1376 | if (al.gt.0.) then
1377 | do j=1,nol
1378 | pl=dps1(j)/ps(j)
1379 | pm=dps2(j)/ps(j)
1380 | tl=0
1381 | tm=0
1382 | tll=0
1383 | tmm=0
1384 | tlm=0
1385 | do k=1,nc
1386 | if (epc(k).ne.0.) then
1387 | dc1=dch1(j,k)/chi(j,k)
1388 | dc2=dch2(j,k)/chi(j,k)
1389 | tl=tl+epc(k)*dc1
1390 | tm=tm+epc(k)*dc2
1391 | tll=tll+epc(k)*dc1**2
1392 | tmm=tmm+epc(k)*dc2**2
1393 | tlm=tlm+epc(k)*dc1*dc2
1394 | endif
1395 | enddo
1396 | pz=ps(j)-ex(j)
1397 | sl=sl-dps1(j)*tem(j)+pz*tl
1398 | sm=sm-dps2(j)*tem(j)+pz*tm
1399 | sll=sll-ps(j)*(pl-tl)**2+pz*(tl**2-tll)
1400 | slm=slm-ps(j)*(pl-tl)*(pm-tm)+pz*(tl*tm-tlm)
1401 | smm=smm-ps(j)*(pm-tm)**2+pz*(tm**2-tmm)
1402 | enddo
1403 | endif
1404 |
1405 | ql=hl+al*sl
1406 | qll=hll+al*sll
1407 | qlm=hlm+al*slm
1408 | qm=hm+al*sm
1409 | qmm=hmm+al*smm
1410 | c calculate lambda and mu
1411 | dd=qmm*qll-qlm**2
1412 | dr=abs(dd)/(qll**2+qmm**2)
1413 | c if det of 2X2 system too small, use only mu
1414 | if (dr.lt.1e-3) then
1415 | fla=0
1416 | fmu=-qm/qmm
1417 | else
1418 | fmu=(qlm*ql-qll*qm)/dd
1419 | fla=(qlm*qm-qmm*ql)/dd
1420 | endif
1421 | return
1422 | end
1423 |
1424 | function rrms(f1,eb,iw,f0,n)
1425 | c rms of difference between f1 and f0 (iw=0) or
1426 | c rms distance between f1 and f0 normalized by the error bars eb (iw=1)
1427 | implicit real*8 (a-h,o-z)
1428 | dimension f1(*),eb(*),f0(*)
1429 | s=0
1430 | if (iw.eq.0) then
1431 | do i=1,n
1432 | s=s+(f1(i)-f0(i))**2
1433 | enddo
1434 | else
1435 | do i=1,n
1436 | s=s+((f1(i)-f0(i))/eb(i))**2
1437 | enddo
1438 | endif
1439 | rrms=sqrt(s/(n-1))
1440 | return
1441 | end
1442 |
1443 | function rmsn(x,y)
1444 | implicit real*8 (a-h,o-z)
1445 | dimension x(*),y(*)
1446 | common/folds/nph,nvp
1447 | s=0
1448 | do i=2,nph-1
1449 | do j=2,nvp-1
1450 | i1=i+(j-2)*nph
1451 | i2=i1+nph
1452 | i3=i2+nph
1453 | s0=x(i1-1)+x(i1)+x(i1+1)+x(i2-1)+x(i2+1)+x(i3-1)+x(i3)+x(i3+1)
1454 | s1=y(i1-1)+y(i1)+y(i1+1)+y(i2-1)+y(i2+1)+y(i3-1)+y(i3)+y(i3+1)
1455 | s=s+((s1-s0)/8-(y(i2)-x(i2)))**2
1456 | enddo
1457 | enddo
1458 | s=s/(nph-2)/(nvp-2)
1459 | rmsn=sqrt(s)
1460 | return
1461 | end
1462 |
--------------------------------------------------------------------------------
/build/lib/pydoppler/fortran_code/dop.in:
--------------------------------------------------------------------------------
1 | 0 ih type of likelihood function (ih=1 for chi-squared)
2 | 0 iw iw=1 if error bars are to be read and used
3 | 0.95 1.05 pb0,pb1 range of phases to be ignored
4 | 7 ns smearing width in default map
5 | 8e-4 ac accuracy of convergence
6 | 150 nim max no of iterations
7 | 0.002 1.7 0 al0,alf,nal starting value, factor, max number of alfas
8 | 1.6 clim 'C-aim'
9 | 2 ipri printout control for standard output channel (ipr=2 for full)
10 | 1 norm norm=1 for normalization to flat light curve
11 | 10e5 0 wid,af width and amplitude central absorption fudge
12 | end of parameter input file
13 |
--------------------------------------------------------------------------------
/build/lib/pydoppler/fortran_code/emap.par:
--------------------------------------------------------------------------------
1 | parameter (npm= 28,nvpm= 477,nvm= 144)
2 | parameter (nd=npm*nvpm,nr=0.8*nvm*nvm)
3 | parameter (nt=nvpm*npm+nvm*nvpm*3+2*npm*nvm)
4 | parameter (nri=0.9*nvm*nt/nd,ndi=0.9*nvm*nt/nr)
5 | c parameters for emap routines
6 | parameter (nf=nd,nfp=ndi,nrp=nri)
7 | parameter (ni=nvm,nj=nvm)
8 | parameter (nch=1,nsu=1)
9 |
--------------------------------------------------------------------------------
/build/lib/pydoppler/fortran_code/emap_ori.par:
--------------------------------------------------------------------------------
1 | parameter (npm= 28,nvpm= 354,nvm= 106)
2 | parameter (nd=npm*nvpm,nr=0.8*nvm*nvm)
3 | parameter (nt=nvpm*npm+nvm*nvpm*3+2*npm*nvm)
4 | parameter (nri=0.9*nvm*nt/nd,ndi=0.9*nvm*nt/nr)
5 | c parameters for emap routines
6 | parameter (nf=nd,nfp=ndi,nrp=nri)
7 | parameter (ni=nvm,nj=nvm)
8 | parameter (nch=1,nsu=1)
9 |
--------------------------------------------------------------------------------
/build/lib/pydoppler/fortran_code/fort.10:
--------------------------------------------------------------------------------
1 | nvm not even 83 0
2 |
--------------------------------------------------------------------------------
/build/lib/pydoppler/fortran_code/hclock.f:
--------------------------------------------------------------------------------
1 | subroutine clock(t)
2 | real*8 t
3 | real*4 ta(2)
4 | x=dtime(ta)
5 | t=t+ta(1)
6 | return
7 | end
8 |
--------------------------------------------------------------------------------
/build/lib/pydoppler/fortran_code/iclock.f:
--------------------------------------------------------------------------------
1 | subroutine clock(t)
2 | real*8 t
3 | c ibm-rs clock function
4 | t=mclock()/100.
5 | return
6 | end
7 |
--------------------------------------------------------------------------------
/build/lib/pydoppler/fortran_code/lobe.f:
--------------------------------------------------------------------------------
1 | program stream
2 | c aux program for idl plots of dopmaps
3 | c calculates Roche lobes and integrates path of stream from L1
4 | parameter(nmax=10000)
5 | complex z,w,z1,z2,dz,dw,wk,no,wr,wc,w0,wm1,wi,
6 | * wout(nmax),wkout(nmax)
7 | dimension xout(nmax),yout(nmax),rout(nmax)
8 | open(3,file='lobe.out')
9 | open(4,file='lobe.in')
10 | read(4,*)qm
11 | if (abs(qm-1).lt.1e-4) qm=1e-4
12 | close(4)
13 | rd=0.1
14 | if (qm.le.0.) then
15 | write(3,'(''qm<0: '',f8.5)')qm
16 | close(3)
17 | stop
18 | endif
19 | rl1=rlq1(qm)
20 | c write(*,'('' rlq1'',f8.5)')rl1
21 | write(3,'(f8.5)')qm
22 | call lobes(qm,rl1)
23 | c center of mass rel to M1
24 | cm=qm/(1+qm)
25 | c coordinates of M1 and M2
26 | z1=-cm
27 | z2=1-cm
28 | wm1=conjg(cmplx(0.,-cm))
29 | c start at L1-eps with v=0
30 | eps=1e-3
31 | z=cmplx(rl1-cm-eps,0.)
32 | w=0
33 | c check that we really are near L1
34 | call eqmot(z,w,zp,wp,z1,z2,qm)
35 | write(*,'('' t=0: z,w'',1p4e11.3)')zp,wp
36 | t=0
37 | dt=1e-4
38 | isa=0
39 | it=0
40 | r=1
41 | ist=0
42 | ph=0.
43 | phmax=6
44 | c do while(it.lt.nmax.and.ph.lt.phmax.and.ist.eq.0)
45 | do while(it.lt.nmax.and.ph.lt.phmax)
46 | it=it+1
47 | call intrk(z,w,dt,dz,dw,z1,z2,qm)
48 | z=z+dz
49 | w=w+dw
50 | t=t+dt
51 | if (abs(dz)/abs(z).gt.0.02) dt=dt/2
52 | if (abs(dz)/abs(z).lt.0.005) dt=2*dt
53 | dph=-aimag(z*conjg(z-dz))/abs(z)/abs(z-dz)
54 | ph=ph+dph
55 | c velocity in inertial frame
56 | c change by Guillaume
57 | wi=w+cmplx(0,1.)*z
58 | c unit vector normal to kepler orbit
59 | rold=r
60 | r=abs(z-z1)
61 | if (ist.eq.0.and.rold.lt.r) then
62 | ist=1
63 | rmin=rold
64 | endif
65 | c kepler velocity of circular orbit in potential of M1, rel. to M1
66 | vk=1/sqrt(r*(1+qm))
67 | c unit vector in r
68 | no=conjg(z-z1)/r
69 | wk=-vk*no*cmplx(0.,1.)
70 | c same but rel. to cm, this is velocity in inertial frame
71 | wk=wk+wm1
72 | c velocity normal to disk edge, in rotating frame
73 | dot=no*w
74 | c velocity parallel to disk edge
75 | par=aimag(no*w)
76 | c reflected velocity
77 | wr=w-2*dot*no
78 | c write(*,'(f8.4,1p9e11.3)')t,z,w,wk,wr,r
79 | xout(it)=z+cm
80 | yout(it)=-aimag(z)
81 | rout(it)=sqrt(xout(it)**2+yout(it)**2)
82 | c change by Guillaume
83 | wout(it)=wi
84 | wkout(it)=conjg(wk)
85 | if (it.gt.1) then
86 | x=xout(it)
87 | y=yout(it)
88 | phi=atan(y/x)
89 | if (rout(it).lt.rd.and.rout(it-1).gt.rd) then
90 | c write(*,'('' r,x,y,phi,vs,vk,dot,par'',8f8.3)')
91 | c * rout(it),x,y,phi,real(w),vk,dot,par
92 | c write(*,'('' w,no'',4f8.3)')w,no
93 | x=xout(it-1)
94 | y=yout(it-1)
95 | phi=atan(y/x)
96 | c write(*,'('' r,x,y,phi'',4f8.3)')rout(it-1),x,y,phi
97 | endif
98 | endif
99 | if (isa.eq.0.and.yout(it).lt.0) then
100 | isa=1
101 | ra=abs(z-z1)
102 | wc=conjg(w)+cmplx(0.,1.)*conjg(z-z1)
103 | ang=abs(aimag((z-z1)*conjg(wc)))
104 | endif
105 | enddo
106 | write(3,'(i5)')it
107 | write(3,'(1p5e15.7)')(xout(i),i=1,it)
108 | write(3,'(1p5e15.7)')(yout(i),i=1,it)
109 | write(3,'(1p6e12.4)')(real(wout(i)),i=1,it)
110 | write(3,'(1p6e12.4)')(aimag(wout(i)),i=1,it)
111 | write(3,'(1p6e12.4)')(real(wkout(i)),i=1,it)
112 | write(3,'(1p6e12.4)')(aimag(wkout(i)),i=1,it)
113 | rc=ang**2*(1+qm)
114 | z=rl1-cm
115 | w0=cmplx(0.,1.)*conjg(z-z1)
116 | ang0=abs(aimag((z-z1)*conjg(w0)))
117 | rc0=ang0**2*(1+qm)
118 | write(3,'(3f8.5,'' ra, rc '')')ra,rc,rc0
119 | c write(*,'(3f8.5,'' ra, rc '')')ra,rc,rc0
120 | c write(*,'(2f8.4,'' q, rmin'')')qm,rmin
121 | end
122 |
123 | subroutine intrk(z,w,dt,dz,dw,z1,z2,qm)
124 | complex z,w,dz,dw,z1,z2
125 | complex zp,wp,hz0,hz1,hz2,hz3,hw0,hw1,hw2,hw3,zx,wx
126 | zx=z
127 | wx=w
128 | call eqmot(zx,wx,zp,wp,z1,z2,qm)
129 | hz0=zp*dt
130 | hw0=wp*dt
131 | zx=z+hz0/2
132 | wx=w+hw0/2
133 | call eqmot(zx,wx,zp,wp,z1,z2,qm)
134 | hz1=zp*dt
135 | hw1=wp*dt
136 | zx=z+hz1/2
137 | wx=w+hw1/2
138 | call eqmot(zx,wx,zp,wp,z1,z2,qm)
139 | hz2=zp*dt
140 | hw2=wp*dt
141 | zx=z+hz2
142 | wx=w+hw2
143 | call eqmot(zx,wx,zp,wp,z1,z2,qm)
144 | hz3=zp*dt
145 | hw3=wp*dt
146 | dz=(hz0+2*hz1+2*hz2+hz3)/6
147 | dw=(hw0+2*hw1+2*hw2+hw3)/6
148 | return
149 | end
150 |
151 | subroutine eqmot(z,w,zp,wp,z1,z2,qm)
152 | complex z,w,zp,wp,z1,z2
153 | complex zr1,zr2
154 | zr1=z-z1
155 | zr2=z-z2
156 | c change by Guillaume : - sign in Coriolis
157 | wp=-(qm*zr2/(abs(zr2))**3+zr1/(abs(zr1))**3)/(1+qm)-
158 | * cmplx(0.,2.)*w+z
159 | zp=w
160 | return
161 | end
162 |
163 | function rlq1(q)
164 | c radius (from primary) of L1
165 | if (abs(1-q).lt.1e-4) then
166 | rlq=0.5
167 | return
168 | endif
169 | rl=0
170 | rn=1-q
171 | 2 if (abs(rl/rn-1).gt.1e-4)then
172 | rl=rn
173 | f=q/(1-rl)**2-1/rl**2+(1+q)*rl-q
174 | fa=2*q/(1-rl)**3+2/rl**3+(1+q)
175 | rn=rl-f/fa
176 | goto 2
177 | endif
178 | rlq1=rn
179 | return
180 | end
181 |
182 | function pot(q,x,y,z,pr)
183 | c Roche potential. coordinates centered on M2,
184 | c z along rotation axis, x toward M1
185 | c pr is gradient in radius from M2
186 | c first transform to polar coordinates w/r rotation axis
187 | r=sqrt(x*x+y*y+z*z)
188 | if (r.eq.0) stop 'r=0 in pot'
189 | rh=sqrt(x*x+y*y)
190 | st=rh/r
191 | if (rh.eq.0) then
192 | cf=1
193 | else
194 | cf=x/rh
195 | endif
196 | r2=1/(1+q)
197 | r1=sqrt(1+r**2-2*r*cf*st)
198 | pot=-1/r-1/q/r1-0.5*(1/q+1)*(r2**2+(r*st)**2-2*r2*r*cf*st)
199 | pr=1/r**2+1/q/(r1**3)*(r-cf*st)-0.5*(1/q+1)*2*(r*st*st-r2*cf*st)
200 | return
201 | end
202 |
203 | subroutine lobes(q,rs)
204 | include 'emap.par'
205 | dimension r(ni,nj),ch(ni),ps(nj),x(ni),y(ni)
206 | nc=ni
207 | np=nj
208 | call surf(q,rs,nc,np,r,ch,ps)
209 | write(3,'(2i5,'' ni,nj'')')ni,nj
210 | j=1
211 | do i=1,nc
212 | x(i)=1-r(i,j)*cos(ch(i))
213 | y(i)=-r(i,j)*sin(ch(i))
214 | enddo
215 | write(3,'(8f9.5)')(x(i),i=1,nc),(x(i),i=nc,1,-1)
216 | write(3,'(8f9.5)')(y(i),i=1,nc),(-y(i),i=nc,1,-1)
217 | call surf(1/q,1-rs,nc,np,r,ch,ps)
218 | j=1
219 | do i=1,nc
220 | x(i)=r(i,j)*cos(ch(i))
221 | y(i)=r(i,j)*sin(ch(i))
222 | enddo
223 | write(3,'(8f9.5)')(x(i),i=1,nc),(x(i),i=nc,1,-1)
224 | write(3,'(8f9.5)')(y(i),i=1,nc),(-y(i),i=nc,1,-1)
225 | return
226 | end
227 |
228 | subroutine surf(q,rs,nc,np,r,ch,ps)
229 | c Roche surface around M2, coordinates on surface are ch, ps.
230 | c ch: polar angle from direction to M1; ps: corresponding azimuth, counting
231 | c from orbital plane.
232 | c q:mass ratio, rs: radius of surface at point facing M1
233 | c nc, np: number of chi's, psi's.
234 | c output:
235 | c r(nf,nt): radius. ch, ps: chi and psi arrays
236 | include 'emap.par'
237 | dimension r(ni,nj),ch(*),ps(*)
238 | if (nc.gt.ni) stop 'nc>ni'
239 | if (np.gt.nj) stop 'np>nj'
240 | pi=2*asin(1.)
241 | dc=pi/nc
242 | ch(1)=0
243 | do i=1,nc
244 | ch(i)=float((i-1))*pi/(nc-1)
245 | enddo
246 | ps(1)=0
247 | do j=1,np
248 | ps(j)=float((j-1))*2*pi/np
249 | enddo
250 | rs1=1-rs
251 | fs=pot(q,rs1,0.,0.,pr)
252 | c max no of iterations
253 | im=20
254 | do i=1,np
255 | cp=cos(ps(i))
256 | sp=sin(ps(i))
257 | rx=(1-dc)*rs1
258 | r(1,i)=rs1
259 | do k=2,nc
260 | x=cos(ch(k))
261 | sc=sin(ch(k))
262 | y=sc*cp
263 | z=sc*sp
264 | j=0
265 | f=1
266 | do while (j.lt.im.and.abs(f-fs).gt.1e-4.or.j.eq.0.)
267 | j=j+1
268 | r1=rx
269 | f=pot(q,r1*x,r1*y,r1*z,pr)
270 | rx=r1-(f-fs)/pr
271 | if (rx.gt.rs1) rx=rs1
272 | enddo
273 | if (j.ge.im) then
274 | write(*,'('' no conv in surf; k,i,ch,ps'',2i4,2f7.3)')
275 | * k,i,ch(k),ps(i)
276 | stop
277 | endif
278 | r(k,i)=rx
279 | enddo
280 | enddo
281 | return
282 | end
283 |
--------------------------------------------------------------------------------
/build/lib/pydoppler/fortran_code/makefile:
--------------------------------------------------------------------------------
1 | # IBM aix
2 | # with error traps and bounds checks:
3 | # compile=cp -f iclock.f clock.f ; xlf -D -C -g -q flttrap
4 | # optimized:
5 | # compile=cp -f iclock.f clock.f ; xlf -O
6 | # optimized, with extended memory allocation of 2048 MB:
7 | #compile=cp -f iclock.f clock.f ; xlf -bmaxdata:2048000000 -bmaxstack:2048000000 -O
8 |
9 | # DEC alpha with debug and bound checks
10 | # compile=cp -f cclock.f clock.f ; f90 -C -g -ladebug
11 | # optimized:
12 | # compile=cp -f cclock.f clock.f ; g77 -O
13 |
14 | # HP HP/UX
15 | # compile=cp -f hclock.f clock.f ; f77 -O +U77
16 | # with error traps and bounds checks:
17 | # compile=cp -f hclock.f clock.f ; f77 +FPVZO -g -C -O +U77
18 |
19 | # SUN sparc
20 | #compile=cp -f cclock.f clock.f ; gfortran -O
21 | #compile=cp -f cclock.f clock.f ; g77 -O -fno-globals -Wno-globals
22 | #-fno-globals
23 |
24 | compile=cp -f cclock.f clock.f ; gfortran -O -w -fallow-argument-mismatch
25 |
26 | dop.out: dopin dop.in dopp
27 | dopp
28 | dopp: dop.f emap.par
29 | $(compile) -o dopp dop.f clock.f
30 |
31 | lobe.out: lobe lobe.in
32 | lobe
33 | lobe: lobe.f
34 | $(compile) -o lobe lobe.f
35 |
--------------------------------------------------------------------------------
/build/lib/pydoppler/mynormalize.py:
--------------------------------------------------------------------------------
1 | # The Normalize class is largely based on code provided by Sarah Graves.
2 |
3 | import numpy as np
4 | import numpy.ma as ma
5 |
6 | import matplotlib.cbook as cbook
7 | from matplotlib.colors import Normalize
8 |
9 |
10 | class MyNormalize(Normalize):
11 | '''
12 | A Normalize class for imshow that allows different stretching functions
13 | for astronomical images.
14 | '''
15 |
16 | def __init__(self, stretch='linear', exponent=5, vmid=None, vmin=None,
17 | vmax=None, clip=False):
18 | '''
19 | Initalize an APLpyNormalize instance.
20 |
21 | Optional Keyword Arguments:
22 |
23 | *vmin*: [ None | float ]
24 | Minimum pixel value to use for the scaling.
25 |
26 | *vmax*: [ None | float ]
27 | Maximum pixel value to use for the scaling.
28 |
29 | *stretch*: [ 'linear' | 'log' | 'sqrt' | 'arcsinh' | 'power' ]
30 | The stretch function to use (default is 'linear').
31 |
32 | *vmid*: [ None | float ]
33 | Mid-pixel value used for the log and arcsinh stretches. If
34 | set to None, a default value is picked.
35 |
36 | *exponent*: [ float ]
37 | if self.stretch is set to 'power', this is the exponent to use.
38 |
39 | *clip*: [ True | False ]
40 | If clip is True and the given value falls outside the range,
41 | the returned value will be 0 or 1, whichever is closer.
42 | '''
43 |
44 | if vmax < vmin:
45 | raise Exception("vmax should be larger than vmin")
46 |
47 | # Call original initalization routine
48 | Normalize.__init__(self, vmin=vmin, vmax=vmax, clip=clip)
49 |
50 | # Save parameters
51 | self.stretch = stretch
52 | self.exponent = exponent
53 |
54 | if stretch == 'power' and np.equal(self.exponent, None):
55 | raise Exception("For stretch=='power', an exponent should be specified")
56 |
57 | if np.equal(vmid, None):
58 | if stretch == 'log':
59 | if vmin > 0:
60 | self.midpoint = vmax / vmin
61 | else:
62 | raise Exception("When using a log stretch, if vmin < 0, then vmid has to be specified")
63 | elif stretch == 'arcsinh':
64 | self.midpoint = -1. / 30.
65 | else:
66 | self.midpoint = None
67 | else:
68 | if stretch == 'log':
69 | if vmin < vmid:
70 | raise Exception("When using a log stretch, vmin should be larger than vmid")
71 | self.midpoint = (vmax - vmid) / (vmin - vmid)
72 | elif stretch == 'arcsinh':
73 | self.midpoint = (vmid - vmin) / (vmax - vmin)
74 | else:
75 | self.midpoint = None
76 |
77 | def __call__(self, value, clip=None):
78 |
79 | #read in parameters
80 | method = self.stretch
81 | exponent = self.exponent
82 | midpoint = self.midpoint
83 |
84 | # ORIGINAL MATPLOTLIB CODE
85 |
86 | if clip is None:
87 | clip = self.clip
88 |
89 | if cbook.iterable(value):
90 | vtype = 'array'
91 | val = ma.asarray(value).astype(np.float)
92 | else:
93 | vtype = 'scalar'
94 | val = ma.array([value]).astype(np.float)
95 |
96 | self.autoscale_None(val)
97 | vmin, vmax = self.vmin, self.vmax
98 | if vmin > vmax:
99 | raise ValueError("minvalue must be less than or equal to maxvalue")
100 | elif vmin == vmax:
101 | return 0.0 * val
102 | else:
103 | if clip:
104 | mask = ma.getmask(val)
105 | val = ma.array(np.clip(val.filled(vmax), vmin, vmax),
106 | mask=mask)
107 | result = (val - vmin) * (1.0 / (vmax - vmin))
108 |
109 | # CUSTOM APLPY CODE
110 |
111 | # Keep track of negative values
112 | negative = result < 0.
113 |
114 | if self.stretch == 'linear':
115 |
116 | pass
117 |
118 | elif self.stretch == 'log':
119 |
120 | result = ma.log10(result * (self.midpoint - 1.) + 1.) \
121 | / ma.log10(self.midpoint)
122 |
123 | elif self.stretch == 'sqrt':
124 |
125 | result = ma.sqrt(result)
126 |
127 | elif self.stretch == 'arcsinh':
128 |
129 | result = ma.arcsinh(result / self.midpoint) \
130 | / ma.arcsinh(1. / self.midpoint)
131 |
132 | elif self.stretch == 'power':
133 |
134 | result = ma.power(result, exponent)
135 |
136 | else:
137 |
138 | raise Exception("Unknown stretch in APLpyNormalize: %s" %
139 | self.stretch)
140 |
141 | # Now set previously negative values to 0, as these are
142 | # different from true NaN values in the FITS image
143 | result[negative] = -np.inf
144 |
145 | if vtype == 'scalar':
146 | result = result[0]
147 |
148 | return result
149 |
150 | def inverse(self, value):
151 |
152 | # ORIGINAL MATPLOTLIB CODE
153 |
154 | if not self.scaled():
155 | raise ValueError("Not invertible until scaled")
156 |
157 | vmin, vmax = self.vmin, self.vmax
158 |
159 | # CUSTOM APLPY CODE
160 |
161 | if cbook.iterable(value):
162 | val = ma.asarray(value)
163 | else:
164 | val = value
165 |
166 | if self.stretch == 'linear':
167 |
168 | pass
169 |
170 | elif self.stretch == 'log':
171 |
172 | val = (ma.power(10., val * ma.log10(self.midpoint)) - 1.) / (self.midpoint - 1.)
173 |
174 | elif self.stretch == 'sqrt':
175 |
176 | val = val * val
177 |
178 | elif self.stretch == 'arcsinh':
179 |
180 | val = self.midpoint * \
181 | ma.sinh(val * ma.arcsinh(1. / self.midpoint))
182 |
183 | elif self.stretch == 'power':
184 |
185 | val = ma.power(val, (1. / self.exponent))
186 |
187 | else:
188 |
189 | raise Exception("Unknown stretch in APLpyNormalize: %s" %
190 | self.stretch)
191 |
192 | return vmin + val * (vmax - vmin)
--------------------------------------------------------------------------------
/build/lib/pydoppler/test_data/output_images/Average_Spec.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alymantara/pydoppler/dc2d395680862159d74f164f44c5465041c5e8fd/build/lib/pydoppler/test_data/output_images/Average_Spec.png
--------------------------------------------------------------------------------
/build/lib/pydoppler/test_data/output_images/Doppler_Map.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alymantara/pydoppler/dc2d395680862159d74f164f44c5465041c5e8fd/build/lib/pydoppler/test_data/output_images/Doppler_Map.png
--------------------------------------------------------------------------------
/build/lib/pydoppler/test_data/output_images/Reconstruction.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alymantara/pydoppler/dc2d395680862159d74f164f44c5465041c5e8fd/build/lib/pydoppler/test_data/output_images/Reconstruction.png
--------------------------------------------------------------------------------
/build/lib/pydoppler/test_data/output_images/Trail.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alymantara/pydoppler/dc2d395680862159d74f164f44c5465041c5e8fd/build/lib/pydoppler/test_data/output_images/Trail.png
--------------------------------------------------------------------------------
/build/lib/pydoppler/test_data/sample_script.py:
--------------------------------------------------------------------------------
1 | import pydoppler
2 | import matplotlib.pyplot as plt
3 | # Import sample data
4 | # <<< COMMENT OUT IF YOU DONT NEED THE TEST DATASET >>>
5 | pydoppler.test_data()
6 |
7 | # Load base object for tomography
8 | dop = pydoppler.spruit()
9 |
10 | # Basic data for the tomography to work
11 | dop.object = 'U Gem'
12 | dop.base_dir = 'ugem99' # Base directory for input spectra
13 | dop.list = 'ugem0all.fas' # Name of the input file
14 | dop.lam0 = 6562.8 # Wavelength zero in units of the original spectra
15 | dop.delta_phase = 0.003
16 | dop.delw = 35 # size of Doppler map in wavelenght
17 | dop.overs = 0.3 # between 0-1, Undersampling of the spectra. 1= Full resolution
18 | dop.gama = 36.0 # km /s
19 | dop.nbins = 28
20 |
21 | # Read in the individual spectra and orbital phase information
22 | dop.Foldspec()
23 |
24 | # Normalise the spectra
25 | dop.Dopin(continnum_band=[6500,6537,6591,6620],
26 | plot_median=False,poly_degree=2)
27 |
28 | # Perform tomography
29 | dop.Syncdop(ndi=0.7,nri=0.9)
30 |
31 | # This routine will display the outcome of the Doppler tomography.
32 | # You can overplot contours and streams.
33 | cb,data = dop.Dopmap(limits=[0.05,0.99],colorbar=False,cmaps=plt.cm.magma_r,
34 | smooth=False,remove_mean=False)
35 |
36 | # Overplot the donor contours, keplerian and ballistic streams
37 | qm=0.35
38 | k1 = 107
39 | inc=70
40 | m1=1.2
41 | porb=0.1769061911
42 |
43 | pydoppler.stream(qm,k1,porb,m1,inc)
44 |
45 | # Always check that reconstructed spectra looks like the original one. A good
46 | # rule of thumb "If a feature on the Doppler tomogram isn not in the trail,
47 | # most likely its not real!"
48 | cb2,cb3,dmr,dm = dop.Reco(colorbar=False,limits=[.05,0.95],cmaps=plt.cm.magma_r)
49 |
--------------------------------------------------------------------------------
/build/lib/pydoppler/test_data/ugem99/ugem0all.fas:
--------------------------------------------------------------------------------
1 | txhugem4004 0.7150 0.03930
2 | txhugem4005 0.7794 0.03930
3 | txhugem4006 0.8348 0.03930
4 | txhugem4007 0.8942 0.03930
5 | txhugem4008 0.9518 0.03930
6 | txhugem4009 0.0072 0.03930
7 | txhugem4010 0.0632 0.03930
8 | txhugem4011 0.1186 0.03930
9 | txhugem4012 0.1745 0.03930
10 | txhugem4013 0.2344 0.03930
11 | txhugem4014 0.2904 0.03930
12 | txhugem4015 0.3724 0.03930
13 | txhugem4016 0.4283 0.03930
14 | txhugem4017 0.4866 0.03930
15 | txhugem4018 0.5425 0.03930
16 | txhugem4019 0.5979 0.03930
17 | txhugem4020 0.6544 0.03930
18 | txhugem4021 0.7098 0.03930
19 | txhugem4022 0.7652 0.03930
20 | txhugem4023 0.8195 0.03930
21 | txhugem4024 0.8772 0.03930
22 | txhugem4025 0.9269 0.03930
23 | txhugem4026 0.9614 0.03930
24 | txhugem4027 0.9959 0.03930
25 | txhugem4028 0.0304 0.03930
26 | txhugem4029 0.0648 0.03930
27 | txhugem4030 0.1027 0.03930
28 | txhugem4031 0.1372 0.03930
29 |
--------------------------------------------------------------------------------
/dist/pydoppler-0.2.0-py3-none-any.whl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alymantara/pydoppler/dc2d395680862159d74f164f44c5465041c5e8fd/dist/pydoppler-0.2.0-py3-none-any.whl
--------------------------------------------------------------------------------
/dist/pydoppler-0.2.0.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alymantara/pydoppler/dc2d395680862159d74f164f44c5465041c5e8fd/dist/pydoppler-0.2.0.tar.gz
--------------------------------------------------------------------------------
/pydoppler.egg-info/PKG-INFO:
--------------------------------------------------------------------------------
1 | Metadata-Version: 2.1
2 | Name: pydoppler
3 | Version: 0.2.0
4 | Summary: A python wrapper for Henk Spruit's doppler tomography sowftare
5 | Home-page: https://github.com/alymantara/pydoppler
6 | Author: Juan V. Hernandez Santisteban
7 | Author-email: jvhs1@st-andrews.ac.uk
8 | License: UNKNOWN
9 | Description: UNKNOWN
10 | Platform: UNKNOWN
11 | Classifier: Programming Language :: Python :: 3
12 | Classifier: License :: OSI Approved :: MIT License
13 | Classifier: Operating System :: OS Independent
14 | Description-Content-Type: text/markdown
15 |
--------------------------------------------------------------------------------
/pydoppler.egg-info/SOURCES.txt:
--------------------------------------------------------------------------------
1 | README.md
2 | pydoppler
3 | setup.cfg
4 | setup.py
5 | pydoppler/__init__.py
6 | pydoppler/mynormalize.py
7 | pydoppler/pydoppler.py
8 | pydoppler.egg-info/PKG-INFO
9 | pydoppler.egg-info/SOURCES.txt
10 | pydoppler.egg-info/dependency_links.txt
11 | pydoppler.egg-info/top_level.txt
12 | pydoppler/fortran_code/cclock.f
13 | pydoppler/fortran_code/clock.f
14 | pydoppler/fortran_code/dop.f
15 | pydoppler/fortran_code/dop.in
16 | pydoppler/fortran_code/emap.par
17 | pydoppler/fortran_code/emap_ori.par
18 | pydoppler/fortran_code/fort.10
19 | pydoppler/fortran_code/hclock.f
20 | pydoppler/fortran_code/iclock.f
21 | pydoppler/fortran_code/lobe.f
22 | pydoppler/fortran_code/makefile
23 | pydoppler/test_data/sample_script.py
24 | pydoppler/test_data/output_images/Average_Spec.png
25 | pydoppler/test_data/output_images/Doppler_Map.png
26 | pydoppler/test_data/output_images/Reconstruction.png
27 | pydoppler/test_data/output_images/Trail.png
28 | pydoppler/test_data/ugem99/txhugem4004
29 | pydoppler/test_data/ugem99/txhugem4005
30 | pydoppler/test_data/ugem99/txhugem4006
31 | pydoppler/test_data/ugem99/txhugem4007
32 | pydoppler/test_data/ugem99/txhugem4008
33 | pydoppler/test_data/ugem99/txhugem4009
34 | pydoppler/test_data/ugem99/txhugem4010
35 | pydoppler/test_data/ugem99/txhugem4011
36 | pydoppler/test_data/ugem99/txhugem4012
37 | pydoppler/test_data/ugem99/txhugem4013
38 | pydoppler/test_data/ugem99/txhugem4014
39 | pydoppler/test_data/ugem99/txhugem4015
40 | pydoppler/test_data/ugem99/txhugem4016
41 | pydoppler/test_data/ugem99/txhugem4017
42 | pydoppler/test_data/ugem99/txhugem4018
43 | pydoppler/test_data/ugem99/txhugem4019
44 | pydoppler/test_data/ugem99/txhugem4020
45 | pydoppler/test_data/ugem99/txhugem4021
46 | pydoppler/test_data/ugem99/txhugem4022
47 | pydoppler/test_data/ugem99/txhugem4023
48 | pydoppler/test_data/ugem99/txhugem4024
49 | pydoppler/test_data/ugem99/txhugem4025
50 | pydoppler/test_data/ugem99/txhugem4026
51 | pydoppler/test_data/ugem99/txhugem4027
52 | pydoppler/test_data/ugem99/txhugem4028
53 | pydoppler/test_data/ugem99/txhugem4029
54 | pydoppler/test_data/ugem99/txhugem4030
55 | pydoppler/test_data/ugem99/txhugem4031
56 | pydoppler/test_data/ugem99/ugem0all.fas
--------------------------------------------------------------------------------
/pydoppler.egg-info/dependency_links.txt:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/pydoppler.egg-info/top_level.txt:
--------------------------------------------------------------------------------
1 | pydoppler
2 |
--------------------------------------------------------------------------------
/pydoppler/__init__.py:
--------------------------------------------------------------------------------
1 | __modules__ = ['pydoppler']
2 | from .pydoppler import spruit, rebin_trail, stream, test_data
3 |
4 | __version__ = "0.2.0"
5 |
--------------------------------------------------------------------------------
/pydoppler/fortran_code/cclock.f:
--------------------------------------------------------------------------------
1 | subroutine clock(t)
2 | real*8 t
3 | real*4 ta(2)
4 | x=dtime(ta)
5 | t=t+ta(1)
6 | return
7 | end
8 |
--------------------------------------------------------------------------------
/pydoppler/fortran_code/clock.f:
--------------------------------------------------------------------------------
1 | subroutine clock(t)
2 | real*8 t
3 | real*4 ta(2)
4 | x=dtime(ta)
5 | t=t+ta(1)
6 | return
7 | end
8 |
--------------------------------------------------------------------------------
/pydoppler/fortran_code/dop.f:
--------------------------------------------------------------------------------
1 | program dopmap
2 | c Version 2.0
3 | c HCS 3-3-1999
4 | c version for arbitrary phase bins
5 | implicit real*8 (a-h,o-z)
6 | real*4 dpx
7 | include 'emap.par'
8 | common/phases/dpha(npm)
9 | c the 'd' lines are the nonsense IBM machines need to make them stop on an overflow.
10 | c include '/usr/include/fpdc.h'
11 | c include '/usr/include/fexcp.h'
12 | dimension dat(nd),pha(npm),vp(nvpm)
13 | real*4 p(ndi,nr),pt(nri,nd)
14 | dimension vmo(nr),vmb(nr),dato(nd),datb(nd),eb(nd)
15 | dimension reco(nvm,nvm),dpxu(nvm,nvm)
16 | character*20 spec
17 | character*80 idat
18 | common /folds/ nph,nvp
19 | common /foldn/ nv,indx(nr),indy(nr),nol
20 | common /difpix/ dpx(nr,4)
21 | common /cabsf/ wid,af
22 | c fpstat(fpve)=.true.
23 | c fpstat(fpoe)=.true.
24 | c fpstat(fpue)=.true.
25 | c fpstat(fpze)=.true.
26 | c fpstat(fpxe)=.false.
27 | c call fpsets(fpstat)
28 | c call signal(sigtrap,xl__trce)
29 | pi2=8*atan(1.)
30 |
31 | c read parameter file
32 | call repar(ns,ac,nim,
33 | * al0,alf,nal,clim,ipri,spec,ih,iw,pb0,pb1,norm)
34 | c set baseline level to be added to spectrum (fraction of the avg of entire spectrum)
35 | bfa=0.1
36 | write(*,'('' HOLAQQ NOW 2Q'')')
37 | c read input data
38 | open(4,file=spec)
39 | read(4,*) nph,nvp,w0
40 | read(4,'(a)') idat
41 | if (nph.ne.npm) call erri('nph.ne.npm',nph,npm)
42 | if (nvp.ne.nvpm) call erri('nvp.ne.npvm',nvp,nvpm)
43 | nv=nvm
44 | nil=nvp*nph
45 | read(4,*) (pha(i),i=1,nph)
46 | read(4,*) iph
47 | if (iph.eq.1) then
48 | read(4,*) (dpha(i),i=1,nph)
49 | else
50 | do i=1,nph
51 | dpha(i)=1./nph
52 | enddo
53 | endif
54 | do i=1,nph
55 | pha(i)=pha(i)*pi2
56 | dpha(i)=dpha(i)*pi2
57 | enddo
58 | c make blanking array corresponding to (pb0,pb1)
59 | call blanks(pha,nph,pb0,pb1)
60 | read(4,*) (vp(i),i=1,nvp)
61 | read(4,*) (dat(i),i=1,nil)
62 | if (iw.eq.1) read(4,*) (eb(i),i=1,nil)
63 | close(4)
64 | call clock(t1)
65 | call prom(va,nv,pha,nph,vp,nvp,pt,p)
66 | call clock(t2)
67 | write(10,'('' cpu for geometry'',f10.2)')t2-t1
68 | if (ipri.gt.0) write(*,'('' cpu for geometry'',f10.2)')t2-t1
69 | t1=t2
70 | c compute a baseline flux to add to dat
71 | call basel(dat,nph,nvp,bfa,bf,nv,va,pt,datb,vmb)
72 | c add baseline to dat, put weighting map into dato
73 | do i=1,nil
74 | dat(i)=dat(i)+datb(i)
75 | if (dat(i).lt.bf/3) then
76 | dat(i)=1e-5*bf
77 | dato(i)=0
78 | else
79 | dato(i)=1
80 | endif
81 | enddo
82 | c normalize to constant wavelength-integrated flux
83 | if (norm.eq.1) call norms(dat,pb0,pb1,pha,nph,nvp)
84 | c sum of light
85 | sdat=0
86 | do i=1,nil
87 | sdat=sdat+dat(i)
88 | enddo
89 |
90 | c make error bars relative
91 | do i=1,nil
92 | eb(i)=eb(i)/dat(i)
93 | enddo
94 | c weights
95 | call weighd(dat,datb,pha,nph,nvp,eb,iw)
96 |
97 | c reconstruction
98 | c initialize (flat)
99 | write(*,'('' HOLAQQQQ'')')
100 | do j=1,nol
101 | vmo(j)=sdat/nol
102 | enddo
103 | c decreasing sequence of alfas until required fit to input data
104 | call alfs(dat,eb,iw,p,pt,al0,alf,nal,ac,nim,vmo,
105 | * dato,nil,nol,nit,al,rr,ns,ih,clim,ipri,ier,t2,sx)
106 | if (ier.eq.2) then
107 | write(*,'('' no converged models, returning starting image'')')
108 | al=al0
109 | rr=100
110 | endif
111 | if (ier.eq.1) write(*,'('' last converged model has rr='',
112 | * f7.4,'', >clim='',f7.4)') rr,clim
113 | if (ipri.gt.0) write(*,'('' entropy'', 1pe12.4)')sx
114 | c make an identification number
115 | s1=0
116 | s2=0
117 | m=max(1,nol/30)
118 | do i=1,nol,m
119 | s1=s1+vmo(i)
120 | enddo
121 | m=max(1,nil/30)
122 | do i=1,nil,m
123 | s2=s2+dat(i)
124 | enddo
125 | fident=sin(100*(s1/s2))
126 | c normalize dopmap to input units (probably mJy's) x Hz per (cm/s)^2 in v-space
127 | c velocity grid size
128 | dv=2*va/(nv-1)
129 | delv2=dv**2
130 | c frequency grid size
131 | dev=(vp(nvp)-vp(1))/(nvp-1)
132 | denu=dev/w0*1e8
133 | do i=1,nol
134 | vmo(i)=(vmo(i)-vmb(i))/delv2*denu
135 | enddo
136 | c make unfolded reconstructed image
137 | do j=1,nol
138 | reco(indx(j),indy(j))=vmo(j)
139 | enddo
140 |
141 | open(3,file='dop.out')
142 | c write array sizes, w0, identification
143 | write(3,'(3i5,f10.3,f20.15)')nph,nvp,nvm,w0,fident
144 | c copy second line of input data file
145 | write(3,*)idat
146 | c copy phase and velocity coordinates of input spectrum
147 | write(3,'(1p8e13.4E3)')(pha(i),i=1,nph)
148 | write(3,*)iph
149 | if (iph.eq.1) write(3,'(1p8e13.4E3)')(dpha(i),i=1,nph)
150 | write(3,'(1p8e13.4E3)')(vp(i),i=1,nvp)
151 | c write input spectrum
152 | write(3,'(1p8e13.4E3)')(dat(i)-datb(i),i=1,nil)
153 | write(3,'(2i3,2f7.3,i4,2e13.4E3,f7.3,i3,e13.4E3,f7.3)')
154 | * ih,iw,pb0/pi2,pb1/pi2,ns,ac,al,clim,norm,wid,af
155 | c write dopmap and reco
156 | write(3,'(i4,1pe13.4E3,'' dopmap '')')nv,va
157 | write(3,'(1p6e13.4E3)')((reco(i,j),j=1,nv),i=1,nv)
158 | write(3,'(i6,'' reconstructed data '')')nil
159 | write(3,'(1p6e13.4E3)')(dato(i)-datb(i),i=1,nil)
160 | write(3,'(i6,'' 4 change maps '')')nv
161 | do ii=1,4
162 | do j=1,nol
163 | dpxu(indx(j),indy(j))=dpx(j,ii)
164 | enddo
165 | write(3,'(1p6e13.4E3)')((dpxu(i,j),j=1,nv),i=1,nv)
166 | enddo
167 | close(3)
168 | end
169 |
170 | c block data
171 | c include '/usr/include/fpdc.h'
172 | c include '/usr/include/fpdt.h'
173 | c end
174 |
175 | subroutine basel(dat,nph,nvp,bfa,bf,nv,va,pt,datb,vmb)
176 | c compute a baseline flux to get a flat background level in dopmap
177 | c datb is the data corresponding to a flat (circular) dopmap
178 | c vmb is the corresponding flat dopmap
179 | implicit real*8 (a-h,o-z)
180 | include 'emap.par'
181 | common /foldn/ nvf,indx(nr),indy(nr),nol
182 | dimension dat(*),datb(*),vmb(*)
183 | if (nol.gt.nr) call errb('nol>nr',nol,nr)
184 |
185 | c make circle of radius va on a zero background
186 | fv2=nv/2.
187 | dv=2*va/(nv-1)
188 | do ir=1,nol
189 | ix=indx(ir)
190 | iy=indy(ir)
191 | vx=dv*(ix-fv2-0.5)
192 | vy=dv*(iy-fv2-0.5)
193 | v=sqrt(vx**2+vy**2)
194 | vmb(ir)=0.
195 | if (v.lt.va) vmb(ir)=1
196 | enddo
197 |
198 | nil=nph*nvp
199 | c produce spectrum from this map
200 | call fproj(pt,nil,nol,vmb,datb)
201 | c value at v=0
202 | d0=datb(nvp/2*nph)
203 | c find avg of dat
204 | avg=0.
205 | do i=1,nil
206 | avg=avg+dat(i)
207 | enddo
208 | avg=avg/nil
209 | c baseline level to add
210 | bf=bfa*avg
211 | c normalize datb
212 | do i=1,nil
213 | datb(i)=bf*datb(i)/d0
214 | enddo
215 | c normalize background map
216 | do j=1,nol
217 | vmb(j)=vmb(j)*bf/d0
218 | enddo
219 | return
220 | end
221 |
222 | subroutine blanks(pha,nph,pb0,pb1)
223 | c make blanking array corresponding to (pb0,pb1)
224 | c pb0-pb1: phase range with weight 0 (used for ignoring eclipsed part of data)
225 | implicit real*8 (a-h,o-z)
226 | include 'emap.par'
227 | dimension pha(*)
228 | common/blank/bl(npm)
229 | logical bl
230 | pi2=8*atan(1.)
231 | c get max and min values of phase
232 | phmin=pha(1)
233 | phmax=pha(1)
234 | do i=2,nph
235 | if (pha(i).lt.phmin) phmin=pha(i)
236 | if (pha(i).gt.phmax) phmax=pha(i)
237 | enddo
238 | c number of cycles present
239 | nphmi=int(phmin/pi2)
240 | if (nphmi.lt.0.) nphmi=nphmi-1
241 | nphma=int(phmax/pi2)
242 | if (nphma.lt.0.) nphma=nphma-1
243 | c reduce blanking region to phases around 0
244 | npb1=int(pb1/pi2)
245 | if (npb1.lt.0.) npb1=npb1-1
246 | pb0=pb0-npb1*pi2
247 | pb1=pb1-npb1*pi2
248 | do i=1,nph
249 | c use only non-blanked region for making average
250 | bl(i)=.false.
251 | do ic=nphmi,nphma+1
252 | if (pha(i).gt.pb0+ic*pi2.and.pha(i).lt.pb1+ic*pi2)
253 | * bl(i)=.true.
254 | enddo
255 | enddo
256 | return
257 | end
258 |
259 | subroutine norms(dat,pb0,pb1,pha,nph,nvp)
260 | c normalize by a phase-dependent factor to make wavelength-integrated
261 | c light constant with phase.
262 | implicit real*8 (a-h,o-z)
263 | include 'emap.par'
264 | dimension dat(npm,nvpm),pha(*),wi(npm)
265 | common/blank/bl(npm)
266 | logical bl
267 | pi2=8*atan(1.)
268 | ws=0
269 | np=0
270 | c use only non-blanked region for making average
271 | do i=1,nph
272 | wi(i)=0
273 | if (.not.bl(i)) then
274 | np=np+1
275 | do j=1,nvp
276 | wi(i)=wi(i)+dat(i,j)
277 | enddo
278 | endif
279 | ws=ws+wi(i)
280 | enddo
281 | ws=ws/np
282 | do i=1,nph
283 | wi(i)=wi(i)/ws
284 | enddo
285 | c measure minimum of wi
286 | wim=0
287 | do i=1,nph
288 | if (wi(i).lt.wim) wim=wi(i)
289 | enddo
290 | c set an overall level to be added before normalization
291 | wl=0
292 | wlm=0.3
293 | if (wim.lt.wlm) then wl=wlm-wim
294 | do i=1,nph
295 | if (wi(i).ne.0.) then
296 | do j=1,nvp
297 | dat(i,j)=dat(i,j)*(1+wl)/(wi(i)+wl)
298 | enddo
299 | endif
300 | enddo
301 | return
302 | end
303 |
304 | subroutine alfs(dat,eb,iw,p,pt,al0,alf,nal,ac,nim,vmo,
305 | * dato,nil,nol,nit,alx,rr,ns,ih,clim,ipri,ier,t2,sx)
306 | c sequence of models with decreasing alfas, starting at al0, in factors
307 | c of alf, max no of models nal, each converged to accuracy ac, until
308 | c rms difference with input data dat is less than clim
309 | c ier=0: normal return
310 | c ier=1: last converged model differs more than clim from input light curve
311 | c ier=2: no converged models in entire sequence
312 | implicit real*8 (a-h,o-z)
313 | include 'emap.par'
314 | c dopmaps
315 | dimension vm1(nr),vmo(*)
316 | c projection matrix
317 | real*4 p(nfp,nr),pt(nrp,nf)
318 | c input data
319 | dimension dat(nd),eb(nd),dat1(nd),dato(nd)
320 | c parameters of penalty functions
321 | logical cont
322 | ier=0
323 | c copy input into temporary image
324 | do j=1,nol
325 | vm1(j)=vmo(j)
326 | enddo
327 | c initialize number of converged models
328 | nco=0
329 | c alpha- loop
330 | rr=100
331 | ial=0
332 | cont=.true.
333 | call clock(t2)
334 | t1=t2
335 | c if nal<0 converge abs(nal) models irrespective of clim
336 | if (nal.lt.0) then
337 | nal1=-nal
338 | else
339 | nal1=nal
340 | endif
341 | do while (ial.lt.nal1.and.(rr.gt.clim.or.nal.lt.0).and.cont)
342 | ial=ial+1
343 | c next alfa value
344 | if (nal.lt.0) then
345 | al=al0*alf**(1-ial)
346 | else
347 | al=alfa(al0,ial,alf,rr,clim)
348 | endif
349 | aci=ac
350 | flim=1e5
351 | c converge with Lucy's ME scheme
352 | call rldop(dat,p,pt,al,ac,flim,nim,vm1,nil,nol,nit,hs,
353 | * ns,ih,ipri,sf,ierr)
354 | if (ierr.eq.1) write(10,'('' not converged'')')
355 | if (ierr.eq.2) write(10,'('' not monotonic'')')
356 | if (ierr.eq.3) write(10,'('' not converged, not monotonic'')')
357 | if (ierr.eq.4) write(10,'('' stuck at vanishing updates'')')
358 | if (ipri.gt.0) then
359 | if (ierr.eq.1) write(*,'('' not converged'')')
360 | if (ierr.eq.2) write(*,'('' not monotonic'')')
361 | if (ierr.eq.3) write(*,'('' not converged, not monotonic'')')
362 | if (ierr.eq.4) write(*,'('' stuck at vanishing updates'')')
363 | endif
364 | c reconstructed spectrum
365 | call fproj(pt,nil,nol,vm1,dat1)
366 | c converged at this alpha, save.
367 | nco=nco+1
368 | do j=1,nol
369 | vmo(j)=vm1(j)
370 | enddo
371 | do k=1,nil
372 | dato(k)=dat1(k)
373 | enddo
374 | alx=al
375 | sx=sf
376 | c rms difference w/r input light curve
377 | rr0=rr
378 | rr=rrms(dat,eb,iw,dat1,nil)
379 | if (iw.eq.0) then
380 | c measure accuracy of reconstruction relative to point-to-point noise in data
381 | rn=rmsn(dat,dat1)
382 | rr=rr/rn
383 | endif
384 | c summary of this iteration to activity log file
385 | write(10,'('' ni, al, hs, rr:'',i5,
386 | * f8.5,e17.9,2f8.5)')nit,al,hs,rr,clim
387 | call clock(t2)
388 | write(10,'('' cpu for iteration'',f8.2)')t2-t1
389 | if (ipri.gt.0) then
390 | write(*,'('' ni, al, hs, rr:'',i5,
391 | * f8.5,e17.9,2f8.5)')nit,al,hs,rr,clim
392 | write(*,'('' cpu for iteration'',f8.2)')t2-t1
393 | endif
394 | t1=t2
395 | c continue if no converged models found yet, or if acceptable error
396 | c return from last model
397 | cont = nco.eq.0.or.ierr.eq.0.or.ierr.eq.2
398 | enddo
399 | if (nco.eq.0) ier=2
400 | if (.not.cont) then
401 | ier=1
402 | rr=rr0
403 | endif
404 | return
405 | end
406 |
407 | subroutine repar(ns,ac,nim,
408 | * al0,alf,nal,clim,ipri,spec,ih,iw,pb0,pb1,norm)
409 | c read input parameters
410 | implicit real*8 (a-h,o-z)
411 | include 'emap.par'
412 | character*(*) spec
413 | character*40 txt
414 | c output channels
415 | dimension kch(2)
416 | common /fold/ nvx,nvy
417 | common /cabsf/ wid,af
418 | pi2=8*atan(1.)
419 | c input data file
420 | open(4,file='dop.in')
421 | c type of likelihood to be used (0=log, 1=weighted log, 2=rms, 3=weighted rms)
422 | read(4,*)ih
423 | c read weights from lightcurve file if iw=1
424 | read(4,*)iw
425 | c read range of phases to be ignored in mapping and convert to radians
426 | read(4,*)pb0,pb1
427 | if(pb1-1.gt.pb0) call errb('all phases ignored:',pb0,pb1)
428 | if(pb1.lt.pb0) call errb('pb0 must be nr in prom',ir,nr)
602 | indx(ir)=ix
603 | indy(ir)=iy
604 | do ip=1,nph
605 | c line-of sight velocity at phase bin edges
606 | vp0=vx*sfl(ip)-vy*cfl(ip)
607 | vp1=vx*sfu(ip)-vy*cfu(ip)
608 | if (vp0.gt.vp1) then
609 | vpma=vp0+dv/2
610 | vpmi=vp1-dv/2
611 | else
612 | vpma=vp1+dv/2
613 | vpmi=vp0-dv/2
614 | endif
615 | c estimate near which line-sight bins these are
616 | ka=(vpma-vpl(1))/dvi+1
617 | ki=(vpmi-vpl(1))/dvi+1
618 | if (vpmi.lt.vpl(-1))
619 | * call errb('vpmi,vpl(-1):',vpmi,vpl(-1))
620 | if (vpma.gt.vpl(nvp+2))
621 | * call errb('vpma,vpl(nvp+2):',vpma,vpl(nvp+2))
622 | c get first vpl(i)nd in weighd',nil,nd)
806 | do i=1,nph
807 | do j=1,nvp
808 | inp=i+(j-1)*nph
809 | w(inp)=1
810 | if (f0(inp).eq.0.) w(inp)=0
811 | if (bl(i)) w(inp)=0
812 | enddo
813 | enddo
814 | if (iw.eq.1) then
815 | c multiply by weights from error bars
816 | do i=1,nil
817 | w(i)=w(i)*f(i)/eb(i)
818 | enddo
819 | endif
820 | c normalize to average=1
821 | x=0
822 | do i=1,nil
823 | x=x+w(i)
824 | enddo
825 | do i=1,nil
826 | w(i)=w(i)/x*nph
827 | enddo
828 | return
829 | end
830 |
831 | subroutine rldop(pht,p,pt,al,ac,flim,nim,ps,nil,nol,nit,hs,
832 | * ns,ih,ipri,s,ierr)
833 | c interface to rlfldn for doppler mapping
834 | c RL iteration with floating default, converged to accuracy ac
835 | c input:
836 | c pht: input data, nil: length of input data, nol: length of solution
837 | c p(i,j): probability p(x|xi), al: entropy weight, ac: accuracy of convergence,
838 | c pt: transpose of p,
839 | c flim: max acceleration parameter, nim: max no of iterations
840 | c ns: smearing width (passed on to chims)
841 | c ih: type of likelihood function (subroutines like, lamun)
842 | c ipri: printout control
843 | c out:
844 | c ps: solution, nit: no of iterations, hs: optimum function Q.
845 | c nit: number of iterations
846 | c s: entropy
847 | c ierr: 0 (OK), 1 (not converged) or 2 (not monotonic)
848 | implicit real*8 (a-h,o-z)
849 | dimension pht(*),p(*),pt(*),ps(*)
850 | dum=0
851 | idum=1
852 | epc=1
853 | call rlfldn(pht,p,pt,al,ac,flim,nim,ps,nil,nol,nit,hs,
854 | * idum,idum,ns,epc,idum,dum,idum,ih,ipri,dum,s,ierr)
855 | return
856 | end
857 |
858 | subroutine chims(ps,chi,id1,id2,id3,ns,du1,id4,du2,id5,du3)
859 | c default map routine to interface dopmap with emap routines
860 | c id1-5 and du1-3 are dummies
861 | implicit real*8 (a-h,o-z)
862 | include 'emap.par'
863 | dimension ps(*),chi(nr)
864 | dimension x2(nvm,nvm),y2(nvm,nvm)
865 | common /foldn/ nv,indx(nr),indy(nr),nol
866 | c reset x2
867 | do i=1,nv
868 | do j=1,nv
869 | x2(i,j)=0
870 | enddo
871 | enddo
872 | c fold x into x2 using `backdoor' information from /foldn/
873 | do j=1,nol
874 | x2(indx(j),indy(j))=ps(j)
875 | enddo
876 | ic=0
877 | jc=0
878 | im=1
879 | call chimg(x2,y2,nv,ic,nv,jc,im,ns)
880 | c unfold y2
881 | do j=1,nol
882 | chi(j)=y2(indx(j),indy(j))
883 | enddo
884 | return
885 | end
886 |
887 | subroutine chimsi(ps,chi,id,k,nc,inc,ns,epc,ico,rdf,msu,wbkg)
888 | c default map routine to interface dopmap with emap routines.
889 | c since there are no sub-surfaces in dopmap, chimsi does the same thing
890 | c as chims
891 | implicit real*8 (a-h,o-z)
892 | call chims(ps,chi,id,nc,inc,ns,epc,ico,rdf,msu,wbkg)
893 | return
894 | end
895 |
896 | subroutine wpar(npm,nvpm,nvm,nri,ndi)
897 | c write a parameter file with updated values for npm,nvpm,nvm,nri,ndi
898 | implicit real*8 (a-h,o-z)
899 | open(11,file='emap.par.new')
900 | write(11,'('' parameter (npm='',i3,'',nvpm='',i3,
901 | * '',nvm='',i3,'')'')')npm,nvpm,nvm
902 | write(11,'('' parameter (nd=npm*nvpm,nr=nvm*nvm)'')')
903 | write(11,'('' parameter (nri='',i4,'',ndi='',i4,'')'')')
904 | * nri,ndi
905 | write(11,'(''c parameters for emap routines'')')
906 | write(11,'('' parameter (nf=nd,nfp=ndi,nrp=nri)'')')
907 | write(11,'('' parameter (ni=nvm,nj=nvm)'')')
908 | write(11,'('' parameter (nch=1,nsu=1)'')')
909 | close(11)
910 | return
911 | end
912 |
913 | function alfa(al0,ial,alf,rr,clim)
914 | c next alfa value. last value is chosen to land rr close to clim
915 | implicit real*8 (a-h,o-z)
916 | common /alkeep/ rr2,rr1
917 | rr1=rr2
918 | rr2=rr
919 | if (rr.gt.sqrt(alf)*clim.or.ial.lt.3) then
920 | al=al0/alf**(ial-1)
921 | else
922 | dl2=log(rr1/rr2)
923 | dl=log(rr/clim)
924 | x=dl/dl2
925 | if (x.gt.1.) then
926 | al=al0/alf**(ial-1)
927 | else
928 | alfr=exp(x*log(alf))
929 | al=al0/alf**(ial-2)/alfr
930 | endif
931 | endif
932 | alfa=al
933 | return
934 | end
935 |
936 | subroutine chimg(x2,y2,nam,ic,nbm,jc,im,ns)
937 | c gaussian smearing with half-width ns, by consecutive 1-d smearing in x and y
938 | implicit real*8 (a-h,o-z)
939 | include 'emap.par'
940 | parameter (ms=100)
941 | dimension x2(ni,nj), y2(ni,nj)
942 | common /first/ smp(-ms:ms),ns0,ns1
943 | dimension t1(-ms:ni+ms),t2(-ms:nj+ms)
944 | if (ns0.ne.ns) then
945 | c (re)make smearing matrix smp if value of ns is new.
946 | w=1.5
947 | c actual smearing width used is w times 1/e width
948 | ns1=w*ns
949 | if (ns1.gt.ms) call errb('ns1>ms in chimg',ns1,ms)
950 | ns0=ns
951 | s=0
952 | do i=-ns1,ns1
953 | smp(i)=exp(-float(i*i)/ns**2)
954 | s=s+smp(i)
955 | enddo
956 | c normalize
957 | do i=-ns1,ns1
958 | smp(i)=smp(i)/s
959 | enddo
960 | endif
961 |
962 | c smear in j-direction
963 | do i=1,nam
964 | c extend ith column of x2 into t2, taking properties of boundary into account
965 | do j=-ns1,0
966 | if (jc.eq.1) then
967 | c wraparound
968 | t2(j)=x2(i,j+nbm)
969 | else
970 | c fold back
971 | t2(j)=x2(i,2-j-1)
972 | endif
973 | enddo
974 | do j=1,nbm
975 | t2(j)=x2(i,j)
976 | enddo
977 | do j=nbm+1,nbm+ns1
978 | if (jc.eq.1) then
979 | t2(j)=x2(i,j-nbm)
980 | else
981 | t2(j)=x2(i,2*nbm-j+1)
982 | endif
983 | enddo
984 | c smear t2, result into y2
985 | do j=1,nbm
986 | s=0
987 | do js=-ns1,ns1
988 | s=s+t2(j+js)*smp(js)
989 | enddo
990 | y2(i,j)=s
991 | enddo
992 | enddo
993 |
994 | c smear in i-direction
995 | do j=1,nbm
996 | c extend jth row of y2 into t1, taking properties of boundary into account
997 | do i=-ns1,0
998 | if (ic.eq.1) then
999 | c wraparound
1000 | t1(i)=y2(i+nam,j)
1001 | else
1002 | c fold back
1003 | t1(i)=y2(2-i-1,j)
1004 | endif
1005 | enddo
1006 | do i=1,nam
1007 | t1(i)=y2(i,j)
1008 | enddo
1009 | do i=nam+1,nam+ns1
1010 | if (ic.eq.1) then
1011 | t1(i)=y2(i-nam,j)
1012 | else
1013 | t1(i)=y2(2*nam-i+1,j)
1014 | endif
1015 | enddo
1016 | c smear t1, result into y2
1017 | do i=1,nam
1018 | s=0
1019 | do is=-ns1,ns1
1020 | s=s+t1(i+is)*smp(is)
1021 | enddo
1022 | y2(i,j)=s
1023 | enddo
1024 | enddo
1025 | return
1026 | end
1027 |
1028 | subroutine rlfldn(pht,p,pt,al,ac,flim,nim,ps,nil,nol,nit,hs,
1029 | * nc,inc,ns,epc,ico,rdf,msu,ih,ipri,wbkg,s,ierr)
1030 | c RL iteration with floating default, converged to accuracy ac
1031 | c input:
1032 | c pht: input data, nil: length of input data, nol: length of solution
1033 | c p(i,j): probability p(x|xi), al: entropy weight, ac: accuracy of convergence,
1034 | c flim: max acceleration parameter, nim: max no of iterations
1035 | c nil: no of phases, nol: size of image, nc: no of components of default,
1036 | c epc: the weights of each of these components, inc: indices for the types of
1037 | c component.
1038 | c out:
1039 | c ps: solution, nit: no of iterations, hs: optimum function Q.
1040 | c ih: type of likelihood function (subroutines like, lamun)
1041 | c ierr: 0 (OK), 1 (not converged) or 2 (not monotonic)
1042 | c ipri: printout control
1043 | implicit real*8 (a-h,o-z)
1044 | real*4 dpx
1045 | include 'emap.par'
1046 | dimension pht(*),ps(*),inc(nch,nsu),ns(nch,nsu),epc(*),ico(*)
1047 | real*4 p(nfp,nr),pt(nrp,nf)
1048 | dimension ph(nf),dha(nr),dsa(nr),chi(nr,nch),tem(nr),
1049 | * ex(nr),dps(nr),dps0(nr)
1050 | common /difpix/ dpx(nr,4)
1051 | ierr=0
1052 | del=1
1053 | nit=0
1054 | hs=0
1055 | c sum of light curve
1056 | spt=0
1057 | do i=1,nil
1058 | spt=spt+pht(i)
1059 | enddo
1060 | do while (del.gt.ac.and.nit.lt.nim)
1061 | nit=nit+1
1062 | c phi (forward projection step)
1063 | call fproj(pt,nil,nol,ps,ph)
1064 | c magic statement: On HP's, code crashes with bus error if this line is removed:
1065 | if (nit.lt.0) write(*,*)1
1066 | if (al.le.0.) then
1067 | c measure convergence by diff between ph and pht
1068 | av=0
1069 | sm=0
1070 | do i=1,nil
1071 | av=av+pht(i)
1072 | sm=sm+(pht(i)-ph(i))**2
1073 | enddo
1074 | rm=sqrt(sm/nil)
1075 | av=av/nil
1076 | del=rm/av
1077 | endif
1078 | c H and dH/dpsi
1079 | call like(pht,ph,p,nil,nol,ih,h,dha)
1080 | c sum of psi*dH/dpsi and sum of psi
1081 | su=0
1082 | sup=0
1083 | do j=1,nol
1084 | su=su+ps(j)*dha(j)
1085 | sup=sup+ps(j)
1086 | enddo
1087 | c delta-H (in same array as dha)
1088 | do j=1,nol
1089 | dha(j)=dha(j)+(-su/sup+spt/sup-1)
1090 | enddo
1091 | c entropy
1092 | if (al.gt.0.) call entr(ps,nil,nol,s,dsa,chi,tem,ex,nc,inc,ns,
1093 | * epc,ico,rdf,msu,wbkg)
1094 | c sum of psi*dS/dpsi
1095 | su=0
1096 | do k=1,nol
1097 | su=su+ps(k)*dsa(k)
1098 | enddo
1099 | c Delta-S (in same array as dsa)
1100 | do j=1,nol
1101 | dsa(j)=dsa(j)-su/sup
1102 | enddo
1103 | c save old value of Q
1104 | hs0=hs
1105 | c current value of Q
1106 | hs=h+al*s
1107 | c warning if not monotonic
1108 | if (nit.ne.1.and.hs.lt.hs0) ierr=2
1109 | c new dpsi
1110 | do j=1,nol
1111 | dps(j)=ps(j)*(dha(j)+al*dsa(j))
1112 | enddo
1113 | if (nit.eq.1) then
1114 | do j=1,nol
1115 | dps0(j)=dps(j)
1116 | enddo
1117 | endif
1118 |
1119 | c determine optimum direction and factor for update, from dps0 and dps.
1120 | c (generalization of Lucy's acceleration)
1121 | c derivatives of Q w/r to lambda and mu at current psi
1122 | call lamun(pht,ps,dps0,dps,pt,ph,chi,tem,ex,al,nil,nol,
1123 | * fla,fmu,nc,inc,ns,epc,ico,rdf,msu,ih,wbkg)
1124 | c length of multiplier
1125 | amu=sqrt(fla**2+fmu**2)
1126 | c direction (normalized) of optimum
1127 | fla=fla/amu
1128 | fmu=fmu/amu
1129 | c find max of amu
1130 | flm=0
1131 | jlm=0
1132 | do j=1,nol
1133 | c value of prospective update
1134 | xx=fla*dps0(j)+fmu*dps(j)
1135 | if (xx.lt.0) then
1136 | c positivity not maintained at this value of amu, get max
1137 | fl=-xx/ps(j)
1138 | if (fl.gt.flm) then
1139 | flm=fl
1140 | jlm=j
1141 | endif
1142 | endif
1143 | enddo
1144 | if (flm.gt.0.) then
1145 | c positivity restriction limits amu
1146 | c safety factor 0.9
1147 | flm=dmin1(flim,0.9/flm)
1148 | else
1149 | c take overall limit
1150 | flm=flim
1151 | endif
1152 | amu=dmin1(amu,flm)
1153 | c check if amu has been small for awhile
1154 | call zcheck(amu,nit,20,0.01d0,ierr)
1155 | if (ierr.eq.4) return
1156 | c having found amu, update psi
1157 | do j=1,nol
1158 | up=fmu*dps(j)+fla*dps0(j)
1159 | ps(j)=ps(j)+amu*up
1160 | c save direction of old dps
1161 | dps0(j)=up
1162 | enddo
1163 |
1164 | if (al.gt.0.) then
1165 | del=0
1166 | do j=1,nol
1167 | c measure of convergence (Lucy's eq 17)
1168 | dj=abs(dha(j)+al*dsa(j))/(abs(dha(j))+al*abs(dsa(j)))
1169 | del=del+dj**2
1170 | enddo
1171 | del=sqrt(del/nol)
1172 | endif
1173 | c store change
1174 | do j=1,nol
1175 | dpx(j,mod(nit,4)+1)=dha(j)+al*dsa(j)
1176 | enddo
1177 | c printout
1178 | if (nit.eq.1) then
1179 | write(10,'('' it H+alfa*S delta'')')
1180 | if (ipri.gt.1)
1181 | * write(*,'('' it H+alfa*S delta'')')
1182 | endif
1183 | if (nit.ne.1.and.hs.lt.hs0) then
1184 | c line summary to activity log file
1185 | write(10,'(i4,1pe20.12,e11.2,'' **'')')nit,hs,del
1186 | if (ipri.gt.1)
1187 | * write(*,'(i4,1pe20.12,e11.2,'' **'')')nit,hs,del
1188 | else
1189 | write(10,'(i4,1pe20.12,e11.2)')nit,hs,del
1190 | if (ipri.gt.1)
1191 | * write(*,'(i4,1pe20.12,e11.2)')nit,hs,del
1192 | endif
1193 | c renormalize (mostly to strip accumulating numerical noise)
1194 | su=0
1195 | do j=1,nol
1196 | su=su+ps(j)
1197 | enddo
1198 | do j=1,nol
1199 | ps(j)=ps(j)*spt/su
1200 | enddo
1201 | enddo
1202 | if (nit.ge.nim) then
1203 | c not converged at this value of ac
1204 | hs=0
1205 | c return last value of del
1206 | ac=del
1207 | c error flag
1208 | ierr=ierr+1
1209 | endif
1210 | return
1211 | end
1212 |
1213 | subroutine like(pht,ph,p,nil,nol,ih,h,dha)
1214 | c likelihood function h and its derivative w/r psi, dha
1215 | implicit real*8 (a-h,o-z)
1216 | include 'emap.par'
1217 | dimension pht(*),ph(*),dha(*)
1218 | real*4 p(nfp,nr)
1219 | dimension phh(nf)
1220 | common /weights/ w(nf)
1221 | h=0
1222 | if (ih.eq.0) then
1223 | c log likelihood
1224 | do i=1,nil
1225 | h=h+w(i)*(pht(i)*log(ph(i))-ph(i))
1226 | enddo
1227 | else
1228 | c rms
1229 | do i=1,nil
1230 | h=h-w(i)*(pht(i)-ph(i))**2
1231 | enddo
1232 | c normalizing factor
1233 | h=h*nil
1234 | endif
1235 | c Delta-H
1236 | if (ih.eq.0) then
1237 | c log likelihood
1238 | do i=1,nil
1239 | phh(i)=w(i)*(pht(i)/ph(i)-1)
1240 | enddo
1241 | call bproj(p,nil,nol,phh,dha)
1242 | else
1243 | c rms
1244 | do i=1,nil
1245 | phh(i)=2*nil*w(i)*(pht(i)-ph(i))
1246 | enddo
1247 | call bproj(p,nil,nol,phh,dha)
1248 | endif
1249 | return
1250 | end
1251 |
1252 | subroutine zcheck(amu,nit,nz,amc,ierr)
1253 | c set ierr=4 if past nz amu values were less than amc
1254 | implicit real*8 (a-h,o-z)
1255 | common /zsave/ am(30)
1256 | if (nz.gt.30) call errb('nz>30 in zcheck',nz,30)
1257 | am(mod(nit,nz)+1)=amu
1258 | if (nit.ge.nz) then
1259 | ama=0
1260 | do i=1,nz
1261 | if(am(i).gt.ama) ama=am(i)
1262 | enddo
1263 | if (ama.lt.amc) ierr=4
1264 | endif
1265 | return
1266 | end
1267 |
1268 | subroutine entr(ps,nil,nol,s,sp,chi,tem,ex,nc,inc,ns,epc,ico,
1269 | * rdf,msu,wbkg)
1270 | c entropy part of `objective function' Q.
1271 | c input: ps (current reconstruction),
1272 | c output: s (S), sp (dS/dpsi)
1273 | implicit real*8 (a-h,o-z)
1274 | include 'emap.par'
1275 | dimension ps(*),sp(*),chi(nr,nch),tem(*),ex(*),inc(nch,nsu),
1276 | * ns(nch,nsu),epc(*),ico(*)
1277 | dimension x(nr),y(nr,nch)
1278 | if (nc.gt.nch) call errb('nc>nch in entr',nc,nch)
1279 | c make chi's
1280 | call chims(ps,chi,1,nc,inc,ns,epc,ico,rdf,msu,wbkg)
1281 | c entropy
1282 | s=0
1283 | do j=1,nol
1284 | tem(j)=log(ps(j))
1285 | ex(j)=0
1286 | do k=1,nc
1287 | if (epc(k).ne.0.) then
1288 | fe=epc(k)*log(chi(j,k))
1289 | ex(j)=ex(j)+fe
1290 | tem(j)=tem(j)-fe
1291 | endif
1292 | enddo
1293 | ex(j)=exp(ex(j))
1294 | s=s-ps(j)*(tem(j)-1)-ex(j)
1295 | enddo
1296 | c derivative wr to psi_j, first the psilogpsi part
1297 | do j=1,nol
1298 | sp(j)=-tem(j)
1299 | enddo
1300 | c add terms due to dependence of chi on psi
1301 | do k=1,nc
1302 | if (epc(k).ne.0.) then
1303 | do j=1,nol
1304 | x(j)=(ps(j)-ex(j))/chi(j,k)
1305 | enddo
1306 | call chimsi(x,y,-1,k,nc,inc,ns,epc,ico,rdf,msu,wbkg)
1307 | do j=1,nol
1308 | sp(j)=sp(j)+epc(k)*y(j,k)
1309 | enddo
1310 | endif
1311 | enddo
1312 | return
1313 | end
1314 |
1315 | subroutine lamun(pht,ps,dps1,dps2,pt,ph,chi,tem,ex,al,nil,nol,
1316 | * fla,fmu,nc,inc,ns,epc,ico,rdf,msu,ih,wbkg)
1317 | c optimal lambda and mu from first and second derivatives of Q
1318 | implicit real*8 (a-h,o-z)
1319 | include 'emap.par'
1320 | dimension pht(*),ps(*),dps1(*),dps2(*),ph(*),chi(nr,nch),
1321 | * tem(*),ex(*),inc(nch,nsu),ns(nch,nsu),epc(*),ico(*)
1322 | real*4 pt(nrp,nf)
1323 | dimension dph1(nf),dph2(nf),dch1(nr,nch),dch2(nr,nch)
1324 | common /weights/ w(nf)
1325 | c changes in phi and chi corresponding to dps0, dps
1326 | call fproj(pt,nil,nol,dps1,dph1)
1327 | call fproj(pt,nil,nol,dps2,dph2)
1328 | if (al.gt.0.) then
1329 | call chims(dps1,dch1,1,nc,inc,ns,epc,ico,rdf,msu,wbkg)
1330 | call chims(dps2,dch2,1,nc,inc,ns,epc,ico,rdf,msu,wbkg)
1331 | endif
1332 | c first and second derivatives
1333 | hl=0
1334 | hll=0
1335 | hm=0
1336 | hlm=0
1337 | hmm=0
1338 | sl=0
1339 | sll=0
1340 | sm=0
1341 | slm=0
1342 | smm=0
1343 | c likelihood term
1344 | if (ih.eq.0) then
1345 | c log likelihood
1346 | do i=1,nil
1347 | phw=pht(i)*w(i)
1348 | dpp=pht(i)/ph(i)-1
1349 | xl=dph1(i)/ph(i)
1350 | xm=dph2(i)/ph(i)
1351 | hl=hl+w(i)*dph1(i)*dpp
1352 | hll=hll-xl**2*phw
1353 | hlm=hlm-xl*xm*phw
1354 | hm=hm+w(i)*dph2(i)*dpp
1355 | hmm=hmm-xm**2*phw
1356 | enddo
1357 | else
1358 | c rms likelihood
1359 | do i=1,nil
1360 | x=pht(i)-ph(i)
1361 | xl=dph1(i)
1362 | xm=dph2(i)
1363 | hl=hl+2*w(i)*x*xl
1364 | hll=hll-2*w(i)*xl**2
1365 | hlm=hlm-2*w(i)*xl*xm
1366 | hm=hm+2*w(i)*x*xm
1367 | hmm=hmm-2*w(i)*xm**2
1368 | enddo
1369 | hl=hl*nil
1370 | hm=hm*nil
1371 | hll=hll*nil
1372 | hmm=hmm*nil
1373 | hlm=hlm*nil
1374 | endif
1375 | c entropy terms
1376 | if (al.gt.0.) then
1377 | do j=1,nol
1378 | pl=dps1(j)/ps(j)
1379 | pm=dps2(j)/ps(j)
1380 | tl=0
1381 | tm=0
1382 | tll=0
1383 | tmm=0
1384 | tlm=0
1385 | do k=1,nc
1386 | if (epc(k).ne.0.) then
1387 | dc1=dch1(j,k)/chi(j,k)
1388 | dc2=dch2(j,k)/chi(j,k)
1389 | tl=tl+epc(k)*dc1
1390 | tm=tm+epc(k)*dc2
1391 | tll=tll+epc(k)*dc1**2
1392 | tmm=tmm+epc(k)*dc2**2
1393 | tlm=tlm+epc(k)*dc1*dc2
1394 | endif
1395 | enddo
1396 | pz=ps(j)-ex(j)
1397 | sl=sl-dps1(j)*tem(j)+pz*tl
1398 | sm=sm-dps2(j)*tem(j)+pz*tm
1399 | sll=sll-ps(j)*(pl-tl)**2+pz*(tl**2-tll)
1400 | slm=slm-ps(j)*(pl-tl)*(pm-tm)+pz*(tl*tm-tlm)
1401 | smm=smm-ps(j)*(pm-tm)**2+pz*(tm**2-tmm)
1402 | enddo
1403 | endif
1404 |
1405 | ql=hl+al*sl
1406 | qll=hll+al*sll
1407 | qlm=hlm+al*slm
1408 | qm=hm+al*sm
1409 | qmm=hmm+al*smm
1410 | c calculate lambda and mu
1411 | dd=qmm*qll-qlm**2
1412 | dr=abs(dd)/(qll**2+qmm**2)
1413 | c if det of 2X2 system too small, use only mu
1414 | if (dr.lt.1e-3) then
1415 | fla=0
1416 | fmu=-qm/qmm
1417 | else
1418 | fmu=(qlm*ql-qll*qm)/dd
1419 | fla=(qlm*qm-qmm*ql)/dd
1420 | endif
1421 | return
1422 | end
1423 |
1424 | function rrms(f1,eb,iw,f0,n)
1425 | c rms of difference between f1 and f0 (iw=0) or
1426 | c rms distance between f1 and f0 normalized by the error bars eb (iw=1)
1427 | implicit real*8 (a-h,o-z)
1428 | dimension f1(*),eb(*),f0(*)
1429 | s=0
1430 | if (iw.eq.0) then
1431 | do i=1,n
1432 | s=s+(f1(i)-f0(i))**2
1433 | enddo
1434 | else
1435 | do i=1,n
1436 | s=s+((f1(i)-f0(i))/eb(i))**2
1437 | enddo
1438 | endif
1439 | rrms=sqrt(s/(n-1))
1440 | return
1441 | end
1442 |
1443 | function rmsn(x,y)
1444 | implicit real*8 (a-h,o-z)
1445 | dimension x(*),y(*)
1446 | common/folds/nph,nvp
1447 | s=0
1448 | do i=2,nph-1
1449 | do j=2,nvp-1
1450 | i1=i+(j-2)*nph
1451 | i2=i1+nph
1452 | i3=i2+nph
1453 | s0=x(i1-1)+x(i1)+x(i1+1)+x(i2-1)+x(i2+1)+x(i3-1)+x(i3)+x(i3+1)
1454 | s1=y(i1-1)+y(i1)+y(i1+1)+y(i2-1)+y(i2+1)+y(i3-1)+y(i3)+y(i3+1)
1455 | s=s+((s1-s0)/8-(y(i2)-x(i2)))**2
1456 | enddo
1457 | enddo
1458 | s=s/(nph-2)/(nvp-2)
1459 | rmsn=sqrt(s)
1460 | return
1461 | end
1462 |
--------------------------------------------------------------------------------
/pydoppler/fortran_code/dop.in:
--------------------------------------------------------------------------------
1 | 0 ih type of likelihood function (ih=1 for chi-squared)
2 | 0 iw iw=1 if error bars are to be read and used
3 | 0.95 1.05 pb0,pb1 range of phases to be ignored
4 | 7 ns smearing width in default map
5 | 8e-4 ac accuracy of convergence
6 | 150 nim max no of iterations
7 | 0.002 1.7 0 al0,alf,nal starting value, factor, max number of alfas
8 | 1.6 clim 'C-aim'
9 | 2 ipri printout control for standard output channel (ipr=2 for full)
10 | 1 norm norm=1 for normalization to flat light curve
11 | 10e5 0 wid,af width and amplitude central absorption fudge
12 | end of parameter input file
13 |
--------------------------------------------------------------------------------
/pydoppler/fortran_code/emap.par:
--------------------------------------------------------------------------------
1 | parameter (npm= 28,nvpm= 477,nvm= 144)
2 | parameter (nd=npm*nvpm,nr=0.8*nvm*nvm)
3 | parameter (nt=nvpm*npm+nvm*nvpm*3+2*npm*nvm)
4 | parameter (nri=0.9*nvm*nt/nd,ndi=0.9*nvm*nt/nr)
5 | c parameters for emap routines
6 | parameter (nf=nd,nfp=ndi,nrp=nri)
7 | parameter (ni=nvm,nj=nvm)
8 | parameter (nch=1,nsu=1)
9 |
--------------------------------------------------------------------------------
/pydoppler/fortran_code/emap_ori.par:
--------------------------------------------------------------------------------
1 | parameter (npm= 28,nvpm= 354,nvm= 106)
2 | parameter (nd=npm*nvpm,nr=0.8*nvm*nvm)
3 | parameter (nt=nvpm*npm+nvm*nvpm*3+2*npm*nvm)
4 | parameter (nri=0.9*nvm*nt/nd,ndi=0.9*nvm*nt/nr)
5 | c parameters for emap routines
6 | parameter (nf=nd,nfp=ndi,nrp=nri)
7 | parameter (ni=nvm,nj=nvm)
8 | parameter (nch=1,nsu=1)
9 |
--------------------------------------------------------------------------------
/pydoppler/fortran_code/fort.10:
--------------------------------------------------------------------------------
1 | nvm not even 83 0
2 |
--------------------------------------------------------------------------------
/pydoppler/fortran_code/hclock.f:
--------------------------------------------------------------------------------
1 | subroutine clock(t)
2 | real*8 t
3 | real*4 ta(2)
4 | x=dtime(ta)
5 | t=t+ta(1)
6 | return
7 | end
8 |
--------------------------------------------------------------------------------
/pydoppler/fortran_code/iclock.f:
--------------------------------------------------------------------------------
1 | subroutine clock(t)
2 | real*8 t
3 | c ibm-rs clock function
4 | t=mclock()/100.
5 | return
6 | end
7 |
--------------------------------------------------------------------------------
/pydoppler/fortran_code/lobe.f:
--------------------------------------------------------------------------------
1 | program stream
2 | c aux program for idl plots of dopmaps
3 | c calculates Roche lobes and integrates path of stream from L1
4 | parameter(nmax=10000)
5 | complex z,w,z1,z2,dz,dw,wk,no,wr,wc,w0,wm1,wi,
6 | * wout(nmax),wkout(nmax)
7 | dimension xout(nmax),yout(nmax),rout(nmax)
8 | open(3,file='lobe.out')
9 | open(4,file='lobe.in')
10 | read(4,*)qm
11 | if (abs(qm-1).lt.1e-4) qm=1e-4
12 | close(4)
13 | rd=0.1
14 | if (qm.le.0.) then
15 | write(3,'(''qm<0: '',f8.5)')qm
16 | close(3)
17 | stop
18 | endif
19 | rl1=rlq1(qm)
20 | c write(*,'('' rlq1'',f8.5)')rl1
21 | write(3,'(f8.5)')qm
22 | call lobes(qm,rl1)
23 | c center of mass rel to M1
24 | cm=qm/(1+qm)
25 | c coordinates of M1 and M2
26 | z1=-cm
27 | z2=1-cm
28 | wm1=conjg(cmplx(0.,-cm))
29 | c start at L1-eps with v=0
30 | eps=1e-3
31 | z=cmplx(rl1-cm-eps,0.)
32 | w=0
33 | c check that we really are near L1
34 | call eqmot(z,w,zp,wp,z1,z2,qm)
35 | write(*,'('' t=0: z,w'',1p4e11.3)')zp,wp
36 | t=0
37 | dt=1e-4
38 | isa=0
39 | it=0
40 | r=1
41 | ist=0
42 | ph=0.
43 | phmax=6
44 | c do while(it.lt.nmax.and.ph.lt.phmax.and.ist.eq.0)
45 | do while(it.lt.nmax.and.ph.lt.phmax)
46 | it=it+1
47 | call intrk(z,w,dt,dz,dw,z1,z2,qm)
48 | z=z+dz
49 | w=w+dw
50 | t=t+dt
51 | if (abs(dz)/abs(z).gt.0.02) dt=dt/2
52 | if (abs(dz)/abs(z).lt.0.005) dt=2*dt
53 | dph=-aimag(z*conjg(z-dz))/abs(z)/abs(z-dz)
54 | ph=ph+dph
55 | c velocity in inertial frame
56 | c change by Guillaume
57 | wi=w+cmplx(0,1.)*z
58 | c unit vector normal to kepler orbit
59 | rold=r
60 | r=abs(z-z1)
61 | if (ist.eq.0.and.rold.lt.r) then
62 | ist=1
63 | rmin=rold
64 | endif
65 | c kepler velocity of circular orbit in potential of M1, rel. to M1
66 | vk=1/sqrt(r*(1+qm))
67 | c unit vector in r
68 | no=conjg(z-z1)/r
69 | wk=-vk*no*cmplx(0.,1.)
70 | c same but rel. to cm, this is velocity in inertial frame
71 | wk=wk+wm1
72 | c velocity normal to disk edge, in rotating frame
73 | dot=no*w
74 | c velocity parallel to disk edge
75 | par=aimag(no*w)
76 | c reflected velocity
77 | wr=w-2*dot*no
78 | c write(*,'(f8.4,1p9e11.3)')t,z,w,wk,wr,r
79 | xout(it)=z+cm
80 | yout(it)=-aimag(z)
81 | rout(it)=sqrt(xout(it)**2+yout(it)**2)
82 | c change by Guillaume
83 | wout(it)=wi
84 | wkout(it)=conjg(wk)
85 | if (it.gt.1) then
86 | x=xout(it)
87 | y=yout(it)
88 | phi=atan(y/x)
89 | if (rout(it).lt.rd.and.rout(it-1).gt.rd) then
90 | c write(*,'('' r,x,y,phi,vs,vk,dot,par'',8f8.3)')
91 | c * rout(it),x,y,phi,real(w),vk,dot,par
92 | c write(*,'('' w,no'',4f8.3)')w,no
93 | x=xout(it-1)
94 | y=yout(it-1)
95 | phi=atan(y/x)
96 | c write(*,'('' r,x,y,phi'',4f8.3)')rout(it-1),x,y,phi
97 | endif
98 | endif
99 | if (isa.eq.0.and.yout(it).lt.0) then
100 | isa=1
101 | ra=abs(z-z1)
102 | wc=conjg(w)+cmplx(0.,1.)*conjg(z-z1)
103 | ang=abs(aimag((z-z1)*conjg(wc)))
104 | endif
105 | enddo
106 | write(3,'(i5)')it
107 | write(3,'(1p5e15.7)')(xout(i),i=1,it)
108 | write(3,'(1p5e15.7)')(yout(i),i=1,it)
109 | write(3,'(1p6e12.4)')(real(wout(i)),i=1,it)
110 | write(3,'(1p6e12.4)')(aimag(wout(i)),i=1,it)
111 | write(3,'(1p6e12.4)')(real(wkout(i)),i=1,it)
112 | write(3,'(1p6e12.4)')(aimag(wkout(i)),i=1,it)
113 | rc=ang**2*(1+qm)
114 | z=rl1-cm
115 | w0=cmplx(0.,1.)*conjg(z-z1)
116 | ang0=abs(aimag((z-z1)*conjg(w0)))
117 | rc0=ang0**2*(1+qm)
118 | write(3,'(3f8.5,'' ra, rc '')')ra,rc,rc0
119 | c write(*,'(3f8.5,'' ra, rc '')')ra,rc,rc0
120 | c write(*,'(2f8.4,'' q, rmin'')')qm,rmin
121 | end
122 |
123 | subroutine intrk(z,w,dt,dz,dw,z1,z2,qm)
124 | complex z,w,dz,dw,z1,z2
125 | complex zp,wp,hz0,hz1,hz2,hz3,hw0,hw1,hw2,hw3,zx,wx
126 | zx=z
127 | wx=w
128 | call eqmot(zx,wx,zp,wp,z1,z2,qm)
129 | hz0=zp*dt
130 | hw0=wp*dt
131 | zx=z+hz0/2
132 | wx=w+hw0/2
133 | call eqmot(zx,wx,zp,wp,z1,z2,qm)
134 | hz1=zp*dt
135 | hw1=wp*dt
136 | zx=z+hz1/2
137 | wx=w+hw1/2
138 | call eqmot(zx,wx,zp,wp,z1,z2,qm)
139 | hz2=zp*dt
140 | hw2=wp*dt
141 | zx=z+hz2
142 | wx=w+hw2
143 | call eqmot(zx,wx,zp,wp,z1,z2,qm)
144 | hz3=zp*dt
145 | hw3=wp*dt
146 | dz=(hz0+2*hz1+2*hz2+hz3)/6
147 | dw=(hw0+2*hw1+2*hw2+hw3)/6
148 | return
149 | end
150 |
151 | subroutine eqmot(z,w,zp,wp,z1,z2,qm)
152 | complex z,w,zp,wp,z1,z2
153 | complex zr1,zr2
154 | zr1=z-z1
155 | zr2=z-z2
156 | c change by Guillaume : - sign in Coriolis
157 | wp=-(qm*zr2/(abs(zr2))**3+zr1/(abs(zr1))**3)/(1+qm)-
158 | * cmplx(0.,2.)*w+z
159 | zp=w
160 | return
161 | end
162 |
163 | function rlq1(q)
164 | c radius (from primary) of L1
165 | if (abs(1-q).lt.1e-4) then
166 | rlq=0.5
167 | return
168 | endif
169 | rl=0
170 | rn=1-q
171 | 2 if (abs(rl/rn-1).gt.1e-4)then
172 | rl=rn
173 | f=q/(1-rl)**2-1/rl**2+(1+q)*rl-q
174 | fa=2*q/(1-rl)**3+2/rl**3+(1+q)
175 | rn=rl-f/fa
176 | goto 2
177 | endif
178 | rlq1=rn
179 | return
180 | end
181 |
182 | function pot(q,x,y,z,pr)
183 | c Roche potential. coordinates centered on M2,
184 | c z along rotation axis, x toward M1
185 | c pr is gradient in radius from M2
186 | c first transform to polar coordinates w/r rotation axis
187 | r=sqrt(x*x+y*y+z*z)
188 | if (r.eq.0) stop 'r=0 in pot'
189 | rh=sqrt(x*x+y*y)
190 | st=rh/r
191 | if (rh.eq.0) then
192 | cf=1
193 | else
194 | cf=x/rh
195 | endif
196 | r2=1/(1+q)
197 | r1=sqrt(1+r**2-2*r*cf*st)
198 | pot=-1/r-1/q/r1-0.5*(1/q+1)*(r2**2+(r*st)**2-2*r2*r*cf*st)
199 | pr=1/r**2+1/q/(r1**3)*(r-cf*st)-0.5*(1/q+1)*2*(r*st*st-r2*cf*st)
200 | return
201 | end
202 |
203 | subroutine lobes(q,rs)
204 | include 'emap.par'
205 | dimension r(ni,nj),ch(ni),ps(nj),x(ni),y(ni)
206 | nc=ni
207 | np=nj
208 | call surf(q,rs,nc,np,r,ch,ps)
209 | write(3,'(2i5,'' ni,nj'')')ni,nj
210 | j=1
211 | do i=1,nc
212 | x(i)=1-r(i,j)*cos(ch(i))
213 | y(i)=-r(i,j)*sin(ch(i))
214 | enddo
215 | write(3,'(8f9.5)')(x(i),i=1,nc),(x(i),i=nc,1,-1)
216 | write(3,'(8f9.5)')(y(i),i=1,nc),(-y(i),i=nc,1,-1)
217 | call surf(1/q,1-rs,nc,np,r,ch,ps)
218 | j=1
219 | do i=1,nc
220 | x(i)=r(i,j)*cos(ch(i))
221 | y(i)=r(i,j)*sin(ch(i))
222 | enddo
223 | write(3,'(8f9.5)')(x(i),i=1,nc),(x(i),i=nc,1,-1)
224 | write(3,'(8f9.5)')(y(i),i=1,nc),(-y(i),i=nc,1,-1)
225 | return
226 | end
227 |
228 | subroutine surf(q,rs,nc,np,r,ch,ps)
229 | c Roche surface around M2, coordinates on surface are ch, ps.
230 | c ch: polar angle from direction to M1; ps: corresponding azimuth, counting
231 | c from orbital plane.
232 | c q:mass ratio, rs: radius of surface at point facing M1
233 | c nc, np: number of chi's, psi's.
234 | c output:
235 | c r(nf,nt): radius. ch, ps: chi and psi arrays
236 | include 'emap.par'
237 | dimension r(ni,nj),ch(*),ps(*)
238 | if (nc.gt.ni) stop 'nc>ni'
239 | if (np.gt.nj) stop 'np>nj'
240 | pi=2*asin(1.)
241 | dc=pi/nc
242 | ch(1)=0
243 | do i=1,nc
244 | ch(i)=float((i-1))*pi/(nc-1)
245 | enddo
246 | ps(1)=0
247 | do j=1,np
248 | ps(j)=float((j-1))*2*pi/np
249 | enddo
250 | rs1=1-rs
251 | fs=pot(q,rs1,0.,0.,pr)
252 | c max no of iterations
253 | im=20
254 | do i=1,np
255 | cp=cos(ps(i))
256 | sp=sin(ps(i))
257 | rx=(1-dc)*rs1
258 | r(1,i)=rs1
259 | do k=2,nc
260 | x=cos(ch(k))
261 | sc=sin(ch(k))
262 | y=sc*cp
263 | z=sc*sp
264 | j=0
265 | f=1
266 | do while (j.lt.im.and.abs(f-fs).gt.1e-4.or.j.eq.0.)
267 | j=j+1
268 | r1=rx
269 | f=pot(q,r1*x,r1*y,r1*z,pr)
270 | rx=r1-(f-fs)/pr
271 | if (rx.gt.rs1) rx=rs1
272 | enddo
273 | if (j.ge.im) then
274 | write(*,'('' no conv in surf; k,i,ch,ps'',2i4,2f7.3)')
275 | * k,i,ch(k),ps(i)
276 | stop
277 | endif
278 | r(k,i)=rx
279 | enddo
280 | enddo
281 | return
282 | end
283 |
--------------------------------------------------------------------------------
/pydoppler/fortran_code/makefile:
--------------------------------------------------------------------------------
1 | # IBM aix
2 | # with error traps and bounds checks:
3 | # compile=cp -f iclock.f clock.f ; xlf -D -C -g -q flttrap
4 | # optimized:
5 | # compile=cp -f iclock.f clock.f ; xlf -O
6 | # optimized, with extended memory allocation of 2048 MB:
7 | #compile=cp -f iclock.f clock.f ; xlf -bmaxdata:2048000000 -bmaxstack:2048000000 -O
8 |
9 | # DEC alpha with debug and bound checks
10 | # compile=cp -f cclock.f clock.f ; f90 -C -g -ladebug
11 | # optimized:
12 | # compile=cp -f cclock.f clock.f ; g77 -O
13 |
14 | # HP HP/UX
15 | # compile=cp -f hclock.f clock.f ; f77 -O +U77
16 | # with error traps and bounds checks:
17 | # compile=cp -f hclock.f clock.f ; f77 +FPVZO -g -C -O +U77
18 |
19 | # SUN sparc
20 | #compile=cp -f cclock.f clock.f ; gfortran -O
21 | #compile=cp -f cclock.f clock.f ; g77 -O -fno-globals -Wno-globals
22 | #-fno-globals
23 |
24 | compile=cp -f cclock.f clock.f ; gfortran -O -w -fallow-argument-mismatch
25 |
26 | dop.out: dopin dop.in dopp
27 | dopp
28 | dopp: dop.f emap.par
29 | $(compile) -o dopp dop.f clock.f
30 |
31 | lobe.out: lobe lobe.in
32 | lobe
33 | lobe: lobe.f
34 | $(compile) -o lobe lobe.f
35 |
--------------------------------------------------------------------------------
/pydoppler/mynormalize.py:
--------------------------------------------------------------------------------
1 | # The Normalize class is largely based on code provided by Sarah Graves.
2 |
3 | import numpy as np
4 | import numpy.ma as ma
5 |
6 | import matplotlib.cbook as cbook
7 | from matplotlib.colors import Normalize
8 |
9 |
10 | class MyNormalize(Normalize):
11 | '''
12 | A Normalize class for imshow that allows different stretching functions
13 | for astronomical images.
14 | '''
15 |
16 | def __init__(self, stretch='linear', exponent=5, vmid=None, vmin=None,
17 | vmax=None, clip=False):
18 | '''
19 | Initalize an APLpyNormalize instance.
20 |
21 | Optional Keyword Arguments:
22 |
23 | *vmin*: [ None | float ]
24 | Minimum pixel value to use for the scaling.
25 |
26 | *vmax*: [ None | float ]
27 | Maximum pixel value to use for the scaling.
28 |
29 | *stretch*: [ 'linear' | 'log' | 'sqrt' | 'arcsinh' | 'power' ]
30 | The stretch function to use (default is 'linear').
31 |
32 | *vmid*: [ None | float ]
33 | Mid-pixel value used for the log and arcsinh stretches. If
34 | set to None, a default value is picked.
35 |
36 | *exponent*: [ float ]
37 | if self.stretch is set to 'power', this is the exponent to use.
38 |
39 | *clip*: [ True | False ]
40 | If clip is True and the given value falls outside the range,
41 | the returned value will be 0 or 1, whichever is closer.
42 | '''
43 |
44 | if vmax < vmin:
45 | raise Exception("vmax should be larger than vmin")
46 |
47 | # Call original initalization routine
48 | Normalize.__init__(self, vmin=vmin, vmax=vmax, clip=clip)
49 |
50 | # Save parameters
51 | self.stretch = stretch
52 | self.exponent = exponent
53 |
54 | if stretch == 'power' and np.equal(self.exponent, None):
55 | raise Exception("For stretch=='power', an exponent should be specified")
56 |
57 | if np.equal(vmid, None):
58 | if stretch == 'log':
59 | if vmin > 0:
60 | self.midpoint = vmax / vmin
61 | else:
62 | raise Exception("When using a log stretch, if vmin < 0, then vmid has to be specified")
63 | elif stretch == 'arcsinh':
64 | self.midpoint = -1. / 30.
65 | else:
66 | self.midpoint = None
67 | else:
68 | if stretch == 'log':
69 | if vmin < vmid:
70 | raise Exception("When using a log stretch, vmin should be larger than vmid")
71 | self.midpoint = (vmax - vmid) / (vmin - vmid)
72 | elif stretch == 'arcsinh':
73 | self.midpoint = (vmid - vmin) / (vmax - vmin)
74 | else:
75 | self.midpoint = None
76 |
77 | def __call__(self, value, clip=None):
78 |
79 | #read in parameters
80 | method = self.stretch
81 | exponent = self.exponent
82 | midpoint = self.midpoint
83 |
84 | # ORIGINAL MATPLOTLIB CODE
85 |
86 | if clip is None:
87 | clip = self.clip
88 |
89 | if cbook.iterable(value):
90 | vtype = 'array'
91 | val = ma.asarray(value).astype(np.float)
92 | else:
93 | vtype = 'scalar'
94 | val = ma.array([value]).astype(np.float)
95 |
96 | self.autoscale_None(val)
97 | vmin, vmax = self.vmin, self.vmax
98 | if vmin > vmax:
99 | raise ValueError("minvalue must be less than or equal to maxvalue")
100 | elif vmin == vmax:
101 | return 0.0 * val
102 | else:
103 | if clip:
104 | mask = ma.getmask(val)
105 | val = ma.array(np.clip(val.filled(vmax), vmin, vmax),
106 | mask=mask)
107 | result = (val - vmin) * (1.0 / (vmax - vmin))
108 |
109 | # CUSTOM APLPY CODE
110 |
111 | # Keep track of negative values
112 | negative = result < 0.
113 |
114 | if self.stretch == 'linear':
115 |
116 | pass
117 |
118 | elif self.stretch == 'log':
119 |
120 | result = ma.log10(result * (self.midpoint - 1.) + 1.) \
121 | / ma.log10(self.midpoint)
122 |
123 | elif self.stretch == 'sqrt':
124 |
125 | result = ma.sqrt(result)
126 |
127 | elif self.stretch == 'arcsinh':
128 |
129 | result = ma.arcsinh(result / self.midpoint) \
130 | / ma.arcsinh(1. / self.midpoint)
131 |
132 | elif self.stretch == 'power':
133 |
134 | result = ma.power(result, exponent)
135 |
136 | else:
137 |
138 | raise Exception("Unknown stretch in APLpyNormalize: %s" %
139 | self.stretch)
140 |
141 | # Now set previously negative values to 0, as these are
142 | # different from true NaN values in the FITS image
143 | result[negative] = -np.inf
144 |
145 | if vtype == 'scalar':
146 | result = result[0]
147 |
148 | return result
149 |
150 | def inverse(self, value):
151 |
152 | # ORIGINAL MATPLOTLIB CODE
153 |
154 | if not self.scaled():
155 | raise ValueError("Not invertible until scaled")
156 |
157 | vmin, vmax = self.vmin, self.vmax
158 |
159 | # CUSTOM APLPY CODE
160 |
161 | if cbook.iterable(value):
162 | val = ma.asarray(value)
163 | else:
164 | val = value
165 |
166 | if self.stretch == 'linear':
167 |
168 | pass
169 |
170 | elif self.stretch == 'log':
171 |
172 | val = (ma.power(10., val * ma.log10(self.midpoint)) - 1.) / (self.midpoint - 1.)
173 |
174 | elif self.stretch == 'sqrt':
175 |
176 | val = val * val
177 |
178 | elif self.stretch == 'arcsinh':
179 |
180 | val = self.midpoint * \
181 | ma.sinh(val * ma.arcsinh(1. / self.midpoint))
182 |
183 | elif self.stretch == 'power':
184 |
185 | val = ma.power(val, (1. / self.exponent))
186 |
187 | else:
188 |
189 | raise Exception("Unknown stretch in APLpyNormalize: %s" %
190 | self.stretch)
191 |
192 | return vmin + val * (vmax - vmin)
--------------------------------------------------------------------------------
/pydoppler/test_data/output_images/Average_Spec.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alymantara/pydoppler/dc2d395680862159d74f164f44c5465041c5e8fd/pydoppler/test_data/output_images/Average_Spec.png
--------------------------------------------------------------------------------
/pydoppler/test_data/output_images/Doppler_Map.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alymantara/pydoppler/dc2d395680862159d74f164f44c5465041c5e8fd/pydoppler/test_data/output_images/Doppler_Map.png
--------------------------------------------------------------------------------
/pydoppler/test_data/output_images/Reconstruction.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alymantara/pydoppler/dc2d395680862159d74f164f44c5465041c5e8fd/pydoppler/test_data/output_images/Reconstruction.png
--------------------------------------------------------------------------------
/pydoppler/test_data/output_images/Trail.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alymantara/pydoppler/dc2d395680862159d74f164f44c5465041c5e8fd/pydoppler/test_data/output_images/Trail.png
--------------------------------------------------------------------------------
/pydoppler/test_data/sample_script.py:
--------------------------------------------------------------------------------
1 | import pydoppler
2 | import matplotlib.pyplot as plt
3 | # Import sample data
4 | # <<< COMMENT OUT IF YOU DONT NEED THE TEST DATASET >>>
5 | pydoppler.test_data()
6 |
7 | # Load base object for tomography
8 | dop = pydoppler.spruit()
9 |
10 | # Basic data for the tomography to work
11 | dop.object = 'U Gem'
12 | dop.base_dir = 'ugem99' # Base directory for input spectra
13 | dop.list = 'ugem0all.fas' # Name of the input file
14 | dop.lam0 = 6562.8 # Wavelength zero in units of the original spectra
15 | dop.delta_phase = 0.003
16 | dop.delw = 35 # size of Doppler map in wavelenght
17 | dop.overs = 0.3 # between 0-1, Undersampling of the spectra. 1= Full resolution
18 | dop.gama = 36.0 # km /s
19 | dop.nbins = 28
20 |
21 | # Read in the individual spectra and orbital phase information
22 | dop.Foldspec()
23 |
24 | # Normalise the spectra
25 | dop.Dopin(continnum_band=[6500,6537,6591,6620],
26 | plot_median=False,poly_degree=2)
27 |
28 | # Perform tomography
29 | dop.Syncdop()
30 |
31 | # This routine will display the outcome of the Doppler tomography.
32 | # You can overplot contours and streams.
33 | cb,data = dop.Dopmap(limits=[0.05,0.99],colorbar=False,cmaps=plt.cm.magma_r,
34 | smooth=False,remove_mean=False)
35 |
36 | # Overplot the donor contours, keplerian and ballistic streams
37 | qm=0.35
38 | k1 = 107
39 | inc=70
40 | m1=1.2
41 | porb=0.1769061911
42 |
43 | pydoppler.stream(qm,k1,porb,m1,inc)
44 |
45 | # Always check that reconstructed spectra looks like the original one. A good
46 | # rule of thumb "If a feature on the Doppler tomogram isn not in the trail,
47 | # most likely its not real!"
48 | cb2,cb3,dmr,dm = dop.Reco(colorbar=False,limits=[.05,0.95],cmaps=plt.cm.magma_r)
49 |
50 |
51 |
52 | from astropy.modeling import models, fitting
53 | res = plt.figure('Residuals',figsize=(8,4))
54 | plt.clf()
55 | ax = res.add_subplot(121)
56 | residuals = dm - dmr
57 | sigma = np.sqrt(dm)
58 | sh = plt.imshow(np.abs(residuals.T/sigma.T),aspect='auto',
59 | vmin=0,vmax=6)
60 | cb = plt.colorbar(sh)
61 | ax = res.add_subplot(122)
62 | bb = plt.hist(residuals.flatten()/sigma.flatten(),bins=50,color='b',
63 | histtype='step',normed=True)
64 | g_init = models.Gaussian1D(amplitude=.008, mean=0, stddev=50.)
65 | fit_g = fitting.LevMarLSQFitter()
66 | del_xx = bb[1][1:]-bb[1][1:2]
67 | g = fit_g(g_init, bb[1][:-1]+del_xx, bb[0])
68 | plt.plot(bb[1][1:], g(bb[1][1:]), label='Gaussian',color='green')
69 | ax2= ax.twinx()
70 | plt.hist(residuals.flatten(),bins=50,color='k',
71 | histtype='step',cumulative=True,normed=True)
72 | plt.axvline(x=np.median(residuals.flatten()),
73 | linestyle='--',color='r',alpha=0.6)
74 | plt.xlim(-6,6)
75 | plt.tight_layout()
76 |
--------------------------------------------------------------------------------
/pydoppler/test_data/ugem99/txhugem4008:
--------------------------------------------------------------------------------
1 | 6425.7934549521 25.5853
2 | 6425.94011140748 5.115589
3 | 6426.08676786285 27.77861
4 | 6426.23342431823 89.33115
5 | 6426.3800807736 43.50479
6 | 6426.52673722898 28.07883
7 | 6426.67339368436 -4.863095
8 | 6426.82005013973 -35.90275
9 | 6426.96670659511 52.52535
10 | 6427.11336305048 37.49124
11 | 6427.26001950586 9.782999
12 | 6427.40667596124 25.60694
13 | 6427.55333241661 30.16222
14 | 6427.69998887199 2.466208
15 | 6427.84664532736 9.31217
16 | 6427.99330178274 12.00848
17 | 6428.13995823812 83.29053
18 | 6428.28661469349 49.55418
19 | 6428.43327114887 -40.39526
20 | 6428.57992760424 92.55219
21 | 6428.72658405962 63.25944
22 | 6428.87324051499 17.18166
23 | 6429.01989697037 31.58742
24 | 6429.16655342575 40.35079
25 | 6429.31320988112 27.1171
26 | 6429.4598663365 53.85732
27 | 6429.60652279187 45.40812
28 | 6429.75317924725 55.92236
29 | 6429.89983570263 112.2789
30 | 6430.046492158 80.1021
31 | 6430.19314861338 54.16782
32 | 6430.33980506875 118.1988
33 | 6430.48646152413 27.09377
34 | 6430.6331179795 -3.532522
35 | 6430.77977443488 62.27185
36 | 6430.92643089026 41.7171
37 | 6431.07308734563 27.42423
38 | 6431.21974380101 20.45715
39 | 6431.36640025638 28.48754
40 | 6431.51305671176 55.98774
41 | 6431.65971316713 20.02346
42 | 6431.80636962251 12.26731
43 | 6431.95302607789 72.66393
44 | 6432.09968253326 93.81512
45 | 6432.24633898864 42.8853
46 | 6432.39299544401 34.70865
47 | 6432.53965189939 -75.3935
48 | 6432.68630835477 1.209053
49 | 6432.83296481014 84.79436
50 | 6432.97962126552 57.51962
51 | 6433.12627772089 74.67657
52 | 6433.27293417627 53.91092
53 | 6433.41959063165 8.914453
54 | 6433.56624708702 -5.784708
55 | 6433.7129035424 38.37061
56 | 6433.85955999777 -29.81855
57 | 6434.00621645315 -6.77641
58 | 6434.15287290853 66.94148
59 | 6434.2995293639 126.4661
60 | 6434.44618581928 81.74986
61 | 6434.59284227465 36.80796
62 | 6434.73949873003 69.79884
63 | 6434.8861551854 55.91977
64 | 6435.03281164078 57.17696
65 | 6435.17946809616 137.3949
66 | 6435.32612455153 104.3758
67 | 6435.47278100691 104.6404
68 | 6435.61943746228 4.080729
69 | 6435.76609391766 26.82587
70 | 6435.91275037304 51.62651
71 | 6436.05940682841 -0.8424249
72 | 6436.20606328379 46.46515
73 | 6436.35271973916 77.60444
74 | 6436.49937619454 1.46666
75 | 6436.64603264992 17.43308
76 | 6436.79268910529 57.25027
77 | 6436.93934556067 61.25612
78 | 6437.08600201604 80.06651
79 | 6437.23265847142 71.45667
80 | 6437.3793149268 40.64195
81 | 6437.52597138217 53.56566
82 | 6437.67262783755 78.77454
83 | 6437.81928429292 88.77995
84 | 6437.9659407483 61.79343
85 | 6438.11259720368 25.31281
86 | 6438.25925365905 48.73485
87 | 6438.40591011443 93.64561
88 | 6438.5525665698 89.07982
89 | 6438.69922302518 77.65756
90 | 6438.84587948055 71.75562
91 | 6438.99253593593 49.89167
92 | 6439.13919239131 -11.77721
93 | 6439.28584884668 -2.933198
94 | 6439.43250530206 95.89529
95 | 6439.57916175743 110.8051
96 | 6439.72581821281 62.99121
97 | 6439.87247466818 68.69646
98 | 6440.01913112356 65.1226
99 | 6440.16578757894 33.46449
100 | 6440.31244403431 54.37823
101 | 6440.45910048969 76.75149
102 | 6440.60575694506 55.6579
103 | 6440.75241340044 77.21692
104 | 6440.89906985582 56.20614
105 | 6441.04572631119 109.1347
106 | 6441.19238276657 88.26933
107 | 6441.33903922194 53.17405
108 | 6441.48569567732 73.95615
109 | 6441.6323521327 66.42425
110 | 6441.77900858807 42.28101
111 | 6441.92566504345 67.88439
112 | 6442.07232149882 121.0571
113 | 6442.2189779542 110.8756
114 | 6442.36563440958 112.1509
115 | 6442.51229086495 -1.090612
116 | 6442.65894732033 16.1952
117 | 6442.8056037757 63.06069
118 | 6442.95226023108 11.31817
119 | 6443.09891668645 34.55653
120 | 6443.24557314183 105.3248
121 | 6443.39222959721 101.3766
122 | 6443.53888605258 113.656
123 | 6443.68554250796 113.8385
124 | 6443.83219896333 41.98215
125 | 6443.97885541871 84.13034
126 | 6444.12551187408 73.48995
127 | 6444.27216832946 34.63615
128 | 6444.41882478484 91.17495
129 | 6444.56548124021 80.09575
130 | 6444.71213769559 94.45927
131 | 6444.85879415097 103.6797
132 | 6445.00545060634 12.50774
133 | 6445.15210706171 14.386
134 | 6445.29876351709 71.55073
135 | 6445.44541997247 4.614894
136 | 6445.59207642784 -8.934535
137 | 6445.73873288322 81.85416
138 | 6445.8853893386 127.1041
139 | 6446.03204579397 140.4199
140 | 6446.17870224935 55.63607
141 | 6446.32535870472 83.88093
142 | 6446.4720151601 47.67043
143 | 6446.61867161547 32.85175
144 | 6446.76532807085 49.83264
145 | 6446.91198452623 42.16685
146 | 6447.0586409816 34.8787
147 | 6447.20529743698 40.17118
148 | 6447.35195389236 36.58959
149 | 6447.49861034773 39.62455
150 | 6447.64526680311 55.76527
151 | 6447.79192325848 48.32032
152 | 6447.93857971386 95.8793
153 | 6448.08523616923 169.6989
154 | 6448.23189262461 88.46104
155 | 6448.37854907999 18.90854
156 | 6448.52520553536 6.289664
157 | 6448.67186199074 21.67239
158 | 6448.81851844611 68.80703
159 | 6448.96517490149 107.2201
160 | 6449.11183135686 80.32751
161 | 6449.25848781224 96.79135
162 | 6449.40514426762 118.9212
163 | 6449.55180072299 3.915819
164 | 6449.69845717837 -20.07601
165 | 6449.84511363374 -21.50544
166 | 6449.99177008912 70.39454
167 | 6450.1384265445 96.39194
168 | 6450.28508299987 65.14276
169 | 6450.43173945525 88.2975
170 | 6450.57839591062 65.12063
171 | 6450.725052366 13.69307
172 | 6450.87170882137 69.58011
173 | 6451.01836527675 81.02919
174 | 6451.16502173213 -3.42713
175 | 6451.3116781875 51.86281
176 | 6451.45833464288 88.90965
177 | 6451.60499109826 -35.51388
178 | 6451.75164755363 84.26986
179 | 6451.89830400901 118.3234
180 | 6452.04496046438 39.16881
181 | 6452.19161691976 92.16787
182 | 6452.33827337513 147.9185
183 | 6452.48492983051 57.13036
184 | 6452.63158628589 74.99416
185 | 6452.77824274126 101.7535
186 | 6452.92489919664 105.4224
187 | 6453.07155565201 165.75
188 | 6453.21821210739 148.2115
189 | 6453.36486856276 52.19772
190 | 6453.51152501814 33.41108
191 | 6453.65818147352 56.3947
192 | 6453.80483792889 66.88663
193 | 6453.95149438427 65.07154
194 | 6454.09815083964 73.2718
195 | 6454.24480729502 129.9156
196 | 6454.3914637504 45.97902
197 | 6454.53812020577 58.92739
198 | 6454.68477666115 150.0005
199 | 6454.83143311652 53.12819
200 | 6454.9780895719 61.64381
201 | 6455.12474602728 124.5372
202 | 6455.27140248265 59.91013
203 | 6455.41805893803 41.80126
204 | 6455.5647153934 75.25866
205 | 6455.71137184878 78.6641
206 | 6455.85802830415 31.28897
207 | 6456.00468475953 122.3535
208 | 6456.15134121491 22.45922
209 | 6456.29799767028 -3.922161
210 | 6456.44465412566 -26.33353
211 | 6456.59131058103 25.5718
212 | 6456.73796703641 18.17634
213 | 6456.88462349179 99.56216
214 | 6457.03127994716 104.2992
215 | 6457.17793640254 59.1769
216 | 6457.32459285791 135.6716
217 | 6457.47124931329 156.2973
218 | 6457.61790576866 62.70107
219 | 6457.76456222404 71.37264
220 | 6457.91121867942 139.4274
221 | 6458.05787513479 54.41899
222 | 6458.20453159017 43.03091
223 | 6458.35118804554 66.36443
224 | 6458.49784450092 -28.99715
225 | 6458.6445009563 89.94174
226 | 6458.79115741167 104.3403
227 | 6458.93781386705 28.19795
228 | 6459.08447032242 9.334018
229 | 6459.2311267778 61.0525
230 | 6459.37778323318 58.77985
231 | 6459.52443968855 98.44338
232 | 6459.67109614393 145.9092
233 | 6459.8177525993 102.4362
234 | 6459.96440905468 145.5219
235 | 6460.11106551005 79.31373
236 | 6460.25772196543 -26.65954
237 | 6460.40437842081 69.45507
238 | 6460.55103487618 132.2011
239 | 6460.69769133156 151.428
240 | 6460.84434778693 99.52069
241 | 6460.99100424231 71.17001
242 | 6461.13766069769 112.5924
243 | 6461.28431715306 135.4968
244 | 6461.43097360844 117.4923
245 | 6461.57763006381 81.92284
246 | 6461.72428651919 74.15465
247 | 6461.87094297457 95.21921
248 | 6462.01759942994 80.5855
249 | 6462.16425588532 62.87094
250 | 6462.31091234069 75.66328
251 | 6462.45756879607 64.9567
252 | 6462.60422525145 77.72759
253 | 6462.75088170682 27.22024
254 | 6462.8975381622 49.96893
255 | 6463.04419461757 71.42941
256 | 6463.19085107295 70.86082
257 | 6463.33750752832 90.24826
258 | 6463.4841639837 74.26424
259 | 6463.63082043908 70.32434
260 | 6463.77747689445 37.65242
261 | 6463.92413334983 7.147669
262 | 6464.0707898052 38.47009
263 | 6464.21744626058 53.64537
264 | 6464.36410271595 111.0439
265 | 6464.51075917133 164.5862
266 | 6464.65741562671 94.5704
267 | 6464.80407208208 150.2436
268 | 6464.95072853746 55.76471
269 | 6465.09738499284 148.749
270 | 6465.24404144821 82.27212
271 | 6465.39069790359 92.82329
272 | 6465.53735435896 115.1551
273 | 6465.68401081434 158.6446
274 | 6465.83066726971 129.5974
275 | 6465.97732372509 56.67278
276 | 6466.12398018047 38.81866
277 | 6466.27063663584 60.31516
278 | 6466.41729309122 77.90629
279 | 6466.56394954659 58.79269
280 | 6466.71060600197 57.88536
281 | 6466.85726245734 79.11277
282 | 6467.00391891272 61.48271
283 | 6467.1505753681 147.5165
284 | 6467.29723182347 134.3239
285 | 6467.44388827885 141.7439
286 | 6467.59054473422 181.0822
287 | 6467.7372011896 134.9026
288 | 6467.88385764498 53.35395
289 | 6468.03051410035 91.82825
290 | 6468.17717055573 147.0444
291 | 6468.3238270111 134.785
292 | 6468.47048346648 137.8437
293 | 6468.61713992186 94.53143
294 | 6468.76379637723 73.75185
295 | 6468.91045283261 112.9909
296 | 6469.05710928798 137.1131
297 | 6469.20376574336 153.0194
298 | 6469.35042219873 75.72148
299 | 6469.49707865411 50.20814
300 | 6469.64373510949 120.8284
301 | 6469.79039156486 99.35631
302 | 6469.93704802024 31.71656
303 | 6470.08370447561 65.51681
304 | 6470.23036093099 140.7819
305 | 6470.37701738637 132.3483
306 | 6470.52367384174 163.9879
307 | 6470.67033029712 143.7842
308 | 6470.81698675249 110.6709
309 | 6470.96364320787 173.2908
310 | 6471.11029966324 214.4706
311 | 6471.25695611862 172.132
312 | 6471.403612574 84.9351
313 | 6471.55026902937 42.76236
314 | 6471.69692548475 112.4691
315 | 6471.84358194012 148.3215
316 | 6471.9902383955 127.3541
317 | 6472.13689485088 102.5118
318 | 6472.28355130625 88.40446
319 | 6472.43020776163 136.9909
320 | 6472.576864217 186.1175
321 | 6472.72352067238 134.2387
322 | 6472.87017712775 133.9381
323 | 6473.01683358313 122.0075
324 | 6473.16349003851 143.0784
325 | 6473.31014649388 122.3769
326 | 6473.45680294926 109.5457
327 | 6473.60345940463 80.22211
328 | 6473.75011586001 -0.3488353
329 | 6473.89677231539 12.83955
330 | 6474.04342877076 131.8186
331 | 6474.19008522614 205.1465
332 | 6474.33674168151 181.8053
333 | 6474.48339813689 118.8839
334 | 6474.63005459227 75.95333
335 | 6474.77671104764 70.73276
336 | 6474.92336750302 68.9487
337 | 6475.07002395839 77.52137
338 | 6475.21668041377 170.8027
339 | 6475.36333686915 162.6596
340 | 6475.50999332452 195.9866
341 | 6475.6566497799 112.8362
342 | 6475.80330623527 124.9359
343 | 6475.94996269065 146.57
344 | 6476.09661914603 223.1154
345 | 6476.2432756014 146.8929
346 | 6476.38993205678 38.68388
347 | 6476.53658851215 113.2594
348 | 6476.68324496753 114.1908
349 | 6476.8299014229 119.9649
350 | 6476.97655787828 167.6031
351 | 6477.12321433366 155.4459
352 | 6477.26987078903 173.3128
353 | 6477.41652724441 126.6391
354 | 6477.56318369978 85.6796
355 | 6477.70984015516 132.8543
356 | 6477.85649661053 169.1392
357 | 6478.00315306591 60.92754
358 | 6478.14980952129 95.36634
359 | 6478.29646597666 190.8742
360 | 6478.44312243204 121.3855
361 | 6478.58977888741 61.0847
362 | 6478.73643534279 100.9141
363 | 6478.88309179817 84.7228
364 | 6479.02974825354 36.45514
365 | 6479.17640470892 93.03688
366 | 6479.32306116429 142.5527
367 | 6479.46971761967 117.7941
368 | 6479.61637407505 167.6433
369 | 6479.76303053042 186.5531
370 | 6479.9096869858 123.6394
371 | 6480.05634344117 181.7941
372 | 6480.20299989655 179.9167
373 | 6480.34965635193 135.7863
374 | 6480.4963128073 132.1271
375 | 6480.64296926268 128.794
376 | 6480.78962571805 191.1341
377 | 6480.93628217343 195.1657
378 | 6481.0829386288 158.0941
379 | 6481.22959508418 145.4191
380 | 6481.37625153956 110.2492
381 | 6481.52290799493 97.35088
382 | 6481.66956445031 136.5745
383 | 6481.81622090568 101.8202
384 | 6481.96287736106 94.33928
385 | 6482.10953381644 157.3916
386 | 6482.25619027181 150.8215
387 | 6482.40284672719 167.2455
388 | 6482.54950318256 193.9503
389 | 6482.69615963794 206.011
390 | 6482.84281609332 146.5158
391 | 6482.98947254869 172.489
392 | 6483.13612900407 146.2413
393 | 6483.28278545944 117.9666
394 | 6483.42944191482 143.642
395 | 6483.57609837019 175.4639
396 | 6483.72275482557 228.1023
397 | 6483.86941128095 214.5737
398 | 6484.01606773632 197.165
399 | 6484.1627241917 208.859
400 | 6484.30938064707 152.112
401 | 6484.45603710245 147.3626
402 | 6484.60269355782 214.3828
403 | 6484.7493500132 203.6852
404 | 6484.89600646858 171.8551
405 | 6485.04266292395 181.1516
406 | 6485.18931937933 200.1682
407 | 6485.3359758347 182.8742
408 | 6485.48263229008 108.1164
409 | 6485.62928874546 181.0685
410 | 6485.77594520083 205.9927
411 | 6485.92260165621 185.0195
412 | 6486.06925811158 81.16722
413 | 6486.21591456696 116.9782
414 | 6486.36257102234 154.5502
415 | 6486.50922747771 173.7755
416 | 6486.65588393309 104.8962
417 | 6486.80254038846 125.4162
418 | 6486.94919684384 191.1702
419 | 6487.09585329921 188.7816
420 | 6487.24250975459 204.6619
421 | 6487.38916620997 195.4197
422 | 6487.53582266534 156.1623
423 | 6487.68247912072 187.7446
424 | 6487.82913557609 180.1891
425 | 6487.97579203147 154.0972
426 | 6488.12244848685 256.2912
427 | 6488.26910494222 272.3614
428 | 6488.4157613976 180.5876
429 | 6488.56241785297 162.7979
430 | 6488.70907430835 116.0913
431 | 6488.85573076372 132.6806
432 | 6489.0023872191 179.1359
433 | 6489.14904367448 185.952
434 | 6489.29570012985 213.6429
435 | 6489.44235658523 168.7286
436 | 6489.5890130406 218.3605
437 | 6489.73566949598 149.5448
438 | 6489.88232595136 174.3036
439 | 6490.02898240673 233.8575
440 | 6490.17563886211 157.5956
441 | 6490.32229531748 134.2119
442 | 6490.46895177286 170.6785
443 | 6490.61560822824 161.614
444 | 6490.76226468361 169.7562
445 | 6490.90892113899 185.1284
446 | 6491.05557759436 192.0548
447 | 6491.20223404974 191.0751
448 | 6491.34889050511 166.5942
449 | 6491.49554696049 218.9427
450 | 6491.64220341587 225.977
451 | 6491.78885987124 246.1242
452 | 6491.93551632662 221.6344
453 | 6492.082172782 116.7592
454 | 6492.22882923737 183.2528
455 | 6492.37548569275 212.8104
456 | 6492.52214214812 210.1459
457 | 6492.6687986035 160.5612
458 | 6492.81545505887 163.5416
459 | 6492.96211151425 242.7223
460 | 6493.10876796963 192.7764
461 | 6493.255424425 145.345
462 | 6493.40208088038 252.3898
463 | 6493.54873733575 287.4803
464 | 6493.69539379113 217.5264
465 | 6493.8420502465 162.593
466 | 6493.98870670188 136.347
467 | 6494.13536315726 176.9957
468 | 6494.28201961263 146.5273
469 | 6494.42867606801 74.53065
470 | 6494.57533252339 162.7291
471 | 6494.72198897876 170.4373
472 | 6494.86864543414 208.3272
473 | 6495.01530188951 181.7047
474 | 6495.16195834489 205.9007
475 | 6495.30861480026 212.6986
476 | 6495.45527125564 179.5257
477 | 6495.60192771101 241.379
478 | 6495.74858416639 256.3247
479 | 6495.89524062177 196.745
480 | 6496.04189707714 192.2519
481 | 6496.18855353252 234.8785
482 | 6496.3352099879 289.2394
483 | 6496.48186644327 268.7156
484 | 6496.62852289865 250.8023
485 | 6496.77517935402 264.1273
486 | 6496.9218358094 265.7617
487 | 6497.06849226477 191.331
488 | 6497.21514872015 102.4679
489 | 6497.36180517553 147.8973
490 | 6497.5084616309 213.4311
491 | 6497.65511808628 198.1023
492 | 6497.80177454165 182.6125
493 | 6497.94843099703 259.8252
494 | 6498.0950874524 300.2902
495 | 6498.24174390778 188.2423
496 | 6498.38840036316 152.5724
497 | 6498.53505681853 238.5116
498 | 6498.68171327391 234.1871
499 | 6498.82836972928 188.2649
500 | 6498.97502618466 216.2206
501 | 6499.12168264004 239.3497
502 | 6499.26833909541 178.2252
503 | 6499.41499555079 163.42
504 | 6499.56165200616 228.0535
505 | 6499.70830846154 174.1083
506 | 6499.85496491692 149.9574
507 | 6500.00162137229 213.6527
508 | 6500.14827782767 183.8851
509 | 6500.29493428304 187.1479
510 | 6500.44159073842 227.5201
511 | 6500.5882471938 258.2231
512 | 6500.73490364917 308.7701
513 | 6500.88156010455 205.2283
514 | 6501.02821655992 117.5153
515 | 6501.1748730153 156.247
516 | 6501.32152947067 196.3441
517 | 6501.46818592605 208.2365
518 | 6501.61484238143 179.8529
519 | 6501.7614988368 228.4789
520 | 6501.90815529218 220.0983
521 | 6502.05481174755 234.3853
522 | 6502.20146820293 293.4114
523 | 6502.3481246583 287.0479
524 | 6502.49478111368 230.2397
525 | 6502.64143756906 239.1301
526 | 6502.78809402443 259.0925
527 | 6502.93475047981 261.9901
528 | 6503.08140693519 179.853
529 | 6503.22806339056 160.8032
530 | 6503.37471984594 228.9715
531 | 6503.52137630131 205.8242
532 | 6503.66803275669 173.8468
533 | 6503.81468921206 266.1725
534 | 6503.96134566744 278.1642
535 | 6504.10800212282 192.4115
536 | 6504.25465857819 189.972
537 | 6504.40131503357 222.5354
538 | 6504.54797148894 203.6315
539 | 6504.69462794432 159.3158
540 | 6504.84128439969 261.0307
541 | 6504.98794085507 183.5948
542 | 6505.13459731045 311.4583
543 | 6505.28125376582 295.7059
544 | 6505.4279102212 131.8863
545 | 6505.57456667657 174.8597
546 | 6505.72122313195 162.4886
547 | 6505.86787958733 196.5515
548 | 6506.0145360427 198.4702
549 | 6506.16119249808 285.3676
550 | 6506.30784895346 248.379
551 | 6506.45450540883 181.7473
552 | 6506.60116186421 178.9505
553 | 6506.74781831958 114.3078
554 | 6506.89447477496 120.2022
555 | 6507.04113123033 119.1532
556 | 6507.18778768571 217.4686
557 | 6507.33444414109 281.3634
558 | 6507.48110059646 224.5424
559 | 6507.62775705184 224.5438
560 | 6507.77441350721 231.4283
561 | 6507.92106996259 247.0938
562 | 6508.06772641796 190.5253
563 | 6508.21438287334 145.4116
564 | 6508.36103932872 258.8543
565 | 6508.50769578409 343.844
566 | 6508.65435223947 194.7095
567 | 6508.80100869484 181.7076
568 | 6508.94766515022 267.9284
569 | 6509.0943216056 326.2139
570 | 6509.24097806097 285.0122
571 | 6509.38763451635 246.1419
572 | 6509.53429097172 141.1214
573 | 6509.6809474271 231.5737
574 | 6509.82760388248 304.8796
575 | 6509.97426033785 249.8847
576 | 6510.12091679323 276.9943
577 | 6510.2675732486 269.7213
578 | 6510.41422970398 225.4126
579 | 6510.56088615935 282.0394
580 | 6510.70754261473 216.2897
581 | 6510.85419907011 202.335
582 | 6511.00085552548 267.6196
583 | 6511.14751198086 256.4282
584 | 6511.29416843623 261.1324
585 | 6511.44082489161 283.6146
586 | 6511.58748134698 235.3784
587 | 6511.73413780236 183.5279
588 | 6511.88079425774 270.8469
589 | 6512.02745071311 290.4411
590 | 6512.17410716849 178.0877
591 | 6512.32076362386 147.3982
592 | 6512.46742007924 177.085
593 | 6512.61407653462 218.1165
594 | 6512.76073298999 158.2467
595 | 6512.90738944537 200.9752
596 | 6513.05404590074 121.4987
597 | 6513.20070235612 214.7144
598 | 6513.3473588115 203.0425
599 | 6513.49401526687 147.7961
600 | 6513.64067172225 240.871
601 | 6513.78732817762 235.4319
602 | 6513.933984633 200.6962
603 | 6514.08064108838 182.9603
604 | 6514.22729754375 220.3176
605 | 6514.37395399913 258.5334
606 | 6514.5206104545 215.1347
607 | 6514.66726690988 195.3617
608 | 6514.81392336525 270.8014
609 | 6514.96057982063 234.3169
610 | 6515.10723627601 231.0389
611 | 6515.25389273138 275.8815
612 | 6515.40054918676 263.0346
613 | 6515.54720564213 280.5719
614 | 6515.69386209751 204.4899
615 | 6515.84051855288 241.3716
616 | 6515.98717500826 333.4545
617 | 6516.13383146364 210.2508
618 | 6516.28048791901 187.6879
619 | 6516.42714437439 159.8395
620 | 6516.57380082976 181.8712
621 | 6516.72045728514 269.467
622 | 6516.86711374052 282.0191
623 | 6517.01377019589 254.4877
624 | 6517.16042665127 213.1103
625 | 6517.30708310664 285.9018
626 | 6517.45373956202 287.8782
627 | 6517.6003960174 277.4016
628 | 6517.74705247277 162.0021
629 | 6517.89370892815 297.2898
630 | 6518.04036538352 272.6913
631 | 6518.1870218389 103.0431
632 | 6518.33367829428 114.4483
633 | 6518.48033474965 190.0891
634 | 6518.62699120503 246.8027
635 | 6518.7736476604 377.3827
636 | 6518.92030411578 326.6257
637 | 6519.06696057115 295.0858
638 | 6519.21361702653 294.2739
639 | 6519.36027348191 309.4639
640 | 6519.50692993728 313.2369
641 | 6519.65358639266 230.2204
642 | 6519.80024284803 308.7228
643 | 6519.94689930341 333.768
644 | 6520.09355575879 246.4267
645 | 6520.24021221416 214.3815
646 | 6520.38686866954 135.9801
647 | 6520.53352512491 66.46104
648 | 6520.68018158029 198.0278
649 | 6520.82683803567 140.8266
650 | 6520.97349449104 243.6237
651 | 6521.12015094642 221.104
652 | 6521.26680740179 177.346
653 | 6521.41346385717 219.3311
654 | 6521.56012031254 255.213
655 | 6521.70677676792 212.1681
656 | 6521.8534332233 245.0997
657 | 6522.00008967867 228.2793
658 | 6522.14674613405 267.5327
659 | 6522.29340258942 252.346
660 | 6522.4400590448 180.03
661 | 6522.58671550018 257.989
662 | 6522.73337195555 294.24
663 | 6522.88002841093 279.8188
664 | 6523.0266848663 298.8506
665 | 6523.17334132168 225.3399
666 | 6523.31999777706 200.3542
667 | 6523.46665423243 266.5626
668 | 6523.61331068781 294.2988
669 | 6523.75996714318 269.632
670 | 6523.90662359856 264.9716
671 | 6524.05328005393 307.8788
672 | 6524.19993650931 293.2719
673 | 6524.34659296469 242.1323
674 | 6524.49324942006 226.4007
675 | 6524.63990587544 195.3725
676 | 6524.78656233081 185.6115
677 | 6524.93321878619 190.2045
678 | 6525.07987524156 230.2383
679 | 6525.22653169694 303.5924
680 | 6525.37318815232 288.667
681 | 6525.51984460769 297.5703
682 | 6525.66650106307 281.4589
683 | 6525.81315751844 253.113
684 | 6525.95981397382 285.0104
685 | 6526.1064704292 265.3238
686 | 6526.25312688457 217.6976
687 | 6526.39978333995 214.8423
688 | 6526.54643979532 244.7057
689 | 6526.6930962507 294.1729
690 | 6526.83975270608 232.9108
691 | 6526.98640916145 282.3004
692 | 6527.13306561683 235.7012
693 | 6527.2797220722 210.012
694 | 6527.42637852758 261.4419
695 | 6527.57303498295 304.5121
696 | 6527.71969143833 326.9967
697 | 6527.86634789371 180.5239
698 | 6528.01300434908 215.3168
699 | 6528.15966080446 357.1053
700 | 6528.30631725983 240.186
701 | 6528.45297371521 186.3633
702 | 6528.59963017059 255.1879
703 | 6528.74628662596 199.7619
704 | 6528.89294308134 194.3575
705 | 6529.03959953671 275.5666
706 | 6529.18625599209 316.0722
707 | 6529.33291244746 291.6846
708 | 6529.47956890284 202.2221
709 | 6529.62622535822 215.9107
710 | 6529.77288181359 256.9981
711 | 6529.91953826897 253.8938
712 | 6530.06619472435 252.2153
713 | 6530.21285117972 328.3061
714 | 6530.3595076351 339.5113
715 | 6530.50616409047 302.277
716 | 6530.65282054585 160.8153
717 | 6530.79947700122 291.3185
718 | 6530.9461334566 328.6066
719 | 6531.09278991198 253.7409
720 | 6531.23944636735 383.9526
721 | 6531.38610282273 320.1776
722 | 6531.5327592781 252.6117
723 | 6531.67941573348 219.6702
724 | 6531.82607218885 244.1264
725 | 6531.97272864423 267.4495
726 | 6532.11938509961 268.4605
727 | 6532.26604155498 239.1398
728 | 6532.41269801036 233.2188
729 | 6532.55935446574 328.47
730 | 6532.70601092111 307.2286
731 | 6532.85266737649 242.7631
732 | 6532.99932383186 254.7867
733 | 6533.14598028724 299.2552
734 | 6533.29263674261 306.8788
735 | 6533.43929319799 291.9931
736 | 6533.58594965336 370.4435
737 | 6533.73260610874 376.7344
738 | 6533.87926256412 351.8931
739 | 6534.02591901949 392.0906
740 | 6534.17257547487 369.0575
741 | 6534.31923193025 287.3195
742 | 6534.46588838562 251.9451
743 | 6534.612544841 328.0366
744 | 6534.75920129637 299.4012
745 | 6534.90585775175 305.2026
746 | 6535.05251420712 354.8948
747 | 6535.1991706625 310.8354
748 | 6535.34582711788 206.6388
749 | 6535.49248357325 372.094
750 | 6535.63914002863 389.4353
751 | 6535.785796484 229.5321
752 | 6535.93245293938 269.951
753 | 6536.07910939475 331.3923
754 | 6536.22576585013 245.7466
755 | 6536.37242230551 284.3419
756 | 6536.51907876088 351.7499
757 | 6536.66573521626 323.0557
758 | 6536.81239167163 321.4261
759 | 6536.95904812701 308.1432
760 | 6537.10570458239 315.646
761 | 6537.25236103776 371.5175
762 | 6537.39901749314 343.9535
763 | 6537.54567394852 274.5738
764 | 6537.69233040389 392.1211
765 | 6537.83898685927 309.1316
766 | 6537.98564331464 259.1444
767 | 6538.13229977002 315.1194
768 | 6538.27895622539 332.0208
769 | 6538.42561268077 255.1936
770 | 6538.57226913615 248.0774
771 | 6538.71892559152 358.8522
772 | 6538.8655820469 363.666
773 | 6539.01223850227 292.0842
774 | 6539.15889495765 328.3028
775 | 6539.30555141302 429.4121
776 | 6539.4522078684 397.8549
777 | 6539.59886432378 341.8357
778 | 6539.74552077915 292.6964
779 | 6539.89217723453 251.7095
780 | 6540.0388336899 343.1076
781 | 6540.18549014528 365.8588
782 | 6540.33214660066 335.2758
783 | 6540.47880305603 390.6525
784 | 6540.62545951141 422.3239
785 | 6540.77211596678 385.0797
786 | 6540.91877242216 374.576
787 | 6541.06542887754 345.2239
788 | 6541.21208533291 374.7776
789 | 6541.35874178829 316.9006
790 | 6541.50539824366 315.2507
791 | 6541.65205469904 399.3571
792 | 6541.79871115441 375.8052
793 | 6541.94536760979 360.4928
794 | 6542.09202406517 391.4184
795 | 6542.23868052054 382.8205
796 | 6542.38533697592 336.0089
797 | 6542.53199343129 383.6204
798 | 6542.67864988667 490.4454
799 | 6542.82530634204 396.045
800 | 6542.97196279742 327.642
801 | 6543.1186192528 296.5583
802 | 6543.26527570817 438.1725
803 | 6543.41193216355 369.3122
804 | 6543.55858861892 382.5274
805 | 6543.7052450743 351.1816
806 | 6543.85190152968 370.9033
807 | 6543.99855798505 409.9189
808 | 6544.14521444043 435.4745
809 | 6544.2918708958 367.7957
810 | 6544.43852735118 516.3572
811 | 6544.58518380656 514.9125
812 | 6544.73184026193 338.8178
813 | 6544.87849671731 275.7362
814 | 6545.02515317268 431.5425
815 | 6545.17180962806 452.4039
816 | 6545.31846608344 379.5302
817 | 6545.46512253881 465.2376
818 | 6545.61177899419 522.9515
819 | 6545.75843544956 514.1289
820 | 6545.90509190494 449.2675
821 | 6546.05174836031 399.3715
822 | 6546.19840481569 367.0637
823 | 6546.34506127107 436.7069
824 | 6546.49171772644 547.5153
825 | 6546.63837418182 463.2274
826 | 6546.7850306372 424.0026
827 | 6546.93168709257 526.4276
828 | 6547.07834354795 569.5748
829 | 6547.22500000332 522.2139
830 | 6547.3716564587 563.3168
831 | 6547.51831291407 587.8398
832 | 6547.66496936945 565.6705
833 | 6547.81162582483 584.5856
834 | 6547.9582822802 571.1396
835 | 6548.10493873558 613.1998
836 | 6548.25159519095 622.1334
837 | 6548.39825164633 597.109
838 | 6548.5449081017 587.6158
839 | 6548.69156455708 546.7965
840 | 6548.83822101246 627.7186
841 | 6548.98487746783 710.0164
842 | 6549.13153392321 735.6177
843 | 6549.27819037859 631.0515
844 | 6549.42484683396 679.6526
845 | 6549.57150328933 717.6309
846 | 6549.71815974471 678.165
847 | 6549.86481620009 606.5073
848 | 6550.01147265546 674.5163
849 | 6550.15812911084 716.0734
850 | 6550.30478556621 666.0327
851 | 6550.45144202159 629.1735
852 | 6550.59809847697 749.2858
853 | 6550.74475493234 827.1257
854 | 6550.89141138772 801.9004
855 | 6551.0380678431 743.0653
856 | 6551.18472429847 736.0904
857 | 6551.33138075385 656.6793
858 | 6551.47803720922 747.7899
859 | 6551.6246936646 765.2488
860 | 6551.77135011997 692.9739
861 | 6551.91800657535 827.7395
862 | 6552.06466303073 903.9857
863 | 6552.2113194861 868.0743
864 | 6552.35797594148 839.3909
865 | 6552.50463239685 770.098
866 | 6552.65128885223 707.2469
867 | 6552.7979453076 782.217
868 | 6552.94460176298 802.1429
869 | 6553.09125821836 759.6458
870 | 6553.23791467373 751.014
871 | 6553.38457112911 787.4673
872 | 6553.53122758448 803.1982
873 | 6553.67788403986 809.8148
874 | 6553.82454049524 904.0918
875 | 6553.97119695061 891.2776
876 | 6554.11785340599 826.7496
877 | 6554.26450986136 791.595
878 | 6554.41116631674 819.0209
879 | 6554.55782277212 816.6345
880 | 6554.70447922749 738.7394
881 | 6554.85113568287 748.5858
882 | 6554.99779213824 798.4823
883 | 6555.14444859362 784.3643
884 | 6555.29110504899 711.3696
885 | 6555.43776150437 722.8839
886 | 6555.58441795975 772.4093
887 | 6555.73107441512 866.5121
888 | 6555.8777308705 840.5506
889 | 6556.02438732587 761.1158
890 | 6556.17104378125 750.7841
891 | 6556.31770023663 754.4905
892 | 6556.464356692 724.135
893 | 6556.61101314738 765.8207
894 | 6556.75766960275 815.6363
895 | 6556.90432605813 808.2771
896 | 6557.0509825135 903.8859
897 | 6557.19763896888 862.1776
898 | 6557.34429542426 824.2377
899 | 6557.49095187963 698.0002
900 | 6557.63760833501 894.099
901 | 6557.78426479038 830.7029
902 | 6557.93092124576 776.0857
903 | 6558.07757770114 857.1594
904 | 6558.22423415651 777.1822
905 | 6558.37089061189 845.8908
906 | 6558.51754706726 895.4857
907 | 6558.66420352264 785.9772
908 | 6558.81085997802 822.1743
909 | 6558.95751643339 884.343
910 | 6559.10417288877 843.5507
911 | 6559.25082934414 908.4141
912 | 6559.39748579952 855.9551
913 | 6559.54414225489 821.2424
914 | 6559.69079871027 912.0208
915 | 6559.83745516565 920.543
916 | 6559.98411162102 783.9944
917 | 6560.1307680764 819.0295
918 | 6560.27742453177 855.2272
919 | 6560.42408098715 872.4769
920 | 6560.57073744253 918.8267
921 | 6560.7173938979 828.0239
922 | 6560.86405035328 740.025
923 | 6561.01070680866 832.1019
924 | 6561.15736326403 777.0563
925 | 6561.30401971941 801.5882
926 | 6561.45067617478 765.5986
927 | 6561.59733263016 730.6354
928 | 6561.74398908553 716.0798
929 | 6561.89064554091 748.3523
930 | 6562.03730199628 794.5571
931 | 6562.18395845166 811.2848
932 | 6562.33061490704 730.8304
933 | 6562.47727136241 779.3246
934 | 6562.62392781779 876.1548
935 | 6562.77058427316 797.6307
936 | 6562.91724072854 735.6761
937 | 6563.06389718391 636.4343
938 | 6563.21055363929 587.0322
939 | 6563.35721009467 556.6741
940 | 6563.50386655004 503.042
941 | 6563.65052300542 524.6359
942 | 6563.7971794608 532.27
943 | 6563.94383591617 559.8677
944 | 6564.09049237155 656.2987
945 | 6564.23714882692 651.5632
946 | 6564.3838052823 454.3564
947 | 6564.53046173768 417.2787
948 | 6564.67711819305 528.4346
949 | 6564.82377464843 550.7917
950 | 6564.9704311038 473.9616
951 | 6565.11708755918 520.6211
952 | 6565.26374401455 525.4581
953 | 6565.41040046993 515.968
954 | 6565.55705692531 475.1314
955 | 6565.70371338068 471.0521
956 | 6565.85036983606 569.5387
957 | 6565.99702629143 573.8948
958 | 6566.14368274681 561.6888
959 | 6566.29033920219 500.2326
960 | 6566.43699565756 522.5347
961 | 6566.58365211294 568.65
962 | 6566.73030856831 484.2427
963 | 6566.87696502369 523.5364
964 | 6567.02362147906 681.3382
965 | 6567.17027793444 661.8645
966 | 6567.31693438982 643.055
967 | 6567.46359084519 712.4914
968 | 6567.61024730057 700.4753
969 | 6567.75690375594 660.1353
970 | 6567.90356021132 615.8997
971 | 6568.0502166667 654.3582
972 | 6568.19687312207 731.6954
973 | 6568.34352957745 671.8184
974 | 6568.49018603282 620.9368
975 | 6568.6368424882 659.7478
976 | 6568.78349894357 632.4559
977 | 6568.93015539895 689.1554
978 | 6569.07681185433 770.6353
979 | 6569.2234683097 797.5828
980 | 6569.37012476508 784.7562
981 | 6569.51678122045 714.9683
982 | 6569.66343767583 698.0602
983 | 6569.8100941312 723.811
984 | 6569.95675058658 728.4487
985 | 6570.10340704196 794.4044
986 | 6570.25006349733 733.8812
987 | 6570.39671995271 700.1499
988 | 6570.54337640809 831.9657
989 | 6570.69003286346 790.5939
990 | 6570.83668931884 814.4464
991 | 6570.98334577421 839.589
992 | 6571.13000222959 869.0762
993 | 6571.27665868496 742.979
994 | 6571.42331514034 787.5016
995 | 6571.56997159572 837.8787
996 | 6571.71662805109 656.0761
997 | 6571.86328450647 718.4302
998 | 6572.00994096184 827.9344
999 | 6572.15659741722 898.6419
1000 | 6572.3032538726 802.7294
1001 | 6572.44991032797 775.0193
1002 | 6572.59656678335 861.7485
1003 | 6572.74322323872 843.4996
1004 | 6572.8898796941 808.245
1005 | 6573.03653614947 824.4199
1006 | 6573.18319260485 861.2492
1007 | 6573.32984906023 814.1765
1008 | 6573.4765055156 809.0004
1009 | 6573.62316197098 809.2145
1010 | 6573.76981842635 802.9498
1011 | 6573.91647488173 817.7055
1012 | 6574.0631313371 911.3378
1013 | 6574.20978779248 907.282
1014 | 6574.35644424786 940.6713
1015 | 6574.50310070323 857.5538
1016 | 6574.64975715861 843.8539
1017 | 6574.79641361398 834.8184
1018 | 6574.94307006936 914.2909
1019 | 6575.08972652474 889.5176
1020 | 6575.23638298011 845.0621
1021 | 6575.38303943549 865.0549
1022 | 6575.52969589087 794.291
1023 | 6575.67635234624 876.2714
1024 | 6575.82300880162 908.8448
1025 | 6575.96966525699 929.1436
1026 | 6576.11632171237 886.0273
1027 | 6576.26297816774 811.7519
1028 | 6576.40963462312 843.3697
1029 | 6576.5562910785 866.7029
1030 | 6576.70294753387 973.6539
1031 | 6576.84960398925 902.1147
1032 | 6576.99626044462 899.6266
1033 | 6577.1429169 905.8559
1034 | 6577.28957335537 864.4767
1035 | 6577.43622981075 913.6741
1036 | 6577.58288626613 915.9134
1037 | 6577.7295427215 864.8759
1038 | 6577.87619917688 821.4492
1039 | 6578.02285563225 836.7698
1040 | 6578.16951208763 913.2195
1041 | 6578.31616854301 836.4483
1042 | 6578.46282499838 756.8129
1043 | 6578.60948145376 696.3057
1044 | 6578.75613790913 819.7901
1045 | 6578.90279436451 847.7303
1046 | 6579.04945081989 820.1881
1047 | 6579.19610727526 729.6437
1048 | 6579.34276373064 633.7653
1049 | 6579.48942018601 642.3812
1050 | 6579.63607664139 669.8622
1051 | 6579.78273309676 632.402
1052 | 6579.92938955214 721.113
1053 | 6580.07604600752 666.4919
1054 | 6580.22270246289 722.7114
1055 | 6580.36935891827 730.576
1056 | 6580.51601537365 707.4782
1057 | 6580.66267182902 631.0463
1058 | 6580.8093282844 635.1938
1059 | 6580.95598473977 646.1035
1060 | 6581.10264119515 622.6477
1061 | 6581.24929765052 678.7699
1062 | 6581.3959541059 616.468
1063 | 6581.54261056128 558.0185
1064 | 6581.68926701665 586.6411
1065 | 6581.83592347203 562.5121
1066 | 6581.9825799274 558.0722
1067 | 6582.12923638278 521.3726
1068 | 6582.27589283815 565.7167
1069 | 6582.42254929353 550.8731
1070 | 6582.56920574891 528.4202
1071 | 6582.71586220428 548.6222
1072 | 6582.86251865966 589.9081
1073 | 6583.00917511503 478.4969
1074 | 6583.15583157041 410.9919
1075 | 6583.30248802579 439.322
1076 | 6583.44914448116 488.4527
1077 | 6583.59580093654 441.6261
1078 | 6583.74245739191 431.8379
1079 | 6583.88911384729 447.7475
1080 | 6584.03577030266 465.8465
1081 | 6584.18242675804 451.5915
1082 | 6584.32908321342 448.3234
1083 | 6584.47573966879 408.675
1084 | 6584.62239612417 439.2007
1085 | 6584.76905257955 457.5721
1086 | 6584.91570903492 394.3756
1087 | 6585.0623654903 334.2785
1088 | 6585.20902194567 360.4536
1089 | 6585.35567840105 408.4034
1090 | 6585.50233485642 396.798
1091 | 6585.6489913118 420.4236
1092 | 6585.79564776718 403.1371
1093 | 6585.94230422255 385.4372
1094 | 6586.08896067793 377.9085
1095 | 6586.2356171333 318.5515
1096 | 6586.38227358868 357.5996
1097 | 6586.52893004405 311.8819
1098 | 6586.67558649943 348.1978
1099 | 6586.82224295481 378.9219
1100 | 6586.96889941018 377.6509
1101 | 6587.11555586556 340.7897
1102 | 6587.26221232094 305.6046
1103 | 6587.40886877631 283.8387
1104 | 6587.55552523168 303.9027
1105 | 6587.70218168706 375.0997
1106 | 6587.84883814244 388.9352
1107 | 6587.99549459781 369.9359
1108 | 6588.14215105319 282.9653
1109 | 6588.28880750856 302.0583
1110 | 6588.43546396394 421.8818
1111 | 6588.58212041932 489.713
1112 | 6588.72877687469 408.1749
1113 | 6588.87543333007 337.3124
1114 | 6589.02208978545 414.5043
1115 | 6589.16874624082 461.3307
1116 | 6589.3154026962 393.4447
1117 | 6589.46205915157 330.6915
1118 | 6589.60871560695 348.8755
1119 | 6589.75537206232 379.6594
1120 | 6589.9020285177 466.2528
1121 | 6590.04868497308 411.8056
1122 | 6590.19534142845 314.5703
1123 | 6590.34199788383 333.5468
1124 | 6590.4886543392 300.2564
1125 | 6590.63531079458 278.2111
1126 | 6590.78196724995 309.4969
1127 | 6590.92862370533 382.2021
1128 | 6591.07528016071 330.1128
1129 | 6591.22193661608 273.1566
1130 | 6591.36859307146 329.7739
1131 | 6591.51524952683 335.3616
1132 | 6591.66190598221 295.6603
1133 | 6591.80856243759 353.7806
1134 | 6591.95521889296 288.0641
1135 | 6592.10187534834 246.6806
1136 | 6592.24853180371 318.6031
1137 | 6592.39518825909 191.0908
1138 | 6592.54184471447 234.1686
1139 | 6592.68850116984 261.3004
1140 | 6592.83515762522 262.7228
1141 | 6592.98181408059 335.3403
1142 | 6593.12847053597 328.7934
1143 | 6593.27512699134 278.6162
1144 | 6593.42178344672 322.0889
1145 | 6593.5684399021 225.8844
1146 | 6593.71509635747 250.0853
1147 | 6593.86175281285 245.4851
1148 | 6594.00840926822 192.2799
1149 | 6594.1550657236 319.6205
1150 | 6594.30172217898 320.073
1151 | 6594.44837863435 343.8936
1152 | 6594.59503508973 340.7007
1153 | 6594.7416915451 285.3364
1154 | 6594.88834800048 230.5367
1155 | 6595.03500445586 264.4208
1156 | 6595.18166091123 194.8625
1157 | 6595.32831736661 248.8924
1158 | 6595.47497382198 261.1971
1159 | 6595.62163027736 413.8144
1160 | 6595.76828673274 299.365
1161 | 6595.91494318811 253.103
1162 | 6596.06159964349 284.3447
1163 | 6596.20825609886 287.3372
1164 | 6596.35491255424 301.5085
1165 | 6596.50156900961 260.6986
1166 | 6596.64822546499 274.6584
1167 | 6596.79488192037 346.948
1168 | 6596.94153837574 332.0191
1169 | 6597.08819483112 240.6201
1170 | 6597.23485128649 274.8877
1171 | 6597.38150774187 222.6535
1172 | 6597.52816419725 289.1939
1173 | 6597.67482065262 261.3475
1174 | 6597.821477108 220.6019
1175 | 6597.96813356337 190.1411
1176 | 6598.11479001875 270.0254
1177 | 6598.26144647412 258.7078
1178 | 6598.4081029295 260.4439
1179 | 6598.55475938488 262.8343
1180 | 6598.70141584025 258.4691
1181 | 6598.84807229563 351.4399
1182 | 6598.99472875101 271.9156
1183 | 6599.14138520638 212.7948
1184 | 6599.28804166176 276.3405
1185 | 6599.43469811713 360.27
1186 | 6599.58135457251 254.487
1187 | 6599.72801102788 184.1345
1188 | 6599.87466748326 190.4793
1189 | 6600.02132393863 235.8136
1190 | 6600.16798039401 249.7027
1191 | 6600.31463684939 209.7348
1192 | 6600.46129330476 307.1583
1193 | 6600.60794976014 262.6326
1194 | 6600.75460621551 228.1625
1195 | 6600.90126267089 142.0997
1196 | 6601.04791912626 250.2549
1197 | 6601.19457558164 389.5516
1198 | 6601.34123203702 277.9693
1199 | 6601.48788849239 226.1713
1200 | 6601.63454494777 158.8227
1201 | 6601.78120140315 263.4457
1202 | 6601.92785785852 268.9621
1203 | 6602.0745143139 312.4922
1204 | 6602.22117076927 334.2691
1205 | 6602.36782722465 358.2508
1206 | 6602.51448368002 373.8528
1207 | 6602.6611401354 295.926
1208 | 6602.80779659078 321.4558
1209 | 6602.95445304615 242.7499
1210 | 6603.10110950153 285.9166
1211 | 6603.2477659569 245.1328
1212 | 6603.39442241228 280.9849
1213 | 6603.54107886766 226.9381
1214 | 6603.68773532303 183.5357
1215 | 6603.83439177841 165.5107
1216 | 6603.98104823378 213.4494
1217 | 6604.12770468916 327.8599
1218 | 6604.27436114454 283.0748
1219 | 6604.42101759991 262.0483
1220 | 6604.56767405529 240.6315
1221 | 6604.71433051066 340.5324
1222 | 6604.86098696604 356.8286
1223 | 6605.00764342141 304.8689
1224 | 6605.15429987679 293.5062
1225 | 6605.30095633217 318.6546
1226 | 6605.44761278754 274.3242
1227 | 6605.59426924292 208.7026
1228 | 6605.74092569829 288.4755
1229 | 6605.88758215367 312.2286
1230 | 6606.03423860905 281.6208
1231 | 6606.18089506442 228.49
1232 | 6606.3275515198 204.9793
1233 | 6606.47420797517 269.4752
1234 | 6606.62086443055 314.5669
1235 | 6606.76752088592 318.0547
1236 | 6606.9141773413 209.5514
1237 | 6607.06083379668 250.2571
1238 | 6607.20749025205 372.0839
1239 | 6607.35414670743 335.8852
1240 | 6607.5008031628 355.0419
1241 | 6607.64745961818 249.8991
1242 | 6607.79411607355 245.4323
1243 | 6607.94077252893 327.374
1244 | 6608.08742898431 289.1916
1245 | 6608.23408543968 290.1137
1246 | 6608.38074189506 326.72
1247 | 6608.52739835044 347.8612
1248 | 6608.67405480581 178.0787
1249 | 6608.82071126119 205.3126
1250 | 6608.96736771656 354.8284
1251 | 6609.11402417194 305.0118
1252 | 6609.26068062732 260.2161
1253 | 6609.40733708269 350.7846
1254 | 6609.55399353807 235.0067
1255 | 6609.70064999344 226.411
1256 | 6609.84730644882 227.5087
1257 | 6609.99396290419 248.2419
1258 | 6610.14061935957 182.4997
1259 | 6610.28727581495 222.8614
1260 | 6610.43393227032 276.1185
1261 | 6610.5805887257 258.1737
1262 | 6610.72724518107 229.6745
1263 | 6610.87390163645 236.8355
1264 | 6611.02055809183 195.5539
1265 | 6611.1672145472 312.3453
1266 | 6611.31387100258 328.3215
1267 | 6611.46052745795 273.4656
1268 | 6611.60718391333 235.3385
1269 | 6611.7538403687 204.678
1270 | 6611.90049682408 140.1505
1271 | 6612.04715327946 252.7444
1272 | 6612.19380973483 262.4842
1273 | 6612.34046619021 262.3055
1274 | 6612.48712264558 275.436
1275 | 6612.63377910096 210.4435
1276 | 6612.78043555634 235.2607
1277 | 6612.92709201171 263.3746
1278 | 6613.07374846709 222.799
1279 | 6613.22040492246 327.109
1280 | 6613.36706137784 253.382
1281 | 6613.51371783322 264.6519
1282 | 6613.66037428859 231.8244
1283 | 6613.80703074397 163.652
1284 | 6613.95368719934 120.0797
1285 | 6614.10034365472 183.1519
1286 | 6614.24700011009 124.6553
1287 | 6614.39365656547 248.6499
1288 | 6614.54031302084 368.1588
1289 | 6614.68696947622 135.9025
1290 | 6614.8336259316 145.1322
1291 | 6614.98028238697 199.0585
1292 | 6615.12693884235 160.6704
1293 | 6615.27359529772 258.0927
1294 | 6615.4202517531 197.9115
1295 | 6615.56690820848 160.8957
1296 | 6615.71356466385 242.0396
1297 | 6615.86022111923 288.464
1298 | 6616.0068775746 248.4342
1299 | 6616.15353402998 164.9361
1300 | 6616.30019048536 181.1809
1301 | 6616.44684694073 266.3157
1302 | 6616.59350339611 261.2596
1303 | 6616.74015985148 162.5653
1304 | 6616.88681630686 180.2202
1305 | 6617.03347276224 263.5411
1306 | 6617.18012921761 278.8026
1307 | 6617.32678567299 215.9441
1308 | 6617.47344212836 211.6835
1309 | 6617.62009858374 270.0964
1310 | 6617.76675503911 204.3201
1311 | 6617.91341149449 262.8348
1312 | 6618.06006794987 298.5477
1313 | 6618.20672440524 225.6142
1314 | 6618.35338086062 273.1071
1315 | 6618.500037316 266.404
1316 | 6618.64669377137 220.3403
1317 | 6618.79335022675 262.8157
1318 | 6618.94000668212 289.6536
1319 | 6619.0866631375 216.729
1320 | 6619.23331959287 272.7498
1321 | 6619.37997604825 211.9156
1322 | 6619.52663250362 248.515
1323 | 6619.673288959 312.9534
1324 | 6619.81994541438 121.1396
1325 | 6619.96660186975 164.1932
1326 | 6620.11325832513 301.5853
1327 | 6620.2599147805 266.246
1328 | 6620.40657123588 249.895
1329 | 6620.55322769126 199.7937
1330 | 6620.69988414663 279.4408
1331 | 6620.84654060201 273.6426
1332 | 6620.99319705738 260.6132
1333 | 6621.13985351276 272.6404
1334 | 6621.28650996814 271.4075
1335 | 6621.43316642351 230.363
1336 | 6621.57982287889 196.8225
1337 | 6621.72647933426 271.8954
1338 | 6621.87313578964 298.2637
1339 | 6622.01979224502 324.7792
1340 | 6622.16644870039 225.8355
1341 | 6622.31310515577 225.7562
1342 | 6622.45976161114 281.748
1343 | 6622.60641806652 291.1562
1344 | 6622.7530745219 146.6917
1345 | 6622.89973097727 150.096
1346 | 6623.04638743265 177.2825
1347 | 6623.19304388802 256.3297
1348 | 6623.3397003434 297.9227
1349 | 6623.48635679877 245.0566
1350 | 6623.63301325415 305.4514
1351 | 6623.77966970953 214.8481
1352 | 6623.9263261649 287.4678
1353 | 6624.07298262028 254.3072
1354 | 6624.21963907565 212.9019
1355 | 6624.36629553103 316.1425
1356 | 6624.51295198641 252.266
1357 | 6624.65960844178 175.8136
1358 | 6624.80626489716 208.505
1359 | 6624.95292135253 191.9644
1360 | 6625.09957780791 155.2791
1361 | 6625.24623426329 286.0274
1362 | 6625.39289071866 256.8102
1363 | 6625.53954717404 243.8546
1364 | 6625.68620362941 217.0988
1365 | 6625.83286008479 189.1943
1366 | 6625.97951654016 232.7072
1367 | 6626.12617299554 143.8011
1368 | 6626.27282945092 154.4686
1369 | 6626.41948590629 127.8287
1370 | 6626.56614236167 187.5823
1371 | 6626.71279881704 152.8506
1372 | 6626.85945527242 286.5441
1373 | 6627.0061117278 312.0145
1374 | 6627.15276818317 247.2217
1375 | 6627.29942463855 200.2962
1376 | 6627.44608109392 287.2013
1377 | 6627.5927375493 284.6837
1378 | 6627.73939400467 290.6175
1379 | 6627.88605046005 274.9666
1380 | 6628.03270691543 260.3479
1381 | 6628.1793633708 233.48
1382 | 6628.32601982618 293.5536
1383 | 6628.47267628155 273.3046
1384 | 6628.61933273693 138.3974
1385 | 6628.7659891923 214.6666
1386 | 6628.91264564768 252.7036
1387 | 6629.05930210306 248.9777
1388 | 6629.20595855843 222.2726
1389 | 6629.35261501381 238.5007
1390 | 6629.49927146918 239.7296
1391 | 6629.64592792456 158.0498
1392 | 6629.79258437994 139.7056
1393 | 6629.93924083531 126.9963
1394 | 6630.08589729069 271.0854
1395 | 6630.23255374606 194.0513
1396 | 6630.37921020144 204.9893
1397 | 6630.52586665682 221.5909
1398 | 6630.67252311219 228.8563
1399 | 6630.81917956757 234.3129
1400 | 6630.96583602294 195.278
1401 | 6631.11249247832 181.4191
1402 | 6631.25914893369 128.9827
1403 | 6631.40580538907 216.1818
1404 | 6631.55246184445 292.0102
1405 | 6631.69911829982 196.8522
1406 | 6631.8457747552 233.862
1407 | 6631.99243121057 190.8298
1408 | 6632.13908766595 203.4566
1409 | 6632.28574412133 177.8127
1410 | 6632.4324005767 206.4914
1411 | 6632.57905703208 148.2997
1412 | 6632.72571348746 223.0939
1413 | 6632.87236994283 227.9191
1414 | 6633.01902639821 72.91753
1415 | 6633.16568285358 173.7725
1416 | 6633.31233930896 222.474
1417 | 6633.45899576433 125.1814
1418 | 6633.60565221971 139.025
1419 | 6633.75230867509 185.9449
1420 | 6633.89896513046 214.9978
1421 | 6634.04562158584 235.5835
1422 | 6634.19227804121 288.8055
1423 | 6634.33893449659 185.9473
1424 | 6634.48559095196 175.9714
1425 | 6634.63224740734 178.5878
1426 | 6634.77890386272 133.8118
1427 | 6634.92556031809 114.901
1428 | 6635.07221677347 157.3939
1429 | 6635.21887322884 155.1574
1430 | 6635.36552968422 225.4003
1431 | 6635.5121861396 165.485
1432 | 6635.65884259497 178.4563
1433 | 6635.80549905035 105.3557
1434 | 6635.95215550572 167.431
1435 | 6636.0988119611 161.4153
1436 | 6636.24546841647 206.3685
1437 | 6636.39212487185 276.0359
1438 | 6636.53878132723 175.3636
1439 | 6636.6854377826 271.3178
1440 | 6636.83209423798 222.2335
1441 | 6636.97875069335 88.85374
1442 | 6637.12540714873 282.5864
1443 | 6637.27206360411 250.3462
1444 | 6637.41872005948 112.3573
1445 | 6637.56537651486 149.407
1446 | 6637.71203297023 219.9272
1447 | 6637.85868942561 164.7282
1448 | 6638.00534588098 128.9444
1449 | 6638.15200233636 159.9653
1450 | 6638.29865879174 125.8622
1451 | 6638.44531524711 157.2221
1452 | 6638.59197170249 176.205
1453 | 6638.73862815786 196.0692
1454 | 6638.88528461324 213.4377
1455 | 6639.03194106862 156.1867
1456 | 6639.17859752399 189.0084
1457 | 6639.32525397937 239.2356
1458 | 6639.47191043474 331.84
1459 | 6639.61856689012 305.3728
1460 | 6639.7652233455 140.5447
1461 | 6639.91187980087 228.1169
1462 | 6640.05853625625 191.7988
1463 | 6640.20519271162 198.6622
1464 | 6640.351849167 200.7946
1465 | 6640.49850562238 178.8168
1466 | 6640.64516207775 172.6138
1467 | 6640.79181853313 137.2177
1468 | 6640.9384749885 125.4885
1469 | 6641.08513144388 150.36
1470 | 6641.23178789925 113.0308
1471 | 6641.37844435463 168.0334
1472 | 6641.52510081001 225.4622
1473 | 6641.67175726538 162.876
1474 | 6641.81841372076 175.6653
1475 | 6641.96507017613 183.3372
1476 | 6642.11172663151 238.3735
1477 | 6642.25838308689 212.2405
1478 | 6642.40503954226 146.1895
1479 | 6642.55169599764 147.6148
1480 | 6642.69835245301 170.1644
1481 | 6642.84500890839 220.7706
1482 | 6642.99166536376 166.4191
1483 | 6643.13832181914 115.6568
1484 | 6643.28497827452 159.0657
1485 | 6643.43163472989 163.9312
1486 | 6643.57829118527 155.9548
1487 | 6643.72494764064 117.888
1488 | 6643.87160409602 213.8676
1489 | 6644.0182605514 239.6886
1490 | 6644.16491700677 241.4238
1491 | 6644.31157346215 160.1875
1492 | 6644.45822991752 163.7926
1493 | 6644.6048863729 232.7233
1494 | 6644.75154282827 217.698
1495 | 6644.89819928365 146.7339
1496 | 6645.04485573903 225.7327
1497 | 6645.1915121944 220.0934
1498 | 6645.33816864978 251.3642
1499 | 6645.48482510515 200.3754
1500 | 6645.63148156053 191.3808
1501 | 6645.7781380159 189.0415
1502 | 6645.92479447128 163.5497
1503 | 6646.07145092666 160.2577
1504 | 6646.21810738203 137.9286
1505 | 6646.36476383741 230.2594
1506 | 6646.51142029279 184.0872
1507 | 6646.65807674816 253.2845
1508 | 6646.80473320354 173.6404
1509 | 6646.95138965891 161.2415
1510 | 6647.09804611429 169.5623
1511 | 6647.24470256967 272.1558
1512 | 6647.39135902504 260.4583
1513 | 6647.53801548042 198.3636
1514 | 6647.68467193579 154.8896
1515 | 6647.83132839117 203.2605
1516 | 6647.97798484654 207.1161
1517 | 6648.12464130192 212.9476
1518 | 6648.2712977573 206.6654
1519 | 6648.41795421267 164.0907
1520 | 6648.56461066805 215.4099
1521 | 6648.71126712342 215.3425
1522 | 6648.8579235788 93.80142
1523 | 6649.00458003418 164.3911
1524 | 6649.15123648955 142.5781
1525 | 6649.29789294493 261.6137
1526 | 6649.4445494003 173.2639
1527 | 6649.59120585568 133.33
1528 | 6649.73786231105 224.0782
1529 | 6649.88451876643 201.9677
1530 | 6650.03117522181 172.0605
1531 | 6650.17783167718 258.0645
1532 | 6650.32448813256 168.4947
1533 | 6650.47114458793 137.6056
1534 | 6650.61780104331 108.3519
1535 | 6650.76445749869 133.2868
1536 | 6650.91111395406 123.1896
1537 | 6651.05777040944 203.2931
1538 | 6651.20442686481 173.2295
1539 | 6651.35108332019 181.8334
1540 | 6651.49773977557 199.6114
1541 | 6651.64439623094 217.2514
1542 | 6651.79105268632 70.9881
1543 | 6651.93770914169 41.91805
1544 | 6652.08436559707 154.9469
1545 | 6652.23102205245 108.5635
1546 | 6652.37767850782 79.65182
1547 | 6652.52433496319 177.4102
1548 | 6652.67099141857 215.3093
1549 | 6652.81764787395 119.0186
1550 | 6652.96430432932 178.4666
1551 | 6653.1109607847 213.9674
1552 | 6653.25761724008 198.1872
1553 | 6653.40427369545 141.8152
1554 | 6653.55093015083 112.8576
1555 | 6653.6975866062 166.097
1556 | 6653.84424306158 149.8951
1557 | 6653.99089951696 128.9433
1558 | 6654.13755597233 190.1507
1559 | 6654.28421242771 139.3059
1560 | 6654.43086888308 109.7026
1561 | 6654.57752533846 63.34818
1562 | 6654.72418179383 122.8049
1563 | 6654.87083824921 128.7327
1564 | 6655.01749470459 150.1728
1565 | 6655.16415115996 217.2484
1566 | 6655.31080761534 185.6585
1567 | 6655.45746407071 201.7187
1568 | 6655.60412052609 184.4025
1569 | 6655.75077698147 197.1855
1570 | 6655.89743343684 130.4298
1571 | 6656.04408989222 150.7943
1572 | 6656.19074634759 189.7526
1573 | 6656.33740280297 227.9741
1574 | 6656.48405925835 187.5416
1575 | 6656.63071571372 151.02
1576 | 6656.7773721691 166.5492
1577 | 6656.92402862447 105.299
1578 | 6657.07068507985 162.4478
1579 | 6657.21734153522 228.8627
1580 | 6657.3639979906 117.7102
1581 | 6657.51065444598 148.2947
1582 | 6657.65731090135 184.2785
1583 | 6657.80396735673 237.2005
1584 | 6657.9506238121 148.2634
1585 | 6658.09728026748 36.44136
1586 | 6658.24393672285 128.2952
1587 | 6658.39059317823 133.8991
1588 | 6658.53724963361 165.6066
1589 | 6658.68390608898 145.9675
1590 | 6658.83056254436 116.3591
1591 | 6658.97721899973 78.06361
1592 | 6659.12387545511 51.3557
1593 | 6659.27053191049 119.9377
1594 | 6659.41718836586 174.4342
1595 | 6659.56384482124 138.3766
1596 | 6659.71050127661 129.4732
1597 | 6659.85715773199 141.575
1598 | 6660.00381418736 142.9995
1599 | 6660.15047064274 122.3977
1600 | 6660.29712709812 33.70505
1601 | 6660.44378355349 93.0497
1602 | 6660.59044000887 160.8294
1603 | 6660.73709646425 76.52708
1604 | 6660.88375291962 107.7761
1605 | 6661.030409375 72.00413
1606 | 6661.17706583037 91.17594
1607 | 6661.32372228575 99.97955
1608 | 6661.47037874112 73.792
1609 | 6661.6170351965 86.54167
1610 | 6661.76369165188 163.5819
1611 | 6661.91034810725 227.3017
1612 | 6662.05700456263 133.4113
1613 | 6662.203661018 52.89118
1614 | 6662.35031747338 141.0884
1615 | 6662.49697392876 153.1884
1616 | 6662.64363038413 156.6171
1617 | 6662.79028683951 108.6235
1618 | 6662.93694329488 118.9408
1619 | 6663.08359975026 141.7455
1620 | 6663.23025620564 135.7544
1621 | 6663.37691266101 112.8626
1622 | 6663.52356911639 117.1737
1623 | 6663.67022557176 133.7811
1624 | 6663.81688202714 116.0276
1625 | 6663.96353848251 108.8752
1626 | 6664.11019493789 101.104
1627 | 6664.25685139327 199.2945
1628 | 6664.40350784864 159.3139
1629 | 6664.55016430402 185.4659
1630 | 6664.69682075939 229.6116
1631 | 6664.84347721477 158.3027
1632 | 6664.99013367015 117.8701
1633 | 6665.13679012552 95.32306
1634 | 6665.2834465809 85.30643
1635 | 6665.43010303627 173.2317
1636 | 6665.57675949165 100.8398
1637 | 6665.72341594703 137.0558
1638 | 6665.8700724024 79.78004
1639 | 6666.01672885778 121.8985
1640 | 6666.16338531315 150.8818
1641 | 6666.31004176853 181.0966
1642 | 6666.4566982239 162.7959
1643 | 6666.60335467928 180.12
1644 | 6666.75001113466 121.1801
1645 | 6666.89666759003 152.5504
1646 | 6667.04332404541 133.1696
1647 | 6667.18998050078 204.3986
1648 | 6667.33663695616 128.7816
1649 | 6667.48329341154 66.77262
1650 | 6667.62994986691 146.6253
1651 | 6667.77660632229 183.2932
1652 | 6667.92326277766 180.4992
1653 | 6668.06991923304 189.4852
1654 | 6668.21657568841 136.1804
1655 | 6668.36323214379 206.0521
1656 | 6668.50988859917 185.7171
1657 | 6668.65654505454 150.507
1658 | 6668.80320150992 80.45966
1659 | 6668.94985796529 74.76597
1660 | 6669.09651442067 150.4176
1661 | 6669.24317087605 224.3971
1662 | 6669.38982733142 157.6527
1663 | 6669.5364837868 228.8113
1664 | 6669.68314024217 75.64437
1665 | 6669.82979669755 86.97521
1666 | 6669.97645315292 85.94996
1667 | 6670.1231096083 62.19365
1668 | 6670.26976606368 64.61758
1669 | 6670.41642251905 139.6445
1670 | 6670.56307897443 96.45654
1671 | 6670.70973542981 66.42998
1672 | 6670.85639188518 97.7496
1673 | 6671.00304834056 101.7126
1674 | 6671.14970479593 152.829
1675 | 6671.29636125131 118.1279
1676 | 6671.44301770668 163.5172
1677 | 6671.58967416206 53.11142
1678 | 6671.73633061744 8.955628
1679 | 6671.88298707281 62.56757
1680 | 6672.02964352819 151.5761
1681 | 6672.17629998356 141.3522
1682 | 6672.32295643894 137.8768
1683 | 6672.46961289431 197.6718
1684 | 6672.61626934969 261.0243
1685 | 6672.76292580507 220.7006
1686 | 6672.90958226044 165.2782
1687 | 6673.05623871582 93.56291
1688 | 6673.20289517119 184.6577
1689 | 6673.34955162657 128.6561
1690 | 6673.49620808194 94.48392
1691 | 6673.64286453732 92.16611
1692 | 6673.7895209927 129.0556
1693 | 6673.93617744807 161.6248
1694 | 6674.08283390345 78.90186
1695 | 6674.22949035882 66.38065
1696 | 6674.3761468142 148.6133
1697 | 6674.52280326958 141.1688
1698 | 6674.66945972495 133.8917
1699 | 6674.81611618033 71.92426
1700 | 6674.9627726357 100.5115
1701 | 6675.10942909108 141.2148
1702 | 6675.25608554646 134.9798
1703 | 6675.40274200183 105.1558
1704 | 6675.54939845721 132.3192
1705 | 6675.69605491258 188.8339
1706 | 6675.84271136796 129.5592
1707 | 6675.98936782333 76.93475
1708 | 6676.13602427871 138.7006
1709 | 6676.28268073409 110.9372
1710 | 6676.42933718946 78.30631
1711 | 6676.57599364484 134.5562
1712 | 6676.72265010021 201.5042
1713 | 6676.86930655559 100.1808
1714 | 6677.01596301096 111.4546
1715 | 6677.16261946634 100.0953
1716 | 6677.30927592172 20.41196
1717 | 6677.4559323771 134.1926
1718 | 6677.60258883247 198.9172
1719 | 6677.74924528785 231.6532
1720 | 6677.89590174322 105.443
1721 | 6678.0425581986 68.14558
1722 | 6678.18921465397 56.08713
1723 | 6678.33587110935 127.2224
1724 | 6678.48252756473 121.6061
1725 | 6678.6291840201 133.101
1726 | 6678.77584047548 125.1735
1727 | 6678.92249693085 160.5165
1728 | 6679.06915338623 86.15865
1729 | 6679.2158098416 81.14252
1730 | 6679.36246629698 127.0557
1731 | 6679.50912275236 13.3845
1732 | 6679.65577920773 21.9064
1733 | 6679.80243566311 65.11073
1734 | 6679.94909211849 62.18032
1735 | 6680.09574857386 89.70582
1736 | 6680.24240502924 159.0518
1737 | 6680.38906148461 64.2681
1738 | 6680.53571793999 126.4171
1739 | 6680.68237439536 126.6657
1740 | 6680.82903085074 5.142114
1741 | 6680.97568730611 5.616825
1742 | 6681.12234376149 49.82827
1743 | 6681.26900021687 123.8462
1744 | 6681.41565667224 102.3737
1745 | 6681.56231312762 62.2305
1746 | 6681.70896958299 82.41239
1747 | 6681.85562603837 21.16046
1748 | 6682.00228249375 34.77487
1749 | 6682.14893894912 101.3744
1750 | 6682.2955954045 75.19334
1751 | 6682.44225185987 52.26025
1752 | 6682.58890831525 -12.2713
1753 | 6682.73556477062 69.85818
1754 | 6682.882221226 179.8672
1755 | 6683.02887768138 102.7543
1756 | 6683.17553413675 63.18265
1757 | 6683.32219059213 35.47468
1758 | 6683.4688470475 86.15482
1759 | 6683.61550350288 148.859
1760 | 6683.76215995826 213.3774
1761 | 6683.90881641363 180.2833
1762 | 6684.05547286901 121.991
1763 | 6684.20212932438 97.39527
1764 | 6684.34878577976 75.1129
1765 | 6684.49544223514 97.00099
1766 | 6684.64209869051 39.89835
1767 | 6684.78875514589 160.0928
1768 | 6684.93541160126 93.87389
1769 | 6685.08206805664 122.5158
1770 | 6685.22872451202 125.5056
1771 | 6685.37538096739 101.4166
1772 | 6685.52203742277 83.68145
1773 | 6685.66869387814 70.46232
1774 | 6685.81535033352 112.3236
1775 | 6685.96200678889 99.74578
1776 | 6686.10866324427 29.56859
1777 | 6686.25531969965 93.4889
1778 | 6686.40197615502 113.915
1779 | 6686.5486326104 160.6926
1780 | 6686.69528906577 54.66016
1781 | 6686.84194552115 118.2206
1782 | 6686.98860197653 128.095
1783 | 6687.1352584319 76.96481
1784 | 6687.28191488728 35.13975
1785 | 6687.42857134265 54.93733
1786 | 6687.57522779803 77.9778
1787 | 6687.7218842534 25.72269
1788 | 6687.86854070878 -8.807614
1789 | 6688.01519716416 72.7886
1790 | 6688.16185361953 87.04781
1791 | 6688.30851007491 87.92777
1792 | 6688.45516653028 44.73328
1793 | 6688.60182298566 69.17641
1794 | 6688.74847944104 12.11328
1795 | 6688.89513589641 193.4829
1796 | 6689.04179235179 141.4421
1797 | 6689.18844880716 186.835
1798 | 6689.33510526254 74.73262
1799 | 6689.48176171792 19.70574
1800 | 6689.62841817329 49.77089
1801 | 6689.77507462867 -1.945571
1802 | 6689.92173108404 115.9485
1803 | 6690.06838753942 100.1583
1804 | 6690.2150439948 94.47063
1805 | 6690.36170045017 94.9845
1806 | 6690.50835690554 110.0756
1807 | 6690.65501336092 60.07783
1808 | 6690.8016698163 -54.59105
1809 | 6690.94832627168 102.2115
1810 | 6691.09498272705 55.92234
1811 | 6691.24163918243 114.8033
1812 | 6691.3882956378 -48.27692
1813 | 6691.53495209318 -41.15751
1814 | 6691.68160854855 41.72194
1815 | 6691.82826500393 49.62345
1816 | 6691.97492145931 83.2029
1817 | 6692.12157791468 24.46673
1818 | 6692.26823437006 39.64292
1819 | 6692.41489082543 115.1512
1820 | 6692.56154728081 103.4127
1821 | 6692.70820373618 38.24713
1822 | 6692.85486019156 41.65711
1823 | 6693.00151664694 146.361
1824 | 6693.14817310231 136.6607
1825 | 6693.29482955769 135.204
1826 | 6693.44148601306 109.5445
1827 | 6693.58814246844 120.6532
1828 | 6693.73479892382 82.26462
1829 | 6693.88145537919 109.684
1830 | 6694.02811183457 92.0491
1831 | 6694.17476828994 75.48916
1832 | 6694.32142474532 76.19907
1833 | 6694.4680812007 16.70801
1834 | 6694.61473765607 120.3727
1835 | 6694.76139411145 76.47886
1836 | 6694.90805056682 81.77024
1837 | 6695.0547070222 56.4377
1838 | 6695.20136347757 103.5729
1839 | 6695.34801993295 49.44217
1840 | 6695.49467638833 85.72097
1841 | 6695.6413328437 164.5569
1842 | 6695.78798929908 145.1264
1843 | 6695.93464575445 75.52757
1844 | 6696.08130220983 82.21582
1845 | 6696.2279586652 14.2152
1846 | 6696.37461512058 -31.16217
1847 | 6696.52127157596 -112.7178
1848 | 6696.66792803133 -19.42927
1849 | 6696.81458448671 66.54971
1850 | 6696.96124094209 69.87047
1851 | 6697.10789739746 99.15749
1852 | 6697.25455385284 63.54883
1853 | 6697.40121030821 54.56546
1854 | 6697.54786676359 87.75666
1855 | 6697.69452321896 65.83519
1856 | 6697.84117967434 54.65728
1857 | 6697.98783612972 88.39872
1858 | 6698.13449258509 69.75486
1859 | 6698.28114904047 42.35424
1860 | 6698.42780549584 53.95549
1861 | 6698.57446195122 134.9552
1862 | 6698.7211184066 89.04726
1863 | 6698.86777486197 99.69238
1864 | 6699.01443131735 29.61012
1865 | 6699.16108777272 23.01299
1866 | 6699.3077442281 47.80523
1867 | 6699.45440068347 63.2922
1868 | 6699.60105713885 85.47765
1869 | 6699.74771359423 100.1308
1870 | 6699.8943700496 -15.36889
1871 | 6700.04102650498 40.48402
1872 | 6700.18768296035 59.80405
1873 | 6700.33433941573 52.80512
1874 | 6700.48099587111 137.2136
1875 | 6700.62765232648 20.69531
1876 | 6700.77430878186 38.11709
1877 | 6700.92096523723 112.0869
1878 | 6701.06762169261 40.956
1879 | 6701.21427814799 24.42157
1880 | 6701.36093460336 -6.117372
1881 | 6701.50759105874 104.1449
1882 | 6701.65424751411 123.4631
1883 | 6701.80090396949 -9.132534
1884 | 6701.94756042486 93.97433
1885 | 6702.09421688024 55.91268
1886 | 6702.24087333562 13.83509
1887 | 6702.38752979099 -27.93554
1888 | 6702.53418624637 79.22815
1889 | 6702.68084270174 22.07458
1890 | 6702.82749915712 76.57798
1891 | 6702.97415561249 19.43046
1892 | 6703.12081206787 -28.43075
1893 | 6703.26746852325 -43.50156
1894 | 6703.41412497862 32.32796
1895 | 6703.560781434 86.64172
1896 | 6703.70743788937 23.46238
1897 | 6703.85409434475 92.19767
1898 | 6704.00075080013 63.73403
1899 | 6704.1474072555 61.14849
1900 | 6704.29406371088 -43.56305
1901 | 6704.44072016625 -50.15998
1902 | 6704.58737662163 129.1151
1903 | 6704.73403307701 88.79467
1904 | 6704.88068953238 -25.82769
1905 | 6705.02734598776 30.39192
1906 | 6705.17400244313 94.58587
1907 | 6705.32065889851 1.799872
1908 | 6705.46731535389 10.92026
1909 | 6705.61397180926 94.57939
1910 | 6705.76062826464 124.5555
1911 | 6705.90728472001 90.06426
1912 | 6706.05394117539 42.02292
1913 | 6706.20059763077 11.56075
1914 | 6706.34725408614 80.90027
1915 | 6706.49391054152 76.24354
1916 | 6706.64056699689 56.97467
1917 | 6706.78722345227 91.2066
1918 | 6706.93387990764 65.69446
1919 | 6707.08053636302 27.08086
1920 | 6707.2271928184 94.87392
1921 | 6707.37384927377 93.66444
1922 | 6707.52050572915 27.26361
1923 | 6707.66716218452 -5.337761
1924 | 6707.8138186399 13.00508
1925 | 6707.96047509528 83.40136
1926 | 6708.10713155065 -54.43883
1927 | 6708.25378800603 -52.05021
1928 | 6708.4004444614 94.41907
1929 | 6708.54710091678 56.0958
1930 | 6708.69375737216 25.38389
1931 | 6708.84041382753 29.23238
1932 | 6708.98707028291 81.76717
1933 | 6709.13372673828 108.4555
1934 | 6709.28038319366 89.07328
1935 | 6709.42703964903 45.96837
1936 | 6709.57369610441 51.29948
1937 | 6709.72035255979 30.58655
1938 | 6709.86700901516 42.32869
1939 | 6710.01366547054 39.00105
1940 | 6710.16032192591 -27.16566
1941 | 6710.30697838129 24.88566
1942 | 6710.45363483667 93.12434
1943 | 6710.60029129204 57.91033
1944 | 6710.74694774742 -61.10773
1945 | 6710.89360420279 -94.15269
1946 | 6711.04026065817 7.104421
1947 | 6711.18691711354 77.54015
1948 | 6711.33357356892 6.725111
1949 | 6711.4802300243 8.260183
1950 | 6711.62688647967 125.3586
1951 | 6711.77354293505 45.32916
1952 | 6711.92019939042 55.07585
1953 | 6712.0668558458 93.61189
1954 | 6712.21351230118 13.44003
1955 | 6712.36016875655 18.0626
1956 | 6712.50682521193 -12.37784
1957 | 6712.6534816673 65.36227
1958 | 6712.80013812268 118.7461
1959 | 6712.94679457805 103.2055
1960 | 6713.09345103343 89.17715
1961 | 6713.24010748881 80.09884
1962 | 6713.38676394418 -56.06086
1963 | 6713.53342039956 -31.82805
1964 | 6713.68007685493 94.12908
1965 | 6713.82673331031 103.2452
1966 | 6713.97338976569 -4.955136
1967 | 6714.12004622106 21.13272
1968 | 6714.26670267644 -10.05623
1969 | 6714.41335913181 39.59972
1970 | 6714.56001558719 101.572
1971 | 6714.70667204256 59.65905
1972 | 6714.85332849794 58.95206
1973 | 6714.99998495332 77.01693
1974 | 6715.14664140869 13.85927
1975 | 6715.29329786407 -27.88043
1976 | 6715.43995431945 -1.152264
1977 | 6715.58661077482 47.46487
1978 | 6715.7332672302 37.11018
1979 | 6715.87992368557 54.62857
1980 | 6716.02658014095 90.7709
1981 | 6716.17323659632 10.68226
1982 | 6716.3198930517 56.02105
1983 | 6716.46654950708 16.93428
1984 | 6716.61320596245 61.9372
1985 | 6716.75986241783 -13.23743
1986 | 6716.9065188732 0.6416206
1987 | 6717.05317532858 43.17947
1988 | 6717.19983178395 26.40118
1989 | 6717.34648823933 55.17821
1990 | 6717.49314469471 -60.64636
1991 | 6717.63980115008 3.519597
1992 | 6717.78645760546 38.36404
1993 | 6717.93311406084 -13.62472
1994 | 6718.07977051621 -74.23183
1995 | 6718.22642697159 -5.274443
1996 | 6718.37308342696 60.2217
1997 | 6718.51973988234 71.69642
1998 | 6718.66639633771 75.03237
1999 | 6718.81305279309 -49.28942
2000 | 6718.95970924846 -10.87632
2001 | 6719.10636570384 74.66318
2002 | 6719.25302215922 10.75944
2003 | 6719.39967861459 64.52384
2004 | 6719.54633506997 30.84675
2005 | 6719.69299152534 36.18697
2006 | 6719.83964798072 2.224311
2007 | 6719.9863044361 59.72824
2008 | 6720.13296089147 39.85081
2009 | 6720.27961734685 81.72473
2010 | 6720.42627380222 56.40321
2011 | 6720.5729302576 91.4016
2012 | 6720.71958671297 126.1261
2013 | 6720.86624316835 83.55839
2014 | 6721.01289962373 20.36595
2015 | 6721.1595560791 31.50176
2016 | 6721.30621253448 55.20758
2017 | 6721.45286898985 64.87359
2018 | 6721.59952544523 17.75085
2019 | 6721.74618190061 6.220811
2020 | 6721.89283835598 33.55834
2021 | 6722.03949481136 19.8217
2022 | 6722.18615126674 57.46819
2023 | 6722.33280772211 16.62341
2024 | 6722.47946417749 4.966805
2025 | 6722.62612063286 50.86965
2026 | 6722.77277708824 14.60241
2027 | 6722.91943354361 67.17075
2028 | 6723.06608999899 35.1352
2029 | 6723.21274645437 4.625997
2030 | 6723.35940290974 49.875
2031 | 6723.50605936512 59.26043
2032 | 6723.65271582049 -5.723684
2033 | 6723.79937227587 -51.14908
2034 | 6723.94602873124 -64.82422
2035 | 6724.09268518662 3.665047
2036 | 6724.239341642 -16.82057
2037 | 6724.38599809737 25.74037
2038 | 6724.53265455275 80.13545
2039 | 6724.67931100812 -6.773116
2040 | 6724.8259674635 96.25413
2041 | 6724.97262391888 81.42145
2042 | 6725.11928037425 86.61235
2043 | 6725.26593682963 19.66483
2044 | 6725.412593285 -7.753021
2045 | 6725.55924974038 -94.37636
2046 | 6725.70590619576 -42.26364
2047 | 6725.85256265113 -74.03084
2048 | 6725.99921910651 -65.23758
2049 |
--------------------------------------------------------------------------------
/pydoppler/test_data/ugem99/ugem0all.fas:
--------------------------------------------------------------------------------
1 | txhugem4004 0.7150 0.03930
2 | txhugem4005 0.7794 0.03930
3 | txhugem4006 0.8348 0.03930
4 | txhugem4007 0.8942 0.03930
5 | txhugem4008 0.9518 0.03930
6 | txhugem4009 0.0072 0.03930
7 | txhugem4010 0.0632 0.03930
8 | txhugem4011 0.1186 0.03930
9 | txhugem4012 0.1745 0.03930
10 | txhugem4013 0.2344 0.03930
11 | txhugem4014 0.2904 0.03930
12 | txhugem4015 0.3724 0.03930
13 | txhugem4016 0.4283 0.03930
14 | txhugem4017 0.4866 0.03930
15 | txhugem4018 0.5425 0.03930
16 | txhugem4019 0.5979 0.03930
17 | txhugem4020 0.6544 0.03930
18 | txhugem4021 0.7098 0.03930
19 | txhugem4022 0.7652 0.03930
20 | txhugem4023 0.8195 0.03930
21 | txhugem4024 0.8772 0.03930
22 | txhugem4025 0.9269 0.03930
23 | txhugem4026 0.9614 0.03930
24 | txhugem4027 0.9959 0.03930
25 | txhugem4028 0.0304 0.03930
26 | txhugem4029 0.0648 0.03930
27 | txhugem4030 0.1027 0.03930
28 | txhugem4031 0.1372 0.03930
29 |
--------------------------------------------------------------------------------
/setup.cfg:
--------------------------------------------------------------------------------
1 | # Inside of setup.cfg
2 | [metadata]
3 | description-file = README.md
4 |
--------------------------------------------------------------------------------
/setup.py:
--------------------------------------------------------------------------------
1 | import setuptools
2 |
3 | # upload to pip
4 | # pip install .
5 | # python3 setup.py sdist bdist_wheel
6 | # twine upload dist/pydoppler-0.1.8.tar.gz
7 |
8 | import os
9 |
10 | paths = []
11 | def package_files(directory):
12 | for (path, directories, filenames) in os.walk(directory):
13 | for filename in filenames:
14 | paths.append(os.path.join('..', path, filename))
15 |
16 | package_files('pydoppler/fortran_code')
17 | package_files('pydoppler/test_data')
18 |
19 |
20 | setuptools.setup(
21 | name='pydoppler',
22 | version='0.2.0',
23 | packages=['pydoppler'] ,
24 | package_data={'': paths},
25 | author="Juan V. Hernandez Santisteban",
26 | author_email="jvhs1@st-andrews.ac.uk",
27 | description="A python wrapper for Henk Spruit's doppler tomography sowftare",
28 | long_description_content_type="text/markdown",
29 | url="https://github.com/alymantara/pydoppler",
30 | classifiers=[
31 | "Programming Language :: Python :: 3",
32 | "License :: OSI Approved :: MIT License",
33 | "Operating System :: OS Independent",
34 | ],
35 | )
36 |
--------------------------------------------------------------------------------