-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMC_diffusion_distribution_analysis_sptPALM.py
More file actions
125 lines (98 loc) · 5.08 KB
/
MC_diffusion_distribution_analysis_sptPALM.py
File metadata and controls
125 lines (98 loc) · 5.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
This work is licensed under the CC BY 4.0 License.
You are free to share and adapt this work, even for commercial purposes,
as long as you provide appropriate credit to the original creator.
Original Creator: Johannes Hohlbein (Wageningen University & Research)
Date of Creation: September, 2024
Full license details can be found at https://creativecommons.org/licenses/by/4.0/
"""
import os
import pickle
from tkinter import Tk
from tkinter.filedialog import askopenfilename
from set_parameters_sptPALM import set_parameters_sptPALM
from set_parameters_sptPALM_GUI import set_parameters_sptPALM_GUI
from set_parameters_simulation import set_parameters_simulation
from set_parameters_simulation_GUI import set_parameters_simulation_GUI
from initiate_simulation import initiate_simulation
from diff_coeffs_from_tracks_fast import diff_coeffs_from_tracks_fast
from plot_diff_histograms_tracklength_resolved import plot_diff_histograms_tracklength_resolved
from fit_data_with_MCDDA_sptPALM import fit_data_with_MCDDA_sptPALM
# Assuming Para1 is a dictionary-like object
def MC_diffusion_distribution_analysis_sptPALM(comb_data=None, input_parameter=None, sim_input=None):
"""
Function to analyse histograms of diffusion coefficients using
Monte-Carlo Diffusion Distribution Analysis MC-DDA
CC BY 4.0 License.
Original Creator: Johannes Hohlbein (Wageningen University & Research)
Date of Creation: September, 2024
"""
print('\nRun MC_diffusion_distribution_analysis_sptPALM.py')
"""
TEMPORARY: For bugfixing - Replace the following line with your file path if needed
"""
# print(" TEMP! SPECIFIC FILE is being loaded: input_parameter.pkl!")
# filename = '/Users/hohlbein/Documents/WORK-DATA-local/Data_Finland/input_parameter.pkl'
# with open(filename, 'rb') as f:
# input_parameter = pickle.load(f)
# print(" TEMP! SPECIFIC FILE is being loaded: sptData_combined_movies.pkl!")
# # filename = '/Users/hohlbein/Documents/WORK-DATA-local/Cas12a-data-JH/output_python/sptData_combined_movies.pkl'
# filename = '/Users/hohlbein/Documents/WORK-DATA-local/Data_Finland/output_python/sptData_combined_movies.pkl'
# with open(filename, 'rb') as f:
# comb_data = pickle.load(f)
"""
Actual start of the function
"""
# Check whether 'input_parameter' was passed to the function
if not input_parameter:
print(" Run set_parameters_sptPALM.py + GUI")
input_parameter = set_parameters_sptPALM()
input_parameter = set_parameters_sptPALM_GUI()
else:
print(" 'input_parameter' loaded from memory... ")
# Check whether 'comb_data' was passed to the function
if not comb_data:
print("No 'comb_data' from option 3 available")
print("Continue with GUI to select 'comb_data' such as 'sptData_combined_movies.pkl' or similar")
# Use Tkinter for file dialog
Tk().withdraw() # Close root window
starting_directory = os.path.join(input_parameter['data_dir'],
input_parameter['default_output_dir'])
filename = askopenfilename(initialdir = starting_directory,
filetypes = [("pickle file", "*.pkl")],
title = "Select *.pkl file from sptPALM_combine_movies.py")
if filename:
with open(filename, 'rb') as f:
comb_data = pickle.load(f)
else:
raise ValueError("No file selected!")
else:
print(" 'comb_data' loaded from memory... ")
# Check whether 'sim_input' was passed to the function
if not sim_input:
print("Run 'set_parameters_simulation.py' + GUI")
sim_input = set_parameters_simulation()
sim_input = set_parameters_simulation_GUI(sim_input)
else:
print(" 'sim_input' loaded from memory... ")
print(f" Running MCDDA on tracks assigned for condition: {comb_data['condition_names'][sim_input['species_to_select']]}\n")
# Use tracks from anaDDA style of plotting tracks
# tracks: x[µm), y[µm]], frame, track_id, frametime
tracks = comb_data['anaDDA_tracks'][sim_input['species_to_select']]
# Generate average diffusion coefficients for each track
sorted_tracks = tracks.sort_values(by=['track_id', 'frame'])
# D: tracks + #_loc, MSD, D_coeff
# D_track_length_matrix: Bins, steps[2-3]
[D, D_track_length_matrix] = diff_coeffs_from_tracks_fast(sorted_tracks, sim_input);
# Plot experimental data
plot_diff_histograms_tracklength_resolved(D_track_length_matrix, sim_input, D)
# TO DO: fact check size of track_lengths array
# breakpoint()
# len(sim_input['track_lengths'] == len(input_parameter['track_lengths']))
# Initiate the simulation
particle_data, sim_input = initiate_simulation(sim_input)
# Fit the experimental data
fit_data_with_MCDDA_sptPALM(D_track_length_matrix, sim_input, input_parameter)
return comb_data, input_parameter