Repository: openradar/xradar

Issue:
Bug in transformation
* xradar version:0.7.+
* Python version:3.12
* Operating System:MacOS

### Description
We have a bug in the `transform` method when converting to cfradial1 or writing cfradial1 file. This issue arises when sweeps are of different shape, and when we transform it to CF1, it acquires the shape of the last sweep in `range` dimension (not sure about `azimuth`). 

### What I Did
```python
import xradar as xd
from open_radar_data import DATASETS

file = DATASETS.fetch("KLBB20160601_150025_V06")

dtree = xd.io.open_nexradlevel2_datatree(file)
dtree.groups
```
```
('/',
 '/sweep_0',
 '/sweep_1',
 '/sweep_2',
 '/sweep_3',
 '/sweep_4',
 '/sweep_5',
 '/sweep_6',
 '/sweep_7',
 '/sweep_8',
 '/sweep_9',
 '/sweep_10')
```
```python
for swp in dtree.match("sweep*"):
    ds = dtree[swp].to_dataset()
    print(ds.sizes)
```

```
Frozen({'azimuth': 720, 'range': 1832})
Frozen({'azimuth': 720, 'range': 1192})
Frozen({'azimuth': 720, 'range': 1632})
Frozen({'azimuth': 720, 'range': 1192})
Frozen({'azimuth': 360, 'range': 1312})
Frozen({'azimuth': 360, 'range': 1076})
Frozen({'azimuth': 360, 'range': 908})
Frozen({'azimuth': 360, 'range': 696})
Frozen({'azimuth': 360, 'range': 448})
Frozen({'azimuth': 360, 'range': 308})
Frozen({'azimuth': 360, 'range': 232})
```

```python
ds = dtree.xradar.to_cf1()
print(ds.sizes)
```
```
Frozen({'time': 5400, 'range': 232, 'sweep': 11})
```

- Notice the `range` dimension shrunk to `232`? As I mentioned, the problem arises only when we have different shapes of sweeps.

How it is supposed to look like?

Let's try data with the same shape.

```python
file = DATASETS.fetch('swx_20120520_0641.nc')
tree = xd.io.open_cfradial1_datatree(file)
tree.groups
```
```
('/',
 '/sweep_0',
 '/sweep_1',
 '/sweep_2',
 '/sweep_3',
 '/sweep_4',
 '/sweep_5',
 '/sweep_6',
 '/sweep_7',
 '/sweep_8',
 '/sweep_9',
 '/sweep_10',
 '/sweep_11',
 '/sweep_12',
 '/sweep_13',
 '/sweep_14',
 '/sweep_15',
 '/sweep_16',
 '/sweep_17',
 '/sweep_18',
 '/sweep_19',
 '/sweep_20',
 '/sweep_21',
 '/radar_parameters',
 '/georeferencing_correction')
```
```python
for swp in tree.match("sweep*"):
    ds = tree[swp].to_dataset()
    print(ds.sizes)
```
```
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
```
```python
ds = tree.xradar.to_cf1()
print(ds.sizes)
```
```
Frozen({'time': 8800, 'range': 667, 'sweep': 22})
```
22*400 = 8800. This one works since the shape of the sweeps was fixed.

Discussion:
codecov[bot]: ## [Codecov](https://app.codecov.io/gh/openradar/xradar/pull/234?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=openradar) Report
All modified and coverable lines are covered by tests :white_check_mark:
> Project coverage is 91.14%. Comparing base [(`1dce43b`)](https://app.codecov.io/gh/openradar/xradar/commit/1dce43b43bc346e0621fc1322a6116312042097c?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=openradar) to head [(`2624bfe`)](https://app.codecov.io/gh/openradar/xradar/commit/2624bfe66eaa24e06e2f3d44f86ccad4006a115d?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=openradar).

<details><summary>Additional details and impacted files</summary>


```diff
@@            Coverage Diff             @@
##             main     #234      +/-   ##
==========================================
- Coverage   92.78%   91.14%   -1.65%     
==========================================
  Files          26       26              
  Lines        5005     5004       -1     
==========================================
- Hits         4644     4561      -83     
- Misses        361      443      +82     
```

| [Flag](https://app.codecov.io/gh/openradar/xradar/pull/234/flags?src=pr&el=flags&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=openradar) | Coverage Δ | |
|---|---|---|
| [notebooktests](https://app.codecov.io/gh/openradar/xradar/pull/234/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=openradar) | `?` | |
| [unittests](https://app.codecov.io/gh/openradar/xradar/pull/234/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=openradar) | `91.14% <100.00%> (-0.05%)` | :arrow_down: |

Flags with carried forward coverage won't be shown. [Click here](https://docs.codecov.io/docs/carryforward-flags?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=openradar#carryforward-flags-in-the-pull-request-comment) to find out more.

</details>

[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/openradar/xradar/pull/234?dropdown=coverage&src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=openradar).   
:loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=openradar).

kmuehlbauer: @syedhamidali This prepares the data using `join="outer"` together with another few adaptions.

This should now work for differing shapes. For the range coordinate this works only if the binsize is the same for all sweeps and will raise an error for differing binsizes.
syedhamidali: @kmuehlbauer Thank you! It works now! 🥳
kmuehlbauer: We see now, that some more tests would be nice. We could at least take the two examples from your issue. We would need a third test case where we have differing bin-sizes. Do we have such volume already in the openradardata?
syedhamidali: It is a good question! I am not sure if we have such file, I can give it a quick try using that auto_read function, and let you know if there is one such a file or not.
syedhamidali: Also, when we transform `ds` --> `dtree` using `dtree=ds.xradar.to_cf2()`, we lose the other groups in a new dtree. We can always add them back from the `original_dtree`, but I think they should be taken care of in the conversion itself.
syedhamidali: By other groups I mean calibs, georeferencing and parameters
kmuehlbauer: Yes, it looks like those groups are not handled in the transformation, probably because they are empty. Let's tackle this after 0.8.0 is out. At least the volume transformation works back and forth.
syedhamidali: Do you want this? or something else?

```python
import os
from open_radar_data import DATASETS

# Dictionary to track which prefixes have been processed
prefix_processed = {}

# Iterate through the files in the registry
for file in DATASETS.registry_files:
#     print(file)

    # Skip files with .gz extension as they are not supported by xradar
    if file.endswith('.gz'):
        continue

    # Extract the prefix of the file (up to the first underscore, dot, or space)
    prefix = file.split('_')[0].split('.')[0].split()[0]

    # Check if a file from this prefix group has already been processed
    if prefix in prefix_processed:
        continue  # Skip the file if a file from this group has already been processed

    try:
        # Attempt to fetch the file path
        filepath = DATASETS.fetch(file)
        print(f"Reading: {os.path.basename(file)}")
        # Attempt to read the radar data
        radar = read(filepath, timeout=10)
        
        # If no exception is raised, print success
        print('+++++++++++')
        print('| SUCCESS |')
        print('+++++++++++\n')
        
        for swp in radar.match("sweep*"):
            ds = radar[swp].to_dataset()
            print(ds.sizes)

        # Mark this prefix as processed
        prefix_processed[prefix] = True

        # Delete the radar object after processing
        del radar

    except Exception as e:
        # Print the error and continue with the next file
#         print(f"Error processing file {os.path.basename(file)}: \n{e}")
#         print('+++++++++++')
#         print('| FAILED |')
#         print('+++++++++++\n')
        continue
```

```
Reading: 110635.nc
+++++++++++
| SUCCESS |
+++++++++++

Frozen({'azimuth': 360, 'range': 983})
Reading: 2013051000000600dBZ.vol
+++++++++++
| SUCCESS |
+++++++++++

Frozen({'azimuth': 361, 'range': 400})
Frozen({'azimuth': 361, 'range': 400})
Frozen({'azimuth': 361, 'range': 400})
Frozen({'azimuth': 361, 'range': 400})
Frozen({'azimuth': 361, 'range': 400})
Frozen({'azimuth': 361, 'range': 400})
Frozen({'azimuth': 361, 'range': 400})
Frozen({'azimuth': 361, 'range': 400})
Frozen({'azimuth': 361, 'range': 400})
Frozen({'azimuth': 361, 'range': 400})
Frozen({'azimuth': 361, 'range': 400})
Frozen({'azimuth': 361, 'range': 400})
Frozen({'azimuth': 361, 'range': 400})
Frozen({'azimuth': 361, 'range': 400})
Reading: 20220628072500_savevol_COSMO_LOOKUP_TEMP.nc
Reading: 71_20181220_060628.pvol.h5
+++++++++++
| SUCCESS |
+++++++++++

Frozen({'azimuth': 360, 'range': 1200})
Frozen({'azimuth': 360, 'range': 1200})
Frozen({'azimuth': 360, 'range': 1200})
Frozen({'azimuth': 360, 'range': 1200})
Frozen({'azimuth': 360, 'range': 1200})
Frozen({'azimuth': 360, 'range': 1180})
Frozen({'azimuth': 360, 'range': 1100})
Frozen({'azimuth': 360, 'range': 1100})
Frozen({'azimuth': 360, 'range': 590})
Frozen({'azimuth': 360, 'range': 480})
Frozen({'azimuth': 360, 'range': 360})
Frozen({'azimuth': 360, 'range': 280})
Frozen({'azimuth': 360, 'range': 200})
Frozen({'azimuth': 360, 'range': 200})
Reading: DES_VOL_RAW_20240522_1600.nc
+++++++++++
| SUCCESS |
+++++++++++

Frozen({'azimuth': 360, 'range': 416, 'frequency': 1})
Frozen({'azimuth': 360, 'range': 416, 'frequency': 1})
Frozen({'azimuth': 360, 'range': 416, 'frequency': 1})
Frozen({'azimuth': 360, 'range': 416, 'frequency': 1})
Frozen({'azimuth': 360, 'range': 416, 'frequency': 1})
Frozen({'azimuth': 360, 'range': 383, 'frequency': 1})
Frozen({'azimuth': 360, 'range': 257, 'frequency': 1})
Frozen({'azimuth': 360, 'range': 157, 'frequency': 1})
Reading: DWD-Vol-2_99999_20180601054047_00.h5
+++++++++++
| SUCCESS |
+++++++++++

Frozen({'azimuth': 361, 'range': 360})
Frozen({'azimuth': 361, 'range': 500})
Frozen({'azimuth': 361, 'range': 620})
Frozen({'azimuth': 360, 'range': 800})
Frozen({'azimuth': 361, 'range': 1050})
Frozen({'azimuth': 360, 'range': 1400})
Frozen({'azimuth': 360, 'range': 1000})
Frozen({'azimuth': 361, 'range': 1000})
Frozen({'azimuth': 360, 'range': 1000})
Frozen({'azimuth': 360, 'range': 1000})
Reading: KATX20130717_195021_V06
+++++++++++
| SUCCESS |
+++++++++++

Frozen({'azimuth': 720, 'range': 1832})
Frozen({'azimuth': 720, 'range': 1192})
Frozen({'azimuth': 720, 'range': 1676})
Frozen({'azimuth': 720, 'range': 1192})
Frozen({'azimuth': 360, 'range': 1352})
Frozen({'azimuth': 360, 'range': 1112})
Frozen({'azimuth': 360, 'range': 940})
Frozen({'azimuth': 360, 'range': 800})
Frozen({'azimuth': 360, 'range': 704})
Frozen({'azimuth': 360, 'range': 540})
Frozen({'azimuth': 360, 'range': 500})
Frozen({'azimuth': 360, 'range': 460})
Frozen({'azimuth': 360, 'range': 388})
Frozen({'azimuth': 360, 'range': 332})
Frozen({'azimuth': 360, 'range': 280})
Frozen({'azimuth': 360, 'range': 240})
Reading: KLBB20160601_150025_V06
+++++++++++
| SUCCESS |
+++++++++++

Frozen({'azimuth': 720, 'range': 1832})
Frozen({'azimuth': 720, 'range': 1192})
Frozen({'azimuth': 720, 'range': 1632})
Frozen({'azimuth': 720, 'range': 1192})
Frozen({'azimuth': 360, 'range': 1312})
Frozen({'azimuth': 360, 'range': 1076})
Frozen({'azimuth': 360, 'range': 908})
Frozen({'azimuth': 360, 'range': 696})
Frozen({'azimuth': 360, 'range': 448})
Frozen({'azimuth': 360, 'range': 308})
Frozen({'azimuth': 360, 'range': 232})
Reading: MLA2119412050U.nc
+++++++++++
| SUCCESS |
+++++++++++

Frozen({'azimuth': 360, 'range': 492, 'frequency': 1})
Frozen({'azimuth': 360, 'range': 492, 'frequency': 1})
Frozen({'azimuth': 360, 'range': 492, 'frequency': 1})
Frozen({'azimuth': 360, 'range': 492, 'frequency': 1})
Frozen({'azimuth': 360, 'range': 492, 'frequency': 1})
Frozen({'azimuth': 360, 'range': 492, 'frequency': 1})
Frozen({'azimuth': 360, 'range': 492, 'frequency': 1})
Frozen({'azimuth': 360, 'range': 492, 'frequency': 1})
Frozen({'azimuth': 360, 'range': 492, 'frequency': 1})
Frozen({'azimuth': 360, 'range': 492, 'frequency': 1})
Frozen({'azimuth': 360, 'range': 492, 'frequency': 1})
Frozen({'azimuth': 360, 'range': 492, 'frequency': 1})
Frozen({'azimuth': 360, 'range': 492, 'frequency': 1})
Frozen({'azimuth': 360, 'range': 492, 'frequency': 1})
Frozen({'azimuth': 360, 'range': 492, 'frequency': 1})
Frozen({'azimuth': 360, 'range': 492, 'frequency': 1})
Frozen({'azimuth': 360, 'range': 492, 'frequency': 1})
Frozen({'azimuth': 360, 'range': 492, 'frequency': 1})
Frozen({'azimuth': 360, 'range': 492, 'frequency': 1})
Frozen({'azimuth': 360, 'range': 492, 'frequency': 1})
Reading: MLL2217907250U.003.nc
+++++++++++
| SUCCESS |
+++++++++++

Frozen({'azimuth': 360, 'range': 492, 'frequency': 1})
Reading: RAW_NA_000_125_20080411181219
+++++++++++
| SUCCESS |
+++++++++++

Frozen({'azimuth': 360, 'range': 992})
Frozen({'azimuth': 360, 'range': 992})
Frozen({'azimuth': 360, 'range': 992})
Frozen({'azimuth': 357, 'range': 992})
Frozen({'azimuth': 360, 'range': 992})
Frozen({'azimuth': 359, 'range': 992})
Frozen({'azimuth': 360, 'range': 992})
Frozen({'azimuth': 358, 'range': 992})
Frozen({'azimuth': 360, 'range': 992})
Frozen({'azimuth': 360, 'range': 992})
Frozen({'azimuth': 360, 'range': 992})
Frozen({'azimuth': 358, 'range': 992})
Reading: SUR210819000227.RAWKPJV
+++++++++++
| SUCCESS |
+++++++++++

Frozen({'azimuth': 359, 'range': 833})
Reading: T_PAGZ35_C_ENMI_20170421090837.hdf
+++++++++++
| SUCCESS |
+++++++++++

Frozen({'azimuth': 720, 'range': 960})
Frozen({'azimuth': 360, 'range': 960})
Frozen({'azimuth': 360, 'range': 960})
Frozen({'azimuth': 360, 'range': 660})
Frozen({'azimuth': 360, 'range': 440})
Frozen({'azimuth': 360, 'range': 300})
Reading: User1_184_20240601_013257.hpl
+++++++++++
| SUCCESS |
+++++++++++

Frozen({'azimuth': 19, 'range': 400})
Frozen({'azimuth': 34, 'range': 400})
Frozen({'azimuth': 35, 'range': 400})
Frozen({'azimuth': 35, 'range': 400})
Frozen({'azimuth': 34, 'range': 400})
Frozen({'azimuth': 34, 'range': 400})
Frozen({'azimuth': 34, 'range': 400})
Frozen({'azimuth': 34, 'range': 400})
Frozen({'azimuth': 34, 'range': 400})
Frozen({'azimuth': 34, 'range': 400})
Reading: Z__C_RJTD_20230801200000_RDR_JMAGPV_RS47937_Gar0p250km0p35deg_PRkdp_N11_ANAL_cfrad.nc
+++++++++++
| SUCCESS |
+++++++++++

Frozen({'azimuth': 1024, 'range': 1600, 'frequency': 1})
Reading: cfrad.20080604_002217_000_SPOL_v36_SUR.nc
+++++++++++
| SUCCESS |
+++++++++++

Frozen({'azimuth': 483, 'range': 996})
Frozen({'azimuth': 483, 'range': 996})
Frozen({'azimuth': 482, 'range': 996})
Frozen({'azimuth': 483, 'range': 996})
Frozen({'azimuth': 481, 'range': 996})
Frozen({'azimuth': 482, 'range': 996})
Frozen({'azimuth': 482, 'range': 996})
Frozen({'azimuth': 484, 'range': 996})
Frozen({'azimuth': 483, 'range': 996})
Reading: convsf.19990811.221202.cdf
Reading: cor-main131125105503.RAW2049
+++++++++++
| SUCCESS |
+++++++++++

Frozen({'azimuth': 360, 'range': 664})
Frozen({'azimuth': 360, 'range': 664})
Frozen({'azimuth': 360, 'range': 664})
Frozen({'azimuth': 360, 'range': 664})
Frozen({'azimuth': 360, 'range': 664})
Frozen({'azimuth': 360, 'range': 664})
Frozen({'azimuth': 360, 'range': 664})
Frozen({'azimuth': 360, 'range': 664})
Frozen({'azimuth': 360, 'range': 664})
Frozen({'azimuth': 360, 'range': 664})
Reading: corcsapr2cmacppiM1.c1.20181111.030003.nc
+++++++++++
| SUCCESS |
+++++++++++

Frozen({'azimuth': 361, 'range': 1100})
Reading: csapr.nc
Reading: ddop.910815.212303.cdf
Reading: ddop.910815.213931.cdf
Reading: ddop.910815.214454.cdf
Reading: ddop.910815.215545.cdf
Reading: example_plot_ppi_single_sweep.nc
+++++++++++
| SUCCESS |
+++++++++++

Frozen({'azimuth': 362, 'range': 755, 'frequency': 1})
Frozen({'azimuth': 362, 'range': 755, 'frequency': 1})
Frozen({'azimuth': 360, 'range': 755, 'frequency': 1})
Frozen({'azimuth': 354, 'range': 755, 'frequency': 1})
Reading: gucxprecipradarcmacppiS2.c1.20220314.021559.nc
+++++++++++
| SUCCESS |
+++++++++++

Frozen({'azimuth': 1159, 'range': 668})
Reading: houkasacrcfrM1.a1.20210922.150006.nc
+++++++++++
| SUCCESS |
+++++++++++

Frozen({'azimuth': 62, 'range': 967, 'frequency': 1})
Reading: sample_rainbow_5_59.vol
+++++++++++
| SUCCESS |
+++++++++++

Frozen({'azimuth': 360, 'range': 1000})
Frozen({'azimuth': 360, 'range': 994})
Frozen({'azimuth': 360, 'range': 994})
Frozen({'azimuth': 360, 'range': 994})
Frozen({'azimuth': 360, 'range': 994})
Frozen({'azimuth': 360, 'range': 994})
Frozen({'azimuth': 360, 'range': 500})
Frozen({'azimuth': 360, 'range': 500})
Frozen({'azimuth': 360, 'range': 500})
Frozen({'azimuth': 360, 'range': 500})
Frozen({'azimuth': 360, 'range': 500})
Reading: sgpkasacrcrrasterC1.a1.20130419.012153.nc
+++++++++++
| SUCCESS |
+++++++++++

Frozen({'azimuth': 393, 'range': 71, 'frequency': 1})
Frozen({'azimuth': 244, 'range': 71, 'frequency': 1})
Frozen({'azimuth': 228, 'range': 71, 'frequency': 1})
Frozen({'azimuth': 225, 'range': 71, 'frequency': 1})
Frozen({'azimuth': 194, 'range': 71, 'frequency': 1})
Frozen({'azimuth': 189, 'range': 71, 'frequency': 1})
Frozen({'azimuth': 232, 'range': 71, 'frequency': 1})
Frozen({'azimuth': 190, 'range': 71, 'frequency': 1})
Frozen({'azimuth': 261, 'range': 71, 'frequency': 1})
Frozen({'azimuth': 189, 'range': 71, 'frequency': 1})
Frozen({'azimuth': 254, 'range': 71, 'frequency': 1})
Frozen({'azimuth': 193, 'range': 71, 'frequency': 1})
Frozen({'azimuth': 200, 'range': 71, 'frequency': 1})
Frozen({'azimuth': 188, 'range': 71, 'frequency': 1})
Frozen({'azimuth': 229, 'range': 71, 'frequency': 1})
Frozen({'azimuth': 225, 'range': 71, 'frequency': 1})
Frozen({'azimuth': 194, 'range': 71, 'frequency': 1})
Frozen({'azimuth': 210, 'range': 71, 'frequency': 1})
Frozen({'azimuth': 198, 'range': 71, 'frequency': 1})
Frozen({'azimuth': 185, 'range': 71, 'frequency': 1})
Frozen({'azimuth': 267, 'range': 71, 'frequency': 1})
Frozen({'azimuth': 188, 'range': 71, 'frequency': 1})
Frozen({'azimuth': 215, 'range': 71, 'frequency': 1})
Frozen({'azimuth': 187, 'range': 71, 'frequency': 1})
Frozen({'azimuth': 221, 'range': 71, 'frequency': 1})
Frozen({'azimuth': 185, 'range': 71, 'frequency': 1})
Frozen({'azimuth': 198, 'range': 71, 'frequency': 1})
Frozen({'azimuth': 230, 'range': 71, 'frequency': 1})
Frozen({'azimuth': 198, 'range': 71, 'frequency': 1})
Frozen({'azimuth': 210, 'range': 71, 'frequency': 1})
Frozen({'azimuth': 187, 'range': 71, 'frequency': 1})
Reading: sgpkazrgeC1.a1.20190529.000002.cdf
Reading: sgpxsaprcfrvptI4.a1.20200205.100827.nc
+++++++++++
| SUCCESS |
+++++++++++

Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Frozen({'azimuth': 1, 'range': 201, 'frequency': 1})
Reading: swx_20120520_0641.nc
+++++++++++
| SUCCESS |
+++++++++++

Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
Frozen({'azimuth': 400, 'range': 667})
```
kmuehlbauer: Reading: DWD-Vol-2_99999_20180601054047_00.h5

That's one 
syedhamidali: ```python
dtree = read(DATASETS.fetch('DWD-Vol-2_99999_20180601054047_00.h5'))

for swp in dtree.match("sweep*"):
    ds = dtree[swp].to_dataset()
    print(ds.sizes)
```
```
Frozen({'azimuth': 361, 'range': 360})
Frozen({'azimuth': 361, 'range': 500})
Frozen({'azimuth': 361, 'range': 620})
Frozen({'azimuth': 360, 'range': 800})
Frozen({'azimuth': 361, 'range': 1050})
Frozen({'azimuth': 360, 'range': 1400})
Frozen({'azimuth': 360, 'range': 1000})
Frozen({'azimuth': 361, 'range': 1000})
Frozen({'azimuth': 360, 'range': 1000})
Frozen({'azimuth': 360, 'range': 1000})
```
```python
ds = dtree.xradar.to_cf1()
print(ds.sizes)
```
```
Frozen({'time': 3605, 'range': 2400, 'sweep': 10, 'r_calib': 1})
```
```python
dtree = ds.xradar.to_cf2()

for swp in dtree.match("sweep*"):
    ds = dtree[swp].to_dataset()
    print(ds.sizes)
```   
```
Frozen({'azimuth': 361, 'range': 2400})
Frozen({'azimuth': 361, 'range': 2400})
Frozen({'azimuth': 361, 'range': 2400})
Frozen({'azimuth': 360, 'range': 2400})
Frozen({'azimuth': 361, 'range': 2400})
Frozen({'azimuth': 360, 'range': 2400})
Frozen({'azimuth': 360, 'range': 2400})
Frozen({'azimuth': 361, 'range': 2400})
Frozen({'azimuth': 360, 'range': 2400})
Frozen({'azimuth': 360, 'range': 2400})
```
syedhamidali: I wonder if `sweep_start_ray_index` and `sweep_end_ray_index`  or `fixed_angles/sweep_fixed_angles` are getting correctly mapped/written in the conversion :)
kmuehlbauer: This example should not convert but raise. The issue is that in open_gamic_datatree the attributes of the variables (range etc.) are lost.


syedhamidali: Correct! Yes it is gamic
kmuehlbauer: @syedhamidali This should now fix #233. I've tweaked the transform to use `combine_by_coords` instead of `concat` which uses the correct xarray code-path. There was another issue with attributes dropped from DataArray's that ones fixed here, too.
kmuehlbauer: Since tests pass, I'll merge later today and keep going with #229.

Patch:
diff --git a/docs/history.md b/docs/history.md
index e4ff41c..de8481a 100644
--- a/docs/history.md
+++ b/docs/history.md
@@ -4,6 +4,7 @@
 
 This is the first version which uses datatree directly from xarray. Thus, xarray is pinned to version >= 2024.10.0.
 
+* FIX: Convert volumes to_cfradial1 containing sweeps with different range and azimuth shapes, raise for different range bin sizes ({issue}`233`) by [@syedhamidali](https://github.com/syedhamidali), ({pull}`234`) by [@kmuehlbauer](https://github.com/kmuehlbauer).
 * FIX: Correctly handle 8bit/16bit, big-endian/little-endian in nexrad reader (PHI and ZDR) ({issue}`230`) by [@syedhamidali](https://github.com/syedhamidali), ({pull}`231`) by [@kmuehlbauer](https://github.com/kmuehlbauer).
 * ENH: Refactoring all xradar backends to use `from_dict` datatree constructor. Test for `_get_required_root`, `_get_subgroup`, and `_get_radar_calibration` were also added ({pull}`221`) by [@aladinor](https://github.com/aladinor)
 * ENH: Added pytests to the missing functions in the `test_xradar` and `test_iris` in order to increase codecov in ({pull}`228`) by [@syedhamidali](https://github.com/syedhamidali).
diff --git a/xradar/io/backends/common.py b/xradar/io/backends/common.py
index 25e15f1..1ab8c69 100644
--- a/xradar/io/backends/common.py
+++ b/xradar/io/backends/common.py
@@ -63,7 +63,8 @@ def _fix_angle(da):
 def _attach_sweep_groups(dtree, sweeps):
     """Attach sweep groups to DataTree."""
     for i, sw in enumerate(sweeps):
-        dtree[f"sweep_{i}"] = xr.DataTree(sw.drop_attrs())
+        # remove attributes only from Dataset's not DataArrays
+        dtree[f"sweep_{i}"] = xr.DataTree(sw.drop_attrs(deep=False))
     return dtree
 
 
diff --git a/xradar/io/export/cfradial1.py b/xradar/io/export/cfradial1.py
index 0b42098..491b652 100644
--- a/xradar/io/export/cfradial1.py
+++ b/xradar/io/export/cfradial1.py
@@ -57,9 +57,8 @@ def _calib_mapper(calib_params):
             attrs=data_array.attrs,
         )
     radar_calib_renamed = xr.Dataset(new_data_vars)
-    dummy_ds = radar_calib_renamed.rename_vars({"r_calib": "fake_coord"})
-    del dummy_ds["fake_coord"]
-    return dummy_ds
+    radar_calib_renamed = radar_calib_renamed.drop_vars("r_calib", errors="ignore")
+    return radar_calib_renamed
 
 
 def _main_info_mapper(dtree):
@@ -135,12 +134,15 @@ def _variable_mapper(dtree, dim0=None):
             # Convert to a dataset and append to the list
             sweep_datasets.append(data)
 
-    result_dataset = xr.concat(
+    # need to use combine_by_coords to correctly test for
+    # incompatible attrs on DataArray's
+    result_dataset = xr.combine_by_coords(
         sweep_datasets,
-        dim="time",
+        data_vars="all",
         compat="no_conflicts",
-        join="right",
-        combine_attrs="drop_conflicts",
+        join="outer",
+        coords="minimal",
+        combine_attrs="no_conflicts",
     )
 
     drop_variables = [
@@ -304,11 +306,11 @@ def to_cfradial1(dtree=None, filename=None, calibs=True):
 
     # Add additional parameters if they exist in dtree
     if "radar_parameters" in dtree:
-        radar_params = dtree["radar_parameters"].to_dataset()
+        radar_params = dtree["radar_parameters"].to_dataset().reset_coords()
         dataset.update(radar_params)
 
     if "georeferencing_correction" in dtree:
-        radar_georef = dtree["georeferencing_correction"].to_dataset()
+        radar_georef = dtree["georeferencing_correction"].to_dataset().reset_coords()
         dataset.update(radar_georef)
 
     # Ensure that the data type of sweep_mode and similar variables matches
diff --git a/xradar/transform/cfradial.py b/xradar/transform/cfradial.py
index c88914d..d1cde26 100644
--- a/xradar/transform/cfradial.py
+++ b/xradar/transform/cfradial.py
@@ -106,11 +106,11 @@ def to_cfradial1(dtree=None, filename=None, calibs=True):
 
     # Add additional parameters if they exist in dtree
     if "radar_parameters" in dtree:
-        radar_params = dtree["radar_parameters"].to_dataset()
+        radar_params = dtree["radar_parameters"].to_dataset().reset_coords()
         dataset.update(radar_params)
 
     if "georeferencing_correction" in dtree:
-        radar_georef = dtree["georeferencing_correction"].to_dataset()
+        radar_georef = dtree["georeferencing_correction"].to_dataset().reset_coords()
         dataset.update(radar_georef)
 
     # Ensure that the data type of sweep_mode and similar variables matches


Test patch:
diff --git a/tests/transform/test_cfradial.py b/tests/transform/test_cfradial.py
index 5767c5c..f846b55 100644
--- a/tests/transform/test_cfradial.py
+++ b/tests/transform/test_cfradial.py
@@ -2,39 +2,71 @@
 # Copyright (c) 2024, openradar developers.
 # Distributed under the MIT License. See LICENSE for more info.
 
+import pytest
 import xarray as xr
-from open_radar_data import DATASETS
+from xarray import MergeError
 
 import xradar as xd
 
 
-def test_to_cfradial1():
+def test_to_cfradial1(cfradial1_file):
     """Test the conversion from DataTree to CfRadial1 format."""
-    file = DATASETS.fetch("cfrad.20080604_002217_000_SPOL_v36_SUR.nc")
-    dtree = xd.io.open_cfradial1_datatree(file)
+    with xd.io.open_cfradial1_datatree(cfradial1_file) as dtree:
 
-    # Call the conversion function
-    ds_cf1 = xd.transform.to_cfradial1(dtree)
+        # Call the conversion function
+        ds_cf1 = xd.transform.to_cfradial1(dtree)
 
-    # Verify key attributes and data structures in the resulting dataset
-    assert isinstance(ds_cf1, xr.Dataset), "Output is not a valid xarray Dataset"
-    assert "Conventions" in ds_cf1.attrs and ds_cf1.attrs["Conventions"] == "Cf/Radial"
-    assert "sweep_mode" in ds_cf1.variables, "Missing sweep_mode in converted dataset"
-    assert ds_cf1.attrs["version"] == "1.2", "Incorrect CfRadial version"
+        # Verify key attributes and data structures in the resulting dataset
+        assert isinstance(ds_cf1, xr.Dataset), "Output is not a valid xarray Dataset"
+        assert (
+            "Conventions" in ds_cf1.attrs and ds_cf1.attrs["Conventions"] == "Cf/Radial"
+        )
+        assert (
+            "sweep_mode" in ds_cf1.variables
+        ), "Missing sweep_mode in converted dataset"
+        assert ds_cf1.attrs["version"] == "1.2", "Incorrect CfRadial version"
 
 
-def test_to_cfradial2():
+def test_to_cfradial2(cfradial1_file):
     """Test the conversion from CfRadial1 to CfRadial2 DataTree format."""
-    file = DATASETS.fetch("cfrad.20080604_002217_000_SPOL_v36_SUR.nc")
-    dtree = xd.io.open_cfradial1_datatree(file)
+    with xd.io.open_cfradial1_datatree(cfradial1_file) as dtree:
 
-    # Convert to CfRadial1 dataset first
-    ds_cf1 = xd.transform.to_cfradial1(dtree)
+        # Convert to CfRadial1 dataset first
+        ds_cf1 = xd.transform.to_cfradial1(dtree)
 
-    # Call the conversion back to CfRadial2
-    dtree_cf2 = xd.transform.to_cfradial2(ds_cf1)
+        # Call the conversion back to CfRadial2
+        dtree_cf2 = xd.transform.to_cfradial2(ds_cf1)
 
-    # Verify key attributes and data structures in the resulting datatree
-    assert isinstance(dtree_cf2, xr.DataTree), "Output is not a valid DataTree"
-    assert "radar_parameters" in dtree_cf2, "Missing radar_parameters in DataTree"
-    assert dtree_cf2.attrs == ds_cf1.attrs, "Attributes mismatch between formats"
+        # Verify key attributes and data structures in the resulting datatree
+        assert isinstance(dtree_cf2, xr.DataTree), "Output is not a valid DataTree"
+        assert "radar_parameters" in dtree_cf2, "Missing radar_parameters in DataTree"
+        assert dtree_cf2.attrs == ds_cf1.attrs, "Attributes mismatch between formats"
+
+
+def test_to_cfradial1_with_different_range_shapes(nexradlevel2_bzfile):
+    with xd.io.open_nexradlevel2_datatree(nexradlevel2_bzfile) as dtree:
+        ds_cf1 = xd.transform.to_cfradial1(dtree)
+        # Verify key attributes and data structures in the resulting dataset
+        assert isinstance(ds_cf1, xr.Dataset), "Output is not a valid xarray Dataset"
+        assert (
+            "Conventions" in ds_cf1.attrs and ds_cf1.attrs["Conventions"] == "Cf/Radial"
+        )
+        assert (
+            "sweep_mode" in ds_cf1.variables
+        ), "Missing sweep_mode in converted dataset"
+        assert ds_cf1.attrs["version"] == "1.2", "Incorrect CfRadial version"
+        assert ds_cf1.sizes.mapping == {"time": 5400, "range": 1832, "sweep": 11}
+
+        # Call the conversion back to CfRadial2
+        dtree_cf2 = xd.transform.to_cfradial2(ds_cf1)
+        # Verify key attributes and data structures in the resulting datatree
+        assert isinstance(dtree_cf2, xr.DataTree), "Output is not a valid DataTree"
+        # todo: this needs to be fixed in nexrad level2reader
+        # assert "radar_parameters" in dtree_cf2, "Missing radar_parameters in DataTree"
+        assert dtree_cf2.attrs == ds_cf1.attrs, "Attributes mismatch between formats"
+
+
+def test_to_cfradial1_error_with_different_range_bin_sizes(gamic_file):
+    with xd.io.open_gamic_datatree(gamic_file) as dtree:
+        with pytest.raises(MergeError):
+            xd.transform.to_cfradial1(dtree)