Page MenuHomeHEPForge

No OneTemporary

Size
9 KB
Referenced Files
None
Subscribers
None
diff --git a/Helicity/RSFermionSpinInfo.h b/Helicity/RSFermionSpinInfo.h
--- a/Helicity/RSFermionSpinInfo.h
+++ b/Helicity/RSFermionSpinInfo.h
@@ -1,185 +1,191 @@
// -*- C++ -*-
#ifndef THEPEG_RSFermionSpinInfo_H
#define THEPEG_RSFermionSpinInfo_H
// This is the declaration of the RSFermionSpinInfo class.
#include "SpinInfo.h"
#include "ThePEG/Helicity/LorentzRSSpinor.h"
#include "RSFermionSpinInfo.fh"
namespace ThePEG {
namespace Helicity {
/**
* The RSFermionSpinInfo class inherits from the SpinInfo class and
* implements the storage of the basis vector for a spin-3/2 particle.
* The basis states are the vector u spinors for a particle and the vector
* v-spinors for an antiparticle. The barred spinors can be obtained from these.
*
* These basis states should be set by either the matrixelements or decayers
* which are capable of generating spin correlation information.
*
* The basis states in the rest frame of the particles can then be accessed by
* the decayers to produce the correct correlations.
*
+ * N.B. in our convention 0 is the \f$-\frac32\f$ helicity state,
+ * 1 is the \f$-\frac12\f$ helicity state,
+ * 2 is the \f$+\frac12\f$ helicity state,
+ * 3 is the \f$+\frac32\f$ helicity state.
+ *
* @see SpinInfo
*
* \author Peter Richardson
*
*/
class RSFermionSpinInfo: public SpinInfo {
public:
/** @name Standard constructors and destructors. */
//@{
/**
* Default constructor.
*/
inline RSFermionSpinInfo();
/**
* Copy-constructor.
*/
inline RSFermionSpinInfo(const RSFermionSpinInfo &);
/**
* Standard Constructor.
* @param p the production momentum.
* @param time true if the particle is time-like.
*/
inline RSFermionSpinInfo(const Lorentz5Momentum & p,bool time);
/**
* Destructor.
*/
virtual ~RSFermionSpinInfo();
//@}
public:
/** @name Set and get methods for the basis state. */
//@{
/**
* Set the basis state, this is production state.
- * @param hel the helicity.
+ * @param hel the helicity (0,1,2,3 as described above.)
* @param in the LorentzRSSpinor for the given helicity.
*/
- inline void setBasisState(int hel,LorentzRSSpinor in) const;
+ inline void setBasisState(unsigned int hel,LorentzRSSpinor in) const;
/**
* Set the basis state for the decay.
- * @param hel the helicity.
+ * @param hel the helicity (0,1,2,3 as described above.)
* @param in the LorentzRSSpinor for the given helicity.
*/
- inline void setDecayState(int hel,LorentzRSSpinor in) const;
+ inline void setDecayState(unsigned int hel,LorentzRSSpinor in) const;
/**
* Get the basis state for the production for the given helicity, \a
- * hel.
+ * hel (0,1,2,3 as described above.)
*/
- inline LorentzRSSpinor getProductionBasisState(int hel) const;
+ inline LorentzRSSpinor getProductionBasisState(unsigned int hel) const;
/**
- * Get the basis state for the decay for the given helicity, \a hel.
+ * Get the basis state for the decay for the given helicity, \a hel
+ * (0,1,2,3 as described above.)
*/
- inline LorentzRSSpinor getDecayBasisState(int hel) const;
+ inline LorentzRSSpinor getDecayBasisState(unsigned int hel) const;
//@}
public:
/**
* Standard Init function used to initialize the interfaces.
*/
static void Init();
/**
* Rebind to cloned objects. If a FermionSpinInfo is cloned together
* with a whole Event and this has pointers to other event record
* objects, these should be rebound to their clones in this
* function.
*/
virtual void rebind(const EventTranslationMap & trans);
/**
* Standard clone method.
*/
inline virtual EIPtr clone() const;
private:
/**
* Describe a concrete class without persistent data.
*/
static NoPIOClassDescription<RSFermionSpinInfo> initRSFermionSpinInfo;
/**
* Private and non-existent assignment operator.
*/
RSFermionSpinInfo & operator=(const RSFermionSpinInfo &);
private:
/**
* Basis states in the frame in which the particle was produced.
*/
mutable vector<LorentzRSSpinor> _productionstates;
/**
* Basis states in the frame in which the particle decays.
*/
mutable vector<LorentzRSSpinor> _decaystates;
/**
* True if the decay state has been set.
*/
mutable bool _decaycalc;
};
}
}
#include "ThePEG/Utilities/ClassTraits.h"
namespace ThePEG {
/**
* The following template specialization informs ThePEG about the
* base class of RSFermionSpinInfo.
*/
template <>
struct BaseClassTrait<ThePEG::Helicity::RSFermionSpinInfo,1> {
/** Typedef of the base class of RSFermionSpinInfo. */
typedef ThePEG::Helicity::SpinInfo NthBase;
};
/**
* The following template specialization informs ThePEG about the
* name of this class and the shared object where it is defined.
*/
template <>
struct ClassTraits<ThePEG::Helicity::RSFermionSpinInfo>
: public ClassTraitsBase<ThePEG::Helicity::RSFermionSpinInfo> {
/**
* Return the class name.
*/
static string className() { return "ThePEG::Helicity::RSFermionSpinInfo"; }
/**
* Return the name of the shared library to be loaded to get
* access to this class and every other class it uses
* (except the base class).
*/
static string library() { return "libThePEGHelicity.so"; }
};
}
#include "RSFermionSpinInfo.icc"
#ifndef ThePEG_TEMPLATES_IN_CC_FILE
// #include "RSFermionSpinInfo.tcc"
#endif
#endif /* THEPEG_RSFermionSpinInfo_H */
diff --git a/Helicity/RSFermionSpinInfo.icc b/Helicity/RSFermionSpinInfo.icc
--- a/Helicity/RSFermionSpinInfo.icc
+++ b/Helicity/RSFermionSpinInfo.icc
@@ -1,107 +1,99 @@
// -*- C++ -*-
//
// This is the implementation of the inlined member functions of
// the RSFermionSpinInfo class.
//
// Author: Peter Richardson
//
namespace ThePEG {
namespace Helicity {
inline RSFermionSpinInfo::RSFermionSpinInfo()
{
_productionstates.resize(4,LorentzRSSpinor());
_decaystates.resize(4,LorentzRSSpinor());
- setSpin(4);
+ iSpin(PDT::Spin3Half);
_decaycalc=false;
}
inline RSFermionSpinInfo::RSFermionSpinInfo(const Lorentz5Momentum & in,bool intime)
{
_productionstates.resize(4,LorentzRSSpinor());
_decaystates.resize(4,LorentzRSSpinor());
- setSpin(4);
+ iSpin(PDT::Spin3Half);
setProductionMomentum(in);
_decaycalc=false;
setTimelike(intime);
}
inline RSFermionSpinInfo::RSFermionSpinInfo(const RSFermionSpinInfo & x)
: SpinInfo(x), _productionstates(x._productionstates),
_decaystates(x._decaystates), _decaycalc(x._decaycalc)
{}
inline EIPtr RSFermionSpinInfo::clone() const
{
tcSpinPtr temp=this;
return const_ptr_cast<SpinPtr>(temp);
}
inline void RSFermionSpinInfo::rebind(const EventTranslationMap & trans) {
SpinInfo::rebind(trans);
}
// set and get methods for the basis states
// set the basis state, this is production state
-inline void RSFermionSpinInfo::setBasisState(int ihel,LorentzRSSpinor in) const
+inline void RSFermionSpinInfo::setBasisState(unsigned int ihel,
+ LorentzRSSpinor in) const
{
- unsigned int ispin=ihel+2;
- if(ihel>0){--ispin;}
- if(ihel==-1||ihel==1||ihel==-2||ihel==2){_productionstates[ispin]=in;}
+ if(ihel<4){_productionstates[ihel]=in;}
else throw HelicityLogicalError()
<< "Tried to set invalid fermion basis state in RSFermionSpinInfo class."
<< Exception::abortnow;
}
-inline void RSFermionSpinInfo::setDecayState(int ihel,LorentzRSSpinor in) const
+inline void RSFermionSpinInfo::setDecayState(unsigned int ihel,
+ LorentzRSSpinor in) const
{
- unsigned int ispin=ihel+2;
- if(ihel>0){--ispin;}
- if(ihel==-1||ihel==1||ihel==-2||ihel==2){
+ if(ihel<4){
_decaycalc=true;
- _decaystates[ispin]=in;
+ _decaystates[ihel]=in;
} else throw HelicityLogicalError()
<< "Tried to set invalid fermion basis state in RSFermionSpinInfo class."
<< Exception::abortnow;
}
// get the basis state for the production
-inline LorentzRSSpinor RSFermionSpinInfo::getProductionBasisState(int ihel) const
+inline LorentzRSSpinor RSFermionSpinInfo::
+getProductionBasisState(unsigned int ihel) const
{
- unsigned int ispin=ihel+2;
- if(ihel>0){--ispin;}
- if ( ihel != -1 && ihel != 1 && ihel!=-2 && ihel!=2) throw HelicityLogicalError()
+ if (ihel>3) throw HelicityLogicalError()
<< "Tried to get invalid fermion basis state in RSFermionSpinInfo class."
<< Exception::abortnow;
- return _productionstates[ispin];
+ return _productionstates[ihel];
}
// get the bassis state for the decay
-inline LorentzRSSpinor RSFermionSpinInfo::getDecayBasisState(int ihel) const
+inline LorentzRSSpinor RSFermionSpinInfo::getDecayBasisState(unsigned int ihel) const
{
- unsigned int ispin=ihel+2;
- if(ihel>0){--ispin;}
- // check this is a valid helicity
- if ( ihel != -1 && ihel != 1 && ihel!=-2 && ihel!=2)
+ if (ihel>3)
throw HelicityLogicalError()
<< "Tried to get invalid fermion basis state in RSFermionSpinInfo class."
<< Exception::abortnow;
// calculate the decay basis states if needed
if(!_decaycalc)
{
// now use this to evaluate the basis states in the decay frame
Hep3Vector boostv=- productionMomentum().boostVector();
- _decaystates[0] =_productionstates[0].boost(boostv);
- _decaystates[1] =_productionstates[1].boost(boostv);
- _decaystates[2] =_productionstates[2].boost(boostv);
- _decaystates[3] =_productionstates[3].boost(boostv);
+ for(unsigned int ix=0;ix<4;++ix)
+ {_decaystates[ix] =_productionstates[ix].boost(boostv);}
_decaycalc=true;
}
// return the basis function
- return _decaystates[ispin];
+ return _decaystates[ihel];
}
}
}

File Metadata

Mime Type
text/x-diff
Expires
Tue, Sep 30, 5:44 AM (2 h, 42 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
6566301
Default Alt Text
(9 KB)

Event Timeline