[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