]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - ANALYSIS/AliD0toKpi.h
New analysis code (A.Dainese)
[u/mrichter/AliRoot.git] / ANALYSIS / AliD0toKpi.h
... / ...
CommitLineData
1#ifndef AliD0toKpi_H
2#define AliD0toKpi_H
3/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
5
6//-------------------------------------------------------------------------
7// Class AliD0toKpi
8// Reconstructed D0 -> K^- pi^+ class
9//
10// Origin: A. Dainese andrea.dainese@pd.infn.it
11//-------------------------------------------------------------------------
12
13#include <TMath.h>
14#include <TCanvas.h>
15#include <TH1F.h>
16#include <TH2F.h>
17#include <TPaveLabel.h>
18#include <TVector3.h>
19
20//----------------------------------------------------------------------------
21// Some constants (masses + parameterized TOF PID)
22//
23// particle masses
24const Double_t kMD0 = 1.8645; // D0 mass
25const Double_t kMK = 0.49368; // K+ mass
26const Double_t kMPi = 0.13957; // Pi+ mass
27
28// --- TOF tagging probabilities ---
29// central HIJING
30// B = 0.4 T
31// tracking errors in TPC included
32// With TRD
33//
34// *** Pb-Pb dNch/dy=6000 ***
35//
36// PIONS
37const Int_t kPiBins_PbPb = 10;
38const Double_t kPiBinWidth_PbPb = 0.250;
39const Double_t kPiTagPi_PbPb[kPiBins_PbPb] = {0.211421,0.652184,0.624421,0.614727,0.610777,0.628015,0.631520,0.630324,0.637551,0.575235};
40const Double_t kPiTagNid_PbPb[kPiBins_PbPb] = {0.788579,0.347816,0.375579,0.385273,0.389223,0.371985,0.368480,0.369676,0.362449,0.424765};
41// KAONS
42const Int_t kKBins_PbPb = 10;
43const Double_t kKBinWidth_PbPb = 0.250;
44const Double_t kKTagK_PbPb[kKBins_PbPb] = {0.000000,0.101255,0.397662,0.467586,0.517008,0.555023,0.584185,0.519029,0.464117,0.247308};
45const Double_t kKTagPi_PbPb[kKBins_PbPb] = {0.102049,0.289930,0.101930,0.057771,0.040286,0.028567,0.053108,0.094369,0.066302,0.247308};
46const Double_t kKTagNid_PbPb[kKBins_PbPb] = {0.897951,0.608815,0.500408,0.474643,0.442705,0.416410,0.362707,0.386603,0.469580,0.505383};
47// PROTONS
48const Int_t kPBins_PbPb = 9;
49const Double_t kPBinWidth_PbPb = 0.500;
50const Double_t kPTagP_PbPb[kPBins_PbPb] = {0.017940,0.350681,0.535286,0.583264,0.562935,0.560524,0.545992,0.598060,0.351245};
51const Double_t kPTagPi_PbPb[kPBins_PbPb] = {0.195955,0.094949,0.039962,0.026039,0.007556,0.016986,0.030333,0.000000,0.000000};
52const Double_t kPTagNid_PbPb[kPBins_PbPb] = {0.786105,0.554370,0.424751,0.390697,0.429508,0.422491,0.423675,0.401940,0.648755};
53//
54// pp PYTHIA
55//
56// *** cuts for pp ***
57//
58// PIONS
59const Int_t kPiBins_pp = 10;
60const Double_t kPiBinWidth_pp = 0.250;
61const Double_t kPiTagPi_pp[kPiBins_pp] = {0.194528,0.447097,0.603364,0.646413,0.647125,0.669157,0.688139,0.682564,0.689910,0.665710};
62const Double_t kPiTagNid_pp[kPiBins_pp] = {0.805472,0.552903,0.396636,0.353587,0.352875,0.330843,0.311861,0.317436,0.310090,0.334290};
63// KAONS
64const Int_t kKBins_pp = 10;
65const Double_t kKBinWidth_pp = 0.250;
66const Double_t kKTagK_pp[kKBins_pp] = {0.000000,0.173393,0.439690,0.519423,0.587025,0.605372,0.586021,0.650139,0.444444,0.299363};
67const Double_t kKTagPi_pp[kKBins_pp] = {0.000000,0.001495,0.000000,-0.000000,-0.000000,0.000000,0.032258,0.060572,0.101449,0.242038};
68const Double_t kKTagNid_pp[kKBins_pp] = {1.000000,0.825112,0.560310,0.480577,0.412975,0.394628,0.381720,0.289289,0.454106,0.458599};
69// PROTONS
70const Int_t kPBins_pp = 9;
71const Double_t kPBinWidth_pp = 0.500;
72const Double_t kPTagP_pp[kPBins_pp] = {0.029404,0.438640,0.613710,0.665152,0.634961,0.657711,0.703704,0.685714,0.235294};
73const Double_t kPTagPi_pp[kPBins_pp] = {0.000000,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.014286,-0.000000};
74const Double_t kPTagNid_pp[kPBins_pp] = {0.970596,0.561360,0.386290,0.334848,0.365039,0.342289,0.296296,0.300000,0.764706};
75
76
77
78
79//-----------------------------------------------------------------------------
80class AliD0toKpi : public TObject {
81 public:
82 //
83 AliD0toKpi();
84 AliD0toKpi(Int_t ev,Int_t trkNum[2],
85 Double_t v1[3],Double_t v2[3],Double_t dca,
86 Double_t mom[6],Double_t d0[2]);
87 virtual ~AliD0toKpi();
88 AliD0toKpi(const AliD0toKpi& d0toKpi);
89
90 Double_t Alpha() const { return (Ql(0)-Ql(1))/(Ql(0)+Ql(1)); }
91 void ApplyPID(TString pidScheme="TOFparam_PbPb");
92 Double_t ChildrenRelAngle() const;
93 void ComputeWgts();
94 void CorrectWgt4BR(Double_t factor);
95 Double_t CosPointing() const;
96 Double_t CosPointingXY() const;
97 void CosThetaStar(Double_t&,Double_t&) const;
98 Double_t Ct() const {return Length()*kMD0/P();}
99 Double_t Energy() const { return TMath::Sqrt(P()*P()+kMD0*kMD0); }
100 Double_t Eta() const;
101 Double_t EtaChild(Int_t child) const;
102 Int_t EventNo() const {return TMath::Abs(fEvent);}
103 Double_t GetDCA() const { return 10000.*fDCA; }
104 Int_t GetTrkNum(Int_t child) const { return fTrkNum[child]; }
105 Double_t Getd0Child(Int_t child) const { return fd0[child]; }
106 Int_t GetPdgChild(Int_t child) const { return fPdg[child]; }
107 Int_t GetPdgMum(Int_t child) const {return fMum[child]; }
108 void GetWgts(Double_t&,Double_t&,TString sample) const;
109 void GetPrimaryVtx(Double_t vtx[3]) const
110 { vtx[0]=fV1x; vtx[1]=fV1y; vtx[2]=fV1z; return; }
111 void GetSecondaryVtx(Double_t vtx[3]) const
112 { vtx[0]=fV2x; vtx[1]=fV2y; vtx[2]=fV2z; return; }
113
114 void InvMass(Double_t&,Double_t&) const;
115 Bool_t IsSignal() const { if(fSignal) return kTRUE; return kFALSE; }
116 Double_t Length() const
117 { return TMath::Sqrt((fV1x-fV2x)*(fV1x-fV2x)
118 +(fV1y-fV2y)*(fV1y-fV2y)+(fV1z-fV2z)*(fV1z-fV2z)); }
119 Double_t P() const { return TMath::Sqrt(Pt()*Pt()+Pz()*Pz()); }
120 Double_t PChild(Int_t child) const { return TMath::Sqrt(fPx[child]*fPx[child]+fPy[child]*fPy[child]+fPz[child]*fPz[child]); }
121 Double_t ProdImpParams() const { return fd0[0]*fd0[1]; }
122 Double_t Pt() const { return TMath::Sqrt(Px()*Px()+Py()*Py()); }
123 Double_t PtChild(Int_t child) const { return TMath::Sqrt(fPx[child]*fPx[child]+fPy[child]*fPy[child]); }
124 Double_t Px() const { return (fPx[0]+fPx[1]); }
125 Double_t Py() const { return (fPy[0]+fPy[1]); }
126 Double_t Pz() const { return (fPz[0]+fPz[1]); }
127 Double_t Ql(Int_t child) const;
128 Double_t Qt() const;
129 Double_t Rapidity() const { return 0.5*TMath::Log((Energy()+Pz())/(Energy()-Pz()+1.e-13)); }
130 Bool_t Select(const Double_t* cuts,Int_t&,Int_t&) const;
131 void SetPrimaryVtx(Double_t vtx[3])
132 { fV1x=vtx[0]; fV1y=vtx[1]; fV1z=vtx[2]; return; }
133 void SetSignal() { fSignal = kTRUE; return; }
134 void SetTOFmasses(Double_t mass[2])
135 { fTOFmass[0]=mass[0]; fTOFmass[1]=mass[1]; return; }
136 void SetPIDresponse(Double_t resp0[5],Double_t resp1[5]);
137 void SetPdgCodes(Int_t pdg[2]) {fPdg[0]=pdg[0];fPdg[1]=pdg[1];return;}
138 void SetMumPdgCodes(Int_t mum[2]) {fMum[0]=mum[0];fMum[1]=mum[1];return;}
139
140 void DrawPIDinTOF(TString pidScheme="TOFparam_PbPb") const;
141 Double_t LinearInterpolation(Double_t p,Int_t nBins,Double_t Bin,
142 const Double_t *values) const;
143 // void SetPtWgts4pp();
144 //
145 private:
146 //
147 Bool_t fSignal; // TRUE if signal, FALSE if background (for simulation)
148 Int_t fEvent; // number of the event this D0 comes from
149 // -1 if the D0 comes from ev. mixing
150
151 Int_t fTrkNum[2]; // numbers of the two decay tracks
152
153 Double_t fV1x; //
154 Double_t fV1y; // position of the primary vertex of the event
155 Double_t fV1z; //
156 Double_t fV2x; //
157 Double_t fV2y; // position of the reconstructed secondary vertex
158 Double_t fV2z; //
159 Double_t fDCA; // DCA of the two tracks
160
161 Double_t fPx[2]; //
162 Double_t fPy[2]; // momenta of the two tracks
163 Double_t fPz[2]; // at the reconstructed vertex
164
165 Double_t fd0[2]; // impact parameters in the bending plane
166
167 Int_t fPdg[2]; // PDG codes of the two tracks (for sim.)
168 Int_t fMum[2]; // PDG codes of the mothers (for sim.)
169
170 Double_t fTagPi[2]; // probability to be tagged as pion
171 Double_t fTagKa[2]; // probability to be tagged as kaon
172 Double_t fTagPr[2]; // probability to be tagged as proton
173 Double_t fTagNid[2]; // probability to be tagged as "non-identified"
174
175 Double_t fPIDrespEl[2]; // det. response to be electron
176 Double_t fPIDrespMu[2]; // det. response to be muon
177 Double_t fPIDrespPi[2]; // det. response to be pion
178 Double_t fPIDrespKa[2]; // det. response to be kaon
179 Double_t fPIDrespPr[2]; // det. response to be proton
180 Double_t fTOFmass[2]; // mass estimated by the TOF (-1000. if track not reached TOF)
181
182 Double_t fWgtAD0,fWgtAD0bar; //
183 Double_t fWgtBD0,fWgtBD0bar; // weights for the 3 samples
184 Double_t fWgtCD0,fWgtCD0bar; // A: (K,Pi)+(K,?) B: (?,Pi) C: (?,?)
185 Double_t fWgtDD0,fWgtDD0bar; // D: all other pairs
186
187 ClassDef(AliD0toKpi,1) // Reconstructed D0 candidate class
188};
189
190#endif
191
192
193
194
195
196
197
198