"required": [
"sector-count",
"cell-angle",
+ "cell-scale-factor-for-handover-area",
"max-reach"
],
"properties": {
"type": "integer",
"minimum": 0,
"maximum": 360,
- "exclusiveMinimum": true
+ "exclusiveMinimum": 0
+ },
+ "cell-scale-factor-for-handover-area": {
+ "description": "A factor to increase the cell polygon for handover areas in procent [%]",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 50
},
"max-reach": {
"description": "The maximal distance a UE can reach the cell in meters. The value also defines the radius around a tower where UEs may select a NRCellDU of an O-RAN-RU mounted at this tower.",
-# Copyright 2023 highstreet technologies GmbH
+# Copyright 2023 highstreet technologies USA CORP.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
INrCellDu,
{
**ORanNode.default(),
- **{"cellAngle": 120, "azimuth": 120},
+ **{
+ "cellAngle": 120,
+ "cellScaleFactorForHandoverArea": 0,
+ "azimuth": 120,
+ },
},
)
cell_data: INrCellDu = self._to_cell_data(data)
super().__init__(cast(dict[str, Any], cell_data), **kwargs)
self._cell_angle: int = int(str(cell_data["cellAngle"]))
+ self._cell_scale_factor: int = int(
+ str(cell_data["cellScaleFactorForHandoverArea"])
+ )
self._azimuth: int = int(str(cell_data["azimuth"]))
def _to_cell_data(self, data: dict[str, Any]) -> INrCellDu:
result[key] = data[key] # type: ignore
return result
+ @property
+ def cell_angle(self) -> int:
+ return self._cell_angle
+
+ @cell_angle.setter
+ def cell_angle(self, value: int) -> None:
+ self._cell_angle = value
+
+ @property
+ def cell_scale_factor(self) -> int:
+ return self._cell_scale_factor
+
+ @cell_scale_factor.setter
+ def cell_scale_factor(self, value: int) -> None:
+ self._cell_scale_factor = value
+
+ @property
+ def azimuth(self) -> int:
+ return self._azimuth
+
+ @azimuth.setter
+ def azimuth(self, value: int) -> None:
+ self.azimuth = value
+
def termination_points(self) -> list[ORanTerminationPoint]:
result: list[ORanTerminationPoint] = super().termination_points()
result.append(
text.append(",".join(strs))
coordinates.text = " ".join(text)
+ if self.cell_scale_factor > 0:
+ print("hallo")
+
return placemark
def toSvg(self) -> ET.Element:
IGeoLocation, configuration["center"]
)
- size: int = int(configuration["pattern"]["nr-cell-du"]["max-reach"])
+ size: int = int(
+ int(configuration["pattern"]["nr-cell-du"]["max-reach"])
+ / (
+ 1
+ + int(
+ configuration["pattern"]["nr-cell-du"][
+ "cell-scale-factor-for-handover-area"
+ ]
+ )
+ / 100
+ )
+ )
layout = Layout(
Hexagon.layout_flat, Point(size, size), Point(0, 0)
) # 1 pixel = 1 meter