Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2023-03-17 11:10:12

0001 #ifndef IOMC_BeamProfileVtxGenerator_H
0002 #define IOMC_BeamProfileVtxGenerator_H
0003 
0004 /**
0005  * Generate event vertices according to a Gaussian distribution transverse
0006  * to beam direction (given by eta and phi
0007  * Attention: Units are assumed to be cm and radian!
0008  * \author Sunanda Banerjee
0009  *
0010  */
0011 
0012 #include "IOMC/EventVertexGenerators/interface/BaseEvtVtxGenerator.h"
0013 #include <vector>
0014 
0015 namespace CLHEP {
0016   class HepRandomEngine;
0017 }
0018 
0019 class BeamProfileVtxGenerator : public BaseEvtVtxGenerator {
0020 public:
0021   BeamProfileVtxGenerator(const edm::ParameterSet& p);
0022   /** Copy constructor */
0023   BeamProfileVtxGenerator(const BeamProfileVtxGenerator& p) = delete;
0024   /** Copy assignment operator */
0025   BeamProfileVtxGenerator& operator=(const BeamProfileVtxGenerator& rhs) = delete;
0026   ~BeamProfileVtxGenerator() override;
0027 
0028   /// return a new event vertex
0029   //virtual CLHEP::Hep3Vector * newVertex();
0030   HepMC::FourVector newVertex(CLHEP::HepRandomEngine*) const override;
0031 
0032   TMatrixD const* GetInvLorentzBoost() const override { return nullptr; }
0033 
0034   /// set resolution in X in cm
0035   void sigmaX(double s = 1.0);
0036   /// set resolution in Y in cm
0037   void sigmaY(double s = 1.0);
0038 
0039   /// set mean in X in cm
0040   void meanX(double m = 0) { fMeanX = m; }
0041   /// set mean in Y in cm
0042   void meanY(double m = 0) { fMeanY = m; }
0043   /// set mean in Z in cm
0044   void beamPos(double m = 0) { fMeanZ = m; }
0045 
0046   /// set eta
0047   void eta(double m = 0);
0048   /// set phi in radian
0049   void phi(double m = 0) { fPhi = m; }
0050   /// set psi in radian
0051   void psi(double m = 999) { fPsi = m; }
0052   /// set type
0053   void setType(bool m = true);
0054 
0055 private:
0056   double fSigmaX, fSigmaY;
0057   double fMeanX, fMeanY, fMeanZ;
0058   double fEta, fPhi, fTheta;
0059 
0060   double fPsi;
0061 
0062   bool fType, ffile;
0063   int nBinx, nBiny;
0064   std::vector<double> fdistn;
0065   double fTimeOffset;
0066 };
0067 
0068 #endif