StRoot  1
EvtCyclic3.hh
1 /*******************************************************************************
2  * Project: BaBar detector at the SLAC PEP-II B-factory
3  * Package: EvtGenBase
4  * File: \$Id: EvtCyclic3.hh,v 1.1 2016/09/23 18:37:29 jwebb Exp \$
5  * Author: Alexei Dvoretskii, dvoretsk@slac.stanford.edu, 2001-2002
6  *
7  * Copyright (C) 2002 Caltech
8  *******************************************************************************/
9
10 // Cyclic permutations of three indices A,B,C and their parings
11
12 #ifndef EVT_CYCLIC3_HH
13 #define EVT_CYCLIC3_HH
14
15 #include <iosfwd>
16
17 namespace EvtCyclic3 {
18
19
20  enum Index {A=0,B=1,C=2};
21  enum Pair {BC=0,CB=BC,CA=1,AC=CA,AB=2,BA=AB};
22  enum Perm {ABC=0,BCA=1,CAB=2,CBA=3,BAC=4,ACB=5};
23
24  // Permutations (multiplication is not transitive)
25
26  Index permute(Index i, Perm p);
27  Perm permutation(Index i1,Index i2,Index i3);
28  Perm permute(Perm i, Perm p);
29  Pair permute(Pair i, Perm p);
30
31  Pair i2pair(int i);
32
33  // Index-to-index
34
35  Index prev(Index i);
36  Index next(Index i) ;
37  Index other(Index i, Index j);
38
39  // Index-to-pair
40
41  Pair other(Index i);
42  Pair combine(Index i, Index j);
43
44
45  // Pair-to-pair conversions
46
47  Pair prev(Pair i);
48  Pair next(Pair i);
49  Pair other(Pair i, Pair j);
50
51  // Pair-to-index conversions
52
53
54  Index first(Pair i);
55  Index second(Pair i);
56  Index other(Pair i) ;
57  Index common(Pair i, Pair j);
58
59  // String to Index, Pair
60
61  Index strToIndex(const char* str);
62  Pair strToPair(const char* str);
63
64  // To string conversions
65
66  const char* c_str(Index i);
67  const char* c_str(Pair i);
68  const char* c_str(Perm i);
69
70  // Useful name strings
71
72  char* append(const char* str, EvtCyclic3::Index i);
73  char* append(const char* str, EvtCyclic3::Pair i);
74
75 }
76
77 //where should these go?
78 //ostream& operator<<(ostream&, EvtCyclic3::Index);
79 //ostream& operator<<(ostream&, EvtCyclic3::Pair);
80
81 #endif