DDASToys for NSCLDAQ  6.2-000
jacobian_analytic.h
Go to the documentation of this file.
1 /*
2  This software is Copyright by the Board of Trustees of Michigan
3  State University (c) Copyright 2017.
4 
5  You may use this software under the terms of the GNU public license
6  (GPL). The terms of this license are described at:
7 
8  http://www.gnu.org/licenses/gpl.txt
9 
10  Authors:
11  Ron Fox
12  Girodano Cerizza
13  Aaron Chester
14  FRIB
15  Michigan State University
16  East Lansing, MI 48824-1321
17 */
18 
25 #ifndef JACOBIAN_ANALYTIC_H
26 #define JACOBIAN_ANALYTIC_H
27 
28 #include "CFitEngine.h"
29 
31 namespace ddastoys {
33  namespace analyticfit {
34 
35  // Concrete classes
36 
53  class SerialFitEngine1 : public CFitEngine {
54  public:
60  std::vector<std::pair<uint16_t, uint16_t>>& data
61  );
69  virtual void jacobian(const gsl_vector* p, gsl_matrix *J);
75  virtual void residuals(const gsl_vector*p, gsl_vector* r);
76  };
77 
97  class CudaFitEngine1 : public CFitEngine {
98  private:
99  void* m_dXtrace;
100  void* m_dYtrace;
101  void* m_dResiduals;
102  void* m_dJacobian;
103  unsigned m_npts;
104 
105  public:
110  std::vector<std::pair<uint16_t, uint16_t>>& data
111  );
115  ~CudaFitEngine1();
122  virtual void jacobian(const gsl_vector* p, gsl_matrix *J);
129  virtual void residuals(const gsl_vector*p, gsl_vector* r);
130 
131  private:
132  void throwCudaError(const char* msg);
133  };
134 
151  class SerialFitEngine2 : public CFitEngine {
152  public:
158  std::vector<std::pair<uint16_t, uint16_t>>& data
159  );
165  virtual void jacobian(const gsl_vector* p, gsl_matrix *J);
171  virtual void residuals(const gsl_vector*p, gsl_vector* r);
172  };
173 
193  class CudaFitEngine2 : public CFitEngine {
194  private:
195  void* m_dXtrace;
196  void* m_dYtrace;
197  void* m_dResiduals;
198  void* m_dJacobian;
199  unsigned m_npts;
200 
201  public:
207  std::vector<std::pair<uint16_t, uint16_t>>& data
208  );
210  ~CudaFitEngine2();
218  virtual void jacobian(const gsl_vector* p, gsl_matrix *J);
224  virtual void residuals(const gsl_vector*p, gsl_vector* r);
225 
226  private:
227  void throwCudaError(const char* msg);
228  };
229 
235  public:
242  std::vector<std::pair<uint16_t, uint16_t>>& data
243  );
250  std::vector<std::pair<uint16_t, uint16_t>>& data
251  );
258  std::vector<std::pair<uint16_t, uint16_t>>& data
259  );
266  std::vector<std::pair<uint16_t, uint16_t>>& data
267  );
268  };
269 
270 
271  }
272 };
273 
274 #endif
Define the CFitEngine abstract base class.
Abstract base class for marshalling data to the fitting subsystems to calculate Jacobian elements and...
Definition: CFitEngine.h:41
CUDA-aware fit engine for analytic single pulse fits.
Definition: jacobian_analytic.h:97
~CudaFitEngine1()
Destructor.
Definition: CudaFitEngineAnalytic.cu:526
virtual void jacobian(const gsl_vector *p, gsl_matrix *J)
Invoke the kernal to do the pointwise parallel Jacobian computation.
Definition: CudaFitEngineAnalytic.cu:541
CudaFitEngine1(std::vector< std::pair< uint16_t, uint16_t >> &data)
Constructor.
Definition: CudaFitEngineAnalytic.cu:479
virtual void residuals(const gsl_vector *p, gsl_vector *r)
Triggers a pointwise parallel residual kernel in the device and impedance matches that with GSL's req...
Definition: CudaFitEngineAnalytic.cu:578
CUDA-aware fit engine for analytic double pulse fits.
Definition: jacobian_analytic.h:193
virtual void residuals(const gsl_vector *p, gsl_vector *r)
Fire off the kernel to compute the pointwise residuals.
Definition: CudaFitEngineAnalytic.cu:857
virtual void jacobian(const gsl_vector *p, gsl_matrix *J)
Marshall the parameter and call the jacobian2 kernel. Then pull the Jacobian matrix out of the GPU an...
Definition: CudaFitEngineAnalytic.cu:806
~CudaFitEngine2()
Destructor.
Definition: CudaFitEngineAnalytic.cu:792
CudaFitEngine2(std::vector< std::pair< uint16_t, uint16_t >> &data)
Constructor.
Definition: CudaFitEngineAnalytic.cu:744
Factory for creating fit serial and Cuda-enabled fit engines.
Definition: jacobian_analytic.h:234
CFitEngine * createCudaFitEngine2(std::vector< std::pair< uint16_t, uint16_t >> &data)
Create a double pulse Cuda-enabled fit engine.
CFitEngine * createSerialFitEngine1(std::vector< std::pair< uint16_t, uint16_t >> &data)
Create a single pulse Cuda-enabled fit engine.
CFitEngine * createCudaFitEngine1(std::vector< std::pair< uint16_t, uint16_t >> &data)
Create a single pulse Cuda-enabled fit engine.
CFitEngine * createSerialFitEngine2(std::vector< std::pair< uint16_t, uint16_t >> &data)
Create a double pulse serial fit engine.
Fit engine for analytic single pulse fits.
Definition: jacobian_analytic.h:53
virtual void jacobian(const gsl_vector *p, gsl_matrix *J)
Compute the Jacobian matrix.
Definition: SerialFitEngineAnalytic.cpp:216
~SerialFitEngine1()
Definition: jacobian_analytic.h:63
SerialFitEngine1(std::vector< std::pair< uint16_t, uint16_t >> &data)
Constructor.
Definition: SerialFitEngineAnalytic.cpp:203
virtual void residuals(const gsl_vector *p, gsl_vector *r)
Compute the vector of residuals.
Definition: SerialFitEngineAnalytic.cpp:253
Fit engine for analytic double pulse fits.
Definition: jacobian_analytic.h:151
SerialFitEngine2(std::vector< std::pair< uint16_t, uint16_t >> &data)
Constructor.
Definition: SerialFitEngineAnalytic.cpp:285
virtual void residuals(const gsl_vector *p, gsl_vector *r)
Compute the residual vector.
Definition: SerialFitEngineAnalytic.cpp:291
virtual void jacobian(const gsl_vector *p, gsl_matrix *J)
Compute the Jacobian matrix.
Definition: SerialFitEngineAnalytic.cpp:324