├── .gitignore ├── CMakeLists.txt ├── Dockerfile ├── LICENSE ├── README.md ├── data ├── ADL-Rundle-6 │ └── det.txt ├── ADL-Rundle-8 │ └── det.txt ├── ETH-Bahnhof │ └── det.txt ├── ETH-Pedcross2 │ └── det.txt ├── ETH-Sunnyday │ └── det.txt ├── KITTI-13 │ └── det.txt ├── KITTI-17 │ └── det.txt ├── PETS09-S2L1 │ └── det.txt ├── TUD-Campus │ └── det.txt ├── TUD-Stadtmitte │ └── det.txt └── Venice-2 │ └── det.txt ├── docker_run.sh ├── docs ├── 1.png └── 2.png ├── include ├── kalman_filter.h ├── matrix.cpp ├── matrix.h ├── munkres.h ├── track.h ├── tracker.h └── utils.h └── src ├── kalman_filter.cpp ├── main.cpp ├── munkres.cpp ├── track.cpp └── tracker.cpp /.gitignore: -------------------------------------------------------------------------------- 1 | bin/ 2 | build/ 3 | .idea/ 4 | cmake-*/ 5 | mot_benchmark/ 6 | output/ 7 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.5.1) 2 | project(sort-cpp) 3 | 4 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall") 5 | set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) 6 | 7 | # Try to find OpenCV 8 | find_package(OpenCV REQUIRED) 9 | if (OpenCV_FOUND) 10 | # If the package has been found, several variables will 11 | # be set, you can find the full list with descriptions 12 | # in the OpenCVConfig.cmake file. 13 | # Print some message showing some of them 14 | message(STATUS "OpenCV library status:") 15 | message(STATUS " version: ${OpenCV_VERSION}") 16 | message(STATUS " include path: ${OpenCV_INCLUDE_DIRS}") 17 | else () 18 | message(FATAL_ERROR "Could not locate OpenCV") 19 | endif() 20 | 21 | # Try to find Boost 22 | find_package(Boost COMPONENTS program_options filesystem REQUIRED) 23 | if(Boost_FOUND) 24 | include_directories(${Boost_INCLUDE_DIRS}) 25 | else () 26 | message(FATAL_ERROR "Could not locate Boost") 27 | endif() 28 | 29 | include_directories(${PROJECT_SOURCE_DIR}/include) 30 | 31 | file(GLOB SOURCE_FILES src/*.cpp) 32 | 33 | add_executable(${CMAKE_PROJECT_NAME} ${SOURCE_FILES}) 34 | 35 | target_link_libraries ( 36 | ${CMAKE_PROJECT_NAME} 37 | ${OpenCV_LIBS} 38 | ${Boost_LIBRARIES} 39 | ) 40 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM valian/docker-python-opencv-ffmpeg:py3 2 | 3 | MAINTAINER Yasen Hu(yasenhu789@gmail.com) 4 | 5 | RUN apt-get update -y && \ 6 | apt-get install -y \ 7 | libvtk-java \ 8 | python-vtk \ 9 | tcl-vtk \ 10 | libvtk5-dev \ 11 | libvtk5-qt4-dev \ 12 | libusb-1.0-0-dev \ 13 | libeigen3-dev \ 14 | libboost-all-dev 15 | 16 | RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 17 | 18 | #Add new sudo user 19 | ARG USERNAME=yasen 20 | ARG UID=1000 21 | ARG GID=1000 22 | 23 | RUN useradd -m $USERNAME 24 | RUN usermod -aG sudo $USERNAME 25 | RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers 26 | # Replace 1000 with your user/group id 27 | RUN usermod --uid $UID $USERNAME && groupmod --gid $GID $USERNAME 28 | 29 | # Change user 30 | USER $USERNAME 31 | WORKDIR /home/$USERNAME 32 | 33 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Introduction 2 | C++ implementation of SORT: Simple, online, and real-time tracking of multiple objects in a video sequence. 3 | 4 | Kuhn-Munkres (Hungarian) Algorithm in C++ is forked from: 5 | https://github.com/saebyn/munkres-cpp 6 | 7 | ## Dependencies 8 | - Ubuntu 16.04 9 | - Docker 18.09.4 10 | - OpenCV 3.4.2 11 | - Boost 1.58.0 12 | 13 | > All of the 3rd party libraries are included in the provided docker image 14 | 15 | ## Build Docker Image 16 | 1. Open Dockerfile, change line #19 ARG USERNAME to your host user name (echo $USER) 17 | 2. Open a terminal and run: 18 | ```bash 19 | $ cd /path/to/sort-cpp 20 | $ docker build -t sort . 21 | $ ./docker_run.sh 22 | ``` 23 | 24 | ## Demo: 25 | 26 | ![Screenshot-1](docs/1.png) 27 | 28 | 29 | 30 | To run the tracker with the provided detections and visualize the results: 31 | 32 | 1. Download the [2D MOT 2015 benchmark dataset](https://motchallenge.net/data/2D_MOT_2015/#download) 33 | 2. Create a symbolic link to the dataset 34 | ```bash 35 | $ ln -s /path/to/MOT2015_challenge/data/2DMOT2015 /path/to/sort-cpp/mot_benchmark 36 | ``` 37 | 3. Run the demo 38 | ```bash 39 | $ cd /path/to/sort-cpp 40 | $ mkdir build && cd "$_" 41 | $ cmake .. && make 42 | $ cd /path/to/sort-cpp/bin 43 | # Without display 44 | $ ./sort-cpp 45 | # With display 46 | $ ./sort-cpp -d 47 | ``` 48 | 49 | 50 | 51 | ## Evaluate Metrics 52 | 53 | Using the [Python implementation of metrics for benchmarking multiple object trackers (MOT)](https://github.com/cheind/py-motmetrics) to evaluate metrics. 54 | 55 | 56 | 57 | #### Dataset Structure 58 | 59 | ``` 60 | Layout for ground truth data 61 | //gt/gt.txt 62 | //gt/gt.txt 63 | ... 64 | 65 | Layout for test data 66 | /.txt 67 | /.txt 68 | ... 69 | 70 | Example: 71 | mot_benchmark 72 | ├── test 73 | │   ├── ADL-Rundle-6.txt 74 | │   └── ADL-Rundle-8.txt 75 | └── train 76 | ├── ADL-Rundle-6 77 | │   └── gt 78 | │   └── gt.txt 79 | └── ADL-Rundle-8 80 | └── gt 81 | └── gt.txt 82 | 83 | 84 | Sequences of ground truth and test will be matched according to the `` 85 | string. 86 | ``` 87 | 88 | 89 | 90 | #### Example 91 | 92 | ```bash 93 | # Optional for virtualenv 94 | $ source ~/env/bin/activate 95 | $ pip install motmetrics 96 | # Usage 97 | $ python -m motmetrics.apps.eval_motchallenge --help 98 | # Format: python -m motmetrics.apps.eval_motchallenge groundtruths tests 99 | $ python -m motmetrics.apps.eval_motchallenge mot_benchmark/train output/ 100 | ``` 101 | 102 | 103 | 104 | ## Result 105 | 106 | ![Screenshot-1](docs/2.png) 107 | 108 | FPS is around 1900 with Debug build. 109 | 110 | 111 | 112 | ## References 113 | 1. https://github.com/abewley/sort 114 | 2. https://github.com/mcximing/sort-cpp 115 | 3. https://github.com/saebyn/munkres-cpp 116 | -------------------------------------------------------------------------------- /data/KITTI-13/det.txt: -------------------------------------------------------------------------------- 1 | 4,-1,748.744,152.562,32.441,55.121,0.672558,-1,-1,-1 2 | 5,-1,747.246,152.965,34.561,53.954,0.778875,-1,-1,-1 3 | 6,-1,748.641,148.834,36.75,59.915,0.74036,-1,-1,-1 4 | 7,-1,749.307,154.543,32.616,49.33,0.785546,-1,-1,-1 5 | 8,-1,752.551,155.509,31.128,54.674,0.513309,-1,-1,-1 6 | 9,-1,753.119,155.186,34.286,53.283,0.794882,-1,-1,-1 7 | 9,-1,773.655,161.69,39.325,57.74,0.518777,-1,-1,-1 8 | 11,-1,774.858,166.915,30.478,50.537,0.834827,-1,-1,-1 9 | 11,-1,760.029,151.341,31.082,55.422,0.760953,-1,-1,-1 10 | 12,-1,152.415,191.835,42.302,80.74,0.817165,-1,-1,-1 11 | 12,-1,770.034,158.027,32.983,57.26,0.755515,-1,-1,-1 12 | 12,-1,707.342,143.974,24.891,65.596,0.642924,-1,-1,-1 13 | 13,-1,772.371,152.651,37.152,68.625,0.768328,-1,-1,-1 14 | 13,-1,803.566,156.363,36.349,67.893,0.678682,-1,-1,-1 15 | 13,-1,711.861,140.141,26.274,60.681,0.54418,-1,-1,-1 16 | 14,-1,797.376,153.551,34.34,61.858,0.817447,-1,-1,-1 17 | 15,-1,159.523,150.178,40.793,90.864,0.768277,-1,-1,-1 18 | 15,-1,798.524,157.434,38.98,44.582,0.63912,-1,-1,-1 19 | 15,-1,67.7724,202.688,45.4466,73.471,0.555112,-1,-1,-1 20 | 16,-1,794.938,159.621,41.973,72.547,0.863212,-1,-1,-1 21 | 16,-1,819.651,161.193,34.762,52.196,0.659789,-1,-1,-1 22 | 17,-1,135.633,153.144,41.49,86.733,0.956905,-1,-1,-1 23 | 17,-1,808.606,163.96,35.347,82.649,0.797742,-1,-1,-1 24 | 18,-1,812.723,157.053,41.128,91.411,0.959443,-1,-1,-1 25 | 18,-1,119.39,140.098,35.673,86.591,0.855876,-1,-1,-1 26 | 18,-1,746.098,153.731,31.764,73.961,0.562936,-1,-1,-1 27 | 18,-1,365.71,135.083,32.465,79.015,0.525722,-1,-1,-1 28 | 19,-1,845.271,176.797,32.338,66.41,0.928207,-1,-1,-1 29 | 19,-1,872.699,178.616,36.876,67.415,0.891371,-1,-1,-1 30 | 20,-1,848.949,172.571,36.007,66.262,0.931839,-1,-1,-1 31 | 20,-1,896.779,177.094,32.736,70.255,0.865945,-1,-1,-1 32 | 20,-1,867.44,173.153,47.074,69.427,0.751045,-1,-1,-1 33 | 20,-1,741.765,161.398,36.971,67.257,0.519854,-1,-1,-1 34 | 21,-1,862.049,168.807,36.478,69.78,0.968138,-1,-1,-1 35 | 21,-1,908.617,155.248,41.186,83.717,0.923476,-1,-1,-1 36 | 22,-1,866.092,151.197,52.259,87.884,0.961027,-1,-1,-1 37 | 22,-1,927.238,161.261,36.511,86.647,0.910485,-1,-1,-1 38 | 22,-1,894.166,166.043,37.134,87.848,0.858234,-1,-1,-1 39 | 23,-1,905,169.985,39.552,93.144,0.964608,-1,-1,-1 40 | 23,-1,950.865,171.878,32.368,87.581,0.927545,-1,-1,-1 41 | 23,-1,14.3844,151.489,34.3745,77.745,0.798719,-1,-1,-1 42 | 24,-1,920.733,150.756,40.152,108.888,0.975966,-1,-1,-1 43 | 24,-1,967.972,161.386,52.978,93.662,0.966275,-1,-1,-1 44 | 25,-1,998.636,163.098,46.804,121.325,0.985889,-1,-1,-1 45 | 25,-1,938.081,167.052,46.145,98.605,0.985033,-1,-1,-1 46 | 26,-1,1039.71,161.036,52.66,134.575,0.985799,-1,-1,-1 47 | 26,-1,967.292,171.682,69.818,111.272,0.976018,-1,-1,-1 48 | 27,-1,1067.76,149.432,58.22,160.938,0.989987,-1,-1,-1 49 | 27,-1,991.907,151.36,84.533,140.021,0.969486,-1,-1,-1 50 | 28,-1,1112.75,156.955,61.94,155.409,0.989689,-1,-1,-1 51 | 28,-1,1046.26,150.753,55.14,144.618,0.984231,-1,-1,-1 52 | 29,-1,1101.67,134.773,72.46,184.894,0.99115,-1,-1,-1 53 | 29,-1,1190.58,140.167,50.42,176.518,0.966419,-1,-1,-1 54 | 30,-1,1148.01,135.801,79.32,210.078,0.996967,-1,-1,-1 55 | 32,-1,791.86,163.656,45.182,66.71,0.745345,-1,-1,-1 56 | 36,-1,358.675,168.444,42.541,52.843,0.722695,-1,-1,-1 57 | 37,-1,370.528,158.561,34.399,64.763,0.702973,-1,-1,-1 58 | 39,-1,351.273,165.974,36.52,75.344,0.946696,-1,-1,-1 59 | 40,-1,336.329,171.638,42.704,60.229,0.807638,-1,-1,-1 60 | 41,-1,325.819,170.206,41.149,58.926,0.770187,-1,-1,-1 61 | 42,-1,308.793,175.611,32.213,63.192,0.910014,-1,-1,-1 62 | 43,-1,298.91,179.948,34.764,61.686,0.960944,-1,-1,-1 63 | 43,-1,189.992,160.966,34.041,83.297,0.550861,-1,-1,-1 64 | 43,-1,602.48,130.973,35.131,55.837,0.513429,-1,-1,-1 65 | 44,-1,283.958,189.573,34.891,62.869,0.982689,-1,-1,-1 66 | 44,-1,162.367,150.922,41.934,85.054,0.747439,-1,-1,-1 67 | 44,-1,593.258,135.644,40.167,46.387,0.672412,-1,-1,-1 68 | 45,-1,264.25,174.994,39.351,79.949,0.985279,-1,-1,-1 69 | 45,-1,140.791,160.146,35.713,85.324,0.892299,-1,-1,-1 70 | 46,-1,234.423,186.787,36.928,80.315,0.982001,-1,-1,-1 71 | 46,-1,124.147,153.189,37.519,90.632,0.792147,-1,-1,-1 72 | 46,-1,598.021,141.783,39.653,47.802,0.556356,-1,-1,-1 73 | 47,-1,213.932,188.527,35.698,77.89,0.978796,-1,-1,-1 74 | 47,-1,101.322,162.234,38.992,83.118,0.962927,-1,-1,-1 75 | 47,-1,598.025,142.439,39.958,43.946,0.721953,-1,-1,-1 76 | 48,-1,190.753,184.647,43.734,87.484,0.987996,-1,-1,-1 77 | 48,-1,76.2089,141.612,40.6991,111.505,0.681593,-1,-1,-1 78 | 49,-1,162.365,180.29,48.461,98.152,0.984331,-1,-1,-1 79 | 49,-1,45.1315,159.589,43.1403,97.022,0.978247,-1,-1,-1 80 | 49,-1,591.41,135.294,44.006,46.346,0.873147,-1,-1,-1 81 | 50,-1,131.19,192.547,44.51,93.536,0.975515,-1,-1,-1 82 | 50,-1,13.9732,161.754,38.159,85.963,0.923275,-1,-1,-1 83 | 50,-1,587.844,134.133,44.47,42.605,0.691708,-1,-1,-1 84 | 51,-1,91.2313,178.729,60.3657,120.214,0.992598,-1,-1,-1 85 | 51,-1,583.325,145.309,53.65,56.243,0.859156,-1,-1,-1 86 | 51,-1,1209.63,193.364,29.47,129.929,0.850869,-1,-1,-1 87 | 52,-1,50.5561,194.691,54.6389,119.003,0.991923,-1,-1,-1 88 | 52,-1,586.462,131.392,45.981,65.645,0.889153,-1,-1,-1 89 | 53,-1,6.95132,186.663,57.0155,142.649,0.992524,-1,-1,-1 90 | 53,-1,587.015,143.475,51.346,50.087,0.945163,-1,-1,-1 91 | 53,-1,354.24,174.958,34.882,66.639,0.660008,-1,-1,-1 92 | 54,-1,590.113,128.212,45.607,72.881,0.71689,-1,-1,-1 93 | 54,-1,339.466,161.913,38.662,78.363,0.716031,-1,-1,-1 94 | 54,-1,210.296,189.4,49.934,41.603,0.66832,-1,-1,-1 95 | 55,-1,583.796,138.543,47.399,52.729,0.783002,-1,-1,-1 96 | 55,-1,200.899,192.017,44.208,52.462,0.724067,-1,-1,-1 97 | 55,-1,1210.89,169.96,28.71,133.781,0.56879,-1,-1,-1 98 | 55,-1,335.417,155.06,36.377,77.21,0.568348,-1,-1,-1 99 | 56,-1,322.723,153.963,37.204,83.541,0.598445,-1,-1,-1 100 | 57,-1,580.371,135.399,50.007,55.624,0.688715,-1,-1,-1 101 | 57,-1,321.528,158.956,44.32,75.191,0.57479,-1,-1,-1 102 | 57,-1,754.287,138.204,39.136,79.771,0.558958,-1,-1,-1 103 | 58,-1,570.575,130.316,56.11,71.611,0.891138,-1,-1,-1 104 | 58,-1,306.455,158.209,41.895,104.532,0.738981,-1,-1,-1 105 | 59,-1,287.469,165.77,39.855,86.484,0.879883,-1,-1,-1 106 | 59,-1,582.829,127.492,44.333,62.1,0.57735,-1,-1,-1 107 | 60,-1,256.528,172.511,48.133,85.698,0.972166,-1,-1,-1 108 | 60,-1,730.052,141.929,30.085,78.163,0.749969,-1,-1,-1 109 | 60,-1,571.03,137.599,43.724,54.822,0.676522,-1,-1,-1 110 | 61,-1,232.3,169.555,52.316,91.393,0.942508,-1,-1,-1 111 | 61,-1,576.22,138.759,45.098,52.833,0.902857,-1,-1,-1 112 | 61,-1,729.4,153.765,28.28,64.237,0.857582,-1,-1,-1 113 | 61,-1,782.54,154.97,28.163,74.82,0.711455,-1,-1,-1 114 | 61,-1,458.046,139.614,29.578,71.676,0.681246,-1,-1,-1 115 | 61,-1,439.119,133.135,30.743,79.501,0.535243,-1,-1,-1 116 | 62,-1,206.036,165.182,60.813,114.365,0.94615,-1,-1,-1 117 | 62,-1,572.072,129,38.837,66.522,0.928806,-1,-1,-1 118 | 62,-1,727.735,152.045,32.828,70.88,0.890766,-1,-1,-1 119 | 62,-1,778.407,161.518,35.819,76.606,0.869295,-1,-1,-1 120 | 62,-1,437.324,129.91,34.329,76.958,0.856984,-1,-1,-1 121 | 63,-1,181.217,163.921,52.895,108.212,0.991905,-1,-1,-1 122 | 63,-1,441.685,119.162,39.788,91.125,0.922111,-1,-1,-1 123 | 63,-1,563.739,136.507,48.539,66.898,0.77578,-1,-1,-1 124 | 63,-1,787.423,150.054,36.609,95.929,0.680451,-1,-1,-1 125 | 63,-1,729.637,157.06,34.549,69.806,0.607819,-1,-1,-1 126 | 63,-1,869.518,157.651,29.411,78.467,0.552038,-1,-1,-1 127 | 64,-1,151.218,151.241,62.094,141.666,0.991781,-1,-1,-1 128 | 64,-1,799.12,159.326,36.713,80.199,0.978511,-1,-1,-1 129 | 64,-1,428.245,126.203,35.791,82.425,0.931756,-1,-1,-1 130 | 64,-1,779.65,164.017,36.05,78.322,0.612054,-1,-1,-1 131 | 64,-1,743.935,158.443,35.791,64.159,0.599363,-1,-1,-1 132 | 64,-1,564.951,130.03,46.057,76.198,0.590103,-1,-1,-1 133 | 65,-1,118.723,160.78,56.036,139.048,0.980634,-1,-1,-1 134 | 65,-1,798.651,158.082,36.226,90.858,0.953829,-1,-1,-1 135 | 65,-1,427.352,124.854,37.931,90.025,0.877596,-1,-1,-1 136 | 65,-1,568.573,127.306,42.498,65.326,0.815463,-1,-1,-1 137 | 66,-1,63.9155,150.636,72.7125,141.832,0.983048,-1,-1,-1 138 | 66,-1,792.589,156.065,39.845,98.792,0.772148,-1,-1,-1 139 | 66,-1,417.003,126.275,41.214,88.098,0.745704,-1,-1,-1 140 | 66,-1,557.712,136.069,40.379,61.683,0.737384,-1,-1,-1 141 | 67,-1,33.3473,147.151,59.7858,148.665,0.970942,-1,-1,-1 142 | 67,-1,809.686,155.232,40.936,101.875,0.704994,-1,-1,-1 143 | 67,-1,557.289,130.571,39.488,59.492,0.700651,-1,-1,-1 144 | 68,-1,9.47021,146.732,49.8789,182.608,0.954444,-1,-1,-1 145 | 68,-1,550.22,122.747,56.035,69.178,0.795754,-1,-1,-1 146 | 68,-1,749.217,147.08,28.188,72.521,0.569354,-1,-1,-1 147 | 68,-1,321.559,154.52,39.927,84.054,0.545323,-1,-1,-1 148 | 68,-1,905.575,145.612,32.35,92.626,0.528991,-1,-1,-1 149 | 69,-1,918.459,164.084,29.605,78.151,0.903845,-1,-1,-1 150 | 69,-1,1105.72,145.776,53.34,96.434,0.856083,-1,-1,-1 151 | 69,-1,1007.54,208.922,51.94,82.471,0.817552,-1,-1,-1 152 | 69,-1,306.075,154.714,38.465,88.904,0.809773,-1,-1,-1 153 | 69,-1,384.079,157.063,29.739,69.202,0.793539,-1,-1,-1 154 | 69,-1,834.35,160.79,40.974,78.435,0.752213,-1,-1,-1 155 | 69,-1,547.156,135.109,47.197,66.706,0.619774,-1,-1,-1 156 | 70,-1,846.783,144.09,53.621,127.825,0.96839,-1,-1,-1 157 | 70,-1,1130.77,160.235,72.55,95.241,0.948039,-1,-1,-1 158 | 70,-1,760.093,153.407,32.273,80.521,0.879412,-1,-1,-1 159 | 70,-1,367.466,159.046,35.769,74.877,0.786903,-1,-1,-1 160 | 70,-1,277.221,165.357,45.356,65.507,0.761419,-1,-1,-1 161 | 70,-1,738.834,169.696,35.667,59.576,0.745546,-1,-1,-1 162 | 70,-1,1042.23,204.97,58.51,98.175,0.672778,-1,-1,-1 163 | 70,-1,909.606,152.436,53.997,87.347,0.66016,-1,-1,-1 164 | 71,-1,864.767,163.911,41.068,103.251,0.986856,-1,-1,-1 165 | 71,-1,1163.26,150.725,73.84,167.117,0.946941,-1,-1,-1 166 | 71,-1,288.252,163.692,28.64,74.21,0.943634,-1,-1,-1 167 | 71,-1,759.725,163.307,27.92,68.264,0.940219,-1,-1,-1 168 | 71,-1,947.093,163.059,35.855,86.936,0.882553,-1,-1,-1 169 | 71,-1,781.355,167.437,38.004,77.694,0.735804,-1,-1,-1 170 | 71,-1,739.332,175.803,36.729,67.418,0.710009,-1,-1,-1 171 | 72,-1,881.462,142.734,65.256,150.617,0.989745,-1,-1,-1 172 | 72,-1,747.348,160.614,52.611,86.915,0.98085,-1,-1,-1 173 | 72,-1,264.081,154.903,38.11,96.514,0.964022,-1,-1,-1 174 | 72,-1,352.477,169.694,29.88,58.945,0.935391,-1,-1,-1 175 | 72,-1,950.429,145.214,42.615,103.223,0.872057,-1,-1,-1 176 | 72,-1,1144.5,187.396,89.04,116.883,0.843947,-1,-1,-1 177 | 72,-1,1204.86,155.118,34.07,157.18,0.763933,-1,-1,-1 178 | 72,-1,973.717,150.298,38.963,105.111,0.533642,-1,-1,-1 179 | 73,-1,887.615,155.978,91.393,138.677,0.990084,-1,-1,-1 180 | 73,-1,1172.52,219.998,67.93,106.414,0.959029,-1,-1,-1 181 | 73,-1,749.063,155.435,42.811,87.721,0.949606,-1,-1,-1 182 | 73,-1,971.024,142.392,47.716,124.058,0.862283,-1,-1,-1 183 | 73,-1,338.545,168.782,40.531,76.054,0.835651,-1,-1,-1 184 | 73,-1,773.334,160.575,40.495,86.271,0.789951,-1,-1,-1 185 | 74,-1,937.761,152.196,65.199,147.278,0.989332,-1,-1,-1 186 | 74,-1,763.777,155.084,35.301,85.242,0.940203,-1,-1,-1 187 | 74,-1,244.882,164.624,36.692,100.145,0.933679,-1,-1,-1 188 | 74,-1,993.118,149.466,51.642,118.921,0.919812,-1,-1,-1 189 | 74,-1,323.798,171.853,30.966,71.3,0.914545,-1,-1,-1 190 | 75,-1,957.65,144.378,80.44,167.571,0.98952,-1,-1,-1 191 | 75,-1,1016.01,160.988,59.66,125.243,0.971565,-1,-1,-1 192 | 75,-1,224.291,159.262,38.95,106.303,0.941417,-1,-1,-1 193 | 75,-1,308.646,177.607,29.134,67.945,0.936099,-1,-1,-1 194 | 75,-1,767.177,168.928,31.319,77.442,0.930843,-1,-1,-1 195 | 75,-1,866.832,185.434,29.294,72.247,0.860436,-1,-1,-1 196 | 76,-1,982.536,149.136,105.434,172.369,0.992112,-1,-1,-1 197 | 76,-1,872.422,177.764,34.664,80.706,0.976539,-1,-1,-1 198 | 76,-1,205.978,170.135,40.125,86.816,0.965067,-1,-1,-1 199 | 76,-1,783.683,168.58,30.773,73.746,0.962307,-1,-1,-1 200 | 76,-1,1054.12,151.239,55.23,148.437,0.937427,-1,-1,-1 201 | 76,-1,886.306,166.055,47.309,101.732,0.741738,-1,-1,-1 202 | 77,-1,1040.83,153.596,101.48,189.221,0.997142,-1,-1,-1 203 | 77,-1,182.983,166.163,41.34,87.741,0.976072,-1,-1,-1 204 | 77,-1,781.272,156.489,56.922,95.248,0.919901,-1,-1,-1 205 | 77,-1,897.796,172.971,30.16,89.455,0.831098,-1,-1,-1 206 | 77,-1,844.94,171.535,30.735,84.788,0.780899,-1,-1,-1 207 | 78,-1,1068.84,170.62,128.04,184.494,0.995296,-1,-1,-1 208 | 78,-1,788.644,160.777,40.841,105.165,0.987967,-1,-1,-1 209 | 78,-1,168.194,168.462,39.586,88.177,0.977618,-1,-1,-1 210 | 78,-1,257.329,174.637,39.267,87.738,0.879471,-1,-1,-1 211 | 78,-1,904.693,172.513,37.269,97.162,0.652959,-1,-1,-1 212 | 79,-1,1150.31,146.688,90.69,227.312,0.985188,-1,-1,-1 213 | 79,-1,801.434,167.713,47.57,104.398,0.984509,-1,-1,-1 214 | 79,-1,138.082,165.584,54.291,98.695,0.96677,-1,-1,-1 215 | 79,-1,231.48,171.601,50.161,101.189,0.966306,-1,-1,-1 216 | 79,-1,1112.66,149.726,51.9,204.563,0.940922,-1,-1,-1 217 | 79,-1,866.811,178.299,32.954,89.847,0.823388,-1,-1,-1 218 | 79,-1,833.586,152.919,28.681,109.407,0.539478,-1,-1,-1 219 | 80,-1,1154.29,166.562,71.52,158.595,0.985738,-1,-1,-1 220 | 80,-1,818.321,175.044,44.991,115.397,0.983346,-1,-1,-1 221 | 80,-1,128.377,174.11,38.351,103.12,0.975216,-1,-1,-1 222 | 80,-1,203.58,174.13,49.748,108.501,0.939457,-1,-1,-1 223 | 80,-1,878.023,177.918,40.07,94.637,0.797992,-1,-1,-1 224 | 80,-1,450.212,160.172,36.979,57.631,0.756927,-1,-1,-1 225 | 80,-1,793.108,180.972,31.933,79.369,0.681346,-1,-1,-1 226 | 81,-1,98.8431,177.246,47.1729,96.131,0.990427,-1,-1,-1 227 | 81,-1,841.468,166.84,45.892,131.433,0.983293,-1,-1,-1 228 | 81,-1,175.491,183.085,39.466,94.384,0.874308,-1,-1,-1 229 | 81,-1,1214.91,163.429,26.09,170.183,0.794073,-1,-1,-1 230 | 81,-1,819.756,183.251,31.362,91.854,0.743015,-1,-1,-1 231 | 81,-1,434.197,159.566,36.31,64.312,0.635735,-1,-1,-1 232 | 81,-1,792.618,191.727,28.67,52.453,0.549123,-1,-1,-1 233 | 82,-1,61.6508,173.412,61.1012,119.119,0.990805,-1,-1,-1 234 | 82,-1,858.571,176.815,47.203,143.76,0.977752,-1,-1,-1 235 | 82,-1,818.611,198.13,28.799,82.366,0.900149,-1,-1,-1 236 | 82,-1,926.422,187.412,44.73,105.319,0.679277,-1,-1,-1 237 | 82,-1,839.408,181.395,28.887,98.946,0.673427,-1,-1,-1 238 | 82,-1,903.447,169.315,46.704,137.276,0.638374,-1,-1,-1 239 | 82,-1,146.884,174.106,42.731,108.73,0.617472,-1,-1,-1 240 | 83,-1,40.6761,186.173,47.2496,108.417,0.989897,-1,-1,-1 241 | 83,-1,876.97,158.092,47.744,175.407,0.984829,-1,-1,-1 242 | 83,-1,831.912,183.158,38.702,109.05,0.941465,-1,-1,-1 243 | 83,-1,422.928,158.921,29.988,56.861,0.643896,-1,-1,-1 244 | 83,-1,109.308,170.186,47.159,135.668,0.609661,-1,-1,-1 245 | 84,-1,900.75,145.223,64.72,211.44,0.982393,-1,-1,-1 246 | 84,-1,13.4311,167.984,59.273,131.126,0.969814,-1,-1,-1 247 | 84,-1,846.383,185.403,38.883,100.761,0.947336,-1,-1,-1 248 | 84,-1,55.5404,163.116,52.3086,139.316,0.886577,-1,-1,-1 249 | 84,-1,412.189,165.562,30.475,51.832,0.859416,-1,-1,-1 250 | 84,-1,784.9,162.689,35.813,39.495,0.575092,-1,-1,-1 251 | 85,-1,927.023,133.783,79.667,230.359,0.995426,-1,-1,-1 252 | 85,-1,19.5167,173.823,57.8277,152.54,0.966645,-1,-1,-1 253 | 85,-1,862.125,210.763,40.326,96.005,0.959627,-1,-1,-1 254 | 85,-1,408.968,154.515,32.839,76.511,0.951326,-1,-1,-1 255 | 85,-1,159.361,180.827,45.927,67.209,0.94196,-1,-1,-1 256 | 85,-1,389.965,162.266,30.695,58.091,0.683129,-1,-1,-1 257 | 86,-1,959.29,143.291,93.32,219.262,0.997518,-1,-1,-1 258 | 86,-1,386.641,162.426,33.831,72.591,0.954691,-1,-1,-1 259 | 86,-1,886.337,205.119,37.468,104.559,0.947926,-1,-1,-1 260 | 86,-1,136.921,172.781,48.528,74.759,0.875042,-1,-1,-1 261 | 86,-1,790.447,161.813,33.593,39.766,0.646983,-1,-1,-1 262 | 86,-1,913.121,185.81,32.027,118.363,0.579781,-1,-1,-1 263 | 87,-1,1017.19,135.73,110.18,231.398,0.993787,-1,-1,-1 264 | 87,-1,904.443,217.808,48.044,106.507,0.965718,-1,-1,-1 265 | 87,-1,386.69,157.534,36.664,73.464,0.934381,-1,-1,-1 266 | 87,-1,963.799,193.191,52.101,132.866,0.812771,-1,-1,-1 267 | 87,-1,121.208,177.421,43.913,74.018,0.793799,-1,-1,-1 268 | 88,-1,1053.78,131.585,160.73,237.474,0.992689,-1,-1,-1 269 | 88,-1,364.722,163.761,38.008,76.682,0.956832,-1,-1,-1 270 | 88,-1,935.904,183.599,59.814,171.35,0.931384,-1,-1,-1 271 | 88,-1,92.7214,173.007,45.6126,91.396,0.887574,-1,-1,-1 272 | 88,-1,990.858,200.648,50.362,142.114,0.866068,-1,-1,-1 273 | 88,-1,806.722,173.305,27.789,50.339,0.542678,-1,-1,-1 274 | 89,-1,976.397,222.627,82.723,140.951,0.981591,-1,-1,-1 275 | 89,-1,58.0955,174.513,51.1255,78.499,0.965952,-1,-1,-1 276 | 89,-1,1033.82,208.714,63.08,146.919,0.881981,-1,-1,-1 277 | 89,-1,340.85,171.02,38.054,78.385,0.829836,-1,-1,-1 278 | 89,-1,1195.6,113.397,45.4,162.307,0.733186,-1,-1,-1 279 | 89,-1,1150.2,127.816,80.79,205.681,0.646495,-1,-1,-1 280 | 89,-1,806.601,174.038,32.349,40.745,0.52721,-1,-1,-1 281 | 90,-1,1042.48,206.848,71.77,151.129,0.976617,-1,-1,-1 282 | 90,-1,1102.13,218.488,61.79,137.39,0.968862,-1,-1,-1 283 | 90,-1,33.27,174.338,53.6644,84.996,0.967261,-1,-1,-1 284 | 90,-1,316.257,178.409,41.699,77.595,0.943128,-1,-1,-1 285 | 90,-1,1152.95,226.306,85.87,100.049,0.799189,-1,-1,-1 286 | 90,-1,1201.12,199.131,39.88,77.344,0.575768,-1,-1,-1 287 | 91,-1,279.47,170.877,46.99,83.407,0.928609,-1,-1,-1 288 | 91,-1,1084.5,198.339,48.58,110.065,0.918067,-1,-1,-1 289 | 91,-1,323.669,175.694,32.292,60.459,0.873696,-1,-1,-1 290 | 91,-1,1186.19,251.643,54.81,109.173,0.86533,-1,-1,-1 291 | 91,-1,1123.96,253.673,79.18,106.362,0.852009,-1,-1,-1 292 | 92,-1,261.536,161.426,47.178,94.298,0.970649,-1,-1,-1 293 | 92,-1,891.688,160.757,25.774,57.133,0.826123,-1,-1,-1 294 | 92,-1,1108.27,202.82,65.9,107.617,0.81425,-1,-1,-1 295 | 92,-1,296.933,173.868,29.371,73.002,0.786137,-1,-1,-1 296 | 93,-1,216.925,170.52,67.374,105.145,0.975912,-1,-1,-1 297 | 93,-1,822.336,170.663,32.685,50.584,0.723947,-1,-1,-1 298 | 93,-1,1149.44,197.085,52.82,95.876,0.645801,-1,-1,-1 299 | 93,-1,279.39,180.806,40.675,86.203,0.628111,-1,-1,-1 300 | 94,-1,177.79,174.38,74.334,116.052,0.934304,-1,-1,-1 301 | 94,-1,905.845,161.953,29.209,55.755,0.909144,-1,-1,-1 302 | 94,-1,1195.65,200.083,45.35,106.415,0.907865,-1,-1,-1 303 | 94,-1,266.927,170.188,33.104,94.282,0.896325,-1,-1,-1 304 | 95,-1,134.377,165.095,71.578,143.678,0.971008,-1,-1,-1 305 | 95,-1,911.895,164.432,28.696,62.248,0.922031,-1,-1,-1 306 | 95,-1,216.524,176.98,59.362,90.995,0.901443,-1,-1,-1 307 | 96,-1,68.7829,146.606,78.4021,165.039,0.979665,-1,-1,-1 308 | 96,-1,986.181,168.928,33.389,77.19,0.918683,-1,-1,-1 309 | 96,-1,906.676,170.177,30.824,58.701,0.883687,-1,-1,-1 310 | 96,-1,922.89,157.624,23.457,57.577,0.860759,-1,-1,-1 311 | 96,-1,185.551,175.069,61.813,100.954,0.818987,-1,-1,-1 312 | 96,-1,830.211,174.532,36.181,58.958,0.729123,-1,-1,-1 313 | 97,-1,7.75435,154.632,70.3071,191.022,0.985975,-1,-1,-1 314 | 97,-1,127.925,182.133,65.819,92.724,0.905737,-1,-1,-1 315 | 97,-1,924.756,155.632,33.153,73.306,0.876376,-1,-1,-1 316 | 97,-1,834.746,185.099,51.836,52.245,0.799341,-1,-1,-1 317 | 97,-1,1157.81,190.119,63.18,127.347,0.592065,-1,-1,-1 318 | 98,-1,90.5865,171.713,65.4505,125.789,0.958606,-1,-1,-1 319 | 98,-1,931.61,146.909,30.29,89.73,0.948414,-1,-1,-1 320 | 98,-1,1022,176.68,27.51,72.942,0.931844,-1,-1,-1 321 | 98,-1,841.062,182.266,42.956,56.931,0.913397,-1,-1,-1 322 | 99,-1,1033.15,172.518,29.36,81.041,0.929158,-1,-1,-1 323 | 99,-1,16.2623,190.223,98.7517,109.056,0.859585,-1,-1,-1 324 | 99,-1,845.295,171.884,44.407,62.58,0.690643,-1,-1,-1 325 | 99,-1,944.927,147.334,25.238,86.769,0.603701,-1,-1,-1 326 | 100,-1,945.298,165.637,33.852,81.138,0.9543,-1,-1,-1 327 | 100,-1,1046.82,165.971,35.58,88.664,0.906048,-1,-1,-1 328 | 100,-1,1.35252,185.834,41.0045,143.224,0.855938,-1,-1,-1 329 | 100,-1,853.935,177.097,51.867,51.517,0.673903,-1,-1,-1 330 | 101,-1,960.433,157,31.19,78.918,0.970084,-1,-1,-1 331 | 101,-1,1062.11,165.153,45.16,97.659,0.958953,-1,-1,-1 332 | 101,-1,864.643,167.727,49.828,68.709,0.884027,-1,-1,-1 333 | 102,-1,1081.19,154.684,42.42,107.861,0.973524,-1,-1,-1 334 | 102,-1,967.625,158.624,32.855,81.043,0.952063,-1,-1,-1 335 | 102,-1,865.405,178.535,53.777,57.161,0.853297,-1,-1,-1 336 | 103,-1,1106.6,154.089,43.04,118.709,0.980035,-1,-1,-1 337 | 103,-1,978.588,170.191,30.652,61.524,0.955311,-1,-1,-1 338 | 103,-1,881.927,176.532,42.247,55.761,0.914413,-1,-1,-1 339 | 104,-1,1135.11,154.67,44.55,122.276,0.983673,-1,-1,-1 340 | 104,-1,983.692,166.857,41.838,76.073,0.950662,-1,-1,-1 341 | 104,-1,885.722,172.592,53.88,67.148,0.9178,-1,-1,-1 342 | 105,-1,1148.98,150.162,64.85,111.064,0.990981,-1,-1,-1 343 | 105,-1,999.202,166.048,38.938,84.095,0.955459,-1,-1,-1 344 | 105,-1,885.475,165.37,58.774,68.2,0.83167,-1,-1,-1 345 | 105,-1,226.427,157.691,35.379,73.049,0.762836,-1,-1,-1 346 | 106,-1,1018.55,159.653,37.47,89.015,0.973591,-1,-1,-1 347 | 106,-1,1185.81,163.872,45.14,99.943,0.972041,-1,-1,-1 348 | 106,-1,900.078,169.667,54.058,70.122,0.890775,-1,-1,-1 349 | 106,-1,203.874,167.836,32.362,69.198,0.804986,-1,-1,-1 350 | 107,-1,1021.32,168.728,43.42,89.686,0.969557,-1,-1,-1 351 | 107,-1,907.284,187.02,69.327,66.133,0.883291,-1,-1,-1 352 | 107,-1,187.848,165.261,34.528,66.362,0.746538,-1,-1,-1 353 | 107,-1,1045.81,162.969,34.96,88.574,0.629185,-1,-1,-1 354 | 108,-1,170.441,156.309,40.141,79.05,0.949765,-1,-1,-1 355 | 108,-1,1037.82,169.412,46.94,96.857,0.930328,-1,-1,-1 356 | 108,-1,914.945,179.259,79.142,71.807,0.913677,-1,-1,-1 357 | 109,-1,151.226,150.164,42.929,79.009,0.97387,-1,-1,-1 358 | 109,-1,930.633,179.811,73.577,77.848,0.906918,-1,-1,-1 359 | 109,-1,1059.56,165.814,43.72,105.421,0.897085,-1,-1,-1 360 | 110,-1,1077.58,151.829,43.29,86.945,0.957185,-1,-1,-1 361 | 110,-1,139.53,154.054,38.745,83.06,0.955141,-1,-1,-1 362 | 110,-1,935.419,184.606,89.381,75.645,0.810513,-1,-1,-1 363 | 111,-1,121.143,157.618,40.178,69.46,0.974168,-1,-1,-1 364 | 111,-1,1102.01,156.693,43.63,89.918,0.961634,-1,-1,-1 365 | 112,-1,1124.05,150.562,54.31,98.186,0.974512,-1,-1,-1 366 | 112,-1,90.3844,151.136,47.2296,86.864,0.955302,-1,-1,-1 367 | 113,-1,67.4546,149.602,50.1034,94.647,0.982215,-1,-1,-1 368 | 113,-1,1138.45,158.142,66.63,108.713,0.978656,-1,-1,-1 369 | 113,-1,464.255,168.033,27.457,56.716,0.551453,-1,-1,-1 370 | 114,-1,1169.72,161.926,51.32,93.651,0.969054,-1,-1,-1 371 | 114,-1,37.1905,149.268,51.6216,89.512,0.962479,-1,-1,-1 372 | 114,-1,454.069,165.031,28.903,68.298,0.886236,-1,-1,-1 373 | 115,-1,1197.36,152.411,43.64,103.443,0.957235,-1,-1,-1 374 | 115,-1,11.3238,155.142,48.5669,96.117,0.945833,-1,-1,-1 375 | 115,-1,451.184,173.953,30.896,65.132,0.939671,-1,-1,-1 376 | 115,-1,1015.67,187.26,56.65,97.918,0.939106,-1,-1,-1 377 | 115,-1,1075.86,180.074,74.65,129.436,0.869858,-1,-1,-1 378 | 115,-1,43.314,163.192,43.618,92.934,0.705022,-1,-1,-1 379 | 116,-1,441.03,171.314,27.776,76.626,0.921151,-1,-1,-1 380 | 116,-1,9.4081,161.975,40.5837,86.534,0.907899,-1,-1,-1 381 | 116,-1,1051.64,190.888,50.8,88.89,0.835955,-1,-1,-1 382 | 116,-1,693.074,144.053,26.658,80.629,0.604709,-1,-1,-1 383 | 117,-1,429.58,170.017,43.334,74.877,0.942502,-1,-1,-1 384 | 117,-1,1141.65,190.549,67.28,127.637,0.842515,-1,-1,-1 385 | 117,-1,1069.37,186.433,49.84,68.157,0.800473,-1,-1,-1 386 | 117,-1,1202.69,183.704,32.86,140.071,0.703244,-1,-1,-1 387 | 118,-1,428.476,173.412,37.611,91.826,0.936996,-1,-1,-1 388 | 118,-1,1193.95,187.832,47.05,114.899,0.877901,-1,-1,-1 389 | 119,-1,409.173,180.197,36.965,80.182,0.954062,-1,-1,-1 390 | 119,-1,1201.47,215.699,39.53,104.589,0.594523,-1,-1,-1 391 | 120,-1,404.907,179.213,41.222,73.611,0.975618,-1,-1,-1 392 | 121,-1,389.19,176.611,38.18,93.324,0.971872,-1,-1,-1 393 | 122,-1,378.278,180.08,41.905,99.157,0.981273,-1,-1,-1 394 | 122,-1,160.395,27.6246,67.781,75.8654,0.500922,-1,-1,-1 395 | 123,-1,366.794,182.248,40.264,87.605,0.982248,-1,-1,-1 396 | 124,-1,331.305,177.676,56.779,104.406,0.979312,-1,-1,-1 397 | 125,-1,331.001,186.07,40.704,98.88,0.973544,-1,-1,-1 398 | 125,-1,68.9718,12.3975,64.3222,90.8305,0.561877,-1,-1,-1 399 | 126,-1,307.75,183.398,43.414,105.153,0.990048,-1,-1,-1 400 | 126,-1,37.1898,31.5933,61.5619,74.8557,0.767372,-1,-1,-1 401 | 127,-1,287.344,183.826,49.024,122.471,0.995554,-1,-1,-1 402 | 128,-1,258.298,168.533,51.457,152.08,0.991281,-1,-1,-1 403 | 129,-1,222.324,186.188,62.792,147.408,0.991475,-1,-1,-1 404 | 130,-1,177.54,174.07,82.666,178.914,0.996939,-1,-1,-1 405 | 130,-1,2.14777,224.262,48.7959,139.417,0.655699,-1,-1,-1 406 | 131,-1,121.567,190.767,95.705,170.468,0.99472,-1,-1,-1 407 | 132,-1,72.3742,184.692,100.276,189.308,0.997209,-1,-1,-1 408 | 133,-1,7.21973,185.807,96.6833,188.193,0.996676,-1,-1,-1 409 | 134,-1,0,229.627,41.559,122.705,0.880457,-1,-1,-1 410 | 136,-1,356.874,165.579,53.337,76.079,0.512292,-1,-1,-1 411 | 137,-1,351.774,164.633,49.7,78.587,0.897323,-1,-1,-1 412 | 140,-1,669.648,158.154,30.581,104.942,0.801207,-1,-1,-1 413 | 141,-1,666.608,160.913,33.181,106.059,0.856503,-1,-1,-1 414 | 141,-1,54.9989,146.933,80.0921,133.732,0.686799,-1,-1,-1 415 | 142,-1,290.245,164.547,57.424,96.107,0.663914,-1,-1,-1 416 | 142,-1,24.1941,154.939,92.5269,128.201,0.593657,-1,-1,-1 417 | 142,-1,665.24,151.881,37.283,99.726,0.586144,-1,-1,-1 418 | 143,-1,277.353,166.148,55.11,98.605,0.658156,-1,-1,-1 419 | 143,-1,666.062,154.296,39.547,98.878,0.575099,-1,-1,-1 420 | 144,-1,671.557,157.618,34.03,97.752,0.831121,-1,-1,-1 421 | 145,-1,685.127,150.786,35.392,101.215,0.801728,-1,-1,-1 422 | 146,-1,678.529,138.465,38.89,113.679,0.93515,-1,-1,-1 423 | 146,-1,238.131,164.101,52.546,107.801,0.810128,-1,-1,-1 424 | 147,-1,681.849,137.336,44.305,125.333,0.978636,-1,-1,-1 425 | 147,-1,225.964,170.877,48.61,107.555,0.687421,-1,-1,-1 426 | 148,-1,698.492,157.614,39.451,92.624,0.982514,-1,-1,-1 427 | 148,-1,213.108,167.015,53.431,109.252,0.534584,-1,-1,-1 428 | 149,-1,692.392,146.986,35.981,109.39,0.797954,-1,-1,-1 429 | 150,-1,717.899,160.513,40.672,92.902,0.808106,-1,-1,-1 430 | 151,-1,123.895,144.715,135.915,170.939,0.635357,-1,-1,-1 431 | 155,-1,762.805,164.8,46.539,76.255,0.837488,-1,-1,-1 432 | 156,-1,775.246,156.753,48.775,94.64,0.942456,-1,-1,-1 433 | 157,-1,787.602,151.027,43.856,90.407,0.790535,-1,-1,-1 434 | 159,-1,825.357,139.814,55.246,94.115,0.948262,-1,-1,-1 435 | 159,-1,22.6254,95.7438,52.3589,180.779,0.91908,-1,-1,-1 436 | 160,-1,838.417,141.004,50.56,98.53,0.971228,-1,-1,-1 437 | 161,-1,848.576,155.046,65.893,95.71,0.892591,-1,-1,-1 438 | 164,-1,907.89,148.663,57.173,106.495,0.601917,-1,-1,-1 439 | 167,-1,973.032,148.5,75.598,103.498,0.85426,-1,-1,-1 440 | 168,-1,1005.92,162.111,71.52,65.358,0.801743,-1,-1,-1 441 | 169,-1,1038.27,153.346,72.52,121.105,0.931023,-1,-1,-1 442 | 169,-1,772.685,164.14,45.496,83.251,0.768753,-1,-1,-1 443 | 170,-1,1063.18,159.651,61.97,95.49,0.938523,-1,-1,-1 444 | 170,-1,12.4721,150.995,40.708,136.924,0.902885,-1,-1,-1 445 | 170,-1,776.218,176.594,44.869,71.524,0.887011,-1,-1,-1 446 | 171,-1,1088.48,163.083,62.96,82.45,0.791439,-1,-1,-1 447 | 172,-1,776.771,155.819,42.042,89.908,0.699934,-1,-1,-1 448 | 172,-1,1117.13,173.701,89.57,83.733,0.538594,-1,-1,-1 449 | 173,-1,1146.89,155.945,65.11,98.834,0.884571,-1,-1,-1 450 | 173,-1,781.721,161.558,39.12,80.317,0.710794,-1,-1,-1 451 | 175,-1,779.007,153.793,40.281,84.085,0.766883,-1,-1,-1 452 | 176,-1,775.82,165.897,37.579,76.598,0.534864,-1,-1,-1 453 | 186,-1,728.838,167.551,48.794,88.216,0.562515,-1,-1,-1 454 | 194,-1,1202.27,2.72335,36.34,172.619,0.747261,-1,-1,-1 455 | 209,-1,1031.59,158.009,33.6,67.063,0.546391,-1,-1,-1 456 | 210,-1,7.59586,152.717,56.9753,124.161,0.89631,-1,-1,-1 457 | 212,-1,423.337,132.994,36.063,90.154,0.702123,-1,-1,-1 458 | 217,-1,1149.3,6.88287,82.91,252.821,0.872819,-1,-1,-1 459 | 217,-1,743.41,160.671,31.302,76.294,0.749235,-1,-1,-1 460 | 218,-1,746.408,167.988,26.86,77.618,0.778755,-1,-1,-1 461 | 219,-1,746.615,164.223,30.784,85.13,0.938876,-1,-1,-1 462 | 220,-1,744.866,158.593,33.086,78.991,0.945277,-1,-1,-1 463 | 220,-1,32.0889,112.133,44.3867,104.349,0.849281,-1,-1,-1 464 | 221,-1,202.978,81.6005,63.412,133.096,0.983807,-1,-1,-1 465 | 221,-1,747.296,158.066,28.969,81.632,0.953587,-1,-1,-1 466 | 221,-1,1069.05,18.878,72.32,217.868,0.654245,-1,-1,-1 467 | 222,-1,749.952,159.256,32.62,93.595,0.944545,-1,-1,-1 468 | 222,-1,820.592,170.876,30.063,98.963,0.915275,-1,-1,-1 469 | 222,-1,1091.24,22.2195,68.05,204.506,0.742883,-1,-1,-1 470 | 223,-1,1121.1,23.8689,68.5,143.778,0.978969,-1,-1,-1 471 | 223,-1,743.316,156.682,44.464,97.275,0.935283,-1,-1,-1 472 | 223,-1,813.065,177.605,47.011,97.168,0.757528,-1,-1,-1 473 | 224,-1,753.282,162.919,36.438,101.504,0.957852,-1,-1,-1 474 | 224,-1,1155.04,18.9005,68.37,107.409,0.868863,-1,-1,-1 475 | 224,-1,833.783,171.407,35.058,74.471,0.749687,-1,-1,-1 476 | 225,-1,752.87,167.131,38.255,111.823,0.979896,-1,-1,-1 477 | 225,-1,836.513,160.934,47.496,110.342,0.947631,-1,-1,-1 478 | 226,-1,848.93,167.136,46.771,98.885,0.958642,-1,-1,-1 479 | 226,-1,762.547,166.013,42.544,104.718,0.940389,-1,-1,-1 480 | 226,-1,1035.29,263.386,36.35,77.961,0.80857,-1,-1,-1 481 | 227,-1,867.116,165.974,54.787,106.728,0.983153,-1,-1,-1 482 | 227,-1,763.008,165.687,48.827,119.372,0.955689,-1,-1,-1 483 | 227,-1,1091.7,273.173,50.95,90.368,0.94107,-1,-1,-1 484 | 228,-1,884.063,168.797,54.805,122.82,0.966363,-1,-1,-1 485 | 228,-1,775.605,183.413,58.818,106.559,0.922668,-1,-1,-1 486 | 228,-1,190.636,172.989,38.811,83.965,0.70316,-1,-1,-1 487 | 229,-1,796.623,179.422,67.398,131.242,0.983443,-1,-1,-1 488 | 229,-1,888.453,164.094,60.668,130.092,0.92885,-1,-1,-1 489 | 230,-1,908.26,160.666,83.649,148.27,0.987131,-1,-1,-1 490 | 230,-1,805.277,186.204,63.769,142.482,0.964056,-1,-1,-1 491 | 230,-1,95.8853,179.102,44.7437,96.591,0.895001,-1,-1,-1 492 | 231,-1,927.601,154.257,82.089,134.639,0.981265,-1,-1,-1 493 | 231,-1,825.259,199.538,60.178,125.578,0.873318,-1,-1,-1 494 | 231,-1,32.3089,177.426,40.5835,81.014,0.860498,-1,-1,-1 495 | 232,-1,967.049,152.231,89.481,125.58,0.97631,-1,-1,-1 496 | 232,-1,842.744,183.591,61.256,160.701,0.934704,-1,-1,-1 497 | 233,-1,969.633,160.844,126.117,170.08,0.991045,-1,-1,-1 498 | 233,-1,856.674,187.148,85.185,154.731,0.985386,-1,-1,-1 499 | 234,-1,1001.6,155.674,146.73,173.762,0.989453,-1,-1,-1 500 | 234,-1,865.798,191.65,99.651,147.828,0.981338,-1,-1,-1 501 | 234,-1,981.814,170.099,40.906,70.638,0.808623,-1,-1,-1 502 | 234,-1,571.601,168.56,32.874,44.604,0.581336,-1,-1,-1 503 | 235,-1,1050.71,149.068,151.62,182.521,0.993495,-1,-1,-1 504 | 235,-1,899.05,193.56,106.36,138.727,0.989993,-1,-1,-1 505 | 236,-1,1088.32,144.319,152.68,195.691,0.996345,-1,-1,-1 506 | 236,-1,937.979,193.244,140.341,164.884,0.995123,-1,-1,-1 507 | 236,-1,554.393,168.664,23.809,58.059,0.753856,-1,-1,-1 508 | 237,-1,1157.42,150.387,83.58,181.828,0.98185,-1,-1,-1 509 | 237,-1,1032.7,192.79,107.3,171.252,0.969277,-1,-1,-1 510 | 237,-1,995.15,170.25,64.23,158.354,0.807417,-1,-1,-1 511 | 237,-1,548.218,158.808,27.289,64.002,0.788789,-1,-1,-1 512 | 238,-1,1087.67,193.401,153.33,155.077,0.990944,-1,-1,-1 513 | 238,-1,1084.96,258.872,60.72,88.511,0.675153,-1,-1,-1 514 | 238,-1,727.809,160.372,30.221,35.833,0.614434,-1,-1,-1 515 | 239,-1,726.624,158.613,31.048,63.341,0.935448,-1,-1,-1 516 | 239,-1,1057.59,163.642,63.25,99.182,0.920546,-1,-1,-1 517 | 239,-1,536.173,159.557,27.97,58.128,0.751929,-1,-1,-1 518 | 239,-1,740.799,141.983,36.23,76.906,0.601723,-1,-1,-1 519 | 240,-1,733.079,158.122,28.345,64.925,0.935508,-1,-1,-1 520 | 240,-1,1079.73,154.081,52.01,104.205,0.903437,-1,-1,-1 521 | 240,-1,725.896,145.935,21.86,58.386,0.621325,-1,-1,-1 522 | 240,-1,709.858,164.963,34.241,56.106,0.597203,-1,-1,-1 523 | 241,-1,1099.55,149.549,50.47,127.462,0.967146,-1,-1,-1 524 | 241,-1,733.286,163.581,28.774,60.822,0.912349,-1,-1,-1 525 | 241,-1,721.328,149.423,27.141,58.025,0.902943,-1,-1,-1 526 | 241,-1,1069,155.385,37.86,113.12,0.531945,-1,-1,-1 527 | 242,-1,1109.62,145.785,56.05,132.296,0.991671,-1,-1,-1 528 | 242,-1,717.4,158.933,29.606,58.871,0.839761,-1,-1,-1 529 | 242,-1,730.852,150.569,31.186,56.435,0.81895,-1,-1,-1 530 | 242,-1,507.32,157.443,30.463,76.047,0.640482,-1,-1,-1 531 | 243,-1,1127.79,148.367,62.97,129.22,0.991846,-1,-1,-1 532 | 243,-1,1061.3,285.853,35.05,74.457,0.931746,-1,-1,-1 533 | 243,-1,716.172,157.937,28.676,60.413,0.809044,-1,-1,-1 534 | 244,-1,1141.92,147.567,88.88,135.995,0.989916,-1,-1,-1 535 | 244,-1,488.526,184.149,35.339,46.211,0.913285,-1,-1,-1 536 | 244,-1,723.851,152.336,27.818,64.788,0.83084,-1,-1,-1 537 | 245,-1,1151.16,155.983,84.53,127.452,0.987718,-1,-1,-1 538 | 245,-1,467.245,165.347,31.875,69.227,0.951001,-1,-1,-1 539 | 245,-1,484.452,169.22,30.152,71.77,0.892884,-1,-1,-1 540 | 245,-1,722.717,156.153,28.368,62.061,0.538622,-1,-1,-1 541 | 246,-1,1165.85,156.088,75.15,144.954,0.992417,-1,-1,-1 542 | 246,-1,453.575,167.77,36.879,74.403,0.964131,-1,-1,-1 543 | 246,-1,483.066,175.418,32.517,61.619,0.610256,-1,-1,-1 544 | 247,-1,1204.97,159.08,36.03,142.627,0.957313,-1,-1,-1 545 | 247,-1,440.078,168.471,45.88,67.59,0.955984,-1,-1,-1 546 | 247,-1,710.416,152.521,29.336,64.439,0.75219,-1,-1,-1 547 | 247,-1,462.393,185.955,36.608,72.844,0.684899,-1,-1,-1 548 | 248,-1,421.909,170.844,49.715,69.931,0.956269,-1,-1,-1 549 | 248,-1,453.037,168.279,32.33,65.323,0.848423,-1,-1,-1 550 | 248,-1,705.668,158.814,28.871,62.772,0.762172,-1,-1,-1 551 | 249,-1,415.212,172.261,39.08,80.441,0.971537,-1,-1,-1 552 | 250,-1,400.05,167.746,33.57,88.112,0.983079,-1,-1,-1 553 | 250,-1,454.303,175.788,27.611,66.546,0.655825,-1,-1,-1 554 | 250,-1,442.473,169.773,24.522,80.909,0.628369,-1,-1,-1 555 | 250,-1,938.813,259.91,35.318,92.512,0.51127,-1,-1,-1 556 | 251,-1,383.065,175.701,32.921,83.15,0.972503,-1,-1,-1 557 | 251,-1,447.075,172.835,34.911,76.313,0.929592,-1,-1,-1 558 | 251,-1,4.95443,170.045,56.8462,103.324,0.57978,-1,-1,-1 559 | 252,-1,357.318,177.272,53.486,93.518,0.972418,-1,-1,-1 560 | 252,-1,431.746,163.921,30.717,87.735,0.948996,-1,-1,-1 561 | 252,-1,1044.77,274.897,42.05,78.707,0.672281,-1,-1,-1 562 | 253,-1,352.555,182.776,37.626,104.596,0.97589,-1,-1,-1 563 | 253,-1,425.128,175.112,31.654,89.988,0.960338,-1,-1,-1 564 | 253,-1,715.089,172.458,28.69,66.677,0.651369,-1,-1,-1 565 | 254,-1,330.035,169.976,41.199,124.87,0.986764,-1,-1,-1 566 | 254,-1,418.882,171.547,36.427,92.365,0.965278,-1,-1,-1 567 | 254,-1,353.023,182.801,31.038,99.634,0.838264,-1,-1,-1 568 | 254,-1,715.853,170.062,31.701,64.138,0.689233,-1,-1,-1 569 | 254,-1,400.107,174.223,30.458,86.073,0.640692,-1,-1,-1 570 | 255,-1,325.353,182.083,33.867,113.712,0.988289,-1,-1,-1 571 | 255,-1,393.499,173.681,63.961,94.635,0.968545,-1,-1,-1 572 | 255,-1,733.43,170.491,27.708,70.742,0.928253,-1,-1,-1 573 | 255,-1,703.272,156.603,43.448,90.331,0.518467,-1,-1,-1 574 | 256,-1,280.734,167.304,66.055,164.95,0.976393,-1,-1,-1 575 | 256,-1,388.824,179.316,40.258,89.783,0.960362,-1,-1,-1 576 | 256,-1,728.106,172.184,27.032,68.783,0.930659,-1,-1,-1 577 | 256,-1,742.247,175.146,32.523,70.207,0.820393,-1,-1,-1 578 | 256,-1,350.285,177.638,24.074,95.322,0.712589,-1,-1,-1 579 | 256,-1,709.038,161.154,29.116,85.363,0.609531,-1,-1,-1 580 | 256,-1,361.796,195.866,35.951,78.753,0.523863,-1,-1,-1 581 | 257,-1,259.61,172.072,54.63,172.19,0.98596,-1,-1,-1 582 | 257,-1,376.643,168.552,62.99,130.314,0.974033,-1,-1,-1 583 | 257,-1,737.123,178.364,28.851,68.776,0.965729,-1,-1,-1 584 | 257,-1,332.72,177.82,29.334,99.298,0.941755,-1,-1,-1 585 | 257,-1,351.939,185.804,30.782,84.412,0.879738,-1,-1,-1 586 | 258,-1,230.67,164.305,57.644,187.206,0.987946,-1,-1,-1 587 | 258,-1,370.259,176.136,50.742,111.911,0.98452,-1,-1,-1 588 | 258,-1,740.659,179.502,33.068,72.881,0.965123,-1,-1,-1 589 | 258,-1,318.375,181.483,32.597,102.164,0.944546,-1,-1,-1 590 | 258,-1,343.501,187.199,46.886,97.056,0.682397,-1,-1,-1 591 | 259,-1,187.389,160.529,81.788,205.15,0.995612,-1,-1,-1 592 | 259,-1,354.818,186.857,50.283,117.705,0.987106,-1,-1,-1 593 | 259,-1,748.369,173.915,48.266,78.295,0.970992,-1,-1,-1 594 | 259,-1,281.265,184.109,76.448,102.699,0.956821,-1,-1,-1 595 | 259,-1,334.713,183.04,35.959,112.918,0.654308,-1,-1,-1 596 | 260,-1,162.94,156.121,67.532,203.855,0.990253,-1,-1,-1 597 | 260,-1,343.693,185.962,43.064,124.894,0.981829,-1,-1,-1 598 | 260,-1,767.937,164.109,40.743,103.107,0.972264,-1,-1,-1 599 | 260,-1,387.074,182.446,30.859,97.553,0.922534,-1,-1,-1 600 | 260,-1,275.875,190.126,67.84,108.565,0.910076,-1,-1,-1 601 | 260,-1,746.481,169.377,39.512,90.429,0.892399,-1,-1,-1 602 | 260,-1,259.801,202.553,38.355,90.23,0.865787,-1,-1,-1 603 | 260,-1,405.08,175.687,33.631,91.648,0.807673,-1,-1,-1 604 | 260,-1,364.242,202.08,36.015,82.494,0.807427,-1,-1,-1 605 | 261,-1,103.159,155.393,90.775,218.607,0.994985,-1,-1,-1 606 | 261,-1,318.303,182.347,62.347,147.857,0.986252,-1,-1,-1 607 | 261,-1,385.918,176.987,34.261,108.832,0.96033,-1,-1,-1 608 | 261,-1,773.871,157.467,33.84,98.523,0.951058,-1,-1,-1 609 | 261,-1,236.281,187.807,51.517,117.037,0.940745,-1,-1,-1 610 | 261,-1,275.05,180.044,45.194,124.045,0.938168,-1,-1,-1 611 | 261,-1,789.233,167.506,44.677,84.737,0.807666,-1,-1,-1 612 | 261,-1,421.177,185.546,31.304,86.605,0.765841,-1,-1,-1 613 | 261,-1,361.539,170.863,31.071,131.43,0.662173,-1,-1,-1 614 | 262,-1,13.857,154.762,102.007,216.861,0.998218,-1,-1,-1 615 | 262,-1,307.137,164.439,63.942,179.445,0.988773,-1,-1,-1 616 | 262,-1,358.671,176.2,67.83,120.728,0.983096,-1,-1,-1 617 | 262,-1,786.945,156.473,37.546,106.067,0.946363,-1,-1,-1 618 | 262,-1,253.98,167.478,47.829,144.698,0.899118,-1,-1,-1 619 | 262,-1,809.822,160.33,37.827,100.35,0.89533,-1,-1,-1 620 | 262,-1,227.232,205.829,40.288,103.064,0.860756,-1,-1,-1 621 | 262,-1,118.987,205.096,84.775,141.606,0.700252,-1,-1,-1 622 | 262,-1,281.583,172.767,52.179,147.327,0.545158,-1,-1,-1 623 | 263,-1,274.703,166.873,69.383,187.778,0.990386,-1,-1,-1 624 | 263,-1,352.166,182.501,63.078,116.937,0.98353,-1,-1,-1 625 | 263,-1,826.087,152.183,43.375,114.056,0.970254,-1,-1,-1 626 | 263,-1,0,193.621,28.4905,180.379,0.905651,-1,-1,-1 627 | 263,-1,247.873,166.971,39.262,152.622,0.87922,-1,-1,-1 628 | 263,-1,198.029,206.649,41.964,108.331,0.823275,-1,-1,-1 629 | 263,-1,804.633,167.933,28.411,89.319,0.780067,-1,-1,-1 630 | 263,-1,88.5941,211.033,92.4039,152.477,0.657282,-1,-1,-1 631 | 264,-1,235.805,169.335,82.301,204.665,0.992447,-1,-1,-1 632 | 264,-1,356.382,171.271,45.146,135.771,0.984711,-1,-1,-1 633 | 264,-1,858.507,164.884,40.835,115.605,0.978264,-1,-1,-1 634 | 264,-1,815.147,161.571,47.385,105.744,0.974777,-1,-1,-1 635 | 264,-1,334.395,179.427,41.68,113.607,0.768834,-1,-1,-1 636 | 264,-1,172.385,205.026,54.523,128.281,0.633278,-1,-1,-1 637 | 264,-1,414.056,187.358,31.261,86.401,0.567758,-1,-1,-1 638 | 265,-1,200.181,160.933,75.975,213.067,0.993649,-1,-1,-1 639 | 265,-1,330.664,179.779,77.25,143.395,0.993509,-1,-1,-1 640 | 265,-1,879.339,157.677,47.037,136.028,0.984376,-1,-1,-1 641 | 265,-1,838.766,167.124,41.373,109.882,0.979042,-1,-1,-1 642 | 265,-1,135.883,203.572,64.212,147.116,0.961891,-1,-1,-1 643 | 265,-1,411.428,187.132,35.885,91.197,0.699444,-1,-1,-1 644 | 266,-1,315.639,169.853,85.861,140.727,0.986442,-1,-1,-1 645 | 266,-1,117.23,169.492,123.672,198.788,0.986289,-1,-1,-1 646 | 266,-1,917.266,163.573,47.635,128.241,0.98106,-1,-1,-1 647 | 266,-1,848.22,154.55,55.357,139.781,0.973849,-1,-1,-1 648 | 266,-1,398.905,181.428,40.553,96.216,0.882594,-1,-1,-1 649 | 266,-1,91.5269,175.838,65.7601,176.187,0.658584,-1,-1,-1 650 | 267,-1,311.293,177.343,75.288,172.947,0.990596,-1,-1,-1 651 | 267,-1,49.1775,153.919,119.064,208.019,0.988245,-1,-1,-1 652 | 267,-1,886.356,153.846,55.758,156.273,0.982418,-1,-1,-1 653 | 267,-1,945.605,165.018,55.025,152.113,0.97729,-1,-1,-1 654 | 267,-1,399.417,173.84,46.801,115.858,0.955767,-1,-1,-1 655 | 268,-1,981.67,150.313,65.02,167.579,0.99018,-1,-1,-1 656 | 268,-1,281.774,172.652,68.571,199.655,0.988705,-1,-1,-1 657 | 268,-1,915.221,157.592,49.399,159.438,0.986903,-1,-1,-1 658 | 268,-1,388.43,171.138,43.622,113.27,0.944123,-1,-1,-1 659 | 268,-1,0,164.965,69.4481,209.035,0.939403,-1,-1,-1 660 | 268,-1,51.1172,149.042,75.7278,197.926,0.809931,-1,-1,-1 661 | 269,-1,248.099,171.142,83.306,188.809,0.995784,-1,-1,-1 662 | 269,-1,950.766,143.663,65.934,202.42,0.991518,-1,-1,-1 663 | 269,-1,1030.93,150.482,63.24,184.037,0.988191,-1,-1,-1 664 | 269,-1,382.375,182.728,34.751,102.699,0.987353,-1,-1,-1 665 | 269,-1,0,148.674,75.7108,194.865,0.91759,-1,-1,-1 666 | 270,-1,1071.99,150.582,89.28,183.701,0.997984,-1,-1,-1 667 | 270,-1,188.461,170.503,112.494,203.497,0.996615,-1,-1,-1 668 | 270,-1,370.941,166.05,44.623,133.711,0.990507,-1,-1,-1 669 | 270,-1,984.627,146.298,73.953,202.152,0.985605,-1,-1,-1 670 | 271,-1,125.698,168.015,120.379,198.369,0.997292,-1,-1,-1 671 | 271,-1,1043.27,144.287,74.92,205.536,0.995562,-1,-1,-1 672 | 271,-1,1124.5,135.611,93.81,231.092,0.995352,-1,-1,-1 673 | 271,-1,368.115,179.059,40.469,114.035,0.990766,-1,-1,-1 674 | 271,-1,956.969,283.239,41.315,76.09,0.867492,-1,-1,-1 675 | 272,-1,1100.12,148.413,88.93,213.48,0.997709,-1,-1,-1 676 | 272,-1,25.3574,173.341,175.285,196.537,0.993104,-1,-1,-1 677 | 272,-1,348.809,167.361,43.838,145.376,0.986452,-1,-1,-1 678 | 272,-1,1031.35,294.167,47.48,71.92,0.883653,-1,-1,-1 679 | 273,-1,336.611,184.93,66.088,122.53,0.992103,-1,-1,-1 680 | 273,-1,0,202.251,110.257,161.588,0.987768,-1,-1,-1 681 | 273,-1,1167.94,120.148,73.06,232.082,0.968485,-1,-1,-1 682 | 273,-1,1120.28,133.994,58.27,163.156,0.761864,-1,-1,-1 683 | 274,-1,326.776,166.191,47.631,168.522,0.989204,-1,-1,-1 684 | 275,-1,313.725,159.59,56.354,187.649,0.980691,-1,-1,-1 685 | 275,-1,428.799,179.554,24.178,55.125,0.700601,-1,-1,-1 686 | 276,-1,293.898,176.866,68.886,175.17,0.98294,-1,-1,-1 687 | 276,-1,423.209,184.767,32.994,46.633,0.872636,-1,-1,-1 688 | 276,-1,894.113,261.994,34.791,95.365,0.54221,-1,-1,-1 689 | 277,-1,286.244,172.611,73.283,180.7,0.991613,-1,-1,-1 690 | 277,-1,425.722,174.942,33.576,69.891,0.95333,-1,-1,-1 691 | 277,-1,936.417,279.657,40.406,72.62,0.880629,-1,-1,-1 692 | 278,-1,261.153,177.119,84.093,178.626,0.991823,-1,-1,-1 693 | 278,-1,415.58,177.018,30.68,57.384,0.935282,-1,-1,-1 694 | 278,-1,1001.66,288.921,38.26,64.86,0.909994,-1,-1,-1 695 | 279,-1,224.474,176.76,90.599,189.777,0.9929,-1,-1,-1 696 | 279,-1,411.561,170.409,46.937,79.712,0.963964,-1,-1,-1 697 | 280,-1,188.618,188.464,102.114,177.248,0.995611,-1,-1,-1 698 | 280,-1,417.734,184.774,38.43,54.903,0.963148,-1,-1,-1 699 | 280,-1,404.118,173.938,28.695,60.91,0.809312,-1,-1,-1 700 | 281,-1,146.142,173.764,108.575,186.174,0.997764,-1,-1,-1 701 | 281,-1,417.539,172.846,34.513,73.872,0.968011,-1,-1,-1 702 | 281,-1,654.154,169.267,22.365,66.199,0.685171,-1,-1,-1 703 | 282,-1,94.9252,181.031,110.506,178.77,0.994727,-1,-1,-1 704 | 282,-1,1111.58,176.755,44.09,100.464,0.976253,-1,-1,-1 705 | 282,-1,407.396,170.414,39.638,77.233,0.903771,-1,-1,-1 706 | 282,-1,664.093,170.998,22.535,68.645,0.838864,-1,-1,-1 707 | 282,-1,676.455,175.935,23.764,65.662,0.761758,-1,-1,-1 708 | 283,-1,34.9872,181.442,120.849,173.666,0.996622,-1,-1,-1 709 | 283,-1,1157.89,173.372,56.67,128.7,0.990218,-1,-1,-1 710 | 283,-1,407.873,170.589,35.43,84.864,0.968264,-1,-1,-1 711 | 283,-1,666.693,177.268,29.82,75.035,0.881304,-1,-1,-1 712 | 283,-1,943.112,276.407,36.914,84.563,0.601262,-1,-1,-1 713 | 284,-1,2.3056,168.972,76.1553,190.083,0.980693,-1,-1,-1 714 | 284,-1,402.369,173.957,36.349,93.288,0.970643,-1,-1,-1 715 | 284,-1,1202.29,171.743,36.93,105.934,0.942902,-1,-1,-1 716 | 284,-1,672.341,181.486,25.809,72.734,0.879868,-1,-1,-1 717 | 284,-1,1000.67,286.922,42.41,65.109,0.852106,-1,-1,-1 718 | 284,-1,377.377,169.735,36.794,93.889,0.84341,-1,-1,-1 719 | 284,-1,1175.56,174.858,46.3,112.537,0.750412,-1,-1,-1 720 | 284,-1,656.277,164.777,31.133,74.656,0.545114,-1,-1,-1 721 | 284,-1,685.519,176.278,30.414,75.645,0.520293,-1,-1,-1 722 | 285,-1,407.072,183.912,30.332,85.462,0.967929,-1,-1,-1 723 | 285,-1,678.5,177.904,25.135,67.081,0.891193,-1,-1,-1 724 | 285,-1,375.601,176.297,30.81,86.558,0.81621,-1,-1,-1 725 | 286,-1,402,171.401,36.925,96.351,0.948269,-1,-1,-1 726 | 286,-1,372.776,185.498,44.054,81.72,0.941249,-1,-1,-1 727 | 286,-1,685.719,169.211,25,69.727,0.836554,-1,-1,-1 728 | 286,-1,356.237,169.849,25.863,105.043,0.502446,-1,-1,-1 729 | 287,-1,382.2,169.216,43.962,111.218,0.962555,-1,-1,-1 730 | 287,-1,685.744,168.619,30.187,83.547,0.90929,-1,-1,-1 731 | 287,-1,117.872,156.455,69.447,154.21,0.828269,-1,-1,-1 732 | 287,-1,358.478,177.287,38.217,96.008,0.796863,-1,-1,-1 733 | 287,-1,298.513,191.716,34.734,97.42,0.546791,-1,-1,-1 734 | 288,-1,379.558,176.533,43.604,97.576,0.985118,-1,-1,-1 735 | 288,-1,685.498,170.709,39.922,85.773,0.955354,-1,-1,-1 736 | 288,-1,347.601,180.956,47.228,96.685,0.916242,-1,-1,-1 737 | 289,-1,352.771,181.339,48.563,111.36,0.976561,-1,-1,-1 738 | 289,-1,696.578,175.27,39.427,89.773,0.973994,-1,-1,-1 739 | 289,-1,327.524,167.37,38.227,118.055,0.935908,-1,-1,-1 740 | 289,-1,383.011,183.072,32.222,92.982,0.607614,-1,-1,-1 741 | 290,-1,701.503,174.212,44.558,95.378,0.977218,-1,-1,-1 742 | 290,-1,334.251,173.958,50.593,123.343,0.972404,-1,-1,-1 743 | 290,-1,302.983,172.456,39.649,121.08,0.957905,-1,-1,-1 744 | 291,-1,710.707,162.157,51.132,92.891,0.985023,-1,-1,-1 745 | 291,-1,324.613,161.662,46.009,156.501,0.98139,-1,-1,-1 746 | 291,-1,283.806,155.897,39.172,155.383,0.954754,-1,-1,-1 747 | 292,-1,299.932,173.658,60.851,136.633,0.986566,-1,-1,-1 748 | 292,-1,711.984,168.895,57.877,117.915,0.986247,-1,-1,-1 749 | 292,-1,265.002,162.16,39.809,162.436,0.945723,-1,-1,-1 750 | 292,-1,2.47835,183.727,46.6213,153.64,0.701458,-1,-1,-1 751 | 293,-1,730.622,166.431,41.397,105.607,0.992986,-1,-1,-1 752 | 293,-1,278.258,167.941,52.52,183.891,0.977351,-1,-1,-1 753 | 293,-1,225.542,163.03,63.76,181.346,0.969558,-1,-1,-1 754 | 294,-1,238.889,171.873,74.821,201.204,0.989214,-1,-1,-1 755 | 294,-1,743.581,162.022,38.397,129.321,0.980498,-1,-1,-1 756 | 294,-1,190.164,150.304,58.126,216.233,0.964528,-1,-1,-1 757 | 295,-1,192.999,165.579,77.854,206.929,0.990921,-1,-1,-1 758 | 295,-1,751.583,150.752,54.711,146.246,0.98052,-1,-1,-1 759 | 295,-1,135.54,164.036,77.858,196.869,0.973065,-1,-1,-1 760 | 296,-1,153.725,170.348,72.217,185.012,0.987147,-1,-1,-1 761 | 296,-1,65.0882,163.503,108.423,193.356,0.986131,-1,-1,-1 762 | 296,-1,774.806,152.108,49.541,161.05,0.971064,-1,-1,-1 763 | 296,-1,951.535,255.345,44.938,92.175,0.855575,-1,-1,-1 764 | 296,-1,441.497,169.742,36.735,70.848,0.530673,-1,-1,-1 765 | 297,-1,0,168.693,102.89,203.331,0.989294,-1,-1,-1 766 | 297,-1,65.5492,166.393,105.531,189.715,0.988989,-1,-1,-1 767 | 297,-1,785.775,159.995,71.175,155.065,0.986735,-1,-1,-1 768 | 297,-1,1019.98,267.994,36.92,97.791,0.825747,-1,-1,-1 769 | 298,-1,808.753,150.202,62.398,189.012,0.992763,-1,-1,-1 770 | 298,-1,6.94198,170.145,78.7681,189.385,0.983411,-1,-1,-1 771 | 299,-1,837.695,146.985,71.62,206.215,0.992438,-1,-1,-1 772 | 299,-1,410.477,172.915,39.798,79.554,0.9082,-1,-1,-1 773 | 299,-1,771.552,164.779,24.335,61.004,0.658473,-1,-1,-1 774 | 300,-1,863.899,153.665,78.424,206.407,0.990634,-1,-1,-1 775 | 300,-1,404.738,171.805,37.435,83.061,0.949811,-1,-1,-1 776 | 301,-1,905.973,155.283,77.966,218.717,0.986792,-1,-1,-1 777 | 301,-1,390.952,163.706,36.883,106.934,0.862661,-1,-1,-1 778 | 301,-1,469.66,178.423,25.798,39.328,0.501759,-1,-1,-1 779 | 302,-1,954.335,150.098,85.425,223.875,0.993714,-1,-1,-1 780 | 302,-1,370.043,173.604,47.583,101.609,0.978458,-1,-1,-1 781 | 302,-1,453.503,168.133,34.107,73.452,0.596527,-1,-1,-1 782 | 303,-1,1012.03,145.421,109.34,221.754,0.997398,-1,-1,-1 783 | 303,-1,352.03,181.579,54.154,107.4,0.985487,-1,-1,-1 784 | 303,-1,448.573,169.72,36.274,76.02,0.920087,-1,-1,-1 785 | 303,-1,801.302,171.074,28.25,64.218,0.569454,-1,-1,-1 786 | 304,-1,1091.28,149.219,136.47,221.89,0.99598,-1,-1,-1 787 | 304,-1,337.755,167.035,42.534,130.022,0.968231,-1,-1,-1 788 | 304,-1,810.048,177.765,30.083,68.741,0.830371,-1,-1,-1 789 | 304,-1,799.667,168.167,25.359,64.605,0.767143,-1,-1,-1 790 | 304,-1,439.003,162.844,29.896,96.312,0.735959,-1,-1,-1 791 | 305,-1,313.343,162.999,51.644,136.144,0.977254,-1,-1,-1 792 | 305,-1,414.801,158.338,36.635,104.213,0.965099,-1,-1,-1 793 | 305,-1,818.69,177.493,26.569,59.567,0.839437,-1,-1,-1 794 | 306,-1,280.549,157.348,62.72,156.144,0.987646,-1,-1,-1 795 | 306,-1,405.159,160.924,48.981,108.01,0.958376,-1,-1,-1 796 | 306,-1,831.648,173.131,26.531,63.18,0.878532,-1,-1,-1 797 | 306,-1,516.316,170.519,28.527,48.635,0.724819,-1,-1,-1 798 | 307,-1,241.139,155.885,75.629,182.155,0.987298,-1,-1,-1 799 | 307,-1,390.566,147.499,45.628,136.701,0.984194,-1,-1,-1 800 | 307,-1,829.996,171.355,32.439,66.958,0.939132,-1,-1,-1 801 | 307,-1,510.184,173.149,31.495,49.145,0.880532,-1,-1,-1 802 | 308,-1,176.39,175.51,84.489,172.048,0.992747,-1,-1,-1 803 | 308,-1,369.245,142.003,56.002,154.989,0.98585,-1,-1,-1 804 | 308,-1,849.774,166.33,29.074,73.268,0.94854,-1,-1,-1 805 | 308,-1,516.144,170.381,28.116,55.342,0.946733,-1,-1,-1 806 | 309,-1,96.734,168.428,123.498,193.83,0.997523,-1,-1,-1 807 | 309,-1,325.619,143.728,79.346,170.376,0.993719,-1,-1,-1 808 | 309,-1,859.148,169.824,26.607,66.997,0.971318,-1,-1,-1 809 | 309,-1,1029.16,272.173,41.1,84.244,0.963938,-1,-1,-1 810 | 309,-1,510.043,167.028,30.369,58.774,0.782063,-1,-1,-1 811 | 310,-1,7.01126,169.193,124.133,192.181,0.996594,-1,-1,-1 812 | 310,-1,288.508,161.925,94.571,188.896,0.992015,-1,-1,-1 813 | 310,-1,866.484,172.178,29.67,76.28,0.945215,-1,-1,-1 814 | 310,-1,895.958,165.61,22.575,76.858,0.74512,-1,-1,-1 815 | 310,-1,1137.52,293.824,44.38,68.612,0.602932,-1,-1,-1 816 | 311,-1,236.694,156.218,87.128,196.476,0.981525,-1,-1,-1 817 | 311,-1,877.54,176.385,40.346,78.116,0.948137,-1,-1,-1 818 | 311,-1,503.372,158.003,33.106,66.674,0.783279,-1,-1,-1 819 | 312,-1,163.34,145.559,113.901,220.144,0.991012,-1,-1,-1 820 | 312,-1,889.373,170.518,42.209,94.346,0.98,-1,-1,-1 821 | 312,-1,502.879,175.143,23.889,51.804,0.795426,-1,-1,-1 822 | 312,-1,916.845,179.866,30.493,91.646,0.663248,-1,-1,-1 823 | 313,-1,8.93084,134.474,183.695,239.526,0.994524,-1,-1,-1 824 | 313,-1,923.203,165.936,38.053,126.029,0.984273,-1,-1,-1 825 | 313,-1,488.419,171.469,24.369,59.269,0.82342,-1,-1,-1 826 | 313,-1,503.402,170.15,28.852,70.361,0.675651,-1,-1,-1 827 | 314,-1,925.711,165.002,55.482,101.481,0.976418,-1,-1,-1 828 | 314,-1,497.811,169.087,27.585,71.989,0.849182,-1,-1,-1 829 | 314,-1,963.404,265.075,36.466,94.593,0.845712,-1,-1,-1 830 | 315,-1,959.795,148.02,43.725,125.943,0.984578,-1,-1,-1 831 | 315,-1,493.929,163.296,35.283,81.655,0.91011,-1,-1,-1 832 | 315,-1,1024.69,273.18,42.76,76.976,0.721583,-1,-1,-1 833 | 315,-1,474.63,173.944,41.268,50.71,0.569714,-1,-1,-1 834 | 316,-1,965.677,157.11,53.303,121.747,0.986207,-1,-1,-1 835 | 316,-1,1121.82,294.427,47.28,68.878,0.904895,-1,-1,-1 836 | 316,-1,491.218,167.941,25.649,53.717,0.900074,-1,-1,-1 837 | 317,-1,1001.14,147.075,48.01,132.682,0.993955,-1,-1,-1 838 | 317,-1,487.306,167.208,31.03,68.752,0.949142,-1,-1,-1 839 | 317,-1,473.062,170.857,22.544,57.429,0.534261,-1,-1,-1 840 | 318,-1,480.613,163.715,32.325,75.258,0.974545,-1,-1,-1 841 | 318,-1,1033.01,138.971,49.96,167.464,0.973979,-1,-1,-1 842 | 318,-1,1182.28,187.804,51.05,118.413,0.58722,-1,-1,-1 843 | 319,-1,473.899,171.879,33.168,69.952,0.984363,-1,-1,-1 844 | 319,-1,1061.17,142.256,61.96,159.266,0.971774,-1,-1,-1 845 | 319,-1,902.021,252.252,33.143,103.318,0.730995,-1,-1,-1 846 | 320,-1,1103.17,123.046,63.76,180.183,0.992873,-1,-1,-1 847 | 320,-1,471.279,169.68,37.154,81.223,0.96684,-1,-1,-1 848 | 320,-1,940.86,251.324,40.412,96.456,0.748324,-1,-1,-1 849 | 321,-1,1142.99,128.479,79.15,196.229,0.997021,-1,-1,-1 850 | 321,-1,1006.92,270.843,46.62,86.369,0.9663,-1,-1,-1 851 | 321,-1,475.259,181.725,40.841,51.983,0.909376,-1,-1,-1 852 | 321,-1,454.497,174.532,38.02,71.884,0.830912,-1,-1,-1 853 | 322,-1,461.625,177.086,37.999,56.598,0.947209,-1,-1,-1 854 | 322,-1,1098.1,282.902,49,76.809,0.888505,-1,-1,-1 855 | 322,-1,451.09,170.898,23.227,67.372,0.531006,-1,-1,-1 856 | 323,-1,456.509,173.972,34.927,86.329,0.962425,-1,-1,-1 857 | 323,-1,446.165,170.341,25.72,73.333,0.786636,-1,-1,-1 858 | 323,-1,717.256,167.444,21.879,62.928,0.657731,-1,-1,-1 859 | 324,-1,454.607,176.149,32.997,78.437,0.969711,-1,-1,-1 860 | 324,-1,721.809,166.181,31.627,87.237,0.813505,-1,-1,-1 861 | 324,-1,708.285,166.812,24.605,67.935,0.672521,-1,-1,-1 862 | 325,-1,451.036,169.345,36.612,99.207,0.957983,-1,-1,-1 863 | 325,-1,428.608,169.982,38.972,95.138,0.950704,-1,-1,-1 864 | 325,-1,871.199,232.886,31.229,87.336,0.682499,-1,-1,-1 865 | 325,-1,734.644,159.226,23.445,69.486,0.656459,-1,-1,-1 866 | 326,-1,461.171,170.175,40.901,98.936,0.950082,-1,-1,-1 867 | 326,-1,428.045,182.475,37.906,77.256,0.94764,-1,-1,-1 868 | 326,-1,723.424,156.51,34.486,95.224,0.937426,-1,-1,-1 869 | 326,-1,908.902,259.693,40.67,100.175,0.667526,-1,-1,-1 870 | 327,-1,443.706,181.97,43.254,100.451,0.963885,-1,-1,-1 871 | 327,-1,966.047,254.725,34.773,103.852,0.949458,-1,-1,-1 872 | 327,-1,727.295,170.056,32.643,69.708,0.941633,-1,-1,-1 873 | 327,-1,413.291,189.921,37.403,85.658,0.900128,-1,-1,-1 874 | 328,-1,445.179,178.668,45.512,102.029,0.976526,-1,-1,-1 875 | 328,-1,401.905,175.93,43.111,99.329,0.95474,-1,-1,-1 876 | 328,-1,731.34,155.799,44.663,95.526,0.944364,-1,-1,-1 877 | 328,-1,1018.98,267.07,38.96,90.077,0.692851,-1,-1,-1 878 | 328,-1,713.213,154.013,36.682,83.208,0.63735,-1,-1,-1 879 | 329,-1,431.002,182.294,41.052,109.65,0.977423,-1,-1,-1 880 | 329,-1,1109.8,290.831,45.69,68.635,0.962728,-1,-1,-1 881 | 329,-1,400.561,185.107,42.273,115.404,0.956826,-1,-1,-1 882 | 329,-1,751.616,162.83,28.163,89.154,0.855134,-1,-1,-1 883 | 330,-1,372.348,185.411,54.398,113.311,0.987169,-1,-1,-1 884 | 330,-1,420.694,181.594,49.266,119.67,0.98398,-1,-1,-1 885 | 330,-1,765.72,154.214,33.216,90.351,0.819916,-1,-1,-1 886 | 330,-1,741.972,162.649,30.673,94.343,0.749411,-1,-1,-1 887 | 331,-1,366.524,178.573,41.64,113.291,0.980361,-1,-1,-1 888 | 331,-1,409.838,183.261,48.267,113.522,0.977901,-1,-1,-1 889 | 331,-1,756.891,160.559,33.339,96.705,0.951641,-1,-1,-1 890 | 331,-1,383.191,161.983,53.034,159.51,0.666056,-1,-1,-1 891 | 332,-1,387.145,175.986,62.394,127.896,0.977244,-1,-1,-1 892 | 332,-1,756.721,158.201,47.061,105.596,0.972348,-1,-1,-1 893 | 332,-1,336.087,174.469,52.57,140.808,0.971069,-1,-1,-1 894 | 332,-1,903.998,242.009,34.113,104.024,0.908721,-1,-1,-1 895 | 332,-1,364.153,189.83,41.913,106.135,0.801974,-1,-1,-1 896 | 332,-1,736.224,161.3,37.896,93.063,0.639118,-1,-1,-1 897 | 332,-1,790.486,164.97,27.833,84.069,0.576139,-1,-1,-1 898 | 333,-1,372.902,174.728,58.466,157.008,0.973615,-1,-1,-1 899 | 333,-1,327.709,181.438,42.873,148.296,0.969587,-1,-1,-1 900 | 333,-1,774.81,155.308,43.975,117.189,0.967054,-1,-1,-1 901 | 333,-1,925.983,250.744,36.181,104.125,0.954166,-1,-1,-1 902 | 333,-1,890.311,164.288,49.391,78.512,0.719593,-1,-1,-1 903 | 333,-1,735.252,177.821,32.027,82.384,0.572984,-1,-1,-1 904 | 333,-1,751.414,167.325,36.638,105.729,0.513317,-1,-1,-1 905 | 334,-1,358.908,178.784,46.069,169.626,0.976653,-1,-1,-1 906 | 334,-1,785.701,156.787,49.472,129.836,0.966493,-1,-1,-1 907 | 334,-1,297.436,184.224,55.516,160.807,0.963153,-1,-1,-1 908 | 334,-1,983.883,274.369,39.037,86.545,0.934036,-1,-1,-1 909 | 334,-1,906.268,166.464,42.626,72.488,0.675405,-1,-1,-1 910 | 334,-1,751.745,169.304,27.964,86.893,0.631305,-1,-1,-1 911 | 335,-1,333.381,174.275,63.254,185.871,0.980824,-1,-1,-1 912 | 335,-1,1041.34,289.099,45.82,65.286,0.967167,-1,-1,-1 913 | 335,-1,803.931,161.956,42.271,130.194,0.930257,-1,-1,-1 914 | 335,-1,287.228,188.833,42.927,159.619,0.925312,-1,-1,-1 915 | 335,-1,759.365,169.854,41.835,89.727,0.834337,-1,-1,-1 916 | 335,-1,926.951,174.449,48.93,75.172,0.770715,-1,-1,-1 917 | 336,-1,303.844,186.132,75.016,169.332,0.97492,-1,-1,-1 918 | 336,-1,763.75,163.051,38.035,102.071,0.965448,-1,-1,-1 919 | 336,-1,815.529,155.97,42.933,129.505,0.912646,-1,-1,-1 920 | 336,-1,250.865,188.142,58.447,180.214,0.911233,-1,-1,-1 921 | 336,-1,933.369,175.704,35.19,72.614,0.884073,-1,-1,-1 922 | 336,-1,909.35,169.639,39.966,77.464,0.873233,-1,-1,-1 923 | 337,-1,272.205,177.33,74.397,194.485,0.982882,-1,-1,-1 924 | 337,-1,218.949,184.704,68.044,178.9,0.976111,-1,-1,-1 925 | 337,-1,832.8,147.343,44.537,137.668,0.961095,-1,-1,-1 926 | 337,-1,771.072,161.508,47.499,120.068,0.955929,-1,-1,-1 927 | 337,-1,931.261,169.554,32.876,85.165,0.928855,-1,-1,-1 928 | 337,-1,959.335,170.891,42.185,69.006,0.913654,-1,-1,-1 929 | 338,-1,253.269,183.838,67.667,186.15,0.9912,-1,-1,-1 930 | 338,-1,850.6,146.943,48.522,154.012,0.958671,-1,-1,-1 931 | 338,-1,945.854,173.207,37.451,85.367,0.955694,-1,-1,-1 932 | 338,-1,775.959,154.401,67.155,120.065,0.915547,-1,-1,-1 933 | 338,-1,185.407,163.795,64.228,199.055,0.890077,-1,-1,-1 934 | 338,-1,976.132,180.582,25.248,76.075,0.678133,-1,-1,-1 935 | 339,-1,215.437,170.402,78.078,190.566,0.992256,-1,-1,-1 936 | 339,-1,790.511,144.371,64.979,138.101,0.980998,-1,-1,-1 937 | 339,-1,869.466,148.92,52.135,195.599,0.950098,-1,-1,-1 938 | 339,-1,955.94,176.425,44.08,81.653,0.934038,-1,-1,-1 939 | 339,-1,148.177,166.61,56.285,143.54,0.797657,-1,-1,-1 940 | 339,-1,982.711,173.075,40.159,67.851,0.585985,-1,-1,-1 941 | 340,-1,800.019,139.713,65.685,162.962,0.98916,-1,-1,-1 942 | 340,-1,165.911,173.417,86.205,198.671,0.986945,-1,-1,-1 943 | 340,-1,881.722,140.292,45.963,170.431,0.983809,-1,-1,-1 944 | 340,-1,993.422,167.396,46.518,102.415,0.940571,-1,-1,-1 945 | 340,-1,92.4337,160.702,84.2883,174.359,0.885339,-1,-1,-1 946 | -------------------------------------------------------------------------------- /data/KITTI-17/det.txt: -------------------------------------------------------------------------------- 1 | 1,-1,477.417,133.575,60.972,206.672,0.985314,-1,-1,-1 2 | 1,-1,387.83,158.467,100.509,182.139,0.97094,-1,-1,-1 3 | 2,-1,417.554,152.34,87.063,188.592,0.990937,-1,-1,-1 4 | 2,-1,499.257,139.014,65.487,203.564,0.990493,-1,-1,-1 5 | 3,-1,498.214,128.481,70.59,200.297,0.995258,-1,-1,-1 6 | 3,-1,424.154,153.412,82.495,189.499,0.986761,-1,-1,-1 7 | 4,-1,439.309,143.884,80.462,208.168,0.994842,-1,-1,-1 8 | 4,-1,518.468,130,55.275,219.953,0.987654,-1,-1,-1 9 | 5,-1,516.955,131.026,86.723,210.707,0.993197,-1,-1,-1 10 | 5,-1,460.852,141.261,60.075,210.584,0.983597,-1,-1,-1 11 | 6,-1,538.367,144.488,63.531,206.507,0.99477,-1,-1,-1 12 | 6,-1,457.382,156.632,89.806,185.123,0.989349,-1,-1,-1 13 | 7,-1,481.114,140.433,71.365,210.658,0.991944,-1,-1,-1 14 | 7,-1,551.227,140.883,64.373,200.49,0.985207,-1,-1,-1 15 | 8,-1,559.924,142.305,58.757,191.829,0.990819,-1,-1,-1 16 | 8,-1,492.365,155.3,70.165,180.783,0.975726,-1,-1,-1 17 | 9,-1,580.236,134.541,52.879,209.277,0.986716,-1,-1,-1 18 | 9,-1,506.963,158.328,67.037,192.508,0.963329,-1,-1,-1 19 | 10,-1,581.56,132.447,63.044,202.526,0.991309,-1,-1,-1 20 | 10,-1,520.272,150.418,76.956,194.572,0.985844,-1,-1,-1 21 | 11,-1,526.89,158.186,84.713,184.466,0.993296,-1,-1,-1 22 | 11,-1,243.122,136.767,55.327,160.776,0.966675,-1,-1,-1 23 | 11,-1,602.995,147.678,59.739,194.772,0.964845,-1,-1,-1 24 | 12,-1,545.382,151.221,84.428,198.4,0.990525,-1,-1,-1 25 | 12,-1,613.926,145.141,62.962,205.249,0.97402,-1,-1,-1 26 | 12,-1,243.57,138.252,64.629,158.576,0.950364,-1,-1,-1 27 | 12,-1,508.681,135.805,34.921,48.726,0.770134,-1,-1,-1 28 | 13,-1,552.147,151.93,109.293,207.661,0.988067,-1,-1,-1 29 | 13,-1,626.171,150.045,71.227,203.925,0.97436,-1,-1,-1 30 | 13,-1,254.982,133.642,67.075,155.124,0.968768,-1,-1,-1 31 | 13,-1,504.996,129.224,31.287,67.245,0.736315,-1,-1,-1 32 | 14,-1,646.888,146.608,53.491,215.831,0.982562,-1,-1,-1 33 | 14,-1,254.132,137.935,80.497,173.445,0.981753,-1,-1,-1 34 | 14,-1,576.705,158.945,80.038,196.511,0.979956,-1,-1,-1 35 | 14,-1,494.432,134.831,32.291,63.705,0.673853,-1,-1,-1 36 | 15,-1,596.462,144.982,78.02,216.909,0.992956,-1,-1,-1 37 | 15,-1,652.59,148.269,68.964,212.625,0.979891,-1,-1,-1 38 | 15,-1,273.951,144.053,73.923,143.043,0.970793,-1,-1,-1 39 | 15,-1,495.056,138.808,30.973,58.889,0.793536,-1,-1,-1 40 | 15,-1,239.144,132.457,35.489,65.558,0.701717,-1,-1,-1 41 | 15,-1,513.07,132.169,34.991,59.766,0.635846,-1,-1,-1 42 | 16,-1,658.277,144.896,72.702,217.059,0.994229,-1,-1,-1 43 | 16,-1,588.158,150.656,85.325,202.332,0.982293,-1,-1,-1 44 | 16,-1,280.721,138.012,79.465,190.828,0.959602,-1,-1,-1 45 | 16,-1,501.933,130.656,35.502,64.356,0.865727,-1,-1,-1 46 | 16,-1,248.412,133.759,35.067,80.21,0.668597,-1,-1,-1 47 | 17,-1,585.944,144.844,134.636,213.981,0.992635,-1,-1,-1 48 | 17,-1,294.363,111.71,84.954,227.787,0.983005,-1,-1,-1 49 | 17,-1,675.009,145.081,79.413,208.379,0.97805,-1,-1,-1 50 | 17,-1,250.117,122.537,56.361,181.917,0.892538,-1,-1,-1 51 | 17,-1,502.042,128.3,32.999,74.613,0.888704,-1,-1,-1 52 | 18,-1,611.526,146.596,95.772,216.648,0.990819,-1,-1,-1 53 | 18,-1,692.732,147.877,72.097,217.009,0.988203,-1,-1,-1 54 | 18,-1,306.292,122.575,96.147,211.919,0.93201,-1,-1,-1 55 | 18,-1,515.683,132.887,29.373,69.346,0.882139,-1,-1,-1 56 | 18,-1,270.158,138.546,49.195,88.054,0.736707,-1,-1,-1 57 | 18,-1,492.035,131.088,35.295,72.246,0.691443,-1,-1,-1 58 | 18,-1,531.568,133.657,34.314,58.537,0.607998,-1,-1,-1 59 | 19,-1,1137.03,152.72,75.94,200.635,0.992521,-1,-1,-1 60 | 19,-1,627.896,154.608,90.639,208.011,0.986729,-1,-1,-1 61 | 19,-1,699.173,147.827,72.027,204.524,0.984407,-1,-1,-1 62 | 19,-1,513.547,146.26,40.269,40.626,0.903117,-1,-1,-1 63 | 19,-1,298.742,97.7595,114.26,232.805,0.632553,-1,-1,-1 64 | 19,-1,269.32,168.094,49.147,162.952,0.580045,-1,-1,-1 65 | 20,-1,1110.97,147.083,93.93,204.555,0.989922,-1,-1,-1 66 | 20,-1,655.651,150.686,71.216,204.238,0.988635,-1,-1,-1 67 | 20,-1,717.646,133.151,64.105,204.442,0.982856,-1,-1,-1 68 | 20,-1,341.731,139.206,69.428,173.432,0.966457,-1,-1,-1 69 | 20,-1,501.043,139.33,38.015,56.837,0.92032,-1,-1,-1 70 | 20,-1,270.223,136.66,73.055,205.994,0.900745,-1,-1,-1 71 | 20,-1,527.618,128.109,29.106,76.934,0.826132,-1,-1,-1 72 | 21,-1,1065.35,137.664,109.9,204.279,0.994954,-1,-1,-1 73 | 21,-1,661.086,144.409,80.13,223.942,0.986304,-1,-1,-1 74 | 21,-1,352.263,126.622,74.738,210.318,0.986061,-1,-1,-1 75 | 21,-1,262.748,129.176,86.378,201.011,0.978803,-1,-1,-1 76 | 21,-1,715.351,137.086,89.3,229.777,0.955809,-1,-1,-1 77 | 21,-1,505.778,131.401,41.021,69.075,0.947781,-1,-1,-1 78 | 21,-1,488.333,141.133,38.818,47.775,0.618705,-1,-1,-1 79 | 22,-1,1020.95,156.635,124.72,212.365,0.998364,-1,-1,-1 80 | 22,-1,360.28,139.031,78.158,202.284,0.99343,-1,-1,-1 81 | 22,-1,672.848,152.484,125.333,202.009,0.992134,-1,-1,-1 82 | 22,-1,287.509,141.523,75.143,195.33,0.984796,-1,-1,-1 83 | 22,-1,502.857,130.311,41.631,71.539,0.910746,-1,-1,-1 84 | 23,-1,988.488,153.99,128.762,215.01,0.997118,-1,-1,-1 85 | 23,-1,694.397,150.384,116.378,212.948,0.992191,-1,-1,-1 86 | 23,-1,389.495,129.369,83.391,199.016,0.972051,-1,-1,-1 87 | 23,-1,303.499,125.414,70.802,208.935,0.971455,-1,-1,-1 88 | 23,-1,770.41,151.174,64.048,178.105,0.939877,-1,-1,-1 89 | 23,-1,514.385,126.464,40.932,71.341,0.903706,-1,-1,-1 90 | 24,-1,972.444,152.777,100.536,216.223,0.997928,-1,-1,-1 91 | 24,-1,702.512,143.946,123.666,225.054,0.987845,-1,-1,-1 92 | 24,-1,395.217,148.407,79.41,175.846,0.986072,-1,-1,-1 93 | 24,-1,780.052,145.273,73.945,211.387,0.985581,-1,-1,-1 94 | 24,-1,311.56,138.404,82.799,192.662,0.983229,-1,-1,-1 95 | 24,-1,516.884,137.63,24.976,64.221,0.902676,-1,-1,-1 96 | 25,-1,729.324,144.667,84.494,213.094,0.993443,-1,-1,-1 97 | 25,-1,788.849,146.521,78.937,211.443,0.992757,-1,-1,-1 98 | 25,-1,320.087,117.802,88.738,221.897,0.990407,-1,-1,-1 99 | 25,-1,940.321,154.884,95.799,198.341,0.98638,-1,-1,-1 100 | 25,-1,386.62,135.074,93.712,190.873,0.985291,-1,-1,-1 101 | 25,-1,520.736,127.93,27.358,62.127,0.865737,-1,-1,-1 102 | 26,-1,926.931,148.619,77.109,216.247,0.996362,-1,-1,-1 103 | 26,-1,748.49,144.39,89.364,211.453,0.989616,-1,-1,-1 104 | 26,-1,335.219,127.673,73.016,203.758,0.983305,-1,-1,-1 105 | 26,-1,815.872,140.195,65.675,209.279,0.979055,-1,-1,-1 106 | 26,-1,435.049,145.554,67.023,178.154,0.949972,-1,-1,-1 107 | 26,-1,502.273,143.12,46.092,45.576,0.867716,-1,-1,-1 108 | 26,-1,533.604,127.301,27.433,66.101,0.604577,-1,-1,-1 109 | 27,-1,743.485,148.442,120.698,206.747,0.996165,-1,-1,-1 110 | 27,-1,441.556,134.29,65.14,198.513,0.994304,-1,-1,-1 111 | 27,-1,337.845,128.873,80.866,204.999,0.991101,-1,-1,-1 112 | 27,-1,898.43,147.046,92.126,219.091,0.987951,-1,-1,-1 113 | 27,-1,828.334,130.409,72.911,229.751,0.981773,-1,-1,-1 114 | 27,-1,512.341,129.576,26.788,74.707,0.869709,-1,-1,-1 115 | 27,-1,532.829,130.121,30.182,68.35,0.665174,-1,-1,-1 116 | 28,-1,748.634,162.24,137.411,186.881,0.997454,-1,-1,-1 117 | 28,-1,344.589,126.85,91.976,218.63,0.993603,-1,-1,-1 118 | 28,-1,442.262,142.387,80.652,187.248,0.993461,-1,-1,-1 119 | 28,-1,865.642,153.789,85.54,212.906,0.992316,-1,-1,-1 120 | 28,-1,518.638,136.811,30.306,71.435,0.88073,-1,-1,-1 121 | 29,-1,762.447,163.491,145.149,193.519,0.995288,-1,-1,-1 122 | 29,-1,468.135,144.483,64.049,189.614,0.993769,-1,-1,-1 123 | 29,-1,868.531,139.971,77.598,215.89,0.990386,-1,-1,-1 124 | 29,-1,374.811,126.193,69.982,212.189,0.977368,-1,-1,-1 125 | 29,-1,525.647,133.665,35.183,58.551,0.798725,-1,-1,-1 126 | 29,-1,511.892,143.208,28.809,65.25,0.513312,-1,-1,-1 127 | 30,-1,382.504,133.699,69.255,212.322,0.990416,-1,-1,-1 128 | 30,-1,878.396,143.56,85.858,202.131,0.989074,-1,-1,-1 129 | 30,-1,805.042,156.973,85.717,203.859,0.988266,-1,-1,-1 130 | 30,-1,489.141,134.497,62.357,210.521,0.96237,-1,-1,-1 131 | 31,-1,390.194,137.987,82.269,216.46,0.991865,-1,-1,-1 132 | 31,-1,867.058,147.418,131.861,204.437,0.988828,-1,-1,-1 133 | 31,-1,498.253,148.267,58.864,190.287,0.981512,-1,-1,-1 134 | 31,-1,800.032,168.723,82.96,177.158,0.974406,-1,-1,-1 135 | 32,-1,389.901,131.531,85.163,205.883,0.996101,-1,-1,-1 136 | 32,-1,765.883,171.614,84.49,185.265,0.993425,-1,-1,-1 137 | 32,-1,507.498,144.881,54.033,185.281,0.992058,-1,-1,-1 138 | 32,-1,840.814,142.029,123.886,226.545,0.991394,-1,-1,-1 139 | 32,-1,918.373,146.86,76.194,166.791,0.907112,-1,-1,-1 140 | 33,-1,424.416,131.801,70.769,204.587,0.995888,-1,-1,-1 141 | 33,-1,751.619,157.832,72.877,211.017,0.994081,-1,-1,-1 142 | 33,-1,868.265,142.329,119.326,226.671,0.99356,-1,-1,-1 143 | 33,-1,525.025,141.447,55.195,205.208,0.992997,-1,-1,-1 144 | 33,-1,942.308,142.163,81.842,224.503,0.957417,-1,-1,-1 145 | 34,-1,532.358,144.919,81.585,189.841,0.997954,-1,-1,-1 146 | 34,-1,887.07,143.79,171.59,225.21,0.996937,-1,-1,-1 147 | 34,-1,436.256,127.446,63.382,213.095,0.99496,-1,-1,-1 148 | 34,-1,738.448,152.243,69.452,207.5,0.991548,-1,-1,-1 149 | 35,-1,707.22,154.089,90.47,202.049,0.995786,-1,-1,-1 150 | 35,-1,925.908,145.876,147.292,219.278,0.995388,-1,-1,-1 151 | 35,-1,544.032,143.082,77.202,203.875,0.994122,-1,-1,-1 152 | 35,-1,440.362,118.205,76.234,227.972,0.983383,-1,-1,-1 153 | 36,-1,942.39,138.025,161.9,230.975,0.997991,-1,-1,-1 154 | 36,-1,454.249,124.12,83.205,229.849,0.995744,-1,-1,-1 155 | 36,-1,561.419,152.062,68.536,190.918,0.994899,-1,-1,-1 156 | 36,-1,680.844,154.073,97.462,191.754,0.99227,-1,-1,-1 157 | 37,-1,968.99,140.467,140.87,228.533,0.99535,-1,-1,-1 158 | 37,-1,675.849,165.272,66.87,194.889,0.991089,-1,-1,-1 159 | 37,-1,468.679,133.923,75.469,208.105,0.987769,-1,-1,-1 160 | 37,-1,581.011,157.905,60.337,203.258,0.987422,-1,-1,-1 161 | 38,-1,997.483,150.978,135.027,205.389,0.997767,-1,-1,-1 162 | 38,-1,586.995,154.427,73.444,195.013,0.990785,-1,-1,-1 163 | 38,-1,486.675,137.87,68.312,209.231,0.98775,-1,-1,-1 164 | 38,-1,653.762,154.102,63.101,189.665,0.986379,-1,-1,-1 165 | 39,-1,1011.26,138.367,172.94,226.287,0.997312,-1,-1,-1 166 | 39,-1,499.05,139.897,68.148,211.013,0.996044,-1,-1,-1 167 | 39,-1,600.548,148.505,96.849,209.797,0.993612,-1,-1,-1 168 | 40,-1,1057.39,146.303,148.7,215.955,0.996407,-1,-1,-1 169 | 40,-1,522.413,134.241,70.71,191.788,0.994969,-1,-1,-1 170 | 40,-1,616.444,156.134,90.486,187.179,0.987612,-1,-1,-1 171 | 41,-1,1068.75,145.787,154.25,201.555,0.998598,-1,-1,-1 172 | 41,-1,524.907,149.078,79.776,217.432,0.994079,-1,-1,-1 173 | 41,-1,637.447,145.925,78.934,199.364,0.992091,-1,-1,-1 174 | 41,-1,591.065,151.068,52.421,182.831,0.833123,-1,-1,-1 175 | 42,-1,1107.31,136.34,115.69,228.602,0.999023,-1,-1,-1 176 | 42,-1,531.8,143.894,116.306,210.931,0.995722,-1,-1,-1 177 | 42,-1,648.454,146.365,67.038,198.678,0.994891,-1,-1,-1 178 | 43,-1,672.193,156.895,67.921,201.577,0.995798,-1,-1,-1 179 | 43,-1,549.815,146.834,85.677,197.886,0.992412,-1,-1,-1 180 | 43,-1,1142.75,157.674,80.25,197.761,0.966967,-1,-1,-1 181 | 44,-1,664.2,143.295,104.465,222.849,0.99581,-1,-1,-1 182 | 44,-1,599.835,139.36,56.164,201.788,0.985223,-1,-1,-1 183 | 44,-1,527.615,158.161,87.116,196.663,0.98484,-1,-1,-1 184 | 44,-1,1170.61,133.584,52.39,226.25,0.560709,-1,-1,-1 185 | 45,-1,691.284,159.42,88.546,194.804,0.998416,-1,-1,-1 186 | 45,-1,591.165,125.296,85.368,242.417,0.993842,-1,-1,-1 187 | 45,-1,510.245,151.442,65.342,174.842,0.960311,-1,-1,-1 188 | 46,-1,706.798,152.322,90.844,205.441,0.998464,-1,-1,-1 189 | 46,-1,620.12,139.133,73.071,214.819,0.992269,-1,-1,-1 190 | 46,-1,494.915,136.342,67.32,195.538,0.977863,-1,-1,-1 191 | 46,-1,562.174,152.628,26.421,71.81,0.85485,-1,-1,-1 192 | 47,-1,717.099,150.498,90.195,214.998,0.997254,-1,-1,-1 193 | 47,-1,633.931,119.265,77.598,243.723,0.997102,-1,-1,-1 194 | 47,-1,488.178,148.003,53.256,176.662,0.976217,-1,-1,-1 195 | 47,-1,559.84,148.612,29.018,64.534,0.925171,-1,-1,-1 196 | 47,-1,597.467,153.221,32.613,53.993,0.558801,-1,-1,-1 197 | 48,-1,630.278,138.088,112.607,222.466,0.997115,-1,-1,-1 198 | 48,-1,735.071,140.816,83.664,223.865,0.995783,-1,-1,-1 199 | 48,-1,454.795,132.81,62.723,203.719,0.945832,-1,-1,-1 200 | 48,-1,559.51,147.494,25.872,79.694,0.904358,-1,-1,-1 201 | 48,-1,574.452,143.956,24.929,66.003,0.851921,-1,-1,-1 202 | 48,-1,588.797,144.91,24.624,69.027,0.841466,-1,-1,-1 203 | 48,-1,533.806,144.233,19.845,71.179,0.662942,-1,-1,-1 204 | 48,-1,548.394,140.58,21.41,84.429,0.589504,-1,-1,-1 205 | 49,-1,668.334,123.71,87.174,245.29,0.996213,-1,-1,-1 206 | 49,-1,416.018,152.786,103.779,171.755,0.993063,-1,-1,-1 207 | 49,-1,755.935,138.66,88.104,220.974,0.981243,-1,-1,-1 208 | 49,-1,572.487,143.751,27.706,64.24,0.895957,-1,-1,-1 209 | 49,-1,550.33,136.128,31.468,74.17,0.836923,-1,-1,-1 210 | 49,-1,530.424,141.267,22.285,65.133,0.774813,-1,-1,-1 211 | 49,-1,591.873,141.278,25.24,80.423,0.715537,-1,-1,-1 212 | 50,-1,766.261,136.971,93.724,220.035,0.995611,-1,-1,-1 213 | 50,-1,685.558,120.277,78.265,246.681,0.992815,-1,-1,-1 214 | 50,-1,410.098,147.151,79.725,183.971,0.972143,-1,-1,-1 215 | 50,-1,578.095,144.506,30.575,70.431,0.914374,-1,-1,-1 216 | 50,-1,520.567,139.448,24.057,66.929,0.899085,-1,-1,-1 217 | 50,-1,594.672,146.489,30.741,59.498,0.806166,-1,-1,-1 218 | 50,-1,536.372,138.439,23.81,78.919,0.80524,-1,-1,-1 219 | 51,-1,794.526,133.007,85.322,235.608,0.997255,-1,-1,-1 220 | 51,-1,695.415,114.435,98.371,253.983,0.975761,-1,-1,-1 221 | 51,-1,383.425,126.011,86.676,205.861,0.949157,-1,-1,-1 222 | 51,-1,582.245,135.844,33.273,70.602,0.887017,-1,-1,-1 223 | 51,-1,534.313,136.536,37.751,85.175,0.836034,-1,-1,-1 224 | 51,-1,524.289,133.755,25.181,74.838,0.802809,-1,-1,-1 225 | 51,-1,564.675,139.489,24.284,73.977,0.748594,-1,-1,-1 226 | 52,-1,703.688,105.948,112.8,263.052,0.997783,-1,-1,-1 227 | 52,-1,828.156,142.905,78.301,215.034,0.995528,-1,-1,-1 228 | 52,-1,367.055,143.016,83.904,191.641,0.985572,-1,-1,-1 229 | 52,-1,578.341,145.712,36.82,77.48,0.949827,-1,-1,-1 230 | 52,-1,535.956,135.051,35.922,82.551,0.84673,-1,-1,-1 231 | 52,-1,564.779,139.075,27.248,73.332,0.730768,-1,-1,-1 232 | 52,-1,599.034,148.015,30.139,56.98,0.715715,-1,-1,-1 233 | 52,-1,511.359,134.151,29.752,73.584,0.585065,-1,-1,-1 234 | 53,-1,726.978,118.022,101.212,244.741,0.995348,-1,-1,-1 235 | 53,-1,850.706,136.374,80.494,221.563,0.995169,-1,-1,-1 236 | 53,-1,318.497,111.191,131.789,236.28,0.948754,-1,-1,-1 237 | 53,-1,579.058,151.016,32.942,74.502,0.910853,-1,-1,-1 238 | 53,-1,528.146,138.538,31.072,69.678,0.872469,-1,-1,-1 239 | 53,-1,593.676,145.814,38.03,62.231,0.845746,-1,-1,-1 240 | 53,-1,565.1,143.672,23.575,67.548,0.668562,-1,-1,-1 241 | 53,-1,512.566,139.762,28.05,65.914,0.536471,-1,-1,-1 242 | 54,-1,745.983,124.023,102.145,244.977,0.997919,-1,-1,-1 243 | 54,-1,870.653,134.054,75.538,216.489,0.995822,-1,-1,-1 244 | 54,-1,310.242,99.166,128.243,237.819,0.962206,-1,-1,-1 245 | 54,-1,530.274,131.939,25.136,68.32,0.879063,-1,-1,-1 246 | 54,-1,583.6,142.075,28.632,67.676,0.857445,-1,-1,-1 247 | 54,-1,540.941,138.053,34.679,82.585,0.843777,-1,-1,-1 248 | 54,-1,563.426,138.679,30.664,80.509,0.614124,-1,-1,-1 249 | 54,-1,514.766,141.941,26.131,61.739,0.503103,-1,-1,-1 250 | 55,-1,769.858,107.945,102.217,261.055,0.997446,-1,-1,-1 251 | 55,-1,882.91,140.764,121.02,205.868,0.996003,-1,-1,-1 252 | 55,-1,521.771,130.491,37.499,81.474,0.924019,-1,-1,-1 253 | 55,-1,590.268,136.244,38.261,82.9,0.830351,-1,-1,-1 254 | 55,-1,318.106,108.897,80.215,214.366,0.737786,-1,-1,-1 255 | 55,-1,557.657,138.009,24.747,74.703,0.629271,-1,-1,-1 256 | 56,-1,899.947,148.34,148.363,209.051,0.997479,-1,-1,-1 257 | 56,-1,788.471,117.302,117.823,233.653,0.997273,-1,-1,-1 258 | 56,-1,311.72,139.538,71.491,190.195,0.99477,-1,-1,-1 259 | 56,-1,530.251,137.539,28.929,68.805,0.956887,-1,-1,-1 260 | 56,-1,600.824,142.103,35.107,77.989,0.875682,-1,-1,-1 261 | 56,-1,547.446,132.487,31.236,77.447,0.826384,-1,-1,-1 262 | 56,-1,580.754,138.847,36.525,67.971,0.625784,-1,-1,-1 263 | 57,-1,819.915,106.998,104.566,262.002,0.997379,-1,-1,-1 264 | 57,-1,932.856,135.16,116.724,227.899,0.996656,-1,-1,-1 265 | 57,-1,281.032,130.045,91.085,195.839,0.985281,-1,-1,-1 266 | 57,-1,535.044,140.647,37.902,83.108,0.9303,-1,-1,-1 267 | 57,-1,598.533,146.675,32.67,75.117,0.91543,-1,-1,-1 268 | 57,-1,557.46,140.02,36.731,87.04,0.635052,-1,-1,-1 269 | 57,-1,580.164,143.982,31.669,65.662,0.517928,-1,-1,-1 270 | 58,-1,961.707,145.285,133.873,197.583,0.998042,-1,-1,-1 271 | 58,-1,845.245,107.066,95.13,261.012,0.99724,-1,-1,-1 272 | 58,-1,274.905,137.502,88.692,199.365,0.978221,-1,-1,-1 273 | 58,-1,533.033,133.183,34.643,78.65,0.921729,-1,-1,-1 274 | 58,-1,600.818,142.017,35.51,82.449,0.879731,-1,-1,-1 275 | 58,-1,554.945,133.698,38.526,88.521,0.795551,-1,-1,-1 276 | 58,-1,581.23,142.788,36.94,67.136,0.520343,-1,-1,-1 277 | 59,-1,999.051,129.547,94.239,205.522,0.996783,-1,-1,-1 278 | 59,-1,855.987,116.014,127.586,244.632,0.996181,-1,-1,-1 279 | 59,-1,262.583,130.475,74.561,214.264,0.987222,-1,-1,-1 280 | 59,-1,540.516,129.632,35.967,78.384,0.943728,-1,-1,-1 281 | 59,-1,600.625,144.584,31.864,75.516,0.809646,-1,-1,-1 282 | 60,-1,902.047,104.474,103.113,264.526,0.997961,-1,-1,-1 283 | 60,-1,1035.4,142.667,83.44,193.376,0.993725,-1,-1,-1 284 | 60,-1,250.727,142.001,73.609,173.266,0.992396,-1,-1,-1 285 | 60,-1,544.754,141.008,36.756,81.468,0.949773,-1,-1,-1 286 | 60,-1,601.386,142.208,36.163,87.953,0.808993,-1,-1,-1 287 | 60,-1,573.333,141.632,37.051,70.16,0.668701,-1,-1,-1 288 | 61,-1,924.877,97.7567,123.493,263.338,0.998709,-1,-1,-1 289 | 61,-1,1061.66,146.278,87.62,178.913,0.995757,-1,-1,-1 290 | 61,-1,541.092,131.498,35.785,77.753,0.944162,-1,-1,-1 291 | 61,-1,606.545,150.135,33.47,79.974,0.839865,-1,-1,-1 292 | 61,-1,576.546,144.592,29.962,78.257,0.71402,-1,-1,-1 293 | 62,-1,1099.53,147.434,88.72,186.917,0.996306,-1,-1,-1 294 | 62,-1,947.615,97.7506,116.465,268.017,0.995907,-1,-1,-1 295 | 62,-1,614.086,157.72,37.111,73.738,0.935915,-1,-1,-1 296 | 62,-1,557.626,138.363,33.138,81.839,0.864147,-1,-1,-1 297 | 62,-1,542.072,131.627,30.623,81.063,0.593382,-1,-1,-1 298 | 63,-1,981.419,89.2527,133.391,278.249,0.996812,-1,-1,-1 299 | 63,-1,1132.98,127.26,90.02,228.502,0.993643,-1,-1,-1 300 | 63,-1,541.336,140.813,34.365,72.155,0.942259,-1,-1,-1 301 | 63,-1,606.831,154.104,43.971,85.722,0.939383,-1,-1,-1 302 | 63,-1,575.272,155.886,33.356,61.747,0.591051,-1,-1,-1 303 | 64,-1,1018.74,102.729,120.44,265.196,0.994183,-1,-1,-1 304 | 64,-1,1166.79,132.34,56.21,232.583,0.992251,-1,-1,-1 305 | 64,-1,550.058,137.777,33.132,82.226,0.935987,-1,-1,-1 306 | 64,-1,619.789,150.946,33.714,79.074,0.910749,-1,-1,-1 307 | 64,-1,566.901,138.776,40.517,92.279,0.850669,-1,-1,-1 308 | 64,-1,530.121,141.056,31.708,69.493,0.544124,-1,-1,-1 309 | 65,-1,1045.98,97.8839,134.98,271.116,0.995377,-1,-1,-1 310 | 65,-1,542.282,138.03,32.937,72.674,0.909059,-1,-1,-1 311 | 65,-1,561.354,134.64,32.358,73.38,0.882666,-1,-1,-1 312 | 65,-1,622.936,141.5,42.527,99.509,0.505498,-1,-1,-1 313 | 66,-1,1080.9,96.2023,142.1,258.015,0.996625,-1,-1,-1 314 | 66,-1,626.89,151.208,46.554,99.93,0.941827,-1,-1,-1 315 | 66,-1,568.385,139.31,31.259,86.274,0.929489,-1,-1,-1 316 | 66,-1,549.254,136.818,32.294,83.468,0.910696,-1,-1,-1 317 | 67,-1,1132.48,115.64,90.52,253.36,0.983466,-1,-1,-1 318 | 67,-1,632.658,147.922,53.97,101.454,0.980625,-1,-1,-1 319 | 67,-1,570.915,140.71,30.199,80.849,0.947375,-1,-1,-1 320 | 67,-1,543.621,140.406,40.053,77.973,0.889698,-1,-1,-1 321 | 68,-1,636.335,149.298,46.891,107.579,0.984139,-1,-1,-1 322 | 68,-1,1173.02,155.116,49.98,212.538,0.94388,-1,-1,-1 323 | 68,-1,564.02,130.024,35.144,90.963,0.911028,-1,-1,-1 324 | 68,-1,547.656,138.762,30.17,75.929,0.873519,-1,-1,-1 325 | 69,-1,636.281,142.603,49.68,117.004,0.985381,-1,-1,-1 326 | 69,-1,557.126,137.461,36.877,87.9,0.847137,-1,-1,-1 327 | 69,-1,540.961,139.333,26.896,79.399,0.552473,-1,-1,-1 328 | 70,-1,642.763,144.576,48.086,112.445,0.988713,-1,-1,-1 329 | 70,-1,550.616,138.93,27.603,70.242,0.841119,-1,-1,-1 330 | 70,-1,571.3,139.054,37.614,87.891,0.778405,-1,-1,-1 331 | 70,-1,593.199,147.587,31.063,80.218,0.566084,-1,-1,-1 332 | 71,-1,646.492,150.295,47.819,108.389,0.986628,-1,-1,-1 333 | 71,-1,547.705,136.677,28.626,72.633,0.91078,-1,-1,-1 334 | 71,-1,568.856,131.044,39.56,96.536,0.825951,-1,-1,-1 335 | 71,-1,595.562,154.669,32.026,71.598,0.657272,-1,-1,-1 336 | 72,-1,649.906,152.669,47.516,107.076,0.983221,-1,-1,-1 337 | 72,-1,539.016,142.354,28.552,68.253,0.883516,-1,-1,-1 338 | 72,-1,557.269,143.097,30.208,78.13,0.839922,-1,-1,-1 339 | 72,-1,598.516,153.791,28.409,69.451,0.766545,-1,-1,-1 340 | 72,-1,577.131,131.926,28.209,90.454,0.637434,-1,-1,-1 341 | 73,-1,655.947,151.935,48.564,104.215,0.991031,-1,-1,-1 342 | 73,-1,548.063,137.922,30.003,71.708,0.83926,-1,-1,-1 343 | 73,-1,591.058,146.006,29.388,78.916,0.829215,-1,-1,-1 344 | 74,-1,659.99,151.303,52.953,108.713,0.989688,-1,-1,-1 345 | 74,-1,594.672,139.563,28.973,77.715,0.768182,-1,-1,-1 346 | 74,-1,542.78,136.862,51.949,97.593,0.754138,-1,-1,-1 347 | 75,-1,671.963,153.689,48.971,99.237,0.974804,-1,-1,-1 348 | 75,-1,598.139,141.329,27.745,68.673,0.918353,-1,-1,-1 349 | 75,-1,553.026,134.749,35.439,81.864,0.891484,-1,-1,-1 350 | 76,-1,673.82,147.678,55.561,118.795,0.983847,-1,-1,-1 351 | 76,-1,600.14,148.823,32.633,67.8,0.948514,-1,-1,-1 352 | 76,-1,553.984,139.594,39.571,91.332,0.932204,-1,-1,-1 353 | 77,-1,688.474,159.334,54.741,109.011,0.984013,-1,-1,-1 354 | 77,-1,553.918,145.54,32.185,81.059,0.970857,-1,-1,-1 355 | 77,-1,598.461,157.012,30.859,75.439,0.939432,-1,-1,-1 356 | 78,-1,689.907,156.46,50.789,113.282,0.976419,-1,-1,-1 357 | 78,-1,551.819,136.928,41.667,87.221,0.974012,-1,-1,-1 358 | 78,-1,609.405,143.372,27.771,65.526,0.958913,-1,-1,-1 359 | 79,-1,699.926,146.418,46.174,142.917,0.978794,-1,-1,-1 360 | 79,-1,553.272,134.296,37.167,96.473,0.971058,-1,-1,-1 361 | 79,-1,607.33,139.691,34.081,73.011,0.945,-1,-1,-1 362 | 79,-1,670.111,150.023,31.969,82.845,0.649826,-1,-1,-1 363 | 80,-1,698.942,153.656,64.629,124.252,0.986537,-1,-1,-1 364 | 80,-1,559.362,139.515,36.191,90.556,0.958294,-1,-1,-1 365 | 80,-1,663.059,148.6,41.02,93.134,0.900167,-1,-1,-1 366 | 80,-1,604.929,149.629,34.642,76.225,0.86652,-1,-1,-1 367 | 81,-1,709.675,153.762,54.559,134.541,0.984462,-1,-1,-1 368 | 81,-1,557.339,131.079,37.949,101.88,0.966391,-1,-1,-1 369 | 81,-1,674.824,159.005,29.508,84.866,0.889064,-1,-1,-1 370 | 81,-1,618.981,147.77,30.088,74.474,0.877249,-1,-1,-1 371 | 82,-1,703.327,141.126,74.091,164.636,0.984548,-1,-1,-1 372 | 82,-1,547.114,134.465,61.025,104.567,0.949922,-1,-1,-1 373 | 82,-1,620.995,153.257,31.135,71.572,0.944156,-1,-1,-1 374 | 82,-1,680.338,149.184,32.72,86.316,0.770752,-1,-1,-1 375 | 83,-1,719.446,152.799,60.055,140.649,0.986426,-1,-1,-1 376 | 83,-1,547.987,131.092,62.305,93.957,0.952284,-1,-1,-1 377 | 83,-1,616.814,134.089,38.101,96.17,0.851617,-1,-1,-1 378 | 83,-1,675.841,140.711,31.458,87.937,0.645096,-1,-1,-1 379 | 84,-1,735.708,131.118,60.958,176.803,0.988403,-1,-1,-1 380 | 84,-1,625.38,150.357,30.227,83.827,0.917445,-1,-1,-1 381 | 84,-1,684.736,149.532,29.111,81.657,0.9095,-1,-1,-1 382 | 84,-1,554.205,125.757,43.253,110.001,0.757334,-1,-1,-1 383 | 85,-1,732.717,127.852,75.079,167.785,0.986208,-1,-1,-1 384 | 85,-1,560.835,131.66,44.91,104.489,0.975554,-1,-1,-1 385 | 85,-1,635.501,154.667,31.233,72.515,0.940865,-1,-1,-1 386 | 85,-1,674.92,151.275,38.783,76.814,0.892694,-1,-1,-1 387 | 85,-1,614.369,146.393,35.787,79.586,0.585745,-1,-1,-1 388 | 86,-1,738.349,140.039,62.879,178.244,0.989647,-1,-1,-1 389 | 86,-1,550.883,136.964,59.522,102.061,0.965281,-1,-1,-1 390 | 86,-1,626.562,151.267,40.384,89.635,0.964573,-1,-1,-1 391 | 86,-1,682.604,162.645,36.059,70.705,0.922638,-1,-1,-1 392 | 86,-1,653.654,145.007,26.904,82.269,0.511496,-1,-1,-1 393 | 87,-1,753.372,137.504,60.975,173.911,0.990948,-1,-1,-1 394 | 87,-1,574.209,127.306,40.472,111.504,0.988132,-1,-1,-1 395 | 87,-1,633.102,145.374,33.687,90.099,0.972985,-1,-1,-1 396 | 87,-1,689.849,140.446,36.718,97.899,0.861611,-1,-1,-1 397 | 88,-1,758.468,139.094,67.162,168.459,0.988624,-1,-1,-1 398 | 88,-1,571.437,120.784,40.121,109.523,0.965277,-1,-1,-1 399 | 88,-1,634.949,148.354,37.751,89.53,0.963649,-1,-1,-1 400 | 88,-1,690.453,151.616,33.785,77.63,0.933231,-1,-1,-1 401 | 89,-1,773.43,138.612,59.61,177.032,0.984012,-1,-1,-1 402 | 89,-1,695.334,152.716,35.471,92.685,0.96068,-1,-1,-1 403 | 89,-1,567.897,122.833,44.139,120.337,0.958825,-1,-1,-1 404 | 89,-1,638.529,145.676,34.799,87.919,0.953511,-1,-1,-1 405 | 90,-1,789.827,144.146,57.859,182.375,0.989305,-1,-1,-1 406 | 90,-1,567.579,130.542,50.966,113.71,0.980857,-1,-1,-1 407 | 90,-1,684.049,148.853,47.762,85.01,0.939045,-1,-1,-1 408 | 90,-1,630.123,151.245,33.476,95.305,0.879198,-1,-1,-1 409 | 91,-1,779.031,143.52,71.174,183.654,0.993431,-1,-1,-1 410 | 91,-1,576.744,132.585,42.816,109.469,0.986212,-1,-1,-1 411 | 91,-1,708.63,151.461,38.007,78.276,0.938992,-1,-1,-1 412 | 91,-1,640.758,146.873,34.669,92.122,0.833459,-1,-1,-1 413 | 92,-1,797.405,140.931,60.239,192.696,0.990967,-1,-1,-1 414 | 92,-1,572.597,136.29,54.747,111.532,0.987429,-1,-1,-1 415 | 92,-1,638.117,144.1,39.616,98.722,0.864331,-1,-1,-1 416 | 92,-1,700.525,142.881,34.418,83.75,0.703711,-1,-1,-1 417 | 93,-1,813.072,143.874,63.319,193.922,0.991621,-1,-1,-1 418 | 93,-1,707.345,160.354,39.664,82.912,0.980087,-1,-1,-1 419 | 93,-1,577.221,135.674,56.974,109.662,0.979199,-1,-1,-1 420 | 93,-1,636.005,146.776,38.28,100.61,0.914976,-1,-1,-1 421 | 94,-1,586.379,130.334,49.466,117.255,0.985393,-1,-1,-1 422 | 94,-1,823.628,141.122,73.818,192.471,0.98313,-1,-1,-1 423 | 94,-1,712.873,156.799,50.181,80.861,0.957801,-1,-1,-1 424 | 94,-1,632.668,156.988,39.664,74.691,0.767599,-1,-1,-1 425 | 95,-1,839.686,134.079,72.547,194.68,0.987511,-1,-1,-1 426 | 95,-1,588.028,133.166,48.895,108.939,0.981221,-1,-1,-1 427 | 95,-1,714.929,154.66,39.606,86.693,0.939747,-1,-1,-1 428 | 95,-1,641.11,148.759,39.963,95.254,0.879061,-1,-1,-1 429 | 96,-1,852.643,147.416,78.851,194.369,0.994956,-1,-1,-1 430 | 96,-1,593.76,136.876,44.087,113.766,0.983705,-1,-1,-1 431 | 96,-1,637.614,151.691,42.621,101.51,0.97586,-1,-1,-1 432 | 96,-1,717.524,146.6,39.34,103.31,0.921816,-1,-1,-1 433 | 97,-1,852.848,153.949,90.16,190.29,0.985474,-1,-1,-1 434 | 97,-1,592.898,129.74,44.709,122.129,0.984277,-1,-1,-1 435 | 97,-1,728.481,152.233,42.243,106.13,0.980086,-1,-1,-1 436 | 97,-1,646.148,153.807,37.889,100.447,0.968226,-1,-1,-1 437 | 98,-1,877.911,139.452,74.027,215.719,0.991114,-1,-1,-1 438 | 98,-1,598.994,126.541,42.926,127.119,0.985908,-1,-1,-1 439 | 98,-1,731.704,152.444,39.754,88.65,0.983724,-1,-1,-1 440 | 98,-1,641.978,147.71,35.514,102.548,0.964437,-1,-1,-1 441 | 99,-1,902.77,153.341,68.621,192.818,0.989579,-1,-1,-1 442 | 99,-1,641.889,151.007,43.651,105.785,0.969977,-1,-1,-1 443 | 99,-1,600.013,143.143,39.303,103.943,0.969326,-1,-1,-1 444 | 99,-1,731.216,160.743,45.056,92.857,0.949957,-1,-1,-1 445 | 100,-1,912.866,150.211,68.484,199.903,0.995878,-1,-1,-1 446 | 100,-1,595.423,128.074,54.26,127.575,0.968553,-1,-1,-1 447 | 100,-1,736.496,159.963,41.026,85.976,0.965925,-1,-1,-1 448 | 100,-1,643.46,135.422,42.074,121.798,0.956654,-1,-1,-1 449 | 101,-1,909.911,154.895,92.459,194.59,0.997635,-1,-1,-1 450 | 101,-1,605.487,136.37,46.751,130.172,0.973259,-1,-1,-1 451 | 101,-1,653,153.628,41.547,113.574,0.970898,-1,-1,-1 452 | 101,-1,752.864,157.921,39.072,86.183,0.929102,-1,-1,-1 453 | 102,-1,926.038,154.175,105.292,210.026,0.996549,-1,-1,-1 454 | 102,-1,604.917,128.148,52.578,133.349,0.982595,-1,-1,-1 455 | 102,-1,742.184,155.761,53.127,93.452,0.961152,-1,-1,-1 456 | 102,-1,656.445,148.399,39.607,121.284,0.958055,-1,-1,-1 457 | 103,-1,957.384,140.887,88.766,223.035,0.996853,-1,-1,-1 458 | 103,-1,607.377,143.021,44.876,117.184,0.980245,-1,-1,-1 459 | 103,-1,666.325,152.334,44.213,112.678,0.976145,-1,-1,-1 460 | 103,-1,750.933,163.671,45.367,85.186,0.926382,-1,-1,-1 461 | 104,-1,984.29,135.628,81.07,224.55,0.997315,-1,-1,-1 462 | 104,-1,748.091,162.778,58.388,88.318,0.989759,-1,-1,-1 463 | 104,-1,614.849,127.689,49.755,148.042,0.980918,-1,-1,-1 464 | 104,-1,668.226,143.259,36.29,124.698,0.975547,-1,-1,-1 465 | 105,-1,991.901,142.328,93.829,226.672,0.996825,-1,-1,-1 466 | 105,-1,606.403,127.9,52.84,141.064,0.986047,-1,-1,-1 467 | 105,-1,759.468,147.463,46.758,97.447,0.985685,-1,-1,-1 468 | 105,-1,667.855,146.287,46.092,130.599,0.977189,-1,-1,-1 469 | 106,-1,1004.47,144.628,112.56,224.301,0.998228,-1,-1,-1 470 | 106,-1,606.581,131.322,53.144,129.343,0.983274,-1,-1,-1 471 | 106,-1,669.252,139.272,60.942,155.155,0.981359,-1,-1,-1 472 | 106,-1,760.705,150.087,46.874,103.308,0.96745,-1,-1,-1 473 | 107,-1,1023.51,143.429,117.9,225.571,0.998017,-1,-1,-1 474 | 107,-1,624.186,126.087,48.822,147.691,0.981708,-1,-1,-1 475 | 107,-1,677.115,155.588,48.535,123.655,0.97732,-1,-1,-1 476 | 107,-1,768.485,143.855,44.597,119.625,0.975743,-1,-1,-1 477 | 108,-1,1054.49,147.304,111.34,221.696,0.997482,-1,-1,-1 478 | 108,-1,680.036,146.336,43.22,126.656,0.986771,-1,-1,-1 479 | 108,-1,618.683,131.142,53.202,151.426,0.986437,-1,-1,-1 480 | 108,-1,777.456,145.007,40.034,109.958,0.961837,-1,-1,-1 481 | 109,-1,1101.33,143.258,87.2,209.39,0.997119,-1,-1,-1 482 | 109,-1,782.738,160.657,51.927,108.185,0.985711,-1,-1,-1 483 | 109,-1,683.593,143.343,48.728,148.043,0.981819,-1,-1,-1 484 | 109,-1,619.444,123.631,56.583,171.693,0.979817,-1,-1,-1 485 | 110,-1,1127.51,142.049,91.5,226.135,0.997502,-1,-1,-1 486 | 110,-1,677.308,150.853,60.913,138.322,0.987526,-1,-1,-1 487 | 110,-1,625.181,111.598,49.692,191.489,0.973644,-1,-1,-1 488 | 110,-1,785.6,151.634,47.642,112.398,0.970089,-1,-1,-1 489 | 111,-1,1129.54,142.019,93.46,226.981,0.995785,-1,-1,-1 490 | 111,-1,692.915,161.959,44.773,130.261,0.988051,-1,-1,-1 491 | 111,-1,790.486,157.113,43.538,108.975,0.982624,-1,-1,-1 492 | 111,-1,627.937,135.306,60.29,166.353,0.963975,-1,-1,-1 493 | 112,-1,630.164,131.159,53.623,169.017,0.991356,-1,-1,-1 494 | 112,-1,698.249,137.993,55.877,161.09,0.984513,-1,-1,-1 495 | 112,-1,798.254,163.46,53.441,98.108,0.976576,-1,-1,-1 496 | 112,-1,1167.94,157.928,55.06,210.979,0.925301,-1,-1,-1 497 | 113,-1,637.84,131.513,48.163,177.381,0.991551,-1,-1,-1 498 | 113,-1,700.489,144.07,48.709,164.994,0.978426,-1,-1,-1 499 | 113,-1,797.573,161.918,58.172,106.175,0.974386,-1,-1,-1 500 | 114,-1,639.605,133.079,60.9,181.195,0.972864,-1,-1,-1 501 | 114,-1,814.559,153.894,49.816,126.543,0.969086,-1,-1,-1 502 | 114,-1,704.659,135.858,59.785,175.838,0.964789,-1,-1,-1 503 | 115,-1,711.291,145.477,54.692,166.436,0.990968,-1,-1,-1 504 | 115,-1,640.967,115.534,63.166,198.435,0.983963,-1,-1,-1 505 | 115,-1,812.131,151.877,53.792,116.252,0.98247,-1,-1,-1 506 | 116,-1,827.835,156.064,49.489,123.557,0.988564,-1,-1,-1 507 | 116,-1,706.171,145.507,60.719,173.347,0.985844,-1,-1,-1 508 | 116,-1,634.835,138.404,72.079,166.047,0.979988,-1,-1,-1 509 | 117,-1,645.506,142.435,67.591,167.308,0.988588,-1,-1,-1 510 | 117,-1,832.702,158.722,45.769,110.149,0.983729,-1,-1,-1 511 | 117,-1,719.002,153.655,67.812,173.689,0.978206,-1,-1,-1 512 | 118,-1,652.121,135.337,65.374,180.296,0.988726,-1,-1,-1 513 | 118,-1,847.791,164.866,51.047,102.929,0.988388,-1,-1,-1 514 | 118,-1,723.581,150.938,53.047,168.118,0.988311,-1,-1,-1 515 | 119,-1,848.717,158.054,50.357,131.655,0.98802,-1,-1,-1 516 | 119,-1,733.021,144.89,51.132,187.974,0.9879,-1,-1,-1 517 | 119,-1,660.609,130.77,57.717,210.327,0.98725,-1,-1,-1 518 | 120,-1,662.439,126.709,62.992,190.127,0.981553,-1,-1,-1 519 | 120,-1,852.672,144.98,56.455,153.948,0.978729,-1,-1,-1 520 | 120,-1,732.789,153.765,57.051,180.235,0.97628,-1,-1,-1 521 | 121,-1,863.41,153.98,54.228,137.033,0.9866,-1,-1,-1 522 | 121,-1,667.177,131.238,56.334,195.032,0.97746,-1,-1,-1 523 | 121,-1,738.285,145.599,58.638,191.521,0.977047,-1,-1,-1 524 | 122,-1,870.015,156.14,75.307,139.005,0.990668,-1,-1,-1 525 | 122,-1,743.049,149.082,55.836,189.255,0.988898,-1,-1,-1 526 | 122,-1,675.199,125.674,64.587,208.172,0.977401,-1,-1,-1 527 | 123,-1,752.569,154.044,61.706,188.859,0.986982,-1,-1,-1 528 | 123,-1,888.707,155.697,57.407,131.114,0.984583,-1,-1,-1 529 | 123,-1,674.257,144.151,65.664,190.443,0.971462,-1,-1,-1 530 | 124,-1,752.98,150.031,58.484,202.161,0.99103,-1,-1,-1 531 | 124,-1,688.34,126.331,56.142,221.724,0.980714,-1,-1,-1 532 | 124,-1,900.027,157.211,58.667,154.468,0.979578,-1,-1,-1 533 | 125,-1,691.745,133.87,74.414,217.028,0.99139,-1,-1,-1 534 | 125,-1,760.021,153.074,77.918,203.824,0.990494,-1,-1,-1 535 | 125,-1,900.838,159.354,74.1,146.94,0.982236,-1,-1,-1 536 | 126,-1,776.685,159.948,59.627,195.368,0.989655,-1,-1,-1 537 | 126,-1,927.549,156.346,46.07,163.923,0.987393,-1,-1,-1 538 | 126,-1,696.101,117.967,75.882,224.789,0.971032,-1,-1,-1 539 | 127,-1,775.15,163.176,70.186,201.061,0.99064,-1,-1,-1 540 | 127,-1,932.887,148.146,61.753,158.286,0.988912,-1,-1,-1 541 | 127,-1,699.253,148.368,89.608,193.98,0.987366,-1,-1,-1 542 | 128,-1,711.36,120.749,69.828,243.254,0.994068,-1,-1,-1 543 | 128,-1,792.175,160.581,73.244,193.721,0.989942,-1,-1,-1 544 | 128,-1,941.561,159.984,71.569,150.851,0.988087,-1,-1,-1 545 | 129,-1,789.472,163.836,71.088,202.161,0.994044,-1,-1,-1 546 | 129,-1,707.035,119.434,83.717,244.868,0.99294,-1,-1,-1 547 | 129,-1,957.599,154.005,64.071,171.105,0.990424,-1,-1,-1 548 | 130,-1,805.025,163.985,64.13,205.015,0.995356,-1,-1,-1 549 | 130,-1,975.555,158.933,55.525,140.852,0.986612,-1,-1,-1 550 | 130,-1,730.829,131.91,70.146,225.39,0.984378,-1,-1,-1 551 | 131,-1,976.5,148.328,70.7,174.846,0.995624,-1,-1,-1 552 | 131,-1,808.432,156.127,69.884,212.873,0.993558,-1,-1,-1 553 | 131,-1,731.126,128.042,75.908,230.596,0.990217,-1,-1,-1 554 | 132,-1,823.697,157.175,68.286,211.825,0.994272,-1,-1,-1 555 | 132,-1,987.198,153.35,87.712,153.783,0.993616,-1,-1,-1 556 | 132,-1,737.791,119.346,78.64,249.654,0.990758,-1,-1,-1 557 | 133,-1,750.6,132.092,80.748,236.908,0.996865,-1,-1,-1 558 | 133,-1,997.755,153.216,88.415,183.16,0.99401,-1,-1,-1 559 | 133,-1,823.344,155.124,103.279,212.404,0.993695,-1,-1,-1 560 | 134,-1,757.384,118.975,87.457,250.025,0.995278,-1,-1,-1 561 | 134,-1,844.412,163.445,85.025,205.555,0.99485,-1,-1,-1 562 | 134,-1,1034.73,158.359,68.25,148.558,0.971422,-1,-1,-1 563 | 135,-1,860.56,153.496,100.413,215.235,0.995368,-1,-1,-1 564 | 135,-1,775.125,137.638,82.854,226.482,0.994246,-1,-1,-1 565 | 135,-1,1040.89,154.383,69.76,182.547,0.977356,-1,-1,-1 566 | 136,-1,878.021,156.356,79.014,200.085,0.997339,-1,-1,-1 567 | 136,-1,780.665,122.728,95.617,237.771,0.996334,-1,-1,-1 568 | 136,-1,1052.81,158.194,85.66,150.904,0.99268,-1,-1,-1 569 | 137,-1,781.629,136.669,88.33,231.726,0.996705,-1,-1,-1 570 | 137,-1,894.631,161.582,80.705,201.005,0.994971,-1,-1,-1 571 | 137,-1,1079.33,169.051,68.23,131.286,0.984561,-1,-1,-1 572 | 138,-1,770.678,131.603,117.404,230.73,0.997497,-1,-1,-1 573 | 138,-1,922.204,160.247,61.452,206.543,0.996467,-1,-1,-1 574 | 138,-1,1090.86,156.437,76.7,190.165,0.993924,-1,-1,-1 575 | 139,-1,926.768,164.4,82.932,191.865,0.997593,-1,-1,-1 576 | 139,-1,772.353,117.656,152.962,251.344,0.996666,-1,-1,-1 577 | 139,-1,1114.6,147.474,78.67,203.087,0.990613,-1,-1,-1 578 | 140,-1,805.743,107.966,99.805,255.522,0.996183,-1,-1,-1 579 | 140,-1,932.781,167.755,108.129,192.497,0.99568,-1,-1,-1 580 | 140,-1,1121,151.023,94.06,175.061,0.993705,-1,-1,-1 581 | 141,-1,955.251,166.473,117.489,202.302,0.998231,-1,-1,-1 582 | 141,-1,817.565,100.061,119.05,268.939,0.998025,-1,-1,-1 583 | 141,-1,1139.55,160.503,83.45,170.559,0.991625,-1,-1,-1 584 | 142,-1,988.013,157,97.847,209.636,0.996576,-1,-1,-1 585 | 142,-1,841.185,110.382,114.048,258.618,0.995297,-1,-1,-1 586 | 142,-1,1172.14,146.151,50.86,174.271,0.976974,-1,-1,-1 587 | 143,-1,861.648,119.426,103.946,249.574,0.998594,-1,-1,-1 588 | 143,-1,1008.64,152.233,102.2,216.767,0.998092,-1,-1,-1 589 | 144,-1,882.772,119.686,118.038,249.314,0.997924,-1,-1,-1 590 | 144,-1,1046.74,164.052,111.32,204.948,0.997535,-1,-1,-1 591 | 145,-1,904.717,101.387,120.923,267.613,0.998596,-1,-1,-1 592 | 145,-1,1084.97,149.669,109.72,219.331,0.994309,-1,-1,-1 593 | -------------------------------------------------------------------------------- /data/TUD-Campus/det.txt: -------------------------------------------------------------------------------- 1 | 1,-1,281.931,187.466,79.93,209.537,0.997784,-1,-1,-1 2 | 1,-1,56.6878,144.225,93.5572,295.907,0.997601,-1,-1,-1 3 | 1,-1,378.618,188.922,166.431,234.127,0.995973,-1,-1,-1 4 | 1,-1,203.983,207.153,45.553,133.834,0.985409,-1,-1,-1 5 | 1,-1,155.331,202.131,56.161,161.993,0.94249,-1,-1,-1 6 | 1,-1,136.718,190.031,41.27,176.146,0.852382,-1,-1,-1 7 | 2,-1,269.796,197.997,88.397,193.976,0.997721,-1,-1,-1 8 | 2,-1,56.5504,144.96,98.9106,303.352,0.997179,-1,-1,-1 9 | 2,-1,401.402,172.071,144.295,258.762,0.994948,-1,-1,-1 10 | 2,-1,167.374,227.424,51.28,131.007,0.9619,-1,-1,-1 11 | 2,-1,216.511,210.273,36.69,136.403,0.938671,-1,-1,-1 12 | 2,-1,147.794,204.774,39.482,159.201,0.838842,-1,-1,-1 13 | 3,-1,64.7874,157.4,108.544,283.358,0.997287,-1,-1,-1 14 | 3,-1,268.043,184.128,72.475,201.941,0.995447,-1,-1,-1 15 | 3,-1,416.857,161.232,120.985,266.794,0.993389,-1,-1,-1 16 | 3,-1,171.6,215.795,53.846,142.888,0.962757,-1,-1,-1 17 | 3,-1,215.405,195.66,44.924,150.998,0.949537,-1,-1,-1 18 | 3,-1,140.357,194.457,51.476,168.939,0.847853,-1,-1,-1 19 | 4,-1,420.791,164.003,129.139,270.287,0.996617,-1,-1,-1 20 | 4,-1,262.994,195.135,78.454,199.697,0.995761,-1,-1,-1 21 | 4,-1,61.256,150.2,126.576,301.18,0.995554,-1,-1,-1 22 | 4,-1,175.208,208.079,55.479,155.254,0.974032,-1,-1,-1 23 | 4,-1,224.823,211.013,38.287,134.287,0.941396,-1,-1,-1 24 | 4,-1,155.668,205.692,38.399,144.88,0.507287,-1,-1,-1 25 | 5,-1,434.105,159.018,124.947,275.907,0.995753,-1,-1,-1 26 | 5,-1,262.358,188.535,72.352,193.758,0.992384,-1,-1,-1 27 | 5,-1,64.7231,153.427,160.571,274.242,0.98755,-1,-1,-1 28 | 5,-1,228.192,212.353,42.889,135.124,0.980498,-1,-1,-1 29 | 5,-1,180.333,213.121,55.575,149.266,0.953667,-1,-1,-1 30 | 5,-1,106.094,162.331,69.714,178.466,0.667354,-1,-1,-1 31 | 6,-1,256.331,179.604,59.298,204.445,0.996394,-1,-1,-1 32 | 6,-1,441.627,174.493,107.1,250.987,0.992144,-1,-1,-1 33 | 6,-1,65.5473,164.478,162.939,280.467,0.989228,-1,-1,-1 34 | 6,-1,177.409,216.893,54.008,144.582,0.967242,-1,-1,-1 35 | 6,-1,235.833,203.613,40.113,145.399,0.945697,-1,-1,-1 36 | 6,-1,109.369,166.868,67.014,158.526,0.759937,-1,-1,-1 37 | 6,-1,66.6542,214.755,29.3487,49.62,0.630435,-1,-1,-1 38 | 6,-1,191.531,202.875,35.481,68.687,0.503938,-1,-1,-1 39 | 7,-1,449.201,163.894,108.957,269.857,0.998049,-1,-1,-1 40 | 7,-1,241.314,190.42,70.324,180.613,0.996652,-1,-1,-1 41 | 7,-1,71.6031,153.772,175.283,289.433,0.98706,-1,-1,-1 42 | 7,-1,185.659,234.378,53.154,120.168,0.954696,-1,-1,-1 43 | 7,-1,66.5255,212.778,30.7028,46.31,0.685141,-1,-1,-1 44 | 7,-1,115.778,166.117,72.839,177.268,0.591923,-1,-1,-1 45 | 8,-1,466.104,166.858,89.57,275.851,0.998298,-1,-1,-1 46 | 8,-1,244.407,174.561,61.66,215.743,0.996497,-1,-1,-1 47 | 8,-1,123.427,159.24,113.798,285.445,0.975059,-1,-1,-1 48 | 8,-1,201.122,217.371,44.858,143.165,0.950049,-1,-1,-1 49 | 9,-1,239.97,175.491,67.681,214.437,0.997788,-1,-1,-1 50 | 9,-1,470.983,158.791,86.855,266.716,0.994853,-1,-1,-1 51 | 9,-1,138.14,165.274,68.402,247.789,0.972396,-1,-1,-1 52 | 9,-1,209.038,223.205,29.442,123.454,0.699889,-1,-1,-1 53 | 10,-1,490.458,161.539,77.997,272.003,0.998887,-1,-1,-1 54 | 10,-1,227.859,180.966,80.777,208.864,0.997242,-1,-1,-1 55 | 10,-1,138.814,172.908,68.877,206.49,0.966586,-1,-1,-1 56 | 10,-1,207.795,207.341,32.676,156.651,0.771827,-1,-1,-1 57 | 11,-1,485.049,150.469,93.195,280.504,0.998951,-1,-1,-1 58 | 11,-1,218.328,194.324,90.187,191.6,0.991807,-1,-1,-1 59 | 11,-1,143.84,176.397,107.48,277.711,0.972094,-1,-1,-1 60 | 12,-1,492.869,156.645,94.179,276.098,0.999452,-1,-1,-1 61 | 12,-1,215.533,183.073,92.781,198.548,0.984114,-1,-1,-1 62 | 12,-1,154.816,151.072,92.624,290.63,0.9755,-1,-1,-1 63 | 13,-1,500.126,158.829,100.546,268.676,0.999186,-1,-1,-1 64 | 13,-1,161.066,145.736,103.624,302.782,0.993706,-1,-1,-1 65 | 13,-1,219.123,195.168,83.008,187.473,0.963507,-1,-1,-1 66 | 13,-1,268.418,207.036,43.63,109.807,0.769279,-1,-1,-1 67 | 14,-1,498.52,159.536,111.217,272.538,0.999149,-1,-1,-1 68 | 14,-1,159.829,138.46,138.931,303.042,0.997235,-1,-1,-1 69 | 14,-1,269.55,200.441,54.047,121.106,0.897891,-1,-1,-1 70 | 15,-1,176.066,149.162,106.475,296.273,0.996929,-1,-1,-1 71 | 15,-1,508.997,161.941,106.668,264.479,0.996709,-1,-1,-1 72 | 15,-1,279.589,206.513,47.986,132.068,0.991513,-1,-1,-1 73 | 16,-1,170.94,146.702,113.853,304.278,0.998414,-1,-1,-1 74 | 16,-1,510.357,169.143,113.596,261.805,0.997883,-1,-1,-1 75 | 16,-1,285.279,205.905,45.787,143.008,0.996877,-1,-1,-1 76 | 17,-1,513.378,168.154,113.737,270.782,0.998034,-1,-1,-1 77 | 17,-1,184.011,153.317,104.895,296.457,0.995869,-1,-1,-1 78 | 17,-1,284.166,201.934,62.379,141.058,0.917349,-1,-1,-1 79 | 18,-1,530.124,159.648,97.181,270.254,0.998161,-1,-1,-1 80 | 18,-1,295.778,203.537,48.616,138.326,0.990652,-1,-1,-1 81 | 18,-1,175.285,164.298,126.35,293.944,0.990241,-1,-1,-1 82 | 18,-1,173.823,181.474,53.406,209.544,0.620964,-1,-1,-1 83 | 18,-1,176.192,183.025,33.304,57.645,0.511746,-1,-1,-1 84 | 19,-1,539.591,153.148,99.409,281.173,0.997805,-1,-1,-1 85 | 19,-1,293.45,203.179,47.587,141.418,0.995965,-1,-1,-1 86 | 19,-1,189.64,154.469,116.908,306.153,0.988479,-1,-1,-1 87 | 19,-1,175.494,164.273,50.129,258.199,0.945116,-1,-1,-1 88 | 20,-1,537.547,161.26,100.558,263.552,0.994915,-1,-1,-1 89 | 20,-1,297.768,202.796,51.127,149.988,0.989496,-1,-1,-1 90 | 20,-1,165.673,178.039,55.952,215.088,0.979027,-1,-1,-1 91 | 20,-1,206.196,177.082,129.84,261.294,0.936912,-1,-1,-1 92 | 21,-1,161.149,174.498,65.619,210.752,0.993418,-1,-1,-1 93 | 21,-1,556.184,154.678,82.615,271.203,0.992796,-1,-1,-1 94 | 21,-1,308.105,214.424,51.618,137.41,0.982397,-1,-1,-1 95 | 21,-1,213.057,154.815,123.969,280.088,0.960469,-1,-1,-1 96 | 21,-1,0.304614,179.233,31.4182,114.456,0.783707,-1,-1,-1 97 | 21,-1,244.278,171.333,60.159,155.079,0.54348,-1,-1,-1 98 | 22,-1,149.979,174.619,70.719,217.891,0.994828,-1,-1,-1 99 | 22,-1,568.422,149.768,70.404,280.913,0.99077,-1,-1,-1 100 | 22,-1,207.229,176.429,158.534,273.265,0.963839,-1,-1,-1 101 | 22,-1,309.637,204.845,58.803,147.657,0.953732,-1,-1,-1 102 | 22,-1,0.341978,190.728,33.2533,118.414,0.598427,-1,-1,-1 103 | 23,-1,146.211,174.943,55.788,218.104,0.996437,-1,-1,-1 104 | 23,-1,222.515,166.049,146.811,285.421,0.984833,-1,-1,-1 105 | 23,-1,578.631,161.57,60.369,250.513,0.978597,-1,-1,-1 106 | 23,-1,315.149,211.57,51.41,139.016,0.82101,-1,-1,-1 107 | 23,-1,0,176.548,42.4124,182.788,0.807631,-1,-1,-1 108 | 23,-1,219.189,187.387,50.953,185.493,0.752326,-1,-1,-1 109 | 23,-1,232.408,190.999,35.075,77.37,0.665798,-1,-1,-1 110 | 23,-1,261.824,164.744,60.731,170.644,0.51734,-1,-1,-1 111 | 24,-1,120.94,168.093,92.762,217.972,0.997513,-1,-1,-1 112 | 24,-1,0,173.036,43.4966,249.438,0.995833,-1,-1,-1 113 | 24,-1,235.088,172.725,134.61,283.122,0.979642,-1,-1,-1 114 | 24,-1,587.703,167.199,49.034,194.509,0.83355,-1,-1,-1 115 | 24,-1,319.567,206.801,56.567,143.125,0.78107,-1,-1,-1 116 | 24,-1,237.824,193.942,33.006,63.059,0.745167,-1,-1,-1 117 | 24,-1,235.658,188.323,54.974,174.589,0.727878,-1,-1,-1 118 | 25,-1,128.08,175.868,78.991,217.391,0.998783,-1,-1,-1 119 | 25,-1,0,169.779,43.5329,264.267,0.991916,-1,-1,-1 120 | 25,-1,250.778,175.454,116.797,283.193,0.986607,-1,-1,-1 121 | 25,-1,594.308,164.484,41.633,165.173,0.924312,-1,-1,-1 122 | 25,-1,234.409,188.491,54.891,165.937,0.855918,-1,-1,-1 123 | 26,-1,117.979,169.148,91.506,231.195,0.996416,-1,-1,-1 124 | 26,-1,276.085,156.999,95.43,306.726,0.968984,-1,-1,-1 125 | 26,-1,598.229,166.819,40.771,140.663,0.937105,-1,-1,-1 126 | 26,-1,1.06226,162.698,48.8197,271.442,0.912433,-1,-1,-1 127 | 26,-1,246.053,185.637,44.164,91.566,0.899592,-1,-1,-1 128 | 27,-1,108.448,165.674,98.093,234.206,0.994798,-1,-1,-1 129 | 27,-1,1.2024,171.061,56.0132,267.714,0.972926,-1,-1,-1 130 | 27,-1,246.001,183.637,38.364,83.74,0.953834,-1,-1,-1 131 | 27,-1,297.584,158.02,72.841,298.984,0.901405,-1,-1,-1 132 | 27,-1,336.948,191.12,41.86,147.378,0.703058,-1,-1,-1 133 | 27,-1,207.225,251.565,106.188,107.56,0.541628,-1,-1,-1 134 | 28,-1,291.291,153.979,98.554,297.327,0.998769,-1,-1,-1 135 | 28,-1,2.65334,159.343,61.8022,270.842,0.996074,-1,-1,-1 136 | 28,-1,94.5332,160.062,106.569,229.124,0.994916,-1,-1,-1 137 | 28,-1,247.908,189.303,39.771,84.326,0.933535,-1,-1,-1 138 | 28,-1,240.511,202.438,58.227,156.799,0.892174,-1,-1,-1 139 | 29,-1,101.896,173.046,87.353,220.152,0.997026,-1,-1,-1 140 | 29,-1,3.57357,167.182,64.3818,267.084,0.996989,-1,-1,-1 141 | 29,-1,296.408,158.99,106.304,292.102,0.99595,-1,-1,-1 142 | 29,-1,233.094,235.938,81.058,127.304,0.978826,-1,-1,-1 143 | 29,-1,252.648,188.081,36.313,92.516,0.904551,-1,-1,-1 144 | 29,-1,282.918,197.294,31.465,90.84,0.533393,-1,-1,-1 145 | 30,-1,1.61432,165.358,84.5202,255.67,0.998407,-1,-1,-1 146 | 30,-1,84.9715,180.201,104.1,212.34,0.998033,-1,-1,-1 147 | 30,-1,298.765,156.522,107.762,287.927,0.997607,-1,-1,-1 148 | 30,-1,236.902,204.371,84.73,166.47,0.990803,-1,-1,-1 149 | 30,-1,260.489,193.295,34.741,76.84,0.96136,-1,-1,-1 150 | 30,-1,278.973,197.55,33.14,94.402,0.677042,-1,-1,-1 151 | 31,-1,298.533,164.243,120.345,292.144,0.997004,-1,-1,-1 152 | 31,-1,6.69603,168.509,77.3386,263.077,0.996586,-1,-1,-1 153 | 31,-1,79.7971,174.973,79.5639,225.656,0.995564,-1,-1,-1 154 | 31,-1,231.819,229.285,87.389,137.682,0.979197,-1,-1,-1 155 | 31,-1,261.922,194.421,30.702,78.838,0.950692,-1,-1,-1 156 | 31,-1,283.286,199.73,32.218,93.717,0.745606,-1,-1,-1 157 | 32,-1,78.4941,173.295,61.6979,232.272,0.997013,-1,-1,-1 158 | 32,-1,295.536,139.07,152.022,330.774,0.996519,-1,-1,-1 159 | 32,-1,254.08,191.101,64.058,175.491,0.99565,-1,-1,-1 160 | 32,-1,7.2247,179.15,87.1761,243.362,0.993169,-1,-1,-1 161 | 32,-1,263.553,198.501,36.144,79.56,0.916442,-1,-1,-1 162 | 32,-1,290.027,197.628,29.77,70.223,0.657551,-1,-1,-1 163 | 33,-1,301.642,154.963,146.467,301.105,0.997569,-1,-1,-1 164 | 33,-1,61.8175,184.27,93.2045,228.139,0.993515,-1,-1,-1 165 | 33,-1,256.862,197.953,63.877,165.937,0.990806,-1,-1,-1 166 | 33,-1,6.817,172.187,102.811,259.631,0.988907,-1,-1,-1 167 | 34,-1,325.309,158.45,131.699,301.195,0.996419,-1,-1,-1 168 | 34,-1,14.2686,186.743,129.69,228.132,0.996388,-1,-1,-1 169 | 34,-1,253.285,199.615,91.692,152.105,0.993194,-1,-1,-1 170 | 35,-1,326.76,168.898,131.84,291.788,0.995634,-1,-1,-1 171 | 35,-1,21.7875,178.825,112.406,249.32,0.992658,-1,-1,-1 172 | 35,-1,271.246,205.494,58.332,142.633,0.990056,-1,-1,-1 173 | 35,-1,181.266,202.465,28.409,45.086,0.573162,-1,-1,-1 174 | 36,-1,272.934,194.701,65.744,165.553,0.993505,-1,-1,-1 175 | 36,-1,345.346,160.774,125.408,302.775,0.99231,-1,-1,-1 176 | 36,-1,18.1651,183.853,125.926,246.998,0.991854,-1,-1,-1 177 | 36,-1,179.21,201.164,31.26,47.609,0.571801,-1,-1,-1 178 | 37,-1,278.425,192.768,67.382,165.509,0.996993,-1,-1,-1 179 | 37,-1,29.4217,189.89,100.517,225.353,0.993843,-1,-1,-1 180 | 37,-1,369.038,153.962,106.275,311.762,0.987658,-1,-1,-1 181 | 37,-1,26.3468,163.22,78.3662,122.548,0.604894,-1,-1,-1 182 | 38,-1,284.714,184.991,64.88,189.809,0.998419,-1,-1,-1 183 | 38,-1,375.979,155.153,113.622,316.029,0.996165,-1,-1,-1 184 | 38,-1,31.2307,153.131,92.2403,276.115,0.991285,-1,-1,-1 185 | 38,-1,34.3067,166.579,68.0333,86.014,0.588207,-1,-1,-1 186 | 39,-1,288.115,181.843,63.887,184.699,0.9978,-1,-1,-1 187 | 39,-1,33.9692,160.57,103.549,265.974,0.991199,-1,-1,-1 188 | 39,-1,390.001,138.03,95.184,327.333,0.983115,-1,-1,-1 189 | 40,-1,407.878,143.926,88.163,316.579,0.996842,-1,-1,-1 190 | 40,-1,16.4275,151.833,117.767,279.303,0.995886,-1,-1,-1 191 | 40,-1,289.984,192.418,69.409,175.954,0.995138,-1,-1,-1 192 | 40,-1,93.1497,170.342,52.8303,179.169,0.614041,-1,-1,-1 193 | 41,-1,400.443,139.002,99.102,320.273,0.997364,-1,-1,-1 194 | 41,-1,11.568,154.639,111.837,265.703,0.994788,-1,-1,-1 195 | 41,-1,304.011,198.958,52.204,145.665,0.990437,-1,-1,-1 196 | 41,-1,89.3375,172.641,59.3485,244.464,0.943441,-1,-1,-1 197 | 42,-1,412.382,147.176,102.682,311.293,0.998236,-1,-1,-1 198 | 42,-1,2.57338,158.935,114.21,265.946,0.997482,-1,-1,-1 199 | 42,-1,296.445,192.45,74.149,181.024,0.996432,-1,-1,-1 200 | 42,-1,92.0947,175.231,65.1163,239.653,0.963116,-1,-1,-1 201 | 43,-1,416.788,152.405,111.552,296.599,0.998226,-1,-1,-1 202 | 43,-1,4.08447,161.158,100.633,245.684,0.998079,-1,-1,-1 203 | 43,-1,303.764,192.901,73.902,182.642,0.997738,-1,-1,-1 204 | 43,-1,93.651,170.653,86.766,246.614,0.939239,-1,-1,-1 205 | 44,-1,419.964,135.649,114.734,330.791,0.998119,-1,-1,-1 206 | 44,-1,1.53414,174.309,82.6401,236.213,0.997731,-1,-1,-1 207 | 44,-1,303.117,205.545,80.945,155.834,0.996518,-1,-1,-1 208 | 44,-1,102.629,159.039,87.582,270.84,0.995254,-1,-1,-1 209 | 45,-1,1.67256,163.401,79.9973,247.567,0.998111,-1,-1,-1 210 | 45,-1,106.874,182.181,98.855,242.721,0.997768,-1,-1,-1 211 | 45,-1,418.572,147.323,118.812,313.66,0.997332,-1,-1,-1 212 | 45,-1,305.236,192.174,77.17,182.94,0.99676,-1,-1,-1 213 | 45,-1,148.706,177.068,54.11,104.433,0.760432,-1,-1,-1 214 | 46,-1,105.945,168.679,99.697,262.231,0.998493,-1,-1,-1 215 | 46,-1,305.053,195.14,76.231,174.384,0.997502,-1,-1,-1 216 | 46,-1,2.10851,158.744,69.3669,266.687,0.994696,-1,-1,-1 217 | 46,-1,424.021,133.457,130.946,319.476,0.994492,-1,-1,-1 218 | 47,-1,310.933,191.254,80.899,177.009,0.997615,-1,-1,-1 219 | 47,-1,111.517,160.711,107.784,261.454,0.997252,-1,-1,-1 220 | 47,-1,425.51,137.56,145.968,320.383,0.990545,-1,-1,-1 221 | 47,-1,0.395605,167.023,51.7516,201.432,0.962598,-1,-1,-1 222 | 48,-1,313.601,192.976,89.252,168.073,0.997545,-1,-1,-1 223 | 48,-1,435.931,138.466,148.324,330.787,0.993456,-1,-1,-1 224 | 48,-1,120.926,179.105,118.257,244.923,0.991124,-1,-1,-1 225 | 48,-1,0,173.276,42.6584,153.81,0.826132,-1,-1,-1 226 | 49,-1,318.534,206.975,75.493,154.623,0.994457,-1,-1,-1 227 | 49,-1,132.966,178.61,103.994,251.826,0.993245,-1,-1,-1 228 | 49,-1,438.767,151.366,138.48,308.437,0.991756,-1,-1,-1 229 | 49,-1,0.573276,184.988,30.2769,88.303,0.730952,-1,-1,-1 230 | 49,-1,454.513,200.934,55.726,141.052,0.614578,-1,-1,-1 231 | 50,-1,130.185,180.243,115.309,251.223,0.995544,-1,-1,-1 232 | 50,-1,452.875,159,133.895,302.181,0.994177,-1,-1,-1 233 | 50,-1,319.953,197.972,76.386,165.975,0.993406,-1,-1,-1 234 | 50,-1,465.487,207.47,55.95,145.202,0.842629,-1,-1,-1 235 | 51,-1,322.557,200.138,86.385,163.409,0.99487,-1,-1,-1 236 | 51,-1,458.495,152.945,143.977,307.623,0.973867,-1,-1,-1 237 | 51,-1,140.506,182.978,115.96,250.359,0.964487,-1,-1,-1 238 | 52,-1,334.544,200.407,85.245,171.222,0.996382,-1,-1,-1 239 | 52,-1,478.914,160.765,125.731,310.963,0.982917,-1,-1,-1 240 | 52,-1,164.951,186.157,95.672,240.461,0.945487,-1,-1,-1 241 | 52,-1,473.932,221.486,35.998,120.086,0.809936,-1,-1,-1 242 | 53,-1,333.684,203.933,81.051,164.82,0.993741,-1,-1,-1 243 | 53,-1,491.371,151.248,116.711,315.818,0.984342,-1,-1,-1 244 | 53,-1,173.8,178.639,89.222,139.368,0.978852,-1,-1,-1 245 | 53,-1,472.441,212.116,53.277,131.418,0.971175,-1,-1,-1 246 | 54,-1,346.089,191.553,71.768,174.547,0.988951,-1,-1,-1 247 | 54,-1,186.549,177.229,86.583,256.933,0.983098,-1,-1,-1 248 | 54,-1,496.234,157.59,122.11,301.835,0.97932,-1,-1,-1 249 | 54,-1,476.85,205.448,53.569,147.936,0.96676,-1,-1,-1 250 | 55,-1,512.724,142.999,115.03,318.323,0.995673,-1,-1,-1 251 | 55,-1,352.578,192.958,67.676,174.749,0.994056,-1,-1,-1 252 | 55,-1,193.69,184.511,78.22,253.339,0.987409,-1,-1,-1 253 | 55,-1,482.192,207.135,58.97,140.33,0.896179,-1,-1,-1 254 | 56,-1,197.877,171.213,93.298,252.52,0.999236,-1,-1,-1 255 | 56,-1,524.343,146.264,100.813,305.775,0.996306,-1,-1,-1 256 | 56,-1,353.16,201.659,63.97,146.763,0.988969,-1,-1,-1 257 | 56,-1,391.168,216.634,46.996,145.888,0.827745,-1,-1,-1 258 | 56,-1,485.683,208.17,86.652,147.703,0.661032,-1,-1,-1 259 | 57,-1,207.491,171.448,87.525,250.375,0.998257,-1,-1,-1 260 | 57,-1,526.406,151.83,107.909,308.497,0.997857,-1,-1,-1 261 | 57,-1,359.461,203.402,72.526,160.5,0.993262,-1,-1,-1 262 | 57,-1,488.928,209.988,83.074,142.147,0.754082,-1,-1,-1 263 | 58,-1,537.477,160.348,101.523,297.272,0.997085,-1,-1,-1 264 | 58,-1,207.834,169.808,105.124,254.892,0.996057,-1,-1,-1 265 | 58,-1,362.254,202.414,74.495,171.838,0.994832,-1,-1,-1 266 | 58,-1,494.682,212.734,72.417,139.282,0.815401,-1,-1,-1 267 | 59,-1,368.487,194.141,70.57,173.377,0.997523,-1,-1,-1 268 | 59,-1,551.123,145.261,85.155,311.827,0.996532,-1,-1,-1 269 | 59,-1,210.975,179.613,129.481,244.193,0.995308,-1,-1,-1 270 | 59,-1,495.879,223.886,70.621,137.252,0.935703,-1,-1,-1 271 | 60,-1,221.927,177.682,137.949,244.241,0.996689,-1,-1,-1 272 | 60,-1,365.071,200.737,82.778,171.595,0.99539,-1,-1,-1 273 | 60,-1,538.359,156.408,100.641,312.892,0.99308,-1,-1,-1 274 | 60,-1,507.234,219.557,60.747,134.32,0.835582,-1,-1,-1 275 | 61,-1,222.393,185.307,143.185,241.288,0.995221,-1,-1,-1 276 | 61,-1,367.485,199.75,78.681,151.5,0.991305,-1,-1,-1 277 | 61,-1,534.125,152.785,104.875,319.12,0.963246,-1,-1,-1 278 | 61,-1,576.377,184.333,49.141,190.192,0.655385,-1,-1,-1 279 | 61,-1,516.42,215.457,61.031,135.829,0.56515,-1,-1,-1 280 | 61,-1,419.678,203.381,33.259,140.307,0.542471,-1,-1,-1 281 | 62,-1,226.414,191.655,136.172,244.242,0.99621,-1,-1,-1 282 | 62,-1,371.399,204.638,73.482,160.841,0.995558,-1,-1,-1 283 | 62,-1,544.485,176.05,94.515,286.094,0.991782,-1,-1,-1 284 | 62,-1,517.609,203.262,57.069,140.613,0.9687,-1,-1,-1 285 | 62,-1,418.844,208.81,43.851,146.545,0.914553,-1,-1,-1 286 | 63,-1,249.48,182.113,113.83,252.98,0.998128,-1,-1,-1 287 | 63,-1,389.089,199.35,65.642,178.314,0.986921,-1,-1,-1 288 | 63,-1,532.68,202.899,49.574,142.749,0.986447,-1,-1,-1 289 | 63,-1,540.482,187.889,96.022,269.676,0.960656,-1,-1,-1 290 | 63,-1,592.438,210.12,37.023,134.644,0.888554,-1,-1,-1 291 | 64,-1,275.435,173.969,91.126,265.116,0.995931,-1,-1,-1 292 | 64,-1,383.635,200.812,65.029,161.449,0.99113,-1,-1,-1 293 | 64,-1,532.442,207.932,47.736,139.043,0.975959,-1,-1,-1 294 | 64,-1,423.71,208.82,39.692,138.565,0.819596,-1,-1,-1 295 | 64,-1,600.478,200.495,31.678,99.278,0.508747,-1,-1,-1 296 | 65,-1,391.67,204.976,73.277,163.219,0.997027,-1,-1,-1 297 | 65,-1,289.864,169.411,85.886,263.576,0.994629,-1,-1,-1 298 | 65,-1,535.735,209.005,49.269,139.408,0.991204,-1,-1,-1 299 | 66,-1,537.726,210.834,55.999,135.087,0.994092,-1,-1,-1 300 | 66,-1,400.242,200.479,71.843,167.368,0.989536,-1,-1,-1 301 | 66,-1,296.324,164.527,89.966,281.299,0.876203,-1,-1,-1 302 | 67,-1,549.847,219.569,46.553,128.14,0.993483,-1,-1,-1 303 | 67,-1,392.671,201.957,85.792,160.703,0.989303,-1,-1,-1 304 | 67,-1,308.794,169.16,87.247,183.762,0.85751,-1,-1,-1 305 | 67,-1,436.704,208.636,32.88,116.821,0.653179,-1,-1,-1 306 | 68,-1,549.636,217.381,58.854,137.686,0.994496,-1,-1,-1 307 | 68,-1,309.806,183.57,99.159,251.645,0.990782,-1,-1,-1 308 | 68,-1,406.915,204.189,68.436,155.128,0.984797,-1,-1,-1 309 | 68,-1,451.69,214.829,38.811,149.114,0.918864,-1,-1,-1 310 | 69,-1,554.066,227.194,57.351,118.977,0.993298,-1,-1,-1 311 | 69,-1,407.946,199.183,81.448,174.628,0.990582,-1,-1,-1 312 | 69,-1,314.189,178.561,104.102,262.096,0.989359,-1,-1,-1 313 | 70,-1,322.195,167.601,103.975,271.325,0.996437,-1,-1,-1 314 | 70,-1,407.877,192.019,77.257,184.875,0.994615,-1,-1,-1 315 | 70,-1,555.829,219.508,59.637,132.527,0.989564,-1,-1,-1 316 | 70,-1,448.859,237.861,62.513,133.123,0.807496,-1,-1,-1 317 | 70,-1,366.493,170.653,52.355,114.637,0.675409,-1,-1,-1 318 | 71,-1,324.38,189.225,107.07,243.089,0.992714,-1,-1,-1 319 | 71,-1,421.225,202.738,74.047,164.796,0.991345,-1,-1,-1 320 | 71,-1,548.108,216.599,83.053,135.563,0.977693,-1,-1,-1 321 | 71,-1,164.16,214.71,36.95,26.306,0.724231,-1,-1,-1 322 | -------------------------------------------------------------------------------- /docker_run.sh: -------------------------------------------------------------------------------- 1 | DOCKER_NAME=sort 2 | 3 | XSOCK=/tmp/.X11-unix 4 | XAUTH=/home/$USER/.Xauthority 5 | 6 | xhost + 7 | 8 | docker run \ 9 | -it --rm \ 10 | -e XAUTHORITY=${XAUTH} \ 11 | -e DISPLAY=${DISPLAY} \ 12 | -e QT_X11_NO_MITSHM=1 \ 13 | --privileged \ 14 | -v /dev/bus/usb:/dev/bus/usb \ 15 | -v /dev/video0:/dev/video0 \ 16 | -v $XSOCK:$XSOCK:rw \ 17 | -v $XAUTH:$XAUTH:rw \ 18 | -v /home/$USER:/home/$USER \ 19 | -u $(id -u ${USER}):$(id -g ${USER}) \ 20 | --name sort-cpp \ 21 | $DOCKER_NAME /bin/bash 22 | -------------------------------------------------------------------------------- /docs/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasenh/sort-cpp/1dcafbaa43513bfe8d80a18894fee829a40ba408/docs/1.png -------------------------------------------------------------------------------- /docs/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasenh/sort-cpp/1dcafbaa43513bfe8d80a18894fee829a40ba408/docs/2.png -------------------------------------------------------------------------------- /include/kalman_filter.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | // abstract class for Kalman filter 7 | // implementation could be KF/EKF/UKF... 8 | class KalmanFilter { 9 | public: 10 | /** 11 | * user need to define H matrix & R matrix 12 | * @param num_states 13 | * @param num_obs 14 | */ 15 | // constructor 16 | explicit KalmanFilter(unsigned int num_states, unsigned int num_obs); 17 | 18 | // destructor 19 | virtual ~KalmanFilter() = default; 20 | 21 | /** 22 | * Coast state and state covariance using the process model 23 | * User can use this function without change the internal 24 | * tracking state x_ 25 | */ 26 | virtual void Coast(); 27 | 28 | /** 29 | * Predict without measurement update 30 | */ 31 | void Predict(); 32 | 33 | /** 34 | * This function maps the true state space into the observed space 35 | * using the observation model 36 | * User can implement their own method for more complicated models 37 | */ 38 | virtual Eigen::VectorXd PredictionToObservation(const Eigen::VectorXd &state); 39 | 40 | /** 41 | * Updates the state by using Extended Kalman Filter equations 42 | * @param z The measurement at k+1 43 | */ 44 | virtual void Update(const Eigen::VectorXd &z); 45 | 46 | /** 47 | * Calculate marginal log-likelihood to evaluate different parameter choices 48 | */ 49 | float CalculateLogLikelihood(const Eigen::VectorXd& y, const Eigen::MatrixXd& S); 50 | 51 | // State vector 52 | Eigen::VectorXd x_, x_predict_; 53 | 54 | // Error covariance matrix 55 | Eigen::MatrixXd P_, P_predict_; 56 | 57 | // State transition matrix 58 | Eigen::MatrixXd F_; 59 | 60 | // Covariance matrix of process noise 61 | Eigen::MatrixXd Q_; 62 | 63 | // measurement matrix 64 | Eigen::MatrixXd H_; 65 | 66 | // covariance matrix of observation noise 67 | Eigen::MatrixXd R_; 68 | 69 | unsigned int num_states_, num_obs_; 70 | 71 | float log_likelihood_delta_; 72 | 73 | float NIS_; 74 | }; -------------------------------------------------------------------------------- /include/matrix.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2007 John Weaver 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program; if not, write to the Free Software 16 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 17 | */ 18 | 19 | #include "matrix.h" 20 | 21 | #include 22 | #include 23 | #include 24 | 25 | /*export*/ template 26 | Matrix::Matrix() { 27 | m_rows = 0; 28 | m_columns = 0; 29 | m_matrix = nullptr; 30 | } 31 | 32 | 33 | /*export*/ template 34 | Matrix::Matrix(const std::initializer_list> init) { 35 | m_matrix = nullptr; 36 | m_rows = init.size(); 37 | if ( m_rows == 0 ) { 38 | m_columns = 0; 39 | } else { 40 | m_columns = init.begin()->size(); 41 | if ( m_columns > 0 ) { 42 | resize(m_rows, m_columns); 43 | } 44 | } 45 | 46 | size_t i = 0, j; 47 | for ( auto row = init.begin() ; row != init.end() ; ++row, ++i ) { 48 | assert ( row->size() == m_columns && "All rows must have the same number of columns." ); 49 | j = 0; 50 | for ( auto value = row->begin() ; value != row->end() ; ++value, ++j ) { 51 | m_matrix[i][j] = *value; 52 | } 53 | } 54 | } 55 | 56 | /*export*/ template 57 | Matrix::Matrix(const Matrix &other) { 58 | if ( other.m_matrix != nullptr ) { 59 | // copy arrays 60 | m_matrix = nullptr; 61 | resize(other.m_rows, other.m_columns); 62 | for ( size_t i = 0 ; i < m_rows ; i++ ) { 63 | for ( size_t j = 0 ; j < m_columns ; j++ ) { 64 | m_matrix[i][j] = other.m_matrix[i][j]; 65 | } 66 | } 67 | } else { 68 | m_matrix = nullptr; 69 | m_rows = 0; 70 | m_columns = 0; 71 | } 72 | } 73 | 74 | /*export*/ template 75 | Matrix::Matrix(const size_t rows, const size_t columns) { 76 | m_matrix = nullptr; 77 | resize(rows, columns); 78 | } 79 | 80 | /*export*/ template 81 | Matrix & 82 | Matrix::operator= (const Matrix &other) { 83 | if ( other.m_matrix != nullptr ) { 84 | // copy arrays 85 | resize(other.m_rows, other.m_columns); 86 | for ( size_t i = 0 ; i < m_rows ; i++ ) { 87 | for ( size_t j = 0 ; j < m_columns ; j++ ) { 88 | m_matrix[i][j] = other.m_matrix[i][j]; 89 | } 90 | } 91 | } else { 92 | // free arrays 93 | for ( size_t i = 0 ; i < m_columns ; i++ ) { 94 | delete [] m_matrix[i]; 95 | } 96 | 97 | delete [] m_matrix; 98 | 99 | m_matrix = nullptr; 100 | m_rows = 0; 101 | m_columns = 0; 102 | } 103 | 104 | return *this; 105 | } 106 | 107 | /*export*/ template 108 | Matrix::~Matrix() { 109 | if ( m_matrix != nullptr ) { 110 | // free arrays 111 | for ( size_t i = 0 ; i < m_rows ; i++ ) { 112 | delete [] m_matrix[i]; 113 | } 114 | 115 | delete [] m_matrix; 116 | } 117 | m_matrix = nullptr; 118 | } 119 | 120 | /*export*/ template 121 | void 122 | Matrix::resize(const size_t rows, const size_t columns, const T default_value) { 123 | assert ( rows > 0 && columns > 0 && "Columns and rows must exist." ); 124 | 125 | if ( m_matrix == nullptr ) { 126 | // alloc arrays 127 | m_matrix = new T*[rows]; // rows 128 | for ( size_t i = 0 ; i < rows ; i++ ) { 129 | m_matrix[i] = new T[columns]; // columns 130 | } 131 | 132 | m_rows = rows; 133 | m_columns = columns; 134 | clear(); 135 | } else { 136 | // save array pointer 137 | T **new_matrix; 138 | // alloc new arrays 139 | new_matrix = new T*[rows]; // rows 140 | for ( size_t i = 0 ; i < rows ; i++ ) { 141 | new_matrix[i] = new T[columns]; // columns 142 | for ( size_t j = 0 ; j < columns ; j++ ) { 143 | new_matrix[i][j] = default_value; 144 | } 145 | } 146 | 147 | // copy data from saved pointer to new arrays 148 | size_t minrows = std::min(rows, m_rows); 149 | size_t mincols = std::min(columns, m_columns); 150 | for ( size_t x = 0 ; x < minrows ; x++ ) { 151 | for ( size_t y = 0 ; y < mincols ; y++ ) { 152 | new_matrix[x][y] = m_matrix[x][y]; 153 | } 154 | } 155 | 156 | // delete old arrays 157 | if ( m_matrix != nullptr ) { 158 | for ( size_t i = 0 ; i < m_rows ; i++ ) { 159 | delete [] m_matrix[i]; 160 | } 161 | 162 | delete [] m_matrix; 163 | } 164 | 165 | m_matrix = new_matrix; 166 | } 167 | 168 | m_rows = rows; 169 | m_columns = columns; 170 | } 171 | 172 | /*export*/ template 173 | void 174 | Matrix::clear() { 175 | assert( m_matrix != nullptr ); 176 | 177 | for ( size_t i = 0 ; i < m_rows ; i++ ) { 178 | for ( size_t j = 0 ; j < m_columns ; j++ ) { 179 | m_matrix[i][j] = 0; 180 | } 181 | } 182 | } 183 | 184 | /*export*/ template 185 | inline T& 186 | Matrix::operator ()(const size_t x, const size_t y) { 187 | assert ( x < m_rows ); 188 | assert ( y < m_columns ); 189 | assert ( m_matrix != nullptr ); 190 | return m_matrix[x][y]; 191 | } 192 | 193 | 194 | /*export*/ template 195 | inline const T& 196 | Matrix::operator ()(const size_t x, const size_t y) const { 197 | assert ( x < m_rows ); 198 | assert ( y < m_columns ); 199 | assert ( m_matrix != nullptr ); 200 | return m_matrix[x][y]; 201 | } 202 | 203 | 204 | /*export*/ template 205 | const T 206 | Matrix::min() const { 207 | assert( m_matrix != nullptr ); 208 | assert ( m_rows > 0 ); 209 | assert ( m_columns > 0 ); 210 | T min = m_matrix[0][0]; 211 | 212 | for ( size_t i = 0 ; i < m_rows ; i++ ) { 213 | for ( size_t j = 0 ; j < m_columns ; j++ ) { 214 | min = std::min(min, m_matrix[i][j]); 215 | } 216 | } 217 | 218 | return min; 219 | } 220 | 221 | 222 | /*export*/ template 223 | const T 224 | Matrix::max() const { 225 | assert( m_matrix != nullptr ); 226 | assert ( m_rows > 0 ); 227 | assert ( m_columns > 0 ); 228 | T max = m_matrix[0][0]; 229 | 230 | for ( size_t i = 0 ; i < m_rows ; i++ ) { 231 | for ( size_t j = 0 ; j < m_columns ; j++ ) { 232 | max = std::max(max, m_matrix[i][j]); 233 | } 234 | } 235 | 236 | return max; 237 | } 238 | -------------------------------------------------------------------------------- /include/matrix.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2007 John Weaver 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program; if not, write to the Free Software 16 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 17 | */ 18 | 19 | #ifndef _MATRIX_H_ 20 | #define _MATRIX_H_ 21 | 22 | #include 23 | #include 24 | #include 25 | 26 | template 27 | class Matrix { 28 | public: 29 | Matrix(); 30 | Matrix(const size_t rows, const size_t columns); 31 | Matrix(const std::initializer_list> init); 32 | Matrix(const Matrix &other); 33 | Matrix & operator= (const Matrix &other); 34 | ~Matrix(); 35 | // all operations modify the matrix in-place. 36 | void resize(const size_t rows, const size_t columns, const T default_value = 0); 37 | void clear(); 38 | T& operator () (const size_t x, const size_t y); 39 | const T& operator () (const size_t x, const size_t y) const; 40 | const T min() const; 41 | const T max() const; 42 | inline size_t minsize() { return ((m_rows < m_columns) ? m_rows : m_columns); } 43 | inline size_t columns() const { return m_columns;} 44 | inline size_t rows() const { return m_rows;} 45 | 46 | friend std::ostream& operator<<(std::ostream& os, const Matrix &matrix) 47 | { 48 | os << "Matrix:" << std::endl; 49 | for (size_t row = 0 ; row < matrix.rows() ; row++ ) 50 | { 51 | for (size_t col = 0 ; col < matrix.columns() ; col++ ) 52 | { 53 | os.width(8); 54 | os << matrix(row, col) << ","; 55 | } 56 | os << std::endl; 57 | } 58 | return os; 59 | } 60 | 61 | private: 62 | T **m_matrix; 63 | size_t m_rows; 64 | size_t m_columns; 65 | }; 66 | 67 | #ifndef USE_EXPORT_KEYWORD 68 | #include "matrix.cpp" 69 | //#define export /*export*/ 70 | #endif 71 | 72 | #endif /* !defined(_MATRIX_H_) */ 73 | 74 | -------------------------------------------------------------------------------- /include/munkres.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2007 John Weaver 3 | * Copyright (c) 2015 Miroslav Krajicek 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program; if not, write to the Free Software 17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 | */ 19 | 20 | #if !defined(_MUNKRES_H_) 21 | #define _MUNKRES_H_ 22 | 23 | #include "matrix.h" 24 | 25 | #include 26 | #include 27 | #include 28 | #include 29 | #include 30 | 31 | template class Munkres 32 | { 33 | static constexpr int NORMAL = 0; 34 | static constexpr int STAR = 1; 35 | static constexpr int PRIME = 2; 36 | public: 37 | 38 | /* 39 | * 40 | * Linear assignment problem solution 41 | * [modifies matrix in-place.] 42 | * matrix(row,col): row major format assumed. 43 | * 44 | * Assignments are remaining 0 values 45 | * (extra 0 values are replaced with -1) 46 | * 47 | */ 48 | void solve(Matrix &m) { 49 | const size_t rows = m.rows(), 50 | columns = m.columns(), 51 | size = std::max(rows, columns); 52 | 53 | #ifdef DEBUG 54 | std::cout << "Munkres input: " << m << std::endl; 55 | #endif 56 | 57 | // Copy input matrix 58 | this->matrix = m; 59 | 60 | if ( rows != columns ) { 61 | // If the input matrix isn't square, make it square 62 | // and fill the empty values with the largest value present 63 | // in the matrix. 64 | matrix.resize(size, size, matrix.max()); 65 | } 66 | 67 | 68 | // STAR == 1 == starred, PRIME == 2 == primed 69 | mask_matrix.resize(size, size); 70 | 71 | row_mask = new bool[size]; 72 | col_mask = new bool[size]; 73 | for ( size_t i = 0 ; i < size ; i++ ) { 74 | row_mask[i] = false; 75 | } 76 | 77 | for ( size_t i = 0 ; i < size ; i++ ) { 78 | col_mask[i] = false; 79 | } 80 | 81 | // Prepare the matrix values... 82 | 83 | // If there were any infinities, replace them with a value greater 84 | // than the maximum value in the matrix. 85 | replace_infinites(matrix); 86 | 87 | minimize_along_direction(matrix, rows >= columns); 88 | minimize_along_direction(matrix, rows < columns); 89 | 90 | // Follow the steps 91 | int step = 1; 92 | while ( step ) { 93 | switch ( step ) { 94 | case 1: 95 | step = step1(); 96 | // step is always 2 97 | break; 98 | case 2: 99 | step = step2(); 100 | // step is always either 0 or 3 101 | break; 102 | case 3: 103 | step = step3(); 104 | // step in [3, 4, 5] 105 | break; 106 | case 4: 107 | step = step4(); 108 | // step is always 2 109 | break; 110 | case 5: 111 | step = step5(); 112 | // step is always 3 113 | break; 114 | } 115 | } 116 | 117 | // Store results 118 | for ( size_t row = 0 ; row < size ; row++ ) { 119 | for ( size_t col = 0 ; col < size ; col++ ) { 120 | if ( mask_matrix(row, col) == STAR ) { 121 | matrix(row, col) = 0; 122 | } else { 123 | matrix(row, col) = -1; 124 | } 125 | } 126 | } 127 | 128 | #ifdef DEBUG 129 | std::cout << "Munkres output: " << matrix << std::endl; 130 | #endif 131 | // Remove the excess rows or columns that we added to fit the 132 | // input to a square matrix. 133 | matrix.resize(rows, columns); 134 | 135 | m = matrix; 136 | 137 | delete [] row_mask; 138 | delete [] col_mask; 139 | } 140 | 141 | static void replace_infinites(Matrix &matrix) { 142 | const size_t rows = matrix.rows(), 143 | columns = matrix.columns(); 144 | assert( rows > 0 && columns > 0 ); 145 | double max = matrix(0, 0); 146 | constexpr auto infinity = std::numeric_limits::infinity(); 147 | 148 | // Find the greatest value in the matrix that isn't infinity. 149 | for ( size_t row = 0 ; row < rows ; row++ ) { 150 | for ( size_t col = 0 ; col < columns ; col++ ) { 151 | if ( matrix(row, col) != infinity ) { 152 | if ( max == infinity ) { 153 | max = matrix(row, col); 154 | } else { 155 | max = std::max(max, matrix(row, col)); 156 | } 157 | } 158 | } 159 | } 160 | 161 | // a value higher than the maximum value present in the matrix. 162 | if ( max == infinity ) { 163 | // This case only occurs when all values are infinite. 164 | max = 0; 165 | } else { 166 | max++; 167 | } 168 | 169 | for ( size_t row = 0 ; row < rows ; row++ ) { 170 | for ( size_t col = 0 ; col < columns ; col++ ) { 171 | if ( matrix(row, col) == infinity ) { 172 | matrix(row, col) = max; 173 | } 174 | } 175 | } 176 | 177 | } 178 | 179 | static void minimize_along_direction(Matrix &matrix, const bool over_columns) { 180 | const size_t outer_size = over_columns ? matrix.columns() : matrix.rows(), 181 | inner_size = over_columns ? matrix.rows() : matrix.columns(); 182 | 183 | // Look for a minimum value to subtract from all values along 184 | // the "outer" direction. 185 | for ( size_t i = 0 ; i < outer_size ; i++ ) { 186 | double min = over_columns ? matrix(0, i) : matrix(i, 0); 187 | 188 | // As long as the current minimum is greater than zero, 189 | // keep looking for the minimum. 190 | // Start at one because we already have the 0th value in min. 191 | for ( size_t j = 1 ; j < inner_size && min > 0 ; j++ ) { 192 | min = std::min( 193 | min, 194 | over_columns ? matrix(j, i) : matrix(i, j)); 195 | } 196 | 197 | if ( min > 0 ) { 198 | for ( size_t j = 0 ; j < inner_size ; j++ ) { 199 | if ( over_columns ) { 200 | matrix(j, i) -= min; 201 | } else { 202 | matrix(i, j) -= min; 203 | } 204 | } 205 | } 206 | } 207 | } 208 | 209 | private: 210 | 211 | inline bool find_uncovered_in_matrix(const double item, size_t &row, size_t &col) const { 212 | const size_t rows = matrix.rows(), 213 | columns = matrix.columns(); 214 | 215 | for ( row = 0 ; row < rows ; row++ ) { 216 | if ( !row_mask[row] ) { 217 | for ( col = 0 ; col < columns ; col++ ) { 218 | if ( !col_mask[col] ) { 219 | if ( matrix(row,col) == item ) { 220 | return true; 221 | } 222 | } 223 | } 224 | } 225 | } 226 | 227 | return false; 228 | } 229 | 230 | bool pair_in_list(const std::pair &needle, const std::list > &haystack) { 231 | for ( std::list >::const_iterator i = haystack.begin() ; i != haystack.end() ; i++ ) { 232 | if ( needle == *i ) { 233 | return true; 234 | } 235 | } 236 | 237 | return false; 238 | } 239 | 240 | int step1() { 241 | const size_t rows = matrix.rows(), 242 | columns = matrix.columns(); 243 | 244 | for ( size_t row = 0 ; row < rows ; row++ ) { 245 | for ( size_t col = 0 ; col < columns ; col++ ) { 246 | if ( 0 == matrix(row, col) ) { 247 | for ( size_t nrow = 0 ; nrow < row ; nrow++ ) 248 | if ( STAR == mask_matrix(nrow,col) ) 249 | goto next_column; 250 | 251 | mask_matrix(row,col) = STAR; 252 | goto next_row; 253 | } 254 | next_column:; 255 | } 256 | next_row:; 257 | } 258 | 259 | return 2; 260 | } 261 | 262 | int step2() { 263 | const size_t rows = matrix.rows(), 264 | columns = matrix.columns(); 265 | size_t covercount = 0; 266 | 267 | for ( size_t row = 0 ; row < rows ; row++ ) 268 | for ( size_t col = 0 ; col < columns ; col++ ) 269 | if ( STAR == mask_matrix(row, col) ) { 270 | col_mask[col] = true; 271 | covercount++; 272 | } 273 | 274 | if ( covercount >= matrix.minsize() ) { 275 | #ifdef DEBUG 276 | std::cout << "Final cover count: " << covercount << std::endl; 277 | #endif 278 | return 0; 279 | } 280 | 281 | #ifdef DEBUG 282 | std::cout << "Munkres matrix has " << covercount << " of " << matrix.minsize() << " Columns covered:" << std::endl; 283 | std::cout << matrix << std::endl; 284 | #endif 285 | 286 | 287 | return 3; 288 | } 289 | 290 | int step3() { 291 | /* 292 | Main Zero Search 293 | 294 | 1. Find an uncovered Z in the distance matrix and prime it. If no such zero exists, go to Step 5 295 | 2. If No Z* exists in the row of the Z', go to Step 4. 296 | 3. If a Z* exists, cover this row and uncover the column of the Z*. Return to Step 3.1 to find a new Z 297 | */ 298 | if ( find_uncovered_in_matrix(0, saverow, savecol) ) { 299 | mask_matrix(saverow,savecol) = PRIME; // prime it. 300 | } else { 301 | return 5; 302 | } 303 | 304 | for ( size_t ncol = 0 ; ncol < matrix.columns() ; ncol++ ) { 305 | if ( mask_matrix(saverow,ncol) == STAR ) { 306 | row_mask[saverow] = true; //cover this row and 307 | col_mask[ncol] = false; // uncover the column containing the starred zero 308 | return 3; // repeat 309 | } 310 | } 311 | 312 | return 4; // no starred zero in the row containing this primed zero 313 | } 314 | 315 | int step4() { 316 | const size_t rows = matrix.rows(), 317 | columns = matrix.columns(); 318 | 319 | // seq contains pairs of row/column values where we have found 320 | // either a star or a prime that is part of the ``alternating sequence``. 321 | std::list > seq; 322 | // use saverow, savecol from step 3. 323 | std::pair z0(saverow, savecol); 324 | seq.insert(seq.end(), z0); 325 | 326 | // We have to find these two pairs: 327 | std::pair z1(-1, -1); 328 | std::pair z2n(-1, -1); 329 | 330 | size_t row, col = savecol; 331 | /* 332 | Increment Set of Starred Zeros 333 | 334 | 1. Construct the ``alternating sequence'' of primed and starred zeros: 335 | 336 | Z0 : Unpaired Z' from Step 4.2 337 | Z1 : The Z* in the column of Z0 338 | Z[2N] : The Z' in the row of Z[2N-1], if such a zero exists 339 | Z[2N+1] : The Z* in the column of Z[2N] 340 | 341 | The sequence eventually terminates with an unpaired Z' = Z[2N] for some N. 342 | */ 343 | bool madepair; 344 | do { 345 | madepair = false; 346 | for ( row = 0 ; row < rows ; row++ ) { 347 | if ( mask_matrix(row,col) == STAR ) { 348 | z1.first = row; 349 | z1.second = col; 350 | if ( pair_in_list(z1, seq) ) { 351 | continue; 352 | } 353 | 354 | madepair = true; 355 | seq.insert(seq.end(), z1); 356 | break; 357 | } 358 | } 359 | 360 | if ( !madepair ) 361 | break; 362 | 363 | madepair = false; 364 | 365 | for ( col = 0 ; col < columns ; col++ ) { 366 | if ( mask_matrix(row, col) == PRIME ) { 367 | z2n.first = row; 368 | z2n.second = col; 369 | if ( pair_in_list(z2n, seq) ) { 370 | continue; 371 | } 372 | madepair = true; 373 | seq.insert(seq.end(), z2n); 374 | break; 375 | } 376 | } 377 | } while ( madepair ); 378 | 379 | for ( std::list >::iterator i = seq.begin() ; 380 | i != seq.end() ; 381 | i++ ) { 382 | // 2. Unstar each starred zero of the sequence. 383 | if ( mask_matrix(i->first,i->second) == STAR ) 384 | mask_matrix(i->first,i->second) = NORMAL; 385 | 386 | // 3. Star each primed zero of the sequence, 387 | // thus increasing the number of starred zeros by one. 388 | if ( mask_matrix(i->first,i->second) == PRIME ) 389 | mask_matrix(i->first,i->second) = STAR; 390 | } 391 | 392 | // 4. Erase all primes, uncover all columns and rows, 393 | for ( size_t row = 0 ; row < mask_matrix.rows() ; row++ ) { 394 | for ( size_t col = 0 ; col < mask_matrix.columns() ; col++ ) { 395 | if ( mask_matrix(row,col) == PRIME ) { 396 | mask_matrix(row,col) = NORMAL; 397 | } 398 | } 399 | } 400 | 401 | for ( size_t i = 0 ; i < rows ; i++ ) { 402 | row_mask[i] = false; 403 | } 404 | 405 | for ( size_t i = 0 ; i < columns ; i++ ) { 406 | col_mask[i] = false; 407 | } 408 | 409 | // and return to Step 2. 410 | return 2; 411 | } 412 | 413 | int step5() { 414 | const size_t rows = matrix.rows(), 415 | columns = matrix.columns(); 416 | /* 417 | New Zero Manufactures 418 | 419 | 1. Let h be the smallest uncovered entry in the (modified) distance matrix. 420 | 2. Add h to all covered rows. 421 | 3. Subtract h from all uncovered columns 422 | 4. Return to Step 3, without altering stars, primes, or covers. 423 | */ 424 | double h = std::numeric_limits::max(); 425 | for ( size_t row = 0 ; row < rows ; row++ ) { 426 | if ( !row_mask[row] ) { 427 | for ( size_t col = 0 ; col < columns ; col++ ) { 428 | if ( !col_mask[col] ) { 429 | if ( h > matrix(row, col) && matrix(row, col) != 0 ) { 430 | h = matrix(row, col); 431 | } 432 | } 433 | } 434 | } 435 | } 436 | 437 | for ( size_t row = 0 ; row < rows ; row++ ) { 438 | if ( row_mask[row] ) { 439 | for ( size_t col = 0 ; col < columns ; col++ ) { 440 | matrix(row, col) += h; 441 | } 442 | } 443 | } 444 | 445 | for ( size_t col = 0 ; col < columns ; col++ ) { 446 | if ( !col_mask[col] ) { 447 | for ( size_t row = 0 ; row < rows ; row++ ) { 448 | matrix(row, col) -= h; 449 | } 450 | } 451 | } 452 | 453 | return 3; 454 | } 455 | 456 | Matrix mask_matrix; 457 | Matrix matrix; 458 | bool *row_mask; 459 | bool *col_mask; 460 | size_t saverow = 0, savecol = 0; 461 | }; 462 | 463 | 464 | #endif /* !defined(_MUNKRES_H_) */ 465 | -------------------------------------------------------------------------------- /include/track.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include "kalman_filter.h" 5 | 6 | class Track { 7 | public: 8 | // Constructor 9 | Track(); 10 | 11 | // Destructor 12 | ~Track() = default; 13 | 14 | void Init(const cv::Rect& bbox); 15 | void Predict(); 16 | void Update(const cv::Rect& bbox); 17 | cv::Rect GetStateAsBbox() const; 18 | float GetNIS() const; 19 | 20 | int coast_cycles_ = 0, hit_streak_ = 0; 21 | 22 | private: 23 | Eigen::VectorXd ConvertBboxToObservation(const cv::Rect& bbox) const; 24 | cv::Rect ConvertStateToBbox(const Eigen::VectorXd &state) const; 25 | 26 | KalmanFilter kf_; 27 | }; 28 | -------------------------------------------------------------------------------- /include/tracker.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | #include "track.h" 7 | #include "munkres.h" 8 | #include "utils.h" 9 | 10 | class Tracker { 11 | public: 12 | Tracker(); 13 | ~Tracker() = default; 14 | 15 | static float CalculateIou(const cv::Rect& det, const Track& track); 16 | 17 | static void HungarianMatching(const std::vector>& iou_matrix, 18 | size_t nrows, size_t ncols, 19 | std::vector>& association); 20 | 21 | /** 22 | * Assigns detections to tracked object (both represented as bounding boxes) 23 | * Returns 2 lists of matches, unmatched_detections 24 | * @param detection 25 | * @param tracks 26 | * @param matched 27 | * @param unmatched_det 28 | * @param iou_threshold 29 | */ 30 | static void AssociateDetectionsToTrackers(const std::vector& detection, 31 | std::map& tracks, 32 | std::map& matched, 33 | std::vector& unmatched_det, 34 | float iou_threshold = 0.3); 35 | 36 | void Run(const std::vector& detections); 37 | 38 | std::map GetTracks(); 39 | 40 | private: 41 | // Hash-map between ID and corresponding tracker 42 | std::map tracks_; 43 | 44 | // Assigned ID for each bounding box 45 | int id_; 46 | }; -------------------------------------------------------------------------------- /include/utils.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | constexpr int kNumColors = 32; 4 | 5 | constexpr int kMaxCoastCycles = 1; 6 | 7 | constexpr int kMinHits = 3; 8 | 9 | // Set threshold to 0 to accept all detections 10 | constexpr float kMinConfidence = 0.6; -------------------------------------------------------------------------------- /src/kalman_filter.cpp: -------------------------------------------------------------------------------- 1 | #include "kalman_filter.h" 2 | 3 | 4 | KalmanFilter::KalmanFilter(unsigned int num_states, unsigned int num_obs) : 5 | num_states_(num_states), num_obs_(num_obs) { 6 | /*** Predict ***/ 7 | // State vector 8 | x_ = Eigen::VectorXd::Zero(num_states); 9 | // Predicted(a prior) state vector 10 | x_predict_ = Eigen::VectorXd::Zero(num_states); 11 | 12 | // State transition matrix F_ 13 | F_ = Eigen::MatrixXd::Zero(num_states, num_states); 14 | 15 | // Error covariance matrix P 16 | P_ = Eigen::MatrixXd::Zero(num_states, num_states); 17 | // Predicted(a prior) error covariance matrix 18 | P_predict_ = Eigen::MatrixXd::Zero(num_states, num_states); 19 | 20 | // Covariance matrix of process noise 21 | Q_ = Eigen::MatrixXd::Zero(num_states, num_states); 22 | 23 | /*** Update ***/ 24 | // Observation matrix 25 | H_ = Eigen::MatrixXd::Zero(num_obs, num_states); 26 | 27 | // Covariance matrix of observation noise 28 | R_ = Eigen::MatrixXd::Zero(num_obs, num_obs); 29 | 30 | log_likelihood_delta_ = 0.0; 31 | NIS_ = 0.0; 32 | } 33 | 34 | 35 | void KalmanFilter::Coast() { 36 | x_predict_ = F_ * x_; 37 | P_predict_ = F_ * P_ * F_.transpose() + Q_; 38 | } 39 | 40 | 41 | void KalmanFilter::Predict() { 42 | Coast(); 43 | x_ = x_predict_; 44 | P_ = P_predict_; 45 | } 46 | 47 | 48 | Eigen::VectorXd KalmanFilter::PredictionToObservation(const Eigen::VectorXd &state) { 49 | return (H_*state); 50 | } 51 | 52 | 53 | void KalmanFilter::Update(const Eigen::VectorXd& z) { 54 | Eigen::VectorXd z_predict = PredictionToObservation(x_predict_); 55 | 56 | // y - innovation, z - real observation, z_predict - predicted observation 57 | Eigen::VectorXd y = z - z_predict; 58 | 59 | Eigen::MatrixXd Ht = H_.transpose(); 60 | 61 | // S - innovation covariance 62 | Eigen::MatrixXd S = H_ * P_predict_ * Ht + R_; 63 | 64 | NIS_ = y.transpose() * S.inverse() * y; 65 | 66 | // std::cout << std::endl; 67 | // std::cout << "P_predict = " << std::endl; 68 | // std::cout << P_predict_ << std::endl; 69 | // 70 | // 71 | // std::cout << "Z = " << std::endl; 72 | // std::cout << z << std::endl; 73 | // 74 | // std::cout << "Z_pred = " << std::endl; 75 | // std::cout << z_predict << std::endl; 76 | // 77 | // std::cout << "y = " << std::endl; 78 | // std::cout << y << std::endl; 79 | // 80 | // std::cout << "S = " << std::endl; 81 | // std::cout << S << std::endl; 82 | // 83 | // std::cout << "NIS = " << NIS_ << std::endl; 84 | 85 | 86 | // K - Kalman gain 87 | Eigen::MatrixXd K = P_predict_ * Ht * S.inverse(); 88 | 89 | // Updated state estimation 90 | x_ = x_predict_ + K * y; 91 | 92 | Eigen::MatrixXd I = Eigen::MatrixXd::Identity(num_states_, num_states_); 93 | // Joseph form 94 | //P_ = (I - K * H_) * P_predict_ * (I - K * H_).transpose() + K * R_ * K.transpose(); 95 | // Optimal gain 96 | P_ = (I - K * H_) * P_predict_; 97 | } 98 | 99 | 100 | float KalmanFilter::CalculateLogLikelihood(const Eigen::VectorXd& y, const Eigen::MatrixXd& S) { 101 | float log_likelihood; 102 | 103 | // Note: Computing log(M.determinant()) in Eigen C++ is risky for large matrices since it may overflow or underflow. 104 | // compute the Cholesky decomposition of the innovation covariance matrix, because it is symmetric 105 | // S = L * L^T = U^T * U 106 | // then retrieve factor L in the decomposition 107 | auto& L = S.llt().matrixL(); 108 | 109 | // find log determinant of innovation covariance matrix 110 | float log_determinant = 0; 111 | for (unsigned int i = 0; i < S.rows(); i++) 112 | log_determinant += log(L(i, i)); 113 | log_determinant *= 2; 114 | 115 | // log-likelihood expression for current iteration 116 | log_likelihood = -0.5 * (y.transpose() * S.inverse() * y + num_obs_ * log(2 * M_PI) + log_determinant); 117 | 118 | if (std::isnan(log_likelihood)) { 119 | log_likelihood = -1e50; 120 | } 121 | 122 | return log_likelihood; 123 | } -------------------------------------------------------------------------------- /src/main.cpp: -------------------------------------------------------------------------------- 1 | /** 2 | * SORT: A Simple, Online and Realtime Tracker 3 | */ 4 | 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | #include 12 | #include 13 | #include 14 | 15 | #include 16 | #include 17 | 18 | #include "tracker.h" 19 | #include "utils.h" 20 | 21 | 22 | std::vector> ProcessLabel(std::ifstream& label_file) { 23 | // Process labels - group bounding boxes by frame index 24 | std::vector> bbox; 25 | std::vector bbox_per_frame; 26 | // Label index starts from 1 27 | int current_frame_index = 1; 28 | std::string line; 29 | 30 | while (std::getline(label_file, line)) { 31 | std::stringstream ss(line); 32 | // Label format , , , , , , , , , 33 | std::vector label; 34 | std::string data; 35 | while (getline(ss , data, ',')) { 36 | label.push_back(std::stof(data)); 37 | } 38 | 39 | if (static_cast(label[0]) != current_frame_index) { 40 | current_frame_index = static_cast(label[0]); 41 | bbox.push_back(bbox_per_frame); 42 | bbox_per_frame.clear(); 43 | } 44 | 45 | // Ignore low confidence detections 46 | if (label[6] > kMinConfidence) { 47 | bbox_per_frame.emplace_back(label[2], label[3], label[4], label[5]); 48 | } 49 | } 50 | // Add bounding boxes from last frame 51 | bbox.push_back(bbox_per_frame); 52 | return bbox; 53 | } 54 | 55 | 56 | int main(int argc, const char *argv[]) { 57 | // parse program input arguments 58 | boost::program_options::options_description desc{"Options"}; 59 | desc.add_options() 60 | ("help,h", "Help screen") 61 | ("display,d", "Display online tracker output (slow) [False]"); 62 | 63 | boost::program_options::variables_map vm; 64 | boost::program_options::store(parse_command_line(argc, argv, desc), vm); 65 | boost::program_options::notify(vm); 66 | 67 | if (vm.count("help")) { 68 | std::cout << desc << '\n'; 69 | return -1; 70 | } 71 | 72 | bool enable_display_flag = false; 73 | if (vm.count("display")) { 74 | enable_display_flag = true; 75 | } 76 | 77 | std::vector colors; 78 | if (enable_display_flag) { 79 | // Create a window to display original image 80 | cv::namedWindow("Original", cv::WINDOW_AUTOSIZE); 81 | // Create a window to display tracking result 82 | cv::namedWindow("Tracking", cv::WINDOW_AUTOSIZE); 83 | 84 | // Generate random colors to visualize different bbox 85 | std::random_device rd; //Will be used to obtain a seed for the random number engine 86 | std::mt19937 gen(rd()); //Standard mersenne_twister_engine seeded with rd() 87 | constexpr int max_random_value = 20; 88 | std::uniform_int_distribution<> dis(0, max_random_value); 89 | constexpr int factor = 255 / max_random_value; 90 | 91 | for (int n = 0; n < kNumColors; ++n) { 92 | //Use dis to transform the random unsigned int generated by gen into an int in [0, 7] 93 | colors.emplace_back(cv::Scalar(dis(gen) * factor, dis(gen) * factor, dis(gen) * factor)); 94 | } 95 | } 96 | 97 | // All training dataset in MOT15 98 | std::vector dataset_names{"ADL-Rundle-6", "ADL-Rundle-8", "ETH-Bahnhof", 99 | "ETH-Pedcross2", "ETH-Sunnyday", "KITTI-13", 100 | "KITTI-17", "PETS09-S2L1", "TUD-Campus", 101 | "TUD-Stadtmitte", "Venice-2"}; 102 | 103 | // create SORT tracker 104 | Tracker tracker; 105 | 106 | for (const auto& dataset_name : dataset_names) { 107 | // Open label file and load detections from MOT dataset 108 | // Note that it can also be replaced by detections from you own detector 109 | std::string label_path = "../data/" + dataset_name + "/det.txt"; 110 | std::ifstream label_file(label_path); 111 | if (!label_file.is_open()) { 112 | std::cerr << "Could not open or find the label!!!" << std::endl; 113 | return -1; 114 | } 115 | std::vector> all_detections = ProcessLabel(label_file); 116 | // Close label file 117 | label_file.close(); 118 | 119 | // Load image paths for visualization 120 | std::vector images; 121 | if (enable_display_flag) { 122 | // Load images 123 | cv::String path("../mot_benchmark/train/" + dataset_name + "/img1/*.jpg"); 124 | // Non-recursive 125 | cv::glob(path, images); 126 | } 127 | 128 | // Create output folder if it does not exist 129 | std::string output_folder = "../output/"; 130 | boost::filesystem::path output_folder_path(output_folder); 131 | if(boost::filesystem::create_directory(output_folder_path)) { 132 | std::cerr<< "Directory Created: "<< output_folder <= kMinHits || frame_index < kMinHits)) { 177 | // Print to terminal for debugging 178 | std::cout << frame_index << "," << trk.first << "," << bbox.tl().x << "," << bbox.tl().y 179 | << "," << bbox.width << "," << bbox.height << ",1,-1,-1,-1" 180 | << " Hit Streak = " << trk.second.hit_streak_ 181 | << " Coast Cycles = " << trk.second.coast_cycles_ << std::endl; 182 | 183 | // Export to text file for metrics evaluation 184 | output_file << frame_index << "," << trk.first << "," << bbox.tl().x << "," << bbox.tl().y 185 | << "," << bbox.width << "," << bbox.height << ",1,-1,-1,-1\n"; 186 | 187 | // output_file_NIS << trk.second.GetNIS() << "\n"; 188 | } 189 | } 190 | 191 | // Visualize tracking result 192 | if (enable_display_flag) { 193 | // Read image file 194 | cv::Mat img = cv::imread(images[i]); 195 | // Make a copy for display 196 | cv::Mat img_tracking = img.clone(); 197 | 198 | // Check for invalid input 199 | if (img.empty()) { 200 | std::cerr << "Could not open or find the image!!!" << std::endl; 201 | return -1; 202 | } 203 | 204 | for (const auto &det : detections) { 205 | // Draw detections in red bounding box 206 | cv::rectangle(img, det, cv::Scalar(0, 0, 255), 3); 207 | } 208 | 209 | for (auto &trk : tracks) { 210 | // only draw tracks which meet certain criteria 211 | if (trk.second.coast_cycles_ < kMaxCoastCycles && 212 | (trk.second.hit_streak_ >= kMinHits || frame_index < kMinHits)) { 213 | const auto &bbox = trk.second.GetStateAsBbox(); 214 | cv::putText(img_tracking, std::to_string(trk.first), cv::Point(bbox.tl().x, bbox.tl().y - 10), 215 | cv::FONT_HERSHEY_DUPLEX, 2, cv::Scalar(255, 255, 255), 2); 216 | cv::rectangle(img_tracking, bbox, colors[trk.first % kNumColors], 3); 217 | } 218 | } 219 | 220 | // Show detection and tracking result 221 | cv::imshow("Original", img); 222 | cv::imshow("Tracking", img_tracking); 223 | 224 | // Delay in ms 225 | auto key = cv::waitKey(33); 226 | 227 | // Exit if ESC pressed 228 | if (27 == key) { 229 | return 0; 230 | } else if (32 == key) { 231 | // Press Space to pause and press it again to resume 232 | while (true) { 233 | key = cv::waitKey(0); 234 | if (32 == key) { 235 | break; 236 | } else if (27 == key) { 237 | return 0; 238 | } 239 | } 240 | } 241 | } // end of enable_display_flag 242 | } // end of iterating all frames 243 | 244 | auto t2 = std::chrono::high_resolution_clock::now(); 245 | std::chrono::duration time_span = std::chrono::duration_cast>(t2 - t1); 246 | 247 | std::cout << "********************************" << std::endl; 248 | std::cout << "Total tracking took: " << time_span.count() << " for " << total_frames << " frames" << std::endl; 249 | std::cout << "FPS = " << total_frames / time_span.count() << std::endl; 250 | if (enable_display_flag) { 251 | std::cout << "Note: to get real runtime results run without the option: --display" << std::endl; 252 | } 253 | std::cout << "********************************" << std::endl; 254 | 255 | output_file.close(); 256 | } // end of iterating all dataset 257 | return 0; 258 | } 259 | -------------------------------------------------------------------------------- /src/munkres.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2007 John Weaver 3 | * Copyright (c) 2015 Miroslav Krajicek 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program; if not, write to the Free Software 17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 | */ 19 | 20 | #include "munkres.h" 21 | 22 | template class Munkres; 23 | template class Munkres; 24 | template class Munkres; 25 | 26 | -------------------------------------------------------------------------------- /src/track.cpp: -------------------------------------------------------------------------------- 1 | #include "track.h" 2 | 3 | 4 | Track::Track() : kf_(8, 4) { 5 | 6 | /*** Define constant velocity model ***/ 7 | // state - center_x, center_y, width, height, v_cx, v_cy, v_width, v_height 8 | kf_.F_ << 9 | 1, 0, 0, 0, 1, 0, 0, 0, 10 | 0, 1, 0, 0, 0, 1, 0, 0, 11 | 0, 0, 1, 0, 0, 0, 1, 0, 12 | 0, 0, 0, 1, 0, 0, 0, 1, 13 | 0, 0, 0, 0, 1, 0, 0, 0, 14 | 0, 0, 0, 0, 0, 1, 0, 0, 15 | 0, 0, 0, 0, 0, 0, 1, 0, 16 | 0, 0, 0, 0, 0, 0, 0, 1; 17 | 18 | // Give high uncertainty to the unobservable initial velocities 19 | kf_.P_ << 20 | 10, 0, 0, 0, 0, 0, 0, 0, 21 | 0, 10, 0, 0, 0, 0, 0, 0, 22 | 0, 0, 10, 0, 0, 0, 0, 0, 23 | 0, 0, 0, 10, 0, 0, 0, 0, 24 | 0, 0, 0, 0, 10000, 0, 0, 0, 25 | 0, 0, 0, 0, 0, 10000, 0, 0, 26 | 0, 0, 0, 0, 0, 0, 10000, 0, 27 | 0, 0, 0, 0, 0, 0, 0, 10000; 28 | 29 | 30 | kf_.H_ << 31 | 1, 0, 0, 0, 0, 0, 0, 0, 32 | 0, 1, 0, 0, 0, 0, 0, 0, 33 | 0, 0, 1, 0, 0, 0, 0, 0, 34 | 0, 0, 0, 1, 0, 0, 0, 0; 35 | 36 | kf_.Q_ << 37 | 1, 0, 0, 0, 0, 0, 0, 0, 38 | 0, 1, 0, 0, 0, 0, 0, 0, 39 | 0, 0, 1, 0, 0, 0, 0, 0, 40 | 0, 0, 0, 1, 0, 0, 0, 0, 41 | 0, 0, 0, 0, 0.01, 0, 0, 0, 42 | 0, 0, 0, 0, 0, 0.01, 0, 0, 43 | 0, 0, 0, 0, 0, 0, 0.0001, 0, 44 | 0, 0, 0, 0, 0, 0, 0, 0.0001; 45 | 46 | kf_.R_ << 47 | 1, 0, 0, 0, 48 | 0, 1, 0, 0, 49 | 0, 0, 10, 0, 50 | 0, 0, 0, 10; 51 | } 52 | 53 | 54 | // Get predicted locations from existing trackers 55 | // dt is time elapsed between the current and previous measurements 56 | void Track::Predict() { 57 | kf_.Predict(); 58 | 59 | // hit streak count will be reset 60 | if (coast_cycles_ > 0) { 61 | hit_streak_ = 0; 62 | } 63 | // accumulate coast cycle count 64 | coast_cycles_++; 65 | } 66 | 67 | 68 | // Update matched trackers with assigned detections 69 | void Track::Update(const cv::Rect& bbox) { 70 | 71 | // get measurement update, reset coast cycle count 72 | coast_cycles_ = 0; 73 | // accumulate hit streak count 74 | hit_streak_++; 75 | 76 | // observation - center_x, center_y, area, ratio 77 | Eigen::VectorXd observation = ConvertBboxToObservation(bbox); 78 | kf_.Update(observation); 79 | 80 | 81 | } 82 | 83 | 84 | // Create and initialize new trackers for unmatched detections, with initial bounding box 85 | void Track::Init(const cv::Rect &bbox) { 86 | kf_.x_.head(4) << ConvertBboxToObservation(bbox); 87 | hit_streak_++; 88 | } 89 | 90 | 91 | /** 92 | * Returns the current bounding box estimate 93 | * @return 94 | */ 95 | cv::Rect Track::GetStateAsBbox() const { 96 | return ConvertStateToBbox(kf_.x_); 97 | } 98 | 99 | 100 | float Track::GetNIS() const { 101 | return kf_.NIS_; 102 | } 103 | 104 | 105 | /** 106 | * Takes a bounding box in the form [x, y, width, height] and returns z in the form 107 | * [x, y, s, r] where x,y is the centre of the box and s is the scale/area and r is 108 | * the aspect ratio 109 | * 110 | * @param bbox 111 | * @return 112 | */ 113 | Eigen::VectorXd Track::ConvertBboxToObservation(const cv::Rect& bbox) const{ 114 | Eigen::VectorXd observation = Eigen::VectorXd::Zero(4); 115 | auto width = static_cast(bbox.width); 116 | auto height = static_cast(bbox.height); 117 | float center_x = bbox.x + width / 2; 118 | float center_y = bbox.y + height / 2; 119 | observation << center_x, center_y, width, height; 120 | return observation; 121 | } 122 | 123 | 124 | /** 125 | * Takes a bounding box in the centre form [x,y,s,r] and returns it in the form 126 | * [x1,y1,x2,y2] where x1,y1 is the top left and x2,y2 is the bottom right 127 | * 128 | * @param state 129 | * @return 130 | */ 131 | cv::Rect Track::ConvertStateToBbox(const Eigen::VectorXd &state) const { 132 | // state - center_x, center_y, width, height, v_cx, v_cy, v_width, v_height 133 | auto width = std::max(0, static_cast(state[2])); 134 | auto height = std::max(0, static_cast(state[3])); 135 | auto tl_x = static_cast(state[0] - width / 2.0); 136 | auto tl_y = static_cast(state[1] - height / 2.0); 137 | cv::Rect rect(cv::Point(tl_x, tl_y), cv::Size(width, height)); 138 | return rect; 139 | } -------------------------------------------------------------------------------- /src/tracker.cpp: -------------------------------------------------------------------------------- 1 | #include "tracker.h" 2 | 3 | 4 | Tracker::Tracker() { 5 | id_ = 0; 6 | } 7 | 8 | float Tracker::CalculateIou(const cv::Rect& det, const Track& track) { 9 | auto trk = track.GetStateAsBbox(); 10 | // get min/max points 11 | auto xx1 = std::max(det.tl().x, trk.tl().x); 12 | auto yy1 = std::max(det.tl().y, trk.tl().y); 13 | auto xx2 = std::min(det.br().x, trk.br().x); 14 | auto yy2 = std::min(det.br().y, trk.br().y); 15 | auto w = std::max(0, xx2 - xx1); 16 | auto h = std::max(0, yy2 - yy1); 17 | 18 | // calculate area of intersection and union 19 | float det_area = det.area(); 20 | float trk_area = trk.area(); 21 | auto intersection_area = w * h; 22 | float union_area = det_area + trk_area - intersection_area; 23 | auto iou = intersection_area / union_area; 24 | return iou; 25 | } 26 | 27 | 28 | void Tracker::HungarianMatching(const std::vector>& iou_matrix, 29 | size_t nrows, size_t ncols, 30 | std::vector>& association) { 31 | Matrix matrix(nrows, ncols); 32 | // Initialize matrix with IOU values 33 | for (size_t i = 0 ; i < nrows ; i++) { 34 | for (size_t j = 0 ; j < ncols ; j++) { 35 | // Multiply by -1 to find max cost 36 | if (iou_matrix[i][j] != 0) { 37 | matrix(i, j) = -iou_matrix[i][j]; 38 | } 39 | else { 40 | // TODO: figure out why we have to assign value to get correct result 41 | matrix(i, j) = 1.0f; 42 | } 43 | } 44 | } 45 | 46 | // // Display begin matrix state. 47 | // for (size_t row = 0 ; row < nrows ; row++) { 48 | // for (size_t col = 0 ; col < ncols ; col++) { 49 | // std::cout.width(10); 50 | // std::cout << matrix(row,col) << ","; 51 | // } 52 | // std::cout << std::endl; 53 | // } 54 | // std::cout << std::endl; 55 | 56 | 57 | // Apply Kuhn-Munkres algorithm to matrix. 58 | Munkres m; 59 | m.solve(matrix); 60 | 61 | // // Display solved matrix. 62 | // for (size_t row = 0 ; row < nrows ; row++) { 63 | // for (size_t col = 0 ; col < ncols ; col++) { 64 | // std::cout.width(2); 65 | // std::cout << matrix(row,col) << ","; 66 | // } 67 | // std::cout << std::endl; 68 | // } 69 | // std::cout << std::endl; 70 | 71 | for (size_t i = 0 ; i < nrows ; i++) { 72 | for (size_t j = 0 ; j < ncols ; j++) { 73 | association[i][j] = matrix(i, j); 74 | } 75 | } 76 | } 77 | 78 | 79 | void Tracker::AssociateDetectionsToTrackers(const std::vector& detection, 80 | std::map& tracks, 81 | std::map& matched, 82 | std::vector& unmatched_det, 83 | float iou_threshold) { 84 | 85 | // Set all detection as unmatched if no tracks existing 86 | if (tracks.empty()) { 87 | for (const auto& det : detection) { 88 | unmatched_det.push_back(det); 89 | } 90 | return; 91 | } 92 | 93 | std::vector> iou_matrix; 94 | // resize IOU matrix based on number of detection and tracks 95 | iou_matrix.resize(detection.size(), std::vector(tracks.size())); 96 | 97 | std::vector> association; 98 | // resize association matrix based on number of detection and tracks 99 | association.resize(detection.size(), std::vector(tracks.size())); 100 | 101 | 102 | // row - detection, column - tracks 103 | for (size_t i = 0; i < detection.size(); i++) { 104 | size_t j = 0; 105 | for (const auto& trk : tracks) { 106 | iou_matrix[i][j] = CalculateIou(detection[i], trk.second); 107 | j++; 108 | } 109 | } 110 | 111 | // Find association 112 | HungarianMatching(iou_matrix, detection.size(), tracks.size(), association); 113 | 114 | for (size_t i = 0; i < detection.size(); i++) { 115 | bool matched_flag = false; 116 | size_t j = 0; 117 | for (const auto& trk : tracks) { 118 | if (0 == association[i][j]) { 119 | // Filter out matched with low IOU 120 | if (iou_matrix[i][j] >= iou_threshold) { 121 | matched[trk.first] = detection[i]; 122 | matched_flag = true; 123 | } 124 | // It builds 1 to 1 association, so we can break from here 125 | break; 126 | } 127 | j++; 128 | } 129 | // if detection cannot match with any tracks 130 | if (!matched_flag) { 131 | unmatched_det.push_back(detection[i]); 132 | } 133 | } 134 | } 135 | 136 | 137 | void Tracker::Run(const std::vector& detections) { 138 | 139 | /*** Predict internal tracks from previous frame ***/ 140 | for (auto &track : tracks_) { 141 | track.second.Predict(); 142 | } 143 | 144 | // Hash-map between track ID and associated detection bounding box 145 | std::map matched; 146 | // vector of unassociated detections 147 | std::vector unmatched_det; 148 | 149 | // return values - matched, unmatched_det 150 | if (!detections.empty()) { 151 | AssociateDetectionsToTrackers(detections, tracks_, matched, unmatched_det); 152 | } 153 | 154 | /*** Update tracks with associated bbox ***/ 155 | for (const auto &match : matched) { 156 | const auto &ID = match.first; 157 | tracks_[ID].Update(match.second); 158 | } 159 | 160 | /*** Create new tracks for unmatched detections ***/ 161 | for (const auto &det : unmatched_det) { 162 | Track tracker; 163 | tracker.Init(det); 164 | // Create new track and generate new ID 165 | tracks_[id_++] = tracker; 166 | } 167 | 168 | /*** Delete lose tracked tracks ***/ 169 | for (auto it = tracks_.begin(); it != tracks_.end();) { 170 | if (it->second.coast_cycles_ > kMaxCoastCycles) { 171 | it = tracks_.erase(it); 172 | } else { 173 | it++; 174 | } 175 | } 176 | } 177 | 178 | 179 | std::map Tracker::GetTracks() { 180 | return tracks_; 181 | } --------------------------------------------------------------------------------