Program Listing for File LArFlowConstants.cxx

Return to documentation for file (larflow/LArFlowConstants/LArFlowConstants.cxx)

#include "LArFlowConstants.h"

#include <stdexcept>

namespace larflow {

  const FlowDir_t LArFlowConstants::FlowPlaneMatrix[3][3] = { {kNumFlows, kU2V, kU2Y},
                                                              {kV2U, kNumFlows, kV2Y},
                                                              {kY2U, kY2V, kNumFlows} };

  std::string LArFlowConstants::getFlowName( FlowDir_t dir ) {

    switch (dir) {
    case kU2V:
      return "u2v";
      break;
    case kU2Y:
      return "u2y";
      break;
    case kV2U:
      return "v2u";
      break;
    case kV2Y:
      return "v2y";
      break;
    case kY2U:
      return "y2u";
      break;
    case kY2V:
      return "y2v";
      break;
    case kNumFlows:
      return "allflows";
      break;
    default:
      throw std::runtime_error("invalid flow direction given");
      break;
    }
    return "nevergethere";
  }


  int LArFlowConstants::getOtherPlane( int sourceplane, int targetplane ) {

    switch ( sourceplane ) {
    case 0:
      return ( targetplane==1 ) ? 2 : 1;
      break;
    case 1:
      return ( targetplane==0 ) ? 2 : 0;
      break;
    case 2:
      return ( targetplane==0 ) ? 1 : 0;
      break;
    default:
      char msg[100];
      sprintf( msg, "Unrecognized combination of sourceplane[%d] and targetplane[%d] planes", sourceplane, targetplane );
      throw std::runtime_error( msg );
      break;
    }

    char msg[100];
    sprintf( msg, "Unrecognized combination of sourceplane[%d] and targetplane[%d] planes", sourceplane, targetplane );
    throw std::runtime_error( msg );

  }

  FlowDir_t LArFlowConstants::getFlowDirection( int sourceplane, int targetplane ) {

    if ( sourceplane==targetplane ) {
      throw std::runtime_error("[LArFlowConstants.cxx:getFlowDirection] no flow direction when source and target plane the same");
    }
    if ( sourceplane<0 || sourceplane>=3 ) {
      throw std::runtime_error("[LArFlowConstants.cxx:getFlowDirection] invalid source plane index");
    }
    if ( targetplane<0 || targetplane>=3 ) {
      throw std::runtime_error("[LArFlowConstants.cxx:getFlowDirection] invalid target plane index");
    }

    return FlowPlaneMatrix[sourceplane][targetplane];
  }

  void LArFlowConstants::getFlowPlanes( FlowDir_t dir, int& sourceplane, int& targetplane ) {
    switch( dir ) {
    case kU2V:
      sourceplane = 0;
      targetplane = 1;
      break;
    case kU2Y:
      sourceplane = 0;
      targetplane = 2;
      break;
    case kV2U:
      sourceplane = 1;
      targetplane = 0;
      break;
    case kV2Y:
      sourceplane = 1;
      targetplane = 2;
      break;
    case kY2U:
      sourceplane = 2;
      targetplane = 0;
      break;
    case kY2V:
      sourceplane = 2;
      targetplane = 1;
      break;
    default:
      throw std::runtime_error("[LArFlowConstants.cxx:getFlowPlanes] invalid flow direction");
      break;
    }

  }

}