4 // ***************************************************
\r
5 // - hlt_alieve_init.C
\r
7 // - geom_gentle_hlt.C
\r
8 // - geom_gentle_muon.C
\r
9 // ***************************************************
\r
11 #if !defined(__CINT__) || defined(__MAKECINT__)
\r
13 //****************** ROOT ******************************************
\r
14 #include "TRandom.h"
\r
15 #include "TVirtualPad.h"
\r
16 #include "TGLViewer.h"
\r
17 #include "TThread.h"
\r
18 #include "TGFileBrowser.h"
\r
21 #include "TDirectory.h"
\r
24 #include "TCanvas.h"
\r
26 #include "TVector3.h"
\r
28 //****************** ROOT/EVE **************************************
\r
29 #include "TEveManager.h"
\r
31 #include "AliEveHOMERManager.h"
\r
33 #include "geom_gentle_hlt.C"
\r
35 //***************************************************************
\r
36 #include "HLT/rec/AliHLTReconstructor.h"
\r
44 // -----------------------------------------------------------------
\r
45 // -- Geometry / Scenes --
\r
46 // -----------------------------------------------------------------
\r
48 TEveGeoShape *gGeomGentle = 0;
\r
49 TEveGeoShape *gGeomGentleRPhi = 0;
\r
50 TEveGeoShape *gGeomGentleRhoZ = 0;
\r
51 TEveGeoShape *gGeomGentleTRD = 0;
\r
52 TEveGeoShape *gGeomGentleMUON = 0;
\r
54 TEveScene *gRPhiGeomScene = 0;
\r
55 TEveScene *gRhoZGeomScene = 0;
\r
56 TEveScene *gRPhiEventScene = 0;
\r
57 TEveScene *gRhoZEventScene = 0;
\r
59 TEveProjectionManager *gRPhiMgr = 0;
\r
60 TEveProjectionManager *gRhoZMgr = 0;
\r
62 TEveViewer *g3DView = 0;
\r
63 TEveViewer *gRPhiView = 0;
\r
64 TEveViewer *gRhoZView = 0;
\r
66 // -----------------------------------------------------------------
\r
67 // -- Geometry / Scenes Parameters --
\r
68 // -----------------------------------------------------------------
\r
70 // -- Parameters to show different geometries
\r
71 Bool_t gShowMUON = kTRUE;
\r
72 Bool_t gShowMUONRPhi = kFALSE;
\r
73 Bool_t gShowMUONRhoZ = kTRUE;
\r
74 Bool_t gShowTRD = kFALSE;
\r
77 // -----------------------------------------------------------------
\r
79 // -----------------------------------------------------------------
\r
81 // -- Timer for automatic event loop
\r
83 TTimer eventTimerFast;
\r
86 AliEveHOMERManager* gHomerManager = 0;
\r
88 // -- Geometry Manager
\r
89 TGeoManager* gGeoManager = 0;
\r
90 AliPHOSGeometry* gPHOSGeom = 0;
\r
92 // -- Cluster members
\r
93 TEvePointSet* gSPDClusters = 0;
\r
94 TEvePointSet* gSSDClusters = 0;
\r
95 TEvePointSet* gSDDClusters = 0;
\r
96 TEvePointSet* gTRDClusters = 0;
\r
97 TEvePointSetArray* gTRDColClusters = 0;
\r
98 TEvePointSet* gTPCClusters = 0;
\r
99 TEvePointSet* gTPCTestClusters = 0;
\r
100 TEvePointSetArray* gTPCColClusters = 0;
\r
101 TEveBoxSet* gPHOSBoxSet[5] = {0, 0, 0, 0, 0};
\r
102 TEveBoxSet* gEMCALBoxSet[13] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
\r
103 TEvePointSet* gMUONClusters = 0;
\r
104 TEveStraightLineSet* gMUONTracks = 0;
\r
106 // -- Text output members
\r
107 TEveText* gHLTText = 0;
\r
109 // -- Tracks members
\r
110 TEveTrackList* gTPCTrack = 0;
\r
112 // -- Canvas for histograms
\r
113 TCanvas* gTRDCanvas = 0;
\r
114 TCanvas* gTPCCanvas = 0;
\r
115 TCanvas* gTPCClustCanvas = 0;
\r
116 TCanvas* gTRDCalibCanvas = 0;
\r
117 TCanvas* gTRDEORCanvas = 0;
\r
118 TCanvas* gPrimVertexCanvas = 0;
\r
119 TCanvas* gSPDVertexCanvas = 0;
\r
120 TCanvas* gITSCanvas = 0;
\r
121 TCanvas* gSSDCanvas0 = 0;
\r
122 TCanvas* gSSDCanvas1 = 0;
\r
123 TCanvas* gV0Canvas = 0;
\r
124 TCanvas* gPHOSCanvas = NULL;
\r
125 TCanvas* gEMCALCanvas = 0;
\r
128 Int_t gSPDVertexHistoCount = 0;
\r
133 Int_t gTRDHistoCount = 0;
\r
134 Int_t gTRDEvents = 0;
\r
135 Int_t gTRDBins = 12;
\r
138 Int_t gTPCBins = 15;
\r
139 TH1F* gTPCCharge = 0;
\r
140 TH1F* gTPCQMax = 0;
\r
141 TH1F* gTPCQMaxOverCharge = 0;
\r
143 TH1F* gTPCPt = 0; // KK
\r
144 TH1F* gTPCEta = 0;
\r
145 TH1F* gTPCPsi = 0;
\r
146 TH1F* gTPCnClusters = 0;
\r
147 TH1F* gTPCMult = 0;
\r
150 TEveElementList* gPHOSElementList = 0;
\r
151 Int_t gPHOSHistoCount =0;
\r
153 TEveElementList* gEMCALElementList = 0;
\r
154 TGeoNode* gEMCALNode = 0;
\r
155 Int_t gEMCALHistoCount =0;
\r
157 // --- Flag if eventloop is running
\r
158 Bool_t gEventLoopStarted = kFALSE;
\r
162 //Container for gGeoManager till it is broken
\r
163 TGeoManager *fGeoManager = 0;
\r
164 // -----------------------------------------------------------------
\r
166 // -----------------------------------------------------------------
\r
168 Int_t initializeEveViewer( Bool_t showBarrel, Bool_t showMuon );
\r
170 void writeToFile();
\r
173 // #################################################################
\r
174 // #################################################################
\r
175 // #################################################################
\r
177 // -----------------------------------------------------------------
\r
178 void od ( Bool_t showBarrel = kTRUE, Bool_t showMuon = kFALSE ) {
\r
180 // -- Loading Geometry
\r
181 // ---------------------
\r
183 AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
\r
184 AliCDBManager::Instance()->SetRun(run);
\r
185 AliGeomManager::LoadGeometry();
\r
186 // The default in the simulation is the following line
\r
187 // TGeoGlobalMagField::Instance()->SetField(new AliMagF("Maps","Maps", -1., -1, AliMagF::k5kG));
\r
188 // However for the current setting of +ve L3 and +ve Dipole magnetic field
\r
189 // the following setting creates the field close to real field with currect polarity
\r
191 TGeoGlobalMagField::Instance()->SetField(new AliMagF("Maps","Maps", 1., 1, AliMagF::k5kG));
\r
193 AliHLTReconstructor * rec = new AliHLTReconstructor();
\r
194 rec->InitStreamerInfos();
\r
196 // Get the pointer to gGeoManager before it's broken (bug in alieve)
\r
197 fGeoManager = gGeoManager;
\r
199 // -- Initialize pointsets and add macros
\r
200 // ----------------------------------------
\r
201 //TEveUtil::LoadMacro("hlt_alieve_init.C");
\r
202 //hlt_alieve_init(".", -1);
\r
204 // -- Initialize Eve
\r
205 // -------------------
\r
206 initializeEveViewer( showBarrel, showMuon );
\r
208 // -- Reset gGeoManager to the original pointer
\r
209 // ----------------------------------------------
\r
212 // -----------------
\r
213 gSystem->ProcessEvents();
\r
214 gEve->Redraw3D(kTRUE);
\r
216 // -- Create new hM object
\r
217 // -------------------------
\r
218 gHomerManager = new AliEveHOMERManager();
\r
219 gHomerManager->SetRetryCount(1000,15);
\r
220 gHomerManager->SetEveManager(gEve);
\r
221 gHomerManager->SetGeoManager(gGeoManager);
\r
222 gHomerManager->SetRPhiManager(gRPhiMgr);
\r
223 gHomerManager->SetRPhiEventScene(gRPhiEventScene);
\r
224 gHomerManager->SetRPhiViewer(gRPhiView);
\r
225 gHomerManager->SetRhoZManager(gRhoZMgr);
\r
226 gHomerManager->SetRhoZEventScene(gRhoZEventScene);
\r
227 gHomerManager->SetRhoZViewer(gRhoZView);
\r
228 gHomerManager->SetBarrelFlag(showBarrel);
\r
229 gHomerManager->SetMuonFlag(showMuon);
\r
231 Int_t iResult = gHomerManager->Initialize();
\r
233 printf("Error Initializing AliHLTHOMERManager, quitting");
\r
237 // -- Add hM to EveTree
\r
238 // ----------------------
\r
239 gEve->AddToListTree(gHomerManager, kTRUE);
\r
241 // -- Create SourceList
\r
242 // ----------------------
\r
243 iResult = gHomerManager->CreateEveSourcesListLoop();
\r
245 printf ("Couldn't find active services. Giving up. \n");
\r
250 if ( showBarrel ) {
\r
251 gHomerManager->ConnectEVEtoHOMER("TPC" );
\r
252 } else if ( MUONMode ) {
\r
253 gHomerManager->ConnectEVEtoHOMER("MUON");
\r
254 } else if( TRDMode ) {
\r
255 gHomerManager->ConnectEVEtoHOMER("TRD");
\r
257 cout<<" No detectors selected, nothing will be displayed"<<endl;
\r
260 gGeoManager = fGeoManager;
\r
265 // -------------------------------------------------------------------------
\r
266 Int_t initializeEveViewer( Bool_t showBarrel, Bool_t showMuon ) {
\r
268 //=============================================================================
\r
269 // Visualization database
\r
270 //============================================================================
\r
272 TEveUtil::AssertMacro("VizDB_scan.C");
\r
278 //==============================================================================
\r
279 // -- Geometry, scenes, projections and viewers
\r
280 //==============================================================================
\r
282 TEveBrowser *browser = gEve->GetBrowser();
\r
283 browser->ShowCloseTab(kFALSE);
\r
285 // -- Disable extra geometry
\r
286 // ---------------------------
\r
288 gShowMUON = gShowMUONRPhi = gShowMUONRhoZ = kFALSE;
\r
290 // -- Load Geometry
\r
291 // ------------------
\r
292 TEveUtil::LoadMacro("geom_gentle_hlt.C");
\r
293 gGeomGentle = geom_gentle_hlt();
\r
294 gGeomGentleRPhi = geom_gentle_rphi(); gGeomGentleRPhi->IncDenyDestroy();
\r
295 gGeomGentleRhoZ = geom_gentle_rhoz(); gGeomGentleRhoZ->IncDenyDestroy();
\r
296 gGeomGentleTRD = geom_gentle_trd();
\r
298 gGeoManager = fGeoManager;
\r
300 gEMCALNode = gGeoManager->GetTopVolume()->FindNode("XEN1_1");
\r
302 TEveGeoTopNode* emcal_re = new TEveGeoTopNode(gGeoManager, gEMCALNode);
\r
303 gEve->AddGlobalElement(emcal_re);
\r
307 gGeomGentleMUON = geom_gentle_muon(kFALSE);
\r
311 gRPhiGeomScene = gEve->SpawnNewScene("RPhi Geometry",
\r
312 "Scene holding projected geometry for the RPhi view.");
\r
313 gRhoZGeomScene = gEve->SpawnNewScene("RhoZ Geometry",
\r
314 "Scene holding projected geometry for the RhoZ view.");
\r
315 gRPhiEventScene = gEve->SpawnNewScene("RPhi Event Data",
\r
316 "Scene holding projected geometry for the RPhi view.");
\r
317 gRhoZEventScene = gEve->SpawnNewScene("RhoZ Event Data",
\r
318 "Scene holding projected geometry for the RhoZ view.");
\r
320 // -- Projection managers
\r
321 // ------------------------
\r
323 gRPhiMgr = new TEveProjectionManager();
\r
324 gRPhiMgr->SetProjection(TEveProjection::kPT_RPhi);
\r
325 gEve->AddToListTree(gRPhiMgr, kFALSE);
\r
327 TEveProjectionAxes* a = new TEveProjectionAxes(gRPhiMgr);
\r
328 a->SetMainColor(kWhite);
\r
329 a->SetTitle("R-Phi");
\r
330 a->SetTitleSize(0.05);
\r
331 a->SetTitleFont(102);
\r
332 a->SetLabelSize(0.025);
\r
333 a->SetLabelFont(102);
\r
334 gRPhiGeomScene->AddElement(a);
\r
336 gRPhiMgr->SetCurrentDepth(-10);
\r
337 gRPhiMgr->ImportElements(gGeomGentleRPhi, gRPhiGeomScene);
\r
338 gRPhiMgr->SetCurrentDepth(0);
\r
339 gRPhiMgr->ImportElements(gGeomGentleTRD, gRPhiGeomScene);
\r
340 if (gShowMUONRPhi) gRPhiMgr->ImportElements(gGeomGentleMUON, gRPhiGeomScene);
\r
342 gRhoZMgr = new TEveProjectionManager();
\r
343 gRhoZMgr->SetProjection(TEveProjection::kPT_RhoZ);
\r
344 gEve->AddToListTree(gRhoZMgr, kFALSE);
\r
346 TEveProjectionAxes* a = new TEveProjectionAxes(gRhoZMgr);
\r
347 a->SetMainColor(kWhite);
\r
348 a->SetTitle("Rho-Z");
\r
349 a->SetTitleSize(0.05);
\r
350 a->SetTitleFont(102);
\r
351 a->SetLabelSize(0.025);
\r
352 a->SetLabelFont(102);
\r
353 gRhoZGeomScene->AddElement(a);
\r
355 gRhoZMgr->SetCurrentDepth(-10);
\r
356 gRhoZMgr->ImportElements(gGeomGentleRhoZ, gRhoZGeomScene);
\r
357 gRhoZMgr->SetCurrentDepth(0);
\r
358 gRhoZMgr->ImportElements(gGeomGentleTRD, gRhoZGeomScene);
\r
360 if (gShowMUONRhoZ) gRhoZMgr->ImportElements(gGeomGentleMUON, gRhoZGeomScene);
\r
365 TEveWindowSlot *slot = TEveWindow::CreateWindowInTab(browser->GetTabRight());
\r
366 TEveWindowPack *pack = slot->MakePack();
\r
367 pack->SetElementName("Multi View");
\r
368 pack->SetHorizontal();
\r
369 pack->SetShowTitleBar(kFALSE);
\r
370 pack->NewSlot()->MakeCurrent();
\r
371 g3DView = gEve->SpawnNewViewer("3D View", "");
\r
372 g3DView->AddScene(gEve->GetGlobalScene());
\r
373 g3DView->AddScene(gEve->GetEventScene());
\r
376 pack = pack->NewSlot()->MakePack();
\r
377 pack->SetShowTitleBar(kFALSE);
\r
378 pack->NewSlot()->MakeCurrent();
\r
379 gRPhiView = gEve->SpawnNewViewer("RPhi View", "");
\r
380 gRPhiView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
\r
381 gRPhiView->AddScene(gRPhiGeomScene);
\r
382 gRPhiView->AddScene(gRPhiEventScene);
\r
384 pack->NewSlot()->MakeCurrent();
\r
385 gRhoZView = gEve->SpawnNewViewer("RhoZ View", "");
\r
386 gRhoZView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
\r
387 gRhoZView->AddScene(gRhoZGeomScene);
\r
388 gRhoZView->AddScene(gRhoZEventScene);
\r
392 //Add HLT Text to windows
\r
394 TGLOverlayButton *ob1 = new TGLOverlayButton(g3DView->GetGLViewer(), "HLT", 0, 20, 110, 60);
\r
395 ob1->SetAlphaValues(0.8, 0.8);
\r
396 // cout << "color" << ob1->GetBackColor() << endl;
\r
397 //ob1->SetBackColor(8421631);
\r
398 //ob1->SetBackColor(10492431);
\r
399 TGLOverlayButton *ob2 = new TGLOverlayButton(g3DView->GetGLViewer(), "ALICE", 0, 0, 110, 20);
\r
400 ob2->SetAlphaValues(0.8, 0.8);
\r
401 //ob2->SetBackColor(0.2);
\r
402 TGLOverlayButton *ob3 = new TGLOverlayButton(gEve->GetDefaultGLViewer(), "HLT", 0, 20, 110, 60);
\r
403 ob3->SetAlphaValues(0.8, 0.8);
\r
404 TGLOverlayButton *ob4 = new TGLOverlayButton(gEve->GetDefaultGLViewer(), "ALICE", 0, 0, 110, 20);
\r
405 ob4->SetAlphaValues(0.8, 0.8);
\r
408 TGLOverlayButton *ne = new TGLOverlayButton(gEve->GetDefaultGLViewer(), "Next Event", 110, 0, 210, 20);
\r
409 ne->SetAlphaValues(0.0, 0.8);
\r
411 // -- List of Viewers
\r
412 // --------------------
\r
414 TEveViewerList *viewerlist = new TEveViewerList();
\r
415 viewerlist->AddElement(gEve->GetDefaultViewer());
\r
417 viewerlist->AddElement(g3DView);
\r
418 viewerlist->AddElement(gRhoZView);
\r
419 viewerlist->AddElement(gRPhiView);
\r
420 viewerlist->SwitchColorSet();
\r
422 //==============================================================================
\r
423 // -- Macros / QA histograms
\r
424 //==============================================================================
\r
426 // -- Registration of per-event macros
\r
427 // -------------------------------------
\r
429 AliEveMacroExecutor *exec = new AliEveMacroExecutor();
\r
433 gStyle->SetPalette(1, 0);
\r
435 gStyle->SetOptFit(1);
\r
442 // -----------------------------------------------------------------
\r
445 if ( gHomerManager->NextEvent() ) {
\r
446 if (gEventLoopStarted) {
\r
447 cout << "HomerManager failed getting next event, trying to reconnect" << endl;
\r
449 gHomerManager->DisconnectHOMER();
\r
450 gHomerManager->ConnectEVEtoHOMER();
\r
463 // -----------------------------------------------------------------
\r
466 Int_t updateDisplay() {
\r
472 //==============================================================================
\r
473 // -- Set EventID in Window Title
\r
474 // -- Update Objects
\r
475 //==============================================================================
\r
477 TString winTitle("Eve Main Window -- Event ID : ");
\r
478 winTitle += Form("0x%016X ", gHomerManager->GetEventID() );
\r
479 gEve->GetBrowser()->SetWindowName(winTitle);
\r
481 //==============================================================================
\r
482 // -- Set Projections
\r
483 //==============================================================================
\r
485 // XXX Primary vertex ... to be retrieved from the ESD
\r
486 Double_t x[3] = { 0, 0, 0 };
\r
488 TEveElement* top = gEve->GetCurrentEvent();
\r
490 if (gRPhiMgr && top) {
\r
491 gRPhiEventScene->DestroyElements();
\r
492 if (gCenterProjectionsAtPrimaryVertex)
\r
493 gRPhiMgr->SetCenter(x[0], x[1], x[2]);
\r
494 gRPhiMgr->ImportElements(top, gRPhiEventScene);
\r
497 if (gRhoZMgr && top) {
\r
498 gRhoZEventScene->DestroyElements();
\r
499 if (gCenterProjectionsAtPrimaryVertex)
\r
500 gRhoZMgr->SetCenter(x[0], x[1], x[2]);
\r
501 gRhoZMgr->ImportElements(top, gRhoZEventScene);
\r
504 //==============================================================================
\r
506 gEve->Redraw3D(0,1); // (0, 1)
\r
507 gEve->EnableRedraw();
\r
517 // -----------------------------------------------------------------
\r
518 Int_t processROOTTOBJ(AliHLTHOMERBlockDesc* block, TEveText* /*et*/) {
\r
520 // -- AliHLTGlobalTriggerDecision
\r
521 if ( ! block->GetClassName().CompareTo("AliHLTGlobalTriggerDecision") ) {
\r
523 AliHLTGlobalTriggerDecision *trig = dynamic_cast<AliHLTGlobalTriggerDecision*>( block->GetTObject());
\r
526 // et->SetText("balle");;
\r
528 // TEveText* tt = new TEveText("Trigger: Class is known ;-) ");
\r
529 // gEve->AddElement(tt);
\r
533 printf(" Unknown root object %s",block->GetClassName().Data() );
\r
540 // -----------------------------------------------------------------
\r
541 Int_t processMUONClusters(AliHLTHOMERBlockDesc* block) {
\r
545 unsigned long size = block->GetSize();
\r
548 buffer = (Int_t *)block->GetData();
\r
549 // cout<<"block size : "<<size<<", buffer : "<<buffer<<", DataType : "<<block->GetDataType()<<endl;
\r
551 // // for(int idata=0;idata<int(size);idata++)
\r
552 // // printf("\tbuffer[%d] : %d\n",idata,buffer[idata]);
\r
556 if(block->GetDataType().CompareTo("RECHITS") == 0){
\r
558 AliHLTMUONRecHitsBlockReader trackblock((char*)buffer, size);
\r
559 const AliHLTMUONRecHitStruct* hit = trackblock.GetArray();
\r
561 for(AliHLTUInt32_t ientry = 0; ientry < trackblock.Nentries(); ientry++){
\r
562 // cout << setw(13) << left << hit->fX << setw(0);
\r
563 // cout << setw(13) << left << hit->fY << setw(0);
\r
564 // cout << hit->fZ << setw(0) << endl;
\r
565 if(hit->fX!=0.0 && hit->fY!=0.0 && hit->fZ!=0.0)
\r
566 gMUONClusters->SetNextPoint(hit->fX,hit->fY,hit->fZ);
\r
573 // if(!strcmp((BlockType(ULong64_t(reader->GetBlockDataType(i)))).Data(),"TRIGRECS")){
\r
575 AliHLTMUONTriggerRecordsBlockReader trigblock(buffer, size);
\r
576 const AliHLTMUONTriggerRecordStruct* trigrec = trigblock.GetArray();
\r
577 for(AliHLTUInt32_t ientry = 0; ientry < trigblock.Nentries(); ientry++){
\r
579 const AliHLTMUONRecHitStruct* hit = &trigrec->fHit[0];
\r
580 for(AliHLTUInt32_t ch = 0; ch < 4; ch++)
\r
582 // cout << setw(10) << left << ch + 11 << setw(0);
\r
583 // cout << setw(13) << left << hit->fX << setw(0);
\r
584 // cout << setw(13) << left << hit->fY << setw(0);
\r
585 // cout << hit->fZ << setw(0) << endl;
\r
586 if(hit->fX!=0.0 && hit->fY!=0.0 && hit->fZ!=0.0)
\r
587 gMUONClusters->SetNextPoint(hit->fX,hit->fY,hit->fZ);
\r
589 }// trig chamber loop
\r
597 // -----------------------------------------------------------------
\r
598 Int_t processMUONTracks(AliHLTHOMERBlockDesc* block) {
\r
602 unsigned long size = block->GetSize();
\r
603 Int_t * buffer = (Int_t *)block->GetData();
\r
604 AliHLTMUONRecHitStruct hit1,hit2;
\r
605 hit1.fX = hit1.fY = hit1.fZ = hit2.fX = hit2.fY = hit2.fZ = 0;
\r
606 Int_t ch1=0, ch2=0;
\r
607 Float_t x0=0.0,y0=0.0,z0=0.0;
\r
608 Float_t x3=0.0,y3=0.0,z3=0.0;
\r
609 if(block->GetDataType().CompareTo("MANTRACK") == 0){
\r
610 AliHLTMUONMansoTracksBlockReader mantrackblock(buffer, size);
\r
611 const AliHLTMUONMansoTrackStruct* mtrack = mantrackblock.GetArray();
\r
612 for(AliHLTUInt32_t ientry = 0; ientry < mantrackblock.Nentries(); ientry++){
\r
613 const AliHLTMUONRecHitStruct* hit = &mtrack->fHit[0];
\r
614 for(AliHLTUInt32_t ch = 0; ch < 4; ch++){
\r
615 // cout << setw(10) << left << ch + 7 << setw(0);
\r
616 // cout << setw(13) << left << hit->fX << setw(0);
\r
617 // cout << setw(13) << left << hit->fY << setw(0);
\r
618 // cout << hit->fZ << setw(0) << endl;
\r
619 if(hit->fZ != 0.0){
\r
620 if(ch==0 || ch==1){
\r
621 hit1 = *hit; ch1 = ch+6;
\r
623 hit2 = *hit; ch2 = ch+6;
\r
627 }// trig chamber loop
\r
628 // printf("ch : %d, (X,Y,Z) : (%f,%f,%f)\n",ch1,hit1.fX,hit1.fY,hit1.fZ);
\r
629 // printf("ch : %d, (X,Y,Z) : (%f,%f,%f)\n",ch2,hit2.fX,hit2.fY,hit2.fZ);
\r
631 z3 = AliMUONConstants::DefaultChamberZ(ch2+4);
\r
632 y3 = hit1.fY - (hit1.fZ-z3)*(hit1.fY - hit2.fY)/(hit1.fZ - hit2.fZ) ;
\r
633 x3 = hit1.fX - (hit1.fZ-z3)*(hit1.fX - hit2.fX)/(hit1.fZ - hit2.fZ) ;
\r
635 z0 = AliMUONConstants::DefaultChamberZ(ch1);
\r
636 y0 = hit1.fY - (hit1.fZ-z0)*(hit1.fY - hit2.fY)/(hit1.fZ - hit2.fZ) ;
\r
637 x0 = hit1.fX - (hit1.fZ-z0)*(hit1.fX - hit2.fX)/(hit1.fZ - hit2.fZ) ;
\r
640 gMUONTracks->AddLine(x0,y0,z0,x3,y3,z3);
\r
643 cout<<"NofManso Tracks : "<<mantrackblock.Nentries()<<endl;
\r
651 // -----------------------------------------------------------------
\r
652 Int_t processTRDClusters(AliHLTHOMERBlockDesc* block, TEvePointSet *cont, TEvePointSetArray *contCol) {
\r
656 Int_t sm = block->GetSubDetector();
\r
657 if ( sm == 6 ) sm = 7;
\r
659 Float_t phi = ( sm + 0.5 ) * TMath::Pi() / 9.0;
\r
660 Float_t cos = TMath::Cos( phi );
\r
661 Float_t sin = TMath::Sin( phi );
\r
663 Byte_t* ptrData = reinterpret_cast<Byte_t*>(block->GetData());
\r
664 UInt_t ptrSize = block->GetSize();
\r
666 for (UInt_t size = 0; size+sizeof(AliHLTTRDCluster) <= ptrSize; size+=sizeof(AliHLTTRDCluster) ) {
\r
667 AliHLTTRDCluster *cluster = reinterpret_cast<AliHLTTRDCluster*>(&(ptrData[size]));
\r
669 AliTRDcluster *trdCluster = new AliTRDcluster;
\r
670 cluster->ExportTRDCluster( trdCluster );
\r
672 contCol->Fill(cos*trdCluster->GetX() - sin*trdCluster->GetY(),
\r
673 sin*trdCluster->GetX() + cos*trdCluster->GetY(),
\r
674 trdCluster->GetZ(),
\r
675 trdCluster->GetQ() );
\r
677 cont->SetNextPoint(cos*trdCluster->GetX() - sin*trdCluster->GetY(),
\r
678 sin*trdCluster->GetX() + cos*trdCluster->GetY(), trdCluster->GetZ());
\r
684 // -----------------------------------------------------------------
\r
685 Int_t processTRDHistograms(AliHLTHOMERBlockDesc* block, TCanvas * canvas) {
\r
689 if ( ! block->GetClassName().CompareTo("TH1F")) {
\r
690 TH1F* histo = reinterpret_cast<TH1F*>(block->GetTObject());
\r
693 TVirtualPad* pad = canvas->cd(gTRDHistoCount);
\r
698 if ( ! strcmp(histo->GetName(), "nscls") ) {
\r
699 gTRDEvents = static_cast<Int_t>(histo->GetEntries());
\r
700 histo->GetXaxis()->SetRangeUser(0.,15.);
\r
703 if ( ! strcmp(histo->GetName(),"sclsdist") ||
\r
704 ! strcmp(histo->GetName(),"evSize") )
\r
708 gTRDCanvas->Update();
\r
713 // -----------------------------------------------------------------
\r
714 Int_t processPrimVertexHistograms(AliHLTHOMERBlockDesc* block, TCanvas * canvas) {
\r
718 if ( ! block->GetClassName().CompareTo("TH1F")) {
\r
719 TH1F* histo = reinterpret_cast<TH1F*>(block->GetTObject());
\r
721 TString name(histo->GetName());
\r
722 if( !name.CompareTo("primVertexZ") ){
\r
725 }else if( !name.CompareTo("primVertexX") ){
\r
728 }else if( !name.CompareTo("primVertexY") ){
\r
733 } else if ( ! block->GetClassName().CompareTo("TH2F")) {
\r
734 TH2F *hista = reinterpret_cast<TH2F*>(block->GetTObject());
\r
736 TString name(hista->GetName());
\r
737 if( !name.CompareTo("primVertexXY")) {
\r
748 // -----------------------------------------------------------------
\r
749 Int_t processSPDVertexHistograms(AliHLTHOMERBlockDesc* block, TCanvas * canvas) {
\r
753 if ( ! block->GetClassName().CompareTo("TH1F")) {
\r
754 TH1F* histo = reinterpret_cast<TH1F*>(block->GetTObject());
\r
755 ++gSPDVertexHistoCount;
\r
757 canvas->cd(gSPDVertexHistoCount);
\r
761 else if ( ! block->GetClassName().CompareTo("TH2F")) {
\r
762 TH2F *hista = reinterpret_cast<TH2F*>(block->GetTObject());
\r
764 ++gSPDVertexHistoCount;
\r
766 canvas->cd(gSPDVertexHistoCount);
\r
775 // -----------------------------------------------------------------
\r
776 Int_t processV0Histograms(AliHLTHOMERBlockDesc* block, TCanvas * canvas) {
\r
778 cout << "Processing to see if it's V0 histogram, !!!!!!!!!"<<endl;
\r
782 if ( ! block->GetClassName().CompareTo("TH1F")) {
\r
783 TH1F* histo = reinterpret_cast<TH1F*>(block->GetTObject());
\r
785 TString name(histo->GetName());
\r
786 if( !name.CompareTo("hKShort") ){
\r
790 }else if( !name.CompareTo("hLambda") ){
\r
796 } else if ( ! block->GetClassName().CompareTo("TH2F")) {
\r
797 TH2F *hista = reinterpret_cast<TH2F*>(block->GetTObject());
\r
799 TString name(hista->GetName());
\r
800 if( !name.CompareTo("hAP")) {
\r
805 else if( !name.CompareTo("hGammaXY")) {
\r
821 //*****************************************************************************
\r
822 Int_t processTRDCalibHistograms(AliHLTHOMERBlockDesc* block, TCanvas * canvas) {
\r
825 TObjArray *HistArray=(TObjArray*)block->GetTObject();
\r
826 Int_t nCalibHistos=HistArray->GetEntriesFast();
\r
827 for(Int_t CalibHistoCount=0;CalibHistoCount<nCalibHistos;CalibHistoCount++){
\r
828 canvas->cd(CalibHistoCount+1);
\r
830 if(HistArray->At(CalibHistoCount)->InheritsFrom("TH2S")){
\r
831 TH2S *histCalib=(TH2S*)(HistArray->At(CalibHistoCount));
\r
832 histCalib->Draw("colz");
\r
834 else if(HistArray->At(CalibHistoCount)->InheritsFrom("TH2")){
\r
835 //TH2D *histCalib=dynamic_cast<TH2D*>(HistArray->At(CalibHistoCount));
\r
836 TH2D *histCalib=(TH2D*)(HistArray->At(CalibHistoCount));
\r
837 histCalib->Draw("lego2");
\r
839 else if(HistArray->At(CalibHistoCount)->InheritsFrom("TH1")){
\r
840 //TH1D *histCalib=dynamic_cast<TH1D*>(HistArray->At(CalibHistoCount));
\r
841 TH1D *histCalib=(TH1D*)(HistArray->At(CalibHistoCount));
\r
844 else if(HistArray->At(CalibHistoCount)->InheritsFrom("AliTRDCalibraVdriftLinearFit")){
\r
845 //TH2S *histCalib = ((dynamic_cast<AliTRDCalibraVdriftLinearFit*>(HistArray->At(CalibHistoCount)))->GetLinearFitterHisto(10,kTRUE));
\r
846 TH2S *histCalib =(TH2S*)(((AliTRDCalibraVdriftLinearFit*)HistArray->At(CalibHistoCount))->GetLinearFitterHisto(10,kTRUE));
\r
854 gTRDCalibCanvas->Update();
\r
859 //****************************************************************************
\r
860 void writeToFile(){
\r
862 TList * bList = gHomerManager->GetBlockList();
\r
864 TFile * file = TFile::Open(Form("Event_0x%016X_ITS.root", gHomerManager->GetEventID()), "RECREATE");
\r
865 bList->Write("blockList", TObject::kSingleKey);
\r
869 bList = gHomerManager->GetAsyncBlockList();
\r
871 TFile * afile = TFile::Open(Form("Event_0x%016X_Async.root", gHomerManager->GetEventID()), "RECREATE");
\r
872 bList->Write("blockList", TObject::kSingleKey);
\r
878 // -----------------------------------------------------------------
\r
880 eventTimer.SetCommand("nextEvent()");
\r
881 eventTimer.Start(3000);
\r
884 // -----------------------------------------------------------------
\r
885 void stopLoopEvent() {
\r
892 Int_t processTRDBlock (AliHLTHOMERBlockDesc * block) {
\r
896 if ( ! block->GetDataType().CompareTo("CLUSTERS") ) {
\r
899 gTRDClusters = new TEvePointSet("TRD Clusters");
\r
900 gTRDClusters->SetMainColor(kBlue);
\r
901 gTRDClusters->SetMarkerStyle((Style_t)kFullDotSmall);
\r
902 //gEve->AddElement(gTRDClusters);
\r
905 if(!gTRDColClusters){
\r
906 gTRDColClusters = new TEvePointSetArray("TRD Clusters Colorized");
\r
907 gTRDColClusters->SetMainColor(kRed);
\r
908 gTRDColClusters->SetMarkerStyle(4); // antialiased circle
\r
909 // gTRDColClusters->SetMarkerStyle((Style_t)kFullDotSmall);
\r
910 gTRDColClusters->SetMarkerSize(0.4);
\r
911 gTRDColClusters->InitBins("Cluster Charge", gTRDBins, 0., gTRDBins*100.);
\r
913 //TColor::SetPalette(1, 0); // Spectrum palette
\r
914 const Int_t nCol = TColor::GetNumberOfColors();
\r
915 for (Int_t ii = 0; ii < gTRDBins+1; ++ii)
\r
916 gTRDColClusters->GetBin(ii)->SetMainColor(TColor::GetColorPalette(ii * nCol / (gTRDBins+2)));
\r
918 gEve->AddElement(gTRDColClusters);
\r
921 iResult = processTRDClusters( block, gTRDClusters, gTRDColClusters );
\r
922 //gTRDClusters->ElementChanged();
\r
923 gTRDColClusters->ElementChanged();
\r
926 // -- Process TRD Histograms
\r
927 else if ( block->GetDataType().CompareTo("ROOTHIST") == 0 ) {
\r
929 gTRDCanvas = createCanvas("TRD", "TRD");
\r
930 gTRDCanvas->Divide(3,2);
\r
932 iResult = processTRDHistograms( block, gTRDCanvas );
\r
935 else if(block->GetDataType().CompareTo("CALIBRAH")==0){
\r
937 if(!gTRDCalibCanvas){
\r
938 gTRDCalibCanvas = createCanvas("TRD Calib", "TRD Calib");
\r
939 gTRDCalibCanvas->Divide(2,2);
\r
942 iResult=processTRDCalibHistograms(block,gTRDCalibCanvas);
\r
945 else if(block->GetDataType().CompareTo("CALIBEOR")==0){
\r
947 if(!gTRDEORCanvas){
\r
948 gTRDEORCanvas = createCanvas("TRD QA", "TRD QA");
\r
949 gTRDEORCanvas->Divide(3,2);
\r
952 iResult=processTRDCalibHistograms(block,gTRDEORCanvas);
\r