cptrackr

R package to create unique track identifiers for CellProfiler tracking output

https://github.com/burgerga/cptrackr

Science Score: 67.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 3 DOI reference(s) in README
  • Academic publication links
    Links to: zenodo.org
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (12.7%) to scientific vocabulary
Last synced: 10 months ago · JSON representation ·

Repository

R package to create unique track identifiers for CellProfiler tracking output

Basic Info
  • Host: GitHub
  • Owner: burgerga
  • License: other
  • Language: R
  • Default Branch: master
  • Size: 397 KB
Statistics
  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • Open Issues: 3
  • Releases: 2
Created almost 6 years ago · Last pushed over 2 years ago
Metadata Files
Readme Changelog License Citation

README.Rmd

---
output: github_document
---



```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  fig.path = "man/figures/README-",
  out.width = "100%"
)
```

# CPTrackR


[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.4725472.svg)](https://doi.org/10.5281/zenodo.4725472)
[![R-CMD-check](https://github.com/burgerga/CPTrackR/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/burgerga/CPTrackR/actions/workflows/R-CMD-check.yaml)


The goal of CPTrackR is to add unique track ids to CellProfiler tracking output.

**NB:** No support for LAP tracking with temporal gaps (yet)

## Installation

You can install the development version of CPTrackR with:

``` r
remotes::install_github("burgerga/CPTrackR")
```

## Usage

### Creating a lookup table (LUT)

```{r, echo=F, message = FALSE, warning=FALSE}
library(tidyverse)

library(future)
plan(multisession)

# Example data is generated from a dataset from Britt (shared by Muriel)
# all_data <- read_tsv(file.path("~/../../Downloads","20190925_BrittData_singleCell_1hrDelay_withoutT01.txt"))
# data = all_data |>
#   filter(groupNumber <= 2) |>
#   select(groupNumber,
#          groupInd,
#          Nuclei_TrackObjects_ParentObjectNumber_30,
#          Nuclei_Number_Object_Number,
#          Nuclei_Intensity_MeanIntensity_image_green,
#          starts_with("Nuclei_Location_Center_"))

theme_set(theme_classic(base_size = 13))
```

Show some example uncorrected data extracted from a CellProfiler tsv:

```{r}
library(CPTrackR)
library(tidyverse)

data <- read_tsv(system.file("extdata", "cptrackr_example_data.tsv.xz", package="CPTrackR"), show_col_types = F)
data %>%
  select(groupNumber, 
         groupInd, 
         Nuclei_TrackObjects_ParentObjectNumber_30, 
         Nuclei_Number_Object_Number,
         Nuclei_Intensity_MeanIntensity_image_green)
```

We can create a lookup table (LUT) for a single group using `createLUTGroup`:

```{r}
library(CPTrackR)
lut <- createLUTGroup(data %>% filter(groupNumber == 1),
                      frame_var = groupInd, 
                      obj_var = Nuclei_Number_Object_Number,
                      par_obj_var = Nuclei_TrackObjects_ParentObjectNumber_30) 
lut %>% 
  arrange(Nuclei_Number_Object_Number, groupInd)
```

Three new columns are added:

* `cid`: id of the original cell (daughter cells share `cid` with parent)
* `uid`: unique id (daughter cells don't share `uid` with parent)
* `alt_uid`: character id of cells that show lineage with suffixes

For illustration here the second frame, where we can see `alt_uid`s for daughter cells:

```{r}
lut %>% 
  filter(groupInd == 2) %>%
  arrange(Nuclei_Number_Object_Number, groupInd)
```
We can also enable a progress bar (will be visible if you run this code in R):

```{r}
library(progressr)
with_progress({
  lut <- createLUTGroup(data %>% filter(groupNumber == 1),
                        frame_var = groupInd, 
                        obj_var = Nuclei_Number_Object_Number,
                        par_obj_var = Nuclei_TrackObjects_ParentObjectNumber_30) 
})
lut %>% 
  arrange(Nuclei_Number_Object_Number, groupInd)
```


We can create a LUT for multiple groups (=movies) using `createLut`, the `group_vars` are used to denote the different groups (can be multiple columns):

```{r}
with_progress({
  lut_all <- createLUT(data, 
                       group_vars = groupNumber, 
                       frame_var = groupInd, 
                       obj_var = Nuclei_Number_Object_Number, 
                       par_obj_var = Nuclei_TrackObjects_ParentObjectNumber_30) 
})
lut_all 
```

Now we can join the LUT to the original data

```{r}
fixed <- data %>% 
  left_join(lut_all) 
fixed %>%
  select(groupNumber, groupInd, uid, alt_uid, Nuclei_Intensity_MeanIntensity_image_green)
```

#### Parallelisation

We can also enable parallelisation using the `future` package and specifying a `plan`, this will give a considerable speed improvement if you have many movies:

```{r, eval = F}
library(future)
plan(multisession)
with_progress({
  lut_all <- createLUT(data, 
                       group_vars = groupNumber, 
                       frame_var = groupInd, 
                       obj_var = Nuclei_Number_Object_Number, 
                       par_obj_var = Nuclei_TrackObjects_ParentObjectNumber_30) 
})
lut_all
```

```{r, echo = F}
lut_all
```

### Plotting

With our `uid` per cell we can now plot the tracks:

```{r}
ggplot(fixed %>% filter(groupNumber == 1), 
       aes(Nuclei_Location_Center_X, Nuclei_Location_Center_Y, 
           group = uid, color = as.factor(uid))) + 
  geom_path() + 
  guides(color = F) +
  coord_fixed()
```

Owner

  • Name: Gerhard Burger
  • Login: burgerga
  • Kind: user
  • Location: Gouda
  • Company: Leiden University

Assistant Professor / Open Source Enthusiast

Citation (CITATION.cff)

# -----------------------------------------------------------
# CITATION file created with {cffr} R package, v0.5.0
# See also: https://docs.ropensci.org/cffr/
# -----------------------------------------------------------
 
cff-version: 1.2.0
message: 'To cite package "CPTrackR" in publications use:'
type: software
license: MIT
title: 'CPTrackR: Create unique track identifiers for CellProfiler tracking output'
version: 0.2.2.9000
abstract: Create unique track identifiers for CellProfiler tracking output.
authors:
- family-names: Burger
  given-names: Gerhard
  email: burger.ga@gmail.com
  orcid: https://orcid.org/0000-0003-1062-5576
- family-names: Heldring
  given-names: Muriel
  email: murielheldring@gmail.com
  orcid: https://orcid.org/0000-0002-3565-7227
- family-names: Wink
  given-names: Steven
  email: hardervidertsie@gmail.com
  orcid: https://orcid.org/0000-0003-1189-7231
contact:
- family-names: Burger
  given-names: Gerhard
  email: burger.ga@gmail.com
  orcid: https://orcid.org/0000-0003-1062-5576
references:
- type: software
  title: furrr
  abstract: 'furrr: Apply Mapping Functions in Parallel using Futures'
  notes: Imports
  url: https://furrr.futureverse.org/
  repository: https://CRAN.R-project.org/package=furrr
  authors:
  - family-names: Vaughan
    given-names: Davis
    email: davis@rstudio.com
  - family-names: Dancho
    given-names: Matt
    email: mdancho@business-science.io
  year: '2023'
- type: software
  title: dplyr
  abstract: 'dplyr: A Grammar of Data Manipulation'
  notes: Imports
  url: https://dplyr.tidyverse.org
  repository: https://CRAN.R-project.org/package=dplyr
  authors:
  - family-names: Wickham
    given-names: Hadley
    email: hadley@posit.co
    orcid: https://orcid.org/0000-0003-4757-117X
  - family-names: François
    given-names: Romain
    orcid: https://orcid.org/0000-0002-2444-4226
  - family-names: Henry
    given-names: Lionel
  - family-names: Müller
    given-names: Kirill
    orcid: https://orcid.org/0000-0002-1416-3412
  - family-names: Vaughan
    given-names: Davis
    email: davis@posit.co
    orcid: https://orcid.org/0000-0003-4777-038X
  year: '2023'
- type: software
  title: tidyr
  abstract: 'tidyr: Tidy Messy Data'
  notes: Imports
  url: https://tidyr.tidyverse.org
  repository: https://CRAN.R-project.org/package=tidyr
  authors:
  - family-names: Wickham
    given-names: Hadley
    email: hadley@posit.co
  - family-names: Vaughan
    given-names: Davis
    email: davis@posit.co
  - family-names: Girlich
    given-names: Maximilian
  year: '2023'
- type: software
  title: stringr
  abstract: 'stringr: Simple, Consistent Wrappers for Common String Operations'
  notes: Imports
  url: https://stringr.tidyverse.org
  repository: https://CRAN.R-project.org/package=stringr
  authors:
  - family-names: Wickham
    given-names: Hadley
    email: hadley@posit.co
  year: '2023'
- type: software
  title: magrittr
  abstract: 'magrittr: A Forward-Pipe Operator for R'
  notes: Imports
  url: https://magrittr.tidyverse.org
  repository: https://CRAN.R-project.org/package=magrittr
  authors:
  - family-names: Bache
    given-names: Stefan Milton
    email: stefan@stefanbache.dk
  - family-names: Wickham
    given-names: Hadley
    email: hadley@rstudio.com
  year: '2023'
- type: software
  title: purrr
  abstract: 'purrr: Functional Programming Tools'
  notes: Imports
  url: https://purrr.tidyverse.org/
  repository: https://CRAN.R-project.org/package=purrr
  authors:
  - family-names: Wickham
    given-names: Hadley
    email: hadley@rstudio.com
    orcid: https://orcid.org/0000-0003-4757-117X
  - family-names: Henry
    given-names: Lionel
    email: lionel@rstudio.com
  year: '2023'
- type: software
  title: progressr
  abstract: 'progressr: An Inclusive, Unifying API for Progress Updates'
  notes: Imports
  url: https://progressr.futureverse.org
  repository: https://CRAN.R-project.org/package=progressr
  authors:
  - family-names: Bengtsson
    given-names: Henrik
    email: henrikb@braju.com
  year: '2023'
- type: software
  title: rlang
  abstract: 'rlang: Functions for Base Types and Core R and ''Tidyverse'' Features'
  notes: Imports
  url: https://rlang.r-lib.org
  repository: https://CRAN.R-project.org/package=rlang
  authors:
  - family-names: Henry
    given-names: Lionel
    email: lionel@posit.co
  - family-names: Wickham
    given-names: Hadley
    email: hadley@posit.co
  year: '2023'
- type: software
  title: progress
  abstract: 'progress: Terminal Progress Bars'
  notes: Suggests
  url: https://github.com/r-lib/progress#readme
  repository: https://CRAN.R-project.org/package=progress
  authors:
  - family-names: Csárdi
    given-names: Gábor
  - family-names: FitzJohn
    given-names: Rich
  year: '2023'
- type: software
  title: testthat
  abstract: 'testthat: Unit Testing for R'
  notes: Suggests
  url: https://testthat.r-lib.org
  repository: https://CRAN.R-project.org/package=testthat
  authors:
  - family-names: Wickham
    given-names: Hadley
    email: hadley@posit.co
  year: '2023'
- type: software
  title: tibble
  abstract: 'tibble: Simple Data Frames'
  notes: Suggests
  url: https://tibble.tidyverse.org/
  repository: https://CRAN.R-project.org/package=tibble
  authors:
  - family-names: Müller
    given-names: Kirill
    email: kirill@cynkra.com
    orcid: https://orcid.org/0000-0002-1416-3412
  - family-names: Wickham
    given-names: Hadley
    email: hadley@rstudio.com
  year: '2023'

GitHub Events

Total
Last Year

Issues and Pull Requests

Last synced: over 1 year ago

All Time
  • Total issues: 7
  • Total pull requests: 0
  • Average time to close issues: almost 2 years
  • Average time to close pull requests: N/A
  • Total issue authors: 1
  • Total pull request authors: 0
  • Average comments per issue: 0.57
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 0
  • Pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Issue authors: 0
  • Pull request authors: 0
  • Average comments per issue: 0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • burgerga (7)
Pull Request Authors
Top Labels
Issue Labels
enhancement (3)
Pull Request Labels

Dependencies

DESCRIPTION cran
  • dplyr * imports
  • furrr * imports
  • magrittr * imports
  • progressr * imports
  • purrr * imports
  • rlang * imports
  • stringr * imports
  • tidyr * imports
  • progress * suggests
  • testthat * suggests
  • tibble * suggests
.github/workflows/R-CMD-check.yaml actions
  • actions/checkout v3 composite
  • r-lib/actions/check-r-package v2 composite
  • r-lib/actions/setup-pandoc v2 composite
  • r-lib/actions/setup-r v2 composite
  • r-lib/actions/setup-r-dependencies v2 composite
.github/workflows/update-citation-cff.yaml actions
  • actions/checkout v3 composite
  • r-lib/actions/setup-r v2 composite
  • r-lib/actions/setup-r-dependencies v2 composite