Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-12-10 02:31:53

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   ROOT::Math::XYZTVector vertexShift(CLHEP::HepRandomEngine*) const override;
0030 
0031   TMatrixD const* GetInvLorentzBoost() const override { return nullptr; }
0032 
0033   /// set resolution in X in cm
0034   void sigmaX(double s = 1.0);
0035   /// set resolution in Y in cm
0036   void sigmaY(double s = 1.0);
0037 
0038   /// set mean in X in cm
0039   void meanX(double m = 0) { fMeanX = m; }
0040   /// set mean in Y in cm
0041   void meanY(double m = 0) { fMeanY = m; }
0042   /// set mean in Z in cm
0043   void beamPos(double m = 0) { fMeanZ = m; }
0044 
0045   /// set eta
0046   void eta(double m = 0);
0047   /// set phi in radian
0048   void phi(double m = 0) { fPhi = m; }
0049   /// set psi in radian
0050   void psi(double m = 999) { fPsi = m; }
0051   /// set type
0052   void setType(bool m = true);
0053 
0054 private:
0055   double fSigmaX, fSigmaY;
0056   double fMeanX, fMeanY, fMeanZ;
0057   double fEta, fPhi, fTheta;
0058 
0059   double fPsi;
0060 
0061   bool fType, ffile;
0062   int nBinx, nBiny;
0063   std::vector<double> fdistn;
0064   double fTimeOffset;
0065 };
0066 
0067 #endif