next up previous
Next: About this document ...

/*------------------------------------------------------------------
FILE:         tpt_sts.c
DESCRIPTION:  Straight line tracking.
AUTHOR:       ims - Iwona Sakrejda, isakrejda@lbl.gov
BUGS:         -- STILL IN DEVELOPMENT --
HISTORY:      00aug96-v000a-hpl- Creation., etc.........

------------------------------------------------------------------*/

/*------------------------------------------------------------------
ROUTINE:      tpt_sts_
DESCRIPTION:  Main straight line tracking routine
ARGUMENTS:    
**:       IN:
**:                par    - Tracking parameters
**:               par_    - 
**:           detector    - TPC geometry info.
**:          detector_    - 
**:    INOUT:
**:              tphit    - table of TPC coordinate measurements
**:             tphit_    - header Structure for tphit
**:      OUT:
**:                res    - Iwona's residual table
**:               res_    - header Structure for res
**:           diff_res    - Another of Iwona's residual table.
**:          diff_res_    - header Structure for test_res
**:             strack    - straight track fit parametrization.
**:            strack_    - header Structure for strack
**:    RETURN VALUE: STAF Condition Value
------------------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "tpt_sts.h"
#
/* RRB: Add additional useful constants: */
#define MAX_SECS 24
#define MAX_ROWS 45
#define MAX_HITS 100000
#define TRUE  1
#define FALSE 0
#
/* Underscore on next line is necessary to link with FORTRAN. */
long tpt_sts_(
  TABLE_HEAD_ST            *par_h,      TPT_SPARS_ST              *par ,
  TABLE_HEAD_ST          *tphit_h,      TCL_TPHIT_ST            *tphit ,
  TABLE_HEAD_ST            *res_h,        TPT_RES_ST              *res ,
  TABLE_HEAD_ST       *diff_res_h,        TPT_RES_ST         *diff_res ,
  TABLE_HEAD_ST         *strack_h,     TPT_STRACK_ST            *strack,
  TABLE_HEAD_ST       *detector_h,   TPG_DETECTOR_ST          *detector)
{
/*
 * Here are examples of how you should access table members:
 * *tptpar_h.nok, tptpar[1007]->colName.
 */
    int drow;                          /* Row number increment (+1 or -1) */
    int ldel;                          /* Index of outlier to delete */
    int lkeep;                         /* Counter for kept outliers */
    int l_outlier_keep;                /* Index for kept outliers */
    int max_hole;                      /* par->hole = max row sep. of hits */
    int nshift[MAX_ROWS];              /* Shift needed to delete outliers */
    int outlier[MAX_ROWS];             /* List of outliers */
    int outlier_keep[MAX_ROWS];        /* List of outliers to keep */
    int par_ilimit;                    /* par->ilimit = outlier loop limit */
    int par_nmin;                      /* */
    int row_inner;                     /* Innermost row to analyze */
    int row_outer;                     /* Outermost row to analyze */
    int row_range;                     /* Number of allowed rows */
    int rowa, rowb;                    /* First, last allowed row */
    int sector_prev;                   /* Sector ID in previous loop */
    int use_dety, use_dety_n;          /* TRUE iff using 1/dety, 1/dety_n */

    long dkl, dkl_2, dkl_3;            /* Temp. indices for hits in row */
    long i;                            /* General-purpose index */
    long isector;                      /* Sector index for arrays (0--23) */
    long j, jl, jm, jn, jn_2, jn_3;    /* Offsets by row number for hits */
    long k, kl, km, kn, kn_2, kn_3;    /* Offsets from row offset for hits */
    long len=MAX_HITS;                 /* Dimension of hit arrays */
    long lhole;                        /* Row separation of hits */

...

    float A, B, C, D;
    float Az, Bz;
    float Az_norm;                     /* 1.0/sqrt(Az*Az) */
    float a_ddy[MAX_ROWS];             /* Absolute distance to track in xy */
    float a_ddz[MAX_ROWS];             /* Absolute distance to track in z */
    float alpha;                       /* Pad-row crossing angle (radians) */
    float ax, bx;
    float ax_norm;                     /* 1.0/sqrt(ax*ax) */

...

#define SIGMAB 0.0                     /* Not used here yet... */
#define SIGMAC 30.0                    /* Not used here yet... */
#define SIGMAF 0.0                     /* Not used here yet... */
#define SIGMAG 0.0                     /* Not used here yet... */
#define RADTODEG 57.295780             /* 360/(2*pi)=57.2957795132 */
#define sigma_xy 0.05                  /* Error in xy; (0.05 cm) */
#define sigma_z  0.05                  /* Error in  z; (0.05 cm) */
#define sigma2y sigma_xy*sigma_xy      /* Error^2 in xy */
#define sigma2z sigma_z*sigma_z        /* Error^2 in  z */

    FILE *dataf;
    TCL_TPHIT_ST *track[MAX_ROWS];
    TCL_TPHIT_ST *track_del[MAX_ROWS]; /* List of hits to delete */
    TCL_TPHIT_ST *pjjp;
    TCL_TPHIT_ST *pjlp;
    TCL_TPHIT_ST *pjp, *pjp_2, *pjp_3;
    TCL_TPHIT_ST *pjlp_best, *pjp_2_best, *pjp_3_best;

/* set all the counters to 0 */
    res_h[0].nok = 0;
    diff_res_h[0].nok = 0;
    strack_h[0].nok = 0;

/* reset the track flag, tfs does not do it.....*/
    for (l=0; l<tphit_h[0].nok; l++) tphit[l].track=0;

/* Open the file for the residuals*/
    dataf=fopen("mydata","w");

******************************* remaining code .....


 

Lanny Ray
2/20/1998