mEmcPerfect.c

Go to the documentation of this file.
00001 #include "dio_trk.hh"
00002 #include "mEmcPerfect.h"
00003 #include "emlLib.h"
00004 
00014 long mEmcPerfect_(
00015   TABLE_HEAD_ST     *dEmcGeaHit_h,     DEMCGEAHIT_ST       *dEmcGeaHit ,
00016   TABLE_HEAD_ST *dEmcClusterLocal_h, DEMCCLUSTERLOCAL_ST *dEmcClusterLocal ,
00017   TABLE_HEAD_ST *dEmcGeaClusterTrack_h, DEMCGEACLUSTERTRACK_ST *dEmcGeaClusterTrack )
00018 {
00019 /*:>--------------------------------------------------------------------
00020 **: ROUTINE:    mEmcPerfect_
00021 **: DESCRIPTION: Physics Analysis Module ANSI C template.
00022 **:             This is an ANSI C Physics Analysis Module template
00023 **:             automatically generated by stic from mEmcPerfect.idl.
00024 **:             Please edit comments and code.
00025 **: AUTHOR:     hpl - H.P. Lovecraft, hplovecraft@cthulhu.void
00026 **: ARGUMENTS:
00027 **:       IN:
00028 **:         dEmcGeaHit    - PLEASE FILL IN DESCRIPTION HERE
00029 **:        dEmcGeaHit_h   - header Structure for dEmcGeaHit
00030 **:    INOUT:
00031 **:      OUT:
00032 **:   dEmcClusterLocal    - PLEASE FILL IN DESCRIPTION HERE
00033 **:  dEmcClusterLocal_h   - header Structure for dEmcClusterLocal
00034 **:  dEmcGeaClusterTrack    - PLEASE FILL IN DESCRIPTION HERE
00035 **:  dEmcGeaClusterTrack_h   - header Structure for dEmcGeaClusterTrack
00036 **: RETURNS:    STAF Condition Value
00037 **:>------------------------------------------------------------------*/
00038 
00039 
00040   long i,k;
00041   long istaf;
00042   float xyz[3];
00043   int ll;
00044 
00045   int size;
00046   int iarm;
00047     
00048   int isubevent;
00049   int ntrack;
00050  int error;
00051  int nfile;
00052  int status;
00053  int true_track;
00054  int idpart;
00055  float ptot,ptheta,pphi,r_vertex,z_vertex,theta_vertex,phi_vertex;
00056  int itparent,idparent;
00057  
00058  static int true_track_prev;
00059 
00060   /* Executable */
00061 
00062   if (dEmcGeaHit_h->nok <=0) return (STAFCV_BAD);
00063   
00064   istaf = 0;
00065   true_track_prev = 0;
00066   
00067     
00068   for (i = 0; i < dEmcGeaHit_h->nok; i++)
00069     {
00070 
00071       true_track = dEmcGeaHit[i].true_track;
00072       if(true_track_prev != true_track)
00073         {
00074           true_track_prev = true_track;
00075           
00076           status = dio_ptrkstack(&true_track, &nfile,&error, 
00077                               &ptot, &ptheta, &pphi,
00078                               &r_vertex, &z_vertex, 
00079                               &theta_vertex, &phi_vertex,
00080                               &itparent, &idparent, &idpart);
00081 
00082           if(error == 0)
00083             {
00084               iarm = 0;
00085               if (dEmcGeaHit[i].sector >= 5)
00086                 {
00087                   iarm = 1;
00088                 }
00089               /*                  
00090               true_track_array[4] = idpart;
00091               */
00092               dEmcClusterLocal[istaf].id = istaf + 1;
00093               dEmcClusterLocal[istaf].runno = 1;
00094               dEmcClusterLocal[istaf].evno = 1;
00095               /*
00096               dEmcClusterLocal[istaf].clusno = true_track_array[0];
00097               */
00098               dEmcClusterLocal[istaf].clusno = 0;
00099               dEmcClusterLocal[istaf].method = 1;
00100               dEmcClusterLocal[istaf].arm = iarm;
00101 
00102               if(iarm == 0)
00103                 {
00104                   dEmcClusterLocal[istaf].sector = dEmcGeaHit[i].sector - 1;
00105                 }
00106               else
00107                 {
00108                   dEmcClusterLocal[istaf].sector = 8 - dEmcGeaHit[i].sector;
00109                 }
00110               
00111               dEmcClusterLocal[istaf].runno = 1;
00112               for(k=0; k<=2; k++)
00113                 {
00114                   dEmcClusterLocal[istaf].xyz[k] = dEmcGeaHit[i].xyz[k];
00115                   dEmcClusterLocal[istaf].dxyz[k] = 0.0;
00116                 }
00117               dEmcClusterLocal[istaf].e = ptot;
00118               dEmcClusterLocal[istaf].de = 0.0;
00119               dEmcClusterLocal[istaf].tof = dEmcGeaHit[i].tof;
00120               dEmcClusterLocal[istaf].dtof = 0.0;
00121               dEmcClusterLocal[istaf].qual = 0.0;
00122               dEmcClusterLocal[istaf].pid = dEmcGeaHit[i].partid;
00123               dEmcClusterLocal[istaf].prob_photon = 0.0;
00124               dEmcClusterLocal[istaf].prob_neuhad = 0.0;
00125                   
00126                   
00127               dEmcGeaClusterTrack[istaf].id = istaf + 1;
00128               dEmcGeaClusterTrack[istaf].clusid = istaf;
00129               dEmcGeaClusterTrack[istaf].input = 0;
00130 
00131               for ( k = 0; k < 3; k++)
00132                 {
00133                   dEmcGeaClusterTrack[istaf].trkno[k] = 0;
00134                   dEmcGeaClusterTrack[istaf].pid[k] = 0;
00135                   dEmcGeaClusterTrack[istaf].ptot[k] = 0;
00136                   dEmcGeaClusterTrack[istaf].xyz[k][0] = 0;
00137                   dEmcGeaClusterTrack[istaf].xyz[k][1] = 0;
00138                   dEmcGeaClusterTrack[istaf].xyz[k][2] = 0.0;
00139                   dEmcGeaClusterTrack[istaf].edep[k] = 0.0;
00140                   dEmcGeaClusterTrack[istaf].efrac[k] = 0.0;
00141                   dEmcGeaClusterTrack[istaf].measxyz[k] = 0.0;
00142                 }
00143               
00144               dEmcGeaClusterTrack[istaf].trkno[0] = true_track;
00145               dEmcGeaClusterTrack[istaf].pid[0] = dEmcClusterLocal[istaf].pid;
00146               dEmcGeaClusterTrack[istaf].edep[0] = dEmcClusterLocal[istaf].e;
00147               dEmcGeaClusterTrack[istaf].mease = dEmcClusterLocal[istaf].e;
00148               for(k=0; k<=2; k++)
00149                 {
00150                   dEmcGeaClusterTrack[istaf].xyz[0][k] = 
00151                     dEmcClusterLocal[istaf].xyz[k];
00152                   dEmcGeaClusterTrack[istaf].measxyz[k] = 
00153                     dEmcClusterLocal[istaf].xyz[k];
00154                 }
00155 
00156               istaf = istaf + 1;
00157             }
00158           
00159         }       /* End of case when there is a new track */
00160       
00161     }           /* End of loop over i, all hits */
00162   
00163   dEmcClusterLocal_h->nok = istaf;
00164   dEmcGeaClusterTrack_h->nok = istaf;
00165             
00166 
00167    return STAFCV_OK;
00168 }