StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
TrackData.cxx
1 #include <cmath>
2 #include <StMessMgr.h>
3 
4 #include "TrackData.h"
5 #include "VertexData.h"
6 
7 namespace StEvPPV {
8 //==========================================================
9 //==========================================================
10 TrackData::TrackData() {
11  ctbBin=-1;
12  bemcBin=-1;
13  eemcBin=-1;
14  vertexID=0;
15  gPt=0;
16  anyMatch=anyVeto=false;
17  mBtof=mCtb=mBemc=mEemc=mTpc=0;
18  weight=1;
19  zDca=ezDca=rxyDca=0;
20  mother=0;
21 }
22 
23 
24 //==========================================================
25 //==========================================================
26 bool
27 TrackData::matchVertex(VertexData &V, float dzMax) {
28 
29  float dz=zDca-V.r.z();
30  bool ret= fabs(dz) < dzMax+ezDca;
31  if(ret) LOG_DEBUG<< Form("PPV::matchTr2Ver VerID=%d weight=%.2f anyM=%d anyV=%d m: ctb=%d bemc=%d eemc=%d tpc=%d dz=%.2f +/- %.2f\n",V.id,weight,anyMatch,anyVeto,mCtb,mBemc,mEemc,mTpc,dz,ezDca)<<endm;
32  return ret;
33 }
34 
35 
36 //==========================================================
37 //==========================================================
38 void
39 TrackData::scanNodes(vector<int> &hit, int jz0){
40  /* INPUT: vector of hits for active nodes
41  i=[0,jz0-1] is on one side of z-Axis
42  i=[jz0,mx-1] on another side
43  */
44 
45  // params
46  const int minCenter=4 , minMiss=6; // criteria for Match & Veto
47  const int mxDev=2; // max # of deviations from expected pattern
48 
49  // printf("patt size=%d, jz0=%d\n",hit.size(),jz0);
50 
51  int nPatt[2];
52  int i;
53  bool vetoL=false, vetoR=false, matchL=false, matchR=false;
54 
55  // Scan Left end for missing hits
56  memset(nPatt,0,sizeof(nPatt));
57  for(i=0;i<(int)hit.size();i++) {
58  // printf("i=%d hit=%d\n",i,hit[i]);
59  nPatt[hit[i]]++;
60  if(nPatt[1]>mxDev) break;
61  if(nPatt[0]<minMiss) continue;
62  vetoL=true;
63  break;
64  }
65 
66  // printf("vetoL=%d nUp=%d nDwn=%d\n\n",vetoL, nPatt[1],nPatt[0]);
67 
68  // Scan Right end for missing hits
69  memset(nPatt,0,sizeof(nPatt));
70  for(i=hit.size()-1; i>=0;i--) {
71  // printf("i=%d hit=%d\n",i,hit[i]);
72  nPatt[hit[i]]++;
73  if(nPatt[1]>mxDev) break;
74  if(nPatt[0]<minMiss) continue;
75  vetoR=true;
76  break;
77  }
78 
79  // printf("vetoR=%d nUp=%d nDwn=%d\n\n",vetoR, nPatt[1],nPatt[0]);
80 
81  if(jz0>minCenter && jz0<(int)hit.size()-minCenter) { // examin membrane
82  // Scan Left half at membrane
83  memset(nPatt,0,sizeof(nPatt));
84  for(i=jz0-1; i>=0;i--) {
85  // printf("i=%d hit=%d\n",i,hit[i]);
86  nPatt[hit[i]]++;
87  if(nPatt[0]>mxDev) break;
88  if(nPatt[1]<minCenter) continue;
89  matchL=true;
90  break;
91  }
92 
93  // printf("matchL=%d nUp=%d nDwn=%d\n\n",matchL, nPatt[1],nPatt[0]);
94 
95 
96  // Scan Right half at membrane
97  memset(nPatt,0,sizeof(nPatt));
98  for(i=jz0;i<(int)hit.size();i++) {
99  // printf("i=%d hit=%d\n",i,hit[i]);
100  nPatt[hit[i]]++;
101  if(nPatt[0]>mxDev) break;
102  if(nPatt[1]<minCenter) continue;
103  matchR=true;
104  break;
105  }
106 
107  // printf("matchR=%d nUp=%d nDwn=%d\n\n",matchR, nPatt[1],nPatt[0]);
108 
109  } // end of membrane test
110 
111  bool match= matchL && matchR;
112  bool veto=(vetoL || vetoR) && !match;
113 
114  // printf(" TPC Conclusion: tpcMatch=%d tpcVeto=%d \n\n",match,veto);
115  updateAnyMatch(match,veto,mTpc);
116  weight*=getTpcWeight();
117 }
118 
119 //==========================================================
120 //==========================================================
121 void
122 TrackData::updateAnyMatch(bool match, bool veto, int & mXXX){
123  if(match) {
124  anyMatch=true;
125  anyVeto=false;
126  mXXX=1;
127  // } else if(veto && (!anyMatch) ) {
128  } else if(veto && (!match) ) {
129  anyVeto=true;
130  mXXX=-1;
131  } else {
132  mXXX=0;
133  }
134 }
135 
136 //==========================================================
137 //==========================================================
138 float
139 TrackData:: getTpcWeight(){
140  const float Wdunno=1, Wmatch=5, Wveto=0.2;
141  if(mTpc>0) return Wmatch;
142  if(mTpc<0) return Wveto;
143  return Wdunno;
144 }
145 }// end namespace StEvPPV