1
1
from ..snippets import check_folder
2
2
3
3
4
- def frame_selector (frames_boolean , bins = 10 , frames_per_bin = 1 , bin_type = 'total_length' , verbose = False , loop_tolerance = 0.1 ):
4
+ def frame_selector (
5
+ frames_boolean ,
6
+ bins = 10 ,
7
+ frames_per_bin = 1 ,
8
+ bin_type = "total_length" ,
9
+ verbose = False ,
10
+ loop_tolerance = 0.1 ,
11
+ ):
5
12
"""
6
13
DESCRIPTION:
7
14
Function for randomly select frames from a boolean list (being the index the number of the frame).
@@ -10,7 +17,7 @@ def frame_selector(frames_boolean, bins=10, frames_per_bin=1, bin_type='total_le
10
17
- frames_boolean: list of boolean variables that indicate if the criteria is satisfied or not. The index of the list is the number of the frame.
11
18
- bins: number of partitions of the trajectory to properly distibute the selection
12
19
- frames_per_bin: number of frames to select per bin
13
- - bin_type: total_length | true_lenght --> total_length takes the whole set of frames to calculate the bins,
20
+ - bin_type: total_length | true_lenght --> total_length takes the whole set of frames to calculate the bins,
14
21
while true_length takes only the frames with True statements for calculating the bins
15
22
- verbose: True prints the frame number every time it is selected
16
23
@@ -25,47 +32,49 @@ def frame_selector(frames_boolean, bins=10, frames_per_bin=1, bin_type='total_le
25
32
frames = []
26
33
for f in range (len (frames_boolean )):
27
34
if frames_boolean [f ] == True :
28
- frames .append (f + 1 )
35
+ frames .append (f + 1 )
29
36
elif frames_boolean [f ] == False :
30
37
pass
31
38
32
-
33
- if bin_type .lower () == 'total_length' :
34
- print ('total_length' )
39
+ if bin_type .lower () == "total_length" :
40
+ print ("total_length" )
35
41
splits = int (round (len (frames_boolean ) / bins , 0 ))
36
42
37
- elif bin_type .lower () == ' true_length' :
38
- print (' true_length' )
43
+ elif bin_type .lower () == " true_length" :
44
+ print (" true_length" )
39
45
splits = int (round (len (frames ) / bins , 0 ))
40
46
41
- else :
47
+ else :
42
48
print (bin_type )
43
49
44
50
for f in range (frames_per_bin ):
45
51
for b in range (bins ):
46
52
loopout = 0
47
53
while True :
48
- if loopout + 1 == int (loop_tolerance * splits ):
49
- print ('A frame between %s and %s has not been found. No frame will be saved for this bin.' % (splits * b , splits * (b + 1 )))
54
+ if loopout + 1 == int (loop_tolerance * splits ):
55
+ print (
56
+ "A frame between %s and %s has not been found. No frame will be saved for this bin."
57
+ % (splits * b , splits * (b + 1 ))
58
+ )
50
59
break
51
60
52
- else :
53
- try :
54
- frame = choice (range (splits * b , splits * ( b + 1 )))
55
- if bin_type == ' total_length' :
61
+ else :
62
+ try :
63
+ frame = choice (range (splits * b , splits * ( b + 1 )))
64
+ if bin_type . lower () == " total_length" :
56
65
if frame in frames :
57
66
selected .append (frame )
58
67
if verbose == True :
59
- print (' The selected frame is:' , frame )
68
+ print (" The selected frame is:" , frame )
60
69
break
61
- else :
70
+ else :
62
71
loopout += 1
63
72
continue
64
73
65
- elif bin_type == ' true_length' :
74
+ elif bin_type . lower () == " true_length" :
66
75
selected .append (frames [frame ])
67
76
break
68
-
77
+
69
78
except IndexError :
70
79
continue
71
80
0 commit comments