From 176f76c4d2b7c34c71c24353e28ad5d2882f2353 Mon Sep 17 00:00:00 2001 From: Andrea Sofia Triolo Date: Tue, 26 Nov 2024 14:56:56 +0100 Subject: [PATCH 1/6] new method and checks --- .../studies/include/ITSStudies/Efficiency.h | 5 + .../postprocessing/studies/src/Efficiency.cxx | 1293 ++++++++++++++--- 2 files changed, 1093 insertions(+), 205 deletions(-) diff --git a/Detectors/ITSMFT/ITS/postprocessing/studies/include/ITSStudies/Efficiency.h b/Detectors/ITSMFT/ITS/postprocessing/studies/include/ITSStudies/Efficiency.h index 19df2279a2813..ad1854af49d68 100644 --- a/Detectors/ITSMFT/ITS/postprocessing/studies/include/ITSStudies/Efficiency.h +++ b/Detectors/ITSMFT/ITS/postprocessing/studies/include/ITSStudies/Efficiency.h @@ -55,6 +55,11 @@ int dcaCut = 8; float mDCACutsXY[3][2] = {{dcaXY[0] - dcaCut * sigmaDcaXY[0], dcaXY[0] + dcaCut* sigmaDcaXY[0]}, {dcaXY[1] - dcaCut * sigmaDcaXY[1], dcaXY[1] + dcaCut* sigmaDcaXY[1]}, {dcaXY[2] - dcaCut * sigmaDcaXY[2], dcaXY[2] + dcaCut* sigmaDcaXY[2]}}; // cuts at 8 sigma for each layer for xy. The values represent m-8sigma and m+8sigma float mDCACutsZ[3][2] = {{dcaZ[0] - dcaCut * sigmaDcaZ[0], dcaZ[0] + dcaCut* sigmaDcaZ[0]}, {dcaZ[1] - dcaCut * sigmaDcaZ[1], dcaZ[1] + dcaCut* sigmaDcaZ[1]}, {dcaZ[2] - dcaCut * sigmaDcaZ[2], dcaZ[2] + dcaCut* sigmaDcaZ[2]}}; +// std::unique_ptr> mExcludedChipMC = std::make_unique(new std::vector{66, 67, 68, 75, 76, 77, 84, 85, 86, 93, 94, 95, 102, 103, 104, 265, 266, 267, 274, 275, 276, 283, 284, 285, 413, 414, 415, 422, 423, 424, 431, 432, 433}); +// std::vector* mExcludedChipMC = new std::vector{84, 85, 86, 265, 266, 267}; +// std::vector* mExcludedChipMC = new std::vector{85, 266}; +std::vector* mExcludedChipMC = new std::vector{66, 67, 68, 75, 76, 77, 84, 85, 86, 93, 94, 95, 102, 103, 104, 265, 266, 267, 274, 275, 276, 283, 284, 285, 413, 414, 415, 422, 423, 424, 431, 432, 433}; +// std::vector mExcludedChipMC = {66, 67, 68, 75, 76, 77, 84, 85, 86, 93, 94, 95, 102, 103, 104, 265, 266, 267, 274, 275, 276, 283, 284, 285, 413, 414, 415, 422, 423, 424, 431, 432, 433}; } // namespace study } // namespace its } // namespace o2 diff --git a/Detectors/ITSMFT/ITS/postprocessing/studies/src/Efficiency.cxx b/Detectors/ITSMFT/ITS/postprocessing/studies/src/Efficiency.cxx index 28e09e5d9a3be..7e80839dc57ce 100644 --- a/Detectors/ITSMFT/ITS/postprocessing/studies/src/Efficiency.cxx +++ b/Detectors/ITSMFT/ITS/postprocessing/studies/src/Efficiency.cxx @@ -43,6 +43,8 @@ #include #include #include +#include +#include #include #define NLAYERS 3 @@ -61,7 +63,7 @@ class EfficiencyStudy : public Task mask_t src, bool useMC, std::shared_ptr kineReader, - std::shared_ptr gr) : mDataRequest(dr), mTracksSrc(src), mUseMC(useMC), mKineReader(kineReader), mGGCCDBRequest(gr){}; + std::shared_ptr gr) : mDataRequest(dr), mTracksSrc(src), mUseMC(useMC), mKineReader(kineReader), mGGCCDBRequest(gr) {}; ~EfficiencyStudy() final = default; void init(InitContext&) final; @@ -79,6 +81,7 @@ class EfficiencyStudy : public Task void saveDataInfo(); void process(o2::globaltracking::RecoContainer&); void setClusterDictionary(const o2::itsmft::TopologyDictionary* d) { mDict = d; } + void getHits(); private: void updateTimeDependentParams(ProcessingContext& pc); @@ -151,12 +154,12 @@ class EfficiencyStudy : public Task std::unique_ptr m2DClusterOriginalPositions; std::unique_ptr m2DClusterDuplicatedPositions; - std::unique_ptr mXoriginal; - std::unique_ptr mYoriginal; - std::unique_ptr mZoriginal; - std::unique_ptr mXduplicated; - std::unique_ptr mYduplicated; - std::unique_ptr mZduplicated; + // std::unique_ptr mXoriginal; + // std::unique_ptr mYoriginal; + // std::unique_ptr mZoriginal; + // std::unique_ptr mXduplicated; + // std::unique_ptr mYduplicated; + // std::unique_ptr mZduplicated; // Efficiency histos std::unique_ptr mEfficiencyGoodMatch; @@ -175,6 +178,15 @@ class EfficiencyStudy : public Task TH2D* mEfficiencyFakeMatchPhi_layer[NLAYERS]; TH2D* mEfficiencyFakeMatchPhiTrack_layer[NLAYERS]; + // TH2D* mEfficiencyColEta[NLAYERS]; + TH2D* mDenColEta[NLAYERS]; + TH2D* mNumColEta[NLAYERS]; + TH2D* mDenRowPhi[NLAYERS]; + TH2D* mNumRowPhi[NLAYERS]; + TH2D* mDenRowCol[NLAYERS]; + TH2D* mNumRowCol[NLAYERS]; + + // phi, eta, pt of the duplicated cluster per layer TH2D* mPt_EtaDupl[NLAYERS]; @@ -185,6 +197,8 @@ class EfficiencyStudy : public Task std::unique_ptr mDuplicatedPhi[NLAYERS][3]; TH1D* mDuplicatedPt[NLAYERS]; TH1D* mDuplicatedRow[NLAYERS]; + TH1D* mDuplicatedCol[NLAYERS]; + TH1D* mDuplicatedZ[NLAYERS]; TH2D* mDuplicatedPtEta[NLAYERS]; TH2D* mDuplicatedPtPhi[NLAYERS]; TH2D* mDuplicatedEtaPhi[NLAYERS]; @@ -206,6 +220,12 @@ class EfficiencyStudy : public Task TH1D* mNGoodMatchesRow[NLAYERS]; TH1D* mNFakeMatchesRow[NLAYERS]; + TH1D* mNGoodMatchesCol[NLAYERS]; + TH1D* mNFakeMatchesCol[NLAYERS]; + + TH1D* mNGoodMatchesZ[NLAYERS]; + TH1D* mNFakeMatchesZ[NLAYERS]; + TH2D* mNGoodMatchesPtEta[NLAYERS]; TH2D* mNFakeMatchesPtEta[NLAYERS]; @@ -220,6 +240,10 @@ class EfficiencyStudy : public Task std::unique_ptr mEffPtFake[NLAYERS]; std::unique_ptr mEffRowGood[NLAYERS]; std::unique_ptr mEffRowFake[NLAYERS]; + std::unique_ptr mEffColGood[NLAYERS]; + std::unique_ptr mEffColFake[NLAYERS]; + std::unique_ptr mEffZGood[NLAYERS]; + std::unique_ptr mEffZFake[NLAYERS]; std::unique_ptr mEffPtEtaGood[NLAYERS]; std::unique_ptr mEffPtEtaFake[NLAYERS]; std::unique_ptr mEffPtPhiGood[NLAYERS]; @@ -277,6 +301,25 @@ class EfficiencyStudy : public Task TH1D* numEtaGood[NLAYERS]; TH1D* numEtaFake[NLAYERS]; + TH1D* denRow[NLAYERS]; + TH1D* numRow[NLAYERS]; + TH1D* numRowGood[NLAYERS]; + TH1D* numRowFake[NLAYERS]; + + TH1D* denCol[NLAYERS]; + TH1D* numCol[NLAYERS]; + TH1D* numColGood[NLAYERS]; + TH1D* numColFake[NLAYERS]; + TH1D* denZ[NLAYERS]; + TH1D* numZ[NLAYERS]; + TH1D* numZGood[NLAYERS]; + TH1D* numZFake[NLAYERS]; + + TH1D* numLayers; + TH1D* denLayers; + TH1D* numGoodLayers; + TH1D* numFakeLayers; + int nDuplicatedClusters[NLAYERS] = {0}; int nTracksSelected[NLAYERS] = {0}; // denominator fot the efficiency calculation @@ -299,6 +342,56 @@ class EfficiencyStudy : public Task std::unique_ptr chi2track; std::unique_ptr chi2trackAccepted; + + /// checking where the duplicated not found are (histograms filled with the orifinal cluster variables) + TH1D* phiFound[NLAYERS]; + TH1D* rowFound[NLAYERS]; + TH1D* phiNotFound[NLAYERS]; + TH1D* rowNotFound[NLAYERS]; + TH1D* etaFound[NLAYERS]; + TH1D* etaNotFound[NLAYERS]; + TH1D* xyIPFound[NLAYERS]; // IP from 0,0,0 and the track should be the deplacement of the primary vertex + TH1D* xyIPNotFound[NLAYERS]; + TH1D* zIPFound[NLAYERS]; + TH1D* zIPNotFound[NLAYERS]; + TH1D* zFound[NLAYERS]; + TH1D* zNotFound[NLAYERS]; + TH2D* colFoundOriginalVsDuplicated[NLAYERS]; + TH1D* colFoundOriginal[NLAYERS]; + TH1D* colNotFound[NLAYERS]; + TH1D* colNotFoundAll; + TH1D* radiusFound[NLAYERS]; + TH1D* radiusNotFound[NLAYERS]; + TH1D* xFound[NLAYERS]; + TH1D* xNotFound[NLAYERS]; + TH1D* yFound[NLAYERS]; + TH1D* yNotFound[NLAYERS]; + std::unique_ptr m2DClusterFoundPositions; + std::unique_ptr m2DClusterNotFoundPositions; + std::unique_ptr mChipNotFound; + std::unique_ptr mChipFound; + std::unique_ptr l0_00; + std::unique_ptr l0_01; + std::unique_ptr l0_02; + std::unique_ptr l0_03; + std::unique_ptr l0_04; + std::unique_ptr l0_05; + std::unique_ptr l0_06; + std::unique_ptr l0_07; + std::unique_ptr l0_08; + std::unique_ptr l0_09; + std::unique_ptr l0_10; + std::unique_ptr l0_11; + std::unique_ptr l1_15; + std::unique_ptr l2_00; + std::unique_ptr l2_01; + std::unique_ptr l2_02; + std::unique_ptr l2_15; + std::unique_ptr l2_19; + std::unique_ptr chipOrigVsOverlap; + + std::unique_ptr chipmap; + }; void EfficiencyStudy::init(InitContext& ic) @@ -320,15 +413,15 @@ void EfficiencyStudy::init(InitContext& ic) mOutFile = std::make_unique(mOutFileName.c_str(), "recreate"); - mXoriginal = std::make_unique("xoriginal", "x original ;x (cm); ", 200, 0, 0); - mYoriginal = std::make_unique("yoriginal", "y original ;y (cm); ", 200, 0, 0); - mZoriginal = std::make_unique("zoriginal", "z original ;z (cm); ", 300, 0, 0); - mXduplicated = std::make_unique("xduplicated", "x duplicated ;x (cm); ", 200, -10, 10); - mYduplicated = std::make_unique("yduplicated", "y duplicated ;y (cm); ", 200, -10, 10); - mZduplicated = std::make_unique("zduplicated", "z duplicated ;z (cm); ", 300, -30, 30); + // mXoriginal = std::make_unique("xoriginal", "x original ;x (cm); ", 200, 0, 0); + // mYoriginal = std::make_unique("yoriginal", "y original ;y (cm); ", 200, 0, 0); + // mZoriginal = std::make_unique("zoriginal", "z original ;z (cm); ", 300, 0, 0); + // mXduplicated = std::make_unique("xduplicated", "x duplicated ;x (cm); ", 200, -10, 10); + // mYduplicated = std::make_unique("yduplicated", "y duplicated ;y (cm); ", 200, -10, 10); + // mZduplicated = std::make_unique("zduplicated", "z duplicated ;z (cm); ", 300, -30, 30); - mDCAxyDuplicated = std::make_unique("dcaXYDuplicated", "Distance between track and duplicated cluster ;DCA xy (cm); ", 400, -0.2, 0.2); - mDCAzDuplicated = std::make_unique("dcaZDuplicated", "Distance between track and duplicated cluster ;DCA z (cm); ", 400, -0.2, 0.2); + mDCAxyDuplicated = std::make_unique("dcaXYDuplicated", "Distance between track and duplicated cluster ;DCA xy (cm); ", 200, -0.01, 0.01); + mDCAzDuplicated = std::make_unique("dcaZDuplicated", "Distance between track and duplicated cluster ;DCA z (cm); ", 200, -0.01, 0.01); m3DClusterPositions = std::make_unique("3DClusterPositions", ";x (cm);y (cm);z (cm)", 200, -10, 10, 200, -10, 10, 400, -20, 20); m3DDuplicatedClusterPositions = std::make_unique("3DDuplicatedClusterPositions", ";x (cm);y (cm);z (cm)", 200, -10, 10, 200, -10, 10, 500, -30, 30); @@ -342,13 +435,44 @@ void EfficiencyStudy::init(InitContext& ic) chi2track = std::make_unique("chi2track", "; $chi^{2}", 500, 0, 100); chi2trackAccepted = std::make_unique("chi2trackAccepted", "; $chi^{2}", 500, 0, 100); + m2DClusterFoundPositions = std::make_unique("m2DClusterFoundPositions", ";x (cm);y (cm)", 250, -5, 5, 250, -5, 5); + m2DClusterNotFoundPositions = std::make_unique("m2DClusterNotFoundPositions", ";x (cm);y (cm)", 250, -5, 5, 250, -5, 5); + mChipNotFound = std::make_unique("mChipNotFound", ";chipID", 432, 0, 432); + mChipFound = std::make_unique("mChipFound", ";chipID", 432, 0, 432); + l0_00 = std::make_unique("l0_00", ";col; row", 2304, -0.5, 9215.5, 128, -0.5, 511.5); + l0_01 = std::make_unique("l0_01", ";col; row", 2304, -0.5, 9215.5, 128, -0.5, 511.5); + l0_02 = std::make_unique("l0_02", ";col; row", 2304, -0.5, 9215.5, 128, -0.5, 511.5); + l0_03 = std::make_unique("l0_03", ";col; row", 2304, -0.5, 9215.5, 128, -0.5, 511.5); + l0_04 = std::make_unique("l0_04", ";col; row", 2304, -0.5, 9215.5, 128, -0.5, 511.5); + l0_05 = std::make_unique("l0_05", ";col; row", 2304, -0.5, 9215.5, 128, -0.5, 511.5); + l0_06 = std::make_unique("l0_06", ";col; row", 2304, -0.5, 9215.5, 128, -0.5, 511.5); + l0_07 = std::make_unique("l0_07", ";col; row", 2304, -0.5, 9215.5, 128, -0.5, 511.5); + l0_08 = std::make_unique("l0_08", ";col; row", 2304, -0.5, 9215.5, 128, -0.5, 511.5); + l0_09 = std::make_unique("l0_09", ";col; row", 2304, -0.5, 9215.5, 128, -0.5, 511.5); + l0_10 = std::make_unique("l0_10", ";col; row", 2304, -0.5, 9215.5, 128, -0.5, 511.5); + l0_11 = std::make_unique("l0_11", ";col; row", 2304, -0.5, 9215.5, 512, -0.5, 511.5); + l1_15 = std::make_unique("l1_15", ";col; row", 2304, -0.5, 9215.5, 512, -0.5, 511.5); + l2_00 = std::make_unique("l2_00", ";col; row", 2304, -0.5, 9215.5, 512, -0.5, 511.5); + l2_01 = std::make_unique("l2_01", ";col; row", 2304, -0.5, 9215.5, 512, -0.5, 511.5); + l2_02 = std::make_unique("l2_02", ";col; row", 2304, -0.5, 9215.5, 512, -0.5, 511.5); + l2_15 = std::make_unique("l2_15", ";col; row", 2304, -0.5, 9215.5, 512, -0.5, 511.5); + l2_19 = std::make_unique("l2_19", ";col; row", 2304, -0.5, 9215.5, 512, -0.5, 511.5); + chipOrigVsOverlap = std::make_unique("chipOrigVsOverlap", ";chipID Overlap;chipID Original", 9, 0, 9, 9, 0, 9); + colNotFoundAll = new TH1D("colNotFoundAll", ";col", 1024, 0, 1023); + chipmap = std::make_unique("chipmap", ";Column;Row", 1024, 0, 1023, 512, -0.5, 511.5); + + numLayers = new TH1D("numLayers", "numLayers; ; Efficiency", 3, -0.5, 2.5); + numGoodLayers = new TH1D("numGoodLayers", "numGoodLayers; ; Efficiency", 3, -0.5, 2.5); + numFakeLayers = new TH1D("numFakeLayers", "numFakeLayers; ; Efficiency", 3, -0.5, 2.5); + denLayers = new TH1D("denLayers", "denLayers; ; Efficiency", 3, -0.5, 2.5); + for (int i = 0; i < NLAYERS; i++) { chipRowDuplicated[i] = std::make_unique(Form("chipPosDuplicated_L%d", i), Form("L%d; row", i), 512, -0.5, 511.5); chipRowOriginalIfDuplicated[i] = std::make_unique(Form("chipPosOriginalIfDuplicated%d", i), Form("L%d; row", i), 512, -0.5, 511.5); - DCAxyData[i] = std::make_unique(Form("dcaXYData_L%d", i), "Distance between track and original cluster ;DCA xy (cm); ", 4000, -2, 2); - DCAzData[i] = std::make_unique(Form("dcaZData_L%d", i), "Distance between track and original cluster ;DCA z (cm); ", 4000, -2, 2); + DCAxyData[i] = std::make_unique(Form("dcaXYData_L%d", i), "Distance between track and original cluster ;DCA xy (cm); ", 4000, -0.2, 0.2); + DCAzData[i] = std::make_unique(Form("dcaZData_L%d", i), "Distance between track and original cluster ;DCA z (cm); ", 4000, -0.2, 0.2); DCAxyRejected[i] = std::make_unique(Form("DCAxyRejected%d", i), "Distance between track and original cluster (rejected) ;DCA xy (cm); ", 30000, -30, 30); DCAzRejected[i] = std::make_unique(Form("DCAzRejected%d", i), "Distance between track and original cluster (rejected) ;DCA z (cm); ", 30000, -30, 30); @@ -364,25 +488,25 @@ void EfficiencyStudy::init(InitContext& ic) mDistanceClustersZ[i] = std::make_unique(Form("distanceClustersZ_L%d", i), ";Distance z (cm); ", 100, 0, 1); mDistanceClusters[i] = std::make_unique(Form("distanceClusters_L%d", i), ";Distance (cm); ", 100, 0, 1); - mDCAxyOriginal[i] = std::make_unique(Form("dcaXYOriginal_L%d", i), "Distance between track and original cluster ;DCA xy (cm); ", 400, -0.2, 0.2); - mDCAzOriginal[i] = std::make_unique(Form("dcaZOriginal_L%d", i), "Distance between track and original cluster ;DCA z (cm); ", 400, -0.2, 0.2); + mDCAxyOriginal[i] = std::make_unique(Form("dcaXYOriginal_L%d", i), "Distance between track and original cluster ;DCA xy (cm); ", 200, -0.01, 0.01); + mDCAzOriginal[i] = std::make_unique(Form("dcaZOriginal_L%d", i), "Distance between track and original cluster ;DCA z (cm); ", 200, -0.01, 0.01); - mPhiOriginal[i] = std::make_unique(Form("phiOriginal_L%d", i), ";phi (deg); ", 1440, -180, 180); - mPhiTrackOriginal[i] = std::make_unique(Form("phiTrackOriginal_L%d", i), ";phi Track (deg); ", 1440, 0, 360); - mEtaOriginal[i] = std::make_unique(Form("etaOriginal_L%d", i), ";eta (deg); ", 100, -2, 2); + mPhiOriginal[i] = std::make_unique(Form("phiOriginal_L%d", i), ";phi (rad); ", 180, -3.2, 3.2); + mPhiTrackOriginal[i] = std::make_unique(Form("phiTrackOriginal_L%d", i), ";phi Track (rad); ", 1440, 0, 360); + mEtaOriginal[i] = std::make_unique(Form("etaOriginal_L%d", i), ";eta (rad); ", 100, -2, 2); mPtOriginal[i] = std::make_unique(Form("ptOriginal_L%d", i), ";pt (GeV/c); ", 100, 0, 10); - mZvsPhiDUplicated[i] = std::make_unique(Form("zvsphiDuplicated_L%d", i), ";z (cm);phi (deg)", 400, -20, 20, 1440, -180, 180); + mZvsPhiDUplicated[i] = std::make_unique(Form("zvsphiDuplicated_L%d", i), ";z (cm);phi (rad)", 400, -20, 20, 180, -3.2, 3.2); mPtDuplicated[i] = new TH1D(Form("ptDuplicated_L%d", i), ";pt (GeV/c); ", nbPt, 0, 7.5); // xbins); mEtaDuplicated[i] = new TH1D(Form("etaDuplicated_L%d", i), ";eta; ", 40, -2, 2); - mPhiDuplicated[i] = new TH1D(Form("phiDuplicated_L%d", i), ";phi (deg); ", 1440, -180, 180); - mPhiTrackDuplicated[i] = new TH1D(Form("phiTrackDuplicated_L%d", i), ";phi Track (deg); ", 1440, 0, 360); - mPhiOriginalIfDuplicated[i] = new TH1D(Form("phiOriginalIfDuplicated_L%d", i), ";phi (deg); ", 1440, -180, 180); - mPhiTrackDuplicatedvsphiDuplicated[i] = new TH2D(Form("phiTrackDuplicatedvsphiDuplicated_L%d", i), ";phi track (deg);phi oridinal if duplicated (deg); ", 1440, 0, 360, 1440, -180, 180); - mPhiTrackoriginalvsphioriginal[i] = new TH2D(Form("phiTrackoriginalvsphioriginal_L%d", i), ";phi track (deg);phi original (deg); ", 1440, 0, 360, 1440, -180, 180); - mDCAxyDuplicated_layer[i] = std::make_unique(Form("dcaXYDuplicated_layer_L%d", i), "Distance between track and duplicated cluster ;DCA xy (cm); ", 400, -0.2, 0.2); - mDCAzDuplicated_layer[i] = std::make_unique(Form("dcaZDuplicated_layer_L%d", i), "Distance between track and duplicated cluster ;DCA z (cm); ", 400, -0.2, 0.2); + mPhiDuplicated[i] = new TH1D(Form("phiDuplicated_L%d", i), ";phi (rad); ", 180, -3.2, 3.2); + mPhiTrackDuplicated[i] = new TH1D(Form("phiTrackDuplicated_L%d", i), ";phi Track (rad); ", 1440, 0, 360); + mPhiOriginalIfDuplicated[i] = new TH1D(Form("phiOriginalIfDuplicated_L%d", i), ";phi (rad); ", 180, -3.2, 3.2); + mPhiTrackDuplicatedvsphiDuplicated[i] = new TH2D(Form("phiTrackDuplicatedvsphiDuplicated_L%d", i), ";phi track (rad);phi oridinal if duplicated (rad); ", 1440, 0, 360, 180, -3.2, 3.2); + mPhiTrackoriginalvsphioriginal[i] = new TH2D(Form("phiTrackoriginalvsphioriginal_L%d", i), ";phi track (rad);phi original (rad); ", 1440, 0, 360, 180, -3.2, 3.2); + mDCAxyDuplicated_layer[i] = std::make_unique(Form("dcaXYDuplicated_layer_L%d", i), "Distance between track and duplicated cluster ;DCA xy (cm); ", 100, -0.01, 0.01); + mDCAzDuplicated_layer[i] = std::make_unique(Form("dcaZDuplicated_layer_L%d", i), "Distance between track and duplicated cluster ;DCA z (cm); ", 100, -0.01, 0.01); mEfficiencyGoodMatch_layer[i] = std::make_unique(Form("mEfficiencyGoodMatch_layer_L%d", i), ";#sigma(DCA) cut;Efficiency;", 20, 0.5, 20.5); mEfficiencyFakeMatch_layer[i] = std::make_unique(Form("mEfficiencyFakeMatch_layer_L%d", i), ";#sigma(DCA) cut;Efficiency;", 20, 0.5, 20.5); @@ -394,10 +518,10 @@ void EfficiencyStudy::init(InitContext& ic) mEfficiencyGoodMatchEta_layer[i] = new TH2D(Form("mEfficiencyGoodMatchEta_layer_L%d", i), ";#eta;#sigma(DCA) cut;Efficiency;", 40, -2, 2, 20, 0.5, 20.5); mEfficiencyFakeMatchEta_layer[i] = new TH2D(Form("mEfficiencyFakeMatchEta_layer_L%d", i), ";#eta;#sigma(DCA) cut;Efficiency;", 40, -2, 2, 20, 0.5, 20.5); - mEfficiencyGoodMatchPhi_layer[i] = new TH2D(Form("mEfficiencyGoodMatchPhi_layer_L%d", i), ";#phi;#sigma(DCA) cut;Efficiency;", 1440, -180, 180, 20, 0.5, 20.5); + mEfficiencyGoodMatchPhi_layer[i] = new TH2D(Form("mEfficiencyGoodMatchPhi_layer_L%d", i), ";#phi;#sigma(DCA) cut;Efficiency;", 180, -3.2, 3.2, 20, 0.5, 20.5); mEfficiencyGoodMatchPhiTrack_layer[i] = new TH2D(Form("mEfficiencyGoodMatchPhiTrack_layer_L%d", i), ";#phi track;#sigma(DCA) cut;Efficiency;", 1440, 0, 360, 20, 0.5, 20.5); - mEfficiencyGoodMatchPhiOriginal_layer[i] = new TH2D(Form("mEfficiencyGoodMatchPhiOriginal_layer_L%d", i), ";#phi Original;#sigma(DCA) cut;Efficiency;", 1440, -180, 180, 20, 0.5, 20.5); - mEfficiencyFakeMatchPhi_layer[i] = new TH2D(Form("mEfficiencyFakeMatchPhi_layer_L%d", i), ";#phi;#sigma(DCA) cut;Efficiency;", 1440, -180, 180, 20, 0.5, 20.5); + mEfficiencyGoodMatchPhiOriginal_layer[i] = new TH2D(Form("mEfficiencyGoodMatchPhiOriginal_layer_L%d", i), ";#phi Original;#sigma(DCA) cut;Efficiency;", 180, -3.2, 3.2, 20, 0.5, 20.5); + mEfficiencyFakeMatchPhi_layer[i] = new TH2D(Form("mEfficiencyFakeMatchPhi_layer_L%d", i), ";#phi;#sigma(DCA) cut;Efficiency;", 180, -3.2, 3.2, 20, 0.5, 20.5); mEfficiencyFakeMatchPhiTrack_layer[i] = new TH2D(Form("mEfficiencyFakeMatchPhiTrack_layer_L%d", i), ";#phi Track;#sigma(DCA) cut;Efficiency;", 1440, 0, 360, 20, 0.5, 20.5); mPt_EtaDupl[i] = new TH2D(Form("mPt_EtaDupl_L%d", i), ";#it{p}_{T} (GeV/c);#eta; ", 100, 0, 10, 100, -2, 2); @@ -409,13 +533,27 @@ void EfficiencyStudy::init(InitContext& ic) mNFakeMatchesPt[i] = new TH1D(Form("mNFakeMatchesPt_L%d", i), Form("; #it{p}_{T} (GeV/c); Number of fake matches L%d", i), nbPt, 0, 7.5 /* xbins*/); mNFakeMatchesPt[i]->Sumw2(); - mDuplicatedRow[i] = new TH1D(Form("mDuplicatedRow_L%d", i), Form("; Row; Number of duplciated clusters L%d", i), 512, -0.5, 511.5); + mDuplicatedRow[i] = new TH1D(Form("mDuplicatedRow_L%d", i), Form("; Row; Number of duplciated clusters L%d", i), 128, -0.5, 511.5); mDuplicatedRow[i]->Sumw2(); - mNGoodMatchesRow[i] = new TH1D(Form("mNGoodMatchesRow_L%d", i), Form("; Row; Number of good matches L%d", i), 512, -0.5, 511.5); + mNGoodMatchesRow[i] = new TH1D(Form("mNGoodMatchesRow_L%d", i), Form("; Row; Number of good matches L%d", i), 128, -0.5, 511.5); mNGoodMatchesRow[i]->Sumw2(); - mNFakeMatchesRow[i] = new TH1D(Form("mNFakeMatchesRow_L%d", i), Form(";Row; Number of fake matches L%d", i), 512, -0.5, 511.5); + mNFakeMatchesRow[i] = new TH1D(Form("mNFakeMatchesRow_L%d", i), Form(";Row; Number of fake matches L%d", i), 128, -0.5, 511.5); mNFakeMatchesRow[i]->Sumw2(); + mDuplicatedCol[i] = new TH1D(Form("mDuplicatedCol_L%d", i), Form("; Col; Number of duplciated clusters L%d", i), 128, -0.5, 1023.5); + mDuplicatedCol[i]->Sumw2(); + mNGoodMatchesCol[i] = new TH1D(Form("mNGoodMatchesCol_L%d", i), Form("; Col; Number of good matches L%d", i), 128, -0.5, 1023.5); + mNGoodMatchesCol[i]->Sumw2(); + mNFakeMatchesCol[i] = new TH1D(Form("mNFakeMatchesCol_L%d", i), Form(";Col; Number of fake matches L%d", i), 128, -0.5, 1023.5); + mNFakeMatchesCol[i]->Sumw2(); + + mDuplicatedZ[i] = new TH1D(Form("mDuplicatedZ_L%d", i), Form("; Z (cm); Number of duplciated clusters L%d", i), 150, -15, 15); + mDuplicatedZ[i]->Sumw2(); + mNGoodMatchesZ[i] = new TH1D(Form("mNGoodMatchesZ_L%d", i), Form("; Z (cm); Number of good matches L%d", i), 150, -15, 15); + mNGoodMatchesZ[i]->Sumw2(); + mNFakeMatchesZ[i] = new TH1D(Form("mNFakeMatchesZ_L%d", i), Form(";Z (cm); Number of fake matches L%d", i), 150, -15, 15); + mNFakeMatchesZ[i]->Sumw2(); + mDuplicatedPtEta[i] = new TH2D(Form("mDuplicatedPtEta_log_L%d", i), Form("; #it{p}_{T} (GeV/c);#eta; Number of duplciated clusters L%d", i), nbPt, 0, 7.5 /* xbins*/, 40, -2, 2); mDuplicatedPtEta[i]->Sumw2(); mNGoodMatchesPtEta[i] = new TH2D(Form("mNGoodMatchesPtEta_L%d", i), Form("; #it{p}_{T} (GeV/c);#eta; Number of good matches L%d", i), nbPt, 0, 7.5 /* xbins*/, 40, -2, 2); @@ -423,36 +561,36 @@ void EfficiencyStudy::init(InitContext& ic) mNFakeMatchesPtEta[i] = new TH2D(Form("mNFakeMatchesPtEta_L%d", i), Form("; #it{p}_{T} (GeV/c);#eta; Number of good matches L%d", i), nbPt, 0, 7.5 /* xbins*/, 40, -2, 2); mNFakeMatchesPtEta[i]->Sumw2(); - mDuplicatedPtPhi[i] = new TH2D(Form("mDuplicatedPtPhi_log_L%d", i), Form("; #it{p}_{T} (GeV/c);#phi (deg); Number of duplciated clusters L%d", i), nbPt, 0, 7.5 /* xbins*/, 1440, -180, 180); + mDuplicatedPtPhi[i] = new TH2D(Form("mDuplicatedPtPhi_log_L%d", i), Form("; #it{p}_{T} (GeV/c);#phi (rad); Number of duplciated clusters L%d", i), nbPt, 0, 7.5 /* xbins*/, 180, -3.2, 3.2); mDuplicatedPtPhi[i]->Sumw2(); - mNGoodMatchesPtPhi[i] = new TH2D(Form("mNGoodMatchesPtPhi_L%d", i), Form("; #it{p}_{T} (GeV/c);#phi (deg); Number of good matches L%d", i), nbPt, 0, 7.5 /* xbins*/, 1440, -180, 180); + mNGoodMatchesPtPhi[i] = new TH2D(Form("mNGoodMatchesPtPhi_L%d", i), Form("; #it{p}_{T} (GeV/c);#phi (rad); Number of good matches L%d", i), nbPt, 0, 7.5 /* xbins*/, 180, -3.2, 3.2); mNGoodMatchesPtPhi[i]->Sumw2(); - mNFakeMatchesPtPhi[i] = new TH2D(Form("mNFakeMatchesPtPhi_L%d", i), Form("; #it{p}_{T} (GeV/c);#phi (deg); Number of good matches L%d", i), nbPt, 0, 7.5 /* xbins*/, 1440, -180, 180); + mNFakeMatchesPtPhi[i] = new TH2D(Form("mNFakeMatchesPtPhi_L%d", i), Form("; #it{p}_{T} (GeV/c);#phi (rad); Number of good matches L%d", i), nbPt, 0, 7.5 /* xbins*/, 180, -3.2, 3.2); mNFakeMatchesPtPhi[i]->Sumw2(); - mDuplicatedEtaPhi[i] = new TH2D(Form("mDuplicatedEtaPhi_L%d", i), Form("; #eta;#phi (deg); Number of duplciated clusters L%d", i), 40, -2, 2, 1440, -180, 180); + mDuplicatedEtaPhi[i] = new TH2D(Form("mDuplicatedEtaPhi_L%d", i), Form("; #eta;#phi (rad); Number of duplciated clusters L%d", i), 40, -2, 2, 180, -3.2, 3.2); mDuplicatedEtaPhi[i]->Sumw2(); - mNGoodMatchesEtaPhi[i] = new TH2D(Form("mNGoodMatchesEtaPhi_L%d", i), Form("; #eta;#phi (deg); Number of good matches L%d", i), 40, -2, 2, 1440, -180, 180); + mNGoodMatchesEtaPhi[i] = new TH2D(Form("mNGoodMatchesEtaPhi_L%d", i), Form("; #eta;#phi (rad); Number of good matches L%d", i), 40, -2, 2, 180, -3.2, 3.2); mNGoodMatchesEtaPhi[i]->Sumw2(); - mNFakeMatchesEtaPhi[i] = new TH2D(Form("mNFakeMatchesEtaPhi_L%d", i), Form("; #eta;#phi (deg); Number of good matches L%d", i), 40, -2, 2, 1440, -180, 180); + mNFakeMatchesEtaPhi[i] = new TH2D(Form("mNFakeMatchesEtaPhi_L%d", i), Form("; #eta;#phi (rad); Number of good matches L%d", i), 40, -2, 2, 180, -3.2, 3.2); mNFakeMatchesEtaPhi[i]->Sumw2(); mDuplicatedEtaAllPt[i] = std::make_unique(Form("mDuplicatedEtaAllPt_L%d", i), Form("; #eta; Number of duplicated clusters L%d", i), 40, -2, 2); mNGoodMatchesEtaAllPt[i] = std::make_unique(Form("mNGoodMatchesEtaAllPt_L%d", i), Form("; #eta; Number of good matches L%d", i), 40, -2, 2); mNFakeMatchesEtaAllPt[i] = std::make_unique(Form("mNFakeMatchesEtaAllPt_L%d", i), Form("; #eta; Number of fake matches L%d", i), 40, -2, 2); - mDuplicatedPhiAllPt[i] = std::make_unique(Form("mDuplicatedPhiAllPt_L%d", i), Form("; #phi (deg); Number of duplicated clusters L%d", i), 1440, -180, 180); - mNGoodMatchesPhiAllPt[i] = std::make_unique(Form("mNGoodMatchesPhiAllPt_L%d", i), Form("; #phi (deg); Number of good matches L%d", i), 1440, -180, 180); - mNFakeMatchesPhiAllPt[i] = std::make_unique(Form("mNFakeMatchesPhiAllPt_L%d", i), Form("; #phi (deg); Number of fake matches L%d", i), 1440, -180, 180); + mDuplicatedPhiAllPt[i] = std::make_unique(Form("mDuplicatedPhiAllPt_L%d", i), Form("; #phi (rad); Number of duplicated clusters L%d", i), 180, -3.2, 3.2); + mNGoodMatchesPhiAllPt[i] = std::make_unique(Form("mNGoodMatchesPhiAllPt_L%d", i), Form("; #phi (rad); Number of good matches L%d", i), 180, -3.2, 3.2); + mNFakeMatchesPhiAllPt[i] = std::make_unique(Form("mNFakeMatchesPhiAllPt_L%d", i), Form("; #phi (rad); Number of fake matches L%d", i), 180, -3.2, 3.2); mnGoodMatchesPt_layer[i] = new TH2D(Form("mnGoodMatchesPt_layer_L%d", i), ";pt; nGoodMatches", nbPt, 0, 7.5 /* xbins*/, 20, 0.5, 20.5); mnFakeMatchesPt_layer[i] = new TH2D(Form("mnFakeMatchesPt_layer_L%d", i), ";pt; nFakeMatches", nbPt, 0, 7.5 /* xbins*/, 20, 0.5, 20.5); mnGoodMatchesEta_layer[i] = new TH2D(Form("mnGoodMatchesEta_layer_L%d", i), ";#eta; nGoodMatches", 40, -2, 2, 20, 0.5, 20.5); mnFakeMatchesEta_layer[i] = new TH2D(Form("mnFakeMatchesEta_layer_L%d", i), ";#eta; nFakeMatches", 40, -2, 2, 20, 0.5, 20.5); - mnGoodMatchesPhi_layer[i] = new TH2D(Form("mnGoodMatchesPhi_layer_L%d", i), ";#Phi; nGoodMatches", 1440, -180, 180, 20, 0.5, 20.5); + mnGoodMatchesPhi_layer[i] = new TH2D(Form("mnGoodMatchesPhi_layer_L%d", i), ";#Phi; nGoodMatches", 180, -3.2, 3.2, 20, 0.5, 20.5); mnGoodMatchesPhiTrack_layer[i] = new TH2D(Form("mnGoodMatchesPhiTrack_layer_L%d", i), ";#Phi track; nGoodMatches", 1440, 0, 360, 20, 0.5, 20.5); - mnGoodMatchesPhiOriginal_layer[i] = new TH2D(Form("mnGoodMatchesPhiOriginal_layer_L%d", i), ";#Phi of the original Cluster; nGoodMatches", 1440, -180, 180, 20, 0.5, 20.5); - mnFakeMatchesPhi_layer[i] = new TH2D(Form("mnFakeMatchesPhi_layer_L%d", i), ";#Phi; nFakeMatches", 1440, -180, 180, 20, 0.5, 20.5); + mnGoodMatchesPhiOriginal_layer[i] = new TH2D(Form("mnGoodMatchesPhiOriginal_layer_L%d", i), ";#Phi of the original Cluster; nGoodMatches", 180, -3.2, 3.2, 20, 0.5, 20.5); + mnFakeMatchesPhi_layer[i] = new TH2D(Form("mnFakeMatchesPhi_layer_L%d", i), ";#Phi; nFakeMatches", 180, -3.2, 3.2, 20, 0.5, 20.5); mnFakeMatchesPhiTrack_layer[i] = new TH2D(Form("mnFakeMatchesPhiTrack_layer_L%d", i), ";#Phi track; nFakeMatches", 1440, 0, 360, 20, 0.5, 20.5); denPt[i] = new TH1D(Form("denPt_L%d", i), Form("denPt_L%d", i), nbPt, 0, 7.5 /* xbins*/); @@ -460,16 +598,40 @@ void EfficiencyStudy::init(InitContext& ic) numPtGood[i] = new TH1D(Form("numPtGood_L%d", i), Form("numPtGood_L%d", i), nbPt, 0, 7.5 /* xbins*/); numPtFake[i] = new TH1D(Form("numPtFake_L%d", i), Form("numPtFake_L%d", i), nbPt, 0, 7.5 /* xbins*/); - denPhi[i] = new TH1D(Form("denPhi_L%d", i), Form("denPhi_L%d", i), 1440, -180, 180); - numPhi[i] = new TH1D(Form("numPhi_L%d", i), Form("numPhi_L%d", i), 1440, -180, 180); - numPhiGood[i] = new TH1D(Form("numPhiGood_L%d", i), Form("numPhiGood_L%d", i), 1440, -180, 180); - numPhiFake[i] = new TH1D(Form("numPhiFake_L%d", i), Form("numPhiFake_L%d", i), 1440, -180, 180); + denPhi[i] = new TH1D(Form("denPhi_L%d", i), Form("denPhi_L%d", i), 180, -3.2, 3.2); + numPhi[i] = new TH1D(Form("numPhi_L%d", i), Form("numPhi_L%d", i), 180, -3.2, 3.2); + numPhiGood[i] = new TH1D(Form("numPhiGood_L%d", i), Form("numPhiGood_L%d", i), 180, -3.2, 3.2); + numPhiFake[i] = new TH1D(Form("numPhiFake_L%d", i), Form("numPhiFake_L%d", i), 180, -3.2, 3.2); denEta[i] = new TH1D(Form("denEta_L%d", i), Form("denEta_L%d", i), 200, -2, 2); numEta[i] = new TH1D(Form("numEta_L%d", i), Form("numEta_L%d", i), 200, -2, 2); numEtaGood[i] = new TH1D(Form("numEtaGood_L%d", i), Form("numEtaGood_L%d", i), 200, -2, 2); numEtaFake[i] = new TH1D(Form("numEtaFake_L%d", i), Form("numEtaFake_L%d", i), 200, -2, 2); + denRow[i] = new TH1D(Form("denRow_L%d", i), Form("denRow_L%d", i), 128, -0.5, 511.5); + numRow[i] = new TH1D(Form("numRow_L%d", i), Form("numRow_L%d", i), 128, -0.5, 511.5); + numRowGood[i] = new TH1D(Form("numRowGood_L%d", i), Form("numRowGood_L%d", i), 128, -0.5, 511.5); + numRowFake[i] = new TH1D(Form("numRowFake_L%d", i), Form("numRowFake_L%d", i), 128, -0.5, 511.5); + + denCol[i] = new TH1D(Form("denCol_L%d", i), Form("denCol_L%d", i), 128, -0.5, 1023.5); + numCol[i] = new TH1D(Form("numCol_L%d", i), Form("numCol_L%d", i), 128, -0.5, 1023.5); + numColGood[i] = new TH1D(Form("numColGood_L%d", i), Form("numColGood_L%d", i), 128, -0.5, 1023.5); + numColFake[i] = new TH1D(Form("numColFake_L%d", i), Form("numColFake_L%d", i), 128, -0.5, 1023.5); + + denZ[i] = new TH1D(Form("denZ_L%d", i), Form("denZ_L%d", i), 150, -15, 15); + numZ[i] = new TH1D(Form("numZ_L%d", i), Form("numZ_L%d", i), 150, -15, 15); + numZGood[i] = new TH1D(Form("numZGood_L%d", i), Form("numZGood_L%d", i), 150, -15, 15); + numZFake[i] = new TH1D(Form("numZFake_L%d", i), Form("numZFake_L%d", i), 150, -15, 15); + + mDenColEta[i] = new TH2D(Form("mDenColEta_L%d", i), Form("mDenColEta_L%d", i), 128, -0.5, 1023.5, 50, -1, 1); + mNumColEta[i] = new TH2D(Form("mNumColEta_L%d", i), Form("mNumColEta_L%d", i), 128, -0.5, 1023.5, 50, -1, 1); + + mDenRowPhi[i] = new TH2D(Form("mDenRowPhi_L%d", i), Form("mDenRowPhi_L%d", i), 128, -0.5, 511.5, 180, -3.2, 3.2); + mNumRowPhi[i] = new TH2D(Form("mNumRowPhi_L%d", i), Form("mNumRowPhi_L%d", i), 128, -0.5, 511.5, 180, -3.2, 3.2); + + mDenRowCol[i] = new TH2D(Form("mDenRowCol_L%d", i), Form("mDenRowCol_L%d", i), 128, -0.5, 511.5, 128, -0.5, 1023.5); + mNumRowCol[i] = new TH2D(Form("mNumRowCol_L%d", i), Form("mNumRowCol_L%d", i), 128, -0.5, 511.5, 128, -0.5, 1023.5); + diffPhivsPt[i] = new TH2D(Form("diffPhivsPt_L%d", i), Form("diffPhivsPt_L%d", i), nbPt, 0, 7.5 /* xbins*/, 50, 0, 5); IPOriginalxy[i] = std::make_unique(Form("IPOriginalxy_L%d", i), Form("IPOriginalxy_L%d", i), 500, -0.002, 0.002); @@ -477,14 +639,38 @@ void EfficiencyStudy::init(InitContext& ic) IPOriginalifDuplicatedxy[i] = std::make_unique(Form("IPOriginalifDuplicatedxy_L%d", i), Form("IPOriginalifDuplicatedxy_L%d", i), 1000, -0.005, 0.005); IPOriginalifDuplicatedz[i] = std::make_unique(Form("IPOriginalifDuplicatedz_L%d", i), Form("IPOriginalifDuplicatedz_L%d", i), 200, -10, 10); + phiFound[i] = new TH1D(Form("phiFound_L%d", i), Form("phiFound_L%d", i), 180, -3.2, 3.2); + rowFound[i] = new TH1D(Form("rowFound_L%d", i), Form("rowFound_L%d", i), 128, -0.5, 511.5); + phiNotFound[i] = new TH1D(Form("phiNotFound_L%d", i), Form("phiNotFound_L%d", i), 180, -3.2, 3.2); + rowNotFound[i] = new TH1D(Form("rowNotFound_L%d", i), Form("rowNotFound_L%d", i), 128, -0.5, 511.5); + etaFound[i] = new TH1D(Form("etaFound_L%d", i), Form("etaFound_L%d", i), 200, -2, 2); + etaNotFound[i] = new TH1D(Form("etaNotFound_L%d", i), Form("etaNotFound_L%d", i), 200, -2, 2); + xyIPFound[i] = new TH1D(Form("xyIPFound_L%d", i), Form("xyIPFound_L%d", i), 200, -0.002, 0.002); + xyIPNotFound[i] = new TH1D(Form("xyIPNotFound_L%d", i), Form("xyIPNotFound_L%d", i), 200, -0.002, 0.002); + zIPFound[i] = new TH1D(Form("zIPFound_L%d", i), Form("xyIPFound_L%d", i), 200, -10, 10); + zIPNotFound[i] = new TH1D(Form("zIPNotFound_L%d", i), Form("zIPNotFound_L%d", i), 200, -10, 10); + zFound[i] = new TH1D(Form("zFound_L%d", i), Form("zFound_L%d", i), 150, -15, 15); + zNotFound[i] = new TH1D(Form("zNotFound%d", i), Form("zNotFound%d", i), 150, -15, 15); + colFoundOriginalVsDuplicated[i] = new TH2D(Form("colFoundOriginalVsDuplicated_L%d", i), Form("colFoundOriginalVsDuplicated_L%d; Col Original cluster; Col Overlap cluster", i), 9216, -0.5, 9215.5, 9216, -0.5, 9215.5); + colFoundOriginal[i] = new TH1D(Form("colFoundOriginal_L%d", i), Form("colFoundOriginal_L%d; Col Original cluster;", i), 9216, -0.5, 9215.5); + colNotFound[i] = new TH1D(Form("colNotFound_L%d", i), Form("colNotFound_L%d", i), 9216, -0.5, 9215.5); + radiusFound[i] = new TH1D(Form("radiusFound_L%d", i), Form("radiusFound_L%d", i), 80, 0, 4); + xFound[i] = new TH1D(Form("xFound_L%d", i), Form("xFound_L%d", i), 80, 0, 4); + yFound[i] = new TH1D(Form("yFound_L%d", i), Form("yFound_L%d", i), 80, 0, 4); + radiusNotFound[i] = new TH1D(Form("radiusNotFound_L%d", i), Form("radiusNotFound_L%d", i), 80, 0, 4); + xNotFound[i] = new TH1D(Form("xNotFound_L%d", i), Form("xNotFound_L%d", i), 80, 0, 4); + yNotFound[i] = new TH1D(Form("yNotFound_L%d", i), Form("yNotFound_L%d", i), 80, 0, 4); + + // mEfficiencyColEta[i] = new TH2D(Form("mEfficiencyColEta_L%d", i), Form("mEfficiencyColEta_L%d;Column;#eta", i), 1024, 0, 1023, 20, -1,1); + for (int j = 0; j < 3; j++) { mDuplicatedEta[i][j] = std::make_unique(Form("mDuplicatedEta_L%d_pt%d", i, j), Form("%f < #it{p}_{T} < %f GeV/c; #eta; Number of duplicated clusters L%d", mrangesPt[j][0], mrangesPt[j][1], i), 40, -2, 2); mNGoodMatchesEta[i][j] = std::make_unique(Form("mNGoodMatchesEta_L%d_pt%d", i, j), Form("%f < #it{p}_{T} < %f GeV/c; #eta; Number of good matches L%d", mrangesPt[j][0], mrangesPt[j][1], i), 40, -2, 2); mNFakeMatchesEta[i][j] = std::make_unique(Form("mNFakeMatchesEta_L%d_pt%d", i, j), Form("%f < #it{p}_{T} < %f GeV/c; #eta; Number of fake matches L%d", mrangesPt[j][0], mrangesPt[j][1], i), 40, -2, 2); - mDuplicatedPhi[i][j] = std::make_unique(Form("mDuplicatedPhi_L%d_pt%d", i, j), Form("%f < #it{p}_{T} < %f GeV/c; #phi; Number of duplicated clusters L%d", mrangesPt[j][0], mrangesPt[j][1], i), 1440, -180, 180); - mNGoodMatchesPhi[i][j] = std::make_unique(Form("mNGoodMatchesPhi_L%d_pt%d", i, j), Form("%f < #it{p}_{T} < %f GeV/c; #phi; Number of good matches L%d", mrangesPt[j][0], mrangesPt[j][1], i), 1440, -180, 180); - mNFakeMatchesPhi[i][j] = std::make_unique(Form("mNFakeMatchesPhi_L%d_pt%d", i, j), Form("%f < #it{p}_{T} < %f GeV/c; #phi; Number of fake matches L%d", mrangesPt[j][0], mrangesPt[j][1], i), 1440, -180, 180); + mDuplicatedPhi[i][j] = std::make_unique(Form("mDuplicatedPhi_L%d_pt%d", i, j), Form("%f < #it{p}_{T} < %f GeV/c; #phi; Number of duplicated clusters L%d", mrangesPt[j][0], mrangesPt[j][1], i), 180, -3.2, 3.2); + mNGoodMatchesPhi[i][j] = std::make_unique(Form("mNGoodMatchesPhi_L%d_pt%d", i, j), Form("%f < #it{p}_{T} < %f GeV/c; #phi; Number of good matches L%d", mrangesPt[j][0], mrangesPt[j][1], i), 180, -3.2, 3.2); + mNFakeMatchesPhi[i][j] = std::make_unique(Form("mNFakeMatchesPhi_L%d_pt%d", i, j), Form("%f < #it{p}_{T} < %f GeV/c; #phi; Number of fake matches L%d", mrangesPt[j][0], mrangesPt[j][1], i), 180, -3.2, 3.2); } } gStyle->SetPalette(55); @@ -508,7 +694,6 @@ void EfficiencyStudy::initialiseRun(o2::globaltracking::RecoContainer& recoData) mTracksMCLabels = recoData.getITSTracksMCLabels(); mClustersMCLCont = recoData.getITSClustersMCLabels(); } - mITSClustersArray.clear(); mTracksROFRecords = recoData.getITSTracksROFRecords(); mTracks = recoData.getITSTracks(); @@ -587,14 +772,14 @@ int EfficiencyStudy::getDCAClusterTrackMC(int countDuplicated = 0) auto pt = trackParCov.getPt(); auto eta = trackParCov.getEta(); - float phiTrack = trackParCov.getPhi() * 180 / M_PI; + float phiTrack = trackParCov.getPhi(); // * 180 / M_PI; - if (pt < mPtCuts[0] || pt > mPtCuts[1]) { - continue; - } - if (eta < mEtaCuts[0] || eta > mEtaCuts[1]) { - continue; - } + // if (pt < mPtCuts[0] || pt > mPtCuts[1]) { + // continue; + // } + // if (eta < mEtaCuts[0] || eta > mEtaCuts[1]) { + // continue; + // } float phioriginal = 0; float phiduplicated = 0; @@ -617,7 +802,7 @@ int EfficiencyStudy::getDCAClusterTrackMC(int countDuplicated = 0) o2::math_utils::Point3D clusOriginalPointTrack = {clusOriginalPoint.getX(), clusOriginalPoint.getY(), clusOriginalPoint.getZ()}; o2::math_utils::Point3D clusOriginalPointGlob = mGeometry->getMatrixT2G(clusOriginal.getSensorID()) * clusOriginalPointTrack; - phioriginal = clusOriginalPointGlob.phi() * 180 / M_PI; + phioriginal = clusOriginalPointGlob.phi();// * 180 / M_PI; mPhiTrackoriginalvsphioriginal[layer]->Fill(phiTrack, phioriginal); mPhiOriginal[layer]->Fill(phioriginal); @@ -645,7 +830,7 @@ int EfficiencyStudy::getDCAClusterTrackMC(int countDuplicated = 0) o2::math_utils::Point3D clusDuplicatedPointTrack = {clusDuplicatedPoint.getX(), clusDuplicatedPoint.getY(), clusDuplicatedPoint.getZ()}; o2::math_utils::Point3D clusDuplicatedPointGlob = mGeometry->getMatrixT2G(clusDuplicated.getSensorID()) * clusDuplicatedPointTrack; // phiduplicated = std::atan2(clusDuplicatedPointGlob.y(), clusDuplicatedPointGlob.x()) * 180 / M_PI + 180; - phiduplicated = clusDuplicatedPointGlob.phi() * 180 / M_PI; + phiduplicated = clusDuplicatedPointGlob.phi();// * 180 / M_PI; auto labsClus = mClustersMCLCont->getLabels(iClus); // ideally I can have more than one label per cluster for (auto labC : labsClus) { @@ -700,6 +885,8 @@ int EfficiencyStudy::getDCAClusterTrackMC(int countDuplicated = 0) } UShort_t rowDuplicated = clusDuplicated.getRow(); mDuplicatedRow[layerDuplicated]->Fill(rowOriginal); + mDuplicatedCol[layerDuplicated]->Fill(clusOriginal.getCol()); + mDuplicatedZ[layerDuplicated]->Fill(clusOriginalPointGlob.Z()); mDuplicatedPt[layerDuplicated]->Fill(pt); mDuplicatedPtEta[layerDuplicated]->Fill(pt, eta); mDuplicatedPtPhi[layerDuplicated]->Fill(pt, phiduplicated); @@ -838,7 +1025,7 @@ void EfficiencyStudy::countDuplicatedAfterCuts() if (pt < mPtCuts[0] || pt > mPtCuts[1]) { continue; } - if (eta < mEtaCuts[0] || eta > mEtaCuts[1]) { + if (eta < mEtaCuts[0] || eta >= mEtaCuts[1]) { continue; } @@ -860,35 +1047,46 @@ void EfficiencyStudy::countDuplicatedAfterCuts() o2::math_utils::Point3D clusOriginalPointTrack = {clusOriginalPoint.getX(), clusOriginalPoint.getY(), clusOriginalPoint.getZ()}; o2::math_utils::Point3D clusOriginalPointGlob = mGeometry->getMatrixT2G(clusOriginal.getSensorID()) * clusOriginalPointTrack; - phiOriginal = clusOriginalPointGlob.phi() * 180 / M_PI; + phiOriginal = clusOriginalPointGlob.phi();// * 180 / M_PI; - /// applying the cuts on the phi of the original cluster - bool keepTrack = false; /// wether or not a cluster is found in an eligible track in the corresponding layer + bool keepTrack = true; - if (layerOriginal == 0) { - for (int i = 0; i < 10; i++) { - if ((phiOriginal >= mPhiCutsL0[i][0] && phiOriginal <= mPhiCutsL0[i][1])) { - possibleduplicated[0]++; - keepTrack = true; - } - } - } - if (layerOriginal == 1) { - for (int i = 0; i < 12; i++) { - if ((phiOriginal >= mPhiCutsL1[i][0] && phiOriginal <= mPhiCutsL1[i][1])) { - possibleduplicated[1]++; - keepTrack = true; - } - } + if (abs(clusOriginalPointGlob.y()) < 0.5) { ///// removing gap between bottom and top barrels + keepTrack = false; + continue; } - if (layerOriginal == 2) { - for (int i = 0; i < 17; i++) { - if ((phiOriginal >= mPhiCutsL2[i][0] && phiOriginal <= mPhiCutsL2[i][1])) { - possibleduplicated[2]++; - keepTrack = true; - } - } + + if (clusOriginal.getRow() > 5 && clusOriginal.getRow() < 506) { //// trying cutting on the row + keepTrack = false; + continue; } + /// applying the cuts on the phi of the original cluster + /// wether or not a cluster is found in an eligible track in the corresponding layer + + // if (layerOriginal == 0) { + // for (int i = 0; i < 10; i++) { + // if ((phiOriginal >= mPhiCutsL0[i][0] && phiOriginal <= mPhiCutsL0[i][1])) { + // possibleduplicated[0]++; + // keepTrack = true; + // } + // } + // } + // if (layerOriginal == 1) { + // for (int i = 0; i < 12; i++) { + // if ((phiOriginal >= mPhiCutsL1[i][0] && phiOriginal <= mPhiCutsL1[i][1])) { + // possibleduplicated[1]++; + // keepTrack = true; + // } + // } + // } + // if (layerOriginal == 2) { + // for (int i = 0; i < 17; i++) { + // if ((phiOriginal >= mPhiCutsL2[i][0] && phiOriginal <= mPhiCutsL2[i][1])) { + // possibleduplicated[2]++; + // keepTrack = true; + // } + // } + // } if (!keepTrack) { continue; /// if the track (cluster) is not eligible for any layer, go to the next one @@ -912,7 +1110,7 @@ void EfficiencyStudy::countDuplicatedAfterCuts() o2::math_utils::Point3D clusDuplicatedPointTrack = {clusDuplicatedPoint.getX(), clusDuplicatedPoint.getY(), clusDuplicatedPoint.getZ()}; o2::math_utils::Point3D clusDuplicatedPointGlob = mGeometry->getMatrixT2G(clusDuplicated.getSensorID()) * clusDuplicatedPointTrack; - phi = clusDuplicatedPointGlob.phi() * 180 / M_PI; + phi = clusDuplicatedPointGlob.phi(); // * 180 / M_PI; auto labsClus = mClustersMCLCont->getLabels(iClus); // ideally I can have more than one label per cluster for (auto labC : labsClus) { @@ -1038,11 +1236,11 @@ void EfficiencyStudy::studyDCAcutsMC() if (pt < mPtCuts[0] || pt > mPtCuts[1]) { continue; } - if (eta < mEtaCuts[0] || eta > mEtaCuts[1]) { + if (eta < mEtaCuts[0] || eta >= mEtaCuts[1]) { continue; } - float phiTrack = trackParCov.getPhi() * 180 / M_PI; + float phiTrack = trackParCov.getPhi(); // * 180 / M_PI; float phi = -999.; float phiOriginal = -999.; @@ -1077,7 +1275,7 @@ void EfficiencyStudy::studyDCAcutsMC() o2::math_utils::Point3D clusOriginalPointTrack = {clusOriginalPoint.getX(), clusOriginalPoint.getY(), clusOriginalPoint.getZ()}; o2::math_utils::Point3D clusOriginalPointGlob = mGeometry->getMatrixT2G(clusOriginal.getSensorID()) * clusOriginalPointTrack; - phiOriginal = clusOriginalPointGlob.phi() * 180 / M_PI; + phiOriginal = clusOriginalPointGlob.phi(); // * 180 / M_PI; for (auto& labT : labsOriginal) { // for each valid label iterate over ALL the clusters in the ROF to see if there are duplicates if (labT != tracklab) { @@ -1114,7 +1312,7 @@ void EfficiencyStudy::studyDCAcutsMC() o2::math_utils::Point3D clusDuplicatedPointTrack = {clusDuplicatedPoint.getX(), clusDuplicatedPoint.getY(), clusDuplicatedPoint.getZ()}; o2::math_utils::Point3D clusDuplicatedPointGlob = mGeometry->getMatrixT2G(clusDuplicated.getSensorID()) * clusDuplicatedPointTrack; - phi = clusDuplicatedPointGlob.phi() * 180 / M_PI; + phi = clusDuplicatedPointGlob.phi(); // * 180 / M_PI; /// Compute the DCA between the duplicated cluster location and the track trackParCov.rotate(mGeometry->getSensorRefAlpha(clusDuplicated.getSensorID())); @@ -1392,12 +1590,12 @@ void EfficiencyStudy::studyClusterSelectionMC() auto pt = trackParCov.getPt(); auto eta = trackParCov.getEta(); - if (pt < mPtCuts[0] || pt > mPtCuts[1]) { - continue; - } - if (eta < mEtaCuts[0] || eta > mEtaCuts[1]) { - continue; - } + // if (pt < mPtCuts[0] || pt > mPtCuts[1]) { + // continue; + // } + // if (eta < mEtaCuts[0] || eta > mEtaCuts[1]) { + // continue; + // } // auto phi = trackParCov.getPhi()*180/M_PI; float phi = -999.; @@ -1426,7 +1624,7 @@ void EfficiencyStudy::studyClusterSelectionMC() o2::math_utils::Point3D clusOriginalPointTrack = {clusOriginalPoint.getX(), clusOriginalPoint.getY(), clusOriginalPoint.getZ()}; o2::math_utils::Point3D clusOriginalPointGlob = mGeometry->getMatrixT2G(clusOriginal.getSensorID()) * clusOriginalPointTrack; - auto phiOriginal = clusOriginalPointGlob.phi() * 180 / M_PI; + auto phiOriginal = clusOriginalPointGlob.phi(); // * 180 / M_PI; auto labsOriginal = mClustersMCLCont->getLabels(mInputITSidxs[iclTrack]); // get labels of the cluster associated to the track (original) auto staveOriginal = mGeometry->getStave(clusOriginal.getSensorID()); @@ -1464,7 +1662,7 @@ void EfficiencyStudy::studyClusterSelectionMC() o2::math_utils::Point3D clusDuplicatedPointTrack = {clusDuplicatedPoint.getX(), clusDuplicatedPoint.getY(), clusDuplicatedPoint.getZ()}; o2::math_utils::Point3D clusDuplicatedPointGlob = mGeometry->getMatrixT2G(clusDuplicated.getSensorID()) * clusDuplicatedPointTrack; - auto phiDuplicated = clusDuplicatedPointGlob.phi() * 180 / M_PI; + auto phiDuplicated = clusDuplicatedPointGlob.phi(); // * 180 / M_PI; /// Compute the DCA between the duplicated cluster location and the track trackParCov.rotate(mGeometry->getSensorRefAlpha(clusDuplicated.getSensorID())); @@ -1473,7 +1671,8 @@ void EfficiencyStudy::studyClusterSelectionMC() } // Imposing that the distance between the original cluster and the duplicated one is less than x sigma - if (!(abs(meanDCAxyDuplicated[layerDuplicated] - clusDuplicatedDCA[0]) < 8 * sigmaDCAxyDuplicated[layerDuplicated] && abs(meanDCAzDuplicated[layerDuplicated] - clusDuplicatedDCA[1]) < 8 * sigmaDCAzDuplicated[layerDuplicated])) { + // if (!(abs(meanDCAxyDuplicated[layerDuplicated] - clusDuplicatedDCA[0]) < 8 * sigmaDCAxyDuplicated[layerDuplicated] && abs(meanDCAzDuplicated[layerDuplicated] - clusDuplicatedDCA[1]) < 8 * sigmaDCAzDuplicated[layerDuplicated])) { + if (!(clusDuplicatedDCA[0] > mDCACutsXY[layerDuplicated][0] && clusDuplicatedDCA[0] < mDCACutsXY[layerDuplicated][1] && clusDuplicatedDCA[1] > mDCACutsZ[layerDuplicated][0] && clusDuplicatedDCA[1] < mDCACutsZ[layerDuplicated][1])) { continue; } @@ -1509,6 +1708,8 @@ void EfficiencyStudy::studyClusterSelectionMC() mNGoodMatchesPt[layerOriginal]->Fill(pt); mNGoodMatchesRow[layerOriginal]->Fill(row); + mNGoodMatchesCol[layerOriginal]->Fill(clusOriginal.getCol()); + mNGoodMatchesZ[layerOriginal]->Fill(clusOriginalPointGlob.Z()); mNGoodMatchesPtEta[layerOriginal]->Fill(pt, eta); mNGoodMatchesPtPhi[layerOriginal]->Fill(pt, phi); mNGoodMatchesEtaPhi[layerOriginal]->Fill(eta, phi); @@ -1529,6 +1730,8 @@ void EfficiencyStudy::studyClusterSelectionMC() mNFakeMatchesPt[layerOriginal]->Fill(pt); mNFakeMatchesRow[layerOriginal]->Fill(row); + mNFakeMatchesCol[layerOriginal]->Fill(clusOriginal.getCol()); + mNFakeMatchesZ[layerOriginal]->Fill(clusOriginalPointGlob.Z()); mNFakeMatchesPtEta[layerOriginal]->Fill(pt, eta); mNFakeMatchesPtPhi[layerOriginal]->Fill(pt, phi); mNFakeMatchesEtaPhi[layerOriginal]->Fill(eta, phi); @@ -1552,23 +1755,27 @@ void EfficiencyStudy::studyClusterSelectionMC() std::cout << "------Calculatin efficiency..." << std::endl; TH1D* axpt = new TH1D("axpt", "", 1, 0.05, 7.5); TH1D* axRow = new TH1D("axRow", "", 1, -0.5, 511.5); + TH1D* axCol = new TH1D("axRow", "", 1, -0.5, 1023.5); + TH1D* axZ = new TH1D("axZ", "", 1, -15, 15); TH2D* axptetaGood = new TH2D("axptetaGood", "", 1, 0.05, 7.5, 1, -2, 2); TH2D* axptetaFake = new TH2D("axptetaFake", "", 1, 0.05, 7.5, 1, -2, 2); - TH2D* axptphiGood = new TH2D("axptphiGood", "", 1, 0.05, 7.5, 1, -180, 180); - TH2D* axptphiFake = new TH2D("axptphiFake", "", 1, 0.05, 7.5, 1, -180, 180); - TH2D* axetaphiGood = new TH2D("axetaphiGood", "", 1, -2, 2, 1, -180, 180); - TH2D* axetaphiFake = new TH2D("axetaphiFake", "", 1, -2, 2, 1, -180, 180); + TH2D* axptphiGood = new TH2D("axptphiGood", "", 1, 0.05, 7.5, 1, -3.2, 3.2); + TH2D* axptphiFake = new TH2D("axptphiFake", "", 1, 0.05, 7.5, 1, -3.2, 3.2); + TH2D* axetaphiGood = new TH2D("axetaphiGood", "", 1, -2, 2, 1, -3.2, 3.2); + TH2D* axetaphiFake = new TH2D("axetaphiFake", "", 1, -2, 2, 1, -3.2, 3.2); TH1D* axetaAllPt = new TH1D("axetaAllPt", "", 1, -2, 2); TH1D* axeta[NLAYERS]; TH1D* axphi[NLAYERS]; for (int ipt = 0; ipt < 3; ipt++) { axeta[ipt] = new TH1D(Form("axeta%d", ipt), Form("axeta%d", ipt), 1, -2, 2); - axphi[ipt] = new TH1D(Form("axphi%d", ipt), Form("axphi%d", ipt), 1, -180, 180); + axphi[ipt] = new TH1D(Form("axphi%d", ipt), Form("axphi%d", ipt), 1, -3.2, 3.2); } - TH1D* axphiAllPt = new TH1D("axphi", "", 1, -180, 180); + TH1D* axphiAllPt = new TH1D("axphi", "", 1, -3.2, 3.2); TCanvas* effPt[NLAYERS]; TCanvas* effRow[NLAYERS]; + TCanvas* effCol[NLAYERS]; + TCanvas* effZ[NLAYERS]; TCanvas* effPtEta[NLAYERS][2]; TCanvas* effPtPhi[NLAYERS][2]; TCanvas* effEtaPhi[NLAYERS][2]; @@ -1667,7 +1874,7 @@ void EfficiencyStudy::studyClusterSelectionMC() axRow->SetTitle(Form("L%d;Row;Efficiency", l)); axRow->GetYaxis()->SetRangeUser(-0.1, 1.1); - axRow->GetXaxis()->SetRangeUser(0.05, 7.5); + axRow->GetXaxis()->SetRangeUser(0, 512); axRow->Draw(); mEffRowGood[l]->Draw("same p"); mEffRowFake[l]->Draw("same p"); @@ -1678,6 +1885,75 @@ void EfficiencyStudy::studyClusterSelectionMC() legRow->Draw("same"); effRow[l]->Write(); + + // Col + effCol[l] = new TCanvas(Form("effCol_L%d", l)); + + for (int ibin = 1; ibin <= mNGoodMatchesCol[l]->GetNbinsX(); ibin++) { + std::cout << "--- Good Col: Npass = " << mNGoodMatchesCol[l]->GetBinContent(ibin) << ", Nall = " << mDuplicatedCol[l]->GetBinContent(ibin) << " for ibin = " << ibin << std::endl; + } + + mEffColGood[l] = std::make_unique(*mNGoodMatchesCol[l], *mDuplicatedCol[l]); + stileEfficiencyGraph(mEffColGood[l], Form("mEffColGood_L%d", l), Form("L%d;Col;Efficiency", l), false, kFullDiamond, 1, kGreen + 3, kGreen + 3); + + for (int ibin = 1; ibin <= mNFakeMatchesCol[l]->GetNbinsX(); ibin++) { + if (mNFakeMatchesCol[l]->GetBinContent(ibin) > mDuplicatedCol[l]->GetBinContent(ibin)) { + std::cout << "--- Col: Npass = " << mNFakeMatchesCol[l]->GetBinContent(ibin) << ", Nall = " << mDuplicatedCol[l]->GetBinContent(ibin) << " for ibin = " << ibin << std::endl; + mNFakeMatchesCol[l]->SetBinContent(ibin, mDuplicatedCol[l]->GetBinContent(ibin)); + } + } + mEffColFake[l] = std::make_unique(*mNFakeMatchesCol[l], *mDuplicatedCol[l]); + stileEfficiencyGraph(mEffColFake[l], Form("mEffColFake_L%d", l), Form("L%d;Col;Efficiency", l), false, kFullDiamond, 1, kRed + 1, kRed + 1); + + axCol->SetTitle(Form("L%d;Col;Efficiency", l)); + axCol->GetYaxis()->SetRangeUser(-0.1, 1.1); + axCol->GetXaxis()->SetRangeUser(0, 1024); + axCol->Draw(); + mEffColGood[l]->Draw("same p"); + mEffColFake[l]->Draw("same p"); + + auto legCol = std::make_unique(0.70, 0.15, 0.89, 0.35); + legCol->AddEntry(mEffColGood[l].get(), "#frac{# good matches}{# tot duplicated clusters}", "pl"); + legCol->AddEntry(mEffColFake[l].get(), "#frac{# fake matches}{# tot duplicated clusters}", "pl"); + legCol->Draw("same"); + effCol[l]->Write(); + + + // Z + effZ[l] = new TCanvas(Form("effZ_L%d", l)); + + for (int ibin = 1; ibin <= mNGoodMatchesZ[l]->GetNbinsX(); ibin++) { + std::cout << "--- Good Z: Npass = " << mNGoodMatchesZ[l]->GetBinContent(ibin) << ", Nall = " << mDuplicatedZ[l]->GetBinContent(ibin) << " for ibin = " << ibin << std::endl; + } + + mEffZGood[l] = std::make_unique(*mNGoodMatchesZ[l], *mDuplicatedZ[l]); + stileEfficiencyGraph(mEffZGood[l], Form("mEffZGood_L%d", l), Form("L%d;Z;Efficiency", l), false, kFullDiamond, 1, kGreen + 3, kGreen + 3); + + for (int ibin = 1; ibin <= mNFakeMatchesZ[l]->GetNbinsX(); ibin++) { + if (mNFakeMatchesZ[l]->GetBinContent(ibin) > mDuplicatedZ[l]->GetBinContent(ibin)) { + std::cout << "--- Z: Npass = " << mNFakeMatchesZ[l]->GetBinContent(ibin) << ", Nall = " << mDuplicatedZ[l]->GetBinContent(ibin) << " for ibin = " << ibin << std::endl; + mNFakeMatchesZ[l]->SetBinContent(ibin, mDuplicatedZ[l]->GetBinContent(ibin)); + } + } + mEffZFake[l] = std::make_unique(*mNFakeMatchesZ[l], *mDuplicatedZ[l]); + stileEfficiencyGraph(mEffZFake[l], Form("mEffZFake_L%d", l), Form("L%d;Z;Efficiency", l), false, kFullDiamond, 1, kRed + 1, kRed + 1); + + axZ->SetTitle(Form("L%d;Z;Efficiency", l)); + axZ->GetYaxis()->SetRangeUser(-0.1, 1.1); + axZ->GetXaxis()->SetRangeUser(0, 512); + axZ->Draw(); + mEffZGood[l]->Draw("same p"); + mEffZFake[l]->Draw("same p"); + + auto legZ = std::make_unique(0.70, 0.15, 0.89, 0.35); + legZ->AddEntry(mEffZGood[l].get(), "#frac{# good matches}{# tot duplicated clusters}", "pl"); + legZ->AddEntry(mEffZFake[l].get(), "#frac{# fake matches}{# tot duplicated clusters}", "pl"); + legZ->Draw("same"); + effZ[l]->Write(); + + + + // PtEtaGood effPtEta[l][0] = new TCanvas(Form("effPtEtaGood_L%d", l)); @@ -1727,11 +2003,11 @@ void EfficiencyStudy::studyClusterSelectionMC() effPtPhi[l][0] = new TCanvas(Form("effPtPhiGood_L%d", l)); mEffPtPhiGood[l] = std::make_unique(*mNGoodMatchesPtPhi[l], *mDuplicatedPtPhi[l]); - stileEfficiencyGraph(mEffPtPhiGood[l], Form("mEffPtPhiGood_L%d", l), Form("L%d;#it{p}_{T} (GeV/#it{c});#phi (deg);Efficiency", l), true); + stileEfficiencyGraph(mEffPtPhiGood[l], Form("mEffPtPhiGood_L%d", l), Form("L%d;#it{p}_{T} (GeV/#it{c});#phi (rad);Efficiency", l), true); - axptphiGood->SetTitle(Form("L%d;#it{p}_{T} (GeV/#it{c});#phi (deg);Efficiency", l)); + axptphiGood->SetTitle(Form("L%d;#it{p}_{T} (GeV/#it{c});#phi (rad);Efficiency", l)); axptphiGood->GetZaxis()->SetRangeUser(-0.1, 1.1); - axptphiGood->GetYaxis()->SetRangeUser(-180, 180); + axptphiGood->GetYaxis()->SetRangeUser(-3.2, 3.2); axptphiGood->GetXaxis()->SetRangeUser(0.05, 7.5); axptphiGood->Draw(); mEffPtPhiGood[l]->Draw("same colz"); @@ -1753,10 +2029,10 @@ void EfficiencyStudy::studyClusterSelectionMC() effPtPhi[l][1] = new TCanvas(Form("effPtPhiFake_L%d", l)); mEffPtPhiFake[l] = std::make_unique(*mNFakeMatchesPtPhi[l], *mDuplicatedPtPhi[l]); - stileEfficiencyGraph(mEffPtPhiFake[l], Form("mEffPtPhiFake_L%d", l), Form("L%d;#it{p}_{T} (GeV/#it{c});#phi (deg);Efficiency", l), true); - axptphiFake->SetTitle(Form("L%d;#it{p}_{T} (GeV/#it{c});#phi (deg);Efficiency", l)); + stileEfficiencyGraph(mEffPtPhiFake[l], Form("mEffPtPhiFake_L%d", l), Form("L%d;#it{p}_{T} (GeV/#it{c});#phi (rad);Efficiency", l), true); + axptphiFake->SetTitle(Form("L%d;#it{p}_{T} (GeV/#it{c});#phi (rad);Efficiency", l)); axptphiFake->GetZaxis()->SetRangeUser(-0.1, 1.1); - axptphiFake->GetYaxis()->SetRangeUser(-180, 180); + axptphiFake->GetYaxis()->SetRangeUser(-3.2, 3.2); axptphiFake->GetXaxis()->SetRangeUser(0.05, 7.5); axptphiFake->Draw(); mEffPtPhiFake[l]->Draw("same colz"); @@ -1767,11 +2043,11 @@ void EfficiencyStudy::studyClusterSelectionMC() effEtaPhi[l][0] = new TCanvas(Form("effEtaPhiGood_L%d", l)); mEffEtaPhiGood[l] = std::make_unique(*mNGoodMatchesEtaPhi[l], *mDuplicatedEtaPhi[l]); - stileEfficiencyGraph(mEffEtaPhiGood[l], Form("mEffEtaPhiGood_L%d", l), Form("L%d;#eta;#phi (deg);Efficiency", l), true); + stileEfficiencyGraph(mEffEtaPhiGood[l], Form("mEffEtaPhiGood_L%d", l), Form("L%d;#eta;#phi (rad);Efficiency", l), true); - axetaphiGood->SetTitle(Form("L%d;#eta;#phi (deg);Efficiency", l)); + axetaphiGood->SetTitle(Form("L%d;#eta;#phi (rad);Efficiency", l)); axetaphiGood->GetZaxis()->SetRangeUser(-0.1, 1.1); - axetaphiGood->GetYaxis()->SetRangeUser(-180, 180); + axetaphiGood->GetYaxis()->SetRangeUser(-3.2, 3.2); axetaphiGood->GetXaxis()->SetRangeUser(-2, 2); axetaphiGood->Draw(); mEffEtaPhiGood[l]->Draw("same colz"); @@ -1793,10 +2069,10 @@ void EfficiencyStudy::studyClusterSelectionMC() effEtaPhi[l][1] = new TCanvas(Form("effEtaPhiFake_L%d", l)); mEffEtaPhiFake[l] = std::make_unique(*mNFakeMatchesEtaPhi[l], *mDuplicatedEtaPhi[l]); - stileEfficiencyGraph(mEffEtaPhiFake[l], Form("mEffEtaPhiFake_L%d", l), Form("L%d;#eta;#phi (deg);Efficiency", l), true); - axetaphiFake->SetTitle(Form("L%d;#eta;#phi (deg);Efficiency", l)); + stileEfficiencyGraph(mEffEtaPhiFake[l], Form("mEffEtaPhiFake_L%d", l), Form("L%d;#eta;#phi (rad);Efficiency", l), true); + axetaphiFake->SetTitle(Form("L%d;#eta;#phi (rad);Efficiency", l)); axetaphiFake->GetZaxis()->SetRangeUser(-0.1, 1.1); - axetaphiFake->GetYaxis()->SetRangeUser(-180, 180); + axetaphiFake->GetYaxis()->SetRangeUser(-3.2, 3.2); axetaphiFake->GetXaxis()->SetRangeUser(-2, 2); axetaphiFake->Draw(); mEffEtaPhiFake[l]->Draw("same colz"); @@ -1883,7 +2159,7 @@ void EfficiencyStudy::studyClusterSelectionMC() } mEffPhiGood[l][ipt] = std::make_unique(*mNGoodMatchesPhi[l][ipt], *mDuplicatedPhi[l][ipt]); - stileEfficiencyGraph(mEffPhiGood[l][ipt], Form("mEffPhiGood_L%d_pt%d", l, ipt), Form("L%d %.1f #leq #it{p}_{T} < %.1f GeV/#it{c};#phi (deg);Efficiency", l, mrangesPt[ipt][0], mrangesPt[ipt][1]), false, kFullDiamond, 1, kGreen + 3, kGreen + 3); + stileEfficiencyGraph(mEffPhiGood[l][ipt], Form("mEffPhiGood_L%d_pt%d", l, ipt), Form("L%d %.1f #leq #it{p}_{T} < %.1f GeV/#it{c};#phi (rad);Efficiency", l, mrangesPt[ipt][0], mrangesPt[ipt][1]), false, kFullDiamond, 1, kGreen + 3, kGreen + 3); for (int ibin = 1; ibin <= mNFakeMatchesPhi[l][ipt]->GetNbinsX(); ibin++) { if (mNFakeMatchesPhi[l][ipt]->GetBinContent(ibin) > mDuplicatedPhi[l][ipt]->GetBinContent(ibin)) { @@ -1895,9 +2171,9 @@ void EfficiencyStudy::studyClusterSelectionMC() } mEffPhiFake[l][ipt] = std::make_unique(*mNFakeMatchesPhi[l][ipt], *mDuplicatedPhi[l][ipt]); - stileEfficiencyGraph(mEffPhiFake[l][ipt], Form("mEffPhiFake_L%d_pt%d", l, ipt), Form("L%d %.1f #leq #it{p}_{T} < %.1f GeV/#it{c};#phi (deg);Efficiency", l, mrangesPt[ipt][0], mrangesPt[ipt][1]), false, kFullDiamond, 1, kRed + 1, kRed + 1); + stileEfficiencyGraph(mEffPhiFake[l][ipt], Form("mEffPhiFake_L%d_pt%d", l, ipt), Form("L%d %.1f #leq #it{p}_{T} < %.1f GeV/#it{c};#phi (rad);Efficiency", l, mrangesPt[ipt][0], mrangesPt[ipt][1]), false, kFullDiamond, 1, kRed + 1, kRed + 1); - axphi[ipt]->SetTitle(Form("L%d %.1f #leq #it{p}_{T} < %.1f GeV/#it{c};#phi (deg);Efficiency", l, mrangesPt[ipt][0], mrangesPt[ipt][1])); + axphi[ipt]->SetTitle(Form("L%d %.1f #leq #it{p}_{T} < %.1f GeV/#it{c};#phi (rad);Efficiency", l, mrangesPt[ipt][0], mrangesPt[ipt][1])); axphi[ipt]->GetYaxis()->SetRangeUser(-0.1, 1.1); axphi[ipt]->Draw(); @@ -1953,6 +2229,170 @@ void EfficiencyStudy::studyClusterSelectionMC() legPhi->Draw("same"); effPhiAllPt[l]->Write(); } + + + /// all Row + TCanvas* effRowAll = new TCanvas("effRowAll"); + TH1D* numRowGoodAll = (TH1D*)mNGoodMatchesRow[0]->Clone("numRowGoodAll"); + numRowGoodAll->Add(mNGoodMatchesRow[1]); + numRowGoodAll->Add(mNGoodMatchesRow[2]); + numRowGoodAll->Write(); + TH1D* numRowFakeAll = (TH1D*)mNFakeMatchesRow[0]->Clone("numRowFakeAll"); + numRowFakeAll->Add(mNFakeMatchesRow[1]); + numRowFakeAll->Add(mNFakeMatchesRow[2]); + numRowFakeAll->Write(); + TH1D* denRowAll = (TH1D*)mDuplicatedRow[0]->Clone("denRowAll"); + denRowAll->Add(mDuplicatedRow[1]); + denRowAll->Add(mDuplicatedRow[2]); + denRowAll->Write(); + + std::unique_ptr mEffRowGoodAll = std::make_unique(*numRowGoodAll, *denRowAll); + stileEfficiencyGraph(mEffRowGoodAll, "mEffRowGoodAll","L0 + L1 + L2;Row;Efficiency", false, kFullDiamond, 1, kGreen +3, kGreen +3); + std::unique_ptr mEffRowFakeAll = std::make_unique(*numRowFakeAll, *denRowAll); + stileEfficiencyGraph(mEffRowFakeAll, "mEffRowFakeAll","L0 + L1 + L2;Row;Efficiency", false, kFullDiamond, 1, kRed + 1, kRed + 1); + axRow->SetTitle("L0 + L1 + L2;Row;Efficiency"); + axRow->GetYaxis()->SetRangeUser(-0.1, 1.1); + axRow->Draw(); + mEffRowGoodAll->Draw("same p"); + mEffRowFakeAll->Draw("same p"); + + auto legRow = std::make_unique(0.70, 0.15, 0.89, 0.35); + legRow->AddEntry(mEffRowGoodAll.get(), "#frac{# good matches}{# tot duplicated clusters}", "pl"); + legRow->AddEntry(mEffRowFakeAll.get(), "#frac{# fake matches}{# tot duplicated clusters}", "pl"); + legRow->Draw("same"); + effRowAll->Write(); + + + /// all Col + TCanvas* effColAll = new TCanvas("effColAll"); + TH1D* numColGoodAll = (TH1D*)mNGoodMatchesCol[0]->Clone("numColGoodAll"); + numColGoodAll->Add(mNGoodMatchesCol[1]); + numColGoodAll->Add(mNGoodMatchesCol[2]); + numColGoodAll->Write(); + TH1D* numColFakeAll = (TH1D*)mNFakeMatchesCol[0]->Clone("numColFakeAll"); + numColFakeAll->Add(mNFakeMatchesCol[1]); + numColFakeAll->Add(mNFakeMatchesCol[2]); + numColFakeAll->Write(); + TH1D* denColAll = (TH1D*)mDuplicatedCol[0]->Clone("denColAll"); + denColAll->Add(mDuplicatedCol[1]); + denColAll->Add(mDuplicatedCol[2]); + denColAll->Write(); + + std::unique_ptr mEffColGoodAll = std::make_unique(*numColGoodAll, *denColAll); + stileEfficiencyGraph(mEffColGoodAll, "mEffColGoodAll","L0 + L1 + L2;Column;Efficiency", false, kFullDiamond, 1, kGreen +3, kGreen +3); + std::unique_ptr mEffColFakeAll = std::make_unique(*numColFakeAll, *denColAll); + stileEfficiencyGraph(mEffColFakeAll, "mEffColFakeAll","L0 + L1 + L2;Column;Efficiency", false, kFullDiamond, 1, kRed + 1, kRed + 1); + axCol->SetTitle("L0 + L1 + L2;Col;Efficiency"); + axCol->GetYaxis()->SetRangeUser(-0.1, 1.1); + axCol->Draw(); + mEffColGoodAll->Draw("same p"); + mEffColFakeAll->Draw("same p"); + + auto legCol = std::make_unique(0.70, 0.15, 0.89, 0.35); + legCol->AddEntry(mEffColGoodAll.get(), "#frac{# good matches}{# tot duplicated clusters}", "pl"); + legCol->AddEntry(mEffColFakeAll.get(), "#frac{# fake matches}{# tot duplicated clusters}", "pl"); + legCol->Draw("same"); + effColAll->Write(); + + + /// all Z + TCanvas* effZAll = new TCanvas("effZAll"); + TH1D* numZGoodAll = (TH1D*)mNGoodMatchesZ[0]->Clone("numZGoodAll"); + numZGoodAll->Add(mNGoodMatchesZ[1]); + numZGoodAll->Add(mNGoodMatchesZ[2]); + numZGoodAll->Write(); + TH1D* numZFakeAll = (TH1D*)mNFakeMatchesZ[0]->Clone("numZFakeAll"); + numZFakeAll->Add(mNFakeMatchesZ[1]); + numZFakeAll->Add(mNFakeMatchesZ[2]); + numZFakeAll->Write(); + TH1D* denZAll = (TH1D*)mDuplicatedZ[0]->Clone("denZAll"); + denZAll->Add(mDuplicatedZ[1]); + denZAll->Add(mDuplicatedZ[2]); + denZAll->Write(); + + std::unique_ptr mEffZGoodAll = std::make_unique(*numZGoodAll, *denZAll); + stileEfficiencyGraph(mEffZGoodAll, "mEffZGoodAll","L0 + L1 + L2;Z;Efficiency", false, kFullDiamond, 1, kGreen+ 3, kGreen + 3); + std::unique_ptr mEffZFakeAll = std::make_unique(*numZFakeAll, *denZAll); + stileEfficiencyGraph(mEffZFakeAll, "mEffZFakeAll","L0 + L1 + L2;Z;Efficiency", false, kFullDiamond, 1, kRed + 1, kRed + 1); + axZ->SetTitle("L0 + L1 + L2;Z;Efficiency"); + axZ->GetYaxis()->SetRangeUser(-0.1, 1.1); + axZ->Draw(); + mEffZGoodAll->Draw("same p"); + mEffZFakeAll->Draw("same p"); + + auto legZ = std::make_unique(0.70, 0.15, 0.89, 0.35); + legZ->AddEntry(mEffZGoodAll.get(), "#frac{# good matches}{# tot duplicated clusters}", "pl"); + legZ->AddEntry(mEffZFakeAll.get(), "#frac{# fake matches}{# tot duplicated clusters}", "pl"); + legZ->Draw("same"); + effZAll->Write(); + + + /// all Eta + TCanvas* effEtaAll = new TCanvas("effEtaAll"); + TH1D* numEtaGoodAll = (TH1D*)mNGoodMatchesEtaAllPt[0]->Clone("numEtaGoodAll"); + numEtaGoodAll->Add(mNGoodMatchesEtaAllPt[1].get()); + numEtaGoodAll->Add(mNGoodMatchesEtaAllPt[2].get()); + numEtaGoodAll->Write(); + TH1D* numEtaFakeAll = (TH1D*)mNFakeMatchesEtaAllPt[0]->Clone("numEtaFakeAll"); + numEtaFakeAll->Add(mNFakeMatchesEtaAllPt[1].get()); + numEtaFakeAll->Add(mNFakeMatchesEtaAllPt[2].get()); + numEtaFakeAll->Write(); + TH1D* denEtaAll = (TH1D*)mDuplicatedEtaAllPt[0]->Clone("denEtaAll"); + denEtaAll->Add(mDuplicatedEtaAllPt[1].get()); + denEtaAll->Add(mDuplicatedEtaAllPt[2].get()); + denEtaAll->Write(); + + std::unique_ptr mEffEtaGoodAll = std::make_unique(*numEtaGoodAll, *denEtaAll); + stileEfficiencyGraph(mEffEtaGoodAll, "mEffEtaGoodAll","L0 + L1 + L2;#Eta;Efficiency", false, kFullDiamond, 1, kGreen + 3 , kGreen + 3); + std::unique_ptr mEffEtaFakeAll = std::make_unique(*numEtaFakeAll, *denEtaAll); + stileEfficiencyGraph(mEffEtaFakeAll, "mEffEtaFakeAll","L0 + L1 + L2;#Eta;Efficiency", false, kFullDiamond, 1, kRed + 1, kRed + 1); axetaAllPt->SetTitle("L0 + L1 + L2;Eta;Efficiency"); + axetaAllPt->GetYaxis()->SetRangeUser(-0.1, 1.1); + axetaAllPt->Draw(); + mEffEtaGoodAll->Draw("same p"); + mEffEtaFakeAll->Draw("same p"); + + auto legEta = std::make_unique(0.70, 0.15, 0.89, 0.35); + legEta->AddEntry(mEffEtaGoodAll.get(), "#frac{# good matches}{# tot duplicated clusters}", "pl"); + legEta->AddEntry(mEffEtaFakeAll.get(), "#frac{# fake matches}{# tot duplicated clusters}", "pl"); + legEta->Draw("same"); + effEtaAll->Write(); + + + + /// all Phi + TCanvas* effPhiAll = new TCanvas("effPhiAll"); + TH1D* numPhiGoodAll = (TH1D*)mNGoodMatchesPhiAllPt[0]->Clone("numPhiGoodAll"); + numPhiGoodAll->Add(mNGoodMatchesPhiAllPt[1].get()); + numPhiGoodAll->Add(mNGoodMatchesPhiAllPt[2].get()); + numPhiGoodAll->Write(); + TH1D* numPhiFakeAll = (TH1D*)mNFakeMatchesPhiAllPt[0]->Clone("numPhiFakeAll"); + numPhiFakeAll->Add(mNFakeMatchesPhiAllPt[1].get()); + numPhiFakeAll->Add(mNFakeMatchesPhiAllPt[2].get()); + numPhiFakeAll->Write(); + TH1D* denPhiAll = (TH1D*)mDuplicatedPhiAllPt[0]->Clone("denPhiAll"); + denPhiAll->Add(mDuplicatedPhiAllPt[1].get()); + denPhiAll->Add(mDuplicatedPhiAllPt[2].get()); + denPhiAll->Write(); + + std::unique_ptr mEffPhiGoodAll = std::make_unique(*numPhiGoodAll, *denPhiAll); + stileEfficiencyGraph(mEffPhiGoodAll, "mEffPhiGoodAll","L0 + L1 + L2;#Phi (rad);Efficiency", false, kFullDiamond, 1, kGreen + 3, kGreen + 3); + std::unique_ptr mEffPhiFakeAll = std::make_unique(*numPhiFakeAll, *denPhiAll); + stileEfficiencyGraph(mEffPhiFakeAll, "mEffPhiFakeAll","L0 + L1 + L2;#Phi (rad);Efficiency", false, kFullDiamond, 1, kRed + 1, kRed + 1); + axphiAllPt->SetTitle("L0 + L1 + L2;Phi;Efficiency"); + axphiAllPt->GetYaxis()->SetRangeUser(-0.1, 1.1); + axphiAllPt->Draw(); + mEffPhiGoodAll->Draw("same p"); + mEffPhiFakeAll->Draw("same p"); + + auto legPhi = std::make_unique(0.70, 0.15, 0.89, 0.35); + legPhi->AddEntry(mEffPhiGoodAll.get(), "#frac{# good matches}{# tot duplicated clusters}", "pl"); + legPhi->AddEntry(mEffPhiFakeAll.get(), "#frac{# fake matches}{# tot duplicated clusters}", "pl"); + legPhi->Draw("same"); + effPhiAll->Write(); + + + // TCanvas* effZAll = new TCanvas("effZAll"); + } void EfficiencyStudy::saveDataInfo() @@ -1988,7 +2428,7 @@ void EfficiencyStudy::saveDataInfo() auto pt = trackParCov.getPt(); auto eta = trackParCov.getEta(); - float phiTrack = trackParCov.getPhi() * 180 / M_PI; + float phiTrack = trackParCov.getPhi(); // * 180 / M_PI; // if (pt < mPtCuts[0] || pt > mPtCuts[1]) continue; // if (eta < mEtaCuts[0] || eta > mEtaCuts[1]) continue; @@ -2010,7 +2450,7 @@ void EfficiencyStudy::saveDataInfo() o2::math_utils::Point3D clusOriginalPointTrack = {clusOriginalPoint.getX(), clusOriginalPoint.getY(), clusOriginalPoint.getZ()}; o2::math_utils::Point3D clusOriginalPointGlob = mGeometry->getMatrixT2G(clusOriginal.getSensorID()) * clusOriginalPointTrack; - phioriginal = clusOriginalPointGlob.phi() * 180 / M_PI; + phioriginal = clusOriginalPointGlob.phi(); // * 180 / M_PI; mPhiOriginal[layer]->Fill(phioriginal); mPhiTrackOriginal[layer]->Fill(phiTrack); @@ -2078,18 +2518,18 @@ void EfficiencyStudy::getEfficiency(bool isMC) float ip[2]; track.getImpactParams(0, 0, 0, 0, ip); - float phiTrack = trackParCov.getPhi() * 180 / M_PI; + float phiTrack = trackParCov.getPhi(); // * 180 / M_PI; // applying the cuts on the track - only pt and eta, and chi2 cuts since for phi(cluster) the layer is needed - if (pt < mPtCuts[0] || pt > mPtCuts[1]) { - continue; - } - if (eta < mEtaCuts[0] || eta > mEtaCuts[1]) { - continue; - } - if (chi2 > mChi2cut) { + // if (pt < mPtCuts[0] || pt > mPtCuts[1]) { + // continue; + // } + if (eta < mEtaCuts[0] || eta >= mEtaCuts[1]) { continue; } + // if (chi2 > mChi2cut) { + // continue; + // } /// the cut on phi, since it is layer-dependent, can be applied only after finding the cluster and then the layer @@ -2120,51 +2560,141 @@ void EfficiencyStudy::getEfficiency(bool isMC) UShort_t rowOriginal = clusOriginal.getRow(); + + if (clusOriginal.getChipID()>=0 && clusOriginal.getChipID() <= 8) { + l0_00->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); + } + if (clusOriginal.getChipID()>=9 && clusOriginal.getChipID() <= 17) { + l0_01->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); + } + if (clusOriginal.getChipID()>=18 && clusOriginal.getChipID() <= 26) { + l0_02->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); + } + if (clusOriginal.getChipID()>=27 && clusOriginal.getChipID() <= 35) { + l0_03->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); + } + if (clusOriginal.getChipID()>=36 && clusOriginal.getChipID() <= 44) { + l0_04->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); + } + if (clusOriginal.getChipID()>=45 && clusOriginal.getChipID() <= 53) { + l0_05->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); + } + if (clusOriginal.getChipID()>=54 && clusOriginal.getChipID() <= 62) { + l0_06->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); + } + if (clusOriginal.getChipID()>=63 && clusOriginal.getChipID() <= 71) { + l0_07->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); + } + if (clusOriginal.getChipID()>=72 && clusOriginal.getChipID() <= 80) { + l0_08->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); + } + if (clusOriginal.getChipID()>=81 && clusOriginal.getChipID() <= 89) { + l0_09->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); + } + if (clusOriginal.getChipID()>=90 && clusOriginal.getChipID() <= 98) { + l0_10->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); + } + if (clusOriginal.getChipID()>=99 && clusOriginal.getChipID() <= 107) { + l0_11->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); + } + if (clusOriginal.getChipID()>=252 && clusOriginal.getChipID() <= 260) { + l1_15->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); + } + if (clusOriginal.getChipID()>=261 && clusOriginal.getChipID() <= 269) { + l2_00->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); + } + if (clusOriginal.getChipID()>=270 && clusOriginal.getChipID() <= 278) { + l2_01->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); + } + if (clusOriginal.getChipID()>=279 && clusOriginal.getChipID() <= 287) { + l2_02->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); + } + if (clusOriginal.getChipID()>=414 && clusOriginal.getChipID() <= 422) { + l2_15->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); + } + if (clusOriginal.getChipID()>=423 && clusOriginal.getChipID() <= 431) { + l2_19->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); + } + if (layerOriginal >= NLAYERS) { continue; } + chipmap->Fill(clusOriginal.getCol(),clusOriginal.getRow()); + IPOriginalxy[layerOriginal]->Fill(ip[0]); IPOriginalz[layerOriginal]->Fill(ip[1]); o2::math_utils::Point3D clusOriginalPointTrack = {clusOriginalPoint.getX(), clusOriginalPoint.getY(), clusOriginalPoint.getZ()}; o2::math_utils::Point3D clusOriginalPointGlob = mGeometry->getMatrixT2G(clusOriginal.getSensorID()) * clusOriginalPointTrack; // phiOriginal = std::(clusOriginalPointGlob.y(), clusOriginalPointGlob.x()) * 180 / M_PI + 180; - phiOriginal = clusOriginalPointGlob.phi() * 180 / M_PI; + phiOriginal = clusOriginalPointGlob.phi();// * 180 / M_PI; - mXoriginal->Fill(clusOriginalPointGlob.x()); - mYoriginal->Fill(clusOriginalPointGlob.y()); - mZoriginal->Fill(clusOriginalPointGlob.z()); + // mXoriginal->Fill(clusOriginalPointGlob.x()); + // mYoriginal->Fill(clusOriginalPointGlob.y()); + // mZoriginal->Fill(clusOriginalPointGlob.z()); - // std::cout<<" Layer: "<Fill(clusOriginalPointGlob.x(), clusOriginalPointGlob.y()); - m3DClusterPositions->Fill(clusOriginalPointGlob.x(), clusOriginalPointGlob.y(), clusOriginalPointGlob.z()); + bool keepTrack = true; /// wether or not a cluster is found in an eligible track in the corresponding layer - /// applying the cuts on the phi of the original cluster - bool keepTrack = false; /// wether or not a cluster is found in an eligible track in the corresponding layer - if (layerOriginal == 0) { - for (int i = 0; i < 10; i++) { - if ((phiOriginal >= mPhiCutsL0[i][0] && phiOriginal <= mPhiCutsL0[i][1])) { - keepTrack = true; - } - } + if (abs(clusOriginalPointGlob.y()) < 0.5) { ///// removing gap between bottom and top barrels + keepTrack = false; + continue; + } + + if (abs(clusOriginalPointGlob.z()) >= 10) { ///// removing gap between bottom and top barrels + keepTrack = false; + continue; } - if (layerOriginal == 1) { - for (int i = 0; i < 12; i++) { - if ((phiOriginal >= mPhiCutsL1[i][0] && phiOriginal <= mPhiCutsL1[i][1])) { - keepTrack = true; - } - } + + if (rowOriginal <2 || (rowOriginal > 15 && rowOriginal < 496) || rowOriginal>509) { //// cutting on the row + keepTrack = false; + continue; } - if (layerOriginal == 2) { - for (int i = 0; i < 17; i++) { - if ((phiOriginal >= mPhiCutsL2[i][0] && phiOriginal <= mPhiCutsL2[i][1])) { - keepTrack = true; - } + + + if (mUseMC){ + if (std::find(mExcludedChipMC->begin(), mExcludedChipMC->end(), clusOriginal.getChipID()) != mExcludedChipMC->end()) { + continue; } } + + if (clusOriginal.getCol() <160 || clusOriginal.getCol() >870){ + continue; + } + + + + // std::cout<<" Layer: "<Fill(clusOriginalPointGlob.x(), clusOriginalPointGlob.y()); + m3DClusterPositions->Fill(clusOriginalPointGlob.x(), clusOriginalPointGlob.y(), clusOriginalPointGlob.z()); + + /// applying the cuts on the phi of the original cluster + // bool keepTrack = true; /// wether or not a cluster is found in an eligible track in the corresponding layer + // if (layerOriginal == 0) { + + // for (int i = 0; i < 10; i++) { + // if ((phiOriginal >= mPhiCutsL0[i][0] && phiOriginal <= mPhiCutsL0[i][1])) { + // keepTrack = true; + // } + // } + // } + // if (layerOriginal == 1) { + // for (int i = 0; i < 12; i++) { + // if ((phiOriginal >= mPhiCutsL1[i][0] && phiOriginal <= mPhiCutsL1[i][1])) { + // keepTrack = true; + // } + // } + // } + // if (layerOriginal == 2) { + // for (int i = 0; i < 17; i++) { + // if ((phiOriginal >= mPhiCutsL2[i][0] && phiOriginal <= mPhiCutsL2[i][1])) { + // keepTrack = true; + // } + // } + // } ///////////////////////////////////// if (!(keepTrack)) { @@ -2174,7 +2704,14 @@ void EfficiencyStudy::getEfficiency(bool isMC) denPt[layerOriginal]->Fill(pt); denPhi[layerOriginal]->Fill(phiOriginal); denEta[layerOriginal]->Fill(eta); + denRow[layerOriginal]->Fill(rowOriginal); + denCol[layerOriginal]->Fill(clusOriginal.getCol()); + denZ[layerOriginal]->Fill(clusOriginalPointGlob.z()); nTracksSelected[layerOriginal]++; + mDenColEta[layerOriginal]->Fill(clusOriginal.getCol(), eta); + mDenRowPhi[layerOriginal]->Fill(clusOriginal.getRow(), clusOriginalPointGlob.z()); + mDenRowCol[layerOriginal]->Fill(clusOriginal.getRow(), clusOriginal.getCol()); + denLayers->Fill(layerOriginal); } /// if the cuts up to here are passed, then search for the duplicated cluster, otherwise go to the next cluster @@ -2193,6 +2730,8 @@ void EfficiencyStudy::getEfficiency(bool isMC) float ptDuplicated = -999.; float etaDuplicated = -999.; float clusZ = -999.; + + o2::itsmft::CompClusterExt clusDuplicatedSelected = o2::itsmft::CompClusterExt(); /// for each original cluster iterate over all the possible duplicated clusters to see first wether increment or not the denominator (if a track has a possible duplicated cluster in the selected phi region) /// then if the phi is within the cuts, select the "adjacent" clusters (stave +-1, chip =,+-1) and calculate the DCA with the track. Then choose the closest one. // std::cout<<"Loop on clusters 2"< clusDuplicatedPointTrack = {clusDuplicatedPoint.getX(), clusDuplicatedPoint.getY(), clusDuplicatedPoint.getZ()}; o2::math_utils::Point3D clusDuplicatedPointGlob = mGeometry->getMatrixT2G(clusDuplicated.getSensorID()) * clusDuplicatedPointTrack; - phi = clusDuplicatedPointGlob.phi() * 180 / M_PI; + phi = clusDuplicatedPointGlob.phi();// * 180 / M_PI; + //// applying constraints: the cluster should be on the same layer, should be on an adjacent stave and on the same or adjacent chip position if (clusDuplicated.getSensorID() == clusOriginal.getSensorID()) { @@ -2255,9 +2795,9 @@ void EfficiencyStudy::getEfficiency(bool isMC) m2DClusterDuplicatedPositions->Fill(clusDuplicatedPointGlob.x(), clusDuplicatedPointGlob.y()); m3DDuplicatedClusterPositions->Fill(clusDuplicatedPointGlob.x(), clusDuplicatedPointGlob.y(), clusDuplicatedPointGlob.z()); - mXduplicated->Fill(clusDuplicatedPointGlob.x()); - mYduplicated->Fill(clusDuplicatedPointGlob.y()); - mZduplicated->Fill(clusDuplicatedPointGlob.z()); + // mXduplicated->Fill(clusDuplicatedPointGlob.x()); + // mYduplicated->Fill(clusDuplicatedPointGlob.y()); + // mZduplicated->Fill(clusDuplicatedPointGlob.z()); IPOriginalifDuplicatedxy[layerOriginal]->Fill(ip[0]); IPOriginalifDuplicatedz[layerOriginal]->Fill(ip[1]); @@ -2266,6 +2806,7 @@ void EfficiencyStudy::getEfficiency(bool isMC) DistanceClustersYAftercuts[layerDuplicated]->Fill(abs(clusDuplicatedPointGlob.y() - clusOriginalPointGlob.y())); DistanceClustersZAftercuts[layerDuplicated]->Fill(abs(clusDuplicatedPointGlob.z() - clusOriginalPointGlob.z())); + if (mVerboseOutput) { LOGP(info, "Propagation ok"); } @@ -2282,6 +2823,7 @@ void EfficiencyStudy::getEfficiency(bool isMC) ptDuplicated = pt; etaDuplicated = eta; clusZ = clusOriginalPointGlob.z(); + clusDuplicatedSelected = clusDuplicated; } adjacentFound = 1; } // end loop on all the clusters in the rof -> at this point we have the information on the closest cluster (if there is one) @@ -2289,14 +2831,52 @@ void EfficiencyStudy::getEfficiency(bool isMC) // here clusID_rDCA_label is updated with the closest cluster to the track other than the original one if (!adjacentFound) { + colNotFoundAll->Fill(clusOriginal.getCol()); + mChipNotFound->Fill(clusOriginal.getChipID()); + zNotFound[layerOriginal]->Fill(clusOriginalPointGlob.z()); + xNotFound[layerOriginal]->Fill(clusOriginalPointGlob.x()); + yNotFound[layerOriginal]->Fill(clusOriginalPointGlob.y()); + radiusNotFound[layerOriginal]->Fill(sqrt(clusOriginalPointGlob.x() * clusOriginalPointGlob.x() + clusOriginalPointGlob.y() *clusOriginalPointGlob.y())); + colNotFound[layerOriginal]->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9))); + m2DClusterNotFoundPositions->Fill(clusOriginalPointGlob.x(), clusOriginalPointGlob.y()); + rowNotFound[layerOriginal]->Fill(rowOriginal); + phiNotFound[layerOriginal]->Fill(phiOriginal); + etaNotFound[layerOriginal]->Fill(eta); + xyIPNotFound[layerOriginal]->Fill(ip[0]); + zIPNotFound[layerOriginal]->Fill(ip[1]); + std::cout << "Not found. Original has col " <Fill(clusOriginal.getChipID()%9, clusDuplicatedSelected.getChipID()%9); + mChipFound->Fill(clusOriginal.getChipID()); + zFound[layerOriginal]->Fill(clusOriginalPointGlob.z()); + xFound[layerOriginal]->Fill(clusOriginalPointGlob.x()); + yFound[layerOriginal]->Fill(clusOriginalPointGlob.y()); + radiusFound[layerOriginal]->Fill(sqrt(clusOriginalPointGlob.x() * clusOriginalPointGlob.x() + clusOriginalPointGlob.y() *clusOriginalPointGlob.y())); + colFoundOriginalVsDuplicated[layerOriginal]->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)), clusDuplicatedSelected.getCol()+(1024*(clusDuplicatedSelected.getChipID()%9))); + colFoundOriginal[layerOriginal]->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9))); + m2DClusterFoundPositions->Fill(clusOriginalPointGlob.x(), clusOriginalPointGlob.y()); + phiFound[layerOriginal]->Fill(phiOriginal); + rowFound[layerOriginal]->Fill(rowOriginal); + etaFound[layerOriginal]->Fill(eta); + xyIPFound[layerOriginal]->Fill(ip[0]); + zIPFound[layerOriginal]->Fill(ip[1]); nDuplClusters++; nDuplicatedClusters[layerOriginal]++; - numPt[layerOriginal]->Fill(ptDuplicated); + numPt[layerOriginal]->Fill(pt); numPhi[layerOriginal]->Fill(phiDuplicated); numEta[layerOriginal]->Fill(etaDuplicated); + numRow[layerOriginal]->Fill(rowOriginal); + numCol[layerOriginal]->Fill(clusOriginal.getCol()); + numZ[layerOriginal]->Fill(clusOriginalPointGlob.z()); mZvsPhiDUplicated[layerOriginal]->Fill(clusZ, phiDuplicated); + mNumColEta[layerOriginal]->Fill(clusOriginal.getCol(), eta); + mNumRowPhi[layerOriginal]->Fill(clusOriginal.getRow(), clusOriginalPointGlob.z()); + mNumRowCol[layerOriginal]->Fill(clusOriginal.getRow(), clusOriginal.getCol()); + numLayers->Fill(layerOriginal); + std::cout<<"++++++++++++++++++++++++++ check positions +++++++++++++++++++"< clusDuplicatedPointTrack = {clusDuplicatedPoint.getX(), clusDuplicatedPoint.getY(), clusDuplicatedPoint.getZ()}; o2::math_utils::Point3D clusDuplicatedPointGlob = mGeometry->getMatrixT2G(clusDuplicated.getSensorID()) * clusDuplicatedPointTrack; - phi = clusDuplicatedPointGlob.phi() * 180 / M_PI; + phi = clusDuplicatedPointGlob.phi();// * 180 / M_PI; //// applying constraints: the cluster should be on the same layer, should be on an adjacent stave and on the same or adjacent chip position if (clusDuplicated.getSensorID() == clusOriginal.getSensorID()) { @@ -2524,7 +3146,7 @@ void EfficiencyStudy::getEfficiencyAndTrackInfo(bool isMC) continue; } - std::cout << "checks passed" << std::endl; + // std::cout << "checks passed" << std::endl; gsl::span labsDuplicated = {}; if (isMC) { @@ -2538,7 +3160,7 @@ void EfficiencyStudy::getEfficiencyAndTrackInfo(bool isMC) continue; } - std::cout << "dca calculated: " << clusDuplicatedDCA[0] << " " << clusDuplicatedDCA[1] << std::endl; + // std::cout << "dca calculated: " << clusDuplicatedDCA[0] << " " << clusDuplicatedDCA[1] << std::endl; DCAxyData[layerDuplicated]->Fill(clusDuplicatedDCA[0]); DCAzData[layerDuplicated]->Fill(clusDuplicatedDCA[1]); @@ -2554,14 +3176,15 @@ void EfficiencyStudy::getEfficiencyAndTrackInfo(bool isMC) } m2DClusterDuplicatedPositions->Fill(clusDuplicatedPointGlob.x(), clusDuplicatedPointGlob.y()); m3DDuplicatedClusterPositions->Fill(clusDuplicatedPointGlob.x(), clusDuplicatedPointGlob.y(), clusDuplicatedPointGlob.z()); - mXduplicated->Fill(clusDuplicatedPointGlob.x()); - mYduplicated->Fill(clusDuplicatedPointGlob.y()); - mZduplicated->Fill(clusDuplicatedPointGlob.z()); + // mXduplicated->Fill(clusDuplicatedPointGlob.x()); + // mYduplicated->Fill(clusDuplicatedPointGlob.y()); + // mZduplicated->Fill(clusDuplicatedPointGlob.z()); DistanceClustersXAftercuts[layerDuplicated]->Fill(abs(clusDuplicatedPointGlob.x() - clusOriginalPointGlob.x())); DistanceClustersYAftercuts[layerDuplicated]->Fill(abs(clusDuplicatedPointGlob.y() - clusOriginalPointGlob.y())); DistanceClustersZAftercuts[layerDuplicated]->Fill(abs(clusDuplicatedPointGlob.z() - clusOriginalPointGlob.z())); + if (mVerboseOutput) { LOGP(info, "Propagation ok"); } @@ -2578,9 +3201,25 @@ void EfficiencyStudy::getEfficiencyAndTrackInfo(bool isMC) ptDuplicated = pt; etaDuplicated = eta; clusZ = clusOriginalPointGlob.z(); + clusDuplicatedSelected = clusDuplicated; } adjacentFound = 1; - std::cout << "Duplicated found with label: " << labsDuplicated[0] << " and phi: " << phiDuplicated << std::endl; + // std::cout << "Duplicated found with label: " << labsDuplicated[0] << " and phi: " << phiDuplicated << std::endl; + chipOrigVsOverlap->Fill(clusOriginal.getChipID()%9, clusDuplicatedSelected.getChipID()%9); + mChipFound->Fill(clusOriginal.getChipID()); + zFound[layerOriginal]->Fill(clusOriginalPointGlob.z()); + xFound[layerOriginal]->Fill(clusOriginalPointGlob.x()); + yFound[layerOriginal]->Fill(clusOriginalPointGlob.y()); + radiusFound[layerOriginal]->Fill(sqrt(clusOriginalPointGlob.x() * clusOriginalPointGlob.x() + clusOriginalPointGlob.y() *clusOriginalPointGlob.y())); + colFoundOriginalVsDuplicated[layerOriginal]->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)), clusDuplicatedSelected.getCol()); + colFoundOriginal[layerOriginal]->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9))); + m2DClusterFoundPositions->Fill(clusOriginalPointGlob.x(), clusOriginalPointGlob.y()); + phiFound[layerOriginal]->Fill(phiOriginal); + rowFound[layerOriginal]->Fill(rowOriginal); + etaFound[layerOriginal]->Fill(eta); + xyIPFound[layerOriginal]->Fill(ip[0]); + zIPFound[layerOriginal]->Fill(ip[1]); + clusDuplicated.print(); std::cout << "-----" << std::endl; } // end loop on all the clusters in the rof -> at this point we have the information on the closest cluster (if there is one) @@ -2594,6 +3233,19 @@ void EfficiencyStudy::getEfficiencyAndTrackInfo(bool isMC) } else { std::cout << "No duplicated found and does not exist" << std::endl; } + colNotFoundAll->Fill(clusOriginal.getCol()); + mChipNotFound->Fill(clusOriginal.getChipID()); + zNotFound[layerOriginal]->Fill(clusOriginalPointGlob.z()); + xNotFound[layerOriginal]->Fill(clusOriginalPointGlob.x()); + yNotFound[layerOriginal]->Fill(clusOriginalPointGlob.y()); + radiusNotFound[layerOriginal]->Fill(sqrt(clusOriginalPointGlob.x() * clusOriginalPointGlob.x() + clusOriginalPointGlob.y() *clusOriginalPointGlob.y())); + colNotFound[layerOriginal]->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9))); + m2DClusterNotFoundPositions->Fill(clusOriginalPointGlob.x(), clusOriginalPointGlob.y()); + rowNotFound[layerOriginal]->Fill(rowOriginal); + phiNotFound[layerOriginal]->Fill(phiOriginal); + etaNotFound[layerOriginal]->Fill(eta); + xyIPNotFound[layerOriginal]->Fill(ip[0]); + zIPNotFound[layerOriginal]->Fill(ip[1]); continue; } std::cout << "-----" << std::endl; @@ -2602,7 +3254,10 @@ void EfficiencyStudy::getEfficiencyAndTrackInfo(bool isMC) numPt[layerOriginal]->Fill(ptDuplicated); numPhi[layerOriginal]->Fill(phiDuplicated); numEta[layerOriginal]->Fill(etaDuplicated); + numRow[layerOriginal]->Fill(rowOriginal); + numCol[layerOriginal]->Fill(clusOriginal.getCol()); mZvsPhiDUplicated[layerOriginal]->Fill(clusZ, phiDuplicated); + numLayers->Fill(layerOriginal); if (isMC) { bool isGood = false; @@ -2612,6 +3267,9 @@ void EfficiencyStudy::getEfficiencyAndTrackInfo(bool isMC) numPtGood[layerOriginal]->Fill(ptDuplicated); numPhiGood[layerOriginal]->Fill(phiDuplicated); numEtaGood[layerOriginal]->Fill(etaDuplicated); + numRowGood[layerOriginal]->Fill(rowOriginal); + numColGood[layerOriginal]->Fill(clusOriginal.getCol()); + numGoodLayers->Fill(layerOriginal); continue; } } @@ -2619,6 +3277,9 @@ void EfficiencyStudy::getEfficiencyAndTrackInfo(bool isMC) numPtFake[layerOriginal]->Fill(ptDuplicated); numPhiFake[layerOriginal]->Fill(phiDuplicated); numEtaFake[layerOriginal]->Fill(etaDuplicated); + numRowFake[layerOriginal]->Fill(rowOriginal); + numColFake[layerOriginal]->Fill(clusOriginal.getCol()); + numFakeLayers->Fill(layerOriginal); } } } // end loop on clusters associated to the track @@ -2634,6 +3295,14 @@ void EfficiencyStudy::getEfficiencyAndTrackInfo(bool isMC) std::cout << " --------- N duplicated clusters: " << nDuplClusters << std::endl; } + + + +void EfficiencyStudy::getHits(){ + + + +} void EfficiencyStudy::process(o2::globaltracking::RecoContainer& recoData) { LOGP(info, "--------------- process"); @@ -2643,7 +3312,7 @@ void EfficiencyStudy::process(o2::globaltracking::RecoContainer& recoData) if (mUseMC) { // getDCAClusterTrackMC(); // studyDCAcutsMC(); - // studyClusterSelectionMC(); + studyClusterSelectionMC(); // getEfficiencyAndTrackInfo(mUseMC); // countDuplicatedAfterCuts(); } else if (!mUseMC) { @@ -2681,6 +3350,7 @@ void EfficiencyStudy::endOfStream(EndOfStreamContext& ec) mOutFile->mkdir("EfficiencyFinal/"); mOutFile->mkdir("DCAFinal/"); + mOutFile->mkdir("NotFoundChecks/"); mOutFile->mkdir("DistanceClusters/"); mOutFile->mkdir("DCA/"); @@ -2727,6 +3397,8 @@ void EfficiencyStudy::endOfStream(EndOfStreamContext& ec) mEtaOriginal[i]->Write(); mDuplicatedEtaAllPt[i]->Write(); mDuplicatedRow[i]->Write(); + mDuplicatedCol[i]->Write(); + mDuplicatedZ[i]->Write(); for (int p = 0; p < 3; p++) { mDuplicatedEta[i][p]->Write(); @@ -2756,6 +3428,42 @@ void EfficiencyStudy::endOfStream(EndOfStreamContext& ec) chi2trackAccepted->Write(); mOutFile->cd("EfficiencyFinal/"); + TList * listNum = new TList; + TList * listDen = new TList; + TH1D* numPhiAll = (TH1D*)numPhi[0]->Clone("numPhiAll"); + TH1D* denPhiAll = (TH1D*)denPhi[0]->Clone("denPhiAll"); + + TList * listNumColEta = new TList; + TList * listDenColEta = new TList; + TH1D* numColEtaAll = (TH1D*)mNumColEta[0]->Clone("numColEtaAll"); + TH1D* denColEtaAll = (TH1D*)mDenColEta[0]->Clone("denColEtaAll"); + + TList * listNumRowPhi = new TList; + TList * listDenRowPhi = new TList; + TH1D* numRowPhiAll = (TH1D*)mNumRowPhi[0]->Clone("numRowPhiAll"); + TH1D* denRowPhiAll = (TH1D*)mDenRowPhi[0]->Clone("denRowPhiAll"); + + TList * listNumRowCol = new TList; + TList * listDenRowCol = new TList; + TH1D* numRowColAll = (TH1D*)mNumRowCol[0]->Clone("numRowColAll"); + TH1D* denRowColAll = (TH1D*)mDenRowCol[0]->Clone("denRowColAll"); + + TEfficiency* effLayers = new TEfficiency(*numLayers, *denLayers); + effLayers->SetName("effLayers"); + effLayers->SetTitle("; ;Efficiency"); + TEfficiency* effLayersGood = new TEfficiency(*numGoodLayers, *denLayers); + effLayersGood->SetName("effLayersGood"); + effLayersGood->SetTitle("; ;Efficiency Good Matches"); + TEfficiency* effLayersFake = new TEfficiency(*numFakeLayers, *denLayers); + effLayersFake->SetName("effLayersFake"); + effLayersFake->SetTitle("; ;Efficiency Fake Matches"); + effLayers->Write(); + effLayersGood->Write(); + effLayersFake->Write(); + denLayers->Write(); + numLayers->Write(); + numGoodLayers->Write(); + numFakeLayers->Write(); for (int l = 0; l < NLAYERS; l++) { @@ -2784,6 +3492,8 @@ void EfficiencyStudy::endOfStream(EndOfStreamContext& ec) effPhi->Write(); effPhiGood->Write(); effPhiFake->Write(); + listNum->Add(numPhi[l]); + listDen->Add(denPhi[l]); TEfficiency* effEta = new TEfficiency(*numEta[l], *denEta[l]); effEta->SetName(Form("effEta_layer%d", l)); @@ -2798,14 +3508,132 @@ void EfficiencyStudy::endOfStream(EndOfStreamContext& ec) effEtaGood->Write(); effEtaFake->Write(); + TEfficiency* effRow = new TEfficiency(*numRow[l], *denRow[l]); + effRow->SetName(Form("effRow_layer%d", l)); + effRow->SetTitle(Form("L%d;#Row;Efficiency", l)); + TEfficiency* effRowGood = new TEfficiency(*numRowGood[l], *denRow[l]); + effRowGood->SetName(Form("effRowGood_layer%d", l)); + effRowGood->SetTitle(Form("L%d;#Row;Efficiency Good Matches", l)); + TEfficiency* effRowFake = new TEfficiency(*numRowFake[l], *denRow[l]); + effRowFake->SetName(Form("effRowFake_layer%d", l)); + effRowFake->SetTitle(Form("L%d;#Row;Efficiency Fake Matches", l)); + effRow->Write(); + effRowGood->Write(); + effRowFake->Write(); + + TEfficiency* effCol = new TEfficiency(*numCol[l], *denCol[l]); + effCol->SetName(Form("effCol_layer%d", l)); + effCol->SetTitle(Form("L%d;#Col;Efficiency", l)); + TEfficiency* effColGood = new TEfficiency(*numColGood[l], *denCol[l]); + effColGood->SetName(Form("effColGood_layer%d", l)); + effColGood->SetTitle(Form("L%d;#Col;Efficiency Good Matches", l)); + TEfficiency* effColFake = new TEfficiency(*numColFake[l], *denCol[l]); + effColFake->SetName(Form("effColFake_layer%d", l)); + effColFake->SetTitle(Form("L%d;#Col;Efficiency Fake Matches", l)); + effCol->Write(); + effColGood->Write(); + effColFake->Write(); + + TEfficiency* effZ = new TEfficiency(*numZ[l], *denZ[l]); + effZ->SetName(Form("effZ_layer%d", l)); + effZ->SetTitle(Form("L%d;#Z (cm);Efficiency", l)); + TEfficiency* effZGood = new TEfficiency(*numZGood[l], *denZ[l]); + effZGood->SetName(Form("effZGood_layer%d", l)); + effZGood->SetTitle(Form("L%d;#Z (cm);Efficiency Good Matches", l)); + TEfficiency* effZFake = new TEfficiency(*numZFake[l], *denZ[l]); + effZFake->SetName(Form("effZFake_layer%d", l)); + effZFake->SetTitle(Form("L%d;#Z (cm);Efficiency Fake Matches", l)); + effZ->Write(); + effZGood->Write(); + effZFake->Write(); + + TEfficiency* effColEta = new TEfficiency(*mNumColEta[l], *mDenColEta[l]); + effColEta->SetName(Form("effColEta_layer%d", l)); + effColEta->SetTitle(Form("L%d;Column;#eta", l)); + effColEta->Write(); + + listNumColEta->Add(mNumColEta[l]); + listDenColEta->Add(mDenColEta[l]); + + + TEfficiency* effRowPhi = new TEfficiency(*mNumRowPhi[l], *mDenRowPhi[l]); + effRowPhi->SetName(Form("effRowPhi_layer%d", l)); + effRowPhi->SetTitle(Form("L%d;Column;#eta", l)); + effRowPhi->Write(); + + listNumRowPhi->Add(mNumRowPhi[l]); + listDenRowPhi->Add(mDenRowPhi[l]); + + TEfficiency* effRowCol = new TEfficiency(*mNumRowCol[l], *mDenRowCol[l]); + effRowCol->SetName(Form("effRowCol_layer%d", l)); + effRowCol->SetTitle(Form("L%d;Column;#eta", l)); + effRowCol->Write(); + + listNumRowCol->Add(mNumRowCol[l]); + listDenRowCol->Add(mDenRowCol[l]); + + mNumRowCol[l]->Write(); + mDenRowCol[l]->Write(); + mNumRowPhi[l]->Write(); + mDenRowPhi[l]->Write(); + mNumColEta[l]->Write(); + mDenColEta[l]->Write(); numPhi[l]->Write(); denPhi[l]->Write(); numPt[l]->Write(); denPt[l]->Write(); numEta[l]->Write(); denEta[l]->Write(); + numRow[l]->Write(); + denRow[l]->Write(); + numCol[l]->Write(); + denCol[l]->Write(); + numZ[l]->Write(); + denZ[l]->Write(); } + + + numPhiAll->Merge(listNum); + denPhiAll->Merge(listDen); + + numColEtaAll->Merge(listNumColEta); + denColEtaAll->Merge(listDenColEta); + + numRowPhiAll->Merge(listNumRowPhi); + denRowPhiAll->Merge(listDenRowPhi); + + numRowColAll->Merge(listNumRowCol); + denRowColAll->Merge(listDenRowCol); + + TEfficiency* effPhiAll = new TEfficiency(*numPhiAll, *denPhiAll); + effPhiAll->SetName("effPhi_AllLayers"); + effPhiAll->SetTitle("L0 + L1 + L2;#phi;Efficiency"); + effPhiAll->Write(); + numPhiAll->Write(); + denPhiAll->Write(); + + TEfficiency* effColEtaAll = new TEfficiency(*numColEtaAll, *denColEtaAll); + effColEtaAll->SetName("effColEta_AllLayers"); + effColEtaAll->SetTitle("L0 + L1 + L2;Column;#eta"); + effColEtaAll->Write(); + numColEtaAll->Write(); + denColEtaAll->Write(); + + TEfficiency* effRowPhiAll = new TEfficiency(*numRowPhiAll, *denRowPhiAll); + effRowPhiAll->SetName("effRowPhi_AllLayers"); + effRowPhiAll->SetTitle("L0 + L1 + L2;Column;#eta"); + effRowPhiAll->Write(); + numRowPhiAll->Write(); + denRowPhiAll->Write(); + + TEfficiency* effRowColAll = new TEfficiency(*numRowColAll, *denRowColAll); + effRowColAll->SetName("effRowCol_AllLayers"); + effRowColAll->SetTitle("L0 + L1 + L2;Column;#eta"); + effRowColAll->Write(); + numRowColAll->Write(); + denRowColAll->Write(); + mOutFile->cd("DCAFinal/"); for (int l = 0; l < NLAYERS; l++) { @@ -2821,6 +3649,61 @@ void EfficiencyStudy::endOfStream(EndOfStreamContext& ec) DCAzRejected[l]->Write(); } + mOutFile->cd("NotFoundChecks/"); + + for (int l = 0; l < NLAYERS; l++) { + phiFound[l]->Write(); + phiNotFound[l]->Write(); + rowFound[l]->Write(); + rowNotFound[l]->Write(); + etaFound[l]->Write(); + etaNotFound[l]->Write(); + xyIPFound[l]->Write(); + xyIPNotFound[l]->Write(); + zIPFound[l]->Write(); + zIPNotFound[l]->Write(); + zFound[l]->Write(); + zNotFound[l]->Write(); + xFound[l]->Write(); + yFound[l]->Write(); + radiusFound[l]->Write(); + xNotFound[l]->Write(); + yNotFound[l]->Write(); + radiusNotFound[l]->Write(); + colFoundOriginalVsDuplicated[l]->Write(); + colFoundOriginal[l]->Write(); + colNotFound[l]->Write(); + + + } + colNotFoundAll->Write(); + mChipFound->Write(); + mChipNotFound->Write(); + m2DClusterFoundPositions->Write(); + m2DClusterNotFoundPositions->Write(); + l0_00->Write(); + l0_01->Write(); + l0_02->Write(); + l0_03->Write(); + l0_04->Write(); + l0_05->Write(); + l0_06->Write(); + l0_07->Write(); + l0_08->Write(); + l0_09->Write(); + l0_10->Write(); + l0_11->Write(); + l1_15->Write(); + l2_00->Write(); + l2_01->Write(); + l2_02->Write(); + l2_15->Write(); + l2_19->Write(); + chipOrigVsOverlap->Write(); + chipmap->SetContour(100); + chipmap->Write(); + + mOutFile->Close(); } From 23b64cff6f4c9e02650799ce3d265a58792ba3af Mon Sep 17 00:00:00 2001 From: Andrea Sofia Triolo Date: Thu, 2 Jan 2025 17:00:29 +0100 Subject: [PATCH 2/6] Rebinning of Z and Phi efficiency plots --- .../postprocessing/studies/src/Efficiency.cxx | 92 ++++++++++--------- 1 file changed, 47 insertions(+), 45 deletions(-) diff --git a/Detectors/ITSMFT/ITS/postprocessing/studies/src/Efficiency.cxx b/Detectors/ITSMFT/ITS/postprocessing/studies/src/Efficiency.cxx index 7e80839dc57ce..b0d9096c13725 100644 --- a/Detectors/ITSMFT/ITS/postprocessing/studies/src/Efficiency.cxx +++ b/Detectors/ITSMFT/ITS/postprocessing/studies/src/Efficiency.cxx @@ -491,20 +491,20 @@ void EfficiencyStudy::init(InitContext& ic) mDCAxyOriginal[i] = std::make_unique(Form("dcaXYOriginal_L%d", i), "Distance between track and original cluster ;DCA xy (cm); ", 200, -0.01, 0.01); mDCAzOriginal[i] = std::make_unique(Form("dcaZOriginal_L%d", i), "Distance between track and original cluster ;DCA z (cm); ", 200, -0.01, 0.01); - mPhiOriginal[i] = std::make_unique(Form("phiOriginal_L%d", i), ";phi (rad); ", 180, -3.2, 3.2); + mPhiOriginal[i] = std::make_unique(Form("phiOriginal_L%d", i), ";phi (rad); ", 90, -3.2, 3.2); mPhiTrackOriginal[i] = std::make_unique(Form("phiTrackOriginal_L%d", i), ";phi Track (rad); ", 1440, 0, 360); mEtaOriginal[i] = std::make_unique(Form("etaOriginal_L%d", i), ";eta (rad); ", 100, -2, 2); mPtOriginal[i] = std::make_unique(Form("ptOriginal_L%d", i), ";pt (GeV/c); ", 100, 0, 10); - mZvsPhiDUplicated[i] = std::make_unique(Form("zvsphiDuplicated_L%d", i), ";z (cm);phi (rad)", 400, -20, 20, 180, -3.2, 3.2); + mZvsPhiDUplicated[i] = std::make_unique(Form("zvsphiDuplicated_L%d", i), ";z (cm);phi (rad)", 400, -20, 20, 90, -3.2, 3.2); mPtDuplicated[i] = new TH1D(Form("ptDuplicated_L%d", i), ";pt (GeV/c); ", nbPt, 0, 7.5); // xbins); mEtaDuplicated[i] = new TH1D(Form("etaDuplicated_L%d", i), ";eta; ", 40, -2, 2); - mPhiDuplicated[i] = new TH1D(Form("phiDuplicated_L%d", i), ";phi (rad); ", 180, -3.2, 3.2); + mPhiDuplicated[i] = new TH1D(Form("phiDuplicated_L%d", i), ";phi (rad); ", 90, -3.2, 3.2); mPhiTrackDuplicated[i] = new TH1D(Form("phiTrackDuplicated_L%d", i), ";phi Track (rad); ", 1440, 0, 360); - mPhiOriginalIfDuplicated[i] = new TH1D(Form("phiOriginalIfDuplicated_L%d", i), ";phi (rad); ", 180, -3.2, 3.2); - mPhiTrackDuplicatedvsphiDuplicated[i] = new TH2D(Form("phiTrackDuplicatedvsphiDuplicated_L%d", i), ";phi track (rad);phi oridinal if duplicated (rad); ", 1440, 0, 360, 180, -3.2, 3.2); - mPhiTrackoriginalvsphioriginal[i] = new TH2D(Form("phiTrackoriginalvsphioriginal_L%d", i), ";phi track (rad);phi original (rad); ", 1440, 0, 360, 180, -3.2, 3.2); + mPhiOriginalIfDuplicated[i] = new TH1D(Form("phiOriginalIfDuplicated_L%d", i), ";phi (rad); ", 90, -3.2, 3.2); + mPhiTrackDuplicatedvsphiDuplicated[i] = new TH2D(Form("phiTrackDuplicatedvsphiDuplicated_L%d", i), ";phi track (rad);phi oridinal if duplicated (rad); ", 1440, 0, 360, 90, -3.2, 3.2); + mPhiTrackoriginalvsphioriginal[i] = new TH2D(Form("phiTrackoriginalvsphioriginal_L%d", i), ";phi track (rad);phi original (rad); ", 1440, 0, 360, 90, -3.2, 3.2); mDCAxyDuplicated_layer[i] = std::make_unique(Form("dcaXYDuplicated_layer_L%d", i), "Distance between track and duplicated cluster ;DCA xy (cm); ", 100, -0.01, 0.01); mDCAzDuplicated_layer[i] = std::make_unique(Form("dcaZDuplicated_layer_L%d", i), "Distance between track and duplicated cluster ;DCA z (cm); ", 100, -0.01, 0.01); @@ -518,10 +518,10 @@ void EfficiencyStudy::init(InitContext& ic) mEfficiencyGoodMatchEta_layer[i] = new TH2D(Form("mEfficiencyGoodMatchEta_layer_L%d", i), ";#eta;#sigma(DCA) cut;Efficiency;", 40, -2, 2, 20, 0.5, 20.5); mEfficiencyFakeMatchEta_layer[i] = new TH2D(Form("mEfficiencyFakeMatchEta_layer_L%d", i), ";#eta;#sigma(DCA) cut;Efficiency;", 40, -2, 2, 20, 0.5, 20.5); - mEfficiencyGoodMatchPhi_layer[i] = new TH2D(Form("mEfficiencyGoodMatchPhi_layer_L%d", i), ";#phi;#sigma(DCA) cut;Efficiency;", 180, -3.2, 3.2, 20, 0.5, 20.5); + mEfficiencyGoodMatchPhi_layer[i] = new TH2D(Form("mEfficiencyGoodMatchPhi_layer_L%d", i), ";#phi;#sigma(DCA) cut;Efficiency;", 90, -3.2, 3.2, 20, 0.5, 20.5); mEfficiencyGoodMatchPhiTrack_layer[i] = new TH2D(Form("mEfficiencyGoodMatchPhiTrack_layer_L%d", i), ";#phi track;#sigma(DCA) cut;Efficiency;", 1440, 0, 360, 20, 0.5, 20.5); - mEfficiencyGoodMatchPhiOriginal_layer[i] = new TH2D(Form("mEfficiencyGoodMatchPhiOriginal_layer_L%d", i), ";#phi Original;#sigma(DCA) cut;Efficiency;", 180, -3.2, 3.2, 20, 0.5, 20.5); - mEfficiencyFakeMatchPhi_layer[i] = new TH2D(Form("mEfficiencyFakeMatchPhi_layer_L%d", i), ";#phi;#sigma(DCA) cut;Efficiency;", 180, -3.2, 3.2, 20, 0.5, 20.5); + mEfficiencyGoodMatchPhiOriginal_layer[i] = new TH2D(Form("mEfficiencyGoodMatchPhiOriginal_layer_L%d", i), ";#phi Original;#sigma(DCA) cut;Efficiency;", 90, -3.2, 3.2, 20, 0.5, 20.5); + mEfficiencyFakeMatchPhi_layer[i] = new TH2D(Form("mEfficiencyFakeMatchPhi_layer_L%d", i), ";#phi;#sigma(DCA) cut;Efficiency;", 90, -3.2, 3.2, 20, 0.5, 20.5); mEfficiencyFakeMatchPhiTrack_layer[i] = new TH2D(Form("mEfficiencyFakeMatchPhiTrack_layer_L%d", i), ";#phi Track;#sigma(DCA) cut;Efficiency;", 1440, 0, 360, 20, 0.5, 20.5); mPt_EtaDupl[i] = new TH2D(Form("mPt_EtaDupl_L%d", i), ";#it{p}_{T} (GeV/c);#eta; ", 100, 0, 10, 100, -2, 2); @@ -547,11 +547,11 @@ void EfficiencyStudy::init(InitContext& ic) mNFakeMatchesCol[i] = new TH1D(Form("mNFakeMatchesCol_L%d", i), Form(";Col; Number of fake matches L%d", i), 128, -0.5, 1023.5); mNFakeMatchesCol[i]->Sumw2(); - mDuplicatedZ[i] = new TH1D(Form("mDuplicatedZ_L%d", i), Form("; Z (cm); Number of duplciated clusters L%d", i), 150, -15, 15); + mDuplicatedZ[i] = new TH1D(Form("mDuplicatedZ_L%d", i), Form("; Z (cm); Number of duplciated clusters L%d", i), 100, -15, 15); mDuplicatedZ[i]->Sumw2(); - mNGoodMatchesZ[i] = new TH1D(Form("mNGoodMatchesZ_L%d", i), Form("; Z (cm); Number of good matches L%d", i), 150, -15, 15); + mNGoodMatchesZ[i] = new TH1D(Form("mNGoodMatchesZ_L%d", i), Form("; Z (cm); Number of good matches L%d", i), 100, -15, 15); mNGoodMatchesZ[i]->Sumw2(); - mNFakeMatchesZ[i] = new TH1D(Form("mNFakeMatchesZ_L%d", i), Form(";Z (cm); Number of fake matches L%d", i), 150, -15, 15); + mNFakeMatchesZ[i] = new TH1D(Form("mNFakeMatchesZ_L%d", i), Form(";Z (cm); Number of fake matches L%d", i), 100, -15, 15); mNFakeMatchesZ[i]->Sumw2(); mDuplicatedPtEta[i] = new TH2D(Form("mDuplicatedPtEta_log_L%d", i), Form("; #it{p}_{T} (GeV/c);#eta; Number of duplciated clusters L%d", i), nbPt, 0, 7.5 /* xbins*/, 40, -2, 2); @@ -561,36 +561,36 @@ void EfficiencyStudy::init(InitContext& ic) mNFakeMatchesPtEta[i] = new TH2D(Form("mNFakeMatchesPtEta_L%d", i), Form("; #it{p}_{T} (GeV/c);#eta; Number of good matches L%d", i), nbPt, 0, 7.5 /* xbins*/, 40, -2, 2); mNFakeMatchesPtEta[i]->Sumw2(); - mDuplicatedPtPhi[i] = new TH2D(Form("mDuplicatedPtPhi_log_L%d", i), Form("; #it{p}_{T} (GeV/c);#phi (rad); Number of duplciated clusters L%d", i), nbPt, 0, 7.5 /* xbins*/, 180, -3.2, 3.2); + mDuplicatedPtPhi[i] = new TH2D(Form("mDuplicatedPtPhi_log_L%d", i), Form("; #it{p}_{T} (GeV/c);#phi (rad); Number of duplciated clusters L%d", i), nbPt, 0, 7.5 /* xbins*/, 90, -3.2, 3.2); mDuplicatedPtPhi[i]->Sumw2(); - mNGoodMatchesPtPhi[i] = new TH2D(Form("mNGoodMatchesPtPhi_L%d", i), Form("; #it{p}_{T} (GeV/c);#phi (rad); Number of good matches L%d", i), nbPt, 0, 7.5 /* xbins*/, 180, -3.2, 3.2); + mNGoodMatchesPtPhi[i] = new TH2D(Form("mNGoodMatchesPtPhi_L%d", i), Form("; #it{p}_{T} (GeV/c);#phi (rad); Number of good matches L%d", i), nbPt, 0, 7.5 /* xbins*/, 90, -3.2, 3.2); mNGoodMatchesPtPhi[i]->Sumw2(); - mNFakeMatchesPtPhi[i] = new TH2D(Form("mNFakeMatchesPtPhi_L%d", i), Form("; #it{p}_{T} (GeV/c);#phi (rad); Number of good matches L%d", i), nbPt, 0, 7.5 /* xbins*/, 180, -3.2, 3.2); + mNFakeMatchesPtPhi[i] = new TH2D(Form("mNFakeMatchesPtPhi_L%d", i), Form("; #it{p}_{T} (GeV/c);#phi (rad); Number of good matches L%d", i), nbPt, 0, 7.5 /* xbins*/, 90, -3.2, 3.2); mNFakeMatchesPtPhi[i]->Sumw2(); - mDuplicatedEtaPhi[i] = new TH2D(Form("mDuplicatedEtaPhi_L%d", i), Form("; #eta;#phi (rad); Number of duplciated clusters L%d", i), 40, -2, 2, 180, -3.2, 3.2); + mDuplicatedEtaPhi[i] = new TH2D(Form("mDuplicatedEtaPhi_L%d", i), Form("; #eta;#phi (rad); Number of duplciated clusters L%d", i), 40, -2, 2, 90, -3.2, 3.2); mDuplicatedEtaPhi[i]->Sumw2(); - mNGoodMatchesEtaPhi[i] = new TH2D(Form("mNGoodMatchesEtaPhi_L%d", i), Form("; #eta;#phi (rad); Number of good matches L%d", i), 40, -2, 2, 180, -3.2, 3.2); + mNGoodMatchesEtaPhi[i] = new TH2D(Form("mNGoodMatchesEtaPhi_L%d", i), Form("; #eta;#phi (rad); Number of good matches L%d", i), 40, -2, 2, 90, -3.2, 3.2); mNGoodMatchesEtaPhi[i]->Sumw2(); - mNFakeMatchesEtaPhi[i] = new TH2D(Form("mNFakeMatchesEtaPhi_L%d", i), Form("; #eta;#phi (rad); Number of good matches L%d", i), 40, -2, 2, 180, -3.2, 3.2); + mNFakeMatchesEtaPhi[i] = new TH2D(Form("mNFakeMatchesEtaPhi_L%d", i), Form("; #eta;#phi (rad); Number of good matches L%d", i), 40, -2, 2, 90, -3.2, 3.2); mNFakeMatchesEtaPhi[i]->Sumw2(); mDuplicatedEtaAllPt[i] = std::make_unique(Form("mDuplicatedEtaAllPt_L%d", i), Form("; #eta; Number of duplicated clusters L%d", i), 40, -2, 2); mNGoodMatchesEtaAllPt[i] = std::make_unique(Form("mNGoodMatchesEtaAllPt_L%d", i), Form("; #eta; Number of good matches L%d", i), 40, -2, 2); mNFakeMatchesEtaAllPt[i] = std::make_unique(Form("mNFakeMatchesEtaAllPt_L%d", i), Form("; #eta; Number of fake matches L%d", i), 40, -2, 2); - mDuplicatedPhiAllPt[i] = std::make_unique(Form("mDuplicatedPhiAllPt_L%d", i), Form("; #phi (rad); Number of duplicated clusters L%d", i), 180, -3.2, 3.2); - mNGoodMatchesPhiAllPt[i] = std::make_unique(Form("mNGoodMatchesPhiAllPt_L%d", i), Form("; #phi (rad); Number of good matches L%d", i), 180, -3.2, 3.2); - mNFakeMatchesPhiAllPt[i] = std::make_unique(Form("mNFakeMatchesPhiAllPt_L%d", i), Form("; #phi (rad); Number of fake matches L%d", i), 180, -3.2, 3.2); + mDuplicatedPhiAllPt[i] = std::make_unique(Form("mDuplicatedPhiAllPt_L%d", i), Form("; #phi (rad); Number of duplicated clusters L%d", i), 90, -3.2, 3.2); + mNGoodMatchesPhiAllPt[i] = std::make_unique(Form("mNGoodMatchesPhiAllPt_L%d", i), Form("; #phi (rad); Number of good matches L%d", i), 90, -3.2, 3.2); + mNFakeMatchesPhiAllPt[i] = std::make_unique(Form("mNFakeMatchesPhiAllPt_L%d", i), Form("; #phi (rad); Number of fake matches L%d", i), 90, -3.2, 3.2); mnGoodMatchesPt_layer[i] = new TH2D(Form("mnGoodMatchesPt_layer_L%d", i), ";pt; nGoodMatches", nbPt, 0, 7.5 /* xbins*/, 20, 0.5, 20.5); mnFakeMatchesPt_layer[i] = new TH2D(Form("mnFakeMatchesPt_layer_L%d", i), ";pt; nFakeMatches", nbPt, 0, 7.5 /* xbins*/, 20, 0.5, 20.5); mnGoodMatchesEta_layer[i] = new TH2D(Form("mnGoodMatchesEta_layer_L%d", i), ";#eta; nGoodMatches", 40, -2, 2, 20, 0.5, 20.5); mnFakeMatchesEta_layer[i] = new TH2D(Form("mnFakeMatchesEta_layer_L%d", i), ";#eta; nFakeMatches", 40, -2, 2, 20, 0.5, 20.5); - mnGoodMatchesPhi_layer[i] = new TH2D(Form("mnGoodMatchesPhi_layer_L%d", i), ";#Phi; nGoodMatches", 180, -3.2, 3.2, 20, 0.5, 20.5); + mnGoodMatchesPhi_layer[i] = new TH2D(Form("mnGoodMatchesPhi_layer_L%d", i), ";#Phi; nGoodMatches", 90, -3.2, 3.2, 20, 0.5, 20.5); mnGoodMatchesPhiTrack_layer[i] = new TH2D(Form("mnGoodMatchesPhiTrack_layer_L%d", i), ";#Phi track; nGoodMatches", 1440, 0, 360, 20, 0.5, 20.5); - mnGoodMatchesPhiOriginal_layer[i] = new TH2D(Form("mnGoodMatchesPhiOriginal_layer_L%d", i), ";#Phi of the original Cluster; nGoodMatches", 180, -3.2, 3.2, 20, 0.5, 20.5); - mnFakeMatchesPhi_layer[i] = new TH2D(Form("mnFakeMatchesPhi_layer_L%d", i), ";#Phi; nFakeMatches", 180, -3.2, 3.2, 20, 0.5, 20.5); + mnGoodMatchesPhiOriginal_layer[i] = new TH2D(Form("mnGoodMatchesPhiOriginal_layer_L%d", i), ";#Phi of the original Cluster; nGoodMatches", 90, -3.2, 3.2, 20, 0.5, 20.5); + mnFakeMatchesPhi_layer[i] = new TH2D(Form("mnFakeMatchesPhi_layer_L%d", i), ";#Phi; nFakeMatches", 90, -3.2, 3.2, 20, 0.5, 20.5); mnFakeMatchesPhiTrack_layer[i] = new TH2D(Form("mnFakeMatchesPhiTrack_layer_L%d", i), ";#Phi track; nFakeMatches", 1440, 0, 360, 20, 0.5, 20.5); denPt[i] = new TH1D(Form("denPt_L%d", i), Form("denPt_L%d", i), nbPt, 0, 7.5 /* xbins*/); @@ -598,10 +598,10 @@ void EfficiencyStudy::init(InitContext& ic) numPtGood[i] = new TH1D(Form("numPtGood_L%d", i), Form("numPtGood_L%d", i), nbPt, 0, 7.5 /* xbins*/); numPtFake[i] = new TH1D(Form("numPtFake_L%d", i), Form("numPtFake_L%d", i), nbPt, 0, 7.5 /* xbins*/); - denPhi[i] = new TH1D(Form("denPhi_L%d", i), Form("denPhi_L%d", i), 180, -3.2, 3.2); - numPhi[i] = new TH1D(Form("numPhi_L%d", i), Form("numPhi_L%d", i), 180, -3.2, 3.2); - numPhiGood[i] = new TH1D(Form("numPhiGood_L%d", i), Form("numPhiGood_L%d", i), 180, -3.2, 3.2); - numPhiFake[i] = new TH1D(Form("numPhiFake_L%d", i), Form("numPhiFake_L%d", i), 180, -3.2, 3.2); + denPhi[i] = new TH1D(Form("denPhi_L%d", i), Form("denPhi_L%d", i), 90, -3.2, 3.2); + numPhi[i] = new TH1D(Form("numPhi_L%d", i), Form("numPhi_L%d", i), 90, -3.2, 3.2); + numPhiGood[i] = new TH1D(Form("numPhiGood_L%d", i), Form("numPhiGood_L%d", i), 90, -3.2, 3.2); + numPhiFake[i] = new TH1D(Form("numPhiFake_L%d", i), Form("numPhiFake_L%d", i), 90, -3.2, 3.2); denEta[i] = new TH1D(Form("denEta_L%d", i), Form("denEta_L%d", i), 200, -2, 2); numEta[i] = new TH1D(Form("numEta_L%d", i), Form("numEta_L%d", i), 200, -2, 2); @@ -618,16 +618,16 @@ void EfficiencyStudy::init(InitContext& ic) numColGood[i] = new TH1D(Form("numColGood_L%d", i), Form("numColGood_L%d", i), 128, -0.5, 1023.5); numColFake[i] = new TH1D(Form("numColFake_L%d", i), Form("numColFake_L%d", i), 128, -0.5, 1023.5); - denZ[i] = new TH1D(Form("denZ_L%d", i), Form("denZ_L%d", i), 150, -15, 15); - numZ[i] = new TH1D(Form("numZ_L%d", i), Form("numZ_L%d", i), 150, -15, 15); - numZGood[i] = new TH1D(Form("numZGood_L%d", i), Form("numZGood_L%d", i), 150, -15, 15); - numZFake[i] = new TH1D(Form("numZFake_L%d", i), Form("numZFake_L%d", i), 150, -15, 15); + denZ[i] = new TH1D(Form("denZ_L%d", i), Form("denZ_L%d", i), 100, -15, 15); + numZ[i] = new TH1D(Form("numZ_L%d", i), Form("numZ_L%d", i), 100, -15, 15); + numZGood[i] = new TH1D(Form("numZGood_L%d", i), Form("numZGood_L%d", i), 100, -15, 15); + numZFake[i] = new TH1D(Form("numZFake_L%d", i), Form("numZFake_L%d", i), 100, -15, 15); mDenColEta[i] = new TH2D(Form("mDenColEta_L%d", i), Form("mDenColEta_L%d", i), 128, -0.5, 1023.5, 50, -1, 1); mNumColEta[i] = new TH2D(Form("mNumColEta_L%d", i), Form("mNumColEta_L%d", i), 128, -0.5, 1023.5, 50, -1, 1); - mDenRowPhi[i] = new TH2D(Form("mDenRowPhi_L%d", i), Form("mDenRowPhi_L%d", i), 128, -0.5, 511.5, 180, -3.2, 3.2); - mNumRowPhi[i] = new TH2D(Form("mNumRowPhi_L%d", i), Form("mNumRowPhi_L%d", i), 128, -0.5, 511.5, 180, -3.2, 3.2); + mDenRowPhi[i] = new TH2D(Form("mDenRowPhi_L%d", i), Form("mDenRowPhi_L%d", i), 128, -0.5, 511.5, 90, -3.2, 3.2); + mNumRowPhi[i] = new TH2D(Form("mNumRowPhi_L%d", i), Form("mNumRowPhi_L%d", i), 128, -0.5, 511.5, 90, -3.2, 3.2); mDenRowCol[i] = new TH2D(Form("mDenRowCol_L%d", i), Form("mDenRowCol_L%d", i), 128, -0.5, 511.5, 128, -0.5, 1023.5); mNumRowCol[i] = new TH2D(Form("mNumRowCol_L%d", i), Form("mNumRowCol_L%d", i), 128, -0.5, 511.5, 128, -0.5, 1023.5); @@ -639,9 +639,9 @@ void EfficiencyStudy::init(InitContext& ic) IPOriginalifDuplicatedxy[i] = std::make_unique(Form("IPOriginalifDuplicatedxy_L%d", i), Form("IPOriginalifDuplicatedxy_L%d", i), 1000, -0.005, 0.005); IPOriginalifDuplicatedz[i] = std::make_unique(Form("IPOriginalifDuplicatedz_L%d", i), Form("IPOriginalifDuplicatedz_L%d", i), 200, -10, 10); - phiFound[i] = new TH1D(Form("phiFound_L%d", i), Form("phiFound_L%d", i), 180, -3.2, 3.2); + phiFound[i] = new TH1D(Form("phiFound_L%d", i), Form("phiFound_L%d", i), 190, -3.2, 3.2); rowFound[i] = new TH1D(Form("rowFound_L%d", i), Form("rowFound_L%d", i), 128, -0.5, 511.5); - phiNotFound[i] = new TH1D(Form("phiNotFound_L%d", i), Form("phiNotFound_L%d", i), 180, -3.2, 3.2); + phiNotFound[i] = new TH1D(Form("phiNotFound_L%d", i), Form("phiNotFound_L%d", i), 90, -3.2, 3.2); rowNotFound[i] = new TH1D(Form("rowNotFound_L%d", i), Form("rowNotFound_L%d", i), 128, -0.5, 511.5); etaFound[i] = new TH1D(Form("etaFound_L%d", i), Form("etaFound_L%d", i), 200, -2, 2); etaNotFound[i] = new TH1D(Form("etaNotFound_L%d", i), Form("etaNotFound_L%d", i), 200, -2, 2); @@ -649,8 +649,8 @@ void EfficiencyStudy::init(InitContext& ic) xyIPNotFound[i] = new TH1D(Form("xyIPNotFound_L%d", i), Form("xyIPNotFound_L%d", i), 200, -0.002, 0.002); zIPFound[i] = new TH1D(Form("zIPFound_L%d", i), Form("xyIPFound_L%d", i), 200, -10, 10); zIPNotFound[i] = new TH1D(Form("zIPNotFound_L%d", i), Form("zIPNotFound_L%d", i), 200, -10, 10); - zFound[i] = new TH1D(Form("zFound_L%d", i), Form("zFound_L%d", i), 150, -15, 15); - zNotFound[i] = new TH1D(Form("zNotFound%d", i), Form("zNotFound%d", i), 150, -15, 15); + zFound[i] = new TH1D(Form("zFound_L%d", i), Form("zFound_L%d", i), 100, -15, 15); + zNotFound[i] = new TH1D(Form("zNotFound%d", i), Form("zNotFound%d", i), 100, -15, 15); colFoundOriginalVsDuplicated[i] = new TH2D(Form("colFoundOriginalVsDuplicated_L%d", i), Form("colFoundOriginalVsDuplicated_L%d; Col Original cluster; Col Overlap cluster", i), 9216, -0.5, 9215.5, 9216, -0.5, 9215.5); colFoundOriginal[i] = new TH1D(Form("colFoundOriginal_L%d", i), Form("colFoundOriginal_L%d; Col Original cluster;", i), 9216, -0.5, 9215.5); colNotFound[i] = new TH1D(Form("colNotFound_L%d", i), Form("colNotFound_L%d", i), 9216, -0.5, 9215.5); @@ -668,9 +668,9 @@ void EfficiencyStudy::init(InitContext& ic) mNGoodMatchesEta[i][j] = std::make_unique(Form("mNGoodMatchesEta_L%d_pt%d", i, j), Form("%f < #it{p}_{T} < %f GeV/c; #eta; Number of good matches L%d", mrangesPt[j][0], mrangesPt[j][1], i), 40, -2, 2); mNFakeMatchesEta[i][j] = std::make_unique(Form("mNFakeMatchesEta_L%d_pt%d", i, j), Form("%f < #it{p}_{T} < %f GeV/c; #eta; Number of fake matches L%d", mrangesPt[j][0], mrangesPt[j][1], i), 40, -2, 2); - mDuplicatedPhi[i][j] = std::make_unique(Form("mDuplicatedPhi_L%d_pt%d", i, j), Form("%f < #it{p}_{T} < %f GeV/c; #phi; Number of duplicated clusters L%d", mrangesPt[j][0], mrangesPt[j][1], i), 180, -3.2, 3.2); - mNGoodMatchesPhi[i][j] = std::make_unique(Form("mNGoodMatchesPhi_L%d_pt%d", i, j), Form("%f < #it{p}_{T} < %f GeV/c; #phi; Number of good matches L%d", mrangesPt[j][0], mrangesPt[j][1], i), 180, -3.2, 3.2); - mNFakeMatchesPhi[i][j] = std::make_unique(Form("mNFakeMatchesPhi_L%d_pt%d", i, j), Form("%f < #it{p}_{T} < %f GeV/c; #phi; Number of fake matches L%d", mrangesPt[j][0], mrangesPt[j][1], i), 180, -3.2, 3.2); + mDuplicatedPhi[i][j] = std::make_unique(Form("mDuplicatedPhi_L%d_pt%d", i, j), Form("%f < #it{p}_{T} < %f GeV/c; #phi; Number of duplicated clusters L%d", mrangesPt[j][0], mrangesPt[j][1], i), 90, -3.2, 3.2); + mNGoodMatchesPhi[i][j] = std::make_unique(Form("mNGoodMatchesPhi_L%d_pt%d", i, j), Form("%f < #it{p}_{T} < %f GeV/c; #phi; Number of good matches L%d", mrangesPt[j][0], mrangesPt[j][1], i), 90, -3.2, 3.2); + mNFakeMatchesPhi[i][j] = std::make_unique(Form("mNFakeMatchesPhi_L%d_pt%d", i, j), Form("%f < #it{p}_{T} < %f GeV/c; #phi; Number of fake matches L%d", mrangesPt[j][0], mrangesPt[j][1], i), 90, -3.2, 3.2); } } gStyle->SetPalette(55); @@ -2559,6 +2559,7 @@ void EfficiencyStudy::getEfficiency(bool isMC) auto layerOriginal = mGeometry->getLayer(clusOriginal.getSensorID()); UShort_t rowOriginal = clusOriginal.getRow(); + UShort_t colOriginal = clusOriginal.getCol(); if (clusOriginal.getChipID()>=0 && clusOriginal.getChipID() <= 8) { @@ -2643,7 +2644,7 @@ void EfficiencyStudy::getEfficiency(bool isMC) continue; } - if (abs(clusOriginalPointGlob.z()) >= 10) { ///// removing gap between bottom and top barrels + if (abs(clusOriginalPointGlob.z()) >= 10) { /// removing external z keepTrack = false; continue; } @@ -2844,7 +2845,7 @@ void EfficiencyStudy::getEfficiency(bool isMC) etaNotFound[layerOriginal]->Fill(eta); xyIPNotFound[layerOriginal]->Fill(ip[0]); zIPNotFound[layerOriginal]->Fill(ip[1]); - std::cout << "Not found. Original has col " <Fill(clusOriginal.getRow(), clusOriginalPointGlob.z()); mNumRowCol[layerOriginal]->Fill(clusOriginal.getRow(), clusOriginal.getCol()); numLayers->Fill(layerOriginal); - std::cout<<"++++++++++++++++++++++++++ check positions +++++++++++++++++++"<(mOutFileName.c_str(), "recreate"); - // mXoriginal = std::make_unique("xoriginal", "x original ;x (cm); ", 200, 0, 0); - // mYoriginal = std::make_unique("yoriginal", "y original ;y (cm); ", 200, 0, 0); - // mZoriginal = std::make_unique("zoriginal", "z original ;z (cm); ", 300, 0, 0); - // mXduplicated = std::make_unique("xduplicated", "x duplicated ;x (cm); ", 200, -10, 10); - // mYduplicated = std::make_unique("yduplicated", "y duplicated ;y (cm); ", 200, -10, 10); - // mZduplicated = std::make_unique("zduplicated", "z duplicated ;z (cm); ", 300, -30, 30); - mDCAxyDuplicated = std::make_unique("dcaXYDuplicated", "Distance between track and duplicated cluster ;DCA xy (cm); ", 200, -0.01, 0.01); mDCAzDuplicated = std::make_unique("dcaZDuplicated", "Distance between track and duplicated cluster ;DCA z (cm); ", 200, -0.01, 0.01); @@ -432,33 +355,16 @@ void EfficiencyStudy::init(InitContext& ic) mEfficiencyFakeMatch = std::make_unique("mEfficiencyFakeMatch", ";#sigma(DCA) cut;Efficiency;", 20, 0.5, 20.5); mEfficiencyTotal = std::make_unique("mEfficiencyTotal", ";#sigma(DCA) cut;Efficiency;", 20, 0.5, 20.5); - chi2track = std::make_unique("chi2track", "; $chi^{2}", 500, 0, 100); - chi2trackAccepted = std::make_unique("chi2trackAccepted", "; $chi^{2}", 500, 0, 100); + chi2trackAccepted = std::make_unique("chi2trackAccepted", "; $#chi^{2}", 500, 0, 100); m2DClusterFoundPositions = std::make_unique("m2DClusterFoundPositions", ";x (cm);y (cm)", 250, -5, 5, 250, -5, 5); m2DClusterNotFoundPositions = std::make_unique("m2DClusterNotFoundPositions", ";x (cm);y (cm)", 250, -5, 5, 250, -5, 5); mChipNotFound = std::make_unique("mChipNotFound", ";chipID", 432, 0, 432); mChipFound = std::make_unique("mChipFound", ";chipID", 432, 0, 432); l0_00 = std::make_unique("l0_00", ";col; row", 2304, -0.5, 9215.5, 128, -0.5, 511.5); - l0_01 = std::make_unique("l0_01", ";col; row", 2304, -0.5, 9215.5, 128, -0.5, 511.5); - l0_02 = std::make_unique("l0_02", ";col; row", 2304, -0.5, 9215.5, 128, -0.5, 511.5); - l0_03 = std::make_unique("l0_03", ";col; row", 2304, -0.5, 9215.5, 128, -0.5, 511.5); - l0_04 = std::make_unique("l0_04", ";col; row", 2304, -0.5, 9215.5, 128, -0.5, 511.5); - l0_05 = std::make_unique("l0_05", ";col; row", 2304, -0.5, 9215.5, 128, -0.5, 511.5); - l0_06 = std::make_unique("l0_06", ";col; row", 2304, -0.5, 9215.5, 128, -0.5, 511.5); - l0_07 = std::make_unique("l0_07", ";col; row", 2304, -0.5, 9215.5, 128, -0.5, 511.5); - l0_08 = std::make_unique("l0_08", ";col; row", 2304, -0.5, 9215.5, 128, -0.5, 511.5); - l0_09 = std::make_unique("l0_09", ";col; row", 2304, -0.5, 9215.5, 128, -0.5, 511.5); - l0_10 = std::make_unique("l0_10", ";col; row", 2304, -0.5, 9215.5, 128, -0.5, 511.5); - l0_11 = std::make_unique("l0_11", ";col; row", 2304, -0.5, 9215.5, 512, -0.5, 511.5); l1_15 = std::make_unique("l1_15", ";col; row", 2304, -0.5, 9215.5, 512, -0.5, 511.5); - l2_00 = std::make_unique("l2_00", ";col; row", 2304, -0.5, 9215.5, 512, -0.5, 511.5); - l2_01 = std::make_unique("l2_01", ";col; row", 2304, -0.5, 9215.5, 512, -0.5, 511.5); - l2_02 = std::make_unique("l2_02", ";col; row", 2304, -0.5, 9215.5, 512, -0.5, 511.5); - l2_15 = std::make_unique("l2_15", ";col; row", 2304, -0.5, 9215.5, 512, -0.5, 511.5); l2_19 = std::make_unique("l2_19", ";col; row", 2304, -0.5, 9215.5, 512, -0.5, 511.5); chipOrigVsOverlap = std::make_unique("chipOrigVsOverlap", ";chipID Overlap;chipID Original", 9, 0, 9, 9, 0, 9); - colNotFoundAll = new TH1D("colNotFoundAll", ";col", 1024, 0, 1023); chipmap = std::make_unique("chipmap", ";Column;Row", 1024, 0, 1023, 512, -0.5, 511.5); numLayers = new TH1D("numLayers", "numLayers; ; Efficiency", 3, -0.5, 2.5); @@ -476,23 +382,10 @@ void EfficiencyStudy::init(InitContext& ic) DCAxyRejected[i] = std::make_unique(Form("DCAxyRejected%d", i), "Distance between track and original cluster (rejected) ;DCA xy (cm); ", 30000, -30, 30); DCAzRejected[i] = std::make_unique(Form("DCAzRejected%d", i), "Distance between track and original cluster (rejected) ;DCA z (cm); ", 30000, -30, 30); - DistanceClustersX[i] = std::make_unique(Form("distanceClustersX_L%d", i), ";Distance x (cm); ", 100, 0, 1); - DistanceClustersY[i] = std::make_unique(Form("distanceClustersY_L%d", i), ";Distance y (cm); ", 100, 0, 1); - DistanceClustersZ[i] = std::make_unique(Form("distanceClustersZ_L%d", i), ";Distance z (cm); ", 100, 0, 1); - DistanceClustersXAftercuts[i] = std::make_unique(Form("distanceClustersXAftercuts_L%d", i), ";Distance x (cm); ", 100, 0, 1); - DistanceClustersYAftercuts[i] = std::make_unique(Form("distanceClustersYAftercuts_L%d", i), ";Distance y (cm); ", 100, 0, 1); - DistanceClustersZAftercuts[i] = std::make_unique(Form("distanceClustersZAftercuts_L%d", i), ";Distance z (cm); ", 100, 0, 1); - - mDistanceClustersX[i] = std::make_unique(Form("distanceClustersX_L%d", i), ";Distance x (cm); ", 100, 0, 1); - mDistanceClustersY[i] = std::make_unique(Form("distanceClustersY_L%d", i), ";Distance y (cm); ", 100, 0, 1); - mDistanceClustersZ[i] = std::make_unique(Form("distanceClustersZ_L%d", i), ";Distance z (cm); ", 100, 0, 1); - mDistanceClusters[i] = std::make_unique(Form("distanceClusters_L%d", i), ";Distance (cm); ", 100, 0, 1); - mDCAxyOriginal[i] = std::make_unique(Form("dcaXYOriginal_L%d", i), "Distance between track and original cluster ;DCA xy (cm); ", 200, -0.01, 0.01); mDCAzOriginal[i] = std::make_unique(Form("dcaZOriginal_L%d", i), "Distance between track and original cluster ;DCA z (cm); ", 200, -0.01, 0.01); mPhiOriginal[i] = std::make_unique(Form("phiOriginal_L%d", i), ";phi (rad); ", 90, -3.2, 3.2); - mPhiTrackOriginal[i] = std::make_unique(Form("phiTrackOriginal_L%d", i), ";phi Track (rad); ", 1440, 0, 360); mEtaOriginal[i] = std::make_unique(Form("etaOriginal_L%d", i), ";eta (rad); ", 100, -2, 2); mPtOriginal[i] = std::make_unique(Form("ptOriginal_L%d", i), ";pt (GeV/c); ", 100, 0, 10); @@ -501,10 +394,7 @@ void EfficiencyStudy::init(InitContext& ic) mPtDuplicated[i] = new TH1D(Form("ptDuplicated_L%d", i), ";pt (GeV/c); ", nbPt, 0, 7.5); // xbins); mEtaDuplicated[i] = new TH1D(Form("etaDuplicated_L%d", i), ";eta; ", 40, -2, 2); mPhiDuplicated[i] = new TH1D(Form("phiDuplicated_L%d", i), ";phi (rad); ", 90, -3.2, 3.2); - mPhiTrackDuplicated[i] = new TH1D(Form("phiTrackDuplicated_L%d", i), ";phi Track (rad); ", 1440, 0, 360); mPhiOriginalIfDuplicated[i] = new TH1D(Form("phiOriginalIfDuplicated_L%d", i), ";phi (rad); ", 90, -3.2, 3.2); - mPhiTrackDuplicatedvsphiDuplicated[i] = new TH2D(Form("phiTrackDuplicatedvsphiDuplicated_L%d", i), ";phi track (rad);phi oridinal if duplicated (rad); ", 1440, 0, 360, 90, -3.2, 3.2); - mPhiTrackoriginalvsphioriginal[i] = new TH2D(Form("phiTrackoriginalvsphioriginal_L%d", i), ";phi track (rad);phi original (rad); ", 1440, 0, 360, 90, -3.2, 3.2); mDCAxyDuplicated_layer[i] = std::make_unique(Form("dcaXYDuplicated_layer_L%d", i), "Distance between track and duplicated cluster ;DCA xy (cm); ", 100, -0.01, 0.01); mDCAzDuplicated_layer[i] = std::make_unique(Form("dcaZDuplicated_layer_L%d", i), "Distance between track and duplicated cluster ;DCA z (cm); ", 100, -0.01, 0.01); @@ -519,10 +409,8 @@ void EfficiencyStudy::init(InitContext& ic) mEfficiencyFakeMatchEta_layer[i] = new TH2D(Form("mEfficiencyFakeMatchEta_layer_L%d", i), ";#eta;#sigma(DCA) cut;Efficiency;", 40, -2, 2, 20, 0.5, 20.5); mEfficiencyGoodMatchPhi_layer[i] = new TH2D(Form("mEfficiencyGoodMatchPhi_layer_L%d", i), ";#phi;#sigma(DCA) cut;Efficiency;", 90, -3.2, 3.2, 20, 0.5, 20.5); - mEfficiencyGoodMatchPhiTrack_layer[i] = new TH2D(Form("mEfficiencyGoodMatchPhiTrack_layer_L%d", i), ";#phi track;#sigma(DCA) cut;Efficiency;", 1440, 0, 360, 20, 0.5, 20.5); mEfficiencyGoodMatchPhiOriginal_layer[i] = new TH2D(Form("mEfficiencyGoodMatchPhiOriginal_layer_L%d", i), ";#phi Original;#sigma(DCA) cut;Efficiency;", 90, -3.2, 3.2, 20, 0.5, 20.5); mEfficiencyFakeMatchPhi_layer[i] = new TH2D(Form("mEfficiencyFakeMatchPhi_layer_L%d", i), ";#phi;#sigma(DCA) cut;Efficiency;", 90, -3.2, 3.2, 20, 0.5, 20.5); - mEfficiencyFakeMatchPhiTrack_layer[i] = new TH2D(Form("mEfficiencyFakeMatchPhiTrack_layer_L%d", i), ";#phi Track;#sigma(DCA) cut;Efficiency;", 1440, 0, 360, 20, 0.5, 20.5); mPt_EtaDupl[i] = new TH2D(Form("mPt_EtaDupl_L%d", i), ";#it{p}_{T} (GeV/c);#eta; ", 100, 0, 10, 100, -2, 2); @@ -588,10 +476,8 @@ void EfficiencyStudy::init(InitContext& ic) mnGoodMatchesEta_layer[i] = new TH2D(Form("mnGoodMatchesEta_layer_L%d", i), ";#eta; nGoodMatches", 40, -2, 2, 20, 0.5, 20.5); mnFakeMatchesEta_layer[i] = new TH2D(Form("mnFakeMatchesEta_layer_L%d", i), ";#eta; nFakeMatches", 40, -2, 2, 20, 0.5, 20.5); mnGoodMatchesPhi_layer[i] = new TH2D(Form("mnGoodMatchesPhi_layer_L%d", i), ";#Phi; nGoodMatches", 90, -3.2, 3.2, 20, 0.5, 20.5); - mnGoodMatchesPhiTrack_layer[i] = new TH2D(Form("mnGoodMatchesPhiTrack_layer_L%d", i), ";#Phi track; nGoodMatches", 1440, 0, 360, 20, 0.5, 20.5); mnGoodMatchesPhiOriginal_layer[i] = new TH2D(Form("mnGoodMatchesPhiOriginal_layer_L%d", i), ";#Phi of the original Cluster; nGoodMatches", 90, -3.2, 3.2, 20, 0.5, 20.5); mnFakeMatchesPhi_layer[i] = new TH2D(Form("mnFakeMatchesPhi_layer_L%d", i), ";#Phi; nFakeMatches", 90, -3.2, 3.2, 20, 0.5, 20.5); - mnFakeMatchesPhiTrack_layer[i] = new TH2D(Form("mnFakeMatchesPhiTrack_layer_L%d", i), ";#Phi track; nFakeMatches", 1440, 0, 360, 20, 0.5, 20.5); denPt[i] = new TH1D(Form("denPt_L%d", i), Form("denPt_L%d", i), nbPt, 0, 7.5 /* xbins*/); numPt[i] = new TH1D(Form("numPt_L%d", i), Form("numPt_L%d", i), nbPt, 0, 7.5 /* xbins*/); @@ -632,36 +518,20 @@ void EfficiencyStudy::init(InitContext& ic) mDenRowCol[i] = new TH2D(Form("mDenRowCol_L%d", i), Form("mDenRowCol_L%d", i), 128, -0.5, 511.5, 128, -0.5, 1023.5); mNumRowCol[i] = new TH2D(Form("mNumRowCol_L%d", i), Form("mNumRowCol_L%d", i), 128, -0.5, 511.5, 128, -0.5, 1023.5); - diffPhivsPt[i] = new TH2D(Form("diffPhivsPt_L%d", i), Form("diffPhivsPt_L%d", i), nbPt, 0, 7.5 /* xbins*/, 50, 0, 5); - IPOriginalxy[i] = std::make_unique(Form("IPOriginalxy_L%d", i), Form("IPOriginalxy_L%d", i), 500, -0.002, 0.002); IPOriginalz[i] = std::make_unique(Form("IPOriginalz_L%d", i), Form("IPOriginalz_L%d", i), 200, -10, 10); - IPOriginalifDuplicatedxy[i] = std::make_unique(Form("IPOriginalifDuplicatedxy_L%d", i), Form("IPOriginalifDuplicatedxy_L%d", i), 1000, -0.005, 0.005); - IPOriginalifDuplicatedz[i] = std::make_unique(Form("IPOriginalifDuplicatedz_L%d", i), Form("IPOriginalifDuplicatedz_L%d", i), 200, -10, 10); phiFound[i] = new TH1D(Form("phiFound_L%d", i), Form("phiFound_L%d", i), 190, -3.2, 3.2); rowFound[i] = new TH1D(Form("rowFound_L%d", i), Form("rowFound_L%d", i), 128, -0.5, 511.5); phiNotFound[i] = new TH1D(Form("phiNotFound_L%d", i), Form("phiNotFound_L%d", i), 90, -3.2, 3.2); rowNotFound[i] = new TH1D(Form("rowNotFound_L%d", i), Form("rowNotFound_L%d", i), 128, -0.5, 511.5); - etaFound[i] = new TH1D(Form("etaFound_L%d", i), Form("etaFound_L%d", i), 200, -2, 2); - etaNotFound[i] = new TH1D(Form("etaNotFound_L%d", i), Form("etaNotFound_L%d", i), 200, -2, 2); - xyIPFound[i] = new TH1D(Form("xyIPFound_L%d", i), Form("xyIPFound_L%d", i), 200, -0.002, 0.002); - xyIPNotFound[i] = new TH1D(Form("xyIPNotFound_L%d", i), Form("xyIPNotFound_L%d", i), 200, -0.002, 0.002); - zIPFound[i] = new TH1D(Form("zIPFound_L%d", i), Form("xyIPFound_L%d", i), 200, -10, 10); - zIPNotFound[i] = new TH1D(Form("zIPNotFound_L%d", i), Form("zIPNotFound_L%d", i), 200, -10, 10); zFound[i] = new TH1D(Form("zFound_L%d", i), Form("zFound_L%d", i), 100, -15, 15); zNotFound[i] = new TH1D(Form("zNotFound%d", i), Form("zNotFound%d", i), 100, -15, 15); colFoundOriginalVsDuplicated[i] = new TH2D(Form("colFoundOriginalVsDuplicated_L%d", i), Form("colFoundOriginalVsDuplicated_L%d; Col Original cluster; Col Overlap cluster", i), 9216, -0.5, 9215.5, 9216, -0.5, 9215.5); colFoundOriginal[i] = new TH1D(Form("colFoundOriginal_L%d", i), Form("colFoundOriginal_L%d; Col Original cluster;", i), 9216, -0.5, 9215.5); colNotFound[i] = new TH1D(Form("colNotFound_L%d", i), Form("colNotFound_L%d", i), 9216, -0.5, 9215.5); - radiusFound[i] = new TH1D(Form("radiusFound_L%d", i), Form("radiusFound_L%d", i), 80, 0, 4); - xFound[i] = new TH1D(Form("xFound_L%d", i), Form("xFound_L%d", i), 80, 0, 4); - yFound[i] = new TH1D(Form("yFound_L%d", i), Form("yFound_L%d", i), 80, 0, 4); + radiusFound[i] = new TH1D(Form("radiusFound_L%d", i), Form("radiusFound_L%d", i), 80, 0, 6); radiusNotFound[i] = new TH1D(Form("radiusNotFound_L%d", i), Form("radiusNotFound_L%d", i), 80, 0, 4); - xNotFound[i] = new TH1D(Form("xNotFound_L%d", i), Form("xNotFound_L%d", i), 80, 0, 4); - yNotFound[i] = new TH1D(Form("yNotFound_L%d", i), Form("yNotFound_L%d", i), 80, 0, 4); - - // mEfficiencyColEta[i] = new TH2D(Form("mEfficiencyColEta_L%d", i), Form("mEfficiencyColEta_L%d;Column;#eta", i), 1024, 0, 1023, 20, -1,1); for (int j = 0; j < 3; j++) { mDuplicatedEta[i][j] = std::make_unique(Form("mDuplicatedEta_L%d_pt%d", i, j), Form("%f < #it{p}_{T} < %f GeV/c; #eta; Number of duplicated clusters L%d", mrangesPt[j][0], mrangesPt[j][1], i), 40, -2, 2); @@ -759,7 +629,7 @@ int EfficiencyStudy::getDCAClusterTrackMC(int countDuplicated = 0) continue; } - float ip[2]; + float ip[2]; // IP from 0,0,0 and the track should be the deplacement of the primary vertex track.getImpactParams(0, 0, 0, 0, ip); // if (abs(ip[0])>0.001 ) continue; ///pv not in (0,0,0) @@ -772,8 +642,6 @@ int EfficiencyStudy::getDCAClusterTrackMC(int countDuplicated = 0) auto pt = trackParCov.getPt(); auto eta = trackParCov.getEta(); - float phiTrack = trackParCov.getPhi(); // * 180 / M_PI; - // if (pt < mPtCuts[0] || pt > mPtCuts[1]) { // continue; // } @@ -803,7 +671,6 @@ int EfficiencyStudy::getDCAClusterTrackMC(int countDuplicated = 0) o2::math_utils::Point3D clusOriginalPointGlob = mGeometry->getMatrixT2G(clusOriginal.getSensorID()) * clusOriginalPointTrack; phioriginal = clusOriginalPointGlob.phi();// * 180 / M_PI; - mPhiTrackoriginalvsphioriginal[layer]->Fill(phiTrack, phioriginal); mPhiOriginal[layer]->Fill(phioriginal); mPtOriginal[layer]->Fill(pt); @@ -871,8 +738,6 @@ int EfficiencyStudy::getDCAClusterTrackMC(int countDuplicated = 0) mEtaDuplicated[layerClus]->Fill(eta); mPhiDuplicated[layerClus]->Fill(phiduplicated); mZvsPhiDUplicated[layerClus]->Fill(clusDuplicatedPointGlob.Z(), phiduplicated); - mPhiTrackDuplicated[layerClus]->Fill(phiTrack); - mPhiTrackDuplicatedvsphiDuplicated[layerClus]->Fill(phiTrack, phioriginal); mPhiOriginalIfDuplicated[layerClus]->Fill(phioriginal); } @@ -900,12 +765,6 @@ int EfficiencyStudy::getDCAClusterTrackMC(int countDuplicated = 0) m3DClusterPositions->Fill(clusDuplicatedPointGlob.x(), clusDuplicatedPointGlob.y(), clusDuplicatedPointGlob.z()); m2DClusterDuplicatedPositions->Fill(clusDuplicatedPointGlob.x(), clusDuplicatedPointGlob.y()); - /// compute the distance between original and dubplicated cluster - mDistanceClustersX[layerClus]->Fill(abs(clusOriginalPointGlob.x() - clusDuplicatedPointGlob.x())); - mDistanceClustersY[layerClus]->Fill(abs(clusOriginalPointGlob.y() - clusDuplicatedPointGlob.y())); - mDistanceClustersZ[layerClus]->Fill(abs(clusOriginalPointGlob.z() - clusDuplicatedPointGlob.z())); - mDistanceClusters[layerClus]->Fill(std::hypot(clusOriginalPointGlob.x() - clusDuplicatedPointGlob.x(), clusOriginalPointGlob.y() - clusDuplicatedPointGlob.y(), clusOriginalPointGlob.z() - clusDuplicatedPointGlob.z())); - /// Compute the DCA between the cluster location and the track /// first propagate to the original cluster @@ -1002,7 +861,6 @@ void EfficiencyStudy::countDuplicatedAfterCuts() rofNEntriesClus = mClustersROFRecords[iROF].getNEntries(); for (unsigned int iTrack = rofIndexTrack; iTrack < rofIndexTrack + rofNEntriesTrack; iTrack++) { // loop on tracks per ROF - // std::cout<<"Track number: "< mPtCuts[1]) { - continue; - } + // applying the cuts on the track - only eta + if (eta < mEtaCuts[0] || eta >= mEtaCuts[1]) { continue; - } + } float phi = -999.; float phiOriginal = -999.; @@ -1049,49 +904,25 @@ void EfficiencyStudy::countDuplicatedAfterCuts() o2::math_utils::Point3D clusOriginalPointGlob = mGeometry->getMatrixT2G(clusOriginal.getSensorID()) * clusOriginalPointTrack; phiOriginal = clusOriginalPointGlob.phi();// * 180 / M_PI; - bool keepTrack = true; - if (abs(clusOriginalPointGlob.y()) < 0.5) { ///// removing gap between bottom and top barrels - keepTrack = false; + if (abs(clusOriginalPointGlob.y()) < 0.5) { ///// excluding gap between bottom and top barrels continue; } - if (clusOriginal.getRow() > 5 && clusOriginal.getRow() < 506) { //// trying cutting on the row - keepTrack = false; + if (abs(clusOriginalPointGlob.z()) >= 10) { /// excluding external z continue; } - /// applying the cuts on the phi of the original cluster - /// wether or not a cluster is found in an eligible track in the corresponding layer - - // if (layerOriginal == 0) { - // for (int i = 0; i < 10; i++) { - // if ((phiOriginal >= mPhiCutsL0[i][0] && phiOriginal <= mPhiCutsL0[i][1])) { - // possibleduplicated[0]++; - // keepTrack = true; - // } - // } - // } - // if (layerOriginal == 1) { - // for (int i = 0; i < 12; i++) { - // if ((phiOriginal >= mPhiCutsL1[i][0] && phiOriginal <= mPhiCutsL1[i][1])) { - // possibleduplicated[1]++; - // keepTrack = true; - // } - // } - // } - // if (layerOriginal == 2) { - // for (int i = 0; i < 17; i++) { - // if ((phiOriginal >= mPhiCutsL2[i][0] && phiOriginal <= mPhiCutsL2[i][1])) { - // possibleduplicated[2]++; - // keepTrack = true; - // } - // } - // } - - if (!keepTrack) { - continue; /// if the track (cluster) is not eligible for any layer, go to the next one + + if (clusOriginal.getRow() <2 || (clusOriginal.getRow() > 15 && clusOriginal.getRow() < 496) || clusOriginal.getRow()>509) { //// cutting on the row + continue; } + + if (clusOriginal.getCol() <160 || clusOriginal.getCol() >870){ /// excluding the gap between two chips in the same stave (comment to obtain the plot efficiency col vs eta) + continue; + } + + for (auto& labT : labsTrack) { // for each valid label iterate over ALL the clusters in the ROF to see if there are duplicates if (labT != tracklab) { continue; @@ -1138,7 +969,7 @@ void EfficiencyStudy::countDuplicatedAfterCuts() } duplicated[layer]++; - std::cout << "Taken L" << layer << " # " << duplicated[layer] << " : pt, eta, phi = " << pt << " , " << eta << " , " << phiOriginal << " Label: " << std::endl; + std::cout << "Taken L" << layer << " # " << duplicated[layer] << " : eta, phi = " << eta << " , " << phiOriginal << " Label: " << std::endl; labC.print(); } } @@ -1233,15 +1064,6 @@ void EfficiencyStudy::studyDCAcutsMC() float ip[2]; track.getImpactParams(0, 0, 0, 0, ip); - if (pt < mPtCuts[0] || pt > mPtCuts[1]) { - continue; - } - if (eta < mEtaCuts[0] || eta >= mEtaCuts[1]) { - continue; - } - - float phiTrack = trackParCov.getPhi(); // * 180 / M_PI; - float phi = -999.; float phiOriginal = -999.; int firstClus = track.getFirstClusterEntry(); // get the first cluster of the track @@ -1348,7 +1170,6 @@ void EfficiencyStudy::studyDCAcutsMC() mnGoodMatchesPt_layer[layerDuplicated]->Fill(pt, i); mnGoodMatchesEta_layer[layerDuplicated]->Fill(eta, i); mnGoodMatchesPhi_layer[layerDuplicated]->Fill(phi, i); - mnGoodMatchesPhiTrack_layer[layerDuplicated]->Fill(phiTrack, i); mnGoodMatchesPhiOriginal_layer[layerDuplicated]->Fill(phiOriginal, i); } else { @@ -1357,7 +1178,6 @@ void EfficiencyStudy::studyDCAcutsMC() mnFakeMatchesPt_layer[layerDuplicated]->Fill(pt, i); mnFakeMatchesEta_layer[layerDuplicated]->Fill(eta, i); mnFakeMatchesPhi_layer[layerDuplicated]->Fill(phi, i); - mnFakeMatchesPhiTrack_layer[layerDuplicated]->Fill(phiTrack, i); } } else if (mVerboseOutput) { LOGP(info, "Check DCA failed"); @@ -1409,13 +1229,6 @@ void EfficiencyStudy::studyDCAcutsMC() mEfficiencyGoodMatchPhiOriginal_layer[l]->SetBinContent(iphi + 1, i + 1, mnGoodMatchesPhiOriginal_layer[l]->GetBinContent(iphi + 1, i + 1) / mPhiOriginalIfDuplicated[l]->GetBinContent(iphi + 1)); } } - - for (int iphi = 0; iphi < mPhiTrackDuplicated[l]->GetNbinsX(); iphi++) { - if (mPhiTrackDuplicated[l]->GetBinContent(iphi + 1) != 0) { - mEfficiencyGoodMatchPhiTrack_layer[l]->SetBinContent(iphi + 1, i + 1, mnGoodMatchesPhiTrack_layer[l]->GetBinContent(iphi + 1, i + 1) / mPhiTrackDuplicated[l]->GetBinContent(iphi + 1)); - } - mEfficiencyFakeMatchPhiTrack_layer[l]->SetBinContent(iphi + 1, i + 1, mnFakeMatchesPhiTrack_layer[l]->GetBinContent(iphi + 1, i + 1) / mPhiTrackDuplicated[l]->GetBinContent(iphi + 1)); - } } } for (int i = 0; i < NLAYERS; i++) { @@ -1441,8 +1254,6 @@ void EfficiencyStudy::studyDCAcutsMC() mEfficiencyGoodMatchEta_layer[l]->Write(); mEfficiencyGoodMatchPhi_layer[l]->GetZaxis()->SetRangeUser(0, 1); mEfficiencyGoodMatchPhi_layer[l]->Write(); - mEfficiencyGoodMatchPhiTrack_layer[l]->GetZaxis()->SetRangeUser(0, 1); - mEfficiencyGoodMatchPhiTrack_layer[l]->Write(); mEfficiencyGoodMatchPhiOriginal_layer[l]->GetZaxis()->SetRangeUser(0, 1); mEfficiencyGoodMatchPhiOriginal_layer[l]->Write(); mEfficiencyFakeMatchPt_layer[l]->GetZaxis()->SetRangeUser(0, 1); @@ -1451,8 +1262,6 @@ void EfficiencyStudy::studyDCAcutsMC() mEfficiencyFakeMatchEta_layer[l]->Write(); mEfficiencyFakeMatchPhi_layer[l]->GetZaxis()->SetRangeUser(0, 1); mEfficiencyFakeMatchPhi_layer[l]->Write(); - mEfficiencyFakeMatchPhiTrack_layer[l]->GetZaxis()->SetRangeUser(0, 1); - mEfficiencyFakeMatchPhiTrack_layer[l]->Write(); } mOutFile->mkdir("Efficiency/"); @@ -1487,7 +1296,6 @@ void EfficiencyStudy::studyDCAcutsMC() mEfficiencyTotal->Draw("same P l E1_NOSTAT PLC PMC"); leg->Draw("same"); c.Write(); - c.SaveAs("prova.png"); TCanvas cc[NLAYERS]; for (int l = 0; l < NLAYERS; l++) { @@ -1510,12 +1318,12 @@ void EfficiencyStudy::studyDCAcutsMC() mEfficiencyTotal_layer[l]->Draw("same P l E1_NOSTAT"); leg->Draw("same"); cc[l].Write(); - cc[l].SaveAs(Form("provaLayer%d.png", l)); } } void EfficiencyStudy::studyClusterSelectionMC() { + //// to be used only with MC // study to find a good selection method for the duplicated cluster, to be used for non-MC data // iterate over tracks an associated clusters, and find the closer cluster that is not the original one applying cuts on staveID and chipID // fix the DCA < 10 sigma, then compute the efficiency for each bin of pt, eta and phi and also in the rows @@ -1590,14 +1398,6 @@ void EfficiencyStudy::studyClusterSelectionMC() auto pt = trackParCov.getPt(); auto eta = trackParCov.getEta(); - // if (pt < mPtCuts[0] || pt > mPtCuts[1]) { - // continue; - // } - // if (eta < mEtaCuts[0] || eta > mEtaCuts[1]) { - // continue; - // } - - // auto phi = trackParCov.getPhi()*180/M_PI; float phi = -999.; float phiOriginal = -999.; float phiDuplicated = -999.; @@ -1608,7 +1408,6 @@ void EfficiencyStudy::studyClusterSelectionMC() tracklab.print(); } for (int iclTrack = firstClus; iclTrack < firstClus + ncl; iclTrack++) { // loop on clusters associated to the track to extract layer, stave and chip to restrict the possible matches to be searched with the DCA cut - // LOGP(info, "New cluster"); auto& clusOriginal = mClusters[mInputITSidxs[iclTrack]]; auto layerOriginal = mGeometry->getLayer(clusOriginal.getSensorID()); if (layerOriginal >= NLAYERS) { @@ -1671,7 +1470,6 @@ void EfficiencyStudy::studyClusterSelectionMC() } // Imposing that the distance between the original cluster and the duplicated one is less than x sigma - // if (!(abs(meanDCAxyDuplicated[layerDuplicated] - clusDuplicatedDCA[0]) < 8 * sigmaDCAxyDuplicated[layerDuplicated] && abs(meanDCAzDuplicated[layerDuplicated] - clusDuplicatedDCA[1]) < 8 * sigmaDCAzDuplicated[layerDuplicated])) { if (!(clusDuplicatedDCA[0] > mDCACutsXY[layerDuplicated][0] && clusDuplicatedDCA[0] < mDCACutsXY[layerDuplicated][1] && clusDuplicatedDCA[1] > mDCACutsZ[layerDuplicated][0] && clusDuplicatedDCA[1] < mDCACutsZ[layerDuplicated][1])) { continue; } @@ -1702,9 +1500,6 @@ void EfficiencyStudy::studyClusterSelectionMC() for (auto lab : std::get<2>(clusID_rDCA_label)) { if (lab == tracklab) { isGood = true; - diffPhivsPt[layerOriginal]->Fill(pt, abs(phi - phiOriginal)); - IPOriginalifDuplicatedxy[layerOriginal]->Fill(ip[0]); - IPOriginalifDuplicatedz[layerOriginal]->Fill(ip[1]); mNGoodMatchesPt[layerOriginal]->Fill(pt); mNGoodMatchesRow[layerOriginal]->Fill(row); @@ -1752,7 +1547,7 @@ void EfficiencyStudy::studyClusterSelectionMC() mOutFile->mkdir("EfficiencyCuts/"); mOutFile->cd("EfficiencyCuts/"); - std::cout << "------Calculatin efficiency..." << std::endl; + std::cout << "Calculating efficiency..." << std::endl; TH1D* axpt = new TH1D("axpt", "", 1, 0.05, 7.5); TH1D* axRow = new TH1D("axRow", "", 1, -0.5, 511.5); TH1D* axCol = new TH1D("axRow", "", 1, -0.5, 1023.5); @@ -1790,10 +1585,6 @@ void EfficiencyStudy::studyClusterSelectionMC() std::cout << "Pt L" << l << "\n\n"; } - diffPhivsPt[l]->Write(); - IPOriginalifDuplicatedxy[l]->Write(); - IPOriginalifDuplicatedz[l]->Write(); - // Pt effPt[l] = new TCanvas(Form("effPt_L%d", l)); @@ -1951,9 +1742,6 @@ void EfficiencyStudy::studyClusterSelectionMC() legZ->Draw("same"); effZ[l]->Write(); - - - // PtEtaGood effPtEta[l][0] = new TCanvas(Form("effPtEtaGood_L%d", l)); @@ -2358,7 +2146,6 @@ void EfficiencyStudy::studyClusterSelectionMC() effEtaAll->Write(); - /// all Phi TCanvas* effPhiAll = new TCanvas("effPhiAll"); TH1D* numPhiGoodAll = (TH1D*)mNGoodMatchesPhiAllPt[0]->Clone("numPhiGoodAll"); @@ -2389,89 +2176,15 @@ void EfficiencyStudy::studyClusterSelectionMC() legPhi->AddEntry(mEffPhiFakeAll.get(), "#frac{# fake matches}{# tot duplicated clusters}", "pl"); legPhi->Draw("same"); effPhiAll->Write(); - - - // TCanvas* effZAll = new TCanvas("effZAll"); - -} - -void EfficiencyStudy::saveDataInfo() -{ - // save histograms for data (phi, eta, pt,...) - LOGP(info, "--------------- saveDataInfo"); - - unsigned int rofIndexTrack = 0; - unsigned int rofNEntriesTrack = 0; - unsigned int rofIndexClus = 0; - unsigned int rofNEntriesClus = 0; - unsigned int totClus = 0; - - for (unsigned int iROF = 0; iROF < mTracksROFRecords.size(); iROF++) { // loop on ROFRecords array - rofIndexTrack = mTracksROFRecords[iROF].getFirstEntry(); - rofNEntriesTrack = mTracksROFRecords[iROF].getNEntries(); - - rofIndexClus = mClustersROFRecords[iROF].getFirstEntry(); - rofNEntriesClus = mClustersROFRecords[iROF].getNEntries(); - - for (unsigned int iTrack = rofIndexTrack; iTrack < rofIndexTrack + rofNEntriesTrack; iTrack++) { // loop on tracks per ROF - auto track = mTracks[iTrack]; - o2::track::TrackParCov trackParCov = mTracks[iTrack]; - int firstClus = track.getFirstClusterEntry(); // get the first cluster of the track - int ncl = track.getNumberOfClusters(); // get the number of clusters of the track - - if (ncl < 7) { - continue; - } - float ip[2]; - track.getImpactParams(0, 0, 0, 0, ip); - - auto pt = trackParCov.getPt(); - auto eta = trackParCov.getEta(); - - float phiTrack = trackParCov.getPhi(); // * 180 / M_PI; - - // if (pt < mPtCuts[0] || pt > mPtCuts[1]) continue; - // if (eta < mEtaCuts[0] || eta > mEtaCuts[1]) continue; - - float phioriginal = 0; - float phiduplicated = 0; - - for (int iclTrack = firstClus; iclTrack < firstClus + ncl; iclTrack++) { // loop on clusters associated to the track - auto& clusOriginal = mClusters[mInputITSidxs[iclTrack]]; - auto clusOriginalPoint = mITSClustersArray[mInputITSidxs[iclTrack]]; // cluster spacepoint in the tracking system - auto staveOriginal = mGeometry->getStave(clusOriginal.getSensorID()); - auto chipOriginal = mGeometry->getChipIdInStave(clusOriginal.getSensorID()); - - auto layer = mGeometry->getLayer(clusOriginal.getSensorID()); - if (layer >= NLAYERS) { - continue; // checking only selected layers - } - - o2::math_utils::Point3D clusOriginalPointTrack = {clusOriginalPoint.getX(), clusOriginalPoint.getY(), clusOriginalPoint.getZ()}; - o2::math_utils::Point3D clusOriginalPointGlob = mGeometry->getMatrixT2G(clusOriginal.getSensorID()) * clusOriginalPointTrack; - - phioriginal = clusOriginalPointGlob.phi(); // * 180 / M_PI; - - mPhiOriginal[layer]->Fill(phioriginal); - mPhiTrackOriginal[layer]->Fill(phiTrack); - mPtOriginal[layer]->Fill(pt); - mEtaOriginal[layer]->Fill(eta); - m3DClusterPositions->Fill(clusOriginalPointGlob.x(), clusOriginalPointGlob.y(), clusOriginalPointGlob.z()); - m2DClusterOriginalPositions->Fill(clusOriginalPointGlob.x(), clusOriginalPointGlob.y()); - } // end loop on clusters - totClus += ncl; - } // end loop on tracks per ROF - } // end loop on ROFRecords array - LOGP(info, "Total number of clusters: {} ", totClus); } void EfficiencyStudy::getEfficiency(bool isMC) { // Extract the efficiency for the IB, exploiting the staves overlaps and the duplicated clusters for the tracks passing through the overlaps - // The denominator for the efficiency calculation will be the number of tracks per layer fulfilling some cuts (DCA, phi, eta, pt) + // The denominator for the efficiency calculation will be the number of tracks per layer fulfilling some cuts (eta, z, row, col) // The numerator will be the number of duplicated clusters for the tracks passing through the overlaps - LOGP(info, "--------------- getEfficiency"); + LOGP(info, "getEfficiency()"); o2::base::Propagator::MatCorrType matCorr = o2::base::Propagator::MatCorrType::USEMatCorrLUT; o2::gpu::gpustd::array clusOriginalDCA, clusDuplicatedDCA; @@ -2481,8 +2194,6 @@ void EfficiencyStudy::getEfficiency(bool isMC) unsigned int rofNEntriesTrack = 0; unsigned int rofIndexClus = 0; unsigned int rofNEntriesClus = 0; - int nLabels = 0; - unsigned int totClus = 0; int nbPt = 75; double xbins[nbPt + 1], ptcutl = 0.05, ptcuth = 7.5; @@ -2494,7 +2205,6 @@ void EfficiencyStudy::getEfficiency(bool isMC) int totNClusters; int nDuplClusters; - // denominator fot the efficiency calculation for (unsigned int iROF = 0; iROF < mTracksROFRecords.size(); iROF++) { // loop on ROFRecords array rofIndexTrack = mTracksROFRecords[iROF].getFirstEntry(); @@ -2508,7 +2218,7 @@ void EfficiencyStudy::getEfficiency(bool isMC) auto track = mTracks[iTrack]; o2::track::TrackParCov trackParCov = mTracks[iTrack]; - auto pt = trackParCov.getPt(); + auto pt = trackParCov.getPt(); // Always 0.6 GeV/c for B = 0 T auto eta = trackParCov.getEta(); float phi = -999.; float phiOriginal = -999.; @@ -2518,24 +2228,17 @@ void EfficiencyStudy::getEfficiency(bool isMC) float ip[2]; track.getImpactParams(0, 0, 0, 0, ip); - float phiTrack = trackParCov.getPhi(); // * 180 / M_PI; + // float phiTrack = trackParCov.getPhi(); // * 180 / M_PI; - // applying the cuts on the track - only pt and eta, and chi2 cuts since for phi(cluster) the layer is needed - // if (pt < mPtCuts[0] || pt > mPtCuts[1]) { - // continue; - // } + // applying the cuts on the track - only eta if (eta < mEtaCuts[0] || eta >= mEtaCuts[1]) { continue; } - // if (chi2 > mChi2cut) { - // continue; - // } - - /// the cut on phi, since it is layer-dependent, can be applied only after finding the cluster and then the layer - + int firstClus = track.getFirstClusterEntry(); // get the first cluster of the track int ncl = track.getNumberOfClusters(); // get the number of clusters of the track + //// keeping only 7 clusters track to reduce fakes if (ncl < 7) { continue; } @@ -2549,7 +2252,7 @@ void EfficiencyStudy::getEfficiency(bool isMC) } if (mVerboseOutput && isMC) { - LOGP(info, "--------- track Label: "); + LOGP(info, "track Label: "); tracklab.print(); } @@ -2561,62 +2264,18 @@ void EfficiencyStudy::getEfficiency(bool isMC) UShort_t rowOriginal = clusOriginal.getRow(); UShort_t colOriginal = clusOriginal.getCol(); - + /// filling some chip maps if (clusOriginal.getChipID()>=0 && clusOriginal.getChipID() <= 8) { l0_00->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); } - if (clusOriginal.getChipID()>=9 && clusOriginal.getChipID() <= 17) { - l0_01->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); - } - if (clusOriginal.getChipID()>=18 && clusOriginal.getChipID() <= 26) { - l0_02->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); - } - if (clusOriginal.getChipID()>=27 && clusOriginal.getChipID() <= 35) { - l0_03->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); - } - if (clusOriginal.getChipID()>=36 && clusOriginal.getChipID() <= 44) { - l0_04->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); - } - if (clusOriginal.getChipID()>=45 && clusOriginal.getChipID() <= 53) { - l0_05->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); - } - if (clusOriginal.getChipID()>=54 && clusOriginal.getChipID() <= 62) { - l0_06->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); - } - if (clusOriginal.getChipID()>=63 && clusOriginal.getChipID() <= 71) { - l0_07->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); - } - if (clusOriginal.getChipID()>=72 && clusOriginal.getChipID() <= 80) { - l0_08->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); - } - if (clusOriginal.getChipID()>=81 && clusOriginal.getChipID() <= 89) { - l0_09->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); - } - if (clusOriginal.getChipID()>=90 && clusOriginal.getChipID() <= 98) { - l0_10->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); - } - if (clusOriginal.getChipID()>=99 && clusOriginal.getChipID() <= 107) { - l0_11->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); - } if (clusOriginal.getChipID()>=252 && clusOriginal.getChipID() <= 260) { l1_15->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); } - if (clusOriginal.getChipID()>=261 && clusOriginal.getChipID() <= 269) { - l2_00->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); - } - if (clusOriginal.getChipID()>=270 && clusOriginal.getChipID() <= 278) { - l2_01->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); - } - if (clusOriginal.getChipID()>=279 && clusOriginal.getChipID() <= 287) { - l2_02->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); - } - if (clusOriginal.getChipID()>=414 && clusOriginal.getChipID() <= 422) { - l2_15->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); - } if (clusOriginal.getChipID()>=423 && clusOriginal.getChipID() <= 431) { l2_19->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); } + //// only IB if (layerOriginal >= NLAYERS) { continue; } @@ -2626,94 +2285,50 @@ void EfficiencyStudy::getEfficiency(bool isMC) IPOriginalxy[layerOriginal]->Fill(ip[0]); IPOriginalz[layerOriginal]->Fill(ip[1]); + ///// cluster point and conversion from track local coordinates to global coordinates o2::math_utils::Point3D clusOriginalPointTrack = {clusOriginalPoint.getX(), clusOriginalPoint.getY(), clusOriginalPoint.getZ()}; o2::math_utils::Point3D clusOriginalPointGlob = mGeometry->getMatrixT2G(clusOriginal.getSensorID()) * clusOriginalPointTrack; - // phiOriginal = std::(clusOriginalPointGlob.y(), clusOriginalPointGlob.x()) * 180 / M_PI + 180; phiOriginal = clusOriginalPointGlob.phi();// * 180 / M_PI; - // mXoriginal->Fill(clusOriginalPointGlob.x()); - // mYoriginal->Fill(clusOriginalPointGlob.y()); - // mZoriginal->Fill(clusOriginalPointGlob.z()); - - - bool keepTrack = true; /// wether or not a cluster is found in an eligible track in the corresponding layer - - - if (abs(clusOriginalPointGlob.y()) < 0.5) { ///// removing gap between bottom and top barrels - keepTrack = false; + if (abs(clusOriginalPointGlob.y()) < 0.5) { ///// excluding gap between bottom and top barrels continue; - } + } - if (abs(clusOriginalPointGlob.z()) >= 10) { /// removing external z - keepTrack = false; + if (abs(clusOriginalPointGlob.z()) >= 10) { /// excluding external z continue; } if (rowOriginal <2 || (rowOriginal > 15 && rowOriginal < 496) || rowOriginal>509) { //// cutting on the row - keepTrack = false; continue; } - if (mUseMC){ + if (mUseMC){ //// excluding known bad chips in MC which are not bad in data --- to be checked based on the anchored run if (std::find(mExcludedChipMC->begin(), mExcludedChipMC->end(), clusOriginal.getChipID()) != mExcludedChipMC->end()) { continue; } } - if (clusOriginal.getCol() <160 || clusOriginal.getCol() >870){ + if (clusOriginal.getCol() <160 || clusOriginal.getCol() >870){ /// excluding the gap between two chips in the same stave (comment to obtain the plot efficiency col vs eta) continue; } - - - // std::cout<<" Layer: "<Fill(clusOriginalPointGlob.x(), clusOriginalPointGlob.y()); m3DClusterPositions->Fill(clusOriginalPointGlob.x(), clusOriginalPointGlob.y(), clusOriginalPointGlob.z()); - - /// applying the cuts on the phi of the original cluster - // bool keepTrack = true; /// wether or not a cluster is found in an eligible track in the corresponding layer - // if (layerOriginal == 0) { - - // for (int i = 0; i < 10; i++) { - // if ((phiOriginal >= mPhiCutsL0[i][0] && phiOriginal <= mPhiCutsL0[i][1])) { - // keepTrack = true; - // } - // } - // } - // if (layerOriginal == 1) { - // for (int i = 0; i < 12; i++) { - // if ((phiOriginal >= mPhiCutsL1[i][0] && phiOriginal <= mPhiCutsL1[i][1])) { - // keepTrack = true; - // } - // } - // } - // if (layerOriginal == 2) { - // for (int i = 0; i < 17; i++) { - // if ((phiOriginal >= mPhiCutsL2[i][0] && phiOriginal <= mPhiCutsL2[i][1])) { - // keepTrack = true; - // } - // } - // } - - ///////////////////////////////////// - if (!(keepTrack)) { - continue; /// if the track (cluster) is not eligible for any layer, go to the next one - } else { /// fill the den and go ahead - chi2trackAccepted->Fill(chi2); - denPt[layerOriginal]->Fill(pt); - denPhi[layerOriginal]->Fill(phiOriginal); - denEta[layerOriginal]->Fill(eta); - denRow[layerOriginal]->Fill(rowOriginal); - denCol[layerOriginal]->Fill(clusOriginal.getCol()); - denZ[layerOriginal]->Fill(clusOriginalPointGlob.z()); - nTracksSelected[layerOriginal]++; - mDenColEta[layerOriginal]->Fill(clusOriginal.getCol(), eta); - mDenRowPhi[layerOriginal]->Fill(clusOriginal.getRow(), clusOriginalPointGlob.z()); - mDenRowCol[layerOriginal]->Fill(clusOriginal.getRow(), clusOriginal.getCol()); - denLayers->Fill(layerOriginal); - } + chi2trackAccepted->Fill(chi2); + denPt[layerOriginal]->Fill(pt); + denPhi[layerOriginal]->Fill(phiOriginal); + denEta[layerOriginal]->Fill(eta); + denRow[layerOriginal]->Fill(rowOriginal); + denCol[layerOriginal]->Fill(clusOriginal.getCol()); + denZ[layerOriginal]->Fill(clusOriginalPointGlob.z()); + nTracksSelected[layerOriginal]++; + mDenColEta[layerOriginal]->Fill(clusOriginal.getCol(), eta); + mDenRowPhi[layerOriginal]->Fill(clusOriginal.getRow(), clusOriginalPointGlob.z()); + mDenRowCol[layerOriginal]->Fill(clusOriginal.getRow(), clusOriginal.getCol()); + denLayers->Fill(layerOriginal); + /// if the cuts up to here are passed, then search for the duplicated cluster, otherwise go to the next cluster gsl::span labsOriginal = {}; @@ -2733,19 +2348,16 @@ void EfficiencyStudy::getEfficiency(bool isMC) float clusZ = -999.; o2::itsmft::CompClusterExt clusDuplicatedSelected = o2::itsmft::CompClusterExt(); - /// for each original cluster iterate over all the possible duplicated clusters to see first wether increment or not the denominator (if a track has a possible duplicated cluster in the selected phi region) - /// then if the phi is within the cuts, select the "adjacent" clusters (stave +-1, chip =,+-1) and calculate the DCA with the track. Then choose the closest one. - // std::cout<<"Loop on clusters 2"< clusDuplicatedPointTrack = {clusDuplicatedPoint.getX(), clusDuplicatedPoint.getY(), clusDuplicatedPoint.getZ()}; o2::math_utils::Point3D clusDuplicatedPointGlob = mGeometry->getMatrixT2G(clusDuplicated.getSensorID()) * clusDuplicatedPointTrack; phi = clusDuplicatedPointGlob.phi();// * 180 / M_PI; - //// applying constraints: the cluster should be on the same layer, should be on an adjacent stave and on the same or adjacent chip position if (clusDuplicated.getSensorID() == clusOriginal.getSensorID()) { continue; @@ -2777,17 +2389,12 @@ void EfficiencyStudy::getEfficiency(bool isMC) DCAxyData[layerDuplicated]->Fill(clusDuplicatedDCA[0]); DCAzData[layerDuplicated]->Fill(clusDuplicatedDCA[1]); - // std::cout<<"DCA: "<Fill(abs(clusDuplicatedPointGlob.x() - clusOriginalPointGlob.x())); - DistanceClustersY[layerDuplicated]->Fill(abs(clusDuplicatedPointGlob.y() - clusOriginalPointGlob.y())); - DistanceClustersZ[layerDuplicated]->Fill(abs(clusDuplicatedPointGlob.z() - clusOriginalPointGlob.z())); // Imposing that the distance between the duplicated cluster and the track is less than x sigma - if (!(clusDuplicatedDCA[0] > mDCACutsXY[layerDuplicated][0] && clusDuplicatedDCA[0] < mDCACutsXY[layerDuplicated][1] && clusDuplicatedDCA[1] > mDCACutsZ[layerDuplicated][0] && clusDuplicatedDCA[1] < mDCACutsZ[layerDuplicated][1])) { + if (!(clusDuplicatedDCA[0] > mDCACutsXY[layerDuplicated][0] + && clusDuplicatedDCA[0] < mDCACutsXY[layerDuplicated][1] + && clusDuplicatedDCA[1] > mDCACutsZ[layerDuplicated][0] + && clusDuplicatedDCA[1] < mDCACutsZ[layerDuplicated][1])) { DCAxyRejected[layerDuplicated]->Fill(clusDuplicatedDCA[0]); DCAzRejected[layerDuplicated]->Fill(clusDuplicatedDCA[1]); continue; @@ -2796,18 +2403,6 @@ void EfficiencyStudy::getEfficiency(bool isMC) m2DClusterDuplicatedPositions->Fill(clusDuplicatedPointGlob.x(), clusDuplicatedPointGlob.y()); m3DDuplicatedClusterPositions->Fill(clusDuplicatedPointGlob.x(), clusDuplicatedPointGlob.y(), clusDuplicatedPointGlob.z()); - // mXduplicated->Fill(clusDuplicatedPointGlob.x()); - // mYduplicated->Fill(clusDuplicatedPointGlob.y()); - // mZduplicated->Fill(clusDuplicatedPointGlob.z()); - - IPOriginalifDuplicatedxy[layerOriginal]->Fill(ip[0]); - IPOriginalifDuplicatedz[layerOriginal]->Fill(ip[1]); - - DistanceClustersXAftercuts[layerDuplicated]->Fill(abs(clusDuplicatedPointGlob.x() - clusOriginalPointGlob.x())); - DistanceClustersYAftercuts[layerDuplicated]->Fill(abs(clusDuplicatedPointGlob.y() - clusOriginalPointGlob.y())); - DistanceClustersZAftercuts[layerDuplicated]->Fill(abs(clusDuplicatedPointGlob.z() - clusOriginalPointGlob.z())); - - if (mVerboseOutput) { LOGP(info, "Propagation ok"); } @@ -2832,37 +2427,22 @@ void EfficiencyStudy::getEfficiency(bool isMC) // here clusID_rDCA_label is updated with the closest cluster to the track other than the original one if (!adjacentFound) { - colNotFoundAll->Fill(clusOriginal.getCol()); - mChipNotFound->Fill(clusOriginal.getChipID()); - zNotFound[layerOriginal]->Fill(clusOriginalPointGlob.z()); - xNotFound[layerOriginal]->Fill(clusOriginalPointGlob.x()); - yNotFound[layerOriginal]->Fill(clusOriginalPointGlob.y()); radiusNotFound[layerOriginal]->Fill(sqrt(clusOriginalPointGlob.x() * clusOriginalPointGlob.x() + clusOriginalPointGlob.y() *clusOriginalPointGlob.y())); colNotFound[layerOriginal]->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9))); - m2DClusterNotFoundPositions->Fill(clusOriginalPointGlob.x(), clusOriginalPointGlob.y()); rowNotFound[layerOriginal]->Fill(rowOriginal); phiNotFound[layerOriginal]->Fill(phiOriginal); - etaNotFound[layerOriginal]->Fill(eta); - xyIPNotFound[layerOriginal]->Fill(ip[0]); - zIPNotFound[layerOriginal]->Fill(ip[1]); - // std::cout << "Not found. Original has col " <Fill(clusOriginal.getChipID()%9, clusDuplicatedSelected.getChipID()%9); mChipFound->Fill(clusOriginal.getChipID()); zFound[layerOriginal]->Fill(clusOriginalPointGlob.z()); - xFound[layerOriginal]->Fill(clusOriginalPointGlob.x()); - yFound[layerOriginal]->Fill(clusOriginalPointGlob.y()); radiusFound[layerOriginal]->Fill(sqrt(clusOriginalPointGlob.x() * clusOriginalPointGlob.x() + clusOriginalPointGlob.y() *clusOriginalPointGlob.y())); colFoundOriginalVsDuplicated[layerOriginal]->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)), clusDuplicatedSelected.getCol()+(1024*(clusDuplicatedSelected.getChipID()%9))); colFoundOriginal[layerOriginal]->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9))); m2DClusterFoundPositions->Fill(clusOriginalPointGlob.x(), clusOriginalPointGlob.y()); phiFound[layerOriginal]->Fill(phiOriginal); rowFound[layerOriginal]->Fill(rowOriginal); - etaFound[layerOriginal]->Fill(eta); - xyIPFound[layerOriginal]->Fill(ip[0]); - zIPFound[layerOriginal]->Fill(ip[1]); nDuplClusters++; nDuplicatedClusters[layerOriginal]++; numPt[layerOriginal]->Fill(pt); @@ -2876,9 +2456,7 @@ void EfficiencyStudy::getEfficiency(bool isMC) mNumRowPhi[layerOriginal]->Fill(clusOriginal.getRow(), clusOriginalPointGlob.z()); mNumRowCol[layerOriginal]->Fill(clusOriginal.getRow(), clusOriginal.getCol()); numLayers->Fill(layerOriginal); - // std::cout<<"++++++++++++++++++++++++++ check positions +++++++++++++++++++"< clusOriginalDCA, clusDuplicatedDCA; - auto propagator = o2::base::Propagator::Instance(); - - unsigned int rofIndexTrack = 0; - unsigned int rofNEntriesTrack = 0; - unsigned int rofIndexClus = 0; - unsigned int rofNEntriesClus = 0; - int nLabels = 0; - unsigned int totClus = 0; - - int nbPt = 75; - double xbins[nbPt + 1], ptcutl = 0.05, ptcuth = 7.5; - double a = std::log(ptcuth / ptcutl) / nbPt; - for (int i = 0; i <= nbPt; i++) { - xbins[i] = ptcutl * std::exp(i * a); - } - - int totNClusters; - int nDuplClusters; - - // denominator fot the efficiency calculation - for (unsigned int iROF = 0; iROF < mTracksROFRecords.size(); iROF++) { // loop on ROFRecords array - - rofIndexTrack = mTracksROFRecords[iROF].getFirstEntry(); - rofNEntriesTrack = mTracksROFRecords[iROF].getNEntries(); - - rofIndexClus = mClustersROFRecords[iROF].getFirstEntry(); - rofNEntriesClus = mClustersROFRecords[iROF].getNEntries(); - - ////// imposing cuts on the tracks = collecting tracks for the denominator - for (unsigned int iTrack = rofIndexTrack; iTrack < rofIndexTrack + rofNEntriesTrack; iTrack++) { // loop on tracks per ROF - auto track = mTracks[iTrack]; - o2::track::TrackParCov trackParCov = mTracks[iTrack]; - - auto pt = trackParCov.getPt(); - auto eta = trackParCov.getEta(); - float phi = -999.; - float phiOriginal = -999.; - - float chi2 = track.getChi2(); - - float ip[2]; - track.getImpactParams(0, 0, 0, 0, ip); - - chi2track->Fill(chi2); - - float phiTrack = trackParCov.getPhi(); // * 180 / M_PI; - - // applying the cuts on the track - only pt and eta cuts since for phi(cluster) the layer is needed - if (pt < mPtCuts[0] || pt > mPtCuts[1]) { - continue; - } - if (eta < mEtaCuts[0] || eta >= mEtaCuts[1]) { - continue; - } - if (chi2 > mChi2cut) { - continue; - } - /// the cut on phi, since it is layer-dependent, can be applied only after finding the cluster and then the layer - - int firstClus = track.getFirstClusterEntry(); // get the first cluster of the track - int ncl = track.getNumberOfClusters(); // get the number of clusters of the track - - if (ncl < 7) { - continue; - } - - o2::MCCompLabel tracklab; - if (isMC) { - tracklab = mTracksMCLabels[iTrack]; - if (tracklab.isFake()) { - continue; - } - } - - if (mVerboseOutput && isMC) { - LOGP(info, "--------- track Label: "); - tracklab.print(); - } - - for (int iclTrack = firstClus; iclTrack < firstClus + ncl; iclTrack++) { // loop on clusters associated to the track to extract layer, stave and chip to restrict the possible matches to be searched with the DCA cut - auto& clusOriginal = mClusters[mInputITSidxs[iclTrack]]; - auto clusOriginalPoint = mITSClustersArray[mInputITSidxs[iclTrack]]; - auto layerOriginal = mGeometry->getLayer(clusOriginal.getSensorID()); - - - - // if (clusOriginal.getChipID() == 77 || clusOriginal.getChipID() == 94 || clusOriginal.getChipID() == 276 || clusOriginal.getChipID() == 423) { - // continue; - // } - - UShort_t rowOriginal = clusOriginal.getRow(); - UShort_t colOriginal = clusOriginal.getCol(); - - if (layerOriginal >= NLAYERS) { - continue; - } - - o2::math_utils::Point3D clusOriginalPointTrack = {clusOriginalPoint.getX(), clusOriginalPoint.getY(), clusOriginalPoint.getZ()}; - o2::math_utils::Point3D clusOriginalPointGlob = mGeometry->getMatrixT2G(clusOriginal.getSensorID()) * clusOriginalPointTrack; - phiOriginal = clusOriginalPointGlob.phi();// * 180 / M_PI; - - - - if (clusOriginal.getChipID()>=81 && clusOriginal.getChipID() <= 89) { - l0_09->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); - } - if (clusOriginal.getChipID()>=90 && clusOriginal.getChipID() <= 98) { - l0_10->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); - } - if (clusOriginal.getChipID()>=99 && clusOriginal.getChipID() <= 107) { - l0_11->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); - } - - // mXoriginal->Fill(clusOriginalPointGlob.x()); - // mYoriginal->Fill(clusOriginalPointGlob.y()); - // mZoriginal->Fill(clusOriginalPointGlob.z()); - - if (abs(clusOriginalPointGlob.y()) < 0.5) { ///// removing gap between bottom and top barrels - continue; - } - - if (rowOriginal > 10 && rowOriginal < 502) { //// trying cutting on the row - continue; - } - - m2DClusterOriginalPositions->Fill(clusOriginalPointGlob.x(), clusOriginalPointGlob.y()); - m3DClusterPositions->Fill(clusOriginalPointGlob.x(), clusOriginalPointGlob.y(), clusOriginalPointGlob.z()); - - /// applying the cuts on the phi of the original cluster - bool keepTrack = true; /// wether or not a cluster is found in an eligible track in the corresponding layer - - // if (layerOriginal == 0) { - // for (int i = 0; i < 10; i++) { - // if ((phiOriginal >= mPhiCutsL0[i][0] && phiOriginal <= mPhiCutsL0[i][1])) { - // keepTrack = true; - // } - // } - // } - // if (layerOriginal == 1) { - // for (int i = 0; i < 12; i++) { - // if ((phiOriginal >= mPhiCutsL1[i][0] && phiOriginal <= mPhiCutsL1[i][1])) { - // keepTrack = true; - // } - // } - // } - // if (layerOriginal == 2) { - // for (int i = 0; i < 17; i++) { - // if ((phiOriginal >= mPhiCutsL2[i][0] && phiOriginal <= mPhiCutsL2[i][1])) { - // keepTrack = true; - // } - // } - // } - if (!(keepTrack)) { - continue; /// if the track (cluster) is not eligible for any layer, go to the next one - } else { /// fill the den and go ahead - chi2trackAccepted->Fill(chi2); - denPt[layerOriginal]->Fill(pt); - denPhi[layerOriginal]->Fill(phiOriginal); - denEta[layerOriginal]->Fill(eta); - denRow[layerOriginal]->Fill(rowOriginal); - denCol[layerOriginal]->Fill(clusOriginal.getCol()); - nTracksSelected[layerOriginal]++; - denLayers->Fill(layerOriginal); - } - gsl::span labsOriginal = {}; - if (isMC) { - labsOriginal = mClustersMCLCont->getLabels(mInputITSidxs[iclTrack]); // get labels of the cluster associated to the track (original) - } - - auto staveOriginal = mGeometry->getStave(clusOriginal.getSensorID()); - auto chipOriginal = mGeometry->getChipIdInStave(clusOriginal.getSensorID()); - - std::tuple> clusID_rDCA_label = {0, 999., gsl::span()}; // inizializing tuple with dummy values (if data, ignore the third value) - - bool adjacentFound = 0; - float phiDuplicated = -999.; - float ptDuplicated = -999.; - float etaDuplicated = -999.; - float clusZ = -999.; - - o2::MCCompLabel labelCandidateDuplicated; - bool duplExists = false; - - o2::itsmft::CompClusterExt clusDuplicatedSelected = o2::itsmft::CompClusterExt(); - - /// for each original cluster iterate over all the possible duplicated clusters to see first wether increment or not the denominator (if a track has a possible duplicated cluster in the selected phi region) - /// then if the phi is within the cuts, select the "adjacent" clusters (stave +-1, chip =,+-1) and calculate the DCA with the track. Then choose the closest one. - for (unsigned int iClus = rofIndexClus; iClus < rofIndexClus + rofNEntriesClus; iClus++) { // iteration over ALL the clusters in the ROF - auto clusDuplicated = mClusters[iClus]; - - auto clusDuplicatedPoint = mITSClustersArray[iClus]; - - o2::math_utils::Point3D clusDuplicatedPointTrack = {clusDuplicatedPoint.getX(), clusDuplicatedPoint.getY(), clusDuplicatedPoint.getZ()}; - o2::math_utils::Point3D clusDuplicatedPointGlob = mGeometry->getMatrixT2G(clusDuplicated.getSensorID()) * clusDuplicatedPointTrack; - phi = clusDuplicatedPointGlob.phi();// * 180 / M_PI; - - //// applying constraints: the cluster should be on the same layer, should be on an adjacent stave and on the same or adjacent chip position - if (clusDuplicated.getSensorID() == clusOriginal.getSensorID()) { - continue; - } - auto layerDuplicated = mGeometry->getLayer(clusDuplicated.getSensorID()); - if (layerDuplicated != layerOriginal) { - continue; - } - labelCandidateDuplicated = mClustersMCLCont->getLabels(iClus)[0]; - if (labelCandidateDuplicated == tracklab) { - duplExists = true; - std::cout << "Duplicated should exist with label: " << labelCandidateDuplicated.asString() << " , phi = " << phi << " and be: "; - clusDuplicated.print(); - } - auto staveDuplicated = mGeometry->getStave(clusDuplicated.getSensorID()); - if (abs(staveDuplicated - staveOriginal) != 1) { - continue; - } - auto chipDuplicated = mGeometry->getChipIdInStave(clusDuplicated.getSensorID()); - if (abs(chipDuplicated - chipOriginal) > 1) { - continue; - } - - // std::cout << "checks passed" << std::endl; - - gsl::span labsDuplicated = {}; - if (isMC) { - labsDuplicated = mClustersMCLCont->getLabels(iClus); - } - - /// if the cheks are passed, then calculate the DCA - /// Compute the DCA between the duplicated cluster location and the track - trackParCov.rotate(mGeometry->getSensorRefAlpha(clusDuplicated.getSensorID())); - if (!propagator->propagateToDCA(clusDuplicatedPointGlob, trackParCov, b, 2.f, matCorr, &clusDuplicatedDCA)) { // check if the propagation fails - continue; - } - - // std::cout << "dca calculated: " << clusDuplicatedDCA[0] << " " << clusDuplicatedDCA[1] << std::endl; - - DCAxyData[layerDuplicated]->Fill(clusDuplicatedDCA[0]); - DCAzData[layerDuplicated]->Fill(clusDuplicatedDCA[1]); - DistanceClustersX[layerDuplicated]->Fill(abs(clusDuplicatedPointGlob.x() - clusOriginalPointGlob.x())); - DistanceClustersY[layerDuplicated]->Fill(abs(clusDuplicatedPointGlob.y() - clusOriginalPointGlob.y())); - DistanceClustersZ[layerDuplicated]->Fill(abs(clusDuplicatedPointGlob.z() - clusOriginalPointGlob.z())); - - // Imposing that the distance between the duplicated cluster and the track is less than x sigma - if (!(clusDuplicatedDCA[0] > mDCACutsXY[layerDuplicated][0] && clusDuplicatedDCA[0] < mDCACutsXY[layerDuplicated][1] && clusDuplicatedDCA[1] > mDCACutsZ[layerDuplicated][0] && clusDuplicatedDCA[1] < mDCACutsZ[layerDuplicated][1])) { - DCAxyRejected[layerDuplicated]->Fill(clusDuplicatedDCA[0]); - DCAzRejected[layerDuplicated]->Fill(clusDuplicatedDCA[1]); - continue; - } - m2DClusterDuplicatedPositions->Fill(clusDuplicatedPointGlob.x(), clusDuplicatedPointGlob.y()); - m3DDuplicatedClusterPositions->Fill(clusDuplicatedPointGlob.x(), clusDuplicatedPointGlob.y(), clusDuplicatedPointGlob.z()); - // mXduplicated->Fill(clusDuplicatedPointGlob.x()); - // mYduplicated->Fill(clusDuplicatedPointGlob.y()); - // mZduplicated->Fill(clusDuplicatedPointGlob.z()); - - DistanceClustersXAftercuts[layerDuplicated]->Fill(abs(clusDuplicatedPointGlob.x() - clusOriginalPointGlob.x())); - DistanceClustersYAftercuts[layerDuplicated]->Fill(abs(clusDuplicatedPointGlob.y() - clusOriginalPointGlob.y())); - DistanceClustersZAftercuts[layerDuplicated]->Fill(abs(clusDuplicatedPointGlob.z() - clusOriginalPointGlob.z())); - - - if (mVerboseOutput) { - LOGP(info, "Propagation ok"); - } - double rDCA = std::hypot(clusDuplicatedDCA[0], clusDuplicatedDCA[1]); - - // taking the closest cluster within x sigma - if (rDCA < std::get<1>(clusID_rDCA_label)) { // updating the closest cluster - if (isMC) { - clusID_rDCA_label = {iClus, rDCA, labsDuplicated}; - } else { - clusID_rDCA_label = {iClus, rDCA, gsl::span()}; - } - phiDuplicated = phiOriginal; - ptDuplicated = pt; - etaDuplicated = eta; - clusZ = clusOriginalPointGlob.z(); - clusDuplicatedSelected = clusDuplicated; - } - adjacentFound = 1; - // std::cout << "Duplicated found with label: " << labsDuplicated[0] << " and phi: " << phiDuplicated << std::endl; - chipOrigVsOverlap->Fill(clusOriginal.getChipID()%9, clusDuplicatedSelected.getChipID()%9); - mChipFound->Fill(clusOriginal.getChipID()); - zFound[layerOriginal]->Fill(clusOriginalPointGlob.z()); - xFound[layerOriginal]->Fill(clusOriginalPointGlob.x()); - yFound[layerOriginal]->Fill(clusOriginalPointGlob.y()); - radiusFound[layerOriginal]->Fill(sqrt(clusOriginalPointGlob.x() * clusOriginalPointGlob.x() + clusOriginalPointGlob.y() *clusOriginalPointGlob.y())); - colFoundOriginalVsDuplicated[layerOriginal]->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)), clusDuplicatedSelected.getCol()); - colFoundOriginal[layerOriginal]->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9))); - m2DClusterFoundPositions->Fill(clusOriginalPointGlob.x(), clusOriginalPointGlob.y()); - phiFound[layerOriginal]->Fill(phiOriginal); - rowFound[layerOriginal]->Fill(rowOriginal); - etaFound[layerOriginal]->Fill(eta); - xyIPFound[layerOriginal]->Fill(ip[0]); - zIPFound[layerOriginal]->Fill(ip[1]); - - clusDuplicated.print(); - std::cout << "-----" << std::endl; - } // end loop on all the clusters in the rof -> at this point we have the information on the closest cluster (if there is one) - - // here clusID_rDCA_label is updated with the closest cluster to the track other than the original one - // checking if it is a good or fake match looking at the labels (only if isMC) - if (!adjacentFound) { - if (duplExists) { - std::cout << "No duplicated found but should exist" << std::endl; - std::cout << "DCA cuts were: xy-> " << mDCACutsXY[layerOriginal][0] << " to " << mDCACutsXY[layerOriginal][1] << " and z-> " << mDCACutsZ[layerOriginal][0] << " to " << mDCACutsZ[layerOriginal][1] << "\n-----" << std::endl; - } else { - std::cout << "No duplicated found and does not exist" << std::endl; - } - colNotFoundAll->Fill(clusOriginal.getCol()); - mChipNotFound->Fill(clusOriginal.getChipID()); - zNotFound[layerOriginal]->Fill(clusOriginalPointGlob.z()); - xNotFound[layerOriginal]->Fill(clusOriginalPointGlob.x()); - yNotFound[layerOriginal]->Fill(clusOriginalPointGlob.y()); - radiusNotFound[layerOriginal]->Fill(sqrt(clusOriginalPointGlob.x() * clusOriginalPointGlob.x() + clusOriginalPointGlob.y() *clusOriginalPointGlob.y())); - colNotFound[layerOriginal]->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9))); - m2DClusterNotFoundPositions->Fill(clusOriginalPointGlob.x(), clusOriginalPointGlob.y()); - rowNotFound[layerOriginal]->Fill(rowOriginal); - phiNotFound[layerOriginal]->Fill(phiOriginal); - etaNotFound[layerOriginal]->Fill(eta); - xyIPNotFound[layerOriginal]->Fill(ip[0]); - zIPNotFound[layerOriginal]->Fill(ip[1]); - continue; - } - std::cout << "-----" << std::endl; - nDuplClusters++; - nDuplicatedClusters[layerOriginal]++; - numPt[layerOriginal]->Fill(ptDuplicated); - numPhi[layerOriginal]->Fill(phiDuplicated); - numEta[layerOriginal]->Fill(etaDuplicated); - numRow[layerOriginal]->Fill(rowOriginal); - numCol[layerOriginal]->Fill(clusOriginal.getCol()); - mZvsPhiDUplicated[layerOriginal]->Fill(clusZ, phiDuplicated); - numLayers->Fill(layerOriginal); - - if (isMC) { - bool isGood = false; - for (auto lab : std::get<2>(clusID_rDCA_label)) { - if (lab == tracklab) { - isGood = true; - numPtGood[layerOriginal]->Fill(ptDuplicated); - numPhiGood[layerOriginal]->Fill(phiDuplicated); - numEtaGood[layerOriginal]->Fill(etaDuplicated); - numRowGood[layerOriginal]->Fill(rowOriginal); - numColGood[layerOriginal]->Fill(clusOriginal.getCol()); - numGoodLayers->Fill(layerOriginal); - continue; - } - } - if (!isGood) { - numPtFake[layerOriginal]->Fill(ptDuplicated); - numPhiFake[layerOriginal]->Fill(phiDuplicated); - numEtaFake[layerOriginal]->Fill(etaDuplicated); - numRowFake[layerOriginal]->Fill(rowOriginal); - numColFake[layerOriginal]->Fill(clusOriginal.getCol()); - numFakeLayers->Fill(layerOriginal); - } - } - } // end loop on clusters associated to the track - totNClusters += NLAYERS; - } // end loop on tracks per ROF - } // end loop on ROFRecords array - - std::cout << " Num of duplicated clusters L0: " << nDuplicatedClusters[0] << " N tracks selected: " << nTracksSelected[0] << std::endl; - std::cout << " Num of duplicated clusters L1: " << nDuplicatedClusters[1] << " N tracks selected: " << nTracksSelected[1] << std::endl; - std::cout << " Num of duplicated clusters L2: " << nDuplicatedClusters[2] << " N tracks selected: " << nTracksSelected[2] << std::endl; - - std::cout << " --------- N total clusters: " << totNClusters << std::endl; - std::cout << " --------- N duplicated clusters: " << nDuplClusters << std::endl; -} - - - - -void EfficiencyStudy::getHits(){ - - - -} void EfficiencyStudy::process(o2::globaltracking::RecoContainer& recoData) { LOGP(info, "--------------- process"); @@ -3313,16 +2505,15 @@ void EfficiencyStudy::process(o2::globaltracking::RecoContainer& recoData) if (mUseMC) { // getDCAClusterTrackMC(); - // studyDCAcutsMC(); - studyClusterSelectionMC(); - // getEfficiencyAndTrackInfo(mUseMC); + studyDCAcutsMC(); + // studyClusterSelectionMC(); // countDuplicatedAfterCuts(); - } else if (!mUseMC) { - // saveDataInfo(); + // getEfficiency(mUseMC); + } + else{ + getEfficiency(mUseMC); } - getEfficiency(mUseMC); - LOGP(info, "** Found in {} rofs:\n\t- {} clusters\n\t", mClustersROFRecords.size(), mClusters.size()); @@ -3354,20 +2545,11 @@ void EfficiencyStudy::endOfStream(EndOfStreamContext& ec) mOutFile->mkdir("DCAFinal/"); mOutFile->mkdir("NotFoundChecks/"); - mOutFile->mkdir("DistanceClusters/"); mOutFile->mkdir("DCA/"); mOutFile->mkdir("Pt_Eta_Phi/"); if (mUseMC) { - mOutFile->cd("DistanceClusters"); - for (int i = 0; i < NLAYERS; i++) { - mDistanceClustersX[i]->Write(); - mDistanceClustersY[i]->Write(); - mDistanceClustersZ[i]->Write(); - mDistanceClusters[i]->Write(); - } - mOutFile->cd("DCA"); mDCAxyDuplicated->Write(); mDCAzDuplicated->Write(); @@ -3382,15 +2564,11 @@ void EfficiencyStudy::endOfStream(EndOfStreamContext& ec) mOutFile->cd("Pt_Eta_Phi/"); for (int i = 0; i < NLAYERS; i++) { mPhiOriginal[i]->Write(); - mPhiTrackOriginal[i]->Write(); mDuplicatedPhiAllPt[i]->Write(); mPtOriginal[i]->Write(); mPtDuplicated[i]->Write(); mEtaDuplicated[i]->Write(); mPhiDuplicated[i]->Write(); - mPhiTrackDuplicated[i]->Write(); - mPhiTrackDuplicatedvsphiDuplicated[i]->Write(); - mPhiTrackoriginalvsphioriginal[i]->Write(); mPhiOriginalIfDuplicated[i]->Write(); mDuplicatedPt[i]->Write(); mDuplicatedPtEta[i]->Write(); @@ -3415,7 +2593,6 @@ void EfficiencyStudy::endOfStream(EndOfStreamContext& ec) IPOriginalxy[i]->Write(); IPOriginalz[i]->Write(); mPhiOriginal[i]->Write(); - mPhiTrackOriginal[i]->Write(); mPtOriginal[i]->Write(); mEtaOriginal[i]->Write(); mZvsPhiDUplicated[i]->Write(); @@ -3426,7 +2603,6 @@ void EfficiencyStudy::endOfStream(EndOfStreamContext& ec) mOutFile->mkdir("chi2"); mOutFile->cd("chi2/"); - chi2track->Write(); chi2trackAccepted->Write(); mOutFile->cd("EfficiencyFinal/"); @@ -3641,12 +2817,6 @@ void EfficiencyStudy::endOfStream(EndOfStreamContext& ec) for (int l = 0; l < NLAYERS; l++) { DCAxyData[l]->Write(); DCAzData[l]->Write(); - DistanceClustersX[l]->Write(); - DistanceClustersY[l]->Write(); - DistanceClustersZ[l]->Write(); - DistanceClustersXAftercuts[l]->Write(); - DistanceClustersYAftercuts[l]->Write(); - DistanceClustersZAftercuts[l]->Write(); DCAxyRejected[l]->Write(); DCAzRejected[l]->Write(); } @@ -3658,19 +2828,9 @@ void EfficiencyStudy::endOfStream(EndOfStreamContext& ec) phiNotFound[l]->Write(); rowFound[l]->Write(); rowNotFound[l]->Write(); - etaFound[l]->Write(); - etaNotFound[l]->Write(); - xyIPFound[l]->Write(); - xyIPNotFound[l]->Write(); - zIPFound[l]->Write(); - zIPNotFound[l]->Write(); zFound[l]->Write(); zNotFound[l]->Write(); - xFound[l]->Write(); - yFound[l]->Write(); radiusFound[l]->Write(); - xNotFound[l]->Write(); - yNotFound[l]->Write(); radiusNotFound[l]->Write(); colFoundOriginalVsDuplicated[l]->Write(); colFoundOriginal[l]->Write(); @@ -3678,28 +2838,11 @@ void EfficiencyStudy::endOfStream(EndOfStreamContext& ec) } - colNotFoundAll->Write(); mChipFound->Write(); mChipNotFound->Write(); m2DClusterFoundPositions->Write(); - m2DClusterNotFoundPositions->Write(); l0_00->Write(); - l0_01->Write(); - l0_02->Write(); - l0_03->Write(); - l0_04->Write(); - l0_05->Write(); - l0_06->Write(); - l0_07->Write(); - l0_08->Write(); - l0_09->Write(); - l0_10->Write(); - l0_11->Write(); l1_15->Write(); - l2_00->Write(); - l2_01->Write(); - l2_02->Write(); - l2_15->Write(); l2_19->Write(); chipOrigVsOverlap->Write(); chipmap->SetContour(100); From 522482631f2fc70260211ccf340ddab8ca7438fc Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Fri, 21 Feb 2025 14:14:09 +0000 Subject: [PATCH 4/6] Please consider the following formatting changes --- .../studies/include/ITSStudies/Efficiency.h | 1 - .../postprocessing/studies/src/Efficiency.cxx | 150 ++++++++---------- 2 files changed, 63 insertions(+), 88 deletions(-) diff --git a/Detectors/ITSMFT/ITS/postprocessing/studies/include/ITSStudies/Efficiency.h b/Detectors/ITSMFT/ITS/postprocessing/studies/include/ITSStudies/Efficiency.h index 06101d396014f..61df1009d9689 100644 --- a/Detectors/ITSMFT/ITS/postprocessing/studies/include/ITSStudies/Efficiency.h +++ b/Detectors/ITSMFT/ITS/postprocessing/studies/include/ITSStudies/Efficiency.h @@ -31,7 +31,6 @@ o2::framework::DataProcessorSpec getEfficiencyStudy(mask_t srcTracksMask, mask_t float mEtaCuts[2] = {-1.0, 1.0}; float mPtCuts[2] = {0, 10}; /// no cut for B=0 - // values obtained from the dca study for B=5 // float dcaXY[3] = {-0.000326, -0.000217, -0.000187}; // float dcaZ[3] = {0.000020, -0.000004, 0.000032}; diff --git a/Detectors/ITSMFT/ITS/postprocessing/studies/src/Efficiency.cxx b/Detectors/ITSMFT/ITS/postprocessing/studies/src/Efficiency.cxx index 8fcc9cb17b2ab..e3f43b700dc3d 100644 --- a/Detectors/ITSMFT/ITS/postprocessing/studies/src/Efficiency.cxx +++ b/Detectors/ITSMFT/ITS/postprocessing/studies/src/Efficiency.cxx @@ -63,7 +63,7 @@ class EfficiencyStudy : public Task mask_t src, bool useMC, std::shared_ptr kineReader, - std::shared_ptr gr) : mDataRequest(dr), mTracksSrc(src), mUseMC(useMC), mKineReader(kineReader), mGGCCDBRequest(gr) {}; + std::shared_ptr gr) : mDataRequest(dr), mTracksSrc(src), mUseMC(useMC), mKineReader(kineReader), mGGCCDBRequest(gr){}; ~EfficiencyStudy() final = default; void init(InitContext&) final; @@ -254,7 +254,6 @@ class EfficiencyStudy : public Task std::unique_ptr DCAxyRejected[NLAYERS]; std::unique_ptr DCAzRejected[NLAYERS]; - TH1D* denPt[NLAYERS]; TH1D* numPt[NLAYERS]; TH1D* numPtGood[NLAYERS]; @@ -285,7 +284,7 @@ class EfficiencyStudy : public Task TH1D* numZFake[NLAYERS]; TH1D* numLayers; - TH1D* denLayers; + TH1D* denLayers; TH1D* numGoodLayers; TH1D* numFakeLayers; @@ -314,14 +313,13 @@ class EfficiencyStudy : public Task TH1D* radiusNotFound[NLAYERS]; std::unique_ptr m2DClusterFoundPositions; std::unique_ptr m2DClusterNotFoundPositions; - std::unique_ptr mChipNotFound; - std::unique_ptr mChipFound; + std::unique_ptr mChipNotFound; + std::unique_ptr mChipFound; std::unique_ptr l0_00; std::unique_ptr l1_15; std::unique_ptr l2_19; - std::unique_ptr chipOrigVsOverlap; + std::unique_ptr chipOrigVsOverlap; std::unique_ptr chipmap; - }; void EfficiencyStudy::init(InitContext& ic) @@ -430,16 +428,16 @@ void EfficiencyStudy::init(InitContext& ic) mDuplicatedCol[i] = new TH1D(Form("mDuplicatedCol_L%d", i), Form("; Col; Number of duplciated clusters L%d", i), 128, -0.5, 1023.5); mDuplicatedCol[i]->Sumw2(); - mNGoodMatchesCol[i] = new TH1D(Form("mNGoodMatchesCol_L%d", i), Form("; Col; Number of good matches L%d", i), 128, -0.5, 1023.5); + mNGoodMatchesCol[i] = new TH1D(Form("mNGoodMatchesCol_L%d", i), Form("; Col; Number of good matches L%d", i), 128, -0.5, 1023.5); mNGoodMatchesCol[i]->Sumw2(); - mNFakeMatchesCol[i] = new TH1D(Form("mNFakeMatchesCol_L%d", i), Form(";Col; Number of fake matches L%d", i), 128, -0.5, 1023.5); + mNFakeMatchesCol[i] = new TH1D(Form("mNFakeMatchesCol_L%d", i), Form(";Col; Number of fake matches L%d", i), 128, -0.5, 1023.5); mNFakeMatchesCol[i]->Sumw2(); mDuplicatedZ[i] = new TH1D(Form("mDuplicatedZ_L%d", i), Form("; Z (cm); Number of duplciated clusters L%d", i), 100, -15, 15); mDuplicatedZ[i]->Sumw2(); - mNGoodMatchesZ[i] = new TH1D(Form("mNGoodMatchesZ_L%d", i), Form("; Z (cm); Number of good matches L%d", i), 100, -15, 15); + mNGoodMatchesZ[i] = new TH1D(Form("mNGoodMatchesZ_L%d", i), Form("; Z (cm); Number of good matches L%d", i), 100, -15, 15); mNGoodMatchesZ[i]->Sumw2(); - mNFakeMatchesZ[i] = new TH1D(Form("mNFakeMatchesZ_L%d", i), Form(";Z (cm); Number of fake matches L%d", i), 100, -15, 15); + mNFakeMatchesZ[i] = new TH1D(Form("mNFakeMatchesZ_L%d", i), Form(";Z (cm); Number of fake matches L%d", i), 100, -15, 15); mNFakeMatchesZ[i]->Sumw2(); mDuplicatedPtEta[i] = new TH2D(Form("mDuplicatedPtEta_log_L%d", i), Form("; #it{p}_{T} (GeV/c);#eta; Number of duplciated clusters L%d", i), nbPt, 0, 7.5 /* xbins*/, 40, -2, 2); @@ -629,7 +627,7 @@ int EfficiencyStudy::getDCAClusterTrackMC(int countDuplicated = 0) continue; } - float ip[2]; // IP from 0,0,0 and the track should be the deplacement of the primary vertex + float ip[2]; // IP from 0,0,0 and the track should be the deplacement of the primary vertex track.getImpactParams(0, 0, 0, 0, ip); // if (abs(ip[0])>0.001 ) continue; ///pv not in (0,0,0) @@ -670,7 +668,7 @@ int EfficiencyStudy::getDCAClusterTrackMC(int countDuplicated = 0) o2::math_utils::Point3D clusOriginalPointTrack = {clusOriginalPoint.getX(), clusOriginalPoint.getY(), clusOriginalPoint.getZ()}; o2::math_utils::Point3D clusOriginalPointGlob = mGeometry->getMatrixT2G(clusOriginal.getSensorID()) * clusOriginalPointTrack; - phioriginal = clusOriginalPointGlob.phi();// * 180 / M_PI; + phioriginal = clusOriginalPointGlob.phi(); // * 180 / M_PI; mPhiOriginal[layer]->Fill(phioriginal); mPtOriginal[layer]->Fill(pt); @@ -697,7 +695,7 @@ int EfficiencyStudy::getDCAClusterTrackMC(int countDuplicated = 0) o2::math_utils::Point3D clusDuplicatedPointTrack = {clusDuplicatedPoint.getX(), clusDuplicatedPoint.getY(), clusDuplicatedPoint.getZ()}; o2::math_utils::Point3D clusDuplicatedPointGlob = mGeometry->getMatrixT2G(clusDuplicated.getSensorID()) * clusDuplicatedPointTrack; // phiduplicated = std::atan2(clusDuplicatedPointGlob.y(), clusDuplicatedPointGlob.x()) * 180 / M_PI + 180; - phiduplicated = clusDuplicatedPointGlob.phi();// * 180 / M_PI; + phiduplicated = clusDuplicatedPointGlob.phi(); // * 180 / M_PI; auto labsClus = mClustersMCLCont->getLabels(iClus); // ideally I can have more than one label per cluster for (auto labC : labsClus) { @@ -882,7 +880,7 @@ void EfficiencyStudy::countDuplicatedAfterCuts() if (eta < mEtaCuts[0] || eta >= mEtaCuts[1]) { continue; - } + } float phi = -999.; float phiOriginal = -999.; @@ -902,8 +900,7 @@ void EfficiencyStudy::countDuplicatedAfterCuts() o2::math_utils::Point3D clusOriginalPointTrack = {clusOriginalPoint.getX(), clusOriginalPoint.getY(), clusOriginalPoint.getZ()}; o2::math_utils::Point3D clusOriginalPointGlob = mGeometry->getMatrixT2G(clusOriginal.getSensorID()) * clusOriginalPointTrack; - phiOriginal = clusOriginalPointGlob.phi();// * 180 / M_PI; - + phiOriginal = clusOriginalPointGlob.phi(); // * 180 / M_PI; if (abs(clusOriginalPointGlob.y()) < 0.5) { ///// excluding gap between bottom and top barrels continue; @@ -913,15 +910,13 @@ void EfficiencyStudy::countDuplicatedAfterCuts() continue; } - if (clusOriginal.getRow() <2 || (clusOriginal.getRow() > 15 && clusOriginal.getRow() < 496) || clusOriginal.getRow()>509) { //// cutting on the row + if (clusOriginal.getRow() < 2 || (clusOriginal.getRow() > 15 && clusOriginal.getRow() < 496) || clusOriginal.getRow() > 509) { //// cutting on the row continue; } - - if (clusOriginal.getCol() <160 || clusOriginal.getCol() >870){ /// excluding the gap between two chips in the same stave (comment to obtain the plot efficiency col vs eta) + if (clusOriginal.getCol() < 160 || clusOriginal.getCol() > 870) { /// excluding the gap between two chips in the same stave (comment to obtain the plot efficiency col vs eta) continue; } - for (auto& labT : labsTrack) { // for each valid label iterate over ALL the clusters in the ROF to see if there are duplicates if (labT != tracklab) { @@ -1676,7 +1671,6 @@ void EfficiencyStudy::studyClusterSelectionMC() legRow->Draw("same"); effRow[l]->Write(); - // Col effCol[l] = new TCanvas(Form("effCol_L%d", l)); @@ -1709,7 +1703,6 @@ void EfficiencyStudy::studyClusterSelectionMC() legCol->Draw("same"); effCol[l]->Write(); - // Z effZ[l] = new TCanvas(Form("effZ_L%d", l)); @@ -2018,7 +2011,6 @@ void EfficiencyStudy::studyClusterSelectionMC() effPhiAllPt[l]->Write(); } - /// all Row TCanvas* effRowAll = new TCanvas("effRowAll"); TH1D* numRowGoodAll = (TH1D*)mNGoodMatchesRow[0]->Clone("numRowGoodAll"); @@ -2035,9 +2027,9 @@ void EfficiencyStudy::studyClusterSelectionMC() denRowAll->Write(); std::unique_ptr mEffRowGoodAll = std::make_unique(*numRowGoodAll, *denRowAll); - stileEfficiencyGraph(mEffRowGoodAll, "mEffRowGoodAll","L0 + L1 + L2;Row;Efficiency", false, kFullDiamond, 1, kGreen +3, kGreen +3); + stileEfficiencyGraph(mEffRowGoodAll, "mEffRowGoodAll", "L0 + L1 + L2;Row;Efficiency", false, kFullDiamond, 1, kGreen + 3, kGreen + 3); std::unique_ptr mEffRowFakeAll = std::make_unique(*numRowFakeAll, *denRowAll); - stileEfficiencyGraph(mEffRowFakeAll, "mEffRowFakeAll","L0 + L1 + L2;Row;Efficiency", false, kFullDiamond, 1, kRed + 1, kRed + 1); + stileEfficiencyGraph(mEffRowFakeAll, "mEffRowFakeAll", "L0 + L1 + L2;Row;Efficiency", false, kFullDiamond, 1, kRed + 1, kRed + 1); axRow->SetTitle("L0 + L1 + L2;Row;Efficiency"); axRow->GetYaxis()->SetRangeUser(-0.1, 1.1); axRow->Draw(); @@ -2050,7 +2042,6 @@ void EfficiencyStudy::studyClusterSelectionMC() legRow->Draw("same"); effRowAll->Write(); - /// all Col TCanvas* effColAll = new TCanvas("effColAll"); TH1D* numColGoodAll = (TH1D*)mNGoodMatchesCol[0]->Clone("numColGoodAll"); @@ -2067,9 +2058,9 @@ void EfficiencyStudy::studyClusterSelectionMC() denColAll->Write(); std::unique_ptr mEffColGoodAll = std::make_unique(*numColGoodAll, *denColAll); - stileEfficiencyGraph(mEffColGoodAll, "mEffColGoodAll","L0 + L1 + L2;Column;Efficiency", false, kFullDiamond, 1, kGreen +3, kGreen +3); + stileEfficiencyGraph(mEffColGoodAll, "mEffColGoodAll", "L0 + L1 + L2;Column;Efficiency", false, kFullDiamond, 1, kGreen + 3, kGreen + 3); std::unique_ptr mEffColFakeAll = std::make_unique(*numColFakeAll, *denColAll); - stileEfficiencyGraph(mEffColFakeAll, "mEffColFakeAll","L0 + L1 + L2;Column;Efficiency", false, kFullDiamond, 1, kRed + 1, kRed + 1); + stileEfficiencyGraph(mEffColFakeAll, "mEffColFakeAll", "L0 + L1 + L2;Column;Efficiency", false, kFullDiamond, 1, kRed + 1, kRed + 1); axCol->SetTitle("L0 + L1 + L2;Col;Efficiency"); axCol->GetYaxis()->SetRangeUser(-0.1, 1.1); axCol->Draw(); @@ -2082,7 +2073,6 @@ void EfficiencyStudy::studyClusterSelectionMC() legCol->Draw("same"); effColAll->Write(); - /// all Z TCanvas* effZAll = new TCanvas("effZAll"); TH1D* numZGoodAll = (TH1D*)mNGoodMatchesZ[0]->Clone("numZGoodAll"); @@ -2099,9 +2089,9 @@ void EfficiencyStudy::studyClusterSelectionMC() denZAll->Write(); std::unique_ptr mEffZGoodAll = std::make_unique(*numZGoodAll, *denZAll); - stileEfficiencyGraph(mEffZGoodAll, "mEffZGoodAll","L0 + L1 + L2;Z;Efficiency", false, kFullDiamond, 1, kGreen+ 3, kGreen + 3); + stileEfficiencyGraph(mEffZGoodAll, "mEffZGoodAll", "L0 + L1 + L2;Z;Efficiency", false, kFullDiamond, 1, kGreen + 3, kGreen + 3); std::unique_ptr mEffZFakeAll = std::make_unique(*numZFakeAll, *denZAll); - stileEfficiencyGraph(mEffZFakeAll, "mEffZFakeAll","L0 + L1 + L2;Z;Efficiency", false, kFullDiamond, 1, kRed + 1, kRed + 1); + stileEfficiencyGraph(mEffZFakeAll, "mEffZFakeAll", "L0 + L1 + L2;Z;Efficiency", false, kFullDiamond, 1, kRed + 1, kRed + 1); axZ->SetTitle("L0 + L1 + L2;Z;Efficiency"); axZ->GetYaxis()->SetRangeUser(-0.1, 1.1); axZ->Draw(); @@ -2114,7 +2104,6 @@ void EfficiencyStudy::studyClusterSelectionMC() legZ->Draw("same"); effZAll->Write(); - /// all Eta TCanvas* effEtaAll = new TCanvas("effEtaAll"); TH1D* numEtaGoodAll = (TH1D*)mNGoodMatchesEtaAllPt[0]->Clone("numEtaGoodAll"); @@ -2131,9 +2120,10 @@ void EfficiencyStudy::studyClusterSelectionMC() denEtaAll->Write(); std::unique_ptr mEffEtaGoodAll = std::make_unique(*numEtaGoodAll, *denEtaAll); - stileEfficiencyGraph(mEffEtaGoodAll, "mEffEtaGoodAll","L0 + L1 + L2;#Eta;Efficiency", false, kFullDiamond, 1, kGreen + 3 , kGreen + 3); + stileEfficiencyGraph(mEffEtaGoodAll, "mEffEtaGoodAll", "L0 + L1 + L2;#Eta;Efficiency", false, kFullDiamond, 1, kGreen + 3, kGreen + 3); std::unique_ptr mEffEtaFakeAll = std::make_unique(*numEtaFakeAll, *denEtaAll); - stileEfficiencyGraph(mEffEtaFakeAll, "mEffEtaFakeAll","L0 + L1 + L2;#Eta;Efficiency", false, kFullDiamond, 1, kRed + 1, kRed + 1); axetaAllPt->SetTitle("L0 + L1 + L2;Eta;Efficiency"); + stileEfficiencyGraph(mEffEtaFakeAll, "mEffEtaFakeAll", "L0 + L1 + L2;#Eta;Efficiency", false, kFullDiamond, 1, kRed + 1, kRed + 1); + axetaAllPt->SetTitle("L0 + L1 + L2;Eta;Efficiency"); axetaAllPt->GetYaxis()->SetRangeUser(-0.1, 1.1); axetaAllPt->Draw(); mEffEtaGoodAll->Draw("same p"); @@ -2145,7 +2135,6 @@ void EfficiencyStudy::studyClusterSelectionMC() legEta->Draw("same"); effEtaAll->Write(); - /// all Phi TCanvas* effPhiAll = new TCanvas("effPhiAll"); TH1D* numPhiGoodAll = (TH1D*)mNGoodMatchesPhiAllPt[0]->Clone("numPhiGoodAll"); @@ -2162,9 +2151,9 @@ void EfficiencyStudy::studyClusterSelectionMC() denPhiAll->Write(); std::unique_ptr mEffPhiGoodAll = std::make_unique(*numPhiGoodAll, *denPhiAll); - stileEfficiencyGraph(mEffPhiGoodAll, "mEffPhiGoodAll","L0 + L1 + L2;#Phi (rad);Efficiency", false, kFullDiamond, 1, kGreen + 3, kGreen + 3); + stileEfficiencyGraph(mEffPhiGoodAll, "mEffPhiGoodAll", "L0 + L1 + L2;#Phi (rad);Efficiency", false, kFullDiamond, 1, kGreen + 3, kGreen + 3); std::unique_ptr mEffPhiFakeAll = std::make_unique(*numPhiFakeAll, *denPhiAll); - stileEfficiencyGraph(mEffPhiFakeAll, "mEffPhiFakeAll","L0 + L1 + L2;#Phi (rad);Efficiency", false, kFullDiamond, 1, kRed + 1, kRed + 1); + stileEfficiencyGraph(mEffPhiFakeAll, "mEffPhiFakeAll", "L0 + L1 + L2;#Phi (rad);Efficiency", false, kFullDiamond, 1, kRed + 1, kRed + 1); axphiAllPt->SetTitle("L0 + L1 + L2;Phi;Efficiency"); axphiAllPt->GetYaxis()->SetRangeUser(-0.1, 1.1); axphiAllPt->Draw(); @@ -2218,7 +2207,7 @@ void EfficiencyStudy::getEfficiency(bool isMC) auto track = mTracks[iTrack]; o2::track::TrackParCov trackParCov = mTracks[iTrack]; - auto pt = trackParCov.getPt(); // Always 0.6 GeV/c for B = 0 T + auto pt = trackParCov.getPt(); // Always 0.6 GeV/c for B = 0 T auto eta = trackParCov.getEta(); float phi = -999.; float phiOriginal = -999.; @@ -2234,7 +2223,7 @@ void EfficiencyStudy::getEfficiency(bool isMC) if (eta < mEtaCuts[0] || eta >= mEtaCuts[1]) { continue; } - + int firstClus = track.getFirstClusterEntry(); // get the first cluster of the track int ncl = track.getNumberOfClusters(); // get the number of clusters of the track @@ -2265,22 +2254,22 @@ void EfficiencyStudy::getEfficiency(bool isMC) UShort_t colOriginal = clusOriginal.getCol(); /// filling some chip maps - if (clusOriginal.getChipID()>=0 && clusOriginal.getChipID() <= 8) { - l0_00->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); - } - if (clusOriginal.getChipID()>=252 && clusOriginal.getChipID() <= 260) { - l1_15->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); - } - if (clusOriginal.getChipID()>=423 && clusOriginal.getChipID() <= 431) { - l2_19->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)),clusOriginal.getRow()); - } + if (clusOriginal.getChipID() >= 0 && clusOriginal.getChipID() <= 8) { + l0_00->Fill(clusOriginal.getCol() + (1024 * (clusOriginal.getChipID() % 9)), clusOriginal.getRow()); + } + if (clusOriginal.getChipID() >= 252 && clusOriginal.getChipID() <= 260) { + l1_15->Fill(clusOriginal.getCol() + (1024 * (clusOriginal.getChipID() % 9)), clusOriginal.getRow()); + } + if (clusOriginal.getChipID() >= 423 && clusOriginal.getChipID() <= 431) { + l2_19->Fill(clusOriginal.getCol() + (1024 * (clusOriginal.getChipID() % 9)), clusOriginal.getRow()); + } //// only IB if (layerOriginal >= NLAYERS) { continue; } - chipmap->Fill(clusOriginal.getCol(),clusOriginal.getRow()); + chipmap->Fill(clusOriginal.getCol(), clusOriginal.getRow()); IPOriginalxy[layerOriginal]->Fill(ip[0]); IPOriginalz[layerOriginal]->Fill(ip[1]); @@ -2288,7 +2277,7 @@ void EfficiencyStudy::getEfficiency(bool isMC) ///// cluster point and conversion from track local coordinates to global coordinates o2::math_utils::Point3D clusOriginalPointTrack = {clusOriginalPoint.getX(), clusOriginalPoint.getY(), clusOriginalPoint.getZ()}; o2::math_utils::Point3D clusOriginalPointGlob = mGeometry->getMatrixT2G(clusOriginal.getSensorID()) * clusOriginalPointTrack; - phiOriginal = clusOriginalPointGlob.phi();// * 180 / M_PI; + phiOriginal = clusOriginalPointGlob.phi(); // * 180 / M_PI; if (abs(clusOriginalPointGlob.y()) < 0.5) { ///// excluding gap between bottom and top barrels continue; @@ -2298,21 +2287,20 @@ void EfficiencyStudy::getEfficiency(bool isMC) continue; } - if (rowOriginal <2 || (rowOriginal > 15 && rowOriginal < 496) || rowOriginal>509) { //// cutting on the row + if (rowOriginal < 2 || (rowOriginal > 15 && rowOriginal < 496) || rowOriginal > 509) { //// cutting on the row continue; } - - if (mUseMC){ //// excluding known bad chips in MC which are not bad in data --- to be checked based on the anchored run + if (mUseMC) { //// excluding known bad chips in MC which are not bad in data --- to be checked based on the anchored run if (std::find(mExcludedChipMC->begin(), mExcludedChipMC->end(), clusOriginal.getChipID()) != mExcludedChipMC->end()) { continue; } } - - if (clusOriginal.getCol() <160 || clusOriginal.getCol() >870){ /// excluding the gap between two chips in the same stave (comment to obtain the plot efficiency col vs eta) + + if (clusOriginal.getCol() < 160 || clusOriginal.getCol() > 870) { /// excluding the gap between two chips in the same stave (comment to obtain the plot efficiency col vs eta) continue; } - + /// if the track passes the cuts, fill the den and go ahead m2DClusterOriginalPositions->Fill(clusOriginalPointGlob.x(), clusOriginalPointGlob.y()); m3DClusterPositions->Fill(clusOriginalPointGlob.x(), clusOriginalPointGlob.y(), clusOriginalPointGlob.z()); @@ -2328,7 +2316,6 @@ void EfficiencyStudy::getEfficiency(bool isMC) mDenRowPhi[layerOriginal]->Fill(clusOriginal.getRow(), clusOriginalPointGlob.z()); mDenRowCol[layerOriginal]->Fill(clusOriginal.getRow(), clusOriginal.getCol()); denLayers->Fill(layerOriginal); - /// if the cuts up to here are passed, then search for the duplicated cluster, otherwise go to the next cluster gsl::span labsOriginal = {}; @@ -2356,7 +2343,7 @@ void EfficiencyStudy::getEfficiency(bool isMC) o2::math_utils::Point3D clusDuplicatedPointTrack = {clusDuplicatedPoint.getX(), clusDuplicatedPoint.getY(), clusDuplicatedPoint.getZ()}; o2::math_utils::Point3D clusDuplicatedPointGlob = mGeometry->getMatrixT2G(clusDuplicated.getSensorID()) * clusDuplicatedPointTrack; - phi = clusDuplicatedPointGlob.phi();// * 180 / M_PI; + phi = clusDuplicatedPointGlob.phi(); // * 180 / M_PI; //// applying constraints: the cluster should be on the same layer, should be on an adjacent stave and on the same or adjacent chip position if (clusDuplicated.getSensorID() == clusOriginal.getSensorID()) { @@ -2391,10 +2378,7 @@ void EfficiencyStudy::getEfficiency(bool isMC) DCAzData[layerDuplicated]->Fill(clusDuplicatedDCA[1]); // Imposing that the distance between the duplicated cluster and the track is less than x sigma - if (!(clusDuplicatedDCA[0] > mDCACutsXY[layerDuplicated][0] - && clusDuplicatedDCA[0] < mDCACutsXY[layerDuplicated][1] - && clusDuplicatedDCA[1] > mDCACutsZ[layerDuplicated][0] - && clusDuplicatedDCA[1] < mDCACutsZ[layerDuplicated][1])) { + if (!(clusDuplicatedDCA[0] > mDCACutsXY[layerDuplicated][0] && clusDuplicatedDCA[0] < mDCACutsXY[layerDuplicated][1] && clusDuplicatedDCA[1] > mDCACutsZ[layerDuplicated][0] && clusDuplicatedDCA[1] < mDCACutsZ[layerDuplicated][1])) { DCAxyRejected[layerDuplicated]->Fill(clusDuplicatedDCA[0]); DCAzRejected[layerDuplicated]->Fill(clusDuplicatedDCA[1]); continue; @@ -2427,19 +2411,19 @@ void EfficiencyStudy::getEfficiency(bool isMC) // here clusID_rDCA_label is updated with the closest cluster to the track other than the original one if (!adjacentFound) { - radiusNotFound[layerOriginal]->Fill(sqrt(clusOriginalPointGlob.x() * clusOriginalPointGlob.x() + clusOriginalPointGlob.y() *clusOriginalPointGlob.y())); - colNotFound[layerOriginal]->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9))); + radiusNotFound[layerOriginal]->Fill(sqrt(clusOriginalPointGlob.x() * clusOriginalPointGlob.x() + clusOriginalPointGlob.y() * clusOriginalPointGlob.y())); + colNotFound[layerOriginal]->Fill(clusOriginal.getCol() + (1024 * (clusOriginal.getChipID() % 9))); rowNotFound[layerOriginal]->Fill(rowOriginal); phiNotFound[layerOriginal]->Fill(phiOriginal); continue; } - chipOrigVsOverlap->Fill(clusOriginal.getChipID()%9, clusDuplicatedSelected.getChipID()%9); + chipOrigVsOverlap->Fill(clusOriginal.getChipID() % 9, clusDuplicatedSelected.getChipID() % 9); mChipFound->Fill(clusOriginal.getChipID()); zFound[layerOriginal]->Fill(clusOriginalPointGlob.z()); - radiusFound[layerOriginal]->Fill(sqrt(clusOriginalPointGlob.x() * clusOriginalPointGlob.x() + clusOriginalPointGlob.y() *clusOriginalPointGlob.y())); - colFoundOriginalVsDuplicated[layerOriginal]->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9)), clusDuplicatedSelected.getCol()+(1024*(clusDuplicatedSelected.getChipID()%9))); - colFoundOriginal[layerOriginal]->Fill(clusOriginal.getCol()+(1024*(clusOriginal.getChipID()%9))); + radiusFound[layerOriginal]->Fill(sqrt(clusOriginalPointGlob.x() * clusOriginalPointGlob.x() + clusOriginalPointGlob.y() * clusOriginalPointGlob.y())); + colFoundOriginalVsDuplicated[layerOriginal]->Fill(clusOriginal.getCol() + (1024 * (clusOriginal.getChipID() % 9)), clusDuplicatedSelected.getCol() + (1024 * (clusDuplicatedSelected.getChipID() % 9))); + colFoundOriginal[layerOriginal]->Fill(clusOriginal.getCol() + (1024 * (clusOriginal.getChipID() % 9))); m2DClusterFoundPositions->Fill(clusOriginalPointGlob.x(), clusOriginalPointGlob.y()); phiFound[layerOriginal]->Fill(phiOriginal); rowFound[layerOriginal]->Fill(rowOriginal); @@ -2456,7 +2440,7 @@ void EfficiencyStudy::getEfficiency(bool isMC) mNumRowPhi[layerOriginal]->Fill(clusOriginal.getRow(), clusOriginalPointGlob.z()); mNumRowCol[layerOriginal]->Fill(clusOriginal.getRow(), clusOriginal.getCol()); numLayers->Fill(layerOriginal); - + // checking if it is a good or fake match looking at the labels (only if isMC) if (isMC) { bool isGood = false; @@ -2496,7 +2480,6 @@ void EfficiencyStudy::getEfficiency(bool isMC) std::cout << " --------- N duplicated clusters: " << nDuplClusters << std::endl; } - void EfficiencyStudy::process(o2::globaltracking::RecoContainer& recoData) { LOGP(info, "--------------- process"); @@ -2509,8 +2492,7 @@ void EfficiencyStudy::process(o2::globaltracking::RecoContainer& recoData) // studyClusterSelectionMC(); // countDuplicatedAfterCuts(); // getEfficiency(mUseMC); - } - else{ + } else { getEfficiency(mUseMC); } @@ -2606,23 +2588,23 @@ void EfficiencyStudy::endOfStream(EndOfStreamContext& ec) chi2trackAccepted->Write(); mOutFile->cd("EfficiencyFinal/"); - TList * listNum = new TList; - TList * listDen = new TList; + TList* listNum = new TList; + TList* listDen = new TList; TH1D* numPhiAll = (TH1D*)numPhi[0]->Clone("numPhiAll"); TH1D* denPhiAll = (TH1D*)denPhi[0]->Clone("denPhiAll"); - TList * listNumColEta = new TList; - TList * listDenColEta = new TList; + TList* listNumColEta = new TList; + TList* listDenColEta = new TList; TH1D* numColEtaAll = (TH1D*)mNumColEta[0]->Clone("numColEtaAll"); TH1D* denColEtaAll = (TH1D*)mDenColEta[0]->Clone("denColEtaAll"); - TList * listNumRowPhi = new TList; - TList * listDenRowPhi = new TList; + TList* listNumRowPhi = new TList; + TList* listDenRowPhi = new TList; TH1D* numRowPhiAll = (TH1D*)mNumRowPhi[0]->Clone("numRowPhiAll"); TH1D* denRowPhiAll = (TH1D*)mDenRowPhi[0]->Clone("denRowPhiAll"); - TList * listNumRowCol = new TList; - TList * listDenRowCol = new TList; + TList* listNumRowCol = new TList; + TList* listDenRowCol = new TList; TH1D* numRowColAll = (TH1D*)mNumRowCol[0]->Clone("numRowColAll"); TH1D* denRowColAll = (TH1D*)mDenRowCol[0]->Clone("denRowColAll"); @@ -2733,7 +2715,6 @@ void EfficiencyStudy::endOfStream(EndOfStreamContext& ec) listNumColEta->Add(mNumColEta[l]); listDenColEta->Add(mDenColEta[l]); - TEfficiency* effRowPhi = new TEfficiency(*mNumRowPhi[l], *mDenRowPhi[l]); effRowPhi->SetName(Form("effRowPhi_layer%d", l)); effRowPhi->SetTitle(Form("L%d;Column;#eta", l)); @@ -2770,8 +2751,6 @@ void EfficiencyStudy::endOfStream(EndOfStreamContext& ec) denZ[l]->Write(); } - - numPhiAll->Merge(listNum); denPhiAll->Merge(listDen); @@ -2835,8 +2814,6 @@ void EfficiencyStudy::endOfStream(EndOfStreamContext& ec) colFoundOriginalVsDuplicated[l]->Write(); colFoundOriginal[l]->Write(); colNotFound[l]->Write(); - - } mChipFound->Write(); mChipNotFound->Write(); @@ -2847,7 +2824,6 @@ void EfficiencyStudy::endOfStream(EndOfStreamContext& ec) chipOrigVsOverlap->Write(); chipmap->SetContour(100); chipmap->Write(); - mOutFile->Close(); } From d5d0daec887a2cfcb594337cb13c47c739af3529 Mon Sep 17 00:00:00 2001 From: Andrea Sofia Triolo Date: Wed, 26 Mar 2025 15:57:01 +0100 Subject: [PATCH 5/6] ITS efficiency study: raw pointers converted to smart pointers --- .../studies/include/ITSStudies/Efficiency.h | 2 +- .../postprocessing/studies/src/Efficiency.cxx | 677 +++++++++--------- 2 files changed, 339 insertions(+), 340 deletions(-) diff --git a/Detectors/ITSMFT/ITS/postprocessing/studies/include/ITSStudies/Efficiency.h b/Detectors/ITSMFT/ITS/postprocessing/studies/include/ITSStudies/Efficiency.h index 61df1009d9689..b6f43bb772390 100644 --- a/Detectors/ITSMFT/ITS/postprocessing/studies/include/ITSStudies/Efficiency.h +++ b/Detectors/ITSMFT/ITS/postprocessing/studies/include/ITSStudies/Efficiency.h @@ -49,7 +49,7 @@ float mDCACutsXY[3][2] = {{dcaXY[0] - dcaCut * sigmaDcaXY[0], dcaXY[0] + dcaCut* float mDCACutsZ[3][2] = {{dcaZ[0] - dcaCut * sigmaDcaZ[0], dcaZ[0] + dcaCut* sigmaDcaZ[0]}, {dcaZ[1] - dcaCut * sigmaDcaZ[1], dcaZ[1] + dcaCut* sigmaDcaZ[1]}, {dcaZ[2] - dcaCut * sigmaDcaZ[2], dcaZ[2] + dcaCut* sigmaDcaZ[2]}}; /// excluding bad chips in MC that are not present in data: to be checked based on the anchoring -std::vector* mExcludedChipMC = new std::vector{66, 67, 68, 75, 76, 77, 84, 85, 86, 93, 94, 95, 102, 103, 104, 265, 266, 267, 274, 275, 276, 283, 284, 285, 413, 414, 415, 422, 423, 424, 431, 432, 433}; +std::vector mExcludedChipMC = {66, 67, 68, 75, 76, 77, 84, 85, 86, 93, 94, 95, 102, 103, 104, 265, 266, 267, 274, 275, 276, 283, 284, 285, 413, 414, 415, 422, 423, 424, 431, 432, 433}; } // namespace study } // namespace its diff --git a/Detectors/ITSMFT/ITS/postprocessing/studies/src/Efficiency.cxx b/Detectors/ITSMFT/ITS/postprocessing/studies/src/Efficiency.cxx index e3f43b700dc3d..90b1fe74eacca 100644 --- a/Detectors/ITSMFT/ITS/postprocessing/studies/src/Efficiency.cxx +++ b/Detectors/ITSMFT/ITS/postprocessing/studies/src/Efficiency.cxx @@ -128,10 +128,10 @@ class EfficiencyStudy : public Task std::unique_ptr mPhiOriginal[NLAYERS]; std::unique_ptr mEtaOriginal[NLAYERS]; std::unique_ptr mPtOriginal[NLAYERS]; - TH1D* mPtDuplicated[NLAYERS]; - TH1D* mEtaDuplicated[NLAYERS]; - TH1D* mPhiDuplicated[NLAYERS]; - TH1D* mPhiOriginalIfDuplicated[NLAYERS]; + std::unique_ptr mPtDuplicated[NLAYERS]; + std::unique_ptr mEtaDuplicated[NLAYERS]; + std::unique_ptr mPhiDuplicated[NLAYERS]; + std::unique_ptr mPhiOriginalIfDuplicated[NLAYERS]; std::unique_ptr mZvsPhiDUplicated[NLAYERS]; @@ -148,37 +148,37 @@ class EfficiencyStudy : public Task std::unique_ptr mEfficiencyGoodMatch_layer[NLAYERS]; std::unique_ptr mEfficiencyFakeMatch_layer[NLAYERS]; std::unique_ptr mEfficiencyTotal_layer[NLAYERS]; - TH2D* mEfficiencyGoodMatchPt_layer[NLAYERS]; - TH2D* mEfficiencyFakeMatchPt_layer[NLAYERS]; - TH2D* mEfficiencyGoodMatchEta_layer[NLAYERS]; - TH2D* mEfficiencyFakeMatchEta_layer[NLAYERS]; - TH2D* mEfficiencyGoodMatchPhi_layer[NLAYERS]; - TH2D* mEfficiencyGoodMatchPhiOriginal_layer[NLAYERS]; - TH2D* mEfficiencyFakeMatchPhi_layer[NLAYERS]; - - // TH2D* mEfficiencyColEta[NLAYERS]; - TH2D* mDenColEta[NLAYERS]; - TH2D* mNumColEta[NLAYERS]; - TH2D* mDenRowPhi[NLAYERS]; - TH2D* mNumRowPhi[NLAYERS]; - TH2D* mDenRowCol[NLAYERS]; - TH2D* mNumRowCol[NLAYERS]; + std::unique_ptr mEfficiencyGoodMatchPt_layer[NLAYERS]; + std::unique_ptr mEfficiencyFakeMatchPt_layer[NLAYERS]; + std::unique_ptr mEfficiencyGoodMatchEta_layer[NLAYERS]; + std::unique_ptr mEfficiencyFakeMatchEta_layer[NLAYERS]; + std::unique_ptr mEfficiencyGoodMatchPhi_layer[NLAYERS]; + std::unique_ptr mEfficiencyGoodMatchPhiOriginal_layer[NLAYERS]; + std::unique_ptr mEfficiencyFakeMatchPhi_layer[NLAYERS]; + + // std::unique_ptr mEfficiencyColEta[NLAYERS]; + std::unique_ptr mDenColEta[NLAYERS]; + std::unique_ptr mNumColEta[NLAYERS]; + std::unique_ptr mDenRowPhi[NLAYERS]; + std::unique_ptr mNumRowPhi[NLAYERS]; + std::unique_ptr mDenRowCol[NLAYERS]; + std::unique_ptr mNumRowCol[NLAYERS]; // phi, eta, pt of the duplicated cluster per layer - TH2D* mPt_EtaDupl[NLAYERS]; + std::unique_ptr mPt_EtaDupl[NLAYERS]; // duplicated per layer and per cut std::unique_ptr mDuplicatedEtaAllPt[NLAYERS]; std::unique_ptr mDuplicatedEta[NLAYERS][3]; std::unique_ptr mDuplicatedPhiAllPt[NLAYERS]; std::unique_ptr mDuplicatedPhi[NLAYERS][3]; - TH1D* mDuplicatedPt[NLAYERS]; - TH1D* mDuplicatedRow[NLAYERS]; - TH1D* mDuplicatedCol[NLAYERS]; - TH1D* mDuplicatedZ[NLAYERS]; - TH2D* mDuplicatedPtEta[NLAYERS]; - TH2D* mDuplicatedPtPhi[NLAYERS]; - TH2D* mDuplicatedEtaPhi[NLAYERS]; + std::unique_ptr mDuplicatedPt[NLAYERS]; + std::unique_ptr mDuplicatedRow[NLAYERS]; + std::unique_ptr mDuplicatedCol[NLAYERS]; + std::unique_ptr mDuplicatedZ[NLAYERS]; + std::unique_ptr mDuplicatedPtEta[NLAYERS]; + std::unique_ptr mDuplicatedPtPhi[NLAYERS]; + std::unique_ptr mDuplicatedEtaPhi[NLAYERS]; // matches per layer and per cut std::unique_ptr mNGoodMatchesEtaAllPt[NLAYERS]; @@ -191,26 +191,26 @@ class EfficiencyStudy : public Task std::unique_ptr mNFakeMatchesPhiAllPt[NLAYERS]; std::unique_ptr mNFakeMatchesPhi[NLAYERS][3]; - TH1D* mNGoodMatchesPt[NLAYERS]; - TH1D* mNFakeMatchesPt[NLAYERS]; + std::unique_ptr mNGoodMatchesPt[NLAYERS]; + std::unique_ptr mNFakeMatchesPt[NLAYERS]; - TH1D* mNGoodMatchesRow[NLAYERS]; - TH1D* mNFakeMatchesRow[NLAYERS]; + std::unique_ptr mNGoodMatchesRow[NLAYERS]; + std::unique_ptr mNFakeMatchesRow[NLAYERS]; - TH1D* mNGoodMatchesCol[NLAYERS]; - TH1D* mNFakeMatchesCol[NLAYERS]; + std::unique_ptr mNGoodMatchesCol[NLAYERS]; + std::unique_ptr mNFakeMatchesCol[NLAYERS]; - TH1D* mNGoodMatchesZ[NLAYERS]; - TH1D* mNFakeMatchesZ[NLAYERS]; + std::unique_ptr mNGoodMatchesZ[NLAYERS]; + std::unique_ptr mNFakeMatchesZ[NLAYERS]; - TH2D* mNGoodMatchesPtEta[NLAYERS]; - TH2D* mNFakeMatchesPtEta[NLAYERS]; + std::unique_ptr mNGoodMatchesPtEta[NLAYERS]; + std::unique_ptr mNFakeMatchesPtEta[NLAYERS]; - TH2D* mNGoodMatchesPtPhi[NLAYERS]; - TH2D* mNFakeMatchesPtPhi[NLAYERS]; + std::unique_ptr mNGoodMatchesPtPhi[NLAYERS]; + std::unique_ptr mNFakeMatchesPtPhi[NLAYERS]; - TH2D* mNGoodMatchesEtaPhi[NLAYERS]; - TH2D* mNFakeMatchesEtaPhi[NLAYERS]; + std::unique_ptr mNGoodMatchesEtaPhi[NLAYERS]; + std::unique_ptr mNFakeMatchesEtaPhi[NLAYERS]; // calculating the efficiency with TEfficiency class std::unique_ptr mEffPtGood[NLAYERS]; @@ -238,15 +238,15 @@ class EfficiencyStudy : public Task std::unique_ptr mEffPhiFakeAllPt[NLAYERS]; std::unique_ptr mEffPhiFake[NLAYERS][3]; - TH2D* mnGoodMatchesPt_layer[NLAYERS]; - TH2D* mnFakeMatchesPt_layer[NLAYERS]; + std::unique_ptr mnGoodMatchesPt_layer[NLAYERS]; + std::unique_ptr mnFakeMatchesPt_layer[NLAYERS]; - TH2D* mnGoodMatchesEta_layer[NLAYERS]; - TH2D* mnFakeMatchesEta_layer[NLAYERS]; + std::unique_ptr mnGoodMatchesEta_layer[NLAYERS]; + std::unique_ptr mnFakeMatchesEta_layer[NLAYERS]; - TH2D* mnGoodMatchesPhi_layer[NLAYERS]; - TH2D* mnGoodMatchesPhiOriginal_layer[NLAYERS]; - TH2D* mnFakeMatchesPhi_layer[NLAYERS]; + std::unique_ptr mnGoodMatchesPhi_layer[NLAYERS]; + std::unique_ptr mnGoodMatchesPhiOriginal_layer[NLAYERS]; + std::unique_ptr mnFakeMatchesPhi_layer[NLAYERS]; std::unique_ptr DCAxyData[NLAYERS]; std::unique_ptr DCAzData[NLAYERS]; @@ -254,39 +254,39 @@ class EfficiencyStudy : public Task std::unique_ptr DCAxyRejected[NLAYERS]; std::unique_ptr DCAzRejected[NLAYERS]; - TH1D* denPt[NLAYERS]; - TH1D* numPt[NLAYERS]; - TH1D* numPtGood[NLAYERS]; - TH1D* numPtFake[NLAYERS]; - - TH1D* denPhi[NLAYERS]; - TH1D* numPhi[NLAYERS]; - TH1D* numPhiGood[NLAYERS]; - TH1D* numPhiFake[NLAYERS]; - - TH1D* denEta[NLAYERS]; - TH1D* numEta[NLAYERS]; - TH1D* numEtaGood[NLAYERS]; - TH1D* numEtaFake[NLAYERS]; - - TH1D* denRow[NLAYERS]; - TH1D* numRow[NLAYERS]; - TH1D* numRowGood[NLAYERS]; - TH1D* numRowFake[NLAYERS]; - - TH1D* denCol[NLAYERS]; - TH1D* numCol[NLAYERS]; - TH1D* numColGood[NLAYERS]; - TH1D* numColFake[NLAYERS]; - TH1D* denZ[NLAYERS]; - TH1D* numZ[NLAYERS]; - TH1D* numZGood[NLAYERS]; - TH1D* numZFake[NLAYERS]; - - TH1D* numLayers; - TH1D* denLayers; - TH1D* numGoodLayers; - TH1D* numFakeLayers; + std::unique_ptr denPt[NLAYERS]; + std::unique_ptr numPt[NLAYERS]; + std::unique_ptr numPtGood[NLAYERS]; + std::unique_ptr numPtFake[NLAYERS]; + + std::unique_ptr denPhi[NLAYERS]; + std::unique_ptr numPhi[NLAYERS]; + std::unique_ptr numPhiGood[NLAYERS]; + std::unique_ptr numPhiFake[NLAYERS]; + + std::unique_ptr denEta[NLAYERS]; + std::unique_ptr numEta[NLAYERS]; + std::unique_ptr numEtaGood[NLAYERS]; + std::unique_ptr numEtaFake[NLAYERS]; + + std::unique_ptr denRow[NLAYERS]; + std::unique_ptr numRow[NLAYERS]; + std::unique_ptr numRowGood[NLAYERS]; + std::unique_ptr numRowFake[NLAYERS]; + + std::unique_ptr denCol[NLAYERS]; + std::unique_ptr numCol[NLAYERS]; + std::unique_ptr numColGood[NLAYERS]; + std::unique_ptr numColFake[NLAYERS]; + std::unique_ptr denZ[NLAYERS]; + std::unique_ptr numZ[NLAYERS]; + std::unique_ptr numZGood[NLAYERS]; + std::unique_ptr numZFake[NLAYERS]; + + std::unique_ptr numLayers; + std::unique_ptr denLayers; + std::unique_ptr numGoodLayers; + std::unique_ptr numFakeLayers; int nDuplicatedClusters[NLAYERS] = {0}; int nTracksSelected[NLAYERS] = {0}; // denominator fot the efficiency calculation @@ -300,17 +300,17 @@ class EfficiencyStudy : public Task std::unique_ptr chi2trackAccepted; /// checking where the duplicated not found are (histograms filled with the orifinal cluster variables) - TH1D* phiFound[NLAYERS]; - TH1D* rowFound[NLAYERS]; - TH1D* phiNotFound[NLAYERS]; - TH1D* rowNotFound[NLAYERS]; - TH1D* zFound[NLAYERS]; - TH1D* zNotFound[NLAYERS]; - TH2D* colFoundOriginalVsDuplicated[NLAYERS]; - TH1D* colFoundOriginal[NLAYERS]; - TH1D* colNotFound[NLAYERS]; - TH1D* radiusFound[NLAYERS]; - TH1D* radiusNotFound[NLAYERS]; + std::unique_ptr phiFound[NLAYERS]; + std::unique_ptr rowFound[NLAYERS]; + std::unique_ptr phiNotFound[NLAYERS]; + std::unique_ptr rowNotFound[NLAYERS]; + std::unique_ptr zFound[NLAYERS]; + std::unique_ptr zNotFound[NLAYERS]; + std::unique_ptr colFoundOriginalVsDuplicated[NLAYERS]; + std::unique_ptr colFoundOriginal[NLAYERS]; + std::unique_ptr colNotFound[NLAYERS]; + std::unique_ptr radiusFound[NLAYERS]; + std::unique_ptr radiusNotFound[NLAYERS]; std::unique_ptr m2DClusterFoundPositions; std::unique_ptr m2DClusterNotFoundPositions; std::unique_ptr mChipNotFound; @@ -365,10 +365,10 @@ void EfficiencyStudy::init(InitContext& ic) chipOrigVsOverlap = std::make_unique("chipOrigVsOverlap", ";chipID Overlap;chipID Original", 9, 0, 9, 9, 0, 9); chipmap = std::make_unique("chipmap", ";Column;Row", 1024, 0, 1023, 512, -0.5, 511.5); - numLayers = new TH1D("numLayers", "numLayers; ; Efficiency", 3, -0.5, 2.5); - numGoodLayers = new TH1D("numGoodLayers", "numGoodLayers; ; Efficiency", 3, -0.5, 2.5); - numFakeLayers = new TH1D("numFakeLayers", "numFakeLayers; ; Efficiency", 3, -0.5, 2.5); - denLayers = new TH1D("denLayers", "denLayers; ; Efficiency", 3, -0.5, 2.5); + numLayers = std::make_unique("numLayers", "numLayers; ; Efficiency", 3, -0.5, 2.5); + numGoodLayers = std::make_unique("numGoodLayers", "numGoodLayers; ; Efficiency", 3, -0.5, 2.5); + numFakeLayers = std::make_unique("numFakeLayers", "numFakeLayers; ; Efficiency", 3, -0.5, 2.5); + denLayers = std::make_unique("denLayers", "denLayers; ; Efficiency", 3, -0.5, 2.5); for (int i = 0; i < NLAYERS; i++) { @@ -389,10 +389,10 @@ void EfficiencyStudy::init(InitContext& ic) mZvsPhiDUplicated[i] = std::make_unique(Form("zvsphiDuplicated_L%d", i), ";z (cm);phi (rad)", 400, -20, 20, 90, -3.2, 3.2); - mPtDuplicated[i] = new TH1D(Form("ptDuplicated_L%d", i), ";pt (GeV/c); ", nbPt, 0, 7.5); // xbins); - mEtaDuplicated[i] = new TH1D(Form("etaDuplicated_L%d", i), ";eta; ", 40, -2, 2); - mPhiDuplicated[i] = new TH1D(Form("phiDuplicated_L%d", i), ";phi (rad); ", 90, -3.2, 3.2); - mPhiOriginalIfDuplicated[i] = new TH1D(Form("phiOriginalIfDuplicated_L%d", i), ";phi (rad); ", 90, -3.2, 3.2); + mPtDuplicated[i] = std::make_unique(Form("ptDuplicated_L%d", i), ";pt (GeV/c); ", nbPt, 0, 7.5); // xbins); + mEtaDuplicated[i] = std::make_unique(Form("etaDuplicated_L%d", i), ";eta; ", 40, -2, 2); + mPhiDuplicated[i] = std::make_unique(Form("phiDuplicated_L%d", i), ";phi (rad); ", 90, -3.2, 3.2); + mPhiOriginalIfDuplicated[i] = std::make_unique(Form("phiOriginalIfDuplicated_L%d", i), ";phi (rad); ", 90, -3.2, 3.2); mDCAxyDuplicated_layer[i] = std::make_unique(Form("dcaXYDuplicated_layer_L%d", i), "Distance between track and duplicated cluster ;DCA xy (cm); ", 100, -0.01, 0.01); mDCAzDuplicated_layer[i] = std::make_unique(Form("dcaZDuplicated_layer_L%d", i), "Distance between track and duplicated cluster ;DCA z (cm); ", 100, -0.01, 0.01); @@ -400,65 +400,65 @@ void EfficiencyStudy::init(InitContext& ic) mEfficiencyFakeMatch_layer[i] = std::make_unique(Form("mEfficiencyFakeMatch_layer_L%d", i), ";#sigma(DCA) cut;Efficiency;", 20, 0.5, 20.5); mEfficiencyTotal_layer[i] = std::make_unique(Form("mEfficiencyTotal_layer_L%d", i), ";#sigma(DCA) cut;Efficiency;", 20, 0.5, 20.5); - mEfficiencyGoodMatchPt_layer[i] = new TH2D(Form("mEfficiencyGoodMatchPt_layer_L%d", i), ";#it{p}_{T} (GeV/c);#sigma(DCA) cut;Efficiency;", nbPt, 0, 7.5, /* xbins*/ 20, 0.5, 20.5); - mEfficiencyFakeMatchPt_layer[i] = new TH2D(Form("mEfficiencyFakeMatchPt_layer_L%d", i), ";#it{p}_{T} (GeV/c);#sigma(DCA) cut;Efficiency;", nbPt, 0, 7.5, /* xbins*/ 20, 0.5, 20.5); + mEfficiencyGoodMatchPt_layer[i] = std::make_unique(Form("mEfficiencyGoodMatchPt_layer_L%d", i), ";#it{p}_{T} (GeV/c);#sigma(DCA) cut;Efficiency;", nbPt, 0, 7.5, /* xbins*/ 20, 0.5, 20.5); + mEfficiencyFakeMatchPt_layer[i] = std::make_unique(Form("mEfficiencyFakeMatchPt_layer_L%d", i), ";#it{p}_{T} (GeV/c);#sigma(DCA) cut;Efficiency;", nbPt, 0, 7.5, /* xbins*/ 20, 0.5, 20.5); - mEfficiencyGoodMatchEta_layer[i] = new TH2D(Form("mEfficiencyGoodMatchEta_layer_L%d", i), ";#eta;#sigma(DCA) cut;Efficiency;", 40, -2, 2, 20, 0.5, 20.5); - mEfficiencyFakeMatchEta_layer[i] = new TH2D(Form("mEfficiencyFakeMatchEta_layer_L%d", i), ";#eta;#sigma(DCA) cut;Efficiency;", 40, -2, 2, 20, 0.5, 20.5); + mEfficiencyGoodMatchEta_layer[i] = std::make_unique(Form("mEfficiencyGoodMatchEta_layer_L%d", i), ";#eta;#sigma(DCA) cut;Efficiency;", 40, -2, 2, 20, 0.5, 20.5); + mEfficiencyFakeMatchEta_layer[i] = std::make_unique(Form("mEfficiencyFakeMatchEta_layer_L%d", i), ";#eta;#sigma(DCA) cut;Efficiency;", 40, -2, 2, 20, 0.5, 20.5); - mEfficiencyGoodMatchPhi_layer[i] = new TH2D(Form("mEfficiencyGoodMatchPhi_layer_L%d", i), ";#phi;#sigma(DCA) cut;Efficiency;", 90, -3.2, 3.2, 20, 0.5, 20.5); - mEfficiencyGoodMatchPhiOriginal_layer[i] = new TH2D(Form("mEfficiencyGoodMatchPhiOriginal_layer_L%d", i), ";#phi Original;#sigma(DCA) cut;Efficiency;", 90, -3.2, 3.2, 20, 0.5, 20.5); - mEfficiencyFakeMatchPhi_layer[i] = new TH2D(Form("mEfficiencyFakeMatchPhi_layer_L%d", i), ";#phi;#sigma(DCA) cut;Efficiency;", 90, -3.2, 3.2, 20, 0.5, 20.5); + mEfficiencyGoodMatchPhi_layer[i] = std::make_unique(Form("mEfficiencyGoodMatchPhi_layer_L%d", i), ";#phi;#sigma(DCA) cut;Efficiency;", 90, -3.2, 3.2, 20, 0.5, 20.5); + mEfficiencyGoodMatchPhiOriginal_layer[i] = std::make_unique(Form("mEfficiencyGoodMatchPhiOriginal_layer_L%d", i), ";#phi Original;#sigma(DCA) cut;Efficiency;", 90, -3.2, 3.2, 20, 0.5, 20.5); + mEfficiencyFakeMatchPhi_layer[i] = std::make_unique(Form("mEfficiencyFakeMatchPhi_layer_L%d", i), ";#phi;#sigma(DCA) cut;Efficiency;", 90, -3.2, 3.2, 20, 0.5, 20.5); - mPt_EtaDupl[i] = new TH2D(Form("mPt_EtaDupl_L%d", i), ";#it{p}_{T} (GeV/c);#eta; ", 100, 0, 10, 100, -2, 2); + mPt_EtaDupl[i] = std::make_unique(Form("mPt_EtaDupl_L%d", i), ";#it{p}_{T} (GeV/c);#eta; ", 100, 0, 10, 100, -2, 2); - mDuplicatedPt[i] = new TH1D(Form("mDuplicatedPt_log_L%d", i), Form("; #it{p}_{T} (GeV/c); Number of duplciated clusters L%d", i), nbPt, 0, 7.5 /* xbins*/); + mDuplicatedPt[i] = std::make_unique(Form("mDuplicatedPt_log_L%d", i), Form("; #it{p}_{T} (GeV/c); Number of duplciated clusters L%d", i), nbPt, 0, 7.5 /* xbins*/); mDuplicatedPt[i]->Sumw2(); - mNGoodMatchesPt[i] = new TH1D(Form("mNGoodMatchesPt_L%d", i), Form("; #it{p}_{T} (GeV/c); Number of good matches L%d", i), nbPt, 0, 7.5 /* xbins*/); + mNGoodMatchesPt[i] = std::make_unique(Form("mNGoodMatchesPt_L%d", i), Form("; #it{p}_{T} (GeV/c); Number of good matches L%d", i), nbPt, 0, 7.5 /* xbins*/); mNGoodMatchesPt[i]->Sumw2(); - mNFakeMatchesPt[i] = new TH1D(Form("mNFakeMatchesPt_L%d", i), Form("; #it{p}_{T} (GeV/c); Number of fake matches L%d", i), nbPt, 0, 7.5 /* xbins*/); + mNFakeMatchesPt[i] = std::make_unique(Form("mNFakeMatchesPt_L%d", i), Form("; #it{p}_{T} (GeV/c); Number of fake matches L%d", i), nbPt, 0, 7.5 /* xbins*/); mNFakeMatchesPt[i]->Sumw2(); - mDuplicatedRow[i] = new TH1D(Form("mDuplicatedRow_L%d", i), Form("; Row; Number of duplciated clusters L%d", i), 128, -0.5, 511.5); + mDuplicatedRow[i] = std::make_unique(Form("mDuplicatedRow_L%d", i), Form("; Row; Number of duplciated clusters L%d", i), 128, -0.5, 511.5); mDuplicatedRow[i]->Sumw2(); - mNGoodMatchesRow[i] = new TH1D(Form("mNGoodMatchesRow_L%d", i), Form("; Row; Number of good matches L%d", i), 128, -0.5, 511.5); + mNGoodMatchesRow[i] = std::make_unique(Form("mNGoodMatchesRow_L%d", i), Form("; Row; Number of good matches L%d", i), 128, -0.5, 511.5); mNGoodMatchesRow[i]->Sumw2(); - mNFakeMatchesRow[i] = new TH1D(Form("mNFakeMatchesRow_L%d", i), Form(";Row; Number of fake matches L%d", i), 128, -0.5, 511.5); + mNFakeMatchesRow[i] = std::make_unique(Form("mNFakeMatchesRow_L%d", i), Form(";Row; Number of fake matches L%d", i), 128, -0.5, 511.5); mNFakeMatchesRow[i]->Sumw2(); - mDuplicatedCol[i] = new TH1D(Form("mDuplicatedCol_L%d", i), Form("; Col; Number of duplciated clusters L%d", i), 128, -0.5, 1023.5); + mDuplicatedCol[i] = std::make_unique(Form("mDuplicatedCol_L%d", i), Form("; Col; Number of duplciated clusters L%d", i), 128, -0.5, 1023.5); mDuplicatedCol[i]->Sumw2(); - mNGoodMatchesCol[i] = new TH1D(Form("mNGoodMatchesCol_L%d", i), Form("; Col; Number of good matches L%d", i), 128, -0.5, 1023.5); + mNGoodMatchesCol[i] = std::make_unique(Form("mNGoodMatchesCol_L%d", i), Form("; Col; Number of good matches L%d", i), 128, -0.5, 1023.5); mNGoodMatchesCol[i]->Sumw2(); - mNFakeMatchesCol[i] = new TH1D(Form("mNFakeMatchesCol_L%d", i), Form(";Col; Number of fake matches L%d", i), 128, -0.5, 1023.5); + mNFakeMatchesCol[i] = std::make_unique(Form("mNFakeMatchesCol_L%d", i), Form(";Col; Number of fake matches L%d", i), 128, -0.5, 1023.5); mNFakeMatchesCol[i]->Sumw2(); - mDuplicatedZ[i] = new TH1D(Form("mDuplicatedZ_L%d", i), Form("; Z (cm); Number of duplciated clusters L%d", i), 100, -15, 15); + mDuplicatedZ[i] = std::make_unique(Form("mDuplicatedZ_L%d", i), Form("; Z (cm); Number of duplciated clusters L%d", i), 100, -15, 15); mDuplicatedZ[i]->Sumw2(); - mNGoodMatchesZ[i] = new TH1D(Form("mNGoodMatchesZ_L%d", i), Form("; Z (cm); Number of good matches L%d", i), 100, -15, 15); + mNGoodMatchesZ[i] = std::make_unique(Form("mNGoodMatchesZ_L%d", i), Form("; Z (cm); Number of good matches L%d", i), 100, -15, 15); mNGoodMatchesZ[i]->Sumw2(); - mNFakeMatchesZ[i] = new TH1D(Form("mNFakeMatchesZ_L%d", i), Form(";Z (cm); Number of fake matches L%d", i), 100, -15, 15); + mNFakeMatchesZ[i] = std::make_unique(Form("mNFakeMatchesZ_L%d", i), Form(";Z (cm); Number of fake matches L%d", i), 100, -15, 15); mNFakeMatchesZ[i]->Sumw2(); - mDuplicatedPtEta[i] = new TH2D(Form("mDuplicatedPtEta_log_L%d", i), Form("; #it{p}_{T} (GeV/c);#eta; Number of duplciated clusters L%d", i), nbPt, 0, 7.5 /* xbins*/, 40, -2, 2); + mDuplicatedPtEta[i] = std::make_unique(Form("mDuplicatedPtEta_log_L%d", i), Form("; #it{p}_{T} (GeV/c);#eta; Number of duplciated clusters L%d", i), nbPt, 0, 7.5 /* xbins*/, 40, -2, 2); mDuplicatedPtEta[i]->Sumw2(); - mNGoodMatchesPtEta[i] = new TH2D(Form("mNGoodMatchesPtEta_L%d", i), Form("; #it{p}_{T} (GeV/c);#eta; Number of good matches L%d", i), nbPt, 0, 7.5 /* xbins*/, 40, -2, 2); + mNGoodMatchesPtEta[i] = std::make_unique(Form("mNGoodMatchesPtEta_L%d", i), Form("; #it{p}_{T} (GeV/c);#eta; Number of good matches L%d", i), nbPt, 0, 7.5 /* xbins*/, 40, -2, 2); mNGoodMatchesPtEta[i]->Sumw2(); - mNFakeMatchesPtEta[i] = new TH2D(Form("mNFakeMatchesPtEta_L%d", i), Form("; #it{p}_{T} (GeV/c);#eta; Number of good matches L%d", i), nbPt, 0, 7.5 /* xbins*/, 40, -2, 2); + mNFakeMatchesPtEta[i] = std::make_unique(Form("mNFakeMatchesPtEta_L%d", i), Form("; #it{p}_{T} (GeV/c);#eta; Number of good matches L%d", i), nbPt, 0, 7.5 /* xbins*/, 40, -2, 2); mNFakeMatchesPtEta[i]->Sumw2(); - mDuplicatedPtPhi[i] = new TH2D(Form("mDuplicatedPtPhi_log_L%d", i), Form("; #it{p}_{T} (GeV/c);#phi (rad); Number of duplciated clusters L%d", i), nbPt, 0, 7.5 /* xbins*/, 90, -3.2, 3.2); + mDuplicatedPtPhi[i] = std::make_unique(Form("mDuplicatedPtPhi_log_L%d", i), Form("; #it{p}_{T} (GeV/c);#phi (rad); Number of duplciated clusters L%d", i), nbPt, 0, 7.5 /* xbins*/, 90, -3.2, 3.2); mDuplicatedPtPhi[i]->Sumw2(); - mNGoodMatchesPtPhi[i] = new TH2D(Form("mNGoodMatchesPtPhi_L%d", i), Form("; #it{p}_{T} (GeV/c);#phi (rad); Number of good matches L%d", i), nbPt, 0, 7.5 /* xbins*/, 90, -3.2, 3.2); + mNGoodMatchesPtPhi[i] = std::make_unique(Form("mNGoodMatchesPtPhi_L%d", i), Form("; #it{p}_{T} (GeV/c);#phi (rad); Number of good matches L%d", i), nbPt, 0, 7.5 /* xbins*/, 90, -3.2, 3.2); mNGoodMatchesPtPhi[i]->Sumw2(); - mNFakeMatchesPtPhi[i] = new TH2D(Form("mNFakeMatchesPtPhi_L%d", i), Form("; #it{p}_{T} (GeV/c);#phi (rad); Number of good matches L%d", i), nbPt, 0, 7.5 /* xbins*/, 90, -3.2, 3.2); + mNFakeMatchesPtPhi[i] = std::make_unique(Form("mNFakeMatchesPtPhi_L%d", i), Form("; #it{p}_{T} (GeV/c);#phi (rad); Number of good matches L%d", i), nbPt, 0, 7.5 /* xbins*/, 90, -3.2, 3.2); mNFakeMatchesPtPhi[i]->Sumw2(); - mDuplicatedEtaPhi[i] = new TH2D(Form("mDuplicatedEtaPhi_L%d", i), Form("; #eta;#phi (rad); Number of duplciated clusters L%d", i), 40, -2, 2, 90, -3.2, 3.2); + mDuplicatedEtaPhi[i] = std::make_unique(Form("mDuplicatedEtaPhi_L%d", i), Form("; #eta;#phi (rad); Number of duplciated clusters L%d", i), 40, -2, 2, 90, -3.2, 3.2); mDuplicatedEtaPhi[i]->Sumw2(); - mNGoodMatchesEtaPhi[i] = new TH2D(Form("mNGoodMatchesEtaPhi_L%d", i), Form("; #eta;#phi (rad); Number of good matches L%d", i), 40, -2, 2, 90, -3.2, 3.2); + mNGoodMatchesEtaPhi[i] = std::make_unique(Form("mNGoodMatchesEtaPhi_L%d", i), Form("; #eta;#phi (rad); Number of good matches L%d", i), 40, -2, 2, 90, -3.2, 3.2); mNGoodMatchesEtaPhi[i]->Sumw2(); - mNFakeMatchesEtaPhi[i] = new TH2D(Form("mNFakeMatchesEtaPhi_L%d", i), Form("; #eta;#phi (rad); Number of good matches L%d", i), 40, -2, 2, 90, -3.2, 3.2); + mNFakeMatchesEtaPhi[i] = std::make_unique(Form("mNFakeMatchesEtaPhi_L%d", i), Form("; #eta;#phi (rad); Number of good matches L%d", i), 40, -2, 2, 90, -3.2, 3.2); mNFakeMatchesEtaPhi[i]->Sumw2(); mDuplicatedEtaAllPt[i] = std::make_unique(Form("mDuplicatedEtaAllPt_L%d", i), Form("; #eta; Number of duplicated clusters L%d", i), 40, -2, 2); @@ -469,67 +469,67 @@ void EfficiencyStudy::init(InitContext& ic) mNGoodMatchesPhiAllPt[i] = std::make_unique(Form("mNGoodMatchesPhiAllPt_L%d", i), Form("; #phi (rad); Number of good matches L%d", i), 90, -3.2, 3.2); mNFakeMatchesPhiAllPt[i] = std::make_unique(Form("mNFakeMatchesPhiAllPt_L%d", i), Form("; #phi (rad); Number of fake matches L%d", i), 90, -3.2, 3.2); - mnGoodMatchesPt_layer[i] = new TH2D(Form("mnGoodMatchesPt_layer_L%d", i), ";pt; nGoodMatches", nbPt, 0, 7.5 /* xbins*/, 20, 0.5, 20.5); - mnFakeMatchesPt_layer[i] = new TH2D(Form("mnFakeMatchesPt_layer_L%d", i), ";pt; nFakeMatches", nbPt, 0, 7.5 /* xbins*/, 20, 0.5, 20.5); - mnGoodMatchesEta_layer[i] = new TH2D(Form("mnGoodMatchesEta_layer_L%d", i), ";#eta; nGoodMatches", 40, -2, 2, 20, 0.5, 20.5); - mnFakeMatchesEta_layer[i] = new TH2D(Form("mnFakeMatchesEta_layer_L%d", i), ";#eta; nFakeMatches", 40, -2, 2, 20, 0.5, 20.5); - mnGoodMatchesPhi_layer[i] = new TH2D(Form("mnGoodMatchesPhi_layer_L%d", i), ";#Phi; nGoodMatches", 90, -3.2, 3.2, 20, 0.5, 20.5); - mnGoodMatchesPhiOriginal_layer[i] = new TH2D(Form("mnGoodMatchesPhiOriginal_layer_L%d", i), ";#Phi of the original Cluster; nGoodMatches", 90, -3.2, 3.2, 20, 0.5, 20.5); - mnFakeMatchesPhi_layer[i] = new TH2D(Form("mnFakeMatchesPhi_layer_L%d", i), ";#Phi; nFakeMatches", 90, -3.2, 3.2, 20, 0.5, 20.5); - - denPt[i] = new TH1D(Form("denPt_L%d", i), Form("denPt_L%d", i), nbPt, 0, 7.5 /* xbins*/); - numPt[i] = new TH1D(Form("numPt_L%d", i), Form("numPt_L%d", i), nbPt, 0, 7.5 /* xbins*/); - numPtGood[i] = new TH1D(Form("numPtGood_L%d", i), Form("numPtGood_L%d", i), nbPt, 0, 7.5 /* xbins*/); - numPtFake[i] = new TH1D(Form("numPtFake_L%d", i), Form("numPtFake_L%d", i), nbPt, 0, 7.5 /* xbins*/); - - denPhi[i] = new TH1D(Form("denPhi_L%d", i), Form("denPhi_L%d", i), 90, -3.2, 3.2); - numPhi[i] = new TH1D(Form("numPhi_L%d", i), Form("numPhi_L%d", i), 90, -3.2, 3.2); - numPhiGood[i] = new TH1D(Form("numPhiGood_L%d", i), Form("numPhiGood_L%d", i), 90, -3.2, 3.2); - numPhiFake[i] = new TH1D(Form("numPhiFake_L%d", i), Form("numPhiFake_L%d", i), 90, -3.2, 3.2); - - denEta[i] = new TH1D(Form("denEta_L%d", i), Form("denEta_L%d", i), 200, -2, 2); - numEta[i] = new TH1D(Form("numEta_L%d", i), Form("numEta_L%d", i), 200, -2, 2); - numEtaGood[i] = new TH1D(Form("numEtaGood_L%d", i), Form("numEtaGood_L%d", i), 200, -2, 2); - numEtaFake[i] = new TH1D(Form("numEtaFake_L%d", i), Form("numEtaFake_L%d", i), 200, -2, 2); - - denRow[i] = new TH1D(Form("denRow_L%d", i), Form("denRow_L%d", i), 128, -0.5, 511.5); - numRow[i] = new TH1D(Form("numRow_L%d", i), Form("numRow_L%d", i), 128, -0.5, 511.5); - numRowGood[i] = new TH1D(Form("numRowGood_L%d", i), Form("numRowGood_L%d", i), 128, -0.5, 511.5); - numRowFake[i] = new TH1D(Form("numRowFake_L%d", i), Form("numRowFake_L%d", i), 128, -0.5, 511.5); - - denCol[i] = new TH1D(Form("denCol_L%d", i), Form("denCol_L%d", i), 128, -0.5, 1023.5); - numCol[i] = new TH1D(Form("numCol_L%d", i), Form("numCol_L%d", i), 128, -0.5, 1023.5); - numColGood[i] = new TH1D(Form("numColGood_L%d", i), Form("numColGood_L%d", i), 128, -0.5, 1023.5); - numColFake[i] = new TH1D(Form("numColFake_L%d", i), Form("numColFake_L%d", i), 128, -0.5, 1023.5); - - denZ[i] = new TH1D(Form("denZ_L%d", i), Form("denZ_L%d", i), 100, -15, 15); - numZ[i] = new TH1D(Form("numZ_L%d", i), Form("numZ_L%d", i), 100, -15, 15); - numZGood[i] = new TH1D(Form("numZGood_L%d", i), Form("numZGood_L%d", i), 100, -15, 15); - numZFake[i] = new TH1D(Form("numZFake_L%d", i), Form("numZFake_L%d", i), 100, -15, 15); - - mDenColEta[i] = new TH2D(Form("mDenColEta_L%d", i), Form("mDenColEta_L%d", i), 128, -0.5, 1023.5, 50, -1, 1); - mNumColEta[i] = new TH2D(Form("mNumColEta_L%d", i), Form("mNumColEta_L%d", i), 128, -0.5, 1023.5, 50, -1, 1); - - mDenRowPhi[i] = new TH2D(Form("mDenRowPhi_L%d", i), Form("mDenRowPhi_L%d", i), 128, -0.5, 511.5, 90, -3.2, 3.2); - mNumRowPhi[i] = new TH2D(Form("mNumRowPhi_L%d", i), Form("mNumRowPhi_L%d", i), 128, -0.5, 511.5, 90, -3.2, 3.2); - - mDenRowCol[i] = new TH2D(Form("mDenRowCol_L%d", i), Form("mDenRowCol_L%d", i), 128, -0.5, 511.5, 128, -0.5, 1023.5); - mNumRowCol[i] = new TH2D(Form("mNumRowCol_L%d", i), Form("mNumRowCol_L%d", i), 128, -0.5, 511.5, 128, -0.5, 1023.5); + mnGoodMatchesPt_layer[i] = std::make_unique(Form("mnGoodMatchesPt_layer_L%d", i), ";pt; nGoodMatches", nbPt, 0, 7.5 /* xbins*/, 20, 0.5, 20.5); + mnFakeMatchesPt_layer[i] = std::make_unique(Form("mnFakeMatchesPt_layer_L%d", i), ";pt; nFakeMatches", nbPt, 0, 7.5 /* xbins*/, 20, 0.5, 20.5); + mnGoodMatchesEta_layer[i] = std::make_unique(Form("mnGoodMatchesEta_layer_L%d", i), ";#eta; nGoodMatches", 40, -2, 2, 20, 0.5, 20.5); + mnFakeMatchesEta_layer[i] = std::make_unique(Form("mnFakeMatchesEta_layer_L%d", i), ";#eta; nFakeMatches", 40, -2, 2, 20, 0.5, 20.5); + mnGoodMatchesPhi_layer[i] = std::make_unique(Form("mnGoodMatchesPhi_layer_L%d", i), ";#Phi; nGoodMatches", 90, -3.2, 3.2, 20, 0.5, 20.5); + mnGoodMatchesPhiOriginal_layer[i] = std::make_unique(Form("mnGoodMatchesPhiOriginal_layer_L%d", i), ";#Phi of the original Cluster; nGoodMatches", 90, -3.2, 3.2, 20, 0.5, 20.5); + mnFakeMatchesPhi_layer[i] = std::make_unique(Form("mnFakeMatchesPhi_layer_L%d", i), ";#Phi; nFakeMatches", 90, -3.2, 3.2, 20, 0.5, 20.5); + + denPt[i] = std::make_unique(Form("denPt_L%d", i), Form("denPt_L%d", i), nbPt, 0, 7.5 /* xbins*/); + numPt[i] = std::make_unique(Form("numPt_L%d", i), Form("numPt_L%d", i), nbPt, 0, 7.5 /* xbins*/); + numPtGood[i] = std::make_unique(Form("numPtGood_L%d", i), Form("numPtGood_L%d", i), nbPt, 0, 7.5 /* xbins*/); + numPtFake[i] = std::make_unique(Form("numPtFake_L%d", i), Form("numPtFake_L%d", i), nbPt, 0, 7.5 /* xbins*/); + + denPhi[i] = std::make_unique(Form("denPhi_L%d", i), Form("denPhi_L%d", i), 90, -3.2, 3.2); + numPhi[i] = std::make_unique(Form("numPhi_L%d", i), Form("numPhi_L%d", i), 90, -3.2, 3.2); + numPhiGood[i] = std::make_unique(Form("numPhiGood_L%d", i), Form("numPhiGood_L%d", i), 90, -3.2, 3.2); + numPhiFake[i] = std::make_unique(Form("numPhiFake_L%d", i), Form("numPhiFake_L%d", i), 90, -3.2, 3.2); + + denEta[i] = std::make_unique(Form("denEta_L%d", i), Form("denEta_L%d", i), 200, -2, 2); + numEta[i] = std::make_unique(Form("numEta_L%d", i), Form("numEta_L%d", i), 200, -2, 2); + numEtaGood[i] = std::make_unique(Form("numEtaGood_L%d", i), Form("numEtaGood_L%d", i), 200, -2, 2); + numEtaFake[i] = std::make_unique(Form("numEtaFake_L%d", i), Form("numEtaFake_L%d", i), 200, -2, 2); + + denRow[i] = std::make_unique(Form("denRow_L%d", i), Form("denRow_L%d", i), 128, -0.5, 511.5); + numRow[i] = std::make_unique(Form("numRow_L%d", i), Form("numRow_L%d", i), 128, -0.5, 511.5); + numRowGood[i] = std::make_unique(Form("numRowGood_L%d", i), Form("numRowGood_L%d", i), 128, -0.5, 511.5); + numRowFake[i] = std::make_unique(Form("numRowFake_L%d", i), Form("numRowFake_L%d", i), 128, -0.5, 511.5); + + denCol[i] = std::make_unique(Form("denCol_L%d", i), Form("denCol_L%d", i), 128, -0.5, 1023.5); + numCol[i] = std::make_unique(Form("numCol_L%d", i), Form("numCol_L%d", i), 128, -0.5, 1023.5); + numColGood[i] = std::make_unique(Form("numColGood_L%d", i), Form("numColGood_L%d", i), 128, -0.5, 1023.5); + numColFake[i] = std::make_unique(Form("numColFake_L%d", i), Form("numColFake_L%d", i), 128, -0.5, 1023.5); + + denZ[i] = std::make_unique(Form("denZ_L%d", i), Form("denZ_L%d", i), 100, -15, 15); + numZ[i] = std::make_unique(Form("numZ_L%d", i), Form("numZ_L%d", i), 100, -15, 15); + numZGood[i] = std::make_unique(Form("numZGood_L%d", i), Form("numZGood_L%d", i), 100, -15, 15); + numZFake[i] = std::make_unique(Form("numZFake_L%d", i), Form("numZFake_L%d", i), 100, -15, 15); + + mDenColEta[i] = std::make_unique(Form("mDenColEta_L%d", i), Form("mDenColEta_L%d", i), 128, -0.5, 1023.5, 50, -1, 1); + mNumColEta[i] = std::make_unique(Form("mNumColEta_L%d", i), Form("mNumColEta_L%d", i), 128, -0.5, 1023.5, 50, -1, 1); + + mDenRowPhi[i] = std::make_unique(Form("mDenRowPhi_L%d", i), Form("mDenRowPhi_L%d", i), 128, -0.5, 511.5, 90, -3.2, 3.2); + mNumRowPhi[i] = std::make_unique(Form("mNumRowPhi_L%d", i), Form("mNumRowPhi_L%d", i), 128, -0.5, 511.5, 90, -3.2, 3.2); + + mDenRowCol[i] = std::make_unique(Form("mDenRowCol_L%d", i), Form("mDenRowCol_L%d", i), 128, -0.5, 511.5, 128, -0.5, 1023.5); + mNumRowCol[i] = std::make_unique(Form("mNumRowCol_L%d", i), Form("mNumRowCol_L%d", i), 128, -0.5, 511.5, 128, -0.5, 1023.5); IPOriginalxy[i] = std::make_unique(Form("IPOriginalxy_L%d", i), Form("IPOriginalxy_L%d", i), 500, -0.002, 0.002); IPOriginalz[i] = std::make_unique(Form("IPOriginalz_L%d", i), Form("IPOriginalz_L%d", i), 200, -10, 10); - phiFound[i] = new TH1D(Form("phiFound_L%d", i), Form("phiFound_L%d", i), 190, -3.2, 3.2); - rowFound[i] = new TH1D(Form("rowFound_L%d", i), Form("rowFound_L%d", i), 128, -0.5, 511.5); - phiNotFound[i] = new TH1D(Form("phiNotFound_L%d", i), Form("phiNotFound_L%d", i), 90, -3.2, 3.2); - rowNotFound[i] = new TH1D(Form("rowNotFound_L%d", i), Form("rowNotFound_L%d", i), 128, -0.5, 511.5); - zFound[i] = new TH1D(Form("zFound_L%d", i), Form("zFound_L%d", i), 100, -15, 15); - zNotFound[i] = new TH1D(Form("zNotFound%d", i), Form("zNotFound%d", i), 100, -15, 15); - colFoundOriginalVsDuplicated[i] = new TH2D(Form("colFoundOriginalVsDuplicated_L%d", i), Form("colFoundOriginalVsDuplicated_L%d; Col Original cluster; Col Overlap cluster", i), 9216, -0.5, 9215.5, 9216, -0.5, 9215.5); - colFoundOriginal[i] = new TH1D(Form("colFoundOriginal_L%d", i), Form("colFoundOriginal_L%d; Col Original cluster;", i), 9216, -0.5, 9215.5); - colNotFound[i] = new TH1D(Form("colNotFound_L%d", i), Form("colNotFound_L%d", i), 9216, -0.5, 9215.5); - radiusFound[i] = new TH1D(Form("radiusFound_L%d", i), Form("radiusFound_L%d", i), 80, 0, 6); - radiusNotFound[i] = new TH1D(Form("radiusNotFound_L%d", i), Form("radiusNotFound_L%d", i), 80, 0, 4); + phiFound[i] = std::make_unique(Form("phiFound_L%d", i), Form("phiFound_L%d", i), 190, -3.2, 3.2); + rowFound[i] = std::make_unique(Form("rowFound_L%d", i), Form("rowFound_L%d", i), 128, -0.5, 511.5); + phiNotFound[i] = std::make_unique(Form("phiNotFound_L%d", i), Form("phiNotFound_L%d", i), 90, -3.2, 3.2); + rowNotFound[i] = std::make_unique(Form("rowNotFound_L%d", i), Form("rowNotFound_L%d", i), 128, -0.5, 511.5); + zFound[i] = std::make_unique(Form("zFound_L%d", i), Form("zFound_L%d", i), 100, -15, 15); + zNotFound[i] = std::make_unique(Form("zNotFound%d", i), Form("zNotFound%d", i), 100, -15, 15); + colFoundOriginalVsDuplicated[i] = std::make_unique(Form("colFoundOriginalVsDuplicated_L%d", i), Form("colFoundOriginalVsDuplicated_L%d; Col Original cluster; Col Overlap cluster", i), 9216, -0.5, 9215.5, 9216, -0.5, 9215.5); + colFoundOriginal[i] = std::make_unique(Form("colFoundOriginal_L%d", i), Form("colFoundOriginal_L%d; Col Original cluster;", i), 9216, -0.5, 9215.5); + colNotFound[i] = std::make_unique(Form("colNotFound_L%d", i), Form("colNotFound_L%d", i), 9216, -0.5, 9215.5); + radiusFound[i] = std::make_unique(Form("radiusFound_L%d", i), Form("radiusFound_L%d", i), 80, 0, 6); + radiusNotFound[i] = std::make_unique(Form("radiusNotFound_L%d", i), Form("radiusNotFound_L%d", i), 80, 0, 4); for (int j = 0; j < 3; j++) { mDuplicatedEta[i][j] = std::make_unique(Form("mDuplicatedEta_L%d_pt%d", i, j), Form("%f < #it{p}_{T} < %f GeV/c; #eta; Number of duplicated clusters L%d", mrangesPt[j][0], mrangesPt[j][1], i), 40, -2, 2); @@ -1543,36 +1543,36 @@ void EfficiencyStudy::studyClusterSelectionMC() mOutFile->cd("EfficiencyCuts/"); std::cout << "Calculating efficiency..." << std::endl; - TH1D* axpt = new TH1D("axpt", "", 1, 0.05, 7.5); - TH1D* axRow = new TH1D("axRow", "", 1, -0.5, 511.5); - TH1D* axCol = new TH1D("axRow", "", 1, -0.5, 1023.5); - TH1D* axZ = new TH1D("axZ", "", 1, -15, 15); - TH2D* axptetaGood = new TH2D("axptetaGood", "", 1, 0.05, 7.5, 1, -2, 2); - TH2D* axptetaFake = new TH2D("axptetaFake", "", 1, 0.05, 7.5, 1, -2, 2); - TH2D* axptphiGood = new TH2D("axptphiGood", "", 1, 0.05, 7.5, 1, -3.2, 3.2); - TH2D* axptphiFake = new TH2D("axptphiFake", "", 1, 0.05, 7.5, 1, -3.2, 3.2); - TH2D* axetaphiGood = new TH2D("axetaphiGood", "", 1, -2, 2, 1, -3.2, 3.2); - TH2D* axetaphiFake = new TH2D("axetaphiFake", "", 1, -2, 2, 1, -3.2, 3.2); - TH1D* axetaAllPt = new TH1D("axetaAllPt", "", 1, -2, 2); - TH1D* axeta[NLAYERS]; - TH1D* axphi[NLAYERS]; + std::unique_ptr axpt = std::make_unique("axpt", "", 1, 0.05, 7.5); + std::unique_ptr axRow = std::make_unique("axRow", "", 1, -0.5, 511.5); + std::unique_ptr axCol = std::make_unique("axRow", "", 1, -0.5, 1023.5); + std::unique_ptr axZ = std::make_unique("axZ", "", 1, -15, 15); + std::unique_ptr axptetaGood = std::make_unique("axptetaGood", "", 1, 0.05, 7.5, 1, -2, 2); + std::unique_ptr axptetaFake = std::make_unique("axptetaFake", "", 1, 0.05, 7.5, 1, -2, 2); + std::unique_ptr axptphiGood = std::make_unique("axptphiGood", "", 1, 0.05, 7.5, 1, -3.2, 3.2); + std::unique_ptr axptphiFake = std::make_unique("axptphiFake", "", 1, 0.05, 7.5, 1, -3.2, 3.2); + std::unique_ptr axetaphiGood = std::make_unique("axetaphiGood", "", 1, -2, 2, 1, -3.2, 3.2); + std::unique_ptr axetaphiFake = std::make_unique("axetaphiFake", "", 1, -2, 2, 1, -3.2, 3.2); + std::unique_ptr axetaAllPt = std::make_unique("axetaAllPt", "", 1, -2, 2); + std::unique_ptr axeta[NLAYERS]; + std::unique_ptr axphi[NLAYERS]; for (int ipt = 0; ipt < 3; ipt++) { - axeta[ipt] = new TH1D(Form("axeta%d", ipt), Form("axeta%d", ipt), 1, -2, 2); - axphi[ipt] = new TH1D(Form("axphi%d", ipt), Form("axphi%d", ipt), 1, -3.2, 3.2); + axeta[ipt] = std::make_unique(Form("axeta%d", ipt), Form("axeta%d", ipt), 1, -2, 2); + axphi[ipt] = std::make_unique(Form("axphi%d", ipt), Form("axphi%d", ipt), 1, -3.2, 3.2); } - TH1D* axphiAllPt = new TH1D("axphi", "", 1, -3.2, 3.2); - - TCanvas* effPt[NLAYERS]; - TCanvas* effRow[NLAYERS]; - TCanvas* effCol[NLAYERS]; - TCanvas* effZ[NLAYERS]; - TCanvas* effPtEta[NLAYERS][2]; - TCanvas* effPtPhi[NLAYERS][2]; - TCanvas* effEtaPhi[NLAYERS][2]; - TCanvas* effEtaAllPt[NLAYERS]; - TCanvas* effEta[NLAYERS][3]; - TCanvas* effPhiAllPt[NLAYERS]; - TCanvas* effPhi[NLAYERS][3]; + std::unique_ptr axphiAllPt = std::make_unique("axphi", "", 1, -3.2, 3.2); + + std::unique_ptr effPt[NLAYERS]; + std::unique_ptr effRow[NLAYERS]; + std::unique_ptr effCol[NLAYERS]; + std::unique_ptr effZ[NLAYERS]; + std::unique_ptr effPtEta[NLAYERS][2]; + std::unique_ptr effPtPhi[NLAYERS][2]; + std::unique_ptr effEtaPhi[NLAYERS][2]; + std::unique_ptr effEtaAllPt[NLAYERS]; + std::unique_ptr effEta[NLAYERS][3]; + std::unique_ptr effPhiAllPt[NLAYERS]; + std::unique_ptr effPhi[NLAYERS][3]; ///////////////// plotting results for (int l = 0; l < 3; l++) { @@ -1581,7 +1581,7 @@ void EfficiencyStudy::studyClusterSelectionMC() } // Pt - effPt[l] = new TCanvas(Form("effPt_L%d", l)); + effPt[l] = std::make_unique(Form("effPt_L%d", l)); mEffPtGood[l] = std::make_unique(*mNGoodMatchesPt[l], *mDuplicatedPt[l]); stileEfficiencyGraph(mEffPtGood[l], Form("mEffPtGood_L%d", l), Form("L%d;#it{p}_{T} (GeV/#it{c});Efficiency", l), false, kFullDiamond, 1, kGreen + 3, kGreen + 3); @@ -1609,7 +1609,7 @@ void EfficiencyStudy::studyClusterSelectionMC() effPt[l]->Write(); // PtEtaGood - effPtEta[l][0] = new TCanvas(Form("effPtEtaGood_L%d", l)); + effPtEta[l][0] = std::make_unique(Form("effPtEtaGood_L%d", l)); mEffPtEtaGood[l] = std::make_unique(*mNGoodMatchesPtEta[l], *mDuplicatedPtEta[l]); stileEfficiencyGraph(mEffPtEtaGood[l], Form("mEffPtEtaGood_L%d", l), Form("L%d;#it{p}_{T} (GeV/#it{c});#eta;Efficiency", l), true); @@ -1640,7 +1640,7 @@ void EfficiencyStudy::studyClusterSelectionMC() } // Row - effRow[l] = new TCanvas(Form("effRow_L%d", l)); + effRow[l] = std::make_unique(Form("effRow_L%d", l)); for (int ibin = 1; ibin <= mNGoodMatchesRow[l]->GetNbinsX(); ibin++) { std::cout << "--- Good Row: Npass = " << mNGoodMatchesRow[l]->GetBinContent(ibin) << ", Nall = " << mDuplicatedRow[l]->GetBinContent(ibin) << " for ibin = " << ibin << std::endl; @@ -1672,7 +1672,7 @@ void EfficiencyStudy::studyClusterSelectionMC() effRow[l]->Write(); // Col - effCol[l] = new TCanvas(Form("effCol_L%d", l)); + effCol[l] = std::make_unique(Form("effCol_L%d", l)); for (int ibin = 1; ibin <= mNGoodMatchesCol[l]->GetNbinsX(); ibin++) { std::cout << "--- Good Col: Npass = " << mNGoodMatchesCol[l]->GetBinContent(ibin) << ", Nall = " << mDuplicatedCol[l]->GetBinContent(ibin) << " for ibin = " << ibin << std::endl; @@ -1704,7 +1704,7 @@ void EfficiencyStudy::studyClusterSelectionMC() effCol[l]->Write(); // Z - effZ[l] = new TCanvas(Form("effZ_L%d", l)); + effZ[l] = std::make_unique(Form("effZ_L%d", l)); for (int ibin = 1; ibin <= mNGoodMatchesZ[l]->GetNbinsX(); ibin++) { std::cout << "--- Good Z: Npass = " << mNGoodMatchesZ[l]->GetBinContent(ibin) << ", Nall = " << mDuplicatedZ[l]->GetBinContent(ibin) << " for ibin = " << ibin << std::endl; @@ -1736,7 +1736,7 @@ void EfficiencyStudy::studyClusterSelectionMC() effZ[l]->Write(); // PtEtaGood - effPtEta[l][0] = new TCanvas(Form("effPtEtaGood_L%d", l)); + effPtEta[l][0] = std::make_unique(Form("effPtEtaGood_L%d", l)); mEffPtEtaGood[l] = std::make_unique(*mNGoodMatchesPtEta[l], *mDuplicatedPtEta[l]); stileEfficiencyGraph(mEffPtEtaGood[l], Form("mEffPtEtaGood_L%d", l), Form("L%d;#it{p}_{T} (GeV/#it{c});#eta;Efficiency", l), true); @@ -1767,7 +1767,7 @@ void EfficiencyStudy::studyClusterSelectionMC() } // PtEtaFake - effPtEta[l][1] = new TCanvas(Form("effPtEtaFake_L%d", l)); + effPtEta[l][1] = std::make_unique(Form("effPtEtaFake_L%d", l)); mEffPtEtaFake[l] = std::make_unique(*mNFakeMatchesPtEta[l], *mDuplicatedPtEta[l]); stileEfficiencyGraph(mEffPtEtaFake[l], Form("mEffPtEtaFake_L%d", l), Form("L%d;#it{p}_{T} (GeV/#it{c});#eta;Efficiency", l), true); @@ -1781,7 +1781,7 @@ void EfficiencyStudy::studyClusterSelectionMC() effPtEta[l][1]->Write(); // PtPhiGood - effPtPhi[l][0] = new TCanvas(Form("effPtPhiGood_L%d", l)); + effPtPhi[l][0] = std::make_unique(Form("effPtPhiGood_L%d", l)); mEffPtPhiGood[l] = std::make_unique(*mNGoodMatchesPtPhi[l], *mDuplicatedPtPhi[l]); stileEfficiencyGraph(mEffPtPhiGood[l], Form("mEffPtPhiGood_L%d", l), Form("L%d;#it{p}_{T} (GeV/#it{c});#phi (rad);Efficiency", l), true); @@ -1807,7 +1807,7 @@ void EfficiencyStudy::studyClusterSelectionMC() } // PtPhiFake - effPtPhi[l][1] = new TCanvas(Form("effPtPhiFake_L%d", l)); + effPtPhi[l][1] = std::make_unique(Form("effPtPhiFake_L%d", l)); mEffPtPhiFake[l] = std::make_unique(*mNFakeMatchesPtPhi[l], *mDuplicatedPtPhi[l]); stileEfficiencyGraph(mEffPtPhiFake[l], Form("mEffPtPhiFake_L%d", l), Form("L%d;#it{p}_{T} (GeV/#it{c});#phi (rad);Efficiency", l), true); @@ -1821,7 +1821,7 @@ void EfficiencyStudy::studyClusterSelectionMC() effPtPhi[l][1]->Write(); // EtaPhiGood - effEtaPhi[l][0] = new TCanvas(Form("effEtaPhiGood_L%d", l)); + effEtaPhi[l][0] = std::make_unique(Form("effEtaPhiGood_L%d", l)); mEffEtaPhiGood[l] = std::make_unique(*mNGoodMatchesEtaPhi[l], *mDuplicatedEtaPhi[l]); stileEfficiencyGraph(mEffEtaPhiGood[l], Form("mEffEtaPhiGood_L%d", l), Form("L%d;#eta;#phi (rad);Efficiency", l), true); @@ -1847,7 +1847,7 @@ void EfficiencyStudy::studyClusterSelectionMC() } // EtaPhiFake - effEtaPhi[l][1] = new TCanvas(Form("effEtaPhiFake_L%d", l)); + effEtaPhi[l][1] = std::make_unique(Form("effEtaPhiFake_L%d", l)); mEffEtaPhiFake[l] = std::make_unique(*mNFakeMatchesEtaPhi[l], *mDuplicatedEtaPhi[l]); stileEfficiencyGraph(mEffEtaPhiFake[l], Form("mEffEtaPhiFake_L%d", l), Form("L%d;#eta;#phi (rad);Efficiency", l), true); @@ -1865,7 +1865,7 @@ void EfficiencyStudy::studyClusterSelectionMC() std::cout << "Eta L" << l << "\n\n"; } - effEtaAllPt[l] = new TCanvas(Form("effEtaAllPt_L%d", l)); + effEtaAllPt[l] = std::make_unique(Form("effEtaAllPt_L%d", l)); mEffEtaGoodAllPt[l] = std::make_unique(*mNGoodMatchesEtaAllPt[l], *mDuplicatedEtaAllPt[l]); stileEfficiencyGraph(mEffEtaGoodAllPt[l], Form("mEffEtaGoodAllPt_L%d", l), Form("L%d;#eta;Efficiency", l), false, kFullDiamond, 1, kGreen + 3, kGreen + 3); @@ -1897,7 +1897,7 @@ void EfficiencyStudy::studyClusterSelectionMC() /// eta and phi in different pt ranges for (int ipt = 0; ipt < 3; ipt++) { // eta - effEta[l][ipt] = new TCanvas(Form("effEta_L%d_pt%d", l, ipt)); + effEta[l][ipt] = std::make_unique(Form("effEta_L%d_pt%d", l, ipt)); mEffEtaGood[l][ipt] = std::make_unique(*mNGoodMatchesEta[l][ipt], *mDuplicatedEta[l][ipt]); stileEfficiencyGraph(mEffEtaGood[l][ipt], Form("mEffEtaGood_L%d_pt%d", l, ipt), Form("L%d %.1f #leq #it{p}_{T} < %.1f GeV/#it{c};#eta;Efficiency", l, mrangesPt[ipt][0], mrangesPt[ipt][1]), false, kFullDiamond, 1, kGreen + 3, kGreen + 3); @@ -1928,7 +1928,7 @@ void EfficiencyStudy::studyClusterSelectionMC() effEta[l][ipt]->Write(); // phi - effPhi[l][ipt] = new TCanvas(Form("effPhi_L%d_pt%d", l, ipt)); + effPhi[l][ipt] = std::make_unique(Form("effPhi_L%d_pt%d", l, ipt)); for (int ibin = 1; ibin <= mNGoodMatchesPhi[l][ipt]->GetNbinsX(); ibin++) { if (mNGoodMatchesPhi[l][ipt]->GetBinContent(ibin) > mDuplicatedPhi[l][ipt]->GetBinContent(ibin)) { @@ -1973,7 +1973,7 @@ void EfficiencyStudy::studyClusterSelectionMC() std::cout << "Phi L" << l << "\n\n"; } - effPhiAllPt[l] = new TCanvas(Form("effPhiAllPt_L%d", l)); + effPhiAllPt[l] = std::make_unique(Form("effPhiAllPt_L%d", l)); for (int ibin = 1; ibin <= mNGoodMatchesPhiAllPt[l]->GetNbinsX(); ibin++) { if (mNGoodMatchesPhiAllPt[l]->GetBinContent(ibin) > mDuplicatedPhiAllPt[l]->GetBinContent(ibin)) { @@ -2012,18 +2012,18 @@ void EfficiencyStudy::studyClusterSelectionMC() } /// all Row - TCanvas* effRowAll = new TCanvas("effRowAll"); - TH1D* numRowGoodAll = (TH1D*)mNGoodMatchesRow[0]->Clone("numRowGoodAll"); - numRowGoodAll->Add(mNGoodMatchesRow[1]); - numRowGoodAll->Add(mNGoodMatchesRow[2]); + std::unique_ptr effRowAll = std::make_unique("effRowAll"); + auto numRowGoodAll = std::unique_ptr((TH1D*)mNGoodMatchesRow[0]->Clone("numRowGoodAll")); + numRowGoodAll->Add(mNGoodMatchesRow[1].get()); + numRowGoodAll->Add(mNGoodMatchesRow[2].get()); numRowGoodAll->Write(); - TH1D* numRowFakeAll = (TH1D*)mNFakeMatchesRow[0]->Clone("numRowFakeAll"); - numRowFakeAll->Add(mNFakeMatchesRow[1]); - numRowFakeAll->Add(mNFakeMatchesRow[2]); + auto numRowFakeAll = std::unique_ptr((TH1D*)mNFakeMatchesRow[0]->Clone("numRowFakeAll")); + numRowFakeAll->Add(mNFakeMatchesRow[1].get()); + numRowFakeAll->Add(mNFakeMatchesRow[2].get()); numRowFakeAll->Write(); - TH1D* denRowAll = (TH1D*)mDuplicatedRow[0]->Clone("denRowAll"); - denRowAll->Add(mDuplicatedRow[1]); - denRowAll->Add(mDuplicatedRow[2]); + auto denRowAll = std::unique_ptr((TH1D*)mDuplicatedRow[0]->Clone("denRowAll")); + denRowAll->Add(mDuplicatedRow[1].get()); + denRowAll->Add(mDuplicatedRow[2].get()); denRowAll->Write(); std::unique_ptr mEffRowGoodAll = std::make_unique(*numRowGoodAll, *denRowAll); @@ -2043,18 +2043,18 @@ void EfficiencyStudy::studyClusterSelectionMC() effRowAll->Write(); /// all Col - TCanvas* effColAll = new TCanvas("effColAll"); - TH1D* numColGoodAll = (TH1D*)mNGoodMatchesCol[0]->Clone("numColGoodAll"); - numColGoodAll->Add(mNGoodMatchesCol[1]); - numColGoodAll->Add(mNGoodMatchesCol[2]); + std::unique_ptr effColAll = std::make_unique("effColAll"); + auto numColGoodAll = std::unique_ptr((TH1D*)mNGoodMatchesCol[0]->Clone("numColGoodAll")); + numColGoodAll->Add(mNGoodMatchesCol[1].get()); + numColGoodAll->Add(mNGoodMatchesCol[2].get()); numColGoodAll->Write(); - TH1D* numColFakeAll = (TH1D*)mNFakeMatchesCol[0]->Clone("numColFakeAll"); - numColFakeAll->Add(mNFakeMatchesCol[1]); - numColFakeAll->Add(mNFakeMatchesCol[2]); + auto numColFakeAll = std::unique_ptr((TH1D*)mNFakeMatchesCol[0]->Clone("numColFakeAll")); + numColFakeAll->Add(mNFakeMatchesCol[1].get()); + numColFakeAll->Add(mNFakeMatchesCol[2].get()); numColFakeAll->Write(); - TH1D* denColAll = (TH1D*)mDuplicatedCol[0]->Clone("denColAll"); - denColAll->Add(mDuplicatedCol[1]); - denColAll->Add(mDuplicatedCol[2]); + auto denColAll = std::unique_ptr((TH1D*)mDuplicatedCol[0]->Clone("denColAll")); + denColAll->Add(mDuplicatedCol[1].get()); + denColAll->Add(mDuplicatedCol[2].get()); denColAll->Write(); std::unique_ptr mEffColGoodAll = std::make_unique(*numColGoodAll, *denColAll); @@ -2074,18 +2074,18 @@ void EfficiencyStudy::studyClusterSelectionMC() effColAll->Write(); /// all Z - TCanvas* effZAll = new TCanvas("effZAll"); - TH1D* numZGoodAll = (TH1D*)mNGoodMatchesZ[0]->Clone("numZGoodAll"); - numZGoodAll->Add(mNGoodMatchesZ[1]); - numZGoodAll->Add(mNGoodMatchesZ[2]); + std::unique_ptr effZAll = std::make_unique("effZAll"); + auto numZGoodAll =std::unique_ptr((TH1D*)mNGoodMatchesZ[0]->Clone("numZGoodAll")); + numZGoodAll->Add(mNGoodMatchesZ[1].get()); + numZGoodAll->Add(mNGoodMatchesZ[2].get()); numZGoodAll->Write(); - TH1D* numZFakeAll = (TH1D*)mNFakeMatchesZ[0]->Clone("numZFakeAll"); - numZFakeAll->Add(mNFakeMatchesZ[1]); - numZFakeAll->Add(mNFakeMatchesZ[2]); + auto numZFakeAll = std::unique_ptr((TH1D*)mNFakeMatchesZ[0]->Clone("numZFakeAll")); + numZFakeAll->Add(mNFakeMatchesZ[1].get()); + numZFakeAll->Add(mNFakeMatchesZ[2].get()); numZFakeAll->Write(); - TH1D* denZAll = (TH1D*)mDuplicatedZ[0]->Clone("denZAll"); - denZAll->Add(mDuplicatedZ[1]); - denZAll->Add(mDuplicatedZ[2]); + auto denZAll = std::unique_ptr((TH1D*)mDuplicatedZ[0]->Clone("denZAll")); + denZAll->Add(mDuplicatedZ[1].get()); + denZAll->Add(mDuplicatedZ[2].get()); denZAll->Write(); std::unique_ptr mEffZGoodAll = std::make_unique(*numZGoodAll, *denZAll); @@ -2105,16 +2105,16 @@ void EfficiencyStudy::studyClusterSelectionMC() effZAll->Write(); /// all Eta - TCanvas* effEtaAll = new TCanvas("effEtaAll"); - TH1D* numEtaGoodAll = (TH1D*)mNGoodMatchesEtaAllPt[0]->Clone("numEtaGoodAll"); + std::unique_ptr effEtaAll = std::make_unique("effEtaAll"); + auto numEtaGoodAll = std::unique_ptr((TH1D*)mNGoodMatchesEtaAllPt[0]->Clone("numEtaGoodAll")); numEtaGoodAll->Add(mNGoodMatchesEtaAllPt[1].get()); numEtaGoodAll->Add(mNGoodMatchesEtaAllPt[2].get()); numEtaGoodAll->Write(); - TH1D* numEtaFakeAll = (TH1D*)mNFakeMatchesEtaAllPt[0]->Clone("numEtaFakeAll"); + auto numEtaFakeAll = std::unique_ptr((TH1D*)mNFakeMatchesEtaAllPt[0]->Clone("numEtaFakeAll")); numEtaFakeAll->Add(mNFakeMatchesEtaAllPt[1].get()); numEtaFakeAll->Add(mNFakeMatchesEtaAllPt[2].get()); numEtaFakeAll->Write(); - TH1D* denEtaAll = (TH1D*)mDuplicatedEtaAllPt[0]->Clone("denEtaAll"); + auto denEtaAll = std::unique_ptr((TH1D*)mDuplicatedEtaAllPt[0]->Clone("denEtaAll")); denEtaAll->Add(mDuplicatedEtaAllPt[1].get()); denEtaAll->Add(mDuplicatedEtaAllPt[2].get()); denEtaAll->Write(); @@ -2136,16 +2136,16 @@ void EfficiencyStudy::studyClusterSelectionMC() effEtaAll->Write(); /// all Phi - TCanvas* effPhiAll = new TCanvas("effPhiAll"); - TH1D* numPhiGoodAll = (TH1D*)mNGoodMatchesPhiAllPt[0]->Clone("numPhiGoodAll"); + std::unique_ptr effPhiAll = std::make_unique("effPhiAll"); + auto numPhiGoodAll = std::unique_ptr((TH1D*)mNGoodMatchesPhiAllPt[0]->Clone("numPhiGoodAll")); numPhiGoodAll->Add(mNGoodMatchesPhiAllPt[1].get()); numPhiGoodAll->Add(mNGoodMatchesPhiAllPt[2].get()); numPhiGoodAll->Write(); - TH1D* numPhiFakeAll = (TH1D*)mNFakeMatchesPhiAllPt[0]->Clone("numPhiFakeAll"); + auto numPhiFakeAll = std::unique_ptr((TH1D*)mNFakeMatchesPhiAllPt[0]->Clone("numPhiFakeAll")); numPhiFakeAll->Add(mNFakeMatchesPhiAllPt[1].get()); numPhiFakeAll->Add(mNFakeMatchesPhiAllPt[2].get()); numPhiFakeAll->Write(); - TH1D* denPhiAll = (TH1D*)mDuplicatedPhiAllPt[0]->Clone("denPhiAll"); + auto denPhiAll = std::unique_ptr((TH1D*)mDuplicatedPhiAllPt[0]->Clone("denPhiAll")); denPhiAll->Add(mDuplicatedPhiAllPt[1].get()); denPhiAll->Add(mDuplicatedPhiAllPt[2].get()); denPhiAll->Write(); @@ -2291,8 +2291,9 @@ void EfficiencyStudy::getEfficiency(bool isMC) continue; } - if (mUseMC) { //// excluding known bad chips in MC which are not bad in data --- to be checked based on the anchored run - if (std::find(mExcludedChipMC->begin(), mExcludedChipMC->end(), clusOriginal.getChipID()) != mExcludedChipMC->end()) { + + if (mUseMC){ //// excluding known bad chips in MC which are not bad in data --- to be checked based on the anchored run + if (std::find(mExcludedChipMC.begin(), mExcludedChipMC.end(), clusOriginal.getChipID()) != mExcludedChipMC.end()) { continue; } } @@ -2414,6 +2415,7 @@ void EfficiencyStudy::getEfficiency(bool isMC) radiusNotFound[layerOriginal]->Fill(sqrt(clusOriginalPointGlob.x() * clusOriginalPointGlob.x() + clusOriginalPointGlob.y() * clusOriginalPointGlob.y())); colNotFound[layerOriginal]->Fill(clusOriginal.getCol() + (1024 * (clusOriginal.getChipID() % 9))); rowNotFound[layerOriginal]->Fill(rowOriginal); + zNotFound[layerOriginal]->Fill(clusOriginalPointGlob.z()); phiNotFound[layerOriginal]->Fill(phiOriginal); continue; } @@ -2491,8 +2493,9 @@ void EfficiencyStudy::process(o2::globaltracking::RecoContainer& recoData) studyDCAcutsMC(); // studyClusterSelectionMC(); // countDuplicatedAfterCuts(); - // getEfficiency(mUseMC); - } else { + getEfficiency(mUseMC); + } + else{ getEfficiency(mUseMC); } @@ -2545,9 +2548,7 @@ void EfficiencyStudy::endOfStream(EndOfStreamContext& ec) mOutFile->cd("Pt_Eta_Phi/"); for (int i = 0; i < NLAYERS; i++) { - mPhiOriginal[i]->Write(); mDuplicatedPhiAllPt[i]->Write(); - mPtOriginal[i]->Write(); mPtDuplicated[i]->Write(); mEtaDuplicated[i]->Write(); mPhiDuplicated[i]->Write(); @@ -2556,7 +2557,6 @@ void EfficiencyStudy::endOfStream(EndOfStreamContext& ec) mDuplicatedPtEta[i]->Write(); mDuplicatedPtPhi[i]->Write(); mDuplicatedEtaPhi[i]->Write(); - mEtaOriginal[i]->Write(); mDuplicatedEtaAllPt[i]->Write(); mDuplicatedRow[i]->Write(); mDuplicatedCol[i]->Write(); @@ -2588,33 +2588,33 @@ void EfficiencyStudy::endOfStream(EndOfStreamContext& ec) chi2trackAccepted->Write(); mOutFile->cd("EfficiencyFinal/"); - TList* listNum = new TList; - TList* listDen = new TList; - TH1D* numPhiAll = (TH1D*)numPhi[0]->Clone("numPhiAll"); - TH1D* denPhiAll = (TH1D*)denPhi[0]->Clone("denPhiAll"); - - TList* listNumColEta = new TList; - TList* listDenColEta = new TList; - TH1D* numColEtaAll = (TH1D*)mNumColEta[0]->Clone("numColEtaAll"); - TH1D* denColEtaAll = (TH1D*)mDenColEta[0]->Clone("denColEtaAll"); - - TList* listNumRowPhi = new TList; - TList* listDenRowPhi = new TList; - TH1D* numRowPhiAll = (TH1D*)mNumRowPhi[0]->Clone("numRowPhiAll"); - TH1D* denRowPhiAll = (TH1D*)mDenRowPhi[0]->Clone("denRowPhiAll"); - - TList* listNumRowCol = new TList; - TList* listDenRowCol = new TList; - TH1D* numRowColAll = (TH1D*)mNumRowCol[0]->Clone("numRowColAll"); - TH1D* denRowColAll = (TH1D*)mDenRowCol[0]->Clone("denRowColAll"); - - TEfficiency* effLayers = new TEfficiency(*numLayers, *denLayers); + TList listNum; + TList listDen; + auto numPhiAll = std::unique_ptr((TH1D*)numPhi[0]->Clone("numPhiAll")); + auto denPhiAll = std::unique_ptr((TH1D*)denPhi[0]->Clone("denPhiAll")); + + TList listNumColEta; + TList listDenColEta; + auto numColEtaAll = std::unique_ptr((TH1D*)mNumColEta[0]->Clone("numColEtaAll")); + auto denColEtaAll = std::unique_ptr((TH1D*)mDenColEta[0]->Clone("denColEtaAll")); + + TList listNumRowPhi; + TList listDenRowPhi; + auto numRowPhiAll = std::unique_ptr((TH1D*)mNumRowPhi[0]->Clone("numRowPhiAll")); + auto denRowPhiAll = std::unique_ptr((TH1D*)mDenRowPhi[0]->Clone("denRowPhiAll")); + + TList listNumRowCol; + TList listDenRowCol; + auto numRowColAll = std::unique_ptr((TH1D*)mNumRowCol[0]->Clone("numRowColAll")); + auto denRowColAll = std::unique_ptr((TH1D*)mDenRowCol[0]->Clone("denRowColAll")); + + std::unique_ptr effLayers = std::make_unique(*numLayers, *denLayers); effLayers->SetName("effLayers"); effLayers->SetTitle("; ;Efficiency"); - TEfficiency* effLayersGood = new TEfficiency(*numGoodLayers, *denLayers); + std::unique_ptr effLayersGood = std::make_unique(*numGoodLayers, *denLayers); effLayersGood->SetName("effLayersGood"); effLayersGood->SetTitle("; ;Efficiency Good Matches"); - TEfficiency* effLayersFake = new TEfficiency(*numFakeLayers, *denLayers); + std::unique_ptr effLayersFake = std::make_unique(*numFakeLayers, *denLayers); effLayersFake->SetName("effLayersFake"); effLayersFake->SetTitle("; ;Efficiency Fake Matches"); effLayers->Write(); @@ -2627,109 +2627,109 @@ void EfficiencyStudy::endOfStream(EndOfStreamContext& ec) for (int l = 0; l < NLAYERS; l++) { - TEfficiency* effPt = new TEfficiency(*numPt[l], *denPt[l]); + std::unique_ptr effPt = std::make_unique(*numPt[l], *denPt[l]); effPt->SetName(Form("effPt_layer%d", l)); effPt->SetTitle(Form("L%d;p_{T} (GeV/c);Efficiency", l)); - TEfficiency* effPtGood = new TEfficiency(*numPtGood[l], *denPt[l]); + std::unique_ptr effPtGood = std::make_unique(*numPtGood[l], *denPt[l]); effPtGood->SetName(Form("effPtGood_layer%d", l)); effPtGood->SetTitle(Form("L%d;p_{T} (GeV/c);Efficiency Good Matches", l)); - TEfficiency* effPtFake = new TEfficiency(*numPtFake[l], *denPt[l]); + std::unique_ptr effPtFake = std::make_unique(*numPtFake[l], *denPt[l]); effPtFake->SetName(Form("effPtFake_layer%d", l)); effPtFake->SetTitle(Form("L%d;p_{T} (GeV/c);Efficiency Fake Matches", l)); effPt->Write(); effPtGood->Write(); effPtFake->Write(); - TEfficiency* effPhi = new TEfficiency(*numPhi[l], *denPhi[l]); + std::unique_ptr effPhi = std::make_unique(*numPhi[l], *denPhi[l]); effPhi->SetName(Form("effPhi_layer%d", l)); effPhi->SetTitle(Form("L%d;#phi;Efficiency", l)); - TEfficiency* effPhiGood = new TEfficiency(*numPhiGood[l], *denPhi[l]); + std::unique_ptr effPhiGood = std::make_unique(*numPhiGood[l], *denPhi[l]); effPhiGood->SetName(Form("effPhiGood_layer%d", l)); effPhiGood->SetTitle(Form("L%d;#phi;Efficiency Good Matches", l)); - TEfficiency* effPhiFake = new TEfficiency(*numPhiFake[l], *denPhi[l]); + std::unique_ptr effPhiFake = std::make_unique(*numPhiFake[l], *denPhi[l]); effPhiFake->SetName(Form("effPhiFake_layer%d", l)); effPhiFake->SetTitle(Form("L%d;#phi;Efficiency Fake Matches", l)); effPhi->Write(); effPhiGood->Write(); effPhiFake->Write(); - listNum->Add(numPhi[l]); - listDen->Add(denPhi[l]); + listNum.Add(numPhi[l].get()); + listDen.Add(denPhi[l].get()); - TEfficiency* effEta = new TEfficiency(*numEta[l], *denEta[l]); + std::unique_ptr effEta = std::make_unique(*numEta[l], *denEta[l]); effEta->SetName(Form("effEta_layer%d", l)); effEta->SetTitle(Form("L%d;#eta;Efficiency", l)); - TEfficiency* effEtaGood = new TEfficiency(*numEtaGood[l], *denEta[l]); + std::unique_ptr effEtaGood = std::make_unique(*numEtaGood[l], *denEta[l]); effEtaGood->SetName(Form("effEtaGood_layer%d", l)); effEtaGood->SetTitle(Form("L%d;#eta;Efficiency Good Matches", l)); - TEfficiency* effEtaFake = new TEfficiency(*numEtaFake[l], *denEta[l]); + std::unique_ptr effEtaFake = std::make_unique(*numEtaFake[l], *denEta[l]); effEtaFake->SetName(Form("effEtaFake_layer%d", l)); effEtaFake->SetTitle(Form("L%d;#eta;Efficiency Fake Matches", l)); effEta->Write(); effEtaGood->Write(); effEtaFake->Write(); - TEfficiency* effRow = new TEfficiency(*numRow[l], *denRow[l]); + std::unique_ptr effRow = std::make_unique(*numRow[l], *denRow[l]); effRow->SetName(Form("effRow_layer%d", l)); effRow->SetTitle(Form("L%d;#Row;Efficiency", l)); - TEfficiency* effRowGood = new TEfficiency(*numRowGood[l], *denRow[l]); + std::unique_ptr effRowGood = std::make_unique(*numRowGood[l], *denRow[l]); effRowGood->SetName(Form("effRowGood_layer%d", l)); effRowGood->SetTitle(Form("L%d;#Row;Efficiency Good Matches", l)); - TEfficiency* effRowFake = new TEfficiency(*numRowFake[l], *denRow[l]); + std::unique_ptr effRowFake = std::make_unique(*numRowFake[l], *denRow[l]); effRowFake->SetName(Form("effRowFake_layer%d", l)); effRowFake->SetTitle(Form("L%d;#Row;Efficiency Fake Matches", l)); effRow->Write(); effRowGood->Write(); effRowFake->Write(); - TEfficiency* effCol = new TEfficiency(*numCol[l], *denCol[l]); + std::unique_ptr effCol = std::make_unique(*numCol[l], *denCol[l]); effCol->SetName(Form("effCol_layer%d", l)); effCol->SetTitle(Form("L%d;#Col;Efficiency", l)); - TEfficiency* effColGood = new TEfficiency(*numColGood[l], *denCol[l]); + std::unique_ptr effColGood = std::make_unique(*numColGood[l], *denCol[l]); effColGood->SetName(Form("effColGood_layer%d", l)); effColGood->SetTitle(Form("L%d;#Col;Efficiency Good Matches", l)); - TEfficiency* effColFake = new TEfficiency(*numColFake[l], *denCol[l]); + std::unique_ptr effColFake = std::make_unique(*numColFake[l], *denCol[l]); effColFake->SetName(Form("effColFake_layer%d", l)); effColFake->SetTitle(Form("L%d;#Col;Efficiency Fake Matches", l)); effCol->Write(); effColGood->Write(); effColFake->Write(); - TEfficiency* effZ = new TEfficiency(*numZ[l], *denZ[l]); + std::unique_ptr effZ = std::make_unique(*numZ[l], *denZ[l]); effZ->SetName(Form("effZ_layer%d", l)); effZ->SetTitle(Form("L%d;#Z (cm);Efficiency", l)); - TEfficiency* effZGood = new TEfficiency(*numZGood[l], *denZ[l]); + std::unique_ptr effZGood = std::make_unique(*numZGood[l], *denZ[l]); effZGood->SetName(Form("effZGood_layer%d", l)); effZGood->SetTitle(Form("L%d;#Z (cm);Efficiency Good Matches", l)); - TEfficiency* effZFake = new TEfficiency(*numZFake[l], *denZ[l]); + std::unique_ptr effZFake = std::make_unique(*numZFake[l], *denZ[l]); effZFake->SetName(Form("effZFake_layer%d", l)); effZFake->SetTitle(Form("L%d;#Z (cm);Efficiency Fake Matches", l)); effZ->Write(); effZGood->Write(); effZFake->Write(); - TEfficiency* effColEta = new TEfficiency(*mNumColEta[l], *mDenColEta[l]); + std::unique_ptr effColEta = std::make_unique(*mNumColEta[l], *mDenColEta[l]); effColEta->SetName(Form("effColEta_layer%d", l)); effColEta->SetTitle(Form("L%d;Column;#eta", l)); effColEta->Write(); - listNumColEta->Add(mNumColEta[l]); - listDenColEta->Add(mDenColEta[l]); + listNumColEta.Add(mNumColEta[l].get()); + listDenColEta.Add(mDenColEta[l].get()); - TEfficiency* effRowPhi = new TEfficiency(*mNumRowPhi[l], *mDenRowPhi[l]); + std::unique_ptr effRowPhi = std::make_unique(*mNumRowPhi[l], *mDenRowPhi[l]); effRowPhi->SetName(Form("effRowPhi_layer%d", l)); effRowPhi->SetTitle(Form("L%d;Column;#eta", l)); effRowPhi->Write(); - listNumRowPhi->Add(mNumRowPhi[l]); - listDenRowPhi->Add(mDenRowPhi[l]); + listNumRowPhi.Add(mNumRowPhi[l].get()); + listDenRowPhi.Add(mDenRowPhi[l].get()); - TEfficiency* effRowCol = new TEfficiency(*mNumRowCol[l], *mDenRowCol[l]); + std::unique_ptr effRowCol = std::make_unique(*mNumRowCol[l], *mDenRowCol[l]); effRowCol->SetName(Form("effRowCol_layer%d", l)); effRowCol->SetTitle(Form("L%d;Column;#eta", l)); effRowCol->Write(); - listNumRowCol->Add(mNumRowCol[l]); - listDenRowCol->Add(mDenRowCol[l]); + listNumRowCol.Add(mNumRowCol[l].get()); + listDenRowCol.Add(mDenRowCol[l].get()); mNumRowCol[l]->Write(); mDenRowCol[l]->Write(); @@ -2750,41 +2750,40 @@ void EfficiencyStudy::endOfStream(EndOfStreamContext& ec) numZ[l]->Write(); denZ[l]->Write(); } + numPhiAll->Merge(&listNum); + denPhiAll->Merge(&listDen); - numPhiAll->Merge(listNum); - denPhiAll->Merge(listDen); - - numColEtaAll->Merge(listNumColEta); - denColEtaAll->Merge(listDenColEta); + numColEtaAll->Merge(&listNumColEta); + denColEtaAll->Merge(&listDenColEta); - numRowPhiAll->Merge(listNumRowPhi); - denRowPhiAll->Merge(listDenRowPhi); + numRowPhiAll->Merge(&listNumRowPhi); + denRowPhiAll->Merge(&listDenRowPhi); - numRowColAll->Merge(listNumRowCol); - denRowColAll->Merge(listDenRowCol); + numRowColAll->Merge(&listNumRowCol); + denRowColAll->Merge(&listDenRowCol); - TEfficiency* effPhiAll = new TEfficiency(*numPhiAll, *denPhiAll); + std::unique_ptr effPhiAll = std::make_unique(*numPhiAll, *denPhiAll); effPhiAll->SetName("effPhi_AllLayers"); effPhiAll->SetTitle("L0 + L1 + L2;#phi;Efficiency"); effPhiAll->Write(); numPhiAll->Write(); denPhiAll->Write(); - TEfficiency* effColEtaAll = new TEfficiency(*numColEtaAll, *denColEtaAll); + std::unique_ptr effColEtaAll = std::make_unique(*numColEtaAll, *denColEtaAll); effColEtaAll->SetName("effColEta_AllLayers"); effColEtaAll->SetTitle("L0 + L1 + L2;Column;#eta"); effColEtaAll->Write(); numColEtaAll->Write(); denColEtaAll->Write(); - TEfficiency* effRowPhiAll = new TEfficiency(*numRowPhiAll, *denRowPhiAll); + std::unique_ptr effRowPhiAll = std::make_unique(*numRowPhiAll, *denRowPhiAll); effRowPhiAll->SetName("effRowPhi_AllLayers"); effRowPhiAll->SetTitle("L0 + L1 + L2;Column;#eta"); effRowPhiAll->Write(); numRowPhiAll->Write(); denRowPhiAll->Write(); - TEfficiency* effRowColAll = new TEfficiency(*numRowColAll, *denRowColAll); + std::unique_ptr effRowColAll = std::make_unique(*numRowColAll, *denRowColAll); effRowColAll->SetName("effRowCol_AllLayers"); effRowColAll->SetTitle("L0 + L1 + L2;Column;#eta"); effRowColAll->Write(); From 5f9b182ac823b4efbca90f12bf3cd345abb2c6ee Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Wed, 26 Mar 2025 15:04:03 +0000 Subject: [PATCH 6/6] Please consider the following formatting changes --- .../ITS/postprocessing/studies/src/Efficiency.cxx | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/Detectors/ITSMFT/ITS/postprocessing/studies/src/Efficiency.cxx b/Detectors/ITSMFT/ITS/postprocessing/studies/src/Efficiency.cxx index 90b1fe74eacca..bca1ec1e85001 100644 --- a/Detectors/ITSMFT/ITS/postprocessing/studies/src/Efficiency.cxx +++ b/Detectors/ITSMFT/ITS/postprocessing/studies/src/Efficiency.cxx @@ -284,7 +284,7 @@ class EfficiencyStudy : public Task std::unique_ptr numZFake[NLAYERS]; std::unique_ptr numLayers; - std::unique_ptr denLayers; + std::unique_ptr denLayers; std::unique_ptr numGoodLayers; std::unique_ptr numFakeLayers; @@ -2075,7 +2075,7 @@ void EfficiencyStudy::studyClusterSelectionMC() /// all Z std::unique_ptr effZAll = std::make_unique("effZAll"); - auto numZGoodAll =std::unique_ptr((TH1D*)mNGoodMatchesZ[0]->Clone("numZGoodAll")); + auto numZGoodAll = std::unique_ptr((TH1D*)mNGoodMatchesZ[0]->Clone("numZGoodAll")); numZGoodAll->Add(mNGoodMatchesZ[1].get()); numZGoodAll->Add(mNGoodMatchesZ[2].get()); numZGoodAll->Write(); @@ -2291,8 +2291,7 @@ void EfficiencyStudy::getEfficiency(bool isMC) continue; } - - if (mUseMC){ //// excluding known bad chips in MC which are not bad in data --- to be checked based on the anchored run + if (mUseMC) { //// excluding known bad chips in MC which are not bad in data --- to be checked based on the anchored run if (std::find(mExcludedChipMC.begin(), mExcludedChipMC.end(), clusOriginal.getChipID()) != mExcludedChipMC.end()) { continue; } @@ -2494,8 +2493,7 @@ void EfficiencyStudy::process(o2::globaltracking::RecoContainer& recoData) // studyClusterSelectionMC(); // countDuplicatedAfterCuts(); getEfficiency(mUseMC); - } - else{ + } else { getEfficiency(mUseMC); }