O2-DQ User Interface 1.0.0
Loading...
Searching...
No Matches
tableReader.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/Tasks/tableReader.cxx
20
21import argparse
22
23import argcomplete
24from argcomplete.completers import ChoicesCompleter
25from commondeps.dplAodReader import DplAodReader
26from extramodules.dqLibGetter import DQLibGetter
27from extramodules.choicesCompleterList import ChoicesCompleterList
28from extramodules.helperOptions import HelperOptions
29
30from extramodules.actionHandler import NoAction
31from extramodules.actionHandler import ChoicesAction
32from extramodules.helperOptions import HelperOptions
33
34
35class TableReader(object):
36
37 """
38 Class for Interface -> tableReader.cxx Task -> Configurable, Process Functions
39
40 Args:
41 object (parser_args() object): tableReader.cxx Interface
42 """
43
45 self, parserTableReader = argparse.ArgumentParser(
46 formatter_class = argparse.ArgumentDefaultsHelpFormatter,
47 description = "Example Usage: ./runTableReader.py <yourConfig.json> --arg value",
48 ), helperOptions = HelperOptions(), dplAodReader = DplAodReader()
49 ):
50 super(TableReader, self).__init__()
51 self.parserTableReader = parserTableReader
52 self.helperOptions = helperOptions
53 self.dplAodReader = dplAodReader
54 self.parserTableReader.register("action", "none", NoAction)
55 self.parserTableReader.register("action", "store_choice", ChoicesAction)
56
57 def addArguments(self):
58 """
59 This function allows to add arguments for parser_args() function
60 """
61
62 readerPath = "configs/readerConfiguration_reducedEvent.json"
63 writerPath = "configs/writerConfiguration_dileptons.json"
64
65 # Predefined Selections
66 analysisSelections = {
67 "eventSelection": "Run event selection on DQ skimmed events",
68 "muonSelection": "Run muon selection on DQ skimmed muons",
69 "trackSelection": "Run barrel track selection on DQ skimmed tracks",
70 "eventMixing": "Run mixing on skimmed tracks based muon and track selections",
71 "eventMixingVn": "Run vn mixing on skimmed tracks based muon and track selections",
72 "sameEventPairing": "Run same event pairing selection on DQ skimmed data",
73 "dileptonHadron": "Run dilepton-hadron pairing, using skimmed data",
74 }
75 analysisSelectionsList = []
76 for k, v in analysisSelections.items():
77 analysisSelectionsList.append(k)
78
79 sameEventPairingProcessSelections = {
80 "JpsiToEE": "Run electron-electron pairing, with skimmed tracks",
81 "JpsiToMuMu": "Run muon-muon pairing, with skimmed muons",
82 "JpsiToMuMuVertexing": "Run muon-muon pairing and vertexing, with skimmed muons",
83 "VnJpsiToEE": "Run barrel-barrel vn mixing on skimmed tracks",
84 "VnJpsiToMuMu": "Run muon-muon vn mixing on skimmed tracks",
85 "ElectronMuon": "Run electron-muon pairing, with skimmed tracks/muons",
86 "All": "Run all types of pairing, with skimmed tracks/muons",
87 }
88 sameEventPairingProcessSelectionsList = []
89 for k, v in sameEventPairingProcessSelections.items():
90 sameEventPairingProcessSelectionsList.append(k)
91
92 booleanSelections = ["true", "false"]
93
94 mixingSelections = {
95 "Barrel": "Run barrel-barrel mixing on skimmed tracks",
96 "Muon": "Run muon-muon mixing on skimmed muons",
97 "BarrelMuon": "Run barrel-muon mixing on skimmed tracks/muons",
98 "BarrelVn": "Run barrel-barrel vn mixing on skimmed tracks",
99 "MuonVn": "Run muon-muon vn mixing on skimmed tracks",
100 }
101 mixingSelectionsList = []
102 for k, v in mixingSelections.items():
103 mixingSelectionsList.append(k)
104
105 # init for get DQ libraries
106 allAnalysisCuts, allMCSignals, allSels, allMixing = DQLibGetter.getAnalysisSelections(self)
107
108 # Interface
109
110 # analysis task selections
111 groupAnalysisSelections = self.parserTableReader.add_argument_group(
112 title = "Data processor options: analysis-event-selection, analysis-muon-selection, analysis-track-selection, analysis-event-mixing, analysis-dilepton-hadron"
113 )
114 groupAnalysisSelections.add_argument(
115 "--analysis", help = "Skimmed process selections for Data Analysis", action = "store", nargs = "*", type = str,
116 metavar = "ANALYSIS", choices = analysisSelectionsList,
117 ).completer = ChoicesCompleterList(analysisSelectionsList)
118
119 for key, value in analysisSelections.items():
120 groupAnalysisSelections.add_argument(key, help = value, action = "none")
121
122 # same event pairing process function selection
123 groupProcessSEPSelections = self.parserTableReader.add_argument_group(title = "Data processor options: analysis-same-event-pairing")
124 groupProcessSEPSelections.add_argument(
125 "--process", help = "Skimmed process selections for analysis-same-event-pairing task", action = "store", nargs = "*",
126 type = str, metavar = "PROCESS", choices = sameEventPairingProcessSelectionsList,
127 ).completer = ChoicesCompleterList(sameEventPairingProcessSelectionsList)
128 groupProcess = self.parserTableReader.add_argument_group(
129 title = "Choice List for analysis-same-event-pairing task Process options (when a value added to parameter, processSkimmed value is converted from false to true)"
130 )
131
132 for key, value in sameEventPairingProcessSelections.items():
133 groupProcess.add_argument(key, help = value, action = "none")
134
135 # analysis-event-mixing
136 groupAnalysisEventMixing = self.parserTableReader.add_argument_group(title = "Data processor options: analysis-event-mixing")
137 groupAnalysisEventMixing.add_argument(
138 "--mixing", help = "Skimmed process selections for Event Mixing manually", nargs = "*", action = "store", type = str,
139 choices = mixingSelectionsList,
140 ).completer = ChoicesCompleterList(mixingSelectionsList)
141
142 # cfg for QA
143 groupQASelections = self.parserTableReader.add_argument_group(
144 title = "Data processor options: analysis-event-selection, analysis-muon-selection, analysis-track-selection, analysis-event-mixing"
145 )
146 groupQASelections.add_argument(
147 "--cfgQA", help = "If true, fill QA histograms", action = "store", type = str.lower, choices = booleanSelections,
148 ).completer = ChoicesCompleter(booleanSelections)
149
150 # analysis-event-selection
151 groupAnalysisEventSelection = self.parserTableReader.add_argument_group(title = "Data processor options: analysis-event-selection")
152 groupAnalysisEventSelection.add_argument(
153 "--cfgMixingVars", help = "Mixing configs separated by a space", nargs = "*", action = "store", type = str,
154 metavar = "CFGMIXINGVARS", choices = allMixing,
155 ).completer = ChoicesCompleterList(allMixing)
156 groupAnalysisEventSelection.add_argument(
157 "--cfgEventCuts", help = "Space separated list of event cuts", nargs = "*", action = "store", type = str,
158 metavar = "CFGEVENTCUTS", choices = allAnalysisCuts,
159 ).completer = ChoicesCompleterList(allAnalysisCuts)
160
161 # analysis-muon-selection
162 groupAnalysisMuonSelection = self.parserTableReader.add_argument_group(title = "Data processor options: analysis-muon-selection")
163 groupAnalysisMuonSelection.add_argument(
164 "--cfgMuonCuts", help = "Space separated list of muon cuts", nargs = "*", action = "store", type = str, metavar = "CFGMUONCUTS",
165 choices = allAnalysisCuts,
166 ).completer = ChoicesCompleterList(allAnalysisCuts)
167
168 # analysis-track-selection
169 groupAnalysisTrackSelection = self.parserTableReader.add_argument_group(title = "Data processor options: analysis-track-selection")
170 groupAnalysisTrackSelection.add_argument(
171 "--cfgTrackCuts", help = "Space separated list of barrel track cuts", nargs = "*", action = "store", type = str,
172 metavar = "CFGTRACKCUTS", choices = allAnalysisCuts,
173 ).completer = ChoicesCompleterList(allAnalysisCuts)
174
175 # analysis-dilepton-hadron
176 groupAnalysisDileptonHadron = self.parserTableReader.add_argument_group(title = "Data processor options: analysis-dilepton-hadron")
177 groupAnalysisDileptonHadron.add_argument(
178 "--cfgLeptonCuts", help = "Space separated list of barrel track cuts", nargs = "*", action = "store", type = str,
179 metavar = "CFGLEPTONCUTS", choices = allAnalysisCuts,
180 ).completer = ChoicesCompleterList(allAnalysisCuts)
181
182 # Aod Writer - Reader configs
183 groupDPLReader = self.parserTableReader.add_argument_group(
184 title = "Data processor options: internal-dpl-aod-reader, internal-dpl-aod-writer"
185 )
186 groupDPLReader.add_argument(
187 "--reader",
188 help = "Reader config JSON with path. For Standart Analysis use as default, for dilepton analysis change to dilepton JSON config file",
189 action = "store", default = readerPath, type = str
190 )
191 groupDPLReader.add_argument(
192 "--writer", help = "Argument for producing dileptonAOD.root. Set false for disable", action = "store", default = writerPath,
193 type = str
194 )
195
196 def parseArgs(self):
197 """
198 This function allows to save the obtained arguments to the parser_args() function
199
200 Returns:
201 Namespace: returns parse_args()
202 """
203 argcomplete.autocomplete(self.parserTableReader, always_complete_options = False)
204 return self.parserTableReader.parse_args()
205
206 def mergeArgs(self):
207 """
208 This function allows to merge parser_args argument information from different classes
209 """
210
211 self.helperOptions.parserHelperOptions = self.parserTableReader
213
214 self.dplAodReader.parserDplAodReader = self.parserTableReader
216
217 self.addArguments()
def __init__(self, parserTableReader=argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter, description="Example Usage: ./runTableReader.py <yourConfig.json> --arg value",), helperOptions=HelperOptions(), dplAodReader=DplAodReader())
Definition: tableReader.py:49