2 //____________________________________________________________________
4 // $Id: DrawHits.C 22496 2007-11-26 13:50:44Z cholm $
6 // Script that contains a class to draw hits, using the
7 // AliFMDInputHits class in the util library.
9 // Use the script `Compile.C' to compile this class using ACLic.
11 #include <AliCDBManager.h>
12 #include <AliFMDParameters.h>
13 #include <AliFMDHit.h>
14 #include <AliFMDDigit.h>
15 #include <AliFMDSDigit.h>
16 #include <AliFMDRecPoint.h>
17 #include <AliESDFMD.h>
18 #include <AliFMDPattern.h>
19 #include <AliFMDSpectraDisplay.h>
21 #include <TDirectory.h>
22 #include <TObjArray.h>
34 #include <TGListTree.h>
37 #include <KeySymbols.h>
39 #include <RQ_OBJECT.h>
42 //==================================================================
43 void AliFMDSpectraDisplayElement::MakeHistograms(TAxis* axis)
46 if (axis->IsVariableBinSize()) {
47 fFull = new TH1F(Form("f_%s", GetName()), Form("%s spectra", GetName()),
48 axis->GetXbins()->fN, axis->GetXbins()->fArray);
49 fCut = new TH1F(Form("c_%s", GetName()),
50 Form("%s restricted spectra", GetName()),
51 axis->GetXbins()->fN, axis->GetXbins()->fArray);
54 fFull = new TH1F(Form("f_%s", GetName()), Form("%s spectra", GetName()),
55 axis->GetNbins(), axis->GetXmin(), axis->GetXmax());
56 fCut = new TH1F(Form("c_%s", GetName()),
57 Form("%s restricted spectra", GetName()),
58 axis->GetNbins(), axis->GetXmin(), axis->GetXmax());
60 fFull->SetFillColor(kRed);
61 fFull->SetFillStyle(3001);
62 fCut->SetFillColor(kBlue);
63 fCut->SetFillStyle(3001);
65 //__________________________________________________________________
66 void AliFMDSpectraDisplayElement::DoFill(Double_t v)
68 if (fFull) fFull->Fill(v);
70 //__________________________________________________________________
71 void AliFMDSpectraDisplayElement::Show(Option_t* option,
72 Double_t l, Double_t h)
75 gPad->SetLogy(fFull->GetMaximum() > 10);
77 Double_t lx = fFull->GetXaxis()->GetXmin();
78 Double_t hx = fFull->GetXaxis()->GetXmax();
79 Double_t rr = (hx-lx);
80 Double_t ll = rr * l + lx;
81 Double_t hh = rr * h + lx;
82 for (Int_t i = 1; i <= fFull->GetNbinsX(); i++) {
83 if (fFull->GetBinCenter(i) <= ll ||
84 fFull->GetBinCenter(i) > hh) {
85 fCut->SetBinContent(i, 0);
88 fCut->SetBinContent(i, fFull->GetBinContent(i));
90 fCut->Draw(Form("%s same", option));
93 //__________________________________________________________________
95 AliFMDSpectraDisplayElement::Compare(const TObject*) const
101 //==================================================================
102 AliFMDSpectraDisplayTop::AliFMDSpectraDisplayTop(TGCompositeFrame& frame,
104 : AliFMDSpectraDisplayElement("All", "Everything"),
105 fHints(kLHintsExpandX|kLHintsExpandY,3, 3, 3, 3),
106 fContainer(&frame, 200, 350),
107 fList(&fContainer, kHorizontalFrame),
111 fHist1DIcon(gClient->GetPicture("h1_t.xpm")),
112 fHist2DIcon(gClient->GetPicture("h2_t.xpm")),
113 fHist3DIcon(gClient->GetPicture("h3_t.xpm")),
114 fGraphIcon(gClient->GetPicture("graph.xpm")),
116 fEntry(*(fList.AddItem(0, GetName(), this)))
118 fContainer.AddFrame(&fList, &fHints);
119 frame.AddFrame(&fContainer, &fHints);
121 fList.Connect("Clicked(TGListTreeItem*,Int_t)",
122 "AliFMDSpectraDisplayTop", this,
123 "HandleEntry(TGListTreeItem*,Int_t)");
124 fList.Connect("KeyPressed(TGListTreeItem*,ULong_t,ULong_t)",
125 "AliFMDSpectraDisplayTop", this,
126 "HandleKey(TGListTreeItem*,UInt_t,UInt_t)");
127 fList.Connect("ReturnPressed(TGListTreeItem*)",
128 "AliFMDSpectraDisplayTop", this,
129 "HandleReturn(TGListTreeItem*)");
131 //____________________________________________________________________
133 AliFMDSpectraDisplayTop::SetAxis(TAxis* axis)
136 MakeHistograms(axis);
138 //____________________________________________________________________
140 AliFMDSpectraDisplayTop::ClearCanvas()
142 if (!fCanvas) return;
146 //____________________________________________________________________
148 AliFMDSpectraDisplayTop::ClearList()
150 fList.DeleteItem(fList.GetFirstItem());
155 //____________________________________________________________________
157 AliFMDSpectraDisplayTop::HandleReturn(TGListTreeItem * f)
161 fList.UnselectAll(kFALSE);
162 fList.SetSelected(0);
170 //____________________________________________________________________
172 AliFMDSpectraDisplayTop::HandleKey(TGListTreeItem * f, UInt_t keysym, UInt_t)
175 fList.UnselectAll(kFALSE);
176 fList.SetSelected(0);
179 TGListTreeItem* next = 0;
182 next = f->GetPrevSibling();
184 next = f->GetParent();
185 if (next) fList.CloseItem(next);
189 next = f->GetNextSibling();
190 if (!next && f->GetParent()) {
191 next = f->GetParent()->GetNextSibling();
192 fList.CloseItem(f->GetParent());
196 next = f->GetParent();
197 if (next) fList.CloseItem(next);
200 next = f->GetFirstChild();
201 if (next) fList.OpenItem(f);
205 next = fList.GetSelected();
208 fList.PageDown(kTRUE);
209 next = fList.GetSelected();
212 // if (next) gClient->NeedRedraw(&fList);
213 if (next && next != f) {
214 fList.ClearHighlighted();
215 fList.SetSelected(next);
218 if (next) gClient->NeedRedraw(&fList);
221 //____________________________________________________________________
223 AliFMDSpectraDisplayTop::HandleEntry(TGListTreeItem* entry, Int_t /*id*/)
225 TGListTreeItem* old = fCurrentEntry;
227 if (!entry->GetUserData()) return;
228 fCurrentEntry = entry;
234 if (old != fCurrentEntry && fCanvas) fCanvas->cd();
238 //____________________________________________________________________
240 AliFMDSpectraDisplayTop::UpdateList()
242 gClient->NeedRedraw(&fList);
245 //____________________________________________________________________
247 AliFMDSpectraDisplayTop::UpdateCanvas()
249 if (!fCanvas) return;
254 //____________________________________________________________________
255 TObject* AliFMDSpectraDisplayTop::Current() const
257 if (!fCurrentEntry) return 0;
258 if (!fCurrentEntry->GetUserData()) return 0;
259 return static_cast<TObject*>(fCurrentEntry->GetUserData());
262 //__________________________________________________________________
263 AliFMDSpectraDisplayDetector& AliFMDSpectraDisplayTop::GetOrAdd(UShort_t id)
266 AliFMDSpectraDisplayDetector* d = 0;
267 if (fChildren.GetEntriesFast() <= idx ||
268 !(d = static_cast<AliFMDSpectraDisplayDetector*>(fChildren.At(idx)))) {
269 d = new AliFMDSpectraDisplayDetector(id, *this);
270 fChildren.AddAtAndExpand(d, idx);
271 // GetTop().GetList().SortChildren(&fEntry);
272 // GetTop().GetList().Sort(&(d->GetEntry()));
276 //__________________________________________________________________
277 void AliFMDSpectraDisplayTop::Fill(UShort_t det, Char_t ring,
278 UShort_t sec, UShort_t str, Double_t v)
280 AliFMDSpectraDisplayDetector& d = GetOrAdd(det);
281 d.Fill(ring, sec, str, v);
284 //__________________________________________________________________
286 AliFMDSpectraDisplayTop::Compare(const TObject*) const
290 //==================================================================
291 AliFMDSpectraDisplayDetector::AliFMDSpectraDisplayDetector(UShort_t det,
292 AliFMDSpectraDisplayTop& tree)
293 : AliFMDSpectraDisplayElement(Form("FMD%d", det), "FMD Sub-detector"),
297 fEntry(*(tree.GetList().AddItem(&(tree.GetEntry()), GetName())))
299 fEntry.SetUserData(this);
300 fEntry.SetText(GetName());
301 if (GetTop().GetAxis()) MakeHistograms(GetTop().GetAxis());
303 //__________________________________________________________________
304 AliFMDSpectraDisplayRing& AliFMDSpectraDisplayDetector::GetOrAdd(Char_t id)
306 Int_t idx = (id == 'I' || id == 'i') ? 0 : 1;
307 AliFMDSpectraDisplayRing* r = 0;;
308 if (fChildren.GetEntriesFast() <= idx ||
309 !(r = static_cast<AliFMDSpectraDisplayRing*>(fChildren.At(idx)))) {
310 r = new AliFMDSpectraDisplayRing(id, *this);
311 fChildren.AddAtAndExpand(r, idx);
312 // GetTop().GetList().SortChildren(&fEntry);
313 // GetTop().GetList().Sort(&(r->GetEntry()));
317 //__________________________________________________________________
318 void AliFMDSpectraDisplayDetector::Fill(Char_t ring, UShort_t sec,
319 UShort_t str, Double_t v)
321 AliFMDSpectraDisplayRing& r = GetOrAdd(ring);
325 //__________________________________________________________________
327 AliFMDSpectraDisplayDetector::Compare(const TObject* o) const
329 std::cout << "Comparing detector to a " << o->ClassName() << std::endl;
330 if (o->IsA() == AliFMDSpectraDisplayDetector::Class()) {
331 const AliFMDSpectraDisplayDetector* ro =
332 static_cast<const AliFMDSpectraDisplayDetector*>(o);
333 return (Id() < ro->Id() ? -1 :
334 Id() == ro->Id() ? 0 : 1);
338 //==================================================================
339 AliFMDSpectraDisplayRing::AliFMDSpectraDisplayRing(Char_t id,
340 AliFMDSpectraDisplayDetector& d)
341 : AliFMDSpectraDisplayElement(Form("FMD%d%c", d.Id(), id), "FMD Ring"),
345 fEntry(*(GetTop().GetList().AddItem(&(d.GetEntry()), GetName(), this)))
347 fEntry.SetText(GetName());
348 if (GetTop().GetAxis()) MakeHistograms(GetTop().GetAxis());
350 //__________________________________________________________________
351 AliFMDSpectraDisplaySector& AliFMDSpectraDisplayRing::GetOrAdd(UShort_t id)
353 AliFMDSpectraDisplaySector* s = 0;
354 if (fChildren.GetEntriesFast() <= id ||
355 !(s = static_cast<AliFMDSpectraDisplaySector*>(fChildren.At(id)))) {
356 s = new AliFMDSpectraDisplaySector(id, *this);
357 fChildren.AddAtAndExpand(s, id);
358 // GetTop().GetList().SortChildren(&fEntry);
359 // GetTop().GetList().Sort(&(s->GetEntry()));
363 //__________________________________________________________________
364 void AliFMDSpectraDisplayRing::Fill(UShort_t sec, UShort_t str, Double_t v)
366 AliFMDSpectraDisplaySector& s = GetOrAdd(sec);
370 //__________________________________________________________________
372 AliFMDSpectraDisplayRing::Compare(const TObject* o) const
374 std::cout << "Comparing ring to a " << o->ClassName() << std::endl;
375 if (o->IsA() == AliFMDSpectraDisplayRing::Class()) {
376 const AliFMDSpectraDisplayRing* ro =
377 static_cast<const AliFMDSpectraDisplayRing*>(o);
378 return (Id() < ro->Id() ? -1 :
379 Id() == ro->Id() ? 0 : 1);
383 //==================================================================
384 AliFMDSpectraDisplaySector::AliFMDSpectraDisplaySector(UShort_t id,
385 AliFMDSpectraDisplayRing& r)
386 : AliFMDSpectraDisplayElement(Form("FMD%d%c_%02d",r.DetectorId(),r.Id(),id),
391 fEntry(*(GetTop().GetList().AddItem(&(r.GetEntry()), GetName(), this)))
393 fEntry.SetText(GetName());
394 if (GetTop().GetAxis()) MakeHistograms(GetTop().GetAxis());
396 //__________________________________________________________________
397 AliFMDSpectraDisplayStrip& AliFMDSpectraDisplaySector::GetOrAdd(UShort_t id)
399 AliFMDSpectraDisplayStrip* s = 0;
400 if (fChildren.GetEntriesFast() <= id ||
401 !(s = static_cast<AliFMDSpectraDisplayStrip*>(fChildren.At(id)))) {
402 s = new AliFMDSpectraDisplayStrip(id, *this);
403 fChildren.AddAtAndExpand(s, id);
404 // GetTop().GetList().SortChildren(&fEntry);
405 // GetTop().GetList().Sort(&(s->GetEntry()));
409 //__________________________________________________________________
410 void AliFMDSpectraDisplaySector::Fill(UShort_t str, Double_t v)
412 AliFMDSpectraDisplayStrip& s = GetOrAdd(str);
416 //__________________________________________________________________
418 AliFMDSpectraDisplaySector::Compare(const TObject* o) const
420 std::cout << "Comparing sector to a " << o->ClassName() << std::endl;
421 if (o->IsA() == AliFMDSpectraDisplaySector::Class()) {
422 const AliFMDSpectraDisplaySector* ro =
423 static_cast<const AliFMDSpectraDisplaySector*>(o);
424 return (Id() < ro->Id() ? -1 :
425 Id() == ro->Id() ? 0 : 1);
429 //==================================================================
430 AliFMDSpectraDisplayStrip::AliFMDSpectraDisplayStrip(UShort_t id,
431 AliFMDSpectraDisplaySector& s)
432 : AliFMDSpectraDisplayElement(Form("FMD%d%c_%02d_%03d",
433 s.DetectorId(), s.RingId(),
434 s.Id(), id), "FMD Strip"),
437 fEntry(*(GetTop().GetList().AddItem(&(s.GetEntry()), GetName(), this)))
439 fEntry.SetText(GetName());
440 fEntry.SetPictures(GetTop().GetH1Pic(), GetTop().GetH1Pic());
441 if (GetTop().GetAxis()) MakeHistograms(GetTop().GetAxis());
443 //__________________________________________________________________
444 void AliFMDSpectraDisplayStrip::Fill(Double_t v)
448 //__________________________________________________________________
450 AliFMDSpectraDisplayStrip::Compare(const TObject* o) const
452 std::cout << "Comparing strip to a " << o->ClassName() << std::endl;
453 if (o->IsA() == AliFMDSpectraDisplayStrip::Class()) {
454 const AliFMDSpectraDisplayStrip* ro =
455 static_cast<const AliFMDSpectraDisplayStrip*>(o);
456 return (Id() < ro->Id() ? -1 :
457 Id() == ro->Id() ? 0 : 1);
462 //==================================================================
463 AliFMDSpectraDisplay::AliFMDSpectraDisplay()
465 fSelector(gClient->GetRoot(), 100, 100),
466 fTop(fSelector, fAux)
468 AddLoad(AliFMDInput::kRaw);
472 fTop.Connect("SelectionChanged()",
473 "AliFMDSpectraDisplay", this, "HandleDraw()");
475 fSelector.MapSubwindows();
476 fSelector.Resize(fSelector.GetDefaultSize());
477 fSelector.MapWindow();
480 //__________________________________________________________________
482 AliFMDSpectraDisplay::HandleDraw()
484 TObject* user = fTop.Current();
485 if (!user) return kFALSE;
486 if (!user->InheritsFrom(AliFMDSpectraDisplayElement::Class())) {
487 Warning("HandleDraw", "%s does not inherit from Spectra::Element",
492 AliFMDSpectraDisplayElement* e
493 = static_cast<AliFMDSpectraDisplayElement*>(user);
494 e->Show("hist", fSlider->GetMinimum(), fSlider->GetMaximum());
500 //__________________________________________________________________
502 AliFMDSpectraDisplay::MakeAux()
504 AliFMDPattern::MakeAux();
506 fTop.SetAxis(fSpec->GetXaxis());
508 //__________________________________________________________________
510 AliFMDSpectraDisplay::DrawAux()
512 // Draw in the Aux the canvas
513 // For example draw the spectra
515 if (fTop.Current() != &fTop && HandleDraw()) return;
516 AliFMDPattern::DrawAux();
518 //__________________________________________________________________
520 AliFMDSpectraDisplay::ProcessHit(AliFMDHit* hit, TParticle* p)
522 fTop.Fill(hit->Detector(),
527 return AliFMDPattern::ProcessHit(hit, p);
529 //__________________________________________________________________
531 AliFMDSpectraDisplay::ProcessDigit(AliFMDDigit* digit)
533 fTop.Fill(digit->Detector(),
538 return AliFMDDisplay::ProcessDigit(digit);
540 //__________________________________________________________________
542 AliFMDSpectraDisplay::ProcessSDigit(AliFMDSDigit* sdigit)
544 fTop.Fill(sdigit->Detector(),
549 return AliFMDDisplay::ProcessSDigit(sdigit);
551 //__________________________________________________________________
553 AliFMDSpectraDisplay::ProcessRawDigit(AliFMDDigit* digit)
555 return ProcessDigit(digit);
557 //__________________________________________________________________
559 AliFMDSpectraDisplay::ProcessRecPoint(AliFMDRecPoint* recpoint)
561 fTop.Fill(recpoint->Detector(),
565 recpoint->Particles());
566 return AliFMDDisplay::ProcessRecPoint(recpoint);
568 //__________________________________________________________________
570 AliFMDSpectraDisplay::ProcessESD(UShort_t det, Char_t rng, UShort_t sec,
571 UShort_t str, Float_t x, Float_t mult)
573 fTop.Fill(det, rng, sec, str, mult);
574 return AliFMDDisplay::ProcessESD(det, rng, sec, str, x, mult);
576 //__________________________________________________________________