def test_clone_sequence():
    _sel00 = AutomaticData(Location='Phys/Sel00')
    _sel01 = AutomaticData(Location='Phys/Sel01')
    _sel02 = AutomaticData(Location='Phys/Sel02')
    _sel03 = AutomaticData(Location='Phys/Sel03')

    sel01 = Selection('00120',
                      Algorithm=MockConfGenerator(),
                      RequiredSelections=[_sel00, _sel01])
    sel02 = Selection('00121',
                      Algorithm=MockConfGenerator(),
                      RequiredSelections=[_sel02, _sel03])
    sel03 = Selection('00122',
                      Algorithm=MockConfGenerator(),
                      RequiredSelections=[sel01, sel02])

    presel0 = MockConfGenerator()
    presel1 = MockConfGenerator()
    postsel0 = MockConfGenerator()
    postsel1 = MockConfGenerator()

    presels = [presel0, presel1]
    postsels = [postsel0, postsel1]

    seq = SelectionSequence('Seq03',
                            TopSelection=sel03,
                            EventPreSelector=presels,
                            PostSelectionAlgs=postsels,
                            sequencerType=DummySequencer)

    clone = seq.clone(name='clone')

    seqAlgos = clone.sequence().Members

    ref_algos = [
        presel0, presel1,
        _sel00.algorithm(),
        _sel01.algorithm(),
        _sel02.algorithm(),
        _sel03.algorithm(),
        sel02.algorithm(),
        sel01.algorithm(),
        sel03.algorithm(), postsel0, postsel1
    ]

    assert len(seqAlgos) == len(ref_algos)
    assert presels == seqAlgos[:len(presels)]
    assert postsels == seqAlgos[len(ref_algos) - len(postsels):]
    # sel03 must come just before the post selection algos.
    assert sel03.algorithm() == ref_algos[len(ref_algos) - (len(presels) + 1)]
    # order of sel01 and sel02 doesn't matter.
    for sel in [sel01, sel02]:
        assert sel.algorithm() in ref_algos[len(presels):len(ref_algos) -
                                            len(postsels)]

    seqAlgos = seq.algorithms()

    assert len(seqAlgos) == len(ref_algos)
    assert presels == seqAlgos[:len(presels)]
    assert postsels == seqAlgos[len(ref_algos) - len(postsels):]

    for sel in [sel01, sel02, sel03]:
        assert sel.algorithm() in ref_algos[len(presels):len(ref_algos) -
                                            len(postsels)]
Esempio n. 2
0
kaons =  SelectionSequence('SeqKaons',
                          TopSelection = AutomaticData(Location = 'Phys/StdTightKaons') )

jpsi =  SelectionSequence('SeqJpsi',
                          TopSelection = AutomaticData(Location = 'Phys/StdLooseJpsi2MuMu'))

#multiSeq = MultiSelectionSequence('Cocktail', Sequences = [pions, muons, kaons, jpsi])
multiSeqA = MultiSelectionSequence('CocktailA', Sequences = [kaons, pions])
multiSeqB = MultiSelectionSequence('CocktailB', Sequences = [muons, pions])
multiSeqC = MultiSelectionSequence('CocktailB', Sequences = [jpsi, pions])

conf = MicroDSTWriter("MicroDST0")
conf.OutputFileSuffix = "TestCrossover"
conf.CopyProtoParticles = False
#conf.SelectionSequences = [multiSeqA, multiSeqB]
conf.SelectionSequences = [pions, pions.clone('SeqPions2'), pions.clone('SeqPions3')]
#conf.SelectionSequences = [pions, muons, kaons, jpsi]
conf.CopyL0DUReport = False
conf.CopyHltDecReports = False
conf.CopyMCTruth = False
conf.CopyBTags = False
microDST0Seq = conf.sequence()

#

dv = DaVinci()
dv.DataType = 'MC09'
dv.Simulation = True
dv.EvtMax = 100
dv.UserAlgorithms = [microDST0Seq]
dv.Input =  [