@@ -650,3 +650,74 @@ def test_time_cell_min(
650
650
np .sum (all_feats_tracked_drop_no_cells ["orig_cell_num" ] == i )
651
651
== expected_val
652
652
)
653
+
654
+
655
+ def test_trackpy_predict_PBC ():
656
+ """Test if predictive tracking with PBCs works correctly"""
657
+
658
+ test_features = pd .DataFrame (
659
+ {
660
+ "feature" : [1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ],
661
+ "hdim_1" : [85 , 15 , 95 , 5 , 5 , 95 , 15 , 85 ],
662
+ "hdim_2" : [50 , 45 , 50 , 45 , 50 , 45 , 50 , 45 ],
663
+ "frame" : [0 , 0 , 1 , 1 , 2 , 2 , 3 , 3 ],
664
+ "time" : [
665
+ datetime .datetime (2000 , 1 , 1 ),
666
+ datetime .datetime (2000 , 1 , 1 ),
667
+ datetime .datetime (2000 , 1 , 1 , 0 , 5 ),
668
+ datetime .datetime (2000 , 1 , 1 , 0 , 5 ),
669
+ datetime .datetime (2000 , 1 , 1 , 0 , 10 ),
670
+ datetime .datetime (2000 , 1 , 1 , 0 , 10 ),
671
+ datetime .datetime (2000 , 1 , 1 , 0 , 15 ),
672
+ datetime .datetime (2000 , 1 , 1 , 0 , 15 ),
673
+ ],
674
+ }
675
+ )
676
+
677
+ output_random_no_pbc = tobac .linking_trackpy (
678
+ test_features , None , 1 , 1 , d_max = 10 , method_linking = "random"
679
+ )
680
+
681
+ # Assert cell does not cross border
682
+ assert output_random_no_pbc ["cell" ].tolist () == [1 , 2 , 1 , 2 , 2 , 1 , 2 , 1 ]
683
+
684
+ output_random_pbc = tobac .linking_trackpy (
685
+ test_features ,
686
+ None ,
687
+ 1 ,
688
+ 1 ,
689
+ d_max = 10 ,
690
+ method_linking = "random" ,
691
+ PBC_flag = "hdim_1" ,
692
+ min_h1 = 0 ,
693
+ max_h1 = 100 ,
694
+ min_h2 = 0 ,
695
+ max_h2 = 100 ,
696
+ )
697
+
698
+ # Assert cell does not cross border even with PBC because of random tracking
699
+ assert output_random_pbc ["cell" ].tolist () == [1 , 2 , 1 , 2 , 2 , 1 , 2 , 1 ]
700
+
701
+ output_predict_no_pbc = tobac .linking_trackpy (
702
+ test_features , None , 1 , 1 , d_max = 10 , method_linking = "predict"
703
+ )
704
+
705
+ # Assert that without PBCs predictive tracking creates 4 cells because the d_max criteria is too small
706
+ assert output_predict_no_pbc ["cell" ].tolist () == [1 , 2 , 1 , 2 , 3 , 4 , 3 , 4 ]
707
+
708
+ output_predict_pbc = tobac .linking_trackpy (
709
+ test_features ,
710
+ None ,
711
+ 1 ,
712
+ 1 ,
713
+ d_max = 10 ,
714
+ method_linking = "predict" ,
715
+ PBC_flag = "hdim_1" ,
716
+ min_h1 = 0 ,
717
+ max_h1 = 100 ,
718
+ min_h2 = 0 ,
719
+ max_h2 = 100 ,
720
+ )
721
+
722
+ # Assert with PBCs and prdictive tracking the cells should cross the border
723
+ assert output_predict_pbc ["cell" ].tolist () == [1 , 2 , 1 , 2 , 1 , 2 , 1 , 2 ]
0 commit comments