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
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
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
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
00091
00092 dEmcClusterLocal[istaf].id = istaf + 1;
00093 dEmcClusterLocal[istaf].runno = 1;
00094 dEmcClusterLocal[istaf].evno = 1;
00095
00096
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 }
00160
00161 }
00162
00163 dEmcClusterLocal_h->nok = istaf;
00164 dEmcGeaClusterTrack_h->nok = istaf;
00165
00166
00167 return STAFCV_OK;
00168 }