Skip to content

Commit 74d3e52

Browse files
committed
Add init-jabs project step
1 parent dc8c8fb commit 74d3e52

File tree

1 file changed

+47
-2
lines changed

1 file changed

+47
-2
lines changed

nextflow/bootstrap/main.nf

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,24 @@ process CREATE_VERSION_CONFIG {
3030
"""
3131
}
3232

33+
process INIT_JABS_PROJECTS {
34+
label 'jabs_classify'
35+
label 'cpu'
36+
cpus 8
37+
38+
input:
39+
val(project_folder_name)
40+
41+
output:
42+
val(project_folder_name), emit: initialized_project
43+
44+
script:
45+
def project_path = "${params.classifier_project_folders}/${project_folder_name}"
46+
def project_file = "${project_path}/jabs/project.json"
47+
"""
48+
jabs-init "${project_path}" \$(jq -r '[.behavior[] | .window_size] | unique | map("-w \\(.)") | join(" ")' ${project_file})
49+
"""
50+
}
3351

3452
process EXPORT_TRAINING_DATA {
3553
tag "export_${behavior_path}"
@@ -172,13 +190,41 @@ workflow {
172190
main:
173191
CREATE_VERSION_CONFIG()
174192

193+
// Create channel of behaviors with their details
175194
classifier_ch = Channel.from(params.single_mouse_classifiers.collect { k, v -> [k, v] })
195+
196+
// Map to include behavior_path
176197
behavior_projects_ch = classifier_ch.map { behavior_name, details ->
177198
def behavior_path = behavior_name.replaceAll(' ', '_').replaceAll('[()]', '')
178199
tuple(behavior_name, behavior_path, details.project_folder_name)
179200
}
180201

181-
exported_h5_ch = EXPORT_TRAINING_DATA(behavior_projects_ch)
202+
// Extract unique project folders
203+
unique_projects_ch = classifier_ch
204+
.map { behavior_name, details -> details.project_folder_name }
205+
.unique()
206+
207+
// Initialize each unique project
208+
initialized_projects_ch = INIT_JABS_PROJECTS(unique_projects_ch)
209+
210+
// Create a value channel from initialized projects for joining
211+
initialized_projects_val = initialized_projects_ch.initialized_project
212+
.collect()
213+
.map { projects ->
214+
projects.collectEntries { [it, true] }
215+
}
216+
217+
// Join behaviors with their initialized projects
218+
ready_behaviors_ch = behavior_projects_ch
219+
.combine(initialized_projects_val)
220+
.map { behavior_name, behavior_path, project_folder_name, project_map ->
221+
// Check if this behavior's project has been initialized
222+
if (project_map[project_folder_name]) {
223+
tuple(behavior_name, behavior_path, project_folder_name)
224+
}
225+
}
226+
227+
exported_h5_ch = EXPORT_TRAINING_DATA(ready_behaviors_ch)
182228

183229
trained_classifiers_ch = TRAIN_CLASSIFIER(exported_h5_ch.h5_file_with_hash)
184230

@@ -190,4 +236,3 @@ workflow {
190236

191237
GENERATE_PIPELINE_CONFIG(collected_behaviors)
192238
}
193-

0 commit comments

Comments
 (0)