Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

NeutrinoFlux.h

Go to the documentation of this file.
00001 #ifndef NEUTRINOFLUX_H
00002 #define NEUTRINOFLUX_H
00003 
00054 // IceTray specific stuff
00055 #ifdef ICETRAY
00056 #include "dataclasses/Utility.h"
00057 #include "icetray/I3DefaultName.h"
00058 #include <icetray/I3Logging.h>
00059 #include <dataclasses/physics/I3Particle.h>
00060 #else  //ICETRAY
00061 namespace I3Particle{ 
00062   enum ParticleType {
00063     unknown = 0,
00064     NuE = 66,
00065     NuEBar = 67,
00066     NuMu = 68,
00067     NuMuBar = 69,
00068     TauPlus = 131,
00069     TauMinus = 132,
00070     NuTau = 133,
00071     NuTauBar = 134,
00072     };
00073 }
00074 #endif //ICETRAY
00075 
00076 #include <iostream>
00077 #include <fstream>
00078 #include <math.h>
00079 
00080 using namespace std;
00081 
00082 class NeutrinoFlux
00083 {
00084  public:
00085   
00089   virtual ~NeutrinoFlux() {};
00090 
00091   /* Methods */    
00098   virtual double getFlux(I3Particle::ParticleType neutType, double eNeut, double costheta)const=0;
00099 
00108   virtual double getFluxIntegral(I3Particle::ParticleType neutType, double eNeut)const=0;
00109 
00113   virtual string getModelName()const=0;
00114 
00115 
00116 #ifdef ICETRAY
00117 
00122   double getFlux(const I3Particle& particle) const;
00123 
00124  SET_LOGGER("NeutrinoFlux");
00125 
00126 #endif
00127   
00128 };
00129 
00130 
00131 class ConventionalNeutrinoFlux : public NeutrinoFlux
00132 {
00133  public:
00134 
00140   ConventionalNeutrinoFlux(string model);
00141 
00142   virtual double getFlux(I3Particle::ParticleType neutType, double eNeut, double costheta)const;
00143   virtual double getFluxIntegral(I3Particle::ParticleType neutType, double eNeut)const;
00144   virtual string getModelName()const  {return model_;};
00145 
00146  private:
00147 
00149   string model_;
00150 
00152   static const int POLYT = 31;
00154   static const int nbinCT_ = 10;
00156   static const double CMIN=-1.;
00158   static const double CMAX=1.;
00159   
00160   // tables for nu, anu, respectively
00161   double par_conv_nu_[POLYT];
00162   double par_conv_anu_[POLYT];
00163 
00164 };
00165 
00166 class PromptNeutrinoFlux : public NeutrinoFlux
00167 {
00168  public:
00174   PromptNeutrinoFlux(string model);
00175 
00176   double getFlux(I3Particle::ParticleType neutType, double eNeut, double costheta) const;
00177   double getFluxIntegral(I3Particle::ParticleType neutType, double eNeut) const;
00178   string getModelName() const {return model_;};
00179 
00180  private:
00181 
00183   string model_;
00184 
00186   static const int nbinCT_prompt_ = 10;
00188   static const double CMIN_PROMPT=-1.;
00190   static const double CMAX_PROMPT=1.; 
00192 
00193   static const int POLYT_PROMPT=15;
00194   double e_joint_nu_;
00195   double e_joint_anu_;
00196   //parameters for nu
00197   double par_prompt_nu_[POLYT_PROMPT];
00198   //nu parameter errors
00199   double pare_prompt_nu_[POLYT_PROMPT];
00200   //parameters for anu
00201   double par_prompt_anu_[POLYT_PROMPT];
00202   //anu parameter errors
00203   double pare_prompt_anu_[POLYT_PROMPT];
00204 
00205 };
00206 
00207 
00208 class AtmosphericNeutrinoFlux: public NeutrinoFlux
00209 {
00210  public:
00211 
00217   AtmosphericNeutrinoFlux(string conv_model,string prompt_model);
00218 
00219   double getFlux(I3Particle::ParticleType neutType, double eNeut, double costheta) const;
00220   double getFluxIntegral(I3Particle::ParticleType neutType, double eNeut) const;
00221   string getModelName() const;
00222 
00223  private:
00225   ConventionalNeutrinoFlux conv_flux_;
00227   PromptNeutrinoFlux prompt_flux_;
00228 
00229 };
00230 
00231 class AstroPointNeutrinoFlux: public NeutrinoFlux
00232 {
00233  public:
00238   AstroPointNeutrinoFlux(string model);
00239 
00240   double getFlux(I3Particle::ParticleType neutType, double eNeut, double costheta) const;
00241   double getFlux(I3Particle::ParticleType neutType, double eNeut) const;
00242   double getFluxIntegral(I3Particle::ParticleType neutType, double eNeut) const;
00243   double getDecli() const {return decli_;} ;
00244   string getModelName() const {return model_;} ;
00245 
00246  private:
00247 
00249   string model_;
00250 
00251   int piece_;
00252   double decli_;
00253   double Emin_[100];
00254   double Emax_[100];
00255   int nparam_[100];
00256   double param_[100][100];
00258   //1- energy limits
00259   static const double Em_=1.;
00260   static const double Ema_=1.0e+12;
00261 
00262 };
00263 
00264 class AstroNeutrinoFlux: public NeutrinoFlux
00265 {
00266  public:
00271   AstroNeutrinoFlux(string model);
00272 
00273   double getFlux(I3Particle::ParticleType neutType, double eNeut, double costheta) const;
00274   double getFlux(I3Particle::ParticleType neutType, double eNeut) const;
00275   double getFluxIntegral(I3Particle::ParticleType neutType, double eNeut) const;
00276   string getModelName() const {return model_;} ;
00277 
00278  private:
00279 
00281   string model_;
00282 
00283   int piece_;
00284   double Emin_[100];
00285   double Emax_[100];
00286   int nparam_[100];
00287   double param_[100][100];
00288 
00290   //1- energy limits
00291   static const double Em_=1.;
00292   static const double Ema_=1.0e+12;
00293 
00294 };
00295 
00296                                                                                                     
00297 #ifdef ICETRAY
00298 I3_POINTER_TYPEDEFS(NeutrinoFlux);
00299 I3_DEFAULT_NAME(NeutrinoFlux);
00300 #endif //ICETRAY
00301     
00302 #endif // NEUTRINOFLUX_H
00303 

Generated on Mon Nov 26 11:16:55 2007 for neutrinoflux by  doxygen 1.3.9.1