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