File indexing completed on 2023-10-25 10:03:48
0001 #ifndef SimDataFormats_GeneratorProducts_HepMC3Product_h
0002 #define SimDataFormats_GeneratorProducts_HepMC3Product_h
0003
0004
0005
0006
0007
0008
0009 #include "DataFormats/Common/interface/Ref.h"
0010 #include <TMatrixD.h>
0011 #include <HepMC3/GenEvent.h>
0012 #include <cstddef>
0013
0014 namespace HepMC3 {
0015 class FourVector;
0016 class GenParticle;
0017 class GenVertex;
0018 }
0019
0020 namespace edm {
0021 class HepMC3Product {
0022 public:
0023 HepMC3Product() : evt_(nullptr), isVtxGenApplied_(false), isVtxBoostApplied_(false), isPBoostApplied_(false) {}
0024
0025 explicit HepMC3Product(HepMC3::GenEvent *evt);
0026 virtual ~HepMC3Product();
0027
0028 void addHepMCData(HepMC3::GenEvent *evt);
0029
0030 void applyVtxGen(HepMC3::FourVector const *vtxShift) { applyVtxGen(*vtxShift); }
0031 void applyVtxGen(HepMC3::FourVector const &vtxShift);
0032
0033 void boostToLab(TMatrixD const *lorentz, std::string const &type);
0034
0035 const HepMC3::GenEvent &getHepMCData() const;
0036
0037 const HepMC3::GenEvent *GetEvent() const { return evt_; }
0038
0039 bool isVtxGenApplied() const { return isVtxGenApplied_; }
0040 bool isVtxBoostApplied() const { return isVtxBoostApplied_; }
0041 bool isPBoostApplied() const { return isPBoostApplied_; }
0042
0043 HepMC3Product(HepMC3Product const &orig);
0044 HepMC3Product &operator=(HepMC3Product const &other);
0045 HepMC3Product(HepMC3Product &&orig);
0046 HepMC3Product &operator=(HepMC3Product &&other);
0047 void swap(HepMC3Product &other);
0048
0049 private:
0050 HepMC3::GenEvent *evt_;
0051
0052 bool isVtxGenApplied_;
0053 bool isVtxBoostApplied_;
0054 bool isPBoostApplied_;
0055 };
0056
0057
0058 namespace refhelper {
0059 template <>
0060 struct FindTrait<edm::HepMC3Product, HepMC3::GenParticle> {
0061 struct Find {
0062 using first_argument_type = edm::HepMC3Product const &;
0063 using second_argument_type = int;
0064 using result_type = HepMC3::GenParticle const *;
0065
0066 result_type operator()(first_argument_type iContainer, second_argument_type iBarCode) {
0067
0068 return nullptr;
0069 }
0070 };
0071
0072 typedef Find value;
0073 };
0074
0075 template <>
0076 struct FindTrait<edm::HepMC3Product, HepMC3::GenVertex> {
0077 struct Find {
0078 using first_argument_type = edm::HepMC3Product const &;
0079 using second_argument_type = int;
0080 using result_type = HepMC3::GenVertex const *;
0081
0082 result_type operator()(first_argument_type iContainer, second_argument_type iBarCode) {
0083
0084 return nullptr;
0085 }
0086 };
0087
0088 typedef Find value;
0089 };
0090 }
0091 }
0092
0093 #endif