00001 #include "StTrackFilter.h"
00002 #include "TTableSorter.h"
00003 #include "TTableIter.h"
00004 #include "tables/St_g2t_tpc_hit_Table.h"
00005 #include "tables/St_g2t_svt_hit_Table.h"
00006 #include "tables/St_tcl_tphit_Table.h"
00007 #include "tables/St_tpt_track_Table.h"
00008 #include "tables/St_dst_track_Table.h"
00009 #include "tables/St_g2t_track_Table.h"
00010 #include "tables/St_g2t_vertex_Table.h"
00011 #include "StCL.h"
00012
00014
00015
00016
00017
00018
00019
00021
00022 ClassImp(StTrackFilter)
00023
00024
00025 Int_t StTrackFilter::SetTrack_P(Int_t *track_p,Int_t n)
00026 {
00027 m_LTrackP = n;
00028 StCL::ucopy(track_p,m_Track_P, m_LTrackP);
00029 return 0;
00030 }
00031
00032 Int_t StTrackFilter::SetTptID(Int_t *track_id,Int_t n)
00033 {
00034 m_Ltpt_track = n;
00035 StCL::ucopy(track_id,m_tpt_track_id, m_Ltpt_track);
00036 return 0;
00037 }
00038
00039 Int_t StTrackFilter::SetId_globtrk(Int_t *id_globtrk,Int_t n)
00040 {
00041 m_Lid_globtrk = n;
00042 StCL::ucopy(id_globtrk,m_id_globtrk, m_Lid_globtrk);
00043 return 0;
00044 }
00045
00046 Int_t StTrackFilter::SetGe_pid(Int_t pid){ m_Ge_pid = pid; return m_Ge_pid;}
00047
00048
00049 Int_t StTrackFilter::Reset(Int_t reset)
00050 {
00051 m_G2t_track = 0; m_G2t_vertex = 0;
00052 SafeDelete(m_NextG2tTrack);
00053 return reset;
00054 }
00055
00056 Int_t StTrackFilter::SubChannel(St_tcl_tphit &hit, Int_t rowNumber,Size_t &size, Style_t &style)
00057 {
00058 size = 0.5;
00059 return kGreen;
00060 return hit[rowNumber].id_globtrk;
00061 if ( m_Lid_globtrk) {
00062 for (int i =0; i <m_Lid_globtrk; i++) {
00063 if (hit[rowNumber].id_globtrk != m_id_globtrk[i]) continue;
00064 printf("hit %d %ld \n", rowNumber, hit[rowNumber].id_globtrk);
00065 style = 6;
00066 size = 2;
00067 return kGreen+rowNumber%20;
00068 }
00069 }
00070 return 0;
00071 }
00072
00073 Int_t StTrackFilter::SubChannel(St_g2t_svt_hit &hit, Int_t rowNumber,Size_t &size,Style_t &style)
00074 {
00075 if ( m_LTrackP) {
00076 for (int i =0; i <m_LTrackP; i++) {
00077 if (hit[rowNumber].track_p != m_Track_P[i]) continue;
00078 printf("hit %d %ld \n", rowNumber, hit[rowNumber].track_p);
00079 style = 4;
00080 size = 1;
00081 return kBlue;
00082 }
00083 }
00084 return 0;
00085 }
00086
00087 Int_t StTrackFilter::SubChannel(St_g2t_tpc_hit &hit, Int_t rowNumber,Size_t &size,Style_t &style)
00088 {
00089 Int_t color = 0;
00090 style = 4;
00091 size = 1;
00092 long track_p = hit[rowNumber].track_p;
00093 if (m_G2t_track) {
00094
00095 TTableIter &nextTrack = *m_NextG2tTrack;
00096 St_g2t_track &track = *((St_g2t_track*)m_G2t_track->GetTable());
00097 Int_t indxColor = nextTrack[0];
00098
00099 if (indxColor >= 0 )
00100 {
00101 Int_t indxRow = -1;
00102
00103 color = track[indxColor].ge_pid+1;
00104
00105 while ( (indxRow = nextTrack()) >= 0 ) {
00106 if (track_p != track[indxRow].id) continue;
00107
00108 if (m_G2t_vertex && track[indxRow].stop_vertex_p) {
00109 TTableIter nextVertex(m_G2t_vertex,track[indxRow].stop_vertex_p);
00110
00111 if (nextVertex.GetNRows() > 0) {
00112 St_g2t_vertex &vertex = *((St_g2t_vertex*)m_G2t_vertex->GetTable());
00113 while ( (indxRow = nextVertex() ) >=0 ) {
00114 Float_t *x = &(vertex[indxRow].ge_x[0]);
00115 Float_t dist = x[0]*x[0]+x[1]*x[1];
00116 Bool_t condition = dist > 133*133 && dist < 179*179;
00117
00118 if ((vertex[indxRow].ge_proc == 5) && condition )
00119 return color%8+1;
00120 }
00121 }
00122 }
00123
00124 return 0;
00125 }
00126 }
00127 }
00128 if ( m_LTrackP) {
00129 for (int i =0; i <m_LTrackP; i++) {
00130 if ( track_p != m_Track_P[i]) continue;
00131 printf("hit %d %ld \n", rowNumber, track_p);
00132 return kBlue;
00133 }
00134 }
00135 return 0;
00136 }
00137
00138
00139 Int_t StTrackFilter::Channel(const TTableSorter *tableObject,Int_t index,Size_t &size,Style_t &style)
00140 {
00141
00142
00143
00144
00145 Int_t rowNumber = tableObject->GetIndex(UInt_t(index));
00146
00147 Color_t color = -1;
00148 TString mStr = tableObject->GetTable()->GetName();
00149
00150 if( mStr == "g2t_track" && !m_G2t_track) {
00151 if (m_NextG2tTrack) delete m_NextG2tTrack;
00152 m_NextG2tTrack = new TTableIter(tableObject,m_Ge_pid);
00153 m_G2t_track = tableObject;
00154 }
00155 else if( mStr == "g2t_vertex" && !m_G2t_vertex) {
00156 m_G2t_vertex = tableObject;
00157 }
00158 else if( mStr == "g2t_tpc_hit") {
00159 St_g2t_tpc_hit &hit = *((St_g2t_tpc_hit *)tableObject->GetTable());
00160 color = SubChannel(hit, rowNumber, size, style);
00161 }
00162 else if( mStr == "g2t_svt_hit") {
00163 St_g2t_svt_hit &hit = *((St_g2t_svt_hit *)tableObject->GetTable());
00164 color = SubChannel(hit,rowNumber,size,style);
00165 }
00166 else if( mStr == "tphit" ) {
00167 St_tcl_tphit &hit = *((St_tcl_tphit *)tableObject->GetTable());
00168 color = SubChannel(hit,rowNumber,size,style);
00169 }
00170 return color;
00171 }
00172
00173
00174 Int_t StTrackFilter::Channel(const TTable *tableObject,Int_t rowNumber,Size_t &size,Style_t &style)
00175 {
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194 static int colorIndex = 0;
00195 TString mStr = tableObject->GetType();
00196
00197 if( mStr == "dst_track" ) {
00198 St_dst_track &track = *((St_dst_track *)tableObject);
00199 return SubChannel(track, rowNumber, size, style);
00200 } else {
00201
00202 colorIndex++;
00203 if (colorIndex > 20) colorIndex = 0;
00204 return kBlue+colorIndex;
00205
00206 St_tpt_track &track = *((St_tpt_track *)tableObject);
00207 if ( m_Ltpt_track ) {
00208 for (int i =0; i < m_Ltpt_track; i++) {
00209 if (track[rowNumber].id != m_tpt_track_id[i]) continue;
00210 printf(" track %d %ld \n", rowNumber,track[rowNumber].id);
00211 style = 6;
00212 size = 2;
00213
00214 colorIndex++;
00215 if (colorIndex > 20) colorIndex = 0;
00216
00217 return kGreen;
00218 }
00219 }
00220 }
00221 return 0;
00222 }
00223
00224 Int_t StTrackFilter::SubChannel(St_dst_track &track, Int_t rowNumber,Size_t &size,Style_t &style)
00225 {
00226
00227
00228
00229
00230
00231
00232 static int colorIndex = 0;
00233 static Float_t minCurv = track[rowNumber].curvature;
00234 static Float_t maxCurv = track[rowNumber].curvature;
00235 Float_t curCurv = track[rowNumber].curvature;
00236 colorIndex++;
00237 if (curCurv > maxCurv) {maxCurv = curCurv; printf(" MaxCurv = %f\n", curCurv); }
00238 if (curCurv < minCurv) {minCurv = curCurv; printf(" MinCurv = %f\n", curCurv); }
00239
00240 if (m_Charge_Sign*track[rowNumber].icharge >= 0) {
00241
00242 if (track[rowNumber].curvature > 0.01) {
00243 if (colorIndex > 6) colorIndex = 0;
00244 return kRed+colorIndex;
00245 }
00246 }
00247 return 0;
00248 }
00249