00001 #ifndef __INCLUDE_SOURCECALC_H
00002 #define __INCLUDE_SOURCECALC_H
00003 #include <cstdlib>
00004 #include <cmath>
00005 #include <cstdio>
00006 #include <fstream>
00007 #include "arrays.h"
00008 #include "parametermap.h"
00009 #include "random.h"
00010 #include "constants.h"
00011
00012 using namespace std;
00013
00014 class CSourceCalc{
00015 public:
00016 parameterMap spars;
00017 virtual void CalcS(CCHArray *A);
00018 virtual void CalcS(int lx,int ly,int lz,CCHArray *A);
00019 virtual void CalcS(CMCList *&lista,CMCList *&listb);
00020 virtual void CalcS(C3DArray *threed);
00021 virtual void GaussCFCalc(C3DArray *cf3d);
00022
00023 void CombineMCLists(CMCList *lista,CMCList *listb,CCHArray *A);
00024 void CombineMCLists(CMCList *lista,CMCList *listb,CCHArray *A,int NMC);
00025 void CombineMCLists(CMCList *lista,CMCList *listb,C3DArray *threed);
00026 void ReadSPars(char *sparsfilename);
00027 void NormCheck(CCHArray *A);
00028 void NormCheck(C3DArray *threed);
00029 void CalcEffGaussPars(CCHArray *A);
00030 void CalcEffGaussPars(CCHArray *A,double &Rx,double &Ry,double &Rz,
00031 double &Xoff,double &Yoff,double &Zoff);
00032 CSourceCalc();
00033 CSourceCalc(string sparsfilename);
00034 CRandom *randy;
00035 virtual ~CSourceCalc(){};
00036 private:
00037
00038 };
00039
00040 class CSourceCalc_GX1D : public CSourceCalc{
00041
00042
00043
00044
00045
00046
00047 public:
00048 CSourceCalc_GX1D();
00049 void InitSPars();
00050 void SetSPars(double lambda,double Xfrac,double R,double X,double a);
00051 void CalcS(int lx,int ly,int lz,CCHArray *A);
00052 void CalcS(CCHArray *A);
00053 };
00054
00055 class CSourceCalc_Gaussian : public CSourceCalc{
00056 public:
00057 CSourceCalc_Gaussian();
00058 void SetSPars(double lambdaset,double Rxset,double Ryset,double Rzset);
00059 void SetSPars(double lambdaset,double Rxset,double Ryset,double Rzset,
00060 double Xoffset,double Yoffset,double Zoffset);
00061 void SetSPars(double lambdaset,double Rxset,double Ryset,double Rzset,
00062 double Xoffset,double Yoffset,double Zoffset,
00063 double Euler_phiset,double Euler_thetaset,
00064 double Euler_psiset);
00065 void CalcS(CCHArray *A);
00066 void CalcS(C3DArray *threed);
00067 void GaussCFCalc(C3DArray *cf3d);
00068
00069 private:
00070 void CalcAlpha(double **alpha,CCHArray *A);
00071 void InitSPars();
00072
00073
00074 };
00075
00076 class CSourceCalc_EllipticBlast : public CSourceCalc{
00077 public:
00078 CSourceCalc_EllipticBlast();
00079 void CalcS(CCHArray *A);
00080 void SetSPars(double Rxset,double Ryset,
00081 double Tauset,
00082 double BetaXset,double BetaYset,
00083 double Tset,double Ptset,
00084 double Phiset,double EtaGset,
00085 double Maset,double Mbset);
00086 void SetSPars(double Rset,double Tauset,
00087 double Betaset,double Tset,double Ptset);
00088 private:
00089 void Get_r(double *p,int nsample,double **r);
00090 void InitSPars();
00091 };
00092
00093 class CSourceCalc_Blast : public CSourceCalc{
00094 public:
00095 CSourceCalc_Blast();
00096 void CalcS(CCHArray *A);
00097 void CalcS(CMCList *lista,CMCList *listb);
00098 void SetSPars(double lambdaset,
00099 double Rset,double Tauset,double DelTauset,
00100 double Betaset,double Tset,double Ptset,
00101 double EtaGset,double Maset,double Mbset);
00102 void SetSPars(double lambdaset,
00103 double Rset,double Tauset,double DelTauset);
00104 private:
00105 void GetMCList(double *p,CMCList *mclist);
00106 void InitSPars();
00107 double GetTau(double tau0,double deltau);
00108 };
00109
00110 class CSourceCalc_OSCAR : public CSourceCalc{
00111 public:
00112 CSourceCalc_OSCAR();
00113 CSourceCalc_OSCAR(string sparsfilename);
00114
00115 void CalcS(CMCList *&lista,CMCList *&listb);
00116 void SetSPars(double Pt_set,double delpt_set,double phimin_set,double phimax_set,double ymin_set,double ymax_set);
00117 void SetIDs(int *idlista,int nida,int *idlistb,int nidb);
00118 private:
00119 int *idlist_a,*idlist_b,nid_a,nid_b;
00120 void ReadR(double **ra,int &na,double **rb,int &nb);
00121 void InitSPars();
00122 bool IDMatch(int ident,int *idlist,int nid);
00123 bool Check(double *p,double *r,double m,double **ra,int &n);
00124 };
00125
00126 #endif