From: cholm Date: Sun, 14 Nov 2010 17:06:00 +0000 (+0000) Subject: Implement MakeImage to insure log-book/online DQM consistency X-Git-Url: http://git.uio.no/git/?a=commitdiff_plain;h=1706c710e3b0bd59af1a1eace3735a79ad8c3e43;p=u%2Fmrichter%2FAliRoot.git Implement MakeImage to insure log-book/online DQM consistency --- diff --git a/FMD/AliFMDQAChecker.cxx b/FMD/AliFMDQAChecker.cxx index 3ae58b67722..6db9198b503 100644 --- a/FMD/AliFMDQAChecker.cxx +++ b/FMD/AliFMDQAChecker.cxx @@ -32,6 +32,8 @@ #include #include #include +#include +#include // --- AliRoot header files --- #include "AliLog.h" @@ -66,7 +68,7 @@ void AliFMDQAChecker::Check(Double_t* rv, Int_t count = 0; rv[specie] = 0.; - if ( !AliQAv1::Instance()->IsEventSpecieSet(specie) ) + if (!AliQAv1::Instance()->IsEventSpecieSet(specie) ) continue ; if(!list[specie]) continue; @@ -92,6 +94,102 @@ void AliFMDQAChecker::Check(Double_t* rv, } +//____________________________________________________________________________ +void +AliFMDQAChecker::MakeImage(TObjArray** list, + AliQAv1::TASKINDEX_t task, + AliQAv1::MODE_t mode) +{ + // makes the QA image for sim and rec + // + // Parameters: + // task What to check + // list Array of arrays of histograms. There's one array for + // each 'specie' + // t Reconstruction parameters - not used. + // + Int_t nImages = 0 ; + Double_t max = 0; + Double_t min = 10000; + for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) { + if (!AliQAv1::Instance()->IsEventSpecieSet(specie)) continue ; + + if(!list[specie]) continue; + + TH1F* hist = 0; + Int_t nHist = list[specie]->GetEntriesFast(); + for(Int_t i= 0; i< nHist; i++) { + hist = static_cast(list[specie]->At(i)); + if (hist->TestBit(AliQAv1::GetImageBit())) { + nImages++; + max = TMath::Max(max, hist->GetMaximum()); + min = TMath::Min(min, hist->GetMinimum()); + } + } + break ; + } + min = TMath::Max(0.1, min); + max = TMath::Min(1.0, max); + + if (nImages == 0) { + AliDebug(AliQAv1::GetQADebugLevel(), + Form("No histogram will be plotted for %s %s\n", GetName(), + AliQAv1::GetTaskName(task).Data())); + return; + } + + AliDebug(AliQAv1::GetQADebugLevel(), + Form("%d histograms will be plotted for %s %s\n", + nImages, GetName(), AliQAv1::GetTaskName(task).Data())); + + for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) { + if (!AliQAv1::Instance()->IsEventSpecieSet(specie)) continue ; + + if(!list[specie]) continue; + + const Char_t * title = Form("QA_%s_%s_%s", GetName(), + AliQAv1::GetTaskName(task).Data(), + AliRecoParam::GetEventSpecieName(specie)); + if (!fImage[specie]) + fImage[specie] = new TCanvas(title, title) ; + fImage[specie]->Clear() ; + fImage[specie]->SetTitle(title) ; + fImage[specie]->cd() ; + + TPaveText someText(0.015, 0.015, 0.98, 0.98) ; + someText.AddText(title) ; + someText.Draw() ; + fImage[specie]->Print(Form("%s%s%d.%s", AliQAv1::GetImageFileName(), + AliQAv1::GetModeName(mode), + AliQAChecker::Instance()->GetRunNumber(), + AliQAv1::GetImageFileFormat()), "ps") ; + fImage[specie]->Clear(); + + Int_t nx = (nImages + .5) / 2; + Int_t ny = 2; + fImage[specie]->Divide(nx, ny, 0, 0); + + + TH1F* hist = 0; + Int_t nHist = list[specie]->GetEntriesFast(); + Int_t j = 0; + for (Int_t i = 0; i < nHist; i++) { + hist = static_cast(list[specie]->At(i)); + if (!hist->TestBit(AliQAv1::GetImageBit())) continue; + + TVirtualPad* pad = fImage[specie]->cd(++j); + pad->SetLogy(); + hist->SetMinimum(min); + hist->SetMaximum(max); + hist->DrawCopy(); + } + + fImage[specie]->Print(Form("%s%s%d.%s", AliQAv1::GetImageFileName(), + AliQAv1::GetModeName(mode), + AliQAChecker::Instance()->GetRunNumber(), + AliQAv1::GetImageFileFormat()), "ps"); + } +} //__________________________________________________________________ // diff --git a/FMD/AliFMDQAChecker.h b/FMD/AliFMDQAChecker.h index d4d920bb322..21f2bcb0f28 100644 --- a/FMD/AliFMDQAChecker.h +++ b/FMD/AliFMDQAChecker.h @@ -30,7 +30,21 @@ public: * each 'specie' * @param t Reconstruction parameters - not used. */ - void Check(Double_t* rv, AliQAv1::ALITASK_t what, TObjArray** list, const AliDetectorRecoParam* t); + void Check(Double_t* rv, AliQAv1::ALITASK_t what, + TObjArray** list, const AliDetectorRecoParam* t); + /** + * Make output images. This is overridden relative to the base + * class so that we can set the log(y) scale and put everything on + * the same axis. + * + * @param list List of specie array of histograms + * @param task What to show + * @param mode Mode + */ + void MakeImage(TObjArray** list, + AliQAv1::TASKINDEX_t task, + AliQAv1::MODE_t mode); + private: ClassDef(AliFMDQAChecker,0) // Yves? what to do? };