SKA Pipeline课题个人心得本🗒️

环境搭建:

若在完全体conda的环境下,程序的运行仍需要依赖如下packages:

  1. fpipe, src
  2. pygsm, src
  3. caput, src
  4. tlpipe, src
  5. healpy, pip or conda
  6. astroquery, pip or conda
  7. reproject, pip or conda
  8. cora, src

上面的packages里,
   src 代表是从源码安装;
   pip or conda 代表直接从pip或者conda官方库安装即可

安装所需要的源码路径(orchid服务器):/home/wangyue/workspace/
cd到具体的目录下,输入安装指令:

python setup.py install

即可完成安装。

需要注意的几个包:

  1. tlpipe:

    当你使用了python3.9及以上的时候,python的c-api接口中的"tp_print"改为了"tp_vectorcall_offset",可参考:🙋戳我. 所以你需要修改源码,以达到与python39的适配,要不然安装时会报错!

    修改文件路径:<where you store the src codes>/tlpipe/tlpipe/rfi/_sum_threshold.c

    修改行数:20078, 20083, 20095, 20105,将这几行里面的"tp_print"改为"tp_vectorcall_offset",再次执行install指令,即可成功。

  2. caput:

    可能是因为版本或者其他的原因,该源码内有一文件在运行整个pipeline的时候会报错,报错具体内容为:
    UnboundLocalError: local variable "rank' referenced before assignment
    
    其报错的文件具体路径为:<where you store the src codes>/caput/caput/mpiutil.py,行数为174行
    具体内容(第168-174行):
    def partition_list_mpi(full_list, method="con", comm=_comm):
    """Return the partition of a list specific to the current MPI process."""
    if comm is not None:
        rank = comm.rank
        size = comm.size
    
    return partition_list(full_list, rank, size, method=method)
    
    可以看到,该代码使用了"if comm is not None"的判断,而实际上,在我们测试的执行脚本里,comm的值就是None,所以程序并不会执行下面的两行对变量rank以及size的赋值操作;但python对变量的赋值顺序遵从LEGB法则(参考链接:🙋戳我,程序会认为if判断里的赋值操作是更优先的,所以虽然我们并没有进行if内的赋值,但仍然让解释器confused,所以可以做如下修改:
    def partition_list_mpi(full_list, method="con", comm=_comm):
        """Return the partition of a list specific to the current MPI process."""
        # to avoid reference problem, modified by dingding, 2022.10.30
        if comm is not None:
            rank_tmp = comm.rank
            size_tmp = comm.size
        else:
            rank_tmp = rank
            size_tmp = size
    
    return partition_list(full_list, rank_tmp, size_tmp, method=method)
    
    即可成功执行。

模块介绍

基于Wang Yue同学之前所修改的python3的survey_sim的code,我所分区、改写的code中的method与其流程图的一一对照关系如下:

程序运行成功的结果图如下:

代理端口快捷使用

我已在orchid服务器搭建了代理,用来加速一些境外数据的下载上传等传输,具体配置如下:
协议:socks5
端口:7730
用户名,密码:无

如想快捷使用,可以考虑使用我已经编译安装好的软件proxychians4
将指令export PATH="/home/gitrepo/luantch/software/bin:$PATH"添加至您目录下~/.bashrc内,然后令其生效即可。
使用方法以及测试:

curl ifconfig.me

将会返回机器真实最外部接口的公网ip

proxychains4 curl ifconfig.me

将会返回代理的外网ip

祝好运!

20230630更新

请记住,tlpipe和caput等等的版本需要对应上才可以工作,笔者实操时候就发现,如果使用tlpipe zuo/python3的分支,但是依然使用官方的原始版本的caput,那么在并行的时候就会出现数组切割不统一等问题。所以版本一定要对应好。