Added read histogram subroutine. Started work on hist merge utility.

This commit is contained in:
Yggdrasil 2026-04-27 17:27:02 +02:00
parent 132f091802
commit 01c9bf2018
3 changed files with 115 additions and 19 deletions

View File

@ -14,22 +14,29 @@ endif
# Output folder
OUT = bin
# Target executable
TARGET = event2
# Targets
TARGET1 = event2
TARGET2 = event2_merge
# Source files
SRCS = event2_03.f gbook.f
SRCS1 = event2_03.f gbook.f
SRCS2 = event2_merge.f gbook.f
# Executable path
EXE = $(OUT)/$(TARGET)
# Executable paths
EXE1 = $(OUT)/$(TARGET1)
EXE2 = $(OUT)/$(TARGET2)
# Default rule
all: $(EXE)
# Default rule (build both)
all: $(EXE1) $(EXE2)
# Build rule
$(EXE): $(SRCS)
# Build rules
$(EXE1): $(SRCS1)
mkdir -p $(OUT)
$(FC) $(FFLAGS) -o $(EXE) $(SRCS)
$(FC) $(FFLAGS) -o $(EXE1) $(SRCS1)
$(EXE2): $(SRCS2)
mkdir -p $(OUT)
$(FC) $(FFLAGS) -o $(EXE2) $(SRCS2)
# Convenience targets
debug:

6
event2_merge.f Normal file
View File

@ -0,0 +1,6 @@
PROGRAM MAIN
CALL GREAD('./results/gtopdraw_THRUST_00000.dat')
CALL GTOPER( 3,1,1,0,100+3)
CALL GTOPER(10+3,0,0,0,110+3)
END PROGRAM
C-----------------------------------------------------------------------

101
gbook.f
View File

@ -743,6 +743,12 @@ C SET UP PAGE...
ENDIF
NTYPE=MOD(NTYPE,4)+1
C PLOT...
WRITE (21,*) 'HIST ID ',ID
IF (IDERR.NE.0) THEN
WRITE (21,*) 'HIST IDERR',IDERR
ENDIF
WRITE (21,*) 'HIST NBINS',NX
WRITE (21,*) 'DATA'
DO 200 I=1, NX
IF ((ABS(X(I)).GE.1E-3.AND.ABS(X(I)).LT.1E5.OR.X(I).EQ.0).AND.
& (ABS(Y(I)).GE.1E-5.AND.ABS(Y(I)).LT.1E3.OR.Y(I).EQ.0)) THEN
@ -925,6 +931,91 @@ C-----------------------------------------------------------------------
GOTO 200
ENDIF
END
C-----------------------------------------------------------------------
SUBROUTINE GREAD(FILE)
IMPLICIT INTEGER (I-N)
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
CHARACTER*(*) FILE
CHARACTER*200 LINE, TITLE
CHARACTER*100 KEYS(5)
DOUBLE PRECISION TX, TY, TE
PARAMETER (NSIZE=200000, NMAX=2000)
COMMON /GBOOK/ A(NSIZE)
INTEGER NX, IOS, ID, IDERR
LOGICAL INDATA
INDATA = .FALSE.
IDERR = 0
OPEN(10, FILE=FILE, STATUS='OLD')
10 CONTINUE
READ(10,'(A)',END=900) LINE
C --- Read keywords
READ(LINE,*,IOSTAT=IOS) KEYS
IF (IOS.GT.0) GOTO 10
C --- PROCESS KEYS
IF (KEYS(1).EQ.'SET') THEN
IF(KEYS(2).EQ.'LIMITS') THEN
READ(KEYS(4),*) XMIN
READ(KEYS(5),*) XMAX
ENDIF
ELSE IF (KEYS(1).EQ.'TITLE') THEN
TITLE = KEYS(3)
ELSE IF (KEYS(1).EQ.'HIST') THEN
IF(KEYS(2).EQ.'ID') THEN
READ(KEYS(3),'(I4)') ID
ELSE IF(KEYS(2).EQ.'IDERR') THEN
READ(KEYS(3),'(I4)') IDERR
ELSE IF(KEYS(2).EQ.'NBINS') THEN
READ(KEYS(3),'(I4)') NX
ENDIF
ELSE IF (KEYS(1).EQ.'DATA') THEN
INDATA = .TRUE.
CALL GBOOK1(ID,TITLE,NX,XMIN,XMAX)
IF(IDERR.NE.0) THEN
CALL GBOOK1(IDERR,TITLE,NX,XMIN,XMAX)
ENDIF
C --- DATA LINES
ELSE IF (INDATA) THEN
READ(LINE,*,IOSTAT=IOS) TX, TY, TE
IF(IOS.EQ.0) THEN
CALL GFILL1(ID,TX,TY)
IF(IDERR.NE.0) THEN
CALL GFILL1(IDERR,TX,TE)
ENDIF
ELSE IF (IOS .EQ. 5010) THEN
C ------ FORMAT ERROR: CHECK IF END OF DATA OR JUST AN ERROR
IF(TRIM(LINE).EQ.'HIST ; PLOT'.OR.
$ TRIM(LINE).EQ.'JOIN DASH ; PLOT') THEN
INDATA = .FALSE.
ENDIF
GOTO 10
ENDIF
ENDIF
GOTO 10
900 CONTINUE
CLOSE(10)
RETURN
END
C-----------------------------------------------------------------------
SUBROUTINE GOPENF
C---OPEN TopDrawer FILE
@ -935,6 +1026,7 @@ C---OPEN TopDrawer FILE
COMMON /GFILE/ OPEN, TITLE
COMMON /FPATH/ OPATH
DATA OPEN/.FALSE./
DATA OPATH/'./'/
IF (OPEN) RETURN
OPEN=.TRUE.
N=0
@ -968,13 +1060,4 @@ C-----------------------------------------------------------------------
COMMON /GTCOM/ TYPE,NTYPE
DATA TYPE,NTYPE/' ','DASH ','DOT-DASH','PATTERN ',0/
END
C-----------------------------------------------------------------------
double precision function ran(iseed)
implicit none
integer iseed
double precision r(1)
call rangen(1,r)
iseed=iseed+1
ran=r(1)
end
C-----------------------------------------------------------------------