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

más organizado.10

parent f0ee5087
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 deleted
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