netconfcentral logo

ieee1906-dot1-2015@2016-12-20



  module ieee1906-dot1-2015 {

    yang-version 1;

    namespace
      "urn:ieee:std:1906.1:yang:ieee1906-dot1";

    prefix ieee1906;

    import ietf-interfaces {
      prefix if;
    }
    import iana-if-type {
      prefix ianaift;
    }

    organization
      "P1906.1.1/D1.0 Draft Standard Data Model for Nanoscale Communication Systems Working Group";

    contact
      "IEEE P1906.1.1 Working Group
			Chair: Stephen F. Bush <bushsf@research.ge.com>
			Secretary: Guillaume Mantelet <guillaume.mantelet@ge.com>";

    description
      "This experimental YANG module is an individual contribution, and
				does not represent a formally sanctioned YANG module by IEEE.
				Therefore, this YANG module will change in incompatible ways
				from its current revision to the formally published YANG
				module for IEEE 1906.1.1 Standard Data Model for Nanoscale 
				Communication Systems.
				
				This is the YANG model for the IEEE 1906.1-2015 - Recommended Practice for Nanoscale and Molecular Communication Framework.
				There are several objectives for this model. 
				(1) From an implementation standpoint, it provides a common management and configuration model for nanoscale communication devices compliant to IEEE 1906.1-2015.
				(2) From a design standpoint, it embodies the requirements to be compliant with IEEE 1906.1-2015. Thus, it serves to help inform the design on any nanoscale communication system. 
				(3) From an archival perspective, it serves to document nanoscale communication systems. By populating this YANG model for specific models and use-cases, it serves to describe the nanoscale communication system. This can be useful for keeping repositories of research into such systems.
				(4) Finally, it exercises the ability of the YANG modeling language to handle fundamental physics. Because nanoscale communication exists on a scale that necessarily relies directly upon underlying physical properties and interactions, it begins to create a direct bridge between communications and physics.
				(5) TBD: The YANG model can serve as input and monitoring for ns-3 simulation and Mathematica/MATLAB models. Features/deviations can be added for these if necessary.
				(6) TBD: The YANG model can log and track message carriers.
				(7) TBD: Notifications from the simulation/math tools can be defined.
				(8) TBD: The YANG model can serve as a self-documenting archival tool for experimental results.
	   
				TODO:
				1. Explain to integrate with standard IETF YANG models
				2. Demonstrate using this module with use-cases
				3. Write companion paper";

    revision "2016-12-20" {
      description "Initial version.";
      reference
        "[1] 'IEEE Recommended Practice for Nanoscale and Molecular Communication Framework,' in IEEE Std 1906.1-2015 , vol., no., pp.1-64,  Jan. 11 2016 doi: 10.1109/IEEESTD.2016.7378262
        
        [2] S. F. Bush, 'Active network architecture' in Nanoscale Communication Networks, pp. 209-217, 2010, Artech House.
        
        [3] S. F. Bush, J. L. Paluh, G. Piro, V. Rao, R. V. Prasad and A. Eckford, 'Defining Communication at the Bottom,' in IEEE Transactions on Molecular, Biological and Multi-Scale Communications, vol. 1, no. 1, pp. 90-96, March 2015.
        doi: 10.1109/TMBMC.2015.2465513";

    }


    typedef transport {
      type enumeration {
        enum "brownian" {
          value 0;
          description
            "Brownian motion transport, which includes Ca signaling and most fluid and chemical transport. This also includes microfluidic transport.";
        }
        enum "electromagnetic" {
          value 1;
          description
            "Electronmagnatic wave transport, which includes Terahertz wave.";
        }
        enum "motor" {
          value 2;
          description
            "Molecular motor transport, which includes Kinesin motors.";
        }
        enum "flagellum" {
          value 3;
          description
            "Flagellar transport, which includes any cellular approaches using mechanical flagella.";
        }
        enum "electrical" {
          value 4;
          description
            "Wired electrical, which includes nanotubes.";
        }
        enum "thermal" {
          value 5;
          description
            "Thermal approaches, which includes any form of heat transfer.";
        }
        enum "acoustic" {
          value 6;
          description
            "Acoustical approaches which includes any form of mechanical vibration.";
        }
      }
    }

    typedef modulation-type {
      type enumeration {
        enum "concentration" {
          value 0;
          description
            "Varying concentration.";
        }
        enum "structure" {
          value 1;
          description
            "Varying the type of matter transported.";
        }
        enum "electromagnetic-wave" {
          value 3;
          description
            "Variation of an electromagnetic wave.";
        }
      }
    }

    grouping vector {
      leaf magnitude {
        type decimal64 {
          fraction-digits 10;
        }
        description "The magnitude.";
      }

      leaf direction {
        type decimal64 {
          fraction-digits 10;
          range "0..3.14";
        }
        units "radian";
        description "The direction.";
      }
    }  // grouping vector

    typedef math-package {
      type enumeration {
        enum "MATLAB" {
          value 0;
          description
            "The equation is written in native MATLAB format.";
        }
        enum "Mathematica" {
          value 1;
          description
            "The equation is written in native Mathematica format.";
        }
        enum "Maple" {
          value 2;
          description
            "The equation is written in native Maple format.";
        }
        enum "Octave" {
          value 3;
          description
            "The equation is written in native Octave format.";
        }
      }
    }

    grouping math-expression {
      container math-formula {
        leaf expression {
          type string;
          description
            "A mathematical expression.";
        }

        leaf package {
          type math-package;
          description
            "The math package that reads the expression in its native format.";
        }

        leaf version {
          type string;
          description
            "The version of the math package assumed.";
        }
      }  // container math-formula
    }  // grouping math-expression

    grouping vector-field {
      description
        "An equation that describes a vector field.";
      uses math-expression {
        description
          "A mathematical expression that describes a vector field.";
      }

      leaf dimensions {
        type uint32 {
          range "0..3";
        }
        description
          "The number of dimensions of the field.";
      }

      list vectors {
        uses vector;
      }  // list vectors
    }  // grouping vector-field

    typedef motion-type {
      type enumeration {
        enum "active" {
          value 0;
          description
            "The message carrier is self-propelled.";
        }
        enum "passive" {
          value 1;
          description
            "The message carrier is passively carried by the medium.";
        }
      }
    }

    typedef network-type {
      type enumeration {
        enum "active" {
          value 0;
          description
            "Messages are executable code capable of executing as they travel through the network.";
        }
        enum "passive" {
          value 1;
          description
            "Messages are passive bits incapable of executing within the network.";
        }
      }
    }

    typedef length-scale {
      type enumeration {
        enum "planck" {
          value 0;
          description
            "Length scale where concepts of size and distance break down.";
        }
        enum "quantum" {
          value 1;
          description
            "The length scale where properties are related to their de Broglie wavelength.";
        }
        enum "nanoscale" {
          value 2;
          description
            "Nanoscale refers to dimensions of 1 nanometer (nm) to 100 nm as defined in ISO/TS 27687:2008 definition 2.1.";
        }
        enum "microscale" {
          value 3;
          description
            "The transmitter, receiver, and message carrier exist on a length scale that requires magnification to be visible to the human eye and are longer than the nanoscale.";
        }
        enum "macroscale" {
          value 4;
          description
            "The transmitter, receiver, and message carrier exist on a length scale visible, unaided by the human eye, and the speed of light is negligible to communication performance.";
        }
        enum "interplanetary" {
          value 5;
          description
            "Length scale at which the speed of light significantly impacts communication performance and the effects of relativity are negligible";
        }
        enum "relativistic" {
          value 6;
          description
            "Length scale at which relativity impacts communication performance.";
        }
      }
    }

    typedef carrier-form {
      type enumeration {
        enum "particle" {
          value 0;
          description
            "The message carrier is a particle and has mass.";
        }
        enum "wave" {
          value 1;
          description
            "The message carrier is a wave and has energy.";
        }
      }
    }

    typedef mass {
      type decimal64 {
        fraction-digits 10;
      }
    }

    grouping mass-flow-rate {
      leaf m {
        type mass;
        units "kilogram";
        description
          "The mass of the message carrier.";
      }

      leaf V-dot {
        type decimal64 {
          fraction-digits 10;
        }
        units "meter^3 second^-1";
        description
          "The volume flow rate of the message carrier.";
      }

      leaf rho {
        type decimal64 {
          fraction-digits 10;
        }
        units "kilogram meter^-3";
        description
          "The mass density of the fluid";
      }

      leaf v {
        type decimal64 {
          fraction-digits 10;
        }
        units "meter second^-1";
        description
          "The flow velocity of the mass of the message carriers.";
      }

      leaf A {
        type decimal64 {
          fraction-digits 10;
        }
        units "meter^2";
        description
          "The cross-sectional vector area/surface.";
      }

      leaf jm {
        type decimal64 {
          fraction-digits 10;
        }
        units "kilogram second^-1 meter^-2";
        description
          "The mass flux of the message carriers.";
      }
    }  // grouping mass-flow-rate

    grouping langevin-equation {
      leaf m {
        type mass;
        units "kilogram";
        description
          "The mass of the message carrier.";
      }

      leaf x {
        type decimal64 {
          fraction-digits 10;
        }
        units "meter";
        description
          "The position of a message carrier.";
      }

      leaf t {
        type decimal64 {
          fraction-digits 10;
        }
        units "second";
        description "The current time.";
      }

      leaf lambda {
        type decimal64 {
          fraction-digits 10;
        }
        units "kilogram second^-1";
        description
          "The systematic part of the molecular force (field component). The unit is momentum.";
      }

      leaf eta {
        type decimal64 {
          fraction-digits 10;
        }
        units "kilogram meter second^-2";
        description
          "The random component of force (motion component). The unit is a Newton.";
      }
    }  // grouping langevin-equation

    typedef diffusion-coefficient {
      type decimal64 {
        fraction-digits 10;
      }
      units "nanometer^2 second^-1";
      description
        "Diffusivity or diffusion coefficient is a proportionality constant between the molar flux due to molecular diffusion and the gradient in the concentration of the species (or the driving force for diffusion).";
    }

    grouping ficks-1-law {
      leaf J {
        type decimal64 {
          fraction-digits 10;
        }
        units "mole meter^-2 second^-1";
        description
          "The diffusion flux, which is the amount of substance per unit area per unit time, for example (mol/m^2 × s); it measures the amount of substance that will flow through a small area during a small time interval.";
      }

      leaf D {
        type diffusion-coefficient;
        description
          "The diffusion coefficient or mass diffusivity in dimensions of length^2 time^−1, for example (m^2/s).";
      }

      leaf phi {
        type decimal64 {
          fraction-digits 10;
        }
        units "mole meter^-3";
        description
          "For ideal mixtures, this is the concentration in dimensions of amount of substance per unit volume, for example (mol m^-3).";
      }

      leaf x {
        type decimal64 {
          fraction-digits 10;
        }
        units "meter";
        description
          "The position (length), for example, in meters.";
      }
    }  // grouping ficks-1-law

    grouping ficks-2-law {
      uses ficks-1-law;

      leaf t {
        type time;
        units "second";
        description "The current time.";
      }
    }  // grouping ficks-2-law

    typedef size {
      type decimal64 {
        fraction-digits 10;
      }
      units "nanometer";
      description
        "Size along the maximum dimension of a nanoscale object.";
    }

    grouping ieee1906-definition {
      description
        "These are the minimum requirements for a nanoscale communication network and must be present and fully described.";
      container transmitter {
        leaf name {
          type string;
          description
            "A name that clearly describes the transmitter.";
        }
      }  // container transmitter

      container receiver {
        leaf name {
          type string;
          description
            "A name that clearly describes the receiver.";
        }
      }  // container receiver

      container medium {
        leaf name {
          type string;
          description
            "A name that clearly describes the medium.";
        }
      }  // container medium

      container message {
        leaf name {
          type string;
          description
            "A name that clearly describes the message.";
        }
      }  // container message

      container message-carrier {
        leaf name {
          type string;
          description
            "A name that clearly describes the message-carrier.";
        }
      }  // container message-carrier

      container essential-nanoscale-component {
        leaf name {
          type string;
          description
            "A name that clearly describes the nanoscale component that is essential to operation.";
        }
      }  // container essential-nanoscale-component

      container non-classical-physics {
        leaf name {
          type string;
          description
            "A name that clearly describes the nanoscale physics being leveraged.";
        }
      }  // container non-classical-physics
    }  // grouping ieee1906-definition

    typedef sensitivity {
      type decimal64 {
        fraction-digits 10;
        range "0..1";
      }
      units "proportion";
      description
        "Sensitivity (also called the true positive rate, or the recall rate in some fields) measures the proportion of true positives which are correctly identified (e.g., the percentage of Message Carriers addressed to an intended target node that are recognized and accepted by the correct intended target node).";
    }

    typedef specificity {
      type decimal64 {
        fraction-digits 10;
        range "0..1";
      }
      units "proportion";
      description
        "Specificity (sometimes called the true negative rate) measures the proportion of negatives which are correctly identified as such (e.g., the percentage of Message Carriers not addressed to an intended target node that are not accepted by the intended target node)";
    }

    grouping ieee1906-components {
      container ieee1906-perturbation {
        leaf name {
          type string;
          description
            "A name that clearly describes the perturbation component.";
        }

        leaf rate {
          type decimal64 {
            fraction-digits 10;
          }
          units "second^-1";
          description
            "The maximum perturbation rate.";
        }
      }  // container ieee1906-perturbation

      container ieee1906-motion {
        leaf name {
          type string;
          description
            "A name that clearly describes the motion component.";
        }

        leaf motion {
          type transport;
          description
            "The type of transport being leveraged.";
        }
      }  // container ieee1906-motion

      container ieee1906-field {
        leaf name {
          type string;
          description
            "A name that clearly describes the field component, if one exists.";
        }

        uses math-expression {
          description
            "This is the mathematical expression for the field. However, a field component is not required and may not exist.";
        }

        leaf field-type {
          type enumeration {
            enum "internal" {
              value 0;
              description
                "The field component resides within the nanoscale communication system.";
            }
            enum "external" {
              value 1;
              description
                "The field component is external to the nanoscale communication system.";
            }
          }
        }
      }  // container ieee1906-field

      container ieee1906-specificity {
        leaf name {
          type string;
          description
            "A name that clearly describes the specificity component.";
        }

        leaf specificity-value {
          type specificity;
          description
            "The estimated degree of specificity.";
        }
      }  // container ieee1906-specificity
    }  // grouping ieee1906-components

    typedef probability {
      type decimal64 {
        fraction-digits 10;
        range "0..1";
      }
      units "probability";
      description
        "This value represents a probablity with ideal accuracy.";
    }

    typedef percent {
      type decimal64 {
        fraction-digits 10;
        range "0..100";
      }
      units "percent";
      description
        "This value represents a percent.";
    }

    typedef time {
      type decimal64 {
        fraction-digits 10;
      }
      units "nanosecond";
      description
        "This value represents a time duration in nanoseconds with ideal precision and accuracy.";
    }

    typedef volume {
      type decimal64 {
        fraction-digits 10;
      }
      units "nanometer^3";
      description
        "This value represents ideal volume in cubic nanometers.";
    }

    typedef information-measurement {
      type enumeration {
        enum "information-entropy" {
          value 0;
          description
            "Information measured in bits.";
        }
        enum "kolmorogov-complexity" {
          value 1;
          description
            "Information measured in inverse compression ratio.";
        }
      }
    }

    typedef information {
      type decimal64 {
        fraction-digits 10;
      }
      units "bit";
      description
        "Amount of information in bits of information entropy.";
    }

    typedef bandwidth {
      type decimal64 {
        fraction-digits 10;
      }
      units "bit second^-1";
      description
        "Bandwidth in bits per second of a communcation channel.";
    }

    typedef energy {
      type decimal64 {
        fraction-digits 10;
      }
      units "joule";
      description "Energy in joules.";
    }

    typedef speed {
      type decimal64 {
        fraction-digits 10;
      }
      units "nanometer nanosecond^-1";
      description
        "The rate of change of position of an entity.";
    }

    typedef coordinate-length {
      type decimal64 {
        fraction-digits 10;
      }
      units "nanometer";
      description
        "The position along a single coordinate.";
    }

    grouping position {
      description
        "A position in 3-dimensional space denoted by lengths along coordinates from a predefined origin.";
      leaf x {
        type coordinate-length;
      }

      leaf y {
        type coordinate-length;
      }

      leaf z {
        type coordinate-length;
      }
    }  // grouping position

    grouping delta-vector {
      description
        "A vector described by changes along each of three dimensions from position.";
      uses position {
        description
          "The location of the base of the vector.";
      }

      leaf delta-x {
        type coordinate-length;
      }

      leaf delta-y {
        type coordinate-length;
      }

      leaf delta-z {
        type coordinate-length;
      }
    }  // grouping delta-vector

    grouping message-metrics {
      description
        "These metrics deal with the information encoded within a Message and how the Message is impacted by the channel and intended target. Metrics a) through d) shall be implemented. Metric e) may be implemented.";
      container message-deliverability-metric {
        description
          "Message Deliverability measures whether a Message Carrier survives long enough to deliver its information to the intended receiver. Message Deliverability (MD) assumes messages have a finite time-to-live (TTL). Thus, MD = P(tr < TTL) where tr is the age of the message at the time of reception by the destination to which the message was addressed.";
        reference
          "IEEE 1906.1-2015 Clause 6.1";

        leaf message-deliverability {
          type probability;
          description
            "The probability that a message survives long enough to deliver its information to the intended receiver";
        }

        leaf time-to-live {
          type time;
          description
            "The time before a message no longer contains valid information.";
        }

        leaf receive-time {
          type time;
          description
            "The mean time taken for a message to reach its intended receiver.";
        }
      }  // container message-deliverability-metric

      container message-lifetime {
        description
          "Message Lifetime measures the lifetime of a Message Carrier.";
        reference
          "IEEE 1906.1-2015 Clause 6.2";

        leaf lifetime {
          type time;
          description
            "The time from creation of a message until it no longer contains valid information.";
        }
      }  // container message-lifetime

      container information-density {
        description
          "Information Density is the amount of information encoded within a Message Carrier per volume.";
        reference
          "IEEE 1906.1-2015 Clause 6.3";

        leaf message-volume {
          type volume;
          description
            "The volume of a message.";
        }

        leaf message-information {
          type information;
          description
            "The amount of information in a message.";
        }
      }  // container information-density

      container bandwidth-delay-product {
        description
          "Bandwidth-Delay Product is proportional to the maximum number of Message Carriers capable of fitting within the physical channel.";
        reference
          "IEEE 1906.1-2015 Clause 6.4";

        leaf channel-bandwidth {
          type bandwidth;
          description
            "The bits per second transported by the nanoscale communication channel.";
        }

        leaf channel-delay {
          type time;
          description
            "The time for a message to propagate from one end of a channel to the other.";
        }
      }  // container bandwidth-delay-product

      container information-and-communication-energy {
        description
          "This is the metric that quantifies energy used in nanoscale communication. This is energy per bit of information conveyed by the Motion Component.";
        reference
          "IEEE 1906.1-2015 Clause 6.5";

        leaf energy-message-delivery {
          type energy;
          description
            "The energy used to transport a message across a channel.";
        }

        leaf information-message-delivery {
          type information;
          description
            "The amount of information in a message.";
        }
      }  // container information-and-communication-energy
    }  // grouping message-metrics

    grouping motion-metrics {
      description
        "Motion component: These metrics are strongly related to the Motion Component, which describes Message Carrier motion. Either both a) and b) shall be implemented or c) shall be implemented.";
      container collision-behavior {
        description
          "Collision Behavior measures the physical result of collision between Message Carriers.";
        reference
          "IEEE 1906.1-2015 Clause 6.6";

        leaf coefficient-of-restitution {
          type decimal64 {
            fraction-digits 10;
            range "0..1";
          }
          units "unitless";
          description
            "A measure of the 'restitution' of a collision between two objects: how much of the kinetic energy remains for the objects to rebound from one another vs. how much is lost as heat, or work done deforming the objects. The coefficient is defined as the ratio of relative speeds after and before an impact, taken along the line of the impact.";
        }

        leaf speed-before-collision {
          type speed;
          description
            "The speed of a message carrier loaded with message before collision.";
        }

        leaf speed-after-collision {
          type speed;
          description
            "The speed of a message carrier loaded with message after collision.";
        }
      }  // container collision-behavior

      container mass-displacement-metric {
        description
          "Molecular communication can assume Message Carriers are composed of mass and move from one 
						 location to another.";
        reference
          "IEEE 1906.1-2015 Clause 6.7";

        leaf mass-displacement {
          type decimal64 {
            fraction-digits 10;
          }
          description
            "Value of the mass displacement.";
        }

        leaf x {
          type mass;
          units "kilogram";
          description "Mass at time t.";
        }

        leaf T {
          type decimal64 {
            fraction-digits 10;
          }
          units "second";
          description
            "Sample period (the time between each sample).";
        }

        leaf tau {
          type decimal64 {
            fraction-digits 10;
          }
          units "second";
          description "Sample time";
        }

        leaf M {
          type decimal64 {
            fraction-digits 10;
          }
          units "unitless";
          description "Number of samples";
        }
      }  // container mass-displacement-metric

      container positioning-accuracy-of-message-carriers {
        description
          "Multiple swarms of message carriers can be controlled like unified organisms to swim along predetermined paths toward the receiver by an external macro-unit (e.g., an agglomeration of flagellated magnetotactic bacteria can be utilized as efficient carriers of nanoloads and guided toward an aggregation zone by a magnetic field generated in custom-made magnetic resonance imaging systems). It is defined as the radius of the circle hat has its center at the mean and contains a given percentage of half the realizations of the location estimates (i.e., the performance measure of circular error probable in the classical geolocation context).";
        reference
          "IEEE 1906.1-2015 Clause 6.8";

        leaf radius {
          type decimal64 {
            fraction-digits 10;
          }
          units "nanometer";
        }

        uses position {
          description
            "The location of the center of mass of the message carriers.";
        }

        leaf accuracy-percent {
          type percent;
          description
            "Then number of message carriers located within the given area or volume.";
        }
      }  // container positioning-accuracy-of-message-carriers
    }  // grouping motion-metrics

    typedef derivative {
      type decimal64 {
        fraction-digits 10;
      }
      units "d/dx";
      description
        "The slope of a line at a point on the line.";
    }

    grouping nabla {
      description
        "The result of the differential operator d/dx + d/dy + d/dz at a given position.";
      uses position;

      container terms {
        leaf dx {
          type derivative;
        }

        leaf dy {
          type derivative;
        }

        leaf dz {
          type derivative;
        }
      }  // container terms
    }  // grouping nabla

    grouping field-metrics {
      description
        "Field component: These metrics relate to the degree to which Message Carrier motion can be controlled such that it follows an intended gradient. Diffusive Flux is used in Brownian motion and can be modeled by Levy or Weiner processes and can also be described by the Langevin Noise. At least one of a), b), or c) shall be implemented in order to describe Message Carrier motion.";
      container persistence-length {
        description
          "Persistence Length is a measure of the degree to which a chain-like structure is either soft (like strings of cooked spaghetti) or rigid (like metal rods).";
        reference
          "IEEE 1906.1-2015 Clause 6.9";

        list unit-tangent-vectors {
          key "segment-index";
          leaf segment-index {
            type uint32;
            description "A segment index.";
          }

          container s {
            description
              "The position of a unit tangent sample.";
            uses position;
          }  // container s

          container u-s {
            description
              "The unit tangent vector at point s in set of connected segments.";
            uses nabla;
          }  // container u-s
        }  // list unit-tangent-vectors

        container u-0 {
          description
            "Unit tangent vector at the origin or beginning of the chain of connected segments";
          uses nabla;
        }  // container u-0

        leaf zeta-p {
          type decimal64 {
            fraction-digits 10;
            range "0..max";
          }
          units "nanometer";
          description
            "The persistence length.";
        }
      }  // container persistence-length

      container diffusive-flux {
        description
          "Fick’s First Law is one of the standard laws of diffusion.";
        reference
          "IEEE 1906.1-2015 Clause 6.10";

        uses ficks-1-law {
          description
            "This metric is derived from Fick's First Law.";
        }
      }  // container diffusive-flux

      container langevin-noise {
        description
          "Random motion has a significant impact upon the performance of Message Carriers, in particle form, to reach their target receivers.";
        reference
          "IEEE 1906.1-2015 Clause 6.11";

        uses langevin-equation {
          description
            "Langevin noise is a term in the general Langevin equation.";
        }
      }  // container langevin-noise
    }  // grouping field-metrics

    grouping probability-density {
      list density-function {
        key "probability-sample";
        description
          "A list of probabilities forming a probability density function.";
        leaf probability-sample {
          type probability;
          units "probability";
          description
            "A sample probability in the probability density.";
        }
      }  // list density-function
    }  // grouping probability-density

    grouping specificity-metrics {
      description
        "Specificity component: These metrics are related to the ability of a Message Carrier to deliver a Message to its intended target. Metrics a), c), and e) shall be implemented; metrics b) or d) may be implemented.";
      leaf specificity-metric {
        type specificity;
        description
          "A measure of precision in matching between components. See also: sensitivity.";
        reference
          "IEEE 1906.1-2015 Clause 6.12";

      }

      container affinity-metric {
        description
          "Affinity is a standard measure of chemical affinity; however it is applied to the broader IEEE 1906 framework and the affinity of Message Carriers to their intended targets, Media, and other Message Carriers.";
        reference
          "IEEE 1906.1-2015 Clause 6.13";

        leaf affinity {
          type decimal64 {
            fraction-digits 10;
            range "0..max";
          }
          units "d/dG";
          description
            "The negative partial derivative of Gibb's free energy G with respect to extent of reaction zeta at constant pressure and temperature.";
        }
      }  // container affinity-metric

      leaf sensitivity-metric {
        type sensitivity;
        description
          "A measure of the proportion of true positives, which are events that actually occurred and have been correctly detected. See also: specificity.";
        reference
          "IEEE 1906.1-2015 Clause 6.14";

      }

      container angular-spectrum {
        description
          "Angular Spectrum quantifies the distribution of the intensity of nanoscale communication signals received
						 at the receiver as a function of angle-of-arrival.";
        reference
          "IEEE 1906.1-2015 Clause 6.15";

        uses probability-density;
      }  // container angular-spectrum

      container delay-spectrum {
        description
          "Delay Spectrum quantifies the distribution of the intensity of nanoscale communication signals received at
						 the receiver as a function of time-of-arrival.";
        reference
          "IEEE 1906.1-2015 Clause 6.16";

        uses probability-density;
      }  // container delay-spectrum
    }  // grouping specificity-metrics

    grouping system-metrics {
      description
        "System metrics relate to and impact all components. All of the metrics in this category shall be implemented.";
      container active-network-programmability {
        description
          "Message Carriers can be programmed or coded such they change the underlying Media (e.g., microtubules, nanotubes, etc.) as they transport information (see 5.3.4).";
        reference
          "IEEE 1906.1-2015 Clause 6.17";

        leaf t {
          type time;
          units "second";
          description "The current time.";
        }

        container S {
          uses math-expression {
            description
              "A virtual surface that defines the volume through which the change in flux of Message Carriers should be clearly specified.";
          }
        }  // container S

        leaf f {
          type decimal64 {
            fraction-digits 10;
            range "0..max";
          }
          units "second^-1 meter^-2";
          description
            "The flux of Message Carriers as a function of time where flux is the rate of flow through a unit area.";
        }

        leaf delta-f {
          type decimal64 {
            fraction-digits 10;
            range "0..max";
          }
          units "second^-1 meter^-2";
          description
            "The change in f(t) intentionally caused by a programmed Message Carrier through a surface.";
        }
      }  // container active-network-programmability

      container perturbation-rate {
        description
          "Perturbation Rate is a measure of both the rate and control of any type of perturbation used to send a signal in the system.";
        reference
          "IEEE 1906.1-2015 Clause 6.18";

        leaf rate-of-perturbation {
          type derivative;
          units "second^-1";
          description
            "Rate of change of the componet representing bits of information in the channel. There is typically a tradeoff with error-of-perturbation.";
        }

        leaf error-of-perturbation {
          type derivative;
          units "second^-1";
          description
            "Rate of error in the componet representing bits of information in the channel. There is typically a tradeoff with rate-of-perturbation";
        }
      }  // container perturbation-rate

      container supersystem-degradation {
        description
          "The supersystem is the system in which the IEEE 1906 network resides. This can be a biological organism. This metric quantifies the impact of the network upon the supersystem with regard to its normal operation.";
        reference
          "IEEE 1906.1-2015 Clause 6.19";

        leaf performance-attribute {
          type string;
          description
            "A descriptive name of the performance attribute.";
        }

        leaf ds {
          type percent;
          units "percent";
          description
            "The supersystem degradation of the performance-attribute.";
        }

        leaf spn {
          type percent;
          units "percent";
          description
            "The supersystem performance of the performance-attribute with the embedded nanoscale communication network.";
        }

        leaf sp {
          type percent;
          units "percent";
          description
            "The native supersystem performance (without the embedded nanoscale communication network).";
        }
      }  // container supersystem-degradation

      container bandwidth-volume-ratio {
        description
          "The Bandwidth-Volume Ratio takes into account and combines two fundamental essences of molecular and nanoscale communication, namely its size and bandwidth.";
        reference
          "IEEE 1906.1-2015 Clause 6.20";

        leaf bandwidth {
          type bandwidth;
          units "bit second^-1";
          description
            "The bandwidth of the nanoscale communication channel.";
        }

        leaf volume {
          type volume;
          units "nanometer^3";
          description
            "The sum of the volume of the transmitter and receiver pair for a communication system.";
        }
      }  // container bandwidth-volume-ratio
    }  // grouping system-metrics

    container metrics {
      description
        "IEEE 1906.1 metrics are values that can be configured to control the operation of a nanoscale communication network. They can also be monitored to characterize the performance of the nanoscale network.";
      uses message-metrics;

      uses motion-metrics;

      uses field-metrics;

      uses specificity-metrics;

      uses system-metrics;
    }  // container metrics

    typedef message-carrier-types {
      type enumeration {
        enum "calcium-ion" {
          value 0;
          description "Calcium ion.";
        }
        enum "ligand" {
          value 1;
          description
            "Ligand-repecptor system.";
        }
        enum "motor" {
          value 2;
          description "Molecular motor.";
        }
        enum "charge" {
          value 3;
          description "Electrical charge.";
        }
        enum "bacterium" {
          value 4;
          description "Bacterium.";
        }
        enum "electromagnetic-wave" {
          value 5;
          description
            "Electromagentic wave.";
        }
      }
    }

    typedef motion-types {
      type enumeration {
        enum "diffusion" {
          value 0;
          description "Diffusion.";
        }
        enum "walking" {
          value 1;
          description "Walking.";
        }
        enum "potential difference" {
          value 2;
          description
            "Electrical potential difference.";
        }
        enum "waved guided" {
          value 3;
          description
            "Follows a wave guide.";
        }
      }
    }

    typedef field-types {
      type enumeration {
        enum "concentration gradient" {
          value 0;
          description
            "Concentration gradient.";
        }
        enum "compartmentalized" {
          value 1;
          description "Compartmentalized.";
        }
        enum "microtubule" {
          value 2;
          description "Microtubule.";
        }
        enum "nanostructure orientation" {
          value 3;
          description
            "Nanostructure orientation, e.g. nanotube orientation.";
        }
        enum "directional antenna" {
          value 4;
          description "Directional antenna.";
        }
      }
    }

    typedef perturbation-types {
      type enumeration {
        enum "transmission rate" {
          value 0;
          description
            "Transmission rate is varied to create bits.";
        }
        enum "concentration change" {
          value 1;
          description
            "Concentration is varied to create bits.";
        }
        enum "molecular structure" {
          value 2;
          description
            "Molecular structure is changed to represent bits.";
        }
        enum "electrical current variation" {
          value 3;
          description
            "Electrical current is varied to create bits.";
        }
        enum
          "electromagnetic wave variation" {
          value 4;
          description
            "The electromagnetic wave is varied to create bits.";
        }
      }
    }

    typedef specificity-types {
      type enumeration {
        enum "receptor sensitivity" {
          value 0;
          description
            "Receptor sensitivity.";
        }
        enum
          "electrical charge/voltage threshold" {
          value 1;
          description
            "Electrical charge or voltage sensitivity threshold is exceeded.";
        }
        enum "antenna aperture" {
          value 2;
          description
            "Antenna aperture and orientation control specificity.";
        }
      }
    }

    typedef angle {
      type decimal64 {
        fraction-digits 10;
        range "-360..360";
      }
      units "degrees";
      description "The angle in degress.";
    }

    container microtubule-field {
      list tubes {
        key "binding-time";
        description
          "A tube is comprised of segments.";
        leaf direction {
          type enumeration {
            enum "positive" {
              value 0;
              description
                "Motors move in one direction along the tube.";
            }
            enum "negative" {
              value 1;
              description
                "Motors move in another direction along the tube.";
            }
          }
        }

        leaf binding-time {
          type decimal64 {
            fraction-digits 10;
            range "0..max";
          }
          description
            "The mean time motors remain bound to the microtubule.";
        }

        list segments {
          key "x y z";
          description
            "Segments comprise a tube.";
          uses position;

          leaf orientation {
            type angle;
            units "degrees";
            description
              "The angle of the microtubule in degrees from horizontal.";
          }

          leaf length {
            type decimal64 {
              fraction-digits 10;
            }
            units "nanometers";
            description
              "The length of the microtubule in nanometers.";
          }
        }  // list segments
      }  // list tubes
    }  // container microtubule-field

    container molecular-motor-motion {
      description
        "This is for all motors in the system.";
      list motors {
        key "motor-name";
        description
          "This is for a single motor.";
        leaf motor-name {
          type string;
          description
            "The unique identifier for a motor.";
        }

        list movement {
          key "x y z";
          description
            "A sample of a motor's motion history.";
          uses position;
        }  // list movement
      }  // list motors
    }  // container molecular-motor-motion

    grouping required-mapping {
      description
        "Every proposed IEEE nanoscale communication technique MUST instantiate this mapping.";
      uses ieee1906-definition;

      uses ieee1906-components;
    }  // grouping required-mapping

    augment /if:interfaces/if:interface {
      when
        "if:type = 'ieee1906:nanoscale-communication-interface'";
      description
        "Addition of data nodes for the nanoscale communication interface to the standard Interface data model, for interfaces of the type 'nanoscale-communication-interface'.";
    }
  }  // module ieee1906-dot1-2015