]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EVE/hlt-macros/onlineDisplay.C
Coverity
[u/mrichter/AliRoot.git] / EVE / hlt-macros / onlineDisplay.C
index 1c9ff85ecf44b3443e2a80852d72c3b0501dff7b..08b2b81c54f19eeb1a8daeeb3ce219e35a988850 100644 (file)
 #include "TEveBoxSet.h"
 #include "TEveTrans.h"
 #include "TEveRGBAPalette.h"
+#include "TLine.h"
+#include "TEveStraightLineSet.h"
+#include "TGeoNode.h"
+#include "TGeoManager.h"
+#include "TGLOverlayButton.h"
 
 //****************** AliRoot ***************************************
 #include "AliESDEvent.h"
 #include "AliHLTTriggerDecision.h"
 #include "AliHLTGlobalTriggerDecision.h"
 #include "AliHLTTPCCATrackParam.h"
-#include "AliHLTCaloClusterDataStruct.h"
-#include "AliHLTCaloClusterReader.h"
 
 //****************** AliRoot/MUON **********************************
 #include "AliMUONCalibrationData.h"
 #include "AliMUONVCalibParam.h"
 #include "AliMUONGeometryTransformer.h"
 #include "AliMUONGeometryDetElement.h"
+#include "AliMUONConstants.h"
 
 #include "AliMpCDB.h"
 #include "AliMpDDLStore.h"
 #include "AliMpTriggerCrate.h"
 #include "AliMpLocalBoard.h"
 
-// ***************** AliRoot/ITS **********************************
+//****************** AliRoot/ITS ***********************************
 #include "AliITSRecPoint.h"
 
 //****************** AliRoot/TRD ***********************************
 #include "AliHLTTRDCluster.h"
 #include "AliTRDcluster.h"
+#include "AliTRDCalibraVdriftLinearFit.h"
 
-//#####################AliRoot PHOS ##################################3
-#include "AliPHOSGeometry.h"
+//****************** AliRoot/EMCAL *********************************
+#include "AliHLTCaloClusterDataStruct.h"
+#include "AliHLTCaloClusterReader.h"
+
+#include "HLT/CALO/AliHLTCaloChannelDataHeaderStruct.h"
+#include "HLT/CALO/AliHLTCaloChannelDataStruct.h"
 
+//****************** AliRoot/PHOS **********************************
+#include "AliPHOSGeometry.h"
+#include "HLT/PHOS/AliHLTPHOSDigitDataStruct.h"
+#include  "AliHLTPHOSChannelDataHeaderStruct.h"
+#include  "AliHLTPHOSChannelDataStruct.h"
+#include  "HLT/CALO/AliHLTCaloChannelDataHeaderStruct.h"
+#include  "HLT/CALO/AliHLTCaloChannelDataStruct.h"
+#include "AliHLTCaloDigitDataStruct.h"
 //****************** Macros ****************************************
 #include "hlt_structs.C"
 #include "hlt_alieve_init.C"
 #include "geom_gentle_hlt.C"
 #include "alice-macros/esd_tracks.C"
+#include "hlt_esd_tracks.C"
+
+//#include "alieve_vizdb.C"
 
 #endif
 
@@ -123,6 +143,7 @@ class AliHLTHOMERBlockDesc;
 
 class TEveViewer;
 
+
 // -----------------------------------------------------------------
 // --                       Geometry / Scenes                     --
 // -----------------------------------------------------------------
@@ -179,9 +200,12 @@ TEvePointSet*                             gSDDClusters       = 0;
 TEvePointSet*                             gTRDClusters       = 0;
 TEvePointSetArray*                        gTRDColClusters    = 0;
 TEvePointSet*                             gTPCClusters       = 0;
+TEvePointSet*                             gTPCTestClusters       = 0;
 TEvePointSetArray*                        gTPCColClusters    = 0;
 TEveBoxSet*                               gPHOSBoxSet[5]     = {0, 0, 0, 0, 0}; 
+TEveBoxSet*                               gEMCALBoxSet[13]   = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
 TEvePointSet*                             gMUONClusters      = 0;
+TEveStraightLineSet*                      gMUONTracks        = 0;
 
 // -- Text output members
 TEveText*                                 gHLTText           = 0;
@@ -192,6 +216,26 @@ TEveTrackList*                            gTPCTrack          = 0;
 // -- Canvas for histograms
 TCanvas*                                  gTRDCanvas         = 0;
 TCanvas*                                  gTPCCanvas         = 0;
+TCanvas*                                  gTPCClustCanvas          = 0;
+TCanvas*                                  gTRDCalibCanvas    = 0;
+TCanvas*                                  gTRDEORCanvas      = 0;
+TCanvas*                                  gPrimVertexCanvas  = 0;
+TCanvas*                                  gSPDVertexCanvas   = 0;
+TCanvas*                                  gITSCanvas         = 0;
+TCanvas*                                  gSSDCanvas0        = 0;
+TCanvas*                                  gSSDCanvas1        = 0;
+TCanvas*                                  gV0Canvas          = 0;
+TCanvas*                                  gPHOSCanvas          = NULL;
+TCanvas*                                  gEMCALCanvas          = 0;
+
+// -- vertex --
+Int_t                                     gSPDVertexHistoCount  = 0;
+
+
+// -- ITS --
+Int_t                                     gITSHistoCount     = 0;
+Int_t                                     gSSDHistoCount0    = 0;
+Int_t                                     gSSDHistoCount1    = 0;
 
 // -- TRD --
 Int_t                                     gTRDHistoCount     = 0;
@@ -204,12 +248,26 @@ TH1F*                                     gTPCCharge         = 0;
 TH1F*                                     gTPCQMax           = 0;
 TH1F*                                     gTPCQMaxOverCharge = 0;
 
+TH1F*                                     gTPCPt        = 0; // KK
+TH1F*                                     gTPCEta       = 0; 
+TH1F*                                     gTPCPsi       = 0; 
+TH1F*                                     gTPCnClusters = 0; 
+TH1F*                                     gTPCMult      = 0;
+
 // -- PHOS --
 TEveElementList*                          gPHOSElementList   = 0;
+Int_t                                     gPHOSHistoCount    =0;
+// -- EMCAL
+TEveElementList*                          gEMCALElementList  = 0;
+TGeoNode*                                 gEMCALNode         = 0;
+Int_t                                     gEMCALHistoCount    =0;
 
 // --- Flag if eventloop is running
 Bool_t                                    gEventLoopStarted = kFALSE;
 
+
+//Container for gGeoManager till it is broken
+TGeoManager *fGeoManager = 0;
 // -----------------------------------------------------------------
 // --                          Methods                            --
 // -----------------------------------------------------------------
@@ -221,6 +279,9 @@ void nextEvent();
 Int_t processEvent();
 
 Int_t processPHOSClusters( AliHLTHOMERBlockDesc* block);
+Int_t processPHOSDigits(AliHLTHOMERBlockDesc* block);
+
+Int_t processEMCALClusters( AliHLTHOMERBlockDesc* block);
 
 Int_t processEsdTracks( AliHLTHOMERBlockDesc* block, TEveTrackList* cont );
 
@@ -228,17 +289,61 @@ Int_t processHLTRDLST( AliHLTHOMERBlockDesc* block );
 
 Int_t processROOTTOBJ( AliHLTHOMERBlockDesc* block, TEveText* text );
 
-Int_t processTPCClusters( AliHLTHOMERBlockDesc * block, TEvePointSet *cont, TEvePointSetArray *contCol );
+Int_t processTPCClusters( AliHLTHOMERBlockDesc * block, TEvePointSet *cont, TEvePointSetArray *contCol = NULL );
 
 Int_t processTRDClusters( AliHLTHOMERBlockDesc * block, TEvePointSet *cont, TEvePointSetArray *contCol);
 
-Int_t processTRDHistograms (AliHLTHOMERBlockDesc * block, TCanvas * canvas );
+Int_t processTRDHistograms( AliHLTHOMERBlockDesc * block, TCanvas * canvas );
+
+Int_t processITSHistograms( AliHLTHOMERBlockDesc * block, TCanvas * canvas );
+
+Int_t processSSDHistograms( AliHLTHOMERBlockDesc * block, TCanvas * canvas, TCanvas * canvas1 );
+
+Int_t processPrimVertexHistograms( AliHLTHOMERBlockDesc * block, TCanvas * canvas );
+
+Int_t processSPDVertexHistograms( AliHLTHOMERBlockDesc * block, TCanvas * canvas );
 
-Int_t processMUONClusters( AliHLTHOMERBlockDesc* block);
+Int_t processV0Histograms( AliHLTHOMERBlockDesc * block, TCanvas * canvas );
 
-Int_t processITSClusters(AliHLTHOMERBlockDesc* block, TEvePointSet* cont);
+Int_t processTRDCalibHistograms( AliHLTHOMERBlockDesc *block, TCanvas *canvas );
+
+Int_t processMUONClusters( AliHLTHOMERBlockDesc* block );
+
+Int_t processMUONTracks( AliHLTHOMERBlockDesc* block );
+
+Int_t processITSClusters( AliHLTHOMERBlockDesc* block, TEvePointSet* cont );
+
+Int_t processITSHist( AliHLTHOMERBlockDesc* block );
+
+//Global functions
+
+Int_t processBlock( AliHLTHOMERBlockDesc* block );
+
+void resetDisplay();
+
+//Detector specific block handlers
+Int_t processTRDBlock(AliHLTHOMERBlockDesc * block);
+void processISPDBlock(AliHLTHOMERBlockDesc * block);
+void processISDDBlock(AliHLTHOMERBlockDesc * block);
+void processISSDBlock(AliHLTHOMERBlockDesc * block);
+void processMUONBlock(AliHLTHOMERBlockDesc * block);
+Int_t processPHOSBlock (AliHLTHOMERBlockDesc * block);
+TEveElementList * createPHOSElementList();
+void processEMCALBlock(AliHLTHOMERBlockDesc * block);
+TEveElementList * createEMCALElementList();
+void processHLTBlock(AliHLTHOMERBlockDesc * block);
+void processTPCBlock(AliHLTHOMERBlockDesc * block);
+void processITSBlock(AliHLTHOMERBlockDesc * block);
+//Generic functions
+
+TCanvas * CreateCanvas(TString  tabTitle, TString  canvasTitle );
+
+Int_t updateDisplay();
+
+Int_t AddHistogramsToCanvas(AliHLTHOMERBlockDesc * block, TCanvas * canvas, Int_t &cdCount );
+
+void writeToFile();
 
-Int_t processITSHist(AliHLTHOMERBlockDesc* block);
 
 // #################################################################
 // #################################################################
@@ -255,12 +360,12 @@ void onlineDisplay(Bool_t TPCMode = kTRUE, Bool_t MUONMode = kFALSE, Bool_t TRDM
   AliGeomManager::LoadGeometry();
 
   // Get the pointer to gGeoManager before it's broken (bug in alieve)
-  TGeoManager *gm = gGeoManager;
+  fGeoManager = gGeoManager;
 
   // -- Create new hM object
   // -------------------------
   gHomerManager = new AliEveHOMERManager();
-  gHomerManager->SetRetryCount(50,5);
+  gHomerManager->SetRetryCount(100,10);
 
   Int_t iResult = gHomerManager->Initialize();
   if (iResult) { 
@@ -291,7 +396,7 @@ void onlineDisplay(Bool_t TPCMode = kTRUE, Bool_t MUONMode = kFALSE, Bool_t TRDM
 
   // -- Reset gGeoManager to the original pointer
   // ----------------------------------------------
-  gGeoManager = gm;
+  gGeoManager = fGeoManager;
   gPHOSGeom = AliPHOSGeometry::GetInstance("IHEP", "IHEP");
 
   // -- Finalize Eve
@@ -310,15 +415,25 @@ void onlineDisplay(Bool_t TPCMode = kTRUE, Bool_t MUONMode = kFALSE, Bool_t TRDM
   }    
 
   g_esd_tracks_true_field = kFALSE;
+
 }
 
 // -------------------------------------------------------------------------
 Int_t initializeEveViewer( Bool_t TPCMode, Bool_t MUONMode, Bool_t TRDMode) {
   
+  //=============================================================================
+  // Visualization database
+  //============================================================================
+
+  TEveUtil::AssertMacro("VizDB_scan.C");
+  
+  //  alieve_vizdb();
+
   //==============================================================================
   // -- Geometry, scenes, projections and viewers
   //==============================================================================
 
+
   TEveBrowser         *browser = gEve->GetBrowser();
   browser->ShowCloseTab(kFALSE);
   
@@ -335,6 +450,14 @@ Int_t initializeEveViewer( Bool_t TPCMode, Bool_t MUONMode, Bool_t TRDMode) {
   gGeomGentleRhoZ = geom_gentle_rhoz(); gGeomGentleRhoZ->IncDenyDestroy();
   gGeomGentleTRD  = geom_gentle_trd();
 
+  gGeoManager = fGeoManager;
+
+  gEMCALNode = gGeoManager->GetTopVolume()->FindNode("XEN1_1");
+
+  TEveGeoTopNode* emcal_re = new TEveGeoTopNode(gGeoManager, gEMCALNode);
+  gEve->AddGlobalElement(emcal_re);
+  gEve->Redraw3D();
+
   if (gShowMUON) 
     gGeomGentleMUON = geom_gentle_muon(kFALSE);
   
@@ -403,6 +526,7 @@ Int_t initializeEveViewer( Bool_t TPCMode, Bool_t MUONMode, Bool_t TRDMode) {
   g3DView->AddScene(gEve->GetGlobalScene());
   g3DView->AddScene(gEve->GetEventScene());
 
+
   pack = pack->NewSlot()->MakePack();
   pack->SetShowTitleBar(kFALSE);
   pack->NewSlot()->MakeCurrent();
@@ -417,6 +541,24 @@ Int_t initializeEveViewer( Bool_t TPCMode, Bool_t MUONMode, Bool_t TRDMode) {
   gRhoZView->AddScene(gRhoZGeomScene);
   gRhoZView->AddScene(gRhoZEventScene);
 
+
+   
+  //Add HLT Text to windows
+  TGLOverlayButton *ob1 = new TGLOverlayButton(g3DView->GetGLViewer(),  "HLT", 0, 20, 110, 60);
+  ob1->SetAlphaValues(0.8, 0.8);
+  //  cout << "color" << ob1->GetBackColor() << endl;
+  //ob1->SetBackColor(8421631);
+  ob1->SetBackColor(10492431);
+  TGLOverlayButton *ob2 = new TGLOverlayButton(g3DView->GetGLViewer(),  "ALICE", 0, 0, 110, 20);
+  ob2->SetAlphaValues(0.8, 0.8);
+  ob1->SetBackColor(0.2);
+  TGLOverlayButton *ob3 = new TGLOverlayButton(gEve->GetDefaultGLViewer(),  "HLT", 0, 20, 110, 60);
+  ob3->SetAlphaValues(0.8, 0.8);
+  TGLOverlayButton *ob4 = new TGLOverlayButton(gEve->GetDefaultGLViewer(),  "ALICE", 0, 0, 110, 20);
+  ob4->SetAlphaValues(0.8, 0.8);
+
+
   // -- List of Viewers
   // --------------------
 
@@ -436,6 +578,8 @@ Int_t initializeEveViewer( Bool_t TPCMode, Bool_t MUONMode, Bool_t TRDMode) {
   // -------------------------------------
 
   AliEveMacroExecutor *exec    = new AliEveMacroExecutor();
+  
+
 #if 0
   exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "SIM Track",   "kine_tracks.C", "kine_tracks", "", kFALSE));
 
@@ -498,24 +642,39 @@ Int_t initializeEveViewer( Bool_t TPCMode, Bool_t MUONMode, Bool_t TRDMode) {
   // -- Histograms
   //==============================================================================
 
-  if(TRDMode) {
-    slot = TEveWindow::CreateWindowInTab(browser->GetTabRight());
-    slot->StartEmbedding();
-    
-    gTRDCanvas = new TCanvas("canvasTRD","canvasTRD", 600, 400);
-    gTRDCanvas->Divide(3,2);
-    slot->StopEmbedding("TRD histograms");
-  }
-  else if(TPCMode){
-    slot = TEveWindow::CreateWindowInTab(browser->GetTabRight());
-    slot->StartEmbedding();
-    
-    gTPCCanvas = new TCanvas("canvasTPC","canvasTPC", 600, 400);
-    gTPCCharge = new TH1F("ClusterCharge","ClusterCharge",100,0,500);
-    gTPCQMax = new TH1F("QMax","QMax",50,0,250);
-    gTPCQMaxOverCharge = new TH1F("QMaxOverCharge","QMaxOverCharge",50,0,1);
-    slot->StopEmbedding("TPC histograms");
-  }
+
+  slot = TEveWindow::CreateWindowInTab(browser->GetTabRight());
+  slot->StartEmbedding();  
+  gPrimVertexCanvas = new TCanvas("canvasPrimVertex","canvasPrimVertex", 600, 400);
+  slot->StopEmbedding("Primary Vertex");
+
+  slot = TEveWindow::CreateWindowInTab(browser->GetTabRight());
+  slot->StartEmbedding();  
+  gSPDVertexCanvas = new TCanvas("canvasSPDVertex","canvasSPDVertex", 600, 400);
+  slot->StopEmbedding("SPD Vertex");
+
+  slot = TEveWindow::CreateWindowInTab(browser->GetTabRight());
+  slot->StartEmbedding();  
+  gV0Canvas = new TCanvas("canvasV0","canvasV0", 600, 400);
+  slot->StopEmbedding("V0");
+
+
+  slot = TEveWindow::CreateWindowInTab(browser->GetTabRight());
+  slot->StartEmbedding();
+  gSSDCanvas0 = new TCanvas("canvasSSD0","canvasSSD0", 600, 400);
+  slot->StopEmbedding("SSD QA 0");
+
+  slot = TEveWindow::CreateWindowInTab(browser->GetTabRight());
+  slot->StartEmbedding();
+  gSSDCanvas1 = new TCanvas("canvasSSD1","canvasSSD1", 600, 400);
+  slot->StopEmbedding("SSD QA 1");
+
+  slot = TEveWindow::CreateWindowInTab(browser->GetTabRight());
+  slot->StartEmbedding();
+  gTPCClustCanvas = new TCanvas("canvasTPCClust","canvasTPCClust", 600, 400);
+  gTPCClustCanvas->Divide(3, 2);
+  slot->StopEmbedding("TPC Cluster QA Histograms ");
+
 
   //==============================================================================
   // -- Additional GUI components
@@ -528,18 +687,46 @@ Int_t initializeEveViewer( Bool_t TPCMode, Bool_t MUONMode, Bool_t TRDMode) {
                                 "are placed here when the main-frame is closed.");
   gEve->GetWindowManager()->SetDefaultContainer(storeTab);
   
+  
+
   return 0;
 }
 
 // -----------------------------------------------------------------
 void nextEvent() {
 
-  if ( gHomerManager->NextEvent() )
-    return;
-  
+  if ( gHomerManager->NextEvent() ) {
+    if (gEventLoopStarted) {
+      cout << "HomerManager failed getting next event, trying to reconnect" << endl;
+
+      gHomerManager->DisconnectHOMER();
+      gHomerManager->ConnectEVEtoHOMER();
+      nextEvent();
+   
+    } else {
+      return;
+    }
+  }
+
   processEvent();
 }
 
+TCanvas * CreateCanvas(TString  tabTitle, TString  canvasTitle ) {
+
+  
+
+//   TEveWindowSlot *slot = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight());
+//   slot->StartEmbedding();
+//   TCanvas * canvas = new TCanvas(canvasTitle.Data(),canvasTitle.Data(), 600, 400);
+//   slot->StopEmbedding(tabTitle.Data());
+  cout << "Create"<<endl;
+
+  TCanvas * canvas = gEve->AddCanvasTab(canvasTitle.Data());
+  return canvas;
+}
+
+
 // -----------------------------------------------------------------
 Int_t processEvent() {
 
@@ -548,28 +735,131 @@ Int_t processEvent() {
   gStyle->SetPalette(1, 0);
   gEve->DisableRedraw();
 
+  resetDisplay();
+  
   //==============================================================================
-  // -- Reset
+  // -- Process Blocks
   //==============================================================================
 
+  AliHLTHOMERBlockDesc* block = 0;
+
+  if ( gHomerManager->GetBlockList() == NULL) {
+    printf ("onlineDisplay:   No regular BlockList ... \n");
+    cout << endl;
+    //return -1;
+    
+  } else {
+    
+    if (gHomerManager->GetBlockList()->IsEmpty() ) {
+      printf ("onlineDisplay:   No Sync Blocks in list ... \n");
+      cout<<endl;
+      return -2;
+    }  
+    
+    
+    TIter next(gHomerManager->GetBlockList());
+    
+    while ((block = (AliHLTHOMERBlockDesc*)next())) {
+      iResult = processBlock(block);
+    } 
+  }
+
+  //Read out histograms and elements from detectors outside physics 1 partition
+  TIter anext(gHomerManager->GetAsyncBlockList());
+  
+  while ( (block = (AliHLTHOMERBlockDesc*)anext()) ) {
+    iResult = processBlock(block);
+  }
+  
+  updateDisplay();
+
+  return iResult;
+}
+
+
+void resetDisplay() {
+
+
+  //==============================================================================
+  // -- Reset
+  //==============================================================================
+  
   if ( gTRDCanvas ) {
     gTRDCanvas->Clear();
     gTRDCanvas->Divide(3,2);
   }
+  if(gTRDCalibCanvas){
+    gTRDCalibCanvas->Clear();
+    gTRDCalibCanvas->Divide(2,2);
+  }
+  if(gTRDEORCanvas){
+    gTRDEORCanvas->Clear();
+    gTRDEORCanvas->Divide(3,2);
+  }
+  
+  if(gSSDCanvas0) {
+    gSSDCanvas0->Clear();
+    gSSDCanvas0->Divide(6,6);
+  }
+
+  if(gSSDCanvas1) {
+    gSSDCanvas1->Clear();
+    gSSDCanvas1->Divide(2,3);
+  }
+  
+  if(gITSCanvas) {
+    gITSCanvas->Clear();
+    gITSCanvas->Divide(3,3);
+  }
+
+  if(gPrimVertexCanvas) {
+    gPrimVertexCanvas->Clear();
+    gPrimVertexCanvas->Divide(2,2);
+  }
+
+  if(gSPDVertexCanvas) {
+    gSPDVertexCanvas->Clear();
+    gSPDVertexCanvas->Divide(2,2);
+  }
+
+  if(gV0Canvas) {
+    gV0Canvas->Clear();
+    gV0Canvas->Divide(2,2);
+  }
+
+  if(gPHOSCanvas) {
+    gPHOSCanvas->Clear();
+    gPHOSCanvas->Divide(3, 3);
+  }
+
+  if(gEMCALCanvas) {
+    gEMCALCanvas->Clear();
+    gEMCALCanvas->Divide(3, 3);
+  }
 
   if ( gTPCTrack )     gTPCTrack->DestroyElements();
 
   if ( gSPDClusters )  gSPDClusters->Reset();
   if ( gSSDClusters )  gSSDClusters->Reset();
-  if ( gSDDClusters )  gSSDClusters->Reset();
+  if ( gSDDClusters )  gSDDClusters->Reset();
   if ( gTPCClusters )  gTPCClusters->Reset();
+  if ( gTPCTestClusters )  gTPCTestClusters->Reset();
   if ( gTRDClusters )  gTRDClusters->Reset();
   if ( gMUONClusters ) gMUONClusters->Reset();
+  if ( gMUONTracks ){
+    gMUONTracks->Destroy();
+    gMUONTracks = 0x0;
+  }
 
   if ( gPHOSBoxSet[1] )
     for(int im = 0; im < 5; im++)
       gPHOSBoxSet[im]->Reset();   
 
+  if ( gEMCALElementList)
+    for(int i = 0; i < 12; i++) {
+      gEMCALBoxSet[i]->Reset();
+    }
+  
   if ( gTPCColClusters )
     for (Int_t ii = 0; ii <= gTPCBins+1; ++ii) 
       gTPCColClusters->GetBin(ii)->Reset();
@@ -579,279 +869,28 @@ Int_t processEvent() {
       gTRDColClusters->GetBin(ii)->Reset();
 
   gTRDHistoCount = 0;
+  gSPDVertexHistoCount = 0;
+  gSSDHistoCount0 = 0;
+  gSSDHistoCount1 = 0;
+  gITSHistoCount = 0;
+  gPHOSHistoCount = 0;
+  gEMCALHistoCount = 0;
 
-  //==============================================================================
-  // -- Process Blocks
-  //==============================================================================
-
-  if ( gHomerManager->GetBlockList() == NULL) {
-    printf ("No BlockList ... ");
-    return -1;
-  }
-  if (gHomerManager->GetBlockList()->IsEmpty() ) {
-    printf ("No Blocks in list ... ");
-    return -2;
-  }
-
-  TIter next(gHomerManager->GetBlockList());
-  AliHLTHOMERBlockDesc* block = 0;
-
-  // -- Iterate over blocks in the block list
-  // ------------------------------------------
-  while ((block = (AliHLTHOMERBlockDesc*)next())) {
-        
-#if DEBUG
-    printf( "------------------- xxxxxxxxxxxxxxx ----------------------\n");
-    printf( "Detector           : %s\n", block->GetDetector().Data() );
-    printf( "Datatype           : %s\n", block->GetDataType().Data() );
-    if (block->IsTObject() )
-      printf( "Is TObject of class: %s\n", block->GetClassName().Data() );
-    printf( "------------------- xxxxxxxxxxxxxxx ----------------------\n");
-#endif
-
-    // ++ HLT BLOCK
-    // +++++++++++++++++++++++++++++++++++++++++++++++++++++++
-    if ( ! block->GetDetector().CompareTo("HLT") ) {
-
-      // -- ESDTREE
-      if ( ! block->GetDataType().CompareTo("ALIESDV0") ) {
-       if(!gTPCTrack){
-         gTPCTrack = new TEveTrackList("ESD Tracks");
-         gTPCTrack->SetMainColor(6);
-         gEve->AddElement(gTPCTrack);
-       }
-       iResult = processEsdTracks(block, gTPCTrack);
-       gTPCTrack->ElementChanged();
-      } // if ( ! block->GetDataType().CompareTo("ALIESDV0") ) {
-      
-      // -- Process ROOTObj
-      else if ( ! block->GetDataType().CompareTo("ROOTTOBJ") ) {
-       if(!gHLTText){
-         //gHLTText = new TEveText();
-         //gHLTText->BBoxZero(5, -5, -5, 0);
-         //gHLTText->SetExtrude(25);
-         //gHLTText->AssertBBoxExtents(25,25,25);
-         //gEve->AddElement(gHLTText);
-       } 
-       processROOTTOBJ( block, gHLTText );
-      } // else if ( ! block->GetDataType().CompareTo("ROOTTOBJ") ) {
-
-      // -- Process HLT RDLST
-      else if ( ! block->GetDataType().CompareTo("HLTRDLST") ) {
-       processHLTRDLST( block );
-      } // else if ( ! block->GetDataType().CompareTo("HLTRDLST") ) {
-
-    } // if ( ! block->GetDetector().CompareTo("HLT") ) {
-
-    // ++ TPC BLOCK
-    // +++++++++++++++++++++++++++++++++++++++++++++++++++++++
-    else if ( ! block->GetDetector().CompareTo("TPC") ) {
-      
-      // -- Process TPC Clusters
-      if ( ! block->GetDataType().CompareTo("CLUSTERS") ) {
-       if(!gTPCClusters){
-         gTPCClusters = new TEvePointSet("TPC Clusters");
-         gTPCClusters->SetMainColor(kRed);
-         gTPCClusters->SetMarkerStyle((Style_t)kFullDotSmall);
-         gEve->AddElement(gTPCClusters);
-       } 
-
-       if(!gTPCColClusters){
-         gTPCColClusters = new TEvePointSetArray("TPC Clusters Colorized");
-         gTPCColClusters->SetMainColor(kRed);
-         gTPCColClusters->SetMarkerStyle(4); // antialiased circle
-         gTPCColClusters->SetMarkerSize(0.8);
-         gTPCColClusters->InitBins("Cluster Charge", gTPCBins, 0., gTPCBins*20.);
-
-         const Int_t nCol = TColor::GetNumberOfColors();
-         for (Int_t ii = 0; ii < gTPCBins+1; ++ii)
-           gTPCColClusters->GetBin(ii)->SetMainColor(TColor::GetColorPalette(ii * nCol / (gTPCBins+2)));
-         
-         gEve->AddElement(gTPCColClusters);
-       } 
-
-       iResult = processTPCClusters(block, gTPCClusters, gTPCColClusters);
-       gTPCClusters->ElementChanged();
-       gTPCColClusters->ElementChanged();
-      }
-      
-    } // else if ( ! block->GetDetector().CompareTo("TPC") ) {
-
-    // ++ TRD BLOCK
-    // +++++++++++++++++++++++++++++++++++++++++++++++++++++++
-    else if ( ! block->GetDetector().CompareTo("TRD") ) {
-       
-      // -- Process TRD Clusters
-      if ( ! block->GetDataType().CompareTo("CLUSTERS") ) {
-
-       if(!gTRDClusters){
-         gTRDClusters = new TEvePointSet("TRD Clusters");
-         gTRDClusters->SetMainColor(kBlue);
-         gTRDClusters->SetMarkerStyle((Style_t)kFullDotSmall);
-         gEve->AddElement(gTRDClusters);
-       } 
-
-       if(!gTRDColClusters){
-         gTRDColClusters = new TEvePointSetArray("TRD Clusters Colorized");
-         gTRDColClusters->SetMainColor(kRed);
-         gTRDColClusters->SetMarkerStyle(4); // antialiased circle
-         //      gTRDColClusters->SetMarkerStyle((Style_t)kFullDotSmall);
-         gTRDColClusters->SetMarkerSize(0.8);
-         gTRDColClusters->InitBins("Cluster Charge", gTRDBins, 0., gTRDBins*100.);
-
-         //TColor::SetPalette(1, 0); // Spectrum palette
-         const Int_t nCol = TColor::GetNumberOfColors();
-         for (Int_t ii = 0; ii < gTRDBins+1; ++ii)
-           gTRDColClusters->GetBin(ii)->SetMainColor(TColor::GetColorPalette(ii * nCol / (gTRDBins+2)));
-         
-         gEve->AddElement(gTRDColClusters);
-       } 
-
-       iResult = processTRDClusters( block, gTRDClusters, gTRDColClusters );
-       gTRDClusters->ElementChanged();
-       gTRDColClusters->ElementChanged();
-      }
-
-      // -- Process TRD Histograms
-      else if ( block->GetDataType().CompareTo("ROOTHIST") == 0 ) {
-       iResult = processTRDHistograms( block, gTRDCanvas );     
-       if ( gTRDCanvas) gTRDCanvas->Update();
-      }
-
-    } // else if ( ! block->GetDetector().CompareTo("TRD") ) {
-    
-    // ++ MUON BLOCK
-    // +++++++++++++++++++++++++++++++++++++++++++++++++++++++
-    else if ( ! block->GetDetector().CompareTo("MUON") && gShowMUON ) {
-
-      // -- Process MUON Clusters
-      if ( (block->GetDataType().CompareTo("RECHITS") == 0) || (block->GetDataType().CompareTo("TRIGRECS") == 0) ) {
-       
-       if ( !gMUONClusters ) {
-         gMUONClusters = new TEvePointSet("MUON RecHits");
-         gMUONClusters->SetMainColor(kBlue);
-         gMUONClusters->SetMarkerStyle(20);
-         gEve->AddElement(gMUONClusters);
-       }
-       
-       processMUONClusters( block );
-       gMUONClusters->ElementChanged();
-       
-      } 
-    } // else if ( ! block->GetDetector().CompareTo("MUON") && gShowMUON ) {
-
-    // ++ ISPD BLOCK
-    // +++++++++++++++++++++++++++++++++++++++++++++++++++++++
-    else if ( ! block->GetDetector().CompareTo("ISPD") ){
-      if ( block->GetDataType().CompareTo("CLUSTERS") == 0 ) {
-       
-       if(!gSPDClusters){
-         gSPDClusters = new TEvePointSet("SPD Clusters");
-         gSPDClusters->SetMainColor(kBlack);
-         gSPDClusters->SetMarkerStyle((Style_t)kFullDotLarge);
-         gEve->AddElement(gSPDClusters);
-       } 
-       
-       processITSClusters( block , gSPDClusters);
-       gSPDClusters->ElementChanged();
-      } 
-    } // else if ( ! block->GetDetector().CompareTo("ISPD") ){
-
-    // ++ ISDD BLOCK
-    // +++++++++++++++++++++++++++++++++++++++++++++++++++++++
-    else if ( ! block->GetDetector().CompareTo("ISDD") ){
-      if ( block->GetDataType().CompareTo("CLUSTERS") == 0 ) {
-       
-       if(!gSDDClusters){
-         gSDDClusters = new TEvePointSet("SDD Clusters");
-         gSDDClusters->SetMainColor(kPink);
-         gSDDClusters->SetMarkerStyle((Style_t)kFullDotLarge);
-         gEve->AddElement(gSDDClusters);
-       } 
-       
-       processITSClusters( block , gSDDClusters);
-       gSDDClusters->ElementChanged();
-      } 
-    } // else if ( ! block->GetDetector().CompareTo("ISDD") ){
-
-    // ++ ISSD BLOCK
-    // +++++++++++++++++++++++++++++++++++++++++++++++++++++++
-    else if ( ! block->GetDetector().CompareTo("ISSD") ){
-      if ( block->GetDataType().CompareTo("CLUSTERS") == 0 ) {
-       
-       if(!gSSDClusters){
-         gSSDClusters = new TEvePointSet("SSD Clusters");
-         gSSDClusters->SetMainColor(kPink);
-         gSSDClusters->SetMarkerStyle((Style_t)kFullDotLarge);
-         gEve->AddElement(gSSDClusters);
-       } 
-       
-       processITSClusters( block , gSSDClusters);
-       gSSDClusters->ElementChanged();
-      } 
-    } // else if ( ! block->GetDetector().CompareTo("ISSD") ){
-        
-    // ++ ITS BLOCK
-    // +++++++++++++++++++++++++++++++++++++++++++++++++++++++
-    else if ( ! block->GetDetector().CompareTo("ITS") ){
-      if ( block->GetDataType().CompareTo("ROOTHIST") == 0 ) {
-       iResult = processITSHist( block );
-      } 
-    } // else if ( ! block->GetDetector().CompareTo("ITS") ){
-    
-    // ++ PHOS BLOCK
-    // +++++++++++++++++++++++++++++++++++++++++++++++++++++++
-    else if ( ! block->GetDetector().CompareTo("PHOS") ) {
-
-      // -- Process Digits
-      if ( block->GetDataType().CompareTo("DIGITTYP") == 0 ) {
-       
-       if( !gPHOSElementList ){
-         gPHOSElementList = new TEveElementList("PHOS Cells");
-         gEve->AddElement(gPHOSElementList);
-         
-         TVector3 center;
-         Float_t angle;
-         
-         // -- Create boxsets
-         for(int im = 0; im < 5; im++) {
-         
-           TEveRGBAPalette* pal = new TEveRGBAPalette(40,120);
-           gPHOSBoxSet[im] = new TEveBoxSet(Form("Cells Module %d" , im));
-           gPHOSBoxSet[im]->SetPalette(pal);
-           gPHOSBoxSet[im]->Reset(TEveBoxSet::kBT_AABox, kFALSE, 64);
-           gPHOSBoxSet[im]->SetOwnIds(kTRUE);
-           
-           gPHOSGeom->GetModuleCenter(center, "CPV", im+1);
-           angle = gPHOSGeom->GetPHOSAngle(im+1)*TMath::Pi()/180;
-         
-           gPHOSBoxSet[im]->RefitPlex();
-           TEveTrans& t = gPHOSBoxSet[im]->RefMainTrans();
-           t.SetupRotation(1, 2, angle );
-           t.SetPos(center.X(), center.Y(), center.Z());
-           
-           gPHOSElementList->AddElement(gPHOSBoxSet[im]);
-         }
-       } // for(int im = 0; im < 5; im++) {
-       
-       iResult = processPHOSClusters( block );
-       
-       for(int im = 0; im < 5; im++)
-         gPHOSBoxSet[im]->ElementChanged();
-
-      } // if ( block->GetDataType().CompareTo("DIGITTYP") == 0 ) {
+  
+}
 
-    } // else if ( ! block->GetDetector().CompareTo("PHOS") ){
 
-    // ---------------------------------------------------------
-  } // while ((block = (AliHLTHOMERBlockDesc*)next())) {
+Int_t updateDisplay() {
+  Int_t iResult = 0;
 
+  
   //==============================================================================
   // -- Update Objects
   //==============================================================================
-
+  
   // -- TPC Histograms
   if ( gTPCCanvas && gTPCCharge && gTPCQMax) {
+
     gTPCCanvas->Clear();    
     gTPCCanvas->Divide(1,3);
 
@@ -868,6 +907,7 @@ Int_t processEvent() {
   }
 
   if ( gTPCClusters ) gTPCClusters->ResetBBox();
+  if ( gTPCTestClusters ) gTPCTestClusters->ResetBBox();
   if ( gTRDClusters ) gTRDClusters->ResetBBox();
   if ( gSPDClusters ) gSPDClusters->ResetBBox();
   if ( gSDDClusters ) gSDDClusters->ResetBBox();
@@ -878,6 +918,10 @@ Int_t processEvent() {
     for(int im = 0; im < 5; im++)
       gPHOSBoxSet[im]->ResetBBox();      
 
+  if ( gEMCALElementList )
+    for(int sm = 0; sm < 12; sm++) 
+      gEMCALBoxSet[sm]->ResetBBox();
+    
   //==============================================================================
   // -- Set EventID in Window Title  
   // -- Update Objects
@@ -916,8 +960,10 @@ Int_t processEvent() {
   gEve->EnableRedraw(); 
 
   return iResult;
+
 }
 
+
 // -----------------------------------------------------------------
 Int_t processITSHist(AliHLTHOMERBlockDesc* /*block*/) {
   return 0;
@@ -955,65 +1001,169 @@ Int_t processEsdTracks( AliHLTHOMERBlockDesc* block, TEveTrackList* cont ) {
 
   AliESDEvent* esd = (AliESDEvent *) (block->GetTObject());
   esd->GetStdContent();
+  
+  esd_track_propagator_setup(cont->GetPropagator(),-0.1*esd->GetMagneticField(), 520);
 
-  esd_track_propagator_setup(cont->GetPropagator(),0.1*esd->GetMagneticField(), 520);
-
-  printf( "Number of ESD Tracks : %d \n", esd->GetNumberOfTracks());
+  //  printf( "Number of ESD Tracks : %d \n", esd->GetNumberOfTracks());
 
   for (Int_t iter = 0; iter < esd->GetNumberOfTracks(); ++iter) {
-    AliEveTrack* track = dynamic_cast<AliEveTrack*>(esd_make_track(esd->GetTrack(iter), cont));
+    //AliEveTrack* track = dynamic_cast<AliEveTrack*>(esd_make_track(esd->GetTrack(iter), cont));
+    AliEveTrack* track = dynamic_cast<AliEveTrack*>(hlt_esd_make_track(esd->GetTrack(iter), cont));
     cont->AddElement(track);
+    
+//     gTPCPt->Fill(esd->GetTrack(iter)->GetSignedPt()); // KK
+//     gTPCEta->Fill(esd->GetTrack(iter)->GetSnp());
+//     gTPCPsi->Fill(esd->GetTrack(iter)->GetTgl());
+//     gTPCnClusters->Fill(esd->GetTrack(iter)->GetTPCNcls());  
   }
   
+//   gTPCMult->Fill(esd->GetNumberOfTracks()); // KK
+  
+//   Int_t icd = 0;
+//   gTPCClustCanvas->Clear();
+//   gTPCClustCanvas->Divide(2, 2);
+//   gTPCClustCanvas->cd(icd++);
+//   gTPCPt->Draw();
+//   gTPCClustCanvas->cd(icd++);
+//   gTPCEta->Draw();
+//   gTPCClustCanvas->cd(icd++);
+//   gTPCPsi->Draw();
+//   gTPCClustCanvas->cd(icd++);
+//   gTPCnClusters->Draw();
+//   gTPCClustCanvas->cd(icd++);
+//   gTPCMult->Draw();
+//   gTPCClustCanvas->Update();
+
+  
   cont->SetTitle(Form("N=%d", esd->GetNumberOfTracks()) );
   cont->MakeTracks();
-
+  
   return 0;
 }
 
-
-// -----------------------------------------------------------------
+// // -----------------------------------------------------------------
 // Int_t processPHOSClusters(AliHLTHOMERBlockDesc* block) {
 
-//    AliHLTCaloClusterHeaderStruct *hd = reinterpret_cast<AliHLTCaloClusterHeaderStruct*> (block->GetData());
-//    AliHLTCaloClusterReader * cReader = new AliHLTCaloClusterReader();
-//    cReader->SetMemory(hd);
+
+//   cout <<"Processgin phos clusters"<<endl;
    
-//    AliHLTCaloClusterDataStruct* cd = 0;
+//   AliHLTCaloChannelDataHeaderStruct *chh = reinterpret_cast<AliHLTCaloChannelDataHeaderStruct*> (block->GetData());
+  
+//   AliHLTCaloChannelDataStruct *chd = reinterpret_cast<AliHLTCaloChannelDataStruct*>(chh+1);
+
+//   for(Int_t i = 0; i < chh->fNChannels; i++, chd++) {
+    
+//     Int_t gain = (chd->fChannelID >> 12)&0x1;    
+//     Int_t module = (chd->fChannelID >> 13)&0x1f;
+//     module = 4 -module;
    
-//    while( (cd = cReader->NextCluster()) ){
 
-//      cout << cd->fEnergy << endl;
-     
-//      Float_t e = cd->fEnergy;
-//      Float_t x = cd->fGlobalPos[0];
-//      Float_t y = cd->fGlobalPos[1];
-//      Float_t z = cd->fGlobalPos[2];
+//     if(gain == 1)
+      
+//       {
+//     Float_t x = (static_cast<Float_t>(chd->fChannelID&0x3f) - 32)* 2.2;
+//     Float_t z = (static_cast<Float_t>((chd->fChannelID >> 6)&0x3f) - 28) * 2.2;
+//     //      gPHOSBoxSet[ds->fModule]->AddBox(ds->fLocX, 0, ds->fLocZ, 2.2, ds->fEnergy*20, 2.2);
+//     gPHOSBoxSet[module]->AddBox(x, 0, z, 2.2, chd->fEnergy/1, 2.2);
+//     gPHOSBoxSet[module]->DigitValue(static_cast<Int_t>(chd->fEnergy));
+//       }
+
+
+
+//   }
+// cout <<"done with phos"<<endl;
 
-     
-//      gPHOSBoxSet->AddBox(x, y, z, 2.2, e*10, 2.2);
-     
-//    }
 
 //   return 0;
 // }
 
 
 
+// // -----------------------------------------------------------------
+Int_t processPHOSDigits(AliHLTHOMERBlockDesc* block) {
+
+  AliHLTCaloDigitDataStruct *ds = reinterpret_cast<AliHLTCaloDigitDataStruct*> (block->GetData());
+  UInt_t nDigits = block->GetSize()/sizeof(AliHLTCaloDigitDataStruct);
+    
+
+  for(UInt_t i = 0; i < nDigits; i++, ds++) {
+
+    Float_t x = (ds->fX - 32)* 2.2;
+      Float_t z = (ds->fZ - 28) * 2.2;
+
+      cout << "MODULE DIGITTYP  :" << ds->fModule;
+
+    gPHOSBoxSet[4-ds->fModule]->AddBox(x, 0, z, 2.2, ds->fEnergy*20, 2.2);
+    gPHOSBoxSet[4-ds->fModule]->DigitValue(static_cast<Int_t>(ds->fEnergy*10));
+  }
+
+  return 0;
+}
+
+
 // -----------------------------------------------------------------
 Int_t processPHOSClusters(AliHLTHOMERBlockDesc* block) {
 
-  AliHLTPHOSDigitDataStruct *ds = reinterpret_cast<AliHLTPHOSDigitDataStruct*> (block->GetData());
-    UInt_t nClusters = block->GetSize()/sizeof(AliHLTPHOSDigitDataStruct);
+  AliHLTCaloClusterHeaderStruct *dh = reinterpret_cast<AliHLTCaloClusterHeaderStruct*> (block->GetData());
+  AliHLTCaloClusterReader * clusterReader = new AliHLTCaloClusterReader();
+  clusterReader->SetMemory(dh);  
+
+  AliHLTCaloClusterDataStruct * ds;
 
-  for(UInt_t i = 0; i < nClusters; i++, ds++) {
-    gPHOSBoxSet[ds->fModule]->AddBox(ds->fX, 0, ds->fZ, 2.2, ds->fEnergy*20, 2.2);
-    gPHOSBoxSet[ds->fModule]->DigitValue(static_cast<Int_t>(ds->fEnergy*100));
+  Int_t nc = 0;
+
+  
+  while( (ds = clusterReader->NextCluster()) ){
+    nc++;
+    cout << "Cluster nr " << nc  << "   Energy  " << ds->fEnergy<< "      " << ds->fGlobalPos[0] << " " << ds->fGlobalPos[1] << " " << ds->fGlobalPos[2] << endl;
+
+
+    gPHOSBoxSet[2]->AddBox(ds->fGlobalPos[0], 0, ds->fGlobalPos[2], 2.2, -ds->fEnergy*20, 2.2);
+    gPHOSBoxSet[2]->DigitValue(static_cast<Int_t>(ds->fEnergy*10));
   }
 
   return 0;
 }
 
+
+
+// -----------------------------------------------------------------
+Int_t processEMCALClusters(AliHLTHOMERBlockDesc* block) {
+
+  cout << "EMCAL"<<endl;
+
+  AliHLTCaloChannelDataHeaderStruct *dhs = reinterpret_cast<AliHLTCaloChannelDataHeaderStruct*> (block->GetData());
+  Short_t nC = dhs->fNChannels;
+  AliHLTUInt8_t *ui = reinterpret_cast<AliHLTUInt8_t*>(dhs) + sizeof(AliHLTCaloChannelDataHeaderStruct);
+  AliHLTCaloChannelDataStruct *ds = reinterpret_cast<AliHLTCaloChannelDataStruct*>(ui);
+  
+  UShort_t fX =0;
+  UShort_t fZ =0;
+  UShort_t fGain =0;
+  UShort_t fModuleId =0;
+  
+
+
+  for(Short_t s = 0; s < nC; s++ ) {
+      
+    fX = ds->fChannelID&0x3f;
+    fZ = (ds->fChannelID >> 6)&0x3f;
+    fGain = (ds->fChannelID >> 12)&0x1;
+    fModuleId  = (ds->fChannelID >> 13)&0x1f;
+    
+    //    cout << fX << " " << fZ << " " << fGain << " " << fModuleId <<endl;
+   
+    if ( (  fModuleId < 12 ) ) {
+      gEMCALBoxSet[fModuleId]->AddBox(10, fX*6-12*6, fZ*6-24*6, ds->fEnergy/4, 6, 6);
+      gEMCALBoxSet[fModuleId]->DigitValue(static_cast<Int_t>(ds->fEnergy));
+    } 
+    ds++;
+    
+  }
+  
+  return 0;
+}
+
 // -----------------------------------------------------------------
 Int_t processITSClusters(AliHLTHOMERBlockDesc* block, TEvePointSet* cont) {
 
@@ -1055,6 +1205,8 @@ Int_t processITSClusters(AliHLTHOMERBlockDesc* block, TEvePointSet* cont) {
 // -----------------------------------------------------------------
 Int_t processTPCClusters(AliHLTHOMERBlockDesc* block, TEvePointSet* cont, TEvePointSetArray *contCol ) {
 
+  
+
   Int_t   slice = block->GetSubDetector();
   Float_t phi   = ( slice + 0.5 ) * TMath::Pi() / 9.0;  
   Float_t cos   = TMath::Cos( phi );
@@ -1063,11 +1215,28 @@ Int_t processTPCClusters(AliHLTHOMERBlockDesc* block, TEvePointSet* cont, TEvePo
   AliHLTTPCClusterData *cd = reinterpret_cast<AliHLTTPCClusterData*> (block->GetData());
   UChar_t *data            = reinterpret_cast<UChar_t*> (cd->fSpacePoints);
 
+
+  if(!gTPCCanvas){
+    gTPCCanvas = gEve->AddCanvasTab("TPC QA");
+    gTPCCharge = new TH1F("ClusterCharge","ClusterCharge",100,0,500);
+    gTPCQMax = new TH1F("QMax","QMax",50,0,250);
+    gTPCQMaxOverCharge = new TH1F("QMaxOverCharge","QMaxOverCharge",50,0,1);
+  }
+
+
+
+  
+
+
+
+
+
   if ( cd->fSpacePointCnt != 0 ) {
     for (Int_t iter = 0; iter < cd->fSpacePointCnt; ++iter, data += sizeof(AliHLTTPCSpacePointData)) {
       AliHLTTPCSpacePointData *sp = reinterpret_cast<AliHLTTPCSpacePointData*> (data);
       cont->SetNextPoint(cos*sp->fX - sin*sp->fY, sin*sp->fX + cos*sp->fY, sp->fZ);
-      contCol->Fill(cos*sp->fX - sin*sp->fY, sin*sp->fX + cos*sp->fY, sp->fZ, sp->fCharge);
+      if (contCol)
+       contCol->Fill(cos*sp->fX - sin*sp->fY, sin*sp->fX + cos*sp->fY, sp->fZ, sp->fCharge);
 
       gTPCCharge->Fill(sp->fCharge);
       gTPCQMax->Fill(sp->fQMax);
@@ -1120,10 +1289,10 @@ Int_t processMUONClusters(AliHLTHOMERBlockDesc* block) {
       const AliHLTMUONRecHitStruct* hit = &trigrec->fHit[0];
       for(AliHLTUInt32_t ch = 0; ch < 4; ch++)
        {
-         cout << setw(10) << left << ch + 11 << setw(0);
-         cout << setw(13) << left << hit->fX << setw(0);
-         cout << setw(13) << left << hit->fY << setw(0);
-         cout << hit->fZ << setw(0) << endl;
+//       cout << setw(10) << left << ch + 11 << setw(0);
+//       cout << setw(13) << left << hit->fX << setw(0);
+//       cout << setw(13) << left << hit->fY << setw(0);
+//       cout << hit->fZ << setw(0) << endl;
          if(hit->fX!=0.0 && hit->fY!=0.0 && hit->fZ!=0.0)
            gMUONClusters->SetNextPoint(hit->fX,hit->fY,hit->fZ);
          hit++;
@@ -1135,6 +1304,59 @@ Int_t processMUONClusters(AliHLTHOMERBlockDesc* block) {
   return iResult;
 }
 
+// -----------------------------------------------------------------
+Int_t processMUONTracks(AliHLTHOMERBlockDesc* block) {
+  
+  Int_t iResult = 0;
+  
+  unsigned long size = block->GetSize();
+  Int_t * buffer = (Int_t *)block->GetData();
+  AliHLTMUONRecHitStruct hit1,hit2;
+  hit1.fX = hit1.fY = hit1.fZ = hit2.fX = hit2.fY = hit2.fZ = 0;
+  Int_t ch1=0, ch2=0;
+  Float_t x0=0.0,y0=0.0,z0=0.0;
+  Float_t x3=0.0,y3=0.0,z3=0.0;
+  if(block->GetDataType().CompareTo("MANTRACK") == 0){  
+    AliHLTMUONMansoTracksBlockReader mantrackblock(buffer, size);
+    const AliHLTMUONMansoTrackStruct* mtrack = mantrackblock.GetArray();
+    for(AliHLTUInt32_t ientry = 0; ientry < mantrackblock.Nentries(); ientry++){
+      const AliHLTMUONRecHitStruct* hit = &mtrack->fHit[0];
+      for(AliHLTUInt32_t ch = 0; ch < 4; ch++){
+       // cout << setw(10) << left << ch + 7 << setw(0);
+       // cout << setw(13) << left << hit->fX << setw(0);
+       // cout << setw(13) << left << hit->fY << setw(0);
+       // cout << hit->fZ << setw(0) << endl;
+       if(hit->fZ != 0.0){
+         if(ch==0 || ch==1){
+           hit1 = *hit; ch1 = ch+6;
+         }else{
+           hit2 = *hit; ch2 = ch+6;
+         }
+       }
+       hit++;
+      }// trig chamber loop
+      // printf("ch : %d, (X,Y,Z) : (%f,%f,%f)\n",ch1,hit1.fX,hit1.fY,hit1.fZ);
+      // printf("ch : %d, (X,Y,Z) : (%f,%f,%f)\n",ch2,hit2.fX,hit2.fY,hit2.fZ);
+      // meminfo();
+      z3 = AliMUONConstants::DefaultChamberZ(ch2+4);
+      y3 =  hit1.fY - (hit1.fZ-z3)*(hit1.fY - hit2.fY)/(hit1.fZ - hit2.fZ) ;
+      x3 =  hit1.fX - (hit1.fZ-z3)*(hit1.fX - hit2.fX)/(hit1.fZ - hit2.fZ) ;
+
+      z0 = AliMUONConstants::DefaultChamberZ(ch1);
+      y0 =  hit1.fY - (hit1.fZ-z0)*(hit1.fY - hit2.fY)/(hit1.fZ - hit2.fZ) ;
+      x0 =  hit1.fX - (hit1.fZ-z0)*(hit1.fX - hit2.fX)/(hit1.fZ - hit2.fZ) ;
+      
+
+      gMUONTracks->AddLine(x0,y0,z0,x3,y3,z3);
+      mtrack++;
+    }
+    cout<<"NofManso Tracks : "<<mantrackblock.Nentries()<<endl;
+  }
+  
+  return iResult;
+
+}
+
  
 // -----------------------------------------------------------------
 Int_t processTRDClusters(AliHLTHOMERBlockDesc* block, TEvePointSet *cont, TEvePointSetArray *contCol) {
@@ -1174,8 +1396,8 @@ Int_t processTRDHistograms(AliHLTHOMERBlockDesc* block, TCanvas * canvas) {
 
   Int_t iResult = 0;
 
-  if ( ! block->GetClassName().CompareTo("TH1D")) {
-    TH1D* histo = reinterpret_cast<TH1D*>(block->GetTObject());
+  if ( ! block->GetClassName().CompareTo("TH1F")) {
+    TH1F* histo = reinterpret_cast<TH1F*>(block->GetTObject());
     ++gTRDHistoCount;
   
     TVirtualPad* pad = canvas->cd(gTRDHistoCount);
@@ -1189,29 +1411,298 @@ Int_t processTRDHistograms(AliHLTHOMERBlockDesc* block, TCanvas * canvas) {
     }
 
     if ( ! strcmp(histo->GetName(),"sclsdist") ||
-        ! strcmp(histo->GetName(),"qClsCand") )
+        ! strcmp(histo->GetName(),"evSize") )
       pad->SetLogy();
   }
+
+  gTRDCanvas->Update();
+
+  return iResult;
+}
+
+// -----------------------------------------------------------------
+Int_t processPrimVertexHistograms(AliHLTHOMERBlockDesc* block, TCanvas * canvas) {
+
+  Int_t iResult = 0;
+
+  if ( ! block->GetClassName().CompareTo("TH1F")) {
+    TH1F* histo = reinterpret_cast<TH1F*>(block->GetTObject());
+    if( histo ){
+      TString name(histo->GetName());
+      if( !name.CompareTo("primVertexZ") ){
+       canvas->cd(2);
+       histo->Draw();
+      }else if( !name.CompareTo("primVertexX") ){
+       canvas->cd(3);
+       histo->Draw();
+      }else if( !name.CompareTo("primVertexY") ){
+       canvas->cd(4);
+       histo->Draw();
+      }
+    }
+  }  else if ( ! block->GetClassName().CompareTo("TH2F")) {
+    TH2F *hista = reinterpret_cast<TH2F*>(block->GetTObject());
+    if (hista ){
+       TString name(hista->GetName());
+       if( !name.CompareTo("primVertexXY")) {      
+        canvas->cd(1);
+        hista->Draw();
+       }
+    }
+  }
+  canvas->cd();
+
+  return iResult;
+}
+
+// -----------------------------------------------------------------
+Int_t processSPDVertexHistograms(AliHLTHOMERBlockDesc* block, TCanvas * canvas) {
+
+  Int_t iResult = 0;
+
+  if ( ! block->GetClassName().CompareTo("TH1F")) {
+    TH1F* histo = reinterpret_cast<TH1F*>(block->GetTObject());
+    ++gSPDVertexHistoCount;
+  
+    canvas->cd(gSPDVertexHistoCount);
+    histo->Draw();
+
+  }  
   else if ( ! block->GetClassName().CompareTo("TH2F")) {
     TH2F *hista = reinterpret_cast<TH2F*>(block->GetTObject());
-    ++gTRDHistoCount;
+    if (hista) {
+      ++gSPDVertexHistoCount;
+  
+      canvas->cd(gSPDVertexHistoCount);
+      hista->Draw();
+    }
+  }
+  canvas->cd();
+
+  return iResult;
+}
+
+// -----------------------------------------------------------------
+Int_t processV0Histograms(AliHLTHOMERBlockDesc* block, TCanvas * canvas) {
+
+  cout << "Processing to see if it's V0 histogram, !!!!!!!!!"<<endl;
+
+  Int_t iResult = 0;
+  bool update = 0;
+  if ( ! block->GetClassName().CompareTo("TH1F")) {
+    TH1F* histo = reinterpret_cast<TH1F*>(block->GetTObject());
+    if( histo ){
+      TString name(histo->GetName());
+      if( !name.CompareTo("hKShort") ){
+       canvas->cd(1);
+       histo->Draw();
+       update = 1;
+      }else if( !name.CompareTo("hLambda") ){
+       canvas->cd(3);
+       histo->Draw();
+       update = 1;
+      }
+    }
+  }  else if ( ! block->GetClassName().CompareTo("TH2F")) {
+    TH2F *hista = reinterpret_cast<TH2F*>(block->GetTObject());
+    if (hista ){
+       TString name(hista->GetName());
+       if( !name.CompareTo("hAP")) {      
+        canvas->cd(2);
+        hista->Draw();
+        update = 1;
+       }
+       else if( !name.CompareTo("hGammaXY")) {      
+        canvas->cd(4);
+        hista->Draw();
+        update = 1;
+       }
+    }
+  }
+  if( update ){
+    canvas->cd();
+    canvas->Update();
+  }
+  return iResult;
+}
+
+
+// -----------------------------------------------------------------
+Int_t processITSHistograms(AliHLTHOMERBlockDesc* block, TCanvas * canvas) {
+
+  Int_t iResult = 0;
+
+  if ( ! block->GetClassName().CompareTo("TH1F")) {
+    TH1F* histo = reinterpret_cast<TH1F*>(block->GetTObject());
+    ++gITSHistoCount;
+  
+    canvas->cd(gITSHistoCount);
+    histo->Draw();
+
+  } 
+  else if ( ! block->GetClassName().CompareTo("TH2F")) {
+    TH2F *hista = reinterpret_cast<TH2F*>(block->GetTObject());
+    if (hista) {
+      ++gITSHistoCount;
+      
+      canvas->cd(gITSHistoCount);
+      hista->Draw("COLZ");
+    }
+  }
+  canvas->cd();
+
+  return iResult;
+}
+
+
+Int_t AddHistogramsToCanvas(AliHLTHOMERBlockDesc * block, TCanvas * canvas, Int_t &cdCount ) {
+
+  if (canvas == NULL) 
+    cout <<"fucked canvasn"<<endl;
     
-    TVirtualPad* pad = canvas->cd(gTRDHistoCount);
 
-    if (gTRDEvents > 0)
-      hista->Scale(1./gTRDEvents);
+  Int_t iResult = 0;
 
-    hista->Draw("COLZ");
-    pad->SetLogz();
-    pad->SetGridy();
-    pad->SetGridx();
+  if ( ! block->GetClassName().CompareTo("TObjArray")) {
+    TIter next((TObjArray*)(block->GetTObject()));
+    TObject *object;
+    while (( object = (TObject*) next())) {
+      TH1* histo = dynamic_cast<TH1*>(object);
+      cout <<" cd "<< cdCount << endl;
+      canvas->cd(++cdCount);
+      cout <<"draw"<<endl;
+      histo->Draw();
+      cout <<"drew"<<endl;
+    }
+  }
+
+  //  canvas->cd();
+  canvas->Update();
+
+  return iResult;
+}
+
+
+// -----------------------------------------------------------------
+Int_t processSSDHistograms(AliHLTHOMERBlockDesc* block, TCanvas *canvas0, TCanvas *canvas1) {
+
+  Int_t iResult = 0;
+
+  if ( ! block->GetClassName().CompareTo("TH1F")) {
+    TH1F* histo = reinterpret_cast<TH1F*>(block->GetTObject());
+    ++gSSDHistoCount0;
+  
+    canvas0->cd(gSSDHistoCount0);
+    histo->Draw();
+  }  
+  else if ( ! block->GetClassName().CompareTo("TH2F")) {
+    TH2F *hista = reinterpret_cast<TH2F*>(block->GetTObject());
+    if (hista) {
+      ++gSSDHistoCount1;
+  
+      canvas1->cd(gSSDHistoCount1);
+      hista->Draw("COLZ");
+    }
+  }  else if ( ! block->GetClassName().CompareTo("TObjArray")) {
+    TIter next((TObjArray*)(block->GetTObject()));
+    TObject *object;
+    while (( object = (TObject*) next())) {
+      TString string;
+      string = "TH1F";
+      TString string2;
+      string2 = "TH2F";
+
+      if ( !(string.CompareTo(object->ClassName())) ) {
+       TH1F* histo = reinterpret_cast<TH1F*>(object);
+       ++gSSDHistoCount0;
+       
+       canvas0->cd(gSSDHistoCount0);
+       histo->Draw();
+       
+      } 
+      else if ( !(string2.CompareTo(object->ClassName()) ) ) {
+       TH2F* histo = reinterpret_cast<TH2F*>(object);
+       ++gSSDHistoCount1;
+       
+       canvas1->cd(gSSDHistoCount1);
+       histo->Draw("COLZ");
+      }
+    }
   }
 
+  canvas0->cd();  canvas1->cd();
+  
   return iResult;
 }
 
+
+//*-------------------------------------------------------------------------------------- 
+Int_t processTRDCalibHistograms(AliHLTHOMERBlockDesc* block, TCanvas * canvas) {
+  Int_t iResult = 0;
+
+  TObjArray *HistArray=(TObjArray*)block->GetTObject();
+  Int_t nCalibHistos=HistArray->GetEntriesFast();
+  for(Int_t CalibHistoCount=0;CalibHistoCount<nCalibHistos;CalibHistoCount++){
+    canvas->cd(CalibHistoCount+1);
+    
+    if(HistArray->At(CalibHistoCount)->InheritsFrom("TH2S")){
+        TH2S *histCalib=(TH2S*)(HistArray->At(CalibHistoCount));
+        histCalib->Draw("colz");
+       }
+     else if(HistArray->At(CalibHistoCount)->InheritsFrom("TH2")){
+      //TH2D *histCalib=dynamic_cast<TH2D*>(HistArray->At(CalibHistoCount));
+      TH2D *histCalib=(TH2D*)(HistArray->At(CalibHistoCount));
+      histCalib->Draw("lego2");
+    }
+    else if(HistArray->At(CalibHistoCount)->InheritsFrom("TH1")){
+      //TH1D *histCalib=dynamic_cast<TH1D*>(HistArray->At(CalibHistoCount));
+      TH1D *histCalib=(TH1D*)(HistArray->At(CalibHistoCount));
+      histCalib->Draw();
+    }
+    else if(HistArray->At(CalibHistoCount)->InheritsFrom("AliTRDCalibraVdriftLinearFit")){
+      //TH2S *histCalib = ((dynamic_cast<AliTRDCalibraVdriftLinearFit*>(HistArray->At(CalibHistoCount)))->GetLinearFitterHisto(10,kTRUE));
+      TH2S *histCalib =(TH2S*)(((AliTRDCalibraVdriftLinearFit*)HistArray->At(CalibHistoCount))->GetLinearFitterHisto(10,kTRUE));
+
+      histCalib->Draw();
+    }
+    
+   
+  }
+  
+  gTRDCalibCanvas->Update();
+
+ return iResult;
+}
 //****************************************************************************
 
+
+
+void writeToFile(){
+
+  TList * bList = gHomerManager->GetBlockList();
+  TFile * file = TFile::Open(Form("Event_0x%016X_ITS.root", gHomerManager->GetEventID()), "RECREATE"); 
+  bList->Write("blockList", TObject::kSingleKey);
+  file->Close();
+  
+  bList = gHomerManager->GetAsyncBlockList();
+  TFile * afile = TFile::Open(Form("Event_0x%016X_Async.root", gHomerManager->GetEventID()), "RECREATE"); 
+  bList->Write("blockList", TObject::kSingleKey);
+  afile->Close();
+
+
+//   TIter next(bList);
+  
+//   AliHLTHOMERBlockDesc* block = 0;
+  
+//   // -- Iterate over blocks in the block list
+//   // ------------------------------------------
+//   while ((block = (AliHLTHOMERBlockDesc*)next())) {
+//     cout << "balle " << endl;
+//   }
+  
+}
+
+
 // -----------------------------------------------------------------
 void loopEvent() {
   eventTimer.SetCommand("nextEvent()");
@@ -1242,9 +1733,442 @@ void EventLoopFast() {
   if ( gEventLoopStarted ) {
     loopEventFast();
     gEventLoopStarted = kTRUE;
-  }
-  else {
+  
+  } else {  
     stopLoopEventFast();
     gEventLoopStarted = kFALSE;
+  
+  }
+}
+
+
+
+Int_t processBlock (AliHLTHOMERBlockDesc * block ){
+
+  
+#if 1//DEBUG
+   printf( "------------------- xxxxxxxxxxxxxxx ----------------------\n");
+   printf( "Detector           : %s\n", block->GetDetector().Data() );
+   printf( "Datatype           : %s\n", block->GetDataType().Data() );
+   if (block->IsTObject() )
+     printf( "Is TObject of class: %s\n", block->GetClassName().Data() );
+   printf( "------------------- xxxxxxxxxxxxxxx ----------------------\n");
+#endif
+
+  
+  Int_t iResult = 0;
+
+  if ( ! block->GetDetector().CompareTo("HLT") ) 
+    processHLTBlock(block);
+  
+  else if ( ! block->GetDetector().CompareTo("TPC") ) 
+    processTPCBlock(block);
+  
+  else if ( ! block->GetDetector().CompareTo("TRD") ) 
+    iResult = processTRDBlock(block);
+
+  else if ( ! block->GetDetector().CompareTo("MUON") && gShowMUON ) 
+    processMUONBlock(block);
+
+  else if ( ! block->GetDetector().CompareTo("ISPD") )
+    processISPDBlock(block);
+
+  else if ( ! block->GetDetector().CompareTo("ISDD") )
+    processISDDBlock(block);
+
+  else if ( ! block->GetDetector().CompareTo("ISSD") )
+    processISSDBlock(block);
+
+  else if ( ! block->GetDetector().CompareTo("PHOS") ) 
+    processPHOSBlock(block);
+
+  else if ( ! block->GetDetector().CompareTo("EMCA") )
+    processEMCALBlock(block);
+
+  else if ( ! block->GetDetector().CompareTo("ITS") )
+    processITSBlock(block);
+  
+
+  if ( block->GetDataType().CompareTo("ROOTHIST") == 0 )     
+    processV0Histograms( block , gV0Canvas);
+   
+  return iResult;
+} 
+
+
+void processITSBlock(AliHLTHOMERBlockDesc * block) {
+  
+  if ( block->GetDataType().CompareTo("ROOTHIST") == 0 ) {
+    if(!gITSCanvas){
+      gITSCanvas = gEve->AddCanvasTab("ITS QA");
+    }
+    processITSHistograms( block , gITSCanvas);
+    gITSCanvas->Update();
+  } 
+}
+
+
+ Int_t processTRDBlock (AliHLTHOMERBlockDesc * block) {
+
+   Int_t iResult = 0;
+
+  if ( ! block->GetDataType().CompareTo("CLUSTERS") ) {
+     
+    if(!gTRDClusters){
+      gTRDClusters = new TEvePointSet("TRD Clusters");
+      gTRDClusters->SetMainColor(kBlue);
+      gTRDClusters->SetMarkerStyle((Style_t)kFullDotSmall);
+      //gEve->AddElement(gTRDClusters);
+    } 
+
+    if(!gTRDColClusters){
+      gTRDColClusters = new TEvePointSetArray("TRD Clusters Colorized");
+      gTRDColClusters->SetMainColor(kRed);
+      gTRDColClusters->SetMarkerStyle(4); // antialiased circle
+      //         gTRDColClusters->SetMarkerStyle((Style_t)kFullDotSmall);
+      gTRDColClusters->SetMarkerSize(0.4);
+      gTRDColClusters->InitBins("Cluster Charge", gTRDBins, 0., gTRDBins*100.);
+
+      //TColor::SetPalette(1, 0); // Spectrum palette
+      const Int_t nCol = TColor::GetNumberOfColors();
+      for (Int_t ii = 0; ii < gTRDBins+1; ++ii)
+       gTRDColClusters->GetBin(ii)->SetMainColor(TColor::GetColorPalette(ii * nCol / (gTRDBins+2)));
+         
+      gEve->AddElement(gTRDColClusters);
+    } 
+
+    iResult = processTRDClusters( block, gTRDClusters, gTRDColClusters );
+    //gTRDClusters->ElementChanged();
+    gTRDColClusters->ElementChanged();
+  }
+
+  // -- Process TRD Histograms
+  else if ( block->GetDataType().CompareTo("ROOTHIST") == 0 ) {
+    if(!gTRDCanvas) {
+      gTRDCanvas = gEve->AddCanvasTab("TRD");
+      gTRDCanvas->Divide(3,2);
+    }
+    iResult = processTRDHistograms( block, gTRDCanvas );     
+  }
+
+  else if(block->GetDataType().CompareTo("CALIBRAH")==0){
+     
+    if(!gTRDCalibCanvas){
+      gTRDCalibCanvas = gEve->AddCanvasTab("TRD Calib");
+      gTRDCalibCanvas->Divide(2,2);
+    }
+     
+    iResult=processTRDCalibHistograms(block,gTRDCalibCanvas);
+  }
+
+  else if(block->GetDataType().CompareTo("CALIBEOR")==0){
+     
+    if(!gTRDEORCanvas){
+      gTRDEORCanvas = gEve->AddCanvasTab("TRD QA");
+      gTRDEORCanvas->Divide(3,2);       
+    }
+  
+    iResult=processTRDCalibHistograms(block,gTRDEORCanvas);
+  }
+  return iResult;
+}
+
+void processMUONBlock(AliHLTHOMERBlockDesc * block){
+
+   // -- Process MUON Clusters
+   if ( (block->GetDataType().CompareTo("RECHITS") == 0) || (block->GetDataType().CompareTo("TRIGRECS") == 0) ) {
+       
+     if ( !gMUONClusters ) {
+       gMUONClusters = new TEvePointSet("MUON RecHits");
+       gMUONClusters->SetMainColor(kBlue);
+       gMUONClusters->SetMarkerStyle(20);
+       gEve->AddElement(gMUONClusters);
+     }
+       
+     processMUONClusters( block );
+     gMUONClusters->ElementChanged();
+       
+   }else if(block->GetDataType().CompareTo("MANTRACK") == 0){
+       
+     if ( !gMUONTracks ) {
+       gMUONTracks = new TEveStraightLineSet("MUON Tracks");
+       gMUONTracks->SetMainColor(kRed);
+       gMUONTracks->SetLineWidth(3);
+       gEve->AddElement(gMUONTracks);
+     }
+
+     processMUONTracks( block );
+     gMUONTracks->ElementChanged();
+
+
+   } 
+}
+
+
+void processISPDBlock( AliHLTHOMERBlockDesc * block) {
+
+  if ( block->GetDataType().CompareTo("CLUSTERS") == 0 ) {
+    
+    if(!gSPDClusters){
+      gSPDClusters = new TEvePointSet("SPD Clusters");
+      gSPDClusters->SetMainColor(kBlack);
+      gSPDClusters->SetMarkerStyle((Style_t)kFullDotMedium);
+      gEve->AddElement(gSPDClusters);
+    } 
+    
+    processITSClusters( block , gSPDClusters);
+    gSPDClusters->ElementChanged();
+
+  } else if ( block->GetDataType().CompareTo("ROOTHIST") == 0 ) {
+    processSPDVertexHistograms( block , gSPDVertexCanvas);
+    gSPDVertexCanvas->Update();
+  } 
+} 
+
+void processISDDBlock(AliHLTHOMERBlockDesc * block){
+  
+  if ( block->GetDataType().CompareTo("CLUSTERS") == 0 ) {
+    
+    if(!gSDDClusters){
+      gSDDClusters = new TEvePointSet("SDD Clusters");
+      gSDDClusters->SetMainColor(kPink);
+      gSDDClusters->SetMarkerStyle((Style_t)kFullDotMedium);
+      gEve->AddElement(gSDDClusters);
+    } 
+    
+    processITSClusters( block , gSDDClusters);
+    gSDDClusters->ElementChanged();
+  } 
+}
+
+void processISSDBlock(AliHLTHOMERBlockDesc * block){
+  if ( block->GetDataType().CompareTo("CLUSTERS") == 0 ) {
+    
+    if(!gSSDClusters){
+      gSSDClusters = new TEvePointSet("SSD Clusters");
+      gSSDClusters->SetMainColor(kBlue);
+      gSSDClusters->SetMarkerStyle((Style_t)kFullDotMedium);
+      gEve->AddElement(gSSDClusters);
+    } 
+    
+    processITSClusters( block , gSSDClusters);
+    gSSDClusters->ElementChanged();
+  } 
+  
+  else if ( block->GetDataType().CompareTo("ROOTOBAR") == 0 ) {
+    processSSDHistograms( block , gSSDCanvas0, gSSDCanvas1);
+    gSSDCanvas0->Update();
+    gSSDCanvas1->Update();
+  } 
+}
+        
+
+Int_t processPHOSBlock(AliHLTHOMERBlockDesc * block) { 
+  
+  Int_t iResult = 0;
+
+  if ( block->GetDataType().CompareTo("ROOTHIST") == 0 ) { 
+    
+    if(!gPHOSCanvas) {
+      gPHOSCanvas = CreateCanvas("PHOS QA", "PHOS QA");
+      gPHOSCanvas->Divide(3, 2);
+    }
+    
+    AddHistogramsToCanvas(block, gPHOSCanvas, gPHOSHistoCount);
+   
+  } else {
+    
+    cout <<"PHOS block not histo"<<endl;
+
+    if( !gPHOSElementList )
+      gPHOSElementList = createPHOSElementList();
+        
+    if ( block->GetDataType().CompareTo("CALOCLUS") == 0 )
+      iResult = processPHOSClusters( block );
+      
+    else if ( block->GetDataType().CompareTo("DIGITTYP") == 0 )
+      iResult = processPHOSDigits( block);
+    
+    else if ( block->GetDataType().CompareTo("CHANNELT") == 0 ) 
+      iResult = processPHOSClusters( block );
+  
+  
+    //Update the eve elements
+    for(int im = 0; im < 5; im++)
+      gPHOSBoxSet[im]->ElementChanged();
+    
+  }
+  
+  return iResult;
+} 
+
+
+TEveElementList * createPHOSElementList() {
+  
+  TEveElementList * elementList  = new TEveElementList("PHOS Cells");
+  
+  gEve->AddElement(elementList);
+  
+  TVector3 center;
+  Float_t angle;
+  
+  // -- Create boxsets
+  for(int im = 0; im < 5; im++) {
+    
+    TEveRGBAPalette* pal = new TEveRGBAPalette(0,120);
+    pal->SetLimits(-0.1, 1024);
+    gPHOSBoxSet[im] = new TEveBoxSet(Form("Cells Module %d" , im));
+    gPHOSBoxSet[im]->SetPalette(pal);
+    gPHOSBoxSet[im]->Reset(TEveBoxSet::kBT_AABox, kFALSE, 64);
+    gPHOSBoxSet[im]->SetOwnIds(kTRUE);
+    
+    
+    gPHOSGeom->GetModuleCenter(center, "CPV", im+1);
+    angle = gPHOSGeom->GetPHOSAngle(im+1)*TMath::Pi()/180;
+    
+    gPHOSBoxSet[im]->RefitPlex();
+    TEveTrans& t = gPHOSBoxSet[im]->RefMainTrans();
+    t.SetupRotation(1, 2, angle );
+    t.SetPos(center.X(), center.Y(), center.Z());
+    
+    elementList->AddElement(gPHOSBoxSet[im]);
   }
+
+  return elementList;
 }
+
+
+void processEMCALBlock(AliHLTHOMERBlockDesc * block) { 
+
+  Int_t iResult = 0;
+  
+  if ( block->GetDataType().CompareTo("ROOTHIST") == 0 ) { 
+    
+    if(!gEMCALCanvas) {
+      gEMCALCanvas = CreateCanvas("EMCAL QA", "EMCAL QA");
+      gEMCALCanvas->Divide(3, 2);
+    }
+    AddHistogramsToCanvas(block, gEMCALCanvas, gEMCALHistoCount);
+   
+  } else {
+
+    if( !gEMCALElementList ){
+      gEMCALElementList = createEMCALElementList();
+    }
+
+    if ( block->GetDataType().CompareTo("CALOCLUS") == 0 ) {
+      iResult = processEMCALClusters( block );
+      for(int sm = 0; sm < 12; sm++) {
+       gEMCALBoxSet[sm]->ElementChanged();
+      }
+    }
+  } 
+}
+
+TEveElementList * createEMCALElementList() { 
+  TEveElementList * elementList = new TEveElementList("EMCAL Cells");
+  elementList->SetTitle("Tooltip");
+  gEve->AddElement(elementList);
+  
+  gStyle->SetPalette(1, 0);
+  TEveRGBAPalette* pal = new TEveRGBAPalette(0, 512);
+  pal->SetLimits(0, 1024);
+  
+  
+  for (Int_t sm=0; sm<12; ++sm) {
+    
+    TEveBoxSet* q = new TEveBoxSet(Form("SM %d", sm+1));
+    q->SetOwnIds(kTRUE);
+    
+    q->Reset(TEveBoxSet::kBT_AABox, kFALSE, 64);
+    q->RefMainTrans().SetFrom(*gEMCALNode->GetDaughter(sm)->GetMatrix());
+    q->SetPalette(pal);
+    
+    gEve->AddElement(q, elementList);
+    gEMCALBoxSet[sm] = q;
+  }
+
+  return elementList;
+}
+
+void processHLTBlock(AliHLTHOMERBlockDesc * block) {
+
+  if ( ! block->GetDataType().CompareTo("ALIESDV0") ) {
+    if(!gTPCTrack){
+      gTPCTrack = new TEveTrackList("ESD Tracks");
+      gTPCTrack->SetMainColor(6);
+      gEve->AddElement(gTPCTrack);
+    }
+    
+    processEsdTracks(block, gTPCTrack);
+    gTPCTrack->ElementChanged();
+  } 
+  
+  else if ( ! block->GetDataType().CompareTo("ROOTTOBJ") ) {
+    processROOTTOBJ( block, gHLTText );
+  } 
+
+  else if ( ! block->GetDataType().CompareTo("HLTRDLST") ) {
+    processHLTRDLST( block );
+  } 
+
+  else if ( !block->GetDataType().CompareTo("ROOTHIST") ) {      
+    
+    processPrimVertexHistograms( block , gPrimVertexCanvas);
+    gPrimVertexCanvas->Update();    
+  }
+
+} 
+
+
+void processTPCBlock(AliHLTHOMERBlockDesc * block) {
+
+  cout <<"Processing tpc clusters"<<endl;
+
+  if ( ! block->GetDataType().CompareTo("CLUSTERS") ) {
+    if(!gTPCClusters){   
+      gTPCClusters = new TEvePointSet("TPC Clusters");
+      //gTPCClusters->ApplyVizTag("TPC Clusters");
+      gTPCClusters->SetMainColor(kRed);
+      gTPCClusters->SetMarkerStyle((Style_t)kFullDotSmall);
+      //gEve->AddElement(gTPCClusters);
+    } 
+    
+    if(!gTPCColClusters){
+      gTPCColClusters = new TEvePointSetArray("TPC Clusters Colorized");
+      gTPCColClusters->SetMainColor(kRed);
+      gTPCColClusters->SetMarkerStyle(4); // antialiased circle
+      gTPCColClusters->SetMarkerSize(0.4);
+      gTPCColClusters->InitBins("Cluster Charge", gTPCBins, 0., gTPCBins*20.);
+      
+      const Int_t nCol = TColor::GetNumberOfColors();
+      
+      for (Int_t ii = 0; ii < gTPCBins+1; ++ii)
+       gTPCColClusters->GetBin(ii)->SetMainColor(TColor::GetColorPalette(ii * nCol / (gTPCBins+2)));
+      
+      gEve->AddElement(gTPCColClusters);
+    } 
+    
+    processTPCClusters(block, gTPCClusters, gTPCColClusters);
+    //gTPCClusters->ElementChanged();
+    gTPCColClusters->ElementChanged();
+  }
+      
+  else if ( ! block->GetDataType().CompareTo("HWCL_ALT") ) {
+    if(!gTPCTestClusters){       
+      
+      gTPCTestClusters = new TEvePointSet("TPC Clusters Test");
+      //ggTPCTestClusters->ApplyVizTag("TPC Clusters");
+      gTPCTestClusters->SetMainColor(kBlue);
+      gTPCTestClusters->SetMarkerStyle((Style_t)kFullDotSmall);
+      gEve->AddElement(gTPCTestClusters);
+    }
+    
+    processTPCClusters(block, gTPCTestClusters);
+    gTPCTestClusters->ElementChanged();
+  }
+}