CMake: removing qpythia from the depedencies
[u/mrichter/AliRoot.git] / EVE / EveDet / AliEveTRDLoaderImp.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
10 #include "AliEveTRDLoaderImp.h"
11 #include "AliEveTRDModuleImp.h"
12 #include "AliEveEventManager.h"
13
14 #include <TEveManager.h>
15
16 //#include "TFile.h"
17 #include "TTree.h"
18
19 #include <TGButton.h>
20
21 #include "AliLog.h"
22 #include "AliRun.h"
23 #include "AliRunLoader.h"
24 #include "AliTRDrawData.h"
25 #include "AliTRDrawStream.h"
26 #include "AliTRDdigitsManager.h"
27 #include "AliRawReaderRoot.h"
28 #include "AliRawReaderDate.h"
29
30 ClassImp(AliEveTRDLoaderSim)
31 ClassImp(AliEveTRDLoaderRaw)
32 ClassImp(AliEveTRDLoaderSimEditor)
33 //ClassImp(TRDLoaderRawEditor)
34
35 ///////////////////////////////////////////////////////////
36 /////////////    AliEveTRDLoaderSim  /////////////////////
37 ///////////////////////////////////////////////////////////
38
39
40 //______________________________________________________________________________
41 AliEveTRDLoaderSim::AliEveTRDLoaderSim(const Text_t* n, const Text_t* t) :
42   AliEveTRDLoader(n, t)
43   ,fRunLoader(0x0)
44 {
45   // Constructor.
46   if(gAlice && (fRunLoader = AliEveEventManager::AssertRunLoader())) SetDataLinked();
47 }
48
49 //______________________________________________________________________________
50 Bool_t  AliEveTRDLoaderSim::GoToEvent(int ev)
51 {
52   // Go to given event.
53
54   if(!fChildren.size()){
55     AliWarning("Please select first the chamber that you want to monitor from \"Chamber(s) selector\".");
56     return kFALSE;
57   }
58   if(!fDataType){
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;
74   if(fDataType&kTRDHits){
75     fRunLoader->LoadHits("TRD", "READ");
76     t = fRunLoader->GetTreeH("TRD", kFALSE);
77     if(!t) return kFALSE;
78     if(!LoadHits(t)) return kFALSE;
79   }
80   if(fDataType&kTRDDigits){
81     fRunLoader->LoadDigits("TRD", "READ");
82     t = fRunLoader->GetTreeD("TRD", kFALSE);
83     if(!t) return kFALSE;
84     if(!LoadDigits(t)) return kFALSE;
85   }
86   if(fDataType&kTRDClusters){
87     fRunLoader->LoadRecPoints("TRD", "READ");
88     t = fRunLoader->GetTreeR("TRD", kFALSE);
89     if(!t) return kFALSE;
90     if(!LoadClusters(t)) return kFALSE;
91   }
92   if(fDataType&kTRDTracklets){
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;
101 }
102
103
104 //______________________________________________________________________________
105 Bool_t  AliEveTRDLoaderSim::Open(const char *filename, const char *dir)
106 {
107   // Open file in given dir.
108
109   if(fRunLoader) return kTRUE;
110   
111   fRunLoader = AliRunLoader::Instance();
112   if(!fRunLoader) fRunLoader = AliRunLoader::Open(filename,
113          AliConfig::GetDefaultEventFolderName(),"read");
114   if(!fRunLoader) return kFALSE;
115
116   gAlice = fRunLoader->GetAliRun();
117   if(!gAlice && fRunLoader->LoadgAlice()) return kFALSE;
118   if(!gAlice) return kFALSE;
119  
120   fFilename = filename;
121   fDir = dir;
122   fDir += "/";
123   fRunLoader->SetDirName(fDir);
124
125   SetDataLinked();
126   return kTRUE;
127 }
128
129
130 ///////////////////////////////////////////////////////////
131 /////////////   AliEveTRDLoaderRaw    /////////////////////
132 ///////////////////////////////////////////////////////////
133
134
135 //______________________________________________________________________________
136 AliEveTRDLoaderRaw::AliEveTRDLoaderRaw(const Text_t* n, const Text_t* t) :
137   AliEveTRDLoader(n, t)
138   ,fRawDateReader (0x0)
139   ,fRawRootReader (0x0)
140   ,fRaw           (0x0)
141   ,fEventCnt(-1)
142 {
143   // Constructor.
144 }
145
146 //______________________________________________________________________________
147 Bool_t  AliEveTRDLoaderRaw::Open(const char *filename, const char *dir)
148 {
149   // Open file in gvenn dir.
150
151   fFilename = filename;
152   fDir = dir;
153   fDir += "/";
154
155   if(fRaw) delete fRaw;
156   fRaw = new AliTRDrawData();
157
158   if(fDataType&kTRDRawRoot){
159     if(fRawRootReader) delete fRawRootReader;
160     fRawRootReader = new AliRawReaderRoot(filename);
161   } else if(fDataType&kTRDRawDate){
162     if(fRawDateReader) delete fRawDateReader;
163     fRawDateReader = new AliRawReaderDate(fDir+fFilename);
164   } else {
165     AliError("No data type was set.");
166     return kFALSE;
167   }
168   SetDataLinked();
169   return kTRUE;
170 }
171
172
173 //______________________________________________________________________________
174 Bool_t AliEveTRDLoaderRaw::GoToEvent(int ev)
175 {
176   // Go to given event.
177
178   //AliInfo(Form("Event %d %d %d", ev, fEvent, fEventCnt));
179
180
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
186   static const TEveException kEH("AliEveTRDLoader::GotoEvent ");
187   if(fRawRootReader == 0x0) throw(kEH + "data file not opened.");
188
189   fEvent = ev;
190   if(ev == fEventCnt) return kTRUE;
191   if(ev < fEventCnt) {
192     fRawRootReader->RewindEvents();
193     fEventCnt = -1;
194   }
195
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   
206   LoadEvent();
207   gEve->Redraw3D();
208
209   return kTRUE;
210 }
211
212
213 //______________________________________________________________________________
214 Bool_t AliEveTRDLoaderRaw::LoadEvent()
215 {
216   // Load event.
217   AliInfo("Loading ...");
218
219   static const TEveException kEH("AliEveTRDLoader::LoadEvent ");
220   if(fRawRootReader == 0x0) throw(kEH + "data file not opened.");
221
222
223   fRawRootReader->Reset();
224   fRawRootReader->SelectEquipment(0, 1024, 1041);
225   fRawRootReader->Select("TRD");
226   
227 //   AliTRDrawStream::AllowCorruptedData();
228 //   AliTRDrawStream::DisableStackNumberChecker();
229 //   AliTRDrawStream::DisableStackLinkNumberChecker();
230
231   AliTRDrawStream *pinput = new AliTRDrawStream(fRawRootReader);
232   AliTRDrawStream &input = *pinput;
233
234  // AliInfo(Form("Stream version: %s", input.IsA()->GetName()));
235
236   AliEveTRDChamber *chmb;
237   AliTRDdigitsManager *dm = new AliTRDdigitsManager();
238   dm->CreateArrays();
239
240   Int_t det    = 0;
241   while ((det = input.NextChamber(dm)) >= 0){
242     if(!(chmb=GetChamber(det))) continue;
243     chmb->LoadDigits(dm);
244
245     dm->RemoveDigits(det);
246     dm->RemoveDictionaries(det);
247     dm->ClearIndexes(det);
248   }
249
250
251   delete pinput;
252   pinput = NULL;
253
254
255   return kTRUE;
256 }
257
258
259
260 ///////////////////////////////////////////////////////////
261 //////////// AliEveTRDLoaderSimEditor /////////////////////
262 ///////////////////////////////////////////////////////////
263
264 //______________________________________________________________________________
265 AliEveTRDLoaderSimEditor::AliEveTRDLoaderSimEditor(const TGWindow* p, Int_t width, Int_t height,
266                                                    UInt_t options, Pixel_t back) :
267   TGedFrame(p, width, height, options | kVerticalFrame, back)
268   ,fM(0x0)
269   ,fCheckedHits(0x0)
270   ,fCheckedDigits(0x0)
271   ,fCheckedClusters(0x0)
272   ,fCheckedTracklets(0x0)
273 {
274   // Constructor.
275
276   MakeTitle("AliEveTRDLoaderSim");
277
278   // "Data selector" group frame
279   TGGroupFrame *fGroupFrame = new TGGroupFrame(this,"Data selector");
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));
283
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));
287
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));
291
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));
295
296   fGroupFrame->SetLayoutManager(new TGVerticalLayout(fGroupFrame));
297   //    fGroupFrame->Resize(164,116);
298   AddFrame(fGroupFrame, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
299 }
300
301 //______________________________________________________________________________
302 void AliEveTRDLoaderSimEditor::SetModel(TObject* obj)
303 {
304   // Set model object.
305
306   if(!(fM = dynamic_cast<AliEveTRDLoaderSim*>(obj))) return;
307
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);
318 }
319
320 //______________________________________________________________________________
321 void AliEveTRDLoaderSimEditor::Toggle(Int_t id)
322 {
323   // Toggle given button id.
324
325   switch(id){
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;
338   }
339 }
340