Dear QC experts,
I am trying to implement a checks with two data sources (one task and one post-processing). The basic idea would be to determine the quality from one plot published by the task, and beautify the plots published by the post-processing according to the quality flag.
Here is the relevant part of my configuration:
"tasks": {
"MCHDigits": {
"active": "true",
"className": "o2::quality_control_modules::muonchambers::PhysicsTaskDigits",
"moduleName": "QcMuonChambers",
"detectorName": "MCH",
"cycleDurationSeconds": "30",
"maxNumberCycles": "-1",
"dataSource": {
"type": "direct",
"query" : "digits:MCH/DIGITS"
},
"taskParameters" : {
"Diagnostic" : "false",
"OnCycle" : "true"
},
"saveObjectsToFile": "qc-mch-digits.root",
"location": "remote"
}
},
"postprocessing": {
"MCHDigitsPP": {
"active": "true",
"className": "o2::quality_control_modules::muonchambers::PostProcessingDigits",
"moduleName": "QcMuonChambers",
"detectorName": "MCH",
"customization": [
{
"name": "ElecHistoPath",
"value": "MCH/MO/MCHDigits"
},
{
"name": "ElecHistoName",
"value": "Occupancy_Elec"
}
],
"dataSources": [
{
"type": "repository",
"path": "MCH/MO/MCHDigits",
"names": [
"Occupancy_Elec"
],
"reductorName": "o2::quality_control_modules::muonchambers::TH2ElecMapReductor",
"moduleName": "QcMuonChambers"
}
],
"initTrigger": [
"userorcontrol"
],
"updateTrigger": [
"newobject:qcdb:MCH/MO/MCHDigits/Occupancy_Elec"
],
"stopTrigger": [
"userorcontrol"
]
}
},
"checks": {
"QcCheckMCHDigitsPP": {
"active": "true",
"className": "o2::quality_control_modules::muonchambers::PhysicsCheck",
"moduleName": "QcMuonChambers",
"detectorName": "MCH",
"policy": "OnAny",
"checkParameters": {
"MinOccupancy": "0.01",
"MaxOccupancy": "10",
"MinGoodFraction": "0.9",
"OccupancyPlotScaleMin": "0.0001",
"OccupancyPlotScaleMax": "1",
"Verbose": "false"
},
"dataSource": [
{
"type": "Task",
"name": "MCHDigits",
"MOs" : "all"
},
{
"type": "PostProcessing",
"name": "MCHDigitsPP",
"MOs" : "all"
}
]
}
}
In the output I see that the checker is processing the objects from the Task, but is not publishing anything and probably not receiving anything from the PostProcessing:
[218762:qc-check-MCH-QcCheckMCHDigitsPP]: 2022-07-27 20:27:59.370833 CheckRunner qc-check-MCH-QcCheckMCHDigitsPP received an array with 10 entries from MCHDigits
[218762:qc-check-MCH-QcCheckMCHDigitsPP]: 2022-07-27 20:27:59.631752 Trying 1 checks for 10 monitor objects
[218762:qc-check-MCH-QcCheckMCHDigitsPP]: 2022-07-27 20:28:00.672480 Check 'QcCheckMCHDigitsPP', quality 'Quality: Good (level 1)'
[218762:qc-check-MCH-QcCheckMCHDigitsPP]: 2022-07-27 20:28:00.672523 Storing 1 QualityObjects
[218762:qc-check-MCH-QcCheckMCHDigitsPP]: 2022-07-27 20:28:00.672556 Storing quality object qc/MCH/QO/QcCheckMCHDigitsPP (QcCheckMCHDigitsPP)
[218762:qc-check-MCH-QcCheckMCHDigitsPP]: 2022-07-27 20:28:00.685095 Storing 0 MonitorObjects
[218762:qc-check-MCH-QcCheckMCHDigitsPP]: 2022-07-27 20:28:00.685111 Sending 1 quality objects
If I remove the “Task” data source in the checker, the monitoring objects from the PostProcessing are received and published as expected:
[207648:qc-check-MCH-QcCheckMCHDigitsPP]: 2022-07-27 19:55:00.020056 CheckRunner qc-check-MCH-QcCheckMCHDigitsPP received an array with 4 entries from MCHDigitsPP
[207648:qc-check-MCH-QcCheckMCHDigitsPP]: 2022-07-27 19:55:00.020161 Trying 1 checks for 4 monitor objects
[207648:qc-check-MCH-QcCheckMCHDigitsPP]: 2022-07-27 19:55:00.020201 Check 'QcCheckMCHDigitsPP', quality 'Quality: Null (level 10)'
[207648:qc-check-MCH-QcCheckMCHDigitsPP]: 2022-07-27 19:55:00.020407 Storing 1 QualityObjects
[207648:qc-check-MCH-QcCheckMCHDigitsPP]: 2022-07-27 19:55:00.020451 Storing quality object qc/MCH/QO/QcCheckMCHDigitsPP (QcCheckMCHDigitsPP)
[207648:qc-check-MCH-QcCheckMCHDigitsPP]: 2022-07-27 19:55:00.029346 Storing 4 MonitorObjects
[207648:qc-check-MCH-QcCheckMCHDigitsPP]: 2022-07-27 19:55:00.029442 Storing MonitorObject qc/MCH/MO/MCHDigitsPP/MeanRate
[207648:qc-check-MCH-QcCheckMCHDigitsPP]: 2022-07-27 19:55:00.041491 Storing MonitorObject qc/MCH/MO/MCHDigitsPP/MeanRateOnCycle
[207648:qc-check-MCH-QcCheckMCHDigitsPP]: 2022-07-27 19:55:00.052996 Storing MonitorObject qc/MCH/MO/MCHDigitsPP/Rate_ST12
[207648:qc-check-MCH-QcCheckMCHDigitsPP]: 2022-07-27 19:55:00.063457 Storing MonitorObject qc/MCH/MO/MCHDigitsPP/Rate_ST345
[207648:qc-check-MCH-QcCheckMCHDigitsPP]: 2022-07-27 19:55:00.074972 Sending 1 quality objects
Is this the expected behavior? From the documentation I get the impression that multiple data sources for the checks are supported, or at least one can find an example here:
{
2 "qc" : {
3 "config" : { ... },
4 "tasks" : { ... },
5
6 "checks": {
7 "CheckName": {
8 "active": "true",
9 "className": "o2::quality_control_modules::skeleton::SkeletonCheck",
10 "moduleName": "QcSkeleton",
11 "policy": "OnAny",
12 "dataSource": [{
13 "type": "Task",
14 "name": "TaskName"
15 },
16 {
17 "type": "Task",
18 "name": "QcTask",
19 "MOs": ["example", "other"]
20 }]
21 },
22 "QcCheck": {
23 ...
24 }
25 }
26
27 }
Thanks a lot in advance!