1 | const int no_samples=6;
|
---|
2 |
|
---|
3 |
|
---|
4 | void calculate_of_weights(TH1F *shape, TString noise_file = "/mnt/home/pcmagic17/hbartko/mars/results/04sep12/noise_autocorr_AB_36038.root", Int_t t_offset = -10)
|
---|
5 | {
|
---|
6 |
|
---|
7 |
|
---|
8 | TH1F * derivative = new TH1F("derivative","derivative",161,-1.05,15.05);
|
---|
9 |
|
---|
10 |
|
---|
11 | for (int i = 1; i<162;i++){
|
---|
12 | derivative->SetBinContent(i,((shape->GetBinContent(i+1)-shape->GetBinContent(i-1))/0.2));
|
---|
13 | derivative->SetBinError(i,(sqrt(shape->GetBinError(i+1)*shape->GetBinError(i+1)+shape->GetBinError(i-1)*shape->GetBinError(i-1))/0.2));
|
---|
14 | }
|
---|
15 |
|
---|
16 | // normalize the shape, such that the integral for 6 slices is one!
|
---|
17 |
|
---|
18 | float sum = 0;
|
---|
19 | for (int i=40; i<101; i++){sum+=shape->GetBinContent(i);}
|
---|
20 | sum /= 10;
|
---|
21 |
|
---|
22 | shape->Scale(1./sum);
|
---|
23 | derivative->Scale(1./sum);
|
---|
24 |
|
---|
25 |
|
---|
26 | TCanvas * c1 = new TCanvas("c1","c1",600,400);
|
---|
27 | //c1= canvas();
|
---|
28 | shape->Draw();
|
---|
29 |
|
---|
30 | TCanvas *c2 = new TCanvas("c2","c2",600,400);
|
---|
31 | //c2=canvas();
|
---|
32 | derivative->Draw();
|
---|
33 |
|
---|
34 |
|
---|
35 | // book the histograms for the weights
|
---|
36 |
|
---|
37 | TH1F * hw_amp = new TH1F("hw_amp","hw_amp",no_samples*10,-0.5,no_samples-0.5);
|
---|
38 | TH1F * hw_time = new TH1F("hw_time","hw_time",no_samples*10,-0.5,no_samples-0.5);
|
---|
39 | TH1F * hshape = new TH1F("hshape","hshape",no_samples*10,-0.5,no_samples-0.5);
|
---|
40 | TH1F * hderivative = new TH1F("hderivative","hderivative",no_samples*10,-0.5,no_samples-0.5);
|
---|
41 |
|
---|
42 |
|
---|
43 | // read in the noise auto-correlation function:
|
---|
44 |
|
---|
45 | TMatrix B(no_samples,no_samples);
|
---|
46 |
|
---|
47 | f = new TFile(noise_file);
|
---|
48 | TH2F * noise_corr = (TH2F*)c_corr->FindObject("hcorr");
|
---|
49 | for (int i=0; i<no_samples; i++){
|
---|
50 | for (int j=0; j<no_samples; j++){
|
---|
51 | B[i][j]=noise_corr->GetBinContent(i+1,j+1);
|
---|
52 | }
|
---|
53 | }
|
---|
54 | f->Close();
|
---|
55 |
|
---|
56 | B.Invert();
|
---|
57 |
|
---|
58 | // now the loop over t_{rel} in [-0.4;0.6[ :
|
---|
59 |
|
---|
60 | for (int i=-4; i<6; i++){
|
---|
61 |
|
---|
62 |
|
---|
63 | TMatrix g(no_samples,1);
|
---|
64 | TMatrix gT(1,no_samples);
|
---|
65 | TMatrix d(no_samples,1);
|
---|
66 | TMatrix dT(1,no_samples);
|
---|
67 |
|
---|
68 |
|
---|
69 | for (int count=0; count < no_samples; count++){
|
---|
70 |
|
---|
71 | g[count][0]=shape->GetBinContent(55+t_offset-int((10*no_samples-50)/2.)+10*count+i);
|
---|
72 | gT[0][count]=shape->GetBinContent(55+t_offset-int((10*no_samples-50)/2.)+10*count+i);
|
---|
73 | d[count][0]=derivative->GetBinContent(55+t_offset-int((10*no_samples-50)/2.)+10*count+i);
|
---|
74 | dT[0][count]=derivative->GetBinContent(55+t_offset-int((10*no_samples-50)/2.)+10*count+i);
|
---|
75 |
|
---|
76 | hshape->SetBinContent(i+5+10*count,shape->GetBinContent(55+t_offset-int((10*no_samples-50)/2.)+10*count+i));
|
---|
77 | hderivative->SetBinContent(i+5+10*count,derivative->GetBinContent(55+t_offset-int((10*no_samples-50)/2.)+10*count+i));
|
---|
78 | }
|
---|
79 |
|
---|
80 |
|
---|
81 | TMatrix m_denom = (gT*(B*g))*(dT*(B*d)) - (dT*(B*g))*(dT*(B*g));
|
---|
82 | float denom = m_denom[0][0]; // m_denom is a real number
|
---|
83 |
|
---|
84 | TMatrix m_first = dT*(B*d); // m_first is a real number
|
---|
85 | float first = m_first[0][0]/denom;
|
---|
86 |
|
---|
87 | TMatrix m_last = gT*(B*d); // m_last is a real number
|
---|
88 | float last = m_last[0][0]/denom;
|
---|
89 |
|
---|
90 | TMatrix m1 = gT*B;
|
---|
91 |
|
---|
92 | m1 *=first;
|
---|
93 |
|
---|
94 | TMatrix m2 = dT*B;
|
---|
95 |
|
---|
96 | m2 *=last;
|
---|
97 |
|
---|
98 | TMatrix w_amp= m1 - m2;
|
---|
99 |
|
---|
100 |
|
---|
101 | TMatrix m_first1 = gT*(B*g);
|
---|
102 | float first1 = m_first1[0][0]/denom;
|
---|
103 |
|
---|
104 | TMatrix m_last1 = gT*(B*d);
|
---|
105 | float last1 = m_last1[0][0]/denom;
|
---|
106 |
|
---|
107 | TMatrix m11 = dT*B;
|
---|
108 |
|
---|
109 | m11 *=first1;
|
---|
110 |
|
---|
111 | TMatrix m21 = gT*B;
|
---|
112 |
|
---|
113 | m21 *=last1;
|
---|
114 |
|
---|
115 |
|
---|
116 | TMatrix w_time= m11 - m21;
|
---|
117 |
|
---|
118 |
|
---|
119 | float amp = 0;
|
---|
120 | float amp_time = 0;
|
---|
121 |
|
---|
122 | for (int count=0; count < no_samples; count++){
|
---|
123 | hw_amp->SetBinContent(i+5+10*count,w_amp[0][count]);
|
---|
124 | hw_time->SetBinContent(i+5+10*count,w_time[0][count]);
|
---|
125 | }
|
---|
126 |
|
---|
127 |
|
---|
128 |
|
---|
129 | TMatrix m_delta_E = dT*(B*d); // m_last is a real number
|
---|
130 | float delta_E = m_delta_E[0][0]/denom;
|
---|
131 |
|
---|
132 |
|
---|
133 | TMatrix m_delta_Et = gT*(B*g); // m_last is a real number
|
---|
134 | float delta_Et = m_delta_Et[0][0]/denom;
|
---|
135 |
|
---|
136 | cout << " i " << i << " delta E " << sqrt(delta_E) << " delta Et " << sqrt(delta_Et) << endl;
|
---|
137 |
|
---|
138 |
|
---|
139 | } // end loop over t_rel
|
---|
140 |
|
---|
141 |
|
---|
142 | TCanvas * c3 = new TCanvas("c3","c3",600,400);
|
---|
143 | hw_amp->Draw();
|
---|
144 |
|
---|
145 | TCanvas * c4 = new TCanvas("c4","c4",600,400);
|
---|
146 | hw_time->Draw();
|
---|
147 |
|
---|
148 | TCanvas * c5 = new TCanvas("c5","c5",600,400);
|
---|
149 | hshape->Draw();
|
---|
150 |
|
---|
151 | TCanvas * c6 = new TCanvas("c6","c6",600,400);
|
---|
152 | hderivative->Draw();
|
---|
153 |
|
---|
154 | /*
|
---|
155 | f_out = new TFile("/home/pcmagic17/hbartko/mars/results/04sep15/calibration_weights_corr_iterated.root","RECREATE"); //"../of_weights_bin4.root"
|
---|
156 | hw_amp->Write();
|
---|
157 | hw_time->Write();
|
---|
158 | hshape->Write();
|
---|
159 | hderivative->Write();
|
---|
160 | shape->Write();
|
---|
161 | derivative->Write();
|
---|
162 | f_out->Close();
|
---|
163 | */
|
---|
164 | }
|
---|