4 // ***************************************************
8 // - geom_gentle_muon.C
9 // ***************************************************
12 #include <TEvePointSet.h>
13 #include "EveBase/AliEveEventManager.h"
14 #include <AliCluster.h>
15 #include <TPC/AliTPCClustersRow.h>
17 class TEveProjectionManager;
20 class AliEveMacroExecutor;
24 class AliHLTTriggerDecision;
27 // -----------------------------------------------------------------
28 // -- Geometry / Scenes --
29 // -----------------------------------------------------------------
31 TEveProjectionManager *gRPhiMgr = 0;
32 TEveProjectionManager *gRhoZMgr = 0;
34 // -----------------------------------------------------------------
35 // -- Geometry / Scenes Parameters --
36 // -----------------------------------------------------------------
38 // -- Parameters to show different geometries
39 Bool_t gShowMUON = kTRUE;
40 Bool_t gShowMUONRPhi = kFALSE;
41 Bool_t gShowMUONRhoZ = kTRUE;
43 // -----------------------------------------------------------------
45 // -----------------------------------------------------------------
47 // -- Timer for automatic event loop
51 AliEveHOMERManager* gHomerManager = 0;
54 TEvePointSet* gPHOSClusters = 0;
55 TEvePointSet* gTPCClusters = 0;
56 TEvePointSet* gSPDClusters = 0;
59 TEveTrackList* gTPCTrack = 0;
61 // -----------------------------------------------------------------
63 // -----------------------------------------------------------------
65 Int_t initializeEveViewer( Bool_t showExtraGeo );
69 Int_t processPHOSClusters( AliHLTHOMERBlockDesc* block);
71 Int_t processEsdTracks( AliHLTHOMERBlockDesc* block, TEveTrackList* cont );
73 Int_t processHLTRDLST( AliHLTHOMERBlockDesc* block );
75 Int_t processROOTTOBJ( AliHLTHOMERBlockDesc* block );
77 Int_t processTPCClusters (AliHLTHOMERBlockDesc * block, TEvePointSet cont );
79 // #################################################################
80 // #################################################################
81 // #################################################################
83 // -----------------------------------------------------------------
84 void onlineDisplay(Bool_t showMuonGeo=kFALSE) {
86 // -- Loading Geometry
87 // ---------------------
89 AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
90 AliCDBManager::Instance()->SetRun(run);
91 AliGeomManager::LoadGeometry();
93 // -- Create new hM object
94 // -------------------------
95 gHomerManager = new AliEveHOMERManager();
96 gHomerManager->SetRetryCount(50,5);
98 Int_t iResult = gHomerManager->Initialize();
100 printf("Error Initializing AliHLTHOMERManager, quitting");
104 // -- Add hM to EveTree
105 // ----------------------
106 gEve->AddToListTree(gHomerManager, kTRUE);
108 // -- Create SourceList
109 // ----------------------
110 iResult = gHomerManager->CreateEveSourcesListLoop();
112 printf ("Couldn't find active services. returning\n");
116 // -- Initialize pointsets and add macros
117 // ----------------------------------------
118 TEveUtil::LoadMacro("hlt_alieve_init.C");
119 hlt_alieve_init(".", -1);
122 // -------------------
123 initializeEveViewer( showMuonGeo );
127 gSystem->ProcessEvents();
128 gEve->Redraw3D(kTRUE);
131 // -----------------------------------------------------------------
132 Int_t initializeEveViewer( Bool_t showMuonGeo ) {
134 //==============================================================================
135 // Geometry, scenes, projections and viewers
136 //==============================================================================
138 TEveGeoShape *geomGentle = 0;
139 TEveGeoShape *geomGentleRPhi = 0;
140 TEveGeoShape *geomGentleRhoZ = 0;
141 TEveGeoShape *geomGentleTRD = 0;
142 TEveGeoShape *geomGentleMUON = 0;
144 // -- Disable extra geometry
145 // ---------------------------
146 if ( ! showMuonGeo ) {
147 gShowMUON = gShowMUONRPhi = gShowMUONRhoZ = kFALSE;
151 // ------------------
152 TEveUtil::LoadMacro("geom_gentle_hlt.C");
153 geomGentle = geom_gentle_hlt();
154 geomGentleRPhi = geom_gentle_rphi(); geomGentleRPhi->IncDenyDestroy();
155 geomGentleRhoZ = geom_gentle_rhoz(); geomGentleRhoZ->IncDenyDestroy();
156 geomGentleTRD = geom_gentle_trd();
159 TEveUtil::LoadMacro("geom_gentle_muon.C");
160 geomGentleMUON = geom_gentle_muon(kFALSE);
166 TEveScene *rPhiGeomScene = gEve->SpawnNewScene("RPhi Geometry",
167 "Scene holding projected geometry for the RPhi view.");
168 TEveScene *rhoZGeomScene = gEve->SpawnNewScene("RhoZ Geometry",
169 "Scene holding projected geometry for the RhoZ view.");
170 TEveScene *rPhiEventScene = gEve->SpawnNewScene("RPhi Event Data",
171 "Scene holding projected geometry for the RPhi view.");
172 TEveScene *rhoZEventScene = gEve->SpawnNewScene("RhoZ Event Data",
173 "Scene holding projected geometry for the RhoZ view.");
175 // -- Projection managers
176 // ------------------------
178 // -- R-Phi Projection
179 gRPhiMgr = new TEveProjectionManager();
180 gRPhiMgr->SetProjection(TEveProjection::kPT_RPhi);
181 gEve->AddToListTree(gRPhiMgr, kFALSE);
183 TEveProjectionAxes* a = new TEveProjectionAxes(gRPhiMgr);
184 a->SetMainColor(kWhite);
185 a->SetTitle("R-Phi");
186 a->SetTitleSize(0.05);
187 a->SetTitleFont(102);
188 a->SetLabelSize(0.025);
189 a->SetLabelFont(102);
190 rPhiGeomScene->AddElement(a);
193 gRPhiMgr->SetCurrentDepth(-10);
194 gRPhiMgr->ImportElements(geomGentleRPhi, rPhiGeomScene);
195 gRPhiMgr->SetCurrentDepth(0);
196 gRPhiMgr->ImportElements(geomGentleTRD, rPhiGeomScene);
197 if (gShowMUONRPhi) gRPhiMgr->ImportElements(geomGentleMUON, rPhiGeomScene);
199 // -- Rho-Z Projection
200 gRhoZMgr = new TEveProjectionManager();
201 gRhoZMgr->SetProjection(TEveProjection::kPT_RhoZ);
202 gEve->AddToListTree(gRhoZMgr, kFALSE);
204 TEveProjectionAxes* a = new TEveProjectionAxes(gRhoZMgr);
205 a->SetMainColor(kWhite);
206 a->SetTitle("Rho-Z");
207 a->SetTitleSize(0.05);
208 a->SetTitleFont(102);
209 a->SetLabelSize(0.025);
210 a->SetLabelFont(102);
211 rhoZGeomScene->AddElement(a);
213 gRhoZMgr->SetCurrentDepth(-10);
214 gRhoZMgr->ImportElements(geomGentleRhoZ, rhoZGeomScene);
215 gRhoZMgr->SetCurrentDepth(0);
216 gRhoZMgr->ImportElements(geomGentleTRD, rhoZGeomScene);
217 if (gShowMUONRhoZ) gRhoZMgr->ImportElements(geomGentleMUON, rhoZGeomScene);
221 TEveBrowser *browser = gEve->GetBrowser();
222 browser->ShowCloseTab(kFALSE);
224 TEveViewer *threeDView = 0;
225 TEveViewer *rPhiView = 0;
226 TEveViewer *rhoZView = 0;
228 TEveWindowSlot *slot = TEveWindow::CreateWindowInTab(browser->GetTabRight());
229 TEveWindowPack *pack = slot->MakePack();
230 pack->SetElementName("Multi View");
231 pack->SetHorizontal();
232 pack->SetShowTitleBar(kFALSE);
233 pack->NewSlot()->MakeCurrent();
234 threeDView = gEve->SpawnNewViewer("3D View", "");
235 threeDView->AddScene(gEve->GetGlobalScene());
236 threeDView->AddScene(gEve->GetEventScene());
238 pack = pack->NewSlot()->MakePack();
239 pack->SetShowTitleBar(kFALSE);
240 pack->NewSlot()->MakeCurrent();
241 rPhiView = gEve->SpawnNewViewer("RPhi View", "");
242 rPhiView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
243 rPhiView->AddScene(rPhiGeomScene);
244 rPhiView->AddScene(rPhiEventScene);
246 pack->NewSlot()->MakeCurrent();
247 rhoZView = gEve->SpawnNewViewer("RhoZ View", "");
248 rhoZView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
249 rhoZView->AddScene(rhoZGeomScene);
250 rhoZView->AddScene(rhoZEventScene);
252 TEveViewerList *viewerlist = new TEveViewerList();
253 viewerlist->AddElement(gEve->GetDefaultViewer());
255 viewerlist->AddElement(threeDView);
256 viewerlist->AddElement(rhoZView);
257 viewerlist->AddElement(rPhiView);
258 viewerlist->AddElement(threeDView);
259 viewerlist->SwitchColorSet();
261 //==============================================================================
262 // Macros / QA histograms
263 //==============================================================================
265 // -- Registration of per-event macros
266 // -------------------------------------
268 AliEveMacroExecutor *exec = new AliEveMacroExecutor();
270 exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "SIM Track", "kine_tracks.C", "kine_tracks", "", kFALSE));
272 exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "SIM Hit ITS", "its_hits.C", "its_hits", "", kFALSE));
273 exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "SIM Hit TPC", "tpc_hits.C", "tpc_hits", "", kFALSE));
274 exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "SIM Hit T0", "t0_hits.C", "t0_hits", "", kFALSE));
275 exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "SIM Hit FMD", "fmd_hits.C", "fmd_hits", "", kFALSE));
277 exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "DIG FMD", "fmd_digits.C", "fmd_digits", "", kFALSE));
279 exec->AddMacro(new AliEveMacro(AliEveMacro::kRawReader, "RAW TPC", "tpc_raw.C", "tpc_raw", "", kFALSE));
280 exec->AddMacro(new AliEveMacro(AliEveMacro::kRawReader, "RAW T0", "t0_raw.C", "t0_raw", "", kFALSE));
281 exec->AddMacro(new AliEveMacro(AliEveMacro::kRawReader, "RAW FMD", "fmd_raw.C", "fmd_raw", "", kFALSE));
282 exec->AddMacro(new AliEveMacro(AliEveMacro::kRawReader, "RAW VZERO", "vzero_raw.C", "vzero_raw", "", kFALSE));
283 exec->AddMacro(new AliEveMacro(AliEveMacro::kRawReader, "RAW ACORDE", "acorde_raw.C", "acorde_raw", "", kFALSE));
285 exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX", "primary_vertex.C", "primary_vertex", "", kTRUE));
286 exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX Ellipse", "primary_vertex.C", "primary_vertex_ellipse", "", kTRUE));
287 exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX Box", "primary_vertex.C", "primary_vertex_box", "kFALSE, 3, 3, 3", kFALSE));
288 exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX", "primary_vertex.C", "primary_vertex_spd", "", kTRUE));
289 exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX Ellipse", "primary_vertex.C", "primary_vertex_ellipse_spd", "", kTRUE));
290 exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX Box", "primary_vertex.C", "primary_vertex_box_spd", "kFALSE, 3, 3, 3", kFALSE));
291 exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX", "primary_vertex.C", "primary_vertex_tpc", "", kFALSE));
292 exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX Ellipse", "primary_vertex.C", "primary_vertex_ellipse_tpc", "", kFALSE));
293 exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX Box", "primary_vertex.C", "primary_vertex_box_tpc", "kFALSE, 3, 3, 3", kFALSE));
295 exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC V0", "esd_V0_points.C", "esd_V0_points_onfly"));
296 exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC V0", "esd_V0_points.C", "esd_V0_points_offline"));
297 exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC V0", "esd_V0.C", "esd_V0"));
298 exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC CSCD", "esd_cascade_points.C", "esd_cascade_points"));
299 exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC CSCD", "esd_cascade.C", "esd_cascade"));
300 exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC KINK", "esd_kink_points.C", "esd_kink_points"));
301 exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC KINK", "esd_kink.C", "esd_kink"));
303 exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC Track", "esd_tracks.C", "esd_tracks", "", kFALSE));
304 exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC Track", "esd_tracks.C", "esd_tracks_MI", "", kFALSE));
305 exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC Track", "esd_tracks.C", "esd_tracks_by_category", "", kTRUE));
307 exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC Tracklet", "esd_spd_tracklets.C", "esd_spd_tracklets", "", kFALSE));
309 exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC ZDC", "esd_zdc.C", "esd_zdc", "", kFALSE));
311 exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "REC Clus", "clusters.C+", "clusters", "", kFALSE));
312 exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "REC Clus ITS", "its_clusters.C+", "its_clusters"));
313 exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "REC Clus TPC", "tpc_clusters.C+", "tpc_clusters"));
314 exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "REC Clus TRD", "trd_clusters.C+", "trd_clusters"));
315 exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "REC Clus TOF", "tof_clusters.C+", "tof_clusters"));
317 exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "REC Clus TPC", "vplot_tpc.C+", "vplot_tpc", "", kFALSE));
319 exec->AddMacro(new AliEveMacro(AliEveMacro::kAOD, "ANA HF", "aod_HF.C", "aod_HF", "", kFALSE));
320 exec->AddMacro(new AliEveMacro(AliEveMacro::kAOD, "ANA Jets", "jetplane.C", "jetplane", "", kFALSE));
325 slot = TEveWindow::CreateWindowInTab(browser->GetTabRight());
326 slot->StartEmbedding();
327 new AliQAHistViewer(gClient->GetRoot(), 600, 400, kTRUE);
328 slot->StopEmbedding("QA histograms");
332 //==============================================================================
333 // Additional GUI components
334 //==============================================================================
336 slot = TEveWindow::CreateWindowInTab(browser->GetTabRight());
337 TEveWindowTab *store_tab = slot->MakeTab();
338 store_tab->SetElementNameTitle("WindowStore",
339 "Undocked windows whose previous container is not known\n"
340 "are placed here when the main-frame is closed.");
341 gEve->GetWindowManager()->SetDefaultContainer(store_tab);
346 // -----------------------------------------------------------------
351 gStyle->SetPalette(1, 0);
352 gEve->DisableRedraw();
354 // -- Get Next Event from HOMER
355 // ------------------------------
356 if ( ( iResult = gHomerManager->NextEvent()) ){
362 if ( gTPCClusters ) gTPCClusters->Reset();
363 if ( gPHOSClusters ) gPHOSClusters->Reset();
364 if ( gTPCTrack ) gTPCTrack->DestroyElements();
366 if (gHomerManager->GetBlockList()->IsEmpty() ) {
367 printf ("No Blocks in list ... ");
371 TIter next(gHomerManager->GetBlockList());
372 AliHLTHOMERBlockDesc* block = 0;
374 // -- Iterate over blocks in the block list
375 // ------------------------------------------
376 while ((block = (AliHLTHOMERBlockDesc*)next())) {
378 printf( "------------------- xxxxxxxxxxxxxxx ----------------------\n");
379 printf( "Detector : %s\n", block->GetDetector().Data() );
380 printf( "Datatype : %s\n", block->GetDataType().Data() );
381 if (block->IsTObject() )
382 printf( "Is TObject of class: %s\n", block->GetClassName().Data() );
383 printf( "------------------- xxxxxxxxxxxxxxx ----------------------\n");
386 // -----------------------------------------------------
389 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++
390 if ( ! block->GetDetector().CompareTo("HLT") ) {
393 if ( ! block->GetDataType().CompareTo("ALIESDV0") ) {
394 cout << "ALIESDV0 ------- ALIESDV0 ------ ALIESDV0" << endl;
397 gTPCTrack = new TEveTrackList("ESD Tracks");
398 gTPCTrack->SetMainColor(6);
399 gEve->AddElement(gTPCTrack);
402 iResult = processEsdTracks(block, gTPCTrack);
405 // -- Process ROOTObj
406 else if ( ! block->GetDataType().CompareTo("ROOTTOBJ") ) {
407 processROOTTOBJ( block );
410 // -- Process HLT RDLST
411 else if ( ! block->GetDataType().CompareTo("HLTRDLST") ) {
412 processHLTRDLST( block );
414 } // if ( ! block->GetDetector().CompareTo("HLT") ) {
417 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++
418 else if ( ! block->GetDetector().CompareTo("TPC") ) {
421 if ( ! block->GetDataType().CompareTo("ALIESDV0") ) {
424 } // else if ( ! block->GetDetector().CompareTo("HLT") ) {
426 // ++ ITS - SPD BLOCK
427 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++
428 else if ( ! block->GetDetector().CompareTo("ISPD") ){
429 if ( block->GetDataType().CompareTo("CLUSTERS") == 0 ) {
430 //processISPDClusters( block );
432 } // else if ( ! block->GetDetector().CompareTo("ISPD") ){
434 } // while ((block = (AliHLTHOMERBlockDesc*)next())) {
436 if ( gTPCClusters ) gTPCClusters->ResetBBox();
437 if ( gPHOSClusters ) gPHOSClusters->ResetBBox();
438 if ( gSPDClusters ) gSPDClusters->ResetBBox();
439 if ( gTPCTrack ) gTPCTrack->ElementChanged();
443 TTimeStamp ts(esd->GetTimeStamp());
444 TString win_title("Eve Main Window -- Timestamp: ");
445 win_title += ts.AsString("s");
446 win_title += "; Event # in ESD file: ";
447 win_title += esd->GetEventNumberInFile();
448 gEve->GetBrowser()->SetWindowName(win_title);
451 // -- Set Projections
452 // --------------------------------------------
453 TEveElement* top = gEve->GetCurrentEvent();
455 // XXX Primary vertex ... to be retrieved from the ESD
456 Double_t x[3] = { 0, 0, 0 };
458 if (gRPhiMgr && top) {
459 gRPhiMgr->DestroyElements();
460 gRPhiMgr->SetCenter(x[0], x[1], x[2]);
461 gRPhiMgr->ImportElements(geomGentleRPhi);
462 gRPhiMgr->ImportElements(top);
464 if (gRhoZMgr && top) {
465 gRhoZMgr->DestroyElements();
466 gRhoZMgr->SetCenter(x[0], x[1], x[2]);
467 gRhoZMgr->ImportElements(geomGentleRhoZ);
468 gRhoZMgr->ImportElements(geomMuon);
469 gRhoZMgr->ImportElements(top);
471 // --------------------------------------------
473 gEve->Redraw3D(0,1); // (0, 1)
474 gEve->EnableRedraw();
479 // -----------------------------------------------------------------
481 eventTimer.SetCommand("nextEvent()");
482 eventTimer.Start(6000);
485 // -----------------------------------------------------------------
486 void stopLoopEvent() {
490 // -----------------------------------------------------------------
491 Int_t processHLTRDLST(AliHLTHOMERBlockDesc* block) {
496 // -----------------------------------------------------------------
497 Int_t processISPDClusters(AliHLTHOMERBlockDesc* block) {
498 cout<<"ISPD dump:"<<endl;
499 TObject ob = block->GetTObject();
505 // -----------------------------------------------------------------
506 Int_t processROOTTOBJ(AliHLTHOMERBlockDesc* block) {
508 // -- AliHLTGlobalTriggerDecision
509 if ( ! block->GetClassName().CompareTo("AliHLTGlobalTriggerDecision") ) {
511 AliHLTGlobalTriggerDecision *trig = dynamic_cast<AliHLTGlobalTriggerDecision*> block->GetTObject();
514 TEveText* tt = new TEveText("Trigger: Class is known ;-) ");
515 gEve->AddElement(tt);
519 printf(" Unknown root object %s",block->GetClassName().Data() );
525 // -----------------------------------------------------------------
526 Int_t processEsdTracks( AliHLTHOMERBlockDesc* block, TEveTrackList* cont ) {
528 AliESDEvent* esd = (AliESDEvent *) (block->GetTObject());
529 esd->GetStdContent();
531 esd_track_propagator_setup(cont->GetPropagator(),0.1*esd->GetMagneticField(), 520);
533 printf( "Number of ESD Tracks : %d \n", esd->GetNumberOfTracks());
535 for (Int_t iter = 0; iter < esd->GetNumberOfTracks(); ++iter) {
536 AliEveTrack* track = esd_make_track(esd->GetTrack(iter), cont);
537 cont->AddElement(track);
540 cont->SetTitle(Form("N=%d", esd->GetNumberOfTracks()) );
547 // Int_t tpc_clusters(TEveElement* cont=0, Float_t maxR=270)
551 // AliTPCClustersRow *clrow = new AliTPCClustersRow();
552 // clrow->SetClass("AliTPCclusterMI");
553 // clrow->SetArray(kMaxCl);
554 // cTree->SetBranchAddress("Segment", &clrow);
556 // tTPCClusters->SetOwnIds(kTRUE);
559 // Float_t maxRsqr = maxR*maxR;
560 // Int_t nentr=(Int_t)cTree->GetEntries();
561 // for (Int_t i=0; i<nentr; i++)
563 // if (!cTree->GetEvent(i)) continue;
565 // TClonesArray *cl = clrow->GetArray();
566 // Int_t ncl = cl->GetEntriesFast();
570 // AliCluster *c = (AliCluster*) cl->UncheckedAt(ncl);
571 // Float_t g[3]; //global coordinates
572 // c->GetGlobalXYZ(g);
573 // if (g[0]*g[0]+g[1]*g[1] < maxRsqr)
575 // clusters->SetNextPoint(g[0], g[1], g[2]);
576 // AliCluster *atp = new AliCluster(*c);
577 // clusters->SetPointId(atp);
585 // if (clusters->Size() == 0 && gEve->GetKeepEmptyCont() == kFALSE)
587 // Warning("tpc_clusters.C", "No TPC clusters");
593 // sprintf(form,"TPC Clusters");
594 // gTPCClusters->SetName(form);
597 // sprintf(tip,"N=%d", gTPCClusters->Size());
598 // gTPCClusters->SetTitle(tip);
600 // const TString viz_tag("TPC Clusters");
601 // gTPCClusters->ApplyVizTag(viz_tag, "Clusters");
608 Int_t processTPCClusters(AliHLTHOMERBlockDesc* block, TEvePointSet * cont) {
611 Int_t slice = block->GetSubDetector().Atoi();
612 Int_t patch = block->GetSubSubDetector().Atoi();
613 Float_t phi = ( slice + 0.5 ) * TMath::Pi() / 9.0;
614 Float_t cos = TMath::Cos( phi );
615 Float_t sin = TMath::Sin( phi );
617 AliHLTTPCClusterData *cd = (AliHLTTPCClusterData*) block->GetData();
618 UChar_t *data = (UChar_t*) cd->fSpacePoints;
620 if ( cd->fSpacePointCnt == 0 ) {
621 printf ("No Clusters found in sector %d patch %d.\n", slice, patch );
626 for (Int_t ii = 0; ii < cd->fSpacePointCnt; ++ii, data += sizeof(AliHLTTPCSpacePointData)) {
627 AliHLTTPCSpacePointData *sp = (AliHLTTPCSpacePointData *) data;
629 cont->SetNextPoint(cos*sp->fX - sin*sp->fY, sin*sp->fX + cos*sp->fY, sp->fZ);