diff --git a/algo/ca/qa/CaOutputQa.cxx b/algo/ca/qa/CaOutputQa.cxx index 9957c745a5ad9f9881b91c04934b2beb41293a08..a23de73d2ecc97eadb4d9f46fa3a2604dce92946 100644 --- a/algo/ca/qa/CaOutputQa.cxx +++ b/algo/ca/qa/CaOutputQa.cxx @@ -34,9 +34,8 @@ void OutputQa::Init() return; } - // ----- Histograms initialization - constexpr int nParPads = 4; + constexpr int nParPads = 3; std::array<std::string, knTrkParPoints> vsPointName = {"first", "last"}; for (int i = 0; i < knTrkParPoints; ++i) { { @@ -59,13 +58,18 @@ void OutputQa::Init() auto sTitl = format("#chi^{{2}}/NDF at {} hit; #chi^{{2}}/NDF", vsPointName[i]); fvphTrkChi2Ndf[i] = fQaData.MakeObj<H1D>(sName, sTitl, 100, 0., 20.); } + } + { + int nBins = knStaMax; + double xMin = -0.5; + double xMax = double(knStaMax) - 0.5; { - auto sName = format("track_{}_hit_station", vsPointName[i]); - auto sTitl = format("Station of {} hit;ID_{{sta}}", vsPointName[i]); - fvphHitSta[i] = fQaData.MakeObj<H1D>(sName, sTitl, 100, -.5, 10.5); + auto sName = "track_fst_lst_sta"; + auto sTitl = "First vs. last station index;ID^{last}_{station};ID^{first}_{station}"; + fphTrkFstLstSta = fQaData.MakeObj<H2D>(sName, sTitl, nBins, xMin, xMax, nBins, xMin, xMax); } + fphTrkNofHits = fQaData.MakeObj<H1D>("n_hits", "Number of hits;N_{hit}", nBins, xMin, xMax); } - fphTrkNofHits = fQaData.MakeObj<H1D>("n_hits", "Number of hits;N_{hit}", 11, -0.5, 10.5); // ---- Init canvases { @@ -86,7 +90,6 @@ void OutputQa::Init() pads[0].RegisterHistogram(fvphTrkTheta[i], "hist"); pads[1].RegisterHistogram(fvphTrkPhi[i], "hist"); pads[2].RegisterHistogram(fvphTrkChi2Ndf[i], "hist"); - pads[3].RegisterHistogram(fvphHitSta[i], "hist"); for (auto& pad : pads) { canv.AddPadConfig(pad); } @@ -110,11 +113,20 @@ void OutputQa::Init() // Number of hits in track { auto canv = CanvasConfig("ca_nhits_in_trk", "Number of hit in track"); - auto pad = PadConfig(); - pad.SetGrid(true, true); - pad.SetLog(false, true); - pad.RegisterHistogram(fphTrkNofHits, "hist"); - canv.AddPadConfig(pad); + { + auto pad = PadConfig(); + pad.SetGrid(true, true); + pad.SetLog(false, true); + pad.RegisterHistogram(fphTrkNofHits, "hist"); + canv.AddPadConfig(pad); + } + { + auto pad = PadConfig(); + pad.SetGrid(true, true); + pad.SetLog(false, false, true); + pad.RegisterHistogram(fphTrkFstLstSta, "colz"); + canv.AddPadConfig(pad); + } fQaData.AddCanvasConfig(canv); } } @@ -147,16 +159,16 @@ void OutputQa::Exec() // Distributions in different track points for (int ip = 0; ip < knTrkParPoints; ++ip) { - int iHit = (ip == 0 ? iFstHit : iLstHit); + //int iHit = (ip == 0 ? iFstHit : iLstHit); + //const auto& hit = fpInputData->GetHit(iHit); const auto& trkPar = (ip == 0 ? track.fParFirst : track.fParLast); - const auto& hit = fpInputData->GetHit(iHit); fvphTrkTheta[ip]->Fill(trkPar.GetTheta() * 180. / Pi); fvphTrkPhi[ip]->Fill(trkPar.GetPhi() * 180. / Pi); fvphTrkPhiTheta[ip]->Fill(trkPar.GetPhi() * 180. / Pi, trkPar.GetTheta() * 180. / Pi); fvphTrkChi2Ndf[ip]->Fill(trkPar.GetChiSq() / trkPar.GetNdf()); - fvphHitSta[ip]->Fill(hit.Station()); } // Other distributions + fphTrkFstLstSta->Fill(fpInputData->GetHit(iLstHit).Station(), fpInputData->GetHit(iFstHit).Station()); fphTrkNofHits->Fill(nHits); trkFirstHit += nHits; } diff --git a/algo/ca/qa/CaOutputQa.h b/algo/ca/qa/CaOutputQa.h index 2da5c4fd047430922ee0119f4a9e0e17fa243cac..4b089fcf0141614957bd1a0bd532e5412766cea6 100644 --- a/algo/ca/qa/CaOutputQa.h +++ b/algo/ca/qa/CaOutputQa.h @@ -48,14 +48,16 @@ namespace cbm::algo::ca void Init(); private: - static constexpr int knTrkParPoints = 2; ///< Number of track points to build par distributions + static constexpr int knTrkParPoints = 2; ///< Number of track points to build par distributions + static constexpr int knStaMax = 16; ///< Max number of stations (histogram binning) // Track distributions std::array<qa::H1D*, knTrkParPoints> fvphTrkTheta = {{0}}; ///< hist: theta at first/last hit std::array<qa::H1D*, knTrkParPoints> fvphTrkPhi = {{0}}; ///< hist: phi at first/last hit std::array<qa::H1D*, knTrkParPoints> fvphTrkChi2Ndf = {{0}}; ///< hist: chi2/NDF at first/last hit - std::array<qa::H1D*, knTrkParPoints> fvphHitSta = {{0}}; ///< hist: station of first/last hit std::array<qa::H2D*, knTrkParPoints> fvphTrkPhiTheta = {{0}}; ///< hist: theta vs. phi at first/last hit - qa::H1D* fphTrkNofHits = nullptr; ///< hist: number of hits in track + + qa::H2D* fphTrkFstLstSta = nullptr; ///< hist: fst vs lst station index + qa::H1D* fphTrkNofHits = nullptr; ///< hist: number of hits in track }; } // namespace cbm::algo::ca