xDefo

Bethe Block

Jun 7th, 2022 (edited)
888
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.46 KB | None | 0 0
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. import math
  4.  
  5. MASSAELETTRONEMEV =0.511
  6. UMATOMEV =931.4936148385
  7. COSTANTE= 0.1535
  8.  
  9. def bb(ZTarget,ATarget,DensitaTarget,ZProiettile,beta_pro,gamma_pro,en_rip_pro):
  10.   mrel=MASSAELETTRONEMEV/en_rip_pro
  11.   etaquadro=(beta_pro*gamma_pro)**2
  12.   WMax= (2*MASSAELETTRONEMEV*etaquadro)/(1+2*mrel*math.sqrt(1+etaquadro)+mrel**2)
  13.   I=0
  14.   if(ZTarget<13):
  15.     I=(12*ZTarget+7)*10**(-6)
  16.   else:
  17.     I=(9.76*ZTarget+58.8*((ZTarget)**(-0.19)))*10**(-6)
  18.  
  19.  
  20.  
  21.   return COSTANTE*DensitaTarget*(float(ZTarget)/float(ATarget))*((ZProiettile/beta_pro)**2)*(math.log((2*MASSAELETTRONEMEV*etaquadro*WMax)/I**2)-2*beta_pro**2)
  22.  
  23.  
  24.  
  25. #dichiarazione variabili target
  26. ZTarget=0
  27. ATarget=0
  28. DensitaTarget=0
  29. NomeTarget=""
  30.  
  31. #dichiarazione variabili proiettile
  32. ZProiettile=0
  33. NomeProiettile=""
  34. AProiettile=0
  35. en_cin_pro=0
  36. en_rip_pro=0
  37. en_tot_pro=0
  38. beta_pro=0
  39. gamma_pro=0
  40.  
  41.  
  42.  
  43. #lettura file configurazione
  44. file = open("config.txt","r")
  45.  
  46. s=file.readline()
  47. NomeTarget=s[0:len(s)-1]
  48. s=file.readline()
  49. ZTarget=float(s[0:len(s)])
  50. s=file.readline()
  51. ATarget=float(s[0:len(s)])
  52. s=file.readline()
  53. DensitaTarget=float(s[0:len(s)])
  54. s=file.readline()
  55. NomeProiettile=s[0:len(s)-1]
  56. s=file.readline()
  57. ZProiettile=float(s[0:len(s)])
  58. s=file.readline()
  59. AProiettile=float(s[0:len(s)])
  60. s=file.readline()
  61. en_cin_pro=float(s[0:len(s)])
  62. enin=en_cin_pro
  63. s=file.readline()
  64. mode=s[0:len(s)-1]
  65.  
  66. #inizializzazione parametri particella
  67. en_rip_pro=AProiettile*UMATOMEV
  68. en_tot_pro=en_cin_pro+en_rip_pro
  69. gamma_pro=en_tot_pro/en_rip_pro
  70. beta_pro=math.sqrt(1-1/(gamma_pro*gamma_pro))
  71.  
  72.  
  73. fig,ax=plt.subplots()
  74.  
  75.  
  76. if mode=='s':
  77.   #MODALITA' S , viene valutata lo stopping power in funzione dell'energia
  78.   #vengono letti l'energia finale da raggiungere e il numero di step in cui suddividere l'intervallo
  79.   s=file.readline()
  80.   en_fin=float(s[0:len(s)-1])
  81.   s=file.readline()
  82.   nstep=int(s[0:len(s)])
  83.  
  84.   de=(en_fin-en_cin_pro)/nstep
  85.  
  86.  
  87.   energia=[]
  88.   sp=[]
  89.  
  90.   #per nstep calcola lo stopping power e aggiorna lo stato della particella incrementando la sua energia cinetica di de.
  91.   for i in range(nstep):
  92.     energia.append(en_cin_pro)
  93.     sp.append(bb(ZTarget,ATarget,DensitaTarget,ZProiettile,beta_pro,gamma_pro,en_rip_pro))
  94.     en_cin_pro+=de
  95.     en_tot_pro=en_cin_pro+en_rip_pro
  96.     gamma_pro=en_tot_pro/en_rip_pro
  97.     beta_pro=math.sqrt(1-1/(gamma_pro*gamma_pro))
  98.  
  99.   ax.plot(energia,sp)
  100.   ax.set_title('Particelle alpha di {d} Mev su {s}'.format(d=enin,s=NomeTarget))
  101.   ax.set_xlabel('Energia[MeV]')
  102.   ax.set_ylabel('Sp[MeV/cm]')
  103.  
  104. elif mode=='e':
  105.   #MODALITA' E, viene valutata l'energia residua in funzione della profondita'
  106.   #leggo lo spessore del target e in quanti step dividere lo spessore
  107.   s=file.readline()
  108.   spessoreTarget=float(s[0:len(s)])
  109.   s=file.readline()
  110.   nstep=int(s[0:len(s)-1])
  111.  
  112.   dx=(spessoreTarget)/float(nstep)
  113.  
  114.   energia=[]
  115.   spessore=[]
  116.  
  117.   #per nstep calcolo la perdita di energia nel tratto dx e aggiorno lo stato della particella
  118.   for i in range(nstep):
  119.       energia.append(en_cin_pro)
  120.       spessore.append(i*dx)
  121.       de=(dx*bb(ZTarget,ATarget,DensitaTarget,ZProiettile,beta_pro,gamma_pro,en_rip_pro))
  122.       en_cin_pro-=de
  123.       en_tot_pro=en_cin_pro+en_rip_pro
  124.       gamma_pro=en_tot_pro/en_rip_pro
  125.       beta_pro=math.sqrt(1-1/(gamma_pro*gamma_pro))
  126.   ax.plot(spessore,energia)
  127.   ax.set_title('Particelle alpha di {d} Mev su {s}'.format(d=enin,s=NomeTarget))
  128.   ax.set_xlabel('Spessore[cm]')
  129.   ax.set_ylabel('Energia[MeV]')
  130.  
  131. elif mode=='b':
  132.   #MODALITA' B, viene valutata lo stopping power in funzione della profondita'
  133.    #leggo lo spessore del target e in quanti step dividere lo spessore
  134.   s=file.readline()
  135.   spessoreTarget=float(s[0:len(s)])
  136.   s=file.readline()
  137.   nstep=int(s[0:len(s)-1])
  138.  
  139.  
  140.   dx=(spessoreTarget)/float(nstep)
  141.  
  142.   sp=[]
  143.   spessore=[]
  144.   #per nstep calcolo la perdita di energia nel tratto dx e aggiorno lo stato della particella, ma memorizzo lo stopping power
  145.   for i in range(nstep):
  146.       spessore.append(i*dx)
  147.       a=bb(ZTarget,ATarget,DensitaTarget,ZProiettile,beta_pro,gamma_pro,en_rip_pro)
  148.      
  149.       de=(dx*a)
  150.       sp.append(a)
  151.       en_cin_pro-=de
  152.       en_tot_pro=en_cin_pro+en_rip_pro
  153.       gamma_pro=en_tot_pro/en_rip_pro
  154.       beta_pro=math.sqrt(1-1/(gamma_pro*gamma_pro))
  155.   ax.plot(spessore,sp)
  156.   ax.set_title('Particelle alpha di {d} Mev su {6s}'.format(d=enin,s=NomeTarget))
  157.   ax.set_xlabel('Spessore[cm]')
  158.   ax.set_ylabel('Sp[MeV/cm]')
  159.  
  160. plt.show()
  161.  
  162.  
  163.  
  164.  
Add Comment
Please, Sign In to add comment