]>
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 | **************************************************************************/ |
fd31e9de | 9 | |
d810d0de | 10 | #include "AliEveTRDLoaderImp.h" |
11 | #include "AliEveTRDModuleImp.h" | |
6983e87a | 12 | #include "EveBase/AliEveEventManager.h" |
edf0c4a0 | 13 | |
84aff7a4 | 14 | #include <TEveManager.h> |
edf0c4a0 | 15 | |
a15e6d7d | 16 | //#include "TFile.h" |
edf0c4a0 | 17 | #include "TTree.h" |
18 | ||
19 | #include <TGButton.h> | |
20 | ||
21 | #include "AliLog.h" | |
22 | #include "AliRun.h" | |
23 | #include "AliRunLoader.h" | |
a15e6d7d | 24 | //#include "AliLoader.h" |
edf0c4a0 | 25 | #include "AliTRDrawData.h" |
26 | #include "AliRawReaderRoot.h" | |
27 | #include "AliRawReaderDate.h" | |
28 | ||
d810d0de | 29 | ClassImp(AliEveTRDLoaderSim) |
30 | ClassImp(AliEveTRDLoaderRaw) | |
31 | ClassImp(AliEveTRDLoaderSimEditor) | |
32 | //ClassImp(TRDLoaderRawEditor) | |
edf0c4a0 | 33 | |
34 | /////////////////////////////////////////////////////////// | |
fd31e9de | 35 | ///////////// AliEveTRDLoaderSim ///////////////////// |
edf0c4a0 | 36 | /////////////////////////////////////////////////////////// |
37 | ||
38 | ||
fd31e9de | 39 | //______________________________________________________________________________ |
40 | AliEveTRDLoaderSim::AliEveTRDLoaderSim(const Text_t* n, const Text_t* t) : | |
6983e87a | 41 | AliEveTRDLoader(n, t) |
42 | ,fRunLoader(0x0) | |
a15e6d7d | 43 | { |
44 | // Constructor. | |
6983e87a | 45 | if(gAlice && (fRunLoader = AliEveEventManager::AssertRunLoader())) SetDataLinked(); |
a15e6d7d | 46 | } |
edf0c4a0 | 47 | |
fd31e9de | 48 | //______________________________________________________________________________ |
d810d0de | 49 | Bool_t AliEveTRDLoaderSim::GoToEvent(int ev) |
edf0c4a0 | 50 | { |
a15e6d7d | 51 | // Go to given event. |
52 | ||
fd31e9de | 53 | if(!fChildren.size()){ |
54 | AliWarning("Please select first the chamber that you want to monitor from \"Chamber(s) selector\"."); | |
55 | return kFALSE; | |
56 | } | |
6983e87a | 57 | if(!fDataType){ |
fd31e9de | 58 | AliWarning("Please select first the type of data that you want to monitor and then hit the \"Load\" button."); |
59 | return kFALSE; | |
60 | } | |
61 | ||
62 | fEvent = ev; | |
63 | ||
64 | if(!fRunLoader){ | |
65 | AliError("RunLoader not initialized."); | |
66 | return kFALSE; | |
67 | } | |
68 | fRunLoader->UnloadAll("TRD"); | |
69 | Unload(); | |
70 | ||
71 | if(fRunLoader->GetEvent(ev)) return kFALSE; | |
72 | TTree *t = 0; | |
6983e87a | 73 | if(fDataType&kTRDHits){ |
fd31e9de | 74 | fRunLoader->LoadHits("TRD", "READ"); |
75 | t = fRunLoader->GetTreeH("TRD", kFALSE); | |
76 | if(!t) return kFALSE; | |
fd31e9de | 77 | if(!LoadHits(t)) return kFALSE; |
78 | } | |
6983e87a | 79 | if(fDataType&kTRDDigits){ |
fd31e9de | 80 | fRunLoader->LoadDigits("TRD", "READ"); |
81 | t = fRunLoader->GetTreeD("TRD", kFALSE); | |
82 | if(!t) return kFALSE; | |
fd31e9de | 83 | if(!LoadDigits(t)) return kFALSE; |
84 | } | |
6983e87a | 85 | if(fDataType&kTRDClusters){ |
fd31e9de | 86 | fRunLoader->LoadRecPoints("TRD", "READ"); |
87 | t = fRunLoader->GetTreeR("TRD", kFALSE); | |
88 | if(!t) return kFALSE; | |
89 | if(!LoadClusters(t)) return kFALSE; | |
90 | } | |
6983e87a | 91 | if(fDataType&kTRDTracklets){ |
fd31e9de | 92 | fRunLoader->LoadTracks("TRD", "READ"); |
93 | t = fRunLoader->GetTreeT("TRD", kFALSE); | |
94 | if(!t) return kFALSE; | |
95 | if(!LoadTracklets(t)) return kFALSE; | |
96 | } | |
97 | ||
98 | gEve->Redraw3D(); | |
99 | return kTRUE; | |
edf0c4a0 | 100 | } |
101 | ||
102 | ||
fd31e9de | 103 | //______________________________________________________________________________ |
d810d0de | 104 | Bool_t AliEveTRDLoaderSim::Open(const char *filename, const char *dir) |
edf0c4a0 | 105 | { |
a15e6d7d | 106 | // Open file in given dir. |
51346b82 | 107 | |
6983e87a | 108 | if(fRunLoader) return kTRUE; |
109 | ||
fd31e9de | 110 | fRunLoader = AliRunLoader::GetRunLoader(); |
111 | if(!fRunLoader) fRunLoader = AliRunLoader::Open(filename, | |
6983e87a | 112 | AliConfig::GetDefaultEventFolderName(),"read"); |
113 | if(!fRunLoader) return kFALSE; | |
51346b82 | 114 | |
fd31e9de | 115 | gAlice = fRunLoader->GetAliRun(); |
edf0c4a0 | 116 | if(!gAlice) fRunLoader->LoadgAlice(); |
6983e87a | 117 | if(!gAlice) return kFALSE; |
118 | ||
119 | fFilename = filename; | |
120 | fDir = dir; | |
121 | fDir += "/"; | |
122 | fRunLoader->SetDirName(fDir); | |
fd31e9de | 123 | |
6983e87a | 124 | SetDataLinked(); |
fd31e9de | 125 | return kTRUE; |
edf0c4a0 | 126 | } |
127 | ||
51346b82 | 128 | |
edf0c4a0 | 129 | /////////////////////////////////////////////////////////// |
fd31e9de | 130 | ///////////// AliEveTRDLoaderRaw ///////////////////// |
edf0c4a0 | 131 | /////////////////////////////////////////////////////////// |
132 | ||
133 | ||
fd31e9de | 134 | //______________________________________________________________________________ |
135 | AliEveTRDLoaderRaw::AliEveTRDLoaderRaw(const Text_t* n, const Text_t* t) : | |
136 | AliEveTRDLoader(n, t), | |
137 | fRawDateReader (0), | |
138 | fRawRootReader (0), | |
139 | fRaw (0), | |
fd31e9de | 140 | fEventOld (-1) |
a15e6d7d | 141 | { |
142 | // Constructor. | |
143 | } | |
edf0c4a0 | 144 | |
fd31e9de | 145 | //______________________________________________________________________________ |
d810d0de | 146 | Bool_t AliEveTRDLoaderRaw::Open(const char *filename, const char *dir) |
edf0c4a0 | 147 | { |
a15e6d7d | 148 | // Open file in gvenn dir. |
149 | ||
fd31e9de | 150 | fFilename = filename; |
151 | fDir = dir; | |
152 | fDir += "/"; | |
edf0c4a0 | 153 | |
fd31e9de | 154 | if(fRaw) delete fRaw; |
155 | fRaw = new AliTRDrawData(); | |
51346b82 | 156 | |
6983e87a | 157 | if(fDataType&kTRDRawRoot){ |
fd31e9de | 158 | if(fRawRootReader) delete fRawRootReader; |
159 | fRawRootReader = new AliRawReaderRoot(filename); | |
6983e87a | 160 | } else if(fDataType&kTRDRawDate){ |
fd31e9de | 161 | if(fRawDateReader) delete fRawDateReader; |
162 | fRawDateReader = new AliRawReaderDate(fDir+fFilename); | |
6983e87a | 163 | } else { |
164 | AliError("No data type was set."); | |
165 | return kFALSE; | |
fd31e9de | 166 | } |
6983e87a | 167 | SetDataLinked(); |
fd31e9de | 168 | return kTRUE; |
edf0c4a0 | 169 | } |
170 | ||
edf0c4a0 | 171 | |
fd31e9de | 172 | //______________________________________________________________________________ |
173 | Bool_t AliEveTRDLoaderRaw::GoToEvent(int ev) | |
edf0c4a0 | 174 | { |
a15e6d7d | 175 | // Go to given event. |
176 | ||
fd31e9de | 177 | if(!fChildren.size()){ |
178 | AliWarning("Please select first the chamber that you want to monitor from \"Chamber(s) selector\"."); | |
179 | return kFALSE; | |
180 | } | |
181 | ||
a15e6d7d | 182 | static const TEveException kEH("AliEveTRDLoader::GotoEvent "); |
183 | if(fRawRootReader == 0x0) throw(kEH + "data file not opened."); | |
fd31e9de | 184 | |
185 | ||
186 | if(ev == fEventOld) return kTRUE; | |
187 | Bool_t checkEnd; | |
188 | if(ev < fEventOld) { | |
189 | fRawRootReader->RewindEvents(); | |
190 | fEventOld = -1; | |
191 | checkEnd = kFALSE; | |
192 | } else checkEnd = kTRUE; | |
193 | ||
194 | do NextEvent(); while(fEventOld != ev && !(checkEnd == kTRUE && fEventOld == 0)); | |
195 | LoadEvent(); | |
196 | gEve->Redraw3D(); | |
a15e6d7d | 197 | |
fd31e9de | 198 | return kTRUE; |
edf0c4a0 | 199 | } |
200 | ||
fd31e9de | 201 | //______________________________________________________________________________ |
d810d0de | 202 | Bool_t AliEveTRDLoaderRaw::LoadEvent() |
edf0c4a0 | 203 | { |
a15e6d7d | 204 | // Load event. |
205 | ||
fd31e9de | 206 | Info("LoadEvent()", "Loading ..."); |
51346b82 | 207 | |
a15e6d7d | 208 | static const TEveException kEH("AliEveTRDLoader::LoadEvent "); |
209 | if(fRawRootReader == 0x0) throw(kEH + "data file not opened."); | |
edf0c4a0 | 210 | |
211 | ||
fd31e9de | 212 | fRawRootReader->Reset(); |
edf0c4a0 | 213 | |
fd31e9de | 214 | AliEveTRDChamber *chmb; |
215 | AliTRDdigitsManager *dm; | |
216 | dm = fRaw->Raw2Digits(fRawRootReader); | |
edf0c4a0 | 217 | |
fd31e9de | 218 | for(int idet=0; idet<540; idet++){ |
219 | if(!(chmb=GetChamber(idet))) continue; | |
220 | chmb->LoadDigits(dm); | |
221 | } | |
222 | return kTRUE; | |
edf0c4a0 | 223 | } |
224 | ||
fd31e9de | 225 | //______________________________________________________________________________ |
6983e87a | 226 | Bool_t AliEveTRDLoaderRaw::NextEvent(Bool_t rewindOnEnd) |
edf0c4a0 | 227 | { |
a15e6d7d | 228 | // Go to next event. |
229 | ||
230 | static const TEveException kEH("AliEveTRDLoader::NextEvent "); | |
231 | if(fRawRootReader == 0x0) throw(kEH + "data file not opened."); | |
fd31e9de | 232 | |
233 | ||
234 | if(fRawRootReader->NextEvent() == kTRUE) ++fEventOld; | |
235 | else { | |
a15e6d7d | 236 | if(fEventOld == -1) throw(kEH + "no events available."); |
fd31e9de | 237 | if(rewindOnEnd) { |
238 | Warning("NextEvent()", Form("Reached end of stream (event=%d), rewinding to first event.", fEventOld)); | |
239 | fRawRootReader->RewindEvents(); | |
240 | fRawRootReader->NextEvent(); | |
241 | fEventOld = 0; | |
a15e6d7d | 242 | } else throw(kEH + "last event reached."); |
fd31e9de | 243 | } |
6983e87a | 244 | return kTRUE; |
edf0c4a0 | 245 | } |
246 | ||
247 | ||
248 | ||
249 | /////////////////////////////////////////////////////////// | |
fd31e9de | 250 | //////////// AliEveTRDLoaderSimEditor ///////////////////// |
edf0c4a0 | 251 | /////////////////////////////////////////////////////////// |
252 | ||
fd31e9de | 253 | //______________________________________________________________________________ |
254 | AliEveTRDLoaderSimEditor::AliEveTRDLoaderSimEditor(const TGWindow* p, Int_t width, Int_t height, | |
255 | UInt_t options, Pixel_t back) : | |
6983e87a | 256 | TGedFrame(p, width, height, options | kVerticalFrame, back) |
257 | ,fM(0x0) | |
258 | ,fCheckedHits(0x0) | |
259 | ,fCheckedDigits(0x0) | |
260 | ,fCheckedClusters(0x0) | |
261 | ,fCheckedTracklets(0x0) | |
edf0c4a0 | 262 | { |
a15e6d7d | 263 | // Constructor. |
264 | ||
fd31e9de | 265 | MakeTitle("AliEveTRDLoaderSim"); |
51346b82 | 266 | |
fd31e9de | 267 | // "Data selector" group frame |
268 | TGGroupFrame *fGroupFrame = new TGGroupFrame(this,"Data selector"); | |
6983e87a | 269 | fCheckedHits = new TGCheckButton(fGroupFrame," Hits"); |
270 | fCheckedHits->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, Form("Toggle(=%d)", (Int_t)AliEveTRDLoader::kTRDHits)); | |
271 | fGroupFrame->AddFrame(fCheckedHits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2)); | |
51346b82 | 272 | |
6983e87a | 273 | fCheckedDigits = new TGCheckButton(fGroupFrame," Digits"); |
274 | fCheckedDigits->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, Form("Toggle(=%d)", (Int_t)AliEveTRDLoader::kTRDDigits)); | |
275 | fGroupFrame->AddFrame(fCheckedDigits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2)); | |
edf0c4a0 | 276 | |
6983e87a | 277 | fCheckedClusters = new TGCheckButton(fGroupFrame," Clusters"); |
278 | fCheckedClusters->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, Form("Toggle(=%d)", (Int_t)AliEveTRDLoader::kTRDClusters)); | |
279 | fGroupFrame->AddFrame(fCheckedClusters, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2)); | |
edf0c4a0 | 280 | |
6983e87a | 281 | fCheckedTracklets = new TGCheckButton(fGroupFrame," Tracklets "); |
282 | fCheckedTracklets->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, Form("Toggle(=%d)", (Int_t)AliEveTRDLoader::kTRDTracklets)); | |
283 | fGroupFrame->AddFrame(fCheckedTracklets, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2)); | |
edf0c4a0 | 284 | |
fd31e9de | 285 | fGroupFrame->SetLayoutManager(new TGVerticalLayout(fGroupFrame)); |
286 | // fGroupFrame->Resize(164,116); | |
287 | AddFrame(fGroupFrame, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2)); | |
edf0c4a0 | 288 | } |
289 | ||
fd31e9de | 290 | //______________________________________________________________________________ |
d810d0de | 291 | void AliEveTRDLoaderSimEditor::SetModel(TObject* obj) |
edf0c4a0 | 292 | { |
a15e6d7d | 293 | // Set model object. |
294 | ||
fd31e9de | 295 | fM = dynamic_cast<AliEveTRDLoaderSim*>(obj); |
296 | ||
6983e87a | 297 | Bool_t kRL = (fM->IsDataLinked()) ? kTRUE : kFALSE; |
298 | ||
299 | fCheckedHits->SetEnabled(kRL); | |
300 | if(kRL) fCheckedHits->SetState(fM->fDataType&AliEveTRDLoader::kTRDHits ? kButtonDown : kButtonUp); | |
301 | fCheckedDigits->SetEnabled(kRL); | |
302 | if(kRL) fCheckedDigits->SetState(fM->fDataType&AliEveTRDLoader::kTRDDigits ? kButtonDown : kButtonUp); | |
303 | fCheckedClusters->SetEnabled(kRL); | |
304 | if(kRL) fCheckedClusters->SetState(fM->fDataType&AliEveTRDLoader::kTRDClusters ? kButtonDown : kButtonUp); | |
305 | fCheckedTracklets->SetEnabled(kRL); | |
306 | if(kRL) fCheckedTracklets->SetState(fM->fDataType&AliEveTRDLoader::kTRDTracklets ? kButtonDown : kButtonUp); | |
edf0c4a0 | 307 | } |
308 | ||
fd31e9de | 309 | //______________________________________________________________________________ |
d810d0de | 310 | void AliEveTRDLoaderSimEditor::Toggle(Int_t id) |
edf0c4a0 | 311 | { |
a15e6d7d | 312 | // Toggle given button id. |
313 | ||
fd31e9de | 314 | switch(id){ |
6983e87a | 315 | case AliEveTRDLoader::kTRDHits: |
316 | fM->fDataType |= fCheckedHits->IsDown() ? AliEveTRDLoader::kTRDHits : 0; | |
317 | break; | |
318 | case AliEveTRDLoader::kTRDDigits: | |
319 | fM->fDataType |= fCheckedDigits->IsDown() ? AliEveTRDLoader::kTRDDigits : 0; | |
320 | break; | |
321 | case AliEveTRDLoader::kTRDClusters: | |
322 | fM->fDataType |= fCheckedClusters->IsDown() ? AliEveTRDLoader::kTRDClusters : 0; | |
323 | break; | |
324 | case AliEveTRDLoader::kTRDTracklets: | |
325 | fM->fDataType |= fCheckedTracklets->IsDown() ? AliEveTRDLoader::kTRDTracklets : 0; | |
326 | break; | |
fd31e9de | 327 | } |
edf0c4a0 | 328 | } |