21 #include <TDirectory.h> 22 #include <TObjArray.h> 34 #include <TGListTree.h> 37 #include <KeySymbols.h> 39 #include <RQ_OBJECT.h> 41 #define NESTED(X) AliFMDSpectraDisplay::AliFMDSpectraDisplay # X 53 if (axis->IsVariableBinSize()) {
54 fFull =
new TH1F(Form(
"f_%s", GetName()), Form(
"%s spectra", GetName()),
55 axis->GetXbins()->fN, axis->GetXbins()->fArray);
56 fCut =
new TH1F(Form(
"c_%s", GetName()),
57 Form(
"%s restricted spectra", GetName()),
58 axis->GetXbins()->fN, axis->GetXbins()->fArray);
61 fFull =
new TH1F(Form(
"f_%s", GetName()), Form(
"%s spectra", GetName()),
62 axis->GetNbins(), axis->GetXmin(), axis->GetXmax());
63 fCut =
new TH1F(Form(
"c_%s", GetName()),
64 Form(
"%s restricted spectra", GetName()),
65 axis->GetNbins(), axis->GetXmin(), axis->GetXmax());
67 fFull->SetFillColor(kRed);
68 fFull->SetFillStyle(3001);
69 fCut->SetFillColor(kBlue);
70 fCut->SetFillStyle(3001);
80 Double_t l, Double_t h)
85 gPad->SetLogy(
fFull->GetMaximum() > 10);
87 Double_t lx =
fFull->GetXaxis()->GetXmin();
88 Double_t hx =
fFull->GetXaxis()->GetXmax();
89 Double_t rr = (hx-lx);
90 Double_t ll = rr * l + lx;
91 Double_t hh = rr * h + lx;
92 for (Int_t i = 1; i <=
fFull->GetNbinsX(); i++) {
93 if (
fFull->GetBinCenter(i) <= ll ||
94 fFull->GetBinCenter(i) > hh) {
95 fCut->SetBinContent(i, 0);
98 fCut->SetBinContent(i,
fFull->GetBinContent(i));
100 fCut->Draw(Form(
"%s same", option));
115 fHints(kLHintsExpandX|kLHintsExpandY,3, 3, 3, 3),
116 fContainer(&frame, 200, 350),
117 fList(&fContainer, kHorizontalFrame),
121 fkHist1DIcon(gClient->GetPicture(
"h1_t.xpm")),
122 fkHist2DIcon(gClient->GetPicture(
"h2_t.xpm")),
123 fkHist3DIcon(gClient->GetPicture(
"h3_t.xpm")),
124 fkGraphIcon(gClient->GetPicture(
"graph.xpm")),
126 fEntry(*(fList.AddItem(0, GetName(), this)))
135 fList.Connect(
"Clicked(TGListTreeItem*,Int_t)",
136 "AliFMDSpectraDisplay::AliFMDSpectraDisplayTop",
this,
137 "HandleEntry(TGListTreeItem*,Int_t)");
138 fList.Connect(
"KeyPressed(TGListTreeItem*,ULong_t,ULong_t)",
139 "AliFMDSpectraDisplay::AliFMDSpectraDisplayTop",
this,
140 "HandleKey(TGListTreeItem*,UInt_t,UInt_t)");
141 fList.Connect(
"ReturnPressed(TGListTreeItem*)",
142 "AliFMDSpectraDisplay::AliFMDSpectraDisplayTop",
this,
143 "HandleReturn(TGListTreeItem*)");
178 fList.UnselectAll(kFALSE);
179 fList.SetSelected(0);
193 fList.UnselectAll(kFALSE);
194 fList.SetSelected(0);
197 TGListTreeItem* next = 0;
200 next = f->GetPrevSibling();
202 next = f->GetParent();
203 if (next)
fList.CloseItem(next);
207 next = f->GetNextSibling();
208 if (!next && f->GetParent()) {
209 next = f->GetParent()->GetNextSibling();
210 fList.CloseItem(f->GetParent());
214 next = f->GetParent();
215 if (next)
fList.CloseItem(next);
218 next = f->GetFirstChild();
219 if (next)
fList.OpenItem(f);
223 next =
fList.GetSelected();
226 fList.PageDown(kTRUE);
227 next =
fList.GetSelected();
231 if (next && next != f) {
232 fList.ClearHighlighted();
233 fList.SetSelected(next);
236 if (next) gClient->NeedRedraw(&
fList);
246 if (!entry->GetUserData())
return;
262 gClient->NeedRedraw(&
fList);
303 UShort_t sec, UShort_t str,
307 d.
Fill(ring, sec, str, v);
328 fEntry.SetText(GetName());
336 Int_t idx = (
id ==
'I' ||
id ==
'i') ? 0 : 1;
364 std::cout <<
"Comparing detector to a " << o->ClassName() << std::endl;
365 if (o->IsA() == AliFMDSpectraDisplay::AliFMDSpectraDisplayDetector::Class()) {
368 return (
Id() < ro->
Id() ? -1 :
369 Id() == ro->
Id() ? 0 : 1);
383 fEntry.SetText(GetName());
417 std::cout <<
"Comparing ring to a " << o->ClassName() << std::endl;
418 if (o->IsA() == AliFMDSpectraDisplay::AliFMDSpectraDisplayRing::Class()) {
421 return (
Id() < ro->
Id() ? -1 :
422 Id() == ro->
Id() ? 0 : 1);
437 fEntry.SetText(GetName());
470 std::cout <<
"Comparing sector to a " << o->ClassName() << std::endl;
471 if (o->IsA() == AliFMDSpectraDisplay::AliFMDSpectraDisplaySector::Class()) {
474 return (
Id() < ro->
Id() ? -1 :
475 Id() == ro->
Id() ? 0 : 1);
484 s.
Id(), id),
"FMD Strip"),
490 fEntry.SetText(GetName());
506 std::cout <<
"Comparing strip to a " << o->ClassName() << std::endl;
507 if (o->IsA() == AliFMDSpectraDisplay::AliFMDSpectraDisplayStrip::Class()) {
510 return (
Id() < ro->
Id() ? -1 :
511 Id() == ro->
Id() ? 0 : 1);
527 fTop.Connect(
"SelectionChanged()",
528 "AliFMDSpectraDisplay",
this,
"HandleDraw()");
541 if (!user)
return kFALSE;
542 if (!user->InheritsFrom(AliFMDSpectraDisplay::AliFMDSpectraDisplayElement::Class())) {
543 Warning(
"HandleDraw",
"%s does not inherit from Spectra::Element",
633 UShort_t str, Float_t x, Float_t mult)
636 fTop.
Fill(det, rng, sec, str, mult);
Reconstructed FMD points. It contains the pseudo-inclusive multiplicity.
AliFMDSpectraDisplayTop & fParent
AliFMDSpectraDisplayDetector(UShort_t det, AliFMDSpectraDisplayTop &top)
virtual Int_t Compare(const TObject *o) const
UShort_t DetectorId() const
TGListTreeItem & GetEntry() const
AliFMDSpectraDisplayTop fTop
AliFMDSpectraDisplayRing & fParent
virtual Int_t Compare(const TObject *o) const
Manager of FMD parameters.
virtual Bool_t ProcessDigit(AliFMDDigit *digit)
virtual void HandleKey(TGListTreeItem *f, UInt_t keysym, UInt_t mask)
TObject * Current() const
virtual void HandleReturn(TGListTreeItem *f)
UShort_t Detector() const
TGListTreeItem & GetEntry() const
virtual void Show(Option_t *option, Double_t l, Double_t h)
Bool_t ProcessDigit(AliFMDDigit *digit)
virtual Bool_t ProcessRecPoint(AliFMDRecPoint *recpoint)
virtual void MakeHistograms(const TAxis *axis)
AliFMDSpectraDisplayRing & GetOrAdd(Char_t id)
TGListTreeItem & GetEntry() const
virtual Bool_t ProcessHit(AliFMDHit *hit, TParticle *)
virtual void UpdateList()
AliFMDSpectraDisplayDetector & GetOrAdd(UShort_t id)
Pseudo reconstructed charged particle multiplicity.
void Fill(UShort_t sec, UShort_t str, Double_t v)
Bool_t ProcessSDigit(AliFMDSDigit *sdigit)
AliFMDSpectraDisplaySector(UShort_t id, AliFMDSpectraDisplayRing &r)
Bool_t ProcessRawDigit(AliFMDDigit *digit)
TGListTreeItem & GetEntry() const
AliFMDSpectraDisplayTop & GetTop()
void Fill(UShort_t d, Char_t ring, UShort_t sec, UShort_t str, Double_t v)
virtual Int_t Compare(const TObject *o) const
AliFMDSpectraDisplayTop & GetTop()
AliFMDSpectraDisplayStrip & GetOrAdd(UShort_t id)
UShort_t Detector() const
FMD Event display (as patterns)
virtual Bool_t ProcessSDigit(AliFMDSDigit *sdigit)
virtual void UpdateCanvas()
void Fill(Char_t ring, UShort_t sec, UShort_t str, Double_t v)
virtual Int_t Compare(const TObject *o) const
AliFMDSpectraDisplayRing(Char_t id, AliFMDSpectraDisplayDetector &d)
Bool_t ProcessRecPoint(AliFMDRecPoint *recpoint)
void Fill(UShort_t str, Double_t v)
AliFMDSpectraDisplayTop & GetTop()
virtual Bool_t ProcessESD(UShort_t d, Char_t r, UShort_t s, UShort_t t, Float_t eta, Float_t mult)
virtual void HandleEntry(TGListTreeItem *e, Int_t id)
Bool_t ProcessHit(AliFMDHit *hit, TParticle *p)
AliFMDSpectraDisplayStrip(UShort_t id, AliFMDSpectraDisplaySector &s)
virtual void ClearCanvas()
virtual Int_t Compare(const TObject *o) const
AliFMDSpectraDisplaySector & GetOrAdd(UShort_t id)
class for summable digits
AliFMDSpectraDisplayTop(TGCompositeFrame &frame, TCanvas *canvas)
UShort_t DetectorId() const
AliFMDhit is the hit class for the FMD. Hits are the information that comes from a Monte Carlo at eac...
UShort_t Detector() const
virtual Int_t Compare(const TObject *o) const
AliFMDSpectraDisplayTop & GetTop()
Bool_t ProcessESD(UShort_t det, Char_t rng, UShort_t sec, UShort_t str, Float_t x, Float_t mult)
Utility class to visualize FMD data in 2D.
Float_t Particles() const
TGListTreeItem * fCurrentEntry
AliFMDSpectraDisplayDetector & fParent