1 | #include "TString.h"
|
---|
2 | #include "TMultiGraph.h"
|
---|
3 | #include "TGraphErrors.h"
|
---|
4 | #include "TStyle.h"
|
---|
5 | #include "TCanvas.h"
|
---|
6 | #include "TLegend.h"
|
---|
7 |
|
---|
8 | #include "MParList.h"
|
---|
9 | #include "MTaskList.h"
|
---|
10 | #include "MReadMarsFile.h"
|
---|
11 | #include "MGeomApply.h"
|
---|
12 | #include "MEvtLoop.h"
|
---|
13 | #include "MPedCalcPedRun.h"
|
---|
14 | #include "MPedestalCam.h"
|
---|
15 | #include "MPedestalPix.h"
|
---|
16 |
|
---|
17 | #include <iostream>
|
---|
18 | #include <fstream>
|
---|
19 | #include <stdlib.h>
|
---|
20 |
|
---|
21 | using namespace std;
|
---|
22 |
|
---|
23 |
|
---|
24 | const UInt_t nmaxslice = 30;
|
---|
25 | const UInt_t step = 2;
|
---|
26 |
|
---|
27 | void pedvsslices2(TString pedname);
|
---|
28 |
|
---|
29 | int main()
|
---|
30 | //void pedvsslices()
|
---|
31 | {
|
---|
32 | pedvsslices2("~markus/Magic/Soft/Mars/20040303_20123_P_NewCalBoxTestLidOpen_E.root");
|
---|
33 | }
|
---|
34 |
|
---|
35 | void pedvsslices2(TString pedname)
|
---|
36 | {
|
---|
37 | const Int_t nbad = 22;
|
---|
38 | Int_t bad[nbad]={0,10,47,54,124,125,159,162,222,300,388,395,464,558,559,543,89,510,576,459,550,561};
|
---|
39 |
|
---|
40 | static const UInt_t rnmax = (nmaxslice/step)*step;
|
---|
41 | static const UInt_t nslices = rnmax/step;
|
---|
42 | static const UInt_t nloops = rnmax*(rnmax-step+2)/(2*step);
|
---|
43 |
|
---|
44 | cout << "nslices = " << nslices << endl;
|
---|
45 |
|
---|
46 | // general settings
|
---|
47 | gStyle->SetCanvasColor(0);
|
---|
48 | gStyle->SetStatColor(0);
|
---|
49 | gStyle->SetStatBorderSize(1);
|
---|
50 | gStyle->SetMarkerSize(0.6);
|
---|
51 | gStyle->SetPadBorderMode(0);
|
---|
52 |
|
---|
53 | // Define the graphs and their atributes
|
---|
54 | TGraphErrors grmeanIn[nslices];
|
---|
55 | TGraphErrors grrmsIn[nslices];
|
---|
56 | TGraphErrors grmeanOut[nslices];
|
---|
57 | TGraphErrors grrmsOut[nslices];
|
---|
58 |
|
---|
59 | // Null graph to adjust plot limits
|
---|
60 | Float_t nullx[rnmax+1];
|
---|
61 | Float_t nullyM[rnmax+1];
|
---|
62 | Float_t nullyR[rnmax+1];
|
---|
63 | for(UInt_t i=0;i<=rnmax;i++)
|
---|
64 | {
|
---|
65 | nullx[i]=(Float_t)i;
|
---|
66 | nullyM[i]=9+2./rnmax*i;
|
---|
67 | nullyR[i]=3.5+5./rnmax*i;
|
---|
68 | }
|
---|
69 | TGraph grnullM(rnmax+1,nullx,nullyM);
|
---|
70 | TGraph grnullR(rnmax+1,nullx,nullyR);
|
---|
71 | grnullM.SetMarkerSize(0);
|
---|
72 | grnullR.SetMarkerSize(0);
|
---|
73 | grnullM.SetMarkerColor(0);
|
---|
74 | grnullR.SetMarkerColor(0);
|
---|
75 | grnullM.GetXaxis()->SetTitle("First used time slice");
|
---|
76 | grnullR.GetXaxis()->SetTitle("First used time slice");
|
---|
77 | grnullM.GetYaxis()->SetTitle("Average Pedestal mean (ADC cnts)");
|
---|
78 | grnullR.GetYaxis()->SetTitle("Average Pedestal rms (ADC cnts)");
|
---|
79 |
|
---|
80 | for(UInt_t i=0;i<nslices;i++)
|
---|
81 | {
|
---|
82 | grmeanIn[i].SetMarkerColor(i%9+1);
|
---|
83 | grrmsIn[i].SetMarkerColor(i%9+1);
|
---|
84 | grmeanOut[i].SetMarkerColor(i%9+1);
|
---|
85 | grrmsOut[i].SetMarkerColor(i%9+1);
|
---|
86 |
|
---|
87 | grmeanIn[i].SetMarkerStyle(20+i%19+1);
|
---|
88 | grrmsIn[i].SetMarkerStyle(20+i%19+1);
|
---|
89 | grmeanOut[i].SetMarkerStyle(20+i%19+1);
|
---|
90 | grrmsOut[i].SetMarkerStyle(20+i%19+1);
|
---|
91 | }
|
---|
92 |
|
---|
93 |
|
---|
94 | // Fill the graphs
|
---|
95 | UInt_t islice=0;
|
---|
96 | UInt_t fslice=step-1;
|
---|
97 | for(UInt_t i=0;i<nloops;i++)
|
---|
98 | {
|
---|
99 | MParList plist;
|
---|
100 | MTaskList tlist;
|
---|
101 | MPedestalCam pedcam;
|
---|
102 |
|
---|
103 | plist.AddToList(&tlist);
|
---|
104 | plist.AddToList(&pedcam);
|
---|
105 |
|
---|
106 | MReadMarsFile read("Events", pedname);
|
---|
107 | read.DisableAutoScheme();
|
---|
108 | MGeomApply geomapl;
|
---|
109 | MPedCalcPedRun pedcalc;
|
---|
110 | cout << "Checking slices from " << islice << " to " << fslice << endl;
|
---|
111 | pedcalc.SetRange(islice,fslice,0,0);
|
---|
112 | pedcalc.SetWindowSize(fslice-islice+1);
|
---|
113 |
|
---|
114 | tlist.AddToList(&read);
|
---|
115 | tlist.AddToList(&geomapl);
|
---|
116 | tlist.AddToList(&pedcalc);
|
---|
117 |
|
---|
118 | MEvtLoop evtloop;
|
---|
119 | evtloop.SetParList(&plist);
|
---|
120 | if (!evtloop.Eventloop())
|
---|
121 | return;
|
---|
122 |
|
---|
123 | // compute the pedestal mean and rms averaged in the camera
|
---|
124 | Float_t meansumIn =0;
|
---|
125 | Float_t meansum2In=0;
|
---|
126 | Float_t rmssumIn =0;
|
---|
127 | Float_t rmssum2In =0;
|
---|
128 | Float_t meansumOut =0;
|
---|
129 | Float_t meansum2Out=0;
|
---|
130 | Float_t rmssumOut =0;
|
---|
131 | Float_t rmssum2Out =0;
|
---|
132 |
|
---|
133 | const Int_t ninn = 397;
|
---|
134 | Int_t rninn=0;
|
---|
135 | Int_t rnout=0;
|
---|
136 | for(Int_t j=0;j<pedcam.GetSize();j++)
|
---|
137 | {
|
---|
138 | // skip bad pixels from list above
|
---|
139 | Bool_t isBad=kFALSE;
|
---|
140 | for(Int_t k=0;k<nbad;k++)
|
---|
141 | if(bad[k]==j)
|
---|
142 | {
|
---|
143 | isBad=kTRUE;
|
---|
144 | break;
|
---|
145 | }
|
---|
146 | if(isBad)
|
---|
147 | continue;
|
---|
148 |
|
---|
149 | // keep the sum of values and of squares
|
---|
150 | Float_t ped = pedcam[j].GetPedestal();
|
---|
151 | Float_t rms = pedcam[j].GetPedestalRms();
|
---|
152 | if(j<ninn)
|
---|
153 | {
|
---|
154 | meansumIn+= ped;
|
---|
155 | meansum2In+=ped*ped;
|
---|
156 | rmssumIn+=rms;
|
---|
157 | rmssum2In+=rms*rms;
|
---|
158 | rninn++;
|
---|
159 | }
|
---|
160 | else
|
---|
161 | {
|
---|
162 | meansumOut+= ped;
|
---|
163 | meansum2Out+=ped*ped;
|
---|
164 | rmssumOut+=rms;
|
---|
165 | rmssum2Out+=rms*rms;
|
---|
166 | rnout++;
|
---|
167 | }
|
---|
168 | }
|
---|
169 |
|
---|
170 | Float_t avmeanIn = meansumIn/rninn;
|
---|
171 | Float_t sigmeanIn = (meansum2In-meansumIn*meansumIn/rninn)/(rninn-1);
|
---|
172 | Float_t avrmsIn = rmssumIn/rninn;
|
---|
173 | Float_t sigrmsIn = (rmssum2In-rmssumIn*rmssumIn/rninn)/(rninn-1);
|
---|
174 |
|
---|
175 | Float_t avmeanOut = meansumOut/rnout;
|
---|
176 | Float_t sigmeanOut = (meansum2Out-meansumOut*meansumOut/rnout)/(rnout-1);
|
---|
177 | Float_t avrmsOut = rmssumOut/rnout;
|
---|
178 | Float_t sigrmsOut = (rmssum2Out-rmssumOut*rmssumOut/rnout)/(rnout-1);
|
---|
179 |
|
---|
180 | // save the values into the graphs
|
---|
181 | grmeanIn[(fslice-islice+1)/step-1].SetPoint(islice,islice,avmeanIn);
|
---|
182 | grmeanIn[(fslice-islice+1)/step-1].SetPointError(islice,0,sigmeanIn/rninn);
|
---|
183 | grmeanOut[(fslice-islice+1)/step-1].SetPoint(islice,islice,avmeanOut);
|
---|
184 | grmeanOut[(fslice-islice+1)/step-1].SetPointError(islice,0,sigmeanOut/rnout);
|
---|
185 |
|
---|
186 | grrmsIn[(fslice-islice+1)/step-1].SetPoint(islice,islice,avrmsIn);
|
---|
187 | grrmsIn[(fslice-islice+1)/step-1].SetPointError(islice,0,sigrmsIn/rninn);
|
---|
188 | grrmsOut[(fslice-islice+1)/step-1].SetPoint(islice,islice,avrmsOut);
|
---|
189 | grrmsOut[(fslice-islice+1)/step-1].SetPointError(islice,0,sigrmsOut/rnout);
|
---|
190 |
|
---|
191 | // compute next initial and final slice values
|
---|
192 | islice++;
|
---|
193 | fslice++;
|
---|
194 | if(fslice>=nmaxslice)
|
---|
195 | {
|
---|
196 | fslice=fslice-islice+step;
|
---|
197 | islice=0;
|
---|
198 | }
|
---|
199 | }
|
---|
200 |
|
---|
201 | TCanvas* myC = new TCanvas("myC","pedestal studies",900,1250);
|
---|
202 | myC->Divide(2,2);
|
---|
203 |
|
---|
204 | TLegend* leg1 = new TLegend(.2,.2,.4,.5);
|
---|
205 | TLegend* leg2 = new TLegend(.44,.2,.88,.5);
|
---|
206 | leg1->SetEntrySeparation(0.1);
|
---|
207 | leg1->SetHeader("");
|
---|
208 | leg2->SetEntrySeparation(0.1);
|
---|
209 | leg2->SetHeader("");
|
---|
210 |
|
---|
211 | myC->cd(1);
|
---|
212 | grnullM.SetTitle("Average pedestal mean for inner pixels");
|
---|
213 | grnullM.DrawClone("AP");
|
---|
214 | for(UInt_t i=0;i<nslices;i++)
|
---|
215 | {
|
---|
216 | grmeanIn[i].DrawClone("P");
|
---|
217 | char leglab[100];
|
---|
218 | sprintf(leglab,"%d slices",(i+1)*step);
|
---|
219 | if(i<nslices/2)
|
---|
220 | leg1->AddEntry(&grmeanIn[i],leglab,"p");
|
---|
221 | else
|
---|
222 | leg2->AddEntry(&grmeanIn[i],leglab,"p");
|
---|
223 | }
|
---|
224 | leg1->SetFillColor(0);
|
---|
225 | leg1->SetLineColor(0);
|
---|
226 | leg1->SetBorderSize(0);
|
---|
227 | leg1->Draw();
|
---|
228 | leg2->SetFillColor(0);
|
---|
229 | leg2->SetLineColor(0);
|
---|
230 | leg2->SetBorderSize(0);
|
---|
231 | leg2->Draw();
|
---|
232 |
|
---|
233 | myC->cd(2);
|
---|
234 | grnullR.SetTitle("Average pedestal rms for inner pixels");
|
---|
235 | grnullR.DrawClone("AP");
|
---|
236 | for(UInt_t i=0;i<nslices;i++)
|
---|
237 | grrmsIn[i].DrawClone("P");
|
---|
238 |
|
---|
239 | myC->cd(3);
|
---|
240 | grnullM.SetTitle("Average pedestal mean for outer pixels");
|
---|
241 | grnullM.DrawClone("AP");
|
---|
242 | for(UInt_t i=0;i<nslices;i++)
|
---|
243 | grmeanOut[i].DrawClone("P");
|
---|
244 |
|
---|
245 | myC->cd(4);
|
---|
246 | grnullR.SetTitle("Average pedestal rms for outer pixels");
|
---|
247 | grnullR.DrawClone("AP");
|
---|
248 | for(UInt_t i=0;i<nslices;i++)
|
---|
249 | grrmsOut[i].DrawClone("P");
|
---|
250 |
|
---|
251 | myC->Print("pedestaSliceDependence.ps");
|
---|
252 |
|
---|
253 | }
|
---|