ATLAS Offline Software
MultipleStreamManager.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
2 
3 
8 from __future__ import print_function
9 import os
10 
12  """This class manages common methods of AugmentedPoolStream and AugmentedByteStream."""
13  def __init__(self, StreamName):
14  self.Name = StreamName
15  self.OtherAlgs=[]
16  #the following attributes must exist in all child classes:
17  #self.Stream
18  #self.Print()
19  #self.SetOutputFileName()
20  #self.Add/Remove(MetaData)Item()
21  return
22 
23  #Basic list helper functions
24  def _ItemInList(self,item,aList):
25  #Make sure aList is a list
26  if not isinstance(aList, list):
27  raise TypeError("AugmentedPoolStream._ItemInList() does not support aList of type %s"%type(aList))
28 
29  isInList=False
30  for i in aList:
31  if i==item:
32  isInList=True
33  return isInList
34 
35  def _AddValidItemToList(self,item,aList):
36  #Recursive loop if item is a list
37  if isinstance(item,list):
38  for i in item:
39  self._AddValidItemToList(i,aList)
40  #Add to list if item is a string and not already in the list
41  elif isinstance(item, str):
42  if not self._ItemInList(item,aList):
43  aList += [item]
44  else:
45  raise TypeError("AugmentedPoolStream._AddValidItemToList() does not support item of type %s"%type(item))
46  return
47 
48  def _RemoveValidItemFromList(self,item,aList):
49  #Recursive loop if item is a list
50  if isinstance(item,list):
51  for i in item:
52  self._RemoveValidItemFromList(i,aList)
53  #Remove from list if item is a string and already in list
54  elif isinstance(item, str):
55  if self._ItemInList(item,aList):
56  aList.remove(item)
57  else:
58  print(self.Name,": WARNING you asked to remove item '%s' but this item is not present",item)
59  else:
60  raise TypeError("AugmentedPoolStream._RemoveValidItemFromList() does not support item of type %s"%type(item))
61  return
62 
63 
65  def AddAcceptAlgs(self, algs):
66  self._AddValidItemToList(algs, self.Stream.AcceptAlgs)
67  return
68 
69  def RemoveAcceptAlgs(self, algs):
70  self._RemoveValidItemFromList(algs, self.Stream.AcceptAlgs)
71  return
72 
73  def GetAcceptAlgs(self):
74  return self.Stream.AcceptAlgs
75 
76 
78  def AddRequireAlgs(self, algs):
79  self._AddValidItemToList(algs, self.Stream.RequireAlgs)
80  return
81 
82  def RemoveRequireAlgs(self, algs):
83  self._RemoveValidItemFromList(algs, self.Stream.RequireAlgs)
84  return
85 
86  def GetRequireAlgs(self):
87  return self.Stream.RequireAlgs
88 
89 
91  def AddVetoAlgs(self, algs):
92  self._AddValidItemToList(algs, self.Stream.VetoAlgs)
93  return
94 
95  def RemoveVetoAlgs(self, algs):
96  self._RemoveValidItemFromList(algs, self.Stream.VetoAlgs)
97  return
98 
99  def GetVetoAlgs(self):
100  return self.Stream.VetoAlgs
101 
102 
104  def AddOtherAlgsToBookkeep(self, algs):
105  self._AddValidItemToList(algs, self.OtherAlgs)
106  return
107 
108  def RemoveOtherAlgsToBookkeep(self, algs):
109  self._RemoveValidItemFromList(algs, self.OtherAlgs)
110  return
111 
113  return self.OtherAlgs
114 
115 
118  from EventBookkeeperTools.BookkeepingInfoWriter import SkimDecisionsWriter
119  sdw=SkimDecisionsWriter(self.Name+"_SkimDecisionsWriter")
120  newContainerName=self.Name+"_"+sdw.SkimDecisionsContainerName
121  sdw.SkimDecisionsContainerName=newContainerName
122  #sdw.OutputLevel=2
123  for a in self.GetRequireAlgs():
124  sdw.addRequireAlg(a)
125  for a in self.GetAcceptAlgs():
126  sdw.addAcceptAlg(a)
127  for a in self.GetVetoAlgs():
128  sdw.addVetoAlg(a)
129  for a in self.GetOtherAlgsToBookkeep():
130  sdw.addOtherAlg(a)
131  return sdw
132 
133 
135  def SetPrescale(self,value):
136  #Set a master prescale to given value. Create the Prescaler tool if necessary.
137  if not hasattr(self,"_Prescaler"):
138  from PrimaryDPDMaker.PrimaryDPDMakerConf import PrimaryDPDPrescaler
139  prescalerName="MasterPrescale_"+self.Name
140  self._Prescaler = PrimaryDPDPrescaler(prescalerName)
141  #Deep copies of the Require and Accept algs lists considered by the Master prescaler
142  #Notes:
143  # 1) deep copy is necessary because the Master prescaler itself will be added to the RequireAlgs list\
144  # 2) this implies that SetPrescale must be the *last* algorithm added to the stream
145  self._Prescaler.RequireAlgs = self.Stream.RequireAlgs[:]
146  self._Prescaler.AcceptAlgs = self.Stream.AcceptAlgs[:]
147 
148  from AthenaCommon.AlgSequence import AlgSequence
149  topSequence = AlgSequence()
150  topSequence += self._Prescaler
151  self.AddRequireAlgs(prescalerName)
152 
153  self._Prescaler.Prescale=value
154  return
155 
156  def GetPrescale(self):
157  if hasattr(self,"_Prescaler"):
158  return self._Prescaler.Prescale
159  else:
160  return "NONE"
161 
162 
163 
164 
166  """This class manages the associated event-by-event and metadata AthenaOutputStreams as a single object."""
167  def __init__(self, StreamName, FileName, asAlg, isVirtual, noTag=False):
168  AugmentedStreamBase.__init__(self,StreamName)
169  #event-by-event stream
170  from AthenaPoolCnvSvc.WriteAthenaPool import AthenaPoolOutputStream
171  self.Stream = AthenaPoolOutputStream( StreamName, FileName, asAlg, noTag=noTag )
172  if isVirtual is True:
173  self.Stream.WriteOnExecute=False
174  self.Stream.WriteOnFinalize=False
175 
176  return
177 
178  def GetEventStream(self):
179  #This is the stream that's written at each event
180  return self.Stream
181 
182  # FIXME: This function is obsolete and should be remove.
183  def GetMetaDataStream(self):
184  #This is the stream that's written once per multiple events
185  return self.Stream
186 
187  def SetOutputFileName(self, name):
188  self.Stream.OutputFile = name
189  return
190 
191 
193  def AddItem(self, item):
194  self._AddValidItemToList(item, self.Stream.ItemList)
195  return
196 
197  def RemoveItem(self, item):
198  self._RemoveValidItemFromList(item, self.Stream.ItemList)
199  return
200 
201  def GetItems(self):
202  return self.Stream.ItemList
203 
204  def AddMetaDataItem(self, item):
205  self._AddValidItemToList(item, self.Stream.MetadataItemList)
206  return
207 
208  def RemoveMetaDataItem(self, item):
209  self._RemoveValidItemFromList(item, self.Stream.MetadataItemList)
210  return
211 
212  def GetMetaDataItems(self):
213  return self.Stream.MetadataItemList
214 
215 
217  def AcceptAlgs(self, AlgsList):
218  #Keep this function for now... but we may get rid of it.
219  self.Stream.AcceptAlgs=AlgsList
220  return
221 
222 
224  def RequireAlgs(self, AlgsList):
225  #Keep this function for now... but we may get rid of it.
226  self.Stream.RequireAlgs=AlgsList
227  return
228 
229 
231  def VetoAlgs(self, AlgsList):
232  #Keep this function for now... but we may get rid of it
233  self.Stream.VetoAlgs=AlgsList
234  return
235 
236 
237  def Print(self):
238  print("**** AugmentedPoolStream",self.Name,"****")
239  print("Output file:")
240  print(self.Stream.OutputFile)
241  print("AcceptAlgs:")
242  print(self.Stream.AcceptAlgs)
243  print("RequireAlgs:")
244  print(self.Stream.RequireAlgs)
245  print("VetoAlgs:")
246  print(self.Stream.VetoAlgs)
247  print("OtherAlgs to bookkeep (but not directly used by the Stream):")
248  print(self.OtherAlgs)
249  print("Master prescale:")
250  print(self.GetPrescale())
251  print("ItemList:")
252  print(self.Stream.ItemList)
253  print("MetaData ItemList:")
254  print(self.Stream.MetadataItemList)
255  return
256 
257 
258 
260  def __init__(self, StreamName, FileName, Parent, asAlg, isVirtual, noTag=True):
261  AugmentedPoolStream.__init__(self, StreamName, FileName, asAlg, isVirtual, noTag)
262  index=0
263  try:
264  #Check wheter a StreamDAOD_PHYS stream exists
265  index=MSMgr.StreamDict[Parent]
266  except KeyError:
267  index=-1
268  self.parentIndex = index
269  return
270 
271 
272 
274  def AddItem(self, item):
275  if self.parentIndex >= 0:
276  if item in MSMgr.StreamList[self.parentIndex].Stream.ItemList:
277  return
278  self._AddValidItemToList(item, self.Stream.ItemList)
279  return
280 
281  def AddMetaDataItem(self, item):
282  return
283 
284 
287 class AugmentedByteStream( AugmentedStreamBase ):
288  def __init__(self, StreamName,FileName):
289  AugmentedStreamBase.__init__(self,StreamName)
290 
291  #General setup
292  from AthenaCommon.AppMgr import theApp
293  svcMgr = theApp.serviceMgr()
294 
295  # BS OutputStream Tool
296  from ByteStreamCnvSvc.ByteStreamCnvSvcConf import ByteStreamEventStorageOutputSvc,ByteStreamOutputStreamCopyTool
297  self.bsCopyTool = ByteStreamOutputStreamCopyTool("OutputStreamBSCopyTool")
298  svcMgr.ToolSvc += self.bsCopyTool
299 
300  #default output directory
301  outDir = os.getcwd()
302  outDir+="/"
303 
304  # BS output Svc
305  self.bsOutputSvc=ByteStreamEventStorageOutputSvc("BSESOutputSvc"+StreamName,
306  OutputDirectory=outDir,
307  SimpleFileName=FileName )
308  svcMgr += self.bsOutputSvc
309 
310  # Set BS OutputSvc/InputSvc to BS OutputStream Tool
311  self.bsCopyTool.ByteStreamOutputSvc=self.bsOutputSvc
312  self.bsCopyTool.ByteStreamInputSvc=svcMgr.ByteStreamInputSvc
313 
314  # create AthenaOutputStream for BS Copy
315  from AthenaServices.AthenaServicesConf import AthenaOutputStream
316  self.Stream = AthenaOutputStream( StreamName, WritingTool=self.bsCopyTool )
317 
318  # add the stream to the output sequence
319  from AthenaCommon.AlgSequence import AthSequencer
320  outSequence = AthSequencer("AthOutSeq")
321  outSequence += self.Stream
322  return
323 
324  def SetOutputFileName(self, name):
325  #Method name for coherence with Pool stream, but warning: it's only a file name suffix, not the full name
326  self.bsOutputSvc.SimpleFileName = name
327  return
328 
329  def SetSimpleFileName(self, name):
330  self.bsOutputSvc.SimpleFileName = name
331  return
332 
333  def SetOutputDirName(self, name):
334  self.bsOutputSvc.OutputDirectory = name
335  return
336 
337  def AddItem(self, item): pass
338  def RemoveItem(self, item): pass
339  def AddMetaDataItem(self, item): pass
340  def RemoveMetaDataItem(self, item): pass
341 
342  def Print(self):
343  print("**** AugmentedByteStream",self.Name,"****")
344  print("Output file:")
345  print(self.bsOutputSvc.OutputDirectory+self.bsOutputSvc.SimpleFileName)
346  print("AcceptAlgs:")
347  print(self.Stream.AcceptAlgs)
348  print("RequireAlgs:")
349  print(self.Stream.RequireAlgs)
350  print("VetoAlgs:")
351  print(self.Stream.VetoAlgs)
352  print("OtherAlgs to bookkeep (but not directly used by the Stream):")
353  print(self.OtherAlgs)
354  print("Master prescale:")
355  print(self.GetPrescale())
356  print("ItemList:")
357  print("Not available for bytestream")
358  return
359 
360 
362  """This class is used to help the AugmentedRootStream class in handling
363  filter algorithms in the same way as they behaved with the 'old' way of
364  setting up the D3PD::MakerAlg algorithm.
365  """
366  def __init__( self, stream, seq ):
367  self.stream = stream
368  self.seq = seq
369  return
370  def __iadd__( self, alg ):
371  self.seq += alg
372  self.stream.AddRequireAlgs( alg.getName() )
373  return
374 
376  """This class is used to handle output ROOT (D3PD) streams in Athena.
377  It inherits from the AugmentedStreamBase class, so implements its
378  interface, but at the same time it behaves for all intents and
379  purposes like a configurable for the D3PD::MakerAlg class.
380  """
381  def __init__( self, StreamName, FileName, TreeName = None, asAlg = False ):
382  """Constructor for the D3PD stream object.
383 
384  Arguments:
385  StreamName: Logical name of the D3PD stream. Note that beside
386  using it to define the stream in THistSvc, this
387  name is also used as the name of the TTree in the
388  output file in case one is not specified explicitly.
389  FileName: Name of the file to write the D3PD TTree into.
390  TreeName: Name of the TTree in the output file. If it's not
391  specified, the stream name is used as the tree name.
392  asAlg: If set to True, the D3PD::MakerAlg algorithm is added
393  to the job as a regular algorithm. When set to False
394  (default), the D3PD algorithm is added to the application
395  manager as an output stream.
396  """
397  # Initialize the base class:
398  AugmentedStreamBase.__init__( self, StreamName )
399 
400  # Check if the user specified a tree name or not:
401  if TreeName is None:
402  TreeName = StreamName
403 
404  # Remember the file and tree names just for bookkeeping:
405  self.fileName = FileName
406  self.treeName = TreeName
407 
408  # We need to add some stuff to the main algorithm sequence:
409  from AthenaCommon.AlgSequence import AlgSequence
410  topSequence = AlgSequence()
411 
412  # Create a sequence where the pre-D3PD-making algorithms are run:
413  from D3PDMakerConfig.D3PDMakerFlags import D3PDMakerFlags
414  preseq = AlgSequence( D3PDMakerFlags.PreD3PDAlgSeqName(),
415  StopOverride = True )
416  if not hasattr( topSequence, D3PDMakerFlags.PreD3PDAlgSeqName() ):
417  topSequence += [ preseq ]
418  pass
419 
420 
421  # Add the AANT algorithm for making it possible to back navigate
422  # from D3PD events:
423  ParentStreamName = StreamName.split( ':' )[ 0 ]
424  if StreamName.count( ':' ) != 0:
425  if StreamName.count( ':' ) == 1:
426  StreamName = StreamName.split( ':' )[ 1 ]
427  else:
428  raise AttributeError( "Stream name '%s' can't be used!" % StreamName )
429  if not hasattr( topSequence, ParentStreamName + "AANTStream" ):
430  try:
431  from AnalysisTools.AnalysisToolsConf import AANTupleStream
432  topSequence += AANTupleStream( ParentStreamName + "AANTStream",
433  ExtraRefNames = ['StreamRDO',
434  'StreamRAW',
435  'StreamESD',
436  'StreamAOD'],
437  OutputName = FileName,
438  WriteInputDataHeader = True,
439  StreamName = ParentStreamName )
440  pass
441  except ImportError:
442  print(self.Name,": INFO didn't find AnalysisTools.AnalysisToolsConf in release.")
443  import traceback
444  print(traceback.format_exc())
445  pass
446 
447  # Make sure that THistSvc exists.
448  from AthenaCommon.AppMgr import ServiceMgr
449  if not hasattr( ServiceMgr, 'THistSvc' ):
450  from GaudiSvc.GaudiSvcConf import THistSvc
451  ServiceMgr += THistSvc()
452 
453  # Check if the requested stream is already defined in THistSvc:
454  streamExists = False
455  for s in ServiceMgr.THistSvc.Output:
456  stream = s.split()[ 0 ]
457  if stream == StreamName:
458  streamExists = True
459  break
460 
461  # Add the stream if it's not defined yet:
462  if not streamExists:
463  ServiceMgr.THistSvc.Output += [ "%s DATAFILE='%s' OPT='RECREATE' CL='%i'" %
464  ( StreamName, FileName,
465  D3PDMakerFlags.CompressionLevel() ) ]
466 
467  # Finally, create the D3PD::MakerAlg algorithm and add it to the job.
468  # Note that here we're specifying that the D3PDMaker code should use
469  # ROOT output.
470  #
471  # If we're adding as an algorithm directly, then pass the parent sequence
472  # into MakerAlg(...). MakerAlg(...) will then add itself to the sequence
473  # and also set up the accompanying filter sequence. Otherwise, we add it
474  # as a stream; in that case we set up backwards compatibility for
475  # 'filterSeq'.
476  try:
477  import D3PDMakerCoreComps
478  if asAlg:
479  theseq = topSequence
480  else:
481  theseq = None
482  pass
483  self.Stream = D3PDMakerCoreComps.MakerAlg( StreamName + "D3PDMaker", seq = theseq,
484  file = FileName, stream = ParentStreamName,
485  tuplename = TreeName,
486  D3PDSvc = "D3PD::RootD3PDSvc" )
487 
488  if not asAlg:
489  from AthenaCommon.AppMgr import theApp
490  theApp.addOutputStream( self.Stream )
491  # Backwards compatibility for the filter algoirthm:
492  self.filterSeq = _RootStreamFilterHelper( self, topSequence )
493  pass
494  pass
495  except ImportError:
496  print(self.Name,": INFO didn't find D3PDMakerCoreComps in release.")
497  pass
498 
499  return
500 
501  def SetOutputFileName(self, name):
502  """It's not impossible to change the file name after the stream has been created,
503  but I didn't want to write this code unless there's actual need for it.
504  """
505  print("**** ERROR: Can't change the name of the output ROOT file! ****")
506  return
507 
508  #
509  # The following functions are not applicable for this type of stream:
510  #
511  def AddItem(self, item): pass
512  def RemoveItem(self, item): pass
513  def AddMetaDataItem(self, item): pass
514  def RemoveMetaDataItem(self, item): pass
515 
516  def Print(self):
517  print("**** AugmentedRootStream",self.Name,"****")
518  print("Output file:")
519  print(" " + self.fileName)
520  print("TTree name:")
521  print(" " + self.treeName)
522  print("AcceptAlgs:")
523  print(" " + str( self.Stream.AcceptAlgs ))
524  print("RequireAlgs:")
525  print(" " + str( self.Stream.RequireAlgs ))
526  print("VetoAlgs:")
527  print(" " + str( self.Stream.VetoAlgs ))
528  print("OtherAlgs to bookkeep (but not directly used by the Stream):")
529  print(" " + str( self.OtherAlgs ))
530  print("Master prescale:")
531  print(" " + str( self.GetPrescale() ))
532  print("ItemList:")
533  print(" Not available for ROOT (D3PD) stream")
534  return
535 
536  def __iadd__( self, configs ):
537  """This function makes it possible to add D3PDObject-s to this object in the same
538  way as they are added to D3PDMakerCoreComps.MakerAlg objects..__setattr__( name, value )
539  """
540  self.Stream += configs
541  return self
542 
543  def __getattr__( self, attr ):
544  """This function forwards attribute requests which don't exist in this object to
545  the D3PDMakerCoreComps.MakerAlg object.
546  """
547  if 'Stream' in self.__dict__ and hasattr( self.Stream, attr ):
548  return getattr( self.Stream, attr )
549  raise AttributeError( "D3PD Maker algorithm doesn't have property '%s'." % attr )
550  return
551 
552  def __setattr__( self, name, value ):
553  """This function forwards attribute setting requests to the D3PDMakerCoreComps.MakerAlg
554  object.
555  """
556  if hasattr( self, "Stream" ):
557  if hasattr( self.Stream, name ):
558  return self.Stream.__setattr__( name, value )
559  # The following doesn't work... :-/
560  # super( AugmentedRootStream, self ).__setattr__( name, value )
561  # So instead I'm using this:
562  self.__dict__[ name ] = value
563  return
564 
565 
567  """This class helps managing multiple streams.
568  Normal users only manipulate their own streams with functions like NewStream or GetStream,
569  while commands like Lock, AddItemToAllStreams or RenameAllStreams are for the real manager
570  (e.g. RecExCommon or a job transform class)"""
571  def __init__(self):
572  self.StreamList=[]
573  self.nStream=0
574  self.StreamDict={}
575  self._Locked=False
576  return
577 
578  def NewByteStream(self,StreamName,FileName="default"):
579  if FileName=="default":
580  FileName=StreamName
581  return self.NewStream(StreamName,FileName,type='bytestream')
582 
583  def NewPoolStream(self,StreamName,FileName="default", asAlg=False, noTag=False):
584  return self.NewStream(StreamName,FileName,type='pool',asAlg=asAlg, noTag=noTag)
585 
586  def NewPoolRootStream(self,StreamName,FileName="default", asAlg=False):
587  theStream = self.NewStream(StreamName,FileName,type='pool',asAlg=asAlg)
588  from AthenaCommon.AppMgr import theApp
589  from AthenaPoolCnvSvc import PoolAttributeHelper as pah
590  svcMgr = theApp.serviceMgr()
591 
592  theStream.Stream.WritingTool.SubLevelBranchName = "<key>"
593  # Use ZSTD w/ Level 5 for DAODs
594  svcMgr.AthenaPoolCnvSvc.PoolAttributes += [ pah.setFileCompAlg( FileName, "5" ) ]
595  svcMgr.AthenaPoolCnvSvc.PoolAttributes += [ pah.setFileCompLvl( FileName, "5" ) ]
596  # By default use a maximum basket buffer size of 128k and minimum buffer entries of 10
597  svcMgr.AthenaPoolCnvSvc.PoolAttributes += [ pah.setMaxBufferSize( FileName, "131072" ) ]
598  svcMgr.AthenaPoolCnvSvc.PoolAttributes += [ pah.setMinBufferEntries( FileName, "10" ) ]
599  # By default use 20 MB AutoFlush [or 100 (10) events for DAODs (everything else) for SharedWriter w/ parallel compression]
600  # for event data except for a number of select formats (see below)
601  TREE_AUTO_FLUSH = -20000000
602  from PyUtils.moduleExists import moduleExists
603  if moduleExists ('AthenaMP'): # AthenaMP not in AthAnalysis project
604  from AthenaMP.AthenaMPFlags import jobproperties as amjp
605  if amjp.AthenaMPFlags.UseSharedWriter() and amjp.AthenaMPFlags.UseParallelCompression():
606  TREE_AUTO_FLUSH = 100 if "DAOD_" in StreamName else 10
607  # By default use split-level 0 except for DAOD_PHYSLITE which is maximally split
608  CONTAINER_SPLITLEVEL = 0
609  if StreamName in ["StreamDAOD_PHYSVAL"]:
610  TREE_AUTO_FLUSH = 100
611  if StreamName in ["StreamDAOD_PHYS"]:
612  TREE_AUTO_FLUSH = 500
613  if StreamName in ["StreamDAOD_PHYSLITE", "StreamD2AOD_PHYSLITE"]:
614  TREE_AUTO_FLUSH = 1000
615  CONTAINER_SPLITLEVEL = 1
616  svcMgr.AthenaPoolCnvSvc.PoolAttributes += [ pah.setTreeAutoFlush( FileName, "CollectionTree", str(TREE_AUTO_FLUSH) ) ]
617  svcMgr.AthenaPoolCnvSvc.PoolAttributes += [ pah.setContainerSplitLevel( FileName, "CollectionTree", str(CONTAINER_SPLITLEVEL) ) ]
618  svcMgr.AthenaPoolCnvSvc.PoolAttributes += [ pah.setContainerSplitLevel( FileName, "Aux.", str(CONTAINER_SPLITLEVEL) ) ]
619  svcMgr.AthenaPoolCnvSvc.PoolAttributes += [ pah.setContainerSplitLevel( FileName, "Dyn.", "1" ) ]
620  return theStream
621 
622 
623  def NewPoolRootStreamExtension(self,StreamName,Parent="StreamDAOD_PHYS", asAlg=False):
624  index=0
625  FileName="default"
626  try:
627  #Check wheter a StreamDAOD_PHYS stream exists
628  index=MSMgr.StreamDict[Parent]
629  except KeyError:
630  index=-1
631  if index >= 0:
632  FileName=self.StreamList[index].Stream.OutputFile
633  self.StreamList[index].Stream.WritingTool.SaveDecisions = True
634  theStream = self.NewStream(StreamName,FileName,Parent=Parent,type='extension',asAlg=asAlg, noTag=True)
635  theStream.Stream.MetadataItemList = [ ]
636  theStream.Stream.ItemList = [ ]
637  theStream.Stream.WritingTool.SubLevelBranchName = "<key>"
638  theStream.Stream.WritingTool.OutputCollection = "POOLContainer_" + StreamName
639  theStream.Stream.WritingTool.PoolContainerPrefix = "CollectionTree_" + StreamName
640  from AthenaCommon.AppMgr import theApp
641  svcMgr = theApp.serviceMgr()
642  svcMgr.AthenaPoolCnvSvc.PoolAttributes += [ "DatabaseName = '" + FileName + "'; INDEX_MASTER = 'POOLContainer(DataHeader)'" ]
643  # By default use split-level 0 except for DAOD_PHYSLITE which is maximally split
644  from AthenaPoolCnvSvc import PoolAttributeHelper as pah
645  CONTAINER_SPLITLEVEL = 0
646  if Parent in ["StreamDAOD_PHYSVAL"]:
647  TREE_AUTO_FLUSH = 100
648  if Parent in ["StreamDAOD_PHYS"]:
649  TREE_AUTO_FLUSH = 500
650  if Parent in ["StreamDAOD_PHYSLITE", "StreamD2AOD_PHYSLITE"]:
651  TREE_AUTO_FLUSH = 1000
652  CONTAINER_SPLITLEVEL = 1
653  svcMgr.AthenaPoolCnvSvc.PoolAttributes += [ pah.setTreeAutoFlush( FileName, "CollectionTree_" + StreamName, str(TREE_AUTO_FLUSH) ) ]
654  svcMgr.AthenaPoolCnvSvc.PoolAttributes += [ pah.setContainerSplitLevel( FileName, "CollectionTree_" + StreamName, str(CONTAINER_SPLITLEVEL) ) ]
655  svcMgr.AthenaPoolCnvSvc.PoolAttributes += [ pah.setContainerSplitLevel( FileName, "Aux.", str(CONTAINER_SPLITLEVEL) ) ]
656  svcMgr.AthenaPoolCnvSvc.PoolAttributes += [ pah.setContainerSplitLevel( FileName, "Dyn.", "1" ) ]
657  return theStream
658 
659  def NewVirtualStream(self,StreamName,FileName="default", asAlg=False):
660  return self.NewStream(StreamName,FileName,type='virtual',asAlg=asAlg)
661 
662  def NewRootStream(self,StreamName,FileName=None,TreeName=None,asAlg=False):
663  """Function used to create a new D3PD 'stream'. The object returned by
664  it behaves both as an AugmentedStreamBase, and as a D3PD::MakerAlg
665  configurable.
666 
667  Arguments:
668  StreamName: Logical name of the D3PD stream. Used also as the D3PD
669  TTree name in case a tree name is not specified.
670  FileName: Name of the output file into which the D3PD should be
671  written. If not specified, '<StreamName>.root' is used.
672  TreeName: Name of the TTree in the created file. If not specified,
673  StreamName is used for the TTree name as well.
674  asAlg: Selects whether the 'stream' should be configured as an
675  actual stream, or an algorithm.
676  """
677  # Check if a file name was specified or not:
678  if FileName is None:
679  FileName = StreamName + ".root"
680  # Use the common function for creating the stream:
681  return self.NewStream( StreamName, FileName, type='root', asAlg = asAlg,
682  TreeName = TreeName )
683 
684  def NewStream(self,StreamName,FileName="default",type='pool',asAlg=False,TreeName=None,Parent=None,noTag=False):
685  if FileName=="default":
686  FileName=StreamName+".pool.root"
687  try:
688  #Check wheter a stream with the same name already exists
689  index=self.StreamDict[StreamName]
690  except KeyError:
691  #The stream doesn't already exist. Register it and set it up.
692  #(This is expected, not actually an error.)
693  index=self.nStream
694  if type=='pool':
695  self.StreamList += [ AugmentedPoolStream(StreamName,FileName,asAlg,isVirtual=False,noTag=noTag) ]
696  elif type=='bytestream':
697  self.StreamList += [ AugmentedByteStream(StreamName,FileName) ]
698  elif type=='virtual':
699  self.StreamList += [ AugmentedPoolStream(StreamName,FileName,asAlg,isVirtual=True) ]
700  elif type=='root':
701  self.StreamList += [ AugmentedRootStream(StreamName,FileName,TreeName,asAlg) ]
702  elif type=='extension':
703  self.StreamList += [ AugmentedPoolStreamExtension(StreamName,FileName,Parent,asAlg,isVirtual=False,noTag=True) ]
704  else:
705  raise RuntimeError("Unknown type '%s'"%type)
706 
707  self.StreamDict[StreamName]=index
708  self.nStream+=1
709  else:
710  #This is the real error case...
711  raise NameError("Stream %s already exists"%StreamName)
712  return self.StreamList[index]
713 
714  def GetStream(self, NameOrIndex):
715  #If NameOrIndex is an int, treat it as an index
716  if isinstance(NameOrIndex, int):
717  if NameOrIndex < self.nStream:
718  return self.StreamList[NameOrIndex]
719  else:
720  raise IndexError("ERROR: No stream with index %i is defined in MultipleStreamManager."%NameOrIndex)
721 
722  #else treat NameOrIndex as a name in the Stream Dictionary
723  try:
724  #Check wheter a stream with the same name already exists
725  index=self.StreamDict[NameOrIndex]
726  except KeyError:
727  raise NameError("Stream %s undefined!"%NameOrIndex)
728 
729  return self.StreamList[index]
730 
731  def StreamExists(self, StreamName):
732  return StreamName in self.StreamDict
733 
734  def Print(self):
735  print("**** MultipleStreamManager INFOS ****")
736  print("Number of streams:", self.nStream)
737  i=0
738  for Stream in self.StreamList:
739  print("----------------------- Stream #",i," -----------------------")
740  Stream.Print()
741  i+=1
742  return
743 
744  #Commands for the real manager (normal users only manipulate their own streams with the functions above)
745  def Lock(self):
746  self._Locked=True
747  return
748 
749  def Unlock(self):
750  self._Locked=False
751  return
752 
753  def AddItemToAllStreams(self, item):
754  if self._Locked is True:
755  raise AssertionError("MSMgr is locked. AddItemToAllStreams cannot be used.")
756  for Stream in self.StreamList:
757  Stream.AddItem(item)
758  return
759 
760  def RemoveItemFromAllStreams(self, item):
761  if self._Locked is True:
762  raise AssertionError("MSMgr is locked. RemoveItemFromAllStreams cannot be used.")
763  for Stream in self.StreamList:
764  Stream.RemoveItem(item)
765  return
766 
768  if self._Locked is True:
769  raise AssertionError("MSMgr is locked. AddMetaDataItemToAllStreams cannot be used.")
770  for Stream in self.StreamList:
771  Stream.AddMetaDataItem(item)
772  return
773 
775  if self._Locked is True:
776  raise AssertionError("MSMgr is locked. AddMetaDataItemFromAllStreams cannot be used.")
777  for Stream in self.StreamList:
778  Stream.RemoveMetaDataItem(item)
779  return
780 
781  def RenameAllStreams(self, NameList):
782  if self._Locked is True:
783  raise AssertionError("MSMgr is locked. RenameAllStreams cannot be used.")
784  if not isinstance(NameList, list):
785  raise TypeError("RenameAllStreams does not accep arguments of type %s"%type(NameList))
786  if len(NameList) != self.nStream:
787  raise IndexError("NameList needs to have the same length as self.StreamList.")
788 
789  i=0
790  while i<self.nStream:
791  self.StreamList[i].SetOutputFileName(NameList[i])
792  i+=1
793  return
794 
796  if self._Locked:
797  raise AssertionError("MSMgr is locked. WriteSkimDecisionsOfAllStreams cannot be used.")
798 
799  from AthenaCommon.AlgSequence import AlgSequence
800  topSequence = AlgSequence()
801  for Stream in self.StreamList:
802  if Stream.GetAcceptAlgs() or Stream.GetOtherAlgsToBookkeep() or Stream.GetRequireAlgs() or Stream.GetVetoAlgs():
803  sdw=Stream.GetSkimDecisionsWriter()
804  topSequence+=sdw
805  if isinstance(Stream,AugmentedPoolStream):
806  Stream.AddItem("SkimDecisionCollection#"+sdw.SkimDecisionsContainerName)
807  return
808 
809 
810 
813 if 'MSMgr' in vars():
814  raise RuntimeError("MSMgr already exists?!? This will almost certainly create erroneous results.")
python.MultipleStreamManager.AugmentedStreamBase.OtherAlgs
OtherAlgs
Definition: MultipleStreamManager.py:15
python.MultipleStreamManager.AugmentedRootStream.RemoveItem
def RemoveItem(self, item)
Definition: MultipleStreamManager.py:512
python.MultipleStreamManager.AugmentedPoolStream
Definition: MultipleStreamManager.py:165
python.MultipleStreamManager.AugmentedRootStream.__setattr__
def __setattr__(self, name, value)
Definition: MultipleStreamManager.py:552
python.MultipleStreamManager.AugmentedPoolStream.RequireAlgs
def RequireAlgs(self, AlgsList)
Require Algs.
Definition: MultipleStreamManager.py:224
python.MultipleStreamManager.AugmentedByteStream.AddMetaDataItem
def AddMetaDataItem(self, item)
Definition: MultipleStreamManager.py:339
python.MultipleStreamManager.AugmentedStreamBase.AddRequireAlgs
def AddRequireAlgs(self, algs)
Require Algs.
Definition: MultipleStreamManager.py:78
python.MultipleStreamManager.AugmentedPoolStream.AddMetaDataItem
def AddMetaDataItem(self, item)
Definition: MultipleStreamManager.py:204
python.MultipleStreamManager.AugmentedStreamBase.RemoveRequireAlgs
def RemoveRequireAlgs(self, algs)
Definition: MultipleStreamManager.py:82
python.MultipleStreamManager.MultipleStreamManager.NewRootStream
def NewRootStream(self, StreamName, FileName=None, TreeName=None, asAlg=False)
Definition: MultipleStreamManager.py:662
python.MultipleStreamManager._RootStreamFilterHelper.seq
seq
Definition: MultipleStreamManager.py:368
python.MultipleStreamManager.AugmentedRootStream.AddItem
def AddItem(self, item)
Definition: MultipleStreamManager.py:511
AthSequencer
ClassName: AthSequencer.
Definition: AthSequencer.h:40
python.MultipleStreamManager.AugmentedStreamBase.RemoveOtherAlgsToBookkeep
def RemoveOtherAlgsToBookkeep(self, algs)
Definition: MultipleStreamManager.py:108
python.MultipleStreamManager.AugmentedPoolStreamExtension.parentIndex
parentIndex
Definition: MultipleStreamManager.py:268
python.MultipleStreamManager._RootStreamFilterHelper.stream
stream
Definition: MultipleStreamManager.py:367
python.MultipleStreamManager.AugmentedByteStream
Definition: MultipleStreamManager.py:287
python.MultipleStreamManager.AugmentedByteStream.SetSimpleFileName
def SetSimpleFileName(self, name)
Definition: MultipleStreamManager.py:329
python.MultipleStreamManager.MultipleStreamManager.NewPoolRootStream
def NewPoolRootStream(self, StreamName, FileName="default", asAlg=False)
Definition: MultipleStreamManager.py:586
python.MultipleStreamManager.AugmentedByteStream.bsCopyTool
bsCopyTool
Definition: MultipleStreamManager.py:297
python.MultipleStreamManager.AugmentedPoolStreamExtension
Definition: MultipleStreamManager.py:259
python.AlgSequence.AlgSequence
AlgSequence
Definition: PhysicsAnalysis/D3PDTools/AnaAlgorithm/python/AlgSequence.py:7
python.MultipleStreamManager.AugmentedStreamBase.AddVetoAlgs
def AddVetoAlgs(self, algs)
Veto Algs (ignored by prescaler for now)
Definition: MultipleStreamManager.py:91
python.MultipleStreamManager.MultipleStreamManager.WriteSkimDecisionsOfAllStreams
def WriteSkimDecisionsOfAllStreams(self)
Definition: MultipleStreamManager.py:795
python.MultipleStreamManager.MultipleStreamManager.StreamList
StreamList
Definition: MultipleStreamManager.py:572
python.MultipleStreamManager.AugmentedPoolStream.GetMetaDataItems
def GetMetaDataItems(self)
Definition: MultipleStreamManager.py:212
python.MultipleStreamManager.MultipleStreamManager.NewStream
def NewStream(self, StreamName, FileName="default", type='pool', asAlg=False, TreeName=None, Parent=None, noTag=False)
Definition: MultipleStreamManager.py:684
python.MultipleStreamManager.AugmentedStreamBase
Definition: MultipleStreamManager.py:11
python.MultipleStreamManager.AugmentedRootStream.RemoveMetaDataItem
def RemoveMetaDataItem(self, item)
Definition: MultipleStreamManager.py:514
python.MultipleStreamManager.AugmentedByteStream.RemoveMetaDataItem
def RemoveMetaDataItem(self, item)
Definition: MultipleStreamManager.py:340
python.MultipleStreamManager._RootStreamFilterHelper.__init__
def __init__(self, stream, seq)
Definition: MultipleStreamManager.py:366
python.MultipleStreamManager.MultipleStreamManager.AddItemToAllStreams
def AddItemToAllStreams(self, item)
Definition: MultipleStreamManager.py:753
python.MultipleStreamManager.AugmentedStreamBase.SetPrescale
def SetPrescale(self, value)
Master prescale.
Definition: MultipleStreamManager.py:135
PrimaryDPDPrescaler
Definition: PrimaryDPDPrescaler.h:17
python.MultipleStreamManager.MultipleStreamManager.Print
def Print(self)
Definition: MultipleStreamManager.py:734
python.MultipleStreamManager.AugmentedPoolStream.Stream
Stream
Definition: MultipleStreamManager.py:171
python.MultipleStreamManager.AugmentedStreamBase.GetPrescale
def GetPrescale(self)
Definition: MultipleStreamManager.py:156
python.MultipleStreamManager.AugmentedStreamBase.GetSkimDecisionsWriter
def GetSkimDecisionsWriter(self)
Skim decisions writer.
Definition: MultipleStreamManager.py:117
python.MultipleStreamManager.AugmentedRootStream.SetOutputFileName
def SetOutputFileName(self, name)
Definition: MultipleStreamManager.py:501
python.MultipleStreamManager.AugmentedStreamBase.RemoveAcceptAlgs
def RemoveAcceptAlgs(self, algs)
Definition: MultipleStreamManager.py:69
python.MultipleStreamManager.AugmentedPoolStreamExtension.AddMetaDataItem
def AddMetaDataItem(self, item)
Definition: MultipleStreamManager.py:281
python.MultipleStreamManager.AugmentedPoolStream.Print
def Print(self)
Definition: MultipleStreamManager.py:237
python.MultipleStreamManager.AugmentedRootStream
Definition: MultipleStreamManager.py:375
python.MultipleStreamManager.MultipleStreamManager.RemoveItemFromAllStreams
def RemoveItemFromAllStreams(self, item)
Definition: MultipleStreamManager.py:760
python.MultipleStreamManager.AugmentedRootStream.Print
def Print(self)
Definition: MultipleStreamManager.py:516
python.MultipleStreamManager.AugmentedByteStream.SetOutputDirName
def SetOutputDirName(self, name)
Definition: MultipleStreamManager.py:333
python.MultipleStreamManager.MultipleStreamManager.StreamExists
def StreamExists(self, StreamName)
Definition: MultipleStreamManager.py:731
python.MultipleStreamManager.MultipleStreamManager
Definition: MultipleStreamManager.py:566
python.MultipleStreamManager.AugmentedStreamBase._Prescaler
_Prescaler
Definition: MultipleStreamManager.py:140
python.MultipleStreamManager.AugmentedPoolStream.RemoveItem
def RemoveItem(self, item)
Definition: MultipleStreamManager.py:197
python.MultipleStreamManager.AugmentedByteStream.bsOutputSvc
bsOutputSvc
Definition: MultipleStreamManager.py:305
python.MultipleStreamManager.AugmentedByteStream.__init__
def __init__(self, StreamName, FileName)
Definition: MultipleStreamManager.py:288
python.MultipleStreamManager.AugmentedPoolStream.GetEventStream
def GetEventStream(self)
Definition: MultipleStreamManager.py:178
python.MultipleStreamManager.AugmentedPoolStreamExtension.AddItem
def AddItem(self, item)
Items & MetaDataItems.
Definition: MultipleStreamManager.py:274
python.MultipleStreamManager.MultipleStreamManager.NewVirtualStream
def NewVirtualStream(self, StreamName, FileName="default", asAlg=False)
Definition: MultipleStreamManager.py:659
python.MultipleStreamManager.AugmentedStreamBase._ItemInList
def _ItemInList(self, item, aList)
Definition: MultipleStreamManager.py:24
python.MultipleStreamManager.AugmentedStreamBase.Name
Name
Definition: MultipleStreamManager.py:14
python.MultipleStreamManager.AugmentedStreamBase.GetRequireAlgs
def GetRequireAlgs(self)
Definition: MultipleStreamManager.py:86
python.MultipleStreamManager.AugmentedPoolStream.VetoAlgs
def VetoAlgs(self, AlgsList)
Veto Algs (ignored by prescaler for now)
Definition: MultipleStreamManager.py:231
python.MultipleStreamManager.AugmentedRootStream.Stream
Stream
Definition: MultipleStreamManager.py:483
python.MultipleStreamManager.AugmentedStreamBase.RemoveVetoAlgs
def RemoveVetoAlgs(self, algs)
Definition: MultipleStreamManager.py:95
python.MultipleStreamManager.AugmentedByteStream.RemoveItem
def RemoveItem(self, item)
Definition: MultipleStreamManager.py:338
python.MultipleStreamManager.MultipleStreamManager.RemoveMetaDataItemFromAllStreams
def RemoveMetaDataItemFromAllStreams(self, item)
Definition: MultipleStreamManager.py:774
python.MultipleStreamManager.MultipleStreamManager.NewPoolRootStreamExtension
def NewPoolRootStreamExtension(self, StreamName, Parent="StreamDAOD_PHYS", asAlg=False)
Definition: MultipleStreamManager.py:623
ByteStreamEventStorageOutputSvc
This class provides the services for writing FullEventFragment into file. This class implements the i...
Definition: ByteStreamEventStorageOutputSvc.h:47
python.MultipleStreamManager.AugmentedRootStream.__init__
def __init__(self, StreamName, FileName, TreeName=None, asAlg=False)
Definition: MultipleStreamManager.py:381
python.MultipleStreamManager.AugmentedRootStream.treeName
treeName
Definition: MultipleStreamManager.py:406
python.MultipleStreamManager.AugmentedPoolStream.AddItem
def AddItem(self, item)
Items & MetaDataItems.
Definition: MultipleStreamManager.py:193
python.MultipleStreamManager.MultipleStreamManager.NewPoolStream
def NewPoolStream(self, StreamName, FileName="default", asAlg=False, noTag=False)
Definition: MultipleStreamManager.py:583
AANTupleStream
Definition: AANTupleStream.h:35
python.MultipleStreamManager.AugmentedByteStream.Stream
Stream
Definition: MultipleStreamManager.py:316
python.MultipleStreamManager._RootStreamFilterHelper.__iadd__
def __iadd__(self, alg)
Definition: MultipleStreamManager.py:370
python.MultipleStreamManager.MultipleStreamManager.__init__
def __init__(self)
Definition: MultipleStreamManager.py:571
ByteStreamOutputStreamCopyTool
This is a tool that implements the IAthenaOutputStreamTool for copying ByteStream from input.
Definition: ByteStreamOutputStreamCopyTool.h:38
python.MultipleStreamManager.AugmentedByteStream.Print
def Print(self)
Definition: MultipleStreamManager.py:342
python.MultipleStreamManager.AugmentedStreamBase.__init__
def __init__(self, StreamName)
Definition: MultipleStreamManager.py:13
python.MultipleStreamManager.MultipleStreamManager.NewByteStream
def NewByteStream(self, StreamName, FileName="default")
Definition: MultipleStreamManager.py:578
Lb2Lll.THistSvc
THistSvc
Definition: Lb2Lll.py:216
python.MultipleStreamManager.AugmentedPoolStream.SetOutputFileName
def SetOutputFileName(self, name)
Definition: MultipleStreamManager.py:187
python.MultipleStreamManager.MultipleStreamManager.Lock
def Lock(self)
Definition: MultipleStreamManager.py:745
python.MultipleStreamManager.AugmentedRootStream.AddMetaDataItem
def AddMetaDataItem(self, item)
Definition: MultipleStreamManager.py:513
python.MultipleStreamManager.AugmentedPoolStream.RemoveMetaDataItem
def RemoveMetaDataItem(self, item)
Definition: MultipleStreamManager.py:208
python.MultipleStreamManager.AugmentedPoolStream.AcceptAlgs
def AcceptAlgs(self, AlgsList)
Accept Algs.
Definition: MultipleStreamManager.py:217
python.MultipleStreamManager.MultipleStreamManager.StreamDict
StreamDict
Definition: MultipleStreamManager.py:574
python.MultipleStreamManager.AugmentedPoolStream.GetItems
def GetItems(self)
Definition: MultipleStreamManager.py:201
python.MultipleStreamManager.AugmentedStreamBase._RemoveValidItemFromList
def _RemoveValidItemFromList(self, item, aList)
Definition: MultipleStreamManager.py:48
python.MultipleStreamManager._RootStreamFilterHelper
Definition: MultipleStreamManager.py:361
python.MultipleStreamManager.MultipleStreamManager.nStream
nStream
Definition: MultipleStreamManager.py:573
python.MultipleStreamManager.AugmentedStreamBase.GetOtherAlgsToBookkeep
def GetOtherAlgsToBookkeep(self)
Definition: MultipleStreamManager.py:112
python.MultipleStreamManager.MultipleStreamManager._Locked
_Locked
Definition: MultipleStreamManager.py:575
AthenaOutputStream
algorithm that marks for write data objects in SG
Definition: AthenaOutputStream.h:58
python.MultipleStreamManager.AugmentedStreamBase.GetVetoAlgs
def GetVetoAlgs(self)
Definition: MultipleStreamManager.py:99
python.MultipleStreamManager.AugmentedByteStream.SetOutputFileName
def SetOutputFileName(self, name)
Definition: MultipleStreamManager.py:324
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
Muon::print
std::string print(const MuPatSegment &)
Definition: MuonTrackSteering.cxx:28
python.MultipleStreamManager.AugmentedStreamBase.AddOtherAlgsToBookkeep
def AddOtherAlgsToBookkeep(self, algs)
Other Algs (e.g.
Definition: MultipleStreamManager.py:104
python.MultipleStreamManager.AugmentedStreamBase.AddAcceptAlgs
def AddAcceptAlgs(self, algs)
Accept Algs.
Definition: MultipleStreamManager.py:65
python.MultipleStreamManager.MultipleStreamManager.AddMetaDataItemToAllStreams
def AddMetaDataItemToAllStreams(self, item)
Definition: MultipleStreamManager.py:767
python.MultipleStreamManager.AugmentedRootStream.__iadd__
def __iadd__(self, configs)
Definition: MultipleStreamManager.py:536
str
Definition: BTagTrackIpAccessor.cxx:11
python.MultipleStreamManager.MultipleStreamManager.Unlock
def Unlock(self)
Definition: MultipleStreamManager.py:749
python.CreateOutputStreams.AthenaPoolOutputStream
def AthenaPoolOutputStream
backward compat
Definition: CreateOutputStreams.py:144
python.MultipleStreamManager.AugmentedStreamBase._AddValidItemToList
def _AddValidItemToList(self, item, aList)
Definition: MultipleStreamManager.py:35
python.MultipleStreamManager.AugmentedRootStream.filterSeq
filterSeq
Definition: MultipleStreamManager.py:492
python.MultipleStreamManager.AugmentedRootStream.__getattr__
def __getattr__(self, attr)
Definition: MultipleStreamManager.py:543
python.MultipleStreamManager.AugmentedRootStream.fileName
fileName
Definition: MultipleStreamManager.py:405
python.MultipleStreamManager.AugmentedPoolStreamExtension.__init__
def __init__(self, StreamName, FileName, Parent, asAlg, isVirtual, noTag=True)
Definition: MultipleStreamManager.py:260
python.MultipleStreamManager.MultipleStreamManager.GetStream
def GetStream(self, NameOrIndex)
Definition: MultipleStreamManager.py:714
python.MultipleStreamManager.AugmentedByteStream.AddItem
def AddItem(self, item)
Definition: MultipleStreamManager.py:337
python.MultipleStreamManager.AugmentedPoolStream.__init__
def __init__(self, StreamName, FileName, asAlg, isVirtual, noTag=False)
Definition: MultipleStreamManager.py:167
python.MultipleStreamManager.AugmentedStreamBase.GetAcceptAlgs
def GetAcceptAlgs(self)
Definition: MultipleStreamManager.py:73
python.MultipleStreamManager.MultipleStreamManager.RenameAllStreams
def RenameAllStreams(self, NameList)
Definition: MultipleStreamManager.py:781
python.MultipleStreamManager.AugmentedPoolStream.GetMetaDataStream
def GetMetaDataStream(self)
Definition: MultipleStreamManager.py:183