]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliTPCtrackerParam.h
Correct sign for calculated b_y (outside measured region).
[u/mrichter/AliRoot.git] / TPC / AliTPCtrackerParam.h
index dbf4c59c0ecb259aa682af285b0b1a3a615e2dda..0b8be8ab34c50d6aef62ca08dd7f08c6f17ae227 100644 (file)
@@ -6,54 +6,58 @@
 /* $Id$ */
 
 
-//-----------------------------------------------------------------------------
-//                    TPC Tracking Parameterization Class
-//
-//   Origin: Andrea Dainese, Padova - e-mail: andrea.dainese@pd.infn.it
-//-----------------------------------------------------------------------------
+/////////////////////////////////////////////////////////////////////////
+//                                                                        
+// This class builds AliTPCtrack objects from generated tracks to feed    
+// ITS tracking (V2). The AliTPCtrack is built from its first hit in      
+// the TPC. The track is assigned a Kalman-like covariance matrix         
+// depending on its pT and pseudorapidity and track parameters are        
+// smeared according to this covariance matrix.                           
+// Output file contains sorted tracks, ready for matching with ITS.        
+//                                                                        
+// See implementation file for more details.  
+//                                  
+//                                                                        
+//  Origin: Andrea Dainese, Padova - e-mail: andrea.dainese@pd.infn.it     
+//  adapted to ESD output by: Marcello Lunardon, Padova
+/////////////////////////////////////////////////////////////////////////
+
 
 //----- Root headers ---------
+class TTree;
 #include <TMatrixD.h>
 //---- AliRoot headers -------
-#include "alles.h"
-#include "AliGausCorr.h"
-#include "AliMagF.h"
+#include "AliConfig.h"
 #include "AliTPCkineGrid.h"
 #include "AliTPCtrack.h"
-#include "AliTrackReference.h"
+#include "AliESD.h"
 //----------------------------
 
-class AliTPCtrackerParam {
-  /////////////////////////////////////////////////////////////////////////
-  //                                                                        
-  // This class builds AliTPCtrack objects from generated tracks to feed    
-  // ITS tracking (V2). The AliTPCtrack is built from its first hit in      
-  // the TPC. The track is assigned a Kalman-like covariance matrix         
-  // depending on its pT and pseudorapidity and track parameters are        
-  // smeared according to this covariance matrix.                           
-  // Output file contains sorted tracks, ready for matching with ITS.        
-  //                                                                        
-  // See implementation file for more details.  
-  //                                  
-  //                                                                        
-  //  Origin: Andrea Dainese, Padova - e-mail: andrea.dainese@pd.infn.it     
-  //                                                                        
-  /////////////////////////////////////////////////////////////////////////
+class AliTPC;
+
+class AliTPCtrackerParam:
+  public TObject
+{   
  public:
-  AliTPCtrackerParam(const Int_t coll=0,const Double_t Bz=0.4,const Int_t n=1,
-                    const char* evfoldname = AliConfig::fgkDefaultEventFolderName);
+  
+  AliTPCtrackerParam(Int_t coll=0, Double_t Bz=0.4,
+                    const char* evfoldname = AliConfig::GetDefaultEventFolderName());
   virtual ~AliTPCtrackerParam();
 
   // this function performs the parameterized tracking
-  Int_t BuildTPCtracks(const TFile *inp, TFile *out);
-
+  //
+  AliTPCtrackerParam(const AliTPCtrackerParam& p);
+  //
+  Int_t Init();
+  Int_t BuildTPCtracks(AliESD* event);
   // these functions are used to create a DB of cov. matrices,
   // including regularization, efficiencies and dE/dx
   void  AllGeantTracks() { fSelAndSmear=kFALSE; return; }
   void  AnalyzedEdx(const Char_t *outName,Int_t pdg);
   void  AnalyzePulls(const Char_t *outName);
   void  AnalyzeResolutions(Int_t pdg);
-  void  CompareTPCtracks(const Char_t *galiceName="galice.root",
+  void  CompareTPCtracks(Int_t nEvents=1,
+                        const Char_t *galiceName="galice.root",
                         const Char_t *trkGeaName="AliTPCtracksGeant.root",
                         const Char_t *trkKalName="AliTPCtracksSorted.root",
                         const Char_t *covmatName="CovMatrix.root",
@@ -75,63 +79,66 @@ class AliTPCtrackerParam {
     void AssignMass(Double_t mass) {SetMass(mass); return;}
     
   private:
-
   };
   //********* end of internal class ***********
 
   //********* Internal class definition *******
   class AliTPCseedGeant : public TObject {
   public:
-    AliTPCseedGeant(Double_t x,Double_t y,Double_t z,
-                   Double_t px,Double_t py,Double_t pz,
-                   Int_t lab) {
-      fXg = x;
-      fYg = y;
-      fZg = z;
-      fPx = px;
-      fPy = py;
-      fPz = pz;
-      fLabel = lab;
-      Double_t a = TMath::ATan2(y,x)*180./TMath::Pi();
-      if(a<0) a += 360.;
-      fSector = (Int_t)(a/20.);
-      fAlpha = 10.+20.*fSector;
-      fAlpha /= 180.;
-      fAlpha *= TMath::Pi();
-    }
-    Int_t    GetLabel() { return fLabel; }
-    Double_t GetAlpha() { return fAlpha; }      
-    Double_t GetXL() { return fXg*TMath::Cos(fAlpha)+fYg*TMath::Sin(fAlpha); }
-    Double_t GetYL() { return -fXg*TMath::Sin(fAlpha)+fYg*TMath::Cos(fAlpha); }
-    Double_t GetZL() { return fZg; }
-    Double_t GetPx() { return fPx; } 
-    Double_t GetPy() { return fPy; } 
-    Double_t GetPz() { return fPz; } 
-    Double_t GetPt() { return TMath::Sqrt(fPx*fPx+fPy*fPy); }
-    Double_t GetEta() { return -TMath::Log(TMath::Tan(0.25*TMath::Pi()-0.5*TMath::ATan(fPz/GetPt()))); }
+    AliTPCseedGeant():TObject(),
+      fXg(0.),
+      fYg(0.),
+      fZg(0.),
+      fPx(0.),
+      fPy(0.),
+      fPz(0.),
+      fAlpha(0.),
+      fLabel(0),
+      fSector(0){}
+
+    AliTPCseedGeant(Double_t x=0.,Double_t y=0.,Double_t z=0.,
+                   Double_t px=0.,Double_t py=0.,Double_t pz=0.,
+                   Int_t lab=0);
+    Int_t    GetLabel() const { return fLabel; }
+    Double_t GetAlpha() const { return fAlpha; }      
+    Double_t GetXG() const { return fXg; }
+    Double_t GetYG() const { return fYg; }
+    Double_t GetZG() const { return fZg; }
+    Double_t GetXL() const 
+      { return fXg*TMath::Cos(fAlpha)+fYg*TMath::Sin(fAlpha); }
+    Double_t GetYL() const 
+      { return -fXg*TMath::Sin(fAlpha)+fYg*TMath::Cos(fAlpha); }
+    Double_t GetZL() const { return fZg; }
+    Double_t GetPx() const { return fPx; } 
+    Double_t GetPy() const { return fPy; } 
+    Double_t GetPz() const { return fPz; } 
+    Double_t GetPt() const { return TMath::Sqrt(fPx*fPx+fPy*fPy); }
+    Double_t GetEta() const 
+      { return -TMath::Log(TMath::Tan(0.25*TMath::Pi()-0.5*TMath::ATan(fPz/GetPt()))); }
     void     SetLabel(Int_t lab) { fLabel=lab; return; }
-    Bool_t   InTPCAcceptance() {
+    Bool_t   InTPCAcceptance() const {
       if(TMath::Abs(GetZL()+(244.-GetXL())*fPz/GetPt())>252.) return kFALSE;
       return kTRUE;
     }
 
   private:
-    Double_t fXg;
-    Double_t fYg;
-    Double_t fZg;
-    Double_t fPx;
-    Double_t fPy;
-    Double_t fPz;
-    Double_t fAlpha;
-    Int_t    fLabel;
-    Int_t    fSector;
+    Double_t fXg;     // global x of seed 
+    Double_t fYg;     // global y of seed
+    Double_t fZg;     // global z of seed
+    Double_t fPx;     // global px
+    Double_t fPy;     // global py
+    Double_t fPz;     // global pz
+    Double_t fAlpha;  // alpha angle
+    Int_t    fLabel;  // track label
+    Int_t    fSector; // TPC sector
   };
   //******* end of internal class ****************
   
  private:
+  AliTPCtrackerParam & operator=(const AliTPCtrackerParam & );
+
   TString fEvFolderName;//! name of data folder
 
-  Int_t           fNevents;     // number of events in the file to be processed
   Double_t        fBz;          // value of the z component of L3 field (Tesla)
   Int_t           fColl;        // collision code (0: PbPb6000; 1: pp)
   Bool_t          fSelAndSmear; // if kFALSE returns GEANT tracks 
@@ -142,6 +149,11 @@ class AliTPCtrackerParam {
 
   TTree          *fCovTree;  // tree with regularized cov matrices 
                              // for the current track
+  TTree           *fCovTreePi[30];
+  TTree           *fCovTreeKa[30];
+  TTree           *fCovTreePr[30];
+  TTree           *fCovTreeEl[30];
+  TTree           *fCovTreeMu[30];
 
   AliTPCkineGrid *fDBgrid;   // grid for the cov matrix look-up table  
   AliTPCkineGrid  fDBgridPi; //               "                  for pions  
@@ -187,14 +199,12 @@ class AliTPCtrackerParam {
 
 
   void     BuildTrack(AliTPCseedGeant *s,Int_t ch);
-  Int_t    CheckLabel(AliTPCseedGeant *s,Int_t nPart,
-                     Double_t *ptkine,Double_t *pzkine) const;
   void     CookdEdx(Double_t pt,Double_t eta);
   void     CookTrack(Double_t pt,Double_t eta);
   TMatrixD GetSmearingMatrix(Double_t *cc, Double_t pt,Double_t eta) const;
   void     InitializeKineGrid(Option_t *which);    
-  void     MakeSeedsFromHits(AliTPC *TPC,TTree *TH,TObjArray &seedArray) const;
-  void     MakeSeedsFromRefs(TTree *TTR,
+  void     MakeSeedsFromHits(AliTPC *tpc,TTree *th,TObjArray &seedArray) const;
+  void     MakeSeedsFromRefs(TTree *ttr,
                             TObjArray &seedArray) const;
   Int_t    ReadAllData(const Char_t *inName);
   Int_t    ReadDBgrid(const Char_t *inName);
@@ -202,6 +212,7 @@ class AliTPCtrackerParam {
   Int_t    ReadEffs(const Char_t *inName);
   Int_t    ReadPulls(const Char_t *inName);
   Int_t    ReadRegParams(const Char_t *inName,Int_t pdg);
+  Int_t    ReadCovTrees(const Char_t* inName); 
   Bool_t   SelectedTrack(Double_t pt, Double_t eta) const;
   void     SetParticle(Int_t pdg);  
   void     SmearTrack(Double_t *xx,Double_t *xxsm,TMatrixD cov) const;