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

Annotation of /PamVMC_update/include/PamVMCPrimaryGF.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.1.1 - (hide 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 formato 1.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