LCOV - code coverage report
Current view: top level - TEvtGen/EvtGen/EvtGenBase - EvtSpinAmp.hh (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 4 0.0 %
Date: 2016-06-14 17:26:59 Functions: 0 6 0.0 %

          Line data    Source code
       1             : #ifndef __EVTSPINAMP_HH__
       2             : #define __EVTSPINAMP_HH__
       3             : 
       4             : #include "EvtGenBase/EvtSpinType.hh"
       5             : #include "EvtGenBase/EvtComplex.hh"
       6             : 
       7             : #include <vector>
       8             : using std::vector;
       9             : 
      10             : #include <cstdarg>
      11             : 
      12             : class EvtSpinAmp;
      13             : EvtSpinAmp operator*( const EvtComplex&, const EvtSpinAmp& );
      14             : EvtSpinAmp operator*( const EvtSpinAmp&, const EvtComplex& );
      15             : EvtSpinAmp operator/( const EvtSpinAmp&, const EvtComplex& );
      16             : 
      17             : class EvtSpinAmp
      18             : {
      19             : 
      20             :     friend EvtSpinAmp operator*( const EvtComplex&, const EvtSpinAmp& );
      21             :     friend EvtSpinAmp operator*( const EvtSpinAmp&, const EvtComplex& );
      22             :     friend EvtSpinAmp operator/( const EvtSpinAmp&, const EvtComplex& );
      23             :     friend std::ostream& operator<< ( std::ostream&, const EvtSpinAmp& );
      24             :     
      25             : public:
      26             : 
      27           0 :     EvtSpinAmp( ) {};
      28             :     EvtSpinAmp( const vector<EvtSpinType::spintype>& );
      29             :     EvtSpinAmp( const vector<EvtSpinType::spintype>& , const EvtComplex& );
      30             :     EvtSpinAmp( const vector<EvtSpinType::spintype>& , const vector<EvtComplex>& );
      31             :     EvtSpinAmp( const EvtSpinAmp & );
      32             : 
      33           0 :     ~EvtSpinAmp( ) {};
      34             :     
      35             :     // Input to the index functions are twice the magnetic quantum number
      36             :     EvtComplex& operator()( const vector<int>& ); 
      37             :     const EvtComplex& operator()( const vector<int>& ) const; 
      38             :     EvtComplex& operator()( int, ... );
      39             :     const EvtComplex& operator()( int, ... ) const;
      40             : 
      41             :     EvtSpinAmp& operator=( const EvtSpinAmp& );
      42             : 
      43             :     EvtSpinAmp operator+( const EvtSpinAmp& ) const;
      44             :     EvtSpinAmp& operator+=( const EvtSpinAmp& );
      45             : 
      46             :     EvtSpinAmp operator-( const EvtSpinAmp& ) const;
      47             :     EvtSpinAmp& operator-=( const EvtSpinAmp& );
      48             : 
      49             :     // Direct Product
      50             :     EvtSpinAmp operator*( const EvtSpinAmp& ) const;
      51             :     EvtSpinAmp& operator*=( const EvtSpinAmp& );
      52             :     
      53             :     EvtSpinAmp& operator*=( const EvtComplex& );
      54             :     EvtSpinAmp& operator/=( const EvtComplex& );
      55             : 
      56             :     // Contraction of amplitudes
      57             :     void intcont( size_t, size_t );
      58             :     void extcont( const EvtSpinAmp &, int, int );
      59             :     
      60             :     // assign this value to every member in the container
      61             :     void assign( const EvtComplex & val ) { _elem.assign( _elem.size(), val ); }
      62             :     
      63             :     // get the order of the container
      64           0 :     size_t rank( ) const { return _twospin.size(); }
      65             : 
      66             :     // get the dimension vector of the container
      67           0 :     const vector<unsigned int> & dims( ) const { return _twospin; } 
      68             :     
      69             :     // set the elements and the dimensions of the vector - useful for something
      70             :     // things eventough it is usually not the cleanest solution
      71             :     void addspin( int twospin ) { _twospin.push_back( twospin ); }
      72             :     void setelem( const vector<EvtComplex> &elem ) { _elem = elem; }
      73             : 
      74             :     bool iterate( vector<int>& index ) const;
      75             :     vector<int> iterinit() const;
      76             : 
      77             :     bool allowed( const vector<int>& index ) const;
      78             :     bool iterateallowed( vector<int>& index) const;
      79             :     vector<int> iterallowedinit() const;
      80             : 
      81             : private:
      82             : 
      83             :     void checkindexargs( const vector<int>& index ) const;
      84             :     void checktwospin( const vector<unsigned int>& twospin ) const;
      85             :     int findtrueindex( const vector<int>& index ) const;
      86             :     vector<unsigned int> calctwospin( const vector<EvtSpinType::spintype>& type ) const;
      87             : 
      88             :     vector<EvtSpinType::spintype> _type;
      89             :     vector<unsigned int> _twospin;
      90             :     vector<EvtComplex> _elem;
      91             : };
      92             : 
      93             : #endif // __EVTSPINAMP__

Generated by: LCOV version 1.11