[Prev][Next][Index][Thread]
NEMO3 display
Hello
Below are files that define the NEMO3 display.
(NEMO3 display is more simple and easier to send
than NA48).
- Vis.c: main, osh commands, "types"
and "properties" for NEMO3.
Mainly we have defined "GEIG" for some geiger
counters and "SCIN" for some scintillators.
- Rep.c: for event geigers, scintillators
representations.
- events.f: NEMO3 F77 code to:
* read GEANT
* decode event
* do the interface with the "OType"
system to get values of the "porperties".
(routine IBKGET, RBKGET).
- Vis.odb, user.odb: interpreted interface.
What is drawn in views is defined in the
"buildSceneCallback" of the "top_left_view"
XoCamera widget.
Other XoCameras are connected to the top_left_view
with the "connectedTo" resource that permits
to do multiviewing.
The detector is drawn using a NEMO3 GEANT3
database and the G3o package facilities.
G.Barrand
--------------------- Vis.c -------------------------------
/*
#define DEBUG
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#define HAS_WO /*Required.*/
#define HAS_XTW /*Required.*/
/*begin Want_h*/
#include <WoWo.h>
#include <WoXtw.h>
#include <WoXm.h>
#include <WoXo.h>
#include <WoG3o.h>
/*end Want_h*/
/*Co*/
#include <Fstr.h>
#include <CFile.h>
#include <CString.h>
#include <CIO.h>
#include <CNel.h>
#include <CMem.h>
/*Ho*/
#include <OHist.h>
/*Xo*/
#include <XoPlot.h>
/*G3o*/
#include <otypeG3o.h>
/*Wo*/
#include <OWidget.h>
#include <Rep.h>
#ifndef HAS_NOT_U
#define evinit evinit_
#define evopen evopen_
#define evget evget_
#define ibkget ibkget_
#define rbkget rbkget_
#define ibkini ibkini_
#define ibkgen ibkgen_
#endif
#ifdef c__plusplus /* for vms cxx */
#define __cplusplus c__plusplus
#endif
#ifdef __cplusplus
extern "C"{
#endif
int evinit (void);
int evopen (Fstr,int*);
void evget (int*);
int ibkget (int*,int*);
float rbkget (int*,int*);
int ibkini (int*);
int ibkgen (int*);
static void otype_Vis ();
static int Vis_init (int,char**,OExec);
static int Vis_open (int,char**,OExec);
static int Vis_event (int,char**,OExec);
static void GetPropProc (OIdent,OType,OProp,void*,int*);
static OIdent* ExtentProc (OType);
#ifdef __cplusplus
}
#endif
typedef void(*VoidProc)();
static struct {
char* fname;
double* doubles;
void** extent;
} Class = {NULL,NULL};
/***************************************************************************/
int main (
int a_argn
,char** a_args
)
/***************************************************************************/
/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
{
/*.........................................................................*/
/*begin Want_c*/
#include <WoWo.c>
#include <WoXtw.c>
#include <WoXm.c>
#include <WoXo.c>
#include <WoG3o.c>
/*end Want_c*/
otype_Vis ();
{OSh osh;
osh = OShRef();
/*Vis cmds.*/
OShAddCmd (osh,OCmdCreate("Vis/init" ,(VoidProc)Vis_init));
OShAddCmd (osh,OCmdCreate("Vis/open" ,(VoidProc)Vis_open));
OShAddCmd (osh,OCmdCreate("Vis/event" ,(VoidProc)Vis_event));
}
CFileAddPath ("VISUSR");
WoStartup (a_argn,a_args);
WoMainLoop ();
CMemFree (Class.doubles);
CStringDelete (Class.fname);
CNelDelete (Class.extent);
WoClearClass (1);
return EXIT_SUCCESS;
}
/***************************************************************************/
static void otype_Vis (
)
/***************************************************************************/
/* Initialize bank structure */
/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
{
static int init = 0;
OType otype;
/*.........................................................................*/
if(init) return;
otype = OTypeCreate ("GEIG");
OTypeSetExtentProc (otype,(VoidProc)ExtentProc);
OTypeSetGetPropProc (otype,(VoidProc)GetPropProc);
OTypeSetRepProc (otype,(VoidProc)RepGEIG);
OTypeSetUser (otype,(void*)1);
OTypeAddProp (otype,OPropCreate("id" ,OPropInt ,(void*)999));
OTypeAddProp (otype,OPropCreate("tdc" ,OPropDouble,(void*)6 ));
OTypeAddProp (otype,OPropCreate("x" ,OPropDouble,(void*)10 ));
OTypeAddProp (otype,OPropCreate("y" ,OPropDouble,(void*)11 ));
OTypeAddProp (otype,OPropCreate("z" ,OPropDouble,(void*)12 ));
otype = OTypeCreate ("SCIN");
OTypeSetExtentProc (otype,(VoidProc)ExtentProc);
OTypeSetGetPropProc (otype,(VoidProc)GetPropProc);
OTypeSetRepProc (otype,(VoidProc)RepSCIN);
OTypeSetUser (otype,(void*)2);
OTypeAddProp (otype,OPropCreate("id" ,OPropInt,(void*)999));
OTypeAddProp (otype,OPropCreate("sect" ,OPropInt ,(void*)2 ));
OTypeAddProp (otype,OPropCreate("iobt" ,OPropInt ,(void*)3 ));
OTypeAddProp (otype,OPropCreate("pos" ,OPropInt ,(void*)4 ));
OTypeAddProp (otype,OPropCreate("layer" ,OPropInt ,(void*)5 ));
OTypeAddProp (otype,OPropCreate("ener" ,OPropInt ,(void*)6 ));
OTypeAddProp (otype,OPropCreate("time" ,OPropInt ,(void*)7 ));
OTypeAddProp (otype,OPropCreate("x" ,OPropDouble,(void*)10 ));
OTypeAddProp (otype,OPropCreate("y" ,OPropDouble,(void*)11 ));
OTypeAddProp (otype,OPropCreate("z" ,OPropDouble,(void*)12 ));
otype = OTypeCreate ("EVNT");
OTypeSetExtentProc (otype,(VoidProc)ExtentProc);
OTypeSetGetPropProc (otype,(VoidProc)GetPropProc);
OTypeSetUser (otype,(void*)999);
OTypeAddProp (otype,OPropCreate("id" ,OPropInt,(void*)999));
OTypeAddProp (otype,OPropCreate("nrun" ,OPropInt,(void*)1 ));
OTypeAddProp (otype,OPropCreate("nevt" ,OPropInt,(void*)2 ));
init = 1;
}
/***************************************************************************/
/***************************************************************************/
/***************************************************************************/
/***************************************************************************/
static int Vis_init (
int a_argn
,char** a_args
,OExec a_exec
)
/***************************************************************************/
/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
{
/*.........................................................................*/
evinit ();
a_exec = NULL;
a_argn = 0;
a_args = NULL;
return EXIT_SUCCESS;
}
/***************************************************************************/
static int Vis_open (
int a_argn
,char** a_args
,OExec a_exec
)
/***************************************************************************/
/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
{
char* fname;
/*.........................................................................*/
if(a_argn!=2) {CWarnF ("%s: bad arg number.\n",a_args[0]);return EXIT_FAILURE;}
fname = OExecString(a_exec,a_args[1]);
if(fname)
{
Fstr fstr;
int lstr;
fstr = FstrFrC (fname,&lstr);
evopen (fstr,&lstr);
FstrDelete (fstr);
CStringDelete (Class.fname);
Class.fname = CStringDuplicate(fname);
CStringFileNameRemDir (Class.fname);
}
return EXIT_SUCCESS;
}
/***************************************************************************/
static int Vis_event (
int a_argn
,char** a_args
,OExec a_exec
)
/***************************************************************************/
/* Select Event */
/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
{
int ievent = 0;
/*.........................................................................*/
if((a_argn!=1)&&(a_argn!=2)) {CWarnF ("%s: bad arg number.\n",a_args[0]);return EXIT_FAILURE;}
if(a_argn==1)
{
ievent = 0;
}
else if(a_argn==2)
{
int status;
ievent = (int)CStringLong(OExecString(a_exec,a_args[1]),&status);
if(!status) {CWarnF ("%s: %s not a number.\n",a_args[0],a_args[1]);return EXIT_FAILURE;}
}
evget (&ievent);
OExecPutPipe (a_exec,NULL);
return EXIT_SUCCESS;
}
/***************************************************************************/
static void GetPropProc (
OIdent a_obj
,OType This
,OProp a_prop
,void* a_addr
,int* a_number
)
/***************************************************************************/
/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
{
int obj;
int type;
int tuser,puser;
/*.........................................................................*/
if(!This) return;
if(!a_prop) return;
if(!a_addr) return;
tuser = (int)OTypeUser(This);
ibkini (&tuser);
obj = (int)a_obj;
type = OPropPropType (a_prop);
puser = (int)OPropUser (a_prop);
if( (tuser==999) && (puser==7))
{
*((char**)a_addr) = Class.fname;
}
else if(puser==999) *((int*)a_addr) = obj;
else if(type==OPropInt) *((int*)a_addr) = ibkget(&obj,&puser);
else if(type==OPropDouble) *((double*)a_addr) = (double)rbkget(&obj,&puser);
else CWarnF ("GetProp: unknown type %d.\n",type);
a_number = NULL;
}
/***************************************************************************/
static OIdent* ExtentProc (
OType This
)
/***************************************************************************/
/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
{
register int count;
int objn;
int zid;
/*.........................................................................*/
if(!This) return NULL;
zid = (int)OTypeUser(This);
if(zid<=0) return 0;
objn = ibkini(&zid);
if(objn<=0) return 0;
CNelDelete (Class.extent);
Class.extent = CNelCreate(objn);
if(!Class.extent) return NULL;
for(count=0;count<objn;count++) Class.extent[count] = (OIdent)(count+1);
return Class.extent;
}
-------------------- Rep.c ------------------------------------
#include <stdlib.h>
#include <string.h>
#include <math.h>
/*Co*/
#include <CString.h>
#include <CIO.h>
/*Go*/
#include <GRep.h>
/*G3o*/
#include <GDraw.h>
/*Vis*/
#include <Rep.h>
static struct {
OProp geigX,geigY,geigZ,geigTDC;
OProp scinX,scinY,scinZ,scinIobt;
} Class = {NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};
/***************************************************************************/
void* RepGEIG (
OIdent a_obj
,OType a_type
)
/***************************************************************************/
/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
{
GObject gobject;
double x,y,z;
double tdc;
/*.........................................................................*/
if(!Class.geigX)
{
Class.geigX = OTypeRefProp (a_type,"x");
Class.geigY = OTypeRefProp (a_type,"y");
Class.geigZ = OTypeRefProp (a_type,"z");
Class.geigTDC = OTypeRefProp (a_type,"tdc");
}
OTypeObjGetProp (a_type,a_obj,Class.geigX ,(void*)&x ,0);
OTypeObjGetProp (a_type,a_obj,Class.geigY ,(void*)&y ,0);
OTypeObjGetProp (a_type,a_obj,Class.geigZ ,(void*)&z ,0);
OTypeObjGetProp (a_type,a_obj,Class.geigTDC,(void*)&tdc ,0);
/*printf ("debug:%d %g %g %g\n",(int)a_obj,x,y,z);*/
gobject = GObjectCreateNF (64,"GEIG/%d",(int)a_obj);
/*GRepMarker (gobject,x,y,z);*/
GRepCircle (gobject,tdc,x,y,z,0.,0.,1.);
return gobject;
}
/***************************************************************************/
void* RepSCIN (
OIdent a_obj
,OType a_type
)
/***************************************************************************/
/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
{
GObject gobject = NULL;
double x,y,z;
double radius,phi;
double zmin,zmax;
double phmin,phmax;
int iobt;
/*.........................................................................*/
if(!Class.scinX)
{
Class.scinX = OTypeRefProp (a_type,"x");
Class.scinY = OTypeRefProp (a_type,"y");
Class.scinZ = OTypeRefProp (a_type,"z");
Class.scinIobt = OTypeRefProp (a_type,"iobt");
}
OTypeObjGetProp (a_type,a_obj,Class.scinX ,(void*)&x ,0);
OTypeObjGetProp (a_type,a_obj,Class.scinY ,(void*)&y ,0);
OTypeObjGetProp (a_type,a_obj,Class.scinZ ,(void*)&z ,0);
OTypeObjGetProp (a_type,a_obj,Class.scinIobt ,(void*)&iobt ,0);
/*printf ("debug:scin:%d %g %g %g %d\n",(int)a_obj,x,y,z,iobt);*/
radius = sqrt (x * x + y * y);
phi = 180. * atan2 (y,x) /M_PI;
zmin = z - 10.;
zmax = z + 10.;
if(iobt==0) /*internal*/
{
phmin = phi - 4.5;
phmax = phi + 4.5;
gobject = GObjectCreateNF (64,"SCIN/%d",(int)a_obj);
GRepMarker (gobject,x,y,z);
GRepArc (gobject, NULL,radius, zmin,phmin,phmax);
GRepArc (gobject, NULL,radius, zmax,phmin,phmax);
GRepLineCyl (gobject, NULL,radius, phmin, zmin, radius, phmin,zmax);
GRepLineCyl (gobject, NULL,radius, phmax, zmin, radius, phmax,zmax);
}
else if(iobt==1) /*external*/
{
phmin = phi - 3.;
phmax = phi + 3.;
gobject = GObjectCreateNF (64,"SCIN/%d",(int)a_obj);
GRepMarker (gobject,x,y,z);
GRepArc (gobject, NULL,radius, zmin,phmin,phmax);
GRepArc (gobject, NULL,radius, zmax,phmin,phmax);
GRepLineCyl (gobject, NULL,radius, phmin, zmin, radius, phmin,zmax);
GRepLineCyl (gobject, NULL,radius, phmax, zmin, radius, phmax,zmax);
}
else
{
CWarnF ("No Rep for SCIN %d on iobt %d\n",(int)a_obj,iobt);
}
return gobject;
}
------------- events.f ----------------------------
C************************************************************
INTEGER FUNCTION EVINIT()
C************************************************************
C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
IMPLICIT NONE
C+GCBANK
INTEGER NWGEANT
PARAMETER (NWGEANT=1000000)
INTEGER KWBANK
PARAMETER (KWBANK=69000)
INTEGER NZEBRA
REAL GVERSN,ZVERSN
INTEGER Q
COMMON/GCBANK/NZEBRA,GVERSN,ZVERSN,Q(NWGEANT)
C+USERS
INTEGER IOPEN
COMMON/USERS/IOPEN
C
DATA IOPEN/0/
INTEGER ICALL
DATA ICALL/0/
SAVE ICALL
C............................................................
IF (ICALL.EQ.1) RETURN
ICALL = 1
C
C.. IF NOT DONE; INITIALIZE ZEBRA and GCBANK
IF(NZEBRA.LT.KWBANK) THEN
CALL GZEBRA (NWGEANT)
ENDIF
C.. IF NOT DONE; INITIALISE GEANT
IF(GVERSN.EQ.0.AND.ZVERSN.EQ.0) THEN
CALL GINIT
ENDIF
C.. IF NOT DONE; INITIALIZE GEANT/ZBOOK DATA STUCTURES
C GZINIT is protected against multiple call by
C flag IFINIT(2) in GFLAG common.
CALL GZINIT
C
CALL UGINIT
C
EVINIT = 1
RETURN
END
C***********************************************************************
SUBROUTINE EVGET(IEVT)
C***********************************************************************
C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
IMPLICIT NONE
INTEGER IEVT
C+USERS
INTEGER IOPEN
COMMON/USERS/IOPEN
C
INTEGER IFIRST
SAVE IFIRST
DATA IFIRST/0/
C............................................................
IF(IOPEN.EQ.0) THEN
CALL CPRINT ('No file open.',13)
RETURN
ENDIF
IF(IFIRST.EQ.0)THEN
IFIRST=1
ELSE
CALL GTRIGC
ENDIF
call guout
RETURN
END
CDECK ID>, UGINIT.
SUBROUTINE UGINIT
*--
*-- GEANT INITIALISATIONS
*--
COMMON /ZUNIT/ IQREAD,IQPRNT,IQPR2,IQLOG,IQPNCH,IQTTIN,IQTYPE
COMMON /ZUNITZ/IQDLUN,IQFLUN,IQHLUN, NQUSED
COMMON/GCLIST/NHSTA,NGET ,NSAVE,NSETS,NPRIN,NGEOM,NVIEW,NPLOT
+ ,NSTAT,LHSTA(20),LGET (20),LSAVE(20),LSETS(20),LPRIN(20)
+ ,LGEOM(20),LVIEW(20),LPLOT(20),LSTAT(20)
C
*--
*--
*-- DETECTOR GEOMETRY AND MATERIALS
*--
*-- READ BANKS FROM GEOMETRY FILE
*--
CALL GOPEN(30,'IA',1024,IER)
IF(IER.NE.0) THEN
PRINT *,'*** ERROR WHILE OPENING UNIT 30 ***'
PRINT *,' NO INIT INFORMATION READ'
stop
ELSE
IDVOLU=0
CALL GFIN(30,'INIT',1,IDVOLU,' ',IER)
IF(IER.LT.0) THEN
PRINT *,
&
&'*** ERROR WHILE READING INIT INFORMATION ON UNIT 30 ***'
&
C PRINT *,' ZEBRA ERROR - IQUEST(1) =',IQUEST(1)
stop
ELSEIF(IER.GT.0) THEN
PRINT *,' VERSION OF THE DATA STRUCTURE RED IN :',IDVOLU
PRINT *,' NUMBER OF STRUCTURES RED IN :',IER
IF(IER.LT.8) STOP
ENDIF
CALL GCLOSE(30,IER)
IF(IER.NE.0) PRINT *,'*** ERROR WHILE CLOSING UNIT 30 ***'
ENDIF
*--
*-- CLOSE GEOMETRY BANKS
*--
CALL GGCLOS
*--
END
C***********************************************************************
INTEGER FUNCTION EVOPEN(FNAME,FLEN)
C***********************************************************************
C
C open data file for Zebra
C
C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
IMPLICIT NONE
CHARACTER*(*) FNAME
INTEGER FLEN
C+USERS
INTEGER IOPEN
COMMON/USERS/IOPEN
C
INTEGER IER
C.......................................................................
IF(IOPEN.EQ.1) THEN
CALL GCLOSE (31,IER)
IOPEN = 0
ENDIF
CALL CBINDU (FNAME,FLEN,31)
CALL GOPEN (31,'IA',1024,IER)
IF(IER.NE.0) THEN
PRINT *,'*** ERROR WHILE OPENING UNIT 31 ***'
PRINT *,' NO INIT INFORMATION READ'
IOPEN = 0
EVOPEN = 0
ENDIF
IOPEN = 1
EVOPEN = 1
RETURN
END
*--
CDECK ID>, UGLAST.
SUBROUTINE UGLAST
*--
*-- STANDARD GEANT TERMINATION ROUTINE
*--
CALL GCLOSE(31,IER)
CALL GLAST
*--
RETURN
END
CDECK ID>, GUOUT.
SUBROUTINE GUOUT
*--
*-- END OF EVENT PROCCESSING
*--
COMMON/GCFLAG/IDEBUG,IDEMIN,IDEMAX,ITEST,IDRUN,IDEVT,IEORUN
+ ,IEOTRI,IEVENT,ISWIT(10),IFINIT(20),NEVENT,NRNDM(2)
COMMON/GCFLAX/BATCH, NOLOG
LOGICAL BATCH, NOLOG
C
COMMON/GCONST/PI,TWOPI,PIBY2,DEGRAD,RADDEG,CLIGHT,BIG,EMASS
COMMON/GCONSX/EMMU,PMASS,AVO
C
COMMON/GCLIST/NHSTA,NGET ,NSAVE,NSETS,NPRIN,NGEOM,NVIEW,NPLOT
+ ,NSTAT,LHSTA(20),LGET (20),LSAVE(20),LSETS(20),LPRIN(20)
+ ,LGEOM(20),LVIEW(20),LPLOT(20),LSTAT(20)
C
COMMON/GCVOLU/NLEVEL,NAMES(15),NUMBER(15),
+LVOLUM(15),LINDEX(15),INFROM,NLEVMX,NLDEV(15),LINMX(15),
+GTRAN(3,15),GRMAT(10,15),GONLY(15),GLX(3)
C
*--
COMMON/MYGSCI/ NFOILS
+ ,R_FOIL,H_FOIL,E_FOIL,W_FOIL
+ ,HL_AWIR,Z_CALIB
*-- HL_AWIR HALF LENGTH OF THE ANODE WIRES IN cm
*--
*--
COMMON/MYDIGI/ LOW_TH,HIGH_TH,ADC_CH,Q_CH,TDC_CH_SC
+ ,TAU_SC,TAU_EL,RESIST
+ ,FWHM_TRANS,D_PMT_GAIN
+ ,T_REF,DELAY_SC
+ ,E_DRIFT_V,DIFF_COEF,P_DRIFT_V,TDC_CH_FAST,
+ TDC_CH_SLOW
+ ,DELAY_TDC_FAST,DELAY_TDC_SLOW
REAL LOW_TH
*--
COMMON/MYWORK/ NSC,NGG,SC(12,20),GG(12,200),N_STAT(10)
+ ,NBETA,NGAMMA,EBETA(3),EGAMMA(3)
*--
CHARACTER*4 IUDET,KUDET
DIMENSION NUMVS(3),NUMBV(3,20)
DATA NUMVS/3*0/
DIMENSION LTRAS(3,20),KDIGIS(7,20),NTRAS(20)
DIMENSION LNAM(10),LNUM(10),A(3),B(3)
*--
DIMENSION LTRAT(3,20),KDIGIT(9,20),NTRAT(20)
C DIMENSION NUMBVP(3,20),NUMBVTP(2,20)
*--
CHARACTER*4 SC_VOLA(9)
DATA SC_VOLA/'SSL1','SSL2','SSL3','SSL4','SSEC','SSEA','SSIA'
+ ,'SSEB','SSIB'/
*--
DIMENSION NUMBVT(2,20)
CHARACTER*4 TK_VOLA(3,18)
DATA TK_VOLA/ 'GIRA','GILA','GIFA','GIRB','GILB','GIFB',
+ 'GIRC','GILC','GIFC','GIRD','GILD','GIFD',
+ 'GIRE','GILE','GIFE','GIRF','GILF','GIFF',
+ 'GIRG','GILG','GIFG','GIRH','GILH','GIFH',
+ 'GIRI','GILI','GIFI',
+ 'GERA','GELA','GEFA','GERB','GELB','GEFB',
+ 'GERC','GELC','GEFC','GERD','GELD','GEFD',
+ 'GERE','GELE','GEFE','GERF','GELF','GEFF',
+ 'GERG','GELG','GEFG','GERH','GELH','GEFH',
+ 'GERI','GELI','GEFI'/
*--
*--
*-- READ DIGI,HEAD,KINE AND VERT BANKS FROM FILE IF REQUESTED
*--
IDVERS=0
CALL GFIN(31,'HEAD',1,IDVERS,'Q',IER)
IF(IER.LT.0) THEN
PRINT *,
& '*** ERROR WHILE READING HEAD INFORMATION ON UNIT 31 ***'
IOK=0
stop
ELSEIF(IER.GT.0) THEN
PRINT *,' GUOUT : NUMBER OF STRUCTURES RED IN :',IER
PRINT *,' VERSION OF THE DATA STRUCTURE RED IN :',IDVERS
ENDIF
IDVERS=0
CALL GFIN(31,'DIGI',1,IDVERS,'Q',IER)
IF(IER.LT.0) THEN
PRINT *,
& '*** ERROR WHILE READING DIGI INFORMATION ON UNIT 31 ***'
IOK=0
stop
ELSEIF(IER.GT.0) THEN
PRINT *,' GUOUT : NUMBER OF STRUCTURES RED IN :',IER
PRINT *,' VERSION OF THE DATA STRUCTURE RED IN :',IDVERS
ENDIF
*--
*-- ANALYSE SCINTILLATOR DIGITISATIONS:
*--
NSC=0
IPASS=0
NVDIM=3
NDDIM=7
NDMAX=20
NHDIM=10
NHMAX=20
C print*,' ***************************************************'
C print*,' run ',idrun,' evt ',idevt
C print*,' ***************************************************'
DO IVOL=1,9
IUDET=SC_VOLA(IVOL)
CALL VZERO(NUMVS,3)
CALL GFDIGI('CALO',IUDET,3,NVDIM,NDDIM,NDMAX,NUMVS,
+ LTRAS,NTRAS,NUMBV,KDIGIS,NDIGI)
C CALL GPDIGI('CALO',IUDET)
*--
IF(NDIGI.GT.0) THEN
DO IDIGI=1,NDIGI
NSC=NSC+1
IF(NSC.LE.20) THEN
SC(1,NSC)=0.
SC(8,NSC)=0.
SC(9,NSC)=0.
DO I=2,7
SC(I,NSC)=FLOAT(KDIGIS(I,IDIGI))
ENDDO
*--
*-- FIND POSITION OF THE SCINTILLATOR HIT
*-- FILL THE VOLUM PARAMETERS IN COMMON
*-- /GCVOLU/
*--
CALL UCTOH('NLSM',LNAM(1),4,4)
LNUM(1)=1
CALL UCTOH('NEMO',LNAM(2),4,4)
LNUM(2)=1
CALL UCTOH('SECT',LNAM(3),4,4)
LNUM(3)=NUMBV(1,IDIGI)
CALL UCTOH('HELS',LNAM(4),4,4)
LNUM(4)=1
KUDET(1:1)=IUDET(1:1)
KUDET(2:2)='W'
KUDET(3:3)=IUDET(3:3)
IF(IUDET(3:4).EQ.'IA'.OR.IUDET(3:4).EQ.'IB') THEN
KUDET(4:4)='N'
ELSEIF(IUDET(3:4).EQ.'EA'.OR.IUDET(3:4).EQ.'EB') THEN
KUDET(4:4)='E'
ELSE
KUDET(4:4)=IUDET(4:4)
ENDIF
CALL UCTOH(KUDET,LNAM(5),4,4)
LNUM(5)=NUMBV(2,IDIGI)
KUDET(2:2)='C'
CALL UCTOH(KUDET,LNAM(6),4,4)
LNUM(6)=NUMBV(3,IDIGI)
CALL UCTOH(IUDET,LNAM(7),4,4)
LNUM(7)=1
CALL GLVOLU(7,LNAM,LNUM,IER)
*--
CALL SCIN_POS(A,B)
c-- PRINT *,' COORD. SCINT.=',B
CALL UCOPY(B,SC(10,NSC),3)
*--
ENDIF
ENDDO
ENDIF
*--
ENDDO
*--
C do k=1,nsc
C print *,' scin ',k
C do j=2,7
C print *,' sc(',j,') ', sc(j,k)
C enddo
C do j=10,12
C print *,' sc(',j,') ', sc(j,k)
C enddo
C enddo
*-- ANALYSE GEIGER CELLS DIGITISATIONS:
*--
NGG=0
IPASS=0
NVDIM=2
NDDIM=9
NDMAX=20
NHDIM=10
NHMAX=20
DO IPL=1,18
DO IVOL=1,3
IUDET=TK_VOLA(IVOL,IPL)
CALL VZERO(NUMVS,3)
CALL GFDIGI('TKCH',IUDET,3,NVDIM,NDDIM,NDMAX,NUMVS,
+ LTRAT,NTRAT,NUMBVT,KDIGIT,NDIGI)
C CALL GPDIGI('TKCH',IUDET)
*--
IF(NDIGI.GT.0) THEN
DO IDIGI=1,NDIGI
NGG=NGG+1
IF(NGG.LE.200) THEN
GG(1,NGG)=0.
DO I=2,9
GG(I,NGG)=FLOAT(KDIGIT(I,IDIGI))
ENDDO
TA =FLOAT(KDIGIT(6,IDIGI)) * TDC_CH_FAST
TKB=FLOAT(KDIGIT(8,IDIGI)) * TDC_CH_FAST
TKT=FLOAT(KDIGIT(9,IDIGI)) * TDC_CH_FAST
P_D_V=2.*HL_AWIR/(TKB+TKT)
Z=-HL_AWIR + TKB*P_D_V
GG(12,NGG)=Z
*--
*-- FIND POSITION OF THE WIRE HIT
*-- FILL THE VOLUM PARAMETERS IN
*-- COMMON /GCVOLU/
*--
CALL UCTOH('NLSM',LNAM(1),4,4)
LNUM(1)=1
CALL UCTOH('NEMO',LNAM(2),4,4)
LNUM(2)=1
CALL UCTOH('SECT',LNAM(3),4,4)
LNUM(3)=NUMBVT(1,IDIGI)
CALL UCTOH('HELS',LNAM(4),4,4)
LNUM(4)=1
KUDET(1:2)=IUDET(1:2)
IF(IUDET(2:2).EQ.'I') THEN
KUDET(3:3)='N'
ELSE
KUDET(3:3)='X'
ENDIF
IF(IUDET(4:4).EQ.'A'.OR.IUDET(4:4).EQ.'B'
+ .OR.IUDET(4:4).
+ EQ.
+ 'C'.OR.IUDET(4:
+ 4).EQ.'D') THEN
KUDET(4:4)='1'
ELSEIF(IUDET(4:4).EQ.'E'.OR.IUDET(4:4).EQ.'F') THEN
KUDET(4:4)='2'
ELSE
KUDET(4:4)='3'
ENDIF
CALL UCTOH(KUDET,LNAM(5),4,4)
LNUM(5)=1
KUDET(4:4)=IUDET(4:4)
CALL UCTOH(KUDET,LNAM(6),4,4)
LNUM(6)=1
IF(IUDET(3:3).NE.'F') THEN
CALL UCTOH(IUDET,LNAM(7),4,4)
LNUM(7)=NUMBVT(2,IDIGI)
CALL GLVOLU(7,LNAM,LNUM,IER)
ELSE
KUDET(3:3)='M'
CALL UCTOH(KUDET,LNAM(7),4,4)
LNUM(7)=1
CALL UCTOH(IUDET,LNAM(8),4,4)
LNUM(8)=NUMBVT(2,IDIGI)
CALL GLVOLU(8,LNAM,LNUM,IER)
ENDIF
*--
CALL WIRE_POS(A,B)
c PRINT *,' TA,TKB,TKT=',TA,TKB,TKT
c PRINT *,' CORD. FIL.=',B(1),B(2)
CALL UCOPY(B,GG(10,NGG),2)
*--
*--
ENDIF
ENDDO
ENDIF
ENDDO
ENDDO
C do k=1,ngg
C print *,' geiger ',k
C do j=2,12
C print *,' gg(',j,') ', gg(j,k)
C enddo
C enddo
*--
*--
END
CDECK ID>, SCIN_POS.
SUBROUTINE SCIN_POS(A,B)
*--
*-- COORDINATE OF THE CENTER OF THE FRONT FACE OF THE SCINTILLATOR IN THE
*-- LOCAL
*--
COMMON/GCFLAG/IDEBUG,IDEMIN,IDEMAX,ITEST,IDRUN,IDEVT,IEORUN
+ ,IEOTRI,IEVENT,ISWIT(10),IFINIT(20),NEVENT,NRNDM(2)
COMMON/GCFLAX/BATCH, NOLOG
LOGICAL BATCH, NOLOG
C
COMMON/GCVOLU/NLEVEL,NAMES(15),NUMBER(15),
+LVOLUM(15),LINDEX(15),INFROM,NLEVMX,NLDEV(15),LINMX(15),
+GTRAN(3,15),GRMAT(10,15),GONLY(15),GLX(3)
C
PARAMETER (MAXMEC=30)
COMMON/GCTRAK/VECT(7),GETOT,GEKIN,VOUT(7),NMEC,LMEC(MAXMEC)
+ ,NAMEC(MAXMEC),NSTEP ,MAXNST,DESTEP,DESTEL,SAFETY,SLENG
+ ,STEP ,SNEXT ,SFIELD,TOFG ,GEKRAT,UPWGHT,IGNEXT,INWVOL
+ ,ISTOP ,IGAUTO,IEKBIN, ILOSL, IMULL,INGOTO,NLDOWN,NLEVIN
+ ,NLVSAV,ISTORY
PARAMETER (MAXME1=30)
COMMON/GCTPOL/POLAR(3), NAMEC1(MAXME1)
C
DIMENSION A(3),B(3),PAR_GFPARA(50),ATT_GFPARA(50)
CHARACTER*4 CHV(10),CHNAME
*--
IF(NLEVEL.GT.0) THEN
CALL UHTOC(NAMES,4,CHV,4*NLEVEL)
CHNAME=CHV(NLEVEL)
CALL GFPARA(CHV(NLEVEL),0,0,NPAR_GFPARA,NATT_GFPARA
+ ,PAR_GFPARA,ATT_GFPARA)
IF(CHV(NLEVEL).EQ.'SSIA') THEN
IF(NPAR_GFPARA.NE.4) THEN
PRINT *,' WARNING : SSIA IS NOT A TRD1'
PRINT *, 'NPAR,NATT,PAR,ATT=',
+ NPAR_GFPARA,NATT_GFPARA,PAR_GFPARA,
+ ATT_GFPARA
ENDIF
A(1)=0.
A(2)=0.
A(3)=PAR_GFPARA(4)
ELSEIF(CHV(NLEVEL).EQ.'SSIB') THEN
IF(NPAR_GFPARA.NE.11) THEN
PRINT *,' WARNING : SSIB IS NOT A TRAP'
PRINT *, 'NPAR,NATT,PAR,ATT=',
+ NPAR_GFPARA,NATT_GFPARA,PAR_GFPARA,
+ ATT_GFPARA
ENDIF
A(1)=10.2503
A(2)=-0.7838
A(3)=0.
ELSEIF(CHV(NLEVEL).EQ.'SSEA') THEN
IF(NPAR_GFPARA.NE.11) THEN
PRINT *,' WARNING : SSEA IS NOT A TRAP'
PRINT *, 'NPAR,NATT,PAR,ATT=',
+ NPAR_GFPARA,NATT_GFPARA,PAR_GFPARA,
+ ATT_GFPARA
ENDIF
A(1)=0.
A(2)=-PAR_GFPARA(4)
A(3)=0.
ELSEIF(CHV(NLEVEL).EQ.'SSEB') THEN
IF(NPAR_GFPARA.NE.11) THEN
PRINT *,' WARNING : SSEB IS NOT A TRAP'
PRINT *, 'NPAR,NATT,PAR,ATT=',
+ NPAR_GFPARA,NATT_GFPARA,PAR_GFPARA,
+ ATT_GFPARA
ENDIF
A(1)=-10.59458
A(2)=0.5081027
A(3)=0.
ELSEIF(CHV(NLEVEL).EQ.'SSEC') THEN
IF(NPAR_GFPARA.NE.4) THEN
PRINT *,' WARNING : SSEC IS NOT A TRD1'
PRINT *, 'NPAR,NATT,PAR,ATT=',
+ NPAR_GFPARA,NATT_GFPARA,PAR_GFPARA,
+ ATT_GFPARA
ENDIF
A(1)=0.
A(2)=0.
A(3)=-PAR_GFPARA(4)
ELSEIF(CHV(NLEVEL).EQ.'SSL1'.OR.CHV(NLEVEL).EQ.'SSL2'.OR.
+ CHV(NLEVEL).EQ.'SSL3'.OR.CHV(NLEVEL).EQ.'SSL4')
+ THEN
IF(NPAR_GFPARA.NE.4) THEN
PRINT *,' WARNING : SSLX IS NOT A TRD1'
PRINT *, 'NPAR,NATT,PAR,ATT=',
+ NPAR_GFPARA,NATT_GFPARA,PAR_GFPARA,
+ ATT_GFPARA
ENDIF
A(1)=0.
A(2)=-PAR_GFPARA(3)
A(3)=0.
ELSE
PRINT *,' *** WARNING : NLEVEL,CHV =',NLEVEL,(CHV(I),I=1,
& NLEVEL)
A(1)=0.
A(2)=0.
A(3)=0.
ENDIF
CALL GDTOM(A,B,1)
ELSE
STOP 'SCIN_POS'
ENDIF
*--
RETURN
END
CDECK ID>, WIRE_POS.
SUBROUTINE WIRE_POS(A,B)
*--
*-- COORDINATE OF THE ANODE WIRE IN THE
*-- LOCAL (A) AND MASTER (B) REF. SYST.
*--
COMMON/GCFLAG/IDEBUG,IDEMIN,IDEMAX,ITEST,IDRUN,IDEVT,IEORUN
+ ,IEOTRI,IEVENT,ISWIT(10),IFINIT(20),NEVENT,NRNDM(2)
COMMON/GCFLAX/BATCH, NOLOG
LOGICAL BATCH, NOLOG
C
COMMON/GCONST/PI,TWOPI,PIBY2,DEGRAD,RADDEG,CLIGHT,BIG,EMASS
COMMON/GCONSX/EMMU,PMASS,AVO
C
COMMON/GCVOLU/NLEVEL,NAMES(15),NUMBER(15),
+LVOLUM(15),LINDEX(15),INFROM,NLEVMX,NLDEV(15),LINMX(15),
+GTRAN(3,15),GRMAT(10,15),GONLY(15),GLX(3)
C
DIMENSION A(3),B(3),C(3)
CHARACTER*4 CHV(10),CHNAME
*--
IF(NLEVEL.GT.0) THEN
CALL UHTOC(NAMES,4,CHV,4*NLEVEL)
CHNAME=CHV(NLEVEL)
A(3)=0.
IF(CHNAME(1:2).EQ.'GI') THEN
IF(CHNAME(3:3).EQ.'F') THEN
IF(CHNAME(4:4).EQ.'A') THEN
A(1)=152.1
A(2)=-0.0050285
ENDIF
IF(CHNAME(4:4).EQ.'B') THEN
A(1)=149.3
A(2)=-0.00497811
ENDIF
IF(CHNAME(4:4).EQ.'C') THEN
A(1)=146.5
A(2)=-0.00481009
ENDIF
IF(CHNAME(4:4).EQ.'D') THEN
A(1)=143.7
A(2)=-0.00472991
ENDIF
IF(CHNAME(4:4).EQ.'E') THEN
A(1)=127.1
A(2)=-0.00434625
ENDIF
IF(CHNAME(4:4).EQ.'F') THEN
A(1)=124.3
A(2)=-0.00428139
ENDIF
IF(CHNAME(4:4).EQ.'G') THEN
A(1)=107.7
A(2)=-0.00439654
ENDIF
IF(CHNAME(4:4).EQ.'H') THEN
A(1)=104.9
A(2)=-0.00430576
ENDIF
IF(CHNAME(4:4).EQ.'I') THEN
A(1)=102.1
A(2)=-0.00419045
ENDIF
ELSEIF(CHNAME(3:3).EQ.'R' .OR. CHNAME(3:3).EQ.'L') THEN
IF(CHNAME(4:4).EQ.'A') THEN
A(1)=152.096
A(2)=1.05701
ENDIF
IF(CHNAME(4:4).EQ.'B') THEN
A(1)=149.296
A(2)=1.03751
ENDIF
IF(CHNAME(4:4).EQ.'C') THEN
A(1)=146.496
A(2)=1.01812
ENDIF
IF(CHNAME(4:4).EQ.'D') THEN
A(1)=143.697
A(2)=0.998653
ENDIF
IF(CHNAME(4:4).EQ.'E') THEN
A(1)=127.096
A(2)=1.0167
ENDIF
IF(CHNAME(4:4).EQ.'F') THEN
A(1)=124.296
A(2)=0.994272
ENDIF
IF(CHNAME(4:4).EQ.'G') THEN
A(1)=107.695
A(2)=1.01803
ENDIF
IF(CHNAME(4:4).EQ.'H') THEN
A(1)=104.895
A(2)=0.991537
ENDIF
IF(CHNAME(4:4).EQ.'I') THEN
A(1)=102.095
A(2)=0.965071
ENDIF
ENDIF
ELSEIF(CHNAME(1:2).EQ.'GE') THEN
IF(CHNAME(3:3).EQ.'F') THEN
IF(CHNAME(4:4).EQ.'A') THEN
A(1)=157.9
A(2)=-0.00494125
ENDIF
IF(CHNAME(4:4).EQ.'B') THEN
A(1)=160.7
A(2)=-0.00504705
ENDIF
IF(CHNAME(4:4).EQ.'C') THEN
A(1)=163.5
A(2)=-0.00515736
ENDIF
IF(CHNAME(4:4).EQ.'D') THEN
A(1)=166.3
A(2)=-0.00520596
ENDIF
IF(CHNAME(4:4).EQ.'E') THEN
A(1)=182.9
A(2)=-0.00426002
ENDIF
IF(CHNAME(4:4).EQ.'F') THEN
A(1)=185.7
A(2)=-0.00451765
ENDIF
IF(CHNAME(4:4).EQ.'G') THEN
A(1)=202.3
A(2)=-0.00447113
ENDIF
IF(CHNAME(4:4).EQ.'H') THEN
A(1)=205.1
A(2)=-0.00451398
ENDIF
IF(CHNAME(4:4).EQ.'I') THEN
A(1)=207.9
A(2)=-0.00457589
ENDIF
ELSEIF(CHNAME(3:3).EQ.'R' .OR. CHNAME(3:3).EQ.'L') THEN
IF(CHNAME(4:4).EQ.'A') THEN
A(1)=157.897
A(2)=0.981075
ENDIF
IF(CHNAME(4:4).EQ.'B') THEN
A(1)=160.697
A(2)=0.998455
ENDIF
IF(CHNAME(4:4).EQ.'C') THEN
A(1)=163.497
A(2)=1.01583
ENDIF
IF(CHNAME(4:4).EQ.'D') THEN
A(1)=166.297
A(2)=1.03327
ENDIF
IF(CHNAME(4:4).EQ.'E') THEN
A(1)=182.897
A(2)=1.01287
ENDIF
IF(CHNAME(4:4).EQ.'F') THEN
A(1)=185.697
A(2)=1.02839
ENDIF
IF(CHNAME(4:4).EQ.'G') THEN
A(1)=202.298
A(2)=0.980352
ENDIF
IF(CHNAME(4:4).EQ.'H') THEN
A(1)=205.098
A(2)=0.993939
ENDIF
IF(CHNAME(4:4).EQ.'I') THEN
A(1)=207.898
A(2)=1.00751
ENDIF
ENDIF
ENDIF
*--
CALL GDTOM(A,B,1)
IF(CHNAME(3:3).EQ.'L') THEN
CALL UCOPY(A,C,3)
CALL UCOPY(B,A,2)
CALL ROT(A,PI/10.,B)
CALL UCOPY(C,A,3)
ENDIF
*--
c PRINT *,' CHNAME, POS. OF THE WIRE IN L.R.S.:',CHNAME,(A(I),
c & I=1,2)
c PRINT *,' CHNAME, POS. OF THE WIRE IN M.R.S.:',CHNAME,(B(I),
c & I=1,2)
ENDIF
*--
RETURN
END
CDECK ID>, BLKDAT.
BLOCKDATA BLKDAT
*--
*--
COMMON/MYGSCI/ NFOILS
+ ,R_FOIL,H_FOIL,E_FOIL,W_FOIL
+ ,HL_AWIR,Z_CALIB
*-- HL_AWIR HALF LENGTH OF THE ANODE WIRES IN cm
*--
*--
COMMON/MYDIGI/ LOW_TH,HIGH_TH,ADC_CH,Q_CH,TDC_CH_SC
+ ,TAU_SC,TAU_EL,RESIST
+ ,FWHM_TRANS,D_PMT_GAIN
+ ,T_REF,DELAY_SC
+ ,E_DRIFT_V,DIFF_COEF,P_DRIFT_V,TDC_CH_FAST,
+ TDC_CH_SLOW
+ ,DELAY_TDC_FAST,DELAY_TDC_SLOW
REAL LOW_TH
*--
*-- LOW_TH LOWER SCINTILLATOR THRESHOLD IN V
*-- HIGH_TH HIGHER SCINTILLATOR THRESHOLD IN V
*-- ADC_CH ENERGY -> CHANEL CONVERSION FACTOR IN GeV/chanel
*-- Q_CH CHARGE PER ADC CHANEL IN C/chanel
*-- TDC_CH_SC SCINTILLATOR TDC TIME BIN (ns)
*-- TAU_SC SCINTILLATOR DECAY CONSTANT (ns)
*-- TAU_EL TIME CONSTANT OF THE ELECTRONICS (ns)
*-- RESIST RESISTANCE OF THE INTEGRATOR CIRCUIT (Ohm)
*--
*-- FWHM_TRANS FLUCTUATIONS IN TRANSIT TIME IN THE PMT (ns)
*-- (FOR A SINGLE ELECT
*-- D_PMT_GAIN RELATIVE FLUCTUATIONS OF THE PMT GAIN
*--
*-- T_REF REFERENCE TIME IN ns (WITH RESPECT TO TIME 0)
*-- DELAY_SC DELAY BETWEEN REF. TIME AND TDC STOP
*-- (FOR SCINTILLATORS) IN ns
*--
*-- E_DRIFT_V ELECTRON DRIFT VELOCITY IN cm/ns (NOT A CONSTANT
*-- DIFF_COEF ELECTRON LOGITUDINAL DIFFUSION COEFFICIENT IN
*-- cm**1/2 (SIGMAL=SQR
*-- P_DRIFT_V PLASMA DRIFT VELOCITY IN cm/ns
*--
*-- TDC_CH_FAST FAST TDC TIME BIN (ns)
*-- TDC_CH_SLOW SLOW TDC TIME BIN (ns)
*-- DELAY_TDC_FAST DELAY BETWEEN REF. TIME AND FAST TDC STOP
*-- (FOR ANODE WIRES)
*-- DELAY_TDC_SLOW DELAY BETWEEN REF. TIME AND SLOW TDC STOP
*-- (FOR ANODE WIRES)
*--
COMMON/MYWORK/ NSC,NGG,SC(12,20),GG(12,200),N_STAT(10)
+ ,NBETA,NGAMMA,EBETA(3),EGAMMA(3)
*--
*-- SCINTILLATOR DATA:
*-- NSC : NUMBER OF SCINTILLATORS HIT
*-- SC(1,1-NSC) : FREE
*-- SC(2,1-NSC) : SECTOR NUMBER (0-19 AS IN KDIGI)
*-- SC(3,1-NSC) : IOBT FLAG (0- 3 AS IN KDIGI)
*-- SC(4,1-NSC) : FCLL (0- 2 AS IN KDIGI)
*-- SC(5,1-NSC) : BLOC NUMBER (0-16 AS IN KDIGI)
*-- SC(6,1-NSC) : ADC CONTENT OF THE SCINTILLATOR HIT
*-- SC(7,1-NSC) : TDC CONTENT OF THE SCINTILLATOR HIT
*-- SC(8,1-NSC) : FREE
*-- SC(9,1-NSC) : FREE
*-- SC(10,1-NSC) : X COORDINATE OF THE FRONT FACE OF THE SCINTILLATOR
*-- HIT (M.R.S
*-- SC(11,1-NSC) : Y COORDINATE OF THE FRONT FACE OF THE SCINTILLATOR
*-- HIT (M.R.S
*-- SC(12,1-NSC) : Z COORDINATE OF THE FRONT FACE OF THE SCINTILLATOR
*-- HIT (M.R.S
*--
*-- GEIGER CELL DATA:
*-- NGG : NUMBER OF CELLS HIT
*-- GG(1,1-NGG) : FREE
*-- GG(2,1-NGG) : SECTOR NUMBER (0-19 AS IN KDIGI)
*-- GG(3,1-NGG) : IO FLAG (0- 1 AS IN KDIGI)
*-- GG(4,1-NGG) : ABCD..I FLAG (0- 8 AS IN KDIGI)
*-- GG(5,1-NGG) : CELL NUMBER
*-- GG(6,1-NGG) : FAST TDC CONTENT
*-- GG(7,1-NGG) : SLOW TDC CONTENT
*-- GG(8,1-NGG) : TDC CONTENT FOR CATHODE 1 (BOTTOM)
*-- GG(9,1-NGG) : TDC CONTENT FOR CATHODE 1 (TOP)
*-- GG(10,1-NGG) : X COORDINATE OF THE WIRE HIT (M.R.S.)
*-- GG(11,1-NGG) : Y COORDINATE OF THE WIRE HIT (M.R.S.)
*-- GG(12,1-NGG) : Z COORDINATE OF THE HIT (M.R.S.)
*--
*-- IDENTIFIED PARTICLES:
*-- NBETA : NUMBER OF IDENTIFIED ELECTRONS
*-- NGAMMA : NUMBER OF IDENTIFIED GAMMAS
*-- EBETA(1-NBETA) : MEASURED ENERGY OF THE ELECTRONS
*-- EGAMMA(1-NGAMMA): MEASURED ENERGY OF THE GAMMAS
*--
*-------------------------------------------------------------------------------
*--
*-- USER WORDS FOR STATISTICS
DATA N_STAT/10*0/
*--
*-- DETECTOR GEOMETRY
*-- -----------------
*--
*-- FOIL DIMENSIONS
DATA NFOILS/7/
DATA R_FOIL/155.0028/,H_FOIL/206.0/,E_FOIL/0.0050/,W_FOIL/6.45/
*--
*-- HALF LEGTH OF THE ANODE WIRE
DATA HL_AWIR/135.65/
*-- Z POSITION OF THE SOURCES FOR CALIBRATION
DATA Z_CALIB/90./
*--
*-- SCINTILLATOR THRESHOLDS
DATA LOW_TH/0.010/ , HIGH_TH/0.030/
*-- ENERGY -> CHANEL CONVERSION FACTOR - CHARGE PER CHANEL - SCINTILLATOR
*-- TDC TI
DATA ADC_CH/0.000002/ , Q_CH/0.25E-12/ , TDC_CH_SC/0.100/
*-- SCINT. DECAY TIME CONSTANT - ELECTRONIC TIME CONSTANT - RESISTANCE OF
*-- INTEGR
C DATA TAU_SC/3.3/ , TAU_EL/5.0/ , RESIST/50./
DATA TAU_SC/2.0/ , TAU_EL/5.0/ , RESIST/50./
*-- FLUCTUATIONS IN TRANSIT TIME IN THE PMT (ns) (FOR A SINGLE ELECTRON)
DATA FWHM_TRANS/2.0/
*-- RELATIVE FLUCTUATIONS OF THE GAIN OF THE PMT
DATA D_PMT_GAIN/0.005/
*-- ELECTRON DRIFT VELOCITY - PLASMA DRIFT VELOCITY
DATA E_DRIFT_V/0.002/ , P_DRIFT_V/0.007/
*-- ELECTRON LOGITUDINAL DIFFUSION COEFFICIENT IN cm**1/2
*-- (SIGMAL=SQRT(DIFF_COEF
DATA DIFF_COEF/0.0026/
*-- REFERENCE TIME IN ns (WITH RESPECT TO TIME 0) - DELAY BETWEEN REF.
*-- TIME AND
DATA T_REF/100./ , DELAY_SC/100./
*-- FAST TDC TIME BIN (ns) - SLOW TDC TIME BIN (ns)
C DATA TDC_CH_FAST/20./ , TDC_CH_SLOW/500./
DATA TDC_CH_FAST/12.5/ , TDC_CH_SLOW/500./
*-- DELAY BETWEEN REF. TIME AND FAST TDC STOP - DELAY BETWEEN REF. TIME
*-- AND SLOW
DATA DELAY_TDC_FAST/4000./ , DELAY_TDC_SLOW/1000000./
*--
END
CDECK ID>, DUMMY.
SUBROUTINE QNEXT
END
subroutine ipm
return
end
subroutine ispmci
return
end
C***********************************************************************
C***********************************************************************
C***********************************************************************
C***********************************************************************
INTEGER FUNCTION IBKINI (IBANK)
C***********************************************************************
C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
IMPLICIT NONE
INTEGER IBANK
C
INTEGER NSC,NGG,NBETA,NGAMMA,N_STAT
REAL SC,GG,EBETA,EGAMMA
COMMON/MYWORK/ NSC,NGG,SC(12,20),GG(12,200),N_STAT(10)
+ ,NBETA,NGAMMA,EBETA(3),EGAMMA(3)
C
INTEGER JBANK
COMMON/IBANK/JBANK
C.......................................................................
IBKINI = 0
JBANK = 0
IF (IBANK.EQ.1) THEN
IBKINI = NGG
JBANK = IBANK
ELSE IF (IBANK.EQ.2) THEN
IBKINI = NSC
JBANK = IBANK
ELSE IF (IBANK.EQ.999) THEN
IBKINI = 1
JBANK = IBANK
ENDIF
RETURN
END
C***********************************************************************
INTEGER FUNCTION IBKGEN(IFIELD)
C***********************************************************************
C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
IMPLICIT NONE
INTEGER IFIELD
C.......................................................................
C IBKGEN = Q(LBANK + IFIELD)
IBKGEN = 1
RETURN
END
C***********************************************************************
INTEGER FUNCTION IBKGET(IOBJ,IFIELD)
C***********************************************************************
C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
IMPLICIT NONE
INTEGER IOBJ,IFIELD
C
C+KEEP,GTFLAG.
INTEGER IDEBUG,IDEMIN,IDEMAX,ITEST,IDRUN,IDEVT,IEORUN
+ ,IEOTRI,IEVENT,ISWIT,IFINIT,NEVENT,NRNDM
C+KEEP,GCFLAG
COMMON/GCFLAG/IDEBUG,IDEMIN,IDEMAX,ITEST,IDRUN,IDEVT,IEORUN
+ ,IEOTRI,IEVENT,ISWIT(10),IFINIT(20),NEVENT,NRNDM(2)
C
INTEGER NSC,NGG,NBETA,NGAMMA,N_STAT
REAL SC,GG,EBETA,EGAMMA
COMMON/MYWORK/ NSC,NGG,SC(12,20),GG(12,200),N_STAT(10)
+ ,NBETA,NGAMMA,EBETA(3),EGAMMA(3)
C
INTEGER JBANK
COMMON/IBANK/JBANK
C.......................................................................
IBKGET = 0
IF (JBANK.EQ.999) THEN
IF (IFIELD.EQ.1) THEN
IBKGET = IDRUN
ELSE IF (IFIELD.EQ.2) THEN
IBKGET = IDEVT
ENDIF
ELSE IF (JBANK.EQ.1) THEN
IBKGET = GG (IFIELD,IOBJ)
ELSE IF (JBANK.EQ.2) THEN
IBKGET = SC (IFIELD,IOBJ)
ENDIF
RETURN
END
C***********************************************************************
REAL FUNCTION RBKGET(IOBJ,IFIELD)
C***********************************************************************
C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
IMPLICIT NONE
INTEGER IOBJ,IFIELD
C
INTEGER NSC,NGG,NBETA,NGAMMA,N_STAT
REAL SC,GG,EBETA,EGAMMA
COMMON/MYWORK/ NSC,NGG,SC(12,20),GG(12,200),N_STAT(10)
+ ,NBETA,NGAMMA,EBETA(3),EGAMMA(3)
C
INTEGER JBANK
COMMON/IBANK/JBANK
C
Real DISTN
REAL TDC,BOTTOM,TOP
C.......................................................................
RBKGET = 0.
IF (JBANK.EQ.1) THEN
IF(IFIELD.EQ.6) THEN
TDC = GG (IFIELD,IOBJ)
TDC = 332. - TDC
RBKGET = DISTN(TDC)
ELSE IF(IFIELD.EQ.12) THEN
BOTTOM = GG (8,IOBJ)
TOP = GG (9,IOBJ)
RBKGET = 136.65 - 273.3 * TOP / (TOP + BOTTOM)
ELSE
RBKGET = GG (IFIELD,IOBJ)
ENDIF
ELSE IF (JBANK.EQ.2) THEN
RBKGET = SC (IFIELD,IOBJ)
ENDIF
RETURN
END
C***********************************************************************
Real FUNCTION DISTN(t)
C***********************************************************************
C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Implicit none
Real t
c distance en cm
Real parm(3)
DATA parm/.155,5.1,.033/
C.......................................................................
T = 12.5 * T
DISTN = 0.05 * T / (T**0.5312+1.663)
C IF(T.GT.10.) THEN
C DISTN = PARM(1)*SQRT(T-PARM(2))-PARM(3)
C ELSE
C DISTN = .031*T+.05
C ENDIF
RETURN
END
------------- Vis.odb ------------------------------
!----------------------------
begin OUi
version = v6r0
generic = Vis_
createCallback = osh> init;udets
resources = Wo*user_panel*XoCamera.borderWidth:3\
Wo*user_panel*XoCamera.borderColor:dimgrey\
Wo*user_panel*XoPlot.borderWidth:3\
Wo*user_panel*XoPlot.borderColor:dimgrey\
Wo*user_panel*XmText.rows:3\
Wo*shell_view_panel*XoCamera.borderWidth:3\
Wo*shell_view_panel*XoCamera.borderColor:dimgrey\
Wo*shell_view_panel*XmText.rows:3
end
!----------------------------
begin OWidget
name = Vis_1
type = TopLevelShell
children = Vis_9 Vis_15 Vis_37
mappedWhenManaged = true
geometry = 750x800+0+0
title = NEMO3 event display
end
!----------------------------
begin OWidget
name = Vis_9
type = XmForm
children = Vis_4 Vis_form
end
!----------------------------
begin OWidget
name = Vis_4
type = XmMenuBar
children = Vis_5 Vis_21 Vis_33 Vis_34 Vis_6 Vis_22 Vis3d_casc<Vis3d.odb Vis3d_pull<Vis3d.odb
background = lightgrey
shadowThickness = 4
topShadowColor = white
bottomShadowColor = black
menuHelpWidget = Vis_33
topAttachment = attach_form
leftAttachment = attach_form
rightAttachment = attach_form
end
!----------------------------
begin OWidget
name = Vis_5
type = XmCascadeButton
background = lightgrey
labelString = File
subMenuId = Vis_6
end
!----------------------------
begin OWidget
name = Vis_21
type = XmCascadeButton
background = lightgrey
labelString = Event
subMenuId = Vis_22
end
!----------------------------
begin OWidget
name = Vis_33
type = XmCascadeButton
background = lightgrey
labelString = Help
subMenuId = Vis_34
end
!----------------------------
begin OWidget
name = Vis_34
type = XmPulldownMenu
children = Vis_35 Vis_36 Wo_casc<Wo.odb Wo_pull<Wo.odb
background = lightgrey
end
!----------------------------
begin OWidget
name = Vis_35
type = XmPushButton
background = lightgrey
labelString = Types
activateCallback = osh> help 'Types types.ohtx'
end
!----------------------------
begin OWidget
name = Vis_36
type = XmPushButton
background = lightgrey
labelString = Commands
activateCallback = osh> help 'Commands cmds.ohtx'
end
!----------------------------
begin OWidget
name = Vis_6
type = XmPulldownMenu
children = Vis_14 Vis_42 Vis_38 Vis_54 Vis_7 Vis_47 Vis_8
background = lightgrey
end
!----------------------------
begin OWidget
name = Vis_14
type = XmPushButton
labelString = Open file
activateCallback = osh> manage Vis_15
end
!----------------------------
begin OWidget
name = Vis_42
type = XmPushButton
labelString = Print
activateCallback = osh> load Visps.odb| realize;manage Visps_palette;raise Visps_palette_popup
end
!----------------------------
begin OWidget
name = Vis_38
type = XmPushButton
labelString = Commands
activateCallback = osh> manage Vis_37
end
!----------------------------
begin OWidget
name = Vis_54
type = XmPushButton
labelString = Instances
activateCallback = osh> load OType.odb | realize;manage OType_palette;raise OType_palette_popup
end
!----------------------------
begin OWidget
name = Vis_7
type = XmPushButton
labelString = Zones
activateCallback = osh> load zones.odb | realize;manage zones_palette;raise zones_palette_popup
end
!----------------------------
begin OWidget
name = Vis_47
type = XmPushButton
labelString = GEANT
activateCallback = osh> load geant.odb | realize;manage geant_palette;raise geant_palette_popup
end
!----------------------------
begin OWidget
name = Vis_8
type = XmPushButton
background = lightgrey
labelString = Stop
activateCallback = osh> stop
end
!----------------------------
begin OWidget
name = Vis_22
type = XmPulldownMenu
children = Vis_11 Vis_46 Vis_43 Vis_auto_stop Vis_16 Vis_17 Vis_44
background = lightgrey
end
!----------------------------
begin OWidget
name = Vis_11
type = XmPushButton
labelString = Next Event
accelerator = Ctrl<Key>e
acceleratorText = Ctrl/e
activateCallback = osh> event ; exec * buildSceneCallback ; collect EVNT | dump | resource user_text value -
end
!----------------------------
begin OWidget
name = Vis_46
type = XmPushButton
labelString = Select Event
activateCallback = osh> ask 'Event number' 0 | event - ;exec * buildSceneCallback;collect EVNT | dump | resource user_text value -
end
!----------------------------
begin OWidget
name = Vis_43
type = XmPushButton
labelString = Auto Next Event
accelerator = Ctrl<Key>a
acceleratorText = Ctrl/a
activateCallback = osh> ask delay(msec) 1000 | ocyclic cyclic_1 - 'osh> event ; exec * buildSceneCallback; collect EVNT | dump | resource user_text value -'
end
!----------------------------
begin OWidget
name = Vis_auto_stop
type = XmPushButton
labelString = Auto stop
activateCallback = osh> ocyclic cyclic_1
end
!----------------------------
begin OWidget
name = Vis_16
type = XmSeparator
end
!----------------------------
begin OWidget
name = Vis_17
type = XmPushButton
labelString = Redisplay
accelerator = Ctrl<Key>r
acceleratorText = Ctrl/r
activateCallback = osh> exec * buildSceneCallback
end
!----------------------------
begin OWidget
name = Vis_44
type = XmPushButton
labelString = Bank Dump
accelerator = Ctrl<Key>d
acceleratorText = Ctrl/d
activateCallback = osh> load gendump.odb | realize ;manage gendump_palette;raise gendump_palette_popup
end
!----------------------------
begin OWidget
name = Vis_form
type = XmForm
children = user_panel<user.odb
background = grey
topAttachment = attach_widget
bottomAttachment = attach_form
leftAttachment = attach_form
rightAttachment = attach_form
topWidget = Vis_4
end
!----------------------------
begin OWidget
name = Vis_15
type = XmFileSelectionDialog
dialogTitle = GEANT file
okCallback = osh>\
unmanage `thisWidget`\
open `thisValue`\
exec * buildSceneCallback \
collect EVNT | dump | resource user_text value -
cancelCallback = osh> unmanage `thisWidget`
dirMask = *.digi
end
!----------------------------
begin OWidget
name = Vis_37
type = XmFormDialog
children = Vis_cmd Vis_39 Vis_41
autoUnmanage = false
dialogTitle = osh
end
!----------------------------
begin OWidget
name = Vis_cmd
type = XmCommand
promptString = osh commands
commandEnteredCallback = osh> osh `thisValue`
topAttachment = attach_form
bottomAttachment = attach_widget
leftAttachment = attach_form
rightAttachment = attach_form
bottomWidget = Vis_39
end
!----------------------------
begin OWidget
name = Vis_39
type = XmPushButton
labelString = Cancel
activateCallback = osh> unmanage Vis_37
bottomAttachment = attach_form
leftAttachment = attach_form
rightAttachment = attach_position
rightPosition = 50
end
!----------------------------
begin OWidget
name = Vis_41
type = XmPushButton
labelString = Help
activateCallback = osh> help 'Commands cmds.ohtx'
bottomAttachment = attach_form
leftAttachment = attach_position
rightAttachment = attach_form
leftPosition = 50
end
----------------- user.odb --------------------------
!----------------------------
begin OUi
version = v6r0
generic = user_
resources = \
Wo*XoCamera.viewLimits:-250 250\
Wo*XoCamera.viewPoint:0 0 250\
Wo*XoCamera.highIndex:orange
end
!----------------------------
begin OWidget
name = user_panel
type = XmForm
children = user_text user_zones
background = lightgrey
topAttachment = attach_form
bottomAttachment = attach_form
leftAttachment = attach_form
rightAttachment = attach_form
end
!----------------------------
begin OWidget
name = user_text
type = XmText
background = grey
editMode = multi_line_edit
topAttachment = attach_form
leftAttachment = attach_form
rightAttachment = attach_form
end
!----------------------------
begin OWidget
name = user_zones
type = XmForm
children = top_left_view top_right_view bottom_left_view user_plot
background = grey
topAttachment = attach_widget
bottomAttachment = attach_form
leftAttachment = attach_form
rightAttachment = attach_form
topWidget = user_text
end
!----------------------------
begin OWidget
name = top_left_view
type = XoCamera
background = white
backIndex = white
createCallback = osh>\
target `thisWidget`\
current `thisWidget`\
#load atpc.odb | view\
color green\
#collect VOLU where name eq SSEC | rep | view\
#collect VOLU where name eq SSEA | rep | view\
#collect VOLU where name eq SCEC | rep | view\
color pink;collect VOLU where name eq SOUR | rep | view\
color green;collect VOLU where name eq HELS | rep | view
buildSceneCallback = osh>\
collect SCIN | dump\
collect GEIG | dump\
current `thisWidget`\
gobjects | collect GObject where name eq GEIG* | delete\
gobjects | collect GObject where name eq SCIN* | delete\
gobjects | collect GObject where name eq DIGI* | delete\
atbs reset color blue mark circle width 1; collect GEIG | rep | view\
#atbs reset color red mark cross width 2; collect SCIN | rep | view\
atbs reset color magenta\
collect DIGI_CALO_SSEA | rep | view\
collect DIGI_CALO_SSEB | rep | view\
collect DIGI_CALO_SSEC | rep | view\
collect DIGI_CALO_SSIA | rep | view\
collect DIGI_CALO_SSIB | rep | view\
collect DIGI_CALO_SSL1 | rep | view\
collect DIGI_CALO_SSL2 | rep | view\
collect DIGI_CALO_SSL3 | rep | view\
collect DIGI_CALO_SSL4 | rep | view
collectCallback = osh> \
current `thisWidget`\
gobjects | collect GObject where highlight eq 1 | prop name | s2o | dump
topAttachment = attach_position
bottomAttachment = attach_position
leftAttachment = attach_position
rightAttachment = attach_position
topPosition = 1
bottomPosition = 49
leftPosition = 1
rightPosition = 49
end
!----------------------------
begin OWidget
name = top_right_view
type = XoCamera
background = white
backIndex = white
collectCallback = osh> current `thisWidget`;gobjects | collect GObject where highlight eq 1 | prop name | s2o | dump
createCallback = osh> current `thisWidget`;rotate y 90.
connectedTo = top_left_view
topAttachment = attach_position
bottomAttachment = attach_position
leftAttachment = attach_position
rightAttachment = attach_position
topPosition = 1
bottomPosition = 49
leftPosition = 51
rightPosition = 99
end
!----------------------------
begin OWidget
name = bottom_left_view
type = XoCamera
background = white
backIndex = white
collectCallback = osh> current `thisWidget`;gobjects | collect GObject where highlight eq 1 | prop name | s2o | dump
topAttachment = attach_position
bottomAttachment = attach_position
leftAttachment = attach_position
rightAttachment = attach_position
topPosition = 51
bottomPosition = 99
leftPosition = 1
rightPosition = 49
end
!----------------------------
begin OWidget
name = user_plot
type = XoPlot
background = white
backIndex = white
topAttachment = attach_position
bottomAttachment = attach_position
leftAttachment = attach_position
rightAttachment = attach_position
topPosition = 51
bottomPosition = 99
leftPosition = 51
rightPosition = 99
end
!----------------------------
begin OWidget
name = shell_view_panel
type = XmFormDialog
children = shell_view
dialogTitle = Shell view
end
!----------------------------
begin OWidget
name = shell_view
type = XoCamera
children = shell_view_text
background = white
backIndex = white
connectedTo = top_left_view
collectCallback = osh> current `thisWidget`;gobjects | collect GObject where highlight eq 1 | prop name | s2o | dump
topAttachment = attach_form
bottomAttachment = attach_form
leftAttachment = attach_form
rightAttachment = attach_form
end
!----------------------------
begin OWidget
name = shell_view_text
type = XmText
background = white
editMode = multi_line_edit
topAttachment = attach_form
leftAttachment = attach_form
rightAttachment = attach_form
end