pyhrf.sandbox.physio_params module

pyhrf.sandbox.physio_params.buildOrder1FiniteDiffMatrix_central(size, dt)

returns a toeplitz matrix for central differences

to correct for errors on the first and last points: (due to the fact that there is no rf[-1] or rf[size] to average with) - uses the last point to calcuate the first and vis-versa - this is acceptable bc the rf is assumed to begin & end at steady state

(thus the first and last points should both be zero)
pyhrf.sandbox.physio_params.calc_linear_rfs(simu_brf, simu_prf, phy_params, dt, normalized_rfs=True)

Calculate ‘prf given brf’ and ‘brf given prf’ based on the a linearization around steady state of the physiological model as described in Friston 2000

Input:
  • simu_brf, simu_prf: brf and prf from the physiological simulation

    from which you wish to calculate the respective prf and brf. Assumed to be of size (1,hrf.size)

  • phy_params

  • normalized_rfs: set to True if simu_hrfs are normalized

Output:
  • calc_brf, calc_prf: np.arrays of shape (hrf.size, 1)
  • q_linear, v_linear: q and v calculated according to the linearized model

Note: These calculations do not account for any rescaling between brf and prf. This means the input simu_brf, simu_prf should NOT be rescaled.

** Warning**:
  • this function assumes prf.size == brf.size and uses this to build D, I
  • if making modifications: calc_brf, calc_prf have a truncation error (due to the finite difference matrix used) on the order of O(dt)^2. If for any reason a hack is later implemented to set the y-intecepts of brf_calc, prf_calc to zero by setting the first row of X4, X3 = 0, this will raise a singular matrix error in the calculation of calc_prf (due to X.I command), so this error is helpful in this case
pyhrf.sandbox.physio_params.create_bold_from_hbr_and_cbv(physiological_params, hbr, cbv)

Compute BOLD signal from HbR and blood volume variations obtained by a physiological model

pyhrf.sandbox.physio_params.create_evoked_physio_signals(physiological_params, paradigm, neural_efficacies, dt, integration_step=0.05)

Generate evoked hemodynamics signals by integrating a physiological model.

Parameters:
  • physiological_params (-) – <pvalue (float)>)): parameters of the physiological model. In jde.sandbox.physio see PHY_PARAMS_FRISTON00, PHY_PARAMS_FMRII
  • paradigm (-) – the experimental paradigm
  • neural_efficacies (-) – neural efficacies involved in flow inducing signal.
  • dt (-) – temporal resolution of the output signals, in second
  • integration_step (-) – time step used for integration, in second
Returns:

  • np.array((nb_signals, nb_scans, nb_voxels), float) -> All generated signals, indexes of the first axis correspond to:

    • 0: flow inducing
    • 1: inflow
    • 2: blood volume
    • 3: [HbR]

pyhrf.sandbox.physio_params.create_k_parameters(physiological_params)

Create field strength dependent parameters k1, k2, k3

pyhrf.sandbox.physio_params.create_omega_prf(primary_brf, dt, phy_params)

create prf from omega and brf

pyhrf.sandbox.physio_params.create_physio_brf(physiological_params, response_dt=0.5, response_duration=25.0, return_brf_q_v=False)

Generate a BOLD response function by integrating a physiological model and setting its driving input signal to a single impulse.

Parameters:
  • physiological_params (-) – <pvalue (float)>)): parameters of the physiological model. In jde.sandbox.physio see PHY_PARAMS_FRISTON00, PHY_PARAMS_FMRII...
  • response_dt (-) – temporal resolution of the response, in second
  • response_duration (-) – duration of the response, in second
Returns:

  • np.array(nb_time_coeffs, float) -> the BRF (normalized)
  • also return brf_not_normalized, q, v when return_prf_q_v=True (for error checking of v and q generation in calc_hrfs)

pyhrf.sandbox.physio_params.create_physio_prf(physiological_params, response_dt=0.5, response_duration=25.0, return_prf_q_v=False)

Generate a perfusion response function by setting the input driving signal of the given physiological model with a single impulse.

Parameters:
  • physiological_params (-) – <pvalue (float)>)): parameters of the physiological model. In jde.sandbox.physio see PHY_PARAMS_FRISTON00, PHY_PARAMS_FMRII...
  • response_dt (-) – temporal resolution of the response, in second
  • response_duration (-) – duration of the response, in second
Returns:

  • np.array(nb_time_coeffs, float) -> the PRF
  • also return brf_not_normalized, q, v when return_prf_q_v=True (for error checking of v and q generation in calc_hrfs)

pyhrf.sandbox.physio_params.create_tbg_neural_efficacies(physiological_params, condition_defs, labels)

Create neural efficacies from a truncated bi-Gaussian mixture.

Ars:
  • physiological_params (dict (<param_name>
    : <param_value>):

    parameters of the physiological model

  • condition_defs (list of pyhrf.Condition):

    list of condition definitions. Each item should have the following fields (moments of the mixture):

    • m_act (0<=float<eff_max): mean of activating component
    • v_act (0<float): variance of activating component
    • v_inact (0<float): variance of non-activating component
  • labels (np.array((nb_cond, nb_vox), int)): binary activation states

Returns:np.array(np.array((nb_cond, nb_vox), float)) -> the generated neural efficacies

TODO: settle how to relate brls and prls to neural efficacies

pyhrf.sandbox.physio_params.linear_rf_operator(rf_size, phy_params, dt, calculating_brf=False)
Calculates the linear operator A needed to convert brf to prf & vis-versa
prf = (A^{-1})brf brf = (A)prf
Inputs:
  • size of the prf and/or brf (assumed to be same)
  • physiological parameters
  • time resolution of data:
  • if you wish to calculate brf (return A), or prf (return inverse of A)
Outputs:
  • np.array of size (hrf_size,1) linear operator to convert hrfs
pyhrf.sandbox.physio_params.phy_integrate_euler(phy_params, tstep, stim, epsilon, Y0=None)

Integrate the ODFs of the physiological model with the Euler method.

Parameters:
  • phy_params (dict (<param_name> (-) – <param_value>): parameters of the physiological model
  • tstep (-) – time step of the integration, in seconds.
  • stim (-) – stimulation sequence with temporal resolution equal to the time step of the integration
  • epsilon (-) – neural efficacy
  • Y0 (-) –

    initial values for the physiological signals. If None: [0, 1, 1, 1.]

    s f_in q v
Result:
  • np.array((4, nb_steps), float) -> the integrated physiological signals, where indexes of the first axis correspond to:

    0 : flow inducing 1 : inflow 2 : HbR 3 : blood volume

TODO: should the output signals be rescaled wrt their value at rest?