-/**************************************************************************
- * This file is property of and copyright by the ALICE HLT Project *
- * ALICE Experiment at CERN, All rights reserved. *
- * *
- * Primary Authors: Svein Lindal <slindal@fys.uio.no > *
- * for The ALICE HLT Project. *
- * *
- * Permission to use, copy, modify and distribute this software and its *
- * documentation strictly for non-commercial purposes is hereby granted *
- * without fee, provided that the above copyright notice appears in all *
- * copies and that both the copyright notice and this permission notice *
- * appear in the supporting documentation. The authors make no claims *
- * about the suitability of this software for any purpose. It is *
- * provided "as is" without express or implied warranty. *
- **************************************************************************/
-
-/// @file AliHLTEvePhos.cxx
-/// @author Svein Lindal <slindal@fys.uio.no>
-/// @brief Muon processor for the HLT EVE display
-
-#include "AliHLTEveMuon.h"
-#include "AliHLTMUONDataBlockReader.h"
-#include "AliHLTHOMERBlockDesc.h"
-#include "TCanvas.h"
-#include "TEveStraightLineSet.h"
-#include "TEvePointSet.h"
-#include "AliEveHOMERManager.h"
-#include "TEveManager.h"
-#include "AliMUONConstants.h"
-
-ClassImp(AliHLTEveMuon);
-
-AliHLTEveMuon::AliHLTEveMuon() :
- AliHLTEveBase(),
- fTracks(NULL),
- fClusters(NULL)
-{
- // Constructor.
-}
-
-AliHLTEveMuon::~AliHLTEveMuon()
-{
- //Destructor
- if (fTracks)
- delete fTracks;
- fTracks = NULL;
-
- if(fClusters)
- delete fClusters;
- fClusters = NULL;
-}
-
-
-void AliHLTEveMuon::ProcessBlock(AliHLTHOMERBlockDesc * block) {
- //See header file for documentation
- if ( (block->GetDataType().CompareTo("RECHITS") == 0) || (block->GetDataType().CompareTo("TRIGRECS") == 0) ) {
- if(!fClusters) {
- fClusters = CreateClusters();
- fEventManager->GetEveManager()->AddElement(fClusters);
- }
- ProcessClusters( block, fClusters );
-
- }else if(block->GetDataType().CompareTo("MANTRACK") == 0){
-
- if ( !fTracks ) {
- fTracks = CreateTrackSet();
- fEventManager->GetEveManager()->AddElement(fTracks);
- gEve->AddElement(fTracks);
- }
-
- ProcessTracks( block, fTracks );
- }
-}
-
-TEvePointSet * AliHLTEveMuon::CreateClusters() {
- //See header file for documentation
- TEvePointSet * ps = new TEvePointSet("MUON RecHits");
- ps->SetMainColor(kBlue);
- ps->SetMarkerStyle(20);
- return ps;
-}
-
-TEveStraightLineSet * AliHLTEveMuon::CreateTrackSet() {
- TEveStraightLineSet * ls = new TEveStraightLineSet("MUON Tracks");
- ls->SetMainColor(kRed);
- ls->SetLineWidth(3);
- return ls;
-}
-
-void AliHLTEveMuon::ProcessHistogram(AliHLTHOMERBlockDesc * block ) {
- //See header file for documentation
- if(!fCanvas) {
- fCanvas = CreateCanvas("MUON QA", "MUON QA");
- fCanvas->Divide(3, 2);
- }
- AddHistogramsToCanvas(block, fCanvas, fHistoCount);
-}
-
-void AliHLTEveMuon::UpdateElements() {
- //See header file for documentation
- if(fCanvas) fCanvas->Update();
- if(fClusters) fClusters->ResetBBox();
- if(fTracks) fTracks->ElementChanged();
-}
-
-void AliHLTEveMuon::ResetElements(){
- //See header file for documentation
- fHistoCount = 0;
-
- if ( fClusters ) fClusters->Reset();
- if ( fTracks ){
- fTracks->Destroy();
- fTracks = NULL;
- }
-
-}
-
-void AliHLTEveMuon::ProcessClusters(AliHLTHOMERBlockDesc * block, TEvePointSet * clusters) {
- //See header file for documentation
- unsigned long size = block->GetSize();
- Int_t * buffer ;
-
- buffer = (Int_t *)block->GetData();
- //cout<<"block size : "<<size<<", buffer : "<<buffer<<", DataType : "<<block->GetDataType()<<endl;
-
- if(block->GetDataType().CompareTo("RECHITS") == 0){
-
- AliHLTMUONRecHitsBlockReader trackblock((char*)buffer, size);
- const AliHLTMUONRecHitStruct* hit = trackblock.GetArray();
-
- for(AliHLTUInt32_t ientry = 0; ientry < trackblock.Nentries(); ientry++){
- if(hit->fX!=0.0 && hit->fY!=0.0 && hit->fZ!=0.0)
- clusters->SetNextPoint(hit->fX,hit->fY,hit->fZ);
- hit++;
-
- }// track hit loop
- }
-
- else{// if rechits
- // if(!strcmp((BlockType(ULong64_t(reader->GetBlockDataType(i)))).Data(),"TRIGRECS")){
-
- AliHLTMUONTriggerRecordsBlockReader trigblock(buffer, size);
- const AliHLTMUONTriggerRecordStruct* trigrec = trigblock.GetArray();
- for(AliHLTUInt32_t ientry = 0; ientry < trigblock.Nentries(); ientry++){
-
- const AliHLTMUONRecHitStruct* hit = &trigrec->fHit[0];
- for(AliHLTUInt32_t ch = 0; ch < 4; ch++)
- {
- if(hit->fX!=0.0 && hit->fY!=0.0 && hit->fZ!=0.0)
- clusters->SetNextPoint(hit->fX,hit->fY,hit->fZ);
- hit++;
- }// trig chamber loop
- trigrec++;
- }//trig hit loop
- }//else trigger
-
-}
-
-void AliHLTEveMuon::ProcessTracks(AliHLTHOMERBlockDesc * block, TEveStraightLineSet * tracks) {
- //See header file for documentation
- 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) ;
-
-
- tracks->AddLine(x0,y0,z0,x3,y3,z3);
- mtrack++;
- }
- // cout<<"NofManso Tracks : "<<mantrackblock.Nentries()<<endl;
- }
-}
+/**************************************************************************\r
+ * This file is property of and copyright by the ALICE HLT Project *\r
+ * ALICE Experiment at CERN, All rights reserved. *\r
+ * *\r
+ * Primary Authors: Svein Lindal <slindal@fys.uio.no > *\r
+ * for The ALICE HLT Project. *\r
+ * *\r
+ * Permission to use, copy, modify and distribute this software and its *\r
+ * documentation strictly for non-commercial purposes is hereby granted *\r
+ * without fee, provided that the above copyright notice appears in all *\r
+ * copies and that both the copyright notice and this permission notice *\r
+ * appear in the supporting documentation. The authors make no claims *\r
+ * about the suitability of this software for any purpose. It is *\r
+ * provided "as is" without express or implied warranty. *\r
+ **************************************************************************/\r
+\r
+/// @file AliHLTEvePhos.cxx\r
+/// @author Svein Lindal <slindal@fys.uio.no>\r
+/// @brief Muon processor for the HLT EVE display\r
+\r
+#include "AliHLTEveMuon.h"\r
+#include "AliHLTMUONDataBlockReader.h"\r
+#include "AliHLTHOMERBlockDesc.h"\r
+#include "TCanvas.h"\r
+#include "TEveStraightLineSet.h"\r
+#include "TEvePointSet.h"\r
+#include "AliEveHLTEventManager.h"\r
+#include "TEveManager.h"\r
+\r
+\r
+#include "TEveVSDStructs.h"\r
+#include "TGeoGlobalMagField.h"\r
+#include "AliESDMuonTrack.h"\r
+#include "AliESDMuonCluster.h"\r
+#include "AliEveMUONTrack.h"\r
+#include "AliHLTMUONConstants.h"\r
+#include "AliHLTMUONUtils.h"\r
+#include "AliMUONVCluster.h"\r
+#include "AliMUONConstants.h"\r
+#include "TEveTrackPropagator.h"\r
+\r
+using namespace std;\r
+\r
+class AliHLTMUONUtils;\r
+class AliEveMuonTrack;\r
+\r
+ClassImp(AliHLTEveMuon);\r
+\r
+AliHLTEveMuon::AliHLTEveMuon() : \r
+ AliHLTEveBase("Muon"),\r
+ fFullTrackList(NULL),\r
+ fTracks(NULL),\r
+ fClusters(NULL)\r
+{\r
+ // Constructor.\r
+ SetMaxHistograms(6);\r
+}\r
+\r
+AliHLTEveMuon::~AliHLTEveMuon()\r
+{\r
+ //Destructor\r
+ if (fFullTrackList)\r
+ delete fFullTrackList;\r
+ fFullTrackList = NULL;\r
+ \r
+ if (fTracks)\r
+ delete fTracks;\r
+ fTracks = NULL;\r
+\r
+ if(fClusters)\r
+ delete fClusters;\r
+ fClusters = NULL;\r
+}\r
+\r
+\r
+void AliHLTEveMuon::ProcessBlock(AliHLTHOMERBlockDesc * block) {\r
+ //See header file for documentation\r
+ if ( (block->GetDataType().CompareTo("RECHITS") == 0) || (block->GetDataType().CompareTo("TRIGRECS") == 0) ) {\r
+ if(!fClusters) {\r
+ fClusters = CreateClusters();\r
+ AddElement(fClusters);\r
+ }\r
+ ProcessClusters( block, fClusters );\r
+ \r
+ }else if(block->GetDataType().CompareTo("MANTRACK") == 0){\r
+ \r
+ if ( !fTracks ) {\r
+ fTracks = CreateTrackSet(); \r
+ AddElement(fTracks);\r
+ }\r
+ \r
+ ProcessTracks( block, fTracks );\r
+\r
+ }else if(block->GetDataType().CompareTo("TRACKS") == 0){\r
+ \r
+ if ( !fFullTrackList ) {\r
+ fFullTrackList = CreateFullTrackList(); \r
+ AddElement(fFullTrackList);\r
+ }\r
+ \r
+ ProcessFullTracks( block, fFullTrackList );\r
+\r
+ } else if(block->GetDataType().CompareTo("ROOTHIST") == 0) {\r
+ ProcessHistogram(block);\r
+ }\r
+ \r
+}\r
+\r
+TEvePointSet * AliHLTEveMuon::CreateClusters() {\r
+ //See header file for documentation\r
+ TEvePointSet * ps = new TEvePointSet("MUON RecHits");\r
+ ps->SetMainColor(kBlue);\r
+ ps->SetMarkerStyle(20);\r
+ return ps;\r
+}\r
+\r
+TEveStraightLineSet * AliHLTEveMuon::CreateTrackSet() {\r
+ // See header file\r
+ TEveStraightLineSet * lineset = new TEveStraightLineSet("MUON Tracks");\r
+ lineset->SetMainColor(kRed);\r
+ lineset->SetLineWidth(3);\r
+ return lineset;\r
+}\r
+\r
+TEveTrackList * AliHLTEveMuon::CreateFullTrackList(){\r
+ // See header file\r
+ TEveTrackList * lineset = new TEveTrackList("MUON Full Tracks");\r
+ lineset->SetMainColor(kBlue);\r
+ return lineset;\r
+}\r
+\r
+void AliHLTEveMuon::ProcessHistogram(AliHLTHOMERBlockDesc * block ) {\r
+ //See header file for documentation\r
+ if(!fCanvas) {\r
+ fCanvas = CreateCanvas("MUON QA", "MUON QA");\r
+ fCanvas->Divide(3, 2);\r
+ }\r
+ AddHistogramsToCanvas(block, fCanvas, fHistoCount);\r
+}\r
+\r
+void AliHLTEveMuon::UpdateElements() {\r
+ //See header file for documentation\r
+ if(fCanvas) fCanvas->Update();\r
+ if(fClusters) fClusters->ResetBBox();\r
+ if(fTracks) fTracks->ElementChanged();\r
+}\r
+\r
+void AliHLTEveMuon::ResetElements(){\r
+ //See header file for documentation\r
+ fHistoCount = 0;\r
+ \r
+ if ( fClusters ) fClusters->Reset();\r
+ if ( fTracks ){\r
+ fTracks->Destroy();\r
+ fTracks = NULL;\r
+ }\r
+ if ( fFullTrackList ){\r
+ fFullTrackList->Destroy();\r
+ fFullTrackList = NULL;\r
+ }\r
+\r
+\r
+}\r
+\r
+void AliHLTEveMuon::ProcessClusters(AliHLTHOMERBlockDesc * block, TEvePointSet * clusters) {\r
+ //See header file for documentation\r
+ unsigned long size = block->GetSize();\r
+ Int_t * buffer ;\r
+ \r
+ buffer = (Int_t *)block->GetData();\r
+ //cout<<"block size : "<<size<<", buffer : "<<buffer<<", DataType : "<<block->GetDataType()<<endl;\r
+\r
+ if(block->GetDataType().CompareTo("RECHITS") == 0){\r
+ \r
+ AliHLTMUONRecHitsBlockReader trackblock((char*)buffer, size);\r
+ const AliHLTMUONRecHitStruct* hit = trackblock.GetArray();\r
+ \r
+ for(AliHLTUInt32_t ientry = 0; ientry < trackblock.Nentries(); ientry++){\r
+ if(hit->fX!=0.0 && hit->fY!=0.0 && hit->fZ!=0.0)\r
+ clusters->SetNextPoint(hit->fX,hit->fY,hit->fZ);\r
+ hit++;\r
+ \r
+ }// track hit loop\r
+ }\r
+ \r
+ else{// if rechits\r
+ // if(!strcmp((BlockType(ULong64_t(reader->GetBlockDataType(i)))).Data(),"TRIGRECS")){\r
+ \r
+ AliHLTMUONTriggerRecordsBlockReader trigblock(buffer, size);\r
+ const AliHLTMUONTriggerRecordStruct* trigrec = trigblock.GetArray();\r
+ for(AliHLTUInt32_t ientry = 0; ientry < trigblock.Nentries(); ientry++){\r
+ \r
+ const AliHLTMUONRecHitStruct* hit = &trigrec->fHit[0];\r
+ for(AliHLTUInt32_t ch = 0; ch < 4; ch++)\r
+ {\r
+ if(hit->fX!=0.0 && hit->fY!=0.0 && hit->fZ!=0.0)\r
+ clusters->SetNextPoint(hit->fX,hit->fY,hit->fZ);\r
+ hit++;\r
+ }// trig chamber loop\r
+ trigrec++;\r
+ }//trig hit loop\r
+ }//else trigger\r
+ \r
+}\r
+\r
+void AliHLTEveMuon::ProcessTracks(AliHLTHOMERBlockDesc * block, TEveStraightLineSet * tracks) {\r
+ //See header file for documentation \r
+ unsigned long size = block->GetSize();\r
+ Int_t * buffer = (Int_t *)block->GetData();\r
+ AliHLTMUONRecHitStruct hit1,hit2;\r
+ hit1.fX = hit1.fY = hit1.fZ = hit2.fX = hit2.fY = hit2.fZ = 0;\r
+ Int_t ch1=0, ch2=0;\r
+ Float_t x0=0.0,y0=0.0,z0=0.0;\r
+ Float_t x3=0.0,y3=0.0,z3=0.0;\r
+ if(block->GetDataType().CompareTo("MANTRACK") == 0){ \r
+ AliHLTMUONMansoTracksBlockReader mantrackblock(buffer, size);\r
+ const AliHLTMUONMansoTrackStruct* mtrack = mantrackblock.GetArray();\r
+ for(AliHLTUInt32_t ientry = 0; ientry < mantrackblock.Nentries(); ientry++){\r
+ const AliHLTMUONRecHitStruct* hit = &mtrack->fHit[0];\r
+ for(AliHLTUInt32_t ch = 0; ch < 4; ch++){\r
+ // cout << setw(10) << left << ch + 7 << setw(0);\r
+ // cout << setw(13) << left << hit->fX << setw(0);\r
+ // cout << setw(13) << left << hit->fY << setw(0);\r
+ // cout << hit->fZ << setw(0) << endl;\r
+ if(hit->fZ != 0.0){\r
+ if(ch==0 || ch==1){\r
+ hit1 = *hit; ch1 = ch+6;\r
+ }else{\r
+ hit2 = *hit; ch2 = ch+6;\r
+ }\r
+ }\r
+ hit++;\r
+ }// trig chamber loop\r
+ // printf("ch : %d, (X,Y,Z) : (%f,%f,%f)\n",ch1,hit1.fX,hit1.fY,hit1.fZ);\r
+ // printf("ch : %d, (X,Y,Z) : (%f,%f,%f)\n",ch2,hit2.fX,hit2.fY,hit2.fZ);\r
+ // meminfo();\r
+ z3 = AliMUONConstants::DefaultChamberZ(ch2+4);\r
+ y3 = hit1.fY - (hit1.fZ-z3)*(hit1.fY - hit2.fY)/(hit1.fZ - hit2.fZ) ;\r
+ x3 = hit1.fX - (hit1.fZ-z3)*(hit1.fX - hit2.fX)/(hit1.fZ - hit2.fZ) ;\r
+\r
+ z0 = AliMUONConstants::DefaultChamberZ(ch1);\r
+ y0 = hit1.fY - (hit1.fZ-z0)*(hit1.fY - hit2.fY)/(hit1.fZ - hit2.fZ) ;\r
+ x0 = hit1.fX - (hit1.fZ-z0)*(hit1.fX - hit2.fX)/(hit1.fZ - hit2.fZ) ;\r
+ \r
+\r
+ tracks->AddLine(x0,y0,z0,x3,y3,z3);\r
+ mtrack++;\r
+ }\r
+ // cout<<"NofManso Tracks : "<<mantrackblock.Nentries()<<endl;\r
+ }\r
+}\r
+\r
+int AliHLTEveMuon::MakeMUONESDTrack(AliESDMuonTrack *muonESDTrack, const AliHLTMUONTrackStruct *muonHLTTrack)\r
+{\r
+ // See header for documentation\r
+ AliHLTUInt32_t clusterIndex = 0; // for the cluster unique ID. \r
+ AliHLTMUONParticleSign sign;\r
+ bool hitset[16];\r
+ AliHLTMUONUtils::UnpackTrackFlags(\r
+ muonHLTTrack->fFlags, sign, hitset\r
+ );\r
+ \r
+ TVector3 mom(muonHLTTrack->fPx, muonHLTTrack->fPy, muonHLTTrack->fPz);\r
+ if (mom.Mag() != 0)\r
+ muonESDTrack->SetInverseBendingMomentum(muonHLTTrack->fInverseBendingMomentum);\r
+ else\r
+ muonESDTrack->SetInverseBendingMomentum(0.);\r
+ muonESDTrack->SetThetaX(muonHLTTrack->fThetaX);\r
+ muonESDTrack->SetThetaY(muonHLTTrack->fThetaY);\r
+ muonESDTrack->SetZ(muonHLTTrack->fZ);\r
+ muonESDTrack->SetBendingCoor(muonHLTTrack->fY);\r
+ muonESDTrack->SetNonBendingCoor(muonHLTTrack->fX);\r
+\r
+ //printf("(X,Y,Z) : (%8.3f,%8.3f,%8.3f)\n",muonHLTTrack->fX,muonHLTTrack->fY,muonHLTTrack->fZ);\r
+\r
+ muonESDTrack->SetChi2(muonHLTTrack->fChi2);\r
+\r
+ Int_t nHits = 0;\r
+ for (int i = 0; i < 16; i++)\r
+ {\r
+ if (not hitset[i]) continue;\r
+ \r
+ AliHLTUInt8_t chamber;\r
+ AliHLTUInt16_t detElemId;\r
+ AliHLTMUONUtils::UnpackRecHitFlags((muonHLTTrack->fHit[i]).fFlags, chamber, detElemId);\r
+ \r
+ AliESDMuonCluster cluster;\r
+ cluster.SetUniqueID(AliMUONVCluster::BuildUniqueID(chamber, detElemId, clusterIndex++));\r
+ cluster.SetXYZ((muonHLTTrack->fHit[i]).fX, (muonHLTTrack->fHit[i]).fY, (muonHLTTrack->fHit[i]).fZ);\r
+ cluster.SetErrXY( // Use nominal values.\r
+ AliHLTMUONConstants::DefaultNonBendingReso(),\r
+ AliHLTMUONConstants::DefaultBendingReso()\r
+ );\r
+ cluster.SetCharge(-1.); // Indicate no total charge calculated.\r
+ cluster.SetChi2(-1.); // Indicate no fit made.\r
+ muonESDTrack->AddCluster(cluster);\r
+ nHits++;\r
+ muonESDTrack->AddInMuonClusterMap(chamber);\r
+ }\r
+ \r
+ muonESDTrack->SetNHit(nHits);\r
+\r
+ return 0;\r
+}\r
+\r
+Int_t AliHLTEveMuon::ProcessFullTracks(AliHLTHOMERBlockDesc * block, TEveTrackList * fullTracks) {\r
+\r
+ // See header for documentation \r
+\r
+ Int_t iResult = 0;\r
+\r
+ Double_t b[3], x[3];\r
+ x[0] = 0.0 ; x[1] = 0.0 ; x[2] = -950.0;\r
+ TGeoGlobalMagField::Instance()->Field(x,b);\r
+ //" Field at (0.0, 0.0, -950.0) [at the middle of dipole magnet] \r
+ //should be (6.79, 0.03, -0.17) or similar value with change of sign"\r
+ if(TMath::AreEqualAbs(b[0],0.0,1.0e-5) and TMath::AreEqualAbs(b[1],0.0,1.0e-5) and TMath::AreEqualAbs(b[2],0.0,1.0e-5)){\r
+ printf("At (X,Y,Z) : (%6.2lf,%6.2lf,%6.2lf) Field (Bx,By,Bz) is (%6.2lf,%6.2lf,%6.2lf)\n",\r
+ x[0],x[1],x[2],b[0],b[1],b[2]); \r
+ cerr<<"Magnetic field is not properly set, MUON tracking will not possble"<<endl;\r
+ return 1;\r
+ }\r
+ \r
+ \r
+\r
+ TEveRecTrack rt;\r
+ \r
+ unsigned long size = block->GetSize();\r
+ Int_t * buffer = (Int_t *)block->GetData();\r
+\r
+ AliHLTMUONTracksBlockReader muontrackblock(buffer, size);\r
+ const AliHLTMUONTrackStruct* mtrack = muontrackblock.GetArray();\r
+ //cout<<"NofTracks : "<<muontrackblock.Nentries()<<endl;\r
+ for(AliHLTUInt32_t ientry = 0; ientry < muontrackblock.Nentries(); ientry++){\r
+ \r
+ AliESDMuonTrack *muonESDTrack = new AliESDMuonTrack();\r
+ MakeMUONESDTrack(muonESDTrack,mtrack);\r
+ if(muonESDTrack->GetNHit()==0){\r
+ muonESDTrack->Delete();\r
+ continue;\r
+ }\r
+ \r
+ rt.fLabel = ientry;\r
+ AliEveMUONTrack* track = new AliEveMUONTrack(&rt, fullTracks->GetPropagator());\r
+ track->MakeESDTrack(muonESDTrack);\r
+ //track->SetTitle(Form("HLT Track : %d, pt : %lf",ientry,TMath::Sqrt(((mtrack->fPx * mtrack->fPx) + (mtrack->fPy * mtrack->fPy)))));\r
+ track->SetName(Form("HLT Track : %d, pt : %lf",ientry,TMath::Sqrt(((mtrack->fPx * mtrack->fPx) + (mtrack->fPy * mtrack->fPy)))));\r
+ fullTracks->AddElement(track);\r
+ \r
+ mtrack++;\r
+ }//track loop\r
+ \r
+ return iResult;\r
+\r
+}\r