Pseudochannels in FT using DD4HEP on a DetDesc MC are inconsistent

@zexu @bleverin

Running the following options (from Blake)

from Moore import options, run_reconstruction
from Moore.config import Reconstruction
from PRConfig.TestFileDB import test_file_db

from os.path import basename, join
from ast import literal_eval
from XRootD import client



#test_file_db['minbias-Beam6800GeV-expected-2024-MagDown-Nu5.7-hlt1-filtered'].run(configurable= app, withDB=True, clear=True) #pass and options to LHCbApp                            

files=[
        "mdf:root://eoslhcb.cern.ch//eos/lhcb/wg/rta/WP3/bandwidth_division/Beam6800GeV-expected-2024-MagUp-Nu5.7/hlt1_filtered/v1/30000000/input_{0}.mdf"
        .format(i) for i in range(20)
    ]


options.input_type = "MDF"
options.input_files = files
options.n_threads = 4
options.event_store = 'EvtStoreSvc'

options.input_raw_format = 0.5
options.first_evt = 0
options.print_freq = 1000
options.geometry_version = "run3/trunk"
options.dddb_tag = "dddb-20231017"
options.conddb_tag = "sim-20231017-vc-mu100"
options.data_type = "Upgrade"
options.simulation = True
options.conditions_version = "master"


#options.output_level = 0                                                                                                                                                              

options.evt_max = 10000
options.histo_file  = join("/home/lohenry/Debug_FTLiteClusterMonitor/", basename(files[0]).replace(".mdf", "_sim.root"))
from PyConf.application import (
    configure_input,
    configure,
    default_raw_banks,
    make_odin,
)
from PyConf.Algorithms import (
    FTRawBankDecoder,
    FTLiteClusterMonitor,
    #FTLiteClusterTAEMonitor,                                                                                                                                                          
)
from MooreOnlineConf.utils import (
    #common_monitors_node,                                                                                                                                                             
    #passes_rb,                                                                                                                                                                        
    #RoutingBit,                                                                                                                                                                       
#    is_tae,                                                                                                                                                                           
   # decode_tae,                                                                                                                                                                       
    if_then,
    run_all,
)



def main():
    odin = make_odin()

    def make_ft_clusters(name=""):
        raw_banks = default_raw_banks("FTCluster")
        ZS_decoder = FTRawBankDecoder(
        name=f"FTRawBankDecoder{name}", Odin=odin, RawBanks=raw_banks, IgnoreLarge=True)
        #ZS_decoder.IgnoreLarge=True                                                                                                                                                   
        return ZS_decoder.OutputLocation

    # the standard monitor                                                                                                                                                             
    zs_monitor = FTLiteClusterMonitor(
        name="FTLiteClusterMonitor",
        InputODIN=odin,
        ClusterLocation=make_ft_clusters())
    # assemble the control flow                                                                                                                                                        
    top_node = run_all(
        "top",
        [
            #common_monitors_node(),  # common monitoring to all tasks                                                                                                                 
            #if_then("IfPHYSICS", passes_rb(RoutingBit.PHYSICS), zs_monitor),                                                                                                          
            zs_monitor,
            #if_then("IfTAE", is_tae,                                                                                                                                                  
            #        run_all("TAE", [tae_decoding, tae_monitor])),                                                                                                                     
        ])

    return top_node


configure_input(options)
configure(options, main())

we get very different results in DetDesc (top) and DD4HEP (bottom). image image

This looks like reversed mats in DD4HEP not matching the DetDesc convention.