3 #include <TMultiGraph.h>
37 const Double_t ic1[] = { 4.9895, 15.3560 };
38 const Double_t ic2[] = { 1.8007, 17.2000 };
39 const Double_t oc1[] = { 4.2231, 26.6638 };
40 const Double_t oc2[] = { 1.8357, 27.9500 };
42 Double_t minR = (r ==
'I' ? 4.5213 : 15.4);
43 Double_t maxR = (r ==
'I' ? 17.2 : 28.0);
46 Int_t nStrips = (r ==
'I' ? 512 : 256);
47 Int_t nSec = (r ==
'I' ? 20 : 40);
48 Float_t segment = rad / nStrips;
49 Float_t basearc = 2 * TMath::Pi() / (0.5 * nSec);
50 Float_t radius = minR + t * segment;
51 Float_t baselen = 0.5 * basearc * radius;
53 const Double_t* c1 = (r ==
'I' ? ic1 : oc1);
54 const Double_t* c2 = (r ==
'I' ? ic2 : oc2);
58 Float_t cr = TMath::Sqrt(c1[0]*c1[0]+c1[1]*c1[1]);
59 if (radius <= cr) newm = 1;
65 Float_t D = c1[0] * c2[1] - c1[1] * c2[0];
68 Float_t dr = TMath::Sqrt(dx*dx+dy*dy);
69 Float_t det = radius * radius * dr * dr - D*D;
71 if (det < 0) newm = 1;
72 else if (det == 0) newm = 1;
74 Float_t x = (+D * dy + dx * TMath::Sqrt(det)) / dr / dr;
75 Float_t y = (-D * dx + dy * TMath::Sqrt(det)) / dr / dr;
76 Float_t th = TMath::ATan2(x, y);
78 newm = th / (basearc/2);
82 Float_t slope = (c1[1] - c2[1]) / (c1[0] - c2[0]);
83 Float_t constant = (c2[1] * c1[0] - c2[0] * c1[1]) / (c1[0]-c2[0]);
85 Float_t d = (TMath::Power(TMath::Abs(radius*slope),2) +
86 TMath::Power(radius,2) - TMath::Power(constant,2));
91 Float_t x = ((-TMath::Sqrt(d) - slope * constant) /
92 (1+TMath::Power(slope, 2)));
97 if(x < c1[0] && y> c1[1]) {
99 Float_t theta = TMath::ATan2(x,y);
100 arclen = radius * theta;
104 Float_t basearea1 = 0.5 * baselen * TMath::Power(radius,2);
105 Float_t basearea2 = 0.5 * baselen * TMath::Power((radius-segment),2);
106 Float_t basearea = basearea1 - basearea2;
109 Float_t area1 = 0.5 * arclen * TMath::Power(radius,2);
110 Float_t area2 = 0.5 * arclen * TMath::Power((radius-segment),2);
114 oldm = area/basearea;
127 TCanvas*
c =
new TCanvas(Form(
"c%c", r), r ==
'I' ?
128 "Inner" :
"Outer", 800, 500);
130 const Double_t ic1[] = { 4.9895, 15.3560 };
131 const Double_t ic2[] = { 1.8007, 17.2000 };
132 const Double_t oc1[] = { 4.2231, 26.6638 };
133 const Double_t oc2[] = { 1.8357, 27.9500 };
135 const Double_t* c1 = (r ==
'I' ? ic1 : oc1);
136 const Double_t* c2 = (r ==
'I' ? ic2 : oc2);
137 Double_t minR = (r ==
'I' ? 4.5213 : 15.4);
138 Double_t maxR = (r ==
'I' ? 17.2 : 28.0);
140 Float_t cr = TMath::Sqrt(c1[0]*c1[0]+c1[1]*c1[1]);
141 Double_t theta = (r ==
'I' ? 18 : 9);
142 TH2* frame =
new TH2F(
"frame",
"Frame", 100, -10, 10, 100, 0, 30);
145 TLine* line =
new TLine(c1[0], c1[1], c2[0], c2[1]);
146 line->SetLineColor(kBlue+1);
149 UShort_t nT = (r ==
'I' ? 512 : 256);
150 for (
Int_t t = offT; t < nT; t += dt) {
151 Double_t radius = minR + t * rad / nT;
153 TArc* circle =
new TArc(0, 0, radius, 90-theta, 90+theta);
154 circle->SetFillColor(0);
155 circle->SetFillStyle(0);
159 if (radius <= cr)
continue;
165 Float_t D = c1[0] * c2[1] - c1[1] * c2[0];
168 Float_t dr = TMath::Sqrt(dx*dx+dy*dy);
169 Float_t det = radius * radius * dr * dr - D*D;
171 if (det < 0)
continue;
172 if (det == 0)
continue;
175 Float_t x = (+D * dy - dx * TMath::Sqrt(det)) / dr / dr;
176 Float_t y = (-D * dx - dy * TMath::Sqrt(det)) / dr / dr;
178 TMarker* m =
new TMarker(x, y, 20);
179 m->SetMarkerColor(kRed+1);
182 x = (+D * dy + dx * TMath::Sqrt(det)) / dr / dr;
183 y = (-D * dx + dy * TMath::Sqrt(det)) / dr / dr;
188 m =
new TMarker(x, y, 20);
189 m->SetMarkerColor(kGreen+1);
202 TCanvas*
c =
new TCanvas(
"c",
"C");
207 innerOld->SetName(
"innerOld");
208 innerOld->SetName(
"Inner type, old");
209 innerOld->SetMarkerStyle(21);
210 innerOld->SetMarkerColor(kRed+1);
211 outerOld->SetName(
"outerOld");
212 outerOld->SetName(
"Outer type, old");
213 outerOld->SetMarkerStyle(21);
214 outerOld->SetMarkerColor(kBlue+1);
215 innerNew->SetName(
"innerNew");
216 innerNew->SetName(
"Inner type, new");
217 innerNew->SetMarkerStyle(20);
218 innerNew->SetMarkerColor(kGreen+1);
219 outerNew->SetName(
"outerNew");
220 outerNew->SetName(
"Outer type, new");
221 outerNew->SetMarkerStyle(20);
222 outerNew->SetMarkerColor(kMagenta+1);
224 TMultiGraph* all =
new TMultiGraph(
"all",
"Acceptances");
230 TH2* innerCor =
new TH2F(
"innerCor",
"Inner correlation", 100,0,1,100,0,1);
231 TH2* outerCor =
new TH2F(
"outerCor",
"Outer correlation", 100,0,1,100,0,1);
232 innerCor->SetMarkerStyle(20);
233 outerCor->SetMarkerStyle(20);
234 innerCor->SetMarkerColor(kRed+1);
235 outerCor->SetMarkerColor(kBlue+1);
238 THStack* stack =
new THStack(
"corr",
"Correlations");
239 stack->Add(innerCor);
240 stack->Add(outerCor);
242 for (
Int_t i = 0; i < 512; i++) {
246 innerOld->SetPoint(i, i, oldAcc);
247 innerNew->SetPoint(i, i, newAcc);
250 innerCor->Fill(oldAcc, newAcc);
251 if (i >= 256)
continue;
254 outerOld->SetPoint(i, i, oldAcc);
255 outerNew->SetPoint(i, i, newAcc);
257 outerCor->Fill(oldAcc, newAcc);
265 TCanvas* c2 =
new TCanvas(
"cc",
"cc");
266 stack->Draw(
"nostack p");
267 TLine* l =
new TLine(0,0,1,1);
void DrawSolution(Char_t r, UShort_t dt=16, UShort_t offT=128)
void AcceptanceCorrection(Char_t r, UShort_t t, Float_t &oldm, Float_t &newm)