O2-DQ User Interface 1.0.0
Loading...
Searching...
No Matches
tableMaker.py
Go to the documentation of this file.
1#!/usr/bin/env python
2# PYTHON_ARGCOMPLETE_OK
3# -*- coding: utf-8 -*-
4
5# Copyright 2019-2020 CERN and copyright holders of ALICE O2.
6# See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
7# All rights not expressly granted are reserved.
8#
9# This software is distributed under the terms of the GNU General Public
10# License v3 (GPL Version 3), copied verbatim in the file "COPYING".
11#
12# In applying this license CERN does not waive the privileges and immunities
13# granted to it by virtue of its status as an Intergovernmental Organization
14# or submit itself to any jurisdiction.
15
16# \Author: ionut.cristian.arsene@cern.ch
17# \Interface: cevat.batuhan.tolon@cern.ch
18
19# Orginal Task: https://github.com/AliceO2Group/O2Physics/blob/master/PWGDQ/TableProducer/tableMaker.cxx
20
21import argparse
22
23from extramodules.actionHandler import NoAction
24from extramodules.actionHandler import ChoicesAction
25from extramodules.helperOptions import HelperOptions
26from extramodules.converters import O2Converters
27
28import argcomplete
29from argcomplete.completers import ChoicesCompleter
30from extramodules.choicesCompleterList import ChoicesCompleterList
31
32from commondeps.centralityTable import CentralityTable
33from commondeps.eventSelection import EventSelectionTask
34from commondeps.multiplicityTable import MultiplicityTable
35from commondeps.pidTOFBase import TofEventTime
36from commondeps.pidTOFBeta import TofPidBeta
37from commondeps.pidTPCTOFFull import TpcTofPidFull
38from commondeps.trackPropagation import TrackPropagation
39from commondeps.trackselection import TrackSelectionTask
40from commondeps.dplAodReader import DplAodReader
41
42from dqtasks.v0selector import V0selector
43
44from extramodules.dqLibGetter import DQLibGetter
45
46# Special configurations for filterPP are combined to avoid conflicts in the tableMaker interface
47
48
49class TableMaker(object):
50
51 """
52 Class for Interface -> tableMaker.cxx Task -> Configurable, Process Functions.
53 Also this class includes some filterPP and dqFlow task arguments to avoid conflicts
54
55 Args:
56 object (parser_args() object): tableMaker.cxx Interface
57 """
58
60 self, parserTableMaker = argparse.ArgumentParser(
61 formatter_class = argparse.ArgumentDefaultsHelpFormatter,
62 description = "Example Usage: ./runTableMaker.py <yourConfig.json> --arg value "
63 ), eventSelection = EventSelectionTask(), centralityTable = CentralityTable(), multiplicityTable = MultiplicityTable(),
64 tofEventTime = TofEventTime(), tofPidBeta = TofPidBeta(), tpcTofPidFull = TpcTofPidFull(), trackPropagation = TrackPropagation(),
65 trackSelection = TrackSelectionTask(), v0selector = V0selector(), helperOptions = HelperOptions(), o2Converters = O2Converters(),
66 dplAodReader = DplAodReader()
67 ):
68 super(TableMaker, self).__init__()
69 self.parserTableMaker = parserTableMaker
70 self.eventSelection = eventSelection
71 self.centralityTable = centralityTable
72 self.multiplicityTable = multiplicityTable
73 self.tofEventTime = tofEventTime
74 self.tofPidBeta = tofPidBeta
75 self.tpcTofPidFull = tpcTofPidFull
76 self.trackPropagation = trackPropagation
77 self.trackSelection = trackSelection
78 self.v0selector = v0selector
79 self.helperOptions = helperOptions
80 self.o2Converters = o2Converters
81 self.dplAodReader = dplAodReader
82 self.parserTableMaker.register("action", "none", NoAction)
83 self.parserTableMaker.register("action", "store_choice", ChoicesAction)
84
85 def addArguments(self):
86 """
87 This function allows to add arguments for parser_args() function
88 """
89
90 # Predefined Selections
91 tableMakerProcessSelections = {
92 "Full": "Build full DQ skimmed data model, w/o centrality",
93 "FullWithCov": "Build full DQ skimmed data model, w/ track and fwdtrack covariance tables",
94 "FullWithCent": "Build full DQ skimmed data model, w/ centrality",
95 "BarrelOnly": "Build barrel-only DQ skimmed data model, w/o centrality",
96 "BarrelOnlyWithCov": "Build barrel-only DQ skimmed data model, w/ track cov matrix",
97 "BarrelOnlyWithV0Bits": "Build full DQ skimmed data model, w/o centrality, w/ V0Bits",
98 "BarrelOnlyWithEventFilter": "Build full DQ skimmed data model, w/o centrality, w/ event filter",
99 "BarrelOnlyWithQvector": "Build full DQ skimmed data model, w/ centrality, w/ q vector",
100 "BarrelOnlyWithCent": "Build barrel-only DQ skimmed data model, w/ centrality",
101 "MuonOnly": "Build muon-only DQ skimmed data model",
102 "MuonOnlyWithCov": "Build muon-only DQ skimmed data model, w/ muon cov matrix",
103 "MuonOnlyWithCent": "Build muon-only DQ skimmed data model, w/ centrality",
104 "MuonOnlyWithFilter": "Build muon-only DQ skimmed data model, w/ event filter",
105 "MuonOnlyWithQvector": "Build muon-only DQ skimmed data model, w/ q vector",
106 "OnlyBCs": "Analyze the BCs to store sampled lumi",
107 }
108 tableMakerProcessSelectionsList = []
109 for k, v in tableMakerProcessSelections.items():
110 tableMakerProcessSelectionsList.append(k)
111
112 booleanSelections = ["true", "false"]
113
114 # init for get DQ libraries
115 allAnalysisCuts, allMCSignals, allSels, allMixing = DQLibGetter.getAnalysisSelections(self)
116
117 # Interface
118
119 # table-maker configurables
120 groupTableMakerConfigs = self.parserTableMaker.add_argument_group(title = "Data processor options: table-maker")
121 groupTableMakerConfigs.add_argument(
122 "--cfgEventCuts", help = "Space separated list of event cuts", nargs = "*", action = "store", type = str,
123 metavar = "CFGEVENTCUTS", choices = allAnalysisCuts,
124 ).completer = ChoicesCompleterList(allAnalysisCuts)
125 groupTableMakerConfigs.add_argument(
126 "--cfgBarrelTrackCuts", help = " Space separated list of barrel track cuts", nargs = "*", action = "store", type = str,
127 metavar = "CFGBARRELTRACKCUTS", choices = allAnalysisCuts,
128 ).completer = ChoicesCompleterList(allAnalysisCuts)
129 groupTableMakerConfigs.add_argument(
130 "--cfgMuonCuts", help = "Space separated list of muon cuts in table-maker", action = "store", nargs = "*", type = str,
131 metavar = "CFGMUONCUTS", choices = allAnalysisCuts,
132 ).completer = ChoicesCompleterList(allAnalysisCuts)
133 groupTableMakerConfigs.add_argument("--cfgBarrelLowPt", help = "Low pt cut for tracks in the barrel", action = "store", type = str)
134 groupTableMakerConfigs.add_argument("--cfgMuonLowPt", help = "Low pt cut for muons", action = "store", type = str)
135 groupTableMakerConfigs.add_argument(
136 "--cfgNoQA", help = "If true, no QA histograms", action = "store", type = str.lower, choices = booleanSelections,
137 ).completer = ChoicesCompleter(booleanSelections)
138 groupTableMakerConfigs.add_argument(
139 "--cfgDetailedQA", help = "If true, include more QA histograms (BeforeCuts classes and more)", action = "store",
140 type = str.lower, choices = booleanSelections,
141 ).completer = ChoicesCompleter(booleanSelections)
142 # groupTableMakerConfigs.add_argument("--cfgIsRun2", help="Run selection true or false", action="store", choices=["true","false"], type=str) # no need
143 groupTableMakerConfigs.add_argument("--cfgMinTpcSignal", help = "Minimum TPC signal", action = "store", type = str)
144 groupTableMakerConfigs.add_argument("--cfgMaxTpcSignal", help = "Maximum TPC signal", action = "store", type = str)
145
146 groupProcessTableMaker = self.parserTableMaker.add_argument_group(title = "Data processor options: table-maker")
147 groupProcessTableMaker.add_argument(
148 "--process", help = "Process Selection options for tableMaker/tableMakerMC Data Processing and Skimming", action = "store",
149 type = str, nargs = "*", metavar = "PROCESS", choices = tableMakerProcessSelectionsList,
150 ).completer = ChoicesCompleterList(tableMakerProcessSelectionsList)
151 for key, value in tableMakerProcessSelections.items():
152 groupProcessTableMaker.add_argument(key, help = value, action = "none")
153
154 # d-q-track barrel-task
155 groupDQTrackBarrelTask = self.parserTableMaker.add_argument_group(title = "Data processor options: d-q-track barrel-task")
156 groupDQTrackBarrelTask.add_argument(
157 "--isBarrelSelectionTiny",
158 help = "Run barrel track selection instead of normal(process func. for barrel selection must be true)", action = "store",
159 type = str.lower, choices = booleanSelections,
160 ).completer = ChoicesCompleter(booleanSelections)
161
162 # d-q muons-selection
163 groupDQMuonsSelection = self.parserTableMaker.add_argument_group(title = "Data processor options: d-q muons-selection")
164 groupDQMuonsSelection.add_argument(
165 "--cfgMuonsCuts", help = "Space separated list of ADDITIONAL muon track cuts", action = "store", nargs = "*", type = str,
166 metavar = "CFGMUONSCUT", choices = allAnalysisCuts,
167 ).completer = ChoicesCompleterList(allAnalysisCuts)
168
169 # d-q-filter-p-p-task
170 groupDQFilterPP = self.parserTableMaker.add_argument_group(title = "Data processor options: d-q-filter-p-p-task")
171 groupDQFilterPP.add_argument(
172 "--cfgBarrelSels",
173 help = "Configure Barrel Selection <track-cut>:[<pair-cut>]:<n>,[<track-cut>:[<pair-cut>]:<n>],... | example jpsiO2MCdebugCuts2::1 ",
174 action = "store", type = str, nargs = "*", metavar = "CFGBARRELSELS", choices = allSels,
175 ).completer = ChoicesCompleterList(allSels)
176 groupDQFilterPP.add_argument(
177 "--cfgMuonSels", help = "Configure Muon Selection <muon-cut>:[<pair-cut>]:<n> example muonQualityCuts:pairNoCut:1",
178 action = "store", type = str, nargs = "*", metavar = "CFGMUONSELS", choices = allSels,
179 ).completer = ChoicesCompleterList(allSels)
180 groupDQFilterPP.add_argument(
181 "--isFilterPPTiny", help = "Run filter tiny task instead of normal (processFilterPP must be true) ", action = "store",
182 type = str.lower, choices = booleanSelections,
183 ).completer = ChoicesCompleter(booleanSelections)
184
185 # analysis-qvector
186 groupAnalysisQvector = self.parserTableMaker.add_argument_group(title = "Data processor options: analysis-qvector")
187 groupAnalysisQvector.add_argument(
188 "--cfgCutPtMin", help = "Minimal pT for tracks", action = "store", type = str, metavar = "CFGCUTPTMIN",
189 )
190 groupAnalysisQvector.add_argument(
191 "--cfgCutPtMax", help = "Maximal pT for tracks", action = "store", type = str, metavar = "CFGCUTPTMAX",
192 )
193 groupAnalysisQvector.add_argument(
194 "--cfgCutEta", help = "Eta range for tracks", action = "store", type = str, metavar = "CFGCUTETA",
195 )
196 groupAnalysisQvector.add_argument(
197 "--cfgEtaLimit", help = "Eta gap separation, only if using subEvents", action = "store", type = str, metavar = "CFGETALIMIT",
198 )
199 groupAnalysisQvector.add_argument(
200 "--cfgNPow", help = "Power of weights for Q vector", action = "store", type = str, metavar = "CFGNPOW",
201 )
202 groupAnalysisQvector.add_argument("--cfgEfficiency", help = "CCDB path to efficiency object", action = "store", type = str)
203 groupAnalysisQvector.add_argument("--cfgAcceptance", help = "CCDB path to acceptance object", action = "store", type = str)
204
205 # all d-q tasks and selections
206 groupQASelections = self.parserTableMaker.add_argument_group(
207 title = "Data processor options: d-q-barrel-track-selection-task, d-q-muons-selection, d-q-event-selection-task, d-q-filter-p-p-task, analysis-qvector"
208 )
209 groupQASelections.add_argument(
210 "--cfgWithQA", help = "If true, fill QA histograms", action = "store", type = str.lower, choices = booleanSelections,
211 ).completer = ChoicesCompleter(booleanSelections)
212
213 # core part
214 groupCoreSelections = self.parserTableMaker.add_argument_group(title = "Core configurations that must be configured")
215 groupCoreSelections.add_argument("-runData", help = "Run over Data", action = "store_true", default = True)
216
217 def parseArgs(self):
218 """
219 This function allows to save the obtained arguments to the parser_args() function
220
221 Returns:
222 Namespace: returns parse_args()
223 """
224
225 argcomplete.autocomplete(self.parserTableMaker, always_complete_options = False)
226 return self.parserTableMaker.parse_args()
227
228 def mergeArgs(self):
229 """
230 This function allows to merge parser_args argument information from different classes
231 """
232
233 self.eventSelection.parserEventSelectionTask = self.parserTableMaker
235
236 self.centralityTable.parserCentralityTable = self.parserTableMaker
238
239 self.multiplicityTable.parserMultiplicityTable = self.parserTableMaker
241
242 self.tofEventTime.parserTofEventTime = self.parserTableMaker
244
245 self.tofPidBeta.parserTofPidBeta = self.parserTableMaker
247
248 self.tpcTofPidFull.parserTpcTofPidFull = self.parserTableMaker
250
251 self.trackPropagation.parserTrackPropagation = self.parserTableMaker
253
254 self.trackSelection.parserTrackSelectionTask = self.parserTableMaker
256
257 self.v0selector.parserV0selector = self.parserTableMaker
259
260 self.helperOptions.parserHelperOptions = self.parserTableMaker
262
263 # self.o2Converters.parserO2Converters = self.parserTableMaker
264 # self.o2Converters.addArguments()
265
266 self.dplAodReader.parserDplAodReader = self.parserTableMaker
268
269 self.addArguments()
270
271 # This function not work should be integrated instead of mergeArgs
272
273 """
274 def mergeMultiArgs(self, *objects):
275 parser = self.parserTableMaker
276 for object in objects:
277 object.parser = parser
278 object.addArguments()
279 self.addArguments()
280 """
def addArguments(self)
Definition: tableMaker.py:85
def __init__(self, parserTableMaker=argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter, description="Example Usage: ./runTableMaker.py <yourConfig.json> --arg value "), eventSelection=EventSelectionTask(), centralityTable=CentralityTable(), multiplicityTable=MultiplicityTable(), tofEventTime=TofEventTime(), tofPidBeta=TofPidBeta(), tpcTofPidFull=TpcTofPidFull(), trackPropagation=TrackPropagation(), trackSelection=TrackSelectionTask(), v0selector=V0selector(), helperOptions=HelperOptions(), o2Converters=O2Converters(), dplAodReader=DplAodReader())
Definition: tableMaker.py:67
Definition: dqFlow.py:1