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