#ifndef ReactionGenerator_h
#define ReactionGenerator_h 1

#include "G4ThreeVector.hh"

enum class ReactionChannel {
  Proton,
  Alpha
};

struct ReactionOutput {
  ReactionChannel channel;
  double kineticEnergy;
  double px;
  double py;
  double pz;
};

class ReactionGenerator {
 public:
  ReactionGenerator();
  ~ReactionGenerator();

  ReactionOutput SampleEvent(double beamKineticEnergy, const G4ThreeVector& beamDirection);
  double GetEffectiveCrossSection() const;

 private:
  class Impl;
  Impl* fImpl;
  double fEffectiveSigma;
};

#endif
