@@ -397,6 +397,9 @@ def configure_hbw_datasets(
397
397
limit_dataset_files : int | None = None ,
398
398
add_dataset_extensions : bool = False ,
399
399
):
400
+ # allow usage of UHH campaign
401
+ enable_uhh_campaign_usage (config )
402
+
400
403
for dataset in config .datasets :
401
404
if add_dataset_extensions :
402
405
add_dataset_extension_to_nominal (dataset )
@@ -541,3 +544,43 @@ def get_dataset_lfns_2017(
541
544
lfn_base .child (basename , type = "f" ).path
542
545
for basename in lfn_base .listdir (pattern = "*.root" )
543
546
]
547
+
548
+
549
+ def enable_uhh_campaign_usage (cfg : od .Config ) -> None :
550
+ # custom lfn retrieval method in case the underlying campaign is custom uhh
551
+ def get_dataset_lfns_uhh (
552
+ dataset_inst : od .Dataset ,
553
+ shift_inst : od .Shift ,
554
+ dataset_key : str ,
555
+ ) -> list [str ]:
556
+ if "uhh" not in dataset_inst .x ("campaign" , "" ):
557
+ # for non-uhh datasets, use default GetDatasetLFNs method
558
+ return GetDatasetLFNs .get_dataset_lfns_dasgoclient (
559
+ GetDatasetLFNs , dataset_inst = dataset_inst , shift_inst = shift_inst , dataset_key = dataset_key ,
560
+ )
561
+ cpn_name = dataset_inst .x .campaign
562
+ # destructure dataset_key into parts and create the lfn base directory
563
+ dataset_id , full_campaign , tier = dataset_key .split ("/" )[1 :]
564
+ main_campaign , sub_campaign = full_campaign .split ("-" , 1 )
565
+ lfn_base = law .wlcg .WLCGDirectoryTarget (
566
+ f"/store/{ dataset_inst .data_source } /{ main_campaign } /{ dataset_id } /{ tier } /{ sub_campaign } /0" ,
567
+ # fs=f"wlcg_fs_{cfg.campaign.x.custom['name']}",
568
+ fs = f"wlcg_fs_{ cpn_name } " ,
569
+ )
570
+
571
+ # loop though files and interpret paths as lfns
572
+ return [
573
+ lfn_base .child (basename , type = "f" ).path
574
+ for basename in lfn_base .listdir (pattern = "*.root" )
575
+ ]
576
+
577
+ if any ("uhh" in cpn_name for cpn_name in cfg .campaign .x ("campaigns" , [])):
578
+ # define the lfn retrieval function
579
+ cfg .x .get_dataset_lfns = get_dataset_lfns_uhh
580
+
581
+ # define custom remote fs's to look at
582
+ cfg .x .get_dataset_lfns_remote_fs = lambda dataset_inst : (
583
+ None if "uhh" not in dataset_inst .x ("campaign" , "" ) else [
584
+ f"local_fs_{ dataset_inst .x .campaign } " ,
585
+ f"wlcg_fs_{ dataset_inst .x .campaign } " ,
586
+ ])
0 commit comments