///////////////////////////////////////////////////////////////////////////
//
// Copyright 2010
//
// This file is part of starlight.
//
// starlight is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// starlight is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with starlight. If not, see .
//
///////////////////////////////////////////////////////////////////////////
//
// File and Version Information:
// $Rev:: 164 $: revision of last commit
// $Author:: odjuvsla $: author of last commit
// $Date:: 2013-10-06 16:18:08 +0200 #$: date of last commit
//
// Description:
//
//
//
///////////////////////////////////////////////////////////////////////////
#ifndef GAMMAAVM_H
#define GAMMAAVM_H
#include
#include "starlightconstants.h"
#include "readinluminosity.h"
#include "beambeamsystem.h"
#include "randomgenerator.h"
#include "eventchannel.h"
#include "upcevent.h"
#include "nBodyPhaseSpaceGen.h"
class Gammaavectormeson : public eventChannel
{
public:
Gammaavectormeson(beamBeamSystem& bbsystem);
virtual ~Gammaavectormeson();
starlightConstants::event produceEvent(int &ievent);
upcEvent produceEvent();
void pickwy(double &W, double &Y);
void momenta(double W,double Y,double &E,double &px,double &py,double &pz,int &tcheck);
double pTgamma(double E);
void vmpt(double W,double Y,double &E,double &px,double &py, double &pz,int &tcheck);
void twoBodyDecay(starlightConstants::particleTypeEnum &ipid,double E,double W,double px0,double py0,double pz0,double &px1,double &py1,double&pz1,double &px2,double &py2,double &pz2,int &iFbadevent);
bool fourBodyDecay(starlightConstants::particleTypeEnum& ipid, const double E, const double W, const double* p, lorentzVector* decayMoms, int& iFbadevent);
double getMass();
double getWidth();
virtual double getTheta(starlightConstants::particleTypeEnum ipid);
double getSpin();
double _VMbslope;
virtual double getDaughterMass(starlightConstants::particleTypeEnum &ipid);
double pseudoRapidity(double px, double py, double pz);
private:
starlightConstants::particleTypeEnum _VMpidtest;
int _VMnumw;
int _VMnumy;
int _VMinterferencemode;
int _VMCoherence;
int _ProductionMode;
double _VMCoherenceFactor;
double _VMgamma_em;
double _VMNPT;
double _VMWmax;
double _VMWmin;
double _VMYmax;
double _VMYmin;
double _mass;
double _width;
double _VMptmax;
double _VMdpt;
nBodyPhaseSpaceGen* _phaseSpaceGen;
};
class Gammaanarrowvm : public Gammaavectormeson
{
public:
Gammaanarrowvm(beamBeamSystem& bbsystem);
virtual ~Gammaanarrowvm();
};
class Gammaawidevm : public Gammaavectormeson
{
public:
Gammaawidevm(beamBeamSystem& bbsystem);
virtual ~Gammaawidevm();
};
class Gammaaincoherentvm : public Gammaavectormeson
{
public:
Gammaaincoherentvm(beamBeamSystem& bbsystem);
virtual ~Gammaaincoherentvm();
};
#endif // GAMMAAVM_H