]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/EveDet/AliEveTRDModule.cxx
Move contents of EVE/Alieve to EVE/EveDet as most code will remain there.
[u/mrichter/AliRoot.git] / EVE / EveDet / AliEveTRDModule.cxx
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          *
7  * full copyright notice.                                                 *
8  **************************************************************************/
9 #include "AliEveTRDModule.h"
10 #include "AliEveTRDModuleImp.h"
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
19 #include "TEveManager.h"
20 #include "TEveTrack.h"
21
22
23 ClassImp(AliEveTRDModule)
24 ClassImp(AliEveTRDModuleEditor)
25
26 //________________________________________________________
27 AliEveTRDModule::AliEveTRDModule(const char *typ, Int_t det) :
28   TNamed(Form("%s%03d", typ, det), ""), fDet(det)
29 {
30         fLoadHits = kFALSE;
31         fRnrHits = kTRUE;
32
33         fLoadDigits = kFALSE;
34         fRnrDigits = kTRUE;
35         fDigitsLog = kFALSE;
36         fDigitsBox = kFALSE;
37
38         fLoadRecPoints = kFALSE;
39         fRnrRecPoints = kTRUE;
40
41         fLoadTracklets = kFALSE;
42         fRnrTracklets = kTRUE;
43
44         kDigitsNeedRecompute = kTRUE;
45
46         fDigitsThreshold = 15;
47 }
48
49
50
51 ///////////////////////////////////////////////////////////
52 /////////////   AliEveTRDModuleEditor       /////////////////////
53 ///////////////////////////////////////////////////////////
54
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)
57 {
58         MakeTitle("TRD Detector");
59
60         // "Hits" group frame
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()");
68
69         // color select widget
70         ULong_t ColPar1;
71         gClient->GetColorByName("#ff00ff", ColPar1);
72         fHitsColor = new TGColorSelect(fGroupFrame615, ColPar1, -1);
73
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)");
77
78         fGroupFrame615->SetLayoutManager(new TGVerticalLayout(fGroupFrame615));
79         AddFrame(fGroupFrame615, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
80
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()");
96
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));
104
105    TGVertical3DLine *fVertical3DLine773 = new TGVertical3DLine(fGroupFrame636,8,63);
106    fGroupFrame636->AddFrame(fVertical3DLine773, new TGLayoutHints(kLHintsLeft | kLHintsCenterX | kLHintsTop | kLHintsExpandY,2,2,2,2));
107
108          // vertical frame
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));
117
118         fGroupFrame636->AddFrame(fVerticalFrame543, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
119
120         fGroupFrame636->SetLayoutManager(new TGHorizontalLayout(fGroupFrame636));
121         AddFrame(fGroupFrame636, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
122
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()");
131
132         // color select widget
133         ULong_t ColPar2;
134         gClient->GetColorByName("#ff00ff", ColPar2);
135         fClustersColor = new TGColorSelect(fGroupFrame649, ColPar2, -1);
136
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)");
140
141         fGroupFrame649->SetLayoutManager(new TGVerticalLayout(fGroupFrame649));
142         AddFrame(fGroupFrame649, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
143
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()");
152
153         fGroupFrame676->SetLayoutManager(new TGVerticalLayout(fGroupFrame676));
154         AddFrame(fGroupFrame676, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
155 }
156
157 //________________________________________________________
158 AliEveTRDModuleEditor::~AliEveTRDModuleEditor()
159 {}
160
161 //_________________________________________________________
162 void AliEveTRDModuleEditor::SetModel(TObject* obj)
163 {
164 // Takes care to update UI state according to model state
165
166         fM = dynamic_cast<AliEveTRDModule*>(obj);
167         if(AliEveTRDNode *node = dynamic_cast<AliEveTRDNode*>(fM)) node->UpdateNode();
168
169         fDisplayHits->SetEnabled(fM->fLoadHits);
170         if(fM->fLoadHits) fDisplayHits->SetState( fM->fRnrHits ? kButtonDown : kButtonUp);
171
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);
180         if(fM->fLoadDigits){
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);
185         }
186
187         if(fM->fLoadRecPoints) fDisplayClusters->SetState(fM->fRnrRecPoints ? kButtonDown : kButtonUp);
188         else fDisplayClusters->SetEnabled(kFALSE);
189
190         if(fM->fLoadTracklets) fDisplayTracks->SetState(fM->fRnrTracklets ? kButtonDown : kButtonUp);
191         else fDisplayTracks->SetEnabled(kFALSE);
192 }
193
194 //_________________________________________________________
195 void AliEveTRDModuleEditor::ModifyDigitsView()
196 {
197         fM->kDigitsNeedRecompute = kTRUE;
198         UpdateChamber();
199 }
200
201 //________________________________________________________
202 void AliEveTRDModuleEditor::SetThreshold(Long_t tres)
203 {
204         if(!fM->fLoadDigits) return;
205
206         fM->fDigitsThreshold = (tres == 0) ? (int)fThresValue->GetNumber():tres;
207         fM->kDigitsNeedRecompute = fThreshold->IsDown();
208         UpdateChamber();
209 }
210
211
212 //_________________________________________________________
213 void AliEveTRDModuleEditor::UpdateChamber()
214 {
215 //      Info("UpdateChamber()", "");
216
217         fM->fRnrHits = kFALSE;
218         if(fDisplayHits->IsDown()) fM->fRnrHits = kTRUE;
219
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;
227         }
228
229         fM->fRnrRecPoints = kFALSE;
230         if(fDisplayClusters->IsDown()) fM->fRnrRecPoints = kTRUE;
231
232         fM->fRnrTracklets = kFALSE;
233         if(fDisplayTracks->IsDown()) fM->fRnrTracklets = kTRUE;
234
235         if(dynamic_cast<AliEveTRDNode*>(fM)) (dynamic_cast<AliEveTRDNode*>(fM))->UpdateLeaves();
236
237         gEve->Redraw3D();
238 }
239
240 //_________________________________________________________
241 void AliEveTRDModuleEditor::UpdateClusters(Pixel_t /*col*/)
242 {
243 //      Info("UpdateClusters()","");
244 /*
245         if(fM->fRecPoints){
246                 fM->fRecPoints->SetMarkerColor(col ? fHitsColor->GetColor() : col);
247                 gEve->Redraw3D();
248         }
249 */
250 }
251
252 //_________________________________________________________
253 void AliEveTRDModuleEditor::UpdateHits(Pixel_t /*col*/)
254 {
255 //      Info("UpdateHits()","");
256 /*
257         if(fM->fHits){
258                 fM->fHits->SetMarkerColor(col ? fClustersColor->GetColor() : col);
259                 gEve->Redraw3D();
260         }
261 */
262 }