A lot of changes after detector review:
[u/mrichter/AliRoot.git] / FMD / scripts / SpectraMonitor.C
CommitLineData
2eddac03 1//
2//____________________________________________________________________
3//
4// $Id: DrawHits.C 22496 2007-11-26 13:50:44Z cholm $
5//
6// Script that contains a class to draw hits, using the
7// AliFMDInputHits class in the util library.
8//
9// Use the script `Compile.C' to compile this class using ACLic.
10//
7af3df7f 11
12void
13SpectraMonitor(const char* file="",
14 Int_t runno=0,
15 const char* cdbSrc="local://$ALICE_ROOT",
16 UShort_t over=0)
17{
c6b36280 18 gSystem->Load("libANALYSIS.so");
19 gSystem->Load("libFMDanalysis.so");
7af3df7f 20 gSystem->Load("libFMDutil.so");
21 // AliLog::SetModuleDebugLevel("FMD", 8);
22 TString fname(file);
23 if (fname.CompareTo("help", TString::kIgnoreCase) == 0) {
24 std::cout << "Usage: RunSpectraMonitor(<src>[,<runno>[,<cdb>[,<over>]]])\n"
25 << "\n"
26 << "Where:\n\n"
27 << " <src> Is a data source (online, file)\n"
28 << " <runno> Is the (optional) run number\n"
29 << " <cdb> Is the (optional) CDB storage\n"
30 << " <over> Is the (optional) over sampling rate\n\n"
31 << "Defaults are <runno>=0 and cdb=\"local://$ALICE_ROOT\"\n"
32 << "<over> allows one to override the CDB setting. Default\n"
33 << "is to use the CDB setting.\n\n"
34 << "Note: This script _must_ be compiled with ACLic"
35 << std::endl;
36 return;
37 }
38 AliCDBManager* cdb = AliCDBManager::Instance();
39 cdb->SetDefaultStorage(cdbSrc);
40 cdb->SetRun(runno);
41 UInt_t what = (AliFMDParameters::kPulseGain |
42 AliFMDParameters::kPedestal |
43 AliFMDParameters::kDeadMap |
44 AliFMDParameters::kZeroSuppression|
45 AliFMDParameters::kAltroMap |
46 AliFMDParameters::kStripRange);
47 if (over != 0) what |= AliFMDParameters::kSampleRate;
48 AliFMDParameters::Instance()->Init(kFALSE, what);
49 if (over != 0) AliFMDParameters::Instance()->SetSampleRate(over);
50
51 AliFMDSpectraDisplay* d = new AliFMDSpectraDisplay;
c6b36280 52 // d->AddLoad(AliFMDInput::kRaw);
53 d->AddLoad(AliFMDInput::kDigits);
54 // d->SetRawFile(file);
7af3df7f 55 d->Run();
56}
57
58#if 0
2eddac03 59#include <AliCDBManager.h>
60#include <AliFMDParameters.h>
61#include <AliFMDHit.h>
62#include <AliFMDDigit.h>
63#include <AliFMDSDigit.h>
64#include <AliFMDRecPoint.h>
65#include <AliESDFMD.h>
66#include <AliFMDPattern.h>
67#include <TBrowser.h>
68#include <TDirectory.h>
69#include <TObjArray.h>
70#include <TH1.h>
71#include <TH2.h>
72#include <TH3.h>
73#include <TGraph.h>
74#include <TF1.h>
75#include <iostream>
76#include <TStyle.h>
77#include <TEnv.h>
78#include <TCanvas.h>
79#include <TGFrame.h>
80#include <TGCanvas.h>
81#include <TGListTree.h>
82#include <TGClient.h>
83#include <TSystem.h>
84#include <KeySymbols.h>
85#include <TClass.h>
86#include <RQ_OBJECT.h>
87#include <TSlider.h>
88
89namespace Spectra {
90 struct Top;
91 struct Detector;
92 struct Ring;
93 struct Sector;
94 struct Strip;
95
96 //__________________________________________________________________
97 struct Element : public TNamed
98 {
99 virtual ~Element() {}
100 virtual void Draw(Option_t* option, Double_t l, Double_t h);
101 virtual Top& GetTop() = 0;
102 virtual void MakeHistograms(TAxis* axis);
103 protected:
104 Element(const char* name, const char* title)
105 : TNamed(name, title), fFull(0), fCut(0)
106 {}
107 void DoFill(Double_t v);
108 TH1* fFull;
109 TH1* fCut;
110 };
111
112 //__________________________________________________________________
113 struct Top : public Element
114 {
115 RQ_OBJECT("Spectra::Top")
116 public:
117 Top(TGCompositeFrame& frame, TCanvas* canvas);
118 TGListTree& GetList() { return fList; }
119 Detector& GetOrAdd(UShort_t id);
120 void Fill(UShort_t d, Char_t ring,
121 UShort_t sec, UShort_t str, Double_t v);
122 TAxis* GetAxis() { return fAxis; }
123 void SetAxis(TAxis* a);
124 Top& GetTop() { return *this; }
125
126 /** Handle entries
127 @param e selected entry, if any
128 @param id Id of entry */
129 virtual void HandleEntry(TGListTreeItem* e, Int_t id);
130 /** Handle key strokes
131 @param f Item selected, if any
132 @param keysym Key symbol
133 @param mask Modifier mask */
134 virtual void HandleKey(TGListTreeItem* f, UInt_t keysym, UInt_t mask);
135 /** Handle Return
136 @param f Selected item, if any */
137 virtual void HandleReturn(TGListTreeItem* f);
138 /** Clear the list */
139 virtual void ClearList();
140 /** Clear the canvas */
141 virtual void ClearCanvas();
142 /** Update canvas */
143 virtual void UpdateCanvas();
144 /** Update canvas */
145 virtual void UpdateList();
146 /** Return the currently selected entry */
147 TGListTreeItem* CurrentEntry() const { return fCurrentEntry; }
148 /** @return the currently selected user data (possibly 0) */
149 TObject* Current() const;
150 /** Selection changed signal */
151 void SelectionChanged() { Emit("SelectionChanged()"); }//*SIGNAL*
152 /** Get Picture for 1D histogram */
153 const TGPicture* GetH1Pic() { return fHist1DIcon; }
154 /** 2D Histogram Icon */
155 const TGPicture* GetH2Pic() { return fHist2DIcon; }
156 /** 3D Histogram Icon */
157 const TGPicture* GetH3Pic() { return fHist3DIcon; }
158 /** Graph Icon */
159 const TGPicture* GetGPic() { return fGraphIcon; }
160 TGListTreeItem& GetEntry() { return fEntry; }
161 protected:
162 TGLayoutHints fHints;
163 TGCanvas fContainer;
164 TGListTree fList;
165 TObjArray fChildren;
166 TGListTreeItem* fCurrentEntry;
167 TCanvas* fCanvas;
168 /** 1D Histogram Icon */
169 const TGPicture* fHist1DIcon;
170 /** 2D Histogram Icon */
171 const TGPicture* fHist2DIcon;
172 /** 3D Histogram Icon */
173 const TGPicture* fHist3DIcon;
174 /** Graph Icon */
175 const TGPicture* fGraphIcon;
176 /** The axis to use */
177 TAxis* fAxis;
178 /** Top entry */
179 TGListTreeItem& fEntry;
180 };
181
182 //__________________________________________________________________
183 struct Detector : public Element
184 {
185 Detector(UShort_t det, Top& top);
186 UShort_t Id() const { return fId; }
187 Top& GetTop() { return fParent; }
188 Top& GetParent() { return fParent; }
189 Ring& GetOrAdd(Char_t id);
190 void Fill(Char_t ring, UShort_t sec, UShort_t str, Double_t v);
191 TGListTreeItem& GetEntry() { return fEntry; }
192 protected:
193 UShort_t fId;
194 Top& fParent;
195 TObjArray fChildren;
196 TGListTreeItem& fEntry;
197 };
198
199 //__________________________________________________________________
200 struct Ring : public Element
201 {
202 Ring(Char_t id, Detector& d);
203 Char_t Id() const { return fId; }
204 UShort_t DetectorId() { return fParent.Id(); }
205 Top& GetTop() { return fParent.GetTop(); }
206 Detector& GetDetector() { return GetParent(); }
207 Detector& GetParent() { return fParent; }
208 Sector& GetOrAdd(UShort_t id);
209 void Fill(UShort_t sec, UShort_t str, Double_t v);
210 TGListTreeItem& GetEntry() { return fEntry; }
211 protected:
212 Detector& fParent;
213 Char_t fId;
214 TObjArray fChildren;
215 TGListTreeItem& fEntry;
216 };
217
218 //__________________________________________________________________
219 struct Sector : public Element
220 {
221 Sector(UShort_t id, Ring& r);
222 UShort_t Id() const { return fId; }
223 UShort_t DetectorId() { return fParent.DetectorId(); }
224 Char_t RingId() { return fParent.Id(); }
225 Top& GetTop() { return fParent.GetTop(); }
226 Detector& GetDetector() { return fParent.GetDetector(); }
227 Ring& GetRing() { return fParent; }
228 Ring& GetParent() { return fParent; }
229 Strip& GetOrAdd(UShort_t id);
230 void Fill(UShort_t str, Double_t v);
231 TGListTreeItem& GetEntry() { return fEntry; }
232 protected:
233 Ring& fParent;
234 UShort_t fId;
235 TObjArray fChildren;
236 TGListTreeItem& fEntry;
237 };
238
239 //__________________________________________________________________
240 struct Strip : public Element
241 {
242 Strip(UShort_t id, Sector& s);
243 UShort_t Id() const { return fId; }
244 UShort_t DetectorId() { return fParent.DetectorId(); }
245 Char_t RingId() { return fParent.RingId(); }
246 UShort_t SectorId() { return fParent.Id(); }
247 Top& GetTop() { return fParent.GetTop(); }
248 Detector& GetDetector() { return fParent.GetDetector(); }
249 Ring& GetRing() { return fParent.GetRing(); }
250 Sector& GetSector() { return fParent; }
251 Sector& GetParent() { return fParent; }
252 void Fill(Double_t v);
253 TGListTreeItem& GetEntry() { return fEntry; }
254 protected:
255 Sector& fParent;
256 UShort_t fId;
257 TGListTreeItem& fEntry;
258 };
259
260 //==================================================================
261 void Element::MakeHistograms(TAxis* axis)
262 {
263 if (fFull) return;
264 if (axis->IsVariableBinSize()) {
265 fFull = new TH1F(Form("f_%s", GetName()), Form("%s spectra", GetName()),
266 axis->GetXbins()->fN, axis->GetXbins()->fArray);
267 fCut = new TH1F(Form("c_%s", GetName()),
268 Form("%s restricted spectra", GetName()),
269 axis->GetXbins()->fN, axis->GetXbins()->fArray);
270 }
271 else {
272 fFull = new TH1F(Form("f_%s", GetName()), Form("%s spectra", GetName()),
273 axis->GetNbins(), axis->GetXmin(), axis->GetXmax());
274 fCut = new TH1F(Form("c_%s", GetName()),
275 Form("%s restricted spectra", GetName()),
276 axis->GetNbins(), axis->GetXmin(), axis->GetXmax());
277 }
278 fFull->SetFillColor(kRed);
279 fFull->SetFillStyle(3001);
280 fCut->SetFillColor(kBlue);
281 fCut->SetFillStyle(3001);
282 }
283 //__________________________________________________________________
284 void Element::DoFill(Double_t v)
285 {
286 if (fFull) fFull->Fill(v);
287 }
288 //__________________________________________________________________
289 void Element::Draw(Option_t* option, Double_t l, Double_t h)
290 {
291 if (!fFull) return;
292 if (fFull->GetMinimum() < 0) gPad->SetLogy(kFALSE);
293 fFull->Draw(option);
294 Double_t lx = fFull->GetXaxis()->GetXmin();
295 Double_t hx = fFull->GetXaxis()->GetXmax();
296 Double_t rr = (hx-lx);
297 Double_t ll = rr * l + lx;
298 Double_t hh = rr * h + lx;
299 for (Int_t i = 1; i <= fFull->GetNbinsX(); i++) {
300 if (fFull->GetBinCenter(i) <= ll ||
301 fFull->GetBinCenter(i) > hh) {
302 fCut->SetBinContent(i, 0);
303 continue;
304 }
305 fCut->SetBinContent(i, fFull->GetBinContent(i));
306 }
307 fCut->Draw(Form("%s same", option));
308 }
309 //==================================================================
310 Top::Top(TGCompositeFrame& frame, TCanvas* canvas)
311 : Element("All", "Everything"),
312 fHints(kLHintsExpandX|kLHintsExpandY,3, 3, 3, 3),
313 fContainer(&frame, 200, 350),
314 fList(&fContainer, kHorizontalFrame),
315 fChildren(0),
316 fCurrentEntry(0),
317 fCanvas(canvas),
318 fHist1DIcon(gClient->GetPicture("h1_t.xpm")),
319 fHist2DIcon(gClient->GetPicture("h2_t.xpm")),
320 fHist3DIcon(gClient->GetPicture("h3_t.xpm")),
321 fGraphIcon(gClient->GetPicture("graph.xpm")),
322 fEntry(*(fList.AddItem(0, GetName(), this)))
323 {
324 fContainer.AddFrame(&fList, &fHints);
325 frame.AddFrame(&fContainer, &fHints);
326
327 fList.Connect("Clicked(TGListTreeItem*,Int_t)", "Spectra::Top", this,
328 "HandleEntry(TGListTreeItem*,Int_t)");
329 fList.Connect("KeyPressed(TGListTreeItem*,ULong_t,ULong_t)",
330 "Spectra::Top", this,
331 "HandleKey(TGListTreeItem*,UInt_t,UInt_t)");
332 fList.Connect("ReturnPressed(TGListTreeItem*)", "Spectra::Top", this,
333 "HandleReturn(TGListTreeItem*)");
334 }
335 //____________________________________________________________________
336 void
337 Top::SetAxis(TAxis* axis)
338 {
339 fAxis = axis;
340 MakeHistograms(axis);
341 }
342 //____________________________________________________________________
343 void
344 Top::ClearCanvas()
345 {
346 if (!fCanvas) return;
347 fCanvas->Clear();
348 }
349
350 //____________________________________________________________________
351 void
352 Top::ClearList()
353 {
354 fList.DeleteItem(fList.GetFirstItem());
355 UpdateList();
356 }
357
358
359 //____________________________________________________________________
360 void
361 Top::HandleReturn(TGListTreeItem * f)
362 {
363
364 if (!f) {
365 fList.UnselectAll(kFALSE);
366 fList.SetSelected(0);
367 return;
368 }
369 fList.ToggleItem(f);
370 UpdateList();
371 }
372
373
374 //____________________________________________________________________
375 void
376 Top::HandleKey(TGListTreeItem * f, UInt_t keysym, UInt_t /*mask*/)
377 {
378 if (!f) {
379 fList.UnselectAll(kFALSE);
380 fList.SetSelected(0);
381 return;
382 }
383 TGListTreeItem* next = 0;
384 switch (keysym) {
385 case kKey_Up:
386 next = f->GetPrevSibling();
387 if (!next) {
388 next = f->GetParent();
389 if (next) fList.CloseItem(next);
390 }
391 break;
392 case kKey_Down:
393 next = f->GetNextSibling();
394 if (!next && f->GetParent()) {
395 next = f->GetParent()->GetNextSibling();
396 fList.CloseItem(f->GetParent());
397 }
398 break;
399 case kKey_Left:
400 next = f->GetParent();
401 if (next) fList.CloseItem(next);
402 break;
403 case kKey_Right:
404 next = f->GetFirstChild();
405 if (next) fList.OpenItem(f);
406 break;
407 case kKey_PageUp:
408 fList.PageUp(kTRUE);
409 next = fList.GetSelected();
410 break;
411 case kKey_PageDown:
412 fList.PageDown(kTRUE);
413 next = fList.GetSelected();
414 break;
415 }
416 if (next) gClient->NeedRedraw(&fList);
417 if (next && next != f) {
418 fList.ClearHighlighted();
419 fList.SetSelected(next);
420 HandleEntry(next,0);
421 }
422 }
423
424 //____________________________________________________________________
425 void
426 Top::HandleEntry(TGListTreeItem* entry, Int_t /*id*/)
427 {
428 TGListTreeItem* old = fCurrentEntry;
429 if (entry) {
430 if (!entry->GetUserData()) return;
431 fCurrentEntry = entry;
432 }
433 else {
434 fCurrentEntry = 0;
435 ClearCanvas();
436 }
437 if (old != fCurrentEntry && fCanvas) fCanvas->cd();
438 SelectionChanged();
439 }
440
441 //____________________________________________________________________
442 void
443 Top::UpdateList()
444 {
445 gClient->NeedRedraw(&fList);
446 }
447
448 //____________________________________________________________________
449 void
450 Top::UpdateCanvas()
451 {
452 if (!fCanvas) return;
453 fCanvas->Modified();
454 fCanvas->Update();
455 fCanvas->cd();
456 }
457 //____________________________________________________________________
458 TObject* Top::Current() const
459 {
460 if (!fCurrentEntry) return 0;
461 if (!fCurrentEntry->GetUserData()) return 0;
462 return static_cast<TObject*>(fCurrentEntry->GetUserData());
463 }
464
465 //__________________________________________________________________
466 Detector& Top::GetOrAdd(UShort_t id)
467 {
468 Int_t idx = id - 1;
469 Detector* d = 0;
470 if (fChildren.GetEntriesFast() <= idx ||
471 !(d = static_cast<Detector*>(fChildren.At(idx)))) {
472 d = new Detector(id, *this);
473 fChildren.AddAtAndExpand(d, idx);
474 // fList.SortChildren(&fEntry);
475 }
476 return *d;
477 }
478 //__________________________________________________________________
479 void Top::Fill(UShort_t det, Char_t ring,
480 UShort_t sec, UShort_t str, Double_t v)
481 {
482 Detector& d = GetOrAdd(det);
483 d.Fill(ring, sec, str, v);
484 DoFill(v);
485 }
486 //==================================================================
487 Detector::Detector(UShort_t det, Top& tree)
488 : Element(Form("FMD%d", det), "FMD Sub-detector"),
489 fId(det),
490 fParent(tree),
491 fChildren(0),
492 fEntry(*(tree.GetList().AddItem(&(tree.GetEntry()), GetName())))
493 {
494 fEntry.SetUserData(this);
495 if (GetTop().GetAxis()) MakeHistograms(GetTop().GetAxis());
496 }
497 //__________________________________________________________________
498 Ring& Detector::GetOrAdd(Char_t id)
499 {
500 Int_t idx = (id == 'I' || id == 'i') ? 0 : 1;
501 Ring* r = 0;;
502 if (fChildren.GetEntriesFast() <= idx ||
503 !(r = static_cast<Ring*>(fChildren.At(idx)))) {
504 r = new Ring(id, *this);
505 fChildren.AddAtAndExpand(r, idx);
506 // GetTop().GetList().SortChildren(&fEntry);
507 }
508 return *r;
509 }
510 //__________________________________________________________________
511 void Detector::Fill(Char_t ring, UShort_t sec, UShort_t str, Double_t v)
512 {
513 Ring& r = GetOrAdd(ring);
514 r.Fill(sec, str, v);
515 DoFill(v);
516 }
517 //==================================================================
518 Ring::Ring(Char_t id, Detector& d)
519 : Element(Form("FMD%d%c", d.Id(), id), "FMD Ring"),
520 fParent(d),
521 fId(id),
522 fChildren(0),
523 fEntry(*(GetTop().GetList().AddItem(&(d.GetEntry()), GetName(), this)))
524 {
525 if (GetTop().GetAxis()) MakeHistograms(GetTop().GetAxis());
526 }
527 //__________________________________________________________________
528 Sector& Ring::GetOrAdd(UShort_t id)
529 {
530 Sector* s = 0;
531 if (fChildren.GetEntriesFast() <= id ||
532 !(s = static_cast<Sector*>(fChildren.At(id)))) {
533 s = new Sector(id, *this);
534 fChildren.AddAtAndExpand(s, id);
535 // GetTop().GetList().SortChildren(&fEntry);
536 }
537 return *s;
538 }
539 //__________________________________________________________________
540 void Ring::Fill(UShort_t sec, UShort_t str, Double_t v)
541 {
542 Sector& s = GetOrAdd(sec);
543 s.Fill(str, v);
544 DoFill(v);
545 }
546 //==================================================================
547 Sector::Sector(UShort_t id, Ring& r)
548 : Element(Form("FMD%d%c_%02d", r.DetectorId(), r.Id(), id), "FMD Sector"),
549 fParent(r),
550 fId(id),
551 fChildren(0),
552 fEntry(*(GetTop().GetList().AddItem(&(r.GetEntry()), GetName(), this)))
553 {
554 if (GetTop().GetAxis()) MakeHistograms(GetTop().GetAxis());
555 }
556 //__________________________________________________________________
557 Strip& Sector::GetOrAdd(UShort_t id)
558 {
559 Strip* s = 0;
560 if (fChildren.GetEntriesFast() <= id ||
561 !(s = static_cast<Strip*>(fChildren.At(id)))) {
562 s = new Strip(id, *this);
563 fChildren.AddAtAndExpand(s, id);
564 // GetTop().GetList().SortChildren(&fEntry);
565 }
566 return *s;
567 }
568 //__________________________________________________________________
569 void Sector::Fill(UShort_t str, Double_t v)
570 {
571 Strip& s = GetOrAdd(str);
572 s.Fill(v);
573 DoFill(v);
574 }
575 //==================================================================
576 Strip::Strip(UShort_t id, Sector& s)
577 : Element(Form("FMD%d%c_%02d_%03d", s.DetectorId(), s.RingId(),
578 s.Id(), id), "FMD Strip"),
579 fParent(s),
580 fId(id),
581 fEntry(*(GetTop().GetList().AddItem(&(s.GetEntry()), GetName(), this)))
582 {
583 fEntry.SetPictures(GetTop().GetH1Pic(), GetTop().GetH1Pic());
584 if (GetTop().GetAxis()) MakeHistograms(GetTop().GetAxis());
585 }
586 //__________________________________________________________________
587 void Strip::Fill(Double_t v)
588 {
589 DoFill(v);
590 }
591}
592
593
594//====================================================================
595class SpectraMonitor : public AliFMDPattern
596{
597private:
598 TGMainFrame fSelector;
599 Spectra::Top fTop;
600public:
601 SpectraMonitor()
602 : AliFMDPattern(),
603 fSelector(gClient->GetRoot(), 100, 100),
604 fTop(fSelector, fAux)
605 {
606 AddLoad(AliFMDInput::kRaw);
607 SetName("RAW");
608 SetTitle("RAW");
609
610 fTop.Connect("SelectionChanged()", "SpectraMonitor", this, "HandleDraw()");
611
612 fSelector.MapSubwindows();
613 fSelector.Resize(fSelector.GetDefaultSize());
614 fSelector.MapWindow();
615 }
616 // void SetAxis(TAxis* axis) { fTop.SetAxis(axis); }
617 Bool_t HandleDraw()
618 {
619 TObject* user = fTop.Current();
620 if (!user) return kFALSE;
621 if (!user->InheritsFrom(Spectra::Element::Class())) {
622 Warning("HandleDraw", "%s does not inherit from Spectra::Element",
623 user->GetName());
624 return kFALSE;
625 }
626 fAux->cd();
627 Spectra::Element* e = static_cast<Spectra::Element*>(user);
628 e->Draw("hist", fSlider->GetMinimum(), fSlider->GetMaximum());
629 fAux->Modified();
630 fAux->Update();
631 fAux->cd();
632 return kTRUE;
633 }
634 void MakeAux()
635 {
636 AliFMDPattern::MakeAux();
637 if (!fAux) return;
638 fTop.SetAxis(fSpec->GetXaxis());
639 }
640 void DrawAux()
641 {
642 // Draw in the Aux the canvas
643 // For example draw the spectra
644 // or such stuff
645 if (fTop.Current() != &fTop && HandleDraw()) return;
646 AliFMDPattern::DrawAux();
647 }
648 Bool_t ProcessHit(AliFMDHit* hit, TParticle* p)
649 {
650 fTop.Fill(hit->Detector(),
651 hit->Ring(),
652 hit->Sector(),
653 hit->Strip(),
654 hit->Edep());
655 return AliFMDPattern::ProcessHit(hit, p);
656 }
657 Bool_t ProcessDigit(AliFMDDigit* digit)
658 {
659 fTop.Fill(digit->Detector(),
660 digit->Ring(),
661 digit->Sector(),
662 digit->Strip(),
663 digit->Counts());
664 return AliFMDDisplay::ProcessDigit(digit);
665 }
666 Bool_t ProcessSDigit(AliFMDSDigit* sdigit)
667 {
668 fTop.Fill(sdigit->Detector(),
669 sdigit->Ring(),
670 sdigit->Sector(),
671 sdigit->Strip(),
672 sdigit->Counts());
673 return AliFMDDisplay::ProcessSDigit(sdigit);
674 }
675 Bool_t ProcessRawDigit(AliFMDDigit* digit)
676 {
677 return ProcessDigit(digit);
678 }
679 Bool_t ProcessRecPoint(AliFMDRecPoint* recpoint)
680 {
681 fTop.Fill(recpoint->Detector(),
682 recpoint->Ring(),
683 recpoint->Sector(),
684 recpoint->Strip(),
685 recpoint->Particles());
686 return AliFMDDisplay::ProcessRecPoint(recpoint);
687 }
688 Bool_t ProcessESD(UShort_t det, Char_t rng, UShort_t sec, UShort_t str,
689 Float_t x, Float_t mult)
690 {
691 fTop.Fill(det, rng, sec, str, mult);
692 return AliFMDDisplay::ProcessESD(det, rng, sec, str, x, mult);
693 }
694};
695
696void
22ccadbc 697RunSpectraMonitor(const char* file="",
698 Int_t runno=0,
699 const char* cdbSrc="local://$ALICE_ROOT",
700 UShort_t over=0)
2eddac03 701{
702 // AliLog::SetModuleDebugLevel("FMD", 8);
22ccadbc 703 TString fname(file);
704 if (fname.CompareTo("help", TString::kIgnoreCase) == 0) {
705 std::cout << "Usage: RunSpectraMonitor(<src>[,<runno>[,<cdb>[,<over>]]])\n"
706 << "\n"
707 << "Where:\n\n"
708 << " <src> Is a data source (online, file)\n"
709 << " <runno> Is the (optional) run number\n"
710 << " <cdb> Is the (optional) CDB storage\n"
711 << " <over> Is the (optional) over sampling rate\n\n"
712 << "Defaults are <runno>=0 and cdb=\"local://$ALICE_ROOT\"\n"
713 << "<over> allows one to override the CDB setting. Default\n"
714 << "is to use the CDB setting.\n\n"
715 << "Note: This script _must_ be compiled with ACLic"
716 << std::endl;
717 return;
718 }
2eddac03 719 AliCDBManager* cdb = AliCDBManager::Instance();
22ccadbc 720 cdb->SetDefaultStorage(cdbSrc);
721 cdb->SetRun(runno);
2eddac03 722 UInt_t what = (AliFMDParameters::kPulseGain |
723 AliFMDParameters::kPedestal |
724 AliFMDParameters::kDeadMap |
725 AliFMDParameters::kZeroSuppression|
726 AliFMDParameters::kAltroMap |
727 AliFMDParameters::kStripRange);
728 if (over != 0) what |= AliFMDParameters::kSampleRate;
729 AliFMDParameters::Instance()->Init(kFALSE, what);
730 if (over != 0) AliFMDParameters::Instance()->SetSampleRate(over);
731
732 SpectraMonitor* d = new SpectraMonitor;
733 d->AddLoad(AliFMDInput::kRaw);
734 d->SetRawFile(file);
735 d->Run();
736}
7af3df7f 737#endif
2eddac03 738
739
740
741//____________________________________________________________________
742//
743// EOF
744//