2 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
4 /**************************************************************************
5 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
6 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for *
7 * full copyright notice. *
8 **************************************************************************/
9 #include "AliEveTRDModule.h"
10 #include "AliEveTRDModuleImp.h"
13 #include "TGColorSelect.h"
14 #include "TGNumberEntry.h"
19 #include "TEveManager.h"
20 #include "TEveTrack.h"
23 ClassImp(AliEveTRDModule)
24 ClassImp(AliEveTRDModuleEditor)
26 //________________________________________________________
27 AliEveTRDModule::AliEveTRDModule(const char *typ, Int_t det) :
28 TNamed(Form("%s%03d", typ, det), ""), fDet(det)
38 fLoadRecPoints = kFALSE;
39 fRnrRecPoints = kTRUE;
41 fLoadTracklets = kFALSE;
42 fRnrTracklets = kTRUE;
44 kDigitsNeedRecompute = kTRUE;
46 fDigitsThreshold = 15;
51 ///////////////////////////////////////////////////////////
52 ///////////// AliEveTRDModuleEditor /////////////////////
53 ///////////////////////////////////////////////////////////
55 //________________________________________________________
56 AliEveTRDModuleEditor::AliEveTRDModuleEditor(const TGWindow* p, Int_t width, Int_t height, UInt_t options, Pixel_t back) : TGedFrame(p, width, height, options | kVerticalFrame, back)
58 MakeTitle("TRD Detector");
61 TGGroupFrame *fGroupFrame615 = new TGGroupFrame(this,"Hits");
62 fDisplayHits = new TGCheckButton(fGroupFrame615,"Display");
63 fDisplayHits->SetToolTipText("Display hits attached to chamber");
64 fDisplayHits->SetState(kButtonDown);
65 fGroupFrame615->AddFrame(fDisplayHits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
66 fDisplayHits->Connect("Clicked()",
67 "AliEveTRDModuleEditor", this, "UpdateChamber()");
69 // color select widget
71 gClient->GetColorByName("#ff00ff", ColPar1);
72 fHitsColor = new TGColorSelect(fGroupFrame615, ColPar1, -1);
74 fGroupFrame615->AddFrame(fHitsColor, new TGLayoutHints(kLHintsLeft | kLHintsCenterX | kLHintsTop | kLHintsCenterY,2,2,2,2));
75 fHitsColor->Connect("ColorSelected(Pixel_t)",
76 "AliEveTRDModuleEditor", this, "UpdateHits(Pixel_t)");
78 fGroupFrame615->SetLayoutManager(new TGVerticalLayout(fGroupFrame615));
79 AddFrame(fGroupFrame615, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
81 // "Digits" group frame
82 TGGroupFrame *fGroupFrame636 = new TGGroupFrame(this,"Digits");
83 TGVerticalFrame *fVerticalFrame538 = new TGVerticalFrame(fGroupFrame636,68,63,kVerticalFrame);
84 fDisplayDigits = new TGCheckButton(fVerticalFrame538,"Display");
85 fDisplayDigits->SetState(kButtonDown);
86 fDisplayDigits->SetToolTipText("Toggle display digits attached to chamber");
87 fVerticalFrame538->AddFrame(fDisplayDigits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
88 fDisplayDigits->Connect("Clicked()",
89 "AliEveTRDModuleEditor", this, "UpdateChamber()");
90 fToggleLog = new TGCheckButton(fVerticalFrame538,"Log");
91 fToggleLog->SetState(kButtonUp);
92 fToggleLog->SetToolTipText("Toggle logarithmic representation of digits");
93 fVerticalFrame538->AddFrame(fToggleLog, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
94 fToggleLog->Connect("Clicked()",
95 "AliEveTRDModuleEditor", this, "ModifyDigitsView()");
97 fToggleBox = new TGCheckButton(fVerticalFrame538,"Box");
98 fToggleBox->SetState(kButtonUp);
99 fToggleBox->SetToolTipText("Toggle display digits as boxes");
100 fVerticalFrame538->AddFrame(fToggleBox, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
101 fToggleBox->Connect("Clicked()",
102 "AliEveTRDModuleEditor", this, "ModifyDigitsView()");
103 fGroupFrame636->AddFrame(fVerticalFrame538, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
105 TGVertical3DLine *fVertical3DLine773 = new TGVertical3DLine(fGroupFrame636,8,63);
106 fGroupFrame636->AddFrame(fVertical3DLine773, new TGLayoutHints(kLHintsLeft | kLHintsCenterX | kLHintsTop | kLHintsExpandY,2,2,2,2));
109 TGVerticalFrame *fVerticalFrame543 = new TGVerticalFrame(fGroupFrame636,81,47,kVerticalFrame);
110 fThreshold = new TGCheckButton(fVerticalFrame543, "Threshold");
111 fThreshold->SetToolTipText("Toggle threshold updating display");
112 fVerticalFrame543->AddFrame(fThreshold, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
113 fThresValue = new TGNumberEntry(fVerticalFrame543, (Int_t)10, 5, -1, TGNumberFormat::kNESInteger, TGNumberFormat::kNEAPositive, TGNumberFormat::kNELLimitMinMax, 0, 1024);
114 fThresValue->Connect("ValueSet(Long_t)",
115 "AliEveTRDModuleEditor", this, "SetThreshold(Long_t)");
116 fVerticalFrame543->AddFrame(fThresValue, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
118 fGroupFrame636->AddFrame(fVerticalFrame543, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
120 fGroupFrame636->SetLayoutManager(new TGHorizontalLayout(fGroupFrame636));
121 AddFrame(fGroupFrame636, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
123 // "Clusters" group frame
124 TGGroupFrame *fGroupFrame649 = new TGGroupFrame(this,"Clusters");
125 fDisplayClusters = new TGCheckButton(fGroupFrame649,"Display");
126 fDisplayClusters->SetToolTipText("Display clusters attached to chamber");
127 fGroupFrame649->AddFrame(fDisplayClusters, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
128 fDisplayClusters->SetState(kButtonDown);
129 fDisplayClusters->Connect("Clicked()",
130 "AliEveTRDModuleEditor", this, "UpdateChamber()");
132 // color select widget
134 gClient->GetColorByName("#ff00ff", ColPar2);
135 fClustersColor = new TGColorSelect(fGroupFrame649, ColPar2, -1);
137 fGroupFrame649->AddFrame(fClustersColor, new TGLayoutHints(kLHintsLeft | kLHintsCenterX | kLHintsTop | kLHintsCenterY,2,2,2,2));
138 fClustersColor->Connect("ColorSelected(Pixel_t)",
139 "AliEveTRDModuleEditor", this, "UpdateClusters(Pixel_t)");
141 fGroupFrame649->SetLayoutManager(new TGVerticalLayout(fGroupFrame649));
142 AddFrame(fGroupFrame649, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
144 // "Tracks" group frame
145 TGGroupFrame *fGroupFrame676 = new TGGroupFrame(this,"Tracklets");
146 fDisplayTracks = new TGCheckButton(fGroupFrame676,"Display");
147 fDisplayTracks->SetToolTipText("Display MCM tracklets attached to chamber");
148 fGroupFrame676->AddFrame(fDisplayTracks, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
149 fDisplayTracks->SetState(kButtonDown);
150 fDisplayTracks->Connect("Clicked()",
151 "AliEveTRDModuleEditor", this, "UpdateChamber()");
153 fGroupFrame676->SetLayoutManager(new TGVerticalLayout(fGroupFrame676));
154 AddFrame(fGroupFrame676, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
157 //________________________________________________________
158 AliEveTRDModuleEditor::~AliEveTRDModuleEditor()
161 //_________________________________________________________
162 void AliEveTRDModuleEditor::SetModel(TObject* obj)
164 // Takes care to update UI state according to model state
166 fM = dynamic_cast<AliEveTRDModule*>(obj);
167 if(AliEveTRDNode *node = dynamic_cast<AliEveTRDNode*>(fM)) node->UpdateNode();
169 fDisplayHits->SetEnabled(fM->fLoadHits);
170 if(fM->fLoadHits) fDisplayHits->SetState( fM->fRnrHits ? kButtonDown : kButtonUp);
172 fDisplayDigits->SetEnabled(fM->fLoadDigits);
173 fToggleLog->SetEnabled(fM->fLoadDigits);
174 fToggleBox->SetEnabled(fM->fLoadDigits);
175 fThreshold->SetEnabled(fM->fLoadDigits);
176 fThresValue->GetNumberEntry()->SetEnabled(fM->fLoadDigits);
177 fThresValue->GetButtonDown()->SetEnabled(fM->fLoadDigits);
178 fThresValue->GetButtonUp()->SetEnabled(fM->fLoadDigits);
179 fThresValue->SetIntNumber(fM->fDigitsThreshold);
181 fDisplayDigits->SetState(fM->fRnrDigits ? kButtonDown : kButtonUp);
182 fToggleLog->SetState(fM->fDigitsLog ? kButtonDown : kButtonUp);
183 fToggleBox->SetState(fM->fDigitsBox ? kButtonDown : kButtonUp);
184 fThreshold->SetState(fM->kDigitsNeedRecompute ? kButtonDown : kButtonUp);
187 if(fM->fLoadRecPoints) fDisplayClusters->SetState(fM->fRnrRecPoints ? kButtonDown : kButtonUp);
188 else fDisplayClusters->SetEnabled(kFALSE);
190 if(fM->fLoadTracklets) fDisplayTracks->SetState(fM->fRnrTracklets ? kButtonDown : kButtonUp);
191 else fDisplayTracks->SetEnabled(kFALSE);
194 //_________________________________________________________
195 void AliEveTRDModuleEditor::ModifyDigitsView()
197 fM->kDigitsNeedRecompute = kTRUE;
201 //________________________________________________________
202 void AliEveTRDModuleEditor::SetThreshold(Long_t tres)
204 if(!fM->fLoadDigits) return;
206 fM->fDigitsThreshold = (tres == 0) ? (int)fThresValue->GetNumber():tres;
207 fM->kDigitsNeedRecompute = fThreshold->IsDown();
212 //_________________________________________________________
213 void AliEveTRDModuleEditor::UpdateChamber()
215 // Info("UpdateChamber()", "");
217 fM->fRnrHits = kFALSE;
218 if(fDisplayHits->IsDown()) fM->fRnrHits = kTRUE;
220 fM->fRnrDigits = kFALSE;
221 if(fDisplayDigits->IsDown()){
222 fM->fRnrDigits = kTRUE;
223 if(fToggleLog->IsDown()) fM->fDigitsLog = kTRUE;
224 else fM->fDigitsLog = kFALSE;
225 if(fToggleBox->IsDown()) fM->fDigitsBox = kTRUE;
226 else fM->fDigitsBox = kFALSE;
229 fM->fRnrRecPoints = kFALSE;
230 if(fDisplayClusters->IsDown()) fM->fRnrRecPoints = kTRUE;
232 fM->fRnrTracklets = kFALSE;
233 if(fDisplayTracks->IsDown()) fM->fRnrTracklets = kTRUE;
235 if(dynamic_cast<AliEveTRDNode*>(fM)) (dynamic_cast<AliEveTRDNode*>(fM))->UpdateLeaves();
240 //_________________________________________________________
241 void AliEveTRDModuleEditor::UpdateClusters(Pixel_t /*col*/)
243 // Info("UpdateClusters()","");
246 fM->fRecPoints->SetMarkerColor(col ? fHitsColor->GetColor() : col);
252 //_________________________________________________________
253 void AliEveTRDModuleEditor::UpdateHits(Pixel_t /*col*/)
255 // Info("UpdateHits()","");
258 fM->fHits->SetMarkerColor(col ? fClustersColor->GetColor() : col);