ATLAS Offline Software
Loading...
Searching...
No Matches
Run3AFPExampleMonitorAlgorithm.py
Go to the documentation of this file.
1#
2# Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3#
4
5'''
6@file Run3AFPExampleMonitorAlgorithm.py
7@author N. Dikic
8@date 2020-08-12
9'''
10
12 '''Function to configures some algorithms in the monitoring system.'''
13 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
14 result = ComponentAccumulator()
15
16 # don't run in RAWtoESD
17 if inputFlags.DQ.Environment in ('tier0Raw',):
18 return result
19
20 from LumiBlockComps.BunchCrossingCondAlgConfig import BunchCrossingCondAlgCfg
21 result.merge(BunchCrossingCondAlgCfg(inputFlags))
22
23 from AthenaMonitoring import AthMonitorCfgHelper
24 helper = AthMonitorCfgHelper(inputFlags,'Run3AFPMonitorCfg')
25
26 from AthenaConfiguration.ComponentFactory import CompFactory
27
28 #from Run3AFPMonitoring.Run3AFPMonitoringConf import AFPSiLayerAlgorithm
29 afpSiLayerAlgorithmFac = CompFactory.AFPSiLayerAlgorithm
30 afpSiLayerAlgorithm = helper.addAlgorithm(afpSiLayerAlgorithmFac,'AFPSiLayerAlg')
31
32 #from Run3AFPMonitoring.Run3AFPMonitoringConf import AFPToFAlgorithm
33 afpToFAlgorithmFac = CompFactory.AFPToFAlgorithm
34 afpToFAlgorithm = helper.addAlgorithm(afpToFAlgorithmFac,'AFPToFAlg')
35
36 afpToFSiTAlgorithmFac = CompFactory.AFPToFSiTAlgorithm
37 afpToFSiTAlgorithm = helper.addAlgorithm(afpToFSiTAlgorithmFac,'AFPToFSiTAlg')
38
39
40
41 # Add a generic monitoring tool (a "group" in old language).
42 # The returned object here is the standard GenericMonitoringTool.
43 AFPSiGroup = helper.addGroup(afpSiLayerAlgorithm, 'AFPSiLayerTool', 'AFP/')
44 AFPToFGroup = helper.addGroup(afpToFAlgorithm, 'AFPToFTool', 'AFP/')
45 AFPToFSiTGroup = helper.addGroup(afpToFSiTAlgorithm, 'AFPToFSiTTool', 'AFP/')
46
47 xLabelsStations = ['farAside', 'nearAside', 'nearCside', 'farCside']
48 xLabelsStationsPlanes = ['fA3','fA2','fA1','fA0','nA3','nA2','nA1','nA0','nC0','nC1','nC2','nC3','fC0','fC1','fC2','fC3']
49 xLabelsForEventsPerStation = [ 'fA', '-','-','-', 'nA', '-', '-', '-', 'nC', '-', '-', '-', 'fC', '-', '-', '-', ]
50 xLabelsHitBarVsTrain = [ 'A', 'B', 'C', 'D']
51 yLabelsHitBarVsTrain = [ '0', '1', '2', '3']
52 xLabelsToFEff = [ 'A', 'B', 'C', 'D', 'Tr']
53 yLabelsToFEff = [ '0', '1', '2', '3']
54
55 AFPSiGroup.defineHistogram('lb,nSiHits', title='Total number of hits divided by number of events;lumiblock;total number of hits', type='TProfile', path='SiT/', xbins=2000, xmin=0.5, xmax=2000.5)
56 AFPSiGroup.defineHistogram('eventsPerStation', title='Number of events per stations; station; events', type='TH1I', path='SiT/Aux/', xbins=16, xmin=-0.5, xmax=15.5, xlabels=xLabelsForEventsPerStation )
57 AFPSiGroup.defineHistogram('clustersInPlanes', title='Number of clusters per planes; plane; clusters', type='TH1I', path='SiT/Aux/', xbins=16, xmin=-0.5, xmax=15.5, xlabels=xLabelsStationsPlanes )
58 AFPSiGroup.defineHistogram('lb,muPerBX', title='<mu>;lumiBlock;<mu>', type='TProfile', path='SiT/', xbins=2000, xmin=0.5, xmax=2000.5)
59 AFPSiGroup.defineHistogram('planeHitsAllMU', title='Number of hits per plane divided by <mu>;plane; hits/<mu>', type='TH1F', path='SiT/HitsPerPlanes/', xbins=16, xmin=-0.5, xmax=15.5, weight = 'weightAllPlanes', xlabels=xLabelsStationsPlanes )
60 AFPSiGroup.defineHistogram('numberOfHitsPerStation', title='Number of hits per station; station; hits', type='TH1I', path='SiT/Aux/', xbins=4, xmin=-0.5, xmax=3.5, xlabels=xLabelsStations)
61 AFPSiGroup.defineHistogram('lbEvents;NumberOfEventsPerLumiblock',title='Number of events per lumiblock; lumiblock; events', type='TH1I', path='SiT/Aux/', xbins=2000, xmin=0.5, xmax=2000.5)
62 AFPSiGroup.defineHistogram('lbHits;NumberOfHitsPerLumiblock',title='Number of hits per lumiblock; lumiblock; hits', type='TH1I', path='SiT/Aux/', xbins=2000, xmin=0.5, xmax=2000.5)
63
64 #SIT: BCID histograms
65 AFPSiGroup.defineHistogram('bcidAll', title='(All) Paired bunches - SiT; BX; entries', type='TH1I', path='SiT/BCID_Mask', xbins=4000, xmin=-0.5, xmax=3999.5)
66 AFPSiGroup.defineHistogram('bcidFront', title='(Front) Paired bunches - SiT; BX; entries', type='TH1I', path='SiT/BCID_Mask', xbins=4000, xmin=-0.5, xmax=3999.5)
67 AFPSiGroup.defineHistogram('bcidMiddle', title='(Middle) Paired bunches - SiT; BX; entries', type='TH1I', path='SiT/BCID_Mask', xbins=4000, xmin=-0.5, xmax=3999.5)
68 AFPSiGroup.defineHistogram('bcidEnd', title='(End) Paired bunches - SiT; BX; entries', type='TH1I', path='SiT/BCID_Mask', xbins=4000, xmin=-0.5, xmax=3999.5)
69
70 AFPSiGroup.defineHistogram('lbEventsStationsAll', title='Number of events per lumiblock for all stations;lumiblock; events', type='TH1I', path='SiT/StationEvents/', xbins=2000, xmin=0.5, xmax=2000.5)
71 AFPSiGroup.defineHistogram('numberOfEventsPerLumiblockFront', title='(Front) Number of events per lumiblock for all stations;lumiblock; events', type='TH1I', path='SiT/Aux/', xbins=2000, xmin=0.5, xmax=2000.5)
72 AFPSiGroup.defineHistogram('numberOfEventsPerLumiblockMiddle', title='(Middle) Number of events per lumiblock for all stations;lumiblock; events', type='TH1I', path='SiT/Aux/', xbins=2000, xmin=0.5, xmax=2000.5)
73 AFPSiGroup.defineHistogram('numberOfEventsPerLumiblockEnd', title='(End) Number of events per lumiblock for all stations;lumiblock; events', type='TH1I', path='SiT/Aux/', xbins=2000, xmin=0.5, xmax=2000.5)
74
75
76 AFPToFGroup.defineHistogram('lb,nTofHits', title='Multiplicity;lumiblock;total number of Hits', type='TProfile', path='ToF/', xbins=2000, xmin=0.5, xmax=2000.5)
77
78 AFPToFGroup.defineHistogram('lb,muPerBXToF', title='<mu>;lumiblock;<mu>', type='TProfile', path='ToF/', xbins=2000, xmin=0.5, xmax=2000.5)
79
80 AFPToFGroup.defineHistogram('lbAandCToFEvents', title='Number of events in ToF stations A and C vs lb; lumiblock; events', type='TH1I', path='ToF/Events', xbins=2000, xmin=0.5, xmax=2000.5)
81 AFPToFGroup.defineHistogram('lbAToFEvents', title='Number of events in ToF station A vs lb; lumiblock; events', type='TH1I', path='ToF/Events', xbins=2000, xmin=0.5, xmax=2000.5)
82 AFPToFGroup.defineHistogram('lbCToFEvents', title='Number of events in ToF station C vs lb; lumiblock; events', type='TH1I', path='ToF/Events', xbins=2000, xmin=0.5, xmax=2000.5)
83
84 # TOF: BCID histograms
85 AFPToFGroup.defineHistogram('bcidAllToF', title='(All) Paired bunches - ToF; BX; entries', type='TH1I', path='ToF/BCID_Mask', xbins=4000, xmin=-0.5, xmax=3999.5)
86 AFPToFGroup.defineHistogram('bcidFrontToF', title='(Front) Paired bunches - ToF; BX; entries', type='TH1I', path='ToF/BCID_Mask', xbins=4000, xmin=-0.5, xmax=3999.5)
87 AFPToFGroup.defineHistogram('bcidMiddleToF', title='(Middle) Paired bunches - ToF; BX; entries', type='TH1I', path='ToF/BCID_Mask', xbins=4000, xmin=-0.5, xmax=3999.5)
88 AFPToFGroup.defineHistogram('bcidEndToF', title='(End) Paired bunches - ToF; BX; entries', type='TH1I', path='ToF/BCID_Mask', xbins=4000, xmin=-0.5, xmax=3999.5)
89
90 # TOF: AFPToFSiT histograms
91 AFPToFSiTGroup.defineHistogram('lqBar_tight_A,fsp0_rows_tight_A;ToFSiTCorrTightXA', title='LQBar vs FSP0 X dim with FSP2 Side A;Train;FSP0 x-pix [50 um]', type='TH2I', path='ToFSiTCorr/', xbins=20, xmin=-1, xmax=4, ybins=34, ymin=-0.05, ymax=335.5)
92 AFPToFSiTGroup.defineHistogram('lqBar_tight_C,fsp0_rows_tight_C;ToFSiTCorrTightXC', title='LQBar vs FSP0 X dim with FSP2 Side C;Train;FSP0 x-pix [50 um]', type='TH2I', path='ToFSiTCorr/', xbins=20, xmin=-1, xmax=4, ybins=34, ymin=-0.05, ymax=335.5)
93 AFPToFSiTGroup.defineHistogram('lqBar_tight_A,fsp0_columns_tight_A;ToFSiTCorrTightYA', title='LQBar vs FSP0 columns with FSP2 hit Side A;Train;FSP0 y-pix [250 um]', type='TH2I', path='ToFSiTCorr/', xbins=20, xmin=-1, xmax=4, ybins=80, ymin=-0.5, ymax=79.5)
94 AFPToFSiTGroup.defineHistogram('lqBar_tight_C,fsp0_columns_tight_C;ToFSiTCorrTightYC', title='LQBar vs FSP0 columns with FSP2 hit Side C;Train;FSP0 y-pix [250 um]', type='TH2I', path='ToFSiTCorr/', xbins=20, xmin=-1, xmax=4, ybins=80, ymin=-0.5, ymax=79.5)
95
96 AFPToFSiTGroup.defineHistogram('trainHits_A,fsp0_rows_tight_A;ToFSiTCorrTrainHitsXA', title='# hits in train vs FSP0 X dim with FSP2 Side A;Train hits (train+numHits/5);FSP0 x-pix [50 um]', type='TH2I', path='ToFSiTCorr/', xbins=25, xmin=-1, xmax=4, ybins=34, ymin=-0.05, ymax=335.5)
97 AFPToFSiTGroup.defineHistogram('trainHits_C,fsp0_rows_tight_C;ToFSiTCorrTrainHitsXC', title='# hits in train vs FSP0 X dim with FSP2 Side C;Train hits (train+numHits/5);FSP0 x-pix [50 um]', type='TH2I', path='ToFSiTCorr/', xbins=25, xmin=-1, xmax=4, ybins=34, ymin=-0.05, ymax=335.5)
98 AFPToFSiTGroup.defineHistogram('trainHits_A,fsp0_columns_tight_A;ToFSiTCorrTrainHitsYA', title='# hits in train vs FSP0 columns with FSP2 hit Side A;Train hits (train+numHits/5);FSP0 y-pix [250 um]', type='TH2I', path='ToFSiTCorr/', xbins=25, xmin=-1, xmax=4, ybins=80, ymin=-0.5, ymax=79.5)
99 AFPToFSiTGroup.defineHistogram('trainHits_C,fsp0_columns_tight_C;ToFSiTCorrTrainHitsYC', title='# hits in train vs FSP0 columns with FSP2 hit Side C;Train hits (train+numHits/5);FSP0 y-pix [250 um]', type='TH2I', path='ToFSiTCorr/', xbins=25, xmin=-1, xmax=4, ybins=80, ymin=-0.5, ymax=79.5)
100
101 AFPToFSiTGroup.defineHistogram('tofHits_A,fsp0Hits_A;ToFSiTNumHitsA', title='TOF vs FSP0 num. hits Side A;#Hit bars;FSP0 multiplicity', type='TH2F', path='ToFSiTCorr/', xbins=17, xmin=0, xmax=16, ybins=150, ymin=-0.5, ymax=149.5)
102 AFPToFSiTGroup.defineHistogram('tofHits_C,fsp0Hits_C;ToFSiTNumHitsC', title='TOF vs FSP0 num. hits Side C;#Hit bars;FSP0 multiplicity', type='TH2F', path='ToFSiTCorr/', xbins=17, xmin=0, xmax=16, ybins=150, ymin=-0.5, ymax=149.5)
103
104 AFPToFSiTGroup.defineHistogram('tof_eff_OFF_passed_A, tof_eff_OFF_bars_A, tof_eff_OFF_trains_A ;Efficiency_A', title='Efficiency ToF Side A;Bar;Train;Efficiency', type='TEfficiency', path='ToFSiT/Efficiency/', xbins=5, xmin=0, xmax=5, ybins=4, ymin=0, ymax=4, xlabels=xLabelsToFEff, ylabels=yLabelsToFEff)
105 AFPToFSiTGroup.defineHistogram('tof_eff_OFF_passed_C, tof_eff_OFF_bars_C, tof_eff_OFF_trains_C ;Efficiency_C', title='Efficiency ToF Side C;Bar;Train;Efficiency', type='TEfficiency', path='ToFSiT/Efficiency/', xbins=5, xmin=0, xmax=5, ybins=4, ymin=0, ymax=4, xlabels=xLabelsToFEff, ylabels=yLabelsToFEff)
106
107 AFPToFSiTGroup.defineHistogram('lqBar_A,fs_rows_full_A;ToFSiTCorr_FullXA', title='LQBar vs FS rows Full Side A;Train;FSP x-pix [50 um]', type='TH2F', path='ToFSiTCorr/', xbins=20, xmin=-1, xmax=4, ybins=346, ymin=-10.5, ymax=335.5)
108 AFPToFSiTGroup.defineHistogram('lqBar_C,fs_rows_full_C;ToFSiTCorr_FullXC', title='LQBar vs FS rows Full Side C;Train;FSP x-pix [50 um]', type='TH2F', path='ToFSiTCorr/', xbins=20, xmin=-1, xmax=4, ybins=346, ymin=-10.5, ymax=335.5)
109
110 # Plane Occupancy
111 AFPSiGroup.defineHistogram('hitPerPlaneEventMuIndex,hitsPerPlaneEventsMu',
112 title='Plane Occupancy;Global Plane Index;Hits on Plane',
113 type='TProfile',
114 path='SiT/PlaneOccupancy/',
115 xbins=16, xmin=-0.5, xmax=15.5,
116 xlabels=xLabelsStationsPlanes)
117
118 planeList = ['P0', 'P1', 'P2', 'P3']
119 array_corr = helper.addArray([planeList], afpToFSiTAlgorithm, 'AFPToFSiTTool', topPath='AFP/ToFSiTCorr/')
120 array_corr.defineHistogram('lqBar_A,fs_rows_A;ToFSiTCorrXA_{0}', type='TH2F', title='LQBar vs FS{0} rows Side A;Train;FS{0} x-pix [50 um]', xbins=20, xmin=-1, xmax=4, ybins=346, ymin=-10.5, ymax=335.5)
121 array_corr.defineHistogram('lqBar_C,fs_rows_C;ToFSiTCorrXC_{0}', type='TH2F', title='LQBar vs FS{0} rows Side C;Train;FS{0} x-pix [50 um]', xbins=20, xmin=-1, xmax=4, ybins=346, ymin=-10.5, ymax=335.5)
122 array_corr.defineHistogram('lqBar_A,fs_columns_A;ToFSiTCorrYA_{0}', type='TH2F', title='LQBar vs FS{0} columns Side A;Train;FS{0} y-pix [250 um]', xbins=20, xmin=-1, xmax=4, ybins=85, ymin=-5.5, ymax=79.5)
123 array_corr.defineHistogram('lqBar_C,fs_columns_C;ToFSiTCorrYC_{0}', type='TH2F', title='LQBar vs FS{0} columns Side C;Train;FS{0} y-pix [250 um]', xbins=20, xmin=-1, xmax=4, ybins=85, ymin=-5.5, ymax=79.5)
124
125
126 # Using a map of groups
127 layerList = ['P0','P1', 'P2', 'P3']
128 stationList = ['farAside', 'nearAside', 'nearCside', 'farCside']
129
130 array = helper.addArray([stationList,layerList], afpSiLayerAlgorithm, 'AFPSiLayerTool', topPath = 'AFP/SiT/')
131
132 array.defineHistogram('pixelColIDChip', title='Hits per column for station {0}, layer {1};ColID; entries', path='PixelColIDChip/{0}', xbins=80, xmin=0.5, xmax=80.5)
133 array.defineHistogram('pixelRowIDChip', title='Hits per row for station {0}, layer {1};RowID; entries', path='PixelRowIDChip/{0}', xbins=336, xmin=0.5, xmax=336.5)
134 array.defineHistogram('pixelRowIDChip,pixelColIDChip', title='Hitmap for station {0}, layer {1};RowID;ColID', type='TH2I', path='pixelColRow2D/{0}', xbins=336, xmin=0.5, xmax=336.5, ybins=80, ymin=0.5, ymax=80.5)
135 array.defineHistogram('timeOverThreshold', type='TH1I', title='Time over threshold for station {0}, layer {1};timeOverThreshold; entries', path='SiTimeOverThreshold/{0}', xbins=16, xmin=0.5, xmax=16.5)
136
137 array.defineHistogram('clusterY,clusterX', title='Cluster position in station {0} Layer {1};x [mm];y [mm]', type='TH2F', path='Cluster/{0}', xbins=336, xmin=0.0, xmax=17.0, ybins=80, ymin=0.0, ymax=20.0)
138 array.defineHistogram('sit_plane_eff_passed, sit_plane_eff_triedY, sit_plane_eff_triedX ;Efficiency', title='Efficiency for station {0} Layer {1};x [mm];y [mm]', type='TEfficiency', path='Efficiency/{0}', xbins=336, xmin=0.0, xmax=17.0, ybins=80, ymin=0.0, ymax=20.0)
139 #Sync clusters
140 array.defineHistogram('lbClustersPerPlanesAll,clustersPerPlaneAllPP', title='(All) Number of clusters in station {0}, plane {1} per lumiblock divided by <mu> per event;lumiblock;clusters/<mu> per event', type='TProfile', path='Synchronization/Clusters/', xbins=2000, xmin=0.5, xmax=2000.5)
141 array.defineHistogram('lbClustersPerPlanesFront,clustersPerPlaneFrontPP', title='(Front) Number of clusters in station {0}, plane {1} per lumiblock divided by <mu> per event;lumiblock; clusters/<mu> per event', type='TProfile', path='Synchronization/Clusters/Front/', xbins=2000, xmin=0.5, xmax=2000.5)
142 array.defineHistogram('lbClustersPerPlanesMiddle,clustersPerPlaneMiddlePP', title='(Middle) Number of clusters in station {0}, plane {1} per lumiblock divided by <mu> per event; lumiblock;clusters/<mu> per event', type='TProfile', path='Synchronization/Clusters/Middle/', xbins=2000, xmin=0.5, xmax=2000.5)
143 array.defineHistogram('lbClustersPerPlanesEnd,clustersPerPlaneEndPP', title='(End) Number of clusters in station {0}, plane {1} per lumiblock divided by <mu> per event; lumiblock;clusters/<mu> per event', type='TProfile', path='Synchronization/Clusters/End/', xbins=2000, xmin=0.5, xmax=2000.5)
144
145 array.defineHistogram('lbhitsPerPlaneProfile, hitsPerPlaneProfile', title='Number of hits in station {0}, plane {1} per lumiblock per event divided by <mu>;lumiblock; hits/<mu> per event', type='TProfile', path='HitsPerPlanesVsLb/', xbins=2000, xmin=0.5, xmax=2000.5)
146
147 array.defineHistogram('clusterToT', title='Sum of all hits\' ToT in each cluster, station {0}, layer {1};Cluster ToT; Counts', type='TH1I', path='ClusterToT/', xbins=18, xmin=0.5, xmax=18.5)
148
149 array = helper.addArray([stationList], afpSiLayerAlgorithm, 'AFPSiLayerTool', topPath='AFP/SiT/')
150
151 array.defineHistogram('planeHits', type='TH1I', title='Number of hits per plane, station {0};plane; hits', path='HitsPerPlanes', xbins=4, xmin=-0.5, xmax=3.5)
152 array.defineHistogram('trackY,trackX', title='Number of tracks in AFP station {0};x [mm];y [mm]', type='TH2F', path='Track', xbins=336, xmin=0.0, xmax=17.0, ybins=80, ymin=0.0, ymax=20.0)
153 array.defineHistogram('lbEventsStations', title='Number of events per lumiblock, station {0};lumiblock; events', type='TH1I', path='StationEvents/', xbins=2000, xmin=0.5, xmax=2000.5)
154
155 #Sync tracks
156 array.defineHistogram('lbTracksAll,Total_tracks_All_profile', title = '(All) Tracks vs lumiblock divided by <mu> per event, station {0};lumiblock;tracks/<mu> per event', type='TProfile', path='Synchronization/Tracks', xbins=2000, xmin=0.5, xmax=2000.5)
157 array.defineHistogram('lbTracksFront,Total_tracks_Front_profile', title = '(Front) Tracks vs lumiblock divided by <mu> per event, station {0}; lumiblock;tracks/<mu> per event', type='TProfile', path='Synchronization/Tracks/Front', xbins=2000, xmin=0.5, xmax=2000.5)
158 array.defineHistogram('lbTracksMiddle,Total_tracks_Middle_profile', title = '(Middle) Tracks vs lumiblock divided by <mu> per event, station {0}; lumiblock;tracks/<mu> per event', type='TProfile', path='Synchronization/Tracks/Middle', xbins=2000, xmin=0.5, xmax=2000.5)
159 array.defineHistogram('lbTracksEnd,Total_tracks_End_profile', title = '(End) Tracks vs lumiblock divided by <mu> per event, station {0}; lumiblock;tracks/<mu> per event', type='TProfile', path='Synchronization/Tracks/End', xbins=2000, xmin=0.5, xmax=2000.5)
160
161 arrayToF = helper.addArray([stationList], afpToFAlgorithm, 'AFPToFTool', topPath='AFP/ToF/')
162
163 arrayToF.defineHistogram('barInTrainID,trainID', title='ToF hit bar vs train {0};barInTrainID;trainID', type='TH2I', path='HitBarvsTrain/',xbins=4,xmin=-0.5,xmax=3.5,ybins=4,ymin=-0.5,ymax=3.5, xlabels = xLabelsHitBarVsTrain, ylabels = yLabelsHitBarVsTrain)
164
165 trainIDListToF = ['T0', 'T1', 'T2', 'T3']
166 barInTrainIDListToF = ['A', 'B', 'C', 'D']
167 sideListToF = ['sideA', 'sideC']
168
169 # Per bar: per-mu TH1F + per event TProfile
170 arrayToFSideBar = helper.addArray([sideListToF, trainIDListToF, barInTrainIDListToF], afpToFAlgorithm, 'AFPToFTool', topPath = 'AFP/ToF/')
171 arrayToFSideBar.defineHistogram('lbToFBar', title='ToF hits vs lumiblock divided by <mu> (train {1}, bar {2}), {0}; lb; hits/<mu>', type='TH1F', path='ToFHitsVsLb/{0}/BarsAll', xbins=2000, xmin=0.5, xmax=2000.5, weight = 'lbToFBar_Weight')
172 arrayToFSideBar.defineHistogram('lbToFBarPerEvent,hitsPerBarPP', title='ToF hits per event / <mu> (train {1}, bar {2}), {0}; lb; hits/<mu> per event', type='TProfile', path='ToFHitsVsLbPerEvent/{0}/BarsAll', xbins=2000, xmin=0.5, xmax=2000.5)
173
174 # Per train: per-mu TH1F + per event TProfile
175 arrayToFSideTrain = helper.addArray([sideListToF, trainIDListToF], afpToFAlgorithm, 'AFPToFTool', topPath = 'AFP/ToF/')
176 arrayToFSideTrain.defineHistogram('barInTrainIDSide', title='Total hits per bars in {0} {1}; barID; hits', type='TH1I', path='HitsPerBarsInTrain/{0}', xbins=4, xmin=-0.5, xmax=3.5)
177 # per-mu TH1F (All/Front/Middle/End)
178 arrayToFSideTrain.defineHistogram('lbToFTrainAll', title='(All) Hits per train / <mu>, {0} {1}; lb; hits/<mu>', type='TH1F', path='ToFHitsVsLb/{0}/All/', xbins=2000, xmin=0.5, xmax=2000.5, weight='weightToFTrainAll')
179 arrayToFSideTrain.defineHistogram('lbToFTrainFront', title='(Front) Hits per train / <mu>, {0} {1}; lb; hits/<mu>', type='TH1F', path='ToFHitsVsLb/{0}/Front/', xbins=2000, xmin=0.5, xmax=2000.5, weight='weightToFTrainFront')
180 arrayToFSideTrain.defineHistogram('lbToFTrainMiddle', title='(Middle) Hits per train / <mu>, {0} {1}; lb; hits/<mu>', type='TH1F', path='ToFHitsVsLb/{0}/Middle/', xbins=2000, xmin=0.5, xmax=2000.5, weight='weightToFTrainMiddle')
181 arrayToFSideTrain.defineHistogram('lbToFTrainEnd', title='(End) Hits per train / <mu>, {0} {1}; lb; hits/<mu>', type='TH1F', path='ToFHitsVsLb/{0}/End/', xbins=2000, xmin=0.5, xmax=2000.5, weight='weightToFTrainEnd')
182 # per event TProfile (All/Front/Middle/End)
183 arrayToFSideTrain.defineHistogram('lbToFPerEvent,hitsPerTrainAllPP', title='(All) Hits per train per event / <mu>, {0} {1}; lb; hits/<mu> per event', type='TProfile', path='ToFHitsVsLbPerEvent/{0}/All/', xbins=2000, xmin=0.5, xmax=2000.5)
184 arrayToFSideTrain.defineHistogram('lbToFPerEventFront,hitsPerTrainFrontPP', title='(Front) Hits per train per event / <mu>, {0} {1}; lb; hits/<mu> per event', type='TProfile', path='ToFHitsVsLbPerEvent/{0}/Front/', xbins=2000, xmin=0.5, xmax=2000.5)
185 arrayToFSideTrain.defineHistogram('lbToFPerEventMiddle,hitsPerTrainMiddlePP', title='(Middle) Hits per train per event / <mu>, {0} {1}; lb; hits/<mu> per event', type='TProfile', path='ToFHitsVsLbPerEvent/{0}/Middle/', xbins=2000, xmin=0.5, xmax=2000.5)
186 arrayToFSideTrain.defineHistogram('lbToFPerEventEnd,hitsPerTrainEndPP', title='(End) Hits per train per event / <mu>, {0} {1}; lb; hits/<mu> per event', type='TProfile', path='ToFHitsVsLbPerEvent/{0}/End/', xbins=2000, xmin=0.5, xmax=2000.5)
187
188 # Station-level: per event TProfile
189 arrayToFSide = helper.addArray([sideListToF], afpToFAlgorithm, 'AFPToFTool', topPath = 'AFP/ToF/')
190 arrayToFSide.defineHistogram('lbToFStationPerEvent,hitsPerStationPP', title='ToF hits per event / <mu>, {0}; lb; hits/<mu> per event', type='TProfile', path='ToFHitsVsLbPerEvent/', xbins=2000, xmin=0.5, xmax=2000.5)
191 arrayToFSide.defineHistogram('numberOfHit', title='Number of hit per bar, {0};bar', path='', xbins=4, xmin=-0.5, xmax=3.5)
192 arrayToFSide.defineHistogram('barInTrainAll', title='Number of hits in bar, {0}; barInTrain;hits', type='TH1I', path='HitsPerBarsInTrain/', xbins=16, xmin=-0.5, xmax=15.5)
193 arrayToFSide.defineHistogram('ToFHits_side', title='ToF hits per lumiblock divided by <mu>, {0}; lb; hits', type='TH1F', path='StationHits/', xbins=2000, xmin=0.5, xmax=2000.5, weight='ToFHits_MU_Weight')
194
195 #array for ToF cross-bar delta t
196 chan_combinations_list = [ "0AB", "0AC", "0AD", "0BC", "0BD", "0CD", "1AB", "1AC", "1AD", "1BC", "1BD", "1CD",
197 "2AB", "2AC", "2AD", "2BC", "2BD", "2CD", "3AB", "3AC", "3AD", "3BC", "3BD", "3CD"]
198 arrayToFCrossBarDeltaT = helper.addArray([chan_combinations_list], afpToFAlgorithm, 'AFPToFTool', topPath='AFP/ToF/')
199 arrayToFCrossBarDeltaT.defineHistogram('crossBarDeltaT_A', title='ToF cross-bar <delta> time (channel combination {0}), side A; <delta> t, [ps]; events', type='TH1D', path='DeltaTime/sideA', xbins=400, xmin=-1500.0, xmax=1500.0)
200 arrayToFCrossBarDeltaT.defineHistogram('crossBarDeltaT_C', title='ToF cross-bar <delta> time (channel combination {0}), side C; <delta> t, [ps]; events', type='TH1D', path='DeltaTime/sideC', xbins=400, xmin=-1500.0, xmax=1500.0)
201 # Finalize. The return value should be a tuple of the ComponentAccumulator
202 result.merge(helper.result())
203 return result
204
205if __name__=='__main__':
206
207 # Set the Athena configuration flags
208 from AthenaConfiguration.AllConfigFlags import initConfigFlags
209 flags = initConfigFlags()
210 flags.Input.Files = ['/eos/home-v/vlysenko/DQ/testing/data25_13p6TeV.00497370.physics_Main.merge.AOD.f1580_m2272._lb0200._0001.1']
211 flags.Input.isMC = False
212 flags.Output.HISTFileName = 'tof-clean-mon.root'
213
214
215 flags.Concurrency.NumThreads=10
216 flags.Concurrency.NumConcurrentEvents=10
217
218
219 flags.lock()
220
221 # Initialize configuration object, add accumulator, merge, and run.
222 from AthenaConfiguration.MainServicesConfig import MainServicesCfg
223 from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
224 cfg = MainServicesCfg(flags)
225 cfg.merge(PoolReadCfg(flags))
226
227 exampleMonitorAcc = Run3AFPExampleMonitoringConfig(flags)
228 cfg.merge(exampleMonitorAcc)
229
230 cfg.run(1000000)