Skip to content

Commit e759cb8

Browse files
authored
additional track QA vs occupancy
1 parent 6bac19d commit e759cb8

File tree

1 file changed

+47
-21
lines changed

1 file changed

+47
-21
lines changed

DPG/Tasks/AOTEvent/eventSelectionQa.cxx

Lines changed: 47 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -12,33 +12,35 @@
1212
/// \file eventSelectionQa.cxx
1313
/// \brief Event selection QA task
1414
///
15-
/// \author Evgeny Kryshen <evgeny.kryshen@cern.ch>
15+
/// \author Evgeny Kryshen <evgeny.kryshen@cern.ch> and Igor Altsybeev <Igor.Altsybeev@cern.ch>
1616

17-
#include <map>
18-
#include <vector>
19-
#include <string>
20-
#include <unordered_map>
21-
22-
#include "Framework/runDataProcessing.h"
23-
#include "Framework/AnalysisTask.h"
24-
#include "Framework/AnalysisDataModel.h"
25-
#include "Common/DataModel/EventSelection.h"
2617
#include "Common/CCDB/EventSelectionParams.h"
18+
#include "Common/DataModel/EventSelection.h"
19+
2720
#include "CCDB/BasicCCDBManager.h"
28-
#include "Framework/HistogramRegistry.h"
2921
#include "CommonDataFormat/BunchFilling.h"
30-
#include "DataFormatsParameters/GRPLHCIFData.h"
31-
#include "DataFormatsParameters/GRPECSObject.h"
32-
#include "DataFormatsParameters/AggregatedRunInfo.h"
3322
#include "DataFormatsITSMFT/NoiseMap.h" // missing include in TimeDeadMap.h
34-
#include "DataFormatsITSMFT/TimeDeadMap.h"
3523
#include "DataFormatsITSMFT/ROFRecord.h"
36-
#include "ReconstructionDataFormats/Vertex.h"
24+
#include "DataFormatsITSMFT/TimeDeadMap.h"
25+
#include "DataFormatsParameters/AggregatedRunInfo.h"
26+
#include "DataFormatsParameters/GRPECSObject.h"
27+
#include "DataFormatsParameters/GRPLHCIFData.h"
28+
#include "Framework/AnalysisDataModel.h"
29+
#include "Framework/AnalysisTask.h"
30+
#include "Framework/HistogramRegistry.h"
31+
#include "Framework/runDataProcessing.h"
3732
#include "ITSMFTBase/DPLAlpideParam.h"
3833
#include "ITSMFTReconstruction/ChipMappingITS.h"
34+
#include "ReconstructionDataFormats/Vertex.h"
35+
3936
#include "TH1F.h"
4037
#include "TH2F.h"
4138

39+
#include <map>
40+
#include <string>
41+
#include <unordered_map>
42+
#include <vector>
43+
4244
using namespace o2::framework;
4345
using namespace o2;
4446
using namespace o2::aod::evsel;
@@ -361,7 +363,17 @@ struct EventSelectionQaTask {
361363
// requested by TPC experts: nTPConly tracks vs occupancy
362364
histos.add("occupancyQA/hNumTracksTPConly_vs_V0A_vs_occupancy", "", kTH3F, {axisMultV0AForOccup, axisNtracksTPConly, axisOccupancyTracks});
363365
histos.add("occupancyQA/hNumTracksTPConlyNoITS_vs_V0A_vs_occupancy", "", kTH3F, {axisMultV0AForOccup, axisNtracksTPConly, axisOccupancyTracks});
364-
366+
// request from experts to add track properties vs occupancy, to compare data vs MC
367+
const AxisSpec axisOccupancyForTrackQA{60, 0., 15000, "occupancy (n ITS tracks weighted)"};
368+
const AxisSpec axisNTPCcls{150, 0, 150, "n TPC clusters"};
369+
histos.add("occupancyQA/tpcNClsFound_vs_V0A_vs_occupancy", "", kTH3F, {axisMultV0AForOccup, axisNTPCcls, axisOccupancyForTrackQA});
370+
histos.add("occupancyQA/tpcNClsFindable_vs_V0A_vs_occupancy", "", kTH3F, {axisMultV0AForOccup, axisNTPCcls, axisOccupancyForTrackQA});
371+
histos.add("occupancyQA/tpcNClsShared_vs_V0A_vs_occupancy", "", kTH3F, {axisMultV0AForOccup, axisNTPCcls, axisOccupancyForTrackQA});
372+
histos.add("occupancyQA/tpcNCrossedRows_vs_V0A_vs_occupancy", "", kTH3F, {axisMultV0AForOccup, axisNTPCcls, axisOccupancyForTrackQA});
373+
const AxisSpec axisChi2TPC{150, 0, 15, "chi2Ncl TPC"};
374+
histos.add("occupancyQA/tpcChi2_vs_V0A_vs_occupancy", "", kTH3F, {axisMultV0AForOccup, axisChi2TPC, axisOccupancyForTrackQA});
375+
376+
// ITS in-ROF occupancy
365377
histos.add("occupancyQA/hITSTracks_ev1_vs_ev2_2coll_in_ROF", ";nITStracks event #1;nITStracks event #2", kTH2D, {{200, 0., 6000}, {200, 0., 6000}});
366378
histos.add("occupancyQA/hITSTracks_ev1_vs_ev2_2coll_in_ROF_UPC", ";nITStracks event #1;nITStracks event #2", kTH2D, {{41, -0.5, 40.5}, {41, -0.5, 40.5}});
367379
histos.add("occupancyQA/hITSTracks_ev1_vs_ev2_2coll_in_ROF_nonUPC", ";nITStracks event #1;nITStracks event #2", kTH2D, {{200, 0., 6000}, {200, 0., 6000}});
@@ -1128,6 +1140,10 @@ struct EventSelectionQaTask {
11281140
int nTracksITSTPC = 0;
11291141

11301142
bool isTVX = col.selection_bit(kIsTriggerTVX);
1143+
1144+
int occupancyByTracks = col.trackOccupancyInTimeRange();
1145+
float occupancyByFT0C = col.ft0cOccupancyInTimeRange();
1146+
11311147
for (const auto& track : tracksGrouped) {
11321148
int trackBcDiff = bcDiff + track.trackTime() / o2::constants::lhc::LHCBunchSpacingNS;
11331149

@@ -1158,7 +1174,19 @@ struct EventSelectionQaTask {
11581174
nPV++;
11591175
if (track.hasTPC()) {
11601176
nContributorsAfterEtaTPCLooseCuts++;
1161-
}
1177+
1178+
if (!isLowFlux && col.sel8() && col.selection_bit(kNoSameBunchPileup) && fabs(col.posZ()) < 10 && occupancyByTracks >= 0) {
1179+
histos.fill(HIST("occupancyQA/tpcNClsFound_vs_V0A_vs_occupancy"), multV0A, track.tpcNClsFound(), occupancyByTracks);
1180+
histos.fill(HIST("occupancyQA/tpcNClsFindable_vs_V0A_vs_occupancy"), multV0A, track.tpcNClsFindable(), occupancyByTracks);
1181+
histos.fill(HIST("occupancyQA/tpcNClsShared_vs_V0A_vs_occupancy"), multV0A, track.tpcNClsShared(), occupancyByTracks);
1182+
histos.fill(HIST("occupancyQA/tpcChi2_vs_V0A_vs_occupancy"), multV0A, track.tpcChi2NCl(), occupancyByTracks);
1183+
int tpcNClsFindableMinusCrossedRowsCorrected = track.tpcNClsFindableMinusCrossedRows();
1184+
// correct for a buggy behaviour due to int8 and uint8 difference:
1185+
if (tpcNClsFindableMinusCrossedRowsCorrected < -70)
1186+
tpcNClsFindableMinusCrossedRowsCorrected += 256;
1187+
histos.fill(HIST("occupancyQA/tpcNCrossedRows_vs_V0A_vs_occupancy"), multV0A, track.tpcNClsFindable() - tpcNClsFindableMinusCrossedRowsCorrected, occupancyByTracks);
1188+
}
1189+
} // end of hasTPC
11621190
if (track.tpcNClsFound() > 70 && track.tpcNClsCrossedRows() > 80 && track.itsChi2NCl() < 36 && track.tpcChi2NCl() < 4) {
11631191
nContributorsAfterEtaTPCCuts++;
11641192
// ROF border QA
@@ -1183,10 +1211,8 @@ struct EventSelectionQaTask {
11831211

11841212
histos.fill(HIST("hNcontribAfterCutsVsBcInTF"), bcInTF, nContributorsAfterEtaTPCCuts);
11851213

1186-
if (!isLowFlux && col.sel8() && fabs(col.posZ()) < 10) {
1187-
int occupancyByTracks = col.trackOccupancyInTimeRange();
1214+
if (!isLowFlux && col.sel8() && col.selection_bit(kNoSameBunchPileup) && fabs(col.posZ()) < 10) {
11881215
histos.fill(HIST("occupancyQA/hOccupancyByTracks"), occupancyByTracks);
1189-
float occupancyByFT0C = col.ft0cOccupancyInTimeRange();
11901216
histos.fill(HIST("occupancyQA/hOccupancyByFT0C"), occupancyByFT0C);
11911217
if (occupancyByTracks >= 0) {
11921218
histos.fill(HIST("occupancyQA/hOccupancyByFT0CvsByTracks"), occupancyByTracks, occupancyByFT0C);

0 commit comments

Comments
 (0)