StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
StEStructQJ.h
1 /**********************************************************************
2  *
3  * $Id: StEStructQJ.h,v 1.3 2012/11/16 21:23:19 prindle Exp $
4  *
5  * Author: Jeff Porter
6  *
7  **********************************************************************
8  *
9  * Description: EStructEventReader wrapper for flat event generator
10  *
11  **********************************************************************/
12 #ifndef __STESTRUCTQJ__H
13 #define __STESTRUCTQJ__H
14 
15 #include <cmath>
16 #include <iostream>
17 #include "StEStructPool/AnalysisMaker/StEStructEventReader.h"
18 
19 #include "TROOT.h"
20 
21 class StEStructEventCuts;
22 class StEStructTrackCuts;
23 
24 
26 
27  int meventCount;
28  int meventsToDo;
29  bool mAmDone;
30  int mnumTracks;
31  double impact;
32 
33  char *fileListName;
34  std::ifstream *fList;
35  std::ifstream *inFile;
36 
37  void fillTracks(StEStructEvent* estructEvent);
38 
39  public:
40 
41  StEStructQJ(char *dir);
42  StEStructQJ(char *dir, int nevents, StEStructEventCuts* ecuts, StEStructTrackCuts* tcuts);
43 
44  virtual ~StEStructQJ(){};
45  void setSeed(int iseed);
46  bool hasGenerator();
47  bool measureable(int pid);
48  float* globalDCA(float* p, float* v);
49 
50  virtual StEStructEvent* next();
51  virtual bool done();
52  virtual StEStructEvent* generateEvent();
53  int getNumTracks();
54 
55  ClassDef(StEStructQJ,1)
56 };
57 
58 
59 inline bool StEStructQJ::done(){ return mAmDone; };
60 
61 inline bool StEStructQJ::measureable(int pid){
62  bool retVal=false;
63  if(pid<0)pid*=-1;
64 
65  switch(pid){
66 
67  case 211:
68  { // charged pion
69  retVal=true;
70  break;
71  }
72  case 321:
73  { // charged kaon
74  retVal=true;
75  break;
76  }
77  case 2212:
78  { // proton
79  retVal=true;
80  break;
81  }
82  case 11:
83  { // electron
84  retVal=true;
85  break;
86  }
87  default:
88  {
89  break;
90  }
91  }
92  return retVal;
93 }
94 
95 inline float* StEStructQJ::globalDCA(float* p, float* v){
96 
97  // assumes primaryVertex at origin
98  float* r=new float[4];
99  r[0]=r[1]=r[2]=r[3]=0;
100 
101  if(fabs(p[2])<0.01){ // then 2D
102  if(fabs(p[0])<0.01){
103  r[3]=r[1]=v[1]; // p=py only
104  return r;
105  }
106  float a = p[1]/p[0];
107  float x = -1.0*(a*v[1])/(a*a+1);
108  float y=a*x+v[1];
109  r[0]=x; r[1]=y;
110  r[3]=sqrt(x*x+y*y);
111  return r;
112  }
113  float ax = p[0]/p[2];
114  float ay = p[1]/p[2];
115  float z = -1.0*(ax*v[0]+ay*v[1])/(ax*ax+ay*ay+1);
116  float x = ax*z+v[0];
117  float y = ay*z+v[1];
118  r[0]=x; r[1]=y; r[2]=z;
119  r[3]=sqrt(x*x+y*y+z*z);
120  return r;
121 }
122 
123 
124 #endif
125 
126 /**********************************************************************
127  *
128  * $Log: StEStructQJ.h,v $
129  * Revision 1.3 2012/11/16 21:23:19 prindle
130  * EventCuts and TrackCuts were moved to EventReader. Remove that code from
131  * these readers.
132  *
133  * Revision 1.2 2006/02/22 22:05:41 prindle
134  * Removed all references to multRef (?)
135  *
136  * Revision 1.1 2004/03/02 21:51:00 prindle
137  *
138  * I forgot to cvs add my EventGenerator readers.
139  *
140  * Revision 1.1 2003/11/21 23:48:00 prindle
141  * Include my toy event generator in cvs
142  *
143  *
144  *********************************************************************/