8 TString name1900 =
"FieldMap_1900.root";
21 Double_t fXstep = (fXmax - fXmin) / (fNx - 1);
26 Double_t fYstep = (fYmax - fYmin) / (fNy - 1);
31 Double_t fZstep = (fZmax - fZmin) / (fNz - 1);
33 cout << fXstep <<
" " << fYstep <<
" " << fZstep << endl;
38 Int_t nExtraPointsX = 40;
40 Int_t nExtraPointsY = 20;
42 Int_t nExtraPointsZ = 50;
45 TGraph* gBx_vs_z[fNy][fNx];
46 TGraph* gBy_vs_z[fNy][fNx];
47 TGraph* gBz_vs_z[fNy][fNx];
50 while (reader.
Next()) {
51 if (pntNumber % 10000 == 0)
52 printf(
"pntNumber = %d\n", pntNumber);
54 Int_t iz = pntNumber % fNz;
55 Int_t ix = (pntNumber / fNz) % fNx;
56 Int_t iy = ((pntNumber / fNz) / fNx) % fNy;
59 gBx_vs_z[iy][ix] =
new TGraph(fNz + nExtraPointsZ + nExtraPointsZ);
60 gBy_vs_z[iy][ix] =
new TGraph(fNz + nExtraPointsZ + nExtraPointsZ);
61 gBz_vs_z[iy][ix] =
new TGraph(fNz + nExtraPointsZ + nExtraPointsZ);
67 gBx_vs_z[iy][ix]->
SetPoint(iz + nExtraPointsZ, z[0], Bx);
68 gBy_vs_z[iy][ix]->
SetPoint(iz + nExtraPointsZ, z[0],
Abs(By));
69 gBz_vs_z[iy][ix]->
SetPoint(iz + nExtraPointsZ, z[0], Bz);
74 for (
Int_t iy = 0; iy < fNy; ++iy) {
75 for (
Int_t ix = 0; ix < fNx; ++ix) {
77 TF1* ry =
new TF1(
"rightY",
"expo");
78 TF1* ly =
new TF1(
"leftY",
"expo");
81 if (gBy_vs_z[iy][ix]->Fit(
"rightY",
"S0Q+",
"", 420, fZmax)->IsValid() ==
kFALSE || ry->
GetParameter(1) > 0)
85 if (gBy_vs_z[iy][ix]->Fit(
"leftY",
"S0Q+",
"", fZmin, -140)->IsValid() ==
kFALSE || ly->
GetParameter(1) < 0)
90 for (
Int_t iz = 0; iz < nExtraPointsZ; ++iz) {
92 gBx_vs_z[iy][ix]->
SetPoint(fNz + nExtraPointsZ + iz, z, 0.0 );
93 gBy_vs_z[iy][ix]->
SetPoint(fNz + nExtraPointsZ + iz, z, (badFitR) ? 0.0 : ry->
Eval(z));
94 gBz_vs_z[iy][ix]->
SetPoint(fNz + nExtraPointsZ + iz, z, 0.0 );
96 for (
Int_t iz = 0; iz < nExtraPointsZ; ++iz) {
98 gBx_vs_z[iy][ix]->
SetPoint(nExtraPointsZ - 1 - iz, z, 0.0 );
99 gBy_vs_z[iy][ix]->
SetPoint(nExtraPointsZ - 1 - iz, z, (badFitL) ? 0.0 : ly->
Eval(z));
100 gBz_vs_z[iy][ix]->
SetPoint(nExtraPointsZ - 1 - iz, z, 0.0 );
107 fZmin -= (nExtraPointsZ)*fZstep;
108 fNz = gBy_vs_z[0][0]->
GetN();
110 TGraph* gBx_vs_x[fNy][fNz];
111 TGraph* gBy_vs_x[fNy][fNz];
112 TGraph* gBz_vs_x[fNy][fNz];
113 for (
Int_t iy = 0; iy < fNy; ++iy) {
114 for (
Int_t iz = 0; iz < fNz; ++iz) {
115 gBx_vs_x[iy][iz] =
new TGraph(fNx + nExtraPointsX + nExtraPointsX);
116 gBy_vs_x[iy][iz] =
new TGraph(fNx + nExtraPointsX + nExtraPointsX);
117 gBz_vs_x[iy][iz] =
new TGraph(fNx + nExtraPointsX + nExtraPointsX);
121 for (
Int_t iy = 0; iy < fNy; ++iy) {
122 for (
Int_t ix = 0; ix < fNx; ++ix) {
124 for (
Int_t iz = 0; iz < fNz; ++iz) {
128 gBx_vs_x[iy][iz]->
SetPoint(ix + nExtraPointsX, x, bx);
129 gBy_vs_x[iy][iz]->
SetPoint(ix + nExtraPointsX, x, by);
130 gBz_vs_x[iy][iz]->
SetPoint(ix + nExtraPointsX, x, bz);
135 for (
Int_t iy = 0; iy < fNy; ++iy) {
136 for (
Int_t iz = 0; iz < fNz; ++iz) {
138 TF1* ry =
new TF1(
"rightY",
"expo");
139 TF1* ly =
new TF1(
"leftY",
"expo");
142 if (gBy_vs_x[iy][iz]->Fit(
"rightY",
"S0Q+",
"", 120, 145)->IsValid() ==
kFALSE || ry->
GetParameter(1) > 0) {
145 if (gBy_vs_x[iy][iz]->Fit(
"leftY",
"S0Q+",
"", -155, -130)->IsValid() ==
kFALSE || ly->
GetParameter(1) < 0)
150 for (
Int_t ix = 0; ix < nExtraPointsX; ++ix) {
152 gBx_vs_x[iy][iz]->
SetPoint(fNx + nExtraPointsX + ix, x, 0.0 );
153 gBy_vs_x[iy][iz]->
SetPoint(fNx + nExtraPointsX + ix, x, (badFitR) ? 0.0 : ry->
Eval(x));
154 gBz_vs_x[iy][iz]->
SetPoint(fNx + nExtraPointsX + ix, x, 0.0 );
156 for (
Int_t ix = 0; ix < nExtraPointsX; ++ix) {
158 gBx_vs_x[iy][iz]->
SetPoint(nExtraPointsX - 1 - ix, x, 0.0 );
159 gBy_vs_x[iy][iz]->
SetPoint(nExtraPointsX - 1 - ix, x, (badFitL) ? 0.0 : ly->
Eval(x));
160 gBz_vs_x[iy][iz]->
SetPoint(nExtraPointsX - 1 - ix, x, 0.0 );
168 fXmin -= (nExtraPointsX)*fXstep;
169 fNx = gBy_vs_x[0][0]->
GetN();
171 TGraph* gBx_vs_y[fNx][fNz];
172 TGraph* gBy_vs_y[fNx][fNz];
173 TGraph* gBz_vs_y[fNx][fNz];
174 for (
Int_t ix = 0; ix < fNx; ++ix) {
175 for (
Int_t iz = 0; iz < fNz; ++iz) {
176 gBx_vs_y[ix][iz] =
new TGraph(fNy + nExtraPointsY + nExtraPointsY);
177 gBy_vs_y[ix][iz] =
new TGraph(fNy + nExtraPointsY + nExtraPointsY);
178 gBz_vs_y[ix][iz] =
new TGraph(fNy + nExtraPointsY + nExtraPointsY);
182 for (
Int_t iy = 0; iy < fNy; ++iy) {
184 for (
Int_t ix = 0; ix < fNx; ++ix) {
185 for (
Int_t iz = 0; iz < fNz; ++iz) {
189 gBx_vs_y[ix][iz]->
SetPoint(iy + nExtraPointsY, y, bx);
190 gBy_vs_y[ix][iz]->
SetPoint(iy + nExtraPointsY, y, by);
191 gBz_vs_y[ix][iz]->
SetPoint(iy + nExtraPointsY, y, bz);
196 for (
Int_t ix = 0; ix < fNx; ++ix) {
197 for (
Int_t iz = 0; iz < fNz; ++iz) {
199 TF1* ry =
new TF1(
"rightY",
"expo");
200 TF1* ly =
new TF1(
"leftY",
"expo");
203 if (gBy_vs_y[ix][iz]->Fit(
"rightY",
"S0Q+",
"", 40, 55)->IsValid() ==
kFALSE || ry->
GetParameter(1) > 0) {
206 if (gBy_vs_y[ix][iz]->Fit(
"leftY",
"S0Q+",
"", -40, -20)->IsValid() ==
kFALSE || ly->
GetParameter(1) < 0) {
210 for (
Int_t iy = 0; iy < nExtraPointsY; ++iy) {
212 gBx_vs_y[ix][iz]->
SetPoint(fNy + nExtraPointsY + iy, y, 0.0 );
213 gBy_vs_y[ix][iz]->
SetPoint(fNy + nExtraPointsY + iy, y, (badFitR) ? 0.0 : ry->
Eval(y));
214 gBz_vs_y[ix][iz]->
SetPoint(fNy + nExtraPointsY + iy, y, 0.0 );
216 for (
Int_t iy = 0; iy < nExtraPointsY; ++iy) {
218 gBx_vs_y[ix][iz]->
SetPoint(nExtraPointsY - 1 - iy, y, 0.0 );
219 gBy_vs_y[ix][iz]->
SetPoint(nExtraPointsY - 1 - iy, y, (badFitL) ? 0.0 : ly->
Eval(y));
220 gBz_vs_y[ix][iz]->
SetPoint(nExtraPointsY - 1 - iy, y, 0.0 );
228 fYmin -= (nExtraPointsY)*fYstep;
229 fNy = gBy_vs_y[0][0]->
GetN();
231 TString out =
"FieldMap_1900_extrap.root";
233 TTree* t =
new TTree(
"Field_map",
"data from ASCII");
236 t->
Branch(
"field_points", &pointToWrite,
"X/D:Y/D:Z/D:Bx/D:By/D:Bz/D");
238 cout << fXmin <<
" " << fXmin + (fNx - 1) * fXstep << endl;
239 cout << fYmin <<
" " << fYmin + (fNy - 1) * fYstep << endl;
240 cout << fZmin <<
" " << fZmin + (fNz - 1) * fZstep << endl;
242 for (
Int_t iy = 0; iy < fNy; ++iy) {
243 for (
Int_t ix = 0; ix < fNx; ++ix) {
244 for (
Int_t iz = 0; iz < fNz; ++iz) {
245 Double_t xOut = fXmin + ix * fXstep;
246 Double_t yOut = fYmin + iy * fYstep;
247 Double_t zOut = fZmin + iz * fZstep;
254 pointToWrite = tmpPnt;