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