-- StefanoPerazzini - 31 May 2014

Stripping21 FAQ

How do I check if I need RawEvents

If you don't know if your stripping line need or not the Raw part of event, just add this code to your options for testing stripping

sc = StrippingConf(....) # this is the StrippingConf configured to run your line

from Configurables import  EventNodeKiller, StoreExplorerAlg, DataObjectVersionFilter, GaudiSequencer

# you need first to load the raw banks
loadCalo = DataObjectVersionFilter( "LoadCaloRawEvent",
                                    DataObjectLocation = "/Event/Calo/RawEvent",
                                    MaxVersion = 999 )
loadMuon = DataObjectVersionFilter( "LoadMuonRawEvent",
                                    DataObjectLocation = "/Event/Muon/RawEvent",
                                    MaxVersion = 999 )
loadRich = DataObjectVersionFilter( "LoadRichRawEvent",
                                    DataObjectLocation = "/Event/Rich/RawEvent",
                                    MaxVersion = 999 )
loadOther = DataObjectVersionFilter( "LoadOtherRawEvent",
                                    DataObjectLocation = "/Event/Other/RawEvent",
                                    MaxVersion = 999 )
loadSeq = GaudiSequencer("LoadSeq")
loadSeq.Members += [loadOther,loadMuon,loadRich,loadCalo]

# once the raw banks are loaded you can kill them

killer = EventNodeKiller( name = "KillDAQBanks",
                                       Nodes = [ "/Event/DAQ/RawEvent",
                                                       "/Event/Other/RawEvent" ]

# now you can run the whole thing inside the UserAlgorithms of DaVinci
# Note the order of algorithms, it is IMPORTANT

seq = GaudiSequencer("MySeq")
seq.Members += [ loadCalo,loadMuon,loadRich,loadOther,killer,sc.sequence() ]


DaVinci().UserAlgorithms = [seq]

NOTE: this code can be used also to check if you need raw events in your final analysis. Just substitute "sc.sequence()" with any algorithm you run in your analysis.

How do I check if I need the RawEvent in my analysis?

Using the output of Stripping 20 we generated pairs 100K event DSTs with and without the RAW event (TES locations removed: "/Event/Rich/RawEvent", "/Event/Calo/RawEvent", "/Event/Muon/RawEvent", "/Event/Other/RawEvent"). You can run your ntuple maiking code on both DSTs and compare results.

Below is a list of the corresponding LFN (similar DSTs for other streams or strippings can be generated under request)




       #EW STREAM



How can I ask to store raw banks in the output of my stripping line?

Thanks to Chris Jones it is now possible to specify the raw banks you want to store in the output events selected by your stripping line. This is possible simply configuring the StrippingLine Class as follow:
self.lineB2Charged2Body = StrippingLine( B2Charged2BodyName+"Line",
                                                 prescale  = config['PrescaleB2Charged2Body'],
                                                 selection = self.B2Charged2Body,
                                                 EnableFlavourTagging = True,
                                                 RequiredRawEvents = ["Trigger","Muon","Calo","Rich","Velo","Tracker"])
In this way the Calo and Muon raw banks will be stored in the events selected by your line.

Valid RawBanks are "Trigger", "Muon", "Calo", "Rich", "Velo" and "Tracker" (names are case-sensitive).

How can I have FlavourTagging saved in microDST?

In order to run FlavourTagging and have it saved in microDST you just have to set a flag when creating your StrippingLine. For example, in StrippingB2HHBDT.py you can see

self.lineB2HHBDT = StrippingLine( B2HHBDTName+"Line",
                                          prescale  = config['PrescaleB2HHBDT'],
                                          selection = self.CutBDT,
                                          EnableFlavourTagging = True )

NOTE 1: The code works also for full DST, storing FlavourTagging objects in the same TES location of your line. NOTE 2:TupleToolTagging is able to understand if FlavourTagging object are already present in the data. In this case it will read what is already present.

Can I have re-fitted primary vertex in microDST?

In previous strippings this was automatically done, but from stripping21 onward it will be disabled. If your line run in microDST stream and you whant to have a re-fitted PV you have to specify it. . For example in StrippingB2JpsiXforBeta_s.py you can find

combiner = CombineParticles( DecayDescriptor = DecayDescriptor,
                                     DaughtersCuts = DaughterCuts,
                                     MotherCut = PostVertexCuts,
                                     CombinationCut = PreVertexCuts,
                                     ReFitPVs = ReFitPVs)

Can I store ConeVariables or VertexIsolation variables in microDST?

In order to do this follow the receipt in the release.notes of StrippingConf package. As example you can look in StrippingBeauty2XGamma.py or StrippingBu2LLK.py

TWiki: StrippingIsolationTools

How can I run a MVA-based stripping line?

Sebastian Neubert developed a tool to run MVA-based stripping lines. Details can be found in this presentation

What is the MDST.DST stream? How can I have my line stored also in MDST.DST stream?

The MDST.DST stream is devoted to the use case where the line in question is going to uDST. In MDST.DST will be stored the full reconstructed event and not only the candidate selected by the stripping line. MDST.DST stream will allow fast regeneration of certain things, such as new Flavour tagging, or isolation etc., for those selected candidates, that requires the full reconstructed event information. The regeneration of microDST will have to be coordinated according with the computing team (MDST.DST will not be accessible to normal users). If you want to specify that you want also the MDST.DST for your line you have to:
self.lineB2HHBDT = StrippingLine( B2HHBDTName+"Line",
                                          prescale  = config['PrescaleB2HHBDT'],
                                          selection = self.CutBDT,
                                          EnableFlavourTagging = True,
                                          MDSTFlag = True )

Can I reduce the time consumed by my multi-body stripping line?

Vanya Beylaev developed the NBodyDecay tool. It proved to give an important gain in time consumption. Details can be found in this presentation. IMPORTANT: the use of NBodyDecay will become mandatory for multi-body lines in Stripping21.

Change the default vertex fitter in DaVinci

With OfflineVertexFitter being no longer maintained, the default vertex fitter has become LoKi:VertexFitter. Although the vertex fitter can be specified in the combine particles used in the stripping line in the instances of CombineParticles

#force OfflineVertexFitter usage
<YOURCOMBINEPARTICLE>.ParticleCombiners.update( { "" : "OfflineVertexFitter"} )

#force Loki:VertexFitter usage
<YOURCOMBINEPARTICLE>.ParticleCombiners.update( { "" : "LoKi:VertexFitter"} )

However, these settings will not affect any CommonParticles eventually used as input to the stripping lines. In order to do that, the default vertex fitter has to be changed at a deeper level with the following instructions.

  • Getpack the head of Phys/DaVinciKernel
  • Within this package, find all the places where OfflineVertexFitter (or LoKi::VertexFitter since this is the new default one) appears, so far these were
./src/Lib/DVCommonBase.icpp:    { ""     , "PropertimeFitter"     },
       ./Kernel/DefaultDVToolTypes.h:    static const std::string VertexFitter     = "OfflineVertexFitter:PUBLIC";
       ./Kernel/DefaultDVToolTypes.h:    static const std::string ParticleCombiner = "OfflineVertexFitter:PUBLIC";
       ./Kernel/DefaultDVToolTypes.h:    static const std::string ParticleReFitter = "OfflineVertexFitter:PUBLIC";
       ./Kernel/DVCommonBase.h: *      MyAgl.VertexFitters = { "" : "OfflineVertexFitter" ,
       ./src/Lib/DVCommonBase.icpp:    { "Offline"       , "OfflineVertexFitter:PUBLIC"    },
       ./src/Lib/DVCommonBase.icpp:    { "Offline"          , "OfflineVertexFitter:PUBLIC"    },
       ./src/Lib/DVCommonBase.icpp:    { "Offline"       , "OfflineVertexFitter:PUBLIC"    },
       ./src/Lib/DVCommonBase.icpp:    { "Vertex"        , "OfflineVertexFitter:PUBLIC"    },
In the current HEAD of DaVinci you will already find the equivalent LoKi fitters as default.
Edit | Attach | Watch | Print version | History: r18 < r17 < r16 < r15 < r14 | Backlinks | Raw View | Raw edit | More topic actions...
Topic revision: r15 - 2014-10-20 - AndreaContu
    • Cern Search Icon Cern Search
    • TWiki Search Icon TWiki Search
    • Google Search Icon Google Search

    LHCb All webs login

This site is powered by the TWiki collaboration platform Powered by PerlCopyright & 2008-2020 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback