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