Stand Alone tracker updated to use displaced primary vertices in the bending plane...
authormasera <masera@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sat, 31 Mar 2007 10:16:30 +0000 (10:16 +0000)
committermasera <masera@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sat, 31 Mar 2007 10:16:30 +0000 (10:16 +0000)
ITS/AliITSReconstructor.cxx
ITS/AliITStrackSA.cxx
ITS/AliITStrackerSA.cxx
ITS/AliITStrackerSA.h

index 9329687..c1bc36b 100644 (file)
@@ -171,6 +171,9 @@ AliTracker* AliITSReconstructor::CreateTracker(AliRunLoader* runLoader)const
   }
   else {
     tracker =  new AliITStrackerSA(0);  // inherits from AliITStrackerMI
+    AliITStrackerSA *sat=(AliITStrackerSA*)tracker;
+    if(selectedTracker.Contains("onlyITS"))sat->SetSAFlag(kTRUE);
+    if(sat->GetSAFlag())AliDebug(1,"Tracking Performed in ITS only\n");
   }
 
   TString selectedPIDmethod = GetOption();
index d8ccd60..70a235d 100755 (executable)
@@ -136,6 +136,13 @@ fNSA(0)
                   tanlambda,
                   curv/conv};
 
+
+  // dealing with the case B=0 (taken from AliTPCtrack.cxx)
+  Double_t p0=TMath::Sign(1/kMostProbablePt,sP[4]);
+  Double_t w0=sC[14]/(sC[14] + p0*p0), w1=p0*p0/(sC[14] + p0*p0);
+  sP[4] = w0*p0 + w1*sP[4];
+  sC[14]*=w1;
+                                                                              
   Set(sX,sAlpha,sP,sC);
 
   for(Int_t i=0; i<kMaxLayer; i++) fIndex[i] = 0;  // to be set explicitely
index 36a16a6..257139f 100644 (file)
@@ -45,6 +45,7 @@ ClassImp(AliITStrackerSA)
 //____________________________________________________________________________
 AliITStrackerSA::AliITStrackerSA():AliITStrackerMI(),
 fPhiEstimate(0),
+fITSStandAlone(0),
 fLambdac(0),
 fPhic(0),
 fCoef1(0),
@@ -67,6 +68,7 @@ fCluCoord(0){
 //____________________________________________________________________________
 AliITStrackerSA::AliITStrackerSA(const Char_t *geom):AliITStrackerMI(0),
 fPhiEstimate(0),
+fITSStandAlone(0),
 fLambdac(0),
 fPhic(0),
 fCoef1(0),
@@ -96,6 +98,7 @@ fCluCoord(0)
 //____________________________________________________________________________
 AliITStrackerSA::AliITStrackerSA(const Char_t *geom, AliESDVertex *vert):AliITStrackerMI(0),
 fPhiEstimate(0),
+fITSStandAlone(0),
 fLambdac(0),
 fPhic(0),
 fCoef1(0),
@@ -110,7 +113,7 @@ fListOfTracks(0),
 fITSclusters(0),
 fSixPoints(0),
 fCluLayer(0),
-fCluCoord(0) 
+fCluCoord(0)
 {
   // Standard constructor (Vertex is known and passed to this obj.)
   if (geom) {
@@ -123,6 +126,7 @@ fCluCoord(0)
 //____________________________________________________________________________
 AliITStrackerSA::AliITStrackerSA(const Char_t *geom, AliITSVertexer *vertexer):AliITStrackerMI(0),
 fPhiEstimate(0),
+fITSStandAlone(0),
 fLambdac(0),
 fPhic(0),
 fCoef1(0),
@@ -137,7 +141,7 @@ fListOfTracks(0),
 fITSclusters(0),
 fSixPoints(0),
 fCluLayer(0),
-fCluCoord(0)  
+fCluCoord(0)
 {
   // Standard constructor (Vertex is unknown - vertexer is passed to this obj)
   if (geom) {
@@ -151,6 +155,7 @@ fCluCoord(0)
 //____________________________________________________________________________
 AliITStrackerSA::AliITStrackerSA(const AliITStrackerSA& tracker):AliITStrackerMI(),
 fPhiEstimate(tracker.fPhiEstimate),
+fITSStandAlone(tracker.fITSStandAlone),
 fLambdac(tracker.fLambdac),
 fPhic(tracker.fPhic),
 fCoef1(tracker.fCoef1),
@@ -229,6 +234,24 @@ AliITStrackerSA::~AliITStrackerSA(){
 }
 
 //____________________________________________________________________________
+Int_t AliITStrackerSA::Clusters2Tracks(AliESD *event){
+// This method is used to find and fit the tracks. By default the corresponding
+// method in the parent class is invoked. In this way a combined tracking
+// TPC+ITS is performed. If the flag fITSStandAlone is true, the tracking
+// is done in the ITS only. In the standard reconstruction chain this option
+// can be set via AliReconstruction::SetOption("ITS","onlyITS")
+  Int_t rc=0;
+  if(!fITSStandAlone){
+    rc=AliITStrackerMI::Clusters2Tracks(event);
+  }
+  else {
+    AliDebug(1,"Stand Alone flag set: doing tracking in ITS alone\n");
+  }
+  if(!rc) rc=FindTracks(event);
+  return rc;
+}
+
+//____________________________________________________________________________
 void AliITStrackerSA::Init(){
   //  Reset all data members
     fPhiEstimate=0;
@@ -245,6 +268,7 @@ void AliITStrackerSA::Init(){
     SetWindowSizes();
     fITSclusters = 0;
     SetSixPoints();
+    SetSAFlag(kFALSE);
     fListOfTracks=new TObjArray(0,0);
     fCluLayer = 0;
     fCluCoord = 0;
@@ -418,7 +442,6 @@ Int_t AliITStrackerSA::FindTracks(AliESD* event){
        outtrack.UpdateTrackParams(tr2,AliESDtrack::kITSin);
        event->AddTrack(&outtrack);
        ntrack++;
-       
       }
        
 
@@ -823,8 +846,8 @@ Int_t AliITStrackerSA::SearchClusters(Int_t layer,Double_t phiwindow,Double_t la
     FindEquation(fPoint1[0],fPoint1[1],fPoint2[0],fPoint2[1],fPoint3[0],fPoint3[1],fCoef1,fCoef2,fCoef3);
     if (FindIntersection(fCoef1,fCoef2,fCoef3,-r*r,cx1,cy1,cx2,cy2)==0)
        return 0;
-    Double_t fi1=TMath::ATan2(cy1,cx1);
-    Double_t fi2=TMath::ATan2(cy2,cx2);
+    Double_t fi1=TMath::ATan2(cy1-fPoint1[1],cx1-fPoint1[0]);
+    Double_t fi2=TMath::ATan2(cy2-fPoint1[1],cx2-fPoint1[0]);
     fPhiEstimate=ChoosePoint(fi1,fi2,fPhic);
   }
 
@@ -1117,7 +1140,7 @@ void AliITStrackerSA::GetCoorAngles(AliITSRecPoint* cl,Double_t &phi,Double_t &l
   y=xyz[1];
   z=xyz[2];
  
-  phi=TMath::ATan2(y,x);
+  phi=TMath::ATan2(y-vertex[1],x-vertex[0]);
   lambda=TMath::ATan2(z-vertex[2],TMath::Sqrt((x-vertex[0])*(x-vertex[0])+(y-vertex[1])*(y-vertex[1])));
 }
 
index 7170da1..aa9344a 100644 (file)
@@ -33,7 +33,7 @@ class AliITStrackerSA : public AliITStrackerMI {
   AliITStrackerSA(const AliITStrackerSA& tracker);
   AliITStrackerSA& operator=(const AliITStrackerSA& source);
   virtual ~AliITStrackerSA();  
-  virtual Int_t Clusters2Tracks(AliESD *event){Int_t rc = AliITStrackerMI::Clusters2Tracks(event); if(!rc) rc=FindTracks(event); return rc;}
+  virtual Int_t Clusters2Tracks(AliESD *event);
   Int_t FindTracks(AliESD* event);
 
   AliITStrackV2* FitTrack(AliITStrackSA* tr,Double_t* primaryVertex);
@@ -44,6 +44,8 @@ class AliITStrackerSA : public AliITStrackerMI {
   void SetClusterTree(TTree * itscl){fITSclusters = itscl;}
   void SetSixPoints(Bool_t sp = kFALSE){fSixPoints = sp;}
   Bool_t GetSixPoints() const {return fSixPoints;}
+  void SetSAFlag(Bool_t fl){fITSStandAlone=fl;}  // StandAlone flag setter
+  Bool_t GetSAFlag() const {return fITSStandAlone;} // StandAlone flag getter
   void SetWindowSizes(Int_t n=46, Double_t *phi=0, Double_t *lam=0);
 
   enum {kSAflag=0x8000}; //flag to mark clusters used in the SA tracker
@@ -83,6 +85,7 @@ class AliITStrackerSA : public AliITStrackerMI {
 
 
   Double_t fPhiEstimate; //Estimation of phi angle on next layer
+  Bool_t fITSStandAlone; //Tracking is performed in the ITS alone if kTRUE
   Float_t fPoint1[2];   //! coord. of 1-st point to evaluate the curvature
   Float_t fPoint2[2];   //! coord. of 2-nd point to evaluate the curvature
   Float_t fPoint3[2];   //! coord. of 3-rd point to evaluate the curvature
@@ -104,7 +107,7 @@ class AliITStrackerSA : public AliITStrackerMI {
   TClonesArray** fCluLayer; //! array with clusters 
   TClonesArray** fCluCoord; //! array with cluster info
 
-  ClassDef(AliITStrackerSA,3)
+  ClassDef(AliITStrackerSA,4)
 };
 
 #endif