7 # include <AliCDBManager.h>
8 # include <AliQADataMaker.h>
9 # include "AliFMDQADataMakerRec.h"
10 # include "AliFMDQADataMakerSim.h"
12 # include <TObjArray.h>
13 # include <AliRecoParam.h>
14 # include <AliRawReader.h>
15 # include <AliQACheckerBase.h>
16 # include <AliFMDQAChecker.h>
17 # include <AliQAChecker.h>
20 # include <AliFMDInput.h>
24 * Class to test the QA code
28 class QATest : public AliFMDInput
35 : AliFMDInput("galice.root"),
38 for (Int_t i = 0; i < AliQAv1::kNTASKINDEX; i++)
39 fTasks[i] = AliQAv1::kNULLTASKINDEX;
42 * Set the location of the QA reference storage
44 * @param refloc Location of QA storage (e.g., local://${ALICE_ROOT}/QAref)
46 void SetQARefStorage(const char* refloc)
48 AliQAv1::SetQARefStorage(refloc);
54 * @return true on success, false otherwise
58 // --- Create the maker ------------------------------------------
59 if (IsLoaded(kHits) ||
61 IsLoaded(kKinematics) ||
64 fMaker = new AliFMDQADataMakerSim();
67 fMaker = new AliFMDQADataMakerRec();
69 // --- Figure out tasks ------------------------------------------
71 if (IsLoaded(kHits)) fTasks[j++] = AliQAv1::kHITS;
72 if (IsLoaded(kDigits)) fTasks[j++] = AliQAv1::kDIGITS;
73 if (IsLoaded(kSDigits)) fTasks[j++] = AliQAv1::kSDIGITS;
74 if (IsLoaded(kRecPoints)) fTasks[j++] = AliQAv1::kRECPOINTS;
75 if (IsLoaded(kESD)) fTasks[j++] = AliQAv1::kESDS;
76 if (IsLoaded(kRaw)) fTasks[j++] = AliQAv1::kRAWS;
78 AliError(Form("Loaded trees (%s) cannot be processed by QA",
83 // --- Data maker --------------------------------------------------
84 Info("TestQA", "Creating data maker");
85 fMaker = new AliFMDQADataMakerRec();
87 // --- Init all species histograms ---------------------------------
88 Info("TestQA", "Setup data species");
89 AliQAv1* qa = AliQAv1::Instance();
90 for (unsigned int es = 0; es < AliRecoParam::kNSpecies; es++) {
91 AliRecoParam::EventSpecie_t specie = AliRecoParam::ConvertIndex(es);
92 fMaker->SetEventSpecie(specie);
93 qa->SetEventSpecie(specie);
94 for (Int_t i = 0; i < AliQAv1::kNTASKINDEX; i++) {
95 if (fTasks[i] == AliQAv1::kNULLTASKINDEX) continue;
96 fMaker->Init(fTasks[i], specie);
100 // --- Start of cycle --------------------------------------------
101 Int_t run = AliCDBManager::Instance()->GetRun();
103 for (Int_t i = 0; i < AliQAv1::kNTASKINDEX; i++) {
104 if (fTasks[i] == AliQAv1::kNULLTASKINDEX) continue;
105 fMaker->StartOfCycle(fTasks[i], run, same);
110 return AliFMDInput::Init();
115 * @return true on success
117 virtual Bool_t ProcessHits()
119 fMaker->SetEventSpecie(AliRecoParam::kLowMult);
120 fMaker->MakeHits(fTreeH);
126 * @return true on success
128 virtual Bool_t ProcessDigits()
130 fMaker->SetEventSpecie(AliRecoParam::kLowMult);
131 fMaker->MakeDigits(fTreeD);
135 * Process the summable digits
137 * @return true on success
139 virtual Bool_t ProcessSDigits()
141 fMaker->SetEventSpecie(AliRecoParam::kLowMult);
142 fMaker->MakeSDigits(fTreeS);
146 * Process the reconstructed points
148 * @return true on success
150 virtual Bool_t ProcessRecPoints()
152 fMaker->SetEventSpecie(AliRecoParam::kLowMult);
153 fMaker->MakeRecPoints(fTreeR);
157 * Process the event summary data
159 * @return true on success
161 virtual Bool_t ProcesssESDs()
163 fMaker->SetEventSpecie(AliRecoParam::kLowMult);
164 fMaker->MakeESDs(fESDEvent);
168 * Process the raw data
170 * @return true on success
172 virtual Bool_t ProcessRawDigits()
174 fMaker->SetEventSpecie(AliRecoParam::kLowMult);
175 fMaker->MakeRaws(fReader);
179 * Called at the end of the job. Runs the checkers
181 * @return true on success
183 virtual Bool_t Finish()
185 // --- End of cycle - this calls the checker ---------------------
186 Info("TestQA", "End of cycle");
187 for (Int_t i = 0; i < AliQAv1::kNTASKINDEX; i++) {
188 if (fTasks[i] == AliQAv1::kNULLTASKINDEX) continue;
189 fMaker->EndOfCycle(fTasks[i]);
192 // --- Running checker -------------------------------------------
193 Info("TestQA", "Running checker");
194 AliQACheckerBase * checker = AliQAChecker::Instance()->
195 GetDetQAChecker(AliQAv1::GetDetIndex("FMD"));
197 // --- Get images from checker -----------------------------------
198 AliQAv1* qa = AliQAv1::Instance();
199 TObjArray* canvases = new TObjArray();
200 for (unsigned int es = 0; es < AliRecoParam::kNSpecies; es++) {
201 AliRecoParam::EventSpecie_t specie = AliRecoParam::ConvertIndex(es);
202 if (!qa->IsEventSpecieSet(specie)) continue;
204 TCanvas* c = checker->GetImage(specie);
210 // --- Create summary image --------------------------------------
211 TCanvas* out = new TCanvas("summary", "Summary", 1024, 1024);
212 out->SetFillColor(kWhite);
213 out->SetBorderSize(0);
214 out->SetBorderMode(0);
216 Int_t nImgs = canvases->GetEntriesFast();
217 Int_t nX = Int_t(TMath::Sqrt(nImgs) + .5);
220 for (Int_t i = 0; i < nImgs; i++) {
221 TVirtualPad* p = out->cd(i + 1);
222 p->SetRightMargin(0.001);
223 p->SetTopMargin(0.001);
225 Warning("TestQA", "No pad at index %d / %d", i+1, nImgs);
229 TCanvas* c = static_cast<TCanvas*>(canvases->At(i));
232 out->Print("summary.png");
237 AliQADataMaker* fMaker; // Data maker
238 AliQAv1::TASKINDEX_t fTasks[AliQAv1::kNTASKINDEX]; // Tasks to do
243 RunQATest(const char* src, Int_t runno=0)
245 gROOT->LoadMacro("$ALICE_ROOT/FMD/scripts/Compile.C");
246 gSystem->AddIncludePath("-DBUILD=1");
247 Compile("$ALICE_ROOT/FMD/scripts/RunQATest.C", "+g");
249 QATest* qaTest = new QATest();
251 Int_t colon = what.Index(":");
253 if (colon != TString::kNPOS) {
254 type = what(0, colon);
255 what = what(colon+1, what.Length()-colon-1);
258 if (what.Contains("AliESD")) type = "esd";
259 else if (what.Contains("galice")) type = "sim";
260 else if (what.Contains(".raw")) type = "raw";
262 Info("RunQATest", "type=%s, what=%s", type.Data(), what.Data());
265 if (type.CompareTo("esd") == 0) {
266 qaTest->AddLoad(AliFMDInput::kESD);
267 qaTest->SetInputDir(what);
269 else if (type.CompareTo("raw") == 0) {
270 qaTest->AddLoad(AliFMDInput::kRaw);
271 qaTest->SetRawFile(what);
273 else if (type.CompareTo("sim") == 0) {
274 qaTest->AddLoad(AliFMDInput::kHits);
275 qaTest->AddLoad(AliFMDInput::kSDigits);
276 qaTest->AddLoad(AliFMDInput::kDigits);
278 else if (type.CompareTo("rec") == 0) {
279 qaTest->AddLoad(AliFMDInput::kDigits);
280 qaTest->AddLoad(AliFMDInput::kRecPoints);
281 qaTest->AddLoad(AliFMDInput::kESD);
284 Error("RunQATest", "Unknown type='%s' in '%s'", type.Data(), src);