atlas  0.6
Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
atlas::rootdata::RootDatum Class Reference

Based root datum for a complex reductive group. More...

#include <rootdata.h>

Inheritance diagram for atlas::rootdata::RootDatum:
Inheritance graph
[legend]
Collaboration diagram for atlas::rootdata::RootDatum:
Collaboration graph
[legend]

Public Member Functions

 RootDatum ()
 
 RootDatum (const PreRootDatum &)
 
 RootDatum (const RootDatum &, tags::DualTag)
 
 RootDatum (int_Matrix &projector, const RootDatum &, tags::DerivedTag)
 
 RootDatum (int_Matrix &injector, const RootDatum &, tags::AdjointTag)
 
RootDatum sub_datum (const RootNbrList &generators) const
 
const RootSystemroot_system () const
 
size_t rank () const
 
size_t semisimpleRank () const
 
WeightList::const_iterator beginRoot () const
 
WeightList::const_iterator endRoot () const
 
CoweightList::const_iterator beginCoroot () const
 
CoweightList::const_iterator endCoroot () const
 
CoweightList::const_iterator beginRadical () const
 
CoweightList::const_iterator endRadical () const
 
WeightList::const_iterator beginCoradical () const
 
WeightList::const_iterator endCoradical () const
 
WRootIterator beginSimpleRoot () const
 
WRootIterator endSimpleRoot () const
 
WRootIterator beginPosRoot () const
 
WRootIterator endPosRoot () const
 
WRootIterator beginSimpleCoroot () const
 
WRootIterator endSimpleCoroot () const
 
WRootIterator beginPosCoroot () const
 
WRootIterator endPosCoroot () const
 
bool isRoot (const Weight &v) const
 
bool isSemisimple () const
 
const Weightroot (RootNbr i) const
 
const WeightsimpleRoot (weyl::Generator i) const
 
const WeightposRoot (size_t i) const
 
RootNbr root_index (const Root &r) const
 
const Coweightcoroot (RootNbr i) const
 
const CoweightsimpleCoroot (weyl::Generator i) const
 
const CoweightposCoroot (size_t i) const
 
RootNbr coroot_index (const Root &r) const
 
RatWeight fundamental_weight (weyl::Generator i) const
 
RatCoweight fundamental_coweight (weyl::Generator i) const
 
bool isAdjoint () const
 Tells whether the rootdatum is the rootdatum of an adjoint group. More...
 
bool isSimplyConnected () const
 Tells whether the rootdatum is the rootdatum of a simply connected group. More...
 
const WeighttwoRho () const
 
const Coweightdual_twoRho () const
 
int scalarProduct (const Weight &v, RootNbr j) const
 
bool isOrthogonal (const Weight &v, RootNbr j) const
 
int cartan (weyl::Generator i, weyl::Generator j) const
 
template<typename C >
void reflect (RootNbr alpha, matrix::Vector< C > &lambda) const
 
template<typename C >
void coreflect (matrix::Vector< C > &co_lambda, RootNbr alpha) const
 
void reflect (RootNbr alpha, LatticeMatrix &M) const
 
void reflect (LatticeMatrix &M, RootNbr alpha) const
 
template<typename C >
matrix::Vector< C > reflection (matrix::Vector< C > lambda, RootNbr alpha) const
 
template<typename C >
matrix::Vector< C > coreflection (matrix::Vector< C > co_lambda, RootNbr alpha) const
 
template<typename C >
void simple_reflect (weyl::Generator i, matrix::Vector< C > &v) const
 
template<typename C >
void simple_coreflect (matrix::Vector< C > &v, weyl::Generator i) const
 
void simple_reflect (weyl::Generator i, LatticeMatrix &M) const
 
void simple_reflect (LatticeMatrix &M, weyl::Generator i) const
 
template<typename C >
matrix::Vector< C > simple_reflection (weyl::Generator i, matrix::Vector< C > lambda) const
 
template<typename C >
matrix::Vector< C > simple_coreflection (matrix::Vector< C > ell, weyl::Generator i) const
 
WeylWord to_dominant (Weight lambda) const
 Returns a reduced expression of the shortest |w| making |w.v| dominant. More...
 
void act (const WeylWord &ww, Weight &lambda) const
 
Weight image_by (const WeylWord &ww, Weight lambda) const
 
void act_inverse (Weight &lambda, const WeylWord &ww) const
 
Weight image_by_inverse (Weight lambda, const WeylWord &ww) const
 
void dual_act (Coweight &ell, const WeylWord &ww) const
 
Weight dual_image_by (Coweight ell, const WeylWord &ww) const
 
Permutation rootPermutation (const WeightInvolution &q) const
 Returns the permutation of the roots induced by |q|. More...
 
WeightInvolution root_reflection (RootNbr r) const
 Returns the reflection for root #alpha. More...
 
WeightInvolution simple_reflection (weyl::Generator i) const
 
WeightInvolution matrix (const WeylWord &ww) const
 Writes in q the matrix represented by ww. More...
 
WeylWord reflectionWord (RootNbr r) const
 
int_Vector inSimpleRoots (RootNbr alpha) const
 
int_Vector inSimpleCoroots (RootNbr alpha) const
 
Weight twoRho (const RootNbrList &) const
 Returns the sum of the positive roots in rl. More...
 
Weight twoRho (const RootNbrSet &) const
 Returns the sum of the positive roots in rs. More...
 
Coweight dual_twoRho (const RootNbrList &) const
 
Coweight dual_twoRho (const RootNbrSet &) const
 
WeylWord word_of_inverse_matrix (const WeightInvolution &) const
 Returns the expression of $q^{-1}$ as a product of simple reflections. More...
 
void swap (RootDatum &)
 
- Public Member Functions inherited from atlas::rootdata::RootSystem
 RootSystem (const int_Matrix &Cartan_matrix)
 
 RootSystem (const RootSystem &rs, tags::DualTag)
 
size_t rank () const
 
unsigned long numPosRoots () const
 
unsigned long numRoots () const
 
int cartan (weyl::Generator i, weyl::Generator j) const
 
int_Matrix cartanMatrix () const
 
LieType Lie_type () const
 
int_Matrix cartanMatrix (const RootNbrList &sub) const
 Returns the Cartan matrix of the root subsystem with basis |rb|. More...
 
LieType Lie_type (RootNbrList sub) const
 
int_Vector root_expr (RootNbr alpha) const
 
int_Vector coroot_expr (RootNbr alpha) const
 
int level (RootNbr alpha) const
 
int colevel (RootNbr alpha) const
 
template<typename I , typename O >
void toRootBasis (I, I, O) const
 
template<typename I , typename O >
void toRootBasis (I, I, O, const RootNbrList &) const
 
template<typename I , typename O >
void toSimpleWeights (I, I, O, const RootNbrList &) const
 
bool is_simple_root (RootNbr alpha) const
 
bool is_posroot (RootNbr alpha) const
 
bool is_negroot (RootNbr alpha) const
 
RootNbr simpleRootNbr (weyl::Generator i) const
 
RootNbr posRootNbr (size_t alpha) const
 
RootNbr simpleRootIndex (size_t alpha) const
 
RootNbr posRootIndex (size_t alpha) const
 
RootNbr rootMinus (RootNbr alpha) const
 
RootNbr rt_abs (RootNbr alpha) const
 
RootNbrSet simpleRootSet () const
 
RootNbrList simpleRootList () const
 
RootNbrSet posRootSet () const
 
const Permutation & simple_root_permutation (weyl::Generator i) const
 
RankFlags descent_set (RootNbr alpha) const
 
RankFlags ascent_set (RootNbr alpha) const
 
size_t find_descent (RootNbr alpha) const
 
bool is_descent (weyl::Generator i, RootNbr alpha) const
 
bool is_ascent (weyl::Generator i, RootNbr alpha) const
 
RootNbr simple_reflected_root (weyl::Generator i, RootNbr r) const
 
void simple_reflect_root (weyl::Generator i, RootNbr &r) const
 
RootNbr permuted_root (const WeylWord &ww, RootNbr r) const
 
RootNbr permuted_root (RootNbr r, const WeylWord &ww) const
 
const Permutation & root_permutation (RootNbr alpha) const
 
bool isOrthogonal (RootNbr alpha, RootNbr beta) const
 
int bracket (RootNbr alpha, RootNbr beta) const
 
Permutation root_permutation (const Permutation &twist) const
 
Permutation extend_to_roots (const RootNbrList &simple_images) const
 
WeylWord reflectionWord (RootNbr r) const
 
matrix::Vector< int > pos_system_vec (const RootNbrList &Delta) const
 
RootNbrList simpleBasis (RootNbrSet rs) const
 
bool sumIsRoot (RootNbr alpha, RootNbr beta, RootNbr &gamma) const
 
bool sumIsRoot (RootNbr alpha, RootNbr beta) const
 
RootNbrSet long_orthogonalize (const RootNbrSet &rest) const
 Makes the orthogonal system |rset| into an equaivalent (for |refl_prod|) one that is additively closed inside the full root system. More...
 
RootNbrList high_roots () const
 

Private Types

enum  StatusFlagNames { IsAdjoint, IsSimplyConnected, numFlags }
 Names describing the bits of the bitset d_status. More...
 
typedef BitSet< numFlagsStatus
 

Private Member Functions

void fillStatus ()
 

Private Attributes

size_t d_rank
 Rank of the root datum. More...
 
WeightList d_roots
 Full list of roots. More...
 
CoweightList d_coroots
 Full list of coroots. More...
 
WeightList weight_numer
 Fundamental weight numerators. More...
 
CoweightList coweight_numer
 Fundamental coweight numerators. More...
 
CoweightList d_radicalBasis
 Basis for orthogonal to coroots. More...
 
WeightList d_coradicalBasis
 Basis for orthogonal to roots. More...
 
Weight d_2rho
 Sum of the positive roots. More...
 
Coweight d_dual_2rho
 
int Cartan_denom
 Denominator for (co)|weight_numer|. More...
 
Status d_status
 BitSet recording whether the root datum is adjoint/simply connected. More...
 

Detailed Description

Based root datum for a complex reductive group.

What we call a root datum in this program is what is usually called a based root datum, in other words a fixed choice of positive roots is always assumed.

The root datum defines the complex reductive group entirely. It consists of a |RootSystem| that describes the roots and coroots in the lattices they span themselves, and of additional data that correspond to embeddings of these lattices into mutually dual free abelian groups (weight and coweight lattices).

The rank |d_rank| is that of the weight and coweight lattices, the root system itself has rank |semisimpleRank()| which may be smaller. The roots and coroots are stored in compact form in the |RootSystem|, and again as represented in the weight and coweight lattices, for efficiency of retrieval under this form. Also constructed are various useful auxiliary things, like d_twoRho (the sum of the positive roots).

The code is designed to make it preferable always to refer to a root by its number (index in the root system), for which we use the type name |RootNbr|.

Member Typedef Documentation

Member Enumeration Documentation

Names describing the bits of the bitset d_status.

The last enum numFlags is there as a standard programming trick. Its value - in this case 2 - is one-past-the-last meaningful bit, for use by accessors.

Enumerator
IsAdjoint 
IsSimplyConnected 
numFlags 

Constructor & Destructor Documentation

atlas::rootdata::RootDatum::RootDatum ( )
inline
atlas::rootdata::RootDatum::RootDatum ( const PreRootDatum &  prd)
explicit
atlas::rootdata::RootDatum::RootDatum ( const RootDatum rd,
tags::DualTag   
)
atlas::rootdata::RootDatum::RootDatum ( int_Matrix projector,
const RootDatum rd,
tags::DerivedTag   
)
atlas::rootdata::RootDatum::RootDatum ( int_Matrix injector,
const RootDatum rd,
tags::AdjointTag   
)

Member Function Documentation

void atlas::rootdata::RootDatum::act ( const WeylWord &  ww,
Weight lambda 
) const
inline
void atlas::rootdata::RootDatum::act_inverse ( Weight lambda,
const WeylWord &  ww 
) const
inline
WeightList::const_iterator atlas::rootdata::RootDatum::beginCoradical ( ) const
inline
CoweightList::const_iterator atlas::rootdata::RootDatum::beginCoroot ( ) const
inline
WRootIterator atlas::rootdata::RootDatum::beginPosCoroot ( ) const
inline
WRootIterator atlas::rootdata::RootDatum::beginPosRoot ( ) const
inline
CoweightList::const_iterator atlas::rootdata::RootDatum::beginRadical ( ) const
inline
WeightList::const_iterator atlas::rootdata::RootDatum::beginRoot ( ) const
inline
WRootIterator atlas::rootdata::RootDatum::beginSimpleCoroot ( ) const
inline
WRootIterator atlas::rootdata::RootDatum::beginSimpleRoot ( ) const
inline
int atlas::rootdata::RootDatum::cartan ( weyl::Generator  i,
weyl::Generator  j 
) const
inline
template<typename C >
void atlas::rootdata::RootDatum::coreflect ( matrix::Vector< C > &  co_lambda,
RootNbr  alpha 
) const
inline
template<typename C >
matrix::Vector<C> atlas::rootdata::RootDatum::coreflection ( matrix::Vector< C >  co_lambda,
RootNbr  alpha 
) const
inline
const Coweight& atlas::rootdata::RootDatum::coroot ( RootNbr  i) const
inline
RootNbr atlas::rootdata::RootDatum::coroot_index ( const Root r) const
inline
void atlas::rootdata::RootDatum::dual_act ( Coweight ell,
const WeylWord &  ww 
) const
inline
Weight atlas::rootdata::RootDatum::dual_image_by ( Coweight  ell,
const WeylWord &  ww 
) const
inline
const Coweight& atlas::rootdata::RootDatum::dual_twoRho ( ) const
inline
Coweight atlas::rootdata::RootDatum::dual_twoRho ( const RootNbrList rl) const
Coweight atlas::rootdata::RootDatum::dual_twoRho ( const RootNbrSet rs) const
WeightList::const_iterator atlas::rootdata::RootDatum::endCoradical ( ) const
inline
CoweightList::const_iterator atlas::rootdata::RootDatum::endCoroot ( ) const
inline
WRootIterator atlas::rootdata::RootDatum::endPosCoroot ( ) const
inline
WRootIterator atlas::rootdata::RootDatum::endPosRoot ( ) const
inline
CoweightList::const_iterator atlas::rootdata::RootDatum::endRadical ( ) const
inline
WeightList::const_iterator atlas::rootdata::RootDatum::endRoot ( ) const
inline
WRootIterator atlas::rootdata::RootDatum::endSimpleCoroot ( ) const
inline
WRootIterator atlas::rootdata::RootDatum::endSimpleRoot ( ) const
inline
void atlas::rootdata::RootDatum::fillStatus ( )
private
RatWeight atlas::rootdata::RootDatum::fundamental_coweight ( weyl::Generator  i) const
RatWeight atlas::rootdata::RootDatum::fundamental_weight ( weyl::Generator  i) const
Weight atlas::rootdata::RootDatum::image_by ( const WeylWord &  ww,
Weight  lambda 
) const
inline
Weight atlas::rootdata::RootDatum::image_by_inverse ( Weight  lambda,
const WeylWord &  ww 
) const
inline
int_Vector atlas::rootdata::RootDatum::inSimpleCoroots ( RootNbr  alpha) const
inline
int_Vector atlas::rootdata::RootDatum::inSimpleRoots ( RootNbr  alpha) const
inline
bool atlas::rootdata::RootDatum::isAdjoint ( ) const
inline

Tells whether the rootdatum is the rootdatum of an adjoint group.

NOTE: we define a reductive group to be adjoint if its center is connected. An equivalent condition is that the derived group of the dual group is simply connected.

bool atlas::rootdata::RootDatum::isOrthogonal ( const Weight v,
RootNbr  j 
) const
inline
bool atlas::rootdata::RootDatum::isRoot ( const Weight v) const
inline
bool atlas::rootdata::RootDatum::isSemisimple ( ) const
inline
bool atlas::rootdata::RootDatum::isSimplyConnected ( ) const
inline

Tells whether the rootdatum is the rootdatum of a simply connected group.

NOTE: this is the dual condition to being adjoint: it means that the derived group is simply connected. An equivalent condition is that the center of the dual group is connected.

WeightInvolution atlas::rootdata::RootDatum::matrix ( const WeylWord &  ww) const

Writes in q the matrix represented by ww.

NOTE: not intended for heavy use. If that were the case, it would be better to use the decomposition of ww into pieces, and multiply those together. However, that would be for the InnerClass to do, as it is it that has access to both the Weyl group and the root datum.

const Coweight& atlas::rootdata::RootDatum::posCoroot ( size_t  i) const
inline
const Weight& atlas::rootdata::RootDatum::posRoot ( size_t  i) const
inline
size_t atlas::rootdata::RootDatum::rank ( ) const
inline
template<typename C >
void atlas::rootdata::RootDatum::reflect ( RootNbr  alpha,
matrix::Vector< C > &  lambda 
) const
inline
void atlas::rootdata::RootDatum::reflect ( RootNbr  alpha,
LatticeMatrix M 
) const
void atlas::rootdata::RootDatum::reflect ( LatticeMatrix M,
RootNbr  alpha 
) const
template<typename C >
matrix::Vector<C> atlas::rootdata::RootDatum::reflection ( matrix::Vector< C >  lambda,
RootNbr  alpha 
) const
inline
WeylWord atlas::rootdata::RootDatum::reflectionWord ( RootNbr  r) const
const Weight& atlas::rootdata::RootDatum::root ( RootNbr  i) const
inline
RootNbr atlas::rootdata::RootDatum::root_index ( const Root r) const
inline
WeightInvolution atlas::rootdata::RootDatum::root_reflection ( RootNbr  alpha) const

Returns the reflection for root #alpha.

NOTE: this is not intended for heavy use. If that is envisioned, it would be better to construct the matrices once and for all and return const references.

const RootSystem& atlas::rootdata::RootDatum::root_system ( ) const
inline
Permutation atlas::rootdata::RootDatum::rootPermutation ( const WeightInvolution q) const

Returns the permutation of the roots induced by |q|.

Precondition: |q| permutes the roots;

int atlas::rootdata::RootDatum::scalarProduct ( const Weight v,
RootNbr  j 
) const
inline
size_t atlas::rootdata::RootDatum::semisimpleRank ( ) const
inline
template<typename C >
void atlas::rootdata::RootDatum::simple_coreflect ( matrix::Vector< C > &  v,
weyl::Generator  i 
) const
inline
template<typename C >
matrix::Vector<C> atlas::rootdata::RootDatum::simple_coreflection ( matrix::Vector< C >  ell,
weyl::Generator  i 
) const
inline
template<typename C >
void atlas::rootdata::RootDatum::simple_reflect ( weyl::Generator  i,
matrix::Vector< C > &  v 
) const
inline
void atlas::rootdata::RootDatum::simple_reflect ( weyl::Generator  i,
LatticeMatrix M 
) const
inline
void atlas::rootdata::RootDatum::simple_reflect ( LatticeMatrix M,
weyl::Generator  i 
) const
inline
template<typename C >
matrix::Vector<C> atlas::rootdata::RootDatum::simple_reflection ( weyl::Generator  i,
matrix::Vector< C >  lambda 
) const
inline
WeightInvolution atlas::rootdata::RootDatum::simple_reflection ( weyl::Generator  i) const
inline
const Coweight& atlas::rootdata::RootDatum::simpleCoroot ( weyl::Generator  i) const
inline
const Weight& atlas::rootdata::RootDatum::simpleRoot ( weyl::Generator  i) const
inline
RootDatum atlas::rootdata::RootDatum::sub_datum ( const RootNbrList generators) const
void atlas::rootdata::RootDatum::swap ( RootDatum other)
WeylWord atlas::rootdata::RootDatum::to_dominant ( Weight  v) const

Returns a reduced expression of the shortest |w| making |w.v| dominant.

Algorithm: the greedy algorithm – if v is not positive, there is a simple coroot alpha^v such that <v,alpha^v> is < 0; then s_alpha.v takes v closer to the dominant chamber.

const Weight& atlas::rootdata::RootDatum::twoRho ( ) const
inline
Weight atlas::rootdata::RootDatum::twoRho ( const RootNbrList rl) const

Returns the sum of the positive roots in rl.

Precondition: rl holds the roots in a sub-rootsystem of the root system of rd;

Weight atlas::rootdata::RootDatum::twoRho ( const RootNbrSet rs) const

Returns the sum of the positive roots in rs.

Precondition: rs holds the roots in a sub-rootsystem of the root system of rd;

WeylWord atlas::rootdata::RootDatum::word_of_inverse_matrix ( const WeightInvolution q) const

Returns the expression of $q^{-1}$ as a product of simple reflections.

Precondition: $q$ gives the action on the weight lattice of some Weyl group element

Algorithm: apply $q$ to |twoRho|, then use |toPositive| to find a Weyl word making it dominant again, which by assumption expresses $q^{-1}$.

Member Data Documentation

int atlas::rootdata::RootDatum::Cartan_denom
private

Denominator for (co)|weight_numer|.

CoweightList atlas::rootdata::RootDatum::coweight_numer
private

Fundamental coweight numerators.

Weight atlas::rootdata::RootDatum::d_2rho
private

Sum of the positive roots.

WeightList atlas::rootdata::RootDatum::d_coradicalBasis
private

Basis for orthogonal to roots.

CoweightList atlas::rootdata::RootDatum::d_coroots
private

Full list of coroots.

Coweight atlas::rootdata::RootDatum::d_dual_2rho
private
CoweightList atlas::rootdata::RootDatum::d_radicalBasis
private

Basis for orthogonal to coroots.

size_t atlas::rootdata::RootDatum::d_rank
private

Rank of the root datum.

WeightList atlas::rootdata::RootDatum::d_roots
private

Full list of roots.

Status atlas::rootdata::RootDatum::d_status
private

BitSet recording whether the root datum is adjoint/simply connected.

"Adjoint" here means that the center of the complex group determined by the root datum is connected. "Simply connected" means that the derived group of that complex group is simply connected. These two properties are exchanged by passage to the dual root datum.

WeightList atlas::rootdata::RootDatum::weight_numer
private

Fundamental weight numerators.


The documentation for this class was generated from the following files: