Hello. I'm trying to use COMMIT2 to filter false positives in tck files based on MRtrix3. The problem is that it took too long to fit model. (About **6h 21m** each COMMIT 1 & 2) The cause of the problem I expect is 1. Are 5 million fibers in tck too many? 2. Thread I used was only one. The code I used is below. ```import numpy as np import os import commit from commit import trk2dictionary os.system( 'tck2connectome -force -nthreads 0 -assignment_radial_search 2 \ -out_assignments test2_fibers_assignment.txt \ dhollander_tractogram_SD_STREAM_100408.tck \ Schaefer400_7Net_2mm_100408.nii.gz test2_commit2_connectome.csv' ) if not os.path.isdir( 'bundles' ) : os.mkdir( 'bundles' ) os.system( 'connectome2tck -force -nthreads 0 -exclusive -files per_edge \ -keep_self dhollander_tractogram_SD_STREAM_100408.tck test2_fibers_assignment.txt \ bundles/bundle_' ) C = np.loadtxt( 'test2_commit2_connectome.csv', delimiter=',' ) # NB: change 'delimiter' to suits your needs CMD = 'tckedit -force -nthreads 0' for i in range(C.shape[0]): for j in range(i,C.shape[0]): if C[i,j] > 0 : CMD += ' bundles/bundle_%d-%d.tck' %(i+1,j+1) os.system( CMD + ' dhollander_tractogram_SD_STREAM_100408.tck' ) trk2dictionary.run( filename_tractogram = 'dhollander_tractogram_SD_STREAM_100408.tck', filename_mask = 'wm_axis3_bin_125.nii.gz', fiber_shift = 0.5 ) import amico amico.util.fsl2scheme( 'bvals', 'bvecs', 'DWI.scheme' ) mit = commit.Evaluation('/local_raid1/03_user/sunghyoung/01_project/04_COMMIT', 'test2') # commit.Evaluation(STUDY_PATH, SUBJECT_PATH ) mit.load_data( 'data.nii.gz', 'DWI.scheme' ) mit.set_model( 'StickZeppelinBall' ) d_par = 1.7E-3 # Parallel diffusivity [mm^2/s] d_perps_zep = [] # Perpendicular diffusivity(s) [mm^2/s] d_isos = [ 1.7E-3, 3.0E-3 ] # Isotropic diffusivity(s) [mm^2/s] mit.model.set( d_par, d_perps_zep, d_isos ) mit.generate_kernels( regenerate=True ) mit.load_kernels() mit.load_dictionary( 'COMMIT' ) # should match a mask with your DWI data as the same geometry mit.set_threads(1) # mit.set_threads() mit.build_operator() mit.fit( tol_fun=1e-3, max_iter=1000, verbose=False ) mit.save_results( path_suffix="_COMMIT1" ) x_nnls, _, _ = mit.get_coeffs() C = np.loadtxt( 'test2_commit2_connectome.csv', delimiter=',' ) C = np.triu( C ) # be sure to get only the upper-triangular part of the matrix group_size = C[C>0].astype(np.int32) tmp = np.insert( np.cumsum(group_size), 0 , 0) group_idx = np.array( [np.arange(tmp[i],tmp[i+1]) for i in range(len(tmp)-1)] ) group_w = np.empty_like( group_size, dtype=np.float64 ) for k in range(group_size.size) : group_w[k] = np.sqrt(group_size[k]) / ( np.linalg.norm(x_nnls[group_idx[k]]) + 1e-12 ) reg_lambda = 5e-4 # change to suit your needs prior_on_bundles = commit.solvers.init_regularisation( mit, regnorms = [commit.solvers.group_sparsity, commit.solvers.non_negative, commit.solvers.non_negative], structureIC = group_idx, weightsIC = group_w, lambdas = [reg_lambda, 0.0, 0.0] ) mit.fit( tol_fun=1e-3, max_iter=1000, regularisation=prior_on_bundles, verbose=False ) mit.save_results( path_suffix="_COMMIT2" ) ``` In conclusion, I have two questions. 1. Are there ways to reduce fitting time? 2. Because I don't want to compare COMMIT1 and COMMIT2, how can I only produce results for COMMIT2? Please comment my code. I'm sorry if they are stupid questions. However, if you help me, it will be very helpful! Best, Joseph.