]>
Commit | Line | Data |
---|---|---|
20426baf | 1 | /************************************************************************** |
2 | * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
7 | * Permission to use, copy, modify and distribute this software and its * | |
8 | * documentation strictly for non-commercial purposes is hereby granted * | |
9 | * without fee, provided that the above copyright notice appears in all * | |
10 | * copies and that both the copyright notice and this permission notice * | |
11 | * appear in the supporting documentation. The authors make no claims * | |
12 | * about the suitability of this software for any purpose. It is * | |
13 | * provided "as is" without express or implied warranty. * | |
14 | **************************************************************************/ | |
15 | ||
16 | //************************************************************************ | |
17 | // | |
18 | // ESD track and V0 fast resolution parameterization | |
19 | // Fast algorithm to make parameterization | |
20 | // Track covariance used | |
21 | // | |
22 | // | |
23 | // Origin: Marian Ivanov marian.ivanov@cern.ch | |
24 | //------------------------------------------------------------------------- | |
25 | ||
26 | /* | |
27 | EXAMPLE USAGE: | |
28 | // | |
29 | // Make esd chain | |
30 | // | |
31 | .x ~/rootlogon.C | |
20426baf | 32 | gSystem->AddIncludePath("-I$ALICE_ROOT/TPC/macros"); |
33 | gROOT->LoadMacro("$ALICE_ROOT/TPC/macros/AliXRDPROOFtoolkit.cxx+"); | |
34 | AliXRDPROOFtoolkit tool; | |
35 | TChain * tree = tool.MakeChain("esd.txt","esdTree",0,1000); | |
36 | tree->Lookup(); | |
37 | // | |
38 | // Load macros | |
39 | // | |
34737198 | 40 | gSystem->Load("libSTAT.so"); |
20426baf | 41 | .L $ALICE_ROOT/PWG1/AliESDresolParams.cxx+ |
42 | .L $ALICE_ROOT/PWG1/AliESDresolMakerFast.cxx+ | |
20426baf | 43 | TCut cutDCA="Tracks[].fCchi2<100&&abs(Tracks[].fP[4])<8&&abs(Tracks[].fP[3])<1&&sqrt(Tracks[].fC[0])/(0.2+abs(Tracks[].fP[4]))<0.02&&abs(Tracks[].fX)<3&&Tracks[].fITSncls>4&&Tracks.fTPCncls>40" |
44 | // | |
34737198 | 45 | // Create resolution |
46 | // | |
20426baf | 47 | TObjArray * array = AliESDresolMakerFast::MakeParamPrimFast(tree,cutDCA,0.95,2000); |
34737198 | 48 | AliESDresolParams params; |
49 | params.SetResolPrimFast(array); | |
50 | params.SetInstance(¶ms); | |
51 | TFile f("resolParams.root","recreate"); | |
52 | param.Write("resolParams"); | |
53 | // | |
54 | // | |
55 | TF2 f2sy("f2sy","AliESDresolParams::SGetResolPrimFast(0,x,y)",0,10,0,2); | |
56 | TF1 f1sy("f1sy","AliESDresolParams::SGetResolPrimFast(0,x,0)",0,10); | |
57 | f2sy->Draw("surf2") | |
58 | f1sy->Draw(); | |
20426baf | 59 | |
60 | */ | |
61 | ||
62 | ||
63 | ||
64 | #include "TVectorD.h" | |
65 | #include "../STAT/TStatToolkit.h" | |
66 | #include "TMath.h" | |
67 | #include "TCut.h" | |
68 | #include "TTree.h" | |
69 | ||
70 | #include "AliESDresolParams.h" | |
71 | #include "AliESDresolMakerFast.h" | |
72 | ||
73 | ||
74 | ClassImp(AliESDresolMakerFast) | |
75 | ||
76 | ||
77 | ||
78 | ||
79 | AliESDresolMakerFast::AliESDresolMakerFast() : | |
80 | TObject() | |
81 | { | |
82 | // | |
83 | // Default constructor | |
84 | // | |
85 | } | |
86 | ||
87 | ||
88 | TObjArray * AliESDresolMakerFast::MakeParamPrimFast(TTree * tree, TCut & cutDCA, Float_t fraction, Int_t entries){ | |
89 | // | |
90 | // DCA resolution linear parameterization | |
91 | // Only valid in ITS acceptance | |
92 | // Arguments: | |
93 | // tree - esdTree or chain | |
94 | // cutDCA - track selection criteria | |
95 | // fraction - robust fitter fraction | |
96 | // entries - total number of entries (tracks) used | |
97 | ||
98 | /* Example | |
34737198 | 99 | // its adjusted cuts |
100 | ||
101 | TCut cut1pt= "sqrt(Tracks[].fC[14])/(1+abs(Tracks[].fP[4]))^2.5<0.01"; | |
102 | TCut cutsy = "sqrt(Tracks[].fC[0])/(0.2+abs(Tracks[].fP[4]))<0.02"; | |
103 | ||
104 | TCut cutDCA="Tracks[].fCchi2<100&&abs(Tracks[].fP[4])<8&&abs(Tracks[].fP[3])<1&&abs(Tracks[].fX)<3&&Tracks[].fITSncls>4&&Tracks.fTPCncls>40"+cut1pt+cutsy; | |
105 | fraction =0.90; | |
20426baf | 106 | entries = 1000; |
107 | */ | |
108 | ||
109 | TObjArray *array = new TObjArray(); | |
110 | Double_t chi2=0; | |
111 | Int_t npoints=0; | |
112 | TVectorD fitParam; | |
113 | TMatrixD covMatrix; | |
114 | // | |
115 | // y param | |
116 | // | |
117 | TString * dcayParam= TStatToolkit::FitPlane(tree,"sqrt(Tracks[].fC[0])/(0.2+abs(Tracks[].fP[4]))","(abs(Tracks[].fP[4]))++(abs(Tracks[].fP[4]))^2++(abs(Tracks[].fP[3]))++(abs(Tracks[].fP[3]))^2++(abs(Tracks[].fP[4]))*(abs(Tracks[].fP[3]))", cutDCA, chi2,npoints,fitParam,covMatrix,fraction, 0, entries); | |
118 | tree->SetAlias("dcayParam",dcayParam->Data()); | |
119 | array->AddAt(new TVectorD(fitParam),0); | |
120 | printf("Y resol\t%s\n",dcayParam->Data()); | |
121 | // | |
122 | // z param | |
123 | // | |
124 | TString * dcazParam= TStatToolkit::FitPlane(tree, "sqrt(Tracks[].fC[2])/(0.2+abs(Tracks[].fP[4]))", "(abs(Tracks[].fP[4]))++(abs(Tracks[].fP[4]))^2++(abs(Tracks[].fP[3]))++(abs(Tracks[].fP[3]))^2++(abs(Tracks[].fP[4]))*(abs(Tracks[].fP[3]))", cutDCA, chi2,npoints,fitParam,covMatrix,fraction,0,entries); | |
125 | printf("Z resol\t%s\n",dcazParam->Data()); | |
126 | tree->SetAlias("dcazParam",dcazParam->Data()); | |
127 | array->AddAt(new TVectorD(fitParam),1); | |
128 | // | |
129 | // Phi param | |
130 | // | |
131 | TString * dcaphiParam= TStatToolkit::FitPlane(tree, "sqrt(Tracks[].fC[5])/(0.1+abs(Tracks[].fP[4]))", "(abs(Tracks[].fP[4]))++(abs(Tracks[].fP[4]))^2++(abs(Tracks[].fP[3]))++(abs(Tracks[].fP[3]))^2++(abs(Tracks[].fP[4]))*(abs(Tracks[].fP[3]))", cutDCA, chi2,npoints,fitParam,covMatrix,fraction,0,entries); | |
132 | printf("Phi resol\t%s\n",dcaphiParam->Data()); | |
133 | tree->SetAlias("dcaphiParam",dcaphiParam->Data()); | |
134 | array->AddAt(new TVectorD(fitParam),2); | |
135 | // | |
136 | // theta param | |
137 | // | |
34737198 | 138 | TString * dcathParam= TStatToolkit::FitPlane(tree, "sqrt(Tracks[].fC[9])/((0.1+abs(Tracks[].fP[4])*(1+abs(Tracks[].fParamP.fP[3]^2))))", "(abs(Tracks[].fP[4]))++(abs(Tracks[].fP[4]))^2++(abs(Tracks[].fP[3]))++(abs(Tracks[].fP[3]))^2++(abs(Tracks[].fP[4]))*(abs(Tracks[].fP[3]))", cutDCA, chi2,npoints,fitParam,covMatrix,fraction,0,entries); |
20426baf | 139 | printf("Theta resol\t%s\n",dcathParam->Data()); |
140 | tree->SetAlias("dcathParam",dcathParam->Data()); | |
141 | array->AddAt(new TVectorD(fitParam),3); | |
142 | // | |
143 | // 1pt param | |
144 | // | |
145 | TString * dca1ptParam= TStatToolkit::FitPlane(tree, "sqrt(Tracks[].fC[14])/(1+abs(Tracks[].fP[4]))^2", "(abs(Tracks[].fP[4]))++(abs(Tracks[].fP[4]))^2++(abs(Tracks[].fP[3]))++(abs(Tracks[].fP[3]))^2++(abs(Tracks[].fP[4]))*(abs(Tracks[].fP[3]))", cutDCA, chi2,npoints,fitParam,covMatrix,fraction,0,entries); | |
146 | printf("1pt resol\t%s\n",dca1ptParam->Data()); | |
147 | tree->SetAlias("dca1ptParam",dca1ptParam->Data()); | |
148 | array->AddAt(new TVectorD(fitParam),4); | |
149 | return array; | |
150 | } | |
151 | ||
34737198 | 152 | /* |
153 | void scalePt(){ | |
154 | // | |
155 | TString * dca1ptParamS4= TStatToolkit::FitPlane(tree, "(Tracks[].fC[14])", "abs(Tracks[].fP[4])^4", cutDCA, chi2,npoints,fitParam,covMatrix,fraction,0,entries); | |
156 | printf("1pt resol\t%s\n",dca1ptParamS4->Data()); | |
157 | tree->SetAlias("dca1ptParam4",dca1ptParamS4->Data()); | |
158 | // | |
159 | TString * dca1ptParamS34= TStatToolkit::FitPlane(tree, "(Tracks[].fC[14])", "abs(Tracks[].fP[4])^4++abs(Tracks[].fP[4])^3", cutDCA, chi2,npoints,fitParam,covMatrix,fraction,0,entries); | |
160 | printf("1pt resol\t%s\n",dca1ptParamS34->Data()); | |
161 | tree->SetAlias("dca1ptParam34",dca1ptParamS34->Data()); | |
162 | // | |
163 | TString * dca1ptParamS234= TStatToolkit::FitPlane(tree, "(Tracks[].fC[14])", "abs(Tracks[].fP[4])^4++abs(Tracks[].fP[4])^3++abs(Tracks[].fP[4])^2", cutDCA, chi2,npoints,fitParam,covMatrix,fraction,0,entries); | |
164 | printf("1pt resol\t%s\n",dca1ptParamS234->Data()); | |
165 | tree->SetAlias("dca1ptParam234",dca1ptParamS234->Data()); | |
166 | } | |
167 | ||
168 | */ | |
169 | ||
170 | ||
171 | ||
172 | ||
20426baf | 173 | |
174 | ||
175 | TObjArray * AliESDresolMakerFast::MakeParamRFast(TTree * tree, TCut &cutV0, Float_t fraction, Int_t entries){ | |
176 | // | |
177 | // | |
178 | // | |
34737198 | 179 | TObjArray *array = new TObjArray; |
180 | ||
20426baf | 181 | Double_t chi2=0; |
182 | Int_t npoints=0; | |
183 | TVectorD fitParam; | |
184 | TMatrixD covMatrix; | |
185 | // | |
186 | // | |
187 | /* | |
34737198 | 188 | //TCut cutGood="abs(V0s[].GetEffMass(0,0))<0.05||abs(V0s[].GetEffMass(2,2)-0.5)<0.05" |
20426baf | 189 | TCut cutV0 = "abs((V0s[].fParamP.fC[0]))<3&&abs(V0s[].fParamP.fP[3])<1&&abs(V0s[].fParamP.fP[4])<8";// |
190 | */ | |
20426baf | 191 | // |
192 | // | |
193 | // | |
34737198 | 194 | TString * v0sigmaY= TStatToolkit::FitPlane(tree,"sqrt(sqrt((V0s[].fParamP.fC[0]))/(0.2+abs(V0s[].fParamP.fP[4])))","abs(V0s[].fParamP.fP[4])++V0s[].fParamP.fX++abs(V0s[].fParamP.fP[4])^2++V0s[].fParamP.fX^2++abs(V0s[].fParamP.fP[4])*V0s[].fParamP.fX++abs(V0s[].fParamP.fP[4])*V0s[].fParamP.fX^2", cutV0, chi2,npoints,fitParam,covMatrix,fraction,0,entries); |
20426baf | 195 | tree->SetAlias("v0sigmaY",v0sigmaY->Data()); |
34737198 | 196 | array->AddAt(new TVectorD(fitParam),0); |
20426baf | 197 | // |
198 | // | |
199 | // | |
200 | TString * v0sigmaZ= TStatToolkit::FitPlane(tree,"sqrt(sqrt((V0s[].fParamP.fC[2])))","abs(V0s[].fParamP.fP[4])++V0s[].fParamP.fX++abs(V0s[].fParamP.fP[4])^2++V0s[].fParamP.fX^2++abs(V0s[].fParamP.fP[4])*V0s[].fParamP.fX++abs(V0s[].fParamP.fP[4])*V0s[].fParamP.fX^2", cutV0, chi2,npoints,fitParam,covMatrix,fraction,0,entries); | |
201 | tree->SetAlias("v0sigmaZ",v0sigmaZ->Data()); | |
202 | array->AddLast(new TVectorD(fitParam)); | |
203 | // | |
204 | // | |
205 | // | |
34737198 | 206 | TString * v0sigmaPhi= TStatToolkit::FitPlane(tree,"sqrt(sqrt((V0s[].fParamP.fC[5]))/(0.1+abs(V0s[].fParamP.fP[4])))","abs(V0s[].fParamP.fP[4])++V0s[].fParamP.fX++abs(V0s[].fParamP.fP[4])^2++abs(V0s[].fParamP.fP[4])*V0s[].fParamP.fX", cutV0, chi2,npoints,fitParam,covMatrix,fraction,0,entries); |
20426baf | 207 | tree->SetAlias("v0sigmaPhi",v0sigmaPhi->Data()); |
34737198 | 208 | array->AddAt(new TVectorD(fitParam),2); |
20426baf | 209 | // |
210 | // | |
211 | // | |
34737198 | 212 | TString * v0sigmaTh= TStatToolkit::FitPlane(tree,"sqrt(sqrt((V0s[].fParamP.fC[9]))/((0.1+abs(V0s[].fParamP.fP[4])*(1+abs(V0s[].fParamP.fP[3])^2))))","abs(V0s[].fParamP.fP[4])++V0s[].fParamP.fX++abs(V0s[].fParamP.fP[4])^2++abs(V0s[].fParamP.fP[4])*V0s[].fParamP.fX", cutV0, chi2,npoints,fitParam,covMatrix,fraction,0,entries); |
20426baf | 213 | tree->SetAlias("v0sigmaTh",v0sigmaTh->Data()); |
34737198 | 214 | array->AddAt(new TVectorD(fitParam),3); |
20426baf | 215 | // |
216 | // | |
217 | // | |
218 | TString * v0sigma1pt= TStatToolkit::FitPlane(tree,"sqrt(sqrt((V0s[].fParamP.fC[14])))","abs(V0s[].fParamP.fP[4])++V0s[].fParamP.fX++abs(V0s[].fParamP.fP[4])^2++V0s[].fParamP.fX^2++abs(V0s[].fParamP.fP[4])*V0s[].fParamP.fX++abs(V0s[].fParamP.fP[4])*V0s[].fParamP.fX^2", cutV0, chi2,npoints,fitParam,covMatrix,fraction,0,entries); | |
219 | tree->SetAlias("v0sigma1pt",v0sigma1pt->Data()); | |
34737198 | 220 | array->AddAt(new TVectorD(fitParam),4); |
20426baf | 221 | return array; |
222 | ||
223 | } |