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
1717#include < map>
1818#include < vector>
@@ -361,7 +361,17 @@ struct EventSelectionQaTask {
361361 // requested by TPC experts: nTPConly tracks vs occupancy
362362 histos.add (" occupancyQA/hNumTracksTPConly_vs_V0A_vs_occupancy" , " " , kTH3F , {axisMultV0AForOccup, axisNtracksTPConly, axisOccupancyTracks});
363363 histos.add (" occupancyQA/hNumTracksTPConlyNoITS_vs_V0A_vs_occupancy" , " " , kTH3F , {axisMultV0AForOccup, axisNtracksTPConly, axisOccupancyTracks});
364-
364+ // request from experts to add track properties vs occupancy, to compare data vs MC
365+ const AxisSpec axisOccupancyForTrackQA{60 , 0 ., 15000 , " occupancy (n ITS tracks weighted)" };
366+ const AxisSpec axisNTPCcls{150 , 0 , 150 , " n TPC clusters" };
367+ histos.add (" occupancyQA/tpcNClsFound_vs_V0A_vs_occupancy" , " " , kTH3F , {axisMultV0AForOccup, axisNTPCcls, axisOccupancyForTrackQA});
368+ histos.add (" occupancyQA/tpcNClsFindable_vs_V0A_vs_occupancy" , " " , kTH3F , {axisMultV0AForOccup, axisNTPCcls, axisOccupancyForTrackQA});
369+ histos.add (" occupancyQA/tpcNClsShared_vs_V0A_vs_occupancy" , " " , kTH3F , {axisMultV0AForOccup, axisNTPCcls, axisOccupancyForTrackQA});
370+ histos.add (" occupancyQA/tpcNCrossedRows_vs_V0A_vs_occupancy" , " " , kTH3F , {axisMultV0AForOccup, axisNTPCcls, axisOccupancyForTrackQA});
371+ const AxisSpec axisChi2TPC{150 , 0 , 15 , " chi2Ncl TPC" };
372+ histos.add (" occupancyQA/tpcChi2_vs_V0A_vs_occupancy" , " " , kTH3F , {axisMultV0AForOccup, axisChi2TPC, axisOccupancyForTrackQA});
373+
374+ // ITS in-ROF occupancy
365375 histos.add (" occupancyQA/hITSTracks_ev1_vs_ev2_2coll_in_ROF" , " ;nITStracks event #1;nITStracks event #2" , kTH2D , {{200 , 0 ., 6000 }, {200 , 0 ., 6000 }});
366376 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 }});
367377 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 +1138,10 @@ struct EventSelectionQaTask {
11281138 int nTracksITSTPC = 0 ;
11291139
11301140 bool isTVX = col.selection_bit (kIsTriggerTVX );
1141+
1142+ int occupancyByTracks = col.trackOccupancyInTimeRange ();
1143+ float occupancyByFT0C = col.ft0cOccupancyInTimeRange ();
1144+
11311145 for (const auto & track : tracksGrouped) {
11321146 int trackBcDiff = bcDiff + track.trackTime () / o2::constants::lhc::LHCBunchSpacingNS;
11331147
@@ -1158,7 +1172,19 @@ struct EventSelectionQaTask {
11581172 nPV++;
11591173 if (track.hasTPC ()) {
11601174 nContributorsAfterEtaTPCLooseCuts++;
1161- }
1175+
1176+ if (!isLowFlux && col.sel8 () && col.selection_bit (kNoSameBunchPileup ) && fabs (col.posZ ()) < 10 && occupancyByTracks >= 0 ) {
1177+ histos.fill (HIST (" occupancyQA/tpcNClsFound_vs_V0A_vs_occupancy" ), multV0A, track.tpcNClsFound (), occupancyByTracks);
1178+ histos.fill (HIST (" occupancyQA/tpcNClsFindable_vs_V0A_vs_occupancy" ), multV0A, track.tpcNClsFindable (), occupancyByTracks);
1179+ histos.fill (HIST (" occupancyQA/tpcNClsShared_vs_V0A_vs_occupancy" ), multV0A, track.tpcNClsShared (), occupancyByTracks);
1180+ histos.fill (HIST (" occupancyQA/tpcChi2_vs_V0A_vs_occupancy" ), multV0A, track.tpcChi2NCl (), occupancyByTracks);
1181+ int tpcNClsFindableMinusCrossedRowsCorrected = track.tpcNClsFindableMinusCrossedRows ();
1182+ // correct for a buggy behaviour due to int8 and uint8 difference:
1183+ if (tpcNClsFindableMinusCrossedRowsCorrected < -70 )
1184+ tpcNClsFindableMinusCrossedRowsCorrected += 256 ;
1185+ histos.fill (HIST (" occupancyQA/tpcNCrossedRows_vs_V0A_vs_occupancy" ), multV0A, track.tpcNClsFindable () - tpcNClsFindableMinusCrossedRowsCorrected, occupancyByTracks);
1186+ }
1187+ } // end of hasTPC
11621188 if (track.tpcNClsFound () > 70 && track.tpcNClsCrossedRows () > 80 && track.itsChi2NCl () < 36 && track.tpcChi2NCl () < 4 ) {
11631189 nContributorsAfterEtaTPCCuts++;
11641190 // ROF border QA
@@ -1183,10 +1209,8 @@ struct EventSelectionQaTask {
11831209
11841210 histos.fill (HIST (" hNcontribAfterCutsVsBcInTF" ), bcInTF, nContributorsAfterEtaTPCCuts);
11851211
1186- if (!isLowFlux && col.sel8 () && fabs (col.posZ ()) < 10 ) {
1187- int occupancyByTracks = col.trackOccupancyInTimeRange ();
1212+ if (!isLowFlux && col.sel8 () && col.selection_bit (kNoSameBunchPileup ) && fabs (col.posZ ()) < 10 ) {
11881213 histos.fill (HIST (" occupancyQA/hOccupancyByTracks" ), occupancyByTracks);
1189- float occupancyByFT0C = col.ft0cOccupancyInTimeRange ();
11901214 histos.fill (HIST (" occupancyQA/hOccupancyByFT0C" ), occupancyByFT0C);
11911215 if (occupancyByTracks >= 0 ) {
11921216 histos.fill (HIST (" occupancyQA/hOccupancyByFT0CvsByTracks" ), occupancyByTracks, occupancyByFT0C);
0 commit comments