in a tree-graph: leaf nodes have degree=1, branching nodes have degree >= 3, and continuous nodes have degree=2. So, we can tabulate the leaf nodes, branching nodes, their time-intervals to estimate RLS, --Hong
This site is to serve as my note-book and to effectively communicate with my students and collaborators. Every now and then, a blog may be of interest to other researchers or teachers. Views in this blog are my own. All rights of research results and findings on this blog are reserved. See also http://youtube.com/c/hongqin @hongqin
in a tree-graph: leaf nodes have degree=1, branching nodes have degree >= 3, and continuous nodes have degree=2. So, we can tabulate the leaf nodes, branching nodes, their time-intervals to estimate RLS, --Hong
rm(list=ls())
debug = 1;
moving_buffer = read.csv("data/moving_buffer.csv")
p_dist = function(x, input_buffer) {
input_buffer = input_buffer[ !is.na(input_buffer)];
lower = input_buffer[ input_buffer < x]; lower = lower[!is.na(lower)];
upper = input_buffer[input_buffer > x]; upper = upper[!is.na(upper)];
LowerP = (length(lower) / length(input_buffer))
UpperP = (length(upper) / length(input_buffer))
return(list(LowerP,UpperP, mean(input_buffer, na.rm=T), sd(input_buffer, na.rm=T)))
}
my_dist = function(x1, y1, x2, y2) {sqrt( (x1 - x2)^2 + (y1-y2)^2 ) };
DataTrap <- read.csv("data/DataSet_v6.csv",header=TRUE,stringsAsFactors = FALSE)
tb.alltraps = DataTrap;
tb.alltraps$predecessorID = NA;
tb.alltraps$successorID = NA;
traps = sort(unique(tb.alltraps$trap_num));
for( cur_trap in 1:length(traps)){
# cur_trap = 10;
#for( cur_trap in c(20,30,50)){
tb = tb.alltraps[tb.alltraps$trap_num==traps[cur_trap], ];
timpoints = sort(unique(tb$Image_num))
#plot( timpoints, 1:length(timpoints), type='l') #visual check timepoints.
for (i in length(timpoints):2){
if(debug > 1) { print(paste("i=",i)); }
current_frame = tb[ tb$Image_num == timpoints[i], ];
previous_frame = tb[ tb$Image_num == timpoints[i-1], ];
d.tb = p.d.tb = data.frame(matrix(nrow=length(current_frame[,1]), ncol=length(previous_frame[,1]) ));
for ( i.cur in 1:length(current_frame[,1]) ) {
for ( j.pre in 1:length(previous_frame[,1]) ) {
d.tb[i.cur, j.pre] = my_dist(current_frame$cell_X[i.cur], current_frame$cell_Y[i.cur],
previous_frame$cell_X[j.pre], previous_frame$cell_Y[j.pre]);
#my_dist = function(x1, y1, x2, y2) {sqrt( (x1 - x2)^2 + (y1-y2)^2 ) };
p.d.tb[i.cur, j.pre] = p_dist(d.tb[i.cur, j.pre], moving_buffer$d )[[2]];
}
current_frame$predecessorID[i.cur] = which.max( p.d.tb[i.cur, ]); #pick max, greedy algorithm.
}
tb$predecessorID[tb$Image_num == timpoints[i]] = current_frame$predecessorID; #assume order unchanged.
}
tb.alltraps$predecessorID[tb.alltraps$trap_num==traps[cur_trap]] = tb$predecessorID;
}
tb.alltraps$predecessorID[tb.alltraps$trap_num==traps[30]];
## [1] NA 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 1 1
## [24] 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2
## [47] 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1
## [70] 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 1 1 1 2 1 2 1 2
## [93] 1 2 1 2 2 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 1 1 1
## [116] 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 1 1
## [139] 2 2 1 1 1 2 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 1
## [162] 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 1 2 1
## [185] 1 1 2 1 2 1 2 2 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1
## [208] 1 1 1 1 2 1 2 1 2 2 1 2 1 1 1 2 1 2 1 2 1 2 1
## [231] 2 1 2 1 1 1 1 2 1 2 1 2 1 2 1 1 1 1 1 2 1 2 1
## [254] 2 1 2 1 2 1 1 1 1 2 1 2 1 2 1 2 1 1 1 1 1 2 1
## [277] 2 1 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 1 1 1 1 2 1
## [300] 2 1 2 1 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1
## [323] 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 1 1 1 2 1
## [346] 2 1 2 1 2 1 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 1
## [369] 2 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 1
## [392] 2 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 1
## [415] 2 1 2 1 2 1 1 1 1 1 1 2 1 2 3 1 2 3 1 2 3 1 2
## [438] 3 1 2 3 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [461] 1 1 1 1 1 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
## [484] 1 2 3 1 2 1 2 1 1 2 1 2 1 1 2 3 1 2 1 2 1 2 1
## [507] 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 1 1 2 2 1
## [530] 1 1 2 1 3 4 1 2 3 4 2 1 3 4 2 1 3 4 1 2 3 4 1
## [553] 3 2 4 1 3 2 2 1 3 1 2 3 2 1 3 1 2 3 1 2 3 1 2
## [576] 3 1 1 2 3 4 2 1 3 4 2 1 3 4 1 2 3 4 1 2 3 4 1
## [599] 2 3 1 4 2 1 3 4 2 1 3 4 1 2 3 4 1 2 3 1 2 3 1
## [622] 1 2 3 1 2 3 1 2 3 1 1 2 3 4 1 2 3 4 2 1 3 4 2
## [645] 1 3 2 1 3 2 1 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
## [668] 1 2 3 1 2 3 1 2 3 1 1 2 3 4 1 2 3 4 1 2 3 4 1
## [691] 2 3 3 4 1 2 1 3 4 6 5 2 1 4 6 1 2 3 3 4 1 2 4
## [714] 5 1 2 3 3 4 1 2 4 5 1 2 1 3 4 1 2 3 4 5 1 2 3
## [737] 4 5 1 2 4 5 1 2 3 4 1 2 3 4 1 2 3 3 4 1 2 4 5
## [760] 1 2 3 4 1 2 3 1 4 1 2 3 5 1 2 3 3 4 1 2 4 5 1
## [783] 2 1 3 4 1 2 3 4 5 1 2 3 4 5 1 2 4 5 1 2 3 4 1
## [806] 2 3 4 1 2 3 3 4 1 2 4 5 1 2 3 4 1 2 3 1 4 1 2
## [829] 3 5 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
## [852] 1 2 3 1 1 1 1 1 2 3 4 5 6 7 1 2 3 4 4 3 5 7 1
## [875] 1 2 3 4 5 6 8 9 7 1 2 3 4 6 7 9 8 1 2 3 4 4 7
## [898] 6 1 2 3 5 6 7 1 2 3 4 4 5 6 1 2 3 5 4 6 7 1 2
## [921] 4 3 5 7 6 1 2 3 4 5 7 6 1 2 5 4 4 3 6 1 7 1 2
## [944] 3 4 6 7 9 1 2 3 4 4 1 6 7 1 2 3 4 3 7 8 1 2 3
## [967] 4 5 6 7 1 2 5 4 3 6 7 1 2 5 4 3 6 7 1 2 3 4 5
## [990] 6 7 1 2 4 3 5 4 7 1 6 1 2 3 4 5 6 7 9 8
write.csv(tb.alltraps, "data/alltraps_withtree.csv", quote=F)
rm(list=ls())
debug = 0;
moving_buffer = read.csv("data/moving_buffer.csv")
p_dist = function(x, input_buffer) {
input_buffer = input_buffer[ !is.na(input_buffer)];
lower = input_buffer[ input_buffer < x]; lower = lower[!is.na(lower)];
upper = input_buffer[input_buffer > x]; upper = upper[!is.na(upper)];
LowerP = (length(lower) / length(input_buffer))
UpperP = (length(upper) / length(input_buffer))
return(list(LowerP,UpperP, mean(input_buffer, na.rm=T), sd(input_buffer, na.rm=T)))
}
my_dist = function(x1, y1, x2, y2) {sqrt( (x1 - x2)^2 + (y1-y2)^2 ) };
DataTrap <- read.csv("data/DataSet_v6.csv",header=TRUE,stringsAsFactors = FALSE)
tb = DataTrap[DataTrap$trap_num==17, ]
tb$predecessorID = NA;
tb$successorID = NA;
timpoints = sort(unique(tb$Image_num))
plot( timpoints, 1:length(timpoints), type='l') #visual check timepoints.
# i= 200;
for (i in length(timpoints):2){
print(paste("i=",i));
current_frame = tb[ tb$Image_num == timpoints[i], ];
previous_frame = tb[ tb$Image_num == timpoints[i-1], ];
d.tb = p.d.tb = data.frame(matrix(nrow=length(current_frame[,1]), ncol=length(previous_frame[,1]) ));
for ( i.cur in 1:length(current_frame[,1]) ) {
for ( j.pre in 1:length(previous_frame[,1]) ) {
d.tb[i.cur, j.pre] = my_dist(current_frame$cell_X[i.cur], current_frame$cell_Y[i.cur],
previous_frame$cell_X[j.pre], previous_frame$cell_Y[j.pre]);
#my_dist = function(x1, y1, x2, y2) {sqrt( (x1 - x2)^2 + (y1-y2)^2 ) };
p.d.tb[i.cur, j.pre] = p_dist(d.tb[i.cur, j.pre], moving_buffer$d )[[2]];
}
current_frame$predecessorID[i.cur] = which.max( p.d.tb[i.cur, ]); #pick max, greedy algorithm.
}
tb$predecessorID[tb$Image_num == timpoints[i]] = current_frame$predecessorID; #assume order unchanged.
}
## [1] "i= 390"
## [1] "i= 389"
## [1] "i= 388"
## [1] "i= 387"
## [1] "i= 386"
## [1] "i= 385"
## [1] "i= 384"
## [1] "i= 383"
## [1] "i= 382"
## [1] "i= 381"
## [1] "i= 380"
## [1] "i= 379"
## [1] "i= 378"
## [1] "i= 377"
## [1] "i= 376"
## [1] "i= 375"
## [1] "i= 374"
## [1] "i= 373"
## [1] "i= 372"
## [1] "i= 371"
## [1] "i= 370"
## [1] "i= 369"
## [1] "i= 368"
## [1] "i= 367"
## [1] "i= 366"
## [1] "i= 365"
## [1] "i= 364"
## [1] "i= 363"
## [1] "i= 362"
## [1] "i= 361"
## [1] "i= 360"
## [1] "i= 359"
## [1] "i= 358"
## [1] "i= 357"
## [1] "i= 356"
## [1] "i= 355"
## [1] "i= 354"
## [1] "i= 353"
## [1] "i= 352"
## [1] "i= 351"
## [1] "i= 350"
## [1] "i= 349"
## [1] "i= 348"
## [1] "i= 347"
## [1] "i= 346"
## [1] "i= 345"
## [1] "i= 344"
## [1] "i= 343"
## [1] "i= 342"
## [1] "i= 341"
## [1] "i= 340"
## [1] "i= 339"
## [1] "i= 338"
## [1] "i= 337"
## [1] "i= 336"
## [1] "i= 335"
## [1] "i= 334"
## [1] "i= 333"
## [1] "i= 332"
## [1] "i= 331"
## [1] "i= 330"
## [1] "i= 329"
## [1] "i= 328"
## [1] "i= 327"
## [1] "i= 326"
## [1] "i= 325"
## [1] "i= 324"
## [1] "i= 323"
## [1] "i= 322"
## [1] "i= 321"
## [1] "i= 320"
## [1] "i= 319"
## [1] "i= 318"
## [1] "i= 317"
## [1] "i= 316"
## [1] "i= 315"
## [1] "i= 314"
## [1] "i= 313"
## [1] "i= 312"
## [1] "i= 311"
## [1] "i= 310"
## [1] "i= 309"
## [1] "i= 308"
## [1] "i= 307"
## [1] "i= 306"
## [1] "i= 305"
## [1] "i= 304"
## [1] "i= 303"
## [1] "i= 302"
## [1] "i= 301"
## [1] "i= 300"
## [1] "i= 299"
## [1] "i= 298"
## [1] "i= 297"
## [1] "i= 296"
## [1] "i= 295"
## [1] "i= 294"
## [1] "i= 293"
## [1] "i= 292"
## [1] "i= 291"
## [1] "i= 290"
## [1] "i= 289"
## [1] "i= 288"
## [1] "i= 287"
## [1] "i= 286"
## [1] "i= 285"
## [1] "i= 284"
## [1] "i= 283"
## [1] "i= 282"
## [1] "i= 281"
## [1] "i= 280"
## [1] "i= 279"
## [1] "i= 278"
## [1] "i= 277"
## [1] "i= 276"
## [1] "i= 275"
## [1] "i= 274"
## [1] "i= 273"
## [1] "i= 272"
## [1] "i= 271"
## [1] "i= 270"
## [1] "i= 269"
## [1] "i= 268"
## [1] "i= 267"
## [1] "i= 266"
## [1] "i= 265"
## [1] "i= 264"
## [1] "i= 263"
## [1] "i= 262"
## [1] "i= 261"
## [1] "i= 260"
## [1] "i= 259"
## [1] "i= 258"
## [1] "i= 257"
## [1] "i= 256"
## [1] "i= 255"
## [1] "i= 254"
## [1] "i= 253"
## [1] "i= 252"
## [1] "i= 251"
## [1] "i= 250"
## [1] "i= 249"
## [1] "i= 248"
## [1] "i= 247"
## [1] "i= 246"
## [1] "i= 245"
## [1] "i= 244"
## [1] "i= 243"
## [1] "i= 242"
## [1] "i= 241"
## [1] "i= 240"
## [1] "i= 239"
## [1] "i= 238"
## [1] "i= 237"
## [1] "i= 236"
## [1] "i= 235"
## [1] "i= 234"
## [1] "i= 233"
## [1] "i= 232"
## [1] "i= 231"
## [1] "i= 230"
## [1] "i= 229"
## [1] "i= 228"
## [1] "i= 227"
## [1] "i= 226"
## [1] "i= 225"
## [1] "i= 224"
## [1] "i= 223"
## [1] "i= 222"
## [1] "i= 221"
## [1] "i= 220"
## [1] "i= 219"
## [1] "i= 218"
## [1] "i= 217"
## [1] "i= 216"
## [1] "i= 215"
## [1] "i= 214"
## [1] "i= 213"
## [1] "i= 212"
## [1] "i= 211"
## [1] "i= 210"
## [1] "i= 209"
## [1] "i= 208"
## [1] "i= 207"
## [1] "i= 206"
## [1] "i= 205"
## [1] "i= 204"
## [1] "i= 203"
## [1] "i= 202"
## [1] "i= 201"
## [1] "i= 200"
## [1] "i= 199"
## [1] "i= 198"
## [1] "i= 197"
## [1] "i= 196"
## [1] "i= 195"
## [1] "i= 194"
## [1] "i= 193"
## [1] "i= 192"
## [1] "i= 191"
## [1] "i= 190"
## [1] "i= 189"
## [1] "i= 188"
## [1] "i= 187"
## [1] "i= 186"
## [1] "i= 185"
## [1] "i= 184"
## [1] "i= 183"
## [1] "i= 182"
## [1] "i= 181"
## [1] "i= 180"
## [1] "i= 179"
## [1] "i= 178"
## [1] "i= 177"
## [1] "i= 176"
## [1] "i= 175"
## [1] "i= 174"
## [1] "i= 173"
## [1] "i= 172"
## [1] "i= 171"
## [1] "i= 170"
## [1] "i= 169"
## [1] "i= 168"
## [1] "i= 167"
## [1] "i= 166"
## [1] "i= 165"
## [1] "i= 164"
## [1] "i= 163"
## [1] "i= 162"
## [1] "i= 161"
## [1] "i= 160"
## [1] "i= 159"
## [1] "i= 158"
## [1] "i= 157"
## [1] "i= 156"
## [1] "i= 155"
## [1] "i= 154"
## [1] "i= 153"
## [1] "i= 152"
## [1] "i= 151"
## [1] "i= 150"
## [1] "i= 149"
## [1] "i= 148"
## [1] "i= 147"
## [1] "i= 146"
## [1] "i= 145"
## [1] "i= 144"
## [1] "i= 143"
## [1] "i= 142"
## [1] "i= 141"
## [1] "i= 140"
## [1] "i= 139"
## [1] "i= 138"
## [1] "i= 137"
## [1] "i= 136"
## [1] "i= 135"
## [1] "i= 134"
## [1] "i= 133"
## [1] "i= 132"
## [1] "i= 131"
## [1] "i= 130"
## [1] "i= 129"
## [1] "i= 128"
## [1] "i= 127"
## [1] "i= 126"
## [1] "i= 125"
## [1] "i= 124"
## [1] "i= 123"
## [1] "i= 122"
## [1] "i= 121"
## [1] "i= 120"
## [1] "i= 119"
## [1] "i= 118"
## [1] "i= 117"
## [1] "i= 116"
## [1] "i= 115"
## [1] "i= 114"
## [1] "i= 113"
## [1] "i= 112"
## [1] "i= 111"
## [1] "i= 110"
## [1] "i= 109"
## [1] "i= 108"
## [1] "i= 107"
## [1] "i= 106"
## [1] "i= 105"
## [1] "i= 104"
## [1] "i= 103"
## [1] "i= 102"
## [1] "i= 101"
## [1] "i= 100"
## [1] "i= 99"
## [1] "i= 98"
## [1] "i= 97"
## [1] "i= 96"
## [1] "i= 95"
## [1] "i= 94"
## [1] "i= 93"
## [1] "i= 92"
## [1] "i= 91"
## [1] "i= 90"
## [1] "i= 89"
## [1] "i= 88"
## [1] "i= 87"
## [1] "i= 86"
## [1] "i= 85"
## [1] "i= 84"
## [1] "i= 83"
## [1] "i= 82"
## [1] "i= 81"
## [1] "i= 80"
## [1] "i= 79"
## [1] "i= 78"
## [1] "i= 77"
## [1] "i= 76"
## [1] "i= 75"
## [1] "i= 74"
## [1] "i= 73"
## [1] "i= 72"
## [1] "i= 71"
## [1] "i= 70"
## [1] "i= 69"
## [1] "i= 68"
## [1] "i= 67"
## [1] "i= 66"
## [1] "i= 65"
## [1] "i= 64"
## [1] "i= 63"
## [1] "i= 62"
## [1] "i= 61"
## [1] "i= 60"
## [1] "i= 59"
## [1] "i= 58"
## [1] "i= 57"
## [1] "i= 56"
## [1] "i= 55"
## [1] "i= 54"
## [1] "i= 53"
## [1] "i= 52"
## [1] "i= 51"
## [1] "i= 50"
## [1] "i= 49"
## [1] "i= 48"
## [1] "i= 47"
## [1] "i= 46"
## [1] "i= 45"
## [1] "i= 44"
## [1] "i= 43"
## [1] "i= 42"
## [1] "i= 41"
## [1] "i= 40"
## [1] "i= 39"
## [1] "i= 38"
## [1] "i= 37"
## [1] "i= 36"
## [1] "i= 35"
## [1] "i= 34"
## [1] "i= 33"
## [1] "i= 32"
## [1] "i= 31"
## [1] "i= 30"
## [1] "i= 29"
## [1] "i= 28"
## [1] "i= 27"
## [1] "i= 26"
## [1] "i= 25"
## [1] "i= 24"
## [1] "i= 23"
## [1] "i= 22"
## [1] "i= 21"
## [1] "i= 20"
## [1] "i= 19"
## [1] "i= 18"
## [1] "i= 17"
## [1] "i= 16"
## [1] "i= 15"
## [1] "i= 14"
## [1] "i= 13"
## [1] "i= 12"
## [1] "i= 11"
## [1] "i= 10"
## [1] "i= 9"
## [1] "i= 8"
## [1] "i= 7"
## [1] "i= 6"
## [1] "i= 5"
## [1] "i= 4"
## [1] "i= 3"
## [1] "i= 2"