From 7da3f0b0f6756d6c8d3af5019dcf9b884eee7c29 Mon Sep 17 00:00:00 2001 From: Christoph Mayer Date: Fri, 5 May 2017 07:14:49 +0200 Subject: [PATCH 1/5] memory leak fixed --- AD/ADrec/AliADQAChecker.cxx | 23 ++++++++--------------- AD/ADrec/AliADQAChecker.h | 12 +----------- 2 files changed, 9 insertions(+), 26 deletions(-) diff --git a/AD/ADrec/AliADQAChecker.cxx b/AD/ADrec/AliADQAChecker.cxx index fc1f3fd7384..7fc2e3da386 100644 --- a/AD/ADrec/AliADQAChecker.cxx +++ b/AD/ADrec/AliADQAChecker.cxx @@ -21,12 +21,8 @@ */ // --- ROOT system --- -#include #include #include -#include -#include -#include #include #include #include @@ -48,7 +44,6 @@ #include "AliADQADataMakerRec.h" #include "AliADQAParam.h" - ClassImp(AliADQAChecker); //__________________________________________________________________ @@ -103,7 +98,7 @@ const AliADQAParam* AliADQAChecker::GetQAParam() const return &fQAParamDefault; } //__________________________________________________________________ -void AliADQAChecker::Check(Double_t * check, AliQAv1::ALITASK_t index, TObjArray ** list, const AliDetectorRecoParam * /*recoParam*/) +void AliADQAChecker::Check(Double_t *check, AliQAv1::ALITASK_t index, TObjArray **list, const AliDetectorRecoParam * /*recoParam*/) { // Main check function: Depending on the TASK, different checks will be applied // Check for missing channels and check on the trigger type for raw data @@ -125,14 +120,14 @@ void AliADQAChecker::Check(Double_t * check, AliQAv1::ALITASK_t index, TObjArray } } - // returns the QA box of a given histogram, if it does not exists it is created TPaveText* GetQABox(TH1* h, Float_t x1, Float_t y1, Float_t x2, Float_t y2, Option_t *opt) { - TList *lHistFcn = h->GetListOfFunctions(); - TPaveText* qaBox = dynamic_cast(lHistFcn->FindObject("QABox")); + TList *lHistFcn = h->GetListOfFunctions(); + const TString nameOfQABox = TString::Format("QABox_%s", h->GetName()); + TPaveText *qaBox = dynamic_cast(lHistFcn->FindObject(nameOfQABox)); if (!qaBox) { qaBox = new TPaveText(x1, y1, x2, y2, opt); - qaBox->SetName(Form("QABox_%s", h->GetName())); + qaBox->SetName(nameOfQABox); lHistFcn->Add(qaBox); } return qaBox; @@ -287,7 +282,7 @@ Double_t AliADQAChecker::CheckRaws(TObjArray* list) const } delete histoRate; - qaBox->Clear(); + qaBox->Clear(); if (badChannels != "") { qaBox->SetFillColor(kRed); qaBox->AddText("No flag rate too high, ch: " + badChannels); @@ -315,8 +310,6 @@ Double_t AliADQAChecker::CheckRaws(TObjArray* list) const AliWarningF("NEvents%sFlag histogram is not found", flagNames[flagType]); continue; } - // if(hNEventsBBFlag->GetListOfFunctions()->GetEntries()<1) hNEventsBBFlag->GetListOfFunctions()->Add(new TPaveText(0.15,0.67,0.85,0.76,"NDC")); - // if(hNEventsBGFlag->GetListOfFunctions()->GetEntries()<1) hNEventsBGFlag->GetListOfFunctions()->Add(new TPaveText(0.15,0.56,0.85,0.65,"NDC")); TPaveText *qaBox = GetQABox(hFlag, 0.15, y1[flagType], 0.85, y2[flagType], "NDC"); TH1 *histoRate = dynamic_cast(hFlag->Clone("histoRateCloned")); histoRate->Sumw2(); @@ -425,7 +418,7 @@ Double_t AliADQAChecker::CheckRaws(TObjArray* list) const for (Int_t ch=0; ch<16; ++ch) { TH1* hClockSlice = hFlag->ProjectionY("hClockSlice", ch+1, ch+1); Double_t center = hClockSlice->GetBinContent(11); - Double_t flagArray[21] = { 0 };; + Double_t flagArray[21] = { 0 }; for (Int_t iClock = 0; iClock<21; ++iClock) flagArray[iClock] = hClockSlice->GetBinContent(iClock+1); @@ -692,7 +685,7 @@ TSpline3* AliADQAChecker::MakeTimeSlewingSpline(TH2* h) const { } //____________________________________________________________________________ -void AliADQAChecker::MakeImage(TObjArray** list, AliQAv1::TASKINDEX_t task, AliQAv1::MODE_t mode) +void AliADQAChecker::MakeImage(TObjArray **list, AliQAv1::TASKINDEX_t task, AliQAv1::MODE_t mode) { //AliInfoF("task=%d mode=%d", task, mode); // makes the QA image for sim and rec diff --git a/AD/ADrec/AliADQAChecker.h b/AD/ADrec/AliADQAChecker.h index 5160f2148f1..b27e69095ca 100644 --- a/AD/ADrec/AliADQAChecker.h +++ b/AD/ADrec/AliADQAChecker.h @@ -12,13 +12,10 @@ */ // --- ROOT system --- -class TFile; -class TH1; class TH2; class TObjArray; class TVirtualPad; class TCanvas; -class TLegend; class TSpline3; // --- Standard library --- @@ -27,21 +24,14 @@ class TSpline3; #include "AliQACheckerBase.h" #include "AliADQAParam.h" -class AliADLoader; -class AliCDBManager; -class AliCDBStorage; - class AliADQAChecker: public AliQACheckerBase { public: AliADQAChecker(); virtual ~AliADQAChecker(); // destructor - virtual void Init(const AliQAv1::DETECTORINDEX_t det); + virtual void Init(const AliQAv1::DETECTORINDEX_t det); const AliADQAParam *GetQAParam() const; - // void SetLowEventCut(Int_t nEvents) { fLowEventCut = nEvents; } - // void SetORvsANDCut(Double_t cut) { fORvsANDCut = cut; } - // void SetBGvsBBCut(Double_t cut) { fBGvsBBCut = cut; } protected: virtual void Check(Double_t* test, AliQAv1::ALITASK_t index, TObjArray** list, const AliDetectorRecoParam* recoParam); From bf3ae58bc574469ff857a6810b6351580aea4130 Mon Sep 17 00:00:00 2001 From: Marian Ivanov Date: Sat, 6 May 2017 06:48:19 +0200 Subject: [PATCH 2/5] PWGPP-312, PWGPP-314 - FPE fix in the distortion map fits. Init also gauss error --- STAT/TStatToolkit.cxx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/STAT/TStatToolkit.cxx b/STAT/TStatToolkit.cxx index e46c1349509..c042893132a 100644 --- a/STAT/TStatToolkit.cxx +++ b/STAT/TStatToolkit.cxx @@ -2712,10 +2712,14 @@ void TStatToolkit::MakeDistortionMapFast(THnBase * histo, TTreeSRedirector *pcst Bool_t isFitValid=kFALSE; - if (nrm>=kMinEntries && rms>0) { + if (nrm>=kMinEntries && rms>hfit->GetBinWidth(nbins1D)/TMath::Sqrt(12.)) { fgaus.SetParameters(nrm/(rms/hfit->GetBinWidth(nbins1D)),mean,rms); + fgaus.SetParError(0,nrm/(rms/hfit->GetBinWidth(nbins1D))); + fgaus.SetParError(1,rms); + fgaus.SetParError(2,rms); //grafFit.Fit(&fgaus,/*maxValFit(&fgaus,maxValFit(&fgaus,"qnrlS"); entriesG = fgaus.GetParameter(0); meanG = fgaus.GetParameter(1); rmsG = fgaus.GetParameter(2); From a80f861cae2439e889f6c639cd72ee4fc42d98fc Mon Sep 17 00:00:00 2001 From: Marian Ivanov Date: Sat, 6 May 2017 06:50:18 +0200 Subject: [PATCH 3/5] ATO-402, ATO-372 - be more precize in error message --- STAT/AliTreePlayer.cxx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/STAT/AliTreePlayer.cxx b/STAT/AliTreePlayer.cxx index fc858b6fc31..6906a9c1deb 100644 --- a/STAT/AliTreePlayer.cxx +++ b/STAT/AliTreePlayer.cxx @@ -999,7 +999,8 @@ TObjArray * AliTreePlayer::MakeHistograms(TTree * tree, TString hisString, TStr } } if (xMax[iDim]<=xMin[iDim]){ - ::Error("xxx","Invalid range specification %s\t%s",descriptionArray->At(3*iDim+2)->GetName(), descriptionArray->At(3*iDim+3)->GetName() ); + ::Error("AliTreePlayer::MakeHistograms","Invalid hstogram range specification for histogram %s: %s\t%s",hisDescription.Data(), \ + descriptionArray->At(3*iDim+2)->GetName(), descriptionArray->At(3*iDim+3)->GetName() ); } } THnF * phis = new THnF(hName.Data(),hName.Data(), hisDims[iHis],nBins, xMin,xMax); From 932b2cca82baa30e388cf3a4f119a1220cdede71 Mon Sep 17 00:00:00 2001 From: shahoian Date: Sat, 6 May 2017 19:05:33 +0200 Subject: [PATCH 4/5] Log information on N transported and N kept tracks --- STEER/STEERBase/AliStack.cxx | 1 + 1 file changed, 1 insertion(+) diff --git a/STEER/STEERBase/AliStack.cxx b/STEER/STEERBase/AliStack.cxx index 8fb1e3d9df0..c8535180e16 100644 --- a/STEER/STEERBase/AliStack.cxx +++ b/STEER/STEERBase/AliStack.cxx @@ -579,6 +579,7 @@ void AliStack::FinishEvent() if(!allFilled) allFilled = kTRUE; } } + AliInfoF("Ntrack=%d kept from %d transported\n",fNtrack,fNtransported); } //_____________________________________________________________________________ From afc252808b91f4c252dd5b85a819260b576bc491 Mon Sep 17 00:00:00 2001 From: Christoph Mayer Date: Mon, 8 May 2017 12:18:20 +0200 Subject: [PATCH 5/5] removed unneeded SetRangeUser helper function --- AD/ADrec/AliADQAChecker.cxx | 75 ++++++++++++++++--------------------- 1 file changed, 33 insertions(+), 42 deletions(-) diff --git a/AD/ADrec/AliADQAChecker.cxx b/AD/ADrec/AliADQAChecker.cxx index 7fc2e3da386..01a6164cbf0 100644 --- a/AD/ADrec/AliADQAChecker.cxx +++ b/AD/ADrec/AliADQAChecker.cxx @@ -547,7 +547,7 @@ void AliADQAChecker::SetQA(AliQAv1::ALITASK_t index, Double_t * value) const } } -// helper functions for drawing histograms H1-H4 +// helper functions for drawing histograms H1-H3 // (H1) TLegend* MakeLegend(Double_t x1, Double_t y1, Double_t x2, Double_t y2, Double_t textSize) { TLegend *leg = new TLegend(x1, y1, x2, y2); @@ -577,19 +577,6 @@ TH1* MakeScaledHistogram(TH1 *h1, Double_t norm, Bool_t sumw2=kFALSE) { // retur h->Scale(1.0/norm); return h; } -// (H4) Clone + set kCanDelete bit + SetRangeUser -TH1* SetRangeUser(TH1* h, TString axis, Double_t aMin, Double_t aMax) { - h = dynamic_cast(h->Clone(Form("%s_RangeUser%s", h->GetName(), axis.Data()))); - h->SetBit(TObject::kCanDelete); - if (axis == "X") - h->GetXaxis()->SetRangeUser(aMin, aMax); - if (axis == "Y") - h->GetYaxis()->SetRangeUser(aMin, aMax); - return h; -} -TH2* SetRangeUser(TH2* h, TString axis, Double_t aMin, Double_t aMax) { - return static_cast(SetRangeUser(static_cast(h), axis, aMin, aMax)); -} TCanvas* AliADQAChecker::CreatePads(TCanvas *c1) const { gStyle->SetLabelSize ( 1.1, "XYZ"); @@ -743,8 +730,8 @@ void AliADQAChecker::MakeImage(TObjArray **list, AliQAv1::TASKINDEX_t task, AliQ hChargeADC->GetBinContent(hChargeADC->GetMaximumBin())); const Float_t minY = TMath::Min(hChargeADA->GetBinContent(hChargeADA->GetMinimumBin()), hChargeADC->GetBinContent(hChargeADC->GetMinimumBin())); - SetRangeUser(hChargeADA, "Y", minY+1 ,2*maxY)->Draw(); - hChargeADC->DrawCopy("SAME"); + hChargeADA->DrawCopy()->GetYaxis()->SetRangeUser(minY+1 ,2*maxY); + hChargeADC->Draw("SAME"); TLegend *leg = MakeLegend(0.70,0.67,0.97,0.82, 0.05); leg->AddEntry(hChargeADA, "ADA", "L"); leg->AddEntry(hChargeADC, "ADC", "L"); @@ -752,23 +739,27 @@ void AliADQAChecker::MakeImage(TObjArray **list, AliQAv1::TASKINDEX_t task, AliQ } GetPadByName(c1, "Charge")->cd(2)->SetLogz(); - TH1* hChargeBB = dynamic_cast(listEs->At(AliADQADataMakerRec::kChargeEoIBB)); + TH1* hChargeBB = dynamic_cast(listEs->At(AliADQADataMakerRec::kChargeEoIBB)); + TH1 *hChargeBB_zoomY = NULL; if (hChargeBB) - hChargeBB->DrawCopy("COLZ"); + hChargeBB->Draw("COLZ"); // (1) Charge pad - zoomed GetPadByName(c1, "ChargeZoom")->cd(5)->SetLogz(); if (hChargeBB) { - SetRangeUser(hChargeBB, "Y", fQAParam->GetChargeChannelZoomMin(), fQAParam->GetChargeChannelZoomMax())->Draw("COLZ"); + hChargeBB_zoomY = hChargeBB->DrawCopy("COLZ"); + hChargeBB_zoomY->GetYaxis()->SetRangeUser(fQAParam->GetChargeChannelZoomMin(), fQAParam->GetChargeChannelZoomMax()); } GetPadByName(c1, "ChargeZoom")->cd(4)->SetLogz(); - TH1* hChargeAll = dynamic_cast(listEs->At(AliADQADataMakerRec::kChargeEoI)); + TH1 *hChargeAll = dynamic_cast(listEs->At(AliADQADataMakerRec::kChargeEoI)); + TH1 *hChargeAll_zoomY = NULL; if (hChargeAll) { - SetRangeUser(hChargeAll, "Y", fQAParam->GetChargeChannelZoomMin(), fQAParam->GetChargeChannelZoomMax())->Draw("COLZ"); + hChargeAll_zoomY = hChargeAll->DrawCopy("COLZ"); + hChargeAll_zoomY->GetYaxis()->SetRangeUser(fQAParam->GetChargeChannelZoomMin(), fQAParam->GetChargeChannelZoomMax()); } GetPadByName(c1, "ChargeZoom")->cd(6)->SetLogz(); - if (hChargeBB && hChargeAll) { - TH1* hRatioBBToAll = MakeRatioHistogram(hChargeBB, hChargeAll); + if (hChargeBB_zoomY && hChargeAll_zoomY) { + TH1* hRatioBBToAll = MakeRatioHistogram(hChargeBB_zoomY, hChargeAll_zoomY); hRatioBBToAll->SetTitle("Ratio: w_BB_Flag/All"); hRatioBBToAll->Draw("COLZ"); // will be deleted in c1->Clear() } @@ -776,7 +767,7 @@ void AliADQAChecker::MakeImage(TObjArray **list, AliQAv1::TASKINDEX_t task, AliQ GetPadByName(c1, "ChargeZoom")->cd(iHist+1)->SetLogz(iHist == 2); TH1 *h =dynamic_cast(listEs->At(AliADQADataMakerRec::kChargeVsClockInt0+iHist)); if (h) - h->DrawCopy("COLZ"); + h->Draw("COLZ"); } // (3) Time pad @@ -784,7 +775,7 @@ void AliADQAChecker::MakeImage(TObjArray **list, AliQAv1::TASKINDEX_t task, AliQ GetPadByName(c1, "Time")->cd(iHist+1)->SetLogz(iHist == 3); TH1 *h = dynamic_cast(listEs->At(AliADQADataMakerRec::kHPTDCTime+iHist)); if (h) - h->DrawCopy("COLZ"); + h->Draw("COLZ"); } // (4) Time ratio pad @@ -843,7 +834,7 @@ void AliADQAChecker::MakeImage(TObjArray **list, AliQAv1::TASKINDEX_t task, AliQ GetPadByName(c1, "ClockCfg")->cd(iHist+1)->SetLogz(iHist > 1); TH2* hFlagVsClock = dynamic_cast(listEs->At(AliADQADataMakerRec::kBBFlagVsClock+iHist)); if (hFlagVsClock) - hFlagVsClock->DrawCopy("COLZ"); + hFlagVsClock->Draw("COLZ"); } // (6) Coincidences pad @@ -852,8 +843,8 @@ void AliADQAChecker::MakeImage(TObjArray **list, AliQAv1::TASKINDEX_t task, AliQ TH1* hCoincADC = dynamic_cast(listEs->At(AliADQADataMakerRec::kNBBCoincADC+2*iHist)); TH1* hCoincADA = dynamic_cast(listEs->At(AliADQADataMakerRec::kNBBCoincADA+2*iHist)); if (hCoincADC && hCoincADA) { - hCoincADC->DrawCopy(); - hCoincADA->DrawCopy("SAME"); + hCoincADC->Draw(); + hCoincADA->Draw("SAME"); TLegend *leg = MakeLegend(0.70,0.67,0.97,0.82, 0.05); leg->AddEntry(hCoincADA, "ADA", "L"); leg->AddEntry(hCoincADC, "ADC", "L"); @@ -864,7 +855,7 @@ void AliADQAChecker::MakeImage(TObjArray **list, AliQAv1::TASKINDEX_t task, AliQ GetPadByName(c1, "Coincidences")->cd(iHist+3)->SetLogz(); TH1 *hBBCoinc = dynamic_cast(listEs->At(AliADQADataMakerRec::kNBBCoincCorr+iHist)); if (hBBCoinc) - hBBCoinc->DrawCopy("COLZ"); + hBBCoinc->Draw("COLZ"); } // (7) Pedestal monitoring pad @@ -874,7 +865,7 @@ void AliADQAChecker::MakeImage(TObjArray **list, AliQAv1::TASKINDEX_t task, AliQ ? dynamic_cast(listEs->At(AliADQADataMakerRec::kPedestalInt0+iHist)) : dynamic_cast(listEs->At(AliADQADataMakerRec::kPedestalDiffInt0+iHist))); if (hPed) - hPed->DrawCopy("COLZ"); + hPed->Draw("COLZ"); } // (8) Saturation monitoring pad @@ -890,8 +881,8 @@ void AliADQAChecker::MakeImage(TObjArray **list, AliQAv1::TASKINDEX_t task, AliQ GetPadByName(c1, "Triggers")->cd()->SetLogy(); TH1 *hTrig = dynamic_cast(listEs->At(AliADQADataMakerRec::kTriggers)); if (hTrig) { - hTrig->DrawCopy("HIST"); - hTrig->DrawCopy("TEXT0SAME"); + hTrig->Draw("HIST"); + hTrig->Draw("TEXT0SAME"); } // (10) Mean time pad @@ -899,9 +890,9 @@ void AliADQAChecker::MakeImage(TObjArray **list, AliQAv1::TASKINDEX_t task, AliQ TH1 *hMeanTimeADA = dynamic_cast(listEs->At(AliADQADataMakerRec::kMeanTimeADA)); TH1 *hMeanTimeADC = dynamic_cast(listEs->At(AliADQADataMakerRec::kMeanTimeADC)); if (hMeanTimeADA && hMeanTimeADC) { - SetRangeUser(hMeanTimeADA, "Y", 0, 1.1*TMath::Max(hMeanTimeADA->GetBinContent(hMeanTimeADA->GetMaximumBin()), - hMeanTimeADC->GetBinContent(hMeanTimeADC->GetMaximumBin())))->Draw(); - hMeanTimeADC->DrawCopy("SAME"); + hMeanTimeADA->DrawCopy()->GetYaxis()->SetRangeUser(0, 1.1*TMath::Max(hMeanTimeADA->GetBinContent(hMeanTimeADA->GetMaximumBin()), + hMeanTimeADC->GetBinContent(hMeanTimeADC->GetMaximumBin()))); + hMeanTimeADC->Draw("SAME"); TLegend *leg = MakeLegend(0.70,0.67,0.97,0.82, 0.05); leg->AddEntry(hMeanTimeADA, "ADA", "L"); leg->AddEntry(hMeanTimeADC, "ADC", "L"); @@ -911,7 +902,7 @@ void AliADQAChecker::MakeImage(TObjArray **list, AliQAv1::TASKINDEX_t task, AliQ GetPadByName(c1, "MeanTime")->cd(iHist+2)->SetLogz(); TH1* hMeanTimeDiff = dynamic_cast(listEs->At(AliADQADataMakerRec::kMeanTimeDiff+iHist)); if (hMeanTimeDiff) - hMeanTimeDiff->DrawCopy("COLZ"); + hMeanTimeDiff->Draw("COLZ"); } // (11) time slewing and Decisions pad @@ -924,26 +915,26 @@ void AliADQAChecker::MakeImage(TObjArray **list, AliQAv1::TASKINDEX_t task, AliQ GetPadByName(c1, "Decisions")->cd(1+2*side)->SetLogz(); if (!hTimeSlewing[side]) continue; - hTimeSlewing[side] = SetRangeUser(hTimeSlewing[side], "Y", fQAParam->GetTdcTimeMinBBFlag(), fQAParam->GetTdcTimeMaxBBFlag()); + hTimeSlewing[side] = dynamic_cast(hTimeSlewing[side]->DrawCopy("COLZ")); + hTimeSlewing[side]->GetYaxis()->SetRangeUser(fQAParam->GetTdcTimeMinBBFlag(), fQAParam->GetTdcTimeMaxBBFlag()); hTimeSlewing[side]->SetTitle(TString::Format("Time slewing %s", sideName[side])); - hTimeSlewing[side]->Draw("COLZ"); MakeTimeSlewingSpline(hTimeSlewing[side])->Draw("PSAME"); } GetPadByName(c1, "Decisions")->cd(2); TH1* hDecisions = dynamic_cast(listEs->At(AliADQADataMakerRec::kDecisions)); if (hDecisions) - hDecisions->DrawCopy("COLZTEXT"); + hDecisions->Draw("COLZTEXT"); // (12) charge trend GetPadByName(c1, "ChargeTrend")->cd(); TH1* hChargeQuantileADA = dynamic_cast(listEs->At(AliADQADataMakerRec::kTrend_TriggerChargeQuantileADA)); TH1* hChargeQuantileADC = dynamic_cast(listEs->At(AliADQADataMakerRec::kTrend_TriggerChargeQuantileADC)); if (hChargeQuantileADA && hChargeQuantileADC) { - hChargeQuantileADA = SetRangeUser(hChargeQuantileADA, "Y", fQAParam->GetChargeTrendMin(), fQAParam->GetChargeTrendMax()); + hChargeQuantileADA = hChargeQuantileADA->DrawCopy(); + hChargeQuantileADA->GetYaxis()->SetRangeUser(fQAParam->GetChargeTrendMin(), fQAParam->GetChargeTrendMax()); hChargeQuantileADA->GetYaxis()->SetTitle("Quantile 0.9"); hChargeQuantileADA->GetXaxis()->SetRange(1, hChargeQuantileADC->GetNbinsX()-1); - hChargeQuantileADA->Draw(); - hChargeQuantileADC->DrawCopy("SAME"); + hChargeQuantileADC->Draw("SAME"); TLegend *leg = MakeLegend(0.70,0.67,0.97,0.82, 0.05); leg->AddEntry(hChargeQuantileADA, "ADA", "L"); leg->AddEntry(hChargeQuantileADC, "ADC", "L");