## ----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()

