WCSim
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
WCSimGenerator_Radioactivity.cc
Go to the documentation of this file.
1 /*********************************************************************************/
7 /*********************************************************************************/
8 
10 #include "Randomize.hh"
11 
12 // TF2 function
13 // val[0] is R^{2}
14 // val[1] is Z
15 // par[0] is the lambda of the radioisotope
16 // par[1] is the M / bin
17 
18 
19 // Declare static variables:
21 
23 
27 
34 
41 
48 
52 
61 
70 
77 
95 
98 
101 
104 
108 
115 
126 
136 
146 
156 
165 
167  myDetector = myDC;
168  this->Initialize();
169 }
170 
172  if ( thRnFunction ) delete thRnFunction;
173  if ( tFittingR000 ) delete tFittingR000;
174  if ( tFittingR025 ) delete tFittingR025;
175  if ( tFittingR045 ) delete tFittingR045;
176  if ( tFittingR075 ) delete tFittingR075;
177  if ( tFittingR145 ) delete tFittingR145;
178  if ( tFittingR175 ) delete tFittingR175;
179  if ( tFittingR195 ) delete tFittingR195;
180  if ( tFittingR215 ) delete tFittingR215;
181 }
182 
183 
185 
186  // Using Z = 36.2 m and R = (33.6815/2.) m
187  // We have a surface of the ID of about 5612.4302 m^{2}
188  // Taking 11 129 PMTs we have 0.50430678 m^{2} per PMT
189  // Assuming 10 mBq at equilibrium near the PMTs we have:
190  // 19.82 mBq/m^{2} -> Assume that at border we have 19.82 mBq/m^{3} (infinitisemal volume)
191 
192  // HK:
193  // ID surface: 15934.360 m^{2}
194  // 40k PMT: 0.39835899 m^{2} per PMT -> 25.10 mBq/m^{2}
195  // 20k PMT: 0.79671798 m^{2} per PMT -> 12.55 mBq/m^{2}
196 
197  //Radon diffusion coefficient in water from https://pdfs.semanticscholar.org/a6d1/7962c7ae2af1e9663349be4e85eb304541ca.pdf
198  fRnDiffusion_Coef = 6.8e-4 * 1e-4; //m2 / sec
199 
200  // Radon radioactivity constant
201  fRnLambda = log(2) / (3.824*24.*3600.);
202 
203  fRnSK_Center = 0.1; // mBq/m^{3} -> From Nakano-san et al.
204  fRnSK_Bottom = 2.44; // mBq/m^{3} -> From Nakano-san et al.
205  //fRnSK_Bottom = 3.84; // mBq/m^{3} -> Estimation from SK-IV
206 
207  fRn_PerPMT = 10.; // mBq/PMT (equilibrium), from 97 SK note
208  //fRn_PerPMT = 4.4; // mBq/PMT (equilibrium), from T. Shiozawa SK-PMT (2020)
209  //fRn_PerPMT = 4.9; // mBq/PMT (equilibrium), from T. Shiozawa HK-PMT (2020)
210 
211  // Not used
212  //fRn_Border = 19.82; // mBq/m^{3} -> SK case
213  //fRn_Border = 25.10; // mBq/m^{3} -> HK-40k case
214  //fRn_Border = 12.55; // mBq/m^{3} -> HK-20k case
215 
216  // Detector size:
217  // HK (Should be extract from detector construction?)
218  //fHK_Z_max = 66.8/2.;
219  //fHK_R_max = 64.8/2.;
220  fHK_Z_max = myDetector->GetIDHeight() / CLHEP::m / 2.;
221  fHK_R_max = myDetector->GetIDRadius() / CLHEP::m;
223 
224  fHK_Z_reco = fHK_Z_max - 2.;
225  fHK_R_reco = fHK_R_max - 2.;
227 
228  // Constant
229  fSK_Z_max = 36.200 / 2.;
230  fSK_R_max = 33.6815 / 2.;
232 
233  fSK_Z_reco = fSK_Z_max - 2.;
234  fSK_R_reco = fSK_R_max - 2.;
236 
237  fZ_max = fHK_Z_max;
238  fR_max = fHK_R_max;
239  fR2_max = fR_max * fR_max;
240 
241  fZ_reco = fZ_max - 2.;
242  fR_reco = fR_max - 2.;
244 
245 
246  G4int nPMT = myDetector->Get_Pmts()->size();
247  fRn_Border = fRn_PerPMT * nPMT / (2. * TMath::Pi() * fHK_R_max * fHK_R_max + 2. * TMath::Pi() * fHK_R_max * fHK_Z_max * 2. );
248 
249  // Binning:
250  fMperBin = 0.36; //m
251  fBin_Z_reco = (fHK_Z_reco * 2.) / fMperBin;
252  fBin_Z_max = (fHK_Z_max * 2.) / fMperBin;
253  fBin_D_reco = (fHK_R_reco * 2.) / fMperBin;
254  fBin_D_max = (fHK_R_max * 2.) / fMperBin;
256  fBin_R2_max = (fHK_R2_max ) / (fMperBin * fMperBin);
257 
258  fScenario = 0;
259  thRnFunction = 0;
260 
261  this->SetScenario(0);
262 }
263 
264 void WCSimGenerator_Radioactivity::Configuration(G4int iScenario, G4double dLifeTime) {
265 
266 
267  G4cout << " ========================================================================== " << G4endl;
268  G4cout << " Configuration for Radioactivity generator " << G4endl;
269 
270  fScenario = iScenario;
271  if ( dLifeTime > 0 )
272  fRnLambda = log(2) / (dLifeTime);
273  this->SetScenario(iScenario);
274 
275  G4cout << " Livetime: " << log(2) / fRnLambda << " sec " << G4endl;
276  G4cout << " Lambda: " << fRnLambda << " " << G4endl;
277  G4cout << " Activity on ID border: " << fRn_Border << " mBq/m^3 " << G4endl;
278  G4cout << " PMT number: " << myDetector->Get_Pmts()->size() << G4endl;
279  G4cout << " Surface: " << (2. * TMath::Pi() * fHK_R_max * fHK_R_max + 2. * TMath::Pi() * fHK_R_max * fHK_Z_max * 2. ) << G4endl;
280  //G4cout << fHK_R_max << " " << fHK_Z_max * 2 << G4endl;
281  G4cout << " Mean activity in the full ID: " << fIntegral << " mBq ( Concentration: " << fIntegral / (2. * TMath::Pi() * fHK_R_max * fHK_R_max * fHK_Z_max) << " mBq / m^3 ) " << G4endl;
282  G4cout << " ========================================================================== " << G4endl;
283 }
284 
286 
287  fScenario = iScenario;
288 
289  if ( fScenario == 1 ) {
290  // Scenario A: Every thing is scaled to Max
294 
295  fScaleTypeInStrucZ1 = 0.;
296  fScaleTypeInStrucZ2 = fZ_reco / fSK_Z_reco; // Scalling
297  fScaleTypeInStrucZ3 = 0.;
298 
299  fScaleTypeOutsideZ1 = 0.;
300  fScaleTypeOutsideZ2 = fZ_max / fSK_Z_max; // Scalling
301  fScaleTypeOutsideZ3 = 0.;
302 
303  fScaleTypeOutsideR1 = 0.;
304  fScaleTypeOutsideR2 = fR_max / fSK_R_max; // Scalling
305  fScaleTypeOutsideR3 = 0.;
306  }
307  else if ( fScenario == 2 ) {
308  // Scenario B: Every thing inside the fiduicial volume is scaled to Reco, every else is scale to Max-Reco
312 
313  fScaleTypeInStrucZ1 = 0.;
314  fScaleTypeInStrucZ2 = fZ_reco / fSK_Z_reco; // Scalling
315  fScaleTypeInStrucZ3 = 0.;
316 
318  fScaleTypeOutsideZ2 = (fZ_max - fZ_reco) / (fSK_Z_max - fSK_Z_reco); // Scalling
320 
322  fScaleTypeOutsideR2 = (fR_max - fR_reco) / (fSK_R_max - fSK_R_reco); // Scalling
324 
325  }
326  else if ( fScenario == 3 ) {
327  // Scenario C: Z: Structure at -10m and -8m are absolute from bottom, R2: Flow is absolute from border, other structure are scaled to Reco
331 
333  fScaleTypeInStrucZ2 = 1.; // No scalling
335 
337  fScaleTypeOutsideZ2 = 1.; // No scalling
339 
341  fScaleTypeOutsideR2 = 1.; // No scalling
343 
344  }
345  else {
346  // Default scenario (Scenario C)
350 
352  fScaleTypeInStrucZ2 = 1.; // No scalling
354 
356  fScaleTypeOutsideZ2 = 1.; // No scalling
358 
360  fScaleTypeOutsideR2 = 1.; // No scalling
362  }
363 
364  // Compute positions following scenario:
366  fChangeZNMax = -1.0 * fZ_max;
368 
369  fR2_000 = 0.;
370  fR2_025 = 25. * fScaleTypeInsideR2;
371  fR2_045 = 45. * fScaleTypeInsideR2;
372  fR2_075 = 75. * fScaleTypeInsideR2;
373  fR2_145 = 145. * fScaleTypeInsideR2;
374  fR2_175 = 175. * fScaleTypeInsideR2;
375  fR2_195 = 195. * fScaleTypeInsideR2;
376  fR2_215 = 220. * fScaleTypeInsideR2;
377 
378  fR_000 = 0;
379  fR_025 = sqrt( 25.) * fScaleTypeInsideR;
380  fR_045 = sqrt( 45.) * fScaleTypeInsideR;
381  fR_075 = sqrt( 75.) * fScaleTypeInsideR;
382  fR_145 = sqrt(145.) * fScaleTypeInsideR;
383  fR_175 = sqrt(175.) * fScaleTypeInsideR;
384  fR_195 = sqrt(195.) * fScaleTypeInsideR;
385  fR_215 = sqrt(220.) * fScaleTypeInsideR;
386 
387  //fZ_p16 = ( 15.3 - fScaleTypeInStrucZ1) * fScaleTypeInStrucZ2 + fScaleTypeInStrucZ3; // before tunning
388  //fZ_p14 = ( 15.3 - fScaleTypeInStrucZ1) * fScaleTypeInStrucZ2 + fScaleTypeInStrucZ3; // before tunning
389  //fZ_m16 = (-15.3 + fScaleTypeOutsideZ1) * fScaleTypeOutsideZ2 - fScaleTypeOutsideZ3; // before tunning
390 
391  fZ_p16 = ( 15.7 - fScaleTypeInStrucZ1) * fScaleTypeInStrucZ2 + fScaleTypeInStrucZ3; // Inside reco-volume structure
392  fZ_p14 = ( 14.0 - fScaleTypeInStrucZ1) * fScaleTypeInStrucZ2 + fScaleTypeInStrucZ3; // Inside reco-volume structure
393  fZ_000 = 0.;
394  fZ_m10 = (-10.2 + fScaleTypeInStrucZ1) * fScaleTypeInStrucZ2 - fScaleTypeInStrucZ3; // Inside reco-volume structure
395  fZ_m13 = (-13.0 + fScaleTypeInStrucZ1) * fScaleTypeInStrucZ2 - fScaleTypeInStrucZ3; // Inside reco-volume structure
396  fZ_m16 = (-16.7 + fScaleTypeOutsideZ1) * fScaleTypeOutsideZ2 - fScaleTypeOutsideZ3; // Outside reco-volume structure
397 
398  // Change point for R210:
399  fChangeR210N13 = (-13.032 + fScaleTypeInStrucZ1) * fScaleTypeInStrucZ2 - fScaleTypeInStrucZ3; // -13m Inside reco-volume structure
400  fChangeR210N10 = (- 9.955 + fScaleTypeInStrucZ1) * fScaleTypeInStrucZ2 - fScaleTypeInStrucZ3; // -10m Inside reco-volume structure
401  fChangeR210N5 = - 4.9956 * fScaleTypeInsideZ;
402  fChangeR210P1 = 0.9955 * fScaleTypeInsideZ;
404  fChangeR210P13 = 13.5026 * fScaleTypeInsideZ;
405 
406  // Change point for R190:
407  fChangeR190N10 = (-10.136 + fScaleTypeInStrucZ1) * fScaleTypeInStrucZ2 - fScaleTypeInStrucZ3; // -10m Inside reco-volume structure
408  fChangeR190N8 = (- 7.964 + fScaleTypeInStrucZ1) * fScaleTypeInStrucZ2 - fScaleTypeInStrucZ3; // - 8m Inside reco-volume structure
409 
410  // Change point for R170:
411  fChangeR170N10 = (-10.136 + fScaleTypeInStrucZ1) * fScaleTypeInStrucZ2 - fScaleTypeInStrucZ3; // -10m Inside reco-volume structure
412  fChangeR170N8 = (- 7.964 + fScaleTypeInStrucZ1) * fScaleTypeInStrucZ2 - fScaleTypeInStrucZ3; // - 8m Inside reco-volume structure
413 
414  // Change point for R140:
415  fChangeR140N10 = (-10.136 + fScaleTypeInStrucZ1) * fScaleTypeInStrucZ2 - fScaleTypeInStrucZ3; // -10m Inside reco-volume structure
416  fChangeR140N8 = (- 8.4527 + fScaleTypeInStrucZ1) * fScaleTypeInStrucZ2 - fScaleTypeInStrucZ3; // -8.5m Inside reco-volume structure
417 
418  // Change point for R070:
419  fChangeR070N10 = (-10.136 + fScaleTypeInStrucZ1) * fScaleTypeInStrucZ2 - fScaleTypeInStrucZ3; // -10m Inside reco-volume structure
420  fChangeR070N8 = (- 7.964 + fScaleTypeInStrucZ1) * fScaleTypeInStrucZ2 - fScaleTypeInStrucZ3; // - 8m Inside reco-volume structure
421 
422  // Change point for R040:
423  fChangeR040N10 = (-10.679 + fScaleTypeInStrucZ1) * fScaleTypeInStrucZ2 - fScaleTypeInStrucZ3; // -10m Inside reco-volume structure
424 
425  // Change point for R020:
426  fChangeR020N10 = (-10.498 + fScaleTypeInStrucZ1) * fScaleTypeInStrucZ2 - fScaleTypeInStrucZ3; // -10m Inside reco-volume structure
427 
428  // Change point for R000:
429  fChangeR000N10 = (-10.86 + fScaleTypeInStrucZ1) * fScaleTypeInStrucZ2 - fScaleTypeInStrucZ3; // -10m Inside reco-volume structure
430 
431  // Change point for ZmMx:
434 
435  // Change point for Zm16:
438 
439  // Change point for Zm13:
442 
443  // Change point for Zm10:
445 
446  // Change point for Zp16:
449 
450  // Barrel flow structure
451  fChangeZm16Flow = pow(( (sqrt(260.92199) - fScaleTypeOutsideR1) * fScaleTypeOutsideR2 + fScaleTypeOutsideR3), 2.);// Outside reco-volume structure
452  fChangeZm13Flow = pow(( (sqrt(252.41367) - fScaleTypeOutsideR1) * fScaleTypeOutsideR2 + fScaleTypeOutsideR3), 2.);// Outside reco-volume structure
453  fChangeZm10Flow = pow(( (sqrt(255.24977) - fScaleTypeOutsideR1) * fScaleTypeOutsideR2 + fScaleTypeOutsideR3), 2.);// Outside reco-volume structure
454  fChangeZ000Flow = pow(( (sqrt(243.90534) - fScaleTypeOutsideR1) * fScaleTypeOutsideR2 + fScaleTypeOutsideR3), 2.);// Outside reco-volume structure
455  fChangeZp14Flow = pow(( (sqrt(252.41367) - fScaleTypeOutsideR1) * fScaleTypeOutsideR2 + fScaleTypeOutsideR3), 2.);// Outside reco-volume structure
456  fChangeZp16Flow = pow(( (sqrt(258.08588) - fScaleTypeOutsideR1) * fScaleTypeOutsideR2 + fScaleTypeOutsideR3), 2.);// Outside reco-volume structure
457 
458  // Gaussian shapes:
459  // R190
460  fGaussM0 = - 3.0000001 * fScaleTypeInsideZ;
461  fGaussM1 = - 1.0000000 * fScaleTypeInsideZ;
462  fGaussM2 = 1.2859100 * fScaleTypeInsideZ;
463  fGaussM3 = 3.1980399 * fScaleTypeInsideZ;
464  fGaussR190M3 = 3.2580000 * fScaleTypeInsideZ;
465  fGaussM4 = 5.3665300 * fScaleTypeInsideZ;
466  fGaussM5 = 7.5549000 * fScaleTypeInsideZ;
467  fGaussM6 = 9.6014800 * fScaleTypeInsideZ;
468  fGaussM7 = 11.8807000 * fScaleTypeInsideZ;
469  fGaussM8 = 13.9810000 * fScaleTypeInsideZ;
470 
471  fGaussR190S0 = 0.60000000 * fScaleTypeInsideZ;
472  fGaussR190S1 = 0.72400000 * fScaleTypeInsideZ;
473  fGaussR190S2 = 0.81450000 * fScaleTypeInsideZ;
474  fGaussR190S3 = 0.72400000 * fScaleTypeInsideZ;
475  fGaussR190S4 = 0.81450000 * fScaleTypeInsideZ;
476  fGaussR190S5 = 0.72400000 * fScaleTypeInsideZ;
477  fGaussR190S6 = 0.81450000 * fScaleTypeInsideZ;
478  fGaussR190S7 = 0.90500000 * fScaleTypeInsideZ;
479  fGaussR190S8 = 0.72400000 * fScaleTypeInsideZ;
480 
481  // R170
482  fGaussR170S0 = 0.60000000 * fScaleTypeInsideZ;
483  fGaussR170S1 = 0.72400000 * fScaleTypeInsideZ;
484  fGaussR170S2 = 0.72400000 * fScaleTypeInsideZ;
485  fGaussR170S3 = 0.72400000 * fScaleTypeInsideZ;
486  fGaussR170S4 = 0.81450000 * fScaleTypeInsideZ;
487  fGaussR170S5 = 0.72400000 * fScaleTypeInsideZ;
488  fGaussR170S6 = 0.72400000 * fScaleTypeInsideZ;
489  fGaussR170S7 = 0.81450000 * fScaleTypeInsideZ;
490  fGaussR170S8 = 0.81450000 * fScaleTypeInsideZ;
491 
492  // R140:
493  fGaussR140S0 = 0.60000000 * fScaleTypeInsideZ;
494  fGaussR140S1 = 0.60000000 * fScaleTypeInsideZ;
495  fGaussR140S2 = 0.60000000 * fScaleTypeInsideZ;
496  fGaussR140S3 = 0.60000000 * fScaleTypeInsideZ;
497  fGaussR140S4 = 0.70000000 * fScaleTypeInsideZ;
498  fGaussR140S5 = 0.60000000 * fScaleTypeInsideZ;
499  fGaussR140S6 = 0.60000000 * fScaleTypeInsideZ;
500  fGaussR140S7 = 0.70000000 * fScaleTypeInsideZ;
501  fGaussR140S8 = 0.70000000 * fScaleTypeInsideZ;
502 
503  if ( tFittingR000 ) delete tFittingR000;
504  if ( tFittingR025 ) delete tFittingR025;
505  if ( tFittingR045 ) delete tFittingR045;
506  if ( tFittingR075 ) delete tFittingR075;
507  if ( tFittingR145 ) delete tFittingR145;
508  if ( tFittingR175 ) delete tFittingR175;
509  if ( tFittingR195 ) delete tFittingR195;
510  if ( tFittingR215 ) delete tFittingR215;
511 
512  tFittingR000 = new TGraph(8);
513  tFittingR025 = new TGraph(8);
514  tFittingR045 = new TGraph(8);
515  tFittingR075 = new TGraph(8);
516  tFittingR145 = new TGraph(8);
517  tFittingR175 = new TGraph(8);
518  tFittingR195 = new TGraph(8);
519  tFittingR215 = new TGraph(8);
520 
521  double dZaxis = 0;
522  int i = 0;
523 
524  dZaxis = -1. * fZ_max;
525  tFittingR000->SetPoint(i,dZaxis, R2Fit_ZmM(fR2_000,fRnLambda,1.) / ZFit_R000(dZaxis,fRnLambda,1.) );
526  tFittingR025->SetPoint(i,dZaxis, R2Fit_ZmM(fR2_025,fRnLambda,1.) / ZFit_R020(dZaxis,fRnLambda,1.) );
527  tFittingR045->SetPoint(i,dZaxis, R2Fit_ZmM(fR2_045,fRnLambda,1.) / ZFit_R040(dZaxis,fRnLambda,1.) );
528  tFittingR075->SetPoint(i,dZaxis, R2Fit_ZmM(fR2_075,fRnLambda,1.) / ZFit_R070(dZaxis,fRnLambda,1.) );
529  tFittingR145->SetPoint(i,dZaxis, R2Fit_ZmM(fR2_145,fRnLambda,1.) / ZFit_R140(dZaxis,fRnLambda,1.) );
530  tFittingR175->SetPoint(i,dZaxis, R2Fit_ZmM(fR2_175,fRnLambda,1.) / ZFit_R170(dZaxis,fRnLambda,1.) );
531  tFittingR195->SetPoint(i,dZaxis, R2Fit_ZmM(fR2_195,fRnLambda,1.) / ZFit_R190(dZaxis,fRnLambda,1.) );
532  tFittingR215->SetPoint(i,dZaxis, R2Fit_ZmM(fR2_215,fRnLambda,1.) / ZFit_R210(dZaxis,fRnLambda,1.) );
533  i += 1;
534 
535  dZaxis = fZ_m16;
536  tFittingR000->SetPoint(i,dZaxis, R2Fit_Z16(fR2_000,fRnLambda,1.) / ZFit_R000(dZaxis,fRnLambda,1.) );
537  tFittingR025->SetPoint(i,dZaxis, R2Fit_Z16(fR2_025,fRnLambda,1.) / ZFit_R020(dZaxis,fRnLambda,1.) );
538  tFittingR045->SetPoint(i,dZaxis, R2Fit_Z16(fR2_045,fRnLambda,1.) / ZFit_R040(dZaxis,fRnLambda,1.) );
539  tFittingR075->SetPoint(i,dZaxis, R2Fit_Z16(fR2_075,fRnLambda,1.) / ZFit_R070(dZaxis,fRnLambda,1.) );
540  tFittingR145->SetPoint(i,dZaxis, R2Fit_Z16(fR2_145,fRnLambda,1.) / ZFit_R140(dZaxis,fRnLambda,1.) );
541  tFittingR175->SetPoint(i,dZaxis, R2Fit_Z16(fR2_175,fRnLambda,1.) / ZFit_R170(dZaxis,fRnLambda,1.) );
542  tFittingR195->SetPoint(i,dZaxis, R2Fit_Z16(fR2_195,fRnLambda,1.) / ZFit_R190(dZaxis,fRnLambda,1.) );
543  tFittingR215->SetPoint(i,dZaxis, R2Fit_Z16(fR2_215,fRnLambda,1.) / ZFit_R210(dZaxis,fRnLambda,1.) );
544  i += 1;
545 
546  dZaxis = fZ_m13;
547  tFittingR000->SetPoint(i,dZaxis, R2Fit_Z13(fR2_000,fRnLambda,1.) / ZFit_R000(dZaxis,fRnLambda,1.) );
548  tFittingR025->SetPoint(i,dZaxis, R2Fit_Z13(fR2_025,fRnLambda,1.) / ZFit_R020(dZaxis,fRnLambda,1.) );
549  tFittingR045->SetPoint(i,dZaxis, R2Fit_Z13(fR2_045,fRnLambda,1.) / ZFit_R040(dZaxis,fRnLambda,1.) );
550  tFittingR075->SetPoint(i,dZaxis, R2Fit_Z13(fR2_075,fRnLambda,1.) / ZFit_R070(dZaxis,fRnLambda,1.) );
551  tFittingR145->SetPoint(i,dZaxis, R2Fit_Z13(fR2_145,fRnLambda,1.) / ZFit_R140(dZaxis,fRnLambda,1.) );
552  tFittingR175->SetPoint(i,dZaxis, R2Fit_Z13(fR2_175,fRnLambda,1.) / ZFit_R170(dZaxis,fRnLambda,1.) );
553  tFittingR195->SetPoint(i,dZaxis, R2Fit_Z13(fR2_195,fRnLambda,1.) / ZFit_R190(dZaxis,fRnLambda,1.) );
554  tFittingR215->SetPoint(i,dZaxis, R2Fit_Z13(fR2_215,fRnLambda,1.) / ZFit_R210(dZaxis,fRnLambda,1.) );
555  i += 1;
556 
557  dZaxis = fZ_m10;
558  tFittingR000->SetPoint(i,dZaxis, R2Fit_Z10(fR2_000,fRnLambda,1.) / ZFit_R000(dZaxis,fRnLambda,1.) );
559  tFittingR025->SetPoint(i,dZaxis, R2Fit_Z10(fR2_025,fRnLambda,1.) / ZFit_R020(dZaxis,fRnLambda,1.) );
560  tFittingR045->SetPoint(i,dZaxis, R2Fit_Z10(fR2_045,fRnLambda,1.) / ZFit_R040(dZaxis,fRnLambda,1.) );
561  tFittingR075->SetPoint(i,dZaxis, R2Fit_Z10(fR2_075,fRnLambda,1.) / ZFit_R070(dZaxis,fRnLambda,1.) );
562  tFittingR145->SetPoint(i,dZaxis, R2Fit_Z10(fR2_145,fRnLambda,1.) / ZFit_R140(dZaxis,fRnLambda,1.) );
563  tFittingR175->SetPoint(i,dZaxis, R2Fit_Z10(fR2_175,fRnLambda,1.) / ZFit_R170(dZaxis,fRnLambda,1.) );
564  tFittingR195->SetPoint(i,dZaxis, R2Fit_Z10(fR2_195,fRnLambda,1.) / ZFit_R190(dZaxis,fRnLambda,1.) );
565  tFittingR215->SetPoint(i,dZaxis, R2Fit_Z10(fR2_215,fRnLambda,1.) / ZFit_R210(dZaxis,fRnLambda,1.) );
566  i += 1;
567 
568  dZaxis = 0.;
569  tFittingR000->SetPoint(i,dZaxis, R2Fit_Z00(fR2_000,fRnLambda,1.) / ZFit_R000(dZaxis,fRnLambda,1.) );
570  tFittingR025->SetPoint(i,dZaxis, R2Fit_Z00(fR2_025,fRnLambda,1.) / ZFit_R020(dZaxis,fRnLambda,1.) );
571  tFittingR045->SetPoint(i,dZaxis, R2Fit_Z00(fR2_045,fRnLambda,1.) / ZFit_R040(dZaxis,fRnLambda,1.) );
572  tFittingR075->SetPoint(i,dZaxis, R2Fit_Z00(fR2_075,fRnLambda,1.) / ZFit_R070(dZaxis,fRnLambda,1.) );
573  tFittingR145->SetPoint(i,dZaxis, R2Fit_Z00(fR2_145,fRnLambda,1.) / ZFit_R140(dZaxis,fRnLambda,1.) );
574  tFittingR175->SetPoint(i,dZaxis, R2Fit_Z00(fR2_175,fRnLambda,1.) / ZFit_R170(dZaxis,fRnLambda,1.) );
575  tFittingR195->SetPoint(i,dZaxis, R2Fit_Z00(fR2_195,fRnLambda,1.) / ZFit_R190(dZaxis,fRnLambda,1.) );
576  tFittingR215->SetPoint(i,dZaxis, R2Fit_Z00(fR2_215,fRnLambda,1.) / ZFit_R210(dZaxis,fRnLambda,1.) );
577  i += 1;
578 
579  dZaxis = fZ_p14;
580  tFittingR000->SetPoint(i,dZaxis, R2Fit_Z14p(fR2_000,fRnLambda,1.) / ZFit_R000(dZaxis,fRnLambda,1.) );
581  tFittingR025->SetPoint(i,dZaxis, R2Fit_Z14p(fR2_025,fRnLambda,1.) / ZFit_R020(dZaxis,fRnLambda,1.) );
582  tFittingR045->SetPoint(i,dZaxis, R2Fit_Z14p(fR2_045,fRnLambda,1.) / ZFit_R040(dZaxis,fRnLambda,1.) );
583  tFittingR075->SetPoint(i,dZaxis, R2Fit_Z14p(fR2_075,fRnLambda,1.) / ZFit_R070(dZaxis,fRnLambda,1.) );
584  tFittingR145->SetPoint(i,dZaxis, R2Fit_Z14p(fR2_145,fRnLambda,1.) / ZFit_R140(dZaxis,fRnLambda,1.) );
585  tFittingR175->SetPoint(i,dZaxis, R2Fit_Z14p(fR2_175,fRnLambda,1.) / ZFit_R170(dZaxis,fRnLambda,1.) );
586  tFittingR195->SetPoint(i,dZaxis, R2Fit_Z14p(fR2_195,fRnLambda,1.) / ZFit_R190(dZaxis,fRnLambda,1.) );
587  tFittingR215->SetPoint(i,dZaxis, R2Fit_Z14p(fR2_215,fRnLambda,1.) / ZFit_R210(dZaxis,fRnLambda,1.) );
588  i += 1;
589 
590  dZaxis = fZ_p16;
591  tFittingR000->SetPoint(i,dZaxis, R2Fit_Z16p(fR2_000,fRnLambda,1.) / ZFit_R000(dZaxis,fRnLambda,1.) );
592  tFittingR025->SetPoint(i,dZaxis, R2Fit_Z16p(fR2_025,fRnLambda,1.) / ZFit_R020(dZaxis,fRnLambda,1.) );
593  tFittingR045->SetPoint(i,dZaxis, R2Fit_Z16p(fR2_045,fRnLambda,1.) / ZFit_R040(dZaxis,fRnLambda,1.) );
594  tFittingR075->SetPoint(i,dZaxis, R2Fit_Z16p(fR2_075,fRnLambda,1.) / ZFit_R070(dZaxis,fRnLambda,1.) );
595  tFittingR145->SetPoint(i,dZaxis, R2Fit_Z16p(fR2_145,fRnLambda,1.) / ZFit_R140(dZaxis,fRnLambda,1.) );
596  tFittingR175->SetPoint(i,dZaxis, R2Fit_Z16p(fR2_175,fRnLambda,1.) / ZFit_R170(dZaxis,fRnLambda,1.) );
597  tFittingR195->SetPoint(i,dZaxis, R2Fit_Z16p(fR2_195,fRnLambda,1.) / ZFit_R190(dZaxis,fRnLambda,1.) );
598  tFittingR215->SetPoint(i,dZaxis, R2Fit_Z16p(fR2_215,fRnLambda,1.) / ZFit_R210(dZaxis,fRnLambda,1.) );
599  i += 1;
600 
601  dZaxis = fZ_max;
602  tFittingR000->SetPoint(i,dZaxis, R2Fit_ZpM(fR2_000,fRnLambda,1.) / ZFit_R000(dZaxis,fRnLambda,1.) );
603  tFittingR025->SetPoint(i,dZaxis, R2Fit_ZpM(fR2_025,fRnLambda,1.) / ZFit_R020(dZaxis,fRnLambda,1.) );
604  tFittingR045->SetPoint(i,dZaxis, R2Fit_ZpM(fR2_045,fRnLambda,1.) / ZFit_R040(dZaxis,fRnLambda,1.) );
605  tFittingR075->SetPoint(i,dZaxis, R2Fit_ZpM(fR2_075,fRnLambda,1.) / ZFit_R070(dZaxis,fRnLambda,1.) );
606  tFittingR145->SetPoint(i,dZaxis, R2Fit_ZpM(fR2_145,fRnLambda,1.) / ZFit_R140(dZaxis,fRnLambda,1.) );
607  tFittingR175->SetPoint(i,dZaxis, R2Fit_ZpM(fR2_175,fRnLambda,1.) / ZFit_R170(dZaxis,fRnLambda,1.) );
608  tFittingR195->SetPoint(i,dZaxis, R2Fit_ZpM(fR2_195,fRnLambda,1.) / ZFit_R190(dZaxis,fRnLambda,1.) );
609  tFittingR215->SetPoint(i,dZaxis, R2Fit_ZpM(fR2_215,fRnLambda,1.) / ZFit_R210(dZaxis,fRnLambda,1.) );
610  /*
611  tFittingR000->SetBit(TGraph::kIsSortedX);
612  tFittingR000->SetBit(TGraph::kIsSortedX);
613  tFittingR025->SetBit(TGraph::kIsSortedX);
614  tFittingR045->SetBit(TGraph::kIsSortedX);
615  tFittingR075->SetBit(TGraph::kIsSortedX);
616  tFittingR145->SetBit(TGraph::kIsSortedX);
617  tFittingR175->SetBit(TGraph::kIsSortedX);
618  tFittingR195->SetBit(TGraph::kIsSortedX);
619  tFittingR215->SetBit(TGraph::kIsSortedX);
620  */
621  // Generate TF2:
622  if ( thRnFunction ) delete thRnFunction;
623  thRnFunction = new TF2("RndPos",RadonFormula,0.,fR2_max,-1.*fZ_max,fZ_max,2);
624  thRnFunction->SetNpx(fBin_R2_max);
625  thRnFunction->SetNpy(fBin_Z_max );
626 
627  thRnFunction->SetParameter(0,fRnLambda);
628  thRnFunction->SetParameter(1,fMperBin);
629 
630  // Compute activity Integral
631  fIntegral = thRnFunction->Integral(0,fR_max*fR_max,-1.*fZ_max,fZ_max);
632 }
633 
634 G4ThreeVector WCSimGenerator_Radioactivity::GetRandomVertex(G4int tSymNumber) {
635 
636  G4double Dim = (G4double) tSymNumber;
637  G4double R2 = 0;
638  G4double Z = 0;
639 
640  G4double& R2_ref = R2;
641  G4double& Z_ref = Z;
642 
643  thRnFunction->GetRandom2(R2_ref,Z_ref);
644  G4double theta = G4UniformRand() * 2. * TMath::Pi() / Dim;
645 
646  G4double X = sqrt(R2) * cos(theta);
647  G4double Y = sqrt(R2) * sin(theta);
648 
649  G4ThreeVector vec(X * CLHEP::m, Y * CLHEP::m, Z * CLHEP::m);
650 
651  return vec;
652 }
653 
654 G4double WCSimGenerator_Radioactivity::ZFit_R210(G4double x, G4double Lambda, G4double BinConversion) {
655 
656  G4double dConc0 = BinConversion * fRnSK_Center; // 0m
657  G4double dConc10 = BinConversion * fRnSK_Bottom; // -10m (12m)
658  G4double dConcPMT = BinConversion * fRn_Border; // Border (PMT)
659 
660  G4double dConc = dConc0 // Center
661  + dConcPMT / cosh( sqrt(Lambda/(fRnDiffusion_Coef*8.) ) * (fChangeZPMax - x) ) // PMT Top
662  + dConc0*3. / cosh( sqrt(Lambda/(fRnDiffusion_Coef*150.)) * (fChangeZPMax - x) ) // PMT Top
663  + dConcPMT / cosh( sqrt(Lambda/(fRnDiffusion_Coef*12.) ) * (x - fChangeZNMax) ); // PMT Bottom
664 
665  if ( x <= fChangeR210N13 ) {
666  dConc += dConc10 * 0.85 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*120.)) * (fChangeR210N13 - x) );
667  }
668  else if ( x < fChangeR210P8 ) {
669  dConc += dConc10 * 0.85;
670  }
671  else if ( x < fChangeR210P13 ) {
672  dConc += dConc10 * 0.65;
673  }
674 
675  if ( x <= fChangeR210N10 ) {
676  dConc += dConc10 * 0.15 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*20.)) * (fChangeR210N10 - x) );
677  }
678  else if ( x < fChangeR210P8 ) {
679  dConc += dConc10 * 0.15;
680  }
681  if ( x <= fChangeR210N5 ) {
682  dConc += dConc10 * 0.28 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*10.)) * (fChangeR210N5 - x) );
683  }
684  else if ( x < fChangeR210P1 ) {
685  dConc += dConc10 * 0.28;
686  }
687 
688  if ( x >= fChangeR210P1 ) {
689  dConc += dConc10 * 0.28 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*400.)) * (x - fChangeR210P1) );
690  }
691  if ( x >= fChangeR210P8 ) {
692  dConc += dConc10 * 0.35 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*20.)) * (x - fChangeR210P8) );
693  }
694  if ( x >= fChangeR210P13 ) {
695  dConc += dConc10 * 0.65 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*80.)) * (x - fChangeR210P13) );
696  }
697 
698  return dConc;
699 
700 }
701 
702 G4double WCSimGenerator_Radioactivity::ZFit_R190(G4double x, G4double Lambda, G4double BinConversion) {
703 
704  G4double dConc0 = BinConversion * fRnSK_Center; // 0m
705  G4double dConc10 = BinConversion * fRnSK_Bottom * 0.825; // -10m (12m)
706  G4double dConcPMT = BinConversion * fRn_Border; // Border (PMT)
707 
708  G4double dConcG0 = dConc10 * 0.031 * 1;
709  G4double dConcG1 = dConc10 * 0.031 * 4;
710  G4double dConcG2 = dConc10 * 0.031 * 7.5;
711  G4double dConcG3 = dConc10 * 0.031 * 9;
712  G4double dConcG4 = dConc10 * 0.031 * 10.;
713  G4double dConcG5 = dConc10 * 0.031 * 9.5;
714  G4double dConcG6 = dConc10 * 0.031 * 8;
715  G4double dConcG7 = dConc10 * 0.031 * 7;
716  G4double dConcG8 = dConc10 * 0.031 * 5;
717 
718  G4double dConc = dConc0 // Center
719  + dConcPMT / cosh( sqrt(Lambda/(fRnDiffusion_Coef*10.) ) * (fChangeZPMax - x) ) // PMT Top
720  + dConc0*7. / cosh( sqrt(Lambda/(fRnDiffusion_Coef*150.)) * (fChangeZPMax - x) ) // PMT Top
721  + dConcPMT / cosh( sqrt(Lambda/(fRnDiffusion_Coef*10.) ) * (x - fChangeZNMax) ) // PMT Bottom
722  + dConcG0 * TMath::Gaus(x,fGaussM0,fGaussR190S0) // Gaussian 0
723  + dConcG1 * TMath::Gaus(x,fGaussM1,fGaussR190S1) // Gaussian 1
724  + dConcG2 * TMath::Gaus(x,fGaussM2,fGaussR190S2) // Gaussian 2
725  + dConcG3 * TMath::Gaus(x,fGaussR190M3,fGaussR190S3) // Gaussian 3
726  + dConcG4 * TMath::Gaus(x,fGaussM4,fGaussR190S4) // Gaussian 4
727  + dConcG5 * TMath::Gaus(x,fGaussM5,fGaussR190S5) // Gaussian 5
728  + dConcG6 * TMath::Gaus(x,fGaussM6,fGaussR190S6) // Gaussian 6
729  + dConcG7 * TMath::Gaus(x,fGaussM7,fGaussR190S7) // Gaussian 7
730  + dConcG8 * TMath::Gaus(x,fGaussM8,fGaussR190S8); // Gaussian 8
731 
732  G4double dNorm09 = max((dConc10*0.9-dConc0),0.);
733  G4double dNorm06 = max((dConc10*0.6-dConc0),0.);
734  G4double dNorm035 = max((dConc10*0.35-dConc0),0.);
735 
736  if ( x >= fChangeR190N10 ) { // transition to Wall
737  dConc += dNorm035 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*20.)) * (x-fChangeR190N10) );
738  }
739  else { // transition to Wall
740  dConc += dNorm09*0.3 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*10.)) * (fChangeR190N10-x) )
741  + dNorm09*0.7 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*1600.)) * (fChangeR190N10-x) );
742  }
743 
744 
745  if ( x >= fChangeR190N8 ) { // bump
746  dConc += dNorm06 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*600.)) * (x-fChangeR190N8) );
747  }
748  else if ( x >= fChangeR190N10) { // Bottom Wall
749  dConc += dNorm06;
750  }
751 
752  return dConc;
753 }
754 
755 G4double WCSimGenerator_Radioactivity::ZFit_R170(G4double x, G4double Lambda, G4double BinConversion) {
756 
757  G4double dConc0 = BinConversion * fRnSK_Center; // 0m
758  G4double dConc10 = BinConversion * fRnSK_Bottom * 0.825; // -10m (12m)
759  G4double dConcPMT = BinConversion * fRn_Border; // Border (PMT)
760 
761  G4double dConcG0 = dConc10 * 0.031 * 2.5;
762  G4double dConcG1 = dConc10 * 0.031 * 2.8;
763  G4double dConcG2 = dConc10 * 0.031 * 5;
764  G4double dConcG3 = dConc10 * 0.031 * 5;
765  G4double dConcG4 = dConc10 * 0.031 * 6.;
766  G4double dConcG5 = dConc10 * 0.031 * 6.;
767  G4double dConcG6 = dConc10 * 0.031 * 5;
768  G4double dConcG7 = dConc10 * 0.031 * 3.5;
769  G4double dConcG8 = dConc10 * 0.031 * 2;
770 
771  G4double dConc = dConc0 // Center
772  + dConcPMT / cosh( sqrt(Lambda/(fRnDiffusion_Coef*10.) ) * (fChangeZPMax - x) ) // PMT Top
773  + dConc0*7. / cosh( sqrt(Lambda/(fRnDiffusion_Coef*150.)) * (fChangeZPMax - x) ) // PMT Top
774  + dConcPMT / cosh( sqrt(Lambda/(fRnDiffusion_Coef*12.) ) * (x - fChangeZNMax) ) // PMT Bottom
775  + dConcG0 * TMath::Gaus(x,fGaussM0,fGaussR170S0) // Gaussian 0
776  + dConcG1 * TMath::Gaus(x,fGaussM1,fGaussR170S1) // Gaussian 1
777  + dConcG2 * TMath::Gaus(x,fGaussM2,fGaussR170S2) // Gaussian 2
778  + dConcG3 * TMath::Gaus(x,fGaussM3,fGaussR170S3) // Gaussian 3
779  + dConcG4 * TMath::Gaus(x,fGaussM4,fGaussR170S4) // Gaussian 4
780  + dConcG5 * TMath::Gaus(x,fGaussM5,fGaussR170S5) // Gaussian 5
781  + dConcG6 * TMath::Gaus(x,fGaussM6,fGaussR170S6) // Gaussian 6
782  + dConcG7 * TMath::Gaus(x,fGaussM7,fGaussR170S7) // Gaussian 7
783  + dConcG8 * TMath::Gaus(x,fGaussM8,fGaussR170S8); // Gaussian 8
784 
785  G4double dNorm055 = max((dConc10*0.55-dConc0),0.);
786  G4double dNorm045 = max((dConc10*0.45-dConc0),0.);
787 
788  if ( x >= fChangeR170N10 ) { // transition to Wall
789  dConc += dNorm045 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*10.)) * (x-fChangeR170N10) );
790  }
791  else { // transition to Wall
792  dConc += dNorm045*0.4 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*10.)) * (fChangeR170N10-x) )
793  + dNorm045*0.6 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*80.)) * (fChangeR170N10-x) );
794  }
795 
796 
797  if ( x >= fChangeR170N8 ) { // bump
798  dConc += dNorm055 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*200.)) * (x-fChangeR170N8) );
799  }
800  else { // Bottom Wall
801  dConc += dNorm055;
802  }
803 
804  return dConc;
805 }
806 
807 G4double WCSimGenerator_Radioactivity::ZFit_R140(G4double x, G4double Lambda, G4double BinConversion) {
808 
809 
810  G4double dConc0 = BinConversion * fRnSK_Center; // 0m
811  G4double dConc10 = BinConversion * fRnSK_Bottom * 0.837; // -10m (12m)
812  G4double dConcPMT = BinConversion * fRn_Border; // Border (PMT)
813 
814  // Gaus 0:
815  G4double dConcG0 = dConc10 * 0.031 * 0.5;
816  G4double dConcG1 = dConc10 * 0.031 * 1.;
817  G4double dConcG2 = dConc10 * 0.031 * 2.5;
818  G4double dConcG3 = dConc10 * 0.031 * 2.5;
819  G4double dConcG4 = dConc10 * 0.031 * 3.;
820  G4double dConcG5 = dConc10 * 0.031 * 3.;
821  G4double dConcG6 = dConc10 * 0.031 * 2.8;
822  G4double dConcG7 = dConc10 * 0.031 * 1.5;
823  G4double dConcG8 = dConc10 * 0.031 * 0.5;
824 
825  G4double dConc = dConc0 // Center
826  + dConcPMT / cosh( sqrt(Lambda/(fRnDiffusion_Coef*10.) ) * (fChangeZPMax - x) ) // PMT Top
827  + dConc0*7. / cosh( sqrt(Lambda/(fRnDiffusion_Coef*150.)) * (fChangeZPMax - x) ) // PMT Top
828  + dConcPMT / cosh( sqrt(Lambda/(fRnDiffusion_Coef*15.) ) * (x - fChangeZNMax) ) // PMT Bottom
829  + dConcG0 * TMath::Gaus(x,fGaussM0,fGaussR140S0) // Gaussian 0
830  + dConcG1 * TMath::Gaus(x,fGaussM1,fGaussR140S1) // Gaussian 1
831  + dConcG2 * TMath::Gaus(x,fGaussM2,fGaussR140S2) // Gaussian 2
832  + dConcG3 * TMath::Gaus(x,fGaussM3,fGaussR140S3) // Gaussian 3
833  + dConcG4 * TMath::Gaus(x,fGaussM4,fGaussR140S4) // Gaussian 4
834  + dConcG5 * TMath::Gaus(x,fGaussM5,fGaussR140S5) // Gaussian 5
835  + dConcG6 * TMath::Gaus(x,fGaussM6,fGaussR140S6) // Gaussian 6
836  + dConcG7 * TMath::Gaus(x,fGaussM7,fGaussR140S7) // Gaussian 6
837  + dConcG8 * TMath::Gaus(x,fGaussM8,fGaussR140S8); // Gaussian 6
838 
839  G4double dNorm05 = max((dConc10*0.5-dConc0),0.);
840 
841  if ( x >= fChangeR140N10 ) { // transition to Wall
842  dConc += dNorm05 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*10.)) * (x-fChangeR140N10) );
843  }
844  else { // transition to Wall
845  dConc += dNorm05*0.4 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*10.)) * (fChangeR140N10-x) )
846  + dNorm05*0.6 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*200.)) * (fChangeR140N10-x) );
847  }
848 
849 
850  if ( x >= fChangeR140N8 ) { // bump
851  dConc += dNorm05 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*175.)) * (x-fChangeR140N8) );
852  }
853  else { // Bottom Wall
854  dConc += dNorm05;
855  }
856 
857  return dConc;
858 }
859 
860 G4double WCSimGenerator_Radioactivity::ZFit_R070(G4double x, G4double Lambda, G4double BinConversion) {
861 
862  G4double dConc0 = BinConversion * fRnSK_Center; // 0m
863  G4double dConc10 = BinConversion * fRnSK_Bottom * 0.825; // -10m (12m)
864  G4double dConcPMT = BinConversion * fRn_Border; // Border (PMT)
865 
866  G4double dConc = dConc0 // Center
867  + dConcPMT / cosh( sqrt(Lambda/(fRnDiffusion_Coef*10.) ) * (fChangeZPMax - x) ) // PMT Top
868  + dConc0*3. / cosh( sqrt(Lambda/(fRnDiffusion_Coef*150.)) * (fChangeZPMax - x) ) // PMT Top
869  + dConcPMT / cosh( sqrt(Lambda/(fRnDiffusion_Coef*15.) ) * (x - fChangeZNMax) ); // PMT Bottom
870 
871  G4double dNorm075 = max((dConc10*0.75-dConc0),0.);
872  G4double dNorm025 = max((dConc10*0.25-dConc0),0.);
873 
874  if ( x >= fChangeR070N10 ) { // transition to Wall
875  dConc += dNorm075 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*10.)) * (x-fChangeR070N10) );
876  }
877  else { // transition to Wall
878  dConc += dNorm075 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*800.)) * (fChangeR070N10-x) );
879  }
880 
881  if ( x >= fChangeR070N8 ) { // bump
882  dConc += dNorm025 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*70.)) * (x-fChangeR070N8) );
883  }
884  else { // Bottom Wall
885  dConc += dNorm025;
886  }
887 
888  return dConc;
889 }
890 
891 G4double WCSimGenerator_Radioactivity::ZFit_R040(G4double x, G4double Lambda, G4double BinConversion) {
892 
893  G4double dConc0 = BinConversion * fRnSK_Center; // 0m
894  G4double dConc10 = BinConversion * fRnSK_Bottom * 0.88; // -10m (12m)
895  G4double dConcPMT = BinConversion * fRn_Border; // Border (PMT)
896 
897  G4double dConc = dConc0 // Center
898  + dConcPMT / cosh( sqrt(Lambda/(fRnDiffusion_Coef*10.) ) * (fChangeZPMax - x) ) // PMT Top
899  + dConc0*3. / cosh( sqrt(Lambda/(fRnDiffusion_Coef*150.)) * (fChangeZPMax - x) ) // PMT Top
900  + dConcPMT / cosh( sqrt(Lambda/(fRnDiffusion_Coef*13.) ) * (x - fChangeZNMax) ); // PMT Bottom
901 
902  G4double dNorm10 = max((dConc10-dConc0),0.);
903 
904  if ( x >= fChangeR040N10 ) { // transition to Wall
905  dConc += dNorm10 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*35.)) * (x-fChangeR040N10) );
906  }
907  else { // transition to Wall
908  dConc += dNorm10 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*2000.)) * (fChangeR040N10-x) );
909  }
910 
911  return dConc;
912 }
913 
914 G4double WCSimGenerator_Radioactivity::ZFit_R020(G4double x, G4double Lambda, G4double BinConversion) {
915 
916  G4double dConc0 = BinConversion * fRnSK_Center; // 0m
917  G4double dConc10 = BinConversion * fRnSK_Bottom * 0.97; // -10m (12m)
918  G4double dConcPMT = BinConversion * fRn_Border; // Border (PMT)
919 
920  G4double dConc = dConc0 // Center
921  + dConcPMT / cosh( sqrt(Lambda/(fRnDiffusion_Coef*10.) ) * (fChangeZPMax - x) ) // PMT Top
922  + dConc0*3. / cosh( sqrt(Lambda/(fRnDiffusion_Coef*150.)) * (fChangeZPMax - x) ) // PMT Top
923  + dConcPMT / cosh( sqrt(Lambda/(fRnDiffusion_Coef*13.) ) * (x - fChangeZNMax) ); // PMT Bottom
924 
925  G4double dNorm10 = max((dConc10-dConc0),0.);
926 
927  if ( x >= fChangeR020N10 ) { // transition to Wall
928  dConc += dNorm10 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*20.)) * (x-fChangeR020N10) );
929  }
930  else { // transition to Wall
931  dConc += dNorm10;
932  }
933 
934  return dConc;
935 }
936 
937 G4double WCSimGenerator_Radioactivity::ZFit_R000(G4double x, G4double Lambda, G4double BinConversion) {
938 
939  G4double dConc0 = BinConversion * fRnSK_Center; // 0m
940  G4double dConc10 = BinConversion * fRnSK_Bottom; // -10m (12m)
941  G4double dConcPMT = BinConversion * fRn_Border; // Border (PMT)
942 
943  G4double dConc = dConc0 // Center
944  + dConcPMT / cosh( sqrt(Lambda/(fRnDiffusion_Coef*12.)) * (fChangeZPMax - x) ) // PMT Top
945  + dConcPMT / cosh( sqrt(Lambda/(fRnDiffusion_Coef*15.)) * (x - fChangeZNMax) ); // PMT Bottom
946 
947 
948  G4double dNorm10 = max((dConc10-dConc0),0.);
949 
950  if ( x >= fChangeR000N10 ) { // Transition to bottom Wall
951  dConc += dNorm10 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*17.)) * (x-fChangeR000N10) );
952  }
953  else { // Bottom Wall
954  dConc += dNorm10;
955  }
956 
957  return dConc;
958 
959 }
960 
961 G4double WCSimGenerator_Radioactivity::R2Fit_ZpM(G4double x, G4double Lambda, G4double BinConversion) {
962 
963  G4double dConcPMT = pow(BinConversion,2.) * fRn_Border; // Border (PMT)
964 
965  G4double dConc = dConcPMT;
966 
967  return dConc;
968 }
969 
970 G4double WCSimGenerator_Radioactivity::R2Fit_ZmM(G4double x, G4double Lambda, G4double BinConversion) {
971 
972  G4double dConc0 = pow(BinConversion,2.) * fRnSK_Center; // 0m
973  G4double dConc10 = pow(BinConversion,2.) * fRnSK_Bottom; // -10m (12m)
974  G4double dConcPMT = pow(BinConversion,2.) * fRn_Border; // Border (PMT)
975 
976  G4double dNorm10 = max((dConc10-dConc0),0.);
977 
978  G4double dConc = dConcPMT + dConc0
979  + dNorm10*0.06 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*400.)) * (sqrt(x)) );
980 
981 
982  if ( x >= fChangeZmMxR025 ) {
983  dConc += dNorm10*0.50 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*25.)) * (sqrt(x) - sqrt(fChangeZmMxR025)) );
984  }
985  else {
986  dConc += dNorm10*0.50;
987  }
988 
989  if ( x >= fChangeZmMxR175 ) {
990  dConc += dNorm10*0.44 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*20.)) * (sqrt(x) - sqrt(fChangeZmMxR175)) );
991  }
992  else {
993  dConc += dNorm10*0.44;
994  }
995 
996  return dConc;
997 }
998 
999 G4double WCSimGenerator_Radioactivity::R2Fit_Z16(G4double x, G4double Lambda, G4double BinConversion) {
1000 
1001  G4double dConc0 = pow(BinConversion,2.) * fRnSK_Center; // 0m
1002  G4double dConc10 = pow(BinConversion,2.) * fRn_Border * 0.39; // -10m (12m)
1003  G4double dConcPMT = pow(BinConversion,2.) * fRn_Border; // Border (PMT)
1004 
1005  G4double dConc = dConc0; // Center
1006  //+ dConcPMT / cosh( sqrt(Lambda/(fRnDiffusion_Coef*4.)) * (sqrt(dR2Mx) - sqrt(x)) ) // PMT
1007  //+ dConcPMT * 0.05 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*150.)) * (sqrt(dR2Mx) - sqrt(x)) ); // Diffusion
1008 
1009  G4double dNorm10 = max((dConc10-dConc0),0.);
1010 
1011 
1012 
1013  if ( x >= fChangeZm16R025 ) {
1014  dConc += dNorm10 * 0.36/ cosh( sqrt(Lambda/(fRnDiffusion_Coef*50.)) * (sqrt(x) - sqrt(fChangeZm16R025)) );
1015  }
1016  else {
1017  dConc += dNorm10 * 0.36;
1018  }
1019  if ( x >= fChangeZm16R125 ) {
1020  dConc += dNorm10 * 0.64 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*225.)) * (sqrt(x) - sqrt(fChangeZm16R125)) );
1021  }
1022  else {
1023  dConc += dNorm10 * 0.64;
1024  }
1025 
1026  // Water flow assumed
1027  /*
1028  double dConcWall = dConc10 * 20;
1029  if ( x >= fChangeZm16Flow ) {
1030  dConc += dConcWall / cosh( sqrt(Lambda/(fRnDiffusion_Coef*2.5)) * (sqrt(x) - sqrt(fChangeZm16Flow)) );
1031  }
1032  else {
1033  dConc += dConcWall / cosh( sqrt(Lambda/(fRnDiffusion_Coef*2.5)) * (sqrt(fChangeZm16Flow) - sqrt(x)) );
1034  }
1035  */
1036 
1037  // Water flow with convection is assumed
1038  if ( x >= fChangeZm16Flow ) {
1039  dConc += dConcPMT;
1040  }
1041  else {
1042  dConc += dConcPMT / cosh( sqrt(Lambda/(fRnDiffusion_Coef*7.)) * (sqrt(fChangeZm16Flow) - sqrt(x)) );
1043  }
1044 
1045 
1046  return dConc;
1047 }
1048 
1049 G4double WCSimGenerator_Radioactivity::R2Fit_Z13(G4double x, G4double Lambda, G4double BinConversion) {
1050 
1051  G4double dConc0 = pow(BinConversion,2.) * fRnSK_Center; // 0m
1052  G4double dConc10 = pow(BinConversion,2.) * fRnSK_Bottom * 1.13; // -10m (12m)
1053  G4double dConcPMT = pow(BinConversion,2.) * fRn_Border; // Border (PMT)
1054 
1055  G4double dConc = dConc0; // Center
1056  //+ dConcPMT / cosh( sqrt(Lambda/(fRnDiffusion_Coef*4.)) * (sqrt(dR2Mx) - sqrt(x)) ) // PMT
1057  //+ dConcPMT * 0.05 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*150.)) * (sqrt(dR2Mx) - sqrt(x)) ); // Diffusion
1058 
1059  G4double dNorm10 = max((dConc10-dConc0),0.);
1060 
1061 
1062 
1063  if ( x >= fChangeZm13R023 ) {
1064  dConc += dNorm10 * 0.30/ cosh( sqrt(Lambda/(fRnDiffusion_Coef*50.)) * (sqrt(x) - sqrt(fChangeZm13R023)) );
1065  }
1066  else {
1067  dConc += dNorm10 * 0.30;
1068  }
1069  if ( x >= fChangeZm13R080 ) {
1070  dConc += dNorm10 * 0.70 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*400.)) * (sqrt(x) - sqrt(fChangeZm13R080)) );
1071  }
1072  else {
1073  dConc += dNorm10 * 0.70;
1074  }
1075 
1076  // Water flow assumed
1077  /*
1078  double dConcWall = dConc10 * 20;
1079  if ( x >= fChangeZm13Flow ) {
1080  dConc += dConcWall / cosh( sqrt(Lambda/(fRnDiffusion_Coef*4.)) * (sqrt(x) - sqrt(fChangeZm13Flow)) );
1081  }
1082  else {
1083  dConc += dConcWall / cosh( sqrt(Lambda/(fRnDiffusion_Coef*4.)) * (sqrt(fChangeZm13Flow) - sqrt(x)) );
1084  }*/
1085 
1086  // Water flow with convection is assumed
1087  if ( x >= fChangeZm13Flow ) {
1088  dConc += dConcPMT * 1.25;
1089  }
1090  else {
1091  dConc += dConcPMT * 1.2 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*4.6)) * (sqrt(fChangeZm13Flow) - sqrt(x)) )
1092  + dConcPMT * 0.01 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*150.)) * (sqrt(fChangeZm13Flow) - sqrt(x)) ); // Diffusion
1093  }
1094 
1095  return dConc;
1096 }
1097 
1098 G4double WCSimGenerator_Radioactivity::R2Fit_Z10(G4double x, G4double Lambda, G4double BinConversion) {
1099 
1100 
1101  G4double dConc0 = pow(BinConversion,2.) * fRnSK_Center; // 0m
1102  G4double dConc10 = pow(BinConversion,2.) * fRnSK_Bottom; // -10m (12m)
1103  G4double dConcPMT = pow(BinConversion,2.) * fRn_Border; // Border (PMT)
1104 
1105  G4double dNorm07 = max((dConc10*0.80-dConc0),0.);
1106  G4double dNorm01 = max((dConc10*0.10-dConc0),0.);
1107 
1108  G4double dConc = dConc0 // Center
1109  //+ dConcPMT / cosh( sqrt(Lambda/(fRnDiffusion_Coef*4.)) * (sqrt(dR2Mx) - sqrt(x)) ) // PMT
1110  //+ dConcPMT * 0.05 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*10.)) * (sqrt(dR2Mx) - sqrt(x)) ) // Diffusion
1111  + dNorm07;
1112 
1113 
1114  if ( x <= fChangeZm10R023 ) {
1115  dConc += dNorm01/ cosh( sqrt(Lambda/(fRnDiffusion_Coef*40.)) * (sqrt(fChangeZm10R023)-sqrt(x)) );
1116  }
1117  else {
1118  dConc += dNorm01 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*450.)) * (sqrt(x) - sqrt(fChangeZm10R023)) );
1119  }
1120 
1121  // Water flow assumed
1122  /*
1123  double dConcWall = dConc10 * 40;
1124  if ( x >= fChangeZm10Flow ) {
1125  dConc += dConcWall / cosh( sqrt(Lambda/(fRnDiffusion_Coef*2.5)) * (sqrt(x) - sqrt(fChangeZm10Flow)) );
1126  }
1127  else {
1128  dConc += dConcWall / cosh( sqrt(Lambda/(fRnDiffusion_Coef*2.5)) * (sqrt(fChangeZm10Flow) - sqrt(x)) );
1129  }
1130  */
1131 
1132  // Water flow with convection is assumed
1133  if ( x >= fChangeZm10Flow ) {
1134  dConc += dConcPMT * 1.205;
1135  }
1136  else {
1137  dConc += dConcPMT * 1.2 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*2.75)) * (sqrt(fChangeZm10Flow) - sqrt(x)) )
1138  + dConcPMT * 0.005 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*250.)) * (sqrt(fChangeZm10Flow) - sqrt(x)) ); // Diffusion
1139  }
1140  return dConc;
1141 }
1142 
1143 G4double WCSimGenerator_Radioactivity::R2Fit_Z00(G4double x, G4double Lambda, G4double BinConversion) {
1144 
1145  G4double dConc0 = pow(BinConversion,2.) * fRnSK_Center; // 0m
1146 // G4double dConc10 = pow(BinConversion,2.) * fRnSK_Bottom; // Border (PMT)
1147  G4double dConcPMT = pow(BinConversion,2.) * fRn_Border; // Border (PMT)
1148 
1149  G4double dConc = dConc0; // Center
1150  //+ dConcPMT / cosh( sqrt(Lambda/(fRnDiffusion_Coef*4.)) * (sqrt(fChangeRMax) - sqrt(x)) ) // PMT
1151  //+ dConcPMT * 0.05 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*250.)) * (sqrt(fChangeRMax) - sqrt(x)) ); // PMT
1152 
1153 
1154  // Water flow assumed
1155  /*
1156  double dConcWall = dConc10 * 40;
1157  if ( x >= fChangeZ000Flow ) {
1158  dConc += dConcWall / cosh( sqrt(Lambda/(fRnDiffusion_Coef*5.)) * (sqrt(x) - sqrt(fChangeZ000Flow)) );
1159  }
1160  else {
1161  dConc += dConcWall / cosh( sqrt(Lambda/(fRnDiffusion_Coef*5.)) * (sqrt(fChangeZ000Flow) - sqrt(x)) );
1162  }
1163  */
1164  // Water flow with convection is assumed
1165  if ( x >= fChangeZ000Flow ) {
1166  dConc += dConcPMT * 1.44;
1167  }
1168  else {
1169  dConc += dConcPMT * 1.4 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*4.5)) * (sqrt(fChangeZ000Flow) - sqrt(x)) )
1170  + dConcPMT * 0.02 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*200.)) * (sqrt(fChangeZ000Flow) - sqrt(x)) ); // PMT
1171  }
1172 
1173  return dConc;
1174 }
1175 
1176 G4double WCSimGenerator_Radioactivity::R2Fit_Z14p(G4double x, G4double Lambda, G4double BinConversion) {
1177 
1178  G4double dConc0 = pow(BinConversion,2.) * fRnSK_Center; // 0m
1179 // G4double dConc10 = pow(BinConversion,2.) * fRnSK_Bottom; // Border (PMT)
1180  G4double dConcPMT = pow(BinConversion,2.) * fRn_Border; // Border (PMT)
1181 
1182  G4double dConc = dConc0*2; // Center
1183  //+ dConcPMT / cosh( sqrt(Lambda/(fRnDiffusion_Coef*4.)) * (sqrt(fChangeRMax) - sqrt(x)) ) // PMT
1184  //+ dConcPMT * 0.05 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*250.)) * (sqrt(fChangeRMax) - sqrt(x)) ); // PMT
1185 
1186  // Water flow assumed
1187  /*
1188  double dConcWall = dConc10 * 40;
1189  if ( x >= fChangeZp14Flow ) {
1190  dConc += dConcWall / cosh( sqrt(Lambda/(fRnDiffusion_Coef*5.)) * (sqrt(x) - sqrt(fChangeZp14Flow)) );
1191  }
1192  else {
1193  dConc += dConcWall / cosh( sqrt(Lambda/(fRnDiffusion_Coef*5.)) * (sqrt(fChangeZp14Flow) - sqrt(x)) );
1194  }
1195  */
1196  // Water flow with convection is assumed
1197  if ( x >= fChangeZp14Flow ) {
1198  dConc += dConcPMT * 1.22;
1199  }
1200  else {
1201  dConc += dConcPMT * 1.2 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*5)) * (sqrt(fChangeZp14Flow) - sqrt(x)) )
1202  + dConcPMT * 0.02 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*200.)) * (sqrt(fChangeZp14Flow) - sqrt(x)) ); // PMT
1203  }
1204 
1205  return dConc;
1206 }
1207 
1208 
1209 G4double WCSimGenerator_Radioactivity::R2Fit_Z16p(G4double x, G4double Lambda, G4double BinConversion) {
1210 
1211 
1212  G4double dConc0 = pow(BinConversion,2.) * fRnSK_Center; // 0m
1213  G4double dConc10 = pow(BinConversion,2.) * fRn_Border * 0.06; // -10m (12m)
1214  G4double dConcPMT = pow(BinConversion,2.) * fRn_Border; // Border (PMT)
1215 
1216  G4double dConc = dConc0; // Center
1217  //+ dConcPMT / cosh( sqrt(Lambda/(fRnDiffusion_Coef*4.)) * (sqrt(fChangeRMax) - sqrt(x)) ) // PMT
1218  //+ dConcPMT * 0.05 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*150.)) * (sqrt(fChangeRMax) - sqrt(x)) ); // Diffusion
1219 
1220  double dNorm10 = max((dConc10-dConc0),0.);
1221 
1222 
1223  if ( x >= fChangeZp16R025 ) {
1224  dConc += dNorm10 * 0.36/ cosh( sqrt(Lambda/(fRnDiffusion_Coef*50.)) * (sqrt(x) - sqrt(fChangeZp16R025)) );
1225  }
1226  else {
1227  dConc += dNorm10 * 0.36;
1228  }
1229  if ( x >= fChangeZp16R115 ) {
1230  dConc += dNorm10 * 0.94 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*300.)) * (sqrt(x) - sqrt(fChangeZp16R115)) );
1231  }
1232  else {
1233  dConc += dNorm10 * 0.30 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*30.)) * (sqrt(fChangeZp16R115)) - sqrt(x) );
1234  dConc += dNorm10 * 0.64;
1235  }
1236 
1237  // Water flow assumed
1238  /*
1239  double dConcWall = dConc10 * 40;
1240  double dR2Floz = R2_max * 0.94;
1241  if ( x >= dR2Floz ) {
1242  dConc += dConcWall / cosh( sqrt(Lambda/(fRnDiffusion_Coef*5)) * (sqrt(x) - sqrt(dR2Floz)) );
1243  }
1244  else {
1245  dConc += dConcWall / cosh( sqrt(Lambda/(fRnDiffusion_Coef*5)) * (sqrt(dR2Floz) - sqrt(x)) );
1246  }
1247  */
1248  // Water flow with convection is assumed
1249 
1250  if ( x >= fChangeZp16Flow ) {
1251  dConc += dConcPMT * 1.13;
1252  }
1253  else {
1254  dConc += dConcPMT * 1.1 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*5) ) * (sqrt(fChangeZp16Flow) - sqrt(x)) )
1255  + dConcPMT * 0.03 / cosh( sqrt(Lambda/(fRnDiffusion_Coef*250.)) * (sqrt(fChangeZp16Flow) - sqrt(x)) ); // PMT
1256  }
1257 
1258  return dConc;
1259 }
1260 
1261 G4double WCSimGenerator_Radioactivity::RadonFormula(G4double *val, G4double *par) {
1262 
1263  G4double R2 = val[0];
1264  G4double Z = val[1];
1265  G4double R = sqrt(R2);
1266 
1267  G4double Lambda = par[0];
1268  G4double BinConversion = par[1];
1269 
1270  //G4double dCZ = 0;
1271 
1272  G4double dCZ1 = 0;
1273  G4double dCZ2 = 0;
1274 
1275  G4double dDZ1 = 0;
1276  G4double dDZ2 = 0;
1277 
1278  G4double dZZ1 = 0;
1279  G4double dZZ2 = 0;
1280 
1281  if ( R2 < fR2_025 ) {
1282  dCZ1 = WCSimGenerator_Radioactivity::ZFit_R000(Z,Lambda,BinConversion) * tFittingR000->Eval(Z)/BinConversion;
1283  dCZ2 = WCSimGenerator_Radioactivity::ZFit_R020(Z,Lambda,BinConversion) * tFittingR025->Eval(Z)/BinConversion;
1284 
1285  dDZ1 = 1. - (R - fR_000)/ (fR_025 - fR_000);
1286  dDZ2 = 1. - (fR_025 - R)/ (fR_025 - fR_000);
1287 
1288  dZZ1 = fR2_000;
1289  dZZ2 = fR2_025;
1290  }
1291  else if ( R2 < fR2_045 ) {
1292  dCZ1 = WCSimGenerator_Radioactivity::ZFit_R020(Z,Lambda,BinConversion) * tFittingR025->Eval(Z)/BinConversion;
1293  dCZ2 = WCSimGenerator_Radioactivity::ZFit_R040(Z,Lambda,BinConversion) * tFittingR045->Eval(Z)/BinConversion;
1294 
1295  dDZ1 = 1. - (R - fR_025)/ (fR_045 - fR_025);
1296  dDZ2 = 1. - (fR_045 - R)/ (fR_045 - fR_025);
1297 
1298  dZZ1 = fR2_025;
1299  dZZ2 = fR2_045;
1300  }
1301  else if ( R2 < fR2_075 ) {
1302  dCZ1 = WCSimGenerator_Radioactivity::ZFit_R040(Z,Lambda,BinConversion) * tFittingR045->Eval(Z)/BinConversion;
1303  dCZ2 = WCSimGenerator_Radioactivity::ZFit_R070(Z,Lambda,BinConversion) * tFittingR075->Eval(Z)/BinConversion;
1304 
1305  dDZ1 = 1. - (R - fR_045)/ (fR_075 - fR_045);
1306  dDZ2 = 1. - (fR_075 - R)/ (fR_075 - fR_045);
1307 
1308  dZZ1 = fR2_045;
1309  dZZ2 = fR2_075;
1310  }
1311  else if ( R2 < fR2_145 ) {
1312  dCZ1 = WCSimGenerator_Radioactivity::ZFit_R070(Z,Lambda,BinConversion) * tFittingR075->Eval(Z)/BinConversion;
1313  dCZ2 = WCSimGenerator_Radioactivity::ZFit_R140(Z,Lambda,BinConversion) * tFittingR145->Eval(Z)/BinConversion;
1314 
1315  dDZ1 = 1. - (R - fR_075)/ (fR_145 - fR_075);
1316  dDZ2 = 1. - (fR_145 - R)/ (fR_145 - fR_075);
1317 
1318  dZZ1 = fR2_075;
1319  dZZ2 = fR2_145;
1320  }
1321  else if ( R2 < fR2_175 ) {
1322  dCZ1 = WCSimGenerator_Radioactivity::ZFit_R140(Z,Lambda,BinConversion) * tFittingR145->Eval(Z)/BinConversion;
1323  dCZ2 = WCSimGenerator_Radioactivity::ZFit_R170(Z,Lambda,BinConversion) * tFittingR175->Eval(Z)/BinConversion;
1324 
1325  dDZ1 = 1. - (R - fR_145)/ (fR_175 - fR_145);
1326  dDZ2 = 1. - (fR_175 - R)/ (fR_175 - fR_145);
1327 
1328  dZZ1 = fR2_145;
1329  dZZ2 = fR2_175;
1330  }
1331  else if ( R2 < fR2_195 ) {
1332  dCZ1 = WCSimGenerator_Radioactivity::ZFit_R170(Z,Lambda,BinConversion) * tFittingR175->Eval(Z)/BinConversion;
1333  dCZ2 = WCSimGenerator_Radioactivity::ZFit_R190(Z,Lambda,BinConversion) * tFittingR195->Eval(Z)/BinConversion;
1334 
1335  dDZ1 = 1. - (R - fR_175)/ (fR_195 - fR_175);
1336  dDZ2 = 1. - (fR_195 - R)/ (fR_195 - fR_175);
1337 
1338  dZZ1 = fR2_175;
1339  dZZ2 = fR2_195;
1340  }
1341  else if ( R2 < fR2_215 ) {
1342  dCZ1 = WCSimGenerator_Radioactivity::ZFit_R190(Z,Lambda,BinConversion) * tFittingR195->Eval(Z)/BinConversion;
1343  dCZ2 = WCSimGenerator_Radioactivity::ZFit_R210(Z,Lambda,BinConversion) * tFittingR215->Eval(Z)/BinConversion;
1344 
1345  dDZ1 = 1. - (R - fR_195)/ (fR_215 - fR_195);
1346  dDZ2 = 1. - (fR_215 - R)/ (fR_215 - fR_195);
1347 
1348  dZZ1 = fR2_195;
1349  dZZ2 = fR2_215;
1350  }
1351  else {
1352  dCZ1 = WCSimGenerator_Radioactivity::ZFit_R210(Z,Lambda,BinConversion) * tFittingR215->Eval(Z)/BinConversion;
1353  dCZ2 = 0;
1354 
1355  dDZ1 = 1. - (R - fR_215)/ (fR_max - fR_215);
1356  dDZ2 = 1. - (fR_max - R)/ (fR_max - fR_215);
1357 
1358  dZZ1 = fR2_215;
1359  dZZ2 = fR2_max;
1360  }
1361 
1362  //return dCZ;
1363  G4double dCR = 0;
1364  G4double dCR1 = 0;
1365  G4double dCR2 = 0;
1366  G4double dDR1 = 0;
1367  G4double dDR2 = 0;
1368 
1369  if ( Z > fZ_p16 ) {
1370  dDR1 = 1. - (fZ_max - Z) / ( fZ_max - fZ_p16);
1371  dDR2 = 1. - (Z - fZ_p16) / ( fZ_max - fZ_p16);
1372 
1373  dCR = (dDR1 * WCSimGenerator_Radioactivity::R2Fit_ZpM(R2 ,Lambda,BinConversion) + dDR2 * WCSimGenerator_Radioactivity::R2Fit_Z16p(R2 ,Lambda,BinConversion)) / pow(BinConversion,2.);
1374  dCR1 = (dDR1 * WCSimGenerator_Radioactivity::R2Fit_ZpM(dZZ1,Lambda,BinConversion) + dDR2 * WCSimGenerator_Radioactivity::R2Fit_Z16p(dZZ1,Lambda,BinConversion)) / pow(BinConversion,2.);
1375  dCR2 = (dDR1 * WCSimGenerator_Radioactivity::R2Fit_ZpM(dZZ2,Lambda,BinConversion) + dDR2 * WCSimGenerator_Radioactivity::R2Fit_Z16p(dZZ2,Lambda,BinConversion)) / pow(BinConversion,2.);
1376  }
1377  else if ( Z > fZ_p14 ) {
1378  dDR1 = 1. - (fZ_p16 - Z) / (fZ_p16 - fZ_p14);
1379  dDR2 = 1. - (Z - fZ_p14) / (fZ_p16 - fZ_p14);
1380 
1381  dCR = (dDR1 * WCSimGenerator_Radioactivity::R2Fit_Z16p(R2 ,Lambda,BinConversion) + dDR2 * WCSimGenerator_Radioactivity::R2Fit_Z14p(R2 ,Lambda,BinConversion)) / pow(BinConversion,2.);
1382  dCR1 = (dDR1 * WCSimGenerator_Radioactivity::R2Fit_Z16p(dZZ1,Lambda,BinConversion) + dDR2 * WCSimGenerator_Radioactivity::R2Fit_Z14p(dZZ1,Lambda,BinConversion)) / pow(BinConversion,2.);
1383  dCR2 = (dDR1 * WCSimGenerator_Radioactivity::R2Fit_Z16p(dZZ2,Lambda,BinConversion) + dDR2 * WCSimGenerator_Radioactivity::R2Fit_Z14p(dZZ2,Lambda,BinConversion)) / pow(BinConversion,2.);
1384  }
1385  else if ( Z > fZ_000 ) {
1386  dDR1 = 1. - (fZ_p14 - Z) / (fZ_p14 - fZ_000);
1387  dDR2 = 1. - (Z - fZ_000) / (fZ_p14 - fZ_000);
1388 
1389  dCR = (dDR1 * WCSimGenerator_Radioactivity::R2Fit_Z14p(R2 ,Lambda,BinConversion) + dDR2 * WCSimGenerator_Radioactivity::R2Fit_Z00(R2 ,Lambda,BinConversion)) / pow(BinConversion,2.);
1390  dCR1 = (dDR1 * WCSimGenerator_Radioactivity::R2Fit_Z14p(dZZ1,Lambda,BinConversion) + dDR2 * WCSimGenerator_Radioactivity::R2Fit_Z00(dZZ1,Lambda,BinConversion)) / pow(BinConversion,2.);
1391  dCR2 = (dDR1 * WCSimGenerator_Radioactivity::R2Fit_Z14p(dZZ2,Lambda,BinConversion) + dDR2 * WCSimGenerator_Radioactivity::R2Fit_Z00(dZZ2,Lambda,BinConversion)) / pow(BinConversion,2.);
1392  }
1393  else if ( Z > fZ_m10 ) {
1394  dDR1 = 1. - (fZ_000 - Z) / (fZ_000 - fZ_m10);
1395  dDR2 = 1. - (Z - fZ_m10) / (fZ_000 - fZ_m10);
1396 
1397  dCR = (dDR1 * WCSimGenerator_Radioactivity::R2Fit_Z00(R2 ,Lambda,BinConversion) + dDR2 * WCSimGenerator_Radioactivity::R2Fit_Z10(R2 ,Lambda,BinConversion)) / pow(BinConversion,2.);
1398  dCR1 = (dDR1 * WCSimGenerator_Radioactivity::R2Fit_Z00(dZZ1,Lambda,BinConversion) + dDR2 * WCSimGenerator_Radioactivity::R2Fit_Z10(dZZ1,Lambda,BinConversion)) / pow(BinConversion,2.);
1399  dCR2 = (dDR1 * WCSimGenerator_Radioactivity::R2Fit_Z00(dZZ2,Lambda,BinConversion) + dDR2 * WCSimGenerator_Radioactivity::R2Fit_Z10(dZZ2,Lambda,BinConversion)) / pow(BinConversion,2.);
1400  }
1401  else if ( Z > fZ_m13 ) {
1402  dDR1 = 1. - (fZ_m10 - Z) / (fZ_m10 - fZ_m13);
1403  dDR2 = 1. - (Z - fZ_m13) / (fZ_m10 - fZ_m13);
1404 
1405  dCR = (dDR1 * WCSimGenerator_Radioactivity::R2Fit_Z10(R2 ,Lambda,BinConversion) + dDR2 * WCSimGenerator_Radioactivity::R2Fit_Z13(R2 ,Lambda,BinConversion)) / pow(BinConversion,2.);
1406  dCR1 = (dDR1 * WCSimGenerator_Radioactivity::R2Fit_Z10(dZZ1,Lambda,BinConversion) + dDR2 * WCSimGenerator_Radioactivity::R2Fit_Z13(dZZ1,Lambda,BinConversion)) / pow(BinConversion,2.);
1407  dCR2 = (dDR1 * WCSimGenerator_Radioactivity::R2Fit_Z10(dZZ2,Lambda,BinConversion) + dDR2 * WCSimGenerator_Radioactivity::R2Fit_Z13(dZZ2,Lambda,BinConversion)) / pow(BinConversion,2.);
1408  }
1409  else if ( Z > fZ_m16 ) {
1410  dDR1 = 1. - (fZ_m13 - Z) / (fZ_m13 - fZ_m16);
1411  dDR2 = 1. - (Z - fZ_m16) / (fZ_m13 - fZ_m16);
1412 
1413  dCR = (dDR1 * WCSimGenerator_Radioactivity::R2Fit_Z13(R2 ,Lambda,BinConversion) + dDR2 * WCSimGenerator_Radioactivity::R2Fit_Z16(R2 ,Lambda,BinConversion)) / pow(BinConversion,2.);
1414  dCR1 = (dDR1 * WCSimGenerator_Radioactivity::R2Fit_Z13(dZZ1,Lambda,BinConversion) + dDR2 * WCSimGenerator_Radioactivity::R2Fit_Z16(dZZ1,Lambda,BinConversion)) / pow(BinConversion,2.);
1415  dCR2 = (dDR1 * WCSimGenerator_Radioactivity::R2Fit_Z13(dZZ2,Lambda,BinConversion) + dDR2 * WCSimGenerator_Radioactivity::R2Fit_Z16(dZZ2,Lambda,BinConversion)) / pow(BinConversion,2.);
1416  }
1417  else {
1418 
1419  //std::cout << "With Z= " << Z << " " << fZ_m16 << " " << -1. * Z_max << " " << (fZ_m16 + Z_max) << std::endl;
1420  dDR1 = 1. - (fZ_m16 - Z) / (fZ_m16 + fZ_max);
1421  dDR2 = 1. - (Z + fZ_max) / (fZ_m16 + fZ_max);
1422 
1423  dCR = (dDR1 * WCSimGenerator_Radioactivity::R2Fit_Z16(R2 ,Lambda,BinConversion) + dDR2 * WCSimGenerator_Radioactivity::R2Fit_ZmM(R2 ,Lambda,BinConversion)) / pow(BinConversion,2.);
1424  dCR1 = (dDR1 * WCSimGenerator_Radioactivity::R2Fit_Z16(dZZ1,Lambda,BinConversion) + dDR2 * WCSimGenerator_Radioactivity::R2Fit_ZmM(dZZ1,Lambda,BinConversion)) / pow(BinConversion,2.);
1425  dCR2 = (dDR1 * WCSimGenerator_Radioactivity::R2Fit_Z16(dZZ2,Lambda,BinConversion) + dDR2 * WCSimGenerator_Radioactivity::R2Fit_ZmM(dZZ2,Lambda,BinConversion)) / pow(BinConversion,2.);
1426  }
1427 
1428  G4double dC = 0;
1429 
1430  if ( dCZ2 == 0 ) {
1431  dC = dCR * ( dCZ1/dCR1 * dDZ1 + dDZ2);
1432  // dCZ = dCZ1 * dDZ1 + dCR2 * dDZ2;
1433  }
1434  else {
1435  dC = dCR * ( dCZ1/dCR1 * dDZ1 + dCZ2/dCR2 * dDZ2);
1436  // dCZ = dCZ1 * dDZ1 + dCZ2 * dDZ2;
1437  }
1438 
1439  return dC;
1440 }
static G4double ZFit_R070(G4double x, G4double Lambda, G4double BinConversion)
WCSimDetectorConstruction * myDetector
static G4double ZFit_R210(G4double x, G4double Lambda, G4double BinConversion)
static G4double ZFit_R000(G4double x, G4double Lambda, G4double BinConversion)
G4ThreeVector GetRandomVertex(G4int tSymNumber)
static G4double ZFit_R190(G4double x, G4double Lambda, G4double BinConversion)
static G4double ZFit_R140(G4double x, G4double Lambda, G4double BinConversion)
static G4double R2Fit_Z16p(G4double x, G4double Lambda, G4double BinConversion)
static G4double R2Fit_Z10(G4double x, G4double Lambda, G4double BinConversion)
WCSimGenerator_Radioactivity(WCSimDetectorConstruction *myDC)
static G4double ZFit_R020(G4double x, G4double Lambda, G4double BinConversion)
void Configuration(G4int iScenario, G4double dLifeTime=0)
static G4double R2Fit_ZpM(G4double x, G4double Lambda, G4double BinConversion)
static G4double R2Fit_Z16(G4double x, G4double Lambda, G4double BinConversion)
static G4double ZFit_R040(G4double x, G4double Lambda, G4double BinConversion)
static G4double RadonFormula(G4double *val, G4double *par)
static G4double R2Fit_Z00(G4double x, G4double Lambda, G4double BinConversion)
static G4double ZFit_R170(G4double x, G4double Lambda, G4double BinConversion)
static G4double R2Fit_Z13(G4double x, G4double Lambda, G4double BinConversion)
static G4double R2Fit_ZmM(G4double x, G4double Lambda, G4double BinConversion)
std::vector< WCSimPmtInfo * > * Get_Pmts()
static G4double R2Fit_Z14p(G4double x, G4double Lambda, G4double BinConversion)