StripTopology

Macros

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
#ifndef Geometry_CommonTopologies_StripTopology_H
#define Geometry_CommonTopologies_StripTopology_H

#include "Geometry/CommonTopologies/interface/Topology.h"

/** Interface for all strip topologies.
 *  Extends the Topology interface with methods relevant for
 *  strip or wire detectors.
 */

class StripTopology : public Topology {
public:
  ~StripTopology() override {}

  // GF: I hate the stupid hiding feature of C++, see
  // http://www.parashift.com/c%2B%2B-faq-lite/strange-inheritance.html#faq-23.9
  using Topology::localPosition;
  virtual LocalPoint localPosition(float strip) const = 0;
  /// conversion taking also the predicted track state
  virtual LocalPoint localPosition(float strip, const Topology::LocalTrackPred& /*trkPred*/) const {
    return localPosition(strip);
  }
  virtual LocalError localError(float strip, float stripErr2) const = 0;

  /// conversion taking also the angle from the predicted track state
  virtual LocalError localError(float strip, float stripErr2, const Topology::LocalTrackPred& /*trkPred*/) const {
    return localError(strip, stripErr2);
  }
  using Topology::localError;  // see comment about hiding an C++ 'using' feature above
  virtual float strip(const LocalPoint&) const = 0;

  /// conversion taking also the angle from the track state (LocalTrajectoryParameters)
  virtual float strip(const LocalPoint& lp, const Topology::LocalTrackAngles& /*ltp*/) const { return strip(lp); }

  // the number of strip span by the segment between the two points..
  virtual float coveredStrips(const LocalPoint& lp1, const LocalPoint& lp2) const {
    return (measurementPosition(lp1) - measurementPosition(lp2)).x();
  }

  virtual float pitch() const = 0;
  virtual float localPitch(const LocalPoint&) const = 0;

  /// conversion taking also the angle from the track state (LocalTrajectoryParameters)
  virtual float localPitch(const LocalPoint& lp, const Topology::LocalTrackAngles& /*ltp*/) const {
    return localPitch(lp);
  }
  virtual float stripAngle(float strip) const = 0;

  virtual int nstrips() const = 0;

  virtual float stripLength() const = 0;
  virtual float localStripLength(const LocalPoint& aLP) const = 0;

  /// conversion taking also the angle from the track state (LocalTrajectoryParameters)
  virtual float localStripLength(const LocalPoint& lp, const Topology::LocalTrackAngles& /*ltp*/) const {
    return localStripLength(lp);
  }
};

#endif