/[PAMELA software]/DarthVader/TrackerLevel2/src/TrkCalib.cpp
ViewVC logotype

Contents of /DarthVader/TrackerLevel2/src/TrkCalib.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.4 - (show annotations) (download)
Thu Jan 16 15:29:45 2014 UTC (10 years, 10 months ago) by mocchiut
Branch: MAIN
CVS Tags: v10REDr01, v10RED, HEAD
Changes since 1.3: +4 -4 lines
Compilation warnings using GCC4.7 fixed

1
2 /**
3 * \file TrkCalib.cpp
4 * \author Elena Vannuccini
5 */
6 #include <TrkCalib.h>
7 using namespace pamela;
8
9
10 TrkCalib::TrkCalib(){
11
12 calib1 = new CalibTrk1Event();
13
14 };
15
16
17 TrkCalib::~TrkCalib(){
18
19 calib1->Delete();
20
21 };
22
23 /**
24 * Method to get the view number of the ipkt-th stored DSP-packet.
25 * The view number is extracted from the DSP-header.
26 */
27 Int_t TrkCalib::GetView(Int_t ipkt){
28
29 if( ipkt <0 || ipkt >=6 )return 0;
30 return calib1->DSPnumber[ipkt];
31
32 };
33
34 Int_t TrkCalib::EvaluatePar(TString what, Int_t ipkt, Int_t ivk, Float_t* result){
35
36 // vector to store mean, RMS, n.points
37 // Float_t* result = new Float_t[3];
38 *(result) = -1.;
39 *(result+1) = 0.;
40 *(result+2) = 0.;
41
42 // evaluate strip range
43 Int_t from = (ivk-1)*128 ;
44 Int_t to= ivk*128;
45 if( ivk > 0 && ivk <= 24){
46 from = (ivk-1)*128 ;
47 to = ivk*128;
48 }else if( ivk==0 ){
49 from = 0;
50 to = 3072;
51 }else if( ivk < 0 && ivk >= -3 ){
52 from = (-ivk-1)*1024;
53 to = -ivk*1024;
54 }else{
55 return 0;
56 }
57
58
59 float mean =0;
60 float rms =0;
61 int nstrip =0;
62 float *pt;
63
64 if( what.Contains("PED") ){
65 pt = (float*)(calib1->DSPped_par);
66 }else if( what.Contains("SIG") ){
67 pt = (float*)(calib1->DSPsig_par);
68 }else{
69 cout << "TrkCalib::EvaluatePar() --> "<<what<<" not implemented\n";
70 return 0;
71 };
72
73 int *ptbad;
74 ptbad = (int*)(calib1->DSPbad_par);
75
76
77 for(Int_t is=from; is<to; is++){
78 int bad = 1;
79 if( what.Contains("-BAD") && ptbad[ipkt*3072+is] == 1 )bad = 0;
80 mean += pt[ipkt*3072+is] * bad;
81 rms += pt[ipkt*3072+is] * pt[ipkt*3072+is] * bad ;
82 nstrip += bad;
83 }
84
85 *(result) = (Float_t)nstrip;
86
87 if(!nstrip) return 1;
88
89 mean = mean/nstrip;
90 rms = rms/nstrip - mean * mean ;
91 if (rms < 0) return 0;
92
93 *(result+1) = mean;
94 *(result+2) = sqrt(rms);
95
96 return 1;
97
98 }
99
100 /**
101 * Method to evaluate mean value of calibration parameters, over a VA1 chip, a ladder or the whole view.
102 * @param what Quantity to evaluate ("PED", "SIG" or "BAD")
103 * @param ipkt Stored DSP-packet
104 * @param ivk If ivk=1,24 the average is evaluated for the ivk-th VA1 chip. If ivk=-ladder, where
105 * ladder=1-2, the average is evaluated over the ladder. If ivk=0 the average is evaluated over the whole view.
106 */
107 Float_t TrkCalib::GetMean(TString what, Int_t ipkt, Int_t ivk){
108
109 Float_t* result = new Float_t[3];
110 if( !EvaluatePar(what,ipkt,ivk, result) ) return 0.;
111 Float_t mean = result[1];
112 delete [] result;
113 return mean;
114 };
115 /**
116 * Method to evaluate RMS of calibration parameters, over a VA1 chip, a ladder or the whole view.
117 * Input parameters follow the same notation of TrkCalib::GetMean(TString what, Int_t ipkt, Int_t ivk).
118 */
119 Float_t TrkCalib::GetRMS(TString what, Int_t ipkt, Int_t ivk){
120
121 Float_t* result = new Float_t[3];
122 if( !EvaluatePar(what,ipkt,ivk, result) ) return 0.;
123 Float_t rms = result[2];
124 delete [] result;
125 return rms;
126
127 };
128
129 /**
130 * Method to evaluate RMS of calibration parameters, over a VA1 chip, a ladder or the whole view.
131 * Input parameters follow the same notation of TrkCalib::GetMean(TString what, Int_t ipkt, Int_t ivk).
132 */
133 Float_t TrkCalib::GetNGOOD(Int_t ipkt, Int_t ivk){
134
135 Float_t* result = new Float_t[3];
136 if( !EvaluatePar("SIG-BAD",ipkt,ivk, result) ) return 0.;
137 Float_t ngood = result[0];
138 delete [] result;
139 return ngood;
140
141 };
142 Float_t TrkCalib::GetNBAD(Int_t ipkt, Int_t ivk){
143
144 Float_t* result = new Float_t[3];
145
146 if( !EvaluatePar("SIG",ipkt,ivk, result) ) return 0.;
147 Float_t nbad = result[0];
148 if( !EvaluatePar("SIG-BAD",ipkt,ivk, result) ) return 0.;
149 nbad = nbad - result[0];
150 delete [] result;
151 return nbad;
152
153 };
154 /**
155 * Method to get an array with the calibration-parameters, for a VA1 chip, a ladder or a view.
156 */
157 Float_t* TrkCalib::Get(TString what, Int_t ipkt, Int_t ivk){
158
159 Int_t from = (ivk-1)*128 ;
160 // Int_t to= ivk*128; // EM GCC 4.7 unused
161 if( ivk > 0 && ivk <= 24){
162 from = (ivk-1)*128 ;
163 // to = ivk*128;
164 }else if( ivk==0 ){
165 from = 0;
166 // to = 3072;
167 }else if( ivk < 0 && ivk >= -3 ){
168 from = (-ivk-1)*1024;
169 // to = -ivk*1024;
170 }else{
171 return NULL;
172 }
173
174
175 float *pt;
176
177 if( !what.CompareTo("PED") ){
178 pt = (float*)(calib1->DSPped_par);
179 }else if( !what.CompareTo("SIG") ){
180 pt = (float*)(calib1->DSPsig_par);
181 }else{
182 cout << "TrkCalib::Get(TString what, Int_t ipkt) --> "<<what<<" not implemented\n";
183 return NULL;
184 };
185
186 return &pt[ipkt*3072+from];
187 };
188
189 void TrkCalib::HeaderDump(Int_t ipkt){
190 cout << "------------------------"<<endl;
191 cout << " DSP "<<calib1->DSPnumber[ipkt]<<endl;
192 cout << "------------------------"<<endl;
193 cout << "DAQ mode "<<calib1->DAQmode[ipkt]<<endl;
194 cout << "<PED> "<<calib1->ped_l1[ipkt]<<" "<<calib1->ped_l2[ipkt]<<" "<<calib1->ped_l3[ipkt]<<" "<<endl;
195 cout << "<SIG> "<<calib1->sig_l1[ipkt]<<" "<<calib1->sig_l2[ipkt]<<" "<<calib1->sig_l3[ipkt]<<" "<<endl;
196 cout << "n.BAD "<<calib1->nbad_l1[ipkt]<<" "<<calib1->nbad_l2[ipkt]<<" "<<calib1->nbad_l3[ipkt]<<" "<<endl;
197 cout << "n.events "<<calib1->ncalib_event[ipkt]<<endl;
198 cout << "flag "<<calib1->cal_flag[ipkt]<<endl;
199
200 }
201 /**
202 * Method to get the histogram of calibration-parameters, for a VA1 chip, a ladder or a view.
203 */
204 TH1F* TrkCalib::GetHisto(TString what, Int_t ipkt, Int_t ivk, Int_t rebin){
205
206 Int_t from = (ivk-1)*128 ;
207 Int_t to= ivk*128;
208 if( ivk > 0 && ivk <= 24){
209 from = (ivk-1)*128 ;
210 to = ivk*128;
211 }else if( ivk==0 ){
212 from = 0;
213 to = 3072;
214 }else if( ivk < 0 && ivk >= -3 ){
215 from = (-ivk-1)*1024;
216 to = -ivk*1024;
217 }else{
218 return NULL;
219 }
220
221 TString title ="";
222 title.Form(" view %i ",GetView(ipkt));
223 title = what + title;
224 TH1F* h = new TH1F("h",title.Data(),to-from,from,to);
225 Float_t* v = Get(what,ipkt,ivk);
226 HeaderDump(ipkt);
227 for(Int_t i=from; i<to; i++)h->Fill(i,v[i-from]);
228 if(rebin !=0 )h->Rebin(rebin);
229 if(rebin !=0 )h->Scale(1./(float)rebin);
230 return h;
231
232 }
233
234
235
236 ClassImp(TrkCalib);

  ViewVC Help
Powered by ViewVC 1.1.23