Universite-Gustave-Eiffel / NoiseModelling

A open-source model to compute noise maps.
https://noisemodelling.readthedocs.io
GNU General Public License v3.0
161 stars 78 forks source link

Directivity calculation fails #652

Closed berensc closed 7 months ago

berensc commented 8 months ago

NoiseModelling 4.0.5 without GUI

Describe the bug The calculation of the sound propagation of a directional siren (see example data in the attached zip) does not work. Direction yaw=270 (southeast) Height 40 m

Sample Data Data_to_Github.zip

To Reproduce Steps to reproduce the behavior:

  1. Unzig the sample Data (attached Zip file) in a directory of your choise
  2. Copy the import_source_calc_noise._github.groovy to the scriptrunner directory (ex. C:\NoiseModelling\scriptrunner_NM_4_0_5)
  3. Change input paths in the import_source_calc_noise_github.groovy
  4. In the command prompt change the directiory to the scriptrunner (ex. cd C:\NoiseModelling\scriptrunner_NM_4_0_5)
  5. run groovy script .\bin\wps_scripts -w.\ -simport_source_calc_noise_github.groovy
  6. See error message " NoiseModelling_Logfile.txt"
  7. Lday is not calculated correctly in the resulting Point-shape file source_lday.shp (LAEQ = 0)

Expected behavior Like the results of the procedure with the tutorial data. [https://noisemodelling.readthedocs.io/en/latest/Noise_Map_From_Point_Source.html#step-5-bonus-change-the-directivity]

Screenshots image

Additional context Add any other context about the problem here.

nicolas-f commented 8 months ago

Hi,

In the tutorial the sound source define only one frequency:

{
"type": "FeatureCollection",
"name": "Point_Source",
"crs": {"type": "name", "properties": { "name": "urn:ogc:def:crs:EPSG::2154" } },
"features": [{"type": "Feature", "properties": { "PK": 1, "LWD500": 100.0, "YAW": 45, "PITCH": 0, "ROLL": 0, "DIR_ID" : 1 },
              "geometry": {"type": "Point", "coordinates": [223771.0727, 6757583.2983, 0.0]}
             }]
}

but your sound source define other frequencies not defined in the source directivity:

{
"type": "FeatureCollection",
"name": "source2",
"features": [
{ "type": "Feature", "properties": { "Join_Count": 0, "TARGET_FID": 0, "PK": 0,
 "LWD63": 0.0, "LWD125": 0.0, "LWD250": 0.0, "LWD500": 150.0, "LWD1000": 0.0, "LWD2000": 0.0, "LWD4000": 0.0,
 "LWD8000": 0.0, "LWE63": 0.0, "LWE125": 0.0, "LWE250": 0.0, "LWE500": 150.0, "LWE1000": 0.0, "LWE2000": 0.0,
 "LWE4000": 0.0, "LWE8000": 0.0, "LWN63": 0.0, "LWN125": 0.0, "LWN250": 0.0, "LWN500": 150.0, "LWN1000": 0.0,
 "LWN2000": 0.0, "LWN4000": 0.0, "LWN8000": 0.0, "YAW": 240.0, "PITCH": 0.0, "ROLL": 0.0, "Height": 40,
 "SirenenID": "SU_GI_FRIS03", "Anmerkung": null, "DIR_ID": 15 },
 "geometry": { "type": "Point", "coordinates": [ 81564.823699999600649, 64447.610799999907613, 39.9999765 ] } }
]
}

NoiseModelling is missing a check for this type of inconsistency in input data. A patch will be provided.

To fix your project, you have to provide only LWD500 column as you compute only day value.

nicolas-f commented 8 months ago

Bonus you can generate a plot of your directivity with this code:

def runScript(connection, scriptFile, arguments) {
    Logger logger = LoggerFactory.getLogger("script")
    GroovyShell shell = new GroovyShell()
    Script scriptInstance = shell.parse(new File(scriptFile))
    Object result = scriptInstance.invokeMethod("exec", [connection, arguments])
    if(result != null) {
        logger.info(result.toString())
    }
    return result
}

        def htmlCode = runScript(connection, "noisemodelling/wps/NoiseModelling/PlotDirectivity.groovy",
          ["confDirId": 15, "tableSourceDirectivity": "Directivity"]);

        def htmlfile = new File('directivity.html')
    htmlfile.write(htmlCode)

image

berensc commented 8 months ago

Merci Nicolas

L’option «directivity » marche maintenant. Mais les résultats ne sont pas cohérents avec la description du yaw dans la documentation.

@.***

Chez nous avec yaw = 90 l’orientation de la source est ouest pas est et yaw =0 est sud et pas nord.

Tous les calcul avec la même « directivity.csv »

Phi LW500 0-90 0 90-270 -50 270-360 0 @.***

Mat beschten Gréiss. Mit freundlichen Grüssen / Best regards / Salutations distinguées.

Carsten Berens Dipl.-Ing. agr. Gestionnaire système d’information géographique

Direction de la stratégie opérationnelle Département planification Service cartographie et analyses

Tél. +352 49771 2623 @.**@.>

[/Volumes/Accentaigu_Data/_CLIENTS/CGDIS/02601_corporate/Graphisme/Crea/01_logo/PRINCIPAL/PRINCIPAL/cgdis_logo_principal_RVB.jpg]

Corps grand-ducal d’incendie et de secours (CGDIS) Centre National d’Incendie et de Secours - CNIS 3, boulevard de Kockelscheuer L-1821 Luxembourg

Facebookhttps://de-de.facebook.com/cgdis112/ Twitterhttps://twitter.com/CGDISlux Instagramhttps://www.instagram.com/cgdislux/ YouTubehttps://www.youtube.com/channel/UCnlgFPDkPktnS0z5OEZjiWQ

www.cgdis.luhttp://www.cgdis.lu/ – www.112.luhttp://www.112.lu/

From: nicolas-f @.> Sent: mardi, 19 mars 2024 15:44 To: Universite-Gustave-Eiffel/NoiseModelling @.> Cc: Carsten Berens @.>; Author @.> Subject: Re: [Universite-Gustave-Eiffel/NoiseModelling] Directivity calculation fails (Issue #652)

⚠ Expéditeur externe au réseau de l'Etat. Voir les consignes de sécurité sur ctie.etat.lu.

Bonus you can generate a plot of your directivity with this code:

    def htmlCode = runScript(connection, "noisemodelling/wps/NoiseModelling/PlotDirectivity.groovy",

      ["confDirId": 15, "tableSourceDirectivity": "Directivity"]);

    def htmlfile = new File('directivity.html')

    htmlfile.write(htmlCode)

image.png (view on web)https://github.com/Universite-Gustave-Eiffel/NoiseModelling/assets/1382241/efed1181-e69e-4b17-ae92-fe2790a7f140

— Reply to this email directly, view it on GitHubhttps://github.com/Universite-Gustave-Eiffel/NoiseModelling/issues/652#issuecomment-2007372321, or unsubscribehttps://github.com/notifications/unsubscribe-auth/A3DGJXHJUQYB6OYABFYKSO3YZBFL3AVCNFSM6AAAAABE5JBAP6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDAMBXGM3TEMZSGE. You are receiving this because you authored the thread.Message ID: @.**@.>>

nicolas-f commented 8 months ago

Merci Nicolas L’option «directivity » marche maintenant. Mais les résultats ne sont pas cohérents avec la description du yaw dans la documentation. @. Chez nous avec yaw = 90 l’orientation de la source est ouest pas est et yaw =0 est sud et pas nord. Tous les calcul avec la même « directivity.csv » Phi LW500 0-90 0 90-270 -50 270-360 0 @.

D’après les graphique de la source, elle émet à l'arrière et non à l'avant, c'est peut être pour ça.

berensc commented 8 months ago

Salut Nicolas C'est tout à fait exact. J'ai utilisé le faux "directivity.csv " Ici le bon fichier. Directivity.csv

IsotoCedex commented 3 months ago

Hello everyone,

I've been 'playing' with the directivity of sources.

I've encountered some issues configuring it and visualizing the results with PlotDirectivity.groovy.

It might be very obvious to you :), but I find it more challenging.

In case anyone is as 'clumsy' as I am, here's some code to better visualize the SVG and an example using the directivity table from the documentation.

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1100" height="1200">
    <!-- Title Top -->
    <text x="250" y="30" font-family="Verdana" font-size="20" text-anchor="middle">Top</text>
    <!-- Top Chart -->
    <svg x="0" y="50" width="500" height="500">
        <!-- Content of the Top chart -->
        <!-- Insert the Top chart content here -->
    </svg>

    <!-- Title Side -->
    <text x="750" y="30" font-family="Verdana" font-size="20" text-anchor="middle">Side</text>
    <!-- Side Chart -->
    <svg x="500" y="50" width="500" height="500">
        <!-- Content of the Side chart -->
        <!-- Insert the Side chart content here -->
    </svg>

    <!-- Title Front -->
    <text x="250" y="580" font-family="Verdana" font-size="20" text-anchor="middle">Front</text>
    <!-- Front Chart (below the Top) -->
    <svg x="0" y="600" width="500" height="500">
        <!-- Content of the Front chart -->
        <!-- Insert the Front chart content here -->
    </svg>
</svg>

The example: directivity2.zip

directivity2 As always, thank you very much for your efforts in developing and improving Noise Modelling!!