]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Jochen's TPCLib source code from Jan 2006 merged
authorrichterm <richterm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 17 Aug 2006 13:39:44 +0000 (13:39 +0000)
committerrichterm <richterm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 17 Aug 2006 13:39:44 +0000 (13:39 +0000)
- version HLT-v0-2
- bugfix in AliHLTTPCConfMapper (caused low tracking efficiency)
- Online Display development
- Note: the AliHLTTPCDisplay Interface has been changed -> AliHLTGUI
  has to be re-linked
- no changes in BASE

25 files changed:
HLT/ChangeLog
HLT/TPCLib/AliHLTTPCClusterFinder.cxx
HLT/TPCLib/AliHLTTPCClusterFinderComponent.h
HLT/TPCLib/AliHLTTPCConfMapper.cxx
HLT/TPCLib/AliHLTTPCDisplay.cxx
HLT/TPCLib/AliHLTTPCDisplay.h
HLT/TPCLib/AliHLTTPCSliceTrackerComponent.cxx
HLT/TPCLib/AliHLTTPCSliceTrackerComponent.h
HLT/TPCLib/AliHLTTPCSpacePointData.h
HLT/TPCLib/AliHLTTPCTrack.cxx
HLT/TPCLib/AliHLTTPCTrackArray.cxx
HLT/TPCLib/AliHLTTPCTransform.h
HLT/TPCLib/Makefile
HLT/TPCLib/OnlineDisplay/HLT-OnlineDisplay-HOMER.C
HLT/TPCLib/OnlineDisplay/StartDisplayMacro.C
HLT/TPCLib/OnlineDisplay/rootlogon.C
HLT/TPCLib/Ref/AliHLTTPCConfMapTrack.cxx
HLT/TPCLib/Ref/AliHLTTPCConfMapper.cxx
HLT/TPCLib/Ref/AliHLTTPCConfMapper.h
HLT/TPCLib/Ref/AliHLTTPCSliceTrackerComponent.cxx
HLT/TPCLib/Ref/AliHLTTPCSliceTrackerComponent.h
HLT/TPCLib/Ref/AliHLTTPCSpacePointData.h
HLT/TPCLib/Ref/AliHLTTPCTrack.cxx
HLT/TPCLib/Ref/AliHLTTPCTrackArray.cxx
HLT/configure.ac

index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..339ac92e8a30ac0aab2f1a3cccb250150d5a0b55 100644 (file)
@@ -0,0 +1,7 @@
+2006-08-17 Jochen's TPCLib source code from Jan 2006 (not a joke) merged
+       - bugfix in AliHLTTPCConfMapper (caused low tracking efficiency)
+       - Online Display development
+       - Note: the AliHLTTPCDisplay Interface has been changed -> AliHLTGUI
+         has to be re-linked
+       - no changes in BASE
+       
\ No newline at end of file
index 3948ed33a9ed4f2ae03447d38bf0abf652587522..fd4ca78df50b30aff88703f12bc8a88a0b68eae1 100644 (file)
@@ -234,6 +234,15 @@ void AliHLTTPCClusterFinder::ProcessDigits()
     while(1){ //Loop over current
       charge = fDigitReader->GetSignal();
 
+
+      // CHARGE DEBUG
+      if (fDigitReader->GetRow() == 90){
+/////    LOG(AliHLTTPCLog::kFatal,"AliHLTTPCClusterFinder::Row","row90")  << "PAD=" <<  fDigitReader->GetPad() << "  TIME=" <<  fDigitReader->GetTime() 
+         //                                       << "  SIGNAL=" <<  fDigitReader->GetSignal() << ENDLOG;
+
+      }
+
+
       if(time >= AliHLTTPCTransform::GetNTimeBins()){
        LOG(AliHLTTPCLog::kFatal,"AliHLTTPCClusterFinder::ProcessRow","Digits")
          <<"Timebin out of range "<<(Int_t)time<<ENDLOG;
@@ -420,6 +429,11 @@ void AliHLTTPCClusterFinder::WriteClusters(Int_t nclusters,AliClusterData *list)
       Float_t ftime =(Float_t)list[j].fTime / list[j].fTotalCharge;
       Float_t ftime2=fZErr*fZErr;  //fixed given error
 
+
+   
+     
+
+
       if(fCalcerr) { //calc the errors, otherwice take the fixed error 
        Int_t patch = AliHLTTPCTransform::GetPatch(fCurrentRow);
        UInt_t q2=list[j].fTotalCharge*list[j].fTotalCharge;
@@ -488,6 +502,7 @@ void AliHLTTPCClusterFinder::WriteClusters(Int_t nclusters,AliClusterData *list)
       fSpacePointData[counter].fSigmaZ2  = ftime2;
 
       fSpacePointData[counter].fUsed = kFALSE;         // only used / set in AliHLTTPCDisplay
+      fSpacePointData[counter].fTrackN = -1;           // only used / set in AliHLTTPCDisplay
 
       Int_t patch=fCurrentPatch;
       if(patch==-1) patch=0; //never store negative patch number
index 3529912dbf04383dfdaae60c2754fb6d0a72b555..6b7cd8472636849806916fb2e5d5ef4e6a269bd5 100644 (file)
@@ -1,4 +1,3 @@
-// XEmacs -*-C++-*-
 // @(#) $Id$
 
 #ifndef ALIHLTTPCCLUSTERFINDERCOMPONENT_H
index 9ce5591b1334700402e26ff01e4a08af70697fad..310051304ea7451cebb407514445ea51cfcfb770 100644 (file)
@@ -156,11 +156,12 @@ Bool_t AliHLTTPCConfMapper::ReadHits(UInt_t count, AliHLTTPCSpacePointData* hits
   //read hits
   Int_t nhit=(Int_t)count; 
   for (Int_t i=0;i<nhit;i++)
-    {
-      fHit[i].Reset();
-      fHit[i].ReadHits(&(hits[i]));
+    {  
+      fHit[i+fClustersUnused].Reset();
+      fHit[i+fClustersUnused].ReadHits(&(hits[i]));
     }
   fClustersUnused += nhit;
+
   LOG(AliHLTTPCLog::kInformational,"AliHLTTPCConfMapper::ReadHits","#hits")
     <<AliHLTTPCLog::kDec<<"hit_counter: "<<nhit<<" count: "<<count<<ENDLOG;
   
@@ -301,8 +302,11 @@ void AliHLTTPCConfMapper::MainVertexTracking()
 
   Double_t initCpuTime,cpuTime;
   initCpuTime = CpuTime();
-  
-  SetPointers();
+// END ################################################# MODIFIY JMT
+#if 0
+  SetPointers(); // moved to Component
+#endif
+// END ################################################# MODIFIY JMT
   SetVertexConstraint(true);
       
   ClusterLoop();
@@ -663,9 +667,17 @@ AliHLTTPCConfMapPoint *AliHLTTPCConfMapper::GetNextNeighbor(AliHLTTPCConfMapPoin
                     
                      if(track)//track search - look for nearest neighbor to extrapolated track
                        {
+// BEGINN ############################################## MODIFIY JMT
+#if 1
+                           if (fVertexConstraint) {   
+                               if(!VerifyRange(starthit,hit))
+                                   continue;
+                           }
+#else
                          if(!VerifyRange(starthit,hit))
                            continue;
-                                                 
+#endif
+// END ################################################# MODIFIY JMT                     
                          testhit = EvaluateHit(starthit,hit,track);
                          
                          if(testhit == 0)//chi2 not good enough, keep looking
@@ -682,8 +694,17 @@ AliHLTTPCConfMapPoint *AliHLTTPCConfMapper::GetNextNeighbor(AliHLTTPCConfMapPoin
                          
                          if((dist=CalcDistance(starthit,hit)) < closestdist)
                            {
-                             if(!VerifyRange(starthit,hit))
-                               continue;
+// BEGINN ############################################## MODIFIY JMT
+#if 1
+                           if (fVertexConstraint) {   
+                               if(!VerifyRange(starthit,hit))
+                                   continue;
+                           }
+#else
+                         if(!VerifyRange(starthit,hit))
+                           continue;
+#endif
+// END ################################################# MODIFIY JMT   
                              closestdist = dist;
                              closesthit = hit;
                         
index 29d6dc156cb240d80808bdca9ea48f56ccd6b744..4947e1d717248cef4c67e4f87a363eb64fee812f 100644 (file)
 //         Anders Vestbo <mailto:vestbo@fi.uib.no>      
 //*-- Copyright &copy ALICE HLT Group 
 
-
-// Recent Changes:
-// ==============
-// - Rename and Merge of functions / Complete new arrangement in order to use the AliHLTGUI
-// - 3D Geometry
-//   - display padrows, cluster, tracks
-//   - select single Tracks
-//   - select used / unused cluster
-// - Histogram
-//   - display padrows
-//   - display pads in padrows
+#define TRACKHELIX 0
+#define TRACKPOLYMARKER 0
+#define BACKWARD 0
 
 #include "AliHLTTPCStandardIncludes.h"
 #include <TView.h>
 #include <THelix.h>
 #include <TStyle.h>
 #include <TGraph.h>
+#include <TMultiGraph.h>
 #include <TAttText.h>
 #include <TAxis.h>
 
+#if TRACKHELIX
+#include <THelix.h>
+#endif
 
 #ifdef use_aliroot
 #include <TClonesArray.h>
@@ -65,7 +61,7 @@ using namespace std;
 ClassImp(AliHLTTPCDisplay)
 
 // #############################################################################
-AliHLTTPCDisplay::AliHLTTPCDisplay(Char_t *gfile) {
+void AliHLTTPCDisplay::InitDisplay(Char_t *gfile) {
     //constructor
     memset(fClusters,0,36*6*sizeof(AliHLTTPCSpacePointData*));
     memset(fNcl, 0, 36*6*sizeof(UInt_t)); 
@@ -76,12 +72,23 @@ AliHLTTPCDisplay::AliHLTTPCDisplay(Char_t *gfile) {
     fHistpad1 = NULL;
     fHistpad2 = NULL;
     fHistpad3 = NULL;
-    fHistallresiduals = NULL;
+    fHistallresidualsY = NULL;   
+    fHistallresidualsZ = NULL;
     fHistcharge = NULL;
-    fGraphresiduals = NULL;
+    fGraphresidualsY = NULL;
+    fGraphresidualsZ = NULL;
+    fGraphresidualsYLength = NULL;
+    fGraphresidualsZLength = NULL;
 
-    fGeom = NULL;
 
+    fGeom = NULL;
+// ---------------------------------------------------
+// In order to be backward compatible
+// ---------------------------------------------------
+#if BACKWARD
+    //fc1 = NULL;
+#endif 
+// ---------------------------------------------------
     fNPads = 0;
     fNTimes = 0;
     fMinHits = 0;
@@ -102,13 +109,14 @@ AliHLTTPCDisplay::AliHLTTPCDisplay(Char_t *gfile) {
 
     fBackColor = 1; 
     fLineColor = 0;
+    fKeepView = kFALSE;
 
     fSwitch3DCluster = kFALSE;
     fSwitch3DTracks = kFALSE;
     fSwitch3DPadRow = kFALSE;
     fSwitch3DGeometry = kFALSE;
 
-    //ctor. Specify which slices you want to look at.
+    AliHLTTPCTransform::SetBField(0.4);
     LoadGeometrie(gfile);
 }
 
@@ -239,6 +247,7 @@ void AliHLTTPCDisplay::SetupTracks(AliHLTTPCTrackArray *tracks) {
                continue;
            }
            points[pos].fUsed = kTRUE;
+           points[pos].fTrackN = j;
        }
     }
 }
@@ -248,9 +257,6 @@ void AliHLTTPCDisplay::SetupHist(){
 
     Int_t maxpads = 150;
     fNTimes = AliHLTTPCTransform::GetNTimeBins();
-    Float_t xyz[3];
-    AliHLTTPCTransform::RawHLT2Global(xyz, 0, 0, 0, 0);
-    LOG(AliHLTTPCLog::kError,"AliHLTTPCDisplay::ccc","") << "t="<< fNTimes  <<"maxZ="<<xyz[2] << "|" << xyz[0]<< "|"<< xyz[1]<< ENDLOG;
 
     if ( fHistraw ){
        delete fHistraw;
@@ -276,11 +282,15 @@ void AliHLTTPCDisplay::SetupHist(){
        fHistpad3 = NULL;
     }
 
-    if ( fHistallresiduals){
-       delete fHistallresiduals;
-       fHistallresiduals = NULL;
+    if ( fHistallresidualsY){
+       delete fHistallresidualsY;
+       fHistallresidualsY = NULL;
     }
 
+    if ( fHistallresidualsZ){
+       delete fHistallresidualsZ;
+       fHistallresidualsZ = NULL;
+    }
     if ( fHistcharge){
        delete fHistcharge;
        fHistcharge = NULL;
@@ -293,18 +303,23 @@ void AliHLTTPCDisplay::SetupHist(){
     fHistpad1 = new TH1F ("fHistpad1","Selected Pad -1;Timebin #",fNTimes,0,fNTimes-1);
     fHistpad2 = new TH1F ("fHistpad2","Selected Pad;Timebin #",fNTimes,0,fNTimes-1); 
     fHistpad3 = new TH1F ("fHistpad3","Selected Pad +1;Timebin #",fNTimes,0,fNTimes-1);
-    fHistallresiduals = new TH1F ("fHistallresiduals","Residuals of all Tracks in selected slices;residuals",5000,0,100);
-    fHistcharge = new TH1F ("fHistcharge","Cluster distribution per charge;charge;#cluster",500,0,6000);
+    fHistallresidualsY = new TH1F ("fHistallresiduals","Y Residuals of all Tracks in selected slices;residuals",5000,0,100);
+    fHistallresidualsZ = new TH1F ("fHistallresiduals","Z Residuals of all Tracks in selected slices;residuals",5000,0,100);
+    fHistcharge = new TH1F ("fHistcharge","Cluster distribution per charge;charge;#cluster",5000,0,30000);
 
     fHistraw->SetOption("COLZ"); 
 
-  
+    fHistallresidualsY->SetTitleSize(0.03);
+    fHistallresidualsY->GetXaxis()->SetLabelSize(0.03);
+    fHistallresidualsY->GetXaxis()->SetTitleSize(0.03);
+    fHistallresidualsY->GetYaxis()->SetLabelSize(0.03);
+    fHistallresidualsY->GetYaxis()->SetTitleSize(0.03);
 
-    fHistallresiduals->SetTitleSize(0.03);
-    fHistallresiduals->GetXaxis()->SetLabelSize(0.03);
-    fHistallresiduals->GetXaxis()->SetTitleSize(0.03);
-    fHistallresiduals->GetYaxis()->SetLabelSize(0.03);
-    fHistallresiduals->GetYaxis()->SetTitleSize(0.03);
+    fHistallresidualsZ->SetTitleSize(0.03);
+    fHistallresidualsZ->GetXaxis()->SetLabelSize(0.03);
+    fHistallresidualsZ->GetXaxis()->SetTitleSize(0.03);
+    fHistallresidualsZ->GetYaxis()->SetLabelSize(0.03);
+    fHistallresidualsZ->GetYaxis()->SetTitleSize(0.03);
 
     fHistcharge->SetTitleSize(0.03);
     fHistcharge->GetXaxis()->SetLabelSize(0.03);
@@ -339,7 +354,6 @@ void AliHLTTPCDisplay::SetupHist(){
     gStyle->SetPalette(1);
     
     SetHistPadRowAxis();
-
 }
 
 // ####################################################################################################
@@ -382,10 +396,10 @@ void AliHLTTPCDisplay::FillPadRow(Int_t patch, ULong_t dataBlock, ULong_t dataLe
                UInt_t charge = fDigitReader->GetSignal();
                
                for (UInt_t ii=0;ii < 19;ii++){
-                   if ( charge > (ii*21) && charge <= ((ii*21) + 21) ) fcolorbin[ii]++;
+                   if ( charge > (ii*15) && charge <= ((ii*15) + 15) ) fcolorbin[ii]++;
                }
-                // larger than 19 * 21 
-               if (charge > 399 ) fcolorbin[19]++;
+                // larger than 19 * 15 
+               if (charge > 285 ) fcolorbin[19]++;
            }
 
            // read next value
@@ -443,15 +457,15 @@ void AliHLTTPCDisplay::FillPadRow(Int_t patch, ULong_t dataBlock, ULong_t dataLe
                AliHLTTPCTransform::RawHLT2Global(xyz, fSlicePadRow, fPadRow, pad, time);
 
                for (UInt_t ii=0;ii < 19;ii++){
-                   if ( charge > (ii*21) && charge <= ((ii*21) + 21) ){
+                   if ( charge > (ii*15) && charge <= ((ii*15) + 15) ){
                        fpmarr[ii][fbinct[ii]] = xyz[0];
                        fpmarr[ii][fbinct[ii]+1] = xyz[1];
                        fpmarr[ii][fbinct[ii]+2] = xyz[2];
                        fbinct[ii] += 3;
                    }
                }
-               // larger than 19 * 21
-               if (charge > 399 ) {
+               // larger than 19 * 15
+               if (charge > 285 ) {
                    fpmarr[19][fbinct[19]] = xyz[0];
                    fpmarr[19][fbinct[19]+1] = xyz[1];
                    fpmarr[19][fbinct[19]+2] = xyz[2];
@@ -491,7 +505,6 @@ void AliHLTTPCDisplay::FillPadRow(Int_t patch, ULong_t dataBlock, ULong_t dataLe
     }
 }
 
-
 // #############################################################################
 void AliHLTTPCDisplay::ResetHistPadRow(){  
     fHistraw->Reset();   
@@ -503,7 +516,8 @@ void AliHLTTPCDisplay::ResetHistPadRow(){
 
 // #############################################################################
 void AliHLTTPCDisplay::ResetHistResiduals(){  
-    fHistallresiduals->Reset();
+    fHistallresidualsY->Reset();
+    fHistallresidualsZ->Reset();
 }
 
 // #############################################################################
@@ -582,28 +596,75 @@ void AliHLTTPCDisplay::DrawHistPad3(){
 }
 
 // #############################################################################
-void AliHLTTPCDisplay::DrawHistResiduals(){  
+void AliHLTTPCDisplay::DrawHistResiduals(Bool_t ySwitch){  
     if (fSwitch3DTracks){
-    
-        // Residual histogram for 1 track
-       if (fSelectTrackSwitch){
-           Char_t title[256];
-           sprintf(title,"Residuals of Track %d in Slice %d",fSelectTrack, fSelectTrackSlice );
-        
-//         fHistresiduals->SetMarkerStyle(2);
-//         fHistresiduals->SetStats(kFALSE);
-//         fHistresiduals->SetTitle(title);
-//         fHistresiduals->Draw("p");
-           fGraphresiduals->SetTitle(title);   
-           fGraphresiduals->GetXaxis()->SetTitle("z"); 
-           fGraphresiduals->GetYaxis()->SetTitle("residuals");
-           fGraphresiduals->Draw("A*");
-           
+       if (ySwitch){
+           // Y Residual histogram for 1 track
+
+           if (fSelectTrackSwitch){
+               Char_t title[256];
+               sprintf(title,"Y Residuals of Track %d in Slice %d",fSelectTrack, fSelectTrackSlice );
+
+               TMultiGraph *mgY = new TMultiGraph();
+
+
+//             fGraphresidualsY->SetTitle(title);      
+               fGraphresidualsY->GetXaxis()->SetTitle("padrow");       
+               fGraphresidualsY->GetYaxis()->SetTitle("residuals");
+//             fGraphresidualsY->Draw("A*");
+               fGraphresidualsY->GetXaxis()->SetLabelSize(0.02);
+               fGraphresidualsY->GetXaxis()->SetTitleSize(0.02);
+               fGraphresidualsY->GetYaxis()->SetLabelSize(0.02);
+               fGraphresidualsY->GetYaxis()->SetTitleSize(0.02);
+               fGraphresidualsYLength->SetMarkerColor(2);
+               fGraphresidualsYLength->SetMarkerStyle(5);
+               fGraphresidualsY->SetMarkerColor(1);
+               fGraphresidualsY->SetMarkerStyle(3);
+
+//             fGraphresidualsY->Draw("A*");
+//             fGraphresidualsYLength->Draw("*");
+
+               mgY->Add(fGraphresidualsY);
+               mgY->Add(fGraphresidualsYLength);
+               mgY->SetTitle(title);
+//             mgY->GetXaxis()->SetTitle("padrow");    
+//             mgY->GetYaxis()->SetTitle("residuals");
+               mgY->Draw("AP");
+           }
+           // Global residuals histogram
+           else{
+               fHistallresidualsY->SetStats(kFALSE);
+               fHistallresidualsY->Draw();
+           }
        }
-       // Global residuals histogram
-       else{
-           fHistallresiduals->SetStats(kFALSE);
-           fHistallresiduals->Draw();
+       else {
+            // Z Residual histogram for 1 track
+           if (fSelectTrackSwitch){
+               Char_t title[256];
+               sprintf(title,"Z Residuals of Track %d in Slice %d",fSelectTrack, fSelectTrackSlice );
+
+               TMultiGraph *mgZ = new TMultiGraph();
+
+               fGraphresidualsZ->SetTitle(title);      
+               fGraphresidualsZ->GetXaxis()->SetTitle("padrow");       
+               fGraphresidualsZ->GetYaxis()->SetTitle("residuals");
+               fGraphresidualsZ->GetXaxis()->SetLabelSize(0.02);
+               fGraphresidualsZ->GetXaxis()->SetTitleSize(0.02);
+               fGraphresidualsZ->GetYaxis()->SetLabelSize(0.02);
+               fGraphresidualsZ->GetYaxis()->SetTitleSize(0.02);
+//             fGraphresidualsZLength->Draw("F*");
+//             fGraphresidualsZ->Draw("A*");
+       
+               mgZ->Add(fGraphresidualsZ);
+//             mgZ->Add(fGraphresidualsZLength);
+               mgZ->SetTitle(title);
+               mgZ->Draw("A*");
+           }
+           // Global residuals histogram
+           else{
+               fHistallresidualsZ->SetStats(kFALSE);
+               fHistallresidualsZ->Draw();
+           }
        }
     }
 }
@@ -629,12 +690,43 @@ void AliHLTTPCDisplay::Draw3D(){
     // DRAW 3D CLUSTER
     //--------------------------------------------------------------------------------------------
     if (fSwitch3DCluster){
+       Int_t maxCharge = 0;
+
        for (Int_t slice=0; slice <= 35; slice++){
 
-           UInt_t maxCharge = 0;
-           Float_t maxXYZ[3];
-           UChar_t padrow;
+           Int_t currenttrack = -1;
+
+           if (fSelectCluster == 1 && fSelectTrackSwitch && slice == fSelectTrackSlice ){
+
+               Int_t trackcounter = 0;
+               Int_t ntracks = fTracks->GetNTracks();
+       
+               for(Int_t j=0; j<ntracks; j++) {        
+
+                   AliHLTTPCTrack *gtrack = fTracks->GetCheckedTrack(j); 
+                   if(!gtrack) continue;
+
+                   Int_t nHits = gtrack->GetNHits();  // Number of associated hits to track
+                   Int_t tmpslice = gtrack->GetSector();
+
+                   // --- CHECK if track is should be drawn
+                   // select Single Track
+                   if(tmpslice != fSelectTrackSlice) continue;
+                       
+                   if (trackcounter != fSelectTrack){
+                       trackcounter++;  
+                       continue;
+                   }
+                   trackcounter++;
 
+                   if((fPtThreshold > 0) && (gtrack->GetPt()< fPtThreshold)) continue;
+                   if(nHits < fMinHits) continue;
+
+                   currenttrack = j;
+                   break;
+               }
+           }
+           
            if (!fSliceArray[slice]) continue;
            
            for(Int_t p=0;p<6;p++){
@@ -642,14 +734,20 @@ void AliHLTTPCDisplay::Draw3D(){
                AliHLTTPCSpacePointData *points = fClusters[slice][p];
                if(!points) continue;
                Int_t npoints = fNcl[slice][p];
-               TPolyMarker3D *pm = new TPolyMarker3D(npoints);
-       
+               TPolyMarker3D *pmUsed = new TPolyMarker3D(1,6);
+               TPolyMarker3D *pmUnused = new TPolyMarker3D(1,6);
+               Int_t nUsedCluster = 0;
+               Int_t nUnusedCluster = 0;
+
                Float_t xyz[3];
                for(Int_t i=0; i<npoints; i++){
                    // Used  cluster only
                    if (fSelectCluster == 1  && points[i].fUsed == kFALSE) continue; 
                    // Unused cluster only
                    if (fSelectCluster == 2  && points[i].fUsed == kTRUE) continue; 
+
+                   // if single track is selcted draw only cluster for this track
+                   if (fSelectCluster == 1 && fSelectTrackSwitch && points[i].fTrackN != currenttrack) continue;
                    
                    xyz[0] = points[i].fX;
                    xyz[1] = points[i].fY;
@@ -663,33 +761,32 @@ void AliHLTTPCDisplay::Draw3D(){
                        if ( pointEta<etaRange[0] || pointEta>etaRange[1] )
                            continue;
                    }
+
                    AliHLTTPCTransform::Local2Global(xyz,slice);
-                   
-                   pm->SetPoint(i,xyz[0],xyz[1],xyz[2]);
-                   
+                
+                   if (points[i].fUsed == kTRUE){
+                       pmUsed->SetPoint(nUsedCluster,xyz[0],xyz[1],xyz[2]);
+                       nUsedCluster++;
+                   }
+                   else {
+                       pmUnused->SetPoint(nUnusedCluster,xyz[0],xyz[1],xyz[2]);
+                       nUnusedCluster++;
+                   }
+
                    // Fill Charge Histogram
                    fHistcharge->Fill(points[i].fCharge);
-                   if (points[i].fCharge > maxCharge ){
-                       maxCharge = points[i].fCharge; 
-                       maxXYZ[0] = points[i].fX;
-                       maxXYZ[1] = points[i].fY;
-                       maxXYZ[2] = points[i].fZ;
-                       padrow = points[i].fPadRow;
-                   }
-                   
+                   if ((Int_t)points[i].fCharge > maxCharge ) maxCharge = (Int_t) points[i].fCharge; 
                }
-               pm->SetMarkerSize(4);
-               pm->SetMarkerColor(2); 
-               pm->Draw("");
-           }       
-       
-           LOG(AliHLTTPCLog::kError,"AliHLTTPCDisplay::CHARGE","")<< "MAX CHARGE =" <<  maxCharge <<  "  slice=" << slice 
-                                                                  << " z=" << maxXYZ[0]<< " y=" << maxXYZ[1]<< " z=" << maxXYZ[2]
-
-                                                                  << ENDLOG;
-
-
-       }
+               pmUsed->SetMarkerSize(1);
+               pmUsed->SetMarkerColor(3); 
+               pmUsed->Draw("");
+
+               pmUnused->SetMarkerSize(1);
+               pmUnused->SetMarkerColor(2); 
+               pmUnused->Draw("");
+           } // END - PATCH LOOP           
+       }  // END - SLICE LOOP
+       fHistcharge->SetAxisRange(0,maxCharge);
     }   // END - DRAW 3D CLUSTER 
 
     //--------------------------------------------------------------------------------------------
@@ -697,273 +794,269 @@ void AliHLTTPCDisplay::Draw3D(){
     //--------------------------------------------------------------------------------------------
     if (fSwitch3DTracks){
 
+       Int_t trackcounter = 0;
        Int_t ntracks = fTracks->GetNTracks();
+       Double_t drawStep = 0.2;
 
-       TPolyLine3D *line = new TPolyLine3D[ntracks];
-       TPolyLine3D *lineT = new TPolyLine3D[ntracks];
-       Float_t xCl[176];
-       Float_t yCl[176];
-       Float_t zCl[176];
-
-       Float_t xT[176];
-       Float_t yT[176];
-       Float_t zT[176];
-
-       Float_t res[176];
-
-       Int_t trackcounter = 0;
+       Double_t maxResidualY = 0.;
+       Double_t maxResidualZ = 0.;
 
+       TPolyLine3D *line = new TPolyLine3D[ntracks];
+#if TRACKHELIX
+       THelix *helix = new THelix[ntracks];
+#endif
        for(Int_t j=0; j<ntracks; j++) {        
 
            AliHLTTPCTrack *gtrack = fTracks->GetCheckedTrack(j); 
            if(!gtrack) continue;
 
-           Int_t nHits = gtrack->GetNHits();
-           UInt_t *hitnum = gtrack->GetHitNumbers();
-           Int_t hitcount=0;   
-
-           Bool_t nexttrack = kFALSE;
-
-           TPolyMarker3D *pm = new TPolyMarker3D(nHits,7);
-           TPolyMarker3D *pmT = new TPolyMarker3D(nHits,7);
+           Int_t nHits = gtrack->GetNHits();  // Number of associated hits to track
+           Int_t slice = gtrack->GetSector();
 
+            // --- CHECK if track is should be drawn
+           // select if slice should be displayed or not
+           if (!fSliceArray[slice]) continue;  
+           
+           // select Single Track
+           if (fSelectTrackSwitch){
+               if(slice != fSelectTrackSlice) continue;
+       
+               if (trackcounter != fSelectTrack){
+                   trackcounter++;  
+                   continue;
+               }
+               trackcounter++;
+           }
+    
+           if((fPtThreshold > 0) && (gtrack->GetPt()< fPtThreshold)) continue;
+           if(nHits < fMinHits) continue;
+           
            TPolyMarker3D *pmL = new TPolyMarker3D(1,2);
            TPolyMarker3D *pmF = new TPolyMarker3D(1,2);
 
-           Double_t lambda = 0.;  // dipAngle lambda
-           Double_t r = 0.;       // radius
-           Double_t kappa = 0.;   // curvature = 1/R , signed
-           Double_t xyz0[3];      // startingpoint of track
-           Double_t xyzT[3];      // point on track
-           Double_t xyzC[3];      // cluster
-           Double_t s = 0.;       // length of track
-           Double_t phi0 = 0.;    // azimuthal angle of startingpoint, with respect to helix axis
-           Double_t bfield = 0;   // BField
+           Double_t radius = gtrack->GetRadius();      // radius
+           Double_t kappa = gtrack->GetKappa();        // curvature = 1/R , signed
+           Double_t lambda = atan( gtrack->GetTgl() ); // dipAngle lambda
+           Double_t phi0 = gtrack->GetPsi() + (gtrack->GetCharge() * AliHLTTPCTransform::PiHalf() ); // azimuthal angle of startingpoint, with respect to helix axis
 
            Double_t xyzL[3];      // lastpoint of track
            Double_t xyzF[3];      // firstpoint of track
 
-           Double_t maxZ = 0;     // range of the histogram
-           Double_t minZ =99999.; // range of the histogram
+           xyzF[0] = gtrack->GetFirstPointX();
+           xyzF[1] = gtrack->GetFirstPointY();
+           xyzF[2] = gtrack->GetFirstPointZ();
+           pmF->SetPoint(0,xyzF[0],xyzF[1],xyzF[2]);
 
-           for(Int_t h=0; h<nHits; h++){
+           xyzL[0] = gtrack->GetLastPointX();
+           xyzL[1] = gtrack->GetLastPointY();
+           xyzL[2] = gtrack->GetLastPointZ();
+           pmL->SetPoint(0,xyzL[0],xyzL[1],xyzL[2]);
 
-               UInt_t id=hitnum[h];
-               Int_t slice = (id>>25) & 0x7f;
-               Int_t patch = (id>>22) & 0x7;
-               UInt_t pos = id&0x3fffff; 
+           Double_t s = 0.;       // length of the track
 
-               // select if slice should be displayed or not
-               if (!fSliceArray[slice]) {      
-                   nexttrack = kTRUE;
-                   break;         
-               }
-               
-               // select Single Track
-               if (fSelectTrackSwitch){
-                   if(slice != fSelectTrackSlice) {
-                       nexttrack = kTRUE;
-                       break;
-                   }
+           // Calculate the length of the track. If it is to flat in in s,z plane use sxy, otherwise use sz
+           if (fabs(lambda) > 0.05){
+                // length of track calculated out of z
+               s = fabs( (xyzL[2] - xyzF[2]) / sin(lambda) ); // length of track calculated out of z
+           }
+           else {
+               Double_t d =  (xyzL[0] - xyzF[0])*(xyzL[0] - xyzF[0]) + (xyzL[1] - xyzF[1])*(xyzL[1] - xyzF[1]);
+               // length of track calculated out of xy
+               s = fabs ( acos( 0.5 * (2 - (d / (radius*radius)))) / ( kappa * cos(lambda) ) );                
+           }
+           
+           Int_t nTrackPoints = 2 + (Int_t) floor(s / drawStep);
 
-                   if (trackcounter != fSelectTrack && h==0){
-                       trackcounter++;  
-                       nexttrack = kTRUE;
-                       break;
-                   }
+#if TRACKPOLYMARKER
+           TPolyMarker3D *pmT = new TPolyMarker3D(nTrackPoints,6);
+#endif
 
-                   trackcounter++;
-               }
+           Double_t *xT = new Double_t[nTrackPoints];
+           Double_t *yT = new Double_t[nTrackPoints];
+           Double_t *zT = new Double_t[nTrackPoints];
+
+           //Write Track Parameters for single track
+           if (fSelectTrackSwitch){
+               fTrackParam.id = trackcounter - 1;
+               fTrackParam.nHits = nHits;
+               fTrackParam.charge = gtrack->GetCharge();
+               fTrackParam.lambda = lambda;
+               fTrackParam.kappa = kappa;
+               fTrackParam.radius = radius;
+               fTrackParam.slice = slice;
+               fTrackParam.phi0 = phi0;
+               fTrackParam.pt = gtrack->GetPt();
+               fTrackParam.bfield = AliHLTTPCTransform::GetBFieldValue();
+               fTrackParam.xyzF[0] = gtrack->GetFirstPointX();
+               fTrackParam.xyzF[1] = gtrack->GetFirstPointY();
+               fTrackParam.xyzF[2] = gtrack->GetFirstPointZ();
+               fTrackParam.xyzL[0] = gtrack->GetLastPointX();
+               fTrackParam.xyzL[1] = gtrack->GetLastPointY();
+               fTrackParam.xyzL[2] = gtrack->GetLastPointZ();
+               fTrackParam.psi = gtrack->GetPsi();
+               fTrackParam.s = s;
+           }
 
-               // --> in the hit loop because of 'trackcounter++', otherwise wrong single track in slice will be selected
-               if((fPtThreshold > 0) && (gtrack->GetPt()< fPtThreshold)) {     
-                   nexttrack = kTRUE;
-                   break;
-               }
-               
-               // --> in the hit loop because of 'trackcounter++', otherwise wrong single track in slice will be selected
-               if(nHits < fMinHits) {  
-                   nexttrack = kTRUE;
-                   break;
-               }
+           Int_t trackPointCounter = 0;
 
-               AliHLTTPCSpacePointData *points = fClusters[slice][patch];
-               
-               if(!points) {
-                   LOG(AliHLTTPCLog::kError,"AliHLTTPCDisplay::Draw3D","Clusterarray") <<"No points at slice "<<slice<<" patch "<<patch
-                                                                                       <<" pos "<<pos<<ENDLOG;
-                   continue;
-               }
-               if(pos>=fNcl[slice][patch]) {
-                   LOG(AliHLTTPCLog::kError,"AliHLTTPCDisplay::Draw3D","Clusterarray") <<"Pos is too large: pos "<<pos <<" ncl "
-                                                                                       <<fNcl[slice][patch]<<ENDLOG;
-                   continue;
-               }
+           for (Double_t ds = 0.; ds < s; ds = ds + drawStep){
+               // FILL ARRAYS IN ORDER TO DRAW THE TRACKPOINTS, OUT OF THE PARAMETER
+               xT[trackPointCounter] = xyzF[0] + radius * ( cos( phi0 + (ds*kappa*cos(lambda)) ) - cos(phi0) );
+               yT[trackPointCounter] = xyzF[1] + radius * ( sin( phi0 + (ds*kappa*cos(lambda)) ) - sin(phi0) );
+               zT[trackPointCounter] = xyzF[2] + ds * sin(lambda);
+#if TRACKPOLYMARKER
+               pmT->SetPoint(trackPointCounter,xT[trackPointCounter],yT[trackPointCounter],zT[trackPointCounter]);
+#endif
+               trackPointCounter++;
+           }
 
-               // set the data for the residuals
-               if (h == 0){
-                   // -> Curvature / Radius / Phi0
-                   //kappa = gtrack->GetKappa(); 
-                   //r = gtrack->GetRadius();
-                   //phi0 = gtrack->GetPhi0();
-                   //bfield = AliHLTTPCTransform::GetBFieldValue();
-                   
-                   lambda = atan( gtrack->GetTgl() ); 
-                   
-                   bfield = 0.0029980 * 0.4; // KORRIGIERE B für =0.4 T Feld
-                   
-                   xyz0[0] = gtrack->GetFirstPointX();
-                   xyz0[1] = gtrack->GetFirstPointY();
-                   xyz0[2] = gtrack->GetFirstPointZ();
-                   
-                   xyzF[0] = gtrack->GetFirstPointX();
-                   xyzF[1] = gtrack->GetFirstPointY();
-                   xyzF[2] = gtrack->GetFirstPointZ();
+           xT[trackPointCounter] = xyzF[0] + radius * ( cos( phi0 + (s*kappa*cos(lambda)) ) - cos(phi0) );
+           yT[trackPointCounter] = xyzF[1] + radius * ( sin( phi0 + (s*kappa*cos(lambda)) ) - sin(phi0) );
+           zT[trackPointCounter] = xyzF[2] + s * sin(lambda);
+#if TRACKPOLYMARKER       
+           pmT->SetPoint(trackPointCounter,xT[trackPointCounter],yT[trackPointCounter],zT[trackPointCounter]);
+#endif
+           // --- RESIDUALS ---
+           gtrack->Rotate(slice,kTRUE);
+           Int_t nRes = 0;  // number of resiudals
+           
+           UInt_t *hitnum = gtrack->GetHitNumbers();
 
-                   xyzL[0] = gtrack->GetLastPointX();
-                   xyzL[1] = gtrack->GetLastPointY();
-                   xyzL[2] = gtrack->GetLastPointZ();
+           Double_t *resY= new Double_t[nHits];
+           Double_t *resZ= new Double_t[nHits];
 
-                   pmL->SetPoint(0,xyzL[0],xyzL[1],xyzL[2]);
-                   pmF->SetPoint(0,xyzF[0],xyzF[1],xyzF[2]);
+           Double_t *resYLength= new Double_t[2*nHits];
+           Double_t *resZLength= new Double_t[2*nHits];
 
-                   phi0 = gtrack->GetPsi() + (gtrack->GetCharge() * AliHLTTPCTransform::PiHalf() ); 
-                   
-                   if (bfield != 0.){
-                       r = gtrack->GetPt() / bfield; 
-                       kappa = - gtrack->GetCharge() * 1. / r;
-                   }
-                   else {
-                       r = 999999; // just infinity
-                       kappa = 0;
-                   }
+           Double_t *padrows = new Double_t[nHits];
+           Double_t *padrowsLength = new Double_t[2*nHits];
 
-                   //Write Track Parameters for single track
-                   if (fSelectTrackSwitch){
-                       fTrackParam.id = trackcounter - 1;
-                       fTrackParam.nHits = nHits;
-                       fTrackParam.charge = gtrack->GetCharge();
-                       fTrackParam.lambda = lambda;
-                       fTrackParam.kappa = kappa;
-                       fTrackParam.radius = r;
-                       fTrackParam.slice = slice;
-                       fTrackParam.phi0 = phi0;
-                       fTrackParam.pt = gtrack->GetPt();
-                       fTrackParam.bfield = bfield;
-                       fTrackParam.xyzF[0] = gtrack->GetFirstPointX();
-                       fTrackParam.xyzF[1] = gtrack->GetFirstPointY();
-                       fTrackParam.xyzF[2] = gtrack->GetFirstPointZ();
-                       fTrackParam.xyzL[0] = gtrack->GetLastPointX();
-                       fTrackParam.xyzL[1] = gtrack->GetLastPointY();
-                       fTrackParam.xyzL[2] = gtrack->GetLastPointZ();
-                       fTrackParam.psi = gtrack->GetPsi();
-                   }
-               }
+           for(Int_t h=0; h<nHits; h++){
+               UInt_t id=hitnum[h];
+               Int_t patch = (id>>22) & 0x7;
+               UInt_t pos = id&0x3fffff; 
 
+               AliHLTTPCSpacePointData *points = fClusters[slice][patch];
 
                Float_t xyzCtmp[3];    // cluster tmp
+               Float_t xyzTtmp[3];    // track tmp
 
                xyzCtmp[0] = points[pos].fX;
                xyzCtmp[1] = points[pos].fY;
                xyzCtmp[2] = points[pos].fZ;
 
-               AliHLTTPCTransform::Local2Global(xyzCtmp,slice);
-                   
-               xCl[h] = xyzCtmp[0];
-               yCl[h] = xyzCtmp[1];
-               zCl[h] = xyzCtmp[2];
+               Int_t padrow = AliHLTTPCTransform::GetPadRow(points[pos].fX);
+               xyzTtmp[0] = gtrack->GetFirstPointX();
+               if(gtrack->GetCrossingPoint(padrow,xyzTtmp)) {
 
-               // FILL POLYMARKER FOR THE ORIGINAL TRACKS
-               pm->SetPoint(h,xCl[h],yCl[h],zCl[h]);  
-
-               xyzC[0] = (Double_t) xyzCtmp[0];
-               xyzC[1] = (Double_t) xyzCtmp[1];
-               xyzC[2] = (Double_t) xyzCtmp[2];
-
-               xyzT[2] = xyzC[2];
+                   Float_t deltaY = ( xyzCtmp[1] - xyzTtmp[1] );
+                   Float_t deltaZ = ( xyzCtmp[2] - xyzTtmp[2] );
+//                 Float_t residual = sqrt( deltaY*deltaY + deltaZ*deltaZ );
+                   
+                   padrows[nRes] = (Double_t) padrow;
+                   resY[nRes] = (Double_t) deltaY;
+                   resZ[nRes] = (Double_t) deltaZ;
+
+                   resYLength[(2*nRes)] = 0.5 * AliHLTTPCTransform::GetPadLength(padrow);
+                   resYLength[(2*nRes)+1] = -0.5 * AliHLTTPCTransform::GetPadLength(padrow);
+                   resZLength[nRes] = AliHLTTPCTransform::GetZLength();
+                   padrowsLength[(2*nRes)] = (Double_t) padrow;
+                   padrowsLength[(2*nRes)+1] = (Double_t) padrow;
+
+                   // FILL RESIDUALS HISTOGRAM
+                   fHistallresidualsY->Fill(resY[nRes]);
+                   fHistallresidualsZ->Fill(resZ[nRes]);
+                   if (resY[nRes] > maxResidualY ) maxResidualY = resY[nRes];
+                   if (resZ[nRes] > maxResidualZ ) maxResidualZ = resZ[nRes];
+                   nRes++;
+               }
+           }
 
-               //calculate length
-               s = ( xyzT[2] - xyz0[2] ) / sin(lambda);
+           gtrack->Rotate(slice,kFALSE);
+           // --- RESIDUALS ---
 
-               // calculate the corresponding coordinates on the track
-               xyzT[0] = xyz0[0] +  r * ( cos( phi0 + (s*kappa*cos(lambda)) ) - cos( phi0 ) );
-               xyzT[1] = xyz0[1] +  r * ( sin( phi0 + (s*kappa*cos(lambda)) ) - sin( phi0 ) );
+           // Draw last point of Track
+           pmL->SetMarkerSize(3);
+           pmL->SetMarkerColor(4); 
+           pmL->Draw();
 
-               Double_t deltaX = ( xyzC[0] - xyzT[0] );
-               Double_t deltaY = ( xyzC[1] - xyzT[1] );
-               
-               Double_t residual = sqrt( deltaX*deltaX + deltaY*deltaY );
-               res[h] = (Float_t) residual;
+           // Draw first point of Track
+           pmF->SetMarkerSize(3);
+           pmF->SetMarkerColor(5); 
+           pmF->Draw();
 
-               if (maxZ < fabs(xyzT[2])) maxZ = fabs(xyzT[2]);
-               if (minZ > fabs(xyzT[2])) minZ = fabs(xyzT[2]);
+#if TRACKPOLYMARKER
+           // Draw Track -- as polymarker
+           pmT->SetMarkerSize(3);
+           pmT->SetMarkerColor(3); 
+           pmT->Draw();
+#endif
+           // Draw Track -- as line
+           TPolyLine3D *currentline = &(line[j]);
+           currentline = new TPolyLine3D(nTrackPoints,xT,yT,zT,"");
+           currentline->SetLineColor(4);   
+           currentline->SetLineWidth(2);
+           currentline->Draw("same");
+
+#if TRACKHELIX
+           // Draw Track -- as helix
+            // works ok, execpt for very small dipangles -> track almost horizontal
+           Double_t hrange[2];
+           Double_t v0[3];
+           Double_t omega;
+           hrange[0] = xyzF[2];
+           hrange[1] = xyzL[2];
+           v0[0] = gtrack->GetPx();
+           v0[1] = gtrack->GetPy();
+           v0[2] = gtrack->GetPz();
+           omega = AliHLTTPCTransform::GetBFieldValue() * gtrack->GetCharge();
+
+           THelix *currenthelix = &(helix[j]);
+           currenthelix = new THelix(xyzF,v0,omega,hrange,kHelixZ,0);
+           currenthelix->SetLineColor(6);   
+           currenthelix->SetLineWidth(1);
+           currenthelix->Draw("same");             
+#endif
 
-               // FILL RESIDUALS HISTOGRAM
-               fHistallresiduals->Fill(residual);
-               
-               // FILL ARRAYS IN ORDER TO DRAW THE TRACKPOINTS, OUT OF THE PARAMETER
-               xT[h] = xyzT[0];
-               yT[h] = xyzT[1];
-               zT[h] = xyzT[2];
-
-               // FILL POLYMARKER FOR THE NEW TRACKS
-               pmT->SetPoint(h,xT[h],yT[h],zT[h]);
-                 
-               hitcount++;
+           //Residuals
+           if ( fGraphresidualsY){
+               delete fGraphresidualsY;
+               fGraphresidualsY = NULL;
            }
 
-           if(nexttrack) continue;
-           if(hitcount==0) continue;
-       
+           if ( fGraphresidualsZ){
+               delete fGraphresidualsZ;
+               fGraphresidualsZ = NULL;
+           }
+           //Residuals
+           if ( fGraphresidualsYLength){
+               delete fGraphresidualsYLength;
+               fGraphresidualsYLength = NULL;
+           }
 
-           if ( fGraphresiduals){
-               delete fGraphresiduals;
-               fGraphresiduals = NULL;
+           if ( fGraphresidualsZLength){
+               delete fGraphresidualsZLength;
+               fGraphresidualsZLength = NULL;
            }
 
-           // FILL RESIDUALS GRAPH
-           fGraphresiduals = new TGraph(nHits,zT,res);
-           fGraphresiduals->GetXaxis()->SetLabelSize(0.02);
-           fGraphresiduals->GetXaxis()->SetTitleSize(0.02);
-           fGraphresiduals->GetYaxis()->SetLabelSize(0.02);
-           fGraphresiduals->GetYaxis()->SetTitleSize(0.02);
-           
-           TPolyLine3D *currentline = &(line[j]);
-           currentline = new TPolyLine3D(nHits,xCl,yCl,zCl,"");
-           currentline->SetLineColor(4);   
-           currentline->SetLineWidth(2);
-//         currentline->Draw("same");
 
-           TPolyLine3D *currentlineT = &(lineT[j]);
-           currentlineT = new TPolyLine3D(nHits,xT,yT,zT,"");
-           currentlineT->SetLineColor(7);   
-           currentlineT->SetLineWidth(1);
-//         currentlineT->Draw("same");
 
-           
-           //Last Point of Track
-           pmL->SetMarkerSize(3);
-           pmL->SetMarkerColor(4); 
-           pmL->Draw();
+           // FILL Y RESIDUALS GRAPH
+           fGraphresidualsY = new TGraph(nRes-1,padrows,resY);
+           fGraphresidualsYLength = new TGraph((2*nRes)-2,padrowsLength,resYLength);
+           // FILL Z RESIDUALS GRAPH
+           fGraphresidualsZ = new TGraph(nRes-1,padrows,resZ);
+           fGraphresidualsZLength = new TGraph(nRes-1,padrows,resZLength);
 
-           //First Point of Track
-           pmF->SetMarkerSize(3);
-           pmF->SetMarkerColor(5); 
-           pmF->Draw();
-           
-            //Original Track 
-           pm->SetMarkerSize(4);
-           pm->SetMarkerColor(6); 
-           pm->Draw();
-
-           //New Track
-           pmT->SetMarkerSize(4);
-            pmT->SetMarkerColor(3); 
-           pmT->Draw();
+           if (xT) delete xT;
+           if (yT) delete yT;
+           if (zT) delete zT;
 
        } // END for tracks
 
+       fHistallresidualsY->SetAxisRange(0,maxResidualY);
+       fHistallresidualsZ->SetAxisRange(0,maxResidualZ);
+
     }   // END - DRAW 3D Tracks
 
     //--------------------------------------------------------------------------------------------
@@ -1005,6 +1098,54 @@ void AliHLTTPCDisplay::Draw3D(){
     v->Draw();   
 }
 
+// ---------------------------------------------------
+// In order to be backward compatible
+// ---------------------------------------------------
+#if BACKWARD
+void AliHLTTPCDisplay::DisplayClusters(Bool_t x3don,Float_t* etaRange) {
+    if (!fc1){
+       fc1 = new TCanvas("c1","",900,900);
+       fc1->cd();
+    }
 
+    fSwitch3DTracks = kFALSE; 
+    fSwitch3DCluster = kTRUE; 
+    fSwitch3DPadRow = kFALSE; 
+    fSwitch3DGeometry = kFALSE;
 
+    Draw3D();
+}
+// ---------------------------------------------------
+void AliHLTTPCDisplay::DisplayTracks(Int_t minhits,Bool_t x3don,Float_t thr) {
+    if (!fc1){
+       fc1 = new TCanvas("c1","",900,900);
+       fc1->cd();
+    }
+
+    fMinHits = minhits; 
+    fPtThreshold = thr;
+    fSwitch3DTracks = kTRUE; 
+    fSwitch3DCluster = kFALSE; 
+    fSwitch3DPadRow = kFALSE; 
+    fSwitch3DGeometry = kFALSE;
+
+    Draw3D();
+}
+// ---------------------------------------------------
+void AliHLTTPCDisplay::DisplayAll(Int_t minhits,Bool_t clusterswitch,Bool_t trackswitch,Bool_t x3don, Float_t thr, Float_t* etaRange){
+    if (!fc1){
+       fc1 = new TCanvas("c1","",900,900);
+       fc1->cd();
+    }
+
+    fMinHits = minhits; 
+    fPtThreshold = thr;
+    fSwitch3DTracks = trackswitch; 
+    fSwitch3DCluster = clusterswitch; 
+    fSwitch3DPadRow = kFALSE; 
+    fSwitch3DGeometry = kFALSE;
+
+    Draw3D();
+}
+#endif
+// ---------------------------------------------------
index f9a8fa6f41332f824d678ceda5e68c11646a4777..c81c659d0ee884337e2947896d371ea5630a9114 100644 (file)
@@ -27,133 +27,175 @@ class AliHLTTPCTrackArray;
 class AliHLTTPCDisplay : public TObject {
 
  public:
-  AliHLTTPCDisplay(Char_t *gfile="$(ALIHLT_BASEDIR)/geo/alice.geom");
-  virtual ~AliHLTTPCDisplay();
-
-  // SETUP
-  void SetupHist();
-  void SetupCluster(Int_t slice, Int_t patch, UInt_t nofClusters, AliHLTTPCSpacePointData* data);
-  void SetupTracks(AliHLTTPCTrackArray *tracks);
-
-  // HISTOGRAM FILL/RESET FUNCTIONS
-
-  void FillPadRow(Int_t patch, ULong_t dataBlock, ULong_t dataLen);
-  void ResetHistPadRow();
-  void ResetHistResiduals();
-  void ResetHistCharge();
-
-  // DRAWER
-  void Draw3D();
-  void DrawHistPadRow(); 
-  void DrawGeomSector(Int_t sector);
-  void DrawHistPad1();
-  void DrawHistPad2();
-  void DrawHistPad3();
-  void DrawHistResiduals();
-  void DrawHistCharge();
-
-  // SETTER  
-  void SetSliceArray();
-  void SetSlices(){fMinSlice = 0; fMaxSlice = 35; fSlicePair = kFALSE; SetSliceArray();}
-  void SetSlices(Int_t s){fMinSlice = s; fMaxSlice = s; fSlicePair = kFALSE; SetSliceArray();}
-  void SetSlices(Int_t mins, Int_t maxs){fMinSlice = mins; fMaxSlice = maxs; fSlicePair = kFALSE; SetSliceArray();}
-  void SetSlicesPair(Int_t s){fMinSlice = s; fMaxSlice = s; fSlicePair = kTRUE; SetSliceArray();}
-  void SetSlicesPair(Int_t mins, Int_t maxs){fMinSlice = mins; fMaxSlice = maxs; fSlicePair = kTRUE; SetSliceArray();}
-  void SetPad(Int_t f){fPad = f;}
-  void SetPadRow(Int_t f){fPadRow = f;}
-  void SetSlicePadRow(Int_t f){fSlicePadRow = f;}
-  void SetMinHits(Int_t f){fMinHits = f;}
-  void SetPtThreshold(Float_t f){fPtThreshold = f;}
-  void SetSwitches(Bool_t f1, Bool_t f2, Bool_t f3, Bool_t f4) {fSwitch3DTracks = f1; fSwitch3DCluster = f2; fSwitch3DPadRow = f3; fSwitch3DGeometry = f4;} 
-  void SetHistPadRowAxis();
-  void SetSelectTrack(Int_t f) {fSelectTrack = f;}
-  void SetSelectTrackSlice(Int_t f) {fSelectTrackSlice = f;}
-  void SetSelectTrackSwitch(Bool_t f) {fSelectTrackSwitch = f;}
-  void SetSelectCluster(Int_t f) {fSelectCluster = f;}
-  void SetInvert() {Int_t tmp = fBackColor; fBackColor = fLineColor; fLineColor = tmp; }
-  void SetKeepView(Bool_t f){fKeepView = f;} 
-
-  // GETTER
-  Int_t GetPadRow(){return fPadRow;}
-  Int_t GetSlicePadRow(){return fSlicePadRow;}
-  Int_t GetNPads(){return fNPads;}
-  Int_t GetBackColor() {return fBackColor;}
-
-  struct AliHLTTPCTrackParameter{
-      Int_t nHits;
-      Int_t charge;
-      Double_t kappa;
-      Double_t radius;
-      Double_t xyzF[3];
-      Double_t xyzL[3];
-      Int_t slice;
-      Double_t phi0;
-      Double_t psi;
-      Double_t lambda;
-      Double_t pt;
-      Int_t id;
-      Double_t bfield;
-  };
-
-  AliHLTTPCTrackParameter fTrackParam;
-
-  private:
-
-  Bool_t LoadGeometrie(Char_t *gfile);
-
-  AliHLTTPCDisplay(const AliHLTTPCDisplay &/*d*/):TObject(){;}
-  AliHLTTPCDisplay& operator=(const AliHLTTPCDisplay &/*d*/){return *this;}
-
-  AliHLTTPCSpacePointData *fClusters[36][6]; 
-  AliHLTTPCTrackArray *fTracks; 
-
-  UInt_t fNcl[36][6];//number of cluster
-
-  TH1F *fHistrawcl;  // histogram for cluster in padrow
-  TH2F *fHistraw;    // histogram for signals in padrow
-  TH1F *fHistpad1;   // histogram for pad in padrow
-  TH1F *fHistpad2;   // histogram for pad in padrow
-  TH1F *fHistpad3;   // histogram for pad in padrow
-  TH1F *fHistallresiduals;//histogram for all residuals
-  TH1F *fHistcharge; // histogram for clustercharge
-
-  TGraph *fGraphresiduals; // graph of the residuals for one track
-
-  TGeometry *fGeom;  // geometry
-  Int_t fBackColor;  // Background color
-  Int_t fLineColor;  // Line color
-  Bool_t fKeepView;  // Keep View when redisplaying
-
-  Int_t fPad;        // pad
-  Int_t fPadRow;     // padrow
-  Int_t fSlicePadRow;// slice where padrow is in
-  Int_t fNPads;      // number of pads in padrow
-  Int_t fNTimes;     // number of timebins
-  Int_t fMinHits;    // minimum cluster per track
-  Float_t fPtThreshold;// pt threshold for tracks
-
-  Bool_t fSelectTrackSwitch;// switch ti single track mode
-  Int_t fSelectTrack;// select single track
-  Int_t fSelectTrackSlice; // select slice for single track
-
-  Int_t fSelectCluster; // select all=0, used=1, unused=2 cluster
-
-  Int_t fMinSlice;   //min slice
-  Int_t fMaxSlice;   //max slice
-  Bool_t fSlicePair; //draw pair of slices;
-  Bool_t fSliceArray[36];//Array if slice should be drawn or not
-
-  Bool_t fDrawGeo;
-  Int_t fcolorbin[20]; // number of entries per colorbin
-  Int_t fbinct[20];    // index of colorbin
-  Float_t *fpmarr[20]; // contains point data
-
-  Bool_t fSwitch3DCluster;
-  Bool_t fSwitch3DTracks;
-  Bool_t fSwitch3DPadRow;
-  Bool_t fSwitch3DGeometry;
-
-  ClassDef(AliHLTTPCDisplay,1) //Display class
+    AliHLTTPCDisplay(Char_t *gfile="$(ALIHLT_BASEDIR)/geo/alice.geom") {InitDisplay(gfile);}
+    virtual ~AliHLTTPCDisplay();
+
+    void InitDisplay(Char_t *gfile);
+  
+    // SETUP
+    void SetupHist();
+    void SetupCluster(Int_t slice, Int_t patch, UInt_t nofClusters, AliHLTTPCSpacePointData* data);
+    void SetupTracks(AliHLTTPCTrackArray *tracks);
+    
+    // HISTOGRAM FILL/RESET FUNCTIONS
+    void FillPadRow(Int_t patch, ULong_t dataBlock, ULong_t dataLen);
+    void ResetHistPadRow();
+    void ResetHistResiduals();
+    void ResetHistCharge();
+
+    // DRAWER
+    void Draw3D();
+    void DrawHistPadRow(); 
+    void DrawGeomSector(Int_t sector);
+    void DrawHistPad1();
+    void DrawHistPad2();
+    void DrawHistPad3();
+    void DrawHistResiduals(Bool_t ySwitch);
+    void DrawHistCharge();
+    
+    // SETTER  
+    void SetSlices(){fMinSlice = 0; fMaxSlice = 35; fSlicePair = kFALSE; SetSliceArray();}
+    void SetSlices(Int_t s){fMinSlice = s; fMaxSlice = s; fSlicePair = kFALSE; SetSliceArray();}
+    void SetSlices(Int_t mins, Int_t maxs){fMinSlice = mins; fMaxSlice = maxs; fSlicePair = kFALSE; SetSliceArray();}
+    void SetSlicesPair(Int_t s){fMinSlice = s; fMaxSlice = s; fSlicePair = kTRUE; SetSliceArray();}
+    void SetSlicesPair(Int_t mins, Int_t maxs){fMinSlice = mins; fMaxSlice = maxs; fSlicePair = kTRUE; SetSliceArray();}
+
+    void SetPad(Int_t f){fPad = f;}
+    void SetPadRow(Int_t f){fPadRow = f;}
+    void SetSlicePadRow(Int_t f){fSlicePadRow = f;}
+
+    void SetMinHits(Int_t f){fMinHits = f;}
+    void SetPtThreshold(Float_t f){fPtThreshold = f;}
+
+    void SetSwitches(Bool_t f1, Bool_t f2, Bool_t f3, Bool_t f4) {fSwitch3DTracks = f1; fSwitch3DCluster = f2; fSwitch3DPadRow = f3; fSwitch3DGeometry = f4;} 
+    void Set3DSwitchTracks(Bool_t f1) {fSwitch3DTracks = f1;}
+    void Set3DSwitchCluster(Bool_t f1) {fSwitch3DCluster = f1;}
+    void Set3DSwitchPadRow(Bool_t f1) {fSwitch3DPadRow = f1;}
+    void Set3DSwitchGeometry(Bool_t f1) {fSwitch3DGeometry = f1;}
+
+    void SetSelectTrack(Int_t f) {fSelectTrack = f;}
+    void SetSelectTrackSlice(Int_t f) {fSelectTrackSlice = f;}
+    void SetSelectTrackSwitch(Bool_t f) {fSelectTrackSwitch = f;}
+    void SetSelectCluster(Int_t f) {fSelectCluster = f;}
+
+    void SetHistPadRowAxis();
+
+    void SetInvert() {Int_t tmp = fBackColor; fBackColor = fLineColor; fLineColor = tmp; }
+    void SetKeepView(Bool_t f){fKeepView = f;} 
+
+    // GETTER
+    Int_t GetPadRow(){return fPadRow;}
+    Int_t GetSlicePadRow(){return fSlicePadRow;}
+    Int_t GetNPads(){return fNPads;}
+    Int_t GetBackColor(){return fBackColor;}
+    Bool_t GetKeepView(){return fKeepView;}
+    
+    Bool_t Get3DSwitchTracks() {return fSwitch3DTracks;}
+    Bool_t Get3DSwitchCluster() {return fSwitch3DCluster;}
+    Bool_t Get3DSwitchPadRow() {return fSwitch3DPadRow;}
+
+    Bool_t GetSelectTrackSwitch() {return fSelectTrackSwitch;}
+
+    struct AliHLTTPCTrackParameter{
+       Int_t nHits;
+       Int_t charge;
+       Double_t kappa;
+       Double_t radius;
+       Double_t xyzF[3];
+       Double_t xyzL[3];
+       Int_t slice;
+       Double_t phi0;
+       Double_t psi;
+       Double_t lambda;
+       Double_t pt;
+       Int_t id;
+       Double_t bfield;
+       Double_t s;
+    };
+    
+    AliHLTTPCTrackParameter fTrackParam;
+
+// ---------------------------------------------------
+// In order to be backward compatible
+// ---------------------------------------------------
+/*
+    AliHLTTPCDisplay(Int_t *slice, Char_t *gfile ) { InitDisplay(gfile);}
+
+    // SETUP
+    void SetupClusterDataForPatch(Int_t slice, Int_t patch, UInt_t nofClusters, AliHLTTPCSpacePointData* data) {SetupCluster(slice, patch, nofClusters, data);}
+    void SetTracks(AliHLTTPCTrackArray *tracks) { SetupTracks(tracks);}
+    void DisplayClusters(Bool_t x3don=kTRUE,Float_t* etaRange=NULL);
+    void DisplayTracks(Int_t minhits=10,Bool_t x3don=kTRUE,Float_t thr=0.);
+    void DisplayAll(Int_t minhits=10,Bool_t clusterswitch=kTRUE,Bool_t trackswitch=kTRUE,Bool_t x3don=kTRUE, Float_t thr=0., Float_t* etaRange=NULL);
+*/
+// ---------------------------------------------------
+ private:
+// ---------------------------------------------------
+// In order to be backward compatible
+// ---------------------------------------------------
+/*    TCanvas *fc1; */
+// ---------------------------------------------------
+    Bool_t LoadGeometrie(Char_t *gfile);
+    void SetSliceArray();
+
+    AliHLTTPCDisplay(const AliHLTTPCDisplay &/*d*/):TObject(){;}
+    AliHLTTPCDisplay& operator=(const AliHLTTPCDisplay &/*d*/){return *this;}
+    
+    AliHLTTPCSpacePointData *fClusters[36][6]; 
+    AliHLTTPCTrackArray *fTracks; 
+    
+    UInt_t fNcl[36][6];//number of cluster
+
+    TH1F *fHistrawcl;  // histogram for cluster in padrow
+    TH2F *fHistraw;    // histogram for signals in padrow
+    TH1F *fHistpad1;   // histogram for pad in padrow
+    TH1F *fHistpad2;   // histogram for pad in padrow
+    TH1F *fHistpad3;   // histogram for pad in padrow
+    TH1F *fHistallresidualsY;//histogram for all Y residuals
+    TH1F *fHistallresidualsZ;//histogram for all Z residuals
+    TH1F *fHistcharge; // histogram for clustercharge
+    
+    TGraph *fGraphresidualsY; // graph of the Y residuals for one track
+    TGraph *fGraphresidualsZ; // graph of the Z residuals for one track
+    TGraph *fGraphresidualsYLength; // graph of the Y residuals for one track
+    TGraph *fGraphresidualsZLength; // graph of the Z residuals for one track
+
+
+    TGeometry *fGeom;  // geometry
+    Int_t fBackColor;  // Background color
+    Int_t fLineColor;  // Line color
+    Bool_t fKeepView;  // Keep View when redisplaying
+    
+    Int_t fPad;        // pad
+    Int_t fPadRow;     // padrow
+    Int_t fSlicePadRow;// slice where padrow is in
+    Int_t fNPads;      // number of pads in padrow
+    Int_t fNTimes;     // number of timebins
+    Int_t fMinHits;    // minimum cluster per track
+    Float_t fPtThreshold;// pt threshold for tracks
+    
+    Bool_t fSelectTrackSwitch;// switch ti single track mode
+    Int_t fSelectTrack;// select single track
+    Int_t fSelectTrackSlice; // select slice for single track
+    
+    Int_t fSelectCluster; // select all=0, used=1, unused=2 cluster
+    
+    Int_t fMinSlice;   //min slice
+    Int_t fMaxSlice;   //max slice
+    Bool_t fSlicePair; //draw pair of slices;
+    Bool_t fSliceArray[36];//Array if slice should be drawn or not
+    
+    Bool_t fDrawGeo;
+    Int_t fcolorbin[20]; // number of entries per colorbin
+    Int_t fbinct[20];    // index of colorbin
+    Float_t *fpmarr[20]; // contains point data
+    
+    Bool_t fSwitch3DCluster;
+    Bool_t fSwitch3DTracks;
+    Bool_t fSwitch3DPadRow;
+    Bool_t fSwitch3DGeometry;
+
+    ClassDef(AliHLTTPCDisplay,1) //Display class
 };
 
 #endif
index 2c85b15fbe2309784c55b9e2120519f7f471c939..a14540ab457697d20150fd9255cd4b522b7e7078 100644 (file)
@@ -56,6 +56,10 @@ AliHLTTPCSliceTrackerComponent::AliHLTTPCSliceTrackerComponent()
     fMultiplicity = 4000;
     fBField = 0.4;
     fDoPP = false;
+// BEGINN ############################################## MODIFIY JMT
+    fnonvertextracking = kFALSE;   // enable NONVERTEX Tracking
+    fmainvertextracking = kTRUE;   // enable MAINVERTEX Tracking
+// END ################################################# MODIFIY JMT
     }
 
 AliHLTTPCSliceTrackerComponent::~AliHLTTPCSliceTrackerComponent()
@@ -109,6 +113,36 @@ void AliHLTTPCSliceTrackerComponent::SetTrackerParam(Int_t phi_segments, Int_t e
     fTracker->SetNSegments(phi_segments,eta_segments);
     fTracker->SetMaxDca(min_pt_fit);
     //   fTracker->MainVertexSettings(trackletlength,tracklength,rowscopetracklet,rowscopetrack);
+
+// BEGINN ############################################## MODIFIY JMT
+#if 1
+    Logging( kHLTLogError, "HLT::TPCSliceTracker::SetTrackerParam", "Tracking", "==============================" );
+
+    if ( fmainvertextracking == kTRUE && fnonvertextracking == kFALSE){
+       fTracker->SetTrackCuts(hitChi2Cut,goodHitChi2,trackChi2Cut,maxdist,kTRUE);
+       fTracker->SetTrackletCuts(maxangle,goodDist,kTRUE);
+
+       fTracker->MainVertexSettings( trackletlength, tracklength, rowscopetracklet, rowscopetrack, maxphi, maxeta);    
+       Logging( kHLTLogError, "HLT::TPCSliceTracker::SetTrackerParam", "Tracking", "MAINVERTEXTRACKING" );
+    }
+    else if ( fmainvertextracking == kTRUE && fnonvertextracking == kTRUE){
+       fTracker->SetTrackCuts(hitChi2Cut,goodHitChi2,trackChi2Cut,maxdist,kTRUE);
+       fTracker->SetTrackCuts(hitChi2Cut,goodHitChi2,trackChi2Cut,maxdist,kFALSE);
+       fTracker->SetTrackletCuts(maxangle,goodDist,kTRUE);
+       fTracker->SetTrackletCuts(maxangle,goodDist,kFALSE);
+
+       fTracker->MainVertexSettings( trackletlength, tracklength, rowscopetracklet, rowscopetrack, maxphi, maxeta);
+       fTracker->NonVertexSettings( trackletlength, tracklength, rowscopetracklet, rowscopetrack);     
+       Logging( kHLTLogError, "HLT::TPCSliceTracker::SetTrackerParam", "Tracking", "MAINVERTEXTRACKING - NONVERTEXTRACKING" );
+    }
+    else if ( fmainvertextracking == kFALSE && fnonvertextracking == kTRUE){
+       fTracker->SetTrackCuts(hitChi2Cut,goodHitChi2,trackChi2Cut,maxdist,kFALSE);
+       fTracker->SetTrackletCuts(maxangle,goodDist,kFALSE);
+
+       fTracker->NonVertexSettings( trackletlength, tracklength, rowscopetracklet, rowscopetrack);
+       Logging( kHLTLogError, "HLT::TPCSliceTracker::SetTrackerParam", "Tracking", "NONVERTEXTRACKING" );
+    }
+#else
     fTracker->SetTrackCuts(hitChi2Cut,goodHitChi2,trackChi2Cut,maxdist,vertexConstraints);
     fTracker->SetTrackletCuts(maxangle,goodDist,vertexConstraints);
     
@@ -116,8 +150,10 @@ void AliHLTTPCSliceTrackerComponent::SetTrackerParam(Int_t phi_segments, Int_t e
        fTracker->MainVertexSettings( trackletlength, tracklength, rowscopetracklet, rowscopetrack, maxphi, maxeta);
     else
        fTracker->NonVertexSettings( trackletlength, tracklength, rowscopetracklet, rowscopetrack);
-    //fTracker->SetParamDone(true);
+#endif
+// END ################################################# MODIFIY JMT
 
+    //fTracker->SetParamDone(true);
     //AliHLTTPC::SetVertexFit( kFALSE );
     
     fTracker->InitVolumes();
@@ -125,6 +161,10 @@ void AliHLTTPCSliceTrackerComponent::SetTrackerParam(Int_t phi_segments, Int_t e
 
 void AliHLTTPCSliceTrackerComponent::SetTrackerParam( bool doPP, int multiplicity, double bField )
     {
+    AliHLTTPCTransform::SetBField( bField );
+    Logging( kHLTLogDebug, "HLT::TPCSliceTracker::DoInit", "BField", "Setting b field to %f\n", bField );
+    Logging( kHLTLogDebug, "HLT::TPCSliceTracker::DoInit", "BField", "B field is  %f\n",AliHLTTPCTransform::GetBFieldValue()); 
+
     if ( doPP )
        {
        //tracker->SetClusterFinderParam(xyerror,zerror,kTRUE); // ??
@@ -249,9 +289,10 @@ void AliHLTTPCSliceTrackerComponent::SetTrackerParam( bool doPP, int multiplicit
                    }
                break;
            }
-       Logging( kHLTLogDebug, "HLT::TPCSliceTracker::DoInit", "BField", "Setting b field to %f\n", bfs[closestBf] );
-       AliHLTTPCTransform::SetBField( bfs[closestBf] );
-
+//     Logging( kHLTLogDebug, "HLT::TPCSliceTracker::DoInit", "BField", "Setting b field to %f\n", bfs[closestBf] );
+//     AliHLTTPCTransform::SetBField( bfs[closestBf] );
+//     AliHLTTPCTransform::SetBField( bField );
+//     Logging( kHLTLogDebug, "HLT::TPCSliceTracker::DoInit", "BField", "Setting b field to %f\n", bField );
        }
     }
 
@@ -315,6 +356,35 @@ int AliHLTTPCSliceTrackerComponent::DoInit( int argc, const char** argv )
            i += 2;
            continue;
            }
+
+// BEGINN ############################################## MODIFIY JMT
+       if ( !strcmp( argv[i], "nonvertextracking" ) ){
+           fnonvertextracking = kTRUE;
+           i++;
+           continue;       
+       }
+       
+       if ( !strcmp( argv[i], "mainvertextrackingoff" ) ){     
+           fmainvertextracking = kFALSE;
+           i++;
+           continue;       
+       }
+
+       if ( !strcmp( argv[i], "etarange" ) ){  
+           if ( argc <= i+1 ){
+               Logging( kHLTLogError, "HLT::TPCSliceTracker::DoInit", "Missing Eta range", "Missing Eta-range specifiers." );
+               return ENOTSUP;
+           }
+           fEta[1] = strtod( argv[i+1], &cpErr );
+           if ( *cpErr ){
+               Logging( kHLTLogError, "HLT::TPCSliceTracker::DoInit", "Missing Eta range", "Cannot convert Eta-range specifier '%s'.", argv[i+1] );
+               return EINVAL;
+           }
+   
+           i += 2;
+           continue;
+       }
+// END ################################################# MODIFIY JMT
        Logging(kHLTLogError, "HLT::TPCSliceTracker::DoInit", "Unknown Option", "Unknown option '%s'", argv[i] );
        return EINVAL;
        }
@@ -497,13 +567,37 @@ int AliHLTTPCSliceTrackerComponent::DoEvent( const AliHLTComponent_EventData& ev
        }
 
     outPtr = (AliHLTTPCTrackletData*)(outBPtr);
+// BEGINN ############################################## MODIFIY JMT
+#if 1
+    fTracker->SetPointers();
+    if ( fmainvertextracking == kTRUE && fnonvertextracking == kFALSE){        
+       Logging( kHLTLogDebug, "HLT::TPCSliceTracker::DoEvent", "Tracking", " ---MAINVERTEXTRACKING---");
+       fTracker->MainVertexTracking_a();
+       fTracker->MainVertexTracking_b();
+       fTracker->FillTracks();
+    }
+    else if ( fmainvertextracking == kTRUE && fnonvertextracking == kTRUE){    
+       Logging( kHLTLogDebug, "HLT::TPCSliceTracker::DoEvent", "Tracking", " ---MAINVERTEXTRACKING---");
+       fTracker->MainVertexTracking_a();
+       fTracker->MainVertexTracking_b();
+       fTracker->FillTracks(); 
+       Logging( kHLTLogDebug, "HLT::TPCSliceTracker::DoEvent", "Tracking", " ---NONVERTEXTRACKING---");
+       fTracker->NonVertexTracking();
+    }
+    else if ( fmainvertextracking == kFALSE && fnonvertextracking == kTRUE){
+       Logging( kHLTLogDebug, "HLT::TPCSliceTracker::DoEvent", "Tracking", " ---NONVERTEXTRACKING---");
+       fTracker->NonVertexTracking();  
+       fTracker->FillTracks(); 
+    }
+#else
     fTracker->MainVertexTracking_a();
     fTracker->MainVertexTracking_b();
     fTracker->FillTracks();
     
     if ( fDoNonVertex )
        fTracker->NonVertexTracking();//Do a second pass for nonvertex tracks
-    
+#endif
+// END ################################################# MODIFIY JMT
     // XXX Do track merging??
     
     UInt_t ntracks0=0;
index f20745a141b3ce121fd328e16e4e43475951d45b..53d1e8af98e1aabb55dd86fd05ff5fa2a185cd19 100644 (file)
@@ -69,6 +69,11 @@ class AliHLTTPCSliceTrackerComponent : public AliHLTProcessor
        int fMultiplicity;
        double fBField;
 
+// BEGINN ############################################## MODIFIY JMT
+       Bool_t fnonvertextracking;   // enable NONVERTEX Tracking
+       Bool_t fmainvertextracking;  // enable MAINVERTEX Tracking
+// END ################################################# MODIFIY JMT
+
        ClassDef(AliHLTTPCSliceTrackerComponent, 0)
 
     };
index 0af3edc89099cbbc17d51fbf3a5188d384b03f62..c0f66bbbd639b4e83818d55ca198385bb2ce785d 100644 (file)
@@ -17,6 +17,7 @@ struct AliHLTTPCSpacePointData{
   Float_t fSigmaZ2; //error (former width) of the clusters
   UInt_t fCharge;
   Bool_t fUsed;     // only used in AliHLTTPCDisplay 
+  Int_t fTrackN;    // only used in AliHLTTPCDisplay 
 };
 typedef struct AliHLTTPCSpacePointData AliHLTTPCSpacePointData;
 
index 788066fd9e08126e7bc6d12dfa38be503460e7bd..b8c9e5b641c55abb48bd676e75847afe0ffd8a1e 100644 (file)
@@ -235,7 +235,6 @@ Double_t AliHLTTPCTrack::GetCrossingAngle(Int_t padrow,Int_t slice)
 Bool_t AliHLTTPCTrack::GetCrossingPoint(Int_t padrow,Float_t *xyz)
 {
   //Assumes the track is given in local coordinates
-  
   if(!IsLocal())
     {
       cerr<<"GetCrossingPoint: Track is given on global coordinates"<<endl;
@@ -244,6 +243,13 @@ Bool_t AliHLTTPCTrack::GetCrossingPoint(Int_t padrow,Float_t *xyz)
   
   Double_t xHit = AliHLTTPCTransform::Row2X(padrow);
 
+// BEGINN ############################################## MODIFIY JMT
+  if (xHit < xyz[0]){
+      LOG(AliHLTTPCLog::kError,"AliHLTTPCTRACK::GetCrossingPoint","")<< "Track doesn't cross padrow " << padrow <<"(x=" << xHit << "). Smallest x=" << xyz[0] << ENDLOG;
+      return false;
+  }
+// END ################################################# MODIFIY JMT
+
   xyz[0] = xHit;
   Double_t aa = (xHit - GetCenterX())*(xHit - GetCenterX());
   Double_t r2 = GetRadius()*GetRadius();
@@ -261,11 +267,15 @@ Bool_t AliHLTTPCTrack::GetCrossingPoint(Int_t padrow,Float_t *xyz)
   if(angle1 < 0) angle1 += 2.*AliHLTTPCTransform::Pi();
   Double_t angle2 = atan2((GetFirstPointY() - GetCenterY()),(GetFirstPointX() - GetCenterX()));
   if(angle2 < 0) angle2 += AliHLTTPCTransform::TwoPi();
+
   Double_t diffangle = angle1 - angle2;
   diffangle = fmod(diffangle,AliHLTTPCTransform::TwoPi());
   if((GetCharge()*diffangle) > 0) diffangle = diffangle - GetCharge()*AliHLTTPCTransform::TwoPi();
+
   Double_t stot = fabs(diffangle)*GetRadius();
+
   Double_t zHit = GetFirstPointZ() + stot*GetTgl();
+
   xyz[2] = zHit;
  
   return true;
@@ -438,7 +448,9 @@ void AliHLTTPCTrack::UpdateToFirstPoint()
   //However, if you later on want to do more precise local calculations, such
   //as impact parameter, residuals etc, you need to give the track parameters
   //according to the actual fit.
-
+// BEGINN ############################################## MODIFIY JMT
+    LOG(AliHLTTPCLog::kError,"AliHLTTPCTrack::UpdateToFirstPoint","ENTER") <<ENDLOG;
+// END ################################################# MODIFIY JMT
   Double_t xc = GetCenterX() - GetFirstPointX();
   Double_t yc = GetCenterY() - GetFirstPointY();
   
@@ -472,7 +484,9 @@ void AliHLTTPCTrack::UpdateToFirstPoint()
   SetPhi0(atan2(point[1],point[0]));
   SetFirstPoint(point[0],point[1],GetZ0());
   SetPsi(pointpsi);
-  
+  // BEGINN ############################################## MODIFIY JMT
+    LOG(AliHLTTPCLog::kError,"AliHLTTPCTrack::UpdateToFirstPoint","LEAVE") <<ENDLOG;
+// END ################################################# MODIFIY JMT
 }
 
 void AliHLTTPCTrack::GetClosestPoint(AliHLTTPCVertex *vertex,Double_t &closestx,Double_t &closesty,Double_t &closestz)
@@ -521,6 +535,21 @@ void AliHLTTPCTrack::GetClosestPoint(AliHLTTPCVertex *vertex,Double_t &closestx,
 
 void AliHLTTPCTrack::Print() const
 { //print out parameters of track
+// BEGINN ############################################## MODIFIY JMT
+
+#if 1
+ LOG(AliHLTTPCLog::kInformational,"AliHLTTPCTrack::Print","Print values")
+    <<"NH="<<fNHits<<" "<<fMCid<<" K="<<fKappa<<" R="<<fRadius<<" Cx="<<fCenterX<<" Cy="<<fCenterY<<" MVT="
+    <<fFromMainVertex<<" Row0="<<fRowRange[0]<<" Row1="<<fRowRange[1]<<" Sector="<<fSector<<" Q="<<fQ<<" TgLam="
+    <<fTanl<<" psi="<<fPsi<<" pt="<<fPt<<" L="<<fLength<<" "<<fPterr<<" "<<fPsierr<<" "<<fZ0err<<" "
+    <<fTanlerr<<" phi0="<<fPhi0<<" R0="<<fR0<<" Z0"<<fZ0<<" X0"<<fFirstPoint[0]<<" Y0"<<fFirstPoint[1]<<" Z0"
+    <<fFirstPoint[2]<<" XL"<<fLastPoint[0]<<" YL"<<fLastPoint[1]<<" ZL"<<fLastPoint[2]<<" "
+    <<fPoint[0]<<" "<<fPoint[1]<<" "<<fPoint[2]<<" "<<fPointPsi<<" "<<fIsPoint<<" local="
+    <<fIsLocal<<" "<<fPID<<ENDLOG; 
+
+
+
+#else
   LOG(AliHLTTPCLog::kInformational,"AliHLTTPCTrack::Print","Print values")
     <<fNHits<<" "<<fMCid<<" "<<fKappa<<" "<<fRadius<<" "<<fCenterX<<" "<<fCenterY<<" "
     <<fFromMainVertex<<" "<<fRowRange[0]<<" "<<fRowRange[1]<<" "<<fSector<<" "<<fQ<<" "
@@ -529,4 +558,7 @@ void AliHLTTPCTrack::Print() const
     <<fFirstPoint[2]<<" "<<fLastPoint[0]<<" "<<fLastPoint[1]<<" "<<fLastPoint[2]<<" "
     <<fPoint[0]<<" "<<fPoint[1]<<" "<<fPoint[2]<<" "<<fPointPsi<<" "<<fIsPoint<<" "
     <<fIsLocal<<" "<<fPID<<ENDLOG; 
+#endif
+
+// END ################################################# MODIFIY JMT
 }
index 74f1c4921c9def1698df5c37f0fa6479f8200817..89db67175710b3fc4b30948e0d31793ff190773d 100644 (file)
@@ -275,6 +275,10 @@ void AliHLTTPCTrackArray::FillTracks(Int_t ntracks, AliHLTTPCTrackSegmentData* t
     AliHLTTPCTransform::Local2Global(last,slice);
     track->SetLastPoint(last[0],last[1],last[2]);
     track->SetHits( trs->fNPoints, trs->fPointIDs );
+// BEGINN ############################################## MODIFIY JMT
+    track->SetSector(slice);
+    track->CalculateHelix();
+// END ################################################# MODIFIY JMT
 #ifdef INCLUDE_TPC_HOUGH
 #ifdef ROWHOUGHPARAMS
     if(GetTrackType()=='h') {
@@ -362,6 +366,13 @@ UInt_t AliHLTTPCTrackArray::WriteTracks(AliHLTTPCTrackSegmentData* tr)
     tmpP += sizeof(AliHLTTPCTrackSegmentData)+tP->fNPoints*sizeof(UInt_t);
     size += sizeof(AliHLTTPCTrackSegmentData)+tP->fNPoints*sizeof(UInt_t);
     tP = (AliHLTTPCTrackSegmentData*)tmpP;
+
+// BEGINN ############################################## MODIFIY JMT
+    LOG(AliHLTTPCLog::kError,"AliHLTTPCTrackArray::WriteTracks","TRACKPARAMETER") <<ENDLOG;
+    track->Rotate(0,kFALSE);
+    track->Print();
+// END ################################################# MODIFIY JMT
+
   }
   return size;
 }
index b5317eac961073f3994ad85f32525a8cbe067364..be921f1d59b839253e968e9fce6f8b5522fd768c 100644 (file)
@@ -225,8 +225,7 @@ class AliHLTTPCTransform {
   static void Global2Local(Float_t *xyz, Int_t sector);
   static void Global2LocHLT(Float_t *xyz, Int_t slice);
   static void Raw2Global(Float_t *xyz, Int_t sector, Int_t row, Float_t pad, Float_t time);
-  static void RawHLT2Global(Float_t *xyz, Int_t slice, 
-                            Int_t slicerow, Float_t pad, Float_t time);
+  static void RawHLT2Global(Float_t *xyz, Int_t slice, Int_t slicerow, Float_t pad, Float_t time);
   static void Raw2Global(Float_t *xyz, Int_t sector, Int_t row, Int_t pad, Int_t time);
   static void RawHLT2Global(Float_t *xyz, Int_t slice, 
                             Int_t slicerow, Int_t pad, Int_t time);
index d56ec40a89d42db4d78c6fc20aac5766ac249e61..0583538937d4049f5d8031df8c2244d9938356d4 100644 (file)
@@ -12,8 +12,8 @@ ALIHLT_TOPDIR = $(shell pwd)/..
 endif
 
 USENEWIO=1
-#EXTRACXXFLAGS=-ggdb3 -O0
-#EXTRALDFLAGS=-ggdb3 -O0
+EXTRACXXFLAGS=-ggdb3 -O0
+EXTRALDFLAGS=-ggdb3 -O0
 
 include $(ALIHLT_TOPDIR)/Makefile.conf
 
index a3802304b69a974a18137a23e183f28dbc84ec72..723e60dd3edcc3a298c60a4c8b6c521e0da24be0 100644 (file)
  *         next event : <Display PadRow>, <Display PadRow with Clusters>, <Display PadRow with Tracks> or <Display PadRow with Clusters and Tracks>
  */
 
-
-// gROOT->GetInterpreter()->AddIncludePath( "$ALIHLT_TOPDIR/BASE" );
-// gROOT->GetInterpreter()->AddIncludePath( "$ALIHLT_TOPDIR/TPCLib" );
-
 #include "AliHLTDataTypes.h"
 #include "AliHLTTPCSpacePointData.h"
 #include "AliHLTTPCClusterDataFormat.h"
 #include "AliHLTTPCTrackletDataFormat.h"
 #include "AliHLTTPCDefinitions.h"
 #include "AliHLTTPCDigitReader.h"
+//#include "AliHLTTPCTrackArray.h"
 
 // include because of connecttofile()
 #include <stdio.h>
 #include "AliHLT_C_Component_WrapperInterface.h"
 
 
+void* fODHReader;  /* really HOMERReader* */
+void* fODHDisplay; /* really AliHLTTPCDisplay* */
 
-//#include "AliHLTTPCTrackArray.h"
+Int_t fTracksPerSlice[36];   // TrackCount per slice
 
-    void* gODH_Reader; /* really HOMERReader* */
-    void* gODH_Display; /* really AliHLTTPCDisplay* */
+Float_t fTheta;
+Float_t fPhi;
 
+//vector<QString> fHostnames;
+//vector<QString> fPorts;
+
+class AliHLTTPCTrackArray;
+AliHLTTPCTrackArray* fTrackArray;
+
+TCanvas *fCanvasPad;
+TCanvas *fCanvasPadRow;
+TCanvas *fCanvas3D;
+TCanvas *fCanvasCharge;
+TCanvas *fCanvasResiduals;
 
 /* Dummy function to work around the problem that the interpreter does not load the first function properly... */
 int ODH_Dummy() {
@@ -78,138 +88,89 @@ int ODH_Dummy() {
 
 // ########################################################################################################################################
 int HLT_OnlineDisplay_HOMER() {
-    gODH_Display = NULL;
+    fODHDisplay = NULL;
+    fODHReader = NULL; 
+    fTrackArray = NULL;  
+    fTheta = 90.;
+    fPhi = 0.;
+
+    fCanvasPad = NULL;
+    fCanvasPadRow = NULL;
+    fCanvas3D = NULL;
+    fCanvasCharge = NULL;
+    fCanvasResiduals = NULL;
     return 0;
 }
 
 // ########################################################################################################################################
-int ODH_Init( char* path_to_geom_file, char* path_to_homer_lib = NULL ) {
+int ODH_Init() {
     // --- Load LIBS
-    TString lib;
     cout << "Loading ROOT libraries (ROOTSYS has to be set)" << endl;
-
     gSystem->Load("libPhysics");
     gSystem->Load("libEG");
-//     if(gSystem->Load("libMC")==-1) {
     gSystem->Load("libGeom");
     gSystem->Load("libVMC");
-//     }
+    gSystem->Load("libGpad");
 
     cout << "Loading ALICE TPC libraries (ALICE_ROOT & ALICE_TARGET have to be set)" << endl;
     gSystem->Load("libESD");
     gSystem->Load("libSTEER");
+    // AliRoot versions v4-04-Release or higher have a changed RAW library layout
+    // TODO: check this at configure time
+#ifndef ALIRAW_4_04
+    gSystem->Load("libRAWData");
+#else //ALIRAW_4_04
     gSystem->Load("libRAWDatabase");
     gSystem->Load("libRAWDatarec");
+#endif //ALIRAW_4_04
 //     gSystem->Load("libCONTAINERS");
 //     if(gSystem->Load("libTPC")!=0) {
     gSystem->Load("libTPCbase");
     gSystem->Load("libTPCrec");
     gSystem->Load("libTPCsim");
     gSystem->Load("libTPCfast");
-//     }
 
     cout << "Loading HLT libraries (ALIHLT_LIBDIR has to be set)" << endl;
     gSystem->Load("$(ALIHLT_LIBDIR)/libHLTbase.so");
     gSystem->Load("$(ALIHLT_LIBDIR)/libAliHLTTPC.so");
-    cout << "Loading HOMER library" << endl;
-
-    if ( path_to_homer_lib ) {
-       lib = path_to_homer_lib;
-       lib += "/";
-    }
-    else {
-       lib = "";
-    }
-    
-    lib += "libHOMERReader_ROOT.so";
-    gSystem->Load( lib );
 
+    cout << "Loading HOMER library" << endl;
+    gSystem->Load("${ALIHLT_DC_DIR}/lib/Linux-i686/libHOMERReader_ROOT.so" );
 
     // --- Create DISPLAY
     cout << "Creating display" << endl;
+    fCanvasPad = new TCanvas("fCanvasPad","HLT Online Display - Pad Display",900,900);
+    fCanvasPad->Divide(1,3);
+    fCanvasPadRow = new TCanvas("fCanvasPadRow","HLT Online Display - PadRow Display",900,900);
+    fCanvas3D = new TCanvas("fCanvas3D","HLT Online Display - 3D Display",900,900);
+    fCanvasCharge = new TCanvas("fCanvasCharge","HLT Online Display - Charge Display",900,900);
+    fCanvasResiduals = new TCanvas("fCanvasResiduals","HLT Online Display - Residuals Display",900,900);
 
-    Char_t *gfile="alice.geom"; // geometrie file
-    TString geoPath;
-    if ( path_to_geom_file ){  
-       geoPath = path_to_geom_file;
-       geoPath += "/";
-    }
-    else {
-       geoPath = "";
-    }
-    geoPath += gfile;
-
-    Int_t slices[] = { 0, 35 };
-    AliHLTTPCDisplay* display = new AliHLTTPCDisplay( slices, geoPath.Data() );
-
-    display->SetSlices();
-    display->DisplayAll(0,kFALSE,kFALSE,kFALSE,kFALSE);
-
-    gODH_Display = (void*)display;
-    return 0;
-}
-
-int ODH_SetSliceRange(int minslice,int maxslice){
-  // sets a range of Slices
-  if (!gODH_Display ) return -1;
-  AliHLTTPCDisplay* display = (AliHLTTPCDisplay*)gODH_Display;
-
-  display->SetSlices(minslice,maxslice);
-  display->DisplayAll(0,kFALSE,kFALSE,kFALSE,kFALSE);
-}
-
-int ODH_SetSliceRange(int slice){
-  // sets one slice
-  if (!gODH_Display ) return -1;
-  AliHLTTPCDisplay* display = (AliHLTTPCDisplay*)gODH_Display;
+    fTheta = 90.;
+    fPhi = 0.;
 
-  display->SetSlices(slice); 
-  display->DisplayAll(0,kFALSE,kFALSE,kFALSE,kFALSE);
-}
-
-int ODH_SetSliceRange(){
-  // sets all Slices
-  if (!gODH_Display ) return -1;
-  AliHLTTPCDisplay* display = (AliHLTTPCDisplay*)gODH_Display;
-
-  display->SetSlices();
-  display->DisplayAll(0,kFALSE,kFALSE,kFALSE,kFALSE);
-}
-
-int ODH_SetSlicePair(int slice){
-  // sets a pair of slices
-  if (!gODH_Display ) return -1;
-  AliHLTTPCDisplay* display = (AliHLTTPCDisplay*)gODH_Display;
-
-  display->SetSlicesPair(slice);
-  display->DisplayAll(0,kFALSE,kFALSE,kFALSE,kFALSE);
-}
+    // --- Load Geometry
+    TString geoPath;
 
-int ODH_SetSlicePair(int minslice, int maxslice){
-  // sets a pair of slices
-  if (!gODH_Display ) return -1;
-  AliHLTTPCDisplay* display = (AliHLTTPCDisplay*)gODH_Display;
+    Char_t * geometryPath = getenv("ALIHLT_DC_DIR");
+    Char_t * geometryFile = "alice.geom";
 
-  display->SetSlicesPair(minslice,maxslice);
-  display->DisplayAll(0,kFALSE,kFALSE,kFALSE,kFALSE);
-}
+    if (geometryPath) {
+       geoPath = geometryPath;
+       geoPath += "/share/TPC-OnlineDisplayHOMER";
+    }
+    else geoPath = ".";
+    
+    geoPath += "/";
+    geoPath += geometryFile;
 
-int ODH_SetInvert(){
-  // sets a pair of slices
-  if (!gODH_Display ) return -1;
-  AliHLTTPCDisplay* display = (AliHLTTPCDisplay*)gODH_Display;
+    AliHLTTPCDisplay* display = new AliHLTTPCDisplay( (Char_t*)geoPath.Data() );
 
-  display->SetInvert();
-  display->DisplayAll(0,kFALSE,kFALSE,kFALSE,kFALSE);
-}
+    fODHDisplay = (void*)display;
 
-int ODH_SetDrawGeo(){
-  // sets a pair of slices
-  if (!gODH_Display ) return -1;
-  AliHLTTPCDisplay* display = (AliHLTTPCDisplay*)gODH_Display;
+    display->SetupHist();
 
-  display->SetDrawGeo();
-  display->DisplayAll(0,kFALSE,kFALSE,kFALSE,kFALSE);
+    return 0;
 }
 
 // ########################################################################################################################################
@@ -252,167 +213,114 @@ int ODH_Connect( char* hostname_clusters, short port_clusters, char* hostname_tr
        delete reader;
        reader = NULL;
     }
-    gODH_Reader = (void*)reader;
+    fODHReader = (void*)reader;
+
+    printf( "CONNECTED\n");
     return ret;
 }
 
 // ########################################################################################################################################
-int ODH_Disconnect() {
-    if ( !gODH_Reader )
+Int_t ODH_Disconnect() {
+    if ( !fODHReader )
        return 0;
-    HOMERReader* reader = (HOMERReader*)gODH_Reader;
+    HOMERReader* reader = (HOMERReader*)fODHReader;
     delete reader;
-    gODH_Reader = NULL;
-    return 0;
-}
-
-// ########################################################################################################################################
-Int_t ODH_SetupPadRow(Int_t histswitch, Int_t slice, Int_t padrow){  
-    // PADROW 0 - 158
-    if (!gODH_Display ) return -1;
-    AliHLTTPCDisplay* display = (AliHLTTPCDisplay*)gODH_Display;
+    fODHReader = NULL;
+  
+    if ( fTrackArray )  delete fTrackArray;   
+    fTrackArray = NULL;  
 
-    // Setup Geometry:  histswitch = 0;
-    // Setup Histogram: histswitch = 1|2|3;
-    display->SetupPadRow(histswitch,slice,padrow);
+    return 0; 
+} 
 
-    return 0;
-}
 
 // ########################################################################################################################################
-int ODH_DisplayNextEvent( Bool_t clusterswitch, Bool_t trackswitch, Bool_t padrowswitch, Float_t* clustersEtaRange = NULL ) {
-    
-    if ( !gODH_Reader || !gODH_Display ) return -1;
+Int_t ODH_DisplayEvent(Bool_t nextSwitch=kTRUE, Bool_t threeDSwitch=kTRUE, Bool_t PadRowSwitch= kTRUE){
+
+    if ( !fODHReader || !fODHDisplay ) {
+       printf( "ERROR no READER or DISPLAY" );
+       return -1;
+    }
     
+    HOMERReader* reader = (HOMERReader*)fODHReader;
+    AliHLTTPCDisplay* display = (AliHLTTPCDisplay*)fODHDisplay;
+
     // -- input datatypes , reverse
     char* spptID="SRETSULC";
-    //char* spptID="STPECAPS";
     char* trkID = "SGESKART";
-    //char* trkID = "SGESCART";
     char* padrowID = "KPWR_LDD";
+    Int_t ret;
 
-    Int_t minHits = 0;
-    Bool_t x3don = kFALSE;
-
-    HOMERReader* reader = (HOMERReader*)gODH_Reader;
-    AliHLTTPCDisplay* display = (AliHLTTPCDisplay*)gODH_Display;
-    int ret = reader->ReadNextEvent();
-
-    if ( ret ) {
-       int ndx = reader->GetErrorConnectionNdx();
-       printf( "------------ TRY AGAIN --------------->Error reading event from source %d: %s (%d)\n", ndx, strerror(ret), ret );
-       ODH_DisplayNextEvent( clusterswitch, trackswitch, padrowswitch, clustersEtaRange);
-       return ret;
-    }
-
-    unsigned long blockCnt = reader->GetBlockCnt();
-    printf( "Event 0x%016LX (%Lu) with %lu blocks\n", (ULong64_t)reader->GetEventID(), (ULong64_t)reader->GetEventID(), blockCnt );
-
-    for ( unsigned long i = 0; i < blockCnt; i++ ) {
-       char tmp1[9], tmp2[5];
-       memset( tmp1, 0, 9 );
-       memset( tmp2, 0, 5 );
-       void *tmp11 = tmp1;
-       ULong64_t* tmp12 = (ULong64_t*)tmp11;
-       *tmp12 = reader->GetBlockDataType( i );
-       void *tmp21 = tmp2;
-       ULong_t* tmp22 = (ULong_t*)tmp21;
-       *tmp22 = reader->GetBlockDataOrigin( i );
-       printf( "Block %lu length: %lu - type: %s - origin: %s\n",
-               i, reader->GetBlockDataLength( i ), tmp1, tmp2 );
+    if (nextSwitch) {
+       ret = reader->ReadNextEvent();
+    
+       if ( ret ) {
+           int ndx = reader->GetErrorConnectionNdx();
+           printf( "------------ TRY AGAIN --------------->Error reading event from source %d: %s (%d)\n", ndx, strerror(ret), ret );
+           return ret; 
+       }
+       
+       unsigned long blockCnt = reader->GetBlockCnt();
+       printf( "Event 0x%016LX (%Lu) with %lu blocks\n", (ULong64_t)reader->GetEventID(), (ULong64_t)reader->GetEventID(), blockCnt );
+       
+       for ( unsigned long i = 0; i < blockCnt; i++ ) {
+           char tmp1[9], tmp2[5];
+           memset( tmp1, 0, 9 );
+           memset( tmp2, 0, 5 );
+           void *tmp11 = tmp1;
+           ULong64_t* tmp12 = (ULong64_t*)tmp11;
+           *tmp12 = reader->GetBlockDataType( i );
+           void *tmp21 = tmp2;
+           ULong_t* tmp22 = (ULong_t*)tmp21;
+           *tmp22 = reader->GetBlockDataOrigin( i );
+           printf( "Block %lu length: %lu - type: %s - origin: %s\n",i, reader->GetBlockDataLength( i ), tmp1, tmp2 );
+       }
+       
+       for(Int_t ii=0;ii<36;ii++) fTracksPerSlice[ii] = 0;
     }
     
-    display->ResetDisplay();
-
-    // -------------- CLUSTER
-    if ( clusterswitch ) {
+    //--------------------------------------------------------------------------------------------
+    // READ CLUSTER DATA
+    //-------------------------------------------------------------------------------------------- 
+    if (nextSwitch) {
        unsigned long blk = reader->FindBlockNdx( spptID, " CPT",0xFFFFFFFF );
-       printf( "blk: %lu\n", blk );
+    
        while ( blk != ~(unsigned long)0 ) {        
            printf( "Found clusters block %lu\n", blk );
            const AliHLTTPCClusterData* clusterData = (const AliHLTTPCClusterData*)reader->GetBlockData( blk );
-           unsigned long dataLen = reader->GetBlockDataLength( blk );
+           if ( !clusterData ) {
+               printf( "No track data for block %lu\n", blk );
+               continue;
+           }
            
            ULong_t spec = reader->GetBlockDataSpec( blk );
            Int_t patch = AliHLTTPCDefinitions::GetMinPatchNr( spec );
            Int_t slice = AliHLTTPCDefinitions::GetMinSliceNr( spec );
            printf( "%lu Clusters found for slice %u - patch %u\n", clusterData->fSpacePointCnt, slice, patch );
-
-           void* tmp30 = clusterData;
-           Byte_t* tmp31 = (Byte_t*)tmp30;
-           unsigned long offset;
-           offset = sizeof(clusterData->fSpacePointCnt);
-           if ( offset <= reader->GetBlockTypeAlignment( blk, 1 ) )
-               offset = reader->GetBlockTypeAlignment( blk, 1 );
-           tmp31 += offset;
-           tmp30 = tmp31;
-           AliHLTTPCSpacePointData* tmp32 = (AliHLTTPCSpacePointData*)tmp30;
-
-           display->SetupClusterDataForPatch( slice, patch, clusterData->fSpacePointCnt, tmp32 );
-
-           blk = reader->FindBlockNdx( spptID, " CPT", 0xFFFFFFFF, blk+1 );
-           printf( "blk: %lu\n", blk );
-       }
-    }
-
-    // -------------- PADROW
-    if ( padrowswitch ) {
-       Int_t padrow = display->GetPadrow();
-       Int_t patch =  AliHLTTPCTransform::GetPatch(padrow);
-       Int_t maxpatch = patch;
-       AliHLTUInt8_t padslice = (AliHLTUInt8_t) display->GetSlice();
-
-       if (padrow == 30 || padrow == 90 || padrow == 139) maxpatch++;
-      
-       for (Int_t tpatch=patch;tpatch <= maxpatch;tpatch++){
-
-         
-           AliHLTUInt32_t padrowSpec = AliHLTTPCDefinitions::EncodeDataSpecification( padslice, padslice,(AliHLTUInt8_t) tpatch,(AliHLTUInt8_t) tpatch );
-           
-           unsigned long blk;
-           
-           // READ RAW DATA BLOCK
-           blk = reader->FindBlockNdx( padrowID, " CPT", padrowSpec );
-           printf( "Raw Data found for slice %u/patch %u\n", padslice, tpatch );
-           
-           unsigned long rawDataBlock = reader->GetBlockData( blk );
-           unsigned long rawDataLen = reader->GetBlockDataLength( blk );
-           
-           // READ CLUSTERS BLOCK
-           blk = reader->FindBlockNdx( spptID, " CPT", padrowSpec );
-           
-           const AliHLTTPCClusterData* clusterData = (const AliHLTTPCClusterData*)reader->GetBlockData( blk );
-           
-           printf( "%lu Clusters found for slice %u - patch %u\n", clusterData->fSpacePointCnt, padslice, tpatch );
            
-           void* tmp30 = clusterData;
+           void* tmp30 = (void*)clusterData;
            Byte_t* tmp31 = (Byte_t*)tmp30;
            unsigned long offset;
            offset = sizeof(clusterData->fSpacePointCnt);
-           if ( offset <= reader->GetBlockTypeAlignment( blk, 1 ) )
-               offset = reader->GetBlockTypeAlignment( blk, 1 );
+           if ( offset <= reader->GetBlockTypeAlignment( blk, 1 ) ) offset = reader->GetBlockTypeAlignment( blk, 1 );
            tmp31 += offset;
            tmp30 = tmp31;
            AliHLTTPCSpacePointData* tmp32 = (AliHLTTPCSpacePointData*)tmp30;
            
-           // DISPLAY RAW DATA AND CLUSTERS
-           display->FillPadRow( tpatch, rawDataBlock, rawDataLen, clusterData->fSpacePointCnt, tmp32);
+           display->SetupCluster( slice, patch, clusterData->fSpacePointCnt, tmp32 );
+           
+           blk = reader->FindBlockNdx( spptID, " CPT", 0xFFFFFFFF, blk+1 );
        }
-
-
-    }
-
-    AliHLTTPCTrackArray* trackArray = NULL;
-    trackArray = new AliHLTTPCTrackArray;
-    if ( !trackArray ) {
-       printf( "No track array\n" );
-       return -1;
     }
-
-    // -------------- TRACKS
-    if ( trackswitch ) {
+    //--------------------------------------------------------------------------------------------
+    // READ TRACKS
+    //-------------------------------------------------------------------------------------------- 
+    if (nextSwitch) {
+       if ( fTrackArray ) delete fTrackArray; 
+       fTrackArray = new AliHLTTPCTrackArray;
+       
        unsigned long blk = reader->FindBlockNdx( trkID, " CPT", 0xFFFFFFFF );
-
+       
        while ( blk != ~(unsigned long)0 ) {
            printf( "Found tracks in block %lu\n", blk );
            const AliHLTTPCTrackletData* trackData = (const AliHLTTPCTrackletData*)reader->GetBlockData( blk );
@@ -424,174 +332,340 @@ int ODH_DisplayNextEvent( Bool_t clusterswitch, Bool_t trackswitch, Bool_t padro
            ULong_t spec = reader->GetBlockDataSpec( blk );
            Int_t patchmin = AliHLTTPCDefinitions::GetMinPatchNr( spec );
            Int_t patchmax = AliHLTTPCDefinitions::GetMaxPatchNr( spec );
-           Int_t slice = AliHLTTPCDefinitions::GetMinSliceNr( spec );  
-
+           Int_t slice = AliHLTTPCDefinitions::GetMinSliceNr( spec );  
            printf( "%lu tracks found for slice %u - patch %u-%u\n", trackData->fTrackletCnt, slice, patchmin, patchmax );
-
-           void* tmp40 = trackData;
+           
+           fTracksPerSlice[slice] = trackData->fTrackletCnt;
+           
+           void* tmp40 = (void*)trackData;
            Byte_t* tmp41 = (Byte_t*)tmp40;
            unsigned long offset;
-
            offset = sizeof(trackData->fTrackletCnt);
-
            if ( offset <= reader->GetBlockTypeAlignment( blk, 1 ) ) offset = reader->GetBlockTypeAlignment( blk, 1 );
-
            tmp41 += offset;
            tmp40 = tmp41;
            AliHLTTPCTrackSegmentData* tmp42 = (AliHLTTPCTrackSegmentData*)tmp40;
-
-           trackArray->FillTracks( trackData->fTrackletCnt, tmp42, slice );
-
-           blk = reader->FindBlockNdx( trkID, " CPT", 0xFFFFFFFF, blk+1 );
+           
+           fTrackArray->FillTracks( trackData->fTrackletCnt, tmp42, slice );
+           
+           blk = reader->FindBlockNdx( trkID, " CPT", 0xFFFFFFFF, blk+1 );     
        }
-
-
+       
+       display->SetupTracks( fTrackArray );  
     }
 
-    display->SetTracks( trackArray );
-    
-    // DISPLAY
-    display->DisplayAll( minHits, clusterswitch, trackswitch, x3don, 0. /*, clustersEtaRange */ );
-    if ( padrowswitch) display->DrawPadRow(x3don);
-    
-    if ( trackArray )  delete trackArray;   
-
-    return 0;
-}
-
-// ########################################################################################################################################
-// ########################################################################################################################################
-// ########################################################################################################################################
-int ODH_SimpleDisplay(char * infiles[7],unsigned int slice){
-    if ( !gODH_Display ) return -1;
-
-    FILE * inFH = 1;
-    AliHLTTPCDisplay* display = (AliHLTTPCDisplay*)gODH_Display;       
-    int i = 1;
-    char* error = NULL;
-    int errorArg = -1;
-    int errorParam = -1;
-
-    AliHLTComponent_DataType dataType;
-    AliHLTUInt32_t dataSpec = ~(AliHLTUInt32_t)0;
-    dataType.fStructSize = sizeof(dataType);
-    memset( dataType.fID, '*', 8 );
-    memset( dataType.fOrigin, '*', 4 );
-    AliHLTComponent_BlockData blocks[7];
-    unsigned long totalRead = 0;
-  
-    // --- get INFILE
-    for (int ii = 0;ii<7;ii++){
-
-       inFH = fopen( infiles[ii], "r");
-       if ( inFH == -1 ) {
-           error = "Unable to open input file for reading";
-           errorArg = i;
-           errorParam = i+1;
-           break;
-       }
-    
-       AliHLTComponent_BlockData newBlock;
-       newBlock.fStructSize = sizeof(AliHLTComponent_BlockData);
-
-       newBlock.fShmKey.fStructSize = sizeof(AliHLTComponent_ShmData);
-       newBlock.fShmKey.fShmType = gkAliHLTComponent_InvalidShmType;
-       newBlock.fShmKey.fShmID = gkAliHLTComponent_InvalidShmID;
+    //--------------------------------------------------------------------------------------------
+    // READ RAW DATA for PADROW HISTOGRAM
+    //--------------------------------------------------------------------------------------------
+    if (PadRowSwitch) {
+       AliHLTUInt8_t padslice = (AliHLTUInt8_t) display->GetSlicePadRow();
+       Int_t padrow = display->GetPadRow();
+       Int_t patch =  AliHLTTPCTransform::GetPatch(padrow);
+       Int_t maxpatch = patch;
        
-       fseek( inFH, 0, SEEK_END );
-       long sz = ftell(inFH);
+       display->ResetHistPadRow();
        
-       fseek( inFH, 0, SEEK_SET);
-       newBlock.fPtr = new uint8[ sz ];
+       if (padrow == 30 || padrow == 90 || padrow == 139) maxpatch++;
        
-       if ( !newBlock.fPtr ) {
-           fprintf( stderr, "Out of memory trying to allocate memory for input file '%s' of %lu bytes.\n",
-                    infile, sz );
-           return -1;
-       }
+       for (Int_t tpatch=patch;tpatch <= maxpatch;tpatch++) {
+           unsigned long blk;
+           AliHLTUInt32_t padrowSpec = AliHLTTPCDefinitions::EncodeDataSpecification( padslice, padslice,(AliHLTUInt8_t) tpatch,(AliHLTUInt8_t) tpatch );
+           
+           // READ RAW DATA BLOCK - READ CLUSTERS BLOCK
+           blk = reader->FindBlockNdx( padrowID, " CPT", padrowSpec ); 
 
-       unsigned long curSize = 0;
-       int ret=1;
-       void * tmp50 = newBlock.fPtr;
-       uint8* tmp51 = (uint8*)tmp50;
-       while ( ret>0 ) {
-           ret = fread(tmp51+curSize,1, sz-curSize,inFH);
-
-           if ( ret >= 0 ) {
-               curSize += (unsigned long)ret;
-               if ( curSize >= (unsigned long)sz ) {
-                   newBlock.fSize = sz;
-                   blocks[ii] =  newBlock;
-                   break;
-               }
-           }
-           else {
-               fprintf( stderr, "%s error reading data from input file after %lu bytes.\n", infile, curSize );
-               return -1;
+           if ( ~(unsigned long)0 != blk ){
+               printf( "Raw Data found for slice %u/patch %u\n", padslice, tpatch );
+               unsigned long rawDataBlock = (unsigned long) reader->GetBlockData( blk );
+               unsigned long rawDataLen = reader->GetBlockDataLength( blk );
+
+               display->FillPadRow( tpatch, rawDataBlock, rawDataLen);
            }
        }
-    }
-  
-    //  --- Setup CLUSTERS
-    for (int ii = 1;ii<7;ii++){
-       unsigned int patch = ii - 1;
-       const AliHLTTPCClusterData* clusterData = (const AliHLTTPCClusterData*) blocks[ii].fPtr;
-       
-       if ( !clusterData )     {
-           printf( "No ClusterData\n" );
-           return -1;
+    
+       if (fCanvasPadRow){
+           fCanvasPadRow->cd();
+           display->DrawHistPadRow();
+           fCanvasPadRow->Update();
        }
        
-               void* tmp30 = clusterData;
-       Byte_t* tmp31 = (Byte_t*)tmp30;
-       unsigned long offset;
+       if (fCanvasPad){
+           fCanvasPad->cd(1);
+           display->DrawHistPad1();
+           fCanvasPad->GetCanvas()->Update();
+           
+           fCanvasPad->cd(2);
+           display->DrawHistPad2();
+           fCanvasPad->GetCanvas()->Update();
+           
+           fCanvasPad->cd(3);
+           display->DrawHistPad3();
+           fCanvasPad->GetCanvas()->Update();
+       }
+    }
+
+    //--------------------------------------------------------------------------------------------
+    // RESET HISTOGRAMS
+    //--------------------------------------------------------------------------------------------
+    if ( display->Get3DSwitchCluster() ) display->ResetHistCharge();
+    if ( display->Get3DSwitchTracks() ) display->ResetHistResiduals();
+
+    //--------------------------------------------------------------------------------------------
+    // DRAW 3D
+    //--------------------------------------------------------------------------------------------
+    if ( (threeDSwitch || (PadRowSwitch && display->Get3DSwitchPadRow())) && fCanvas3D ){
+
+       fCanvas3D->cd(); 
+       fCanvas3D->Clear();
+       fCanvas3D->SetFillColor(display->GetBackColor());
        
-       offset = sizeof(clusterData->fSpacePointCnt);
+       if ( !display->GetKeepView() ){
+           fCanvas3D->SetTheta(fTheta);
+           fCanvas3D->SetPhi(fPhi);
+       }
        
-       tmp31 += offset;
-       tmp30 = tmp31;
-       AliHLTTPCSpacePointData* tmp32 = (AliHLTTPCSpacePointData*)tmp30;
+       display->Draw3D();
        
-       display->SetupClusterDataForPatch( slice, patch, clusterData->fSpacePointCnt, tmp32 );
+       fCanvas3D->Modified();
+       fCanvas3D->Update();                
     }
-
-    // --- Setup TRACKS
-    AliHLTTPCTrackArray* trackArray = NULL;
-    trackArray = new AliHLTTPCTrackArray;
     
-    if ( !trackArray ) {
-       printf( "No track array\n" );
-       return -1;
+    //--------------------------------------------------------------------------------------------
+    // DRAW RESIDUALS
+    //--------------------------------------------------------------------------------------------
+    if ( display->Get3DSwitchTracks() && fCanvasResiduals) {
+       fCanvasResiduals->cd();  
+       fCanvasResiduals->Clear();
+       fCanvasResiduals->Divide(1,2);
+       fCanvasResiduals->cd(1);
+       display->DrawHistResiduals(kTRUE);
+       fCanvasResiduals->cd(2);
+       display->DrawHistResiduals(kFALSE);
+       fCanvasResiduals->Update();
     }
+    //--------------------------------------------------------------------------------------------
+    // DRAW CHARGE
+    //--------------------------------------------------------------------------------------------
+    if ( display->Get3DSwitchCluster() && fCanvasCharge != NULL) {
+       fCanvasCharge->cd();       
+       fCanvasCharge->Clear();
+
+       display->DrawHistCharge();
 
-    const AliHLTTPCTrackletData* trackData = (const AliHLTTPCTrackletData*) blocks[0].fPtr;
-    if ( !trackData )
-    {
-       printf( "No track data for block %lu\n", blk );
-       continue;
+       fCanvasCharge->Update();
     }
-   
-    void* tmp40 = trackData;
-    Byte_t* tmp41 = (Byte_t*)tmp40;
-    unsigned long offset;
+
+    return 0;
+}
+
+// ####################################################################################################
+//       SETTER - minor functions
+// ####################################################################################################
+Int_t ODH_SetSliceRange(){
+    // -- sets all Slices
+    if (!fODHDisplay ) return -1;
+    AliHLTTPCDisplay* display = (AliHLTTPCDisplay*)fODHDisplay;
+    
+    display->SetSlices();
+    fTheta = 90.;
+
+    ODH_DisplayEvent(kFALSE,kTRUE,kFALSE);
+    return 0;
+}
+// Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°
+Int_t ODH_SetSliceRange(Int_t slice){
+    // -- sets one slice
+    if (!fODHDisplay ) return -1;
+    AliHLTTPCDisplay* display = (AliHLTTPCDisplay*)fODHDisplay;
+    
+    display->SetSlices(slice);  
+    fTheta = 0.;
+
+    ODH_DisplayEvent(kFALSE,kTRUE,kFALSE);
+    return 0;
+}
+// Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°
+Int_t ODH_SetSliceRange(Int_t minslice,Int_t maxslice){
+    // -- sets a range of Slices
+    if (!fODHDisplay ) return -1;
+    AliHLTTPCDisplay* display = (AliHLTTPCDisplay*)fODHDisplay;
+    
+    display->SetSlices(minslice,maxslice);  
+    fTheta = 90.;
+
+    ODH_DisplayEvent(kFALSE,kTRUE,kFALSE);
+    return 0;
+}
+// Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°
+Int_t ODH_SetSlicePair(Int_t slice){
+    // -- sets a pair of slices
+    if (!fODHDisplay ) return -1;
+    AliHLTTPCDisplay* display = (AliHLTTPCDisplay*)fODHDisplay;
+    
+    display->SetSlicesPair(slice); 
+    fTheta = 90.;
+    
+    ODH_DisplayEvent(kFALSE,kTRUE,kFALSE);
+    return 0;
+}
+// Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°
+Int_t ODH_SetSlicePair(Int_t minslice, Int_t maxslice){
+    // -- sets a pair of slices
+    if (!fODHDisplay ) return -1;
+    AliHLTTPCDisplay* display = (AliHLTTPCDisplay*)fODHDisplay;
     
-    offset = sizeof(trackData->fTrackletCnt);
+    display->SetSlicesPair(minslice,maxslice);
+    fTheta = 90.;
+
+    ODH_DisplayEvent(kFALSE,kTRUE,kFALSE);
+    return 0;
+}
+// Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°
+Int_t ODH_SetCluster(Bool_t used=kTRUE, Bool_t unused=kTRUE){    
+    // -- set used/unuse/all cluster
+    if ( !fODHDisplay ) return -1;
+    AliHLTTPCDisplay* display = (AliHLTTPCDisplay*)fODHDisplay;
     
-    tmp41 += offset;
-    tmp40 = tmp41;
-    AliHLTTPCTrackSegmentData* tmp42 = (AliHLTTPCTrackSegmentData*)tmp40;
+    //  ALL Cluster = 0  | USED Cluster = 1 | UNUSED Cluster = 2
+    if (used && unused) display->SetSelectCluster(0);
+    else if (used) display->SetSelectCluster(1);
+    else if (unused) display->SetSelectCluster(2);
+
+    ODH_DisplayEvent(kFALSE,kTRUE,kFALSE);
+    return 0;
+}
+// Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°
+Int_t ODH_SetInvert(){    
+    // -- set invert 3D display
+    if ( !fODHDisplay ) return -1;
+    AliHLTTPCDisplay* display = (AliHLTTPCDisplay*)fODHDisplay;
+
+    display->SetInvert();
+
+    ODH_DisplayEvent(kFALSE,kTRUE,kFALSE);
+    return 0;
+}
+// Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°
+Int_t ODH_SetKeepView(Bool_t keepview){ 
+    // -- keep angle view 
+    if ( !fODHDisplay ) return -1;
+    AliHLTTPCDisplay* display = (AliHLTTPCDisplay*)fODHDisplay;
+
+    if (keepview) display->SetKeepView(kTRUE);
+    else display->SetKeepView(kFALSE);
+
+    return 0;
+}
+// Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°
+Int_t ODH_SetPadRow(Int_t slice, Int_t padrow, Int_t pad = 0) {
+    // -- set padrow and pad histograms
+    if (!fODHDisplay ) return -1;
+    AliHLTTPCDisplay* display = (AliHLTTPCDisplay*)fODHDisplay;
     
-    trackArray->FillTracks( trackData->fTrackletCnt, tmp42, slice );
+    if( padrow < 0 || padrow > 158){
+       printf("Padrow %d out of range, has to be in [0,158].",padrow);
+       return -2;
+    }
+
+    display->SetSlicePadRow(slice);
+    display->SetPadRow(padrow); 
+    display->SetHistPadRowAxis();
+    display->SetPad(pad);
+
+    ODH_DisplayEvent(kFALSE,kTRUE,kTRUE);
+    return 0;
+}
+// Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°
+Int_t ODH_SetSelectTrack(Bool_t trackswitch=kFALSE, Int_t slice=0, Int_t track=0){
+    // -- trackswitch : turn on /off of single track
+    // -- slice : select slice for single track
+    // -- track :select single track in slice
     
-    display->SetTracks( trackArray );
+    if (!fODHDisplay ) return -1;
+    AliHLTTPCDisplay* display = (AliHLTTPCDisplay*)fODHDisplay;
 
-    // --- Display 
-    Int_t minHits = 0; 
+    display->SetSelectTrackSwitch(trackswitch);
+    if(!trackswitch) display->SetSelectTrack(0); 
+    else {
+       if ( track < 0 || track >  fTracksPerSlice[slice]) {
+           printf ("No Track %d, Maximum of Tracks in Slice %d is %d ! ",track,slice,fTracksPerSlice[slice] );
+           return -2;
+       }
+       
+       display->SetSelectTrackSlice(slice); 
+       display->SetSelectTrack(track);
+    }
 
-    display->SetSlices(0,4);
-    display->DisplayAll( minHits, clusterswitch, trackswitch, kFALSE, 0. /*, clustersEtaRange */ );
-    if ( trackArray ) delete trackArray;
+    ODH_DisplayEvent(kFALSE,kTRUE,kFALSE);
+    return 0;
+}
+// Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°
+Int_t ODH_SetTrack(Int_t minhits = 0, Float_t ptthreshold = 0.){
+    // -- set track properties
+    if (!fODHDisplay ) return -1;
+    AliHLTTPCDisplay* display = (AliHLTTPCDisplay*)fODHDisplay;
+
+    display->SetMinHits(minhits);
+    display->SetPtThreshold(ptthreshold );
+    return 0;
+}
+// Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°
+Int_t ODH_Set3D(Bool_t tracks=kFALSE, Bool_t cluster=kFALSE, Bool_t padrow=kFALSE, Bool_t geometry=kFALSE){    
+    // -- set 3D Display
+    if (!fODHDisplay ) return -1;
+    AliHLTTPCDisplay* display = (AliHLTTPCDisplay*)fODHDisplay;
+    
+    if  (padrowCheckBox->isChecked()) setPadRow();
     
+    display->SetSwitches(tracks, cluster, padrow, geometry);
+
+    if (display->Get3DSwitchPadRow()) ODH_DisplayEvent(kFALSE,kTRUE,kTRUE);
+    else ODH_DisplayEvent(kFALSE,kTRUE,kFALSE);
+    return 0;
+}  
+// Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°  
+Int_t ODH_Set3DTracks(Bool_t on=kFALSE){
+    // --  Set 3D tracks
+    if (!fODHDisplay ) return -1;
+    AliHLTTPCDisplay* display = (AliHLTTPCDisplay*)fODHDisplay;
+
+    display->Set3DSwitchTracks(on);
+
+    ODH_DisplayEvent(kFALSE,kTRUE,kFALSE);
+    return 0;
+}  
+// Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°  
+Int_t ODH_Set3DCluster(Bool_t on=kFALSE){
+    // --  Set 3D cluster
+    if (!fODHDisplay ) return -1;
+    AliHLTTPCDisplay* display = (AliHLTTPCDisplay*)fODHDisplay;
+
+    display->Set3DSwitchCluster(on);
+
+    ODH_DisplayEvent(kFALSE,kTRUE,kFALSE);
     return 0;
+}  
+// Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°  
+Int_t ODH_Set3DPadRow(Bool_t on=kFALSE){
+    // --  Set 3D padrow
+    if (!fODHDisplay ) return -1;
+    AliHLTTPCDisplay* display = (AliHLTTPCDisplay*)fODHDisplay;
+
+    display->Set3DSwitchPadRow(on);
+
+    ODH_DisplayEvent(kFALSE,kTRUE,kFALSE);
+    return 0;
+}  
+// Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°Â°  
+Int_t ODH_Set3DGeometry(Bool_t on=kFALSE){
+    // --  Set 3D geometry
+    if (!fODHDisplay ) return -1;
+    AliHLTTPCDisplay* display = (AliHLTTPCDisplay*)fODHDisplay;
+
+    display->Set3DSwitchGeometry(on);
+
+    ODH_DisplayEvent(kFALSE,kTRUE,kFALSE);
+    return 0;
+}  
+
 
-} // END ODH_SimpleDisplay
index 19c0f7c8d80d91085bdf7cecaf354bb28121e412..2652c16800e08ca8d5b3d63cc1aa515fdbdb1ba8 100644 (file)
+/************************************************************************
+**
+** This file is property of and copyright by the Computer Science/Computer 
+** Engineering Group, Kirchhoff Institute for Physics, Ruprecht-Karls-
+** University, Heidelberg, Germany, 2005
+** This file has been written by Jochen Thaeder, 
+** thaeder@kip.uni-heidelberg.de
+**
+**
+** See the file license.txt for details regarding usage, modification,
+** distribution and warranty.
+** Important: This file is provided without any warranty, including
+** fitness for any particular purpose.
+**
+**
+** Newer versions of this file's package will be made available from 
+** http://www.kip.uni-heidelberg.de/ti/HLT/
+** or the corresponding page of the Heidelberg Alice HLT group.
+**
+*************************************************************************/
+
+// *****************************************************************
+// *        USEAGE in ROOT
+// *****************************************************************
+// * -->LOAD the macro first:
+// * .L ("HLT-OnlineDisplay-HOMER.C");
+// *
+// * --> use with ".p FUNCTION;" OR here as macro function
+// * ODH_Init();
+// * ODH_Connect(Char_t *hostname1,Int_t port1,Char_t *hostname2,Int_t port2,Char_t *hostname3,Int_t port3);
+// * ODH_DisplayEvent();                                    // Display NextEvent
+// *
+// * ODH_SetSliceRange();                                   // Sets Slice: ALL
+// * ODH_SetSliceRange(Int_t slice);                        // Sets Slice: "slice"
+// * ODH_SetSliceRange(Int_t minslice, Int_t maxslice);     // Sets Slice: "minslice" to  "maxslice"
+// * ODH_SetSlicePair(Int_t slice);                         // Sets Slice: "slice" and  "slice"+9
+// * ODH_SetSlicePair(Int_t minslice, Int_t maxslice);      // Sets Slice: ["minslice" to  "maxslice"] and  ["minslice"+9 to  "maxslice"+9]
+// *
+// * ODH_SetCluster(Bool_t used, Bool_t unused);            // Sets Cluster: used, unused, all(= used && unused)
+// * 
+// * ODH_SetInvert();                                       // Invert 3D Display
+// * ODH_SetKeepView(Bool_t keepview);                      // Keep 3D View
+// * 
+// * ODH_SetPadRow(Int_t slice, Int_t padrow, Int_t pad);   // Set PadRow "padrow" within Slice "slice" and Pad "pad"(=0 per default)  
+// *
+// * ODH_SetSelectTrack(Bool_t switch, Int_t slice, Int_t track); // with switch=true :Select Single Track "track" in Slice "slice"
+// *                                                              // turn off: ODH_SetSelectTrack();
+// *
+// * ODH_SetTrack(Int_t minhits, Float_t ptthreshold);      // Sets Cuts in order to display tracks, both default is 0
+// * 
+// * ODH_Set3D(Bool_t tracks, Bool_t cluster, Bool_t padrow, Bool_t geometry);  // Switches for the 3D Display
+// * ODH_Set3DTracks(Bool_t on);                            // Set 3D tracks, default is off
+// * ODH_Set3DCluster(Bool_t on);                           // Set 3D cluster, default is off
+// * ODH_Set3DPadRow(Bool_t on);                            // Set 3D padrow, default is off
+// * ODH_Set3DGeometry(Bool_t on);                          // Set 3D geometry, default is off
+// *
+// *****************************************************************
 {
 
-//gROOT->Reset();
-
-gROOT->LoadMacro("HLT-OnlineDisplay-HOMER.C");
-
-HLT_OnlineDisplay_HOMER();
-//ODH_Init("./GEO","/home/HLT/src/versions/devel/Util/HOMER/reader/lib/Linux-i686/");
-
-ODH_Init("./GEO","/home/jthaeder/HLT/AnalysisChain/lib/Linux-i686/");
-//ODH_Init("./GEO","/home/jthaeder/HLT/src/lib_jthaeder/");
-
-//ODH_Connect("e107",42002,NULL,NULL,"e107",42003);     // pprun_1_nB
-//ODH_Connect(NULL,NULL,NULL,NULL,"e107",42003);
-
-
-ODH_Connect(NULL,NULL,"eh000",42002,NULL,NULL); // --   HUGE_TEST with RAW
-//ODH_DisplayNextEvent(false,false,true,NULL);
-
-bar = new TControlBar("vertical", "HLT DISPLAY");
-
-bar->AddButton("Next clusters",".p ODH_DisplayNextEvent(true,false,false,NULL)", "Show Next Event");
-bar->AddButton("Next tracks",".p ODH_DisplayNextEvent(false,true,false,NULL)", "Show Next Event");
-bar->AddButton("Next clusters and tracks",".p ODH_DisplayNextEvent(true,true,false,NULL)", "Show Next Event");
-
-bar->AddSeparator();
-
-bar->AddButton("Show all",".p ODH_SetSliceRange()", "Show Next Event");
-
-bar->AddButton("Show Sector 0",".p ODH_SetSliceRange(0)", "Show Next Event");
-bar->AddButton("Show Sector 1",".p ODH_SetSliceRange(1)", "Show Next Event");
-bar->AddButton("Show Sector 2",".p ODH_SetSliceRange(2)", "Show Next Event");
-bar->AddButton("Show Sector 9",".p ODH_SetSliceRange(9)", "Show Next Event");
-bar->AddButton("Show Sector 10",".p ODH_SetSliceRange(10)", "Show Next Event");
-bar->AddButton("Show Sector 11",".p ODH_SetSliceRange(11)", "Show Next Event");
-
-bar->AddButton("Show Sector 0 - 2",".p ODH_SetSliceRange(0,2)", "Show Next Event");
-bar->AddButton("Show Sector 9 - 11",".p ODH_SetSliceRange(9,11)", "Show Next Event");
-bar->AddButton("Show Sector 0 - 11",".p ODH_SetSliceRange(0,11)", "Show Next Event");
-
-bar->AddButton("Show pair 0",".p ODH_SetSlicePair(0)", "Show Next Event");
-bar->AddButton("Show pair 1",".p ODH_SetSlicePair(1)", "Show Next Event");
-bar->AddButton("Show pair 2",".p ODH_SetSlicePair(2)", "Show Next Event");
-
-bar->AddButton("Show Geometry",".p ODH_SetDrawGeo()", "Show Next Event");
-
-bar->AddButton("Invert",".p ODH_SetInvert()","ccc");
-
-bar->AddSeparator();
-// PADROW 0 - 158
-
-bar->AddButton("Setup PadRow 20 with Histogram",".p ODH_SetupPadRow(1,2,20)","Setup PadRow");
-bar->AddButton("Setup PadRow 20 with Geometry",".p ODH_SetupPadRow(0,2,20)","Setup PadRow");
-
-bar->AddButton("Display PadRow",".p ODH_DisplayNextEvent(false,false,true,NULL)","Display PadRow");
-
-bar->AddButton("Display PadRow with Clusters",".p ODH_DisplayNextEvent(true,false,true,NULL)","Display PadRow");
-bar->AddButton("Display PadRow with Tracks",".p ODH_DisplayNextEvent(false,true,true,NULL)","Display PadRow");
-bar->AddButton("Display PadRow with Clusters and Tracks",".p ODH_DisplayNextEvent(true,true,true,NULL)","Display PadRow");
-
+    gROOT->LoadMacro("HLT-OnlineDisplay-HOMER.C");
+
+    // --- LOAD DISPLAY FUNCTIONS
+    HLT_OnlineDisplay_HOMER();
+    
+    // --- INITIALIZE DISPLAY, LOAD GEOMETRY FILE, LOAD LIBRARIES (HOMER,HLT,..)
+    ODH_Init();
+
+    //  --- CONNECT TO TCP DUMP SUBSCRIBERS
+    ODH_Connect("e300",42002,NULL,NULL,"e300",42001);   
+
+    // --- Next Event
+    ODH_DisplayEvent();
+
+    barCl = new TControlBar("vertical", "HLT DISPLAY - Cluster");
+    barCl->AddButton("All Cluster",".p ODH_SetCluster(true,true)", "All Cluster");
+    barCl->AddButton("Used Cluster",".p ODH_SetCluster(true,false)", "Used Cluster");
+    barCl->AddButton("Unused Cluster",".p ODH_SetCluster(false,true)", "Unused Cluster");
+    barCl->Show();
+    
+    bar = new TControlBar("vertical", "HLT DISPLAY");
+    bar->AddButton("Next Event",".p ODH_DisplayEvent()", "Next Event");
+    bar->AddSeparator();
+    bar->AddButton("Show all slices",".p ODH_SetSliceRange()", "Show all slices");
+    bar->AddSeparator();
+    bar->AddButton("Keep 3D View",".p ODH_SetKeepView(true)", "Keep 3D View");
+    bar->AddButton("!Keep 3D View",".p ODH_SetKeepView(false)", "Keep 3D View");
+    bar->AddButton("Invert 3D View",".p ODH_SetInvert()","Invert 3D View");
+    bar->AddSeparator();
+    bar->AddButton("Show 3D Tracks",".p ODH_Set3DTracks(true)","Show 3D Tracks");
+    bar->AddButton("!Show 3D Tracks",".p ODH_Set3DTracks()","!Show 3D Tracks");
+    bar->AddButton("Show 3D Cluster",".p ODH_Set3DCluster(true)","Show 3D Cluster");
+    bar->AddButton("!Show 3D Cluster",".p ODH_Set3DCluster()","!Show 3D Cluster");
+    bar->AddButton("Show 3D PadRow",".p ODH_Set3DPadRow(true)","Show 3D PadRow");
+    bar->AddButton("!Show 3D PadRow",".p ODH_Set3DPadRow()","!Show 3D PadRow");
+    bar->AddButton("Show 3D Geometry",".p ODH_Set3DGeometry(true)","Show 3D Geometry");
+    bar->AddButton("!Show 3D Geometry",".p ODH_Set3DGeometry()","!Show 3D Geometry");
+    bar->AddSeparator();
+    bar->AddButton("Show Sector 0",".p ODH_SetSliceRange(0)", "Show Next Event");
+    bar->AddButton("Show Sector 9",".p ODH_SetSliceRange(9)", "Show Next Event");
+    bar->AddButton("Show Sector 18",".p ODH_SetSliceRange(18)", "Show Next Event");
+    bar->AddButton("Show Sector 27",".p ODH_SetSliceRange(27)", "Show Next Event");
+    bar->AddButton("Show Sector 0 - 2",".p ODH_SetSliceRange(0,2)", "Show Next Event");
+    bar->AddButton("Show Sector 0 - 9",".p ODH_SetSliceRange(0,9)", "Show Next Event");
+    bar->AddButton("Show pair 0",".p ODH_SetSlicePair(0)", "Show Next Event");
+    bar->AddButton("Show pair 0 - 2",".p ODH_SetSlicePair(0,2)", "Show Next Event");
+    
+    bar->AddSeparator();
+
+bar->AddButton("Close","gROOT.Reset(\"a\")", "Close");
 bar->Show();
 gROOT->SaveContext();
 }
index dec9234bc1a2123fe334346f707301cedd1b85b5..657988731461040a2805d2f0ef47d5a850fc4d6f 100644 (file)
@@ -4,7 +4,5 @@ gROOT->GetInterpreter()->AddIncludePath( "$ALIHLT_TOPDIR/TPCLib" );
 gROOT->GetInterpreter()->AddIncludePath( "$ALIHLT_TOPDIR/src" );
 
 gROOT->Macro("StartDisplayMacro.C"); 
-//gROOT->Macro("./StartSimpleDisplayMacro.C");
-
 }
 
index 9b6844ebd7ab3c36dc2e44b60c7dcd473f1f6b5a..edfa35564d424b7e69ccf96b4cabff64eaa8933a 100644 (file)
@@ -163,10 +163,12 @@ void AliHLTTPCConfMapTrack::UpdateParam(AliHLTTPCConfMapPoint *thisHit)
 void AliHLTTPCConfMapTrack::Fill(AliHLTTPCVertex *vertex,Double_t max_Dca)
 {
   //Fill track variables with or without fit.
-  
+  LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapTrack::Fill","TEST")<< "=========="<< ENDLOG;
   //fRadius = sqrt(a2Xy*a2Xy+1)/(2*fabs(a1Xy));
   Double_t radius = sqrt(a2Xy*a2Xy+1)/(2*fabs(a1Xy));
+  LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapTrack::Fill","TEST")<< "====A====== r=" << GetRadius() << ENDLOG;
   SetRadius(radius);
+  LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapTrack::Fill","TEST")<< "====B====== r=" << GetRadius() << ENDLOG;
 
   //fPt = (Double_t)(BFACT * AliHLTTPCTransform::GetBField() * fRadius);
   Double_t pt = (Double_t)(BFACT * AliHLTTPCTransform::GetBField() * GetRadius());
index b1d290ecb6cb52dda6e29c8b0a9451601546b2d2..dd5cf26aaf7b853752532df1466265113ff85394 100644 (file)
@@ -138,8 +138,13 @@ void AliHLTTPCConfMapper::InitSector(Int_t sector,Int_t *rowrange,Float_t *etara
     }
   
   //Set the angles to sector 2:
+#if 0
+  fPhiMin = -1.*90/todeg;//fParam->GetAngle(sector) - 10/todeg;
+  fPhiMax = 90./todeg;//fParam->GetAngle(sector) + 10/todeg;
+#else
   fPhiMin = -1.*10/todeg;//fParam->GetAngle(sector) - 10/todeg;
-  fPhiMax = 10/todeg;//fParam->GetAngle(sector) + 10/todeg;
+  fPhiMax = 10./todeg;//fParam->GetAngle(sector) + 10/todeg;
+#endif
 
   nTracks=0;
   fMainVertexTracks = 0;
@@ -179,10 +184,12 @@ void AliHLTTPCConfMapper::SetPointers()
 {
   //Check if there are not enough clusters to make a track in this sector
   //Can happen in pp events.
-
+//    LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper:SetPointers","Tracking")<< "==================== UNUSED CLUSTERS="<< fClustersUnused <<ENDLOG;
   if(fClustersUnused < fMinPoints[fVertexConstraint])
     return;
-  
+
+//  LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::SetPointers","Tracking")<< "--------> fMaxPhi=" << fMaxPhi << "  fMaxEta="<< fMaxEta <<  ENDLOG;
+
   //Reset detector volumes
   memset(fVolume,0,fBounds*sizeof(AliHLTTPCConfMapContainer));
   memset(fRow,0,fNumRowSegmentPlusOne*sizeof(AliHLTTPCConfMapContainer));
@@ -190,6 +197,8 @@ void AliHLTTPCConfMapper::SetPointers()
   Float_t phiSlice = (fPhiMax-fPhiMin)/fNumPhiSegment;
   Float_t etaSlice = (fEtaMax-fEtaMin)/fNumEtaSegment;
 
+//  LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::SetPointers","Parameters") << "min=" << fEtaMin <<"   max=" << fEtaMax  <<"   fNumEtaSegment=" <<fNumEtaSegment << ENDLOG;
+  //LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::SetPointers","Parameters") << "min=" << fPhiMin <<"   max=" << fPhiMax  <<"   fNumEtaSegment=" <<fNumPhiSegment << ENDLOG;
   Int_t volumeIndex;
   Int_t local_counter=0;
   for(Int_t j=0; j<fClustersUnused; j++)
@@ -209,15 +218,19 @@ void AliHLTTPCConfMapper::SetPointers()
       
       if(thisHit->phiIndex<1 || thisHit->phiIndex>fNumPhiSegment)
        {
-         //cout << "Phiindex: " << thisHit->phiIndex << " " << thisHit->GetPhi() << endl;
+           //cout << j<< "||Phiindex: " << thisHit->phiIndex << " | " << thisHit->GetPhi() << " PHIMIN=" << fPhiMin << endl;
          fPhiHitsOutOfRange++;
          continue;
        }
-      
+    
       thisHit->etaIndex=(Int_t)((thisHit->GetEta()-fEtaMin)/etaSlice + 1);
       if(thisHit->etaIndex<1 || thisHit->etaIndex>fNumEtaSegment)
        {
-         //cout << "Etaindex: " << thisHit->etaIndex << " " << thisHit->GetEta() << endl;
+           if (thisHit->etaIndex<1)  LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::SetPointers","Parameters") << " ----1-----" << ENDLOG;
+           if (thisHit->etaIndex>fNumEtaSegment) {
+//             LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::SetPointers","Parameters") << "INDEX=" << thisHit->etaIndex << "   fNumEtaSegment=" <<fNumEtaSegment << ENDLOG;
+               //  cout << j<< "||Etaindex: " << thisHit->etaIndex << " | " << thisHit->GetEta() << " ETAMIN=" << fEtaMin << endl;
+           }
          fEtaHitsOutOfRange++;
          continue;
        }
@@ -231,7 +244,6 @@ void AliHLTTPCConfMapper::SetPointers()
        ((AliHLTTPCConfMapPoint *)fVolume[volumeIndex].last)->nextVolumeHit=thisHit;
       fVolume[volumeIndex].last = (void *)thisHit;
       
-      
       //set row pointers
       if(fRow[(localrow-fRowMin)].first == NULL)
        fRow[(localrow-fRowMin)].first = (void *)thisHit;
@@ -262,22 +274,23 @@ void AliHLTTPCConfMapper::MainVertexTracking_a()
       return;
     }
 
+//  LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::MainVertexTracking","Tracking")<< "USE MAINVERTEX TRACKING -  ENTER A"<<ENDLOG;
   Double_t initCpuTime,cpuTime;
   initCpuTime = CpuTime();
 
-  SetPointers();
+//  SetPointers();
   SetVertexConstraint(true);
   cpuTime = CpuTime() - initCpuTime;
   if(fBench)
     LOG(AliHLTTPCLog::kInformational,"AliHLTTPCConfMapper::MainVertexTracking_a","Timing")
       <<AliHLTTPCLog::kDec<<"Setup finished in "<<cpuTime*1000<<" ms"<<ENDLOG;
-  
+  // LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::MainVertexTracking","Tracking")<< "USE MAINVERTEX TRACKING -  LEAVE A"<<ENDLOG;
 }
 
 void AliHLTTPCConfMapper::MainVertexTracking_b()
 {
   //Tracking with vertex constraint.
-
+//LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::MainVertexTracking","Tracking")<< "USE MAINVERTEX TRACKING -  ENTER B"<<ENDLOG;
   if(!fParamSet[(Int_t)kTRUE])
     {
       LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::MainVertexTracking","Parameters")<<AliHLTTPCLog::kDec<<
@@ -293,12 +306,13 @@ void AliHLTTPCConfMapper::MainVertexTracking_b()
   if(fBench)
     LOG(AliHLTTPCLog::kInformational,"AliHLTTPCConfMapper::MainVertexTracking_b","Timing")
       <<AliHLTTPCLog::kDec<<"Main Tracking finished in "<<cpuTime*1000<<" ms"<<ENDLOG;
+//  LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::MainVertexTracking","Tracking")<< "USE MAINVERTEX TRACKING -  LEAVE B"<<ENDLOG;
 }
 
 void AliHLTTPCConfMapper::MainVertexTracking()
 {
   //Tracking with vertex constraint.
-
+//LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::MainVertexTracking","Tracking")<< "USE MAINVERTEX TRACKING -  ENTER"<<ENDLOG;
   if(!fParamSet[(Int_t)kTRUE])
     {
       LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::MainVertexTracking","Parameters")<<AliHLTTPCLog::kDec<<
@@ -309,7 +323,7 @@ void AliHLTTPCConfMapper::MainVertexTracking()
   Double_t initCpuTime,cpuTime;
   initCpuTime = CpuTime();
   
-  SetPointers();
+//  SetPointers();
   SetVertexConstraint(true);
       
   ClusterLoop();
@@ -318,7 +332,7 @@ void AliHLTTPCConfMapper::MainVertexTracking()
   if(fBench)
     LOG(AliHLTTPCLog::kInformational,"AliHLTTPCConfMapper::MainVertexTracking","Timing")<<AliHLTTPCLog::kDec<<
       "Tracking finished in "<<cpuTime*1000<<" ms"<<ENDLOG;
-  
+//  LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::MainVertexTracking","Tracking")<< "USE MAINVERTEX TRACKING -  LEAVE"<<ENDLOG;
   return;
 }
 
@@ -328,7 +342,7 @@ void AliHLTTPCConfMapper::NonVertexTracking()
   //in order to do tracking on the remaining clusters.
   //The conformal mapping is now done with respect to the first cluster
   //assosciated with this track.
-  
+//    LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::NonVertexTracking","Tracking")<< "USE NONVERTEX TRACKING -  ENTER"<<ENDLOG;
   if(!fParamSet[(Int_t)kFALSE])
     {
       LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::NonVertexTracking","Parameters")<<AliHLTTPCLog::kDec<<
@@ -340,6 +354,8 @@ void AliHLTTPCConfMapper::NonVertexTracking()
   ClusterLoop();
   LOG(AliHLTTPCLog::kInformational,"AliHLTTPCConfMapper::NonVertexTracking","ntracks")<<AliHLTTPCLog::kDec<<
     "Number of nonvertex tracks found: "<<(nTracks-fMainVertexTracks)<<ENDLOG;
+
+//  LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::NonVertexTracking","Tracking")<< "USE NONVERTEX TRACKING -  LEAVE"<<ENDLOG;
   return;
 }
 
@@ -368,7 +384,7 @@ void AliHLTTPCConfMapper::NonVertexSettings(Int_t trackletlength, Int_t tracklen
   SetTrackletLength(trackletlength,(Bool_t)false);
   SetRowScopeTracklet(rowscopetracklet, (Bool_t)false);
   SetRowScopeTrack(rowscopetrack, (Bool_t)false);
-  SetMinPoints(tracklength,(Bool_t)false);
+  SetMinPoints(tracklength,(Bool_t)false);  
   SetParamDone(kFALSE);
 }
 
@@ -396,34 +412,43 @@ void AliHLTTPCConfMapper::SetTrackletCuts(Double_t maxangle,Double_t goodDist, B
 }
 
 void AliHLTTPCConfMapper::ClusterLoop()
-{
+{ 
+//    LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::Clusterloop","Tracking")<< "USE CLUSTERLOOP NVT -  ENTER"<<ENDLOG;
   //Loop over hits, starting at outermost padrow, and trying to build segments.
   
   //Check if there are not enough clusters to make a track in this sector
   //Can happen in pp events.
   if(fClustersUnused < fMinPoints[fVertexConstraint])
     return;
-  
+//  LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::Clusterloop","Tracking")<< "USE CLUSTERLOOP NVT -  0"<<ENDLOG;
   Int_t row_segm,lastrow = fRowMin + fMinPoints[fVertexConstraint];
   AliHLTTPCConfMapPoint *hit;
   
   //Loop over rows, and try to create tracks from the hits.
   //Starts at the outermost row, and loops as long as a track can be build, due to length.
-  
+//  LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::Clusterloop","Tracking")<< "USE CLUSTERLOOP: row_sgm="<< row_segm << " fRowMax="<< fRowMax << "lastrow=" 
+//                                                                      << lastrow << ENDLOG;
   for(row_segm = fRowMax; row_segm >= lastrow; row_segm--)
     {
-      if(fRow[(row_segm-fRowMin)].first && ((AliHLTTPCConfMapPoint*)fRow[(row_segm-fRowMin)].first)->GetPadRow() < fRowMin + 1)
-       break;
-
-      for(hit = (AliHLTTPCConfMapPoint*)fRow[(row_segm-fRowMin)].first; hit!=0; hit=hit->nextRowHit)
-       {
-         if(hit->GetUsage() == true)
+       if(fRow[(row_segm-fRowMin)].first && ((AliHLTTPCConfMapPoint*)fRow[(row_segm-fRowMin)].first)->GetPadRow() < fRowMin + 1){
+           break;
+       } 
+//     LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::Clusterloop","Tracking")<< "USE CLUSTERLOOP NVT - xxx= "<< fRow[(row_segm-fRowMin)].first << ENDLOG;
+                                                                           
+     for(hit = (AliHLTTPCConfMapPoint*)fRow[(row_segm-fRowMin)].first; hit!=0; hit=hit->nextRowHit)
+     {
+//      LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::Clusterloop","Tracking")<< "USE CLUSTERLOOP NVT - www" <<  ENDLOG;
+        if(hit->GetUsage() == true){
+//             LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::Clusterloop","Tracking")<< "USE CLUSTERLOOP NVT -  2"<<ENDLOG;
            continue;
-         else
-           CreateTrack(hit);
+           }
+         else  {
+             //LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::Clusterloop","Tracking")<< "=================== CALL CREATE TRACK  : HITNUMMER:"<< hit->GetHitNumber() << ENDLOG;
+             CreateTrack(hit);
+         }
        }
     }
-  
+//  LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::Clusterloop","Tracking")<< "USE CLUSTERLOOP NVT -  LEAVE"<<ENDLOG;
   return;
 }
 
@@ -449,21 +474,22 @@ void AliHLTTPCConfMapper::CreateTrack(AliHLTTPCConfMapPoint *hit)
   //set conformal coordinates if we are looking for non vertex tracks
   if(!fVertexConstraint) 
     {
+       //LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::Create Track","Tracking")<< "====== 1 =====" << ENDLOG;
       hit->SetAllCoord(hit);
     }
-  
+
   //fill fit parameters of initial track:
   track->UpdateParam(hit); //here the number of hits is incremented.
   trackhitnumber[track->GetNumberOfPoints()-1] = hit->GetHitNumber();
   
   Double_t dx,dy;
   //create tracklets:
-  
+  //LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::CreateTrack","Tracking")<< "=========== OK 0 === " << ENDLOG;
   for(point=1; point<fTrackletLength[fVertexConstraint]; point++)
     {
       if((closest_hit = GetNextNeighbor(hit)))
        {//closest hit exist
-         
+           // LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::CreateTrack","Tracking")<< "=========== OK 0  01 === " << ENDLOG;
          //   Calculate track length in sz plane
          dx = ((AliHLTTPCConfMapPoint*)closest_hit)->GetX() - ((AliHLTTPCConfMapPoint*)hit)->GetX();
          dy = ((AliHLTTPCConfMapPoint*)closest_hit)->GetY() - ((AliHLTTPCConfMapPoint*)hit)->GetY();
@@ -482,6 +508,7 @@ void AliHLTTPCConfMapper::CreateTrack(AliHLTTPCConfMapPoint *hit)
        }
       else
        {
+           //LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::CreateTrack","Tracking")<< "=========== OK 0 02 === " << ENDLOG;
          //closest hit does not exist:
          track->DeleteCandidate();
          fTrack->RemoveLast();
@@ -489,11 +516,11 @@ void AliHLTTPCConfMapper::CreateTrack(AliHLTTPCConfMapPoint *hit)
          point = fTrackletLength[fVertexConstraint];
        }
     }
-  
+  //LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::CreateTrack","Tracking")<< "=========== OK 1 === " << ENDLOG;
   //tracklet is long enough to be extended to a track
   if(track->GetNumberOfPoints() == fTrackletLength[fVertexConstraint])
     {
-      
+       //   LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::CreateTrack","Tracking")<< "=========== OK 100 === " << ENDLOG;
       track->SetProperties(true);
             
       if(TrackletAngle(track) > fMaxAngleTracklet[fVertexConstraint])
@@ -552,10 +579,11 @@ void AliHLTTPCConfMapper::CreateTrack(AliHLTTPCConfMapPoint *hit)
          track->fChiSq[0] = xyChi2;
          track->fChiSq[1] = szChi2;
          Double_t normalized_chi2 = (track->fChiSq[0]+track->fChiSq[1])/track->GetNumberOfPoints();
-         
+         //  LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::CreateTrack","Tracking")<< "=========== OK 2 === " << ENDLOG;
          //remove tracks with not enough points already now
          if(track->GetNumberOfPoints() < fMinPoints[fVertexConstraint] || normalized_chi2 > fTrackChi2Cut[fVertexConstraint])
-           {
+           {   
+               //      LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::CreateTrack","Tracking")<< "=#=#=#=#=#=#=#=#=#=#= BAD =#=#= " << ENDLOG;
              track->SetProperties(false);
              nTracks--;
              track->DeleteCandidate();
@@ -564,7 +592,8 @@ void AliHLTTPCConfMapper::CreateTrack(AliHLTTPCConfMapPoint *hit)
            }
          
          else
-           {
+           { 
+               //      LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::CreateTrack","Tracking")<< "=========== OK === " << ENDLOG;
              fClustersUnused -= track->GetNumberOfPoints();
              track->ComesFromMainVertex(fVertexConstraint);
              //mark track as main vertex track or not
@@ -578,7 +607,7 @@ void AliHLTTPCConfMapper::CreateTrack(AliHLTTPCConfMapPoint *hit)
        }//good tracklet
       
     }
-  
+  // if (nTracks > 0)  LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::CreateTrack","Tracking")<< "########### number of tracks:"<< nTracks << ENDLOG;
   return;
 }
 
@@ -587,7 +616,7 @@ AliHLTTPCConfMapPoint *AliHLTTPCConfMapper::GetNextNeighbor(AliHLTTPCConfMapPoin
 {
   //When forming segments: Finds closest hit to input hit
   //When forming tracks: Find closest hit to track fit.
-  
+  //LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::GetNExtNeighbor","Tracking")<< "###### 0 #####" << ENDLOG;
   Double_t dist,closest_dist = fMaxDist[fVertexConstraint];
   
   AliHLTTPCConfMapPoint *hit = NULL;
@@ -619,17 +648,19 @@ AliHLTTPCConfMapPoint *AliHLTTPCConfMapper::GetNextNeighbor(AliHLTTPCConfMapPoin
     min_row = fRowMin;
   if(max_row < fRowMin)
     return 0;  //reached the last padrow under consideration
-
   else
-    {
+  {// LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::GetNExtNeighbor","Tracking")<< "###### 00xxxxxxxxxxxxx1 #####" << ENDLOG;
       //loop over sub rows
       for(sub_row_segm=max_row; sub_row_segm>=min_row; sub_row_segm--)
        {
+//LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::GetNExtNeighbor","Tracking")<< "###### 00xxxxxxxxxxxxx2 #####" << ENDLOG;
          //loop over subsegments, in the order defined above.
          for(Int_t i=0; i<9; i++)  
            {
+//LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::GetNExtNeighbor","Tracking")<< "###### 00xxxxxxxxxxxxx3 #####" << ENDLOG;
              sub_phi_segm = start_hit->phiIndex + loop_phi[i];
-             
+             //  LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::GetNExtNeighbor","Tracking")<< "###### 00xxxxxxxxxxxxx4 #####" << ENDLOG;
              if(sub_phi_segm < 0 || sub_phi_segm >= fNumPhiSegment)
                continue;
              /*
@@ -642,65 +673,95 @@ AliHLTTPCConfMapPoint *AliHLTTPCConfMapper::GetNextNeighbor(AliHLTTPCConfMapPoin
              //loop over sub eta segments
              
              sub_eta_segm = start_hit->etaIndex + loop_eta[i];
-             
+             //  LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::GetNExtNeighbor","Tracking")<< "###### 00xxxxxxxxxxxxx5 #####" << ENDLOG;
              if(sub_eta_segm < 0 || sub_eta_segm >=fNumEtaSegment)
                continue;//segment exceeds bounds->skip it
              
              //loop over hits in this sub segment:
              volumeIndex= (sub_row_segm-fRowMin)*fNumPhiEtaSegmentPlusOne +
                sub_phi_segm*fNumEtaSegmentPlusOne + sub_eta_segm;
-             
+             //    LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::GetNExtNeighbor","Tracking")<< "###### 00xxxxxxxxxxxxx6 #####" << ENDLOG;
              if(volumeIndex<0)
                {//debugging
                  LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::GetNextNeighbor","Memory")<<AliHLTTPCLog::kDec<<
                    "VolumeIndex error "<<volumeIndex<<ENDLOG;
                }
-             
+             //  LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::GetNExtNeighbor","Tracking")<< "###### 00xxxxxxxxxxxxx6a #####" << ENDLOG;
              for(hit = (AliHLTTPCConfMapPoint*)fVolume[volumeIndex].first;
                  hit!=0; hit = hit->nextVolumeHit)
                {
-                 
+                   //    LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::GetNExtNeighbor","Tracking")<< "###### 00xxxxxxxxxxxxx7 #####" << ENDLOG;
                  if(!hit->GetUsage())
                    {//hit was not used before
-                     
+                       //             LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::GetNExtNeighbor","Tracking")<< "###### 00xxxxxxxxxxxxx8 #####" << ENDLOG;
                      //set conformal mapping if looking for nonvertex tracks:
                      if(!fVertexConstraint)
                        {
                          hit->SetAllCoord(start_hit);
                        }
-                    
+//                   LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::GetNExtNeighbor","Tracking")<< "###### 00xxxxxxxxxxxxx9 #####" << ENDLOG;
                      if(track)//track search - look for nearest neighbor to extrapolated track
                        {
-                         if(!VerifyRange(start_hit,hit))
-                           continue;
-                                                 
+                           // LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::GetNExtNeighbor","Tracking")<< "###### 00xxxxxxxxxxxxx10 #####" << ENDLOG;
+// --JMT---------------------- MODIFY --------------------------------------------------------------------------
+                               if (fVertexConstraint) {
+                                   if(!VerifyRange(start_hit,hit))
+                                       continue;
+                               }
+
+#if 0
+                               if(!VerifyRange(start_hit,hit))
+                                   continue;
+#endif
+// --JMT---------------------- MODIFY --------------------------------------------------------------------------
+                               //   LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::GetNExtNeighbor","Tracking")<< "###### 00xxxxxxxxxxxxx11 #####" << ENDLOG;                    
                          test_hit = EvaluateHit(start_hit,hit,track);
-                         
-                         if(test_hit == 0)//chi2 not good enough, keep looking
-                           continue;
-                         else if(test_hit==2)//chi2 good enough, return it
-                           return hit;
-                         else
+                         //LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::GetNExtNeighbor","Tracking")<< "###### 00xxxxxxxxxxxxx12 #####" << ENDLOG;                   
+                         if(test_hit == 0){//chi2 not good enough, keep looking
+                             // LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::GetNExtNeighbor","Tracking")<< "###### 0x1x0 #####" << ENDLOG;
+                             continue;
+                         }
+                         else if(test_hit==2){//chi2 good enough, return it 
+                             //  LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::GetNExtNeighbor","Tracking")<< "###### 0x2x0 #####" << ENDLOG;
+                             return hit;}
+                         else{
+                             //    LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::GetNExtNeighbor","Tracking")<< "###### 0x3x0 #####" << ENDLOG;
                            closest_hit = hit;//chi2 acceptable, but keep looking
+                       }
                          
                        }//track search
                      
                      else //tracklet search, look for nearest neighbor
                        {
-                         
+                           //  LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::GetNExtNeighbor","Tracking")<< "###### 00xxxxxxxxxxxxx-100 #####" << ENDLOG;
                          if((dist=CalcDistance(start_hit,hit)) < closest_dist)
-                           {
-                             if(!VerifyRange(start_hit,hit))
-                               continue;
+                           {  
+// --JMT---------------------- MODIFY --------------------------------------------------------------------------
+                               if (fVertexConstraint) {
+                                   //   LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::GetNExtNeighbor","Tracking")<< "###### 00xxxxxxxxxxxxx-101 #####" << ENDLOG;
+                                   if(!VerifyRange(start_hit,hit)){
+                                       //LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::GetNExtNeighbor","Tracking")<< "###### 00xxxxxxxxxxxxx-102 #####" << ENDLOG;
+                                       continue;
+                                   }
+                               }
+#if 0
+                               if(!VerifyRange(start_hit,hit))
+                                   continue;
+#endif
+// --JMT---------------------- MODIFY --------------------------------------------------------------------------
                              closest_dist = dist;
                              closest_hit = hit;
-                        
+                             // LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::GetNExtNeighbor","Tracking")<< "###### 00xxxxxxxxxxxxx-103 #####" << ENDLOG;
                              //if this hit is good enough, return it:
-                             if(closest_dist < fGoodDist)
-                               return closest_hit;
+                             if(closest_dist < fGoodDist){
+                                 //LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::GetNExtNeighbor","Tracking")<< "###### 00xxxxxxxxxxxxx-104 #####" << ENDLOG;
+                                 return closest_hit;
+                             }
                            }
-                         else
-                           continue;//sub hit was farther away than a hit before
+                         else {
+                             //    LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::GetNExtNeighbor","Tracking")<< "###### 00xxxxxxxxxxxxx-105 #####" << ENDLOG;
+                             continue;//sub hit was farther away than a hit before
+                         }
                          
                        }//tracklet search
                      
@@ -708,7 +769,7 @@ AliHLTTPCConfMapPoint *AliHLTTPCConfMapper::GetNextNeighbor(AliHLTTPCConfMapPoin
                  
                  else continue; //sub hit was used before
                  
-               }//loop over hits in sub segment
+               }//loop over hits in sub segment ------------END 6A
                      
            }//loop over sub segments
                  
@@ -717,6 +778,8 @@ AliHLTTPCConfMapPoint *AliHLTTPCConfMapper::GetNextNeighbor(AliHLTTPCConfMapPoin
     }//else
 
   //closest hit found:
+
+  // LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::GetNExtNeighbor","Tracking")<< "###### 0000 #####"  << ENDLOG;
   if(closest_hit)// && closest_dist < mMaxDist)
     return closest_hit;
   else
@@ -781,14 +844,23 @@ Double_t AliHLTTPCConfMapper::CalcDistance(const AliHLTTPCConfMapPoint *hit1,con
 }
 
 Bool_t AliHLTTPCConfMapper::VerifyRange(const AliHLTTPCConfMapPoint *hit1,const AliHLTTPCConfMapPoint *hit2) const
-{
+{ 
   //Check if the hit are within reasonable range in phi and eta
   Double_t dphi,deta;//maxphi=0.1,maxeta=0.1;
   dphi = fabs(hit1->GetPhi() - hit2->GetPhi());
+//  LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::VerifyRange","Tracking")<< "|||||||||||||||||||||||||< phi1=" << hit1->GetPhi() << "   phi2="<< hit2->GetPhi() 
+  //                                                            << " dphi="  << dphi << " maxphi=" << fMaxPhi << "twopi=" << twopi << ENDLOG;
+
   if(dphi > pi) dphi = fabs(twopi - dphi);
+
   if(dphi > fMaxPhi) return false;
   
   deta = fabs(hit1->GetEta() - hit2->GetEta());
+
+  // LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::VerifyRange","Tracking")<< "|||||||||||||||||||||||||< eta1=" << hit1->GetEta() << "   eta2="<< hit2->GetEta() 
+  //                                                            << " deta="  << deta << " maxeta=" <<  fMaxEta << ENDLOG;
+
   if(deta > fMaxEta) return false;
 
   return true;
@@ -868,13 +940,11 @@ Int_t AliHLTTPCConfMapper::FillTracks()
   //which should be done in order to get nice tracks.
   
   Int_t num_of_tracks = nTracks;
-  LOG(AliHLTTPCLog::kInformational,"AliHLTTPCConfMapper::FillTracks","nTracks")<<AliHLTTPCLog::kDec<<
-    "Number of found tracks: "<<nTracks<<ENDLOG;
+  LOG(AliHLTTPCLog::kInformational,"AliHLTTPCConfMapper::FillTracks","nTracks")<<AliHLTTPCLog::kDec<< " Number of found tracks: "<<nTracks<<ENDLOG;
   
   if(nTracks == 0)
     {
-      LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::FillTracks","nTracks")<<AliHLTTPCLog::kDec<<
-       "No tracks found!!"<<ENDLOG;
+      LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::FillTracks","nTracks")<<AliHLTTPCLog::kDec<<" No tracks found!!"<<ENDLOG;
       return 0;
     }
   
@@ -883,7 +953,7 @@ Int_t AliHLTTPCConfMapper::FillTracks()
     {
       AliHLTTPCConfMapTrack *track = (AliHLTTPCConfMapTrack*)fTrack->GetTrack(i);
       track->Fill(fVertex,fMaxDca);
-      
+      LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::Filltracks","TEST")<< "====C====== r=" << track->GetRadius() << ENDLOG;
     }
   return 1;
 
index 160f9ac1aa3c711d65653931ee6cb71de1456323..d50261c11430ac709064ca94c0d1b53575f32de1 100644 (file)
@@ -97,7 +97,7 @@ class AliHLTTPCConfMapper {
   void SetRowScopeTracklet(Int_t f, Bool_t vertex_constraint)      { fRowScopeTracklet[(Int_t)vertex_constraint] = f; }  // sets one row scope for tracklets
   void SetMaxAngleTracklet(Double_t f, Bool_t vertex_constraint)   { fMaxAngleTracklet[(Int_t)vertex_constraint] = f; }  // sets one angle cut
 
-  void SetPointers();
   Double_t CpuTime();
   void SetParamDone(Bool_t vertex_constraint) {fParamSet[(Int_t)vertex_constraint] = kTRUE;}
   
@@ -107,7 +107,7 @@ class AliHLTTPCConfMapper {
   AliHLTTPCConfMapper();
   //  AliHLTTPCConfMapper(AliTPCParam *param,AliHLTTPCVertex *vertex,Bool_t bench=(Bool_t)false);
   virtual ~AliHLTTPCConfMapper();
-  
+  void SetPointers();   /////////// JMT -----------------
   void InitVolumes();
   void InitSector(Int_t sector,Int_t *rowrange=0,Float_t *etarange=0);
   void SetVertex(AliHLTTPCVertex *vertex){fVertex = vertex;}
@@ -119,6 +119,7 @@ class AliHLTTPCConfMapper {
                          Int_t rowscopetracklet, Int_t rowscopetrack,Double_t maxphi=0.1,Double_t maxeta=0.1);
   void NonVertexSettings(Int_t trackletlength, Int_t tracklength, 
                         Int_t rowscopetracklet, Int_t rowscopetrack);
+
   Bool_t ReadHits(UInt_t count, AliHLTTPCSpacePointData* hits );
   void ClusterLoop();
   void CreateTrack(AliHLTTPCConfMapPoint *hit);
index 2c85b15fbe2309784c55b9e2120519f7f471c939..1f0800dc553e063964184b5df37ccf785de46c04 100644 (file)
@@ -56,6 +56,10 @@ AliHLTTPCSliceTrackerComponent::AliHLTTPCSliceTrackerComponent()
     fMultiplicity = 4000;
     fBField = 0.4;
     fDoPP = false;
+// --JMT---------------------- NEW ----------------------------            
+    fnonvertextracking = kFALSE;
+    fmainvertextracking = kTRUE;
+// --JMT---------------------- NEW ----------------------------
     }
 
 AliHLTTPCSliceTrackerComponent::~AliHLTTPCSliceTrackerComponent()
@@ -109,13 +113,45 @@ void AliHLTTPCSliceTrackerComponent::SetTrackerParam(Int_t phi_segments, Int_t e
     fTracker->SetNSegments(phi_segments,eta_segments);
     fTracker->SetMaxDca(min_pt_fit);
     //   fTracker->MainVertexSettings(trackletlength,tracklength,rowscopetracklet,rowscopetrack);
+
+// --JMT---------------------- NEW ----------------------------
+#if 0
     fTracker->SetTrackCuts(hitChi2Cut,goodHitChi2,trackChi2Cut,maxdist,vertexConstraints);
     fTracker->SetTrackletCuts(maxangle,goodDist,vertexConstraints);
-    
-    if( vertexConstraints )
+#endif         
+    Logging( kHLTLogError, "HLT::TPCSliceTracker::SetTrackerParam", "Tracking", "==============================" );
+
+    if ( fmainvertextracking == kTRUE && fnonvertextracking == kFALSE){
+       fTracker->SetTrackCuts(hitChi2Cut,goodHitChi2,trackChi2Cut,maxdist,kTRUE);
+       fTracker->SetTrackletCuts(maxangle,goodDist,kTRUE);
+
+       fTracker->MainVertexSettings( trackletlength, tracklength, rowscopetracklet, rowscopetrack, maxphi, maxeta);    
+       Logging( kHLTLogError, "HLT::TPCSliceTracker::SetTrackerParam", "Tracking", "MAINVERTEXTRACKING" );
+    }
+    else if ( fmainvertextracking == kTRUE && fnonvertextracking == kTRUE){
+       fTracker->SetTrackCuts(hitChi2Cut,goodHitChi2,trackChi2Cut,maxdist,kTRUE);
+       fTracker->SetTrackCuts(hitChi2Cut,goodHitChi2,trackChi2Cut,maxdist,kFALSE);
+       fTracker->SetTrackletCuts(maxangle,goodDist,kTRUE);
+       fTracker->SetTrackletCuts(maxangle,goodDist,kFALSE);
+
        fTracker->MainVertexSettings( trackletlength, tracklength, rowscopetracklet, rowscopetrack, maxphi, maxeta);
-    else
+       fTracker->NonVertexSettings( trackletlength, tracklength, rowscopetracklet, rowscopetrack);     
+       Logging( kHLTLogError, "HLT::TPCSliceTracker::SetTrackerParam", "Tracking", "MAINVERTEXTRACKING - NONVERTEXTRACKING" );
+    }
+    else if ( fmainvertextracking == kFALSE && fnonvertextracking == kTRUE){
+       fTracker->SetTrackCuts(hitChi2Cut,goodHitChi2,trackChi2Cut,maxdist,kFALSE);
+       fTracker->SetTrackletCuts(maxangle,goodDist,kFALSE);
+
        fTracker->NonVertexSettings( trackletlength, tracklength, rowscopetracklet, rowscopetrack);
+       Logging( kHLTLogError, "HLT::TPCSliceTracker::SetTrackerParam", "Tracking", "NONVERTEXTRACKING" );
+    }
+
+
+#if 0
+    if( vertexConstraints ) fTracker->MainVertexSettings( trackletlength, tracklength, rowscopetracklet, rowscopetrack, maxphi, maxeta);
+    else fTracker->NonVertexSettings( trackletlength, tracklength, rowscopetracklet, rowscopetrack);
+#endif 
+// --JMT---------------------- NEW ----------------------------
     //fTracker->SetParamDone(true);
 
     //AliHLTTPC::SetVertexFit( kFALSE );
@@ -125,6 +161,10 @@ void AliHLTTPCSliceTrackerComponent::SetTrackerParam(Int_t phi_segments, Int_t e
 
 void AliHLTTPCSliceTrackerComponent::SetTrackerParam( bool doPP, int multiplicity, double bField )
     {
+    AliHLTTPCTransform::SetBField( bField );
+    Logging( kHLTLogDebug, "HLT::TPCSliceTracker::DoInit", "BField", "Setting b field to %f\n", bField );
+    Logging( kHLTLogDebug, "HLT::TPCSliceTracker::DoInit", "BField", "B field is  %f\n",AliHLTTPCTransform::GetBFieldValue()); 
+
     if ( doPP )
        {
        //tracker->SetClusterFinderParam(xyerror,zerror,kTRUE); // ??
@@ -249,8 +289,8 @@ void AliHLTTPCSliceTrackerComponent::SetTrackerParam( bool doPP, int multiplicit
                    }
                break;
            }
-       Logging( kHLTLogDebug, "HLT::TPCSliceTracker::DoInit", "BField", "Setting b field to %f\n", bfs[closestBf] );
-       AliHLTTPCTransform::SetBField( bfs[closestBf] );
+//     Logging( kHLTLogDebug, "HLT::TPCSliceTracker::DoInit", "BField", "Setting b field to %f\n", bfs[closestBf] );
+//     AliHLTTPCTransform::SetBField( bfs[closestBf] );
 
        }
     }
@@ -267,7 +307,12 @@ int AliHLTTPCSliceTrackerComponent::DoInit( int argc, const char** argv )
     fTracker = new AliHLTTPCConfMapper();
     fVertex = new AliHLTTPCVertex();
     fEta[0] = 0.;
-    fEta[1] = 1.1;
+
+#if 0
+    fEta[1] = 10.1;
+#else
+    fEta[1] = 1.1; 
+#endif
     fDoNonVertex = false;
     fMultiplicity = 4000;
     fBField = 0.4;
@@ -309,15 +354,32 @@ int AliHLTTPCSliceTrackerComponent::DoInit( int argc, const char** argv )
            fBField = strtod( argv[i+1], &cpErr );
            if ( *cpErr )
                {
-               Logging( kHLTLogError, "HLT::TPCSliceTracker::DoInit", "Missing multiplicity", "Cannot convert B-field specifier '%s'.", argv[i+1] );
+// --JMT---------------------- MODIFY ----------------------------
+               Logging( kHLTLogError, "HLT::TPCSliceTracker::DoInit", "Missing B-field", "Cannot convert B-field specifier '%s'.", argv[i+1] );
+// --JMT---------------------- MODIFY ----------------------------
                return EINVAL;
                }
            i += 2;
            continue;
            }
+// --JMT---------------------- NEW ----------------------------
+       if ( !strcmp( argv[i], "-nonvertextracking" ) ){
+           fnonvertextracking = kTRUE;
+           i++;
+           continue;       
+       }
+       
+       if ( !strcmp( argv[i], "-mainvertextrackingoff" ) ){    
+           fmainvertextracking = kFALSE;
+           i++;
+           continue;       
+       }
+// --JMT---------------------- NEW ----------------------------
+
        Logging(kHLTLogError, "HLT::TPCSliceTracker::DoInit", "Unknown Option", "Unknown option '%s'", argv[i] );
        return EINVAL;
        }
+
     SetTrackerParam( fDoPP, fMultiplicity, fBField );
     return 0;
     }
@@ -497,12 +559,39 @@ int AliHLTTPCSliceTrackerComponent::DoEvent( const AliHLTComponent_EventData& ev
        }
 
     outPtr = (AliHLTTPCTrackletData*)(outBPtr);
+
+// --JMT---------------------- NEW ----------------------------
+
+    fTracker->SetPointers();
+    if ( fmainvertextracking == kTRUE && fnonvertextracking == kFALSE){        
+       Logging( kHLTLogDebug, "HLT::TPCSliceTracker::DoEvent", "Tracking", " ---MAINVERTEXTRACKING---");
+       fTracker->MainVertexTracking_a();
+       fTracker->MainVertexTracking_b();
+       fTracker->FillTracks();
+    }
+    else if ( fmainvertextracking == kTRUE && fnonvertextracking == kTRUE){    
+       Logging( kHLTLogDebug, "HLT::TPCSliceTracker::DoEvent", "Tracking", " ---MAINVERTEXTRACKING---");
+       fTracker->MainVertexTracking_a();
+       fTracker->MainVertexTracking_b();
+       fTracker->FillTracks(); 
+       Logging( kHLTLogDebug, "HLT::TPCSliceTracker::DoEvent", "Tracking", " ---NONVERTEXTRACKING---");
+       fTracker->NonVertexTracking();
+    }
+    else if ( fmainvertextracking == kFALSE && fnonvertextracking == kTRUE){
+       Logging( kHLTLogDebug, "HLT::TPCSliceTracker::DoEvent", "Tracking", " ---NONVERTEXTRACKING---");
+       fTracker->NonVertexTracking();  
+       fTracker->FillTracks(); 
+    }
+
+#if 0
     fTracker->MainVertexTracking_a();
     fTracker->MainVertexTracking_b();
     fTracker->FillTracks();
-    
-    if ( fDoNonVertex )
-       fTracker->NonVertexTracking();//Do a second pass for nonvertex tracks
+    if (fDoNonVertex) fTracker->NonVertexTracking();//Do a second pass for nonvertex tracks
+#endif
+// --JMT---------------------- NEW ----------------------------
+
+
     
     // XXX Do track merging??
     
index f20745a141b3ce121fd328e16e4e43475951d45b..8f65512420a8fec4105ddfd6d9f9b63d5c179d2f 100644 (file)
@@ -69,6 +69,11 @@ class AliHLTTPCSliceTrackerComponent : public AliHLTProcessor
        int fMultiplicity;
        double fBField;
 
+// --JMT---------------------- NEW ----------------------------
+       Bool_t fnonvertextracking;      // enable NON vertex tracking
+       Bool_t fmainvertextracking;     // enable MAIN vertex tracking
+// --JMT---------------------- NEW ----------------------------
+
        ClassDef(AliHLTTPCSliceTrackerComponent, 0)
 
     };
index cd85764af55fbbd739e4f66b823a4f8ad72ee2a9..8dcfdfeb3adaa4e0f4014a88f1454ec32a86acba 100644 (file)
@@ -15,8 +15,9 @@ struct AliHLTTPCSpacePointData{
   UChar_t fPadRow;
   Float_t fSigmaY2; //error (former width) of the clusters
   Float_t fSigmaZ2; //error (former width) of the clusters
-  UInt_t fCharge;
-  Bool_t fUsed;
+  UInt_t fCharge;  
+  Bool_t fUsed;     // only used in AliHLTTPCDisplay 
+  Int_t fTrackN;    // only used in AliHLTTPCDisplay 
 };
 typedef struct AliHLTTPCSpacePointData AliHLTTPCSpacePointData;
 
index d1ae63b9047809c0a439198ada3a224f9423ff99..af363448445569cb0641066f4b43f3a3b05db67a 100644 (file)
@@ -60,7 +60,7 @@ AliHLTTPCTrack::AliHLTTPCTrack()
 }
 
 void AliHLTTPCTrack::Set(AliHLTTPCTrack *tpt){
-  
+  LOG(AliHLTTPCLog::kError,"AliHLTTPCTrack::Set","TEST")<< "=========== ENTER ======= " << ENDLOG;
   SetRowRange(tpt->GetFirstRow(),tpt->GetLastRow());
   SetPhi0(tpt->GetPhi0());
   SetKappa(tpt->GetKappa());
@@ -78,7 +78,8 @@ void AliHLTTPCTrack::Set(AliHLTTPCTrack *tpt){
 }
 
 Int_t AliHLTTPCTrack::Compare(const AliHLTTPCTrack *track) const
-{
+{ 
+    LOG(AliHLTTPCLog::kError,"AliHLTTPCTrack::Compare","TEST")<< "=========== ENTER ======= " << ENDLOG;
   if(track->GetNHits() < GetNHits()) return 1;
   if(track->GetNHits() > GetNHits()) return -1;
   return 0;
@@ -119,7 +120,7 @@ void AliHLTTPCTrack::Rotate(Int_t slice,Bool_t tolocal)
   //If flag tolocal is set, the track is rotated
   //to local coordinates.
 
-  
+   LOG(AliHLTTPCLog::kError,"AliHLTTPCTrack::Rotate","TEST")<< "=========== ENTER ======= " << ENDLOG;
   Float_t psi[1] = {GetPsi()};
   if(!tolocal)
     AliHLTTPCTransform::Local2GlobalAngle(psi,slice);
@@ -164,6 +165,8 @@ void AliHLTTPCTrack::Rotate(Int_t slice,Bool_t tolocal)
 }
 
 void AliHLTTPCTrack::CalculateHelix(){
+ LOG(AliHLTTPCLog::kError,"AliHLTTPCTrack::claculateHelix","TEST")<< "=========== ENTER ======= " << ENDLOG;
+
   //Calculate Radius, CenterX and CenterY from Psi, X0, Y0
   //
   
@@ -188,7 +191,7 @@ Double_t AliHLTTPCTrack::GetCrossingAngle(Int_t padrow,Int_t slice)
   //point. This is done by rotating the radius vector by 90 degrees;
   //rotation matrix: (  0  1 )
   //                 ( -1  0 )
-
+ LOG(AliHLTTPCLog::kError,"AliHLTTPCTrack::getcrossingangle","TEST")<< "=========== ENTER ======= " << ENDLOG;
   Float_t angle=0;//Angle perpendicular to the padrow in local coordinates
   if(slice>=0)//Global coordinates
     {
@@ -220,7 +223,7 @@ Double_t AliHLTTPCTrack::GetCrossingAngle(Int_t padrow,Int_t slice)
 Bool_t AliHLTTPCTrack::GetCrossingPoint(Int_t padrow,Float_t *xyz)
 {
   //Assumes the track is given in local coordinates
-  
+   LOG(AliHLTTPCLog::kError,"AliHLTTPCTrack::getcrossingpoint","TEST")<< "=========== ENTER ======= " << ENDLOG;
   if(!IsLocal())
     {
       cerr<<"GetCrossingPoint: Track is given on global coordinates"<<endl;
@@ -260,7 +263,8 @@ Bool_t AliHLTTPCTrack::GetCrossingPoint(Int_t padrow,Float_t *xyz)
 
 Bool_t AliHLTTPCTrack::CalculateReferencePoint(Double_t angle,Double_t radius){
   // Global coordinate: crossing point with y = ax+ b; a=tan(angle-AliHLTTPCTransform::Pi()/2);
-  //
+  // 
+LOG(AliHLTTPCLog::kError,"AliHLTTPCTrack::calculatereferencepoint","TEST")<< "=========== ENTER ======= " << ENDLOG;
   const Double_t rr=radius;//132; //position of reference plane
   const Double_t xr = cos(angle) * rr;
   const Double_t yr = sin(angle) * rr;
@@ -310,7 +314,9 @@ Bool_t AliHLTTPCTrack::CalculateReferencePoint(Double_t angle,Double_t radius){
 
 Bool_t AliHLTTPCTrack::CalculateEdgePoint(Double_t angle){
   // Global coordinate: crossing point with y = ax; a=tan(angle);
-  //
+  // 
+
+LOG(AliHLTTPCLog::kError,"AliHLTTPCTrack::calculateedgepoint","TEST")<< "=========== ENTER ======= " << ENDLOG;
   Double_t rmin=AliHLTTPCTransform::Row2X(AliHLTTPCTransform::GetFirstRow(-1));  //min Radius of TPC
   Double_t rmax=AliHLTTPCTransform::Row2X(AliHLTTPCTransform::GetLastRow(-1)); //max Radius of TPC
 
@@ -374,6 +380,7 @@ Bool_t AliHLTTPCTrack::CalculateEdgePoint(Double_t angle){
 Bool_t AliHLTTPCTrack::CalculatePoint(Double_t xplane){
   // Local coordinate: crossing point with x plane
   //
+LOG(AliHLTTPCLog::kError,"AliHLTTPCTrack::calculatepoint","TEST")<< "=========== ENTER ======= " << ENDLOG;
   Double_t racine = pow(fRadius,2)-pow(xplane-fCenterX,2);
   if(racine<0) return IsPoint(kFALSE);
   Double_t rootRacine = sqrt(racine);
@@ -407,6 +414,8 @@ Bool_t AliHLTTPCTrack::CalculatePoint(Double_t xplane){
 
 void AliHLTTPCTrack::UpdateToFirstPoint()
 {
+LOG(AliHLTTPCLog::kError,"AliHLTTPCTrack::updatetofirstpoint","TEST")<< "=========== ENTER ======= " << ENDLOG;
+
   //Update track parameters to the innermost point on the track.
   //Basically it justs calculates the intersection of the track, and a cylinder
   //with radius = r(innermost point). Then the parameters are updated to this point.
@@ -460,7 +469,9 @@ void AliHLTTPCTrack::UpdateToFirstPoint()
   Double_t tPsi = tPhi - GetCharge() * 0.5 * pi / abs(GetCharge()) ;
   if ( tPsi > 2. * pi ) tPsi -= 2. * pi ;
   if ( tPsi < 0.        ) tPsi += 2. * pi ;
-  
+
+  LOG(AliHLTTPCLog::kError,"AliHLTTPCTrack::updatetofirstpoint","TEST")<< "===1===" << "radius=" << radius  << " fR0=" << fR0 << ENDLOG;
+
   //And finally, update the track parameters
   SetCenterX(xc);
   SetCenterY(yc);
@@ -468,13 +479,15 @@ void AliHLTTPCTrack::UpdateToFirstPoint()
   SetPhi0(phi);
   SetFirstPoint(radius*cos(phi),radius*sin(phi),z);
   SetPsi(tPsi);
+ LOG(AliHLTTPCLog::kError,"AliHLTTPCTrack::updatetofirstpoint","TEST")<< "===2===" << "radius=" << radius  << " fR0=" << fR0 << ENDLOG;
 }
 
 void AliHLTTPCTrack::GetClosestPoint(AliHLTTPCVertex *vertex,Double_t &closest_x,Double_t &closest_y,Double_t &closest_z)
 {
   //Calculate the point of closest approach to the vertex
   
-  
+  LOG(AliHLTTPCLog::kError,"AliHLTTPCTrack::getclosestpoint","TEST")<< "=========== ENTER ======= " << ENDLOG;
+
   Double_t xc = GetCenterX() - vertex->GetX();//Shift the center of curvature with respect to the vertex
   Double_t yc = GetCenterY() - vertex->GetY();
   
index 317faa6f578f8d29e1df68907cb0b05bc38f6380..325bcbccfb2630453136bd2ef56ebef3c389f33d 100644 (file)
@@ -293,20 +293,24 @@ UInt_t AliHLTTPCTrackArray::WriteConfMapTracks(AliHLTTPCTrackSegmentData* tr){
     if(!track) continue;                           //use only present tracks
     AliHLTTPCConfMapPoint *hit = (AliHLTTPCConfMapPoint*)track->lastHit;
     AliHLTTPCConfMapPoint *lastHit = (AliHLTTPCConfMapPoint*)track->firstHit;
+/*
     tP->fX = hit->GetX();
     tP->fY = hit->GetY();
     tP->fZ = hit->GetZ();
     tP->fLastX = lastHit->GetX();
     tP->fLastY = lastHit->GetY();
     tP->fLastZ = lastHit->GetZ();
-   
-//    tP->fX = track->GetFirstPointX();
-//    tP->fY = track->GetFirstPointY();
-//    tP->fZ = track->GetFirstPointZ();
+*/   
+    tP->fX = track->GetFirstPointX();
+    tP->fY = track->GetFirstPointY();
+    tP->fZ = track->GetFirstPointZ();
+
     tP->fPt = track->GetPt();
-//    tP->fLastX = track->GetLastPointX();
-//    tP->fLastY = track->GetLastPointY();
-//    tP->fLastZ = track->GetLastPointZ();
+
+    tP->fLastX = track->GetLastPointX();
+    tP->fLastY = track->GetLastPointY();
+    tP->fLastZ = track->GetLastPointZ();
+
     tP->fPsi = track->GetPsi();
     tP->fTgl = track->GetTgl();
     tP->fCharge = track->GetCharge();
index a1c843821e9eba83aaf183aaf47f4ab69b10210a..2da82551d6f4016d87818714ca3a0bec5c0dd3c6 100644 (file)
@@ -5,7 +5,7 @@ dnl template for the configuration script for the Alice HLT
 dnl framework and components
 dnl 
 dnl ------------------------------------------------------------------
-AC_INIT([Alice High Level Trigger] , [0.1], [Matthias.Richter@ift.uib.no], alice-hlt)
+AC_INIT([Alice High Level Trigger] , [0.2], [Matthias.Richter@ift.uib.no], alice-hlt)
 
 dnl ------------------------------------------------------------------
 dnl the package from CVS contains the old Makefiles as well. In order to