OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
Distribution.h
Go to the documentation of this file.
1 #ifndef OPAL_Distribution_HH
2 #define OPAL_Distribution_HH
3 
4 // ------------------------------------------------------------------------
5 // $RCSfile: Distribution.h,v $
6 // ------------------------------------------------------------------------
7 // $Revision: 1.1.1.1 $
8 // ------------------------------------------------------------------------
9 // Copyright: see Copyright.readme
10 // ------------------------------------------------------------------------
11 //
12 // Class: Distribution
13 //
14 // ------------------------------------------------------------------------
15 //
16 // $Date: 2000/03/27 09:33:44 $
17 // $Author: Andreas Adelmann $
18 //
19 // ------------------------------------------------------------------------
20 #include <iosfwd>
21 #include <fstream>
22 #include <string>
23 
25 #include "Algorithms/PartData.h"
26 
27 #include "Algorithms/Vektor.h"
28 #include "Beamlines/Beamline.h"
29 #include "Attributes/Attributes.h"
30 
31 #include "Ippl.h"
32 
33 #include "H5hut.h"
34 
35 #include <gsl/gsl_histogram.h>
36 #include <gsl/gsl_qrng.h>
37 #include <gsl/gsl_rng.h>
38 
39 #ifdef WITH_UNIT_TESTS
40 #include <gtest/gtest_prod.h>
41 #endif
42 
43 class Beam;
44 
45 template <class T, unsigned Dim>
46 class PartBunchBase;
47 
48 class PartBins;
49 class EnvelopeBunch;
50 class BoundaryGeometry;
51 class LaserProfile;
52 class H5PartWrapper;
53 
54 namespace DistrTypeT
55 {
66  };
67 }
68 
69 namespace EmissionModelT
70 {
74  };
75 }
76 
78 {
81  };
82 }
83 
84 namespace Attrib
85 {
86  namespace Distribution
87  {
88  enum AttributesT {
99  W,
100  FE,
129  MX,
130  MY,
131  MZ,
132  MT,
142  R, // the correlation matrix (a la transport)
173  VSEYZERO, // sey_0 in Vaughn's model.
174  VEZERO, // Energy related to sey_0 in Vaughan's model.
175  VSEYMAX, // sey max in Vaughan's model.
176  VEMAX, // Emax in Vaughan's model.
177  VKENERGY, // Fitting parameter denotes the roughness of
178  // surface for impact energy in Vaughn's model.
179  VKTHETA, // Fitting parameter denotes the roughness of
180  // surface for impact angle in Vaughn's model.
181  VVTHERMAL, // Thermal velocity of Maxwellian distribution
182  // of secondaries in Vaughan's model.
183  VW,
184  SURFMATERIAL, // Add material type, currently 0 for copper
185  // and 1 for stainless steel.
186  EX, // below is for the matched distribution
187  EY,
188  ET,
189  SECTOR, // Matched-Gauss: single sector or full machine
190  NSECTORS, // Matched-Gauss: number of sectors to average field
191  NSTEPS, // Matched-Gauss: number of steps for closed orbit finder
192  RGUESS, // Matched-Gauss: guess for closed orbit finder
193  DENERGY, // Matched-Gauss: energy step for closed orbit finder
199  // E2,
200  ID1, // special particle that the user can set
201  ID2, // special particle that the user can set
204  };
205  }
206 
207  namespace Legacy
208  {
209  namespace Distribution
210  {
212  // DESCRIPTION OF THE DISTRIBUTION:
214  // DEBIN,
218  T,
219  PT,
220  // ALPHAX,
221  // ALPHAY,
222  // BETAX,
223  // BETAY,
224  // DX,
225  // DDX,
226  // DY,
227  // DDY,
229  };
230  }
231  }
232 }
233 
234 /*
235  * Class Distribution
236  *
237  * Defines the initial beam that is injected or emitted into the simulation.
238  */
239 
240 class Distribution: public Definition {
241 
242 public:
243 
244  Distribution();
245  virtual ~Distribution();
246 
247  virtual bool canReplaceBy(Object *object);
248  virtual Distribution *clone(const std::string &name);
249  virtual void execute();
250  virtual void update();
251  size_t getNumOfLocalParticlesToCreate(size_t n);
254  size_t numberOfParticles,
255  double current, const Beamline &bl);
256  void createOpalE(Beam *beam,
257  std::vector<Distribution *> addedDistributions,
258  EnvelopeBunch *envelopeBunch,
259  double distCenter,
260  double Bz0);
262  std::vector<Distribution *> addedDistributions,
263  size_t &numberOfParticles);
264  void createOpalT(PartBunchBase<double, 3> *beam, size_t &numberOfParticles);
266  void doRestartOpalT(PartBunchBase<double, 3> *p, size_t Np, int restartStep, H5PartWrapper *h5wrapper);
267  void doRestartOpalCycl(PartBunchBase<double, 3> *p, size_t Np, int restartStep,
268  const int specifiedNumBunch, H5PartWrapper *h5wrapper);
269  void doRestartOpalE(EnvelopeBunch *p, size_t Np, int restartStep, H5PartWrapper *h5wrapper);
270  size_t emitParticles(PartBunchBase<double, 3> *beam, double eZ);
271  double getPercentageEmitted() const;
272  static Distribution *find(const std::string &name);
273 
274  void eraseXDist();
275  void eraseBGxDist();
276  void eraseYDist();
277  void eraseBGyDist();
278  void eraseTOrZDist();
279  void eraseBGzDist();
280  bool getIfDistEmitting();
282  double getMaxTOrZ();
283  double getMinTOrZ();
284  size_t getNumberOfEmissionSteps();
285  int getNumberOfEnergyBins();
286  double getEmissionDeltaT();
287  double getEnergyBinDeltaT();
288  double getWeight();
289  std::vector<double>& getXDist();
290  std::vector<double>& getBGxDist();
291  std::vector<double>& getYDist();
292  std::vector<double>& getBGyDist();
293  std::vector<double>& getTOrZDist();
294  std::vector<double>& getBGzDist();
295 
297  const PartData &getReference() const;
298  double getTEmission();
299 
300  Vector_t get_pmean() const;
301  double getEkin() const;
302  double getLaserEnergy() const;
303  double getWorkFunctionRf() const;
304 
307  double getEInitThreshold();
308  double getWorkFunction();
309  double getFieldEnhancement();
311  double getFieldFNThreshold();
312  double getFNParameterA();
313  double getFNParameterB();
314  double getFNParameterY();
315  double getFNParameterVYZero();
316  double getFNParameterVYSecond();
318  bool getEmissionMode() ;
319 
320  std::string getTypeofDistribution();
321 
322  double getvSeyZero();//return sey_0 in Vaughan's model
323  double getvEZero();//return the energy related to sey_0 in Vaughan's model
324  double getvSeyMax();//return sey max in Vaughan's model
325  double getvEmax();//return Emax in Vaughan's model
326  double getvKenergy();//return fitting parameter denotes the roughness of surface for impact energy in Vaughan's model
327  double getvKtheta();//return fitting parameter denotes the roughness of surface for impact angle in Vaughan's model
328  double getvVThermal();//return thermal velocity of Maxwellian distribution of secondaries in Vaughan's model
329  double getVw();//return velocity scalar for parallel plate benchmark;
330  int getSurfMaterial();//material type for Furman-Pivi's model 0 for copper, 1 for stainless steel
331 
332  Inform &printInfo(Inform &os) const;
333 
334  bool Rebin();
335  void setDistToEmitted(bool emitted);
336  void setDistType();
337  void shiftBeam(double &maxTOrZ, double &minTOrZ);
338  double getEmissionTimeShift() const;
339 
341 
343 
345 private:
346 #ifdef WITH_UNIT_TESTS
347  FRIEND_TEST(GaussTest, FullSigmaTest1);
348  FRIEND_TEST(GaussTest, FullSigmaTest2);
349  FRIEND_TEST(BinomialTest, FullSigmaTest1);
350  FRIEND_TEST(BinomialTest, FullSigmaTest2);
351 #endif
352 
353  Distribution(const std::string &name, Distribution *parent);
354 
355  // Not implemented.
356  Distribution(const Distribution &) = delete;
357  void operator=(const Distribution &) = delete;
358 
359  // void printSigma(SigmaGenerator<double,unsigned int>::matrix_type& M, Inform& out);
360  void addDistributions();
361  void applyEmissionModel(double lowEnergyLimit, double &px, double &py, double &pz, std::vector<double> &additionalRNs);
362  void applyEmissModelAstra(double &px, double &py, double &pz, std::vector<double> &additionalRNs);
363  void applyEmissModelNone(double &pz);
364  void applyEmissModelNonEquil(double eZ, double &px, double &py, double &pz, std::vector<double> &additionalRNs);
365  void create(size_t &numberOfParticles, double massIneV);
366  void calcPartPerDist(size_t numberOfParticles);
368  void checkIfEmitted();
369  void checkParticleNumber(size_t &numberOfParticles);
371  double converteVToBetaGamma(double valueIneV, double massIneV);
372  size_t getNumberOfParticlesInFile(std::ifstream &inputFile);
373 
375  public:
377  { }
378 
379  virtual double get(double rand) = 0;
380  };
381 
383  public:
385  ami_m(rhs.ami_m)
386  {}
387 
389  { ami_m = 1.0 / a; }
390 
391  virtual double get(double rand);
392  private:
393  double ami_m;
394  };
395 
397  public:
398  virtual double get(double rand);
399  };
400 
401  void createDistributionBinomial(size_t numberOfParticles, double massIneV);
402  void createDistributionFlattop(size_t numberOfParticles, double massIneV);
403  void createDistributionFromFile(size_t numberOfParticles, double massIneV);
404  void createDistributionGauss(size_t numberOfParticles, double massIneV);
405  void createMatchedGaussDistribution(size_t numberOfParticles, double massIneV);
406  void fillEBinHistogram();
407  void fillParticleBins();
408  size_t findEBin(double tOrZ);
409  void generateAstraFlattopT(size_t numberOfParticles);
410  void generateBinomial(size_t numberOfParticles);
411  void generateFlattopLaserProfile(size_t numberOfParticles);
412  void generateFlattopT(size_t numberOfParticles);
413  void generateFlattopZ(size_t numberOfParticles);
414  void generateGaussZ(size_t numberOfParticles);
415  void generateLongFlattopT(size_t numberOfParticles);
416  void generateTransverseGauss(size_t numberOfParticles);
419  void printDist(Inform &os, size_t numberOfParticles) const;
420  void printDistBinomial(Inform &os) const;
421  void printDistFlattop(Inform &os) const;
422  void printDistFromFile(Inform &os) const;
423  void printDistGauss(Inform &os) const;
424  void printDistMatchedGauss(Inform &os) const;
425  void printDistSurfEmission(Inform &os) const;
426  void printDistSurfAndCreate(Inform &os) const;
427  void printEmissionModel(Inform &os) const;
428  void printEmissionModelAstra(Inform &os) const;
429  void printEmissionModelNone(Inform &os) const;
430  void printEmissionModelNonEquil(Inform &os) const;
431  void printEnergyBins(Inform &os) const;
432  void adjustPhaseSpace(double massIneV);
433  void reflectDistribution(size_t &numberOfParticles);
434  void scaleDistCoordinates();
436  gsl_qrng* selectRandomGenerator(std::string, unsigned int dimension);
437  void setAttributes();
438  void setDistParametersBinomial(double massIneV);
439  void setDistParametersFlattop(double massIneV);
440  void setDistParametersGauss(double massIneV);
441  void setEmissionTime(double &maxT, double &minT);
447  void setupEnergyBins(double maxTOrZ, double minTOrZ);
448  void setupParticleBins(double massIneV, PartBunchBase<double, 3> *beam);
449  void shiftDistCoordinates(double massIneV);
450  void writeOutFileHeader();
451  void writeOutFileEmission();
452  void writeOutFileInjection();
453 
454  std::string distT_m;
456 
458 
459  bool emitting_m;
460 
463 
466  std::vector<Distribution *> addedDistributions_m;
467  std::vector<size_t> particlesPerDist_m;
468 
471 
473  double tEmission_m;
474  double tBin_m;
483  gsl_histogram *energyBinHist_m;
484 
486  gsl_rng *randGen_m;
487 
488  // ASTRA and NONE photo emission model.
489  double pTotThermal_m;
491 
492  // NONEQUIL photo emission model.
494  double laserEnergy_m;
496  double cathodeTemp_m;
498 
499  std::vector<std::vector<double> > additionalRNs_m;
500 
503 
504  // Beam coordinate containers.
505  std::vector<double> xDist_m;
506  std::vector<double> pxDist_m;
507  std::vector<double> yDist_m;
508  std::vector<double> pyDist_m;
509  std::vector<double> tOrZDist_m;
510  std::vector<double> pzDist_m;
511 
512  // Initial coordinates for file write.
513  std::vector<double> xWrite_m;
514  std::vector<double> pxWrite_m;
515  std::vector<double> yWrite_m;
516  std::vector<double> pyWrite_m;
517  std::vector<double> tOrZWrite_m;
518  std::vector<double> pzWrite_m;
519  std::vector<size_t> binWrite_m;
520 
521  // for compatibility reasons
522  double avrgpz_m;
523 
524 
525 
526  //Distribution parameters.
528  double sigmaTRise_m;
529  double sigmaTFall_m;
537 
538  // Laser profile.
540  std::string laserImageName_m;
543 
544  /*
545  * Dark current calculation parameters.
546  */
549  double eInitThreshold_m;
552  double workFunction_m;
555  double fieldThrFN_m;
557  size_t maxFN_m;
559  double paraFNA_m;
561  double paraFNB_m;
563  double paraFNY_m;
565  double paraFNVYSe_m;
567  double paraFNVYZe_m;
569  int secondaryFlag_m;
571  double ppVw_m;
575  double vVThermal_m;
576 
578 
579  // AAA This is for the matched distribution
580  double I_m;
581  double E_m;
582 
584  double tRise_m;
585  double tFall_m;
586  double sigmaRise_m;
587  double sigmaFall_m;
588  double cutoff_m;
589 
590  // Cyclotron for restart in local mode
592 };
593 
594 inline Inform &operator<<(Inform &os, const Distribution &d) {
595  return d.printInfo(os);
596 }
597 
598 inline
600  return pmean_m;
601 }
602 
603 inline
605  return distrTypeT_m;
606 }
607 
608 inline
610  return (double)totalNumberEmittedParticles_m / (double)totalNumberParticles_m;
611 }
612 
613 inline
614 double Distribution::getEkin() const {
616 }
617 
618 inline
621 }
622 
623 inline
626 }
627 
628 inline
631 }
632 
633 inline
636 }
637 
638 inline
641 }
642 
643 inline
646 }
647 
648 inline
651 }
652 
653 inline
656 }
657 
658 inline
661 }
662 
663 inline
666 }
667 
668 inline
671 }
672 
673 inline
676 }
677 
678 inline
681 }
682 
683 inline
686 }
687 
688 inline
691 }
692 
693 inline
696 }
697 
698 inline
701 }
702 
703 inline
705  // return sey_0 in Vaughan's model
707 }
708 
709 inline
711  // return the energy related to sey_0 in Vaughan's model
713 }
714 
715 inline
717  // return sey max in Vaughan's model
719 }
720 
721 inline
723  // return Emax in Vaughan's model
725 }
726 
727 inline
729  // return fitting parameter denotes the roughness of surface for
730  // impact energy in Vaughan's model
732 }
733 
734 inline
736  // return fitting parameter denotes the roughness of surface for
737  // impact angle in Vaughan's model
739 }
740 
741 inline
743  // thermal velocity of Maxwellian distribution of secondaries in Vaughan's model
745 }
746 
747 inline
749  // velocity scalar for parallel plate benchmark;
751 }
752 
753 inline
755  // Surface material number for Furman-Pivi's Model;
757 }
758 
759 #endif // OPAL_Distribution_HH
Vector_t pmean_m
Total thermal momentum.
Definition: Distribution.h:490
double getEmissionDeltaT()
std::vector< double > & getBGxDist()
void doRestartOpalCycl(PartBunchBase< double, 3 > *p, size_t Np, int restartStep, const int specifiedNumBunch, H5PartWrapper *h5wrapper)
void printDist(Inform &os, size_t numberOfParticles) const
std::ostream & operator<<(std::ostream &os, const Attribute &attr)
Definition: Attribute.cpp:167
EmissionModelT::EmissionModelT emissionModel_m
Emission Model.
Definition: Distribution.h:470
double getLaserEnergy() const
Definition: Distribution.h:619
double getWeight()
virtual ~Distribution()
void applyEmissionModel(double lowEnergyLimit, double &px, double &py, double &pz, std::vector< double > &additionalRNs)
void chooseInputMomentumUnits(InputMomentumUnitsT::InputMomentumUnitsT inputMoUnits)
const PartData & getReference() const
Return the embedded CLASSIC PartData.
virtual void update()
Update this object.
std::vector< double > yWrite_m
Definition: Distribution.h:515
int getSurfMaterial()
Definition: Distribution.h:754
void doRestartOpalE(EnvelopeBunch *p, size_t Np, int restartStep, H5PartWrapper *h5wrapper)
double getEInitThreshold()
Definition: Distribution.h:639
std::vector< size_t > particlesPerDist_m
Definition: Distribution.h:467
double getFNParameterY()
Definition: Distribution.h:674
bool GetPreviousH5Local()
Definition: Distribution.h:340
double getEkin() const
Definition: Distribution.h:614
size_t darkCurrentParts_m
Definition: Distribution.h:547
std::vector< double > tOrZWrite_m
Definition: Distribution.h:517
void adjustPhaseSpace(double massIneV)
void initializeBeam(PartBunchBase< double, 3 > *beam)
double getPercentageEmitted() const
Definition: Distribution.h:609
double cathodeWorkFunc_m
Definition: Distribution.h:493
std::vector< double > xDist_m
Definition: Distribution.h:505
The base class for all OPAL definitions.
Definition: Definition.h:30
int numberOfSampleBins_m
Definition: Distribution.h:480
double pTotThermal_m
Random number generator.
Definition: Distribution.h:489
std::vector< double > tOrZDist_m
Definition: Distribution.h:509
core of the envelope tracker based on Rene Bakkers BET implementation
Definition: EnvelopeBunch.h:60
std::vector< double > pxWrite_m
Definition: Distribution.h:514
int getNumberOfEnergyBins()
void createOpalCycl(PartBunchBase< double, 3 > *beam, size_t numberOfParticles, double current, const Beamline &bl)
virtual bool canReplaceBy(Object *object)
Distribution can only be replaced by another distribution.
void createDistributionFromFile(size_t numberOfParticles, double massIneV)
double getFieldFNThreshold()
Definition: Distribution.h:659
double tEmission_m
Emission parameters.
Definition: Distribution.h:473
double darkInwardMargin_m
Number of dark current particles.
Definition: Distribution.h:548
std::string laserProfileFileName_m
Definition: Distribution.h:539
std::vector< std::vector< double > > additionalRNs_m
Upper limit on emission energy distribution (eV).
Definition: Distribution.h:499
DistrTypeT::DistrTypeT getType() const
Definition: Distribution.h:604
double sigmaFall_m
Definition: Distribution.h:587
void shiftBeam(double &maxTOrZ, double &minTOrZ)
void calcPartPerDist(size_t numberOfParticles)
std::vector< double > & getBGzDist()
void generateBinomial(size_t numberOfParticles)
InputMomentumUnitsT::InputMomentumUnitsT inputMoUnits_m
Definition: Distribution.h:527
Vector_t sigmaP_m
Definition: Distribution.h:532
double paraFNVYZe_m
Definition: Distribution.h:568
Particle reference data.
Definition: PartData.h:38
int currentSampleBin_m
Definition: Distribution.h:477
double emitEnergyUpperLimit_m
Cathode temperature (K).
Definition: Distribution.h:497
void createDistributionGauss(size_t numberOfParticles, double massIneV)
double getEmissionTimeShift() const
double paraFNVYSe_m
Definition: Distribution.h:566
static Distribution * find(const std::string &name)
void operator=(const Distribution &)=delete
double getEnergyBinDeltaT()
void writeOutFileEmission()
void setFieldEmissionParameters()
double getFNParameterA()
Definition: Distribution.h:664
std::vector< double > xWrite_m
Definition: Distribution.h:513
double getvKenergy()
Definition: Distribution.h:728
std::vector< Attribute > itsAttr
The object attributes (see Attribute.hh).
Definition: Object.h:214
void createBoundaryGeometry(PartBunchBase< double, 3 > *p, BoundaryGeometry &bg)
double getDarkCurrentParticlesInwardMargin()
Definition: Distribution.h:634
std::vector< double > & getYDist()
void scaleDistCoordinates()
size_t totalNumberParticles_m
Definition: Distribution.h:501
std::vector< Distribution * > addedDistributions_m
Vector of distributions to be added to this distribution.
Definition: Distribution.h:466
double getWorkFunctionRf() const
Definition: Distribution.h:624
void generateFlattopZ(size_t numberOfParticles)
double sigmaTFall_m
Definition: Distribution.h:529
bool previousH5Local_m
Definition: Distribution.h:591
std::string getTypeofDistribution()
Definition: Distribution.h:699
size_t emitParticles(PartBunchBase< double, 3 > *beam, double eZ)
Inform & printInfo(Inform &os) const
bool getBool(const Attribute &attr)
Return logical value.
Definition: Attributes.cpp:66
bool getEmissionMode()
Definition: Distribution.h:694
size_t getMaxFNemissionPartPerTri()
Definition: Distribution.h:654
size_t maxFN_m
Definition: Distribution.h:558
void fillParticleBins()
void setupEmissionModelNonEquil()
void setupEnergyBins(double maxTOrZ, double minTOrZ)
void setDistParametersBinomial(double massIneV)
void generateGaussZ(size_t numberOfParticles)
void printDistSurfEmission(Inform &os) const
unsigned int numberOfDistributions_m
and list type for switch statements.
Definition: Distribution.h:457
void printEmissionModelNonEquil(Inform &os) const
size_t getNumberOfEmissionSteps()
void createDistributionFlattop(size_t numberOfParticles, double massIneV)
std::vector< double > pzWrite_m
Definition: Distribution.h:518
void injectBeam(PartBunchBase< double, 3 > *beam)
void create(size_t &numberOfParticles, double massIneV)
void createPriPart(PartBunchBase< double, 3 > *beam, BoundaryGeometry &bg)
Class: DataSink.
Definition: OpalData.h:29
double getVw()
Definition: Distribution.h:748
void setupEmissionModelAstra(PartBunchBase< double, 3 > *beam)
Vector_t cutoffR_m
Definition: Distribution.h:533
void printDistGauss(Inform &os) const
int numberOfEnergyBins_m
Definition: Distribution.h:478
void printDistFromFile(Inform &os) const
LaserProfile * laserProfile_m
Definition: Distribution.h:542
void setAttributes()
double getFNParameterVYZero()
Definition: Distribution.h:679
void printDistMatchedGauss(Inform &os) const
double sigmaTRise_m
Definition: Distribution.h:528
virtual void execute()
Execute the command.
void printEnergyBins(Inform &os) const
void generateFlattopLaserProfile(size_t numberOfParticles)
void checkEmissionParameters()
size_t findEBin(double tOrZ)
gsl_rng * randGen_m
Definition: Distribution.h:486
void generateAstraFlattopT(size_t numberOfParticles)
int getSecondaryEmissionFlag()
Definition: Distribution.h:689
PartData particleRefData_m
Definition: Distribution.h:462
double cutoff_m
Definition: Distribution.h:588
void setupEmissionModel(PartBunchBase< double, 3 > *beam)
Vector_t sigmaR_m
Definition: Distribution.h:531
std::vector< double > & getTOrZDist()
double cathodeTemp_m
Cathode material Fermi energy (eV).
Definition: Distribution.h:496
void addDistributions()
void checkIfEmitted()
double getFNParameterVYSecond()
Definition: Distribution.h:684
An abstract sequence of beam line components.
Definition: Beamline.h:37
double getFieldEnhancement()
Definition: Distribution.h:649
int currentEnergyBin_m
Definition: Distribution.h:476
double getWorkFunction()
Definition: Distribution.h:644
double converteVToBetaGamma(double valueIneV, double massIneV)
double laserEnergy_m
Cathode material work function (eV).
Definition: Distribution.h:494
double getMaxTOrZ()
std::string laserImageName_m
Definition: Distribution.h:540
Vector_t cutoffP_m
Definition: Distribution.h:534
void setupParticleBins(double massIneV, PartBunchBase< double, 3 > *beam)
std::vector< double > pyWrite_m
Definition: Distribution.h:516
void generateTransverseGauss(size_t numberOfParticles)
void applyEmissModelNone(double &pz)
void printDistSurfAndCreate(Inform &os) const
double getvVThermal()
Definition: Distribution.h:742
gsl_qrng * selectRandomGenerator(std::string, unsigned int dimension)
Select and allocate gsl random number generator.
void generateLongFlattopT(size_t numberOfParticles)
void writeOutFileHeader()
void printEmissionModelNone(Inform &os) const
void setupEmissionModelNone(PartBunchBase< double, 3 > *beam)
size_t getNumberOfParticlesInFile(std::ifstream &inputFile)
double getFNParameterB()
Definition: Distribution.h:669
double getvSeyMax()
Definition: Distribution.h:716
double eInitThreshold_m
Definition: Distribution.h:551
double currentEmissionTime_m
Definition: Distribution.h:475
The base class for all OPAL objects.
Definition: Object.h:48
double avrgpz_m
Definition: Distribution.h:522
double paraFNB_m
Definition: Distribution.h:562
double sigmaRise_m
Definition: Distribution.h:586
double tRise_m
time binned distribution with thermal energy
Definition: Distribution.h:584
The BEAM definition.
Definition: Beam.h:35
void createMatchedGaussDistribution(size_t numberOfParticles, double massIneV)
virtual Distribution * clone(const std::string &name)
Return a clone.
Vector_t get_pmean() const
Definition: Distribution.h:599
const std::string name
void doRestartOpalT(PartBunchBase< double, 3 > *p, size_t Np, int restartStep, H5PartWrapper *h5wrapper)
void createOpalE(Beam *beam, std::vector< Distribution * > addedDistributions, EnvelopeBunch *envelopeBunch, double distCenter, double Bz0)
void writeOutFileInjection()
double paraFNA_m
Definition: Distribution.h:560
PartBins * energyBins_m
Definition: Distribution.h:482
size_t totalNumberEmittedParticles_m
Definition: Distribution.h:502
void applyEmissModelAstra(double &px, double &py, double &pz, std::vector< double > &additionalRNs)
size_t getNumberOfDarkCurrentParticles()
Definition: Distribution.h:629
std::vector< double > & getXDist()
void eraseTOrZDist()
void shiftDistCoordinates(double massIneV)
double getvSeyZero()
Definition: Distribution.h:704
double workFunction_m
Definition: Distribution.h:553
double getMinTOrZ()
void setDistParametersFlattop(double massIneV)
DistrTypeT::DistrTypeT distrTypeT_m
Distribution type. Declared as string.
Definition: Distribution.h:455
double cathodeFermiEnergy_m
Laser photon energy (eV).
Definition: Distribution.h:495
void applyEmissModelNonEquil(double eZ, double &px, double &py, double &pz, std::vector< double > &additionalRNs)
int getLastEmittedEnergyBin()
MDependentBehavior(const MDependentBehavior &rhs)
Definition: Distribution.h:384
void fillEBinHistogram()
void createDistributionBinomial(size_t numberOfParticles, double massIneV)
double getReal(const Attribute &attr)
Return real value.
Definition: Attributes.cpp:217
std::vector< double > & getBGyDist()
double fieldThrFN_m
Definition: Distribution.h:556
void setDistToEmitted(bool emitted)
double tPulseLengthFWHM_m
Definition: Distribution.h:530
void printDistFlattop(Inform &os) const
std::vector< double > pzDist_m
Definition: Distribution.h:510
Definition: Inform.h:41
std::vector< double > yDist_m
Definition: Distribution.h:507
Vector_t mBinomial_m
Definition: Distribution.h:535
void setNumberOfDistributions(unsigned int n)
Definition: Distribution.h:342
double getvEmax()
Definition: Distribution.h:722
void setDistParametersGauss(double massIneV)
double getTEmission()
std::vector< double > pyDist_m
Definition: Distribution.h:508
void generateFlattopT(size_t numberOfParticles)
void checkParticleNumber(size_t &numberOfParticles)
void reflectDistribution(size_t &numberOfParticles)
void printDistBinomial(Inform &os) const
double laserIntensityCut_m
Definition: Distribution.h:541
double getvEZero()
Definition: Distribution.h:710
void createOpalT(PartBunchBase< double, 3 > *beam, std::vector< Distribution * > addedDistributions, size_t &numberOfParticles)
double fieldEnhancement_m
Work function of surface material (eV).
Definition: Distribution.h:554
void printEmissionModel(Inform &os) const
void printEmissionModelAstra(Inform &os) const
void setEmissionTime(double &maxT, double &minT)
double getvKtheta()
Definition: Distribution.h:735
gsl_histogram * energyBinHist_m
Distribution energy bins.
Definition: Distribution.h:483
std::vector< double > pxDist_m
Definition: Distribution.h:506
std::string distT_m
Definition: Distribution.h:454
double vVThermal_m
Velocity scalar for parallel plate benchmark.
Definition: Distribution.h:575
bool getIfDistEmitting()
double paraFNY_m
Definition: Distribution.h:564
SymTenzor< double, 6 > correlationMatrix_m
Definition: Distribution.h:536
double tFall_m
Definition: Distribution.h:585
std::string getString(const Attribute &attr)
Get string value.
Definition: Attributes.cpp:307
size_t getNumOfLocalParticlesToCreate(size_t n)
std::vector< size_t > binWrite_m
Definition: Distribution.h:519