1 #include "EvtGenBase/EvtPatches.hh"
2 /*******************************************************************************
3 * Project: BaBar detector at the SLAC PEP-II B-factory
5 * File: $Id: EvtCyclic3.cpp,v 1.3 2009-03-16 15:55:13 robbep Exp $
6 * Author: Alexei Dvoretskii, dvoretsk@slac.stanford.edu, 2001-2002
8 * Copyright (C) 2002 Caltech
9 *******************************************************************************/
14 #include "EvtGenBase/EvtCyclic3.hh"
15 #include "EvtGenBase/EvtPatches.hh"
18 using namespace EvtCyclic3;
21 Index EvtCyclic3::permute(Index i, Perm p)
23 if(p == ABC) return i;
26 else if(i == B) return A;
27 else if(i == C) return B;
31 else if(i == B) return A;
32 else if(i == C) return B;
36 else if(i == B) return C;
37 else if(i == C) return A;
41 else if(i == B) return B;
42 else if(i == C) return A;
46 else if(i == B) return A;
47 else if(i == C) return C;
51 else if(i == B) return C;
52 else if(i == C) return B;
58 Perm EvtCyclic3::permutation(Index i1,Index i2,Index i3)
60 assert(i1 != i2 && i2 != i3 && i3 != i1); _unused( i3 );
61 if(i1 == A) return (i2 == B) ? ABC : ACB;
62 if(i1 == B) return (i2 == C) ? BCA : BAC;
63 if(i1 == C) return (i2 == A) ? CAB : CBA;
69 Perm EvtCyclic3::permute(Perm i,Perm p)
71 Index i1 = permute(permute(A,i),p);
72 Index i2 = permute(permute(B,i),p);
73 Index i3 = permute(permute(C,i),p);
75 return permutation(i1,i2,i3);
78 Pair EvtCyclic3::permute(Pair i, Perm p)
80 Index i1 = permute(first(i),p);
81 Index i2 = permute(second(i),p);
82 return combine(i1,i2);
86 Pair EvtCyclic3::i2pair(int i)
94 assert(0); return AB; // should never get here
99 Index EvtCyclic3::prev(Index i)
106 assert(0); return A; // should never get here
110 Index EvtCyclic3::next(Index i)
117 assert(0); return A; // should never get here
121 Index EvtCyclic3::other(Index i, Index j)
144 assert(0); return A; // should never get here
148 // Index-to-pair conversions
150 Pair EvtCyclic3::other(Index i)
157 assert(0); return AB; // should never get here
161 Pair EvtCyclic3::combine(Index i, Index j)
163 return other(other(i,j));
167 // Pair-to-pair conversions
169 Pair EvtCyclic3::prev(Pair i)
172 if(i == BC) ret = AB;
174 if(i == CA) ret = BC;
179 Pair EvtCyclic3::next(Pair i)
182 if(i == BC) ret = CA;
184 if(i == CA) ret = AB;
189 Pair EvtCyclic3::other(Pair i, Pair j)
191 return combine(other(i),other(j));
195 // Pair-to-index conversions
198 Index EvtCyclic3::first(Pair i)
205 assert(0); return A; // should never get here
209 Index EvtCyclic3::second(Pair i)
216 assert(0); return A; // should never get here
220 Index EvtCyclic3::other(Pair i)
227 assert(0); return A; // should never get here
231 Index EvtCyclic3::common(Pair i, Pair j)
233 return other(other(i,j));
237 Index EvtCyclic3::strToIndex(const char* str)
239 if(strcmp(str,"A")) return A;
240 else if(strcmp(str,"B")) return B;
241 else if(strcmp(str,"C")) return C;
242 else assert(0); return A;
246 Pair EvtCyclic3::strToPair(const char* str)
248 if(!strcmp(str,"AB") || !strcmp(str,"BA")) return AB;
249 else if(!strcmp(str,"BC") || !strcmp(str,"CB")) return BC;
250 else if(!strcmp(str,"CA") || !strcmp(str,"AC")) return CA;
251 else assert(0); return AB;
255 const char* EvtCyclic3::c_str(Index i)
262 assert(0); return 0; // sngh
266 const char* EvtCyclic3::c_str(Pair i)
269 case BC: return "BC";
270 case CA: return "CA";
271 case AB: return "AB";
273 assert(0); return 0; // sngh
276 const char* EvtCyclic3::c_str(Perm p)
278 if(p == ABC) return "ABC";
279 if(p == BCA) return "BCA";
280 if(p == CAB) return "CAB";
281 if(p == CBA) return "CBA";
282 if(p == BAC) return "BAC";
283 if(p == ACB) return "ACB";
288 char* EvtCyclic3::append(const char* str, EvtCyclic3::Index i)
290 // str + null + 1 character
291 char* s = new char[strlen(str)+2];
298 char* EvtCyclic3::append(const char* str, EvtCyclic3::Pair i)
300 // str + null + 2 characters
301 char* s = new char[strlen(str)+3];
309 ostream& operator<<(ostream& os, EvtCyclic3::Index i)
312 case A: { os << "A"; return os; }
313 case B: { os << "B"; return os; }
314 case C: { os << "C"; return os; }
316 assert(0); return os; // should never get here
320 ostream& operator<<(ostream& os, EvtCyclic3::Pair i)
323 case BC: { os << "BC"; return os; }
324 case CA: { os << "CA"; return os; }
325 case AB: { os << "AB"; return os; }
327 assert(0); return os; // should never get here