LArSoft  v07_13_02
Liquid Argon Software toolkit - http://larsoft.org/
LArPropertiesServiceArgoNeuT_service.cc
Go to the documentation of this file.
1 //
3 // LArPropertiesServiceArgoNeuT service implementation
4 //
6 // Framework includes
7 
8 // C++ language includes
9 #include <cmath>
10 #include <iostream>
11 
12 // LArSoft includes
16 
17 // ROOT includes
18 #include "TMath.h"
19 
20 // Framework includes
23 #include "cetlib_except/exception.h"
24 //-----------------------------------------------
26  : DBsettings() // reads information from DatabaseUtil service
27  //fval(0),
28  //fElectronlifetime( ( )
29 {
30  this->reconfigure(pset);
32 }
33 
34 //----------------------------------------------
36 {
37  int nrun = run.id().run();
39  if (nrun != 0){
40 
41  double inpvalue = 0.;
42 
43  //get lifetime for a given run. If it doesn't work return to default value.
44  if(DButil->GetLifetimeFromDB(nrun,inpvalue)!=-1)
45  fElectronlifetime=inpvalue;
46  else{//use default value
48  }
49 
50  //get temperature for a given run. If it doesn't work return to default value.
51  if(DButil->GetTemperatureFromDB(nrun,inpvalue)!=-1)
52  fTemperature=inpvalue;
53  else{
55  }
56  //get Efield vlaues for a given run. If it doesn't work return to default value.
57  DButil->GetEfieldValuesFromDB(nrun,fEfield);
58 
59  }
60  else
61  mf::LogWarning("LArProperties") << "run number == 0, not extracting info from DB\n" ;
62 
63  fAlreadyReadFromDB=true;
64 }
65 
66 
67 
68 //------------------------------------------------
71 {
72  fEfield = pset.get< std::vector<double> >("Efield" );
73  fTemperature = pset.get< double >("Temperature" );
74  fElectronlifetime = pset.get< double >("Electronlifetime");
75  fDefTemperature = pset.get< double >("Temperature" );
76  fDefElectronlifetime = pset.get< double >("Electronlifetime");
77  fRadiationLength = pset.get< double >("RadiationLength" );
78  fZ = pset.get< double >("AtomicNumber" );
79  fA = pset.get< double >("AtomicMass" );
80  fI = pset.get< double >("ExcitationEnergy");
81  fSa = pset.get< double >("SternheimerA" );
82  fSk = pset.get< double >("SternheimerK" );
83  fSx0 = pset.get< double >("SternheimerX0" );
84  fSx1 = pset.get< double >("SternheimerX1" );
85  fScbar = pset.get< double >("SternheimerCbar" );
86 
87  fArgon39DecayRate = pset.get< double >("Argon39DecayRate");
88 
89  fFastScintEnergies = pset.get< std::vector<double> >("FastScintEnergies");
90  fFastScintSpectrum = pset.get< std::vector<double> >("FastScintSpectrum");
91  fSlowScintEnergies = pset.get< std::vector<double> >("SlowScintEnergies");
92  fSlowScintSpectrum = pset.get< std::vector<double> >("SlowScintSpectrum");
93  fAbsLengthEnergies = pset.get< std::vector<double> >("AbsLengthEnergies");
94  fAbsLengthSpectrum = pset.get< std::vector<double> >("AbsLengthSpectrum");
95  fRIndexEnergies = pset.get< std::vector<double> >("RIndexEnergies" );
96  fRIndexSpectrum = pset.get< std::vector<double> >("RIndexSpectrum" );
97  fRayleighEnergies = pset.get< std::vector<double> >("RayleighEnergies" );
98  fRayleighSpectrum = pset.get< std::vector<double> >("RayleighSpectrum" );
99 
100  fScintResolutionScale = pset.get<double>("ScintResolutionScale");
101  fScintFastTimeConst = pset.get<double>("ScintFastTimeConst" );
102  fScintSlowTimeConst = pset.get<double>("ScintSlowTimeConst" );
103  fScintBirksConstant = pset.get<double>("ScintBirksConstant" );
104  fScintByParticleType = pset.get<bool>("ScintByParticleType" );
105  fScintYield = pset.get<double>("ScintYield" );
106  fScintPreScale = pset.get<double>("ScintPreScale" );
107  fScintYieldRatio = pset.get<double>("ScintYieldRatio" );
108  fExtraMatProperties = pset.get<bool>("LoadExtraMatProperties");
109 
110  if(fScintByParticleType){
111  fProtonScintYield = pset.get<double>("ProtonScintYield" );
112  fProtonScintYieldRatio = pset.get<double>("ProtonScintYieldRatio");
113  fMuonScintYield = pset.get<double>("MuonScintYield" );
114  fMuonScintYieldRatio = pset.get<double>("MuonScintYieldRatio" );
115  fPionScintYield = pset.get<double>("PionScintYield" );
116  fPionScintYieldRatio = pset.get<double>("PionScintYieldRatio" );
117  fKaonScintYield = pset.get<double>("KaonScintYield" );
118  fKaonScintYieldRatio = pset.get<double>("KaonScintYieldRatio" );
119  fElectronScintYield = pset.get<double>("ElectronScintYield" );
120  fElectronScintYieldRatio = pset.get<double>("ElectronScintYieldRatio");
121  fAlphaScintYield = pset.get<double>("AlphaScintYield" );
122  fAlphaScintYieldRatio = pset.get<double>("AlphaScintYieldRatio" );
123  }
124 
125  if(fExtraMatProperties){
126  // Used data to be found e.g. in: JINST 7 P05008 (reflectances estimated from measurements at Cracow University of Technology (thanks to dr. J. Jaglarz and dr. N. Nosidlak) + http://refractiveindex.info and refs. therein), G.M. Seidel, et al.,Nucl. Instr. and Meth. A 489 (2002)189; arXiv:1108.5584 [physics.ins-det]; Journal of Luminescence 81 (1999) 285}291; arXiv:1304.6117v3 [physics.ins-det]; „Optical characterization and GEANT4 simulation of the light collection system for the WArP 100 liters detector: analysis of the event reconstruction capability”, F. Di Pompeo PhD thesis; //http://gentitfx.fr/litrani/AllModules/FitMacros/RIndexRev_vm2000.C.html for vm2000 (VM2000 (TM)) and refs. Therein - list will be updated for referece
127 
128  fTpbTimeConstant = pset.get<double>("TpbTimeConstant" );
129 
130  fTpbEmmisionEnergies = pset.get<std::vector<double> >("TpbEmmisionEnergies" );
131  fTpbEmmisionSpectrum = pset.get<std::vector<double> >("TpbEmmisionSpectrum" );
132  fTpbAbsorptionEnergies = pset.get<std::vector<double> >("TpbAbsorptionEnergies");
133  fTpbAbsorptionSpectrum = pset.get<std::vector<double> >("TpbAbsorptionSpectrum");
134 
135  }
136 
137 
138 
139  fEnableCerenkovLight = pset.get<bool>("EnableCerenkovLight" );
140 
141  fReflectiveSurfaceNames = pset.get<std::vector<std::string> > ("ReflectiveSurfaceNames" );
142  fReflectiveSurfaceEnergies = pset.get<std::vector<double> > ("ReflectiveSurfaceEnergies" );
143  fReflectiveSurfaceReflectances = pset.get<std::vector<std::vector<double> > >("ReflectiveSurfaceReflectances" );
144  fReflectiveSurfaceDiffuseFractions= pset.get<std::vector<std::vector<double> > >("ReflectiveSurfaceDiffuseFractions");
145 
146  fAlreadyReadFromDB=false;
147 
148  return;
149 }
150 
151 //------------------------------------------------------------------------------------//
152 // temperature is assumed to be in degrees Kelvin
153 // density is nearly a linear function of temperature. see the NIST tables for details
154 // slope is between -6.2 and -6.1, intercept is 1928 kg/m^3
155 // this parameterization will be good to better than 0.5%.
156 // density is returned in g/cm^3
157 double util::LArPropertiesServiceArgoNeuT::Density(double temperature) const
158 {
159  // Default temperature use internal value.
160  if(temperature == 0.)
161  temperature = Temperature();
162 
163  double density = -0.00615*temperature + 1.928;
164 
165  return density;
166 }
167 
168 
169 //------------------------------------------------------------------------------------//
170 double util::LArPropertiesServiceArgoNeuT::Efield(unsigned int planegap) const
171 {
172  this->checkDBstatus();
173 
174  if(planegap >= fEfield.size())
175  throw cet::exception("LArProperties") << "requesting Electric field in a plane gap that is not defined\n";
176 
177  return fEfield[planegap];
178 }
179 
180 //------------------------------------------------------------------------------------//
182 {
183  this->checkDBstatus();
184  return fTemperature;
185 }
186 
187 //------------------------------------------------------------------------------------//
189 {
190  this->checkDBstatus();
191  return fElectronlifetime;
192 
193 }
194 
195 
196 
197 
198 //------------------------------------------------------------------------------------//
199 double util::LArPropertiesServiceArgoNeuT::DriftVelocity(double efield, double temperature) const {
200 
201  // Drift Velocity as a function of Electric Field and LAr Temperature
202  // from : W. Walkowiak, NIM A 449 (2000) 288-294
203  //
204  // Efield should have units of kV/cm
205  // Temperature should have units of Kelvin
206 
207  // Default Efield, use internal value.
208  if(efield == 0.)
209  efield = Efield();
210  //
211  if(efield > 4.0)
212  mf::LogWarning("LArProperties") << "DriftVelocity Warning! : E-field value of "
213  << efield
214  << " kV/cm is outside of range covered by drift"
215  << " velocity parameterization. Returned value"
216  << " may not be correct";
217 
218 
219  // Default temperature use internal value.
220  if(temperature == 0.)
221  temperature = Temperature();
222 
223  if(temperature < 87.0 || temperature > 94.0)
224  mf::LogWarning("LArProperties") << "DriftVelocity Warning! : Temperature value of "
225  << temperature
226  << " K is outside of range covered by drift velocity"
227  << " parameterization. Returned value may not be"
228  << " correct";
229 
230 
231 
232 
233  double tshift = -87.203+temperature;
234  double xFit = 0.0938163-0.0052563*tshift-0.0001470*tshift*tshift;
235  double uFit = 5.18406+0.01448*tshift-0.003497*tshift*tshift-0.000516*tshift*tshift*tshift;
236  double vd;
237 
238 
239 // Icarus Parameter Set, use as default
240  double P1 = -0.04640; // K^-1
241  double P2 = 0.01712; // K^-1
242  double P3 = 1.88125; // (kV/cm)^-1
243  double P4 = 0.99408; // kV/cm
244  double P5 = 0.01172; // (kV/cm)^-P6
245  double P6 = 4.20214;
246  double T0 = 105.749; // K
247  // Walkowiak Parameter Set
248  double P1W = -0.01481; // K^-1
249  double P2W = -0.0075; // K^-1
250  double P3W = 0.141; // (kV/cm)^-1
251  double P4W = 12.4; // kV/cm
252  double P5W = 1.627; // (kV/cm)^-P6
253  double P6W = 0.317;
254  double T0W = 90.371; // K
255 
256 // From Craig Thorne . . . currently not documented
257 // smooth transition from linear at small fields to
258 // icarus fit at most fields to Walkowiak at very high fields
259  if (efield < xFit) vd=efield*uFit;
260  else if (efield<0.619) {
261  vd = ((P1*(temperature-T0)+1)
262  *(P3*efield*std::log(1+P4/efield) + P5*std::pow(efield,P6))
263  +P2*(temperature-T0));
264  }
265  else if (efield<0.699) {
266  vd = 12.5*(efield-0.619)*((P1W*(temperature-T0W)+1)
267  *(P3W*efield*std::log(1+P4W/efield) + P5W*std::pow(efield,P6W))
268  +P2W*(temperature-T0W))+
269  12.5*(0.699-efield)*((P1*(temperature-T0)+1)
270  *(P3*efield*std::log(1+P4/efield) + P5*std::pow(efield,P6))
271  +P2*(temperature-T0));
272  }
273  else {
274  vd = ((P1W*(temperature-T0W)+1)
275  *(P3W*efield*std::log(1+P4W/efield) + P5W*std::pow(efield,P6W))
276  +P2W*(temperature-T0W));
277  }
278 
279  vd /= 10.;
280 
281  return vd; // in cm/us
282 }
283 
284 //----------------------------------------------------------------------------------
285 // The below function assumes that the user has applied the lifetime correction and
286 // effective pitch between the wires (usually after 3D reconstruction). Using with
287 // mean wire pitch will not give correct results.
288 // parameters:
289 // dQdX in electrons/cm, charge (amplitude or integral obtained) divided by effective pitch for a given 3D track.
290 // returns dEdX in MeV/cm
292 {
293  // Correction for charge quenching using parameterization from
294  // S.Amoruso et al., NIM A 523 (2004) 275
295 
296  double A3t = util::kRecombA;
297  double K3t = util::kRecombk; // in KV/cm*(g/cm^2)/MeV
298  double rho = this->Density(); // LAr density in g/cm^3
299  double Wion = 1000./util::kGeVToElectrons; // 23.6 eV = 1e, Wion in MeV/e
300  double Efield = this->Efield(); // Electric Field in the drift region in KV/cm
301  K3t /= rho; // KV/MeV
302  double dEdx = dQdx/(A3t/Wion-K3t/Efield*dQdx); //MeV/cm
303 
304  return dEdx;
305 }
306 
307 // Modified Box model correction
309 {
310  // Modified Box model correction has better behavior than the Birks
311  // correction at high values of dQ/dx.
312  double rho = this->Density(); // LAr density in g/cm^3
313  double Wion = 1000./util::kGeVToElectrons; // 23.6 eV = 1e, Wion in MeV/e
314  double Efield = this->Efield(); // Electric Field in the drift region in KV/cm
315  double Beta = util::kModBoxB / (rho * Efield);
316  double Alpha = util::kModBoxA;
317  double dEdx = (exp(Beta * Wion * dQdx ) - Alpha) / Beta;
318 
319  return dEdx;
320 
321 }
322 
323 //----------------------------------------------------------------------------------
324 // Restricted mean energy loss (dE/dx) in units of MeV/cm.
325 //
326 // For unrestricted mean energy loss, set tcut = 0, or tcut large.
327 //
328 // Arguments:
329 //
330 // mom - Momentum of incident particle in GeV/c.
331 // mass - Mass of incident particle in GeV/c^2.
332 // tcut - Maximum kinetic energy of delta rays (MeV).
333 //
334 // Returned value is positive.
335 //
336 // Based on Bethe-Bloch formula as contained in particle data book.
337 // Material parameters (stored in larproperties.fcl) are taken from
338 // pdg web site http://pdg.lbl.gov/AtomicNuclearProperties/
339 //
340 double util::LArPropertiesServiceArgoNeuT::Eloss(double mom, double mass, double tcut) const
341 {
342  // Some constants.
343 
344  double K = 0.307075; // 4 pi N_A r_e^2 m_e c^2 (MeV cm^2/mol).
345  double me = 0.510998918; // Electron mass (MeV/c^2).
346 
347  // Calculate kinematic quantities.
348 
349  double bg = mom / mass; // beta*gamma.
350  double gamma = sqrt(1. + bg*bg); // gamma.
351  double beta = bg / gamma; // beta (velocity).
352  double mer = 0.001 * me / mass; // electron mass / mass of incident particle.
353  double tmax = 2.*me* bg*bg / (1. + 2.*gamma*mer + mer*mer); // Maximum delta ray energy (MeV).
354 
355  // Make sure tcut does not exceed tmax.
356 
357  if(tcut == 0. || tcut > tmax)
358  tcut = tmax;
359 
360  // Calculate density effect correction (delta).
361 
362  double x = std::log10(bg);
363  double delta = 0.;
364  if(x >= fSx0) {
365  delta = 2. * std::log(10.) * x - fScbar;
366  if(x < fSx1)
367  delta += fSa * std::pow(fSx1 - x, fSk);
368  }
369 
370  // Calculate stopping number.
371 
372  double B = 0.5 * std::log(2.*me*bg*bg*tcut / (1.e-12 * fI*fI))
373  - 0.5 * beta*beta * (1. + tcut / tmax) - 0.5 * delta;
374 
375  // Don't let the stopping number become negative.
376 
377  if(B < 1.)
378  B = 1.;
379 
380  // Calculate dE/dx.
381 
382  double dedx = Density() * K*fZ*B / (fA * beta*beta);
383 
384  // Done.
385 
386  return dedx;
387 }
388 
389 //----------------------------------------------------------------------------------
390 // Energy loss fluctuation (sigma_E^2 / length in MeV^2/cm).
391 //
392 // Arguments:
393 //
394 // mom - Momentum of incident particle in GeV/c.
395 //
396 // Based on Bichsel formula referred to but not given in pdg.
397 //
398 double util::LArPropertiesServiceArgoNeuT::ElossVar(double mom, double mass) const
399 {
400  // Some constants.
401 
402  double K = 0.307075; // 4 pi N_A r_e^2 m_e c^2 (MeV cm^2/mol).
403  double me = 0.510998918; // Electron mass (MeV/c^2).
404 
405  // Calculate kinematic quantities.
406 
407  double bg = mom / mass; // beta*gamma.
408  double gamma2 = 1. + bg*bg; // gamma^2.
409  double beta2 = bg*bg / gamma2; // beta^2.
410 
411  // Calculate final result.
412 
413  double result = gamma2 * (1. - 0.5 * beta2) * me * (fZ / fA) * K * Density();
414  return result;
415 }
416 
417 //---------------------------------------------------------------------------------
419 {
420 
421  // if we don't have any business with DBs, we have already wasted enough time
422  if (!DBsettings.ShouldConnect) return;
423 
424  // have we already done our duty?
425  if (fAlreadyReadFromDB) return;
426 
428  // Have not read from DB: should read and requested tough treatment
429  throw cet::exception("LArProperties") << " Extracting values from LArProperties before they "
430  << " have been read in from database. \n "
431  << "Set ToughErrorTreatment or ShouldConnect "
432  << " to false in databaseutil.fcl if you want "
433  << " to avoid this. \n";
434  }
435  else {
436  // Have not read from DB, should read and requested soft treatment
437  mf::LogWarning("LArProperties") << "!!! Extracting values from LArProperties before they "
438  << " have been read in from the database. \n "
439  << " You may not be using the correct values of "
440  << " electron lifetime, temperature and electric field!"
441  << " You should not be initializing"
442  << " Database originating values in BeginJob()s or constructors."
443  << " You have been warned !!! \n ";
444  }
445 } // util::LArPropertiesServiceArgoNeuT::checkDBstatus()
446 
447 
448 //---------------------------------------------------------------------------------
450 {
451  if(fFastScintSpectrum.size()!=fFastScintEnergies.size()){
452  throw cet::exception("Incorrect vector sizes in LArProperties")
453  << "The vectors specifying the fast scintillation spectrum are "
454  << " different sizes - " << fFastScintSpectrum.size()
455  << " " << fFastScintEnergies.size();
456  }
457 
458  std::map<double, double> ToReturn;
459  for(size_t i=0; i!=fFastScintSpectrum.size(); ++i)
460  ToReturn[fFastScintEnergies.at(i)]=fFastScintSpectrum.at(i);
461 
462  return ToReturn;
463 }
464 
465 //---------------------------------------------------------------------------------
467 {
468  if(fSlowScintSpectrum.size()!=fSlowScintEnergies.size()){
469  throw cet::exception("Incorrect vector sizes in LArProperties")
470  << "The vectors specifying the slow scintillation spectrum are "
471  << " different sizes - " << fFastScintSpectrum.size()
472  << " " << fFastScintEnergies.size();
473  }
474 
475  std::map<double, double> ToReturn;
476  for(size_t i=0; i!=fSlowScintSpectrum.size(); ++i)
477  ToReturn[fSlowScintEnergies.at(i)]=fSlowScintSpectrum.at(i);
478 
479  return ToReturn;
480 }
481 
482 //---------------------------------------------------------------------------------
484 {
485  if(fRIndexSpectrum.size()!=fRIndexEnergies.size()){
486  throw cet::exception("Incorrect vector sizes in LArProperties")
487  << "The vectors specifying the RIndex spectrum are "
488  << " different sizes - " << fRIndexSpectrum.size()
489  << " " << fRIndexEnergies.size();
490  }
491 
492  std::map<double, double> ToReturn;
493  for(size_t i=0; i!=fRIndexSpectrum.size(); ++i)
494  ToReturn[fRIndexEnergies.at(i)]=fRIndexSpectrum.at(i);
495 
496  return ToReturn;
497 }
498 
499 
500 //---------------------------------------------------------------------------------
502 {
503  if(fAbsLengthSpectrum.size()!=fAbsLengthEnergies.size()){
504  throw cet::exception("Incorrect vector sizes in LArProperties")
505  << "The vectors specifying the Abs Length spectrum are "
506  << " different sizes - " << fAbsLengthSpectrum.size()
507  << " " << fAbsLengthEnergies.size();
508  }
509 
510  std::map<double, double> ToReturn;
511  for(size_t i=0; i!=fAbsLengthSpectrum.size(); ++i)
512  ToReturn[fAbsLengthEnergies.at(i)]=fAbsLengthSpectrum.at(i);
513 
514  return ToReturn;
515 }
516 
517 //---------------------------------------------------------------------------------
519 {
520  if(fRayleighSpectrum.size()!=fRayleighEnergies.size()){
521  throw cet::exception("Incorrect vector sizes in LArProperties")
522  << "The vectors specifying the rayleigh spectrum are "
523  << " different sizes - " << fRayleighSpectrum.size()
524  << " " << fRayleighEnergies.size();
525  }
526 
527  std::map<double, double> ToReturn;
528  for(size_t i=0; i!=fRayleighSpectrum.size(); ++i)
529  ToReturn[fRayleighEnergies.at(i)]=fRayleighSpectrum.at(i);
530 
531  return ToReturn;
532 }
533 
534 //---------------------------------------------------------------------------------
535 std::map<std::string, std::map<double,double> > util::LArPropertiesServiceArgoNeuT::SurfaceReflectances() const
536 {
537  std::map<std::string, std::map<double, double> > ToReturn;
538 
540  throw cet::exception("Incorrect vector sizes in LArProperties")
541  << "The vectors specifying the surface reflectivities "
542  << "do not have consistent sizes";
543  }
544  for(size_t i=0; i!=fReflectiveSurfaceNames.size(); ++i){
546  throw cet::exception("Incorrect vector sizes in LArProperties")
547  << "The vectors specifying the surface reflectivities do not have consistent sizes";
548  }
549  }
550  for(size_t iName=0; iName!=fReflectiveSurfaceNames.size(); ++iName)
551  for(size_t iEnergy=0; iEnergy!=fReflectiveSurfaceEnergies.size(); ++iEnergy)
552  ToReturn[fReflectiveSurfaceNames.at(iName)][fReflectiveSurfaceEnergies.at(iEnergy)]=fReflectiveSurfaceReflectances[iName][iEnergy];
553 
554  return ToReturn;
555 
556 }
557 
558 //---------------------------------------------------------------------------------
559 std::map<std::string, std::map<double,double> > util::LArPropertiesServiceArgoNeuT::SurfaceReflectanceDiffuseFractions() const
560 {
561  std::map<std::string, std::map<double, double> > ToReturn;
562 
564  throw cet::exception("Incorrect vector sizes in LArPropertiesServiceArgoNeuT")
565  << "The vectors specifying the surface reflectivities do not have consistent sizes";
566  }
567  for(size_t i=0; i!=fReflectiveSurfaceNames.size(); ++i){
569  throw cet::exception("Incorrect vector sizes in LArPropertiesServiceArgoNeuT")
570  << "The vectors specifying the surface reflectivities do not have consistent sizes";
571 
572  }
573  }
574  for(size_t iName=0; iName!=fReflectiveSurfaceNames.size(); ++iName)
575  for(size_t iEnergy=0; iEnergy!=fReflectiveSurfaceEnergies.size(); ++iEnergy)
576  ToReturn[fReflectiveSurfaceNames.at(iName)][fReflectiveSurfaceEnergies.at(iEnergy)]=fReflectiveSurfaceDiffuseFractions[iName][iEnergy];
577 
578  return ToReturn;
579 }
580 //---------------------------------------------------------------------------------
581 std::map<double, double> util::LArPropertiesServiceArgoNeuT::TpbAbs() const
582 { throw cet::exception("LArPropertiesServiceArgoNeuT") << __func__ << "() not implemented here !\n"; }
583 
584 //---------------------------------------------------------------------------------
585 std::map<double, double> util::LArPropertiesServiceArgoNeuT::TpbEm() const
586 { throw cet::exception("LArPropertiesServiceArgoNeuT") << __func__ << "() not implemented here !\n"; }
587 
588 //---------------------------------------------------------------------------------
589 
591  auto const& DButil = *art::ServiceHandle<util::DatabaseUtil>();
592  ToughErrorTreatment= DButil.ToughErrorTreatment();
593  ShouldConnect = DButil.ShouldConnect();
594 } // util::LArPropertiesServiceArgoNeuT::DBsettingsClass::DBsettingsClass()
595 
596 
597 //---------------------------------------------------------------------------------
598 
599 
600 namespace util{
601 
603 
604 } // namespace util
Float_t x
Definition: compare.C:6
bool ShouldConnect
equivalent parameter in DatabaseUtil
virtual std::map< double, double > RIndexSpectrum() const override
Namespace for general, non-LArSoft-specific utilities.
Definition: PIDAAlg.h:17
virtual std::map< double, double > SlowScintSpectrum() const override
int GetEfieldValuesFromDB(int run, std::vector< double > &efield)
#define DEFINE_ART_SERVICE_INTERFACE_IMPL(svc, iface)
std::vector< std::string > fReflectiveSurfaceNames
Int_t B
Definition: plot.C:25
DBsettingsClass DBsettings
settings read from DB access
double ElossVar(double mom, double mass) const
Energy loss fluctuation (sigma_E^2 / length in MeV^2/cm).
double DriftVelocity(double efield=0., double temperature=0.) const
cm/us
Double_t beta
RunNumber_t run() const
Definition: RunID.h:63
virtual std::map< double, double > FastScintSpectrum() const override
LArPropertiesServiceArgoNeuT(fhicl::ParameterSet const &pset, art::ActivityRegistry &reg)
Definition: Run.h:30
Double_t K
virtual std::map< double, double > TpbEm() const override
virtual void reconfigure(fhicl::ParameterSet const &pset) override
constexpr double kGeVToElectrons
23.6eV per ion pair, 1e9 eV/GeV
double fArgon39DecayRate
decays per cm^3 per second
double Efield(unsigned int planegap=0) const
kV/cm
Properties related to liquid argon environment in the detector.
constexpr double kModBoxB
Modified Box Beta in g/(MeV cm²)*kV/cm.
RunID const & id() const
Definition: Run.h:41
bool ToughErrorTreatment
equivalent parameter in DatabaseUtil
T get(std::string const &key) const
Definition: ParameterSet.h:231
virtual std::map< double, double > AbsLengthSpectrum() const override
int GetLifetimeFromDB(int run, double &lftime_real)
bool fAlreadyReadFromDB
tests whether the values have alread been picked up from the Database
virtual std::map< std::string, std::map< double, double > > SurfaceReflectances() const override
virtual std::map< std::string, std::map< double, double > > SurfaceReflectanceDiffuseFractions() const override
double BirksCorrection(double dQdX) const
dQ/dX in electrons/cm, returns dE/dX in MeV/cm.
GlobalSignal< detail::SignalResponseType::FIFO, void(Run const &)> sPreBeginRun
double Eloss(double mom, double mass, double tcut) const
Restricted mean dE/dx energy loss (MeV/cm).
double fI
Ar mean excitation energy (eV)
virtual std::map< double, double > TpbAbs() const override
std::vector< std::vector< double > > fReflectiveSurfaceReflectances
constexpr double kRecombk
MaybeLogger_< ELseverityLevel::ELsev_warning, false > LogWarning
std::vector< std::vector< double > > fReflectiveSurfaceDiffuseFractions
double Density(double temperature=0.) const
g/cm^3
constexpr double kRecombA
A constant.
constexpr double kModBoxA
Modified Box Alpha.
Float_t e
Definition: plot.C:34
virtual std::map< double, double > RayleighSpectrum() const override
cet::coded_exception< error, detail::translate > exception
Definition: exception.h:33
int GetTemperatureFromDB(int run, double &temp_real)
double fScbar
Sternheimer parameter Cbar.