// Author: H. Schuldes
// Written: 29.05.09


#ifndef _PPIONBEAMAMPLITUDE_H_
#define _PPIONBEAMAMPLITUDE_H_

#include "PChannelModel.h"
#include "PDynamicData.h"
#include "TComplex.h"
#include "TGraph.h"

class PPionBeamAmplitude : public PChannelModel
{
 public:

    PPionBeamAmplitude(const Char_t *id, const Char_t *de, Int_t key);
    PDistribution *Clone(const char *delme=NULL) const;
    
    using PChannelModel::GetWeight;
  
    Double_t GetWeight(Double_t *mass, Int_t *didx=NULL);
    Bool_t   Init();
    Double_t GetWeight(void);

    void SetGraph_Rho_Re_T11(TGraph * f) {
	Graph_Rho_Re_T11 = f;
    };
 
    void SetGraph_Rho_Im_T11(TGraph * f) {
	Graph_Rho_Im_T11 = f;
    };   

    void SetGraph_Rho_Re_T13(TGraph * f) {
	Graph_Rho_Re_T13 = f;
    };

    void SetGraph_Rho_Im_T13(TGraph * f) {
	Graph_Rho_Im_T13 = f;
    };

    void SetGraph_Rho_Re_T31(TGraph * f) {
	Graph_Rho_Re_T31 = f;
    };

    void SetGraph_Rho_Im_T31(TGraph * f) {
	Graph_Rho_Im_T31 = f;
    };

    void SetGraph_Rho_Re_T33(TGraph * f) {
	Graph_Rho_Re_T33 = f;
    };

    void SetGraph_Rho_Im_T33(TGraph * f) {
	Graph_Rho_Im_T33 = f;
    };

    void SetGraph_Om_Re_T11(TGraph * f) {
	Graph_Om_Re_T11 = f;
    };

    void SetGraph_Om_Im_T11(TGraph * f) {
	Graph_Om_Im_T11 = f;
    };

    void SetGraph_Om_Re_T13(TGraph * f) {
	Graph_Om_Re_T13 = f;
    };

    void SetGraph_Om_Im_T13(TGraph * f) {
	Graph_Om_Im_T13 = f;
    };

    void SetS(double f) {
	s = f;
    };

    void SetTerm(int f) {
	//terms: 0=all
	//       1=rho
	//       2=omega
	term = f;
    };

    void SetMode(int f) {
	//mode: 0=pi_minus
	//      1=pi_plus  
	mode = f;
    };


 private:
    
    TGraph *Graph_Rho_Re_T11;
    TGraph *Graph_Rho_Im_T11;
    TGraph *Graph_Rho_Re_T13;
    TGraph *Graph_Rho_Im_T13;
    TGraph *Graph_Rho_Re_T31;
    TGraph *Graph_Rho_Im_T31;
    TGraph *Graph_Rho_Re_T33;
    TGraph *Graph_Rho_Im_T33;
    TGraph *Graph_Om_Re_T11;
    TGraph *Graph_Om_Im_T11;
    TGraph *Graph_Om_Re_T13;
    TGraph *Graph_Om_Im_T13;
    
    PChannelModel *RhoPropagator;
    PChannelModel *OmPropagator;
    
    PParticle *dilepton, *parent, *p_in, *pion, *p_out;

    Double_t p_bar_p; //Momentum of outgoing Neutron
    Double_t q_bar_p; //Momentum of Dilepton
    
    Double_t p_0;     //Energy of incoming Proton    
    Double_t p_bar_0; //Energy of Neutron
    Double_t p_p;     //Momentum of Proton
    Double_t s;       //Mass of parent squared
    Int_t term, monte_carlo;
    Int_t mode;

    Double_t f_Rho, f_Om; //Coupling constants of the rho- and w-meson (real und positiv)
    

    Double_t M_Rho, M_Om, M_p, M_n, m_e, m_pi_minus, m_pi_plus; //some constants
     
    ClassDef(PPionBeamAmplitude, 0)  // Pion beam amplitudes

};

#endif // _PPIONBEAMAMPLITUDE_H_
 PPionBeamAmplitude.h:1
 PPionBeamAmplitude.h:2
 PPionBeamAmplitude.h:3
 PPionBeamAmplitude.h:4
 PPionBeamAmplitude.h:5
 PPionBeamAmplitude.h:6
 PPionBeamAmplitude.h:7
 PPionBeamAmplitude.h:8
 PPionBeamAmplitude.h:9
 PPionBeamAmplitude.h:10
 PPionBeamAmplitude.h:11
 PPionBeamAmplitude.h:12
 PPionBeamAmplitude.h:13
 PPionBeamAmplitude.h:14
 PPionBeamAmplitude.h:15
 PPionBeamAmplitude.h:16
 PPionBeamAmplitude.h:17
 PPionBeamAmplitude.h:18
 PPionBeamAmplitude.h:19
 PPionBeamAmplitude.h:20
 PPionBeamAmplitude.h:21
 PPionBeamAmplitude.h:22
 PPionBeamAmplitude.h:23
 PPionBeamAmplitude.h:24
 PPionBeamAmplitude.h:25
 PPionBeamAmplitude.h:26
 PPionBeamAmplitude.h:27
 PPionBeamAmplitude.h:28
 PPionBeamAmplitude.h:29
 PPionBeamAmplitude.h:30
 PPionBeamAmplitude.h:31
 PPionBeamAmplitude.h:32
 PPionBeamAmplitude.h:33
 PPionBeamAmplitude.h:34
 PPionBeamAmplitude.h:35
 PPionBeamAmplitude.h:36
 PPionBeamAmplitude.h:37
 PPionBeamAmplitude.h:38
 PPionBeamAmplitude.h:39
 PPionBeamAmplitude.h:40
 PPionBeamAmplitude.h:41
 PPionBeamAmplitude.h:42
 PPionBeamAmplitude.h:43
 PPionBeamAmplitude.h:44
 PPionBeamAmplitude.h:45
 PPionBeamAmplitude.h:46
 PPionBeamAmplitude.h:47
 PPionBeamAmplitude.h:48
 PPionBeamAmplitude.h:49
 PPionBeamAmplitude.h:50
 PPionBeamAmplitude.h:51
 PPionBeamAmplitude.h:52
 PPionBeamAmplitude.h:53
 PPionBeamAmplitude.h:54
 PPionBeamAmplitude.h:55
 PPionBeamAmplitude.h:56
 PPionBeamAmplitude.h:57
 PPionBeamAmplitude.h:58
 PPionBeamAmplitude.h:59
 PPionBeamAmplitude.h:60
 PPionBeamAmplitude.h:61
 PPionBeamAmplitude.h:62
 PPionBeamAmplitude.h:63
 PPionBeamAmplitude.h:64
 PPionBeamAmplitude.h:65
 PPionBeamAmplitude.h:66
 PPionBeamAmplitude.h:67
 PPionBeamAmplitude.h:68
 PPionBeamAmplitude.h:69
 PPionBeamAmplitude.h:70
 PPionBeamAmplitude.h:71
 PPionBeamAmplitude.h:72
 PPionBeamAmplitude.h:73
 PPionBeamAmplitude.h:74
 PPionBeamAmplitude.h:75
 PPionBeamAmplitude.h:76
 PPionBeamAmplitude.h:77
 PPionBeamAmplitude.h:78
 PPionBeamAmplitude.h:79
 PPionBeamAmplitude.h:80
 PPionBeamAmplitude.h:81
 PPionBeamAmplitude.h:82
 PPionBeamAmplitude.h:83
 PPionBeamAmplitude.h:84
 PPionBeamAmplitude.h:85
 PPionBeamAmplitude.h:86
 PPionBeamAmplitude.h:87
 PPionBeamAmplitude.h:88
 PPionBeamAmplitude.h:89
 PPionBeamAmplitude.h:90
 PPionBeamAmplitude.h:91
 PPionBeamAmplitude.h:92
 PPionBeamAmplitude.h:93
 PPionBeamAmplitude.h:94
 PPionBeamAmplitude.h:95
 PPionBeamAmplitude.h:96
 PPionBeamAmplitude.h:97
 PPionBeamAmplitude.h:98
 PPionBeamAmplitude.h:99
 PPionBeamAmplitude.h:100
 PPionBeamAmplitude.h:101
 PPionBeamAmplitude.h:102
 PPionBeamAmplitude.h:103
 PPionBeamAmplitude.h:104
 PPionBeamAmplitude.h:105
 PPionBeamAmplitude.h:106
 PPionBeamAmplitude.h:107
 PPionBeamAmplitude.h:108
 PPionBeamAmplitude.h:109
 PPionBeamAmplitude.h:110
 PPionBeamAmplitude.h:111
 PPionBeamAmplitude.h:112
 PPionBeamAmplitude.h:113
 PPionBeamAmplitude.h:114
 PPionBeamAmplitude.h:115
 PPionBeamAmplitude.h:116
 PPionBeamAmplitude.h:117
 PPionBeamAmplitude.h:118
 PPionBeamAmplitude.h:119
 PPionBeamAmplitude.h:120
 PPionBeamAmplitude.h:121
 PPionBeamAmplitude.h:122
 PPionBeamAmplitude.h:123
 PPionBeamAmplitude.h:124
 PPionBeamAmplitude.h:125
 PPionBeamAmplitude.h:126
 PPionBeamAmplitude.h:127
 PPionBeamAmplitude.h:128
 PPionBeamAmplitude.h:129
 PPionBeamAmplitude.h:130
 PPionBeamAmplitude.h:131