]>
Commit | Line | Data |
---|---|---|
d810d0de | 1 | // $Id$ |
2 | // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007 | |
3 | ||
4 | /************************************************************************** | |
5 | * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. * | |
6 | * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for * | |
51346b82 | 7 | * full copyright notice. * |
d810d0de | 8 | **************************************************************************/ |
9 | #include "AliEveTRDModule.h" | |
10 | #include "AliEveTRDModuleImp.h" | |
a282bf09 | 11 | |
12 | #include "TGButton.h" | |
13 | #include "TGColorSelect.h" | |
14 | #include "TGNumberEntry.h" | |
15 | #include "TG3DLine.h" | |
16 | //#include "TColor.h" | |
17 | //#include "TMath.h" | |
18 | ||
84aff7a4 | 19 | #include "TEveManager.h" |
20 | #include "TEveTrack.h" | |
a282bf09 | 21 | |
a282bf09 | 22 | |
d810d0de | 23 | ClassImp(AliEveTRDModule) |
24 | ClassImp(AliEveTRDModuleEditor) | |
a282bf09 | 25 | |
fd31e9de | 26 | //______________________________________________________________________________ |
d810d0de | 27 | AliEveTRDModule::AliEveTRDModule(const char *typ, Int_t det) : |
fd31e9de | 28 | TNamed(Form("%s%03d", typ, det), ""), |
29 | fLoadHits (kFALSE), | |
30 | fRnrHits (kTRUE), | |
a282bf09 | 31 | |
fd31e9de | 32 | fLoadDigits (kFALSE), |
33 | fRnrDigits (kTRUE), | |
34 | fDigitsLog (kFALSE), | |
35 | fDigitsBox (kFALSE), | |
36 | fDigitsNeedRecompute (kTRUE), | |
a282bf09 | 37 | |
fd31e9de | 38 | fLoadRecPoints (kFALSE), |
39 | fRnrRecPoints (kTRUE), | |
a282bf09 | 40 | |
fd31e9de | 41 | fLoadTracklets (kFALSE), |
42 | fRnrTracklets (kTRUE), | |
a282bf09 | 43 | |
fd31e9de | 44 | fDet (det), |
45 | fDigitsThreshold (15) | |
46 | { | |
47 | // Constructor. | |
a282bf09 | 48 | } |
49 | ||
50 | ||
51 | ||
52 | /////////////////////////////////////////////////////////// | |
fd31e9de | 53 | ////////// AliEveTRDModuleEditor ////////////////// |
a282bf09 | 54 | /////////////////////////////////////////////////////////// |
55 | ||
fd31e9de | 56 | //______________________________________________________________________________ |
57 | AliEveTRDModuleEditor::AliEveTRDModuleEditor(const TGWindow* p, Int_t width, Int_t height, | |
58 | UInt_t options, Pixel_t back) : | |
59 | TGedFrame(p, width, height, options | kVerticalFrame, back), | |
60 | fM (0), | |
61 | fDisplayHits(0), | |
62 | fHitsColor(0), | |
63 | fDisplayDigits(0), fToggleLog(0), fToggleBox(0), fThreshold(0), | |
64 | fThresValue(0), | |
65 | fDisplayClusters(0), | |
66 | fClustersColor(0), | |
67 | fDisplayTracks(0) | |
a282bf09 | 68 | { |
fd31e9de | 69 | MakeTitle("TRD Detector"); |
70 | ||
71 | // "Hits" group frame | |
72 | TGGroupFrame *fGroupFrame615 = new TGGroupFrame(this,"Hits"); | |
73 | fDisplayHits = new TGCheckButton(fGroupFrame615,"Display"); | |
74 | fDisplayHits->SetToolTipText("Display hits attached to chamber"); | |
75 | fDisplayHits->SetState(kButtonDown); | |
76 | fGroupFrame615->AddFrame(fDisplayHits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2)); | |
77 | fDisplayHits->Connect("Clicked()", | |
78 | "AliEveTRDModuleEditor", this, "UpdateChamber()"); | |
79 | ||
80 | // color select widget | |
81 | ULong_t ColPar1; | |
82 | gClient->GetColorByName("#ff00ff", ColPar1); | |
83 | fHitsColor = new TGColorSelect(fGroupFrame615, ColPar1, -1); | |
84 | ||
85 | fGroupFrame615->AddFrame(fHitsColor, new TGLayoutHints(kLHintsLeft | kLHintsCenterX | kLHintsTop | kLHintsCenterY,2,2,2,2)); | |
86 | fHitsColor->Connect("ColorSelected(Pixel_t)", | |
87 | "AliEveTRDModuleEditor", this, "UpdateHits(Pixel_t)"); | |
88 | ||
89 | fGroupFrame615->SetLayoutManager(new TGVerticalLayout(fGroupFrame615)); | |
90 | AddFrame(fGroupFrame615, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2)); | |
91 | ||
92 | // "Digits" group frame | |
93 | TGGroupFrame *fGroupFrame636 = new TGGroupFrame(this,"Digits"); | |
94 | TGVerticalFrame *fVerticalFrame538 = new TGVerticalFrame(fGroupFrame636,68,63,kVerticalFrame); | |
95 | fDisplayDigits = new TGCheckButton(fVerticalFrame538,"Display"); | |
96 | fDisplayDigits->SetState(kButtonDown); | |
97 | fDisplayDigits->SetToolTipText("Toggle display digits attached to chamber"); | |
98 | fVerticalFrame538->AddFrame(fDisplayDigits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2)); | |
99 | fDisplayDigits->Connect("Clicked()", | |
100 | "AliEveTRDModuleEditor", this, "UpdateChamber()"); | |
101 | fToggleLog = new TGCheckButton(fVerticalFrame538,"Log"); | |
102 | fToggleLog->SetState(kButtonUp); | |
103 | fToggleLog->SetToolTipText("Toggle logarithmic representation of digits"); | |
104 | fVerticalFrame538->AddFrame(fToggleLog, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2)); | |
105 | fToggleLog->Connect("Clicked()", | |
106 | "AliEveTRDModuleEditor", this, "ModifyDigitsView()"); | |
107 | ||
108 | fToggleBox = new TGCheckButton(fVerticalFrame538,"Box"); | |
109 | fToggleBox->SetState(kButtonUp); | |
110 | fToggleBox->SetToolTipText("Toggle display digits as boxes"); | |
111 | fVerticalFrame538->AddFrame(fToggleBox, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2)); | |
112 | fToggleBox->Connect("Clicked()", | |
113 | "AliEveTRDModuleEditor", this, "ModifyDigitsView()"); | |
114 | fGroupFrame636->AddFrame(fVerticalFrame538, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2)); | |
115 | ||
116 | TGVertical3DLine *fVertical3DLine773 = new TGVertical3DLine(fGroupFrame636,8,63); | |
117 | fGroupFrame636->AddFrame(fVertical3DLine773, new TGLayoutHints(kLHintsLeft | kLHintsCenterX | kLHintsTop | kLHintsExpandY,2,2,2,2)); | |
118 | ||
119 | // vertical frame | |
120 | TGVerticalFrame *fVerticalFrame543 = new TGVerticalFrame(fGroupFrame636,81,47,kVerticalFrame); | |
121 | fThreshold = new TGCheckButton(fVerticalFrame543, "Threshold"); | |
122 | fThreshold->SetToolTipText("Toggle threshold updating display"); | |
123 | fVerticalFrame543->AddFrame(fThreshold, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2)); | |
124 | fThresValue = new TGNumberEntry(fVerticalFrame543, (Int_t)10, 5, -1, TGNumberFormat::kNESInteger, TGNumberFormat::kNEAPositive, TGNumberFormat::kNELLimitMinMax, 0, 1024); | |
125 | fThresValue->Connect("ValueSet(Long_t)", | |
126 | "AliEveTRDModuleEditor", this, "SetThreshold(Long_t)"); | |
127 | fVerticalFrame543->AddFrame(fThresValue, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2)); | |
128 | ||
129 | fGroupFrame636->AddFrame(fVerticalFrame543, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2)); | |
130 | ||
131 | fGroupFrame636->SetLayoutManager(new TGHorizontalLayout(fGroupFrame636)); | |
132 | AddFrame(fGroupFrame636, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2)); | |
133 | ||
134 | // "Clusters" group frame | |
135 | TGGroupFrame *fGroupFrame649 = new TGGroupFrame(this,"Clusters"); | |
136 | fDisplayClusters = new TGCheckButton(fGroupFrame649,"Display"); | |
137 | fDisplayClusters->SetToolTipText("Display clusters attached to chamber"); | |
138 | fGroupFrame649->AddFrame(fDisplayClusters, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2)); | |
139 | fDisplayClusters->SetState(kButtonDown); | |
140 | fDisplayClusters->Connect("Clicked()", | |
141 | "AliEveTRDModuleEditor", this, "UpdateChamber()"); | |
142 | ||
143 | // color select widget | |
144 | ULong_t ColPar2; | |
145 | gClient->GetColorByName("#ff00ff", ColPar2); | |
146 | fClustersColor = new TGColorSelect(fGroupFrame649, ColPar2, -1); | |
147 | ||
148 | fGroupFrame649->AddFrame(fClustersColor, new TGLayoutHints(kLHintsLeft | kLHintsCenterX | kLHintsTop | kLHintsCenterY,2,2,2,2)); | |
149 | fClustersColor->Connect("ColorSelected(Pixel_t)", | |
150 | "AliEveTRDModuleEditor", this, "UpdateClusters(Pixel_t)"); | |
151 | ||
152 | fGroupFrame649->SetLayoutManager(new TGVerticalLayout(fGroupFrame649)); | |
153 | AddFrame(fGroupFrame649, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2)); | |
154 | ||
155 | // "Tracks" group frame | |
156 | TGGroupFrame *fGroupFrame676 = new TGGroupFrame(this,"Tracklets"); | |
157 | fDisplayTracks = new TGCheckButton(fGroupFrame676,"Display"); | |
158 | fDisplayTracks->SetToolTipText("Display MCM tracklets attached to chamber"); | |
159 | fGroupFrame676->AddFrame(fDisplayTracks, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2)); | |
160 | fDisplayTracks->SetState(kButtonDown); | |
161 | fDisplayTracks->Connect("Clicked()", | |
162 | "AliEveTRDModuleEditor", this, "UpdateChamber()"); | |
163 | ||
164 | fGroupFrame676->SetLayoutManager(new TGVerticalLayout(fGroupFrame676)); | |
165 | AddFrame(fGroupFrame676, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2)); | |
a282bf09 | 166 | } |
167 | ||
fd31e9de | 168 | //______________________________________________________________________________ |
d810d0de | 169 | AliEveTRDModuleEditor::~AliEveTRDModuleEditor() |
a282bf09 | 170 | {} |
171 | ||
fd31e9de | 172 | //______________________________________________________________________________ |
d810d0de | 173 | void AliEveTRDModuleEditor::SetModel(TObject* obj) |
a282bf09 | 174 | { |
fd31e9de | 175 | // Takes care to update UI state according to model state |
176 | ||
177 | fM = dynamic_cast<AliEveTRDModule*>(obj); | |
178 | if(AliEveTRDNode *node = dynamic_cast<AliEveTRDNode*>(fM)) node->UpdateNode(); | |
179 | ||
180 | fDisplayHits->SetEnabled(fM->fLoadHits); | |
181 | if(fM->fLoadHits) fDisplayHits->SetState( fM->fRnrHits ? kButtonDown : kButtonUp); | |
182 | ||
183 | fDisplayDigits->SetEnabled(fM->fLoadDigits); | |
184 | fToggleLog->SetEnabled(fM->fLoadDigits); | |
185 | fToggleBox->SetEnabled(fM->fLoadDigits); | |
186 | fThreshold->SetEnabled(fM->fLoadDigits); | |
187 | fThresValue->GetNumberEntry()->SetEnabled(fM->fLoadDigits); | |
188 | fThresValue->GetButtonDown()->SetEnabled(fM->fLoadDigits); | |
189 | fThresValue->GetButtonUp()->SetEnabled(fM->fLoadDigits); | |
190 | fThresValue->SetIntNumber(fM->fDigitsThreshold); | |
191 | if(fM->fLoadDigits){ | |
192 | fDisplayDigits->SetState(fM->fRnrDigits ? kButtonDown : kButtonUp); | |
193 | fToggleLog->SetState(fM->fDigitsLog ? kButtonDown : kButtonUp); | |
194 | fToggleBox->SetState(fM->fDigitsBox ? kButtonDown : kButtonUp); | |
195 | fThreshold->SetState(fM->fDigitsNeedRecompute ? kButtonDown : kButtonUp); | |
196 | } | |
197 | ||
198 | if(fM->fLoadRecPoints) fDisplayClusters->SetState(fM->fRnrRecPoints ? kButtonDown : kButtonUp); | |
199 | else fDisplayClusters->SetEnabled(kFALSE); | |
200 | ||
201 | if(fM->fLoadTracklets) fDisplayTracks->SetState(fM->fRnrTracklets ? kButtonDown : kButtonUp); | |
202 | else fDisplayTracks->SetEnabled(kFALSE); | |
a282bf09 | 203 | } |
204 | ||
fd31e9de | 205 | //______________________________________________________________________________ |
d810d0de | 206 | void AliEveTRDModuleEditor::ModifyDigitsView() |
a282bf09 | 207 | { |
fd31e9de | 208 | fM->fDigitsNeedRecompute = kTRUE; |
209 | UpdateChamber(); | |
a282bf09 | 210 | } |
211 | ||
fd31e9de | 212 | //______________________________________________________________________________ |
d810d0de | 213 | void AliEveTRDModuleEditor::SetThreshold(Long_t tres) |
a282bf09 | 214 | { |
fd31e9de | 215 | if(!fM->fLoadDigits) return; |
51346b82 | 216 | |
fd31e9de | 217 | fM->fDigitsThreshold = (tres == 0) ? (int)fThresValue->GetNumber():tres; |
218 | fM->fDigitsNeedRecompute = fThreshold->IsDown(); | |
219 | UpdateChamber(); | |
a282bf09 | 220 | } |
221 | ||
222 | ||
fd31e9de | 223 | //______________________________________________________________________________ |
d810d0de | 224 | void AliEveTRDModuleEditor::UpdateChamber() |
a282bf09 | 225 | { |
fd31e9de | 226 | // Info("UpdateChamber()", ""); |
a282bf09 | 227 | |
fd31e9de | 228 | fM->fRnrHits = kFALSE; |
229 | if(fDisplayHits->IsDown()) fM->fRnrHits = kTRUE; | |
51346b82 | 230 | |
fd31e9de | 231 | fM->fRnrDigits = kFALSE; |
232 | if(fDisplayDigits->IsDown()){ | |
233 | fM->fRnrDigits = kTRUE; | |
234 | if(fToggleLog->IsDown()) fM->fDigitsLog = kTRUE; | |
235 | else fM->fDigitsLog = kFALSE; | |
236 | if(fToggleBox->IsDown()) fM->fDigitsBox = kTRUE; | |
237 | else fM->fDigitsBox = kFALSE; | |
238 | } | |
51346b82 | 239 | |
fd31e9de | 240 | fM->fRnrRecPoints = kFALSE; |
241 | if(fDisplayClusters->IsDown()) fM->fRnrRecPoints = kTRUE; | |
51346b82 | 242 | |
fd31e9de | 243 | fM->fRnrTracklets = kFALSE; |
244 | if(fDisplayTracks->IsDown()) fM->fRnrTracklets = kTRUE; | |
a282bf09 | 245 | |
fd31e9de | 246 | if(dynamic_cast<AliEveTRDNode*>(fM)) (dynamic_cast<AliEveTRDNode*>(fM))->UpdateLeaves(); |
a282bf09 | 247 | |
fd31e9de | 248 | gEve->Redraw3D(); |
a282bf09 | 249 | } |
250 | ||
fd31e9de | 251 | //______________________________________________________________________________ |
d810d0de | 252 | void AliEveTRDModuleEditor::UpdateClusters(Pixel_t /*col*/) |
a282bf09 | 253 | { |
fd31e9de | 254 | // Info("UpdateClusters()",""); |
255 | /* | |
256 | if(fM->fRecPoints){ | |
257 | fM->fRecPoints->SetMarkerColor(col ? fHitsColor->GetColor() : col); | |
258 | gEve->Redraw3D(); | |
259 | } | |
260 | */ | |
a282bf09 | 261 | } |
262 | ||
fd31e9de | 263 | //______________________________________________________________________________ |
d810d0de | 264 | void AliEveTRDModuleEditor::UpdateHits(Pixel_t /*col*/) |
a282bf09 | 265 | { |
fd31e9de | 266 | // Info("UpdateHits()",""); |
267 | /* | |
268 | if(fM->fHits){ | |
269 | fM->fHits->SetMarkerColor(col ? fClustersColor->GetColor() : col); | |
270 | gEve->Redraw3D(); | |
271 | } | |
272 | */ | |
a282bf09 | 273 | } |