Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

subset_fov Function Fails with UndefVarError for VisiumHD Data #11

Open
YuxiZhang-0113 opened this issue Jul 16, 2024 · 8 comments
Open

Comments

@YuxiZhang-0113
Copy link

YuxiZhang-0113 commented Jul 16, 2024

Dear CellScopes Team,

I encountered an error while running the subset_fov function for VisiumHD data using the following code:
df = cs.subset_fov(hd, [89,109], 26, 20)

Here is the error message I received:

UndefVarError: x_col not defined

Stacktrace:
[1] subset_fov(sp::CellScopes.VisiumHDObject, fov::Vector{Int64}, n_fields_x::Int64, n_fields_y::Int64)
@ CellScopes ~/.julia/packages/CellScopes/pM38e/src/spatial/sp_utils.jl:241
[2] top-level scope
@ In[12]:1

While reviewing the function definition, I noticed the following line:
rename!(df, [:barcode, :pxl_row_in_fullres, :pxl_col_in_fullres] .=>> [:cell, Symbol(x_col), Symbol(y_col)])

I was wondering if perhaps the .=>> should be replaced with .=>. I am not entirely sure if this change is appropriate. This function has worked excellently with other Visium data sets, and this issue seems to be specific to VisiumHD.

Any guidance or clarification you could provide would be greatly appreciated.

@HaojiaWu
Copy link
Owner

Hi
I tried subset_fov and it works fine with VisiumHD. I can not locate the .=>> bug you mentioned in the source code of the package. Can you point me to the line in this repo?

@YuxiZhang-0113
Copy link
Author

Hi,

I encountered an issue when running the following code:
df = cs.subset_fov(hd, [193, 197, 333, 337], 20, 20)

This results in an UndefVarError stating "x_col not defined":

Stacktrace:
[1] subset_fov(sp::CellScopes.VisiumHDObject, fov::Vector{Int64}, n_fields_x::Int64, n_fields_y::Int64)
@ CellScopes ~/.julia/packages/CellScopes/pM38e/src/spatial/sp_utils.jl:241
[2] top-level scope
@ In[5]:1

Attempting to dive deeper into the source with @edit cs.subset_fov(hd, [193,197,333,337], 20,20) yielded the following relevant part of the code:

if isa(sp, VisiumObject) df = deepcopy(sp.spmetaData) rename!(df, [:barcode, :pxl_row_in_fullres, :pxl_col_in_fullres] .=> [:cell, :x, :y]) elseif isa(sp, VisiumHDObject) if isa(sp.alterImgData, Nothing) df = deepcopy(sp.spmetaData) rename!(df, [:barcode, :pxl_row_in_fullres, :pxl_col_in_fullres] .=>> [:cell, Symbol(x_col), Symbol(y_col)]) else df = deepcopy(sp.alterImgData.posData.positions["high_pos"]) end else df = deepcopy(sp.spmetaData.cell) end

As a newcomer to Julia, I am unsure if this is a simple syntax error or if there is another underlying issue. I have had no problems when running similar functions with Cartana and Visium data.

Thank you very much for your support!

Best regards

@HaojiaWu
Copy link
Owner

I still do not see the .=>> in my source code. Here is what I have in this repo for the subset_fov function.

function subset_fov(sp::get_object_group("Spatial"), fov::Vector{Int64}, n_fields_x::Int64, n_fields_y::Int64)
    if isa(sp, VisiumObject)
        df = deepcopy(sp.spmetaData)
        rename!(df, [:barcode, :pxl_row_in_fullres, :pxl_col_in_fullres] .=> [:cell, :x, :y])
    elseif isa(sp, VisiumHDObject)
        if isa(sp.alterImgData, Nothing)
            df = deepcopy(sp.spmetaData)
            rename!(df, [:barcode, :pxl_row_in_fullres, :pxl_col_in_fullres] .=> [:cell, Symbol(x_col), Symbol(y_col)])
        else
            df = deepcopy(sp.alterImgData.posData.positions["high_pos"])
        end
    else
        df = deepcopy(sp.spmetaData.cell)
    end
    pts, centroids = split_field(df, n_fields_x, n_fields_y)
    pts_sub=pts[fov]
    min_pt=minimum(minimum(pts_sub))
    max_pt=maximum(maximum(pts_sub))
    min_pt=convert(Vector{Float32}, min_pt)
    max_pt=convert(Vector{Float32}, max_pt)
    df_sub=filter([:x, :y] => (x, y) -> x > min_pt[1] && x < max_pt[1] && y > min_pt[2] && y < max_pt[2], df)
    return df_sub      
end

You can reinstall the package and see if the issue goes away.

@YuxiZhang-0113
Copy link
Author

Hi, thank you very much for your response. I have updated the version of CellScopes, and I found the sp_utils.jl file. This part indeed does not have an issue with .=>>. However, when running cs.subset_fov with VisiumHDObject, I still encounter an error:

ERROR: UndefVarError: x_col not defined
Stacktrace:
[1] subset_fov(sp::CellScopes.VisiumHDObject, fov::Vector{Int64}, n_fields_x::Int64, n_fields_y::Int64)
@ CellScopes ~/.julia/packages/CellScopes/zSJaP/src/spatial/sp_utils.jl:241
[2] top-level scope
@ REPL[6]:1

I am running the original function, where sp is a VisiumHDObject. In this part:

elseif isa(sp, VisiumHDObject)
    if isa(sp.alterImgData, Nothing)
        df = deepcopy(sp.spmetaData)
        x_col = "pxl_col_in_fullres"  
        y_col = "pxl_row_in_fullres"  
        rename!(df, [:barcode, :pxl_row_in_fullres, :pxl_col_in_fullres] .=> [:cell, Symbol(x_col), Symbol(y_col)])
    else
        df = deepcopy(sp.alterImgData.posData.positions["high_pos"])
    end

I receive the following error: x_col not defined.
1

@HaojiaWu
Copy link
Owner

I see the bug now. I have fixed it. Thanks for reporting.

@YuxiZhang-0113
Copy link
Author

YuxiZhang-0113 commented Jul 20, 2024

I greatly appreciate the time and effort you've dedicated to addressing my previous issues—your detailed responses have been incredibly helpful. Thank you for your patience and support.

I apologize for the inconvenience, but I have a few more questions:

  1. I encountered an error while testing the Xenium data. The cs.subset_fov function works well with Xenium objects, however, I receive an error when using cs.plot_fov:

cs.plot_fov(xenium, 20, 10)

UndefRefError: access to undefined reference

Stacktrace:
[1] getproperty
@ ./Base.jl:42 [inlined]
[2] (::CellScopes.var"#346#348")(sp::CellScopes.XeniumObject; adjust_coord_to_img::String, x_col::String, y_col::String)
@ CellScopes ~/.julia/packages/CellScopes/zSJaP/src/spatial/sp_utils.jl:820
[3] plot_fov(sp::CellScopes.XeniumObject, n_fields_x::Int64, n_fields_y::Int64; x_col::String, y_col::String, group_label::Nothing, alpha::Int64, adjust_coord_to_img::String, custom_img::Bool, width::Int64, height::Int64, cell_highlight::Nothing, shield::Bool, marker_size::Nothing)
@ CellScopes ~/.julia/packages/CellScopes/zSJaP/src/spatial/sp_plots.jl:1012
[4] plot_fov(sp::CellScopes.XeniumObject, n_fields_x::Int64, n_fields_y::Int64)
@ CellScopes ~/.julia/packages/CellScopes/zSJaP/src/spatial/sp_plots.jl:981
[5] top-level scope
@ In[7]:1

  1. Now that you have fixed the part for VisiumHD, do I need to reinstall CellScopes right now?

  2. Regarding some Xenium data, the 10X official site generally provides OME-tiff files. I have tried converting them using Matlab, and also tried converting directly to TIFF files using ImageJ. So far, the data I obtained can be added to XeniumObject using add_xenium_img, but I cannot produce any plots. I may need to try a few more times; however, do you have any recommendations for TIFF file conversion? Below is my Matlab code:

ome_tiff = imread('ome.tiff');
imwrite(ome_tiff, 'standard.tiff');

I appreciate any advice you can provide. Thank you in advance.

@HaojiaWu
Copy link
Owner

Hi,

1. I encountered an error while testing the Xenium data. The cs.subset_fov function works well with Xenium objects, however, I receive an error when using cs.plot_fov:
This should be fixed now. Now plot_fov supports XeniumObject without imaging data.

2. Now that you have fixed the part for VisiumHD, do I need to reinstall CellScopes right now?
Yes, please reinstall it and let me know if you come across other issues. I may be slow to fix it but will definitely work on it whenever i get a chance.

3. Regarding some Xenium data, the 10X official site generally provides OME-tiff files...
Not sure about using matlab script. I usually use software to do it such as Fiji and QuPath.

Hope this helps and thanks for reporting bugs!

@YuxiZhang-0113
Copy link
Author

Hi!
Thank you for your help. I've been busy lately, hence the delayed response.

I have tested the plot_fov and subset_fov functions, and they work perfectly with Xenium objects, VisiumHD, and Visium objects.

I have encountered another issue. I followed the tutorial to incorporate breast cancer H&E image data into a Xenium object, but I noticed that the Dimplot and HE images don't seem to align perfectly. It appears that the Dimplot is slightly misaligned, as shown in the image below:
1

Also, I am unsure if this is due to an installation issue:
using Pkg
Pkg.add(url="https://github.com/HaojiaWu/CellScopes.jl")
Pkg.status()

Status ~/.julia/environments/v1.7/Project.toml
[336ed68f] CSV v0.10.14
[13f3f980] CairoMakie v0.12.3
[708d50d9] CellScopes v0.1.0 https://github.com/HaojiaWu/CellScopes.jl#main
I just installed it today, but it still shows version 0.1.0 for some reason.

I appreciate your assistance in resolving these issues. Thank you again for your support.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants