=================
Quick Start Guide
=================

Use this tutorial to try out main functionalities of this library and test if it has installed properly. 
In this tutorial, you will be estimating causal functional connectivity (CFC) from simulated datasets.

Load the packages
~~~~~~~~~~~~~~~~~
.. code-block:: python

	import networkx as nx
	import numpy as np
	from numpy.random import default_rng
	rng = default_rng(seed=111)
	from timeawarepc.tpc import cfc_tpc, cfc_pc, cfc_gc
	from timeawarepc.simulate_data import *
	from timeawarepc.find_cfc import *


Simulate a dataset
~~~~~~~~~~~~~~~~~~
Specify a data generating model: 
model = "lingauss" for Linear Gaussian VAR, "nonlinnongauss" for Non-Linear Non-Gaussian VAR, "ctrnn" for Continuous Time Recurrent Neural Network.
T is the number of time recordings (default 1000), noise is the noise std. deviation (default 1). 
Note that number of neurons = 4 and max delay of interaction = 1 indices are fixed in this tutorial.

Simulate the dataset using simulate_data().

.. code-block:: python

	model = 'lingauss'
	T=1000
	noise = 1

	data, CFCtruth = simulate_data(model, T = 1000, noise = 1)


Estimate CFC - quick way
~~~~~~~~~~~~~~~~~~~~~~~~
We will use find_cfc(), a convenient wrapper around different methods in this library.

Specify a method_name. 'TPC' for Time-Aware PC Algorithm, 'PC' for PC Algorithm, 'GC' for Granger Causality.

.. code-block:: python

	method_name = 'TPC'#'GC'#'PC'
	
	alpha = 0.05
	maxdelay=1
	isgauss = (model == 'lingauss')
	adjmat, causaleffmat = find_cfc(data,method_name,alpha=alpha,maxdelay=maxdelay,isgauss=isgauss)


Compare the Ground Truth with Estimated CFC
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. code-block:: python

	print('Ground Truth CFC adjacency:')
	print(CFCtruth)
	print('Estimated CFC adjacency by '+method_name+':')
	print(adjmat)


Estimate CFC - another way
~~~~~~~~~~~~~~~~~~~~~~~~~~
Alternatively, you may estimate CFC using the python functions for individual methods: cfc_tpc, cfc_pc, cfc_gc.

Specify a method_name. 'TPC' for Time-Aware PC Algorithm, 'PC' for PC Algorithm, 'GC' for Granger Causality.

.. code-block:: python

	method_name = 'TPC'#'GC'#'PC'

	alpha = 0.05
	isgauss = (model == 'lingauss')
	if method_name == 'TPC':
	    maxdelay=1
	    niter = 50
	    thresh = 0.25
	    adjmat, causaleffmat = cfc_tpc(data,maxdelay=maxdelay,alpha=alpha,niter=niter,thresh=thresh,isgauss=isgauss)
	elif method_name == 'PC':
	    adjmat, causaleffmat = cfc_pc(data,alpha,isgauss=isgauss)
	elif method_name == 'GC':
	    adjmat, causaleffmat = cfc_gc(data,maxdelay,alpha)


Compare the Ground Truth and Estimated CFC
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: python

	print('Ground Truth CFC adjacency:')
	print(CFCtruth)
	print('Estimated CFC adjacency by '+method_name+':')
	print(adjmat)

