]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/Alieve/TRDModule.cxx
New files from Alexandru: TRD visualization.
[u/mrichter/AliRoot.git] / EVE / Alieve / TRDModule.cxx
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 //________________________________________________________
23 TRDModule::TRDModule(const char *typ, const Int_t det) :
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
42         fDigitsThreshold = 10;
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);
163         if(dynamic_cast<TRDNode*>(fM)) dynamic_cast<TRDNode*>(fM)->UpdateNode();
164         
165         if(fM->fLoadHits) fDisplayHits->SetState(fM->fRnrHits ? kButtonDown : kButtonUp);
166         else fDisplayHits->SetEnabled(kFALSE);
167                 
168         if(fM->fLoadDigits){
169                 fDisplayDigits->SetState(fM->fRnrDigits ? kButtonDown : kButtonUp);
170                 fToggleLog->SetState(fM->fDigitsLog ? kButtonDown : kButtonUp);
171                 fToggleBox->SetState(fM->fDigitsBox ? kButtonDown : kButtonUp);
172                 fThresValue->SetIntNumber(fM->fDigitsThreshold);
173         } else {
174                 fDisplayDigits->SetEnabled(kFALSE);
175                 fToggleLog->SetEnabled(kFALSE);
176                 fToggleBox->SetEnabled(kFALSE);
177         }
178         fThreshold->SetEnabled(fM->fLoadDigits);
179
180         
181         if(fM->fLoadRecPoints) fDisplayClusters->SetState(fM->fRnrRecPoints ? kButtonDown : kButtonUp);
182         else fDisplayClusters->SetEnabled(kFALSE);
183         
184         if(fM->fLoadTracklets) fDisplayTracks->SetState(fM->fRnrTracklets ? kButtonDown : kButtonUp);
185         else fDisplayTracks->SetEnabled(kFALSE);
186 }
187
188 //_________________________________________________________
189 void TRDModuleEditor::ModifyDigitsView()
190 {
191         fM->kDigitsNeedRecompute = kTRUE;
192         UpdateChamber();
193 }
194
195 //________________________________________________________
196 void TRDModuleEditor::SetThreshold(Long_t tres)
197 {
198         if(!fM->fLoadDigits) return;
199         tres = (tres == 0) ? (int)fThresValue->GetNumber():tres;
200         
201         fM->fDigitsThreshold = tres;
202         if(fThreshold->IsDown()) fM->kDigitsNeedRecompute = kTRUE;
203         UpdateChamber();
204 }
205
206
207 //_________________________________________________________
208 void TRDModuleEditor::UpdateChamber()
209 {
210 //      Info("UpdateChamber()", "");
211
212         fM->fRnrHits = kFALSE;
213         if(fDisplayHits->IsDown()) fM->fRnrHits = kTRUE;
214         
215         fM->fRnrDigits = kFALSE;
216         if(fDisplayDigits->IsDown()){
217                 fM->fRnrDigits = kTRUE;
218                 if(fToggleLog->IsDown()) fM->fDigitsLog = kTRUE;
219                 else  fM->fDigitsLog = kFALSE;
220                 if(fToggleBox->IsDown()) fM->fDigitsBox = kTRUE;
221                 else  fM->fDigitsBox = kFALSE;
222         }
223         
224         fM->fRnrRecPoints = kFALSE;
225         if(fDisplayClusters->IsDown()) fM->fRnrRecPoints = kTRUE;
226         
227         fM->fRnrTracklets = kFALSE;
228         if(fDisplayTracks->IsDown()) fM->fRnrTracklets = kTRUE;
229
230         if(dynamic_cast<TRDNode*>(fM)) (dynamic_cast<TRDNode*>(fM))->UpdateLeaves();
231
232         gReve->Redraw3D();
233 }
234
235 //_________________________________________________________
236 void TRDModuleEditor::UpdateClusters(Pixel_t /*col*/)
237 {
238 //      Info("UpdateClusters()","");
239 /*      
240         if(fM->fRecPoints){
241                 fM->fRecPoints->SetMarkerColor(col ? fHitsColor->GetColor() : col);
242                 gReve->Redraw3D();
243         }
244 */
245 }
246
247 //_________________________________________________________
248 void TRDModuleEditor::UpdateHits(Pixel_t /*col*/)
249 {
250 //      Info("UpdateHits()","");
251 /*      
252         if(fM->fHits){
253                 fM->fHits->SetMarkerColor(col ? fClustersColor->GetColor() : col);
254                 gReve->Redraw3D();
255         }
256 */
257 }