/[PAMELA software]/tracker/flight/TrkNuclei/src/TrkNuclei.cpp
ViewVC logotype

Annotation of /tracker/flight/TrkNuclei/src/TrkNuclei.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (hide annotations) (download)
Thu Mar 5 08:52:29 2009 UTC (15 years, 9 months ago) by pamelats
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +5 -1 lines
updates in GetZ_Rigidity

1 pam-fi 1.1 #include <TrkNuclei.h>
2    
3    
4     ////////////////////////////////////////////////////////////
5     /// functions
6     ////////////////////////////////////////////////////////////
7    
8     /*
9     * First charge-vs-beta parameterization provided by wolfgang
10     */
11     Double_t charge_tracker_beta_wolfgang(Double_t *x, Double_t *par){
12    
13     Float_t C0[9] = {0 , 1 , 2 , 3 , 4 , 5 , 6 , 8 , 90 };
14     Float_t B0[9] = {0 , 5.21108 , 8.53345 , 7.00253 , 8.34315 , 11.9997 , 11.6236 , 2.59707 , 2000 };
15     Float_t B1[9] = {0 , -9.6716 , 9.79003 , 38.0199 , 42.6475 , 29.6548 , 43.2637 , 107.077 , 0 };
16     Float_t B2[9] = {0 , 5.70349 , -36.0582 , -73.3067 , -69.9404 , -38.9489 , -60.9272 , -152.77 , 0 };
17     Float_t B3[9] = {0 , -0.311956 , 21.7421 , 37.4468 , 33.7097 , 17.7431 , 31.2389 , 75.0796 , 0 };
18     Float_t x1[9],y1[9];
19     Int_t n1 = 9;
20    
21     Float_t charge = 1000.;
22     Float_t beta = (Float_t) x[0];
23     Float_t dedxtrk = (Float_t) x[1]; dedxtrk = dedxtrk/1.3;
24    
25     if( beta>2. || dedxtrk <=0 )return 0.;// it makes no sense to allow beta>2
26    
27     Float_t betahelp = pow(beta, 0.8);
28     Float_t ym = dedxtrk*betahelp;
29     Float_t xb = beta;
30     for ( Int_t jj=0; jj<9; jj++ ){
31     x1[jj] = B0[jj]+B1[jj]*xb+B2[jj]*xb*xb+B3[jj]*xb*xb*xb;
32     y1[jj] = C0[jj]*C0[jj] ;
33     }
34     TGraph *gr1 = new TGraph(n1,x1,y1);
35     TSpline3 *spl1 = new TSpline3("grs",gr1); // use a cubic spline
36     Float_t chelp = spl1->Eval(ym);
37     charge = TMath::Sqrt(chelp);
38    
39     if(gr1)gr1->Delete();
40     if(spl1)spl1->Delete();
41    
42     return (Double_t)charge ;
43    
44     }
45     /*
46     * First charge-vs-rigidity parameterization provided by wolfgang
47     * (adpted from charge-vs-deflection parameterization)
48     */
49     Double_t charge_tracker_rigidity_wolfgang(Double_t *x, Double_t *par){
50    
51     Float_t C0[9] = {0 , 1 , 2 , 3 , 4 , 5 , 6 , 8 , 90 };
52     Float_t B0[9] = {0 , 0.867439 , 4.04174 , 9.10558 , 15.3956 , 20.6338 , 25.5426 , 32.1287 , 1000 };
53     Float_t B1[9] = {0 , -0.128483 , -3.18795 , -3.38137 , -9.61749 , -6.44302 , -8.23092 , -7.30003 , 0 };
54     Float_t B2[9] = {0 , 0.764514 , 19.7088 , 38.8391 , 58.1051 , 58.8905 , 55.1826 , 58.9612 , 0 };
55     Float_t B3[9] = {0 , 0.00176465 , -9.23937 , -28.0735 , -50.4548 , -54.3154 , -50.3964 , -82.3765 , 0 };
56     Float_t B4[9] = {0 , -0.016259 , 1.32851 , 6.68077 , 14.3786 , 16.3259 , 15.835 , 54.1588 , 0 };
57    
58    
59     Float_t yl,yh,m,b,chelp;
60    
61     // Float_t x1[9],y1[9];
62     // Int_t n1 = 9;
63    
64     Float_t charge = 1000.;
65     Float_t def = 1./((Float_t)x[0]);
66 pamelats 1.2 // WM 05-03-2009 calibration valid only for def>0
67     def = fabs(def);
68 pam-fi 1.1 Float_t dedxtrk = (Float_t) x[1]; dedxtrk = dedxtrk/1.3;
69    
70     Float_t ym = dedxtrk;
71     Float_t xb = def;
72    
73     for ( Int_t jj=0; jj<8; jj++ ){
74     yl = B0[jj] + B1[jj]*xb + B2[jj]*xb*xb + B3[jj]*xb*xb*xb + B4[jj]*xb*xb*xb*xb;
75     yh = B0[jj+1] + B1[jj+1]*xb + B2[jj+1]*xb*xb + B3[jj+1]*xb*xb*xb + B4[jj+1]*xb*xb*xb*xb;
76    
77 pamelats 1.2 // if ((yl<ym)&&(ym<yh)){
78     //WM 05-03-2009 dEdx=0 => charge=0
79     if ((yl<=ym)&&(ym<yh)){
80 pam-fi 1.1 m = (C0[jj+1]*C0[jj+1] - C0[jj]*C0[jj]) / (yh - yl);
81     b = (C0[jj]*C0[jj]) - m*yl;
82     chelp = m*ym + b;
83     charge= TMath::Sqrt(chelp);
84     }
85     }
86    
87     return (Double_t)charge ;
88    
89     }
90     ////////////////////////////////////////////////////////////
91     /// INITIALIZATIONS & GLOBAL PARAMETERS
92     ////////////////////////////////////////////////////////////
93    
94     TrkNuclei_parameters * TrkNuclei_parameters::_parameters = 0;
95    
96    
97     /**
98     * Delete
99     */
100     void TrkNuclei_parameters::Delete(){
101     if(charge_vs_beta)charge_vs_beta->Delete();
102     if(charge_vs_rig)charge_vs_rig->Delete();
103     _parameters=NULL;
104     }
105    
106     /**
107     * Set external parameters to default values
108     */
109     void TrkNuclei_parameters::SetDefault(){
110    
111     cout <<endl << "---------------------------------------------"<<endl;
112     cout << "TrkNuclei --> SET DEFAULT PARAMETERS" << endl;
113     cout << "---------------------------------------------"<<endl;
114    
115     cout << endl << " Charge vs beta "<<endl;
116     cout << " >> Wolfgang <<"<<endl;
117     charge_vs_beta = new TF2("fch_vs_beta",charge_tracker_beta_wolfgang,0.,1.1,0.,100.);
118    
119     cout << endl << " Charge vs rigidity "<<endl;
120     charge_vs_rig = new TF2("fch_vs_rig",charge_tracker_rigidity_wolfgang,0.,10000.,0.,100.);
121     cout << " >> Wolfgang <<"<<endl;
122     cout << "---------------------------------------------"<<endl;
123    
124     }
125     /*
126     * Set new charge-vs-beta parameterization.
127     * Input function should be a 2D function: the first variable is beta, the second one the dedx.
128     */
129     bool TrkNuclei_parameters::SetZ_Beta(TF2* f){
130     if(!f)return false;
131     cout << "TrkNuclei --> Setting new charge-vs-beta parameterization"<<endl;
132     if(charge_vs_beta)charge_vs_beta->Delete();
133     charge_vs_beta = f;
134     return true;
135     };
136     /*
137     * Set new charge-vs-beta parameterization.
138     * Input function should be a 2D function: the first variable is beta, the second one the dedx.
139     */
140     bool TrkNuclei_parameters::SetZ_Beta( const char* formula ){
141     TF2 *f = new TF2("fch_vs_beta",formula,0.,1.1,0.,100.);
142     return SetZ_Beta(f);
143     };
144     /*
145     * Set new charge-vs-rigidity parameterization.
146     * Input function should be a 2D function: the first variable is the rigidity (GV), the second one the dedx.
147     */
148     bool TrkNuclei_parameters::SetZ_Rigidity(TF2* f){
149     if(!f)return false;
150     cout << "TrkNuclei --> Setting new charge-vs-rigidity parameterization"<<endl;
151     if(charge_vs_rig)charge_vs_rig->Delete();
152     charge_vs_rig = f;
153     return true;
154     };
155     /*
156     * Set new charge-vs-rigidity parameterization.
157     * Input function should be a 2D function: the first variable is the rigidity (GV), the second one the dedx.
158     */
159     bool TrkNuclei_parameters::SetZ_Rigidity( const char* formula ){
160     TF2 *f = new TF2("fch_vs_rig",formula,0.,1.1,0.,100.);
161     return SetZ_Rigidity(f);
162     };
163    
164     ////////////////////////////////////////////////////////////
165     /// CLASS IMPLEMENTATION
166     ////////////////////////////////////////////////////////////
167    
168     /**
169     * Set event
170     */
171     bool TrkNuclei::Set(TrkTrack* trk){
172     if(!trk)return false;
173     if(!nutrk)nutrk = new TrkTrack();
174     *nutrk = *trk;
175     // for(int i=0; i<6; i++){
176     // dedx_x[i]=trk->dedx_x[i];
177     // dedx_y[i]=trk->dedx_y[i];
178     // maxs_x[i]=trk->GetClusterX_MaxStrip(i);
179     // maxs_y[i]=trk->GetClusterY_MaxStrip(i);
180     // }
181     return true;
182     };
183     bool TrkNuclei::Set(PamTrack* trk){
184     if(!trk)return false;
185     return Set(trk->GetTrkTrack());
186     };
187     bool TrkNuclei::Set(PamLevel2* l2,int ntr){
188     if(!l2)return false;
189     if(!l2->GetTrkLevel2())return false;
190     if(ntr>l2->GetTrkLevel2()->GetNTracks()||ntr<0)return false;
191     return Set(l2->GetTrack(ntr)->GetTrkTrack());
192     };
193     /**
194     * Reset event
195     */
196     void TrkNuclei::Reset(){
197     if(nutrk)nutrk->Clear();
198     // for(int i=0; i<6; i++){
199     // dedx_x[i]=0.;
200     // dedx_y[i]=0.;
201     // maxs_x[i]=-1;
202     // maxs_y[i]=-1;
203     // }
204     }
205     /**
206     * Method to evaluate the particle charge in each view, as a function of the particle velocity.
207     * @param ip plane (0-5)
208     * @param iv view (0=x 1=y)
209     * @param beta particle velocity
210     */
211     Float_t TrkNuclei::GetZ_Beta(int ip, int iv, float beta){
212    
213     if( !TrkNuclei_parameters::Get()->GetZ_Beta() )return 0.;
214     return TrkNuclei_parameters::Get()->GetZ_Beta()->Eval(beta,nutrk->GetDEDX(ip,iv));
215    
216     }
217     /**
218     * Method to evaluate the particle charge in each view, as a function of the particle velocity.
219     * @param ip plane (0-5)
220     * @param beta particle velocity
221     */
222     Float_t TrkNuclei::GetZ_Beta(int ip, float beta){
223    
224     if( !TrkNuclei_parameters::Get()->GetZ_Beta() )return 0.;
225     return TrkNuclei_parameters::Get()->GetZ_Beta()->Eval(beta,nutrk->GetDEDX(ip));
226    
227     }
228     /**
229     * Method to evaluate the average particle charge, as a function of the particle velocity.
230     * @param beta particle velocity
231     */
232     Float_t TrkNuclei::GetZ_Beta(float beta){
233    
234     if( !TrkNuclei_parameters::Get()->GetZ_Beta() )return 0.;
235     return TrkNuclei_parameters::Get()->GetZ_Beta()->Eval(beta,nutrk->GetDEDX());
236    
237     }
238     /**
239     * Method to evaluate the particle charge in each view, as a function of the particle rigidity.
240     * @param ip plane (0-5)
241     * @param iv view (0=x 1=y)
242     * @param rig particle rigidity
243     */
244     Float_t TrkNuclei::GetZ_Rigidity(int ip, int iv, float rig){
245    
246     if( !TrkNuclei_parameters::Get()->GetZ_Rigidity() )return 0.;
247     return TrkNuclei_parameters::Get()->GetZ_Rigidity()->Eval(rig,nutrk->GetDEDX(ip,iv));
248    
249     }
250     /**
251     * Method to evaluate the particle charge in each view, as a function of the particle rigidity.
252     * @param ip plane (0-5)
253     * @param rig particle rigidity
254     */
255     Float_t TrkNuclei::GetZ_Rigidity(int ip, float rig){
256    
257     if( !TrkNuclei_parameters::Get()->GetZ_Rigidity() )return 0.;
258     return TrkNuclei_parameters::Get()->GetZ_Rigidity()->Eval(rig,nutrk->GetDEDX(ip));
259    
260     }
261     /**
262     * Method to evaluate the particle charge in each view, as a function of the particle rigidity.
263     * @param rig particle rigidity
264     */
265     Float_t TrkNuclei::GetZ_Rigidity(float rig){
266    
267     if( !TrkNuclei_parameters::Get()->GetZ_Rigidity() )return 0.;
268     return TrkNuclei_parameters::Get()->GetZ_Rigidity()->Eval(rig,nutrk->GetDEDX());
269    
270     }
271    
272     ClassImp(TrkNuclei);

  ViewVC Help
Powered by ViewVC 1.1.23