Skip to content
Snippets Groups Projects
Commit f0ee5087 authored by Luigui Miranda's avatar Luigui Miranda
Browse files

más organizado.9

parent 63c10475
No related branches found
No related tags found
3 merge requests!3Master,!2Master,!1Initial commit
#!/bin/bash
declare -a valores=(0 5 10 15 20 25 30 35 40 45)
for i in "${!valores[@]}"
do
h="${valores[$i]}"
#echo "$i"
mkdir humedadc7-1kev-$h
cd humedadc7-1kev-$h
cmake -DGeant4_DIR6=/opt/geant4/lib/Geant4-10.3.3/ ../"direccion del directorio"/Simulacion_neutrones_monoenergeticos; make -j2
./wcd -m input.in
cd
#sleep 30
cd humedad6/codigo/src
Archivo="PrimaryGeneratorAction.cc"
#echo "$i"
#"El índice es $i y el valor es $h"
# para realizar las modificaciones necesarias
echo "e" | vim -c "44 + $i" -c "normal i//" -c "45 + $i" -c "normal 2|xxx" -c "wq" "$Archivo"
#echo "$i"
cd
done
echo "terminado"
import random
import numpy as np
from scipy.stats import skewnorm
# Neutrones rapidos
# Abrir un archivo para escritura
with open('salidasimu.shw', 'w') as f:
# Escribir los nombres de las columnas en la primera línea
f.write('#CorsikaID px py pz x y z shower_id prm_id prm_energy prm_theta prm_phi\n')
a = 1.1 # Pendiente deseada
total_samples = 1000000 # El número de muestras que deseas generar
# Genera datos uniformemente distribuidos en el rango deseado
data_uniform = np.random.uniform(low=1e-3, high=1e5, size= int(total_samples*0.3))# energia neutrones 1e-3eV- 1e5eV
# Aplicar la transformación logarítmica inversa
data_pendiente_positiva = np.exp(np.log(data_uniform) / a)
data_lognormal2 = np.random.lognormal(mean=15.7, sigma=0.9, size= int(total_samples*0.3)) #energia neutrones 1e5eV- 1e7eV
data_lognormal3 = np.random.lognormal(mean=19.5, sigma=0.9, size= int(total_samples*0.4)) #energia neutrones 1e7eV- +
energia_flujo = np.concatenate([data_pendiente_positiva, data_lognormal2, data_lognormal3])
# Mezcla los datos de forma aleatoria
np.random.shuffle(energia_flujo)
m = 0.939 # Masa del neutrón en GeV/c^2
prim_phi = np.random.uniform(low=-180, high=180, size=total_samples) # Aleatorio para el ángulo azimutal
prim_theta = np.random.uniform(low=0, high=90, size=total_samples) # Aleatorio para el ángulo cenital
p = np.sqrt(2 * m * energia_flujo/1e8) # Calculamos el momento
# Calculamos las componentes del momento
px = p * np.sin(np.radians(prim_theta)) * np.cos(np.radians(prim_phi))
py = p * np.sin(np.radians(prim_theta)) * np.sin(np.radians(prim_phi))
pz = p * np.cos(np.radians(prim_theta))
# Escribir los datos en el archivo (mismo orden de un archivo de dalida de CORSIKA)
for i in range(total_samples):
# Escribir el CorsicaID
f.write('13 ')
num_format = "{:+013.6e}"
f.write(num_format.format(px[i]) + ' ')
f.write(num_format.format(py[i]) + ' ')
f.write(num_format.format(abs(pz[i])) + ' ')
# Escribir valores aleatorios para x, y, z
f.write(num_format.format(random.normalvariate(0, 25)) + ' ')
f.write(num_format.format(random.normalvariate(0, 25)) + ' ')
f.write(num_format.format(1) + ' ')
# Escribir valores aleatorios para shower_id, prm_id
f.write("{:03d}".format(random.randint(0, 100)) + ' ')
f.write("{:03d}".format(random.randint(0, 100)) + ' ')
# Escribir valores aleatorios para prm_energy
f.write(num_format.format(energia_flujo[i]) + ' ')
# Escribir los ángulos prim_theta y prim_phi
f.write("{:+010.6f}".format(prim_theta[i]) + ' ')
f.write("{:+011.6f}".format(prim_phi[i]) + '\n')
File added
...@@ -21,7 +21,7 @@ Es posible realizar un seguimiento por paso de los siguientes parámetros: "ID", ...@@ -21,7 +21,7 @@ Es posible realizar un seguimiento por paso de los siguientes parámetros: "ID",
Para imprimir lo anterior en pantalla, es necesario descomentar las líneas 130 a 133 en el archivo `PrimaryGeneratorAction.cc`. Al realizar esta acción, se mostrará en la pantalla el ID del neutrón y su posición en cada paso de la simulación. Para imprimir lo anterior en pantalla, es necesario descomentar las líneas 130 a 133 en el archivo `PrimaryGeneratorAction.cc`. Al realizar esta acción, se mostrará en la pantalla el ID del neutrón y su posición en cada paso de la simulación.
Lo anterior se realiza descomentando las lineas 130 - 133, realizando esto se imprime en la pantalla el ID del neutron y su posicion en cada step Lo anterior se realiza descomentando las lineas 130 - 133, realizando esto se imprime en la pantalla el ID del neutron y su posicion en cada step.
## 2. Simulación de un Flujo de Neutrones ## 2. Simulación de un Flujo de Neutrones
......
...@@ -12,5 +12,5 @@ ...@@ -12,5 +12,5 @@
#/run/beamOn 23131998 #6h #/run/beamOn 23131998 #6h
#/run/beamOn 11565999 #3h #/run/beamOn 11565999 #3h
#/run/beamOn 3855333 #1h #/run/beamOn 3855333 #1h
#/run/beamOn 1000000 # El numero de horas * 4625 Neutrones/m²*hora
/run/beamOn 100000 /run/beamOn 100000
...@@ -12,5 +12,5 @@ ...@@ -12,5 +12,5 @@
#/run/beamOn 23131998 #6h #/run/beamOn 23131998 #6h
#/run/beamOn 11565999 #3h #/run/beamOn 11565999 #3h
#/run/beamOn 3855333 #1h #/run/beamOn 3855333 #1h
/run/beamOn 10000 #/run/beamOn 10000
#/run/beamOn 1
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment