## ----setup, echo=FALSE, warning=FALSE-----------------------------------------
set.seed(42)
knitr::opts_chunk$set(
  comment='##'
)
# knitr::opts_chunk$set(comment=NA,
#                fig.align="center",
#                fig.width = 7,
#                fig.height = 7,
#                warning=FALSE)

## ----install, eval=FALSE------------------------------------------------------
# if (!requireNamespace("BiocManager", quietly=TRUE))
#     install.packages("BiocManager")
# BiocManager::install("flowcatchR")

## ----install-devel, eval=FALSE------------------------------------------------
# install.packages("devtools") # if needed
# devtools::install_github("federicomarini/flowcatchR")

## ----helpmaintainer-----------------------------------------------------------
maintainer("flowcatchR")

## ----citationPkg--------------------------------------------------------------
citation("flowcatchR")

## ----loadData,results='hide',message=TRUE-------------------------------------
library("flowcatchR")
data("MesenteriumSubset")

## ----meseLoaded---------------------------------------------------------------
# printing summary information for the MesenteriumSubset object
MesenteriumSubset

## ----workflowCompact,eval=FALSE,results='hide'--------------------------------
# # one command to seize them all :)
# fullResults <- kinematics(trajectories(particles(channel.Frames(MesenteriumSubset,"red"))))

## ----newFrames,eval=FALSE-----------------------------------------------------
# # initialization
# fullData <- read.Frames(image.files="/path/to/folder/containing/images/", nframes=100)
# # printing summary information for the Frames object
# fullData

## ----inspectRaw,fig.height=4,fig.width=7.5,fig.cap="The first 9 frames of the MesenteriumSubset dataset. The red channel stores information about platelets, while the green channel is dedicated to leukocytes"----
inspect.Frames(MesenteriumSubset, nframes=9, display.method="raster")

## ----selectRed----------------------------------------------------------------
plateletsMesenterium <- channel.Frames(MesenteriumSubset, mode="red")
plateletsMesenterium

## ----inspectPlatelets,fig.height=4,fig.width=7.5,fig.cap="The first 9 frames for the red channel of the MesenteriumSubset dataset. This is just displaying the GrayScale signal for the red channel stored in `plateletsMesenterium` (for the thrombocytes)"----
inspect.Frames(plateletsMesenterium, nframes=9, display.method="raster")

## ----segmentPreprocess--------------------------------------------------------
preprocessedPlatelets <- preprocess.Frames(plateletsMesenterium,
                                    brush.size=3, brush.shape="disc",
                                    at.offset=0.15, at.wwidth=10, at.wheight=10,
                                    kern.size=3, kern.shape="disc",
                                    ws.tolerance=1, ws.radius=1)
preprocessedPlatelets

## ----inspectSegm,fig.height=4,fig.width=7.5,fig.cap="The first 9 frames after preprocessing of the MesenteriumSubset dataset. The binarized image shows the detected objects after thresholding."----
inspect.Frames(preprocessedPlatelets, nframes=9, display.method="raster")

## ----cropFrames---------------------------------------------------------------
croppedFrames <- crop.Frames(plateletsMesenterium,
                     cutLeft=6, cutRight=6,
                     cutUp=3, cutDown=3,
                     testing=FALSE)
croppedFrames

## ----rotateFrames-------------------------------------------------------------
rotatedFrames <- rotate.Frames(plateletsMesenterium, angle=30)
rotatedFrames

## ----selectFrames-------------------------------------------------------------
subsetFrames <- select.Frames(plateletsMesenterium,
                       framesToKeep=c(1:10,14:20))
subsetFrames

## ----normalizeFrames----------------------------------------------------------
normFrames <- normalizeFrames(plateletsMesenterium,normFun = "median")

## ----particleSet--------------------------------------------------------------
platelets <- particles(plateletsMesenterium, preprocessedPlatelets)
platelets

## ----selectParticles----------------------------------------------------------
selectedPlatelets <- select.particles(platelets, min.area=3)
selectedPlatelets

## ----checkSelection,fig.height=4,fig.width=7.5,fig.cap="Particles detected in the first 9 frames. Particles detected in the first 9 frames are shown in yellow, with their contours defined by the segmentation procedure."----
paintedPlatelets <- add.contours(raw.frames=MesenteriumSubset,
                                 binary.frames=preprocessedPlatelets,
                                 mode="particles")
inspect.Frames(paintedPlatelets, nframes=9, display.method="raster")

## ----penFunc------------------------------------------------------------------
defaultPenalty <- penaltyFunctionGenerator()
print(defaultPenalty)

## ----linkParticles------------------------------------------------------------
linkedPlatelets <- link.particles(platelets,  
                                  L=26, R=3,
                                  epsilon1=0, epsilon2=0,
                                  lambda1=1, lambda2=0,
                                  penaltyFunction=penaltyFunctionGenerator(),
                                  include.area=FALSE)
linkedPlatelets

## ----expo-impo,eval=FALSE-----------------------------------------------------
# # export to csv format
# export.particles(platelets, dir="/path/to/export/folder/exportParticleSet/")
# # re-import the previously exported, in this case
# importedPlatelets <- read.particles(particle.files="/path/to/export/folder/exportParticleSet/")

## ----generateTrajs------------------------------------------------------------
trajPlatelets <- trajectories(linkedPlatelets)
trajPlatelets

## ----cubeTrajs,fig.cap="A 2D+time representation of the trajectories. This is produced by plotting a `TrajectoryList` object",eval=TRUE----
plot(trajPlatelets, MesenteriumSubset)

## ----overviewTrajs,fig.height=4,fig.width=7.5,fig.cap='A 2D "flat" representation of the trajectories. This is more suitable to give an indication of the global movement'----
plot2D.TrajectorySet(trajPlatelets, MesenteriumSubset)

## ----contourTrajs-------------------------------------------------------------
paintedTrajectories <- add.contours(raw.frames=MesenteriumSubset,
                                    binary.frames=preprocessedPlatelets,  
                                    trajectoryset=trajPlatelets,
                                    mode="trajectories")
paintedTrajectories

## ----inspectTrajs,fig.height=4,fig.width=7.5,fig.cap="Particles detected in the first 9 frames. These are shown this time in colours corresponding to the identified trajectories, again with their contours defined by the segmentation procedure."----
inspect.Frames(paintedTrajectories,nframes=9,display.method="raster")

## ----traj11,fig.height=4,fig.width=7.5,fig.cap="First 9 frames for trajectory with ID 11. This is supplied to the `trajIds` argument of `add.contours`"----
traj11 <- add.contours(raw.frames=MesenteriumSubset,
                       binary.frames=preprocessedPlatelets,
                       trajectoryset=trajPlatelets,
                       mode="trajectories",
                       trajIDs=11)
traj11
inspect.Frames(traj11, nframes=9, display.method="raster")

## ----viewTraj11---------------------------------------------------------------
trajPlatelets[[11]]

## ----exportTraj11,eval=FALSE--------------------------------------------------
# export.Frames(traj11, dir=tempdir(), nameStub="vignetteTest_traj11",
#               createGif=TRUE, removeAfterCreatingGif=FALSE)

## ----loopExport,eval=FALSE----------------------------------------------------
# evaluatedTrajectories <- trajPlatelets
# 
# for(i in 1:length(trajPlatelets))
# {
#   paintedTraj <- add.contours(raw.frames=MesenteriumSubset,
#                               binary.frames=preprocessedPlatelets,
#                               trajectoryset=trajPlatelets,
#                               mode="trajectories",
#                               col="yellow",
#                               trajIDs=i)
#   export.Frames(paintedTraj,
#                 nameStub=paste0("vignetteTest_evaluation_traj_oneByOne_",i),
#                 createGif=TRUE, removeAfterCreatingGif=TRUE)
#   ### uncomment the code below to perform the interactive evaluation of the single trajectories
# 
#   #   cat("Should I keep this trajectory? --- 0: NO, 1:YES --- no other values allowed")
#   #   userInput <- readLines(n=1L)
#   #   ## if neither 0 nor 1, do not update
#   #   ## otherwise, this becomes the value for the field keep in the new TrajectoryList
#   #   evaluatedTrajectories@.Data[[i]]$keep <- as.logical(as.numeric(userInput))
# }

## ----kinemFeats---------------------------------------------------------------
allKinematicFeats.allPlatelets <- kinematics(trajPlatelets,
                                             trajectoryIDs=NULL, # will select all trajectory IDs 
                                             acquisitionFrequency=30, # value in milliseconds
                                             scala=50, # 1 pixel is equivalent to ... micrometer
                                             feature=NULL) # all kinematic features available

## ----kinemInspect-------------------------------------------------------------
allKinematicFeats.allPlatelets

## ----kinemFeatsAvailable------------------------------------------------------
allKinematicFeats.allPlatelets <- kinematics(trajPlatelets, feature="?")

## ----allVelos,fig.cap="Histogram of the curvilinear velocities for all trajectories identified in the MesenteriumSubset dataset",warning=FALSE----
allVelocities <- kinematics(trajPlatelets, feature="curvilinearVelocity")

hist(allVelocities, breaks=10, probability=TRUE, col="cadetblue",
     xlab="Curvilinear Velocities Distribution",
     main="Trajectory Analysis: Curvilinear Velocities")
lines(density(allVelocities, na.rm=TRUE), col="steelblue", lwd=2)

## ----snapFrames,eval=FALSE----------------------------------------------------
# snap(MesenteriumSubset,preprocessedPlatelets,
#      platelets,trajPlatelets,
#      frameID = 1,showVelocity = T)

## ----snapExample,echo=FALSE,fig.width=7,fig.cap="Output generated by the snap function. The user wanted to identify the particle and additionally display the trajectory information (ID, instantaneous velocity) on it."----
display(readImage(system.file("extdata/snapExp.jpg",package="flowcatchR")),
        method = "raster")

## ----launchShiny,eval=FALSE---------------------------------------------------
# shinyFlow()

## ----notebooksLocation--------------------------------------------------------
list.files(system.file("extdata",package = "flowcatchR"),pattern = "*.ipynb")

## ----ipynb,eval=FALSE---------------------------------------------------------
# $ ipython notebook

## ----sessionInfo, echo=FALSE--------------------------------------------------
sessionInfo()

