Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
#include "FastSimulation/CaloGeometryTools/interface/CaloDirectionOperations.h"

CaloDirection CaloDirectionOperations::add2d(const CaloDirection& dir1, const CaloDirection& dir2) {
  //  unsigned d1=Side(dir1);
  //  unsigned d2=Side(dir2);
  constexpr CaloDirection tab[4][4] = {{NORTH, NORTHEAST, NONE, NORTHWEST},
                                       {NORTHEAST, EAST, SOUTHEAST, NONE},
                                       {NONE, SOUTHEAST, SOUTH, SOUTHWEST},
                                       {NORTHWEST, NONE, SOUTHWEST, WEST}};
  return tab[Side(dir1)][Side(dir2)];
}

CaloDirection CaloDirectionOperations::Side(unsigned i) {
  constexpr CaloDirection sides[6] = {NORTH, EAST, SOUTH, WEST, UP, DOWN};
  //  if(i<0||i>5) return DOWN;
  return sides[i];
}

unsigned CaloDirectionOperations::neighbourDirection(const CaloDirection& side) {
  unsigned result;
  switch (side) {
    case NORTH:
      result = 0;
      break;
    case EAST:
      result = 1;
      break;
    case SOUTH:
      result = 2;
      break;
    case WEST:
      result = 3;
      break;
    case NORTHEAST:
      result = 4;
      break;
    case SOUTHEAST:
      result = 5;
      break;
    case SOUTHWEST:
      result = 6;
      break;
    case NORTHWEST:
      result = 7;
      break;
    default:
      result = 999;
  }
  return result;
}

// It should be merged with the previous one. But I am afraid to break something
CaloDirection CaloDirectionOperations::neighbourDirection(unsigned i) {
  constexpr CaloDirection sides[8] = {NORTH, EAST, SOUTH, WEST, NORTHEAST, SOUTHEAST, SOUTHWEST, NORTHWEST};
  //  if(i<0||i>7) return SOUTH;
  return sides[i];
}

unsigned CaloDirectionOperations::Side(const CaloDirection& side) {
  unsigned result;
  switch (side) {
    case NORTH:
      result = 0;
      break;
    case EAST:
      result = 1;
      break;
    case SOUTH:
      result = 2;
      break;
    case WEST:
      result = 3;
      break;
    case UP:
      result = 4;
      break;
    case DOWN:
      result = 5;
      break;
    default:
      result = 999;
  }
  return result;
}

CaloDirection CaloDirectionOperations::oppositeSide(const CaloDirection& side) {
  CaloDirection result;
  switch (side) {
    case UP:
      result = DOWN;
      break;
    case DOWN:
      result = UP;
      break;
    case EAST:
      result = WEST;
      break;
    case WEST:
      result = EAST;
      break;
    case NORTH:
      result = SOUTH;
      break;
    case SOUTH:
      result = NORTH;
      break;
    case NORTHEAST:
      result = SOUTHWEST;
      break;
    case NORTHWEST:
      result = SOUTHEAST;
      break;
    case SOUTHEAST:
      result = NORTHWEST;
      break;
    case SOUTHWEST:
      result = NORTHEAST;
      break;

    default:
      result = NONE;
  }
  return result;
}

unsigned CaloDirectionOperations::oppositeDirection(unsigned iside) {
  constexpr unsigned od[8] = {2, 3, 0, 1, 6, 7, 4, 5};
  return od[iside];
  //  if(iside>=0&&iside<8) return od[iside];
  //  return 999;
}