BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
Emc2DCrystal.cxx
Go to the documentation of this file.
1#include "TMath.h"
2#include "math.h"
3#include <TColor.h>
4#include <TString.h>
5#include <iostream>
6
7#include "BesVisLib/BesCursor.h"
8#include "BesVisLib/BesView.h"
9#include "BesVisLib/Emc2DCrystal.h"
10
11using namespace std;
12
13#ifndef __CINT__
15#endif
16
17 //_____________________________________________________
18
20}
21
22//_____________________________________________________
23
24Emc2DCrystal::Emc2DCrystal( const char* name, const char* title, Int_t N, Double_t* P,
25 Int_t part, Int_t theta ) {
26 SetName( name );
27 SetTitle( title );
28 fTip = 0;
29 fHighlighted = false;
30 fFired = false;
31 fPart = part;
32 fTheta = theta;
33
34 fTime = 0.0;
35 fCharge = 0.0;
36
37 fZRSectionTolerance[1] = 0.1; // degree
38 fZRSectionTolerance[2] = fZRSectionTolerance[0] = 1.2; // degree
39
40 // ------XY------
41
42 Double_t Pxy[3 * 5]; // 4 side and 5 side shape in Emc End crystal
43 if ( N == 8 )
44 { // 4 side
45 Int_t iXYSeq[4] = { 0, 2, 6, 4 };
46 for ( Int_t i = 0; i < 4; i++ )
47 {
48 if ( part == 1 )
49 {
50 for ( Int_t j = 0; j < 3; j++ )
51 { Pxy[3 * i + j] = ( P[3 * iXYSeq[i] + j] + P[3 * ( iXYSeq[i] + 1 ) + j] ) / 2.0; }
52 }
53 else if ( part == 0 )
54 {
55 SetXYPoint( &P[3 * i], &P[3 * ( i + 4 )], &Pxy[3 * i], ecXYPointZ );
56 // for (Int_t j = 0; j < 3; j++) Pxy[3*i+j] = P[3*i+j];
57 }
58 else if ( part == 2 )
59 {
60 SetXYPoint( &P[3 * i], &P[3 * ( i + 4 )], &Pxy[3 * i], -ecXYPointZ );
61 // for (Int_t j = 0; j < 3; j++) Pxy[3*i+j] = P[3*i+j];
62 }
63 // cout << GetName() << endl;
64 // if (GetName() == TString("EastEcTheta5Phi0")) cout << Pxy[3*i] << " " << Pxy[3*i+1] <<
65 // " " << Pxy[3*i+2] << endl;
66 }
67
68 fCrystalXY = new BesPolygon2D( name, title, 4, &Pxy[0] );
69 fCrystalXYFired = new BesPolygon2D( name, title, 4, &Pxy[0] );
70 }
71 if ( N == 16 )
72 { // 5 side
73 Int_t iXYSeq[5] = { 8, 9, 1, 2, 3 }; // 9 10,1 2
74 for ( Int_t i = 0; i < 5; i++ )
75 { // 8 11,0 3
76 if ( part == 0 )
77 { SetXYPoint( &P[3 * iXYSeq[i]], &P[3 * ( iXYSeq[i] + 4 )], &Pxy[3 * i], ecXYPointZ ); }
78 else if ( part == 2 )
79 { SetXYPoint( &P[3 * iXYSeq[i]], &P[3 * ( iXYSeq[i] + 4 )], &Pxy[3 * i], -ecXYPointZ ); }
80 // for (Int_t j = 0; j < 3; j++) Pxy[3*i+j] = P[3*iXYSeq[i]+j];
81 }
82
83 fCrystalXY = new BesPolygon2D( name, title, 5, &Pxy[0] );
84 fCrystalXYFired = new BesPolygon2D( name, title, 5, &Pxy[0] );
85 }
86
87 // ------ZR------
88
89 Double_t Pzr[3 * 4];
90 Int_t iSeq[8] = { 0, 3, 1, 2, 5, 6, 4, 7 }; // center of 0+3, 1+2, 5+6, 4+7
91 for ( Int_t i = 0; i < 4; i++ )
92 {
93 for ( Int_t j = 0; j < 3; j++ )
94 { Pzr[3 * i + j] = ( P[3 * iSeq[2 * i] + j] + P[3 * iSeq[2 * i + 1] + j] ) / 2.0; }
95 // if (GetName() == TString("EastEcCrystal0")) cout << Pxy[i] << endl;
96 }
97
98 fCrystalZR = new BesPolygon2D( TString( name ) + TString( "zr" ), title, 4, &Pzr[0] );
99 fCrystalZRFired = new BesPolygon2D( TString( name ) + TString( "zr" ), title, 4, &Pzr[0] );
100
101 if ( N == 8 )
102 {
103 if ( GetPart() == 1 )
104 {
105 fPhiMin = GetAngle( P[3 * 0], P[3 * 0 + 1] );
106 fPhiMax = GetAngle( P[3 * 3], P[3 * 3 + 1] );
107 }
108 else
109 {
110 fPhiMin = GetAngle( P[3 * 3], P[3 * 3 + 1] );
111 fPhiMax = GetAngle( P[3 * 0], P[3 * 0 + 1] );
112 }
113 }
114 else if ( N == 16 )
115 {
116 fPhiMin = GetAngle( P[3 * 3], P[3 * 3 + 1] );
117 fPhiMax = GetAngle( P[3 * 8], P[3 * 8 + 1] );
118 }
119
120 // Long Peixun's update: Remove fabs()
121 if ( fPhiMin > fPhiMax && fPhiMin - fPhiMax < 180.0 )
122 { // not cross 0 degree
123 Double_t phiTemp = fPhiMin;
124 fPhiMin = fPhiMax;
125 fPhiMax = phiTemp;
126 }
127 // Long Peixun's update: Consider crossing 0 degree
128 if ( fPhiMax > fPhiMin && fPhiMax - fPhiMin > 180.0 )
129 {
130 Double_t phiTemp = fPhiMin;
131 fPhiMin = fPhiMax;
132 fPhiMax = phiTemp;
133 }
134 // cout << GetName() << " min "<< fPhiMin << " max " << fPhiMax << endl;
135
136 // ------Side------
137
138 Double_t Pside[3 * 5]; // 4 side and 5 side shape in Emc End crystal
139 if ( N == 8 )
140 { // 4 side
141 // Int_t iSideSeq[4] = {0,1,2,3};
142 for ( Int_t i = 0; i < 4; i++ )
143 {
144 if ( part == 1 )
145 { SetZRPoint( &P[3 * i], &P[3 * ( i + 4 )], &Pside[3 * i], brZRPointR ); }
146 else { ProjectECToSide( &Pxy[3 * i], &Pside[3 * i] ); }
147 }
148
149 fCrystalSide = new BesPolygon2D( name, title, 4, &Pside[0] );
150 fCrystalSideFired = new BesPolygon2D( name, title, 4, &Pside[0] );
151 }
152 if ( N == 16 )
153 { // 5 side
154 for ( Int_t i = 0; i < 5; i++ ) { ProjectECToSide( &Pxy[3 * i], &Pside[3 * i] ); }
155
156 fCrystalSide = new BesPolygon2D( name, title, 5, &Pside[0] );
157 fCrystalSideFired = new BesPolygon2D( name, title, 5, &Pside[0] );
158 }
159
160 // Init
161
162 SetStyle();
163
164 fTip = new BesPaveText( 0, 0, 0.45, 0.08 );
165 CloseInfo();
166}
167
168//_____________________________________________________
169
171 // Long Peixun's update: remove "if"
172 delete fCrystalXY;
173 delete fCrystalZR;
174 delete fCrystalXYFired;
175 delete fCrystalZRFired;
176}
177
179 lcCrystal = 15;
180 lwCrystal = 1;
181 fcCrystal = 9005; // lightBlue
182 fsCrystal = 1001;
183 fsCrystalTrans = 4000;
184
185 lcCrystalFired = kRed;
186 lwCrystalFired = 1;
187 fcCrystalFired = kRed;
188 fsCrystalFired = 1001;
189
190 lcCrystalHL = lcCrystal;
191 lwCrystalHL = 1;
192 fcCrystalHL = kBlue;
193 fsCrystalHL = 1001;
194
195 lcCrystalFiredHL = kRed;
196 lwCrystalFiredHL = 2;
197 fcCrystalFiredHL = kWhite;
198 fsCrystalFiredHL = 4000;
199}
200
202 fInfoCon.clear();
203 fTip->DeleteText();
204}
205
207 if ( fTip )
208 {
209 fTip->Clear();
210
211 if ( fInfoCon.size() == 0 ) fInfoCon.push_back( GetTitle() );
212 fTip->SetText( fInfoCon );
213 }
214 else cout << "Emc2DCrystal::CloseInfo, not initialized" << endl;
215}
216
217//_____________________________________________________
218
219Int_t Emc2DCrystal::DistancetoPrimitive( Int_t px, Int_t py ) {
220
221 BesView* view = dynamic_cast<BesView*>( gPad->GetView() );
222 if ( view->GetViewType() & kXYView )
223 {
224 if ( fCrystalXY && IsXYVisible() ) { return fCrystalXY->DistancetoPrimitive( px, py ); }
225 }
226 else if ( view->GetViewType() & kZRView && fCrystalZR && fCrystalSide )
227 {
228 if ( HasZRSection() ) return fCrystalZR->DistancetoPrimitive( px, py );
229 else if ( IsSideVisible() &&
230 ( view->GetVisEmcSide() || ( view->GetVisEmcHitsSide() && IsFired() ) ) )
231 return fCrystalSide->DistancetoPrimitive( px, py );
232 }
233
234 return 9999;
235}
236
237//_____________________________________________________
238
239void Emc2DCrystal::ExecuteEvent( Int_t event, Int_t px, Int_t py ) {
240
241 // if (fWireType == 2 && fWireBubble[0] ) {
242 // if (fWireCone->GetLineWidth() > 1) // FIRED
243 // cout << GetName() << endl;
244
245 BesView* view = dynamic_cast<BesView*>( gPad->GetView() );
246
247 if ( gBesCursor->GetType() == kBesHand )
248 {
249 if ( view ) view->ExecuteEvent( event, px, py );
250 }
251 else if ( gBesCursor->GetType() == kBesPick )
252 {
253
254 if ( gPad ) gPad->SetCursor( kPointer );
255
256 switch ( event )
257 {
258
259 case kMouseEnter:
260 this->SetHighlighted( true );
261
262 // if (this->IsFired() || view->GetVisEmcHitsGlobal()) {
263 Draw();
264
265 fTip->SetPos( px, py );
266 view->UpdateView( 0 );
267
268 // Long Peixun's update: If ShowInfo is not checked, don't show tip text.
269 if ( gBesCursor->GetShowInfo() ) fTip->Draw( "BR,SAME" ); // "BR,ARC,SAME"
270 gPad->Modified();
271 gPad->Update();
272 break;
273
274 case kMouseLeave:
275 if ( this->IsHighlighted() )
276 {
277 this->SetHighlighted( false );
278 // if (view->GetVisEmcHitsGlobal())
279 Draw();
280
281 /*
282 if (fTip) {
283 delete fTip;
284 fTip = 0;
285 }
286 */
287
288 view->UpdateView( 0 );
289 gPad->Modified();
290 gPad->Update();
291 break;
292 }
293 }
294 }
295}
296
297//_____________________________________________________
298
299void Emc2DCrystal::Draw( Option_t* option ) {
300 //
301 // Emc2DCrystal draw function
302 TString opt = option;
303 opt.ToUpper();
304
305 AppendPad( option );
306}
307
308//_____________________________________________________
309
310void Emc2DCrystal::Paint( Option_t* option ) {
311
312 TString opt = option;
313 opt.ToUpper();
314
315 BesView* view = dynamic_cast<BesView*>( gPad->GetView() );
316 if ( view->GetViewType() & kXYView )
317 {
318
319 if ( fCrystalXY )
320 {
321 fCrystalXY->SetLineColor( lcCrystal );
322 fCrystalXY->SetLineWidth( lwCrystal );
323 fCrystalXY->SetFillColor( fcCrystal );
324 fCrystalXY->SetFillStyle( fsCrystal );
325 }
326
327 if ( this->IsFired() )
328 {
329 if ( fCrystalXY ) { fCrystalXY->SetFillStyle( fsCrystalTrans ); }
330 if ( fCrystalXYFired )
331 {
332 fCrystalXYFired->SetLineColor( lcCrystalFired );
333 fCrystalXYFired->SetLineWidth( lwCrystalFired );
334 fCrystalXYFired->SetFillColor( fcCrystalFired );
335 fCrystalXYFired->SetFillStyle( fsCrystalFired );
336 }
337 }
338
339 if ( this->IsHighlighted() )
340 {
341 if ( fCrystalXY )
342 {
343 fCrystalXY->SetLineColor( lcCrystalHL );
344 fCrystalXY->SetLineWidth( lwCrystalHL );
345 fCrystalXY->SetFillColor( fcCrystalHL );
346 fCrystalXY->SetFillStyle( fsCrystalHL );
347 }
348 if ( fCrystalXYFired )
349 {
350 fCrystalXYFired->SetLineColor( lcCrystalFiredHL );
351 fCrystalXYFired->SetLineWidth( lwCrystalFiredHL );
352 fCrystalXYFired->SetFillColor( fcCrystalFiredHL );
353 fCrystalXYFired->SetFillStyle( fsCrystalFiredHL );
354 }
355 }
356
357 if ( fCrystalXY && IsXYVisible() ) fCrystalXY->Paint();
358 if ( this->IsFired() )
359 {
360 if ( view->GetVisEmcHitsGlobal() && ( ( fPart == 0 && view->GetVisEmcHitsEast() ) ||
361 ( fPart == 1 && view->GetVisEmcHitsBarrel() ) ||
362 ( fPart == 2 && view->GetVisEmcHitsWest() ) ) )
363 {
364 if ( fCrystalXYFired )
365 {
366 fCrystalXY->Paint();
367 // if (this->IsHighlighted()) cout << GetName() << " is highlighted " << endl;
368 // cout << "Emc fired Crystal size " << fCharge/fChargeMax << endl;
369 fCrystalXYFired->Restore(); // restore default size
370 fCrystalXYFired->SetSize( fCharge / fChargeMax );
371 fCrystalXYFired->Paint();
372 }
373 }
374 }
375 }
376
377 if ( view->GetViewType() & kZRView )
378 {
379 if ( HasZRSection() )
380 {
381 if ( this->IsFired() )
382 {
383 if ( fCrystalZRFired )
384 {
385 fCrystalZRFired->SetLineColor( lcCrystalFired );
386 fCrystalZRFired->SetLineWidth( lwCrystalFired );
387 fCrystalZRFired->SetFillColor( fcCrystalFired );
388 fCrystalZRFired->SetFillStyle( fsCrystalFired );
389 }
390 }
391
392 if ( fCrystalZR )
393 {
394 fCrystalZR->SetLineColor( lcCrystal );
395 fCrystalZR->SetLineWidth( lwCrystal );
396 fCrystalZR->SetFillColor( fcCrystal );
397 fCrystalZR->SetFillStyle( fsCrystal );
398 }
399
400 if ( this->IsHighlighted() )
401 {
402 if ( fCrystalZR )
403 {
404 fCrystalZR->SetLineColor( lcCrystalHL );
405 fCrystalZR->SetLineWidth( lwCrystalHL );
406 fCrystalZR->SetFillColor( fcCrystalHL );
407 fCrystalZR->SetFillStyle( fsCrystalHL );
408 }
409 if ( fCrystalZRFired )
410 {
411 fCrystalZRFired->SetLineColor( lcCrystalFiredHL );
412 fCrystalZRFired->SetLineWidth( lwCrystalFiredHL );
413 fCrystalZRFired->SetFillColor( fcCrystalFiredHL );
414 fCrystalZRFired->SetFillStyle( fsCrystalFiredHL );
415 }
416 }
417
418 if ( fCrystalZR ) fCrystalZR->Paint();
419 if ( this->IsFired() )
420 {
421 if ( view->GetVisEmcHitsGlobal() && ( ( fPart == 0 && view->GetVisEmcHitsEast() ) ||
422 ( fPart == 1 && view->GetVisEmcHitsBarrel() ) ||
423 ( fPart == 2 && view->GetVisEmcHitsWest() ) ) )
424 {
425 if ( fCrystalZRFired )
426 {
427 // cout << "Emc fired Crystal size " << fCharge/fChargeMax << endl;
428 fCrystalZRFired->Restore(); // restore default size
429 fCrystalZRFired->SetSize( fCharge / fChargeMax );
430 fCrystalZRFired->Paint();
431 }
432 }
433 }
434 }
435
436 // side
437 if ( this->IsFired() )
438 {
439 if ( fCrystalSideFired )
440 {
441 fCrystalSideFired->SetLineColor( lcCrystalFired );
442 fCrystalSideFired->SetLineWidth( lwCrystalFired );
443 fCrystalSideFired->SetFillColor( fcCrystalFired );
444 fCrystalSideFired->SetFillStyle( fsCrystalFired );
445 }
446 }
447
448 if ( fCrystalSide )
449 {
450 fCrystalSide->SetLineColor( lcCrystal );
451 fCrystalSide->SetLineWidth( lwCrystal );
452 fCrystalSide->SetFillColor( fcCrystal );
453 fCrystalSide->SetFillStyle( fsCrystal );
454 }
455
456 if ( this->IsHighlighted() )
457 {
458 if ( fCrystalSide )
459 {
460 fCrystalSide->SetLineColor( lcCrystalHL );
461 fCrystalSide->SetLineWidth( lwCrystalHL );
462 fCrystalSide->SetFillColor( fcCrystalHL );
463 fCrystalSide->SetFillStyle( fsCrystalHL );
464 }
465 if ( fCrystalSideFired )
466 {
467 fCrystalSideFired->SetLineColor( lcCrystalFiredHL );
468 fCrystalSideFired->SetLineWidth( lwCrystalFiredHL );
469 fCrystalSideFired->SetFillColor( fcCrystalFiredHL );
470 fCrystalSideFired->SetFillStyle( fsCrystalFiredHL );
471 }
472 }
473
474 if ( IsSideVisible() )
475 {
476 if ( ( view->GetVisEmcSide() || view->GetVisEmcHitsSide() && this->IsFired() ) &&
477 fCrystalSide )
478 fCrystalSide->Paint();
479 if ( this->IsFired() )
480 {
481 if ( view->GetVisEmcHitsGlobal() && view->GetVisEmcHitsSide() )
482 {
483 if ( fCrystalSideFired )
484 {
485 // cout << "Emc fired Crystal size " << fCharge/fChargeMax << endl;
486 fCrystalSideFired->Restore(); // restore default size
487 fCrystalSideFired->SetSize( fCharge / fChargeMax );
488 fCrystalSideFired->Paint();
489 }
490 }
491 }
492 }
493 }
494}
495
496//_____________________________________________________
497
498char* Emc2DCrystal::GetObjectInfo( Int_t px, Int_t py ) const {
499
500 BesView* view = dynamic_cast<BesView*>( gPad->GetView() );
501 if ( view ) return view->GetObjectInfo( px, py );
502 else return TObject::GetObjectInfo( px, py );
503}
504
505//_____________________________________________________
506
508 bool flag = false;
509 BesView* view = dynamic_cast<BesView*>( gPad->GetView() );
510 Double_t viewPhi = view->GetLongitude();
511 viewPhi = Range360( viewPhi );
512 // if (GetName() == TString("Layer0Wire0")) cout << "view " << viewPhi << endl;
513
514 Double_t zrPhi = viewPhi - 90.0;
515 zrPhi = Range360( zrPhi );
516 // if (GetName() == TString("Layer0Wire0")) cout << zrPhi << endl;
517
518 for ( Int_t i = 0; i < 2; i++ )
519 {
520 if ( i == 1 )
521 {
522 zrPhi += 180.0;
523 zrPhi = Range360( zrPhi );
524 }
525
526 if ( zrPhi >= fPhiMin - fZRSectionTolerance[GetPart()] &&
527 zrPhi <= fPhiMax + fZRSectionTolerance[GetPart()] )
528 {
529 flag = true;
530 break;
531 }
532 else if ( fPhiMin > fPhiMax )
533 { // cross 0 degree
534 // cout << GetName() << " zrPhi " << zrPhi << " min " << fPhiMin << " max " << fPhiMax <<
535 // endl;
536 if ( zrPhi >= fPhiMin - fZRSectionTolerance[GetPart()] ||
537 zrPhi <= fPhiMax + fZRSectionTolerance[GetPart()] )
538 {
539 flag = true;
540 break;
541 }
542 }
543 }
544
545 return flag;
546}
547
548//_____________________________________________________
549
550Double_t Emc2DCrystal::GetAngle( Double_t x, Double_t y ) // degree
551{
552 Double_t angle = TMath::ACos( x / TMath::Sqrt( x * x + y * y ) ) * TMath::RadToDeg();
553 if ( y < 0.0 ) angle *= -1;
554 angle = Range360( angle );
555
556 return angle;
557}
558
559//_____________________________________________________
560
561Double_t Emc2DCrystal::Range360( Double_t input ) {
562 if ( input >= 360.0 )
563 {
564 do {
565 input -= 360.0;
566 } while ( input >= 360.0 );
567 }
568 else if ( input < 0.0 )
569 {
570 do {
571 input += 360.0;
572 } while ( input < 0.0 );
573 }
574
575 return input;
576}
577
579 if ( GetPart() != 1 || GetTheta() == 0 || IsFired() ) return true;
580 else return false;
581}
582
584 BesView* view = dynamic_cast<BesView*>( gPad->GetView() );
585 Double_t viewPhi = view->GetLongitude();
586 Double_t viewPhiMin = viewPhi - sideDeltaPhi;
587 Double_t viewPhiMax = viewPhi + sideDeltaPhi;
588
589 viewPhi = Range360( viewPhi );
590 viewPhiMin = Range360( viewPhiMin );
591 viewPhiMax = Range360( viewPhiMax );
592 // if (GetName() == TString("Layer0Wire0")) cout << "view " << viewPhi << endl;
593
594 if ( viewPhiMin < viewPhiMax )
595 { // not cross 0 degree
596 if ( fPhiMax > viewPhiMin && fPhiMax < viewPhiMax ) return true;
597 }
598 else
599 { // cross 0 degree
600 if ( fPhiMax > viewPhiMin || fPhiMax < viewPhiMax ) return true;
601 }
602
603 return false;
604}
605
606// the point newP is on the line connecting p1 and p2, cut point by the plane Z=z
607
608void Emc2DCrystal::SetXYPoint( Double_t* p1, Double_t* p2, Double_t* newP, Double_t z ) {
609 Double_t ratio = fabs( ( z - p1[2] ) / ( p2[2] - p1[2] ) );
610 for ( Int_t i = 0; i < 3; i++ ) { newP[i] = p1[i] * ( 1.0 - ratio ) + p2[i] * ratio; }
611}
612
613// the point newP is on the line connecting p1 and p2, cut point by the plane R=r
614
615void Emc2DCrystal::SetZRPoint( Double_t* p1, Double_t* p2, Double_t* newP, Double_t r ) {
616 Double_t r1 = sqrt( p1[0] * p1[0] + p1[1] * p1[1] );
617 Double_t r2 = sqrt( p2[0] * p2[0] + p2[1] * p2[1] );
618
619 Double_t ratio = fabs( ( r - r1 ) / ( r2 - r1 ) );
620 for ( Int_t i = 0; i < 3; i++ ) { newP[i] = p1[i] * ( 1.0 - ratio ) + p2[i] * ratio; }
621}
622
623void Emc2DCrystal::ProjectECToSide( Double_t* p1, Double_t* newP ) {
624 // ------ R ---------
625 // | --> |
626 // | r |
627
628 Double_t r1 = sqrt( p1[0] * p1[0] + p1[1] * p1[1] );
629 newP[0] = p1[0] * ( brZRPointR / r1 );
630 newP[1] = p1[1] * ( brZRPointR / r1 );
631
632 Double_t drToR = brZRPointR - r1;
633 newP[2] = fabs( ecXYPointZ + drToR ) * ( p1[2] / fabs( p1[2] ) );
634
635 // if (GetName() == TString("EastEcTheta0Phi0")) {
636 // cout << p1[0] << " " << p1[1] << " " << p1[2] << endl;
637 // cout << newP[0] << " " << newP[1] << " " << newP[2] << endl;
638 // }
639}
double p2[4]
double p1[4]
double P(RecMdcKalTrack *trk)
legend Draw()
cout<< "end eff5"<< endl;TGraph *gr1=new TGraphErrors(15, x, eff_ep, errx, err_ep);TGraph *gr2=new TGraphErrors(15, x, eff_em, errx, err_em);TGraph *gr3=new TGraphErrors(15, x, eff_ep2, errx, err_ep2);TGraph *gr4=new TGraphErrors(15, x, eff_em2, errx, err_em2);TGraph *gr5=new TGraphErrors(15, x, eff_ep3, errx, err_ep3);TGraph *gr6=new TGraphErrors(15, x, eff_em3, errx, err_em3);TGraph *gr7=new TGraphErrors(15, x, eff_ep4, errx, err_ep4);TGraph *gr8=new TGraphErrors(15, x, eff_em4, errx, err_em4);TGraph *gr9=new TGraphErrors(15, x, eff_ep5, errx, err_ep5);TGraph *gr10=new TGraphErrors(15, x, eff_em5, errx, err_em5);TCanvas *c1=new TCanvas("c1", "bhabha_eff", 100, 10, 600, 400);TMultiGraph *mg=new TMultiGraph();mg-> SetTitle("bhabha_eff")
ClassImp(Emc2DCrystal) Emc2DCrystal
titledef title[20]
virtual void UpdateView(Bool_t resetview=kFALSE)
Definition BesView.cxx:659
virtual char * GetObjectInfo(Int_t px, Int_t py) const
Definition BesView.cxx:871
virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py)
Definition BesView.cxx:371
virtual void ProjectECToSide(Double_t *p1, Double_t *newP)
virtual void SetZRPoint(Double_t *p1, Double_t *p2, Double_t *newP, Double_t r)
virtual void SetStyle()
virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py)
virtual bool IsSideVisible()
virtual void CloseInfo()
Double_t GetAngle(Double_t x, Double_t y)
virtual char * GetObjectInfo(Int_t px, Int_t py) const
virtual void Draw(Option_t *option="")
virtual Int_t DistancetoPrimitive(Int_t px, Int_t py)
virtual bool HasZRSection()
Double_t Range360(Double_t input)
virtual bool IsXYVisible()
virtual void Paint(Option_t *option="")
virtual void ClearInfo()
virtual void SetXYPoint(Double_t *p1, Double_t *p2, Double_t *newP, Double_t z)