E872 Analysis Code Structure

shell

shinit,shanal,shfin

other subroutines in alphabetical order:
A    D      M   R    S   T    V
 
 

shell.mnf

main routine

calls:

shinit.sf

called from:  shell

shell initialization

calls:


shanal.sf

called from: shell

main analysis routine

structure:

rdevt
if (evnt_type = 3 or 4)        decode_em_isp
if (evnt_type = 15)          decode_sad
if (evnt_type < 3)

evinit
decode
if (overlay)     overlay_evt
if (trigmsk = 0) or (trgmsk.&.trgword <> 0)
sfpr_init
if (rdemul)     rdevmx
if (reproc)
if (dcproc)   dcanal
if (vcproc)
                 vdanal
                 vcanal
if (sfproc1..3)   sfanal1,2,v
if (midproc)  midanal
if (ismont)    tk_mc_match
if (rdemul)    tk_emvx_match
if (not rdemul)     primrefit
if (emproc)   emanal
if (prestar_proc)
                         get_station
                            if (iok_station > 0) prestar
if (star_proc)
                            if (not prestar_proc) set_start_vert
                            if (iok_start_vert_ > 0) star_sstar2
if (prerefit_proc)    prerefit
usanal
grevt
wrtevt

QUIT if selected in menu


if (evnt_type >2)  decode_isp

shfin.sf

called from: shell

main shell finish routine

calls:


ak_cluster2.sf

called from: emanal

Alex's EMCAL cluster search, calls some of his routines
 

bsthit.sf

called from: dcthit2,sfvdhits2,tkksy,tkdcambig,tkvcds,vcthit,vdanal

finds closest hit to position in selected plane
 

bstemhit.sf

called from: tkksy

bsthit for emcal clusters
 

dcaddl.sf

called from: dclhit2

adds temp line array to qdlin array
 

dcaddt.sf

called from: dclmat

copies temp track to final DC track array

calls: dctcln

dcanal.sf

called from: shanal,prerefit

DC track reconstruction

structure:

(check for sufficient, > max hits)
loop (1..ndvw)
             dclin
dclcln
if (dplev >1) dprlin
dclmat
loop (1..ndctk)
             dcthit2
dctcln
 

dcemdhits.sf

called from: tkdcem

fits DC tracks to given emcal cluster

calls:


dcgetl.sf

called from: dclcln,dclmat3,svkdpr

copies line parameters into temp array
 

dcgett.sf

called from: dctcln,dcthit,dcthit2,vdanal,tkfix

copies DC track parameters into temp array
 

dclbufi.sf

called from: decode

fills reconstructed line arrays
 

dclcln.sf

called from: dcanal,svkdpr

cleans up DC line buffer

calls:


dclhit2.sf

called from: dclin

looks for DC hits on planes in selected view

calls:


dclin.sf

called from: dcanal,svkdpr

makes lines in view ivw

calls: dclhit2
 

dclfit.sf

called from: dclhit2

fits temp line to 2 parameters
 

dclmat.sf

called from: dcanal

matches up line segments in different views to create track

calls:


dclmat3.sf

called from: dclmat

matches track in 2 views to line in 3rd view

calls: dcgetl
 

dcputl.sf

called from: dclcln

puts the line parameters back where they belong
 

dcputt.sf

called from: dctcln,dcthit,dcthit2,vdanal,tkfix

puts the track parameters back where they belong
 

dctcln.sf

called from: dcanal,dcaddt

cleans out ghost tracks

calls:


dctfit.sf

called from: dclmat,dcthit,dcthit2,dcemdhits

fits track using temp array, result back to temp

calls: eqslv
 

dcthit.sf

called from: dclmat,dcemdhits

adds hits to selected track and refits

calls:


dcthit2.sf

called from: dcanal

re-finds(?) hits on selected track and refits

calls:


decode.sf

called from: shanal

raw data decoding

structure:

(lot of flag-setting)

if ((not ismont) and sf_deco)

if (sfdeco1)    decode_sf
if (not sfdeco1)    decode_sf_fib
sf_translate
loop (1..nrec)
ON ityp =

rec_hits : if (not redecode)
                                         htbufi
                                         sf_translate
4302 :
                if (dc_deco)
                                         decode_vc
                                         decode_ksu
1920: stml
2280: if (em_deco) decode_em
4448: decode_trig
2341: mod_2341
2249: nothing
2228: decode_tdctrig
2738: if (mid_deco) decode_mid
rec_mctrk:    mevbufi
                    if (redecode) loop (1..ntotpl)
                                            loop(1..tru_nhitpl)
                                             thmget
                                                if (ipl < i2sf) mcaddsfht
                                                if (ipl >= i2sf) mcadddcht
rec_evt_info: evtbufi
if (not redecode)
    rec_trk: tkbufi
    rec_strk: stkbufi
    rec_slin: slibufi
    rec_vtrk: vtkbufi
    rec_drtk: dtkbufi
    rec_dlin: dclbufi
    rec_vtx: vtxbufi
rec_em: embufi
rec_trig: trgbufi
4345559: vsbufi
4542277: -


decode_em.sf

called from: decode

decodes more EMCAL data
 

decode_em_isp.sf

called from: shanal, decode_isp

A. Kulik interspill stuff (event type 3,4)
 

decode_isp.sf

called from: shanal

interspill record decoder

calls:


decode_ksu.sf

called from: decode

decodes KSU data

calls:


decode_mid.sf

called from: decode

decodes muon ID data
 

decode_sad.sf

called from: shanal, decode_isp

decode SAD records for event type 15
 

decode_sf.sf

called from: decode

decodes sf
 

decode_sf_fib.sf

called from: decode

decodes sf if flag sfdeco1 is not set
 

decode_tdctrig.sf

called from: decode

decodes TDC trigger counters
 

decode_trig.sf

called from: decode

decodes trigger bits
 

decode_vc.sf

called from: decode

decodes VDC data

calls: vdcfill
 

define_tgt.sf

called from: evinit

defines target configuration depending on run #
 

dprlin.sf

called from: dcanal,svkdpr

prints out info about line

calls: tkmget
 

dtkbufi.sf

called from: decode

fills rec. track arrays
 

emanal.sf

called from: shanal

EMCAL analysis control

calls:


embufi.sf

called from: decode

Fills EMCAL arrays
 

eminit.sf

called from: shinit

initializes calorimeter related variables
 

eqslv.sf

called from: dctfit,sftfit,tkfit,vctfit,vdtfit,tkfituv

solves least square equation set
 

evinit.sf

called from: shanal

event intialization

calls:


evtbufi.sf

called from: decode

fills event info array
 

fillemdhits.sf

called from: tkdcem

fills emdhits array with em hits for given x,y
 

filvec.sf

called from: vtxadd

fits tracks to vertex

calls:


getemycl.sf

called from: tkdcem

returns y pos of em cluster for given x
 

getmscat.sf

called from: tksfds,tkfits

returns multiple scattering error for track in temp array
 

getstn2.sf

called from: tkfix

given station # returns downstream station #
 

gettrkz.sf

called from: mevtki

finds "aesthetic"(?) start and end z pos for tracks
 

grevt.sf

called from: shanal

Main graphics routine

structure:

if (fpass) grinit (0)
grinit
if (detview1..8) grview1..8
if (ismont and grpl_tru) grmchits
grmenu
 

grinit.sf

called from: grevt

initializes graphics
 

grmchits.sf

called from: grevt

plots MC hits and tracks

calls: thmget
 

grmenu.sf

called from: grevt

Handles the graphics menu together with grmenu2.sf
 

grview

called from: grevt

8 different routines for various event display views
 

gtrksav.sf

called from: tkseg

gets or puts temp array into save array
 

htbufi.sf

called from: decode

unpacks hit buffer
 

ksliny.sf

called from: svkdpr

makes KSY lines using supplied vertex position
 

ksufill.sf

called from: decode_ksu

fills KSU hit array
 

ksumap.sf

called from: decode_ksu

maps ksu drift chamber
 

led_array.sf

called from: rdempeds

Reads LED values from file
 

linfit.sf

called from: sflfit,msffit,vclfit

not on E872 website!!! But in shell library
 

mcaddsfht.sf

called from: decode

adds single mc hit to sf output (lots of Reinhard pulseheight stuff)

calls:


mcadddcht.sf

called from: decode

adds single mc hit to non-sf plane and to mc_truth common, contains three d's in a row!

calls: puthit
 

mevbufi.sf

called from: decode

fills MC hit arrays

calls: mevtki
 

mevtki.sf

called from: mevbufi

fills MC track arrays

calls:


midanal.sf

called from: shanal,svkdpr,tkfix

looks for hits in the muon ID associated with tracks

calls:  bsthit
 

mod_2341.sf

called from: decode

decodes module 2341 (?)
 

msffit.sf

called from: multsft

variant of sflfit

calls: linfit
 

multsft.sf

called from: sfpr_init

variant of sflmat_stn not requiring unique matches

calls:


overlay_evt.sf

called from: shanal

overlays hit, calorimeter info from last event
 

patrec_em.sf

called from: emanal

EMCAL pattern recognition
 

prerefit.sf

called from: shanal

executes all basic refitting tasks

calls:


primrefit.sf

called from: shanal
 
 

puthit.sf

called from: mcaddsfht,mcadddcht

Adds single hit to qhit output structure
 

rdcsht.sf

called from: evinit

reads in changeable sheet configuration
 

rdctrl.sf

called from: shinit

reads myanal.ctl file, sets control variables
 

rdcuts.sf

called from: shinit

reads cut file, sets cut variables
 

rddrvel.sf

called from: evinit

reads in drift velocities for KSU, VDC
 

rdempeds.sf

called from: evinit

reads in run dependent pedestal files

calls: led_array
 

rdemvx.sf

called from: shanal

reads emulsion vertex filed (.ecv)
 

rdevt.sf

called from: shanal

reads one event from DAFT record
 

rdlev1.sf

called from: evinit

reads in detector geometry from file, makes alignment correction
 

sf_bsthit.sf

called from: sflmat_stn,multsft,sfvdhits

bsthit for SF
 

sf_translate.sf

called from: decode

translates SF cluster position into E872 coords
 

sfaddl.sf

called from: sflhit,sflhit_stn,tkseg,tkfix

adds temp line array to qdlin array

calls: sflcln
 

sfaddt.sf

called from: sflmat,sflmat_stn,tkseg,tkfix

copies temp array to final SF track array

calls: sftcln
 

sfanal1.sf

called from: shanal

sf tracker without multiple scattering

structure:

sfvdhits
loop (u,v views, all stations)
        sflin
sflcln
loop (1..nsfstn)
        sflmat
if (splev >0) sprlin
sftmat
tkcln
sfthit
sfvdhits2
 

sfanal2.sf

called from: shanal

sf tracker projecting hits into SF station 4 whilst looking for hits

structure:

loop (all stations, u and v view)
        sflin_stn
sflcln
loop (1..npr)
    sflmat_stn
sftcln
sftrkmat1
sftrkmat2
sftcln
sfvdhits2
 

sfanalv.sf

called from: shanal,prerefit

sf tracker using vertex constraint

structure:

loop (1..npr)
        sflin_stn
        sflcln
        sfvtx
        if (nvx(1) > 0)
              sflinv_stn
              sflcln
if (nonly) return
if (nvx(1) > 0)
           sflin_stn
           sflcln
           sfvtx
            if (nvx(2)>0)
                  sflinv_stn
                  sflcln
sflin_extnd
 

sfgetl.sf

called from: sflcln,sflin_extnd,sflinv_stn,sflmat_stn,multsft,sfvtx,sprlin,tkseg,tksfds
                  ,sflinwght,tkfix,vtxsfl

copies line parameters into temp array
 

sfgett.sf

called from: multsft,sftcln,sftmat,sftmat2,sftrkmat1,2,tkseg,tkfituv,tkfix

copies selected sf track parameters into temp array
 

sflcln.sf

called from: sfanal1,sfanal2,sfanalv,sfaddl,sflin_extnd,vtxsearch,sflinwght

cleans up sf line buffer, home of the infamous variable "shit1"

calls:


sflfit.sf

called from: sflhit,sflhit_stn,tkseg,tkfix

fits temp line

calls: linfit
 

sflhit.sf

called from: sflin

looks for SF hits

calls:


sflhit_stn.sf

called from: sflin_extnd,sflin_stn,sflinv_stn

looks for SF hits between selected stations

calls:


sflin.sf

called from: sfanal1

makes sf line in selected station and view

calls: sflhit
 

sflin_extnd.sf

called from: sfanalv,vtxsearch

extends SF lines to downstream station

calls:


sflin_stn.sf

called from: sfanal2,sfanalv

makes lines spanning selected stations in selected view

calls: sflhit_stn
 

sflinv_stn.sf

called from: sfanalv,vtxsearch

makes sf lines spanning selected stations in selected view using vertex constraint

calls:


sflinwght.sf

called from: vtxsearch

finds vertex weight

calls:


sflmat.sf

called from: sfanal1

match up line segments in each view

calls:


sflmat_stn.sf

called from: prerefit,sfanal2,vtxsearch

matches line segments in each view to create tracks

calls:


sfpr_init.sf

called from: shanal

initializes SF pattern recognition

calls:  multsft
 

sfputl.sf

called from: sflcln,sflinv_stn,sflmat_stn,tkseg,sflinwght,tkfix

Copies line parameters from temp array back to qslin
 

sfputt.sf

called from: sftcln,sftmat,sftmat2,sftrkmat1,2,tkseg,tkfix

puts temp track array back into buffer
 

sftcln.sf

called from: sfanal2,sfaddt,trkfix

cleans out ghost tracks

calls:


sftfit.sf

called from: sflmat,sflmat_stn,tkseg,tkfix

fits track using temp array, results in temp

calls: eqslv
 

sfthit.sf

called from: sfanal1

refits final tracks, looks for hits in sf

calls:


sftmat.sf

called from: sfanal1

matches SF tracks between stations

calls:


sftmat2.sf

called from: sftmat

follows track in temp array downstream

calls:


sftmat_stn.sf

called from: sftrkmat1,2

matches up SF tracks at the target
 

sftrans1.sf

called from: mcaddsfht

translates sf hit into fiber number
 

sftrans1_inv.sf

called from: mcaddsfht

translates fiber number into sf hit coordinate
 

sftrkmat1.sf

called from: sfanal2

matches final tracks, SF tracks to SF tracks

calls:


sftrkmat2.sf

called from: sfanal2

matches SF tracks to other SF tracks

calls:


sfvdhits.sf

called from: sfanal1,sfanal2

adds SF hits to final tracks

calls:


sfvdhits2.sf

called from: sfanal1

adds VC/DC hits to SF final tracks

calls:


sfvtx.sf

called from: sfanalv

Finds an SF vertex

calls: sfgetl
 

slibufi.sf

called from: decode

fills reconstructed track arrays
 

sprlin.sf

called from: sfanal1

prints out line parameters

calls: sfgetl
 

stkbufi.sf

called from: decode

fills reconstructed track arrays
 

stml.sf

called from: decode

decodes emcal data
 

svkdpr.sf

called from: prerefit

pattern recognition using SF,VC,KSU,DC

calls:


thmget.sf

called from: decode,grmchits,mevtki

gets true MC hit
 

thmput.sf

called from: mcaddsfht

adds true MC hit to buffer
 

tk_emvx_match.sf

called from: shanal

matches emulsion vertex tracks to final tracks

calls: vtxfind
 

tk_mc_match.sf

called from: shanal

matches reconstructed and MC tracks
 

tkadd.sf

called from: sflmat_stn,sftmat,sftrkmat2,dcemdhits,tkdcambig,vdanal

adds temp track to track buffer

calls: tkcln
 

tkbufi.sf

called from: decode

fills reconstructed track arrays
 

tkcln.sf

called from: sfanal1,svkdpr,tkadd,vdanal

cleans out ghost tracks

calls:


tkdcambig.sf

called from: tkksy

Fits different DC ambiguities to find final track

calls:


tkdcem.sf

called from: svkdpr

makes final tracks using DCX lines and emcal hits

calls:


tkfit.sf

called from: sflmat_stn,sfthit,sftmat,sftmat2,sftrkmat2,sfvdhits,dcemdhits,tkdcambig
                  ,tkseg,tkvcds,vdanal

final track fitting

calls: eqslv
 

tkfits.sf

called from: tkfsds,tkvcds

track fit in magnetic field

calls:


tkfituv.sf

called from: filvec

fits track in mosty upstream sf station

calls:


tkfix.sf

called from: vtxsfl

checks final tracks for SF/DC lines

calls:


tkget.sf

called from: sflmat_stn,sfthit,sftrkmat1,sfvdhits,sfvdhits2,svkdpr,tkcln,tkfsds,tkvcds
                  ,vcanal,vtx_update,vtxfind,vtxadd,tkfituv,tkfix

puts selected track in temp array
 

tkksy.sf

called from: svkdpr

creates tracks using DC X and KSY lines

calls:


tkmadd.sf

called from: mevtki

adds temp mc track to mc track buffer
 

tkmget.sf

called from: dprlin,vprlin

gets mc track and puts it in temp array
 

tkpro.sf

called from: tkdcambig,tkvcds

projects track to given z pos
 

tkput.sf

called from: sflmat_stn,sfthit,sftmat2,sftrkmat1,2,sfvdhits,sfvdhits2,tkcln,tkseg,tkfsds
                  ,tkvcds,vtx_update,vtxfind,tkfix

puts temp array back into selected track
 

tkseg.sf

called from: sflmat_stn

segments final track

calls:


tksfds.sf

called from: tkdcem,tkksy

SF line search using downstream tracks

calls:


tkswim.sf

called from: tkvcds

swims track in temp
 

tkvcds.sf

called from: tkdcem,tkksy

adds VC hits to track

calls:


trgbufi.sf

called from: decode

Fills trigger counter arrays
 

usanal.sf

called from: shanal

Do whatever you like here
 

usfin.sf

called from: shfin

user finish routine (dummy)
 

usinit.sf

called from: shinit

user initialization routine
 

vcaddl.sf

called from: vclhit2

adds temp line to qvlin array

calls: vclcln
 

vcaddt.sf

called from: vclmat

copies temp track array to final vc track

calls: vctcln
 

vcanal.sf

called from: shanal

VC analysis jacket routine

structure:

loop (1..ntrks)
    tkget
vclin
vcclns
vclmat
vctcln
 

vcgetl.sf

called from: tkvcds,vclclns,vclcln,vclmat3,vprlin

copies vc line from qvlin to temp
 

vcgett.sf

called from: vctcln,vcthit

copies VC track to temp
 

vclcln.sf

called from: vcaddl,vclin

cleans up VC line buffer

calls:


vclclns.sf

called from: tkvcds,vclin

cleans out VC ghost lines

calls:


vclfit.sf

called from: vclhit2

fits temp VC line

calls: linfit
 

vclhit2.sf

called from: vclin

looks for VC hits using temp line params

calls:


vclin.sf

called from: tkvcds,vcanal

finds VC lines

calls:


vclmat.sf

called from: vcanal

matches line segments in each view, creates track

calls:


vclmat3.sf

called from: vclmat

matches 2 line track to 3rd view

calls: vcgetl
 

vcputl.sf

called from: vclclns,vclcln

puts line parameters from temp to qdlin
 

vcputt.sf

called from: vctcln,vcthit

puts temp track into track buffer
 

vctcln.sf

called from: vcanal,vcaddt

cleans out ghost tracks

calls:


vctfit.sf

called from: vclmat,vcthit

fits track using temp array, results -> temp

calls: eqslv
 

vcthit.sf

called from: vclmat

adds hits to selected track, refits

calls:


vdanal.sf

called from: shanal

VC line and track finding based on existing DC tracks

structure:

if (ndctk = 0) return
loop (1..ndctk)
              dcgett
                loop (over VCX planes)
                                loop (1..nhitpl(ipl))

bsthit
if (vtnht > 8)     vdtfit
                        if (vtchi < vcchicut)
if (gotone)
    tkfit
    if (tchi < tkchicut)
           tkadd
           dcputt
tkcln
 

vdcfill.sf

called from: decode_vc

Fills VDC arrays
 

vdfits2.sf

called from: tkfits

VC/DC fitting

calls: vdswim
 

vdswim.sf

called from: vdfits2

swims track through VC planes
 

vdtfit.sf

called from: vdanal

fits VC track using DC track as constraint

calls: eqslv
 

vertex_cern.sf

called from: filvec,vtxsfl

cern vertex finding routine
 

vprlin.sf

called from: vclin

prints out info about VC line

calls:


vtkbufi.sf

called from: decode

fills reconstructed track arrays
 

vtx_update.sf

called from: prerefit,vtxfind,vtxadd,vtxsearch,vtxsfl

updated UV vertex array

calls:


vtxadd.sf

called from: vtxfind

adds track to selected vertex

calls:


vtxbufi.sf

called from: decode

fills event info array
 

vtxfind.sf

called from: prerefit,tk_emvx_match

simple vertex finding program

calls:


vtxsearch.sf

called from: prerefit

vertex grid search

calls:


vtxsfl.sf

called from: prerefit,vtxsearch

vertex search with SF lines

calls:


wrtevt.sf

called from: shanal,shfin

writes out raw data to file
 

A description of the STAR routines can be found here.

 
Author: Patrick Berghaus
last updated: 11/1/99