46 const RootSystem& rs);
85 : root(v), dual(), descents(), ascents() {}
93 std::vector<root_info>
ri;
102 {
return Cmat[i*rk+j]; }
104 {
return Cmat[i*rk+j]; }
120 size_t rank()
const {
return rk; }
122 unsigned long numRoots()
const {
return 2*numPosRoots(); }
126 {
return Cartan_entry(i,j); };
143 int colevel(
RootNbr alpha)
const;
146 template <
typename I,
typename O>
147 void toRootBasis(I, I, O)
const;
149 template <
typename I,
typename O>
150 void toRootBasis(I, I, O,
const RootNbrList&)
const;
152 template <
typename I,
typename O>
153 void toSimpleWeights(I, I, O,
const RootNbrList&)
const;
156 {
return alpha-numPosRoots()<rk; }
159 {
return alpha>=numPosRoots(); }
162 {
return alpha<numPosRoots(); }
165 { assert(i<rk);
return numPosRoots()+i; }
168 { assert(alpha<numPosRoots());
return numPosRoots()+alpha; }
171 { assert(is_simple_root(alpha));
return alpha-numPosRoots(); }
174 { assert(is_posroot(alpha));
return alpha-numPosRoots(); }
177 {
return numRoots()-1-alpha; }
180 {
return is_posroot(alpha) ? alpha-numPosRoots() : numPosRoots()-1-alpha; }
192 {
return root_perm[i]; }
197 return is_posroot(alpha) ? ri[a].descents : ri[a].ascents;
202 return is_posroot(alpha) ? ri[a].ascents : ri[a].descents;
206 {
return descent_set(alpha).firstBit(); }
209 {
return root_perm[i][alpha]<alpha; }
212 {
return root_perm[i][alpha]>alpha; }
215 {
return simple_root_permutation(i)[r]; }
218 { r=simple_root_permutation(i)[r]; }
223 simple_reflect_root(ww[i],r);
230 simple_reflect_root(ww[i],r);
236 {
return root_perm[rt_abs(alpha)]; }
239 {
return root_permutation(alpha)[beta]==beta; }
247 Permutation root_permutation(
const Permutation& twist)
const;
250 Permutation extend_to_roots(
const RootNbrList& simple_images)
const;
253 WeylWord reflectionWord(
RootNbr r)
const;
263 {
RootNbr dummy;
return sumIsRoot(alpha,beta,dummy); }
365 size_t rank()
const {
return d_rank; }
371 {
return d_roots.begin(); }
374 {
return d_roots.end(); }
377 {
return d_coroots.begin(); }
380 {
return d_coroots.end(); }
383 {
return d_radicalBasis.begin(); }
386 {
return d_radicalBasis.end(); }
389 {
return d_coradicalBasis.begin(); }
392 {
return d_coradicalBasis.end(); }
396 {
return beginRoot()+numPosRoots(); }
399 {
return beginSimpleRoot()+semisimpleRank(); }
402 {
return beginSimpleRoot(); }
405 {
return endRoot(); }
408 {
return beginCoroot()+numPosRoots(); }
411 {
return beginSimpleCoroot()+semisimpleRank(); }
414 {
return beginSimpleCoroot(); }
417 {
return endCoroot(); }
426 { assert(i<numRoots());
return d_roots[i]; }
429 { assert(i<semisimpleRank());
return *(beginSimpleRoot()+i); }
432 { assert(i<numPosRoots());
return *(beginPosRoot()+i); }
439 { assert(i<numRoots());
return d_coroots[i]; }
442 { assert(i<semisimpleRank());
return *(beginSimpleCoroot()+i); }
445 { assert(i<numPosRoots());
return *(beginPosCoroot()+i); }
482 {
return v.
dot(coroot(j)); }
486 {
return v.
dot(coroot(j))==0; }
489 {
return simpleRoot(i).dot(simpleCoroot(j)); }
494 { lambda.
subtract(
root(alpha).begin(),coroot(alpha).dot(lambda)); }
498 { co_lambda.
subtract(coroot(alpha).begin(),
root(alpha).dot(co_lambda)); }
507 { reflect(alpha,lambda);
return lambda; }
511 { coreflect(co_lambda,alpha);
return co_lambda; }
515 { reflect(simpleRootNbr(i),v); }
518 { coreflect(v,simpleRootNbr(i)); }
521 { reflect(simpleRootNbr(i),M); }
523 { reflect(M,simpleRootNbr(i)); }
529 { simple_reflect(i,lambda);
return lambda; }
533 { simple_coreflect(ell,i);
return ell; }
539 simple_reflect(ww[i],lambda);
542 { act(ww,lambda);
return lambda; }
548 simple_reflect(ww[i],lambda);
552 { act_inverse(lambda,ww);
return lambda; }
555 void dual_act_inverse(
const WeylWord& ww,
Coweight& ell)
const 558 simple_coreflect(ell,ww[i]);
560 Weight dual_image_by_inverse(
const WeylWord& ww,
Weight lambda)
const 561 { dual_act_inverse(ww,lambda);
return lambda; }
568 simple_coreflect(ell,ww[i]);
571 { dual_act(ell,ww);
return ell; }
578 {
return root_reflection(simpleRootNbr(i)); }
582 WeylWord reflectionWord(
RootNbr r)
const;
matrix::Vector< C > reflection(matrix::Vector< C > lambda, RootNbr alpha) const
Definition: rootdata.h:506
root_info(const Byte_vector &v)
Definition: rootdata.h:84
signed char byte
Definition: rootdata.h:77
Byte_vector & root(RootNbr i)
Definition: rootdata.h:105
WeightInvolution refl_prod(const RootNbrSet &rset, const RootDatum &rd)
Definition: rootdata.cpp:1204
size_t semisimpleRank() const
Definition: rootdata.h:366
mod_pointer root
Definition: common.c:127
C1 dot(const Vector< C1 > &v) const
Definition: matrix.cpp:147
RatCoweight rho_check(const RootDatum &rd)
Definition: rootdata.cpp:1078
WeightList d_roots
Full list of roots.
Definition: rootdata.h:318
bool isOrthogonal(RootNbr alpha, RootNbr beta) const
Definition: rootdata.h:238
const Byte_vector & coroot(RootNbr i) const
Definition: rootdata.h:108
WRootIterator beginPosCoroot() const
Definition: rootdata.h:413
Weight image_by(const WeylWord &ww, Weight lambda) const
Definition: rootdata.h:541
WeightList::const_iterator beginCoradical() const
Definition: rootdata.h:388
BitSet< constants::RANK_MAX > RankFlags
Definition: Atlas.h:60
LieType Lie_type(const int_Matrix &cm)
Definition: dynkin.cpp:394
WeylWord conjugate_to_simple(const RootSystem &rs, RootNbr &alpha)
Definition: rootdata.cpp:1182
bool isSemisimple() const
Definition: rootdata.h:423
void act_inverse(Weight &lambda, const WeylWord &ww) const
Definition: rootdata.h:545
std::vector< Rational > RationalList
Definition: Atlas.h:74
void act(const WeylWord &ww, Weight &lambda) const
Definition: rootdata.h:536
RootNbr simple_reflected_root(weyl::Generator i, RootNbr r) const
Definition: rootdata.h:214
unsigned long numPosRoots() const
Definition: rootdata.h:121
CoweightList d_radicalBasis
Basis for orthogonal to coroots.
Definition: rootdata.h:322
int Cartan_denom
Denominator for (co)|weight_numer|.
Definition: rootdata.h:331
const byte & Cartan_entry(weyl::Generator i, weyl::Generator j) const
Definition: rootdata.h:103
WeightList d_coradicalBasis
Basis for orthogonal to roots.
Definition: rootdata.h:323
void swap(simple_list< T, Alloc > &x, simple_list< T, Alloc > &y)
Definition: sl_list.h:674
void simple_reflect(weyl::Generator i, LatticeMatrix &M) const
Definition: rootdata.h:520
Weight dual_image_by(Coweight ell, const WeylWord &ww) const
Definition: rootdata.h:570
const Permutation & simple_root_permutation(weyl::Generator i) const
Definition: rootdata.h:191
int_Vector two_rho_in_simple_roots
Definition: rootdata.h:95
Byte_vector & coroot(RootNbr i)
Definition: rootdata.h:106
Vector & subtract(I b, C c)
Definition: matrix.h:84
RootNbr simpleRootNbr(weyl::Generator i) const
Definition: rootdata.h:164
void simple_coreflect(matrix::Vector< C > &v, weyl::Generator i) const
Definition: rootdata.h:517
RootDatum integrality_datum(const RootDatum &rd, const RatWeight &gamma)
Definition: rootdata.cpp:1213
const Weight & simpleRoot(weyl::Generator i) const
Definition: rootdata.h:428
unsigned int level
Definition: Atlas.h:404
WeylWord wrt_distinguished(const RootSystem &rs, RootNbrList &Delta)
Definition: rootdata.cpp:1149
RootNbr rt_abs(RootNbr alpha) const
Definition: rootdata.h:179
Weight image_by_inverse(Weight lambda, const WeylWord &ww) const
Definition: rootdata.h:551
Status d_status
BitSet recording whether the root datum is adjoint/simply connected.
Definition: rootdata.h:340
WeightList::const_iterator endCoradical() const
Definition: rootdata.h:391
WRootIterator beginSimpleCoroot() const
Definition: rootdata.h:407
int_Matrix CoweightInvolution
Definition: Atlas.h:160
bool isOrthogonal(const Weight &v, RootNbr j) const
Definition: rootdata.h:485
RootNbr permuted_root(RootNbr r, const WeylWord &ww) const
Definition: rootdata.h:227
WeightInvolution simple_reflection(weyl::Generator i) const
Definition: rootdata.h:577
unsigned int integrality_rank(const RootDatum &rd, const RatWeight &gamma)
Definition: rootdata.cpp:1225
RankFlags descent_set(RootNbr alpha) const
Definition: rootdata.h:194
byte & Cartan_entry(weyl::Generator i, weyl::Generator j)
Definition: rootdata.h:101
const Coweight & simpleCoroot(weyl::Generator i) const
Definition: rootdata.h:441
WRootIterator endPosRoot() const
Definition: rootdata.h:404
WRootIterator endPosCoroot() const
Definition: rootdata.h:416
size_t rank() const
Definition: rootdata.h:365
Definition: rootdata.h:75
const Weight & posRoot(size_t i) const
Definition: rootdata.h:431
int_Vector inSimpleRoots(RootNbr alpha) const
Definition: rootdata.h:585
WRootIterator endSimpleCoroot() const
Definition: rootdata.h:410
BitSet< numFlags > Status
Definition: rootdata.h:311
RootNbr rootMinus(RootNbr alpha) const
Definition: rootdata.h:176
Based root datum for a complex reductive group.
Definition: rootdata.h:296
Byte_vector root
Definition: rootdata.h:81
std::vector< Weight > WeightList
Definition: Atlas.h:162
WeightList weight_numer
Fundamental weight numerators.
Definition: rootdata.h:320
Coweight d_dual_2rho
Definition: rootdata.h:329
CoweightList d_coroots
Full list of coroots.
Definition: rootdata.h:319
CoweightList::const_iterator beginCoroot() const
Definition: rootdata.h:376
bool is_simple_root(RootNbr alpha) const
Definition: rootdata.h:155
CoweightList::const_iterator beginRadical() const
Definition: rootdata.h:382
size_t find_index(const std::vector< T > &v, const T &x)
Definition: permutations.h:31
matrix::Vector< byte > Byte_vector
Definition: rootdata.h:78
void make_positive(const RootSystem &rs, RootNbr &alpha)
Definition: rootdata.cpp:1174
const Coweight & posCoroot(size_t i) const
Definition: rootdata.h:444
RootDatum()
Definition: rootdata.h:347
bool is_ascent(weyl::Generator i, RootNbr alpha) const
Definition: rootdata.h:211
RatWeight rho(const RootDatum &rd)
Definition: rootdata.cpp:1076
const Coweight & dual_twoRho() const
Definition: rootdata.h:478
void generators(GrpNbrList &gen, const bitmap::BitMap &B, const FiniteAbelianGroup &A)
Definition: abelian.cpp:550
bool is_posroot(RootNbr alpha) const
Definition: rootdata.h:158
WRootIterator endSimpleRoot() const
Definition: rootdata.h:398
struct subscription_node * sub
Definition: parse_types.h:102
Layout dual(const Layout &lo)
Definition: lietype.cpp:386
bool isAdjoint() const
Tells whether the rootdatum is the rootdatum of an adjoint group.
Definition: rootdata.h:464
matrix::Vector< C > simple_reflection(weyl::Generator i, matrix::Vector< C > lambda) const
Definition: rootdata.h:528
RootNbr posRootIndex(size_t alpha) const
Definition: rootdata.h:173
bool is_negroot(RootNbr alpha) const
Definition: rootdata.h:161
Weight d_2rho
Sum of the positive roots.
Definition: rootdata.h:328
matrix::Vector< C > coreflection(matrix::Vector< C > co_lambda, RootNbr alpha) const
Definition: rootdata.h:510
int scalarProduct(const Weight &v, RootNbr j) const
Definition: rootdata.h:481
bool sumIsRoot(RootNbr alpha, RootNbr beta) const
Definition: rootdata.h:262
WeightList::const_iterator endRoot() const
Definition: rootdata.h:373
bitmap::BitMap RootNbrSet
Definition: Atlas.h:218
WRootIterator beginPosRoot() const
Definition: rootdata.h:401
void reflect(RootNbr alpha, matrix::Vector< C > &lambda) const
Definition: rootdata.h:493
StatusFlagNames
Names describing the bits of the bitset d_status.
Definition: rootdata.h:308
int cartan(weyl::Generator i, weyl::Generator j) const
Definition: rootdata.h:125
void simple_reflect_root(weyl::Generator i, RootNbr &r) const
Definition: rootdata.h:217
int_Matrix WeightInvolution
Definition: Atlas.h:159
const Byte_vector & root(RootNbr i) const
Definition: rootdata.h:107
RationalList integrality_points(const RootDatum &rd, const RatWeight &gamma)
Definition: rootdata.cpp:1237
size_t find_descent(RootNbr alpha) const
Definition: rootdata.h:205
void dual_act(Coweight &ell, const WeylWord &ww) const
Definition: rootdata.h:565
const Permutation & root_permutation(RootNbr alpha) const
Definition: rootdata.h:235
std::vector< root_info > ri
Definition: rootdata.h:93
Byte_vector Cmat
Definition: rootdata.h:91
std::vector< Weight > CoweightList
Definition: Atlas.h:163
CoweightList::const_iterator endRadical() const
Definition: rootdata.h:385
bool is_descent(weyl::Generator i, RootNbr alpha) const
Definition: rootdata.h:208
Definition: rootdata.h:79
RootNbr posRootNbr(size_t alpha) const
Definition: rootdata.h:167
WRootIterator beginSimpleRoot() const
Definition: rootdata.h:395
struct lambda_node * lambda
Definition: parse_types.h:94
bool isRoot(const Weight &v) const
Definition: rootdata.h:420
RootNbrSet makeOrthogonal(const RootNbrSet &o, const RootNbrSet &subsys, const RootSystem &rs)
Returns the elements of |subsys| which are orthogonal to all elements of |o|.
Definition: rootdata.cpp:1108
size_t d_rank
Rank of the root datum.
Definition: rootdata.h:316
void simple_reflect(weyl::Generator i, matrix::Vector< C > &v) const
Definition: rootdata.h:514
void simple_reflect(LatticeMatrix &M, weyl::Generator i) const
Definition: rootdata.h:522
WeightList::const_iterator beginRoot() const
Definition: rootdata.h:370
size_t rank() const
Definition: rootdata.h:120
void coreflect(matrix::Vector< C > &co_lambda, RootNbr alpha) const
Definition: rootdata.h:497
RootNbr simpleRootIndex(size_t alpha) const
Definition: rootdata.h:170
RootNbr coroot_index(const Root &r) const
Definition: rootdata.h:447
RankFlags ascent_set(RootNbr alpha) const
Definition: rootdata.h:199
Class definitions and function declarations for the BitSet class.
Container of a large (more than twice the machine word size) set of bits.
Definition: bitmap.h:52
CoweightList coweight_numer
Fundamental coweight numerators.
Definition: rootdata.h:321
RootNbr permuted_root(const WeylWord &ww, RootNbr r) const
Definition: rootdata.h:220
WeightList::const_iterator WRootIterator
Definition: Atlas.h:212
unsigned short RootNbr
Definition: Atlas.h:216
ratvec::RationalVector< arithmetic::Numer_t > RatCoweight
Definition: Atlas.h:157
const Weight & twoRho() const
Definition: rootdata.h:477
unsigned char Generator
Definition: Atlas.h:226
int cartan(weyl::Generator i, weyl::Generator j) const
Definition: rootdata.h:488
RankFlags descents
Definition: rootdata.h:82
const RootSystem & root_system() const
Definition: rootdata.h:364
matrix::Vector< C > simple_coreflection(matrix::Vector< C > ell, weyl::Generator i) const
Definition: rootdata.h:532
std::vector< RootNbr > RootNbrList
Definition: Atlas.h:217
int_Vector inSimpleCoroots(RootNbr alpha) const
Definition: rootdata.h:587
CoweightList::const_iterator endCoroot() const
Definition: rootdata.h:379
bool isSimplyConnected() const
Tells whether the rootdatum is the rootdatum of a simply connected group.
Definition: rootdata.h:474
void toDistinguished(WeightInvolution &q, const RootDatum &rd)
Transforms q, assumed a root datum involution, into a based root datum involution w...
Definition: rootdata.cpp:1138
unsigned long numRoots() const
Definition: rootdata.h:122
CoweightInvolution dualBasedInvolution(const WeightInvolution &q, const RootDatum &rd)
Definition: rootdata.cpp:1097
const Weight & root(RootNbr i) const
Definition: rootdata.h:425
const Coweight & coroot(RootNbr i) const
Definition: rootdata.h:438
std::vector< Permutation > root_perm
Root permutations induced by reflections in all positive roots.
Definition: rootdata.h:98
ratvec::RationalVector< arithmetic::Numer_t > RatWeight
Definition: Atlas.h:156
size_t rk
Definition: rootdata.h:87
RootNbr root_index(const Root &r) const
Definition: rootdata.h:434
Vertex v
Definition: graph.cpp:116