ROOT logo
// 
//____________________________________________________________________
//
// $Id: DrawHits.C 22496 2007-11-26 13:50:44Z cholm $
//
// Script that contains a class to draw hits, using the
// AliFMDInputHits class in the util library. 
//
// Use the script `Compile.C' to compile this class using ACLic. 
//

void
SpectraMonitor(const char* file="", 
	       Int_t       runno=0, 
	       const char* cdbSrc="local://$ALICE_ROOT/OCDB", 
	       UShort_t    over=0)
{
  // gSystem->Load("libANALYSIS.so");
  // gSystem->Load("libFMDanalysis.so");
  gSystem->Load("libFMDutil.so");
  // AliLog::SetModuleDebugLevel("FMD", 8);
  TString fname(file);
  if (fname.CompareTo("help", TString::kIgnoreCase) == 0) { 
    std::cout << "Usage: RunSpectraMonitor(<src>[,<runno>[,<cdb>[,<over>]]])\n"
	      << "\n"
	      << "Where:\n\n"
	      << "   <src>         Is a data source (online, file)\n"
	      << "   <runno>       Is the (optional) run number\n"
	      << "   <cdb>         Is the (optional) CDB storage\n"
	      << "   <over>        Is the (optional) over sampling rate\n\n"
	      << "Defaults are <runno>=0 and cdb=\"local://$ALICE_ROOT/OCDB\"\n" 
	      << "<over> allows one to override the CDB setting.  Default\n"
	      << "is to use the CDB setting.\n\n"
	      << "Note: This script _must_ be compiled with ACLic"
	      << std::endl;
    return;
  }
  AliCDBManager* cdb = AliCDBManager::Instance();
  cdb->SetDefaultStorage(cdbSrc);
  cdb->SetRun(runno);
  UInt_t what = (AliFMDParameters::kPulseGain      |
		 AliFMDParameters::kPedestal       |
		 AliFMDParameters::kDeadMap        |
		 AliFMDParameters::kZeroSuppression|
		 AliFMDParameters::kAltroMap       |
		 AliFMDParameters::kStripRange);
  if (over != 0) what |= AliFMDParameters::kSampleRate;
  AliFMDParameters::Instance()->Init(kFALSE, what);
  if (over != 0) AliFMDParameters::Instance()->SetSampleRate(over);
  
  AliFMDSpectraDisplay* d = new AliFMDSpectraDisplay;
  d->AddLoad(AliFMDInput::kRaw);
  // d->AddLoad(AliFMDInput::kDigits);
  d->SetRawFile(file);
  d->Run();
}

#if 0
#include <AliCDBManager.h>
#include <AliFMDParameters.h>
#include <AliFMDHit.h>
#include <AliFMDDigit.h>
#include <AliFMDSDigit.h>
#include <AliFMDRecPoint.h>
#include <AliESDFMD.h>
#include <AliFMDPattern.h>
#include <TBrowser.h>
#include <TDirectory.h>
#include <TObjArray.h>
#include <TH1.h>
#include <TH2.h>
#include <TH3.h>
#include <TGraph.h>
#include <TF1.h>
#include <iostream>
#include <TStyle.h>
#include <TEnv.h>
#include <TCanvas.h>
#include <TGFrame.h>
#include <TGCanvas.h>
#include <TGListTree.h>
#include <TGClient.h>
#include <TSystem.h>
#include <KeySymbols.h>
#include <TClass.h>
#include <RQ_OBJECT.h>
#include <TSlider.h>

namespace Spectra { 
  struct Top;
  struct Detector;
  struct Ring;
  struct Sector;
  struct Strip;
  
  //__________________________________________________________________
  struct Element : public TNamed 
  {
    virtual ~Element() {}
    virtual void Draw(Option_t* option, Double_t l, Double_t h);
    virtual Top& GetTop() = 0;
    virtual void MakeHistograms(TAxis* axis);
  protected:
    Element(const char* name, const char* title) 
      : TNamed(name, title), fFull(0), fCut(0)
    {}
    void DoFill(Double_t v);
    TH1* fFull;
    TH1* fCut;
  };

  //__________________________________________________________________
  struct Top : public Element
  {
    RQ_OBJECT("Spectra::Top")
    public:
    Top(TGCompositeFrame& frame, TCanvas* canvas);
    TGListTree& GetList() { return fList; }
    Detector& GetOrAdd(UShort_t id);
    void      Fill(UShort_t d, Char_t ring, 
		   UShort_t sec, UShort_t str, Double_t v);
    TAxis* GetAxis() { return fAxis; }
    void SetAxis(TAxis* a);
    Top&   GetTop() { return *this; }
       
    /** Handle entries 
	@param e  selected entry, if any 
	@param id Id of entry */
    virtual void HandleEntry(TGListTreeItem* e, Int_t id);
    /** Handle key strokes 
	@param f      Item selected, if any 
	@param keysym Key symbol 
	@param mask   Modifier mask */
    virtual void HandleKey(TGListTreeItem* f, UInt_t keysym, UInt_t mask);
    /** Handle Return 
	@param f Selected item, if any */
    virtual void HandleReturn(TGListTreeItem* f);
    /** Clear the list */
    virtual void ClearList();
    /** Clear the canvas */ 
    virtual void ClearCanvas();
    /** Update canvas */ 
    virtual void UpdateCanvas();
    /** Update canvas */ 
    virtual void UpdateList();
    /** Return the currently selected entry */ 
    TGListTreeItem* CurrentEntry() const { return fCurrentEntry; }
    /** @return the currently selected user data (possibly 0) */
    TObject* Current() const;
    /** Selection changed signal */
    void SelectionChanged() { Emit("SelectionChanged()"); }//*SIGNAL*
    /** Get Picture for 1D histogram */
    const TGPicture* GetH1Pic() { return fHist1DIcon; }
    /** 2D Histogram Icon */
    const TGPicture* GetH2Pic() { return fHist2DIcon; }
    /** 3D Histogram Icon */
    const TGPicture* GetH3Pic() { return fHist3DIcon; }
    /** Graph Icon */
    const TGPicture* GetGPic() { return fGraphIcon; }
    TGListTreeItem&  GetEntry() { return fEntry; }
  protected:
    TGLayoutHints fHints;
    TGCanvas      fContainer;
    TGListTree    fList;
    TObjArray     fChildren;
    TGListTreeItem* fCurrentEntry;
    TCanvas*        fCanvas;
    /** 1D Histogram Icon */
    const TGPicture*    fHist1DIcon;
    /** 2D Histogram Icon */
    const TGPicture*    fHist2DIcon;
    /** 3D Histogram Icon */
    const TGPicture*    fHist3DIcon;
    /** Graph Icon */
    const TGPicture*    fGraphIcon;
    /** The axis to use */ 
    TAxis* fAxis;
    /** Top entry */ 
    TGListTreeItem& fEntry;
  };

  //__________________________________________________________________
  struct Detector : public Element 
  {
    Detector(UShort_t det, Top& top);
    UShort_t Id() const { return fId; }
    Top&     GetTop() { return fParent; }
    Top&     GetParent() { return fParent; }
    Ring&    GetOrAdd(Char_t id);
    void     Fill(Char_t ring, UShort_t sec, UShort_t str, Double_t v);
    TGListTreeItem&  GetEntry() { return fEntry; }
  protected:
    UShort_t        fId;
    Top&            fParent;
    TObjArray       fChildren;
    TGListTreeItem& fEntry;
  };

  //__________________________________________________________________
  struct Ring : public Element 
  {
    Ring(Char_t id, Detector& d);
    Char_t    Id() const { return fId; }
    UShort_t  DetectorId() { return fParent.Id(); }
    Top&      GetTop() { return fParent.GetTop(); }
    Detector& GetDetector() { return GetParent(); }
    Detector& GetParent() { return fParent; }
    Sector&   GetOrAdd(UShort_t id);
    void      Fill(UShort_t sec, UShort_t str, Double_t v);
    TGListTreeItem&  GetEntry() { return fEntry; }
  protected:
    Detector&       fParent;
    Char_t          fId;
    TObjArray       fChildren;
    TGListTreeItem& fEntry;
  };
  
  //__________________________________________________________________
  struct Sector : public Element 
  {
    Sector(UShort_t id, Ring& r);
    UShort_t  Id() const    { return fId; }
    UShort_t  DetectorId()  { return fParent.DetectorId(); }
    Char_t    RingId()      { return fParent.Id(); }
    Top&      GetTop()      { return fParent.GetTop(); }
    Detector& GetDetector() { return fParent.GetDetector(); }
    Ring&     GetRing()     { return fParent; }
    Ring&     GetParent()   { return fParent; }
    Strip&    GetOrAdd(UShort_t id);
    void      Fill(UShort_t str, Double_t v);
    TGListTreeItem&  GetEntry() { return fEntry; }
  protected:
    Ring&           fParent;
    UShort_t        fId;
    TObjArray       fChildren;
    TGListTreeItem& fEntry;
  };

  //__________________________________________________________________
  struct Strip : public Element 
  {
    Strip(UShort_t id, Sector& s);
    UShort_t  Id() const    { return fId; }
    UShort_t  DetectorId()  { return fParent.DetectorId(); }
    Char_t    RingId()      { return fParent.RingId(); }
    UShort_t  SectorId()    { return fParent.Id(); }
    Top&      GetTop()      { return fParent.GetTop(); }
    Detector& GetDetector() { return fParent.GetDetector(); }
    Ring&     GetRing()     { return fParent.GetRing(); }
    Sector&   GetSector()   { return fParent; }
    Sector&   GetParent()   { return fParent; }
    void      Fill(Double_t v);
    TGListTreeItem&  GetEntry() { return fEntry; }
  protected:
    Sector&         fParent;
    UShort_t        fId;
    TGListTreeItem& fEntry;
  };

  //==================================================================
  void Element::MakeHistograms(TAxis* axis) 
  {
    if (fFull) return;
    if (axis->IsVariableBinSize()) {
      fFull = new TH1F(Form("f_%s", GetName()), Form("%s spectra", GetName()),
		       axis->GetXbins()->fN, axis->GetXbins()->fArray);
      fCut = new TH1F(Form("c_%s", GetName()), 
		      Form("%s restricted spectra", GetName()),
		      axis->GetXbins()->fN, axis->GetXbins()->fArray);
    }
    else { 
      fFull = new TH1F(Form("f_%s", GetName()), Form("%s spectra", GetName()),
		       axis->GetNbins(), axis->GetXmin(), axis->GetXmax());
      fCut = new TH1F(Form("c_%s", GetName()), 
		      Form("%s restricted spectra", GetName()),
		      axis->GetNbins(), axis->GetXmin(), axis->GetXmax());
    }
    fFull->SetFillColor(kRed);
    fFull->SetFillStyle(3001);
    fCut->SetFillColor(kBlue);
    fCut->SetFillStyle(3001);
  }
  //__________________________________________________________________
  void Element::DoFill(Double_t v) 
  {
    if (fFull) fFull->Fill(v);
  }
  //__________________________________________________________________
  void Element::Draw(Option_t* option, Double_t l, Double_t h) 
  {
    if (!fFull) return;
    if (fFull->GetMinimum() < 0) gPad->SetLogy(kFALSE);
    fFull->Draw(option);
    Double_t lx = fFull->GetXaxis()->GetXmin();
    Double_t hx = fFull->GetXaxis()->GetXmax();
    Double_t rr = (hx-lx);
    Double_t ll = rr * l + lx;
    Double_t hh = rr * h + lx;
    for (Int_t i = 1; i <= fFull->GetNbinsX(); i++) { 
      if (fFull->GetBinCenter(i) <= ll || 
	  fFull->GetBinCenter(i) >  hh) { 
	fCut->SetBinContent(i, 0); 
	continue;
      }
      fCut->SetBinContent(i, fFull->GetBinContent(i));
    }
    fCut->Draw(Form("%s same", option));
  }
  //==================================================================
  Top::Top(TGCompositeFrame& frame, TCanvas* canvas) 
    : Element("All", "Everything"), 
      fHints(kLHintsExpandX|kLHintsExpandY,3, 3, 3, 3),
      fContainer(&frame, 200, 350), 
      fList(&fContainer, kHorizontalFrame),
      fChildren(0),
      fCurrentEntry(0),
      fCanvas(canvas),
      fHist1DIcon(gClient->GetPicture("h1_t.xpm")),
      fHist2DIcon(gClient->GetPicture("h2_t.xpm")),
      fHist3DIcon(gClient->GetPicture("h3_t.xpm")),
      fGraphIcon(gClient->GetPicture("graph.xpm")), 
      fEntry(*(fList.AddItem(0, GetName(), this)))
  {
    fContainer.AddFrame(&fList, &fHints);
    frame.AddFrame(&fContainer, &fHints);

    fList.Connect("Clicked(TGListTreeItem*,Int_t)", "Spectra::Top", this, 
		  "HandleEntry(TGListTreeItem*,Int_t)");
    fList.Connect("KeyPressed(TGListTreeItem*,ULong_t,ULong_t)", 
		  "Spectra::Top", this, 
		  "HandleKey(TGListTreeItem*,UInt_t,UInt_t)");
    fList.Connect("ReturnPressed(TGListTreeItem*)", "Spectra::Top", this, 
		  "HandleReturn(TGListTreeItem*)");
  }
  //____________________________________________________________________
  void
  Top::SetAxis(TAxis* axis) 
  {
    fAxis = axis;
    MakeHistograms(axis);
  }
  //____________________________________________________________________
  void
  Top::ClearCanvas()
  {
    if (!fCanvas) return;
    fCanvas->Clear();
  }
  
  //____________________________________________________________________
  void
  Top::ClearList()
  {
    fList.DeleteItem(fList.GetFirstItem());
    UpdateList();
  }
  
  
  //____________________________________________________________________
  void
  Top::HandleReturn(TGListTreeItem * f)
  {
    
    if (!f) { 
      fList.UnselectAll(kFALSE);
      fList.SetSelected(0);
      return;
    }
    fList.ToggleItem(f);
    UpdateList();
  }
  
  
  //____________________________________________________________________
  void
  Top::HandleKey(TGListTreeItem * f, UInt_t keysym, UInt_t /*mask*/)
  {
    if (!f) { 
      fList.UnselectAll(kFALSE);
      fList.SetSelected(0);
      return;
    }
    TGListTreeItem* next = 0;
    switch (keysym) {
    case kKey_Up:
      next = f->GetPrevSibling();
    if (!next) { 
      next = f->GetParent();
      if (next) fList.CloseItem(next);
    }
    break;
    case kKey_Down:
      next = f->GetNextSibling();
      if (!next && f->GetParent()) {
	next = f->GetParent()->GetNextSibling();
	fList.CloseItem(f->GetParent());
      }
      break;
    case kKey_Left:
      next = f->GetParent();
      if (next) fList.CloseItem(next);
      break;
    case kKey_Right:
      next = f->GetFirstChild();
      if (next) fList.OpenItem(f);
      break;
    case kKey_PageUp:
      fList.PageUp(kTRUE);
      next = fList.GetSelected();
      break;
    case kKey_PageDown:
      fList.PageDown(kTRUE);
      next = fList.GetSelected();
      break;
    }
    if (next) gClient->NeedRedraw(&fList);
    if (next && next != f) {
      fList.ClearHighlighted();
      fList.SetSelected(next);
      HandleEntry(next,0);
    }
  }

  //____________________________________________________________________
  void
  Top::HandleEntry(TGListTreeItem* entry, Int_t /*id*/) 
  {
    TGListTreeItem* old = fCurrentEntry;
    if (entry) {
      if (!entry->GetUserData()) return;
      fCurrentEntry = entry;
    }
    else {
      fCurrentEntry = 0;
      ClearCanvas();
    }
    if (old != fCurrentEntry && fCanvas) fCanvas->cd();
    SelectionChanged();
  }

  //____________________________________________________________________
  void
  Top::UpdateList() 
  {
    gClient->NeedRedraw(&fList);
  }

  //____________________________________________________________________
  void
  Top::UpdateCanvas() 
  {
    if (!fCanvas) return;
    fCanvas->Modified();
    fCanvas->Update();
    fCanvas->cd();
  }
  //____________________________________________________________________
  TObject* Top::Current() const
  {
    if (!fCurrentEntry) return 0;
    if (!fCurrentEntry->GetUserData()) return 0;
    return static_cast<TObject*>(fCurrentEntry->GetUserData());
  }
  
  //__________________________________________________________________
  Detector& Top::GetOrAdd(UShort_t id) 
  { 
    Int_t     idx = id - 1;
    Detector* d   = 0;
    if (fChildren.GetEntriesFast() <= idx ||
	!(d = static_cast<Detector*>(fChildren.At(idx))))  { 
      d = new Detector(id, *this);
      fChildren.AddAtAndExpand(d, idx);
      // fList.SortChildren(&fEntry);
    }
    return *d;
  }
  //__________________________________________________________________
  void Top::Fill(UShort_t det, Char_t ring, 
		 UShort_t sec, UShort_t str, Double_t v) 
  { 
    Detector& d = GetOrAdd(det);
    d.Fill(ring, sec, str, v);
    DoFill(v);
  }
  //==================================================================
  Detector::Detector(UShort_t det, Top& tree) 
    : Element(Form("FMD%d", det), "FMD Sub-detector"), 
      fId(det), 
      fParent(tree),
      fChildren(0),
      fEntry(*(tree.GetList().AddItem(&(tree.GetEntry()), GetName())))
  {
    fEntry.SetUserData(this);
    if (GetTop().GetAxis()) MakeHistograms(GetTop().GetAxis());
  }
  //__________________________________________________________________
  Ring& Detector::GetOrAdd(Char_t id) 
  { 
    Int_t idx = (id == 'I' || id == 'i') ? 0 : 1;
    Ring* r   = 0;;
    if (fChildren.GetEntriesFast() <= idx ||
	!(r = static_cast<Ring*>(fChildren.At(idx))))  { 
      r = new Ring(id, *this);
      fChildren.AddAtAndExpand(r, idx);
      // GetTop().GetList().SortChildren(&fEntry);
    }
    return *r;
  }
  //__________________________________________________________________
  void Detector::Fill(Char_t ring, UShort_t sec, UShort_t str, Double_t v) 
  { 
    Ring& r = GetOrAdd(ring);
    r.Fill(sec, str, v);
    DoFill(v);
  }  
  //==================================================================
  Ring::Ring(Char_t id, Detector& d) 
    : Element(Form("FMD%d%c", d.Id(), id), "FMD Ring"), 
      fParent(d),
      fId(id),
      fChildren(0),
      fEntry(*(GetTop().GetList().AddItem(&(d.GetEntry()), GetName(), this)))
  {
    if (GetTop().GetAxis()) MakeHistograms(GetTop().GetAxis());
  }
  //__________________________________________________________________
  Sector& Ring::GetOrAdd(UShort_t id) 
  { 
    Sector* s = 0;
    if (fChildren.GetEntriesFast() <= id ||
	!(s = static_cast<Sector*>(fChildren.At(id)))) {
      s = new Sector(id, *this);
      fChildren.AddAtAndExpand(s, id);
      // GetTop().GetList().SortChildren(&fEntry);
    }
    return *s;
  }
  //__________________________________________________________________
  void Ring::Fill(UShort_t sec, UShort_t str, Double_t v) 
  { 
    Sector& s = GetOrAdd(sec);
    s.Fill(str, v);
    DoFill(v);
  }
  //==================================================================
  Sector::Sector(UShort_t id, Ring& r) 
    : Element(Form("FMD%d%c_%02d", r.DetectorId(), r.Id(), id), "FMD Sector"), 
      fParent(r),
      fId(id),
      fChildren(0),
      fEntry(*(GetTop().GetList().AddItem(&(r.GetEntry()), GetName(), this)))
  {
    if (GetTop().GetAxis()) MakeHistograms(GetTop().GetAxis());
  }
  //__________________________________________________________________
  Strip& Sector::GetOrAdd(UShort_t id) 
  { 
    Strip* s = 0;
    if (fChildren.GetEntriesFast() <= id || 
	!(s = static_cast<Strip*>(fChildren.At(id)))) {
      s = new Strip(id, *this);
      fChildren.AddAtAndExpand(s, id);
      // GetTop().GetList().SortChildren(&fEntry);
    }
    return *s;
  }
  //__________________________________________________________________
  void Sector::Fill(UShort_t str, Double_t v) 
  { 
    Strip& s = GetOrAdd(str);
    s.Fill(v);
    DoFill(v);
  }
  //==================================================================
  Strip::Strip(UShort_t id, Sector& s) 
    : Element(Form("FMD%d%c_%02d_%03d", s.DetectorId(), s.RingId(), 
		   s.Id(), id), "FMD Strip"), 
      fParent(s),
      fId(id),
      fEntry(*(GetTop().GetList().AddItem(&(s.GetEntry()), GetName(), this)))
  {
    fEntry.SetPictures(GetTop().GetH1Pic(), GetTop().GetH1Pic());
    if (GetTop().GetAxis()) MakeHistograms(GetTop().GetAxis());
  }
  //__________________________________________________________________
  void Strip::Fill(Double_t v) 
  { 
    DoFill(v);
  }
}


//====================================================================
class SpectraMonitor : public AliFMDPattern
{
private:
  TGMainFrame  fSelector;
  Spectra::Top fTop;
public:
  SpectraMonitor()
    : AliFMDPattern(), 
      fSelector(gClient->GetRoot(), 100, 100), 
      fTop(fSelector, fAux)
  {
    AddLoad(AliFMDInput::kRaw);
    SetName("RAW");
    SetTitle("RAW");

    fTop.Connect("SelectionChanged()", "SpectraMonitor", this, "HandleDraw()");

    fSelector.MapSubwindows();
    fSelector.Resize(fSelector.GetDefaultSize());
    fSelector.MapWindow();
  }
  // void SetAxis(TAxis* axis) { fTop.SetAxis(axis); }
  Bool_t HandleDraw()
  {
    TObject* user = fTop.Current();
    if (!user) return kFALSE;
    if (!user->InheritsFrom(Spectra::Element::Class())) { 
      Warning("HandleDraw", "%s does not inherit from Spectra::Element", 
	      user->GetName());
      return kFALSE;
    }
    fAux->cd();
    Spectra::Element* e = static_cast<Spectra::Element*>(user);
    e->Draw("hist", fSlider->GetMinimum(), fSlider->GetMaximum());
    fAux->Modified();
    fAux->Update();
    fAux->cd();
    return kTRUE;
  }
  void MakeAux()
  {
    AliFMDPattern::MakeAux();
    if (!fAux) return;
    fTop.SetAxis(fSpec->GetXaxis());
  }
  void DrawAux()
  {
    // Draw in the Aux the canvas 
    // For example draw the spectra 
    // or such stuff 
    if (fTop.Current() != &fTop && HandleDraw()) return;
    AliFMDPattern::DrawAux();
  }
  Bool_t ProcessHit(AliFMDHit* hit, TParticle* p) 
  {
    fTop.Fill(hit->Detector(), 
	      hit->Ring(), 
	      hit->Sector(),
	      hit->Strip(), 
	      hit->Edep());
    return AliFMDPattern::ProcessHit(hit, p);
  }
  Bool_t ProcessDigit(AliFMDDigit* digit)
  {
    fTop.Fill(digit->Detector(), 
	      digit->Ring(), 
	      digit->Sector(),
	      digit->Strip(), 
	      digit->Counts());
    return AliFMDDisplay::ProcessDigit(digit);
  }
  Bool_t ProcessSDigit(AliFMDSDigit* sdigit)
  {
    fTop.Fill(sdigit->Detector(), 
	      sdigit->Ring(), 
	      sdigit->Sector(),
	      sdigit->Strip(), 
	      sdigit->Counts());
    return AliFMDDisplay::ProcessSDigit(sdigit);
  }
  Bool_t ProcessRawDigit(AliFMDDigit* digit)
  {
    return ProcessDigit(digit);
  }
  Bool_t ProcessRecPoint(AliFMDRecPoint* recpoint)
  {
    fTop.Fill(recpoint->Detector(), 
	      recpoint->Ring(), 
	      recpoint->Sector(),
	      recpoint->Strip(), 
	      recpoint->Particles());
    return AliFMDDisplay::ProcessRecPoint(recpoint);
  }
  Bool_t ProcessESD(UShort_t det, Char_t rng, UShort_t sec, UShort_t str,
		    Float_t x, Float_t mult)
  {
    fTop.Fill(det, rng, sec, str, mult);
    return AliFMDDisplay::ProcessESD(det, rng, sec, str, x, mult);
  }
};

void
RunSpectraMonitor(const char* file="", 
		  Int_t       runno=0, 
		  const char* cdbSrc="local://$ALICE_ROOT/OCDB", 
		  UShort_t    over=0)
{
  // AliLog::SetModuleDebugLevel("FMD", 8);
  TString fname(file);
  if (fname.CompareTo("help", TString::kIgnoreCase) == 0) { 
    std::cout << "Usage: RunSpectraMonitor(<src>[,<runno>[,<cdb>[,<over>]]])\n"
	      << "\n"
	      << "Where:\n\n"
	      << "   <src>         Is a data source (online, file)\n"
	      << "   <runno>       Is the (optional) run number\n"
	      << "   <cdb>         Is the (optional) CDB storage\n"
	      << "   <over>        Is the (optional) over sampling rate\n\n"
	      << "Defaults are <runno>=0 and cdb=\"local://$ALICE_ROOT/OCDB\"\n" 
	      << "<over> allows one to override the CDB setting.  Default\n"
	      << "is to use the CDB setting.\n\n"
	      << "Note: This script _must_ be compiled with ACLic"
	      << std::endl;
    return;
  }
  AliCDBManager* cdb = AliCDBManager::Instance();
  cdb->SetDefaultStorage(cdbSrc);
  cdb->SetRun(runno);
  UInt_t what = (AliFMDParameters::kPulseGain      |
		 AliFMDParameters::kPedestal       |
		 AliFMDParameters::kDeadMap        |
		 AliFMDParameters::kZeroSuppression|
		 AliFMDParameters::kAltroMap       |
		 AliFMDParameters::kStripRange);
  if (over != 0) what |= AliFMDParameters::kSampleRate;
  AliFMDParameters::Instance()->Init(kFALSE, what);
  if (over != 0) AliFMDParameters::Instance()->SetSampleRate(over);
  
  SpectraMonitor* d = new SpectraMonitor;
  d->AddLoad(AliFMDInput::kRaw);
  d->SetRawFile(file);
  d->Run();
}
#endif

  

//____________________________________________________________________
//
// EOF
//
 SpectraMonitor.C:1
 SpectraMonitor.C:2
 SpectraMonitor.C:3
 SpectraMonitor.C:4
 SpectraMonitor.C:5
 SpectraMonitor.C:6
 SpectraMonitor.C:7
 SpectraMonitor.C:8
 SpectraMonitor.C:9
 SpectraMonitor.C:10
 SpectraMonitor.C:11
 SpectraMonitor.C:12
 SpectraMonitor.C:13
 SpectraMonitor.C:14
 SpectraMonitor.C:15
 SpectraMonitor.C:16
 SpectraMonitor.C:17
 SpectraMonitor.C:18
 SpectraMonitor.C:19
 SpectraMonitor.C:20
 SpectraMonitor.C:21
 SpectraMonitor.C:22
 SpectraMonitor.C:23
 SpectraMonitor.C:24
 SpectraMonitor.C:25
 SpectraMonitor.C:26
 SpectraMonitor.C:27
 SpectraMonitor.C:28
 SpectraMonitor.C:29
 SpectraMonitor.C:30
 SpectraMonitor.C:31
 SpectraMonitor.C:32
 SpectraMonitor.C:33
 SpectraMonitor.C:34
 SpectraMonitor.C:35
 SpectraMonitor.C:36
 SpectraMonitor.C:37
 SpectraMonitor.C:38
 SpectraMonitor.C:39
 SpectraMonitor.C:40
 SpectraMonitor.C:41
 SpectraMonitor.C:42
 SpectraMonitor.C:43
 SpectraMonitor.C:44
 SpectraMonitor.C:45
 SpectraMonitor.C:46
 SpectraMonitor.C:47
 SpectraMonitor.C:48
 SpectraMonitor.C:49
 SpectraMonitor.C:50
 SpectraMonitor.C:51
 SpectraMonitor.C:52
 SpectraMonitor.C:53
 SpectraMonitor.C:54
 SpectraMonitor.C:55
 SpectraMonitor.C:56
 SpectraMonitor.C:57
 SpectraMonitor.C:58
 SpectraMonitor.C:59
 SpectraMonitor.C:60
 SpectraMonitor.C:61
 SpectraMonitor.C:62
 SpectraMonitor.C:63
 SpectraMonitor.C:64
 SpectraMonitor.C:65
 SpectraMonitor.C:66
 SpectraMonitor.C:67
 SpectraMonitor.C:68
 SpectraMonitor.C:69
 SpectraMonitor.C:70
 SpectraMonitor.C:71
 SpectraMonitor.C:72
 SpectraMonitor.C:73
 SpectraMonitor.C:74
 SpectraMonitor.C:75
 SpectraMonitor.C:76
 SpectraMonitor.C:77
 SpectraMonitor.C:78
 SpectraMonitor.C:79
 SpectraMonitor.C:80
 SpectraMonitor.C:81
 SpectraMonitor.C:82
 SpectraMonitor.C:83
 SpectraMonitor.C:84
 SpectraMonitor.C:85
 SpectraMonitor.C:86
 SpectraMonitor.C:87
 SpectraMonitor.C:88
 SpectraMonitor.C:89
 SpectraMonitor.C:90
 SpectraMonitor.C:91
 SpectraMonitor.C:92
 SpectraMonitor.C:93
 SpectraMonitor.C:94
 SpectraMonitor.C:95
 SpectraMonitor.C:96
 SpectraMonitor.C:97
 SpectraMonitor.C:98
 SpectraMonitor.C:99
 SpectraMonitor.C:100
 SpectraMonitor.C:101
 SpectraMonitor.C:102
 SpectraMonitor.C:103
 SpectraMonitor.C:104
 SpectraMonitor.C:105
 SpectraMonitor.C:106
 SpectraMonitor.C:107
 SpectraMonitor.C:108
 SpectraMonitor.C:109
 SpectraMonitor.C:110
 SpectraMonitor.C:111
 SpectraMonitor.C:112
 SpectraMonitor.C:113
 SpectraMonitor.C:114
 SpectraMonitor.C:115
 SpectraMonitor.C:116
 SpectraMonitor.C:117
 SpectraMonitor.C:118
 SpectraMonitor.C:119
 SpectraMonitor.C:120
 SpectraMonitor.C:121
 SpectraMonitor.C:122
 SpectraMonitor.C:123
 SpectraMonitor.C:124
 SpectraMonitor.C:125
 SpectraMonitor.C:126
 SpectraMonitor.C:127
 SpectraMonitor.C:128
 SpectraMonitor.C:129
 SpectraMonitor.C:130
 SpectraMonitor.C:131
 SpectraMonitor.C:132
 SpectraMonitor.C:133
 SpectraMonitor.C:134
 SpectraMonitor.C:135
 SpectraMonitor.C:136
 SpectraMonitor.C:137
 SpectraMonitor.C:138
 SpectraMonitor.C:139
 SpectraMonitor.C:140
 SpectraMonitor.C:141
 SpectraMonitor.C:142
 SpectraMonitor.C:143
 SpectraMonitor.C:144
 SpectraMonitor.C:145
 SpectraMonitor.C:146
 SpectraMonitor.C:147
 SpectraMonitor.C:148
 SpectraMonitor.C:149
 SpectraMonitor.C:150
 SpectraMonitor.C:151
 SpectraMonitor.C:152
 SpectraMonitor.C:153
 SpectraMonitor.C:154
 SpectraMonitor.C:155
 SpectraMonitor.C:156
 SpectraMonitor.C:157
 SpectraMonitor.C:158
 SpectraMonitor.C:159
 SpectraMonitor.C:160
 SpectraMonitor.C:161
 SpectraMonitor.C:162
 SpectraMonitor.C:163
 SpectraMonitor.C:164
 SpectraMonitor.C:165
 SpectraMonitor.C:166
 SpectraMonitor.C:167
 SpectraMonitor.C:168
 SpectraMonitor.C:169
 SpectraMonitor.C:170
 SpectraMonitor.C:171
 SpectraMonitor.C:172
 SpectraMonitor.C:173
 SpectraMonitor.C:174
 SpectraMonitor.C:175
 SpectraMonitor.C:176
 SpectraMonitor.C:177
 SpectraMonitor.C:178
 SpectraMonitor.C:179
 SpectraMonitor.C:180
 SpectraMonitor.C:181
 SpectraMonitor.C:182
 SpectraMonitor.C:183
 SpectraMonitor.C:184
 SpectraMonitor.C:185
 SpectraMonitor.C:186
 SpectraMonitor.C:187
 SpectraMonitor.C:188
 SpectraMonitor.C:189
 SpectraMonitor.C:190
 SpectraMonitor.C:191
 SpectraMonitor.C:192
 SpectraMonitor.C:193
 SpectraMonitor.C:194
 SpectraMonitor.C:195
 SpectraMonitor.C:196
 SpectraMonitor.C:197
 SpectraMonitor.C:198
 SpectraMonitor.C:199
 SpectraMonitor.C:200
 SpectraMonitor.C:201
 SpectraMonitor.C:202
 SpectraMonitor.C:203
 SpectraMonitor.C:204
 SpectraMonitor.C:205
 SpectraMonitor.C:206
 SpectraMonitor.C:207
 SpectraMonitor.C:208
 SpectraMonitor.C:209
 SpectraMonitor.C:210
 SpectraMonitor.C:211
 SpectraMonitor.C:212
 SpectraMonitor.C:213
 SpectraMonitor.C:214
 SpectraMonitor.C:215
 SpectraMonitor.C:216
 SpectraMonitor.C:217
 SpectraMonitor.C:218
 SpectraMonitor.C:219
 SpectraMonitor.C:220
 SpectraMonitor.C:221
 SpectraMonitor.C:222
 SpectraMonitor.C:223
 SpectraMonitor.C:224
 SpectraMonitor.C:225
 SpectraMonitor.C:226
 SpectraMonitor.C:227
 SpectraMonitor.C:228
 SpectraMonitor.C:229
 SpectraMonitor.C:230
 SpectraMonitor.C:231
 SpectraMonitor.C:232
 SpectraMonitor.C:233
 SpectraMonitor.C:234
 SpectraMonitor.C:235
 SpectraMonitor.C:236
 SpectraMonitor.C:237
 SpectraMonitor.C:238
 SpectraMonitor.C:239
 SpectraMonitor.C:240
 SpectraMonitor.C:241
 SpectraMonitor.C:242
 SpectraMonitor.C:243
 SpectraMonitor.C:244
 SpectraMonitor.C:245
 SpectraMonitor.C:246
 SpectraMonitor.C:247
 SpectraMonitor.C:248
 SpectraMonitor.C:249
 SpectraMonitor.C:250
 SpectraMonitor.C:251
 SpectraMonitor.C:252
 SpectraMonitor.C:253
 SpectraMonitor.C:254
 SpectraMonitor.C:255
 SpectraMonitor.C:256
 SpectraMonitor.C:257
 SpectraMonitor.C:258
 SpectraMonitor.C:259
 SpectraMonitor.C:260
 SpectraMonitor.C:261
 SpectraMonitor.C:262
 SpectraMonitor.C:263
 SpectraMonitor.C:264
 SpectraMonitor.C:265
 SpectraMonitor.C:266
 SpectraMonitor.C:267
 SpectraMonitor.C:268
 SpectraMonitor.C:269
 SpectraMonitor.C:270
 SpectraMonitor.C:271
 SpectraMonitor.C:272
 SpectraMonitor.C:273
 SpectraMonitor.C:274
 SpectraMonitor.C:275
 SpectraMonitor.C:276
 SpectraMonitor.C:277
 SpectraMonitor.C:278
 SpectraMonitor.C:279
 SpectraMonitor.C:280
 SpectraMonitor.C:281
 SpectraMonitor.C:282
 SpectraMonitor.C:283
 SpectraMonitor.C:284
 SpectraMonitor.C:285
 SpectraMonitor.C:286
 SpectraMonitor.C:287
 SpectraMonitor.C:288
 SpectraMonitor.C:289
 SpectraMonitor.C:290
 SpectraMonitor.C:291
 SpectraMonitor.C:292
 SpectraMonitor.C:293
 SpectraMonitor.C:294
 SpectraMonitor.C:295
 SpectraMonitor.C:296
 SpectraMonitor.C:297
 SpectraMonitor.C:298
 SpectraMonitor.C:299
 SpectraMonitor.C:300
 SpectraMonitor.C:301
 SpectraMonitor.C:302
 SpectraMonitor.C:303
 SpectraMonitor.C:304
 SpectraMonitor.C:305
 SpectraMonitor.C:306
 SpectraMonitor.C:307
 SpectraMonitor.C:308
 SpectraMonitor.C:309
 SpectraMonitor.C:310
 SpectraMonitor.C:311
 SpectraMonitor.C:312
 SpectraMonitor.C:313
 SpectraMonitor.C:314
 SpectraMonitor.C:315
 SpectraMonitor.C:316
 SpectraMonitor.C:317
 SpectraMonitor.C:318
 SpectraMonitor.C:319
 SpectraMonitor.C:320
 SpectraMonitor.C:321
 SpectraMonitor.C:322
 SpectraMonitor.C:323
 SpectraMonitor.C:324
 SpectraMonitor.C:325
 SpectraMonitor.C:326
 SpectraMonitor.C:327
 SpectraMonitor.C:328
 SpectraMonitor.C:329
 SpectraMonitor.C:330
 SpectraMonitor.C:331
 SpectraMonitor.C:332
 SpectraMonitor.C:333
 SpectraMonitor.C:334
 SpectraMonitor.C:335
 SpectraMonitor.C:336
 SpectraMonitor.C:337
 SpectraMonitor.C:338
 SpectraMonitor.C:339
 SpectraMonitor.C:340
 SpectraMonitor.C:341
 SpectraMonitor.C:342
 SpectraMonitor.C:343
 SpectraMonitor.C:344
 SpectraMonitor.C:345
 SpectraMonitor.C:346
 SpectraMonitor.C:347
 SpectraMonitor.C:348
 SpectraMonitor.C:349
 SpectraMonitor.C:350
 SpectraMonitor.C:351
 SpectraMonitor.C:352
 SpectraMonitor.C:353
 SpectraMonitor.C:354
 SpectraMonitor.C:355
 SpectraMonitor.C:356
 SpectraMonitor.C:357
 SpectraMonitor.C:358
 SpectraMonitor.C:359
 SpectraMonitor.C:360
 SpectraMonitor.C:361
 SpectraMonitor.C:362
 SpectraMonitor.C:363
 SpectraMonitor.C:364
 SpectraMonitor.C:365
 SpectraMonitor.C:366
 SpectraMonitor.C:367
 SpectraMonitor.C:368
 SpectraMonitor.C:369
 SpectraMonitor.C:370
 SpectraMonitor.C:371
 SpectraMonitor.C:372
 SpectraMonitor.C:373
 SpectraMonitor.C:374
 SpectraMonitor.C:375
 SpectraMonitor.C:376
 SpectraMonitor.C:377
 SpectraMonitor.C:378
 SpectraMonitor.C:379
 SpectraMonitor.C:380
 SpectraMonitor.C:381
 SpectraMonitor.C:382
 SpectraMonitor.C:383
 SpectraMonitor.C:384
 SpectraMonitor.C:385
 SpectraMonitor.C:386
 SpectraMonitor.C:387
 SpectraMonitor.C:388
 SpectraMonitor.C:389
 SpectraMonitor.C:390
 SpectraMonitor.C:391
 SpectraMonitor.C:392
 SpectraMonitor.C:393
 SpectraMonitor.C:394
 SpectraMonitor.C:395
 SpectraMonitor.C:396
 SpectraMonitor.C:397
 SpectraMonitor.C:398
 SpectraMonitor.C:399
 SpectraMonitor.C:400
 SpectraMonitor.C:401
 SpectraMonitor.C:402
 SpectraMonitor.C:403
 SpectraMonitor.C:404
 SpectraMonitor.C:405
 SpectraMonitor.C:406
 SpectraMonitor.C:407
 SpectraMonitor.C:408
 SpectraMonitor.C:409
 SpectraMonitor.C:410
 SpectraMonitor.C:411
 SpectraMonitor.C:412
 SpectraMonitor.C:413
 SpectraMonitor.C:414
 SpectraMonitor.C:415
 SpectraMonitor.C:416
 SpectraMonitor.C:417
 SpectraMonitor.C:418
 SpectraMonitor.C:419
 SpectraMonitor.C:420
 SpectraMonitor.C:421
 SpectraMonitor.C:422
 SpectraMonitor.C:423
 SpectraMonitor.C:424
 SpectraMonitor.C:425
 SpectraMonitor.C:426
 SpectraMonitor.C:427
 SpectraMonitor.C:428
 SpectraMonitor.C:429
 SpectraMonitor.C:430
 SpectraMonitor.C:431
 SpectraMonitor.C:432
 SpectraMonitor.C:433
 SpectraMonitor.C:434
 SpectraMonitor.C:435
 SpectraMonitor.C:436
 SpectraMonitor.C:437
 SpectraMonitor.C:438
 SpectraMonitor.C:439
 SpectraMonitor.C:440
 SpectraMonitor.C:441
 SpectraMonitor.C:442
 SpectraMonitor.C:443
 SpectraMonitor.C:444
 SpectraMonitor.C:445
 SpectraMonitor.C:446
 SpectraMonitor.C:447
 SpectraMonitor.C:448
 SpectraMonitor.C:449
 SpectraMonitor.C:450
 SpectraMonitor.C:451
 SpectraMonitor.C:452
 SpectraMonitor.C:453
 SpectraMonitor.C:454
 SpectraMonitor.C:455
 SpectraMonitor.C:456
 SpectraMonitor.C:457
 SpectraMonitor.C:458
 SpectraMonitor.C:459
 SpectraMonitor.C:460
 SpectraMonitor.C:461
 SpectraMonitor.C:462
 SpectraMonitor.C:463
 SpectraMonitor.C:464
 SpectraMonitor.C:465
 SpectraMonitor.C:466
 SpectraMonitor.C:467
 SpectraMonitor.C:468
 SpectraMonitor.C:469
 SpectraMonitor.C:470
 SpectraMonitor.C:471
 SpectraMonitor.C:472
 SpectraMonitor.C:473
 SpectraMonitor.C:474
 SpectraMonitor.C:475
 SpectraMonitor.C:476
 SpectraMonitor.C:477
 SpectraMonitor.C:478
 SpectraMonitor.C:479
 SpectraMonitor.C:480
 SpectraMonitor.C:481
 SpectraMonitor.C:482
 SpectraMonitor.C:483
 SpectraMonitor.C:484
 SpectraMonitor.C:485
 SpectraMonitor.C:486
 SpectraMonitor.C:487
 SpectraMonitor.C:488
 SpectraMonitor.C:489
 SpectraMonitor.C:490
 SpectraMonitor.C:491
 SpectraMonitor.C:492
 SpectraMonitor.C:493
 SpectraMonitor.C:494
 SpectraMonitor.C:495
 SpectraMonitor.C:496
 SpectraMonitor.C:497
 SpectraMonitor.C:498
 SpectraMonitor.C:499
 SpectraMonitor.C:500
 SpectraMonitor.C:501
 SpectraMonitor.C:502
 SpectraMonitor.C:503
 SpectraMonitor.C:504
 SpectraMonitor.C:505
 SpectraMonitor.C:506
 SpectraMonitor.C:507
 SpectraMonitor.C:508
 SpectraMonitor.C:509
 SpectraMonitor.C:510
 SpectraMonitor.C:511
 SpectraMonitor.C:512
 SpectraMonitor.C:513
 SpectraMonitor.C:514
 SpectraMonitor.C:515
 SpectraMonitor.C:516
 SpectraMonitor.C:517
 SpectraMonitor.C:518
 SpectraMonitor.C:519
 SpectraMonitor.C:520
 SpectraMonitor.C:521
 SpectraMonitor.C:522
 SpectraMonitor.C:523
 SpectraMonitor.C:524
 SpectraMonitor.C:525
 SpectraMonitor.C:526
 SpectraMonitor.C:527
 SpectraMonitor.C:528
 SpectraMonitor.C:529
 SpectraMonitor.C:530
 SpectraMonitor.C:531
 SpectraMonitor.C:532
 SpectraMonitor.C:533
 SpectraMonitor.C:534
 SpectraMonitor.C:535
 SpectraMonitor.C:536
 SpectraMonitor.C:537
 SpectraMonitor.C:538
 SpectraMonitor.C:539
 SpectraMonitor.C:540
 SpectraMonitor.C:541
 SpectraMonitor.C:542
 SpectraMonitor.C:543
 SpectraMonitor.C:544
 SpectraMonitor.C:545
 SpectraMonitor.C:546
 SpectraMonitor.C:547
 SpectraMonitor.C:548
 SpectraMonitor.C:549
 SpectraMonitor.C:550
 SpectraMonitor.C:551
 SpectraMonitor.C:552
 SpectraMonitor.C:553
 SpectraMonitor.C:554
 SpectraMonitor.C:555
 SpectraMonitor.C:556
 SpectraMonitor.C:557
 SpectraMonitor.C:558
 SpectraMonitor.C:559
 SpectraMonitor.C:560
 SpectraMonitor.C:561
 SpectraMonitor.C:562
 SpectraMonitor.C:563
 SpectraMonitor.C:564
 SpectraMonitor.C:565
 SpectraMonitor.C:566
 SpectraMonitor.C:567
 SpectraMonitor.C:568
 SpectraMonitor.C:569
 SpectraMonitor.C:570
 SpectraMonitor.C:571
 SpectraMonitor.C:572
 SpectraMonitor.C:573
 SpectraMonitor.C:574
 SpectraMonitor.C:575
 SpectraMonitor.C:576
 SpectraMonitor.C:577
 SpectraMonitor.C:578
 SpectraMonitor.C:579
 SpectraMonitor.C:580
 SpectraMonitor.C:581
 SpectraMonitor.C:582
 SpectraMonitor.C:583
 SpectraMonitor.C:584
 SpectraMonitor.C:585
 SpectraMonitor.C:586
 SpectraMonitor.C:587
 SpectraMonitor.C:588
 SpectraMonitor.C:589
 SpectraMonitor.C:590
 SpectraMonitor.C:591
 SpectraMonitor.C:592
 SpectraMonitor.C:593
 SpectraMonitor.C:594
 SpectraMonitor.C:595
 SpectraMonitor.C:596
 SpectraMonitor.C:597
 SpectraMonitor.C:598
 SpectraMonitor.C:599
 SpectraMonitor.C:600
 SpectraMonitor.C:601
 SpectraMonitor.C:602
 SpectraMonitor.C:603
 SpectraMonitor.C:604
 SpectraMonitor.C:605
 SpectraMonitor.C:606
 SpectraMonitor.C:607
 SpectraMonitor.C:608
 SpectraMonitor.C:609
 SpectraMonitor.C:610
 SpectraMonitor.C:611
 SpectraMonitor.C:612
 SpectraMonitor.C:613
 SpectraMonitor.C:614
 SpectraMonitor.C:615
 SpectraMonitor.C:616
 SpectraMonitor.C:617
 SpectraMonitor.C:618
 SpectraMonitor.C:619
 SpectraMonitor.C:620
 SpectraMonitor.C:621
 SpectraMonitor.C:622
 SpectraMonitor.C:623
 SpectraMonitor.C:624
 SpectraMonitor.C:625
 SpectraMonitor.C:626
 SpectraMonitor.C:627
 SpectraMonitor.C:628
 SpectraMonitor.C:629
 SpectraMonitor.C:630
 SpectraMonitor.C:631
 SpectraMonitor.C:632
 SpectraMonitor.C:633
 SpectraMonitor.C:634
 SpectraMonitor.C:635
 SpectraMonitor.C:636
 SpectraMonitor.C:637
 SpectraMonitor.C:638
 SpectraMonitor.C:639
 SpectraMonitor.C:640
 SpectraMonitor.C:641
 SpectraMonitor.C:642
 SpectraMonitor.C:643
 SpectraMonitor.C:644
 SpectraMonitor.C:645
 SpectraMonitor.C:646
 SpectraMonitor.C:647
 SpectraMonitor.C:648
 SpectraMonitor.C:649
 SpectraMonitor.C:650
 SpectraMonitor.C:651
 SpectraMonitor.C:652
 SpectraMonitor.C:653
 SpectraMonitor.C:654
 SpectraMonitor.C:655
 SpectraMonitor.C:656
 SpectraMonitor.C:657
 SpectraMonitor.C:658
 SpectraMonitor.C:659
 SpectraMonitor.C:660
 SpectraMonitor.C:661
 SpectraMonitor.C:662
 SpectraMonitor.C:663
 SpectraMonitor.C:664
 SpectraMonitor.C:665
 SpectraMonitor.C:666
 SpectraMonitor.C:667
 SpectraMonitor.C:668
 SpectraMonitor.C:669
 SpectraMonitor.C:670
 SpectraMonitor.C:671
 SpectraMonitor.C:672
 SpectraMonitor.C:673
 SpectraMonitor.C:674
 SpectraMonitor.C:675
 SpectraMonitor.C:676
 SpectraMonitor.C:677
 SpectraMonitor.C:678
 SpectraMonitor.C:679
 SpectraMonitor.C:680
 SpectraMonitor.C:681
 SpectraMonitor.C:682
 SpectraMonitor.C:683
 SpectraMonitor.C:684
 SpectraMonitor.C:685
 SpectraMonitor.C:686
 SpectraMonitor.C:687
 SpectraMonitor.C:688
 SpectraMonitor.C:689
 SpectraMonitor.C:690
 SpectraMonitor.C:691
 SpectraMonitor.C:692
 SpectraMonitor.C:693
 SpectraMonitor.C:694
 SpectraMonitor.C:695
 SpectraMonitor.C:696
 SpectraMonitor.C:697
 SpectraMonitor.C:698
 SpectraMonitor.C:699
 SpectraMonitor.C:700
 SpectraMonitor.C:701
 SpectraMonitor.C:702
 SpectraMonitor.C:703
 SpectraMonitor.C:704
 SpectraMonitor.C:705
 SpectraMonitor.C:706
 SpectraMonitor.C:707
 SpectraMonitor.C:708
 SpectraMonitor.C:709
 SpectraMonitor.C:710
 SpectraMonitor.C:711
 SpectraMonitor.C:712
 SpectraMonitor.C:713
 SpectraMonitor.C:714
 SpectraMonitor.C:715
 SpectraMonitor.C:716
 SpectraMonitor.C:717
 SpectraMonitor.C:718
 SpectraMonitor.C:719
 SpectraMonitor.C:720
 SpectraMonitor.C:721
 SpectraMonitor.C:722
 SpectraMonitor.C:723
 SpectraMonitor.C:724
 SpectraMonitor.C:725
 SpectraMonitor.C:726
 SpectraMonitor.C:727
 SpectraMonitor.C:728
 SpectraMonitor.C:729
 SpectraMonitor.C:730
 SpectraMonitor.C:731
 SpectraMonitor.C:732
 SpectraMonitor.C:733
 SpectraMonitor.C:734
 SpectraMonitor.C:735
 SpectraMonitor.C:736
 SpectraMonitor.C:737
 SpectraMonitor.C:738
 SpectraMonitor.C:739
 SpectraMonitor.C:740
 SpectraMonitor.C:741
 SpectraMonitor.C:742
 SpectraMonitor.C:743
 SpectraMonitor.C:744
 SpectraMonitor.C:745