]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EVE/Alieve/TPCLoaderEditor.cxx
- The default value of useFastDecoder in ctor changed to kFALSE,
[u/mrichter/AliRoot.git] / EVE / Alieve / TPCLoaderEditor.cxx
index 3a4314fa536db9610da77084fd388c62a677f73f..1f6fa45252e90b4bfced0a58c226002f5c611c44 100644 (file)
@@ -2,7 +2,8 @@
 
 #include "TPCLoaderEditor.h"
 #include <Alieve/TPCLoader.h>
-#include <Reve/RGTopFrame.h>
+#include <Alieve/TPCData.h>
+#include <Reve/ReveManager.h>
 #include <Reve/RGValuators.h>
 
 #include <TSystem.h>
@@ -25,14 +26,35 @@ using namespace Alieve;
 
 ClassImp(TPCLoaderEditor)
 
-TPCLoaderEditor::TPCLoaderEditor(const TGWindow *p, Int_t id, Int_t width, Int_t height,
-                                UInt_t options, Pixel_t back) :
-  TGedFrame(p, id, width, height, options | kVerticalFrame, back)
+  TPCLoaderEditor::TPCLoaderEditor(const TGWindow *p,
+                                  Int_t width, Int_t height,
+                                  UInt_t options, Pixel_t back) :
+    TGedFrame(p, width, height, options | kVerticalFrame, back),
+
+    fM (0),
+
+    fFile     (0),
+    fOpenFile (0),
+
+    fEvent    (0),
+    fDoubleSR (0),
+
+    fDataLoadThreshold (0),
+    fDataLoadPedestal  (0),
+    fDataAutoPedestal  (0),
+
+    fUpdateSectors   (0),
+    fReloadSectors   (0),
+    fCreateSectors3D (0),
+    fDeleteSectors3D (0)
 {
-  fM = 0;
   MakeTitle("TPCLoader");
 
-  Int_t labelW = 42;
+  Int_t labelW;
+
+  // File / event interface
+
+  labelW = 42;
   {
     TGHorizontalFrame* f = new TGHorizontalFrame(this);
     TGHorizontalFrame* g = new TGHorizontalFrame(f, labelW, 0, kFixedWidth);
@@ -65,34 +87,73 @@ TPCLoaderEditor::TPCLoaderEditor(const TGWindow *p, Int_t id, Int_t width, Int_t
   // Reuse Event for DoubleSR button
   fDoubleSR = new TGCheckButton(fEvent, "Double SR");
   fDoubleSR->SetToolTipText("Double sampling rate");
-  fEvent->AddFrame(fDoubleSR, new TGLayoutHints(kLHintsLeft, 12, 0, 1, 0));
+  fEvent->AddFrame(fDoubleSR, new TGLayoutHints(kLHintsLeft, 12, 0, 2, 0));
   fDoubleSR->Connect("Toggled(Bool_t)",
                      "Alieve::TPCLoaderEditor", this, "DoDoubleSR()");
   AddFrame(fEvent);
 
-  fUpdateSectors = new TGTextButton(this, "Update Sectors");
-  AddFrame(fUpdateSectors, new TGLayoutHints(kLHintsExpandX, 8,8,8,0));
-  fUpdateSectors->Connect("Clicked()",
-                    "Alieve::TPCLoaderEditor", this, "DoUpdateSectors()");
+
+  // TPCData load settings
+
+  labelW = 90;
+
+  fDataLoadThreshold = new RGValuator(this, "Load threshold:", 110, 0);
+  fDataLoadThreshold->SetShowSlider(kFALSE);
+  fDataLoadThreshold->SetLabelWidth(labelW);
+  fDataLoadThreshold->SetNELength(6);
+  fDataLoadThreshold->Build();
+  fDataLoadThreshold->SetLimits(0, 1000);
+  fDataLoadThreshold->SetToolTip("Minimum signal that will be stored (pedestal subtracted first).");
+  fDataLoadThreshold->Connect
+    ("ValueSet(Double_t)",
+     "Alieve::TPCLoaderEditor", this, "DoDataLoadThreshold()");
+  AddFrame(fDataLoadThreshold, new TGLayoutHints(kLHintsLeft, 0, 0, 6, 0));
+
+  fDataLoadPedestal = new RGValuator(this, "Load pedestal:", 110, 0);
+  fDataLoadPedestal->SetShowSlider(kFALSE);
+  fDataLoadPedestal->SetLabelWidth(labelW);
+  fDataLoadPedestal->SetNELength(6);
+  fDataLoadPedestal->Build();
+  fDataLoadPedestal->SetLimits(0, 1000);
+  fDataLoadPedestal->SetToolTip("Pedestal that will be subtracted during data loading.");
+  fDataLoadPedestal->Connect
+    ("ValueSet(Double_t)",
+     "Alieve::TPCLoaderEditor", this, "DoDataLoadPedestal()");
+  // Reuse DataLoadPedestal for DataAutoPedestal check button
+  fDataAutoPedestal = new TGCheckButton(fDataLoadPedestal, "Automatic");
+  fDataAutoPedestal->SetToolTipText("Determine per-pad pedestal during data loading.");
+  fDataAutoPedestal->Connect
+    ("Toggled(Bool_t)",
+     "Alieve::TPCLoaderEditor", this, "DoDataAutoPedestal()");
+  fDataLoadPedestal->AddFrame(fDataAutoPedestal, new TGLayoutHints(kLHintsLeft, 12, 0, 2, 0));
+  AddFrame(fDataLoadPedestal);
+
+  // Steering buttons: update/reload sectors; show/hide 3d
+
+  {
+    TGHorizontalFrame* f = new TGHorizontalFrame(this);
+    fUpdateSectors = new TGTextButton(f, "Update Sectors");
+    f->AddFrame(fUpdateSectors, new TGLayoutHints(kLHintsExpandX, 0,4,0,0));
+    fUpdateSectors->Connect("Clicked()",
+                           "Alieve::TPCLoaderEditor", this, "DoUpdateSectors()");
+    fReloadSectors = new TGTextButton(f, "Reload Sectors");
+    f->AddFrame(fReloadSectors, new TGLayoutHints(kLHintsExpandX, 4,0,0,0));
+    fReloadSectors->Connect("Clicked()",
+                           "Alieve::TPCLoaderEditor", this, "DoReloadSectors()");
+    AddFrame(f, new TGLayoutHints(kLHintsExpandX, 8,8,8,0));
+  }
   {
     TGHorizontalFrame* f = new TGHorizontalFrame(this);
     fCreateSectors3D = new TGTextButton(f, "Create 3D");
     f->AddFrame(fCreateSectors3D, new TGLayoutHints(kLHintsExpandX, 0,4,0,0));
     fCreateSectors3D->Connect("Clicked()",
-                    "Alieve::TPCLoaderEditor", this, "DoCreateSectors3D()");
+                             "Alieve::TPCLoaderEditor", this, "DoCreateSectors3D()");
     fDeleteSectors3D = new TGTextButton(f, "Delete 3D");
     f->AddFrame(fDeleteSectors3D, new TGLayoutHints(kLHintsExpandX, 4,0,0,0));
     fDeleteSectors3D->Connect("Clicked()",
-                    "Alieve::TPCLoaderEditor", this, "DoDeleteSectors3D()");
+                             "Alieve::TPCLoaderEditor", this, "DoDeleteSectors3D()");
     AddFrame(f, new TGLayoutHints(kLHintsExpandX, 8,8,8,0));
   }
-
-  // Register the editor.
-  TClass *cl = TPCLoader::Class();
-  TGedElement *ge = new TGedElement;
-  ge->fGedFrame = this;
-  ge->fCanvas = 0;
-  cl->GetEditorList()->Add(ge);
 }
 
 TPCLoaderEditor::~TPCLoaderEditor()
@@ -100,29 +161,27 @@ TPCLoaderEditor::~TPCLoaderEditor()
 
 /**************************************************************************/
 
-void TPCLoaderEditor::SetModel(TVirtualPad* pad, TObject* obj, Int_t /*event*/)
+void TPCLoaderEditor::SetModel(TObject* obj)
 {
-  fModel = 0;
-  fPad   = 0;
-
-  if (!obj || !obj->InheritsFrom(TPCLoader::Class()) || obj->InheritsFrom(TVirtualPad::Class())) {
-    SetActive(kFALSE);
-    return;
-  }
-
-  fModel = obj;
-  fPad   = pad;
-
-  fM = dynamic_cast<TPCLoader*>(fModel);
+  fM = dynamic_cast<TPCLoader*>(obj);
 
   // !!!! order changed, need TGTextEntry::SetText NO BLOODY EMIT.
   fFile->SetToolTipText(gSystem->DirName(fM->fFile));
   fFile->SetText(gSystem->BaseName(fM->fFile));
   fEvent->SetValue(fM->fEvent);
   fEvent->SetEnabled(fM->fEvent >= 0);
-  fDoubleSR->SetState(fM->fDoubleSR  ? kButtonDown : kButtonUp);
-
-  SetActive();
+  fDoubleSR->SetState(fM->fDoubleSR ? kButtonDown : kButtonUp);
+
+  TPCData* tpcd = fM->GetData();
+  Bool_t   tpcp = (tpcd != 0);
+  fDataLoadThreshold->SetEnabled(tpcp);
+  fDataLoadPedestal ->SetEnabled(tpcp && ! tpcd->GetAutoPedestal());
+  fDataAutoPedestal ->SetEnabled(tpcp);
+  if (tpcp) {
+    fDataLoadThreshold->SetValue(tpcd->GetLoadThreshold());
+    fDataLoadPedestal ->SetValue(tpcd->GetLoadPedestal());
+    fDataAutoPedestal ->SetState(tpcd->GetAutoPedestal() ? kButtonDown : kButtonUp);
+  }
 }
 
 /**************************************************************************/
@@ -143,7 +202,7 @@ void TPCLoaderEditor::FileSelect()
   fi.fFilename  = StrDup(gSystem->BaseName(fM->fFile));
   fi.fFileTypes = tpcfiletypes;
 
-  new TGFileDialog(fClient->GetRoot(), gReve, kFDOpen, &fi);
+  new TGFileDialog(fClient->GetRoot(), gReve->GetMainWindow(), kFDOpen, &fi);
   if (!fi.fFilename)
     return;
 
@@ -160,7 +219,7 @@ void TPCLoaderEditor::FileChanged()
 void TPCLoaderEditor::DoOpen()
 {
   fM->OpenFile();
-  SetModel(fPad, fModel, 0);
+  SetModel(fM);
 }
 
 /**************************************************************************/
@@ -168,7 +227,7 @@ void TPCLoaderEditor::DoOpen()
 void TPCLoaderEditor::DoEvent()
 {
   fM->GotoEvent((Int_t) fEvent->GetValue());
-  SetModel(fPad, fModel, 0);
+  SetModel(fM);
 }
 
 void TPCLoaderEditor::DoDoubleSR()
@@ -179,11 +238,37 @@ void TPCLoaderEditor::DoDoubleSR()
 
 /**************************************************************************/
 
+void TPCLoaderEditor::DoDataLoadThreshold()
+{
+  if (fM->GetData() == 0) return;
+  fM->GetData()->SetLoadThreshold((Short_t) fDataLoadThreshold->GetValue());
+}
+
+void TPCLoaderEditor::DoDataLoadPedestal()
+{
+  if (fM->GetData() == 0) return;
+  fM->GetData()->SetLoadPedestal((Short_t) fDataLoadPedestal->GetValue());
+}
+
+void TPCLoaderEditor::DoDataAutoPedestal()
+{
+  if (fM->GetData() == 0) return;
+  fM->GetData()->SetAutoPedestal(fDataAutoPedestal->IsOn());
+  fDataLoadPedestal->SetEnabled(!fDataAutoPedestal->IsOn());
+}
+
+/**************************************************************************/
+
 void TPCLoaderEditor::DoUpdateSectors()
 {
   fM->UpdateSectors();
 }
 
+void TPCLoaderEditor::DoReloadSectors()
+{
+  fM->ReloadSectors();
+}
+
 void TPCLoaderEditor::DoCreateSectors3D()
 {
   fM->CreateSectors3D();