TGGCrossPart Class Reference

#include <TGGCrossPart.h>

Inheritance diagram for TGGCrossPart:

TVCrossPart List of all members.

Public Member Functions

 TGGCrossPart ()
 ~TGGCrossPart ()
double BornShift (const double &, const double &, const double &)
double GetValue (const unsigned int)
void Init ()
void SetThetaMin (const double &)
void PrintEvent ()
void GetEvent (double &p0, double &t0, double &ph0, double &p1, double &t1, double &ph)
void GetEvent (double *m, int &n)
TEventGetEvent ()
unsigned int GetNPart ()
virtual void SetHardPhoton (const bool &x)
void SetZeroVP ()
void SetDefaultVP ()
void SetNoFSR ()
double BornCrossSection (const double &)

Protected Member Functions

double MakeCosTheta ()
double GetCNorm ()
double R_3_Gamma ()
double K_SV (const double &)

Protected Attributes

TPhotonfPhD1
TPhotonfPhD2
TPhotonfPhI1
TPhotonfPhI2
double fCosMin
double fMax
double fNorm
double fNormTheta
bool fThetaLocked
unsigned int fNPart
TEventfEvent
TDFunfD
bool fHardPhoton
bool fZeroVP
bool fNoFSR

Detailed Description

Definition at line 6 of file TGGCrossPart.h.


Constructor & Destructor Documentation

TGGCrossPart::TGGCrossPart (  ) 

Definition at line 10 of file TGGCrossPart.C.

References TVCrossPart::fD, TVCrossPart::fEvent, TVCrossPart::fHardPhoton, TVCrossPart::fNoFSR, TVCrossPart::fNPart, fPhD1, fPhD2, fPhI1, fPhI2, and fThetaLocked.

00010                           :TVCrossPart(){
00011   fNPart = 5;
00012 
00013   fD     = new TDFun();
00014   fEvent = new TEvent();
00015 
00016   // soft photons 
00017   fPhD1  = new TPhotonD();
00018   fPhD2  = new TPhotonD();
00019 
00020   // initial hard photons
00021   fPhI1  = new TPhotonI();
00022   fPhI2  = new TPhotonI();
00023   
00024   fHardPhoton = true;
00025   fNoFSR      = false;
00026   fThetaLocked = false;
00027 }

TGGCrossPart::~TGGCrossPart (  ) 

Definition at line 70 of file TGGCrossPart.C.

References TVCrossPart::fD, TVCrossPart::fEvent, fPhD1, fPhD2, fPhI1, and fPhI2.

00070                            {
00071   delete fD;
00072   delete fEvent;
00073 
00074   delete fPhD1;
00075   delete fPhD2;
00076 
00077   delete fPhI1;
00078   delete fPhI2;
00079 }


Member Function Documentation

double TVCrossPart::BornCrossSection ( const double &   )  [inherited]

Definition at line 4 of file TVCrossPart.C.

References TVCrossPart::BornShift(), cos(), TVCrossPart::fEvent, TVCrossPart::fZeroVP, genRecEmupikp::i, TVCrossPart::Init(), M_PI, TEvent::MakeEvent(), and x.

Referenced by main().

00004                                                        {
00005   //save vacuum polarization status 
00006   bool tempVP = fZeroVP;
00007   // set zero vacuum polarization to calculate Born cross-section
00008   fZeroVP = true;
00009   Init();
00010 
00011   // integration in symmetric angle
00012   int NInt = 1<<14;
00013   double x, gsum = 0., h=-(cos(M_PI-theta)-cos(theta))/NInt;
00014   // simpson integration
00015   x = cos(M_PI-theta); fEvent->MakeEvent(x); gsum += BornShift(1,1,x);
00016   for(int i=1; i<NInt; i++){
00017     x += h; fEvent->MakeEvent(x); gsum += 2*(1+i%2)*BornShift(1,1,x);
00018   }
00019   x += h; fEvent->MakeEvent(x); gsum += BornShift(1,1,x);
00020 
00021   //restore vacuum polarization status
00022   fZeroVP = tempVP;
00023   Init();
00024 
00025   return gsum*h/3;
00026 }

double TGGCrossPart::BornShift ( const double &  ,
const double &  ,
const double &   
) [virtual]

Implements TVCrossPart.

Definition at line 81 of file TGGCrossPart.C.

Referenced by GetValue().

00082                                                {
00083   double cs = 2*(pow(z1*(1-c), 2) + pow(z2*(1+c), 2))/
00084     ((1-c*c)*pow(z1+z2+(z2-z1)*c, 2)*z1*z2);
00085   return 0.5*cs;
00086 }

double TGGCrossPart::GetCNorm (  )  [protected]

Definition at line 51 of file TGGCrossPart.C.

References fNormTheta.

Referenced by GetValue().

00051                              {
00052   return fNormTheta;
00053 }

TEvent* TVCrossPart::GetEvent (  )  [inline, inherited]

Definition at line 28 of file TVCrossPart.h.

References TVCrossPart::fEvent.

00028 {return fEvent;}

void TVCrossPart::GetEvent ( double *  m,
int &  n 
) [inline, inherited]

Definition at line 25 of file TVCrossPart.h.

References TVCrossPart::fEvent, and TEvent::GetEvent().

00025                                          {
00026     fEvent->GetEvent(m,n);
00027   }

void TVCrossPart::GetEvent ( double &  p0,
double &  t0,
double &  ph0,
double &  p1,
double &  t1,
double &  ph 
) [inline, inherited]

Definition at line 21 of file TVCrossPart.h.

References TVCrossPart::fEvent, and TEvent::GetEvent().

Referenced by TRadCor::GetEvent(), hist_sample(), main(), TRadCor::MakeEvent(), TRadCor::MakeIntegral(), and TRadCor::MakeMaximum().

00022                                                           {
00023     fEvent->GetEvent(p0, t0, ph0, p1, t1, ph);
00024   }

unsigned int TVCrossPart::GetNPart (  )  [inline, inherited]

Definition at line 29 of file TVCrossPart.h.

References TVCrossPart::fNPart.

Referenced by main(), and TRadCor::TRadCor().

00029 {return fNPart;}

double TGGCrossPart::GetValue ( const unsigned  int  )  [virtual]

Reimplemented from TVCrossPart.

Definition at line 92 of file TGGCrossPart.C.

References TConstants::Alpha(), TConstants::AlphaPi(), BornShift(), COMP_I, TDFun::Eval(), TDFun::EvalSoft(), TVCrossPart::fD, TVCrossPart::fEvent, TVCrossPart::fHardPhoton, fPhD1, fPhD2, fPhI1, fPhI2, gConst, TRadGlobal::Get_L(), TRadGlobal::Get_LnDelta(), GetCNorm(), TPhoton::GetEnergy(), TPhoton::GetENorm(), TPhoton::GetPhiNorm(), TPhoton::GetThNorm(), gGlobal, K_SV(), MakeCosTheta(), TEvent::MakeEvent(), TEvent::MakeEventgg(), TConstants::Pi2(), and R_3_Gamma().

00092                                                      {
00093   bool IsSoftIE, IsSoftIP;
00094   IsSoftIE = IsSoftIP = true;
00095 
00096   bool CompSV, CompIE, CompIP;
00097   CompSV = CompIE = CompIP = false;
00098   double AP = gConst->AlphaPi();
00099 
00100   double c  = MakeCosTheta();
00101 
00102   switch(ipart){
00103   case 0:
00104     IsSoftIE = IsSoftIP = true;
00105     CompSV   = true;
00106     break;
00107   case 1:
00108     IsSoftIP = false;
00109     CompIP   = true;
00110     break;
00111   case 2:
00112     IsSoftIE = false;
00113     CompIE   = true;
00114     break;
00115   case 3:
00116     IsSoftIE = IsSoftIP = false;
00117     break;
00118   case 4:
00119     // three photons out of narrow cones around initial particles
00120     if(fHardPhoton && fEvent->MakeEvent(c,fPhI1,3)){
00121       double r3g = R_3_Gamma();
00122       double t1 = gConst->Alpha()/(2*gConst->Pi2())*r3g;
00123       double norm = fPhI1->GetENorm()*fPhI1->GetThNorm()*
00124         fPhI1->GetPhiNorm()*GetCNorm();
00125       double res = t1*norm;
00126 //       if(res>10000){
00127 //      TLorentzVector q[3];
00128 //      for(int i=0;i<3;i++)
00129 //        q[i] = fEvent->Get4Vector(i);
00130 //      double CosPsi = fEvent->GetCosPsi();
00131 //      double gamma = q[2].E()*q[0].P()/(2 - q[2].E()*(1-CosPsi));
00132 //      double gamma2 = q[2].E()*q[0].E()/q[1].E();
00133 //      cout<<DB(res)<<DB(r3g)<<DB(t1)<<DB(norm)<<DB(CosPsi)<<DB(gamma)<<DB(q[1].E())<<DB(gamma2)<<endl;
00134 //      fEvent->Print();
00135 //       }
00136       
00137       res *= 3; // The third photon always has the lowest energy
00138 
00139       return 0.5*res;
00140     }
00141     return 0;
00142     break;
00143   case 5:
00144  // Soft and virtial part for one photon cross-section (testing purpose only)
00145     if(fEvent->MakeEventgg(c, (double)0, (double)0)){
00146       double lde = gGlobal->Get_LnDelta();
00147       double Ae = (gGlobal->Get_L()-1)*(lde + 3./4.); 
00148       return BornShift(1,1,c)*(1 + AP*(2*Ae + K_SV(c)))*GetCNorm();
00149     }
00150     return 0;
00151     break;
00152   default:
00153     return 0;
00154     break;
00155   }
00156 
00157   if(!fHardPhoton) CompSV = CompIE = CompIP  = false;
00158 
00159   double  x1g, x2g;
00160   x1g = x2g = 0;
00161 
00162   double  z1, z2;
00163   z1 = z2 = 1;
00164 
00165   if(IsSoftIE)
00166     x1g = fPhD1->GetEnergy(); 
00167   else
00168     x1g = fPhI1->GetEnergy();
00169   z1 = 1 - x1g;
00170   
00171   if(IsSoftIP)
00172     x2g = fPhD2->GetEnergy(); 
00173   else
00174     x2g = fPhI2->GetEnergy();
00175   z2 = 1 - x2g;
00176   
00177   if(fEvent->MakeEventgg(c, x1g, x2g)){
00178     
00179     double D1, D2, t2 = 0;
00180 
00181     if(IsSoftIE)
00182       D1 = fD->EvalSoft(x1g)*fPhD1->GetENorm();
00183     else{
00184       double norm = fPhI1->GetENorm();
00185       D1 = fD->Eval(z1)*norm;
00186       if(CompIE) t2 = COMP_I(x1g)*norm;
00187     }
00188     
00189     if(IsSoftIP)
00190       D2 = fD->EvalSoft(x2g)*fPhD2->GetENorm();
00191     else{
00192       double norm = fPhI2->GetENorm();
00193       D2 = fD->Eval(z2)*norm;
00194       if(CompIP) t2 = COMP_I(x2g)*norm;
00195     }
00196     
00197     if(CompSV){
00198       t2 = 0;//AP*2*gGlobal->Get_LnDelta();
00199     }
00200 
00201     double t1 = (1 + AP*K_SV(c))*D1*D2;
00202 
00203     return BornShift(z1,z2,c)*(t1 + t2)*GetCNorm();
00204     
00205   }
00206   return 0;
00207 }

void TGGCrossPart::Init (  )  [virtual]

Reimplemented from TVCrossPart.

Definition at line 55 of file TGGCrossPart.C.

References TVCrossPart::fD, TVCrossPart::fEvent, fPhD1, fPhD2, fPhI1, fPhI2, TRadGlobal::Get_ThetaMin(), gGlobal, TPhoton::Init(), TEvent::Init(), TDFun::Init(), and SetThetaMin().

00055                        {
00056   SetThetaMin(gGlobal->Get_ThetaMin());
00057   //  SetThetaMin(gGlobal->Get_Theta0());
00058   //  fThetaLocked = true;
00059 
00060   fD->Init();
00061   fEvent->Init();
00062 
00063   fPhD1->Init();
00064   fPhD2->Init();
00065 
00066   fPhI1->Init();
00067   fPhI2->Init();
00068 }

double TGGCrossPart::K_SV ( const double &   )  [protected]

Definition at line 257 of file TGGCrossPart.C.

References gConst, TConstants::Pi2(), and rb::R().

Referenced by GetValue().

00257                                         {
00258   double R = (1+c)/(1-c);
00259   double iR = 1/R;
00260   double lmc = log(0.5*(1-c));
00261   double lpc = log(0.5*(1+c));
00262   return gConst->Pi2()/3 + (1-c*c)/(2*(1+c*c))*
00263     ( (1 + 1.5*R)*lmc + (1 + iR + 0.5*R)*lmc*lmc +
00264       (1 + 1.5*iR)*lpc + (1 + R + 0.5*iR)*lpc*lpc );
00265 }

double TGGCrossPart::MakeCosTheta (  )  [protected]

Definition at line 40 of file TGGCrossPart.C.

References fCosMin, fMax, fNorm, and fNormTheta.

Referenced by GetValue().

00040                                  {
00041   // generate distribution (1 + cos^2(theta))/(1 - cos^2(theta))dcos(theta)
00042   double c,c2;
00043   do{
00044     c = (2*gRandom->Rndm()-1)*fCosMin;
00045     c2 = c*c;
00046   }while( (1+c2) < (1-c2)*fMax*gRandom->Rndm());
00047   fNormTheta = fNorm*(1-c2)/(1+c2);
00048   return c;
00049 }

void TVCrossPart::PrintEvent (  )  [inline, inherited]

Definition at line 20 of file TVCrossPart.h.

References TVCrossPart::fEvent, and TEvent::Print().

00020 {fEvent->Print();}

double TGGCrossPart::R_3_Gamma (  )  [protected]

Definition at line 209 of file TGGCrossPart.C.

References TVCrossPart::fEvent, TEvent::Get4Vector(), TRadGlobal::Get_BetaI(), TRadGlobal::Get_MI2(), TEvent::GetCosPsi(), gGlobal, genRecEmupikp::i, rb::me2, q, and s.

Referenced by GetValue().

00209                               {
00210   TLorentzVector q[3];
00211   for(int i=0;i<3;i++) {
00212     q[i] = fEvent->Get4Vector(i);
00213     //    cout<<i<<" "<<q[i].E()<<" "<<q[i].P()<<" "<<q[i].Theta()<<" "<<q[i].Phi()<<endl;
00214   }
00215   TLorentzVector pm(0,0, gGlobal->Get_BetaI(),1.);
00216   TLorentzVector pp(0,0,-gGlobal->Get_BetaI(),1.);
00217   double chi[3], chi_p[3];
00218   for(int i=0;i<3;i++){
00219     chi[i]   = q[i]*pm;
00220     chi_p[i] = q[i]*pp;
00221     //    cout<<i<<" "<<chi[i]<<" "<<chi_p[i]<<endl;
00222   }
00223 
00224   double res = 0;
00225   double s = 4;
00226   double me2 = gGlobal->Get_MI2();
00227   double cycper[3];
00228   for(int i=0;i<3;i++){ // cyclic permutations
00229     int i0 = (0 + i)%3, i1 = (1 + i)%3, i2 = (2 + i)%3;
00230     
00231     double chi22 = pow(chi[i2],2);
00232     double chi_p22 = pow(chi_p[i2],2);
00233     cycper[i]  = s*(chi22 + chi_p22)/(chi[i0]*chi[i1]*chi_p[i0]*chi_p[i1]);
00234     cycper[i] -= 2*me2*
00235       ((pow(chi[i0],2)+pow(chi[i1],2))/(chi[i0]*chi[i1]*chi_p22)+
00236        (pow(chi_p[i0],2)+pow(chi_p[i1],2))/(chi_p[i0]*chi_p[i1]*chi22));
00237     res += cycper[i];
00238     //  cout<<DB(i)<<DB(j)<<DB(k)<<endl;
00239     
00240   }
00241   //  cout<<res<<endl;
00242   double CosPsi = fEvent->GetCosPsi();
00243   double gamma = q[2].E()*q[0].P()/(2 - q[2].E()*(1-CosPsi));
00244   //  double gamma = q[2].E()*q[0].E()/q[1].E();
00245 //   if(res/3*gamma*0.25>1e7){
00246 //     cout<<DB(CosPsi)<<DB(gamma)<<endl;
00247 //     cout<<DB(cycper[0])<<DB(cycper[1])<<DB(cycper[2])<<endl;
00248 //     cout<<DB(chi[0])<<DB(chi[1])<<DB(chi[2])<<endl;
00249 //     cout<<DB(chi_p[0])<<DB(chi_p[1])<<DB(chi_p[2])<<endl;
00250 //     for(int i=0;i<3;i++)cout<<q[i][0]<<" "<<q[i][1]<<" "<<q[i][2]<<" "<<q[i][3]<<endl;
00251 //     cout<<q[0].Theta()<<" "<<q[1].Theta()<<" "<<q[2].Theta()<<endl;
00252 //   }
00253   
00254   return res/3*gamma*0.25;
00255 }

void TVCrossPart::SetDefaultVP (  )  [inline, inherited]

Definition at line 33 of file TVCrossPart.h.

References TVCrossPart::fZeroVP.

00033 {fZeroVP = false;}

virtual void TVCrossPart::SetHardPhoton ( const bool x  )  [inline, virtual, inherited]

Definition at line 31 of file TVCrossPart.h.

References TVCrossPart::fHardPhoton.

Referenced by init_prime_gen_(), Mcgpj::initialize(), and main().

00031 {fHardPhoton = x;}

void TVCrossPart::SetNoFSR (  )  [inline, inherited]

Definition at line 34 of file TVCrossPart.h.

References TVCrossPart::fNoFSR.

Referenced by init_prime_gen_(), Mcgpj::initialize(), and main().

00034 {fNoFSR = true;}

void TGGCrossPart::SetThetaMin ( const double &   )  [virtual]

Implements TVCrossPart.

Definition at line 29 of file TGGCrossPart.C.

References cos(), fCosMin, fMax, fNorm, fThetaLocked, gConst, and TConstants::Pi().

Referenced by Init().

00029                                               {
00030   if(fThetaLocked)return;
00031   //  cout<<"ThetaMin = "<<th<<endl;
00032   fCosMin  = cos(th);
00033   fMax     = (1 + fCosMin*fCosMin)/(1 - fCosMin*fCosMin);
00034   double cmax = fCosMin, cmin = -fCosMin;
00035   fNorm    = (cmin-cmax - log((1-cmax)/(1-cmin))+log((1+cmax)/(1+cmin))) * // Theta norm
00036     2*gConst->Pi(); // Phi norm  
00037   //  cout<<DB(fCosMin)<<DB(fMax)<<DB(fNorm)<<endl;
00038 }

void TVCrossPart::SetZeroVP (  )  [inline, inherited]

Definition at line 32 of file TVCrossPart.h.

References TVCrossPart::fZeroVP.

Referenced by init_prime_gen_(), Mcgpj::initialize(), and main().

00032 {fZeroVP = true;}


Member Data Documentation

double TGGCrossPart::fCosMin [protected]

Definition at line 12 of file TGGCrossPart.h.

Referenced by MakeCosTheta(), and SetThetaMin().

TDFun* TVCrossPart::fD [protected, inherited]

Definition at line 11 of file TVCrossPart.h.

Referenced by TPiCrossPart::GetValue(), TMuCrossPart::GetValue(), GetValue(), TEPCrossPart::GetValue(), TPiCrossPart::Init(), TMuCrossPart::Init(), Init(), TEPCrossPart::Init(), TEPCrossPart::TEPCrossPart(), TGGCrossPart(), TMuCrossPart::TMuCrossPart(), TPiCrossPart::TPiCrossPart(), TEPCrossPart::~TEPCrossPart(), ~TGGCrossPart(), TMuCrossPart::~TMuCrossPart(), and TPiCrossPart::~TPiCrossPart().

TEvent* TVCrossPart::fEvent [protected, inherited]

Definition at line 10 of file TVCrossPart.h.

Referenced by TVCrossPart::BornCrossSection(), TPiCrossPart::BornShift(), TMuCrossPart::BornShift(), TEPCrossPart::BornShift(), TVCrossPart::GetEvent(), TPiCrossPart::GetValue(), TMuCrossPart::GetValue(), GetValue(), TEPCrossPart::GetValue(), TPiCrossPart::Init(), TMuCrossPart::Init(), Init(), TEPCrossPart::Init(), TVCrossPart::PrintEvent(), R_3_Gamma(), TMuCrossPart::R_e_Gamma(), TMuCrossPart::R_e_Gamma_t(), TMuCrossPart::R_e_mu_Gamma_t(), TMuCrossPart::R_f_Gamma(), TPiCrossPart::R_Gamma(), TPiCrossPart::R_Gamma_kuraev_eidelman(), TPiCrossPart::R_Gamma_t(), TEPCrossPart::RGamma(), TEPCrossPart::RGamma_kuraev_eidelman(), TEPCrossPart::TEPCrossPart(), TGGCrossPart(), TMuCrossPart::TMuCrossPart(), TPiCrossPart::TPiCrossPart(), TEPCrossPart::~TEPCrossPart(), ~TGGCrossPart(), TMuCrossPart::~TMuCrossPart(), and TPiCrossPart::~TPiCrossPart().

bool TVCrossPart::fHardPhoton [protected, inherited]

Definition at line 12 of file TVCrossPart.h.

Referenced by TPiCrossPart::GetValue(), TMuCrossPart::GetValue(), GetValue(), TEPCrossPart::GetValue(), TVCrossPart::SetHardPhoton(), TEPCrossPart::TEPCrossPart(), TGGCrossPart(), TMuCrossPart::TMuCrossPart(), and TPiCrossPart::TPiCrossPart().

double TGGCrossPart::fMax [protected]

Definition at line 13 of file TGGCrossPart.h.

Referenced by MakeCosTheta(), and SetThetaMin().

bool TVCrossPart::fNoFSR [protected, inherited]

Definition at line 14 of file TVCrossPart.h.

Referenced by TPiCrossPart::GetValue(), TMuCrossPart::GetValue(), TMuCrossPart::R_e_Gamma(), TPiCrossPart::R_Gamma(), TPiCrossPart::R_Gamma_t(), TVCrossPart::SetNoFSR(), TGGCrossPart(), TKnCrossPart::TKnCrossPart(), TMuCrossPart::TMuCrossPart(), and TPiCrossPart::TPiCrossPart().

double TGGCrossPart::fNorm [protected]

Definition at line 14 of file TGGCrossPart.h.

Referenced by MakeCosTheta(), and SetThetaMin().

double TGGCrossPart::fNormTheta [protected]

Definition at line 15 of file TGGCrossPart.h.

Referenced by GetCNorm(), and MakeCosTheta().

unsigned int TVCrossPart::fNPart [protected, inherited]

Definition at line 9 of file TVCrossPart.h.

Referenced by TVCrossPart::GetNPart(), TEPCrossPart::TEPCrossPart(), TGGCrossPart(), TMuCrossPart::TMuCrossPart(), and TPiCrossPart::TPiCrossPart().

TPhoton* TGGCrossPart::fPhD1 [protected]

Definition at line 8 of file TGGCrossPart.h.

Referenced by GetValue(), Init(), TGGCrossPart(), and ~TGGCrossPart().

TPhoton* TGGCrossPart::fPhD2 [protected]

Definition at line 9 of file TGGCrossPart.h.

Referenced by GetValue(), Init(), TGGCrossPart(), and ~TGGCrossPart().

TPhoton* TGGCrossPart::fPhI1 [protected]

Definition at line 10 of file TGGCrossPart.h.

Referenced by GetValue(), Init(), TGGCrossPart(), and ~TGGCrossPart().

TPhoton* TGGCrossPart::fPhI2 [protected]

Definition at line 11 of file TGGCrossPart.h.

Referenced by GetValue(), Init(), TGGCrossPart(), and ~TGGCrossPart().

bool TGGCrossPart::fThetaLocked [protected]

Definition at line 20 of file TGGCrossPart.h.

Referenced by SetThetaMin(), and TGGCrossPart().

bool TVCrossPart::fZeroVP [protected, inherited]

Definition at line 13 of file TVCrossPart.h.

Referenced by TVCrossPart::BornCrossSection(), TPiCrossPart::Init(), TMuCrossPart::Init(), TEPCrossPart::Init(), TVCrossPart::SetDefaultVP(), TVCrossPart::SetZeroVP(), TEPCrossPart::TEPCrossPart(), TMuCrossPart::TMuCrossPart(), and TPiCrossPart::TPiCrossPart().


Generated on Tue Nov 29 23:36:00 2016 for BOSS_7.0.2 by  doxygen 1.4.7