/ workflow / rules / subject.smk
subject.smk
  1  valid_slices_sub = {"Proband X1": [8],
  2                      "Proband X2": [8],
  3                      "Proband X4": [8],
  4                      "Proband X5": [8],
  5                      "Proband X6": [8],
  6                      "Proband X7": [8],
  7                      "Proband X8": [8],
  8                      "Proband X9": [9],
  9                      "Proband X10": [8],
 10                      "Proband X11": [8],
 11                      "Proband X12": [8],
 12                      "Proband X13": [9],
 13                      "Proband X14": [11],
 14                      "Proband X15": [7]}
 15  
 16  subject_data = glob("data/subject_data/*/*[!mask].nii.gz")
 17  
 18  FOLDER = [os.path.basename(Path(x).parent) for x in subject_data]
 19  
 20  def aggregate_input_Sub(wildcards):
 21      dir = checkpoints.SplitSlicesSub.get(**wildcards).output[0]
 22      return glob(f"{dir}/*/*")
 23  
 24  def aggregate_input_noise_Sub(wildcards):
 25      dir = checkpoints.SplitSlicesNoiseSub.get(**wildcards).output[0]
 26      return glob(f"{dir}/*/*")
 27  
 28  checkpoint SplitSlicesSub:
 29      input:
 30          lambda wc: glob("data/subject_data/{folder}/*[!mask].nii.gz".format(folder=wc.folder)), 
 31          lambda wc: glob("data/subject_data/{folder}/*_mask.nii.gz".format(folder=wc.folder)),
 32      output:
 33          directory("analysis/feature_extraction/subject/{folder}"),
 34      params:
 35          valid_slices_sub
 36      conda:
 37          "../split.yaml"
 38      script:
 39          "../../code/seperate_slices.py"
 40  
 41  
 42  checkpoint SplitSlicesNoiseSub:
 43      input:
 44          "data/subject_data_noise/{folder}_{noise}_{seed}/{folder}.nii.gz", 
 45          lambda wc: glob("data/subject_data/{folder}/*_mask.nii.gz".format(folder=wc.folder)),
 46      output:
 47          directory("analysis/feature_extraction/subject_noise/{folder}_{noise}_{seed}"),
 48      params:
 49          valid_slices_sub
 50      conda:
 51          "../split.yaml"
 52      script:
 53          "../../code/seperate_slices.py"
 54  
 55  rule GenerateNoiseImagesSub:
 56      input:
 57          lambda wc: glob("data/subject_data/{folder}/*[!mask].nii.gz".format(folder=wc.folder)),
 58      output:
 59          "data/subject_data_noise/{folder}_{noise}_{seed}/{folder}.nii.gz"
 60      conda:
 61          "../noise.yaml"
 62      params:
 63          "{seed}",
 64          "{noise}"
 65      script:
 66          "../../code/add_artifical_noise.py"
 67          
 68  rule FeatureExtractionSub:
 69      input:
 70          aggregate_input_Sub
 71      output:
 72          "analysis/features/subject_noise/{folder}_0.000_0.csv"
 73      conda:
 74          "../feature_extraction.yaml"
 75      script:
 76          "../../code/mrxcat_simulations/feature_extraction.py"
 77          
 78  rule FeatureExtractionNoiseSub:
 79      input:
 80          aggregate_input_noise_Sub
 81      output:
 82          "analysis/features/subject_noise/{folder}_{noise}_{seed,\\d{3}}.csv"
 83      conda:
 84          "../feature_extraction.yaml"
 85      script:
 86          "../../code/mrxcat_simulations/feature_extraction.py"
 87  
 88  
 89  rule SubFeatureNormalization:
 90      input:
 91          expand("analysis/features/subject_noise/{{folder}}_{noise}_{seed}.csv", noise = NOISE, seed = SEEDS),
 92          "analysis/features/subject_noise/{folder}_0.000_0.csv"
 93      output:
 94          "analysis/features_normalized/subject/{folder}.csv"
 95      conda:
 96          "../tidyverse.yaml"
 97      params:
 98          "{folder}_0.000_0.csv",
 99          "{folder}_"
100      script:
101          "../../code/mrxcat_simulations/feature_normalization.R"
102  
103  rule SubCalculateMae:
104      input:
105          "analysis/features_normalized/subject/{folder}.csv"
106      output:
107          "analysis/calculated_mae/subject/mae_{folder}.csv"
108      conda:
109          "../calculate_mae.yaml"
110      script:
111          "../../code/mrxcat_simulations/calculate_mae.py"
112  
113  rule SubGeneratePlots:
114      input:
115          "analysis/features_normalized/subject/{folder}.csv",
116      output:
117          "analysis/plots/subject/features_curves/{folder}/top12_features.png"
118      conda:
119          "../tidyverse.yaml"
120      script:
121          "../../code/feature_plots.R"
122  
123  rule SubGenerateMaePlots:
124      input:
125          expand("analysis/calculated_mae/subject/mae_{folder}.csv", folder = FOLDER),
126      output:
127          "analysis/tables/rank_table_subject.csv",
128          "analysis/plots/subject/total_mae_vs_snr_mae.png",
129          "analysis/plots/subject/total_mae_vs_snr_mae_1.png",
130          "analysis/plots/subject/rank_barcode.png",
131      conda:
132          "../tidyverse.yaml"
133      script:
134          "../../code/mae_plots.R"
135  
136  rule SubTableRank:
137      input:
138          "analysis/calculated_mae/subject/mae_{folder}.csv"
139      output:
140          "analysis/tables/subject/ranks_{folder}.csv"
141      conda:
142          "../tidyverse.yaml"
143      script:
144          "../../code/single_ranks.R"