All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
LArPropertiesStandard.h
Go to the documentation of this file.
1 /**
2  * @file LArPropertiesStandard.h
3  * @brief Service provider with utility LAr functions
4  * @see LArPropertiesStandard.cxx LArPropertiesStandardTestHelpers.h
5  *
6  * The provider detinfo::LArProperiesStandard supports simple setup for testing
7  * environment, by including in your test:
8  *
9  * #include "lardata/DetectorInfo/LArPropertiesStandardTestHelpers.h"
10  *
11  */
12 ////////////////////////////////////////////////////////////////////////
13 // Historical authors:
14 //
15 // maddalena.antonello@lngs.infn.it
16 // ornella.palamara@lngs.infn.it
17 // msoderbe@syr.edu
18 // joshua.spitz@yale.edu
19 //
20 // Optical Properties:
21 // bjpjones@mit.edu
22 //
23 // Separation of service from Detector info class:
24 // jpaley@fnal.gov
25 //
26 // Test system:
27 // petrillo@fnal.gov
28 //
29 ////////////////////////////////////////////////////////////////////////
30 
31 #ifndef DETECTORINFO_LARPROPERTIESSTANDARD_H
32 #define DETECTORINFO_LARPROPERTIESSTANDARD_H
33 
34 //
35 // This flag is for temporary code to work around the missing OptionalAtom
36 // feature in older fhiclcpp
37 //
38 #define DETECTORINFO_LARPROPERTIESSTANDARD_HASOPTIONALATOM 0
39 
40 // LArSoft libraries
42 
43 // FHiCL libraries
44 #include "fhiclcpp/types/Atom.h"
45 #if DETECTORINFO_LARPROPERTIESSTANDARD_HASOPTIONALATOM
46 # include "fhiclcpp/types/OptionalAtom.h"
47 #endif
48 #include "fhiclcpp/types/Sequence.h"
49 
50 namespace fhicl { class ParameterSet; }
51 
52 // C/C++ standard libraries
53 #include <string>
54 #include <vector>
55 #include <map>
56 #include <set>
57 
58 
59 
60 namespace detinfo {
61  /**
62  * @brief Properties related to liquid argon environment in the detector
63  *
64  * This class can access databases via DatabaseUtil service.
65  *
66  * @note Some of the database connection properties are established before
67  * the beginning of the job and if they change this service will not be
68  * aware of it. These properties petrain, so far, only the connection mode
69  * and not any content of the databases themselves.
70  * @note 2: the database connection features for this base class have been removed
71  */
73  public:
75  explicit LArPropertiesStandard
76  (fhicl::ParameterSet const& pset, std::set<std::string> ignore_params = {});
78  virtual ~LArPropertiesStandard() = default;
79 
80  /**
81  * @brief Configures the provider
82  * @param pset configuration parameter set
83  * @param ignore_params unknown parameters to be tolerated (optional)
84  *
85  * This method will validate the parameter set (except for the parameters
86  * it's explicitly told to ignore) and extract the useful information out
87  * of it.
88  */
89  bool Configure
90  (fhicl::ParameterSet const& pset, std::set<std::string> ignore_params = {});
91  bool Update(uint64_t ts=0);
92 
93  virtual double RadiationLength() const override { return fRadiationLength; } ///< g/cm^2
94 
95  virtual double Argon39DecayRate() const override { return fArgon39DecayRate; } // decays per cm^3 per second
96 
97  /// Ar atomic number
98  virtual double AtomicNumber() const override { return fZ; }
99  /// Ar atomic mass (g/mol)
100  virtual double AtomicMass() const override { return fA; }
101  /// Ar mean excitation energy (eV)
102  virtual double ExcitationEnergy() const override { return fI; }
103 
104  virtual double ScintResolutionScale() const override { return fScintResolutionScale; }
105  virtual double ScintFastTimeConst() const override { return fScintFastTimeConst; }
106  virtual double ScintSlowTimeConst() const override { return fScintSlowTimeConst; }
107  virtual double ScintBirksConstant() const override { return fScintBirksConstant; }
108 
109  virtual bool ScintByParticleType() const override { return fScintByParticleType; }
110 
111  virtual double ScintYield(bool prescale = false) const override { return fScintYield * ScintPreScale(prescale);}
112  virtual double ScintPreScale(bool prescale = true) const override { return (prescale ? fScintPreScale : 1); }
113  virtual double ScintYieldRatio() const override { return fScintYieldRatio; }
114 
115  virtual double ProtonScintYield(bool prescale = false) const override { return fProtonScintYield * ScintPreScale(prescale); }
116  virtual double ProtonScintYieldRatio() const override { return fProtonScintYieldRatio; }
117  virtual double MuonScintYield(bool prescale = false) const override { return fMuonScintYield * ScintPreScale(prescale); }
118  virtual double MuonScintYieldRatio() const override { return fMuonScintYieldRatio; }
119  virtual double KaonScintYield(bool prescale = false) const override { return fKaonScintYield * ScintPreScale(prescale); }
120  virtual double KaonScintYieldRatio() const override { return fKaonScintYieldRatio; }
121  virtual double PionScintYield(bool prescale = false) const override { return fPionScintYield * ScintPreScale(prescale); }
122  virtual double PionScintYieldRatio() const override { return fPionScintYieldRatio; }
123  virtual double ElectronScintYield(bool prescale = false) const override { return fElectronScintYield * ScintPreScale(prescale);}
124  virtual double ElectronScintYieldRatio() const override { return fElectronScintYieldRatio; }
125  virtual double AlphaScintYield(bool prescale = false) const override { return fAlphaScintYield * ScintPreScale(prescale); }
126  virtual double AlphaScintYieldRatio() const override { return fAlphaScintYieldRatio; }
127  virtual bool CerenkovLightEnabled() const override { return fEnableCerenkovLight; }
128 
129 
130  virtual std::map<double, double> SlowScintSpectrum() const override;
131  virtual std::map<double, double> FastScintSpectrum() const override;
132  virtual std::map<double, double> RIndexSpectrum() const override;
133  virtual std::map<double, double> AbsLengthSpectrum() const override;
134  virtual std::map<double, double> RayleighSpectrum() const override;
135 
136  virtual std::map<std::string, std::map<double, double> > SurfaceReflectances() const override;
137  virtual std::map<std::string, std::map<double, double> > SurfaceReflectanceDiffuseFractions() const override;
138 
139  void SetRadiationLength(double rl) { fRadiationLength = rl; }
141  void SetAtomicNumber(double z) { fZ = z;}
142  void SetAtomicMass(double a) { fA = a;}
143  void SetMeanExcitationEnergy(double e) { fI = e;}
144 
145  void SetFastScintSpectrum(std::vector<double> s) { fFastScintSpectrum = s;}
146  void SetFastScintEnergies(std::vector<double> s) { fFastScintEnergies = s;}
147  void SetSlowScintSpectrum(std::vector<double> s) { fSlowScintSpectrum = s;}
148  void SetSlowScintEnergies(std::vector<double> s) { fSlowScintEnergies = s;}
149  void SetRIndexSpectrum(std::vector<double> s) { fRIndexSpectrum = s;}
150  void SetRIndexEnergies(std::vector<double> s) { fRIndexEnergies = s;}
151  void SetAbsLengthSpectrum(std::vector<double> s) { fAbsLengthSpectrum = s;}
152  void SetAbsLengthEnergies(std::vector<double> s) { fAbsLengthEnergies = s;}
153  void SetRayleighSpectrum(std::vector<double> s) { fRayleighSpectrum = s;}
154  void SetRayleighEnergies(std::vector<double> s) { fRayleighEnergies = s;}
155 
169 
170  void SetScintYield(double y) { fScintYield = y;}
171  void SetScintPreScale(double s) { fScintPreScale = s;}
178 
179  void SetReflectiveSurfaceNames(std::vector<std::string> n) { fReflectiveSurfaceNames = n;}
183 
185  virtual bool ExtraMatProperties() const override { return fExtraMatProperties; }
186  virtual double TpbTimeConstant() const override { return fTpbTimeConstant; }
187 
188  virtual std::map<double, double> TpbAbs() const override;
189  virtual std::map<double, double> TpbEm() const override;
190 
192 
193  void SetTpbEmmisionEnergies(std::vector<double> s) { fTpbEmmisionEnergies = s;}
194  void SetTpbEmmisionSpectrum(std::vector<double> s) { fTpbEmmisionSpectrum = s;}
195  void SetTpbAbsorptionEnergies(std::vector<double> s) { fTpbAbsorptionEnergies = s;}
196  void SetTpbAbsorptionSpectrum(std::vector<double> s) { fTpbAbsorptionSpectrum = s;}
197 
198 
199  private:
200  protected:
201 
202  /// structure with all configuration parameters
204  using Name = fhicl::Name;
205  using Comment = fhicl::Comment;
206 
207  fhicl::Atom<double> RadiationLength
208  { Name("RadiationLength" ), Comment("radiation length [g/cm^2]") };
209  fhicl::Atom<double> AtomicNumber
210  { Name("AtomicNumber" ), Comment("atomic number (yes, yes, it's 18...)") };
211  fhicl::Atom<double> AtomicMass
212  { Name("AtomicMass" ), Comment("atomic mass [g/mol]") };
213  fhicl::Atom<double> MeanExcitationEnergy
214  { Name("ExcitationEnergy"), Comment("mean excitation energy [eV]") };
215 
216  fhicl::Atom<double> Argon39DecayRate
217  { Name("Argon39DecayRate"), Comment("decays/(cm^3 s)") };
218 
219  // scintillation parameters
220  fhicl::Sequence<double> FastScintEnergies { Name("FastScintEnergies"), Comment("") };
221  fhicl::Sequence<double> FastScintSpectrum { Name("FastScintSpectrum"), Comment("") };
222  fhicl::Sequence<double> SlowScintEnergies { Name("SlowScintEnergies"), Comment("") };
223  fhicl::Sequence<double> SlowScintSpectrum { Name("SlowScintSpectrum"), Comment("") };
224  fhicl::Sequence<double> AbsLengthEnergies { Name("AbsLengthEnergies"), Comment("") };
225  fhicl::Sequence<double> AbsLengthSpectrum { Name("AbsLengthSpectrum"), Comment("") };
226  fhicl::Sequence<double> RIndexEnergies { Name("RIndexEnergies" ), Comment("") };
227  fhicl::Sequence<double> RIndexSpectrum { Name("RIndexSpectrum" ), Comment("") };
228  fhicl::Sequence<double> RayleighEnergies { Name("RayleighEnergies" ), Comment("") };
229  fhicl::Sequence<double> RayleighSpectrum { Name("RayleighSpectrum" ), Comment("") };
230 
231  fhicl::Atom<double> ScintResolutionScale { Name("ScintResolutionScale"), Comment("") };
232  fhicl::Atom<double> ScintFastTimeConst { Name("ScintFastTimeConst" ), Comment("") };
233  fhicl::Atom<double> ScintSlowTimeConst { Name("ScintSlowTimeConst" ), Comment("") };
234  fhicl::Atom<double> ScintBirksConstant { Name("ScintBirksConstant" ), Comment("") };
235  fhicl::Atom<double> ScintYield { Name("ScintYield" ), Comment("") };
236  fhicl::Atom<double> ScintPreScale { Name("ScintPreScale" ), Comment("") };
237  fhicl::Atom<double> ScintYieldRatio { Name("ScintYieldRatio" ), Comment("") };
238  fhicl::Atom<bool > ScintByParticleType { Name("ScintByParticleType" ), Comment("") };
239 
240  fhicl::Sequence<double> TpbEmmisionEnergies { Name("TpbEmmisionEnergies" ), Comment("") };
241  fhicl::Sequence<double> TpbEmmisionSpectrum { Name("TpbEmmisionSpectrum" ), Comment("") };
242  fhicl::Sequence<double> TpbAbsorptionEnergies { Name("TpbAbsorptionEnergies"), Comment("") };
243  fhicl::Sequence<double> TpbAbsorptionSpectrum { Name("TpbAbsorptionSpectrum"), Comment("") };
244 
245  fhicl::Atom<double> TpbTimeConstant { Name("TpbTimeConstant" ), Comment("") };
246  fhicl::Atom<bool > ExtraMatProperties { Name("LoadExtraMatProperties"), Comment("") };
247 
248 
249 #if DETECTORINFO_LARPROPERTIESSTANDARD_HASOPTIONALATOM
250  fhicl::OptionalAtom<double> ProtonScintYield
251  { Name("ProtonScintYield" ), Comment("(only if ScintByParticleType is true)") };
252  fhicl::OptionalAtom<double> ProtonScintYieldRatio
253  { Name("ProtonScintYieldRatio" ), Comment("(only if ScintByParticleType is true)") };
254  fhicl::OptionalAtom<double> MuonScintYield
255  { Name("MuonScintYield" ), Comment("(only if ScintByParticleType is true)") };
256  fhicl::OptionalAtom<double> MuonScintYieldRatio
257  { Name("MuonScintYieldRatio" ), Comment("(only if ScintByParticleType is true)") };
258  fhicl::OptionalAtom<double> PionScintYield
259  { Name("PionScintYield" ), Comment("(only if ScintByParticleType is true)") };
260  fhicl::OptionalAtom<double> PionScintYieldRatio
261  { Name("PionScintYieldRatio" ), Comment("(only if ScintByParticleType is true)") };
262  fhicl::OptionalAtom<double> KaonScintYield
263  { Name("KaonScintYield" ), Comment("(only if ScintByParticleType is true)") };
264  fhicl::OptionalAtom<double> KaonScintYieldRatio
265  { Name("KaonScintYieldRatio" ), Comment("(only if ScintByParticleType is true)") };
266  fhicl::OptionalAtom<double> ElectronScintYield
267  { Name("ElectronScintYield" ), Comment("(only if ScintByParticleType is true)") };
268  fhicl::OptionalAtom<double> ElectronScintYieldRatio
269  { Name("ElectronScintYieldRatio"), Comment("(only if ScintByParticleType is true)") };
270  fhicl::OptionalAtom<double> AlphaScintYield
271  { Name("AlphaScintYield" ), Comment("(only if ScintByParticleType is true)") };
272  fhicl::OptionalAtom<double> AlphaScintYieldRatio
273  { Name("AlphaScintYieldRatio" ), Comment("(only if ScintByParticleType is true)") };
274 #endif // DETECTORINFO_LARPROPERTIESSTANDARD_HASOPTIONALATOM?
275 
276  fhicl::Atom<bool > EnableCerenkovLight { Name("EnableCerenkovLight" ), Comment("") };
277 
278  fhicl::Sequence<std::string> ReflectiveSurfaceNames
279  { Name("ReflectiveSurfaceNames"), Comment("") };
280  fhicl::Sequence<double> ReflectiveSurfaceEnergies
281  { Name("ReflectiveSurfaceEnergies"), Comment("") };
282  fhicl::Sequence<fhicl::Sequence<double>> ReflectiveSurfaceReflectances
283  { Name("ReflectiveSurfaceReflectances"), Comment("") };
284  fhicl::Sequence<fhicl::Sequence<double>> ReflectiveSurfaceDiffuseFractions
285  { Name("ReflectiveSurfaceDiffuseFractions"), Comment("") };
286 
287  }; // Configuration_t
288 
289 #if !DETECTORINFO_LARPROPERTIESSTANDARD_HASOPTIONALATOM
290  /// structure with all configuration parameters
292 
293  fhicl::Atom<double> ProtonScintYield
294  { Name("ProtonScintYield" ), Comment("(only if ScintByParticleType is true)") };
295  fhicl::Atom<double> ProtonScintYieldRatio
296  { Name("ProtonScintYieldRatio" ), Comment("(only if ScintByParticleType is true)") };
297  fhicl::Atom<double> MuonScintYield
298  { Name("MuonScintYield" ), Comment("(only if ScintByParticleType is true)") };
299  fhicl::Atom<double> MuonScintYieldRatio
300  { Name("MuonScintYieldRatio" ), Comment("(only if ScintByParticleType is true)") };
301  fhicl::Atom<double> PionScintYield
302  { Name("PionScintYield" ), Comment("(only if ScintByParticleType is true)") };
303  fhicl::Atom<double> PionScintYieldRatio
304  { Name("PionScintYieldRatio" ), Comment("(only if ScintByParticleType is true)") };
305  fhicl::Atom<double> KaonScintYield
306  { Name("KaonScintYield" ), Comment("(only if ScintByParticleType is true)") };
307  fhicl::Atom<double> KaonScintYieldRatio
308  { Name("KaonScintYieldRatio" ), Comment("(only if ScintByParticleType is true)") };
309  fhicl::Atom<double> ElectronScintYield
310  { Name("ElectronScintYield" ), Comment("(only if ScintByParticleType is true)") };
311  fhicl::Atom<double> ElectronScintYieldRatio
312  { Name("ElectronScintYieldRatio"), Comment("(only if ScintByParticleType is true)") };
313  fhicl::Atom<double> AlphaScintYield
314  { Name("AlphaScintYield" ), Comment("(only if ScintByParticleType is true)") };
315  fhicl::Atom<double> AlphaScintYieldRatio
316  { Name("AlphaScintYieldRatio" ), Comment("(only if ScintByParticleType is true)") };
317 
318  }; // ConfigWithScintByType_t
319 #endif // !DETECTORINFO_LARPROPERTIESSTANDARD_HASOPTIONALATOM?
320 
321 
323 
324  double fRadiationLength; ///< g/cm^2
325  double fArgon39DecayRate; ///< decays per cm^3 per second
326 
327  // Following parameters are for use in Bethe-Bloch formula for dE/dx.
328 
329  double fZ; ///< Ar atomic number
330  double fA; ///< Ar atomic mass (g/mol)
331  double fI; ///< Ar mean excitation energy (eV)
332 
333 
334  // Optical parameters for LAr
335 
336  std::vector<double> fFastScintSpectrum;
337  std::vector<double> fFastScintEnergies;
338  std::vector<double> fSlowScintSpectrum;
339  std::vector<double> fSlowScintEnergies;
340  std::vector<double> fRIndexSpectrum;
341  std::vector<double> fRIndexEnergies;
342  std::vector<double> fAbsLengthSpectrum;
343  std::vector<double> fAbsLengthEnergies;
344  std::vector<double> fRayleighSpectrum;
345  std::vector<double> fRayleighEnergies;
346 
348 
361 
362  double fScintYield;
369 
371 
372  std::vector<std::string> fReflectiveSurfaceNames;
373  std::vector<double> fReflectiveSurfaceEnergies;
374  std::vector<std::vector<double> > fReflectiveSurfaceReflectances;
375  std::vector<std::vector<double> > fReflectiveSurfaceDiffuseFractions;
376 
379  std::vector<double> fTpbEmmisionEnergies;
380  std::vector<double> fTpbEmmisionSpectrum;
381  std::vector<double> fTpbAbsorptionEnergies;
382  std::vector<double> fTpbAbsorptionSpectrum;
383 
384  /*
385  struct DBsettingsClass {
386  DBsettingsClass();
387 
388  bool ToughErrorTreatment; ///< equivalent parameter in DatabaseUtil
389  bool ShouldConnect; ///< equivalent parameter in DatabaseUtil
390  }; // DBsettingsClass
391 
392  DBsettingsClass DBsettings; ///< settings read from DB access
393  */
394 
395  public:
396  // expose the configuration object for framework service
397 #if DETECTORINFO_LARPROPERTIESSTANDARD_HASOPTIONALATOM
399 #else // !DETECTORINFO_LARPROPERTIESSTANDARD_HASOPTIONALATOM?
401 #endif // !DETECTORINFO_LARPROPERTIESSTANDARD_HASOPTIONALATOM?
402 
403  }; // class LArPropertiesStandard
404 } //namespace detinfo
405 #endif // LARPROPERTIES_H
std::vector< double > fTpbEmmisionSpectrum
process_name opflash particleana ie ie ie z
virtual double ScintFastTimeConst() const override
virtual std::map< double, double > RayleighSpectrum() const override
virtual double ElectronScintYieldRatio() const override
double fArgon39DecayRate
decays per cm^3 per second
double fA
Ar atomic mass (g/mol)
virtual double KaonScintYield(bool prescale=false) const override
virtual std::map< double, double > AbsLengthSpectrum() const override
std::vector< double > fTpbAbsorptionSpectrum
virtual ~LArPropertiesStandard()=default
virtual std::map< double, double > RIndexSpectrum() const override
virtual double TpbTimeConstant() const override
virtual std::map< double, double > FastScintSpectrum() const override
virtual bool CerenkovLightEnabled() const override
std::vector< double > fFastScintEnergies
virtual bool ScintByParticleType() const override
virtual double Argon39DecayRate() const override
virtual double AlphaScintYield(bool prescale=false) const override
std::vector< double > fRayleighSpectrum
virtual double PionScintYieldRatio() const override
void SetAbsLengthSpectrum(std::vector< double > s)
void SetTpbEmmisionSpectrum(std::vector< double > s)
virtual double KaonScintYieldRatio() const override
virtual double ScintPreScale(bool prescale=true) const override
process_name gaushit a
auto vector(Vector const &v)
Returns a manipulator which will print the specified array.
Definition: DumpUtils.h:265
std::vector< std::string > fReflectiveSurfaceNames
bool Configure(fhicl::ParameterSet const &pset, std::set< std::string > ignore_params={})
Configures the provider.
virtual double AtomicNumber() const override
Ar atomic number.
process_name opflash particleana ie ie y
virtual double ElectronScintYield(bool prescale=false) const override
structure with all configuration parameters
void SetReflectiveSurfaceEnergies(std::vector< double > e)
std::vector< double > fFastScintSpectrum
void SetReflectiveSurfaceReflectances(std::vector< std::vector< double > > r)
std::vector< double > fAbsLengthEnergies
virtual double ProtonScintYield(bool prescale=false) const override
virtual std::map< std::string, std::map< double, double > > SurfaceReflectances() const override
BEGIN_PROLOG vertical distance to the surface Name
void SetSlowScintEnergies(std::vector< double > s)
std::vector< double > fSlowScintEnergies
structure with all configuration parameters
std::vector< double > fTpbEmmisionEnergies
void SetFastScintSpectrum(std::vector< double > s)
void SetRayleighSpectrum(std::vector< double > s)
void SetTpbEmmisionEnergies(std::vector< double > s)
virtual double PionScintYield(bool prescale=false) const override
void SetAbsLengthEnergies(std::vector< double > s)
void SetFastScintEnergies(std::vector< double > s)
void SetRIndexEnergies(std::vector< double > s)
virtual double MuonScintYieldRatio() const override
void SetReflectiveSurfaceDiffuseFractions(std::vector< std::vector< double > > f)
void SetTpbAbsorptionSpectrum(std::vector< double > s)
virtual double ScintResolutionScale() const override
virtual double AtomicMass() const override
Ar atomic mass (g/mol)
std::vector< std::vector< double > > fReflectiveSurfaceReflectances
virtual std::map< double, double > TpbAbs() const override
virtual double ScintBirksConstant() const override
double fI
Ar mean excitation energy (eV)
virtual std::map< double, double > TpbEm() const override
virtual std::map< std::string, std::map< double, double > > SurfaceReflectanceDiffuseFractions() const override
then echo File list $list not found else cat $list while read file do echo $file sed s
Definition: file_to_url.sh:60
Properties related to liquid argon environment in the detector.
std::vector< double > fAbsLengthSpectrum
void SetTpbAbsorptionEnergies(std::vector< double > s)
std::vector< double > fReflectiveSurfaceEnergies
std::vector< double > fSlowScintSpectrum
do i e
void SetSlowScintSpectrum(std::vector< double > s)
std::vector< double > fTpbAbsorptionEnergies
fhicl::Sequence< fhicl::Sequence< double > > ReflectiveSurfaceReflectances
virtual double RadiationLength() const override
g/cm^2
virtual double ExcitationEnergy() const override
Ar mean excitation energy (eV)
std::vector< double > fRayleighEnergies
virtual double ScintYieldRatio() const override
virtual double ScintYield(bool prescale=false) const override
esac echo uname r
void SetReflectiveSurfaceNames(std::vector< std::string > n)
virtual double MuonScintYield(bool prescale=false) const override
virtual bool ExtraMatProperties() const override
virtual double AlphaScintYieldRatio() const override
virtual std::map< double, double > SlowScintSpectrum() const override
virtual double ScintSlowTimeConst() const override
void SetRIndexSpectrum(std::vector< double > s)
std::vector< std::vector< double > > fReflectiveSurfaceDiffuseFractions
fhicl::Sequence< fhicl::Sequence< double > > ReflectiveSurfaceDiffuseFractions
void SetRayleighEnergies(std::vector< double > s)
virtual double ProtonScintYieldRatio() const override