/[PAMELA software]/PamVMC_update/include/PamVMCPrimaryGF.h
ViewVC logotype

Contents of /PamVMC_update/include/PamVMCPrimaryGF.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.1.1 - (show annotations) (download) (vendor branch)
Tue Oct 15 15:52:29 2013 UTC (11 years, 1 month ago) by formato
Branch: MAIN, rel
CVS Tags: reltag, HEAD
Changes since 1.1: +0 -0 lines
File MIME type: text/plain
PamVMC update

1 #ifndef PAMVMCPRIMARYGF
2 #define PAMVMCPRIMARYGF
3
4 #include <vector>
5 //#include <TObjectTable.h>
6 #include "TObject.h"
7 #include "TrkParams.h"
8 #include "TMath.h"
9 #define ZOFFSET 49.229
10
11
12 using TMath::Min;
13
14 struct PamVMCPlCross
15 {
16 Double_t fX, fY;
17 Int_t fplID;
18 PamVMCPlCross(Double_t x,Double_t y, Int_t id):fX(x), fY(y), fplID(id){ };
19 virtual ~PamVMCPlCross(){; };
20 };
21
22 typedef vector<PamVMCPlCross*> Plcrvec;
23
24
25 //variable NGF is defined in TrkParams.h
26 class PamVMCPrimaryGF : public TObject
27 {
28 Plcrvec vec;
29 Double_t fXtol, fYtol;
30 Bool_t fisinside;
31
32 Int_t PlCross(Double_t z_prev, Double_t z_curr){
33 for(Int_t i = 0; i<NGF; i++){
34 if( ( (z_prev>=TrkParams::zGF[i] + ZOFFSET ) && (z_curr<=TrkParams::zGF[i] + ZOFFSET ) ) || ( (z_prev<=TrkParams::zGF[i] + ZOFFSET ) && (z_curr>=TrkParams::zGF[i] + ZOFFSET ) ) ) {
35 return i;
36
37 }
38 }
39 return -1;
40 }
41
42 Bool_t IsInside(Int_t id, Double_t z_prev, Double_t x_prev, Double_t y_prev, Double_t z_curr, Double_t x_curr, Double_t y_curr, Double_t* xc, Double_t* yc){
43 if (z_prev==z_curr){
44 *xc = x_curr;
45 *yc = y_curr;
46 if( (TrkParams::xGF_min[id]<=x_curr) && (TrkParams::xGF_max[id]>=x_curr) &&
47 (TrkParams::yGF_min[id]<=y_curr) && (TrkParams::yGF_max[id]>=y_curr) ) return kTRUE;
48 } else {
49 Double_t kx = (x_prev - x_curr)/(z_prev-z_curr);
50 Double_t bx = x_prev - kx*z_prev;
51 Double_t ky = (y_prev - y_curr)/(z_prev-z_curr);
52 Double_t by = y_prev - ky*z_prev;
53 *xc = kx*(TrkParams::zGF[id]+ZOFFSET)+bx;
54 *yc = ky*(TrkParams::zGF[id]+ZOFFSET)+by;
55 //cout<<"Trk_plane:"<<id<<" x_prev,y_prev,zprev:"<<x_prev<<","<<y_prev<<","<<z_prev<<endl;
56 //cout<<"Trk_plane:"<<id<<" x_curr,y_curr,zcurr:"<<x_curr<<","<<y_curr<<","<<z_curr<<endl;
57 //cout<<"Trk_plane:"<<id<<" xc,yc,zc:"<<*xc<<","<<*yc<<","<<TrkParams::zGF[id]+ZOFFSET<<endl;
58 if( (TrkParams::xGF_min[id]<=*xc) && (TrkParams::xGF_max[id]>=*xc) &&
59 (TrkParams::yGF_min[id]<=*yc) && (TrkParams::yGF_max[id]>=*yc) ) return kTRUE;
60 }
61 return kFALSE;
62 }
63
64 void AddPlane(Double_t x_cr, Double_t y_cr, Int_t pl_id){
65 vec.push_back( new PamVMCPlCross( x_cr, y_cr, pl_id) );
66 }
67
68
69
70 public:
71 PamVMCPrimaryGF():fXtol(-100.),fYtol(-100.), fisinside(kFALSE){ };
72 virtual ~PamVMCPrimaryGF() { };
73
74
75 //doing after each step of primary
76 void CheckCrossing(Double_t z_prev, Double_t x_prev, Double_t y_prev, Double_t z_curr, Double_t x_curr, Double_t y_curr){
77 Int_t pl_id = PlCross(z_prev, z_curr);
78 Double_t xc,yc;
79 xc = yc = -100.;
80 if(pl_id >= 0){
81 fisinside = IsInside(pl_id, z_prev, x_prev, y_prev, z_curr, x_curr, y_curr, &xc, &yc);
82 if (fisinside) AddPlane(xc, yc, pl_id);
83 }
84 }
85 //doing after finishing primary track
86 Bool_t IsInsideAcceptance(Double_t* xc, Double_t* yc, Double_t &xtol, Double_t &ytol){
87 Plcrvec::const_iterator p = vec.begin();
88 *xc = *yc = -100;
89 xtol = ytol = 100.;
90 Bool_t is_tol_outside = kFALSE;
91 while( p!=vec.end() )
92 {
93 xc[(*p)->fplID] = (*p)->fX;
94 yc[(*p)->fplID] = (*p)->fY;
95 Double_t xtolpl = Min((*p)->fX-TrkParams::xGF_min[(*p)->fplID], TrkParams::xGF_max[(*p)->fplID]-(*p)->fX);
96 Double_t ytolpl = Min((*p)->fY-TrkParams::yGF_min[(*p)->fplID], TrkParams::yGF_max[(*p)->fplID]-(*p)->fY);
97 if( (xtolpl < 0.) || (ytolpl<0.)) is_tol_outside = kTRUE;
98 //cout<<"xc="<<(*p)->fX<<" yc="<<(*p)->fY<<" xtolpl="<<xtolpl<<" ytolpl="<<ytolpl<<endl;
99 xtol=(xtolpl<xtol)?xtolpl:xtol;
100 ytol=(ytolpl<ytol)?ytolpl:ytol;
101 p++;
102 }
103 if ( is_tol_outside ) xtol = ytol = -100.;
104 //cout<<"xtolpl_FIN="<<xtol<<" ytolpl_FIN="<<ytol<<" PL:"<<vec.size()<<endl;
105 if (vec.size() == NGF) return kTRUE;
106 xtol = ytol = -100.;
107 return kFALSE;
108 }
109
110 // calls after primary propagation to clean everything
111 virtual void Clear(Option_t * = ""){
112 fXtol=fYtol=-100.;
113 vec.clear();
114 }
115 };
116 #endif

  ViewVC Help
Powered by ViewVC 1.1.23