17 {
18
19 gROOT->Reset();
20
21
22 TFile*
f1 =
new TFile(
"YYYY/m_root_dir/LumTau_XXXX.root" );
24 f1->GetObject(
"event",
data );
25
27 {
28
29 TCanvas* myCanvas = new TCanvas();
30 myCanvas->Divide( 1, 1 );
31 TPad* c1_1 = new TPad( "c1_1", "c1_1", 0.01, 0.01, 0.99, 0.99 );
32 c1_1->Draw();
33 c1_1->cd();
34 c1_1->Range( 0.425458, -114.842, 0.674993, 802.951 );
35 c1_1->SetBorderSize( 2 );
36 c1_1->SetBottomMargin( 0.125129 );
37 c1_1->SetFrameFillColor( 0 );
38 }
39
40
41 Bool_t topup = false, is_topup = false;
42 Int_t run = 0;
46
47 data->SetBranchAddress(
"topup", &topup );
48 data->SetBranchAddress(
"run", &run );
49 data->SetBranchAddress(
"time", &
time );
50 data->SetBranchAddress(
"etsT1", &etsT1 );
54 data->SetBranchAddress(
"e1", &
e1 );
55 data->SetBranchAddress(
"e2", &
e2 );
56 data->SetBranchAddress(
"etot", &
etot );
57 data->SetBranchAddress(
"phi1", &
phi1 );
58 data->SetBranchAddress(
"phi2", &
phi2 );
59
61
62 Int_t runno = 0;
64 Int_t init_time = 1234567890;
65 Int_t n_first = 0;
66 do {
67 data->GetEntry( n_first );
68
69 n_first += 1;
71 runno = run;
73 cout << "E_cms = " << E_cms << endl;
74 is_topup = topup;
76
77
78 Int_t tot_time = 0;
79 if ( run >= 63075 )
80 tot_time =
data->GetMaximum(
"etsT1" );
83 else
84 {
86
87
88 do {
89 data->GetEntry( n_last );
90 n_last -= 1;
94 {
95 cout << "\n the time of the event is wrong!";
97 return;
98 }
100 }
101
102 Double_t dlt = 0.0, mean = 0.0, width = 0.0;
103 Double_t luminitial = 0.;
104 Double_t tau = 5000.;
105
108 {
109 cout << "\nThe runtime is abnormal!!!" << endl;
110 cout <<
"It's value is " <<
difft << endl;
111 cout << "Please check it carefully!" << endl;
112 return;
113 }
114
115
116 TCanvas* c2 = new TCanvas( "c2", " ", 700, 500 );
117 c2->SetFillColor( kWhite );
118 c2->SetGrid();
119
121 {
122 cout << "\nRuntime less than 300 " << endl;
123 cout << "Using default tau value " << tau << endl;
124 }
125 else if ( is_topup )
126 {
127 cout << "\n topup mode." << endl;
128 luminitial = 2000;
129 tau = 99999999;
130 }
131 else
132 {
133
134 TH1F* dltphi1 = new TH1F( "dltphi1", "dltphi", 150, -30, 30 );
135 for ( Int_t i = 0; i <
nentries; i++ )
136 {
138 bool cut = (
e1 / E_cms ) > 0.417 && (
e1 / E_cms ) < 0.55 && (
e2 / E_cms ) > 0.417 &&
142 }
143
144
145 TF1* h1 = new TF1( "h1", "gaus", -6, 4 );
146 dltphi1->Fit( h1, "R+" );
147 dlt = h1->GetParameter( 1 );
148
149
150 TF1* h2 = new TF1( "h2", "gaus", 4, 30 );
151 dltphi1->Fit( h2, "R+" );
152 mean = h2->GetParameter( 1 );
153 Double_t sigma = h2->GetParameter( 2 );
154 width = 3 * sigma;
155
156 const Int_t nbin = 10;
157 if ( dlt < -6 || dlt > 4 || mean < 4 || mean > 30 || ( mean - dlt ) - 0.5 * width < 0 )
158 cout << "\nSomething wrong with cut Bhabha entries. " << endl;
159 else
160 {
161
162 Double_t
xtime[nbin + 1],
lum[nbin];
163 for ( Int_t i = 0; i < nbin + 1; i++ ) {
xtime[i] =
timemin + (
difft / 10. ) * i; }
164
165
167 for ( Int_t i = 0; i < nbin; i++ )
168 {
hdltphi[i] =
new TH1D(
"",
"dltphi distribution", 50, -50., 50. ); }
169 TH1D*
htime =
new TH1D(
"htime",
"time", 80, -10., 10. );
170
171 for ( Int_t i = 0; i < nbin; i++ )
172 {
173 for ( Int_t j = 0; j <
nentries; j++ )
174 {
176 bool lumcut = (
e1 / E_cms ) > 0.417 && (
e2 / E_cms ) > 0.417 &&
178 fabs(
dltphi - dlt ) > ( mean - dlt ) - width &&
179 fabs(
dltphi - dlt ) < ( mean - dlt ) + width &&
etot < E_cms + 0.5;
182 }
183 }
184
185
187 Double_t x[nbin];
188 for ( Int_t i = 0; i < nbin; i++ )
189 {
193 }
194
195 Int_t imin = 0;
196 for ( Int_t i = 0; i < nbin - 1 &&
lum[i] <
lum[i + 1]; i++ ) { imin = i + 1; }
197 Double_t lummax =
lum[imin];
198 Double_t xmin = x[imin];
199 Double_t lumsum;
200 for ( Int_t i = imin; i < nbin; i++ ) { lumsum +=
lum[i]; }
201 Double_t lumsum2 = lumsum * lumsum;
202
203 TF1*
g1 =
new TF1(
"g1",
"[0]*exp(-x/[1])", xmin, 10000. );
204 g1->SetParameters( lummax, 1.e+4 );
205 g1->SetLineColor( 2 );
206 TGraph*
gr =
new TGraph( nbin, x,
lum );
207 gr->SetLineColor( 2 );
208 gr->SetLineWidth( 2 );
209 gr->SetMarkerColor( 4 );
210 gr->SetMarkerStyle( 21 );
211 gr->SetTitle(
"BbLum" );
212 gr->GetXaxis()->SetTitle(
"Time" );
213 gr->GetYaxis()->SetTitle(
"Luminosity" );
214 gr->Fit(
"g1",
"R" );
216
217
218 luminitial =
g1->GetParameter( 0 );
219 tau =
g1->GetParameter( 1 );
220 }
221 }
222
223 if ( !is_topup && tau > 99999. )
224 {
225 cout << "\nThe result of fit is terrible. " << endl << endl;
226 cout << "set the tau value = 99999" << endl;
227 tau = 99999;
228 }
229
230
232 m_outputFile.open(
"YYYY/m_txt_dir/LumTau_XXXX.txt", ios_base::app );
234 <<
" " << ( luminitial *
exp( -1.0 *
difft / ( tau ) ) )
235 << " " << tau << endl;
237
239 {
240
241 TString result = Form( "tau = %6.2f", tau );
242 TText* text01 = new TText( 0.7, 0.8, result );
243 text01->SetNDC();
244 text01->Draw( "same" );
245 c2->Update();
246 c2->GetFrame()->SetFillColor( kWhite );
247 c2->GetFrame()->SetBorderSize( 1 );
248 c2->Modified();
249 c2->Print( "lum_0000XXXX.ps" );
250 }
251
253 {
254
255 cout << "E_cms = " << E_cms << endl;
256 cout <<
"\nruntime = " <<
difft << endl;
257 cout << "\ndlt = " << dlt << endl;
258 cout << "mean = " << mean << endl;
259 cout << "width = " << width << endl;
260 cout << "\ntau = " << tau << endl << endl;
261 }
262}
std::ofstream m_outputFile
EvtComplex exp(const EvtComplex &c)
*********Class see also m_nmax DOUBLE PRECISION m_MasPhot DOUBLE PRECISION m_phsu DOUBLE PRECISION m_Xenph DOUBLE PRECISION m_r2 DOUBLE PRECISION m_WtMass INTEGER m_nmax INTEGER m_Nevgen INTEGER m_IsFSR INTEGER m_MarTot *COMMON c_KarFin $ !Output file $ !Event serial number $ !alpha QED at Thomson limit $ !minimum energy at CMS for remooval $ !infrared cut
Double_t BeamEnergyOnline(Int_t)