Difference: CodeNewsForStripping21 (1 vs. 18)

Revision 182016-03-23 - PabloRuizValls

Line: 1 to 1
 
META TOPICPARENT name="TWiki.WebPreferences"
-- StefanoPerazzini - 31 May 2014

Revision 172014-10-22 - StefanoPerazzini

Line: 1 to 1
 
META TOPICPARENT name="TWiki.WebPreferences"
-- StefanoPerazzini - 31 May 2014
Line: 6 to 6
 
Added:
>
>

Which version of DaVinci do I have to use?

In order to perform any test for S21 you should use the DaVinci HEAD present in the nightlies build. In order to setup correctly the environment you have to do
<!-- SyntaxHighlightingPlugin -->
SetupProject DaVinci HEAD --nightly lhcb-no-reflex
<!-- end SyntaxHighlightingPlugin -->
The branch "lhcb-no-reflex" is important in order to use the libraries built against ROOT5 (that will be the ROOT version to be used in S21). NOTE: Since the nightlies are places where the code is developed, sometimes the latest nightly build could be corrupted. Before deciding which nightly build to use, please check in the web page that Phys, DaVinci, and Stripping slots for the lhcb-no-reflex branch have green light (also yellow can be fine). If the newest correctly built nightly is from the last Monday, then you have to setup the environment in this way:
<!-- SyntaxHighlightingPlugin -->
SetupProject DaVinci HEAD --nightly lhcb-no-reflex Mon
<!-- end SyntaxHighlightingPlugin -->
 

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

Revision 162014-10-21 - StefanoPerazzini

Line: 1 to 1
 
META TOPICPARENT name="TWiki.WebPreferences"
-- StefanoPerazzini - 31 May 2014
Line: 166 to 166
 .ParticleCombiners.update( { "" : "LoKi:VertexFitter"} ) %ENDSYNTAX%
Changed:
<
<
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
    <!-- SyntaxHighlightingPlugin -->
./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"    },
       
<!-- end SyntaxHighlightingPlugin -->
In the current HEAD of DaVinci you will already find the equivalent LoKi fitters as default.
>
>
IMPORTANT: the default vertex fitter in the CommonParticles will be the LoKi one. Since CommonParticles are algorithms common for all the stripping lines they will use the default code, without the possibility for the users to change it.

However, if users want to deeply test the effects of migrating completely from one vertex fitter to the other they will have to follow this recipes:

  • If you want to use the LoKi::VertexFitter as default, use the DaVinci HEAD from the nightlies. Be sure to use the ROOT5 based binaries (lhcb-no-reflex branch of the nightlies):
    <!-- SyntaxHighlightingPlugin -->
SetupProject DaVinci HEAD --nightly lhcb-no-reflex
      
<!-- end SyntaxHighlightingPlugin -->
SetupProject DaVinci HEAD --nightly lhcb-no-reflex --build-env
      getpack Phys/DaVinciKernel r178222
      SetupProject DaVinci HEAD --nightly lhcb-no-reflex
      cd Phys/DaVinciKernel/cmt
      cmt make clean; cmt make
      cd ../../..
      SetupProject DaVinci HEAD --nightly lhcb-no-reflex
      getpack Phys/DaVinciPVTools head
      cd Phys/DaVinciPVTools/cmt
      cmt make clean; cmt make
      cd ../../..
      SetupProject DaVinci HEAD --nightly lhcb-no-reflex
      getpack Phys/JetAccessories head
      cd Phys/JetAccessories/cmt
      cmt make clean; cmt make
      SetupProject DaVinci HEAD --nightly lhcb-no-reflex
      
<!-- end SyntaxHighlightingPlugin -->

Revision 152014-10-20 - AndreaContu

Line: 1 to 1
 
META TOPICPARENT name="TWiki.WebPreferences"
-- StefanoPerazzini - 31 May 2014
Line: 152 to 152
  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. \ No newline at end of file
Added:
>
>

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

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

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

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
    <!-- SyntaxHighlightingPlugin -->
./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"    },
       
<!-- end SyntaxHighlightingPlugin -->
In the current HEAD of DaVinci you will already find the equivalent LoKi fitters as default.

Revision 142014-08-28 - AlexShires

Line: 1 to 1
 
META TOPICPARENT name="TWiki.WebPreferences"
-- StefanoPerazzini - 31 May 2014
Line: 131 to 131
 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
Added:
>
>
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

Revision 132014-08-17 - StefanoPerazzini

Line: 1 to 1
 
META TOPICPARENT name="TWiki.WebPreferences"
-- StefanoPerazzini - 31 May 2014
Line: 98 to 98
 %ENDSYNTAX% In this way the Calo and Muon raw banks will be stored in the events selected by your line.
Changed:
<
<
Valid RawBanks are "Trigger", "Muon","Calo","Rich", and "Other" (names are case-sensitive).
>
>
Valid RawBanks are "Trigger", "Muon", "Calo", "Rich", "Velo" and "Tracker" (names are case-sensitive).
 

How can I have FlavourTagging saved in microDST?

Revision 122014-07-30 - StefanoPerazzini

Line: 1 to 1
 
META TOPICPARENT name="TWiki.WebPreferences"
-- StefanoPerazzini - 31 May 2014
Line: 128 to 128
 

Can I store ConeVariables or VertexIsolation variables in microDST?

Changed:
<
<
In order to do this follow the receipt in the release.notes of StrippingConf package.
>
>
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

How can I run a MVA-based stripping line?

Revision 112014-07-25 - StefanoPerazzini

Line: 1 to 1
 
META TOPICPARENT name="TWiki.WebPreferences"
-- StefanoPerazzini - 31 May 2014
Line: 89 to 89
 

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:
Deleted:
<
<
 %SYNTAX{ syntax="python"}%
Changed:
<
<
self.__Bd2KstGammaWideKstMassLine = StrippingLine("%sStripping___Bd2KstGammaWideKstMass" % name, prescale=config['__Bd2KstGammaWideKstMassPreScale__'], postscale=config['__Bd2KstGammaWideKstMassPostScal__e'], RequiredRawEvents = [ "Calo", "Muon" ], selection=self.__selBd2KstGammaWideKstMass)
>
>
self.lineB2Charged2Body = StrippingLine( B2Charged2BodyName+"Line", prescale = config['PrescaleB2Charged2Body'], selection = self.B2Charged2Body, EnableFlavourTagging = True, RequiredRawEvents = ["Trigger","Muon","Calo","Rich","Velo","Tracker"])
 %ENDSYNTAX% In this way the Calo and Muon raw banks will be stored in the events selected by your line.

Revision 102014-07-18 - StefanoPerazzini

Line: 1 to 1
 
META TOPICPARENT name="TWiki.WebPreferences"
-- StefanoPerazzini - 31 May 2014
Line: 137 to 137
  Sebastian Neubert developed a tool to run MVA-based stripping lines. Details can be found in this presentation
Added:
>
>

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:
<!-- SyntaxHighlightingPlugin -->
self.lineB2HHBDT = StrippingLine( B2HHBDTName+"Line",
                                          prescale  = config['PrescaleB2HHBDT'],
                                          selection = self.CutBDT,
                                          EnableFlavourTagging = True,
                                          MDSTFlag = True )
<!-- end SyntaxHighlightingPlugin -->
 

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.

Revision 92014-07-14 - LucioAnderlini

Line: 1 to 1
 
META TOPICPARENT name="TWiki.WebPreferences"
-- StefanoPerazzini - 31 May 2014
Line: 100 to 100
 %ENDSYNTAX% In this way the Calo and Muon raw banks will be stored in the events selected by your line.
Added:
>
>
Valid RawBanks are "Trigger", "Muon","Calo","Rich", and "Other" (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

Revision 82014-07-14 - StefanoPerazzini

Line: 1 to 1
 
META TOPICPARENT name="TWiki.WebPreferences"
-- StefanoPerazzini - 31 May 2014
Line: 87 to 87
  %ENDSYNTAX%
Added:
>
>

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:

<!-- SyntaxHighlightingPlugin -->
self.__Bd2KstGammaWideKstMassLine = 
     StrippingLine("%sStripping___Bd2KstGammaWideKstMass" % name,
     prescale=config['__Bd2KstGammaWideKstMassPreScale__'],
     postscale=config['__Bd2KstGammaWideKstMassPostScal__e'],
     RequiredRawEvents = [ "Calo", "Muon" ],
     selection=self.__selBd2KstGammaWideKstMass)
<!-- end SyntaxHighlightingPlugin -->
In this way the Calo and Muon raw banks will be stored in the events selected by your line.
 

How can I have FlavourTagging saved in microDST?

Revision 72014-06-18 - AndreaContu

Line: 1 to 1
 
META TOPICPARENT name="TWiki.WebPreferences"
-- StefanoPerazzini - 31 May 2014
Line: 54 to 54
  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.
Added:
>
>

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)

<!-- SyntaxHighlightingPlugin -->
#RADIATIVE STREAM
       /lhcb/user/a/acontu/644/2014_06/80153/80153598/radiativeS20_WITHRAW.dst
       /lhcb/user/a/acontu/644/2014_06/80153/80153598/radiativeS20_NoRAW.dst

       #CHARMCOMPLETEEVENT STREAM
       /lhcb/user/a/acontu/648/2014_06/80153/80153692/charmcompleteeventS20_WITHRAW.dst
       /lhcb/user/a/acontu/648/2014_06/80153/80153692/charmcompleteeventS20_NoRAW.dst

       #BHADRONCOMPLETEEVENT STREAM
       /lhcb/user/a/acontu/647/2014_06/80153/80153691/bhadroncompleteeventS20_WITHRAW.dst
       /lhcb/user/a/acontu/647/2014_06/80153/80153691/bhadroncompleteeventS20_NoRAW.dst

       #EW STREAM
       /lhcb/user/a/acontu/645/2014_06/80153/80153618/ewS20_WITHRAW.dst
       /lhcb/user/a/acontu/645/2014_06/80153/80153618/ewS20_NoRAW.dst

       #SEMILEPTONIC STREAM
       /lhcb/user/a/acontu/643/2014_06/80153/80153594/semileptonicS20_WITHRAW.dst
       /lhcb/user/a/acontu/643/2014_06/80153/80153594/semileptonicS20_NoRAW.dst

       #DIMUON STREAM
       /lhcb/user/a/acontu/646/2014_06/80153/80153690/dimuonS20_WITHRAW.dst
       /lhcb/user/a/acontu/646/2014_06/80153/80153690/dimuonS20_NoRAW.dst
<!-- end SyntaxHighlightingPlugin -->
 

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

Revision 62014-06-06 - StefanoPerazzini

Line: 1 to 1
 
META TOPICPARENT name="TWiki.WebPreferences"
-- StefanoPerazzini - 31 May 2014
Line: 38 to 38
  "/Event/Calo/RawEvent", "/Event/Muon/RawEvent", "/Event/Rich/RawEvent",
Changed:
<
<
"/Event/Other/RawEvent" ], OutputLevel = 2
>
>
"/Event/Other/RawEvent" ]
  )

# now you can run the whole thing inside the UserAlgorithms of DaVinci

Revision 52014-06-05 - StefanoPerazzini

Line: 1 to 1
 
META TOPICPARENT name="TWiki.WebPreferences"
-- StefanoPerazzini - 31 May 2014
Line: 85 to 85
  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 \ No newline at end of file
Added:
>
>

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

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.

 \ No newline at end of file

Revision 42014-06-04 - StefanoPerazzini

Line: 1 to 1
 
META TOPICPARENT name="TWiki.WebPreferences"
-- StefanoPerazzini - 31 May 2014
Line: 57 to 57
 

How can I have FlavourTagging saved in microDST?

Changed:
<
<
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
>
>
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
  %SYNTAX{ syntax="python"}% self.lineB2HHBDT = StrippingLine( B2HHBDTName+"Line",
Line: 71 to 71
 

Can I have re-fitted primary vertex in microDST?

Changed:
<
<
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
>
>
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
  %SYNTAX{ syntax="python"}%
Changed:
<
<
combiner = CombineParticles( DecayDescriptors = DecayDescriptors,
>
>
combiner = CombineParticles( DecayDescriptor = DecayDescriptor,
  DaughtersCuts = DaughterCuts, MotherCut = PostVertexCuts, CombinationCut = PreVertexCuts,
Line: 84 to 84
 

Can I store ConeVariables or VertexIsolation variables in microDST?

In order to do this follow the receipt in the release.notes of StrippingConf package.

Changed:
<
<
As example you can look in StrippingBeauty2XGamma.py or StrippingBu2LLK.py
>
>
As example you can look in StrippingBeauty2XGamma.py or StrippingBu2LLK.py
 \ No newline at end of file

Revision 32014-06-03 - StefanoPerazzini

Line: 1 to 1
 
META TOPICPARENT name="TWiki.WebPreferences"
-- StefanoPerazzini - 31 May 2014
Line: 54 to 54
 %ENDSYNTAX%

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. \ No newline at end of file

Added:
>
>

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

<!-- SyntaxHighlightingPlugin -->
self.lineB2HHBDT = StrippingLine( B2HHBDTName+"Line",
                                          prescale  = config['PrescaleB2HHBDT'],
                                          selection = self.CutBDT,
                                          EnableFlavourTagging = True )
<!-- end SyntaxHighlightingPlugin -->

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

<!-- SyntaxHighlightingPlugin -->
combiner = CombineParticles( DecayDescriptors = DecayDescriptors,
                                 DaughtersCuts = DaughterCuts,
                                 MotherCut = PostVertexCuts,
                                 CombinationCut = PreVertexCuts,
                                 ReFitPVs = ReFitPVs)
<!-- end SyntaxHighlightingPlugin -->

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

Revision 22014-06-01 - StefanoPerazzini

Line: 1 to 1
 
META TOPICPARENT name="TWiki.WebPreferences"
-- StefanoPerazzini - 31 May 2014
Line: 52 to 52
  DaVinci().UserAlgorithms = [seq] %ENDSYNTAX%
Added:
>
>
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.
 \ No newline at end of file

Revision 12014-05-31 - StefanoPerazzini

Line: 1 to 1
Added:
>
>
META TOPICPARENT name="TWiki.WebPreferences"
-- 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

<!-- SyntaxHighlightingPlugin -->
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/Calo/RawEvent",
                                                       "/Event/Muon/RawEvent",
                                                       "/Event/Rich/RawEvent",
                                                       "/Event/Other/RawEvent" ],
                                       OutputLevel = 2
                                     )

# 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]
<!-- end SyntaxHighlightingPlugin -->
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright & 2008-2019 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback