void replaceOuter(vector<vector<char>> &board, int i, int j, int m, int n) { if (board[i][j] == 'O') { board[i][j] = OUTER_O(); queue<pair<int, int>> q({pair<int, int>(i, j)}); while (!q.empty()) { auto p = q.front(); q.pop(); int ii = p.first, jj = p.second; nextO(board, q, ii - 1, jj, m, n); nextO(board, q, ii + 1, jj, m, n); nextO(board, q, ii, jj - 1, m, n); nextO(board, q, ii, jj + 1, m, n); } } }
//____________________________________________________________________ void DrawResCollection(TCollection* top, const TString& name) { TCollection* c = GetCollection(top, name, false); if (!c) return; THStack* s = GetStack(c, "all"); s->SetTitle(""); DrawInPad(fBody, 0, s, "nostack", kLogy); TLegend* l = new TLegend(.5, .75, .98, .98, "P(#it{N}_{ch})"); l->SetBorderSize(0); // l->SetBorderMode(0); l->SetFillColor(0); l->SetFillStyle(0); TIter next(s->GetHists()); TH1* h = 0; Bool_t hasTrue = false; while ((h = static_cast<TH1*>(next()))) { TString n(h->GetTitle()); if (n.BeginsWith("True")) { hasTrue = true; continue; } n.ReplaceAll("Raw P(#it{N}_{ch}) in ", ""); TLegendEntry* e = l->AddEntry("dummy", n, "p"); e->SetMarkerStyle(h->GetMarkerStyle()); } if (hasTrue) { TLegendEntry* e = l->AddEntry("dummy", "Raw", "p"); e->SetMarkerStyle(20); e->SetMarkerColor(kRed+1); e = l->AddEntry("dummy", "MC truth", "p"); e->SetMarkerStyle(24); e->SetMarkerColor(kBlue+1); e = l->AddEntry("dummy", "MC truth selected", "p"); e->SetMarkerStyle(24); e->SetMarkerColor(kOrange+1); } fBody->cd(); l->Draw(); PrintCanvas(Form("%s results", name.Data())); // return; TIter nextO(c); TObject* o = 0; while ((o = nextO())) { Double_t etaMin = 999; Double_t etaMax = 999; TCollection* bin = GetEtaBin(o, etaMin, etaMax); if (!bin) continue; fBody->Divide(2,3); DrawInPad(fBody, 1, GetH1(bin, "rawDist"), "", kLogy); DrawInPad(fBody, 1, GetH1(bin, "truthAccepted", false), "same", kSilent); DrawInPad(fBody, 1, GetH1(bin, "truth", false),"same", kSilent|kLegend); DrawInPad(fBody, 2, GetH1(bin, "coverage")); DrawInPad(fBody, 3, GetH2(bin, "corr"), "colz"); DrawInPad(fBody, 4, GetH2(bin, "response", false), "colz", kLogz|kSilent); DrawInPad(fBody, 5, GetH1(bin, "triggerVertex", false), "", kSilent); PrintCanvas(Form("%+5.1f < #eta < %+5.1f", etaMin, etaMax)); } }