00001 #ifndef _Tauola_h_included_
00002 #define _Tauola_h_included_
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include <iostream>
00018 #include "TauolaParticle.h"
00019 #include "f_Init.h"
00020 #include "f_Variables.h"
00021
00022 namespace Tauolapp
00023 {
00024
00025 class TauolaEvent;
00026 class TauolaParticle;
00027
00028 class Tauola{
00029
00030 public:
00031
00032 static const int NS1=100,NS2=100,NS3=100,NCOS=21;
00033
00034
00035 static enum MomentumUnits { DEFAULT_MOMENTUM=-1, MEV, GEV } momentumUnit;
00036 static enum LengthUnits { DEFAULT_LENGTH =-1, MM , CM } lengthUnit;
00037
00038
00039 static void setUnits(MomentumUnits m,LengthUnits l);
00040
00041
00042 static void setTauLifetime(double t);
00043
00044
00045 enum { All=0, ElectronMode, MuonMode, PionMode,
00046 RhoMode, A1Mode, KMode, KStarMode };
00047
00048
00049
00050 struct Particles
00051 {
00052 bool GAMMA,
00053 Z0,
00054 HIGGS,
00055 HIGGS_H,
00056 HIGGS_A,
00057 HIGGS_PLUS,
00058 HIGGS_MINUS,
00059 W_PLUS,
00060 W_MINUS;
00061 void setAll(bool flag) { GAMMA=Z0=HIGGS=HIGGS_H=HIGGS_A=HIGGS_PLUS=HIGGS_MINUS=W_PLUS=W_MINUS=flag; }
00062 } static spin_correlation;
00063
00064
00065
00066 static void initialize();
00067
00068
00069 static void initialise();
00070
00071
00072 static void setRandomGenerator( double (*gen)() );
00073
00074 static void setRedefineTauMinus( void (*fun)(TauolaParticle *) );
00075 static void setRedefineTauPlus ( void (*fun)(TauolaParticle *) );
00076
00077
00078
00079
00080 static void decayOne(TauolaParticle *tau, bool undecay=false, double polx=0,double poly=0, double polz=0);
00081
00082
00083 static bool isUsingDecayOne();
00084
00085
00086 static bool isUsingDecayOneBoost();
00087
00088
00089 static void setBoostRoutine( void (*boost)(TauolaParticle*, TauolaParticle *) );
00090
00091
00092 static void decayOneBoost(TauolaParticle *mother, TauolaParticle *target);
00093
00094
00095 static const double* getDecayOnePolarization();
00096
00097
00098 static void setDecayingParticle(int pdg_id);
00099
00100
00101 static int getDecayingParticle();
00102
00103
00104
00105
00106 static void setSameParticleDecayMode(int firstDecayMode);
00107
00108
00109
00110
00111 static void setOppositeParticleDecayMode(int secondDecayMode);
00112
00113
00114 static void setRadiation(bool rad);
00115
00116
00117 static void setRadiationCutOff(double rad_cut_off);
00118
00119
00120
00121
00122 static void setInitializePhy(double iniphy);
00123
00124
00125 static void setInitialisePhy(double iniphy);
00126
00127
00128 static void setTauBr(int i, double value);
00129
00130 static void setTaukle(double bra1, double brk0, double brk0b, double brks);
00131
00132 static double getHiggsScalarPseudoscalarMixingAngle();
00133
00134
00135 static void setHiggsScalarPseudoscalarMixingAngle(double angle);
00136
00137
00138 static double getTauMass();
00139
00140
00141 static void setHiggsScalarPseudoscalarPDG(int pdg_id);
00142
00143
00144 static int getHiggsScalarPseudoscalarPDG();
00145
00146 static int getHelPlus();
00147
00148 static int getHelMinus();
00149
00150 static double getEWwt();
00151
00152 static double getEWwt0();
00153
00154 static void setEWwt(double wt, double wt0);
00155
00156 static void setHelicities(int Minus, int Plus);
00157
00158 static void setEtaK0sPi(int eta, int k, int pi);
00159
00160 static void getBornKinematics(int *incoming_pdg_id, int *outgoing_pdg_id, double *invariant_mass_squared,double *cosTheta);
00161
00162 static void summary();
00163
00164 public:
00165
00166 static double table11A[NS1][NCOS][4][4],table1A[NS1][NCOS][4][4],table2A[NS1][NCOS][4][4];
00167 static double wtable11A[NS1][NCOS],wtable1A[NS1][NCOS],wtable2A[NS1][NCOS];
00168 static double w0table11A[NS1][NCOS],w0table1A[NS1][NCOS],w0table2A[NS1][NCOS];
00169
00170 static double table11B[NS2][NCOS][4][4],table1B[NS2][NCOS][4][4],table2B[NS2][NCOS][4][4];
00171 static double wtable11B[NS2][NCOS],wtable1B[NS2][NCOS],wtable2B[NS2][NCOS];
00172 static double w0table11B[NS2][NCOS],w0table1B[NS2][NCOS],w0table2B[NS2][NCOS];
00173
00174 static double table11C[NS3][NCOS][4][4],table1C[NS3][NCOS][4][4],table2C[NS3][NCOS][4][4];
00175 static double wtable11C[NS3][NCOS],wtable1C[NS3][NCOS],wtable2C[NS3][NCOS];
00176 static double w0table11C[NS3][NCOS],w0table1C[NS3][NCOS],w0table2C[NS3][NCOS];
00177 static double sminA,smaxA,sminB,smaxB,sminC,smaxC;
00178
00179 static int ion[3];
00180
00181
00182 static double tau_lifetime;
00183 static double momentum_conservation_threshold;
00184
00185
00186 static int buf_incoming_pdg_id, buf_outgoing_pdg_id;
00187 static double buf_invariant_mass_squared, buf_cosTheta;
00188 static double buf_R[4][4];
00189
00190
00191 static double (*randomDouble)();
00192
00193 static void (*redefineTauPlusProperties)(TauolaParticle *);
00194 static void (*redefineTauMinusProperties)(TauolaParticle *);
00195
00196 private:
00197
00198
00199 static double defaultRandomGenerator();
00200 static void defaultRedPlus(TauolaParticle *);
00201 static void defaultRedMinus(TauolaParticle *);
00202
00203
00204 static bool m_is_using_decay_one;
00205
00206 static double m_decay_one_polarization[3];
00207
00208 static void (*m_decay_one_boost_routine)(TauolaParticle*,TauolaParticle*);
00209
00210 static int m_pdg_id;
00211 static int m_firstDecayMode;
00212 static int m_secondDecayMode;
00213 static bool m_rad;
00214 static double m_rad_cut_off;
00215 static double m_iniphy;
00216 static double m_higgs_scalar_pseudoscalar_mix;
00217 static int m_higgs_scalar_pseudoscalar_pdg;
00218 static double m_wtEW;
00219 static double m_wtEW0;
00220 static int m_helPlus;
00221 static int m_helMinus;
00222 };
00223
00224 }
00225 #endif
00226