]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HLT/EVE/AliHLTEveHLT.cxx
coverity 15108 fixed
[u/mrichter/AliRoot.git] / HLT / EVE / AliHLTEveHLT.cxx
index ea3984147793ee6d68d53acf5bfadc00a68b4ab4..a7a55118234c2cdfe7435056ec61835b3364b840 100644 (file)
 #include "AliHLTEveHLT.h"
 #include "AliHLTHOMERBlockDesc.h"
 #include "AliHLTEveBase.h"
-#include "AliEveHOMERManager.h"
+#include "AliEveHLTEventManager.h"
+#include "AliHLTGlobalTriggerDecision.h"
 #include "TEveManager.h"
 #include "TEvePointSet.h"
 #include "TEveTrack.h"
+#include "TEveElement.h"
 #include "TCanvas.h"
 #include "AliESDEvent.h"
+#include "AliESDtrack.h"
 #include "TEveTrackPropagator.h"
 #include "AliEveTrack.h"
 #include "TEveVSDStructs.h"
 #include "TPCLib/tracking-ca/AliHLTTPCCATrackParam.h"
 #include "TPCLib/tracking-ca/AliHLTTPCCATrackConvertor.h"
 #include "AliEveMagField.h"
+#include "TH1.h"
 #include "TH1F.h"
 #include "TH2F.h"
+#include "TThread.h"
 
 ClassImp(AliHLTEveHLT)
 
 AliHLTEveHLT::AliHLTEveHLT() : 
-  AliHLTEveBase(), 
+  AliHLTEveBase("TPC tracks"), 
   fTrueField(kFALSE),
   fUseIpOnFailedITS(kFALSE),
   fUseRkStepper(kFALSE),
   fTrackList(NULL),
+  fTrackLists(NULL),
+  fOldTrackList(NULL),
+  fPointSetVertex(NULL),
   fTrCanvas(NULL),
-  fHistPt(NULL), 
-  fHistP(NULL), 
+  fVertexCanvas(NULL),
   fHistEta(NULL),
-  fHistTheta(NULL),
   fHistPhi(NULL),
   fHistnClusters(NULL),
-  fHistMult(NULL)
+  fHistMult(NULL),
+  fHistDCAr(NULL),
+  fTrCount(0), 
+  fVCount(0),
+  fNTrackBins(10)
 {
   // Constructor.
   CreateHistograms();
 
 }
-
+///___________________________________________________________________
 AliHLTEveHLT::~AliHLTEveHLT()
 {
   //Destructor, not implemented
   if(fTrackList)
     delete fTrackList;
   fTrackList = NULL;
+
+  if(fTrackLists)
+    delete fTrackLists;
+  fTrackLists = NULL;
+
+
 }
 
+
+///________________________________________________________________________
 void AliHLTEveHLT::CreateHistograms(){
   //See header file for documentation
-  fHistPt        = new TH1F("fHistPt",       "transverse momentum",    100, 0, 10); // KK   
-  fHistP         = new TH1F("fHistP",        "signed momentum",        100,-7,  7);       
+
+  //fHistPt        = new TH1F("fHistPt",       "transverse momentum",    100, 0, 10); // KK   
+  //fHistP         = new TH1F("fHistP",        "signed momentum",        100,-7,  7);     
+
+  //fHistPt   ->SetXTitle("p_{t} (GeV/c)");   // KK
+  //fHistP    ->SetXTitle("P*charge (GeV/c)");
+
+  // fHistTheta     = new TH1F("fHistTheta",    "polar angle",            180, 0,180);   
+  // fHistTheta->SetXTitle("#theta (degrees)");
+  
   fHistEta       = new TH1F("fHistEta",      "pseudorapidity",         100,-2,  2);       
-  fHistTheta     = new TH1F("fHistTheta",    "polar angle",            180, 0,180);   
+  fHistEta  ->SetXTitle("#eta");
+
   fHistPhi      = new TH1F("fHistPhi",      "azimuthal angle",        180, 0,360);   
+  fHistPhi  ->SetXTitle("#phi (degrees)");
+
   fHistnClusters = new TH1F("fHistnClusters","TPC clusters per track", 160, 0,160);
-  fHistMult      = new TH1F("fHistMult",     "event track multiplicity",50, 0, 50);    
+
+  fHistMult      = new TH1F("fHistMult",     "event track multiplicity",150, 0, 15000);    
   
-  fHistPt   ->SetXTitle("p_{t} (GeV/c)");   // KK
-  fHistP    ->SetXTitle("P*charge (GeV/c)");
-  fHistEta  ->SetXTitle("#eta");
-  fHistTheta->SetXTitle("#theta (degrees)");
-  fHistPhi  ->SetXTitle("#phi (degrees)");
+  fHistDCAr = new TH1F("fHistDCAr", "DCA r", 200, -100, 100);
 
 }
 
+
+///_____________________________________________________________________
 void AliHLTEveHLT::ProcessBlock(AliHLTHOMERBlockDesc * block) {
   //See header file for documentation
   if ( ! block->GetDataType().CompareTo("ALIESDV0") ) {
-    if(!fTrackList) CreateTrackList();
-    ProcessEsdBlock(block, fTrackList);
+    ProcessEsdBlock(block);
   } 
   
   else if ( ! block->GetDataType().CompareTo("ROOTTOBJ") ) {
@@ -97,40 +124,100 @@ void AliHLTEveHLT::ProcessBlock(AliHLTHOMERBlockDesc * block) {
   } 
 
   else if ( ! block->GetDataType().CompareTo("HLTRDLST") ) {
+    cout << "ignoring hlt rdlst"<<endl;
     //processHLTRDLST( block );
   } 
 
+  else if ( ! block->GetDataType().CompareTo("GLOBTRIG") ) {
+    ProcessGlobalTrigger( block );
+  } 
+
   else if ( !block->GetDataType().CompareTo("ROOTHIST") ) {      
     if( !fCanvas ) { 
-      fCanvas = CreateCanvas("Primary Vertex", "Primary Vertex");
-      fCanvas->Divide(3, 2);
+      fCanvas = CreateCanvas("PVtx/Tr QA", "PrimV");
+      fCanvas->Divide(3, 3);
     }
     ProcessHistograms( block , fCanvas);
-  }
-  
+  }  
 }
 
-
+///____________________________________________________________________________
 void AliHLTEveHLT::UpdateElements() {
   //See header file for documentation
-  if(fCanvas) fCanvas->Update();
+
   DrawHistograms();
-  if(fTrackList) fTrackList->ElementChanged();
+
+  if(fTrackLists) {
+    for(Int_t il = 0; il < fNTrackBins; il++) {
+      TEveTrackList * trackList = dynamic_cast<TEveTrackList*>(fTrackLists->FindChild(Form("Tracks_%d", il)));
+      if(trackList) trackList->ElementChanged();
+    } 
+  }
+
+  if(fPointSetVertex) fPointSetVertex->ResetBBox();
+  if(fTrCanvas) fTrCanvas->Update();
+  if(fVertexCanvas) fVertexCanvas->Update();
+  if(fCanvas) fCanvas->Update();
+  
 }
 
+///_________________________________________________________________________________
 void AliHLTEveHLT::ResetElements(){
-    //See header file for documentation
-  if(fTrackList) fTrackList->DestroyElements();
+  //See header file for documentation
+  
+  cout << "destroy"<<endl;
+
+  if(fTrackLists) {
+    for(Int_t il = 0; il < fNTrackBins; il++) {
+      TEveTrackList * trackList = dynamic_cast<TEveTrackList*>(fTrackLists->FindChild(Form("Tracks_%d", il)));
+      if(trackList) trackList->DestroyElements();
+    } 
+  }
+
+  
+  fTrCount = 0;
+  fVCount = 0;
+
+  if(fPointSetVertex) fPointSetVertex->Reset();
+  cout<< "reset done"<<endl;
   fHistoCount = 0;
 
 }
 
+///_____________________________________________________________________________________
+void * AliHLTEveHLT::DestroyGarbage(void * arg) {
+  AliHLTEveHLT * hlt = reinterpret_cast<AliHLTEveHLT*>(arg);
+  if(hlt) hlt->DestroyOldTrackList();
+  return (void*)0;
+}
+///_____________________________________________________________________________________
+void AliHLTEveHLT::DestroyOldTrackList() {
+  cout << "Destroying the old tracklist's elements"<<endl;
+  fOldTrackList->DestroyElements();
+  cout << "Destroying the old tracklist itself"<<endl;
+  fOldTrackList->Destroy();
+}
+
+///_____________________________________________________________________________________
 void AliHLTEveHLT::ProcessHistograms(AliHLTHOMERBlockDesc * block, TCanvas * canvas) {
   //See header file for documentation
+  if (!fTrCanvas) {
+    fTrCanvas = CreateCanvas("ESD", "ESD");
+    fTrCanvas->Divide(4, 2);
+  }
+
+  if(!fVertexCanvas) {
+    fVertexCanvas = CreateCanvas("Vtx", "Vtx");
+    fVertexCanvas->Divide(4, 2);
+  }
+
+
+
   if ( ! block->GetClassName().CompareTo("TH1F")) {
     TH1F* histo = reinterpret_cast<TH1F*>(block->GetTObject());
     if( histo ){
       TString name(histo->GetName());
+      cout << "TH1F " <<name << endl;
       if( !name.CompareTo("primVertexZ") ){
        canvas->cd(2);
        histo->Draw();
@@ -140,95 +227,228 @@ void AliHLTEveHLT::ProcessHistograms(AliHLTHOMERBlockDesc * block, TCanvas * can
       }else if( !name.CompareTo("primVertexY") ){
        canvas->cd(4);
        histo->Draw();
+      } else if ( name.Contains("Track")) {
+       AddHistogramToCanvas(histo, fTrCanvas, fTrCount);
+      } else {
+       AddHistogramToCanvas(histo, fVertexCanvas, fVCount);
       }
     }
   }  else if ( ! block->GetClassName().CompareTo("TH2F")) {
     TH2F *hista = reinterpret_cast<TH2F*>(block->GetTObject());
     if (hista ){
        TString name(hista->GetName());
+       cout << "TH2F " << name << endl;
        if( !name.CompareTo("primVertexXY")) {      
         canvas->cd(1);
         hista->Draw();
-       }
+       } else if ( name.Contains("Track")) {
+       AddHistogramToCanvas(hista, fTrCanvas, fTrCount);
+      } else {
+       AddHistogramToCanvas(hista, fVertexCanvas, fVCount);
+      }
     }
   }
   canvas->cd();
+}
+
+///_____________________________________________________________________________________
+void AliHLTEveHLT::AddHistogramToCanvas(TH1* histogram, TCanvas * canvas, Int_t &cdCount) {
+  canvas->cd(++cdCount);
+  histogram->Draw();
+}
 
 
+///________________________________________________________________________________________
+void AliHLTEveHLT::CreateTrackList() {
+  //See header file for documentation
+  fTrackList = new TEveTrackList("ESD Tracks");
+  fTrackList->SetMainColor(kOrange);
+  AddElement(fTrackList);
+}
 
+///________________________________________________________________________________________
+void AliHLTEveHLT::CreateTrackLists() {
+  //See header file for documentation
+  fTrackLists = new TEveElementList("ESD Track lists");
+  AddElement(fTrackLists);
+  for(Int_t i = 0; i < 10; i++) {
+    TEveTrackList * trackList = new TEveTrackList(Form("Tracks_%d", i));
+    trackList->SetMainColor(kOrange-i);
+    fTrackLists->AddElement(trackList);
+  }
+}
 
+
+///_________________________________________________________________________________________
+void AliHLTEveHLT::CreateVertexPointSet() {
+  //See header file for documentation
+  fPointSetVertex = new TEvePointSet("Primary Vertex");
+  fPointSetVertex->SetMainColor(6);
+  fPointSetVertex->SetMarkerStyle((Style_t)kFullStar);
+
+  AddElement(fPointSetVertex);
 }
 
-void AliHLTEveHLT::CreateTrackList() {
+///________________________________________________________________________
+void AliHLTEveHLT::ProcessGlobalTrigger( AliHLTHOMERBlockDesc * block ) {
   //See header file for documentation
-  fTrackList = new TEveTrackList("ESD Tracks");
-  fTrackList->SetMainColor(6);
-  gEve->AddElement(fTrackList);
+  AliHLTGlobalTriggerDecision * decision = dynamic_cast<AliHLTGlobalTriggerDecision*>(block->GetTObject());
+  if(decision) decision->Print();
+
 }
 
 
-void AliHLTEveHLT::ProcessEsdBlock( AliHLTHOMERBlockDesc * block, TEveTrackList * cont ) {
+///______________________________________________________________________
+void AliHLTEveHLT::ProcessEsdBlock( AliHLTHOMERBlockDesc * block) {
   //See header file for documentation
 
   AliESDEvent* esd = (AliESDEvent *) (block->GetTObject());
-  esd->GetStdContent();
+  if (!esd) return;
   
-  SetUpTrackPropagator(cont->GetPropagator(),-0.1*esd->GetMagneticField(), 520);
+  ProcessEsdEvent(esd);
+}
 
-  for (Int_t iter = 0; iter < esd->GetNumberOfTracks(); ++iter) {
-    AliEveTrack* track = dynamic_cast<AliEveTrack*>(MakeEsdTrack(esd->GetTrack(iter), cont));
-    cont->AddElement(track);
+
+
+///_________________________________________________________________________________
+Color_t AliHLTEveHLT::GetColor(Float_t pt) {
+  //See header file
+  Color_t baseColor = kOrange;
+  
+  Float_t binlimit = 0.1;
+  for(Int_t i = 0; i< 10; i++) {
    
-    fHistPt->Fill(esd->GetTrack(iter)->Pt());   // KK
-    fHistP->Fill(esd->GetTrack(iter)->P()*esd->GetTrack(iter)->Charge());
-    fHistEta->Fill(esd->GetTrack(iter)->Eta());
-    fHistTheta->Fill(esd->GetTrack(iter)->Theta()*TMath::RadToDeg());
-    fHistPhi->Fill(esd->GetTrack(iter)->Phi()*TMath::RadToDeg());
-    if(esd->GetTrack(iter)->GetStatus()&AliESDtrack::kTPCin || (esd->GetTrack(iter)->GetStatus()&AliESDtrack::kTPCin && esd->GetTrack(iter)->GetStatus()&AliESDtrack::kITSin)){
-       fHistnClusters->Fill(esd->GetTrack(iter)->GetTPCNcls());  
-    }
+    if (pt < binlimit)
+      return baseColor - i;
+    
+    binlimit +=0.1;
+  }
+  
+  return baseColor - 9;
+
+}
+
+///_________________________________________________________________________________
+Int_t AliHLTEveHLT::GetColorBin(Float_t pt) {
+  //See header file
+  
+  Float_t binlimit = 0.1;
+  for(Int_t i = 0; i< 10; i++) {
+   
+    if (pt < binlimit)
+      return i;
+    
+    binlimit +=0.1;
+  }
+  
+  return 9;
+  
+}
+
+///____________________________________________________________________
+void AliHLTEveHLT::ProcessEsdEvent( AliESDEvent * esd ) {
+  //See header file for documentation
+  if(!fPointSetVertex) CreateVertexPointSet();
+  if(!fTrackLists) CreateTrackLists();
+
+  cout << "ProcessESDEvent() :"<< esd->GetEventNumberInFile()<< "  " << esd->GetNumberOfCaloClusters() << " tracks : " << esd->GetNumberOfTracks() << endl;
+
+  //fEventManager->SetRunNumber(esd->GetRunNumber());
+
+  Double_t vertex[3];
+  const AliESDVertex * esdVertex = esd->GetPrimaryVertex();
+  
+  if(esdVertex) {
+    esdVertex->GetXYZ(vertex);
+    fPointSetVertex->SetNextPoint(vertex[0], vertex[1], vertex[2]);
   }
   
+  TEveTrackList * trackList = dynamic_cast<TEveTrackList*>(fTrackLists->FirstChild());
+  if(trackList) SetUpTrackPropagator(trackList->GetPropagator(),-0.1*esd->GetMagneticField(), 520);
+  for (Int_t iter = 0; iter < esd->GetNumberOfTracks(); ++iter) {
+
+   AliESDtrack * esdTrack = dynamic_cast<AliESDtrack*>(esd->GetTrack(iter));
+   FillTrackList(esdTrack);
+   FillHistograms(esdTrack);
+   
+  }
   fHistMult->Fill(esd->GetNumberOfTracks()); // KK
   
+  //BALLE hardcoded size
+  for(Int_t il = 0; il < fNTrackBins; il++) {
+    trackList = dynamic_cast<TEveTrackList*>(fTrackLists->FindChild(Form("Tracks_%d", il)));
+    trackList->MakeTracks();
+  } 
+}
+///__________________________________________________________________________
+void AliHLTEveHLT::FillTrackList(AliESDtrack * esdTrack) {
+  //See header file for documentation
+  TEveTrackList * trackList = dynamic_cast<TEveTrackList*>(fTrackLists->FirstChild());
+  if (!trackList) return;
   
-  cont->SetTitle(Form("N=%d", esd->GetNumberOfTracks()) );
-  cont->MakeTracks();
+  AliEveTrack* track = dynamic_cast<AliEveTrack*>(MakeEsdTrack(esdTrack, trackList));        
+  Int_t bin = GetColorBin(esdTrack->Pt());
+  trackList = dynamic_cast<TEveTrackList*>(fTrackLists->FindChild(Form("Tracks_%d", bin)));
+  if(trackList) {
+    track->SetAttLineAttMarker(trackList);
+    trackList->AddElement(track);
+  } else cout << "BALLE"<<endl;
+
 
 }
 
 
+///____________________________________________________________________________________
+void AliHLTEveHLT::FillHistograms(AliESDtrack * esdTrack) {
+
+  if(esdTrack->GetTPCNcls() == 0) return;
+  
+  fHistEta->Fill(esdTrack->Eta());
+  // fHistTheta->Fill(esdTrack->Theta()*TMath::RadToDeg());
+  fHistPhi->Fill(esdTrack->Phi()*TMath::RadToDeg());
+  
+  
+  Float_t DCAr, DCAz = -99;
+  esdTrack->GetImpactParametersTPC(DCAr, DCAz);
+  fHistDCAr->Fill(DCAr);
+  
+  
+  if(esdTrack->GetStatus()&AliESDtrack::kTPCin || (esdTrack->GetStatus()&AliESDtrack::kTPCin && esdTrack->GetStatus()&AliESDtrack::kITSin)){
+    fHistnClusters->Fill(esdTrack->GetTPCNcls());  
+  }
+}
+
 void AliHLTEveHLT::DrawHistograms(){
   //See header file for documentation
-
-  if (!fTrCanvas) {
-    fTrCanvas = CreateCanvas("TPC Tr QA", "TPC Track QA");
-    fTrCanvas->Divide(4, 2);
+  if(!fCanvas) {
+    fCanvas = CreateCanvas("PVtx/Tr QA", "Primary vertex, Track QA");
+    fCanvas->Divide(3, 3);
   }
 
-  Int_t icd = 1;
-  fTrCanvas->cd(icd++);
-  fHistPt->Draw();
-  fTrCanvas->cd(icd++);
-  fHistP->Draw();
-  fTrCanvas->cd(icd++);
+  fCanvas->cd(5);
   fHistEta->Draw();
-  fTrCanvas->cd(icd++);
-  fHistTheta->Draw();
-  fTrCanvas->cd(icd++);
+
+  fCanvas->cd(6);
   fHistPhi->Draw();
-  fTrCanvas->cd(icd++);
+
+  fCanvas->cd(7);
   fHistnClusters->Draw();
-  fTrCanvas->cd(icd++);
+
+  fCanvas->cd(8);
   fHistMult->Draw();
-  fTrCanvas->cd();
 
-  fTrCanvas->Update();
+  fCanvas->cd(9);
+  fHistDCAr->Draw();
+
+  fCanvas->cd();
 
 }
 
 AliEveTrack* AliHLTEveHLT::MakeEsdTrack (AliESDtrack *at, TEveTrackList* cont) {
   //See header file for documentation
+  
+    
+
 
 
   const double kCLight = 0.000299792458;
@@ -253,7 +473,9 @@ AliEveTrack* AliHLTEveHLT::MakeEsdTrack (AliESDtrack *at, TEveTrackList* cont) {
     trackParam = *at->GetConstrainedParam();
   }
   else if( at->GetInnerParam() ){
-    trackParam = *(at->GetInnerParam());
+    float x = at->GetX();
+    float y = at->GetY();
+    if(sqrt(x*x+y*y)>.5 ) trackParam = *(at->GetInnerParam());
   }
   if( at->GetStatus()&AliESDtrack::kTRDin ){
     // transport to TRD in
@@ -276,7 +498,6 @@ AliEveTrack* AliHLTEveHLT::MakeEsdTrack (AliESDtrack *at, TEveTrackList* cont) {
   }
 
   AliEveTrack* track = new AliEveTrack(&rt, cont->GetPropagator());
-  track->SetAttLineAttMarker(cont);
   track->SetName(Form("AliEveTrack %d", at->GetID()));
   track->SetElementTitle(CreateTrackTitle(at));
   track->SetSourceObject(at);
@@ -299,47 +520,74 @@ AliEveTrack* AliHLTEveHLT::MakeEsdTrack (AliESDtrack *at, TEveTrackList* cont) {
     track->AddPathMark( startPoint );    
   }
 
+  bool ok = 1;
+  if( at->GetOuterParam() && at->GetTPCPoints(2)>80 ){
 
-  if( at->GetTPCPoints(2)>80 ){
-  
     //
     // use AliHLTTPCCATrackParam propagator 
     // since AliExternalTrackParam:PropagateTo()
     // has an offset at big distances
     //
-    
+    double rot = at->GetOuterParam()->GetAlpha() - trackParam.GetAlpha();
+    double crot = cos(rot), srot = sin(rot);
+    double xEnd = at->GetTPCPoints(2)*crot -  at->GetTPCPoints(3)*srot;
+  // take parameters constrained to vertex (if they are)
+
     AliHLTTPCCATrackParam t;
     AliHLTTPCCATrackConvertor::SetExtParam( t, trackParam );
     
     Double_t x0 = trackParam.GetX();
-    Double_t dx = at->GetTPCPoints(2) - x0;
+    Double_t dx = xEnd - x0;
     
+    if( dx<0 ) ok = 0;
     //
     // set a reference at the half of trajectory for better drawing
     //
     
-    for( double dxx=dx/2; TMath::Abs(dxx)>=1.; dxx*=.9 ){
-      if( !t.TransportToX(x0+dxx, bz, .99 ) ) continue;
-      AliHLTTPCCATrackConvertor::GetExtParam( t, trackParam, trackParam.GetAlpha() ); 
-      trackParam.GetXYZ(vbuf);
-      trackParam.GetPxPyPz(pbuf);
-      TEvePathMark midPoint(TEvePathMark::kReference);
-      midPoint.fV.Set(vbuf);
-      midPoint.fP.Set(pbuf);    
-      track->AddPathMark( midPoint );
-      break;
+    if( ok ){ 
+      double dxx=dx/2; 
+      if( TMath::Abs(dxx)>=1. ){
+
+       if( !t.TransportToX(x0+dxx, bz, .999 ) ){
+         ok = 0;
+       } else {
+         AliExternalTrackParam tt;
+         AliHLTTPCCATrackConvertor::GetExtParam( t, tt, trackParam.GetAlpha() ); 
+         tt.GetXYZ(vbuf);
+         tt.GetPxPyPz(pbuf);
+         TEvePathMark midPoint(TEvePathMark::kReference);
+         midPoint.fV.Set(vbuf);
+         midPoint.fP.Set(pbuf);    
+         track->AddPathMark( midPoint );     
+       }
+      }
     }
-    
+   
     //
     // Set a reference at the end of the trajectory
     // and a "decay point", to let the event display know where the track ends
     //
     
-    for( ; TMath::Abs(dx)>=1.; dx*=.9 ){
-      if( !t.TransportToX(x0+dx, bz, .99 ) ) continue;
-      AliHLTTPCCATrackConvertor::GetExtParam( t, trackParam, trackParam.GetAlpha() ); 
-      trackParam.GetXYZ(vbuf);
-      trackParam.GetPxPyPz(pbuf);
+    for( ; ok; dx*=.9 ){
+
+      if( !t.TransportToX(x0+dx, bz, .999 ) ){
+       ok = 0; 
+       break;
+       if( TMath::Abs(dx)<1. ) break;      
+       continue;
+      }
+      break;
+    }
+
+    {
+      if( !ok ){ 
+       AliHLTTPCCATrackConvertor::SetExtParam( t, trackParam );
+      }
+      AliExternalTrackParam tt;
+      AliHLTTPCCATrackConvertor::GetExtParam( t, tt, trackParam.GetAlpha() ); 
+      tt.GetXYZ(vbuf);
+      tt.GetPxPyPz(pbuf);
       TEvePathMark endPoint(TEvePathMark::kReference);
       TEvePathMark decPoint(TEvePathMark::kDecay);
       endPoint.fV.Set(vbuf);
@@ -348,11 +596,10 @@ AliEveTrack* AliHLTEveHLT::MakeEsdTrack (AliESDtrack *at, TEveTrackList* cont) {
       decPoint.fP.Set(pbuf);
       track->AddPathMark( endPoint );
       track->AddPathMark( decPoint );
-      break;
     }  
   }
 
-  if (at->IsOn(AliESDtrack::kTPCrefit))
+  if ( ok &&  at->IsOn(AliESDtrack::kTPCrefit))
   {
     if ( ! innerTaken)
     {
@@ -360,6 +607,7 @@ AliEveTrack* AliHLTEveHLT::MakeEsdTrack (AliESDtrack *at, TEveTrackList* cont) {
     }
     AddTrackParamToTrack(track, at->GetOuterParam());
   }
+  
   return track;
 }
 
@@ -450,3 +698,4 @@ TString AliHLTEveHLT::CreateTrackTitle(AliESDtrack* t) {
   return s;
 }
 
+