#include "AliEveTRDModule.h"
#include "AliEveTRDModuleImp.h"
#include "TGButton.h"
#include "TGColorSelect.h"
#include "TGNumberEntry.h"
#include "TG3DLine.h"
#include "TEveManager.h"
ClassImp(AliEveTRDModule)
ClassImp(AliEveTRDModuleEditor)
AliEveTRDModule::AliEveTRDModule(const char *typ, Int_t det) :
TNamed(Form("%s%03d", typ, det), ""),
fLoadHits (kFALSE),
fRnrHits (kTRUE),
fLoadDigits (kFALSE),
fRnrDigits (kTRUE),
fDigitsLog (kFALSE),
fDigitsBox (kFALSE),
fDigitsNeedRecompute (kTRUE),
fLoadRecPoints (kFALSE),
fRnrRecPoints (kTRUE),
fLoadTracklets (kFALSE),
fRnrTracklets (kTRUE),
fDet (det),
fDigitsThreshold (15)
{
}
AliEveTRDModuleEditor::AliEveTRDModuleEditor(const TGWindow* p, Int_t width, Int_t height,
UInt_t options, Pixel_t back) :
TGedFrame(p, width, height, options | kVerticalFrame, back),
fM (0),
fDisplayHits(0),
fHitsColor(0),
fDisplayDigits(0), fToggleLog(0), fToggleBox(0), fThreshold(0),
fThresValue(0),
fDisplayClusters(0),
fClustersColor(0),
fDisplayTracks(0)
{
MakeTitle("TRD Detector");
TGGroupFrame *fGroupFrame615 = new TGGroupFrame(this,"Hits");
fDisplayHits = new TGCheckButton(fGroupFrame615,"Display");
fDisplayHits->SetToolTipText("Display hits attached to chamber");
fDisplayHits->SetState(kButtonDown);
fGroupFrame615->AddFrame(fDisplayHits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
fDisplayHits->Connect("Clicked()",
"AliEveTRDModuleEditor", this, "UpdateChamber()");
ULong_t lColPar1;
gClient->GetColorByName("#ff00ff", lColPar1);
fHitsColor = new TGColorSelect(fGroupFrame615, lColPar1, -1);
fGroupFrame615->AddFrame(fHitsColor, new TGLayoutHints(kLHintsLeft | kLHintsCenterX | kLHintsTop | kLHintsCenterY,2,2,2,2));
fHitsColor->Connect("ColorSelected(Pixel_t)",
"AliEveTRDModuleEditor", this, "UpdateHits(Pixel_t)");
fGroupFrame615->SetLayoutManager(new TGVerticalLayout(fGroupFrame615));
AddFrame(fGroupFrame615, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
TGGroupFrame *fGroupFrame636 = new TGGroupFrame(this,"Digits");
TGVerticalFrame *fVerticalFrame538 = new TGVerticalFrame(fGroupFrame636,68,63,kVerticalFrame);
fDisplayDigits = new TGCheckButton(fVerticalFrame538,"Display");
fDisplayDigits->SetState(kButtonDown);
fDisplayDigits->SetToolTipText("Toggle display digits attached to chamber");
fVerticalFrame538->AddFrame(fDisplayDigits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
fDisplayDigits->Connect("Clicked()",
"AliEveTRDModuleEditor", this, "UpdateChamber()");
fToggleLog = new TGCheckButton(fVerticalFrame538,"Log");
fToggleLog->SetState(kButtonUp);
fToggleLog->SetToolTipText("Toggle logarithmic representation of digits");
fVerticalFrame538->AddFrame(fToggleLog, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
fToggleLog->Connect("Clicked()",
"AliEveTRDModuleEditor", this, "ModifyDigitsView()");
fToggleBox = new TGCheckButton(fVerticalFrame538,"Box");
fToggleBox->SetState(kButtonUp);
fToggleBox->SetToolTipText("Toggle display digits as boxes");
fVerticalFrame538->AddFrame(fToggleBox, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
fToggleBox->Connect("Clicked()",
"AliEveTRDModuleEditor", this, "ModifyDigitsView()");
fGroupFrame636->AddFrame(fVerticalFrame538, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
TGVertical3DLine *fVertical3DLine773 = new TGVertical3DLine(fGroupFrame636,8,63);
fGroupFrame636->AddFrame(fVertical3DLine773, new TGLayoutHints(kLHintsLeft | kLHintsCenterX | kLHintsTop | kLHintsExpandY,2,2,2,2));
TGVerticalFrame *fVerticalFrame543 = new TGVerticalFrame(fGroupFrame636,81,47,kVerticalFrame);
fThreshold = new TGCheckButton(fVerticalFrame543, "Threshold");
fThreshold->SetToolTipText("Toggle threshold updating display");
fVerticalFrame543->AddFrame(fThreshold, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
fThresValue = new TGNumberEntry(fVerticalFrame543, (Int_t)10, 5, -1, TGNumberFormat::kNESInteger, TGNumberFormat::kNEAPositive, TGNumberFormat::kNELLimitMinMax, 0, 1024);
fThresValue->Connect("ValueSet(Long_t)",
"AliEveTRDModuleEditor", this, "SetThreshold(Long_t)");
fVerticalFrame543->AddFrame(fThresValue, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
fGroupFrame636->AddFrame(fVerticalFrame543, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
fGroupFrame636->SetLayoutManager(new TGHorizontalLayout(fGroupFrame636));
AddFrame(fGroupFrame636, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
TGGroupFrame *fGroupFrame649 = new TGGroupFrame(this,"Clusters");
fDisplayClusters = new TGCheckButton(fGroupFrame649,"Display");
fDisplayClusters->SetToolTipText("Display clusters attached to chamber");
fGroupFrame649->AddFrame(fDisplayClusters, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
fDisplayClusters->SetState(kButtonDown);
fDisplayClusters->Connect("Clicked()",
"AliEveTRDModuleEditor", this, "UpdateChamber()");
ULong_t lColPar2;
gClient->GetColorByName("#ff00ff", lColPar2);
fClustersColor = new TGColorSelect(fGroupFrame649, lColPar2, -1);
fGroupFrame649->AddFrame(fClustersColor, new TGLayoutHints(kLHintsLeft | kLHintsCenterX | kLHintsTop | kLHintsCenterY,2,2,2,2));
fClustersColor->Connect("ColorSelected(Pixel_t)",
"AliEveTRDModuleEditor", this, "UpdateClusters(Pixel_t)");
fGroupFrame649->SetLayoutManager(new TGVerticalLayout(fGroupFrame649));
AddFrame(fGroupFrame649, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
TGGroupFrame *fGroupFrame676 = new TGGroupFrame(this,"Tracklets");
fDisplayTracks = new TGCheckButton(fGroupFrame676,"Display");
fDisplayTracks->SetToolTipText("Display MCM tracklets attached to chamber");
fGroupFrame676->AddFrame(fDisplayTracks, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
fDisplayTracks->SetState(kButtonDown);
fDisplayTracks->Connect("Clicked()",
"AliEveTRDModuleEditor", this, "UpdateChamber()");
fGroupFrame676->SetLayoutManager(new TGVerticalLayout(fGroupFrame676));
AddFrame(fGroupFrame676, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
}
void AliEveTRDModuleEditor::SetModel(TObject* obj)
{
if(!(fM = dynamic_cast<AliEveTRDModule*>(obj))) return;
if(AliEveTRDNode *node = dynamic_cast<AliEveTRDNode*>(fM)) node->UpdateNode();
fDisplayHits->SetEnabled(fM->fLoadHits);
if(fM->fLoadHits) fDisplayHits->SetState( fM->fRnrHits ? kButtonDown : kButtonUp);
fDisplayDigits->SetEnabled(fM->fLoadDigits);
fToggleLog->SetEnabled(fM->fLoadDigits);
fToggleBox->SetEnabled(fM->fLoadDigits);
fThreshold->SetEnabled(fM->fLoadDigits);
fThresValue->GetNumberEntry()->SetEnabled(fM->fLoadDigits);
fThresValue->GetButtonDown()->SetEnabled(fM->fLoadDigits);
fThresValue->GetButtonUp()->SetEnabled(fM->fLoadDigits);
fThresValue->SetIntNumber(fM->fDigitsThreshold);
if(fM->fLoadDigits){
fDisplayDigits->SetState(fM->fRnrDigits ? kButtonDown : kButtonUp);
fToggleLog->SetState(fM->fDigitsLog ? kButtonDown : kButtonUp);
fToggleBox->SetState(fM->fDigitsBox ? kButtonDown : kButtonUp);
fThreshold->SetState(fM->fDigitsNeedRecompute ? kButtonDown : kButtonUp);
}
if(fM->fLoadRecPoints) fDisplayClusters->SetState(fM->fRnrRecPoints ? kButtonDown : kButtonUp);
else fDisplayClusters->SetEnabled(kFALSE);
if(fM->fLoadTracklets) fDisplayTracks->SetState(fM->fRnrTracklets ? kButtonDown : kButtonUp);
else fDisplayTracks->SetEnabled(kFALSE);
}
void AliEveTRDModuleEditor::ModifyDigitsView()
{
fM->fDigitsNeedRecompute = kTRUE;
UpdateChamber();
}
void AliEveTRDModuleEditor::SetThreshold(Long_t tres)
{
if(!fM->fLoadDigits) return;
fM->fDigitsThreshold = (tres == 0) ? (int)fThresValue->GetNumber():tres;
fM->fDigitsNeedRecompute = fThreshold->IsDown();
UpdateChamber();
}
void AliEveTRDModuleEditor::UpdateChamber()
{
fM->fRnrHits = kFALSE;
if(fDisplayHits->IsDown()) fM->fRnrHits = kTRUE;
fM->fRnrDigits = kFALSE;
if(fDisplayDigits->IsDown()){
fM->fRnrDigits = kTRUE;
if(fToggleLog->IsDown()) fM->fDigitsLog = kTRUE;
else fM->fDigitsLog = kFALSE;
if(fToggleBox->IsDown()) fM->fDigitsBox = kTRUE;
else fM->fDigitsBox = kFALSE;
}
fM->fRnrRecPoints = kFALSE;
if(fDisplayClusters->IsDown()) fM->fRnrRecPoints = kTRUE;
fM->fRnrTracklets = kFALSE;
if(fDisplayTracks->IsDown()) fM->fRnrTracklets = kTRUE;
AliEveTRDNode *node(NULL);
if((node = dynamic_cast<AliEveTRDNode*>(fM))) node->UpdateLeaves();
gEve->Redraw3D();
}
void AliEveTRDModuleEditor::UpdateClusters(Pixel_t )
{
}
void AliEveTRDModuleEditor::UpdateHits(Pixel_t )
{
}