PROGRAM PION_LIFETIME
!---------------------------------------------------------------------
! Monte Carlo Simulation for the Measurement of
! Charged Pion Life Time
!
! Detailed description can be found at:
! http://www1.gantep.edu.tr/~bingul/seminar/pion-lifetime/
!
! Ahmet Bingul, March 2006
!---------------------------------------------------------------------
IMPLICIT NONE
INTEGER, PARAMETER :: N0 = 10000 ! # of pion generated at t=0
INTEGER, PARAMETER :: NP = 10 ! # of points to take data
REAL, PARAMETER :: T0 = 2.602E-8 ! mean life time (s)
REAL, PARAMETER :: P0 = 50.0 ! pion beam momentum (MeV/c)
REAL, PARAMETER :: M0 = 139.5658 ! pion rest mass (MeV/c^2)
REAL, PARAMETER :: c = 3.0E+8 ! speed of light
INTEGER :: I,PIC(NP) ! PIC: pion counter
REAL :: Lambda,Gamma,Beta,DL,R,A,B,T
CALL RANDOM_SEED
CALL Generate
CALL Fitting
CALL Results
CONTAINS
SUBROUTINE Results
!--------------------------------------------------
! Prints the results to the user screen
!--------------------------------------------------
WRITE(*,*)
WRITE(*,12) "*** Monte Carlo Simulation for the **********"
WRITE(*,12) "*** Measurement of Charged Pion Life Time ***"
WRITE(*,*)
WRITE(*,12) "---------------------------------------------"
WRITE(*,10) "Pion mom. generated (MeV/c): ",P0
WRITE(*,10) "Pion life time (s) : ",T0
WRITE(*,11) "Number of Pion generated : ",N0
WRITE(*,11) "Number of counter positon : ",NP
WRITE(*,12) "---------------------------------------------"
WRITE(*,12) "Values obtained for each position:"
DO I=1,NP
PRINT 13,I,PIC(I),LOG(PIC(I)*1.0)
END DO
WRITE(*,12) "---------------------------------------------"
WRITE(*,12) "Fitting results:"
WRITE(*,14) "Slope, A = ",A
WRITE(*,14) "Intercept, B = ",B
WRITE(*,12) "---------------------------------------------"
t = -1.0/(A*Gamma*Beta*c)
WRITE(*,*)
WRITE(*,14) "Measured lifetime: ",t
WRITE(*,*)
10 FORMAT(A,ES10.3)
11 FORMAT(A,I5)
12 FORMAT(A)
13 FORMAT(I2,I8,ES15.3)
14 FORMAT(A,ES15.4)
END SUBROUTINE Results
SUBROUTINE Generate
!--------------------------------------------------
! Generates N0 pions each has decay length DL and
! Counts # of living pions from 1m to NP=10m.
!--------------------------------------------------
PIC = 0
DO I=1,N0
Gamma = SQRT(P0**2+M0**2)/M0
Beta = SQRT(1.0-1.0/Gamma**2)
Lambda= Gamma*Beta*T0*c
CALL RANDOM_NUMBER(R)
DL =-Lambda*LOG(R)
IF(DL>=1.) PIC(1) = PIC(1) + 1
IF(DL>=2.) PIC(2) = PIC(2) + 1
IF(DL>=3.) PIC(3) = PIC(3) + 1
IF(DL>=4.) PIC(4) = PIC(4) + 1
IF(DL>=5.) PIC(5) = PIC(5) + 1
IF(DL>=6.) PIC(6) = PIC(6) + 1
IF(DL>=7.) PIC(7) = PIC(7) + 1
IF(DL>=8.) PIC(8) = PIC(8) + 1
IF(DL>=9.) PIC(9) = PIC(9) + 1
IF(DL>=10.) PIC(10)= PIC(10) + 1
END DO
END SUBROUTINE Generate
SUBROUTINE Fitting
!--------------------------------------------------
! Performs least square fitting for the data
! generated from the decay rates vs distance plot.
!--------------------------------------------------
REAL :: x(NP),y(NP)
x = (/ (I*1.0, I=1,NP) /)
y = LOG(REAL(PIC))
A = (NP*SUM(x*y) - SUM(x)*SUM(y)) / & ! slope
(NP*SUM(x*x) - SUM(x)*SUM(x))
B = (SUM(x*x)*SUM(y) - SUM(x)*SUM(x*y)) / & ! intercept
(NP*SUM(x*x) - SUM(x)*SUM(x))
END SUBROUTINE Fitting
END PROGRAM