@@ -112,7 +112,7 @@ def store_correspondance(self, i_previous, i_current, nb_real_obs):
112112            # Set an id for each match 
113113            correspondance ['id' ] =  self .id_generator (nb_match )
114114            self .append (correspondance )
115-             return 
115+             return   True 
116116
117117        # We set all id to UINT32_MAX 
118118        id_previous  =  ones (len (self .previous_obs ),
@@ -123,6 +123,33 @@ def store_correspondance(self, i_previous, i_current, nb_real_obs):
123123        # track it before 
124124        correspondance ['id' ] =  id_previous [correspondance ['in' ]]
125125
126+         # We set correspondance data for virtual obs : ID/LENGTH 
127+         if  self .previous2_obs  is  not None  and  self .virtual :
128+             nb_rebirth  =  correspondance ['virtual' ].sum ()
129+             if  nb_rebirth  !=  0 :
130+                 logging .debug ('%d re-birth due to prolongation with' 
131+                               ' virtual observations' , nb_rebirth )
132+                 ## Set id for virtual 
133+                 # get correspondance mask using virtual obs 
134+                 m_virtual  =  correspondance ['virtual' ]
135+                 # index of virtual in virtual obs 
136+                 i_virtual  =  correspondance ['in' ][m_virtual ] -  nb_real_obs 
137+                 correspondance ['id' ][m_virtual ] =  \
138+                     self .virtual_obs ['track' ][i_virtual ]
139+                 correspondance ['virtual_length' ][m_virtual ] =  \
140+                     self .virtual_obs ['segment_size' ][i_virtual ]
141+         
142+         # new_id is equal to UINT32_MAX we must add a new ones 
143+         # we count the number of new 
144+         mask_new_id  =  correspondance ['id' ] ==  self .UINT32_MAX 
145+         nb_new_tracks  =  mask_new_id .sum ()
146+         logging .debug ('%d birth in this step' , nb_new_tracks )
147+         # Set new id 
148+         correspondance ['id' ][mask_new_id ] =  self .id_generator (nb_new_tracks )
149+ 
150+         self .append (correspondance )
151+         
152+         return  False 
126153
127154    def  id_generator (self , nb_id ):
128155        """Generation id and incrementation 
@@ -134,14 +161,14 @@ def id_generator(self, nb_id):
134161    def  recense_dead_id_to_extend (self ):
135162        """Recense dead id to extend in virtual observation 
136163        """ 
137-         nb_virtual_extend  =  0 
138164        # List previous id which are not use in the next step 
139165        dead_id  =  setdiff1d (self [- 2 ]['id' ], self [- 1 ]['id' ])
140166        nb_dead  =  dead_id .shape [0 ]
141167        logging .debug ('%d death of real obs in this step' , nb_dead )
142168        if  not  self .virtual :
143169            return 
144-         # 
170+         # get id already dead from few time 
171+         nb_virtual_extend  =  0 
145172        if  self .virtual_obs  is  not None :
146173            virtual_dead_id  =  setdiff1d (self .virtual_obs ['track' ],
147174                                        self [- 1 ]['id' ])
@@ -192,7 +219,6 @@ def recense_dead_id_to_extend(self):
192219    def  track (self ):
193220        """Run tracking 
194221        """ 
195-         START  =  True 
196222        FLG_VIRTUAL  =  False 
197223        self .reset_dataset_cache ()
198224        self .swap_dataset (self .datasets [0 ])
@@ -210,54 +236,10 @@ def track(self):
210236                self .previous_obs  =  self .previous_obs .merge (self .virtual_obs )
211237
212238            i_previous , i_current  =  self .previous_obs .tracking (self .current_obs )
213-             nb_match  =  i_previous .shape [0 ]
214239
215-             #~ self.store_correspondance(i_previous, i_current, nb_real_obs) 
216-             correspondance  =  array (i_previous , dtype = self .correspondance_dtype )
217-             correspondance ['out' ] =  i_current 
218-             
219-             if  self .virtual :
220-                 correspondance ['virtual' ] =  i_previous  >=  nb_real_obs 
221-                 
222-             if  START :
223-                 START  =  False 
224-                 # Set an id for each match 
225-                 correspondance ['id' ] =  self .id_generator (nb_match )
226-                 self .append (correspondance )
240+             if  self .store_correspondance (i_previous , i_current , nb_real_obs ):
227241                continue 
228242
229-             # We set all id to UINT32_MAX 
230-             id_previous  =  ones (len (self .previous_obs ), dtype = self .ID_DTYPE ) *  self .UINT32_MAX 
231-             # We get old id for previously eddies tracked 
232-             previous_id  =  self [- 1 ]['id' ]
233-             id_previous [self [- 1 ]['out' ]] =  previous_id 
234-             correspondance ['id' ] =  id_previous [correspondance ['in' ]]
235- 
236-             # We set correspondance data for virtual obs : ID/LENGTH 
237-             if  FLG_VIRTUAL :
238-                 nb_rebirth  =  correspondance ['virtual' ].sum ()
239-                 if  nb_rebirth  !=  0 :
240-                     logging .debug ('%d re-birth due to prolongation with' 
241-                                   ' virtual observations' , nb_rebirth )
242-                     # Set id for virtual 
243-                     m_virtual  =  correspondance ['virtual' ]
244-                     # index of virtual in virtual obs 
245-                     i_virtual  =  correspondance ['in' ][m_virtual ] -  nb_real_obs 
246-                     correspondance ['id' ][m_virtual ] =  \
247-                         self .virtual_obs ['track' ][i_virtual ]
248-                     correspondance ['virtual_length' ][m_virtual ] =  \
249-                         self .virtual_obs ['segment_size' ][i_virtual ]
250-             
251-             # new_id is equal to UINT32_MAX we must add a new ones 
252-             # we count the number of new 
253-             mask_new_id  =  correspondance ['id' ] ==  self .UINT32_MAX 
254-             nb_new_tracks  =  mask_new_id .sum ()
255-             logging .debug ('%d birth in this step' , nb_new_tracks )
256-             # Set new id 
257-             correspondance ['id' ][mask_new_id ] =  self .id_generator (nb_new_tracks )
258- 
259-             self .append (correspondance )
260- 
261243            self .recense_dead_id_to_extend ()
262244
263245            if  self .virtual :
0 commit comments