foscat 3.0.29__tar.gz → 3.0.31__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {foscat-3.0.29 → foscat-3.0.31}/PKG-INFO +1 -1
- {foscat-3.0.29 → foscat-3.0.31}/setup.py +1 -1
- {foscat-3.0.29 → foscat-3.0.31}/src/foscat/FoCUS.py +137 -59
- {foscat-3.0.29 → foscat-3.0.31}/src/foscat.egg-info/PKG-INFO +1 -1
- {foscat-3.0.29 → foscat-3.0.31}/README.md +0 -0
- {foscat-3.0.29 → foscat-3.0.31}/setup.cfg +0 -0
- {foscat-3.0.29 → foscat-3.0.31}/src/foscat/CNN.py +0 -0
- {foscat-3.0.29 → foscat-3.0.31}/src/foscat/CircSpline.py +0 -0
- {foscat-3.0.29 → foscat-3.0.31}/src/foscat/GCNN.py +0 -0
- {foscat-3.0.29 → foscat-3.0.31}/src/foscat/GetGPUinfo.py +0 -0
- {foscat-3.0.29 → foscat-3.0.31}/src/foscat/Softmax.py +0 -0
- {foscat-3.0.29 → foscat-3.0.31}/src/foscat/Spline1D.py +0 -0
- {foscat-3.0.29 → foscat-3.0.31}/src/foscat/Synthesis.py +0 -0
- {foscat-3.0.29 → foscat-3.0.31}/src/foscat/__init__.py +0 -0
- {foscat-3.0.29 → foscat-3.0.31}/src/foscat/backend.py +0 -0
- {foscat-3.0.29 → foscat-3.0.31}/src/foscat/backend_tens.py +0 -0
- {foscat-3.0.29 → foscat-3.0.31}/src/foscat/loss_backend_tens.py +0 -0
- {foscat-3.0.29 → foscat-3.0.31}/src/foscat/loss_backend_torch.py +0 -0
- {foscat-3.0.29 → foscat-3.0.31}/src/foscat/scat.py +0 -0
- {foscat-3.0.29 → foscat-3.0.31}/src/foscat/scat1D.py +0 -0
- {foscat-3.0.29 → foscat-3.0.31}/src/foscat/scat2D.py +0 -0
- {foscat-3.0.29 → foscat-3.0.31}/src/foscat/scat_cov.py +0 -0
- {foscat-3.0.29 → foscat-3.0.31}/src/foscat/scat_cov1D.py +0 -0
- {foscat-3.0.29 → foscat-3.0.31}/src/foscat/scat_cov2D.py +0 -0
- {foscat-3.0.29 → foscat-3.0.31}/src/foscat/scat_cov_map.py +0 -0
- {foscat-3.0.29 → foscat-3.0.31}/src/foscat/scat_cov_map2D.py +0 -0
- {foscat-3.0.29 → foscat-3.0.31}/src/foscat.egg-info/SOURCES.txt +0 -0
- {foscat-3.0.29 → foscat-3.0.31}/src/foscat.egg-info/dependency_links.txt +0 -0
- {foscat-3.0.29 → foscat-3.0.31}/src/foscat.egg-info/requires.txt +0 -0
- {foscat-3.0.29 → foscat-3.0.31}/src/foscat.egg-info/top_level.txt +0 -0
|
@@ -3,7 +3,7 @@ from setuptools import setup, find_packages
|
|
|
3
3
|
|
|
4
4
|
setup(
|
|
5
5
|
name='foscat',
|
|
6
|
-
version='3.0.
|
|
6
|
+
version='3.0.31',
|
|
7
7
|
description='Generate synthetic Healpix or 2D data using Cross Scattering Transform' ,
|
|
8
8
|
long_description='Utilize the Cross Scattering Transform (described in https://arxiv.org/abs/2207.12527) to synthesize Healpix or 2D data that is suitable for component separation purposes, such as denoising. \n A demo package for this process can be found at https://github.com/jmdelouis/FOSCAT_DEMO. \n Complete doc can be found at https://foscat-documentation.readthedocs.io/en/latest/index.html. \n\n List of developers : J.-M. Delouis, T. Foulquier, L. Mousset, T. Odaka, F. Paul, E. Allys ' ,
|
|
9
9
|
license='MIT',
|
|
@@ -32,7 +32,7 @@ class FoCUS:
|
|
|
32
32
|
mpi_size=1,
|
|
33
33
|
mpi_rank=0):
|
|
34
34
|
|
|
35
|
-
self.__version__ = '3.0.
|
|
35
|
+
self.__version__ = '3.0.31'
|
|
36
36
|
# P00 coeff for normalization for scat_cov
|
|
37
37
|
self.TMPFILE_VERSION=TMPFILE_VERSION
|
|
38
38
|
self.P1_dic = None
|
|
@@ -140,6 +140,9 @@ class FoCUS:
|
|
|
140
140
|
self.ww_Imag = {}
|
|
141
141
|
self.ww_CNN_Transpose = {}
|
|
142
142
|
self.ww_CNN = {}
|
|
143
|
+
self.X_CNN = {}
|
|
144
|
+
self.Y_CNN = {}
|
|
145
|
+
self.Z_CNN = {}
|
|
143
146
|
|
|
144
147
|
wwc=np.zeros([KERNELSZ**2,l_NORIENT]).astype(all_type)
|
|
145
148
|
wws=np.zeros([KERNELSZ**2,l_NORIENT]).astype(all_type)
|
|
@@ -288,6 +291,9 @@ class FoCUS:
|
|
|
288
291
|
self.remove_border[lout]=None
|
|
289
292
|
self.ww_CNN_Transpose[lout]=None
|
|
290
293
|
self.ww_CNN[lout]=None
|
|
294
|
+
self.X_CNN[lout]=None
|
|
295
|
+
self.Y_CNN[lout]=None
|
|
296
|
+
self.Z_CNN[lout]=None
|
|
291
297
|
|
|
292
298
|
self.loss={}
|
|
293
299
|
|
|
@@ -317,76 +323,139 @@ class FoCUS:
|
|
|
317
323
|
# ---------------------------------------------−---------
|
|
318
324
|
# make the CNN working : index reporjection of the kernel on healpix
|
|
319
325
|
|
|
326
|
+
def calc_indices_convol(self,nside,kernel,rotation=None):
|
|
327
|
+
to,po=hp.pix2ang(nside,np.arange(12*nside*nside),nest=True)
|
|
328
|
+
x,y,z=hp.pix2vec(nside,np.arange(12*nside*nside),nest=True)
|
|
329
|
+
|
|
330
|
+
idx=np.argsort((x-1.0)**2+y**2+z**2)[0:kernel]
|
|
331
|
+
im=np.ones([12*nside**2])*-1
|
|
332
|
+
im[idx]=np.arange(len(idx))
|
|
333
|
+
xc,yc,zc=hp.pix2vec(nside,idx,nest=True)
|
|
334
|
+
|
|
335
|
+
vec=np.concatenate([np.expand_dims(x,-1),
|
|
336
|
+
np.expand_dims(y,-1),
|
|
337
|
+
np.expand_dims(z,-1)],1)
|
|
338
|
+
|
|
339
|
+
tc,pc=hp.pix2ang(nside,idx,nest=True)
|
|
340
|
+
|
|
341
|
+
indices=np.zeros([12*nside**2*250,2],dtype='int')
|
|
342
|
+
weights=np.zeros([12*nside**2*250])
|
|
343
|
+
nn=0
|
|
344
|
+
for k in range(0,12*nside*nside):
|
|
345
|
+
if k%(nside*nside)==nside*nside-1:
|
|
346
|
+
print('Nside=%d KenelSZ=%d %.2f%%'%(nside,kernel,k/(12*nside**2)*100))
|
|
347
|
+
idx2=hp.query_disc(nside, vec[k], np.pi/nside, inclusive=True,nest=True)
|
|
348
|
+
t2,p2=hp.pix2ang(nside,idx2,nest=True)
|
|
349
|
+
if rotation is None:
|
|
350
|
+
rot=[po[k]/np.pi*180.0,90+(-to[k])/np.pi*180.0]
|
|
351
|
+
else:
|
|
352
|
+
rot=[po[k]/np.pi*180.0,90+(-to[k])/np.pi*180.0,rotation[k]]
|
|
353
|
+
r=hp.Rotator(rot=rot)
|
|
354
|
+
t2,p2=r(t2,p2)
|
|
355
|
+
idx3=hp.ang2pix(nside,t2,p2,nest=True)
|
|
356
|
+
ii,ww=hp.get_interp_weights(nside,t2,p2,nest=True)
|
|
357
|
+
|
|
358
|
+
ii=im[ii]
|
|
359
|
+
|
|
360
|
+
for l in range(4):
|
|
361
|
+
iii=np.where(ii[l]!=-1)[0]
|
|
362
|
+
if len(iii)>0:
|
|
363
|
+
indices[nn:nn+len(iii),1]=idx2[iii]
|
|
364
|
+
indices[nn:nn+len(iii),0]=k*kernel+ii[l,iii]
|
|
365
|
+
weights[nn:nn+len(iii)]=ww[l,iii]
|
|
366
|
+
nn+=len(iii)
|
|
367
|
+
|
|
368
|
+
indices=indices[0:nn]
|
|
369
|
+
weights=weights[0:nn]
|
|
370
|
+
if k%(nside*nside)==nside*nside-1:
|
|
371
|
+
print('Nside=%d KenelSZ=%d Total Number of value=%d Ratio of the matrix %.2g%%'%(nside,
|
|
372
|
+
kernel,
|
|
373
|
+
nn,
|
|
374
|
+
100*nn/(kernel*12*nside**2*12*nside**2)))
|
|
375
|
+
return indices,weights,xc,yc,zc
|
|
376
|
+
|
|
377
|
+
# ---------------------------------------------−---------
|
|
378
|
+
def calc_orientation(self,im): # im is [Ndata,12*Nside**2]
|
|
379
|
+
nside=int(np.sqrt(im.shape[1]//12))
|
|
380
|
+
l_kernel=self.KERNELSZ*self.KERNELSZ
|
|
381
|
+
norient=32
|
|
382
|
+
w=np.zeros([l_kernel,1,2*norient])
|
|
383
|
+
ca=np.cos(np.arange(norient)/norient*np.pi)
|
|
384
|
+
sa=np.sin(np.arange(norient)/norient*np.pi)
|
|
385
|
+
stat=np.zeros([12*nside**2,norient])
|
|
386
|
+
|
|
387
|
+
if self.ww_CNN[nside] is None:
|
|
388
|
+
self.init_CNN_index(nside,transpose=False)
|
|
389
|
+
|
|
390
|
+
y=self.Y_CNN[nside]
|
|
391
|
+
z=self.Z_CNN[nside]
|
|
392
|
+
|
|
393
|
+
for k in range(norient):
|
|
394
|
+
w[:,0,k]=(np.exp(-0.5*nside**2*((y)**2+(z)**2))*np.cos(nside*(y*ca[k]+z*sa[k])*np.pi/2))
|
|
395
|
+
w[:,0,k+norient]=(np.exp(-0.5*nside**2*((y)**2+(z)**2))*np.sin(nside*(y*ca[k]+z*sa[k])*np.pi/2))
|
|
396
|
+
w[:,0,k]=w[:,0,k]-np.mean(w[:,0,k])
|
|
397
|
+
w[:,0,k+norient]=w[:,0,k]-np.mean(w[:,0,k+norient])
|
|
398
|
+
|
|
399
|
+
for k in range(im.shape[0]):
|
|
400
|
+
tmp=im[k].reshape(12*nside**2,1)
|
|
401
|
+
im2=self.healpix_layer(tmp,w)
|
|
402
|
+
stat=stat+im2[:,0:norient]**2+im2[:,norient:]**2
|
|
403
|
+
|
|
404
|
+
rotation=(np.argmax(stat,1)).astype('float')/32.*180.0
|
|
405
|
+
|
|
406
|
+
indices,weights,x,y,z=self.calc_indices_convol(nside,9,rotation=rotation)
|
|
407
|
+
|
|
408
|
+
return indices,weights
|
|
409
|
+
|
|
320
410
|
def init_CNN_index(self,nside,transpose=False):
|
|
321
411
|
l_kernel=int(self.KERNELSZ*self.KERNELSZ)
|
|
322
|
-
weights=self.backend.bk_cast(np.ones([12*nside*nside*l_kernel],dtype='float'))
|
|
323
412
|
try:
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
413
|
+
indices=np.load('%s/FOSCAT_%s_I%d_%d_%d_CNNV2.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside))
|
|
414
|
+
weights=np.load('%s/FOSCAT_%s_W%d_%d_%d_CNNV2.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside))
|
|
415
|
+
xc=np.load('%s/FOSCAT_%s_X%d_%d_%d_CNNV2.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside))
|
|
416
|
+
yc=np.load('%s/FOSCAT_%s_Y%d_%d_%d_CNNV2.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside))
|
|
417
|
+
zc=np.load('%s/FOSCAT_%s_Z%d_%d_%d_CNNV2.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside))
|
|
328
418
|
except:
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
419
|
+
indices,weights,xc,yc,zc=self.calc_indices_convol(nside,l_kernel)
|
|
420
|
+
np.save('%s/FOSCAT_%s_I%d_%d_%d_CNNV2.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside),indices)
|
|
421
|
+
np.save('%s/FOSCAT_%s_W%d_%d_%d_CNNV2.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside),weights)
|
|
422
|
+
np.save('%s/FOSCAT_%s_X%d_%d_%d_CNNV2.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside),xc)
|
|
423
|
+
np.save('%s/FOSCAT_%s_Y%d_%d_%d_CNNV2.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside),yc)
|
|
424
|
+
np.save('%s/FOSCAT_%s_Z%d_%d_%d_CNNV2.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside),zc)
|
|
425
|
+
if not self.silent:
|
|
426
|
+
print('Write %s/FOSCAT_%s_W%d_%d_%d_CNNV2.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside))
|
|
427
|
+
|
|
428
|
+
self.X_CNN[nside]=xc
|
|
429
|
+
self.Y_CNN[nside]=yc
|
|
430
|
+
self.Z_CNN[nside]=zc
|
|
431
|
+
self.ww_CNN[nside]=self.backend.bk_SparseTensor(indices,
|
|
432
|
+
weights,[12*nside*nside*l_kernel,
|
|
433
|
+
12*nside*nside])
|
|
334
434
|
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
r=hp.Rotator(rot=rot).get_inverse()
|
|
343
|
-
# get the coordinate
|
|
344
|
-
ty,tx=r(tc,pc)
|
|
345
|
-
|
|
346
|
-
indices[k,:,0]=k*l_kernel+np.arange(l_kernel).astype('int')
|
|
347
|
-
indices[k,:,1]=hp.ang2pix(nside,ty,tx,nest=True)
|
|
348
|
-
if transpose:
|
|
349
|
-
indices[:,:,1]=indices[:,:,1]//4
|
|
350
|
-
np.save('%s/FOSCAT_%s_W%d_%d_%d_CNN_Transpose.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside),indices)
|
|
351
|
-
if not self.silent:
|
|
352
|
-
print('Write %s/FOSCAT_%s_W%d_%d_%d_CNN_Transpose.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside))
|
|
353
|
-
else:
|
|
354
|
-
np.save('%s/FOSCAT_%s_W%d_%d_%d_CNNnpy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside),indices)
|
|
355
|
-
if not self.silent:
|
|
356
|
-
print('Write %s/FOSCAT_%s_W%d_%d_%d_CNN.npy'%(self.TEMPLATE_PATH,TMPFILE_VERSION,l_kernel,self.NORIENT,nside))
|
|
435
|
+
# ---------------------------------------------−---------
|
|
436
|
+
def healpix_layer_coord(self,im):
|
|
437
|
+
nside=int(np.sqrt(im.shape[0]//12))
|
|
438
|
+
l_kernel=self.KERNELSZ*self.KERNELSZ
|
|
439
|
+
if self.ww_CNN[nside] is None:
|
|
440
|
+
self.init_CNN_index(nside)
|
|
441
|
+
return self.X_CNN[nside],self.Y_CNN[nside],self.Z_CNN[nside]
|
|
357
442
|
|
|
358
|
-
|
|
359
|
-
if transpose:
|
|
360
|
-
self.ww_CNN_Transpose[nside]=self.backend.bk_SparseTensor(indices.reshape(12*nside*nside*l_kernel,2),
|
|
361
|
-
weights,[12*nside*nside*l_kernel,
|
|
362
|
-
3*nside*nside])
|
|
363
|
-
else:
|
|
364
|
-
self.ww_CNN[nside]=self.backend.bk_SparseTensor(indices.reshape(12*nside*nside*l_kernel,2),
|
|
365
|
-
weights,[12*nside*nside*l_kernel,
|
|
366
|
-
12*nside*nside])
|
|
367
|
-
|
|
368
443
|
# ---------------------------------------------−---------
|
|
369
|
-
def healpix_layer_transpose(self,im,ww):
|
|
370
|
-
nside=
|
|
444
|
+
def healpix_layer_transpose(self,im,ww,indices=None,weights=None):
|
|
445
|
+
nside=int(np.sqrt(im.shape[0]//12))
|
|
371
446
|
l_kernel=self.KERNELSZ*self.KERNELSZ
|
|
372
447
|
|
|
373
448
|
if im.shape[1]!=ww.shape[1]:
|
|
374
449
|
if not self.silent:
|
|
375
450
|
print('Weights channels should be equal to the input image channels')
|
|
376
451
|
return -1
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
tmp=self.backend.bk_sparse_dense_matmul(self.ww_CNN_Transpose[nside],im)
|
|
382
|
-
|
|
383
|
-
density=self.backend.bk_reshape(tmp,[12*nside*nside,l_kernel*im.shape[1]])
|
|
384
|
-
|
|
385
|
-
return self.backend.bk_matmul(density,self.backend.bk_reshape(ww,[l_kernel*im.shape[1],ww.shape[2]]))
|
|
452
|
+
tmp=self.healpix_layer(im,ww,indices=indices,weights=weights)
|
|
453
|
+
|
|
454
|
+
return self.up_grade(tmp,2*nside)
|
|
386
455
|
|
|
387
456
|
# ---------------------------------------------−---------
|
|
388
457
|
# ---------------------------------------------−---------
|
|
389
|
-
def healpix_layer(self,im,ww):
|
|
458
|
+
def healpix_layer(self,im,ww,indices=None,weights=None):
|
|
390
459
|
nside=int(np.sqrt(im.shape[0]//12))
|
|
391
460
|
l_kernel=self.KERNELSZ*self.KERNELSZ
|
|
392
461
|
|
|
@@ -394,11 +463,20 @@ class FoCUS:
|
|
|
394
463
|
if not self.silent:
|
|
395
464
|
print('Weights channels should be equal to the input image channels')
|
|
396
465
|
return -1
|
|
397
|
-
|
|
398
|
-
if
|
|
399
|
-
self.
|
|
466
|
+
|
|
467
|
+
if indices is None:
|
|
468
|
+
if self.ww_CNN[nside] is None:
|
|
469
|
+
self.init_CNN_index(nside,transpose=False)
|
|
470
|
+
mat=self.ww_CNN[nside]
|
|
471
|
+
else:
|
|
472
|
+
if weights is None:
|
|
473
|
+
print('healpix_layer : If indices is not none weights should be specify')
|
|
474
|
+
return 0
|
|
400
475
|
|
|
401
|
-
|
|
476
|
+
mat=self.backend.bk_SparseTensor(indices,weights,[12*nside*nside*l_kernel,12*nside*nside])
|
|
477
|
+
|
|
478
|
+
tmp=self.backend.bk_sparse_dense_matmul(mat,im)
|
|
479
|
+
|
|
402
480
|
density=self.backend.bk_reshape(tmp,[12*nside*nside,l_kernel*im.shape[1]])
|
|
403
481
|
|
|
404
482
|
return self.backend.bk_matmul(density,self.backend.bk_reshape(ww,[l_kernel*im.shape[1],ww.shape[2]]))
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|