]>
Commit | Line | Data |
---|---|---|
ec5bd527 | 1 | void Init(){ |
2 | // | |
3 | // Initialize | |
4 | // | |
ec5bd527 | 5 | AliMagFMaps* field = new AliMagFMaps("Maps","Maps", 2, 1., 10., AliMagFMaps::k5kG); |
6 | AliTPCExB::RegisterField(0,field); | |
58388598 | 7 | AliMagF* fieldC0 = new AliMagWrapCheb("Maps","Maps", 2, 1, 10., AliMagWrapCheb::k5kG); |
8 | AliTPCExB::RegisterField(1,fieldC0); | |
9 | AliMagF* fieldC1 = new AliMagWrapCheb("Maps","Maps", 2, 1, 10., AliMagWrapCheb::k5kG,kTRUE,"$(ALICE_ROOT)/data/maps/mfchebKGI_sym.root"); | |
10 | AliTPCExB::RegisterField(2,fieldC1); | |
11 | ||
ec5bd527 | 12 | gSystem->Load("libSTAT.so"); |
58388598 | 13 | AliTPCExBFirst *exbfirst1 = new AliTPCExBFirst(fieldC1,0.88*2.6400e+04,50,50,50); |
ec5bd527 | 14 | AliTPCExB::SetInstance(exbfirst1); |
15 | ||
16 | } | |
17 | ||
18 | void FitField(){ | |
19 | // | |
20 | // | |
21 | // | |
22 | AliTPCExB * exb = AliTPCExB::Instance(); | |
23 | exb->TestExB("field.root"); | |
24 | TFile f("field.root"); | |
25 | TTree * tree = (TTree*)f.Get("positions"); | |
26 | // | |
27 | TStatToolkit toolkit; | |
28 | Double_t chi2; | |
29 | TVectorD fitParam; | |
30 | TMatrixD covMatrix; | |
31 | Int_t npoints; | |
32 | // | |
33 | // SetAliases | |
34 | // | |
35 | tree->SetAlias("sa","sin(phi+0.0)"); | |
36 | tree->SetAlias("ca","cos(phi+0.0)"); | |
37 | tree->SetAlias("sa2","sin(phi*2+0.0)"); | |
38 | tree->SetAlias("ca2","cos(phi*2+0.0)"); | |
39 | tree->SetAlias("zn","(x2/250.)"); | |
40 | tree->SetAlias("rn","(r/250.)"); | |
41 | ||
42 | TString fstringSym=""; | |
43 | // | |
44 | fstringSym+="zn++"; | |
45 | fstringSym+="rn++"; | |
46 | fstringSym+="zn*rn++"; | |
47 | fstringSym+="zn*zn++"; | |
48 | fstringSym+="zn*zn*rn++"; | |
49 | fstringSym+="zn*rn*rn++"; | |
50 | // | |
51 | fstringSym+="sa++"; | |
52 | fstringSym+="ca++"; | |
53 | fstringSym+="ca2++"; | |
54 | fstringSym+="sa2++"; | |
55 | fstringSym+="ca*zn++"; | |
56 | fstringSym+="sa*zn++"; | |
57 | fstringSym+="ca2*zn++"; | |
58 | fstringSym+="sa2*zn++"; | |
59 | fstringSym+="ca*zn*zn++"; | |
60 | fstringSym+="sa*zn*zn++"; | |
61 | fstringSym+="ca*zn*rn++"; | |
62 | fstringSym+="sa*zn*rn++"; | |
63 | ||
64 | // BrBz | |
65 | TString *strBrBz = toolkit.FitPlane(tree,"br/bz",fstringSym->Data(), "abs(r)<250&&abs(r)>90", chi2,npoints,fitParam,covMatrix); | |
66 | strBrBz->Tokenize("+")->Print(); | |
67 | printf("Chi2/npoints = %f\n",TMath::Sqrt(chi2/npoints)); | |
68 | tree->SetAlias("fitBrBz",strBrBz->Data()); | |
69 | exb->fMatBrBz = new TVectorD(fitParam); | |
70 | // BrfiBz | |
71 | TString *strBrfiBz = toolkit.FitPlane(tree,"brfi/bz",fstringSym->Data(), "abs(r)<250&&abs(r)>90", chi2,npoints,fitParam,covMatrix); | |
72 | strBrfiBz->Tokenize("+")->Print(); | |
73 | printf("Chi2/npoints = %f\n",TMath::Sqrt(chi2/npoints)); | |
74 | tree->SetAlias("fitBrfiBz",strBrfiBz->Data()); | |
75 | exb->fMatBrfiBz = new TVectorD(fitParam); | |
76 | ||
77 | ||
78 | // | |
79 | // BR integral parameterization | |
80 | // | |
81 | TString *strBRI0 = toolkit.FitPlane(tree,"bri",fstringSym->Data(), "abs(r)<250&&abs(r)>90&&x2>0&&x2<250", chi2,npoints,fitParam,covMatrix); | |
82 | strBRI0->Tokenize("+")->Print(); | |
83 | printf("Chi2/npoints = %f\n",TMath::Sqrt(chi2/npoints)); | |
84 | tree->SetAlias("fitBRI0",strBRI0->Data()); | |
85 | exb->fMatBrBzI0 = new TVectorD(fitParam); | |
86 | ||
87 | TString *strBRI1 = toolkit.FitPlane(tree,"bri",fstringSym->Data(), "abs(r)<250&&abs(r)>90&&x2<-10&&x2>-250", chi2,npoints,fitParam,covMatrix); | |
88 | strBRI1->Tokenize("+")->Print(); | |
89 | printf("Chi2/npoints = %f\n",TMath::Sqrt(chi2/npoints)); | |
90 | tree->SetAlias("fitBRI1",strBRI1->Data()); | |
91 | exb->fMatBrBzI1 = new TVectorD(fitParam); | |
92 | // | |
93 | ||
94 | TString *strBRFII0 = toolkit.FitPlane(tree,"brfii",fstringSym->Data(), "abs(r)<250&&abs(r)>90&&x2>0&&x2<250", chi2,npoints,fitParam,covMatrix); | |
95 | strBRFII0->Tokenize("+")->Print(); | |
96 | printf("Chi2/npoints = %f\n",TMath::Sqrt(chi2/npoints)); | |
97 | tree->SetAlias("fitBRFII0",strBRFII0->Data()); | |
98 | exb->fMatBrfiBzI0 = new TVectorD(fitParam); | |
99 | ||
100 | TString *strBRFII1 = toolkit.FitPlane(tree,"brfii",fstringSym->Data(), "abs(r)<250&&abs(r)>90&&x2<-10&&x2>-240", chi2,npoints,fitParam,covMatrix); | |
101 | strBRFII1->Tokenize("+")->Print(); | |
102 | printf("Chi2/npoints = %f\n",TMath::Sqrt(chi2/npoints)); | |
103 | tree->SetAlias("fitBRFII1",strBRFII1->Data()); | |
104 | exb->fMatBrfiBzI1 = new TVectorD(fitParam); | |
105 | ||
106 | TFile * fout = new TFile("bfit.root","recreate"); | |
107 | exb->Write("bfit"); | |
108 | fout->Close(); | |
109 | ||
110 | } | |
111 | ||
112 | ||
113 | ||
114 | ||
115 | ||
116 | ||
27f5d48d | 117 | void CalibExB(){ |
118 | // | |
119 | // Macro to test ExB correction versus laser B filed scan data | |
120 | // | |
121 | // Before running it be sure the file laserScan.root exist | |
27f5d48d | 122 | // |
123 | // Create this file from scan - See AliTPCCalibLaser.C | |
124 | // | |
125 | TFile fscan("laserScan.root"); | |
126 | TTree * treeT = (TTree*)fscan.Get("Mean"); | |
27f5d48d | 127 | TStatToolkit toolkit; |
128 | Double_t chi2; | |
129 | TVectorD fitParam; | |
130 | TMatrixD covMatrix; | |
131 | Int_t npoints; | |
132 | ||
133 | TCut cutF0("abs(gphi1-(pphi0+pphi1*bz))<0.05"); | |
134 | TCut cutF1("abs(gphiP1-(pphiP0+pphiP1*bz))<0.0005"); | |
135 | TCut cutN("entries>2"); | |
136 | ||
137 | TCut cutA = cutF0+cutF1+cutN; | |
138 | ||
ec5bd527 | 139 | treeT->SetAlias("side","(-1+(LTr.fP[1]>0)*2)"); // side |
27f5d48d | 140 | treeT->SetAlias("dr","(abs(LTr.fP[1]/250.))"); |
141 | treeT->SetAlias("sa","sin(atan2(lx1+0.0,lx0+0.0))"); | |
142 | treeT->SetAlias("ca","cos(atan2(lx1+0.0,lx0+0.0))"); | |
143 | treeT->SetAlias("ta","tan(asin(LTr.fP[2]+0.0))"); | |
144 | ||
145 | TString fstring=""; | |
146 | // | |
5fd9157a | 147 | fstring+="((dr)^3-1)*bz++"; //1 |
27f5d48d | 148 | fstring+="((dr)^3-1)*bz*sa++"; //3 |
27f5d48d | 149 | fstring+="((dr)^3-1)*bz*ca++"; //5 |
5fd9157a | 150 | // |
151 | fstring+="((dr)^1-1)*bz++"; //1 | |
152 | fstring+="((dr)^1-1)*bz*sa++"; //3 | |
153 | fstring+="((dr)^1-1)*bz*ca++"; //5 | |
154 | // | |
ec5bd527 | 155 | fstring+="side*((dr)^3-1)*bz++"; //1 |
156 | fstring+="side*((dr)^3-1)*bz*sa++"; //3 | |
157 | fstring+="side*((dr)^3-1)*bz*ca++"; //5 | |
158 | // | |
27f5d48d | 159 | fstring+="side*((dr)^1-1)*bz++"; //7 |
27f5d48d | 160 | fstring+="side*((dr)^1-1)*bz*sa++"; //9 |
27f5d48d | 161 | fstring+="side*((dr)^1-1)*bz*ca++"; //11 |
5fd9157a | 162 | // |
163 | fstring+="((dr)^3-1)*bz^2*ta++"; //2 | |
164 | fstring+="((dr)^3-1)*bz^2*sa*ta++"; //4 | |
165 | fstring+="((dr)^3-1)*bz^2*ca*ta++"; //6 | |
166 | ||
167 | fstring+="((dr)^1-1)*bz^2*ta++"; //2 | |
168 | fstring+="((dr)^1-1)*bz^2*sa*ta++"; //4 | |
169 | fstring+="((dr)^1-1)*bz^2*ca*ta++"; //6 | |
170 | // | |
171 | fstring+="side*((dr)^1-1)*bz^2*ta++"; //8 | |
172 | fstring+="side*((dr)^1-1)*bz^2*sa*ta++"; //10 | |
173 | fstring+="side*((dr)^1-1)*bz^2*ca*ta++"; //12 | |
27f5d48d | 174 | |
175 | ||
176 | ||
177 | ||
178 | TString *strq0 = toolkit.FitPlane(treeT,"gphi1-pphi0",fstring->Data(), cutA, chi2,npoints,fitParam,covMatrix); | |
179 | strq0->Tokenize("+")->Print(); | |
180 | treeT->SetAlias("fit",strq0->Data()); | |
ec5bd527 | 181 | printf("Chi2/npoints = %f\n",TMath::Sqrt(chi2/npoints)); |
182 | ||
183 | ||
27f5d48d | 184 | |
58388598 | 185 | treeT->SetAlias("bir1", "-AliTPCExB::GetBrI(254,atan2(lx1,lx0+0),LTr.fP[1],2)"); |
186 | treeT->SetAlias("birfi1","-AliTPCExB::GetBrfiI(254,atan2(lx1,lx0+0),LTr.fP[1],2)"); | |
ec5bd527 | 187 | |
58388598 | 188 | treeT->SetAlias("bir0", "AliTPCExB::GetBrI(254,atan2(lx1,lx0+0),LTr.fP[1],2)"); |
189 | treeT->SetAlias("birfi0","AliTPCExB::GetBrfiI(254,atan2(lx1,lx0+0),LTr.fP[1],2)"); | |
ec5bd527 | 190 | |
191 | treeT->SetAlias("fbz00", "(bir0+birfi0*ta)"); | |
192 | treeT->SetAlias("fbz02", "(birfi0+bir0*ta)"); | |
193 | treeT->SetAlias("fbz10", "(bir1+birfi1*ta)"); | |
194 | treeT->SetAlias("fbz12", "(birfi1+bir1*ta)"); | |
195 | // | |
196 | treeT->SetAlias("fbz0", "((fSide==0)*fbz00+(fSide==1)*fbz10)"); | |
197 | treeT->SetAlias("fbz2", "((fSide==0)*fbz02+(fSide==1)*fbz12)"); | |
198 | ||
199 | // | |
27f5d48d | 200 | TString fstringeb=""; |
201 | // | |
ec5bd527 | 202 | fstringeb+="bz*fbz0++"; //1 |
203 | fstringeb+="sign(bz)*bz^2*fbz2++"; //2 | |
204 | fstringeb+="((dr)^3-1)*bz*sa++"; //9 | |
205 | fstringeb+="side*((dr)^3-1)*bz*sa++"; //9 | |
206 | fstringeb+="side*((dr)^3-1)*bz++"; //7 | |
207 | //fstringeb+="((dr)^3-1)*bz++"; //7 | |
208 | //fstringeb+="((dr)^3-1)*bz*ca++"; //11 | |
209 | //fstringeb+="side*((dr)^3-1)*bz*sa++"; //9 | |
210 | //fstringeb+="side*((dr)^3-1)*bz*ca++"; //11 | |
27f5d48d | 211 | |
ec5bd527 | 212 | // |
58388598 | 213 | TString *strExB = toolkit.FitPlane(treeT,"gphi1-pphi0",fstringeb->Data(), "abs(gphi1-pphi0-fit)<0.06&&abs(bz)>0.1"+cutA, chi2,npoints,fitParam,covMatrix); |
27f5d48d | 214 | strExB->Tokenize("+")->Print(); |
ec5bd527 | 215 | printf("Chi2/npoints = %f\n",TMath::Sqrt(chi2/npoints)); |
27f5d48d | 216 | treeT->SetAlias("fitEB",strExB->Data()); |
ec5bd527 | 217 | |
218 | ||
219 | ||
220 | TString fstringeb=""; | |
221 | treeT->SetAlias("rr","sqrt(lx0^2+(lx1+0)^2)/250."); | |
222 | // | |
223 | fstringeb+="((dr)^3-1)*bz*rr++"; //9 | |
224 | fstringeb+="((dr)^1-1)*bz*rr++"; //9 | |
225 | fstringeb+="side*((dr)^3-1)*bz*rr++"; //9 | |
226 | fstringeb+="side*((dr)^1-1)*bz*rr++"; //9 | |
227 | // | |
228 | fstringeb+="((dr)^3-1)*bz*sa++"; //9 | |
229 | fstringeb+="((dr)^1-1)*bz*sa++"; //9 | |
230 | fstringeb+="side*((dr)^3-1)*bz*sa++"; //9 | |
231 | fstringeb+="side*((dr)^1-1)*bz*sa++"; //9 | |
232 | ||
233 | ||
234 | ||
235 | ||
236 | ||
237 | ||
238 | { | |
239 | Float_t otcor0 =0.7; | |
240 | Float_t omegatau0 =0.35; | |
241 | Float_t rms0 =10; | |
242 | for (Float_t otcor=0.6; otcor<1.1;otcor+=0.1) | |
243 | for (Float_t ometau=0.4; ometau<0.45;ometau+=0.01){ | |
244 | char hname[100]; | |
245 | sprintf(hname,"hist_ometau_%f(50,-0.10,0.10)",ometau); | |
246 | char expr[100]; | |
247 | sprintf(expr,"gphi1-pphi0-bz*fbz0*%f-sign(bz)*(%f*%f*bz)^2*fbz2>>%s",ometau,ometau,otcor,hname); | |
248 | treeT->Draw(expr,"abs(gphi1-pphi0-fit)<0.06&&abs(bz)>0.1"+cutA); | |
249 | printf("Ometau=%f\tCor=%f\tRMS=%f\n",ometau,otcor,treeT->GetHistogram()->GetRMS()); | |
250 | if (rms0>treeT->GetHistogram()->GetRMS()){ | |
251 | otcor0=otcor; | |
252 | omegatau0=ometau; | |
253 | rms0=treeT->GetHistogram()->GetRMS(); | |
254 | } | |
255 | } | |
256 | } | |
257 | ||
27f5d48d | 258 | } |
ec5bd527 | 259 | |
260 | ||
261 | ||
262 | ||
58388598 | 263 | void MakePic(){ |
264 | // | |
265 | // | |
266 | // | |
267 | ||
268 | } | |
269 |