Move contents of EVE/Alieve to EVE/EveDet as most code will remain there.
[u/mrichter/AliRoot.git] / EVE / hlt-macros / homer_display.C
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 // Functions to read data from HOMER.
11 //
12 // Setup: edit location of HLT configuration in first line of
13 // homer_display(). This is a temporary solution.
14 //
15 // Run as: alieve command_queue.C+ hlt_structs.C+ homer_display.C
16 //
17 // nextEvent() will get next event from HOMER.
18
19
20 #include "TTimer.h"
21 #include "TRandom.h"
22 #include "TVirtualPad.h"
23
24 class AliRawReaderMemory;
25
26 class AliEveHOMERManager;
27 class AliHLTHOMERBlockDesc;
28
29 class TEvePointSet;
30 class TEveTrackList;
31 class TEveTrack;
32
33 class AliEveTPCLoader;
34 class AliEveTPCData;
35 class AliEveTPCSector2D;
36 class AliEveTPCSector3D;
37
38 AliEveTPCLoader* loader  = 0;
39 AliEveTPCData*   tpcdata = 0;
40 TEvePointSet*    tpc_cls = 0;
41 TEveTrackList*   tpc_trk = 0;
42
43 AliRawReaderMemory* memreader = 0;
44 AliEveHOMERManager* homerM = 0;
45
46 Int_t    event  = -1;
47
48 TTimer   timer;
49 TTimer   event_timer;
50
51 TThread* ldthread = 0;
52
53 TRandom  rnd(0);
54
55 TGLViewer::ECameraType camera = TGLViewer::kCameraPerspXOZ;
56
57
58 //****************************************************************************
59 void nextEvent();
60
61 //****************************************************************************
62 void process_tpc_clusters(AliHLTHOMERBlockDesc* b);
63
64 //****************************************************************************
65 void homer_display()
66 {
67   homerM = new AliEveHOMERManager("/local/home/hlt/TPC-SCC1-Generate.xml");
68   //  homerM = new AliEveHOMERManager("/local/home/hlt/sampleConfig2.xml");
69
70   gEve->AddToListTree(homerM, kTRUE);
71
72   homerM->CreateHOMERSourcesList();
73   //  homerM->SelectRawTPC();
74   homerM->SelectClusterTPC();
75   homerM->SelectESDTPC();
76   homerM->ConnectHOMER();
77
78   memreader = new AliRawReaderMemory(0, 0);
79   gStyle->SetPalette(1, 0);
80
81   loader = new AliEveTPCLoader;
82   loader->SetDoubleSR(kTRUE);
83   loader->SetInitParams(40, 900, 10, 100); // Sector params (mint, maxt, thr, maxval)
84   //loader->SetInitParams(40, 1023, 10); // Sector params (mint, maxt, thr)
85   tpcdata = loader->GetData();
86   tpcdata->SetLoadPedestal(0);
87   tpcdata->SetLoadThreshold(0);
88   // tpcdata->SetAutoPedestal(kTRUE); // For non-zero suppressed data.
89   tpcdata->SetAutoPedestal(kFALSE);
90   gEve->AddElement(loader);
91
92   tpc_cls = new TEvePointSet("TPC Clusters");
93   tpc_cls->SetMainColor((Color_t)kRed);
94   gEve->AddElement(tpc_cls);
95
96   tpc_trk = new TEveTrackList("TPC Tracks");
97   gEve->AddElement(tpc_trk);
98   tpc_trk->SetMainColor(Color_t(6));
99   TEveTrackPropagator* rnrStyle = tpc_trk->GetPropagator();
100   rnrStyle->SetMagField( 5 );
101
102   nextEvent();
103 }
104
105
106 //****************************************************************************
107 void nextEvent()
108 {
109   tpcdata->DropAllSectors();
110   tpc_cls->Reset();
111   tpc_trk->DestroyElements();
112
113   homerM->NextEvent();
114   TIter next(homerM->GetBlockList());
115   AliHLTHOMERBlockDesc* b = 0;
116   while ((b = (AliHLTHOMERBlockDesc*)next())) {
117
118     //    printf("Q - %s\n", b->GetDataType().Data());
119
120     if (b->GetDataType().CompareTo("CLUSTERS") == 0) {
121       process_tpc_clusters(b);
122       tpc_cls->ElementChanged();
123     }
124
125     else if (b->GetDataType().CompareTo("DDL_RAW") == 0) {
126       Int_t slice = b->GetSubDetector().Atoi();
127       Int_t patch = b->GetSubSubDetector().Atoi();
128       Int_t eqid = 768 + patch;
129       if (patch >= 2)
130         eqid += 4*slice + 70;
131       else
132         eqid += 2*slice;
133
134       //printf("%d %d %d -- %p %d\n", slice, patch, eqid, b->GetData(), b->GetSize());
135
136       memreader->SetMemory(b->GetData(), b->GetSize());
137       memreader->SetEquipmentID(eqid);
138       memreader->Reset();
139
140       AliTPCRawStream input(memreader);
141       input.SetOldRCUFormat(kTRUE);
142       //input.SetOldRCUFormat(kFALSE);
143       memreader->Select("TPC"); // ("TPC", firstRCU, lastRCU);
144       tpcdata->LoadRaw(input, kTRUE, kTRUE);
145     }
146   }
147
148   loader->UpdateSectors(kTRUE); // true -> delete non present
149   tpc_cls->ResetBBox();
150   tpc_trk->MakeTracks();
151
152   gEve->Redraw3D(1, 1);
153 }
154
155 //****************************************************************************
156 void process_tpc_clusters(AliHLTHOMERBlockDesc* b)
157 {
158   AliHLTTPCClusterData    *cd = (AliHLTTPCClusterData*) b->GetData();
159   UChar_t *data = (UChar_t*) cd->fSpacePoints;
160
161   //  printf("XXX %p %d; sizeof=%d, calcsize=%d\n", b->GetData(), cd->fSpacePointCnt,
162   //     sizeof(AliHLTTPCSpacePointData), (b->GetSize() - 4)/cd->fSpacePointCnt);
163
164   Int_t   slice = b->GetSubDetector().Atoi();
165   Float_t phi = (slice+0.5)*TMath::Pi()/9.0;
166   Float_t cos = TMath::Cos(phi);
167   Float_t sin = TMath::Sin(phi);
168
169   for (Int_t i = 0; i < cd->fSpacePointCnt; ++i, data += sizeof(AliHLTTPCSpacePointData)) {
170     AliHLTTPCSpacePointData *sp = (AliHLTTPCSpacePointData *) data;
171     //if (i % 100 == 0)
172     //printf("  %4d  %6.2f, %6.2f, %6.2f\n", i, sp->fX, sp->fY, sp->fZ);
173     tpc_cls->SetNextPoint(cos*sp->fX - sin*sp->fY,
174                           sin*sp->fX + cos*sp->fY,
175                           sp->fZ);
176   }
177 }
178
179 //****************************************************************************
180 TEveTrack* esd_make_track(TEveTrackPropagator*   rnrStyle,
181                             Int_t                  index,
182                             AliESDtrack*           at,
183                             AliExternalTrackParam* tp=0)
184 {
185   // Helper function
186   Double_t        pbuf[3], vbuf[3];
187   TEveRecTrack  rt;
188
189   if(tp == 0) tp = at;
190
191   rt.label  = at->GetLabel();
192   rt.index  = index;
193   rt.status = (Int_t) at->GetStatus();
194   rt.sign   = tp->GetSign();
195   tp->GetXYZ(vbuf);
196   rt.V.Set(vbuf);
197   tp->GetPxPyPz(pbuf);
198   rt.P.Set(pbuf);
199   Double_t ep = at->GetP(), mc = at->GetMass();
200   rt.beta = ep/TMath::Sqrt(ep*ep + mc*mc);
201
202   TEveTrack* track = new TEveTrack(&rt, rnrStyle);
203   //PH The line below is replaced waiting for a fix in Root
204   //PH which permits to use variable siza arguments in CINT
205   //PH on some platforms (alphalinuxgcc, solariscc5, etc.)
206   //PH  track->SetName(Form("ESDTrack %d", rt.label));
207   //PH  track->SetTitle(Form("pT=%.3f, pZ=%.3f; V=(%.3f, %.3f, %.3f)",
208   //PH                 rt.sign*TMath::Hypot(rt.P.x, rt.P.y), rt.P.z,
209   //PH                 rt.V.x, rt.V.y, rt.V.z));
210   char form[1000];
211   sprintf(form,"TEveTrack %d", rt.index);
212   track->SetName(form);
213   track->SetStdTitle();
214   return track;
215 }
216
217 //****************************************************************************
218 void process_tpc_tracks(AliHLTHOMERBlockDesc* b)
219 {
220   AliESDEvent* esd = (AliESDEvent*) b->GetTObject();
221
222   TEveTrackPropagator* rnrStyle = tpc_trk->GetPropagator();
223
224   for (Int_t n=0; n<esd->GetNumberOfTracks(); n++)
225   {
226     AliESDtrack           *at = esd->GetTrack(n);
227     AliExternalTrackParam *tp = at;
228
229     TEveTrack* track = esd_make_track(rnrStyle, n, at, tp);
230     track->SetAttLineAttMarker(tpc_trk);
231     gEve->AddElement(track, tpc_trk);
232   }
233
234 }
235
236 //****************************************************************************
237 void process_tpc_xxxx(AliESDEvent* esd)
238 {
239   TEveTrackPropagator* rnrStyle = tpc_trk->GetPropagator();
240
241   for (Int_t n=0; n<esd->GetNumberOfTracks(); n++)
242   {
243     AliESDtrack           *at = esd->GetTrack(n);
244     AliExternalTrackParam *tp = at;
245
246     TEveTrack* track = esd_make_track(rnrStyle, n, at, tp);
247     track->SetAttLineAttMarker(tpc_trk);
248     gEve->AddElement(track, tpc_trk);
249   }
250
251 }
252
253 //****************************************************************************
254 /*
255   // Getting esd
256
257 f=TFile::Open("AliESDs.root")
258 AliESDEvent * esd = new AliESDEvent
259 esd->ReadFromTree(esdTree)
260 esdTree->GetEntry(0)
261 esd->GetNumberOfTracks()
262 ///////////////////
263
264 root [3] AliESDEvent * esd = new AliESDEvent
265 root [4] esd->ReadFromTree(esdTree)
266 W-TStreamerInfo::BuildOld: Cannot convert AliESDCaloCluster::fTracksMatched from type:TArrayS* to type:TArrayI, skip element
267 W-TStreamerInfo::BuildOld: Cannot convert AliESDCaloCluster::fLabels from type:TArrayS* to type:TArrayI, skip element
268 STEER/AliESDEvent.cxx 1040 AliESDEvent::ReadFromTree() TList contains less than the standard contents 21 < 22
269 root [5] esdTree->GetEntry(0)
270 (Int_t)(764314)
271 root [6] esd->GetNumberOfTracks()
272 (const Int_t)(275)
273 root [7] process_tpc_xxxx(esd)
274 root [8] gEve->Redraw3D(
275 void Redraw3D(Bool_t resetCameras = kFALSE, Bool_t dropLogicals = kFALSE)
276 root [8] gEve->Redraw3D(1,1)
277 root [9] trk_cnt->Elem
278 variable "trk_cnt" not defined.
279
280 variable "trk_cnt->Elem" not defined.
281 root [9] trk_cnt->Eleme
282 variable "trk_cnt" not defined.
283
284 variable "trk_cnt->Eleme" not defined.
285 root [9] tpc_trk->ElementChanged(
286 void ElementChanged(Bool_t update_scenes = kTRUE, Bool_t redraw = kFALSE)
287 root [9] tpc_trk->ElementChanged(1,1)
288 root [10] tpc_trk->SelectByP
289 SelectByPt
290 SelectByPt
291 SelectByP
292 SelectByP
293 root [10] tpc_trk->SelectByPt(
294 void SelectByPt(Float_t min_pt, Float_t max_pt)
295 void SelectByPt(Float_t min_pt, Float_t max_pt, TEveElement* el)
296 root [10] tpc_trk->SelectByPt(0,1000000000000)
297 root [11] tpc_trk->MakeTracks(
298 void MakeTracks(Bool_t recurse = kTRUE)
299 root [11] tpc_trk->MakeTracks()
300 root [12]
301
302
303
304 */
305
306
307
308
309 //****************************************************************************
310 void loopEvent()
311 {
312   event_timer.SetCommand("nextEvent()");
313   event_timer.Start(60);
314 }
315
316 //****************************************************************************
317 void stopLoopEvent()
318 {
319   event_timer.Stop();
320 }