Universita' di GenovaINFN Sezione di Genova  
AIRWATCH / EUSO Genova

EFocalSurfacePainterEditor - source file

// $Id: EFocalSurfacePainterEditor.cc,v 1.16 2005/11/11 10:37:00 pesce Exp $
// Author: Alessandro Thea   2005/02/20

/*****************************************************************************
 * ESAF: Euso Simulation and Analysis Framework                              *
 *                                                                           *
 *  Id: EFocalSurfacePainterEditor                                           *
 *  Package: <packagename>                                                   *
 *  Coordinator: <coordinator>                                               *
 *                                                                           *
 *****************************************************************************/

//_____________________________________________________________________________
//
// EFocalSurfacePainterEditor
//
// <extensive class description>
//
//   Config file parameters
//   ======================
//
//   <parameter name>: <parameter description>
//   -Valid options: <available options>
//

#include "EFocalSurfacePainterEditor.hh"
#include "ERunParameters.hh"

#include "TGComboBox.h"
#include "TGSlider.h"
#include "TGLabel.h"
#include "TGButton.h"
#include "TGButtonGroup.h"
#include "TGColorSelect.h"
#include "TGTab.h"
#include "TG3DLine.h"
#include "TColor.h"
#include "TGLabel.h"
#include "TGNumberEntry.h"
#include "Riostream.h"

enum {
    kPMTCOLOR,
    kPMTOFFCOLOR,
    kPATTERN,
    kMAPID,
    kINTEGRAL,
    kTRIGGER,
    kTIME_INTEGRAL,
    kTHRES_SLIDER,
    kTHRES_NUMENTRY,
    kABS_THRESH,
    kGTU_COUNTER,
    kGTU_NUMENTRY,
    kCOUNTS_SLIDER,
    kCOUNTS_NUMENTRY,
    kEMPTY_PIXELS,
    kOFF_PIXELS,
    kPAINT_NG
};


ClassImp(TGedFrame)
ClassImp(EFocalSurfacePainterEditor)

//_____________________________________________________________________________
 EFocalSurfacePainterEditor::EFocalSurfacePainterEditor( 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), fPainter(0) {
    //
    // Constructor
    //

    fGarbage = new TList;
    TGCompositeFrame *h, *h1, *h2,*v; 
    TGLayoutHints* lay;

    MakeTitle("Maps");

    TGCompositeFrame *f2 = new TGCompositeFrame(this, 80, 20, kHorizontalFrame);

    fMapIDCombo = BuildMapIDCombo(f2, kMAPID);
    f2->AddFrame(fMapIDCombo, new TGLayoutHints(kLHintsLeft, 3, 1, 1, 1));
    fMapIDCombo->Resize(145, 20);
    fMapIDCombo->Associate(this);
    AddFrame(f2, new TGLayoutHints(kLHintsTop, 1, 1, 0, 0));

    MakeTitle("Integral");

    TGCompositeFrame *f15 = new TGCompositeFrame(this, 80, 20, kHorizontalFrame);

    fIntegralCombo = BuildIntegralCombo(f15, kINTEGRAL);
    f15->AddFrame(fIntegralCombo, new TGLayoutHints(kLHintsLeft, 3, 1, 1, 1));
    fIntegralCombo->Resize(145, 20);
    fIntegralCombo->Associate(this);
    AddFrame(f15, new TGLayoutHints(kLHintsTop, 1, 1, 0, 0));


    // View //////////////////////////////
    MakeTitle("View");

    v = new TGCompositeFrame(this, 80, 20, kVerticalFrame);   
    fGarbage->Add(v);
    h1 = new TGCompositeFrame(v, 80, 20, kHorizontalFrame);
    fGarbage->Add(h1);

    fViewRangeSlider  = new TGHSlider(h1, 100, kSlider1 | kScaleBoth);
    fViewRangeSlider->Resize(120,20); 
    fViewRangeSlider->SetRange(10,1250);
    fViewRangeSlider->SetScale(20);
//    fViewRangeSlider->SetPosition(5);
//    h1->AddFrame(fViewRangeSlider, new TGLayoutHints(kLHintsLeft, 3,0,0,3));
    h1->AddFrame(fViewRangeSlider, new TGLayoutHints(kLHintsLeft, 0,0,0,0));
//    v->AddFrame(h1, new TGLayoutHints(kLHintsTop, 15, 7, 5, 0));
    v->AddFrame(h1, new TGLayoutHints(kLHintsTop, 3, 7, 4, 1));

    //  lettering of the Rebin Slider
    h2 = new TGCompositeFrame(v, 80, 20, kHorizontalFrame);   
    fGarbage->Add(h2);

    fViewRMinLabel = new TGLabel(h2, "10 mm");
    h2->AddFrame(fViewRMinLabel, new TGLayoutHints(kLHintsLeft, 8, 1, -1, 0));
    fViewRMaxLabel = new TGLabel(h2, "1250 mm");
    h2->AddFrame(fViewRMaxLabel, new TGLayoutHints(kLHintsLeft, 50, 3, -1, 0));
    v->AddFrame(h2, new TGLayoutHints(kLHintsTop, 0, 0, 0, 0));

    lay =  new TGLayoutHints(kLHintsTop);
    fGarbage->Add(lay);

    AddFrame(v, lay);


    // GTU ///////////////////////////////
    MakeTitle("GTU");

    v = new TGCompositeFrame(this, 80, 20, kVerticalFrame);   
    fGarbage->Add(v);

    h1 = new TGCompositeFrame(v, 80, 20, kHorizontalFrame);
    fGarbage->Add(h1);
    // Slider
    fGtuSlider = new TGHSlider(h1, 1, 2);
    fGtuSlider->Resize(90,20);
    fGarbage->Add(lay = new TGLayoutHints(kLHintsLeft));
    h1->AddFrame(fGtuSlider,lay);

    fGtuEntry = new TGNumberEntry(h1, -1, 5, kGTU_NUMENTRY, 
            TGNumberFormat::kNESInteger,
            TGNumberFormat::kNEAAnyNumber,
            TGNumberFormat::kNELLimitMinMax, -1., 1.);

    // numerical entry
    fGtuEntry->Resize(40,20);

    fGarbage->Add(lay = new TGLayoutHints(kLHintsRight));
    h1->AddFrame(fGtuEntry, lay);


    fGarbage->Add(lay = new TGLayoutHints(kLHintsTop, 3, 7, 4, 1));
    v->AddFrame(h1, lay);
    
    // labels
    h2 = new TGCompositeFrame(v, 80, 20, kHorizontalFrame);   
    fGarbage->Add(h2);

    fGtuMinLabel = new TGLabel(h2, "-1");
    fGarbage->Add(lay = new TGLayoutHints(kLHintsLeft, 0, 1, -1, 0));
    h2->AddFrame(fGtuMinLabel, lay);

    fGtuMaxLabel = new TGLabel(h2, "+1");
    fGarbage->Add(lay = new TGLayoutHints(kLHintsLeft, 80, 3, -1, 0));
    h2->AddFrame(fGtuMaxLabel, lay);
    
    fGarbage->Add( lay = new TGLayoutHints(kLHintsTop, 0, 0, 0, 0));
    v->AddFrame(h2,lay);

    lay =  new TGLayoutHints(kLHintsTop);
    fGarbage->Add(lay);

    AddFrame(v, lay);

    // Counts ///////////////////////////////
    MakeTitle("Counts");

    h = new TGCompositeFrame(this, 80, 20, kHorizontalFrame);
    fCountsSlider = new TGHSlider(h, 1, 2, kCOUNTS_SLIDER);
    fCountsSlider->Resize(90,20);

    lay = new TGLayoutHints(kLHintsLeft);
    fGarbage->Add(lay);
    h->AddFrame(fCountsSlider, lay);
    
    fCountsEntry = new TGNumberEntry(h, 30, 5, kCOUNTS_NUMENTRY, 
            TGNumberFormat::kNESInteger,
            TGNumberFormat::kNEAPositive,
            TGNumberFormat::kNELLimitMinMax, 0., 50.);

    fCountsEntry->Resize(40,20);
    lay = new TGLayoutHints(kLHintsRight);
    h->AddFrame(fCountsEntry, lay);

    lay = new TGLayoutHints(kLHintsTop, 3, 7, 4, 1);
    fGarbage->Add(lay);
    AddFrame(h, lay);
    fGarbage->Add(h);

    MakeTitle("Various");
    // option related to HIST: some changes needed here! because of inconsistencies   
//    f15 = new TGCompositeFrame(this, 80, 20, kVerticalFrame); 
//    fMakeTimeInt = new TGCheckButton(f15, "Time Integral", kTIME_INTEGRAL);
//    fMakeTimeInt ->SetToolTipText("Draw the sum of all counts from gtu 0 to the current");
//    f15->AddFrame(fMakeTimeInt, new TGLayoutHints(kLHintsLeft, 6, 1, 1, 0));
//    AddFrame(f15, new TGLayoutHints(kLHintsTop, 1, 1, 0, -1)); 

    // Show Marker Checkbox: draw marker (or not)
    f7 = new TGCompositeFrame(this, 80, 20, kVerticalFrame);
    fAddGtuCount = new TGCheckButton(f7, "Gtu Counter", kGTU_COUNTER);
    fAddGtuCount ->SetToolTipText("Show/Hide the Gtu counter");
    f7->AddFrame(fAddGtuCount, new TGLayoutHints(kLHintsLeft, 6, 1, 1, 0));
    AddFrame(f7, new TGLayoutHints(kLHintsTop, 1, 1, 2, 0));


    // Show Marker Checkbox: draw marker (or not)
    f16 = new TGCompositeFrame(this, 80, 20, kVerticalFrame);
    fAddEmptyPixels = new TGCheckButton(f16, "Empty Pixels", kEMPTY_PIXELS);
    fAddEmptyPixels ->SetToolTipText("Show/Hide empty pixels");
    f16->AddFrame(fAddEmptyPixels, new TGLayoutHints(kLHintsLeft, 6, 1, 1, 0));
    AddFrame(f16, new TGLayoutHints(kLHintsTop, 1, 1, 2, 0));

    // Show Marker Checkbox: draw marker (or not)
    f17 = new TGCompositeFrame(this, 80, 20, kVerticalFrame);
    fAddOffPixels = new TGCheckButton(f17, "Off Pixels", kOFF_PIXELS);
    fAddOffPixels ->SetToolTipText("Show/Hide off pixels");
    f17->AddFrame(fAddOffPixels, new TGLayoutHints(kLHintsLeft, 6, 1, 1, 0));
    AddFrame(f17, new TGLayoutHints(kLHintsTop, 1, 1, 2, 0));

    // Show Marker Checkbox: draw marker (or not)
    f18 = new TGCompositeFrame(this, 80, 20, kVerticalFrame);
    fDrawNightGlow = new TGCheckButton(f18, "Paint NightGlow rate", kPAINT_NG);
    fDrawNightGlow->SetToolTipText("Paint NightGlow rate on the focal surface");
    f18->AddFrame(fDrawNightGlow, new TGLayoutHints(kLHintsLeft, 6, 1, 1, 0));
    AddFrame(f18, new TGLayoutHints(kLHintsTop, 1, 1, 2, 0));

       /*
       fPatternSelect = new TGedPatternSelect(f2, 1, kPATTERN);
       f2->AddFrame(fPatternSelect, new TGLayoutHints(kLHintsLeft, 1, 1, 1, 1));
       fPatternSelect->Associate(this);
       AddFrame(f2, new TGLayoutHints(kLHintsTop, 1, 1, 0, 0));
     */

    fTab = (TGTab *)(p->GetParent()->GetParent());

    CreateThresholdTab();
    CreateColorTab();

    //ConnectSignals2Slots();

    fTab->MapSubwindows();
    fTab->Layout();
    fTab->MapWindow();

    TClass *cl = EFocalSurfacePainter::Class();
    TGedElement *ge = new TGedElement;
    ge->fGedFrame = this;
    ge->fCanvas = 0;
    cl->GetEditorList()->Add(ge);
}

//_____________________________________________________________________________
 EFocalSurfacePainterEditor::~EFocalSurfacePainterEditor() {
    //
    // Destructor
    //
    TGFrameElement *el;
    TIter next(GetList());

    while ((el = (TGFrameElement *)next())) {
        if (!strcmp(el->fFrame->ClassName(), "TGCompositeFrame"))
            ((TGCompositeFrame *)el->fFrame)->Cleanup();
    }
    Cleanup();
}

//______________________________________________________________________________
 void EFocalSurfacePainterEditor::SetModel(TVirtualPad* pad, TObject* obj, Int_t) {
    // Pick up the used fill attributes.

    fModel = 0;
    fPad = 0;

    if (obj == 0 || !obj->InheritsFrom("EFocalSurfacePainter")) {
        SetActive(kFALSE);
        for (Int_t i=0; i < fTab->GetNumberOfTabs(); i++){
            if (fTab->GetTabContainer(i)==fColorContainer  || fTab->GetTabContainer(i)==fThresholdContainer) {
                fTab->GetTabContainer(i)->UnmapWindow();     // Hide the color tab if obj is not inherited from TH1 or 
                fTab->GetTabTab(i)->UnmapWindow();           // if a TH2, TH3 is drawn
                fTab->SetEnabled(i,kFALSE);                  // also disable is, then the current tab will be changed
            } 
        }
        return;
    }

    TGFrameElement *el;

    // calling the SetModel(initialization) of all editors in the BinTab
    TIter nextCol(fColor->GetList());
    while ((el = (TGFrameElement *) nextCol())) {
        if ((el->fFrame)->InheritsFrom("TGedFrame"))
            ((TGedFrame *)(el->fFrame))->SetModel(pad, obj, 0);
    } 

    // calling the SetModel(initialization) of all editors in the BinTab
    TIter nextTrig(fThreshold->GetList());
    while ((el = (TGFrameElement *) nextTrig())) {
        if ((el->fFrame)->InheritsFrom("TGedFrame"))
            ((TGedFrame *)(el->fFrame))->SetModel(pad, obj, 0);
    } 

    fModel = obj;
    fPad = pad;

    fPainter = dynamic_cast<EFocalSurfacePainter *>(fModel);

    fCurrentMapID = fPainter->GetCurrentMapID();
    fCurrentIntegral = fPainter->GetIntegral();
    fCurrentTrigger = fPainter->GetCurrentTrigger();

    if ( fTriggerCombo->GetNumberOfEntries() > 1 )
        fTriggerCombo->RemoveEntries(1,fTriggerCombo->GetNumberOfEntries()-1);
    if (fPainter->IsTriggerEnabled(kChipTrackingTrigger))
        fTriggerCombo->AddEntry("ChipTracking", (Int_t)kChipTrackingTrigger); 
    if (fPainter->IsTriggerEnabled(kChipTrackingTrigger0))
        fTriggerCombo->AddEntry("ChipTracking1", (Int_t)kChipTrackingTrigger0); 
    if (fPainter->IsTriggerEnabled(kChipTrackingTrigger1))
        fTriggerCombo->AddEntry("ChipTracking1", (Int_t)kChipTrackingTrigger1); 
    if (fPainter->IsTriggerEnabled(kChipTrackingTrigger2))
        fTriggerCombo->AddEntry("ChipTracking2", (Int_t)kChipTrackingTrigger2); 
    if (fPainter->IsTriggerEnabled(kChipTrackingTrigger3))
        fTriggerCombo->AddEntry("ChipTracking3", (Int_t)kChipTrackingTrigger3); 
    if (fPainter->IsTriggerEnabled(kChipTrackingTrigger4))
        fTriggerCombo->AddEntry("ChipTracking4", (Int_t)kChipTrackingTrigger4); 
    if (fPainter->IsTriggerEnabled(kSignalChipTrackingTrigger))
        fTriggerCombo->AddEntry("SignalChipTracking", (Int_t)kSignalChipTrackingTrigger);

    ERunParameters *runpars = fPainter->GetRunPars();

    Int_t rmin = (Int_t)runpars->GetPmtData().GetPmtSide();
    fViewRMinLabel->SetText(Form("%d mm", rmin));
    fViewRangeSlider->SetRange(rmin,1250);
    fViewRangeSlider->SetPosition((Int_t)fPainter->GetViewRange());

    fMapIDCombo->Select(fCurrentMapID);
    fIntegralCombo->Select(fCurrentIntegral);
    fTriggerCombo->Select(fCurrentTrigger);

    fThresholdSlider->SetRange(0,70);
    fThresholdSlider->SetPosition((Int_t)fPainter->GetAlpha());
    fAlphaEntry->SetLimits(TGNumberFormat::kNELLimitMinMax,0.,70.);
    fAlphaEntry->SetIntNumber((Int_t)fPainter->GetAlpha());

    fGtuSlider->SetRange(fPainter->GetFirstGtu(),fPainter->GetLastGtu());
    fGtuSlider->SetPosition(fPainter->GetGtu());
    fGtuEntry->SetLimits(TGNumberFormat::kNELLimitMinMax,-1,fPainter->GetLastGtu());
    fGtuEntry->SetIntNumber(fPainter->GetGtu());
    fGtuMinLabel->SetText(Form("%d",fPainter->GetFirstGtu()));
    fGtuMaxLabel->SetText(Form("%d",fPainter->GetLastGtu()));

    fCountsSlider->SetRange(1,100);
    fCountsSlider->SetPosition(fPainter->GetMaxCounts());
    fCountsEntry->SetLimits(TGNumberFormat::kNELLimitMinMax,1,50);
    fCountsEntry->SetIntNumber(fPainter->GetMaxCounts());

    if ( !fPainter->IsApplyThreshold() ) {
        fThresholdType->SetButton(kNONE);
    } else if ( fPainter->IsApplyThreshold() && fPainter->IsAbsoluteThreshold() ) {
        fThresholdType->SetButton(kABSOLUTE);
    } else if ( fPainter->IsApplyThreshold() && !fPainter->IsAbsoluteThreshold() ){
        fThresholdType->SetButton(kRELATIVE);
    }

    //    fMakeTimeInt->SetState( fPainter->IsShowTimeIntegral() ? kButtonDown : kButtonUp );
    fAddGtuCount->SetState( fPainter->IsShowGtuCounter() ? kButtonDown : kButtonUp );
    fAddEmptyPixels->SetState( fPainter->IsShowEmptyPixels() ? kButtonDown : kButtonUp );
    fAddOffPixels->SetState( fPainter->IsShowOffPixels() ? kButtonDown : kButtonUp );
    fDrawNightGlow->SetState( fPainter->IsDrawNightGlow() ? kButtonDown : kButtonUp );

    Color_t c = fPainter->GetPmtColorHit();
    Pixel_t p = TColor::Number2Pixel(c);
    fPmtColorSelect->SetColor(p);

    c = fPainter->GetPmtColorEmpty();
    p = TColor::Number2Pixel(c);
    fEmptyPmtColorSelect->SetColor(p);

    /*
       Style_t s = fAttFill->GetFillStyle();
       fPatternSelect->SetPattern(s);
     */
    for (Int_t i=1; i < fTab->GetNumberOfTabs(); i++) {
        if (fTab->GetTabContainer(i)==fColorContainer || fTab->GetTabContainer(i)==fThresholdContainer ) {
            fTab->GetTabContainer(i)->MapWindow();
            fTab->GetTabTab(i)->MapWindow();
            fTab->SetEnabled(i, kTRUE);  
        } else fTab->SetEnabled(i,kFALSE);
    }
    if (!fTab->IsEnabled(fTab->GetCurrent())) fTab->SetTab(0);

    fTab->Layout();

    if (fInit) ConnectSignals2Slots();
    fTab->SetEnabled(1, kTRUE);

    SetActive(kTRUE);
}
//______________________________________________________________________________
 void EFocalSurfacePainterEditor::ConnectSignals2Slots() {

    fMapIDCombo->Connect("Selected(Int_t)", "EFocalSurfacePainterEditor", this, "DoMapID(Int_t)"); 
    fIntegralCombo->Connect("Selected(Int_t)", "EFocalSurfacePainterEditor", this, "DoIntegral(Int_t)");
    fTriggerCombo->Connect("Selected(Int_t)", "EFocalSurfacePainterEditor", this, "DoTrigger(Int_t)");
    fGtuSlider->Connect("PositionChanged(Int_t)","EFocalSurfacePainterEditor", this,"DoGtuSliderMoved(Int_t)");
    fGtuEntry->Connect("ValueSet(Long_t)","EFocalSurfacePainterEditor", this,"DoGtuEntrySet()");
    (fGtuEntry->GetNumberEntry())->Connect("ReturnPressed()","EFocalSurfacePainterEditor", this,"DoGtuEntrySet()");
    fViewRangeSlider->Connect("PositionChanged(Int_t)","EFocalSurfacePainterEditor", this,"DoViewRangeSliderMoved(Int_t)");
    fCountsSlider->Connect("PositionChanged(Int_t)","EFocalSurfacePainterEditor", this,"DoCountsSliderMoved(Int_t)");
    fCountsEntry->Connect("ValueSet(Long_t)","EFocalSurfacePainterEditor", this,"DoCountsEntrySet()");
    (fCountsEntry->GetNumberEntry())->Connect("ReturnPressed()","EFocalSurfacePainterEditor", this,"DoCountsEntrySet()");
    fThresholdSlider->Connect("PositionChanged(Int_t)","EFocalSurfacePainterEditor", this,"DoThresholdSliderMoved(Int_t)");
    fAlphaEntry->Connect("ValueSet(Long_t)","EFocalSurfacePainterEditor", this,"DoAlphaEntrySet()");
    (fAlphaEntry->GetNumberEntry())->Connect("ReturnPressed()","EFocalSurfacePainterEditor", this,"DoAlphaEntrySet()");

    fViewRangeSlider->Connect("Released()","EFocalSurfacePainterEditor", this,"Update()");
    fAddGtuCount->Connect("Toggled(Bool_t)", "EFocalSurfacePainterEditor", this, "DoAddGtuCount(Bool_t)");
    fAddEmptyPixels->Connect("Toggled(Bool_t)", "EFocalSurfacePainterEditor", this, "DoAddEmptyPixels(Bool_t)");
    fAddOffPixels->Connect("Toggled(Bool_t)", "EFocalSurfacePainterEditor", this, "DoAddOffPixels(Bool_t)");
    fDrawNightGlow->Connect("Toggled(Bool_t)", "EFocalSurfacePainterEditor", this, "DoDrawNightGlow(Bool_t)");
    fThresholdType->Connect("Clicked(Int_t)", "EFocalSurfacePainterEditor", this, "DoThreshold(Threshold_t)");
    fPmtColorSelect->Connect("ColorSelected(Pixel_t)","EFocalSurfacePainterEditor",this,"DoPmtFillColor(Pixel_t)");
    fEmptyPmtColorSelect->Connect("ColorSelected(Pixel_t)","EFocalSurfacePainterEditor",this,"DoEmptyPmtFillColor(Pixel_t)");
    fInit = kFALSE;
}


//______________________________________________________________________________
 TGComboBox* EFocalSurfacePainterEditor::BuildMapIDCombo(TGFrame* parent, Int_t id) {
    // Marker size combobox.

    char a[][100] = {"kFeeHits","kFeeSignals","kCellHits"};
    TGComboBox *c = new TGComboBox(parent, id);

    for (int i = 1; i <= 3; i++) {
        c->AddEntry(a[i-1], i);
    }

    return c;
}

//______________________________________________________________________________
 TGComboBox* EFocalSurfacePainterEditor::BuildIntegralCombo(TGFrame* parent, Int_t id) {
    // Marker size combobox.

    char a[][100] = {"kNone","kSum","kMax"};
    TGComboBox *c = new TGComboBox(parent, id);

    for (int i = 1; i <= 3; i++) {
        c->AddEntry(a[i-1], i);
    }

    return c;
}

//______________________________________________________________________________
 TGComboBox* EFocalSurfacePainterEditor::BuildChipTriggerCombo(TGFrame* parent, Int_t id) {
    // Marker size combobox.

    TGComboBox *c = new TGComboBox(parent, id);
    c->AddEntry("No Trigger", 0);

    return c;
}

//______________________________________________________________________________
 void EFocalSurfacePainterEditor::DoMapID( Int_t id ) {
    //
    // Set map to paint
    //
    
    fPainter->SetCurrentMapID( id );
    Update();
}

//______________________________________________________________________________
 void EFocalSurfacePainterEditor::DoIntegral(Int_t id) {

    fPainter->SetIntegral(id);
    Update();
}

//______________________________________________________________________________
 void EFocalSurfacePainterEditor::DoTrigger(Int_t id) {
    fPainter->ApplyTriggerThreshold((ETriggerTypeIdentifier)id);
    Float_t val = fPainter->GetAlpha();
    fPainter->IsAbsoluteThreshold() ? fThresholdType->SetButton(kABSOLUTE) : fThresholdType->SetButton(kRELATIVE); 
    if (id==0 ) fThresholdType->SetButton(kNONE);
    fThresholdSlider->SetPosition( (Int_t)val*10 );
    fAlphaEntry->SetIntNumber( (Int_t)val*10 );
    Update();
}

//______________________________________________________________________________
 void EFocalSurfacePainterEditor::DoThresholdSliderMoved(Int_t pos) {
    fPainter->SetAlpha( pos/10 );
    fAlphaEntry->SetIntNumber( pos );
    fPainter->IsAbsoluteThreshold() ? fThresholdType->SetButton(kABSOLUTE) : fThresholdType->SetButton(kRELATIVE); 
    fTriggerCombo->Select(0);
    Update();
}

//______________________________________________________________________________
 void EFocalSurfacePainterEditor::DoAlphaEntrySet() {
    Float_t val = fAlphaEntry->GetNumberEntry()->GetIntNumber();
    fPainter->SetAlpha( val/10 );
    fThresholdSlider->SetPosition( (Int_t)val );
    fPainter->IsAbsoluteThreshold() ? fThresholdType->SetButton(kABSOLUTE) : fThresholdType->SetButton(kRELATIVE); 
    fTriggerCombo->Select(0);
    Update();
}

//______________________________________________________________________________
 void EFocalSurfacePainterEditor::DoGtuSliderMoved( Int_t pos ) {
    //
    //
    //
    
    fPainter->SetGtu( pos );
    fGtuEntry->SetIntNumber( pos );
    Update();
}

//______________________________________________________________________________
 void EFocalSurfacePainterEditor::DoGtuEntrySet() {
    //
    //
    //
    
    Int_t val = fGtuEntry->GetNumberEntry()->GetIntNumber();
    fPainter->SetGtu( val );
    fGtuSlider->SetPosition( val );
    Update();
}

//______________________________________________________________________________
 void EFocalSurfacePainterEditor::DoCountsSliderMoved( Int_t pos ) {
    //
    //
    //
    
    fPainter->SetMaxCounts( pos );
    fCountsEntry->SetIntNumber( pos );
    Update();
}

//______________________________________________________________________________
 void EFocalSurfacePainterEditor::DoCountsEntrySet() {
    //
    //
    //
    
    Int_t val = fCountsEntry->GetNumberEntry()->GetIntNumber();
    fPainter->SetMaxCounts( val );
    fCountsSlider->SetPosition( val );
    Update();
}

//______________________________________________________________________________
 void EFocalSurfacePainterEditor::DoViewRangeSliderMoved( Int_t pos ) {
    //
    //
    //
    
    fPainter->SetViewRange( (Float_t)pos );
//    Update();
}

//______________________________________________________________________________
 void EFocalSurfacePainterEditor::DoAddGtuCount(Bool_t on) {

    fPainter->SetShowGtuCounter(on);
    Update();
}

//______________________________________________________________________________
 void EFocalSurfacePainterEditor::DoAddEmptyPixels(Bool_t on) {

    fPainter->SetShowEmptyPixels(on);
    Update();
}

//______________________________________________________________________________
 void EFocalSurfacePainterEditor::DoAddOffPixels(Bool_t on) {

    fPainter->SetShowOffPixels(on);
    Update();
}

//______________________________________________________________________________
 void EFocalSurfacePainterEditor::DoDrawNightGlow(Bool_t on) {
    
    fPainter->SetDrawNightGlow(on);
    Update();
}


//______________________________________________________________________________
 void EFocalSurfacePainterEditor::DoThreshold(Threshold_t th) {
    
    if ( th==kNONE ) { 
        fPainter->SetApplyThreshold(kFALSE); 
        fThresholdSlider->SetPosition(0);
        fAlphaEntry->SetIntNumber(0);
    } else if ( th==kABSOLUTE ) { 
        fPainter->SetApplyThreshold(kTRUE); 
        fPainter->SetAbsoluteThreshold(kTRUE);
    } else if ( th==kRELATIVE ) { 
        fPainter->SetApplyThreshold(kTRUE); 
        fPainter->SetAbsoluteThreshold(kFALSE);
    }
    fTriggerCombo->Select(0);
    Update();
}

//______________________________________________________________________________
 void EFocalSurfacePainterEditor::DoPmtFillColor(Pixel_t color) {
    fPainter->SetPmtColorHit(TColor::GetColor(color));
    Update();
}

//______________________________________________________________________________
 void EFocalSurfacePainterEditor::DoEmptyPmtFillColor(Pixel_t color) {
    fPainter->SetPmtColorEmpty(TColor::GetColor(color));
    Update();
}

//______________________________________________________________________________
 void EFocalSurfacePainterEditor::CreateColorTab() {
    // Creates the BinTab

    fColorContainer = fTab->AddTab("Color");
    fColor = new TGCompositeFrame(fColorContainer, 80, 20, kVerticalFrame);
    fColor->AddFrame(new TGedNameFrame(fColor, 1000), new TGLayoutHints(kLHintsTop | kLHintsExpandX,0, 0, 2, 2));

    TGCompositeFrame *title1 = new TGCompositeFrame(fColor, 145, 10, kHorizontalFrame | 
            kLHintsExpandX | kFixedWidth | kOwnBackground);
    title1->AddFrame(new TGLabel(title1, "Pmts colors"), new TGLayoutHints(kLHintsLeft, 1, 1, 0, 0));
    title1->AddFrame(new TGHorizontal3DLine(title1),
            new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 7));
    fColor->AddFrame(title1, new TGLayoutHints(kLHintsTop, 0, 0, 2, 0));

    // pmt color selector
    TGCompositeFrame *f3 = new TGCompositeFrame(fColor, 80, 20, kHorizontalFrame);
    fPmtColorSelect = new TGColorSelect(f3, 0, kPMTCOLOR);
    f3->AddFrame(fPmtColorSelect, new TGLayoutHints(kLHintsLeft, 1, 1, 1, 1));
//    fColor->AddFrame(f3, new TGLayoutHints(kLHintsTop, 1, 1, 0, 0));
    
    // pmt color selector
    fEmptyPmtColorSelect = new TGColorSelect(f3, 0, kPMTOFFCOLOR);
    f3->AddFrame(fEmptyPmtColorSelect, new TGLayoutHints(kLHintsLeft, 1, 1, 1, 1));
    fColor->AddFrame(f3, new TGLayoutHints(kLHintsTop, 1, 1, 0, 0));

    fColorContainer->AddFrame(fColor, new TGLayoutHints(kLHintsTop | kLHintsExpandX, 0, 0, 2, 2));
}

//_______________________________________________________________________________
 void EFocalSurfacePainterEditor::CreateThresholdTab() {
    //
    // Create the threshold tab in the editor
    //
    TGCompositeFrame *h1, *h2, *f3, *f8, *title1, *title2;
    fThresholdContainer = fTab->AddTab("Threshold");

    fThreshold = new TGCompositeFrame(fThresholdContainer, 80, 20, kVerticalFrame);   
    fThreshold->AddFrame(new TGedNameFrame(fThreshold, 1000), new TGLayoutHints(kLHintsTop | kLHintsExpandX | kLHintsExpandY, 0, 0, 2, 2));
    title1 = new TGCompositeFrame(fThreshold, 145, 10, kHorizontalFrame | kLHintsExpandX | kFixedWidth | kOwnBackground);
    title1->AddFrame(new TGLabel(title1, "Alpha"), new TGLayoutHints(kLHintsLeft, 1, 1, 0, 0));
    title1->AddFrame(new TGHorizontal3DLine(title1), new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 7));
    fThreshold->AddFrame(title1, new TGLayoutHints(kLHintsTop, 0, 0, 2, 0));

    h1 = new TGCompositeFrame(fThreshold, 80, 20, kHorizontalFrame);
    fThresholdSlider = new TGHSlider(h1, 1, 2, kTHRES_SLIDER);
    fThresholdSlider->Resize(90,20);

    h1->AddFrame(fThresholdSlider, new TGLayoutHints(kLHintsLeft, 1, 1, 2, 0));
//    fThreshold->AddFrame(h1, new TGLayoutHints(kLHintsTop, 1, 1, 0, 0));
    
    fAlphaEntry = new TGNumberEntry(h1, -1, 5, kTHRES_NUMENTRY, 
            TGNumberFormat::kNESRealOne,
            TGNumberFormat::kNEAPositive,
            TGNumberFormat::kNELLimitMinMax, 0., 70.);

    fAlphaEntry->Resize(50,20);
    h1->AddFrame(fAlphaEntry, new TGLayoutHints(kLHintsRight));

    fThreshold->AddFrame(h1, new TGLayoutHints(kLHintsTop, 3, 7, 4, 1));

    h2 = new TGCompositeFrame(fThreshold, 80, 20, kHorizontalFrame);   

    fAlphaMinLabel = new TGLabel(h2, "0");
    h2->AddFrame(fAlphaMinLabel, new TGLayoutHints(kLHintsLeft, 10, 1, -1, 0));

    fAlphaMaxLabel = new TGLabel(h2, "7");
    h2->AddFrame(fAlphaMaxLabel, new TGLayoutHints(kLHintsLeft, 90, 3, -1, 0));

    fThreshold->AddFrame(h2, new TGLayoutHints(kLHintsTop, 1, 1, 0, 0));

    f8 = new TGCompositeFrame(fThreshold, 80, 20, kVerticalFrame);
    fThresholdType = new TGButtonGroup(f8,"Threshold type", kVerticalFrame);
    fThNone = new TGRadioButton(fThresholdType, new TGHotString("&None"),kNONE);
    fThAbs = new TGRadioButton(fThresholdType, new TGHotString("&Absolute"),kABSOLUTE);
    fThRel = new TGRadioButton(fThresholdType, new TGHotString("R&elative"),kRELATIVE);
    fThresholdType->Show();
    f8->AddFrame(fThresholdType, new TGLayoutHints(kLHintsLeft, 6, 1, 1, 0));
    fThreshold->AddFrame(f8, new TGLayoutHints(kLHintsTop, 1, 1, 0, 0));
    
    title2 = new TGCompositeFrame(fThreshold, 145, 10, kHorizontalFrame | kLHintsExpandX | kFixedWidth | kOwnBackground);
    title2->AddFrame(new TGLabel(title2, "Trigger"), new TGLayoutHints(kLHintsLeft, 1, 1, 0, 0));
    title2->AddFrame(new TGHorizontal3DLine(title2), new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 7));
    fThreshold->AddFrame(title2, new TGLayoutHints(kLHintsTop, 0, 0, 2, 0));
    
    f3 = new TGCompositeFrame(fThresholdContainer, 80, 20, kHorizontalFrame);
    fTriggerCombo = BuildChipTriggerCombo(f3, kTRIGGER);
    f3->AddFrame(fTriggerCombo, new TGLayoutHints(kLHintsLeft, 3, 1, 0, 0));
    fTriggerCombo->Resize(145, 20);
    fTriggerCombo->Associate(fThreshold);
    fThreshold->AddFrame(f3, new TGLayoutHints(kLHintsTop, 1, 1, 1, 0));

    fThresholdContainer->AddFrame(fThreshold, new TGLayoutHints(kLHintsTop | kLHintsExpandX, 0, 0, 2, 2));



}
About Us | EUSO Official Website | Web pages created by Roberto Pesce and Alessandro Thea - Last Update Wed Nov 16 16:57:39 2005 Wed Nov 16 16:29:22 2005