@@ -255,12 +255,22 @@ The arguments are:
255255
256256"""
257257function PoincareSphere2Map(I, p, X, grid)
258- pimgI = I .* p
259- stokesI = I
260- stokesQ = pimgI .* X[1 ]
261- stokesU = pimgI .* X[2 ]
262- stokesV = pimgI .* X[3 ]
263- return stokes_intensitymap(stokesI, stokesQ, stokesU, stokesV, grid)
258+ Q = similar(I)
259+ U = similar(I)
260+ V = similar(I)
261+
262+ t1 = X[1 ]
263+ t2 = X[2 ]
264+ t3 = X[3 ]
265+
266+ @inbounds @simd for i in eachindex(I, Q, U, V)
267+ pI = I[i] * p[i]
268+ Q[i] = pI * t1[i]
269+ U[i] = pI * t2[i]
270+ V[i] = pI * t3[i]
271+ end
272+
273+ return stokes_intensitymap(I, Q, U, V, grid)
264274end
265275
266276# function PoincareSphere2Map(I, p, X, grid)
@@ -291,20 +301,39 @@ Each Stokes parameter is parameterized as
291301
292302where `a,b,c,d` are real numbers with no conditions, and `p=√(a² + b² + c²)`.
293303"""
294- function PolExp2Map(a:: AbstractArray , b:: AbstractArray , c:: AbstractArray , d:: AbstractArray ,
295- grid:: AbstractRectiGrid )
296- p = sqrt.(b .^ 2 .+ c .^ 2 .+ d .^ 2 )
297-
298- tmp = exp.(a) .* sinh.(p) .* inv.(p)
299- pimgI = exp.(a) .* cosh.(p)
300- pimgQ = tmp .* b
301- pimgU = tmp .* c
302- pimgV = tmp .* d
303- stokesI = pimgI
304- stokesQ = pimgQ
305- stokesU = pimgU
306- stokesV = pimgV
307- return stokes_intensitymap(stokesI, stokesQ, stokesU, stokesV, grid)
304+ @fastmath function PolExp2Map(a:: AbstractArray ,
305+ b:: AbstractArray ,
306+ c:: AbstractArray ,
307+ d:: AbstractArray ,
308+ grid:: AbstractRectiGrid )
309+ pimgI = similar(a)
310+ pimgQ = similar(b)
311+ pimgU = similar(c)
312+ pimgV = similar(d)
313+
314+ # This is just faster because it is a 1 pass algorithm
315+ @inbounds @simd for i in eachindex(pimgI, pimgQ, pimgU, pimgV)
316+ p = sqrt(b[i]^ 2 + c[i]^ 2 + d[i]^ 2 )
317+ ea = exp(a[i])
318+ tmp = ea * sinh(p) / p
319+ pimgI[i] = ea * cosh(p)
320+ pimgQ[i] = tmp * b[i]
321+ pimgU[i] = tmp * c[i]
322+ pimgV[i] = tmp * d[i]
323+ end
324+
325+ # p = @.. sqrt(b ^ 2 + c ^ 2 + d ^ 2)
326+ # ea = @.. exp(a)
327+ # tmp = @.. ea * sinh(p) * inv(p)
328+ # pimgI = @.. ea * cosh(p)
329+ # pimgQ = @.. tmp * b
330+ # pimgU = @.. tmp * c
331+ # pimgV = @.. tmp * d
332+ # stokesI = pimgI
333+ # stokesQ = pimgQ
334+ # stokesU = pimgU
335+ # stokesV = pimgV
336+ return stokes_intensitymap(pimgI, pimgQ, pimgU, pimgV, grid)
308337end
309338
310339"""
0 commit comments