@@ -1266,44 +1266,27 @@ def _posix_path(self, path):
12661266
12671267class _DatasetDumper (Dumper ):
12681268 def finalize (self , system ):
1269- def _all_transforms (dataset ):
1270- for p in dataset .parents :
1271- if isinstance (p , ihm .dataset .TransformedDataset ):
1272- yield p .transform
1273- seen_datasets = {}
1274- seen_transforms = {}
1269+ def _all_transforms ():
1270+ for d in system ._all_datasets ():
1271+ for p in d .parents :
1272+ if isinstance (p , ihm .dataset .TransformedDataset ):
1273+ yield p .transform
1274+ yield from system ._orphan_dataset_transforms
1275+
12751276 # Assign IDs to all datasets and transforms
1276- self ._dataset_by_id = []
1277- self ._transform_by_id = []
1278- for d in system ._all_datasets ():
1279- for t in _all_transforms (d ):
1280- # Can't use default _id attribute here since a given transform
1281- # may be used by both a dataset and a geometric object, and
1282- # since they live in different tables they need different IDs
1283- util ._remove_id (t , attr = '_dtid' )
1284- util ._remove_id (d )
1285- for t in system ._orphan_dataset_transforms :
1286- util ._remove_id (t , attr = '_dtid' )
1287- for d in system ._all_datasets ():
1288- util ._assign_id (d , seen_datasets , self ._dataset_by_id )
1289- for t in _all_transforms (d ):
1290- util ._assign_id (t , seen_transforms , self ._transform_by_id ,
1291- attr = '_dtid' )
1292- for t in system ._orphan_dataset_transforms :
1293- util ._assign_id (t , seen_transforms , self ._transform_by_id ,
1294- attr = '_dtid' )
1277+ assign = util ._HashAssignIDs (system ._all_datasets )
1278+ self ._dataset_by_id = assign .assign_all ()
1279+ # Can't use default _id attribute here since a given transform
1280+ # may be used by both a dataset and a geometric object, and
1281+ # since they live in different tables they need different IDs
1282+ assign = util ._HashAssignIDs (_all_transforms , attr = '_dtid' )
1283+ self ._transform_by_id = assign .assign_all ()
12951284
12961285 # Assign IDs to all groups and remove duplicates
1297- seen_group_ids = {}
1298- self ._dataset_group_by_id = []
1299- for g in system ._all_dataset_groups ():
1300- ids = tuple (sorted (d ._id for d in g ))
1301- if ids not in seen_group_ids :
1302- self ._dataset_group_by_id .append (g )
1303- g ._id = len (self ._dataset_group_by_id )
1304- seen_group_ids [ids ] = g
1305- else :
1306- g ._id = seen_group_ids [ids ]._id
1286+ assign = util ._HashAssignIDs (
1287+ system ._all_dataset_groups ,
1288+ hash_func = lambda g : tuple (sorted (d ._id for d in g )))
1289+ self ._dataset_group_by_id = assign .assign_all ()
13071290
13081291 def dump (self , system , writer ):
13091292 with writer .loop ("_ihm_dataset_list" ,
0 commit comments