@@ -552,19 +552,42 @@ <h1>Source code for mantidimaging.core.reconstruct.cil_recon</h1><div class="hig
552
552
< span class ="k "> def</ span > < span class ="fm "> __init__</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> ,</ span > < span class ="n "> verbose</ span > < span class ="o "> =</ span > < span class ="mi "> 1</ span > < span class ="p "> ,</ span > < span class ="n "> progress</ span > < span class ="p "> :</ span > < span class ="n "> Progress</ span > < span class ="o "> |</ span > < span class ="kc "> None</ span > < span class ="o "> =</ span > < span class ="kc "> None</ span > < span class ="p "> )</ span > < span class ="o "> -></ span > < span class ="kc "> None</ span > < span class ="p "> :</ span >
553
553
< span class ="nb "> super</ span > < span class ="p "> ()</ span > < span class ="o "> .</ span > < span class ="fm "> __init__</ span > < span class ="p "> (</ span > < span class ="n "> verbose</ span > < span class ="p "> )</ span >
554
554
< span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> progress</ span > < span class ="o "> =</ span > < span class ="n "> progress</ span >
555
- < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> iteration_count</ span > < span class ="o "> =</ span > < span class ="mi "> 1</ span >
556
555
557
556
< span class ="k "> def</ span > < span class ="fm "> __call__</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> ,</ span > < span class ="n "> algo</ span > < span class ="p "> :</ span > < span class ="n "> Algorithm</ span > < span class ="p "> )</ span > < span class ="o "> -></ span > < span class ="kc "> None</ span > < span class ="p "> :</ span >
558
557
< span class ="k "> if</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> progress</ span > < span class ="p "> :</ span >
559
558
< span class ="n "> extra_info</ span > < span class ="o "> =</ span > < span class ="p "> {</ span > < span class ="s1 "> 'iterations'</ span > < span class ="p "> :</ span > < span class ="n "> algo</ span > < span class ="o "> .</ span > < span class ="n "> iterations</ span > < span class ="p "> ,</ span > < span class ="s1 "> 'losses'</ span > < span class ="p "> :</ span > < span class ="n "> algo</ span > < span class ="o "> .</ span > < span class ="n "> loss</ span > < span class ="p "> }</ span >
559
+ < span class ="k "> if</ span > < span class ="n "> algo</ span > < span class ="o "> .</ span > < span class ="n "> last_residual</ span > < span class ="ow "> and</ span > < span class ="n "> algo</ span > < span class ="o "> .</ span > < span class ="n "> last_residual</ span > < span class ="p "> [</ span > < span class ="mi "> 0</ span > < span class ="p "> ]</ span > < span class ="o "> ==</ span > < span class ="n "> algo</ span > < span class ="o "> .</ span > < span class ="n "> iteration</ span > < span class ="p "> :</ span >
560
+ < span class ="n "> extra_info</ span > < span class ="p "> [</ span > < span class ="s2 "> "residual"</ span > < span class ="p "> ]</ span > < span class ="o "> =</ span > < span class ="n "> algo</ span > < span class ="o "> .</ span > < span class ="n "> last_residual</ span > < span class ="p "> [</ span > < span class ="mi "> 1</ span > < span class ="p "> ]</ span >
560
561
< span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> progress</ span > < span class ="o "> .</ span > < span class ="n "> update</ span > < span class ="p "> (</ span >
561
562
< span class ="n "> steps</ span > < span class ="o "> =</ span > < span class ="mi "> 1</ span > < span class ="p "> ,</ span >
562
- < span class ="n "> msg</ span > < span class ="o "> =</ span > < span class ="sa "> f</ span > < span class ="s1 "> 'CIL: Iteration </ span > < span class ="si "> {</ span > < span class ="bp " > self </ span > < span class ="o "> .</ span > < span class ="n "> iteration_count </ span > < span class =" w " > </ span > < span class ="si "> }</ span > < span class ="s1 "> of </ span > < span class ="si "> {</ span > < span class ="n "> algo</ span > < span class ="o "> .</ span > < span class ="n "> max_iteration</ span > < span class ="si "> }</ span > < span class ="s1 "> '</ span >
563
+ < span class ="n "> msg</ span > < span class ="o "> =</ span > < span class ="sa "> f</ span > < span class ="s1 "> 'CIL: Iteration </ span > < span class ="si "> {</ span > < span class ="n " > algo </ span > < span class ="o "> .</ span > < span class ="n "> iteration </ span > < span class ="si "> }</ span > < span class ="s1 "> of </ span > < span class ="si "> {</ span > < span class ="n "> algo</ span > < span class ="o "> .</ span > < span class ="n "> max_iteration</ span > < span class ="si "> }</ span > < span class ="s1 "> '</ span >
563
564
< span class ="sa "> f</ span > < span class ="s1 "> ': Objective </ span > < span class ="si "> {</ span > < span class ="n "> algo</ span > < span class ="o "> .</ span > < span class ="n "> get_last_objective</ span > < span class ="p "> ()</ span > < span class ="si "> :</ span > < span class ="s1 "> .2f</ span > < span class ="si "> }</ span > < span class ="s1 "> '</ span > < span class ="p "> ,</ span >
564
565
< span class ="n "> force_continue</ span > < span class ="o "> =</ span > < span class ="kc "> False</ span > < span class ="p "> ,</ span >
565
566
< span class ="n "> extra_info</ span > < span class ="o "> =</ span > < span class ="n "> extra_info</ span > < span class ="p "> ,</ span >
566
- < span class ="p "> )</ span >
567
- < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> iteration_count</ span > < span class ="o "> +=</ span > < span class ="mi "> 1</ span > </ div >
567
+ < span class ="p "> )</ span > </ div >
568
+
569
+
570
+
571
+ < div class ="viewcode-block " id ="RecordResidualsCallback ">
572
+ < a class ="viewcode-back " href ="../../../../api/mantidimaging.core.reconstruct.cil_recon.html#mantidimaging.core.reconstruct.cil_recon.RecordResidualsCallback "> [docs]</ a >
573
+ < span class ="k "> class</ span > < span class ="nc "> RecordResidualsCallback</ span > < span class ="p "> (</ span > < span class ="n "> Callback</ span > < span class ="p "> ):</ span >
574
+
575
+ < span class ="k "> def</ span > < span class ="fm "> __init__</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> ,</ span > < span class ="n "> verbose</ span > < span class ="o "> =</ span > < span class ="mi "> 1</ span > < span class ="p "> ,</ span > < span class ="n "> residual_interval</ span > < span class ="p "> :</ span > < span class ="nb "> int</ span > < span class ="o "> =</ span > < span class ="mi "> 1</ span > < span class ="p "> )</ span > < span class ="o "> -></ span > < span class ="kc "> None</ span > < span class ="p "> :</ span >
576
+ < span class ="nb "> super</ span > < span class ="p "> ()</ span > < span class ="o "> .</ span > < span class ="fm "> __init__</ span > < span class ="p "> (</ span > < span class ="n "> verbose</ span > < span class ="p "> )</ span >
577
+ < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> residual_interval</ span > < span class ="o "> =</ span > < span class ="n "> residual_interval</ span >
578
+
579
+ < span class ="k "> def</ span > < span class ="fm "> __call__</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> ,</ span > < span class ="n "> algo</ span > < span class ="p "> :</ span > < span class ="n "> Algorithm</ span > < span class ="p "> )</ span > < span class ="o "> -></ span > < span class ="kc "> None</ span > < span class ="p "> :</ span >
580
+ < span class ="k "> if</ span > < span class ="n "> algo</ span > < span class ="o "> .</ span > < span class ="n "> iteration</ span > < span class ="o "> %</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> residual_interval</ span > < span class ="o "> ==</ span > < span class ="mi "> 0</ span > < span class ="p "> :</ span >
581
+ < span class ="k "> if</ span > < span class ="nb "> isinstance</ span > < span class ="p "> (</ span > < span class ="n "> algo</ span > < span class ="p "> ,</ span > < span class ="n "> PDHG</ span > < span class ="p "> ):</ span >
582
+ < span class ="n "> forward_projection</ span > < span class ="o "> =</ span > < span class ="n "> algo</ span > < span class ="o "> .</ span > < span class ="n "> operator</ span > < span class ="o "> .</ span > < span class ="n "> direct</ span > < span class ="p "> (</ span > < span class ="n "> algo</ span > < span class ="o "> .</ span > < span class ="n "> solution</ span > < span class ="p "> )[</ span > < span class ="mi "> 1</ span > < span class ="p "> ]</ span > < span class ="o "> .</ span > < span class ="n "> as_array</ span > < span class ="p "> ()</ span >
583
+ < span class ="n "> data</ span > < span class ="o "> =</ span > < span class ="n "> algo</ span > < span class ="o "> .</ span > < span class ="n "> f</ span > < span class ="p "> [</ span > < span class ="mi "> 1</ span > < span class ="p "> ]</ span > < span class ="o "> .</ span > < span class ="n "> b</ span > < span class ="o "> .</ span > < span class ="n "> as_array</ span > < span class ="p "> ()</ span >
584
+ < span class ="k "> if</ span > < span class ="n "> forward_projection</ span > < span class ="o "> .</ span > < span class ="n "> ndim</ span > < span class ="o "> ==</ span > < span class ="mi "> 3</ span > < span class ="p "> :</ span >
585
+ < span class ="c1 "> # For a full 3D recon, just select the middle slice</ span >
586
+ < span class ="nb "> slice</ span > < span class ="o "> =</ span > < span class ="n "> forward_projection</ span > < span class ="o "> .</ span > < span class ="n "> shape</ span > < span class ="p "> [</ span > < span class ="mi "> 0</ span > < span class ="p "> ]</ span > < span class ="o "> //</ span > < span class ="mi "> 2</ span >
587
+ < span class ="n "> forward_projection</ span > < span class ="o "> =</ span > < span class ="n "> forward_projection</ span > < span class ="p "> [</ span > < span class ="nb "> slice</ span > < span class ="p "> ]</ span >
588
+ < span class ="n "> data</ span > < span class ="o "> =</ span > < span class ="n "> data</ span > < span class ="p "> [</ span > < span class ="nb "> slice</ span > < span class ="p "> ]</ span >
589
+ < span class ="n "> residual</ span > < span class ="p "> :</ span > < span class ="n "> np</ span > < span class ="o "> .</ span > < span class ="n "> ndarray</ span > < span class ="o "> =</ span > < span class ="p "> (</ span > < span class ="n "> data</ span > < span class ="o "> -</ span > < span class ="n "> forward_projection</ span > < span class ="p "> )</ span > < span class ="o "> **</ span > < span class ="mi "> 2</ span >
590
+ < span class ="n "> algo</ span > < span class ="o "> .</ span > < span class ="n "> last_residual</ span > < span class ="o "> =</ span > < span class ="p "> (</ span > < span class ="n "> algo</ span > < span class ="o "> .</ span > < span class ="n "> iteration</ span > < span class ="p "> ,</ span > < span class ="n "> residual</ span > < span class ="o "> **</ span > < span class ="mi "> 2</ span > < span class ="p "> )</ span > </ div >
568
591
569
592
570
593
@@ -814,7 +837,11 @@ <h1>Source code for mantidimaging.core.reconstruct.cil_recon</h1><div class="hig
814
837
< span class ="c1 "> # this may be confusing for the user in case of SPDHG, because they will</ span >
815
838
< span class ="c1 "> # input num_iter and they will run num_iter * num_subsets</ span >
816
839
< span class ="n "> algo</ span > < span class ="o "> .</ span > < span class ="n "> max_iteration</ span > < span class ="o "> =</ span > < span class ="n "> num_iter</ span >
817
- < span class ="n "> algo</ span > < span class ="o "> .</ span > < span class ="n "> run</ span > < span class ="p "> (</ span > < span class ="n "> num_iter</ span > < span class ="p "> ,</ span > < span class ="n "> callbacks</ span > < span class ="o "> =</ span > < span class ="p "> [</ span > < span class ="n "> MIProgressCallback</ span > < span class ="p "> (</ span > < span class ="n "> progress</ span > < span class ="o "> =</ span > < span class ="n "> progress</ span > < span class ="p "> )])</ span >
840
+ < span class ="n "> algo</ span > < span class ="o "> .</ span > < span class ="n "> run</ span > < span class ="p "> (</ span > < span class ="n "> num_iter</ span > < span class ="p "> ,</ span >
841
+ < span class ="n "> callbacks</ span > < span class ="o "> =</ span > < span class ="p "> [</ span >
842
+ < span class ="n "> RecordResidualsCallback</ span > < span class ="p "> (</ span > < span class ="n "> residual_interval</ span > < span class ="o "> =</ span > < span class ="n "> update_objective_interval</ span > < span class ="p "> ),</ span >
843
+ < span class ="n "> MIProgressCallback</ span > < span class ="p "> (</ span > < span class ="n "> progress</ span > < span class ="o "> =</ span > < span class ="n "> progress</ span > < span class ="p "> )</ span >
844
+ < span class ="p "> ])</ span >
818
845
819
846
< span class ="k "> finally</ span > < span class ="p "> :</ span >
820
847
< span class ="k "> if</ span > < span class ="n "> progress</ span > < span class ="p "> :</ span >
@@ -936,7 +963,11 @@ <h1>Source code for mantidimaging.core.reconstruct.cil_recon</h1><div class="hig
936
963
< span class ="c1 "> # this may be confusing for the user in case of SPDHG, because they will</ span >
937
964
< span class ="c1 "> # input num_iter and they will run num_iter * num_subsets</ span >
938
965
< span class ="n "> algo</ span > < span class ="o "> .</ span > < span class ="n "> max_iteration</ span > < span class ="o "> =</ span > < span class ="n "> num_iter</ span >
939
- < span class ="n "> algo</ span > < span class ="o "> .</ span > < span class ="n "> run</ span > < span class ="p "> (</ span > < span class ="n "> num_iter</ span > < span class ="p "> ,</ span > < span class ="n "> callbacks</ span > < span class ="o "> =</ span > < span class ="p "> [</ span > < span class ="n "> MIProgressCallback</ span > < span class ="p "> (</ span > < span class ="n "> progress</ span > < span class ="o "> =</ span > < span class ="n "> progress</ span > < span class ="p "> )])</ span >
966
+ < span class ="n "> algo</ span > < span class ="o "> .</ span > < span class ="n "> run</ span > < span class ="p "> (</ span > < span class ="n "> num_iter</ span > < span class ="p "> ,</ span >
967
+ < span class ="n "> callbacks</ span > < span class ="o "> =</ span > < span class ="p "> [</ span >
968
+ < span class ="n "> RecordResidualsCallback</ span > < span class ="p "> (</ span > < span class ="n "> residual_interval</ span > < span class ="o "> =</ span > < span class ="n "> update_objective_interval</ span > < span class ="p "> ),</ span >
969
+ < span class ="n "> MIProgressCallback</ span > < span class ="p "> (</ span > < span class ="n "> progress</ span > < span class ="o "> =</ span > < span class ="n "> progress</ span > < span class ="p "> )</ span >
970
+ < span class ="p "> ])</ span >
940
971
941
972
< span class ="k "> if</ span > < span class ="nb "> isinstance</ span > < span class ="p "> (</ span > < span class ="n "> algo</ span > < span class ="o "> .</ span > < span class ="n "> solution</ span > < span class ="p "> ,</ span > < span class ="n "> BlockDataContainer</ span > < span class ="p "> ):</ span >
942
973
< span class ="c1 "> # TGV case</ span >
0 commit comments