4 // ***************************************************
8 // - geom_gentle_muon.C
9 // ***************************************************
11 #if !defined(__CINT__) || defined(__MAKECINT__)
13 //****************** ROOT ******************************************
15 #include "TVirtualPad.h"
16 #include "TGLViewer.h"
18 #include "TGFileBrowser.h"
21 #include "TDirectory.h"
28 //****************** ROOT/EVE **************************************
29 #include "TEveManager.h"
31 #include "AliEveHOMERManager.h"
33 #include "geom_gentle_hlt.C"
39 // -----------------------------------------------------------------
40 // -- Geometry / Scenes --
41 // -----------------------------------------------------------------
43 TEveGeoShape *gGeomGentle = 0;
44 TEveGeoShape *gGeomGentleRPhi = 0;
45 TEveGeoShape *gGeomGentleRhoZ = 0;
46 TEveGeoShape *gGeomGentleTRD = 0;
47 TEveGeoShape *gGeomGentleMUON = 0;
49 TEveScene *gRPhiGeomScene = 0;
50 TEveScene *gRhoZGeomScene = 0;
51 TEveScene *gRPhiEventScene = 0;
52 TEveScene *gRhoZEventScene = 0;
54 TEveProjectionManager *gRPhiMgr = 0;
55 TEveProjectionManager *gRhoZMgr = 0;
57 TEveViewer *g3DView = 0;
58 TEveViewer *gRPhiView = 0;
59 TEveViewer *gRhoZView = 0;
61 // -----------------------------------------------------------------
62 // -- Geometry / Scenes Parameters --
63 // -----------------------------------------------------------------
65 // -- Parameters to show different geometries
66 Bool_t gShowMUON = kTRUE;
67 Bool_t gShowMUONRPhi = kFALSE;
68 Bool_t gShowMUONRhoZ = kTRUE;
69 Bool_t gShowTRD = kFALSE;
72 // -----------------------------------------------------------------
74 // -----------------------------------------------------------------
76 // -- Timer for automatic event loop
78 TTimer eventTimerFast;
81 AliEveHOMERManager* gHomerManager = 0;
83 // -- Geometry Manager
84 TGeoManager* gGeoManager = 0;
85 AliPHOSGeometry* gPHOSGeom = 0;
88 TEvePointSet* gSPDClusters = 0;
89 TEvePointSet* gSSDClusters = 0;
90 TEvePointSet* gSDDClusters = 0;
91 TEvePointSet* gTRDClusters = 0;
92 TEvePointSetArray* gTRDColClusters = 0;
93 TEvePointSet* gTPCClusters = 0;
94 TEvePointSet* gTPCTestClusters = 0;
95 TEvePointSetArray* gTPCColClusters = 0;
96 TEveBoxSet* gPHOSBoxSet[5] = {0, 0, 0, 0, 0};
97 TEveBoxSet* gEMCALBoxSet[13] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
98 TEvePointSet* gMUONClusters = 0;
99 TEveStraightLineSet* gMUONTracks = 0;
101 // -- Text output members
102 TEveText* gHLTText = 0;
105 TEveTrackList* gTPCTrack = 0;
107 // -- Canvas for histograms
108 TCanvas* gTRDCanvas = 0;
109 TCanvas* gTPCCanvas = 0;
110 TCanvas* gTPCClustCanvas = 0;
111 TCanvas* gTRDCalibCanvas = 0;
112 TCanvas* gTRDEORCanvas = 0;
113 TCanvas* gPrimVertexCanvas = 0;
114 TCanvas* gSPDVertexCanvas = 0;
115 TCanvas* gITSCanvas = 0;
116 TCanvas* gSSDCanvas0 = 0;
117 TCanvas* gSSDCanvas1 = 0;
118 TCanvas* gV0Canvas = 0;
119 TCanvas* gPHOSCanvas = NULL;
120 TCanvas* gEMCALCanvas = 0;
123 Int_t gSPDVertexHistoCount = 0;
128 Int_t gTRDHistoCount = 0;
129 Int_t gTRDEvents = 0;
134 TH1F* gTPCCharge = 0;
136 TH1F* gTPCQMaxOverCharge = 0;
138 TH1F* gTPCPt = 0; // KK
141 TH1F* gTPCnClusters = 0;
145 TEveElementList* gPHOSElementList = 0;
146 Int_t gPHOSHistoCount =0;
148 TEveElementList* gEMCALElementList = 0;
149 TGeoNode* gEMCALNode = 0;
150 Int_t gEMCALHistoCount =0;
152 // --- Flag if eventloop is running
153 Bool_t gEventLoopStarted = kFALSE;
157 //Container for gGeoManager till it is broken
158 TGeoManager *fGeoManager = 0;
159 // -----------------------------------------------------------------
161 // -----------------------------------------------------------------
163 Int_t initializeEveViewer( Bool_t showBarrel, Bool_t showMuon );
168 // #################################################################
169 // #################################################################
170 // #################################################################
172 // -----------------------------------------------------------------
173 void od ( Bool_t showBarrel = kTRUE, Bool_t showMuon = kFALSE ) {
175 // -- Loading Geometry
176 // ---------------------
178 AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
179 AliCDBManager::Instance()->SetRun(run);
180 AliGeomManager::LoadGeometry();
183 // Get the pointer to gGeoManager before it's broken (bug in alieve)
184 fGeoManager = gGeoManager;
186 // -- Initialize pointsets and add macros
187 // ----------------------------------------
188 //TEveUtil::LoadMacro("hlt_alieve_init.C");
189 //hlt_alieve_init(".", -1);
192 // -------------------
193 initializeEveViewer( showBarrel, showMuon );
195 // -- Reset gGeoManager to the original pointer
196 // ----------------------------------------------
200 gSystem->ProcessEvents();
201 gEve->Redraw3D(kTRUE);
203 // -- Create new hM object
204 // -------------------------
205 gHomerManager = new AliEveHOMERManager();
206 gHomerManager->SetRetryCount(1000,15);
207 gHomerManager->SetEveManager(gEve);
208 gHomerManager->SetGeoManager(gGeoManager);
209 gHomerManager->SetRPhiManager(gRPhiMgr);
210 gHomerManager->SetRPhiEventScene(gRPhiEventScene);
211 gHomerManager->SetRPhiViewer(gRPhiView);
212 gHomerManager->SetRhoZManager(gRhoZMgr);
213 gHomerManager->SetRhoZEventScene(gRhoZEventScene);
214 gHomerManager->SetRhoZViewer(gRhoZView);
215 gHomerManager->SetBarrelFlag(showBarrel);
216 gHomerManager->SetMuonFlag(showMuon);
218 Int_t iResult = gHomerManager->Initialize();
220 printf("Error Initializing AliHLTHOMERManager, quitting");
224 // -- Add hM to EveTree
225 // ----------------------
226 gEve->AddToListTree(gHomerManager, kTRUE);
228 // -- Create SourceList
229 // ----------------------
230 iResult = gHomerManager->CreateEveSourcesListLoop();
232 printf ("Couldn't find active services. Giving up. \n");
238 gHomerManager->ConnectEVEtoHOMER("TPC" );
239 } else if ( MUONMode ) {
240 gHomerManager->ConnectEVEtoHOMER("MUON");
241 } else if( TRDMode ) {
242 gHomerManager->ConnectEVEtoHOMER("TRD");
244 cout<<" No detectors selected, nothing will be displayed"<<endl;
247 gGeoManager = fGeoManager;
252 // -------------------------------------------------------------------------
253 Int_t initializeEveViewer( Bool_t showBarrel, Bool_t showMuon ) {
255 //=============================================================================
256 // Visualization database
257 //============================================================================
259 TEveUtil::AssertMacro("VizDB_scan.C");
265 //==============================================================================
266 // -- Geometry, scenes, projections and viewers
267 //==============================================================================
269 TEveBrowser *browser = gEve->GetBrowser();
270 browser->ShowCloseTab(kFALSE);
272 // -- Disable extra geometry
273 // ---------------------------
275 gShowMUON = gShowMUONRPhi = gShowMUONRhoZ = kFALSE;
278 // ------------------
279 TEveUtil::LoadMacro("geom_gentle_hlt.C");
280 gGeomGentle = geom_gentle_hlt();
281 gGeomGentleRPhi = geom_gentle_rphi(); gGeomGentleRPhi->IncDenyDestroy();
282 gGeomGentleRhoZ = geom_gentle_rhoz(); gGeomGentleRhoZ->IncDenyDestroy();
283 gGeomGentleTRD = geom_gentle_trd();
285 gGeoManager = fGeoManager;
287 gEMCALNode = gGeoManager->GetTopVolume()->FindNode("XEN1_1");
289 TEveGeoTopNode* emcal_re = new TEveGeoTopNode(gGeoManager, gEMCALNode);
290 gEve->AddGlobalElement(emcal_re);
294 gGeomGentleMUON = geom_gentle_muon(kFALSE);
298 gRPhiGeomScene = gEve->SpawnNewScene("RPhi Geometry",
299 "Scene holding projected geometry for the RPhi view.");
300 gRhoZGeomScene = gEve->SpawnNewScene("RhoZ Geometry",
301 "Scene holding projected geometry for the RhoZ view.");
302 gRPhiEventScene = gEve->SpawnNewScene("RPhi Event Data",
303 "Scene holding projected geometry for the RPhi view.");
304 gRhoZEventScene = gEve->SpawnNewScene("RhoZ Event Data",
305 "Scene holding projected geometry for the RhoZ view.");
307 // -- Projection managers
308 // ------------------------
310 gRPhiMgr = new TEveProjectionManager();
311 gRPhiMgr->SetProjection(TEveProjection::kPT_RPhi);
312 gEve->AddToListTree(gRPhiMgr, kFALSE);
314 TEveProjectionAxes* a = new TEveProjectionAxes(gRPhiMgr);
315 a->SetMainColor(kWhite);
316 a->SetTitle("R-Phi");
317 a->SetTitleSize(0.05);
318 a->SetTitleFont(102);
319 a->SetLabelSize(0.025);
320 a->SetLabelFont(102);
321 gRPhiGeomScene->AddElement(a);
323 gRPhiMgr->SetCurrentDepth(-10);
324 gRPhiMgr->ImportElements(gGeomGentleRPhi, gRPhiGeomScene);
325 gRPhiMgr->SetCurrentDepth(0);
326 gRPhiMgr->ImportElements(gGeomGentleTRD, gRPhiGeomScene);
327 if (gShowMUONRPhi) gRPhiMgr->ImportElements(gGeomGentleMUON, gRPhiGeomScene);
329 gRhoZMgr = new TEveProjectionManager();
330 gRhoZMgr->SetProjection(TEveProjection::kPT_RhoZ);
331 gEve->AddToListTree(gRhoZMgr, kFALSE);
333 TEveProjectionAxes* a = new TEveProjectionAxes(gRhoZMgr);
334 a->SetMainColor(kWhite);
335 a->SetTitle("Rho-Z");
336 a->SetTitleSize(0.05);
337 a->SetTitleFont(102);
338 a->SetLabelSize(0.025);
339 a->SetLabelFont(102);
340 gRhoZGeomScene->AddElement(a);
342 gRhoZMgr->SetCurrentDepth(-10);
343 gRhoZMgr->ImportElements(gGeomGentleRhoZ, gRhoZGeomScene);
344 gRhoZMgr->SetCurrentDepth(0);
345 gRhoZMgr->ImportElements(gGeomGentleTRD, gRhoZGeomScene);
347 if (gShowMUONRhoZ) gRhoZMgr->ImportElements(gGeomGentleMUON, gRhoZGeomScene);
352 TEveWindowSlot *slot = TEveWindow::CreateWindowInTab(browser->GetTabRight());
353 TEveWindowPack *pack = slot->MakePack();
354 pack->SetElementName("Multi View");
355 pack->SetHorizontal();
356 pack->SetShowTitleBar(kFALSE);
357 pack->NewSlot()->MakeCurrent();
358 g3DView = gEve->SpawnNewViewer("3D View", "");
359 g3DView->AddScene(gEve->GetGlobalScene());
360 g3DView->AddScene(gEve->GetEventScene());
363 pack = pack->NewSlot()->MakePack();
364 pack->SetShowTitleBar(kFALSE);
365 pack->NewSlot()->MakeCurrent();
366 gRPhiView = gEve->SpawnNewViewer("RPhi View", "");
367 gRPhiView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
368 gRPhiView->AddScene(gRPhiGeomScene);
369 gRPhiView->AddScene(gRPhiEventScene);
371 pack->NewSlot()->MakeCurrent();
372 gRhoZView = gEve->SpawnNewViewer("RhoZ View", "");
373 gRhoZView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
374 gRhoZView->AddScene(gRhoZGeomScene);
375 gRhoZView->AddScene(gRhoZEventScene);
379 //Add HLT Text to windows
381 TGLOverlayButton *ob1 = new TGLOverlayButton(g3DView->GetGLViewer(), "HLT", 0, 20, 110, 60);
382 ob1->SetAlphaValues(0.8, 0.8);
383 // cout << "color" << ob1->GetBackColor() << endl;
384 //ob1->SetBackColor(8421631);
385 //ob1->SetBackColor(10492431);
386 TGLOverlayButton *ob2 = new TGLOverlayButton(g3DView->GetGLViewer(), "ALICE", 0, 0, 110, 20);
387 ob2->SetAlphaValues(0.8, 0.8);
388 //ob2->SetBackColor(0.2);
389 TGLOverlayButton *ob3 = new TGLOverlayButton(gEve->GetDefaultGLViewer(), "HLT", 0, 20, 110, 60);
390 ob3->SetAlphaValues(0.8, 0.8);
391 TGLOverlayButton *ob4 = new TGLOverlayButton(gEve->GetDefaultGLViewer(), "ALICE", 0, 0, 110, 20);
392 ob4->SetAlphaValues(0.8, 0.8);
395 TGLOverlayButton *ne = new TGLOverlayButton(gEve->GetDefaultGLViewer(), "Next Event", 110, 0, 210, 20);
396 ne->SetAlphaValues(0.0, 0.8);
398 // -- List of Viewers
399 // --------------------
401 TEveViewerList *viewerlist = new TEveViewerList();
402 viewerlist->AddElement(gEve->GetDefaultViewer());
404 viewerlist->AddElement(g3DView);
405 viewerlist->AddElement(gRhoZView);
406 viewerlist->AddElement(gRPhiView);
407 viewerlist->SwitchColorSet();
409 //==============================================================================
410 // -- Macros / QA histograms
411 //==============================================================================
413 // -- Registration of per-event macros
414 // -------------------------------------
416 AliEveMacroExecutor *exec = new AliEveMacroExecutor();
420 gStyle->SetPalette(1, 0);
427 // -----------------------------------------------------------------
430 if ( gHomerManager->NextEvent() ) {
431 if (gEventLoopStarted) {
432 cout << "HomerManager failed getting next event, trying to reconnect" << endl;
434 gHomerManager->DisconnectHOMER();
435 gHomerManager->ConnectEVEtoHOMER();
448 // -----------------------------------------------------------------
451 Int_t updateDisplay() {
457 //==============================================================================
458 // -- Set EventID in Window Title
460 //==============================================================================
462 TString winTitle("Eve Main Window -- Event ID : ");
463 winTitle += Form("0x%016X ", gHomerManager->GetEventID() );
464 gEve->GetBrowser()->SetWindowName(winTitle);
466 //==============================================================================
467 // -- Set Projections
468 //==============================================================================
470 // XXX Primary vertex ... to be retrieved from the ESD
471 Double_t x[3] = { 0, 0, 0 };
473 TEveElement* top = gEve->GetCurrentEvent();
475 if (gRPhiMgr && top) {
476 gRPhiEventScene->DestroyElements();
477 if (gCenterProjectionsAtPrimaryVertex)
478 gRPhiMgr->SetCenter(x[0], x[1], x[2]);
479 gRPhiMgr->ImportElements(top, gRPhiEventScene);
482 if (gRhoZMgr && top) {
483 gRhoZEventScene->DestroyElements();
484 if (gCenterProjectionsAtPrimaryVertex)
485 gRhoZMgr->SetCenter(x[0], x[1], x[2]);
486 gRhoZMgr->ImportElements(top, gRhoZEventScene);
489 //==============================================================================
491 gEve->Redraw3D(0,1); // (0, 1)
492 gEve->EnableRedraw();
502 // -----------------------------------------------------------------
503 Int_t processROOTTOBJ(AliHLTHOMERBlockDesc* block, TEveText* /*et*/) {
505 // -- AliHLTGlobalTriggerDecision
506 if ( ! block->GetClassName().CompareTo("AliHLTGlobalTriggerDecision") ) {
508 AliHLTGlobalTriggerDecision *trig = dynamic_cast<AliHLTGlobalTriggerDecision*>( block->GetTObject());
511 // et->SetText("balle");;
513 // TEveText* tt = new TEveText("Trigger: Class is known ;-) ");
514 // gEve->AddElement(tt);
518 printf(" Unknown root object %s",block->GetClassName().Data() );
525 // -----------------------------------------------------------------
526 Int_t processMUONClusters(AliHLTHOMERBlockDesc* block) {
530 unsigned long size = block->GetSize();
533 buffer = (Int_t *)block->GetData();
534 // cout<<"block size : "<<size<<", buffer : "<<buffer<<", DataType : "<<block->GetDataType()<<endl;
536 // // for(int idata=0;idata<int(size);idata++)
537 // // printf("\tbuffer[%d] : %d\n",idata,buffer[idata]);
541 if(block->GetDataType().CompareTo("RECHITS") == 0){
543 AliHLTMUONRecHitsBlockReader trackblock((char*)buffer, size);
544 const AliHLTMUONRecHitStruct* hit = trackblock.GetArray();
546 for(AliHLTUInt32_t ientry = 0; ientry < trackblock.Nentries(); ientry++){
547 // cout << setw(13) << left << hit->fX << setw(0);
548 // cout << setw(13) << left << hit->fY << setw(0);
549 // cout << hit->fZ << setw(0) << endl;
550 if(hit->fX!=0.0 && hit->fY!=0.0 && hit->fZ!=0.0)
551 gMUONClusters->SetNextPoint(hit->fX,hit->fY,hit->fZ);
558 // if(!strcmp((BlockType(ULong64_t(reader->GetBlockDataType(i)))).Data(),"TRIGRECS")){
560 AliHLTMUONTriggerRecordsBlockReader trigblock(buffer, size);
561 const AliHLTMUONTriggerRecordStruct* trigrec = trigblock.GetArray();
562 for(AliHLTUInt32_t ientry = 0; ientry < trigblock.Nentries(); ientry++){
564 const AliHLTMUONRecHitStruct* hit = &trigrec->fHit[0];
565 for(AliHLTUInt32_t ch = 0; ch < 4; ch++)
567 // cout << setw(10) << left << ch + 11 << setw(0);
568 // cout << setw(13) << left << hit->fX << setw(0);
569 // cout << setw(13) << left << hit->fY << setw(0);
570 // cout << hit->fZ << setw(0) << endl;
571 if(hit->fX!=0.0 && hit->fY!=0.0 && hit->fZ!=0.0)
572 gMUONClusters->SetNextPoint(hit->fX,hit->fY,hit->fZ);
574 }// trig chamber loop
582 // -----------------------------------------------------------------
583 Int_t processMUONTracks(AliHLTHOMERBlockDesc* block) {
587 unsigned long size = block->GetSize();
588 Int_t * buffer = (Int_t *)block->GetData();
589 AliHLTMUONRecHitStruct hit1,hit2;
590 hit1.fX = hit1.fY = hit1.fZ = hit2.fX = hit2.fY = hit2.fZ = 0;
592 Float_t x0=0.0,y0=0.0,z0=0.0;
593 Float_t x3=0.0,y3=0.0,z3=0.0;
594 if(block->GetDataType().CompareTo("MANTRACK") == 0){
595 AliHLTMUONMansoTracksBlockReader mantrackblock(buffer, size);
596 const AliHLTMUONMansoTrackStruct* mtrack = mantrackblock.GetArray();
597 for(AliHLTUInt32_t ientry = 0; ientry < mantrackblock.Nentries(); ientry++){
598 const AliHLTMUONRecHitStruct* hit = &mtrack->fHit[0];
599 for(AliHLTUInt32_t ch = 0; ch < 4; ch++){
600 // cout << setw(10) << left << ch + 7 << setw(0);
601 // cout << setw(13) << left << hit->fX << setw(0);
602 // cout << setw(13) << left << hit->fY << setw(0);
603 // cout << hit->fZ << setw(0) << endl;
606 hit1 = *hit; ch1 = ch+6;
608 hit2 = *hit; ch2 = ch+6;
612 }// trig chamber loop
613 // printf("ch : %d, (X,Y,Z) : (%f,%f,%f)\n",ch1,hit1.fX,hit1.fY,hit1.fZ);
614 // printf("ch : %d, (X,Y,Z) : (%f,%f,%f)\n",ch2,hit2.fX,hit2.fY,hit2.fZ);
616 z3 = AliMUONConstants::DefaultChamberZ(ch2+4);
617 y3 = hit1.fY - (hit1.fZ-z3)*(hit1.fY - hit2.fY)/(hit1.fZ - hit2.fZ) ;
618 x3 = hit1.fX - (hit1.fZ-z3)*(hit1.fX - hit2.fX)/(hit1.fZ - hit2.fZ) ;
620 z0 = AliMUONConstants::DefaultChamberZ(ch1);
621 y0 = hit1.fY - (hit1.fZ-z0)*(hit1.fY - hit2.fY)/(hit1.fZ - hit2.fZ) ;
622 x0 = hit1.fX - (hit1.fZ-z0)*(hit1.fX - hit2.fX)/(hit1.fZ - hit2.fZ) ;
625 gMUONTracks->AddLine(x0,y0,z0,x3,y3,z3);
628 cout<<"NofManso Tracks : "<<mantrackblock.Nentries()<<endl;
636 // -----------------------------------------------------------------
637 Int_t processTRDClusters(AliHLTHOMERBlockDesc* block, TEvePointSet *cont, TEvePointSetArray *contCol) {
641 Int_t sm = block->GetSubDetector();
642 if ( sm == 6 ) sm = 7;
644 Float_t phi = ( sm + 0.5 ) * TMath::Pi() / 9.0;
645 Float_t cos = TMath::Cos( phi );
646 Float_t sin = TMath::Sin( phi );
648 Byte_t* ptrData = reinterpret_cast<Byte_t*>(block->GetData());
649 UInt_t ptrSize = block->GetSize();
651 for (UInt_t size = 0; size+sizeof(AliHLTTRDCluster) <= ptrSize; size+=sizeof(AliHLTTRDCluster) ) {
652 AliHLTTRDCluster *cluster = reinterpret_cast<AliHLTTRDCluster*>(&(ptrData[size]));
654 AliTRDcluster *trdCluster = new AliTRDcluster;
655 cluster->ExportTRDCluster( trdCluster );
657 contCol->Fill(cos*trdCluster->GetX() - sin*trdCluster->GetY(),
658 sin*trdCluster->GetX() + cos*trdCluster->GetY(),
660 trdCluster->GetQ() );
662 cont->SetNextPoint(cos*trdCluster->GetX() - sin*trdCluster->GetY(),
663 sin*trdCluster->GetX() + cos*trdCluster->GetY(), trdCluster->GetZ());
669 // -----------------------------------------------------------------
670 Int_t processTRDHistograms(AliHLTHOMERBlockDesc* block, TCanvas * canvas) {
674 if ( ! block->GetClassName().CompareTo("TH1F")) {
675 TH1F* histo = reinterpret_cast<TH1F*>(block->GetTObject());
678 TVirtualPad* pad = canvas->cd(gTRDHistoCount);
683 if ( ! strcmp(histo->GetName(), "nscls") ) {
684 gTRDEvents = static_cast<Int_t>(histo->GetEntries());
685 histo->GetXaxis()->SetRangeUser(0.,15.);
688 if ( ! strcmp(histo->GetName(),"sclsdist") ||
689 ! strcmp(histo->GetName(),"evSize") )
693 gTRDCanvas->Update();
698 // -----------------------------------------------------------------
699 Int_t processPrimVertexHistograms(AliHLTHOMERBlockDesc* block, TCanvas * canvas) {
703 if ( ! block->GetClassName().CompareTo("TH1F")) {
704 TH1F* histo = reinterpret_cast<TH1F*>(block->GetTObject());
706 TString name(histo->GetName());
707 if( !name.CompareTo("primVertexZ") ){
710 }else if( !name.CompareTo("primVertexX") ){
713 }else if( !name.CompareTo("primVertexY") ){
718 } else if ( ! block->GetClassName().CompareTo("TH2F")) {
719 TH2F *hista = reinterpret_cast<TH2F*>(block->GetTObject());
721 TString name(hista->GetName());
722 if( !name.CompareTo("primVertexXY")) {
733 // -----------------------------------------------------------------
734 Int_t processSPDVertexHistograms(AliHLTHOMERBlockDesc* block, TCanvas * canvas) {
738 if ( ! block->GetClassName().CompareTo("TH1F")) {
739 TH1F* histo = reinterpret_cast<TH1F*>(block->GetTObject());
740 ++gSPDVertexHistoCount;
742 canvas->cd(gSPDVertexHistoCount);
746 else if ( ! block->GetClassName().CompareTo("TH2F")) {
747 TH2F *hista = reinterpret_cast<TH2F*>(block->GetTObject());
749 ++gSPDVertexHistoCount;
751 canvas->cd(gSPDVertexHistoCount);
760 // -----------------------------------------------------------------
761 Int_t processV0Histograms(AliHLTHOMERBlockDesc* block, TCanvas * canvas) {
763 cout << "Processing to see if it's V0 histogram, !!!!!!!!!"<<endl;
767 if ( ! block->GetClassName().CompareTo("TH1F")) {
768 TH1F* histo = reinterpret_cast<TH1F*>(block->GetTObject());
770 TString name(histo->GetName());
771 if( !name.CompareTo("hKShort") ){
775 }else if( !name.CompareTo("hLambda") ){
781 } else if ( ! block->GetClassName().CompareTo("TH2F")) {
782 TH2F *hista = reinterpret_cast<TH2F*>(block->GetTObject());
784 TString name(hista->GetName());
785 if( !name.CompareTo("hAP")) {
790 else if( !name.CompareTo("hGammaXY")) {
806 //*****************************************************************************
807 Int_t processTRDCalibHistograms(AliHLTHOMERBlockDesc* block, TCanvas * canvas) {
810 TObjArray *HistArray=(TObjArray*)block->GetTObject();
811 Int_t nCalibHistos=HistArray->GetEntriesFast();
812 for(Int_t CalibHistoCount=0;CalibHistoCount<nCalibHistos;CalibHistoCount++){
813 canvas->cd(CalibHistoCount+1);
815 if(HistArray->At(CalibHistoCount)->InheritsFrom("TH2S")){
816 TH2S *histCalib=(TH2S*)(HistArray->At(CalibHistoCount));
817 histCalib->Draw("colz");
819 else if(HistArray->At(CalibHistoCount)->InheritsFrom("TH2")){
820 //TH2D *histCalib=dynamic_cast<TH2D*>(HistArray->At(CalibHistoCount));
821 TH2D *histCalib=(TH2D*)(HistArray->At(CalibHistoCount));
822 histCalib->Draw("lego2");
824 else if(HistArray->At(CalibHistoCount)->InheritsFrom("TH1")){
825 //TH1D *histCalib=dynamic_cast<TH1D*>(HistArray->At(CalibHistoCount));
826 TH1D *histCalib=(TH1D*)(HistArray->At(CalibHistoCount));
829 else if(HistArray->At(CalibHistoCount)->InheritsFrom("AliTRDCalibraVdriftLinearFit")){
830 //TH2S *histCalib = ((dynamic_cast<AliTRDCalibraVdriftLinearFit*>(HistArray->At(CalibHistoCount)))->GetLinearFitterHisto(10,kTRUE));
831 TH2S *histCalib =(TH2S*)(((AliTRDCalibraVdriftLinearFit*)HistArray->At(CalibHistoCount))->GetLinearFitterHisto(10,kTRUE));
839 gTRDCalibCanvas->Update();
844 //****************************************************************************
847 TList * bList = gHomerManager->GetBlockList();
849 TFile * file = TFile::Open(Form("Event_0x%016X_ITS.root", gHomerManager->GetEventID()), "RECREATE");
850 bList->Write("blockList", TObject::kSingleKey);
854 bList = gHomerManager->GetAsyncBlockList();
856 TFile * afile = TFile::Open(Form("Event_0x%016X_Async.root", gHomerManager->GetEventID()), "RECREATE");
857 bList->Write("blockList", TObject::kSingleKey);
863 // -----------------------------------------------------------------
865 eventTimer.SetCommand("nextEvent()");
866 eventTimer.Start(3000);
869 // -----------------------------------------------------------------
870 void stopLoopEvent() {
877 Int_t processTRDBlock (AliHLTHOMERBlockDesc * block) {
881 if ( ! block->GetDataType().CompareTo("CLUSTERS") ) {
884 gTRDClusters = new TEvePointSet("TRD Clusters");
885 gTRDClusters->SetMainColor(kBlue);
886 gTRDClusters->SetMarkerStyle((Style_t)kFullDotSmall);
887 //gEve->AddElement(gTRDClusters);
890 if(!gTRDColClusters){
891 gTRDColClusters = new TEvePointSetArray("TRD Clusters Colorized");
892 gTRDColClusters->SetMainColor(kRed);
893 gTRDColClusters->SetMarkerStyle(4); // antialiased circle
894 // gTRDColClusters->SetMarkerStyle((Style_t)kFullDotSmall);
895 gTRDColClusters->SetMarkerSize(0.4);
896 gTRDColClusters->InitBins("Cluster Charge", gTRDBins, 0., gTRDBins*100.);
898 //TColor::SetPalette(1, 0); // Spectrum palette
899 const Int_t nCol = TColor::GetNumberOfColors();
900 for (Int_t ii = 0; ii < gTRDBins+1; ++ii)
901 gTRDColClusters->GetBin(ii)->SetMainColor(TColor::GetColorPalette(ii * nCol / (gTRDBins+2)));
903 gEve->AddElement(gTRDColClusters);
906 iResult = processTRDClusters( block, gTRDClusters, gTRDColClusters );
907 //gTRDClusters->ElementChanged();
908 gTRDColClusters->ElementChanged();
911 // -- Process TRD Histograms
912 else if ( block->GetDataType().CompareTo("ROOTHIST") == 0 ) {
914 gTRDCanvas = createCanvas("TRD", "TRD");
915 gTRDCanvas->Divide(3,2);
917 iResult = processTRDHistograms( block, gTRDCanvas );
920 else if(block->GetDataType().CompareTo("CALIBRAH")==0){
922 if(!gTRDCalibCanvas){
923 gTRDCalibCanvas = createCanvas("TRD Calib", "TRD Calib");
924 gTRDCalibCanvas->Divide(2,2);
927 iResult=processTRDCalibHistograms(block,gTRDCalibCanvas);
930 else if(block->GetDataType().CompareTo("CALIBEOR")==0){
933 gTRDEORCanvas = createCanvas("TRD QA", "TRD QA");
934 gTRDEORCanvas->Divide(3,2);
937 iResult=processTRDCalibHistograms(block,gTRDEORCanvas);