/* $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",
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
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
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);
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;