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