ATLAS Offline Software
dictwrite.py
Go to the documentation of this file.
1 #!/usr/bin/env pyroot.py
2 
3 # Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
4 
5 #----------------------------------------------
6 #
7 # PLEASE DO NOT UPDATE bs-streamerinfos.root YOURSELF!!!!
8 # Contact the person mentioned on:
9 # https://twiki.cern.ch/twiki/bin/view/Atlas/TrigSerializeResult
10 # and/or the Trigger EDM Coordinator
11 #
12 #----------------------------------------------
13 
14 import sys
15 
16 """
17 MN: NOTE about xAOD containers in ROOT5
18 For an xAOD container like xAOD::HIEventShapeContainer_v1
19 you need to either:
20 a) use the real class name: DataVector<xAOD::HIEventShape_v2>
21 b) have a real class in the 'objects' list BEFORE the typedef
22  (so the dict library gets loaded and the typedefs resolved)
23 """
24 
25 def update_streamerinfos(objects, updated_objects):
26  #doEDM=False
27  doEDM=True
28  doxAODonly=False
29  bs_filename = 'bs-streamerinfos.root'
30  import ROOT
31  from ROOT import TFile
32  from TrigSerializeResult import StreamerInfoGenerator
34  from collections import defaultdict
35  streamerChecksums = defaultdict(set)
36  print("Reading streamerinfos from", bs_filename)
37  file = TFile(bs_filename, 'UPDATE')
38  streamer_n = 0
39  if file.GetStreamerInfoList():
40  for i in file.GetStreamerInfoList():
41  if i.GetName() != 'listOfRules':
42  streamerChecksums[i.GetName()].add( i.GetCheckSum() )
43  streamer_n += 1
44  print("Read", streamer_n, 'streamers for', len(streamerChecksums), 'types')
45  print("")
46 
47  if doEDM:
48  from TrigEDMConfig.TriggerEDMRun3 import TriggerHLTListRun3
49  from TrigEDMConfig.DataScoutingInfo import getAllDataScoutingIdentifiers
50  BS_destinations = ["BS"] + getAllDataScoutingIdentifiers()
51  print("BS_destinations = {}".format(BS_destinations))
52  for item in TriggerHLTListRun3:
53  if any(bs in item[1].split() for bs in BS_destinations):
54  objects.append(item[0].split("#")[0])
55 
56  for pers in objects:
57  SIG.inspect(pers)
58  print("")
59 
60  fulllist = SIG.classlist
61  print(fulllist)
62  print('*******************************')
63 
64  from CLIDComps.clidGenerator import clidGenerator
65  cgen = clidGenerator("")
66 
67  types_new = 0
68  types_exist = 0
69  types_bad = 0
70  fulllist = list(set(fulllist))
71  for item in fulllist:
72  if doxAODonly and 'xAOD' not in item: continue # current issues seen because of missing xAOD libs not being loaded
73  print("Trying to fill item", item, "to root file")
74  c_clid = cgen.genClidFromName(item)
75  c_typeinfo = cgen.getTidFromClid(c_clid)
76  print("CLID", c_clid)
77  print("TypeInfo", c_typeinfo)
78  try:
79  cls = ROOT.gROOT.GetClass(item)
80  except Exception:
81  cls = ROOT.gROOT.GetClass(c_typeinfo)
82  print(cls)
83 
84  if cls is not None:
85  streamerinfo = cls.GetStreamerInfo()
86  if streamerinfo.GetCheckSum() == 0:
87  # try to patch missing checksum in DataVectors
88  print('Warning: no checksum in streamerinfo for type: ', cls.GetName())
89  print('Attempting to fix with 0x%x' % cls.GetCheckSum())
90  streamerinfo.SetCheckSum( cls.GetCheckSum() )
91 
92  chksum = streamerinfo.GetCheckSum()
93  if chksum not in streamerChecksums[cls.GetName()]:
94  print('Writing: %s streamer size=%d, checksum=0x%x' %(cls.GetName(), streamerinfo.Sizeof(), chksum))
95  obj = cls.New()
96  file.WriteObjectAny(obj, cls, cls.GetName())
97  types_new += 1
98  updated_objects.append( (cls.GetName(), chksum) )
99  else:
100  print('Skipping {} streamer checksum 0x{:x} - already in the file'.format(cls.GetName(), chksum))
101  types_exist += 1
102  else:
103  print('skipping ', item)
104  types_bad += 1
105  #sys.exit()
106  print('----')
107 
108  print('Wrote', types_new, 'types')
109  print('Skipped', types_exist, ' existing types')
110  print('Problems with', types_bad + len(SIG.problemclasses), ' types')
111  for t in SIG.problemclasses:
112  print(' ', t)
113 
114  return 0
115 
116 def main():
117  objects = [
118  'xAOD::TrigEMCluster_v1',
119  'xAOD::TrigEMClusterContainer_v1',
120  'xAOD::TrigEMClusterAuxContainer_v1',
121  'xAOD::TrigRingerRings_v1',
122  'xAOD::TrigRingerRingsContainer_v1',
123  'xAOD::TrigRingerRingsAuxContainer_v1',
124  'xAOD::TrigRNNOutput_v1',
125  'xAOD::TrigRNNOutputContainer_v1',
126  'xAOD::TrigRNNOutputAuxContainer_v1',
127  'xAOD::CaloClusterContainer_v1',
128  'xAOD::CaloClusterAuxContainer_v2',
129  'xAOD::L2StandAloneMuonContainer_v1',
130  'xAOD::L2StandAloneMuonAuxContainer_v1',
131  'xAOD::L2StandAloneMuonAuxContainer_v2',
132  'xAOD::L2CombinedMuonContainer_v1',
133  'xAOD::L2CombinedMuonAuxContainer_v1',
134  'xAOD::L2IsoMuonContainer_v1',
135  'xAOD::L2IsoMuonAuxContainer_v1',
136  'xAOD::MuonContainer_v1',
137  'xAOD::MuonAuxContainer_v1',
138  'xAOD::MuonAuxContainer_v2',
139  'xAOD::MuonAuxContainer_v3',
140  'xAOD::MuonAuxContainer_v4',
141  'xAOD::TrackParticleContainer_v1',
142  'xAOD::TrackParticleAuxContainer_v1',
143  'xAOD::TrackParticleAuxContainer_v2',
144  'xAOD::TrackParticleAuxContainer_v3',
145  'xAOD::TauJetContainer_v2',
146  'xAOD::TauJetAuxContainer_v2',
147  'xAOD::TauJetAuxContainer_v3',
148  'xAOD::VertexContainer_v1',
149  'xAOD::VertexAuxContainer_v1',
150  'xAOD::TrigCompositeContainer_v1',
151  'xAOD::TrigCompositeAuxContainer_v1',
152  'xAOD::TrigCompositeAuxContainer_v2',
153  'xAOD::MuonRoIContainer_v1',
154  'xAOD::MuonRoIAuxContainer_v1',
155  'xAOD::EmTauRoIContainer_v2',
156  'xAOD::EmTauRoIAuxContainer_v2',
157  'xAOD::JetRoIContainer_v2',
158  'xAOD::JetRoIAuxContainer_v2',
159  'xAOD::JetEtRoI_v1',
160  'xAOD::JetEtRoIAuxInfo_v1',
161  'xAOD::EnergySumRoI_v1',
162  'xAOD::EnergySumRoIAuxInfo_v1',
163  'xAOD::TriggerTowerContainer_v2',
164  'xAOD::TriggerTowerAuxContainer_v2',
165  'xAOD::ElectronContainer_v1',
166  'xAOD::ElectronAuxContainer_v1',
167  'xAOD::PhotonContainer_v1',
168  'xAOD::PhotonAuxContainer_v1',
169  'xAOD::TrigBphysContainer_v1',
170  'xAOD::TrigBphysAuxContainer_v1',
171  'xAOD::TrigT2MbtsBitsAuxContainer_v1',
172  'xAOD::TrigT2MbtsBitsContainer_v1',
173  'xAOD::TrigSpacePointCountsContainer_v1',
174  'xAOD::TrigSpacePointCountsAuxContainer_v1',
175  'xAOD::TrigVertexCountsContainer_v1',
176  'xAOD::TrigVertexCountsAuxContainer_v1',
177  'xAOD::TrigTrackCounts_v1',
178  'xAOD::TrigTrackCountsContainer_v1',
179  'xAOD::TrigTrackCountsAuxContainer_v1',
180  'xAOD::TrigMissingETContainer_v1',
181  'xAOD::TrigMissingETAuxContainer_v1',
182  'xAOD::TrigPhotonContainer_v1',
183  'xAOD::TrigPhotonAuxContainer_v1',
184  'xAOD::TrigElectronContainer_v1',
185  'xAOD::TrigElectronAuxContainer_v1',
186  'xAOD::JetContainer_v1',
187  'xAOD::JetTrigAuxContainer_v1',
188  'xAOD::JetTrigAuxContainer_v2',
189  'xAOD::TrigDecision_v1',
190  'xAOD::TrigDecisionAuxInfo_v1',
191  'xAOD::TrigConfKeys_v1',
192  'xAOD::TrigNavigation_v1',
193  'xAOD::TrigNavigationAuxInfo_v1',
194  'xAOD::BTaggingContainer_v1',
195  'xAOD::BTaggingAuxContainer_v1',
196  'xAOD::BTaggingTrigAuxContainer_v1',
197  'xAOD::BTagVertexContainer_v1',
198  'xAOD::BTagVertexAuxContainer_v1',
199  'xAOD::HIEventShapeAuxContainer_v2',
200  'xAOD::HIEventShapeContainer_v2',
201  'xAOD::TrigT2ZdcSignalsAuxContainer_v1',
202  'xAOD::TrigT2ZdcSignalsContainer_v1',
203  'xAOD::TrigPassBitsContainer_v1',
204  'xAOD::TrigPassBitsAuxContainer_v1',
205  'xAOD::CaloClusterTrigAuxContainer_v1',
206  'xAOD::ElectronTrigAuxContainer_v1',
207  'xAOD::PhotonTrigAuxContainer_v1',
208  'xAOD::TrigEMClusterAuxContainer_v2',
209  'xAOD::TrigRingerRingsAuxContainer_v2',
210  'xAOD::TrigRNNOutput_v2',
211  'xAOD::TrigRNNOutputContainer_v2',
212  'xAOD::TrigRNNOutputAuxContainer_v2',
213  'xAOD::TauTrack_v1',
214  'xAOD::TauTrackContainer_v1',
215  'xAOD::TauTrackAuxContainer_v1',
216  #'TrigMuonEFIsolation_p2',
217  'xAOD::BTaggingAuxContainer_v2',
218  'xAOD::jFexMETRoI_v1',
219  'xAOD::jFexMETRoIAuxContainer_v1',
220  'xAOD::jFexSumETRoI_v1',
221  'xAOD::jFexSumETRoIAuxContainer_v1',
222  'xAOD::eFexTauRoIAuxContainer_v1',
223  'xAOD::gFexGlobalRoI_v1',
224  'xAOD::gFexGlobalRoIAuxContainer_v1',
225  'xAOD::gFexJetRoI_v1',
226  'xAOD::gFexJetRoIAuxContainer_v1',
227  'xAOD::AFPToFHit_v1',
228  'xAOD::AFPVertex_v1',
229  'xAOD::AFPVertexAuxContainer_v1',
230  'xAOD::AFPSiHit_v2',
231  'xAOD::AFPProton_v1',
232  'xAOD::AFPProtonAuxContainer_v1',
233  'xAOD::AFPToFTrack_v1',
234  'xAOD::AFPToFTrackAuxContainer_v1',
235  'xAOD::AFPSiHitsClusterAuxContainer_v1',
236  'xAOD::jFexTauRoIAuxContainer_v1',
237  'xAOD::jFexSRJetRoI_v1',
238  'xAOD::jFexSRJetRoIAuxContainer_v1',
239  'xAOD::jFexLRJetRoI_v1',
240  'xAOD::jFexLRJetRoIAuxContainer_v1',
241  ]
242  updated_objects = []
243  return update_streamerinfos(objects, updated_objects)
244 
245 if __name__ == "__main__":
246  sys.exit(main())
dictwrite.main
def main()
Definition: dictwrite.py:116
vtune_athena.format
format
Definition: vtune_athena.py:14
StreamerInfoGenerator.StreamerInfoGenerator
Definition: StreamerInfoGenerator.py:7
python.DataScoutingInfo.getAllDataScoutingIdentifiers
def getAllDataScoutingIdentifiers()
Definition: DataScoutingInfo.py:79
dictwrite.update_streamerinfos
def update_streamerinfos(objects, updated_objects)
Definition: dictwrite.py:25
add
bool add(const std::string &hname, TKey *tobj)
Definition: fastadd.cxx:55
histSizes.list
def list(name, path='/')
Definition: histSizes.py:38
CxxUtils::set
constexpr std::enable_if_t< is_bitmask_v< E >, E & > set(E &lhs, E rhs)
Convenience function to set bits in a class enum bitmask.
Definition: bitmask.h:224
Muon::print
std::string print(const MuPatSegment &)
Definition: MuonTrackSteering.cxx:28
Trk::split
@ split
Definition: LayerMaterialProperties.h:38