BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
Muc2DStrip.cxx
Go to the documentation of this file.
1#include <TColor.h>
2#include <TString.h>
3#include <iostream>
4
5#include "BesVisLib/BesCursor.h"
6#include "BesVisLib/BesView.h"
7#include "BesVisLib/Muc2DStrip.h"
8#include "TMath.h"
9#include "math.h"
10
11using namespace std;
12
13#ifndef __CINT__
15#endif
16
17 //_____________________________________________________
18
20}
21
22//_____________________________________________________
23
24Muc2DStrip::Muc2DStrip( const char* name, const char* title, Int_t N, Double_t* P, Int_t part,
25 Int_t seg, Int_t gap, Int_t strip ) {
26 SetName( name );
27 SetTitle( title );
28 fTip = 0;
29 fHighlighted = false;
30 fFired = false;
31 fPart = part;
32 fSeg = seg;
33 fGap = gap;
34 fStrip = strip;
35
36 // ------XY------
37
38 Double_t Pxy[3 * 4];
39 for ( Int_t i = 0; i < 4; i++ )
40 {
41 if ( part == 1 )
42 {
43 Int_t iXYSeq[8] = { 1, 0, 4, 5, 2, 3, 7, 6 }; // center of 1+2, 0+3, 4+7, 5+6
44 for ( Int_t j = 0; j < 3; j++ )
45 { Pxy[3 * i + j] = ( P[3 * iXYSeq[i] + j] + P[3 * ( iXYSeq[i + 4] ) + j] ) / 2.0; }
46 }
47 else
48 {
49 Int_t iXYSeq[8] = { 0, 1, 2, 3, 4, 5, 6, 7 }; // center of 0+4, 1+5, 2+6, 3+7
50 for ( Int_t j = 0; j < 3; j++ )
51 { Pxy[3 * i + j] = ( P[3 * iXYSeq[i] + j] + P[3 * ( iXYSeq[i + 4] ) + j] ) / 2.0; }
52 }
53 }
54
55 fStripXY = new BesPolygon2D( name, title, 4, &Pxy[0] );
56
57 // ------ZR------
58
59 Double_t Pzr[3 * 6];
60 Int_t nzrPoints = 6;
61 if ( part == 1 )
62 {
63 Int_t iZRSeq[6] = { 4, 5, 1,
64 2, 6, 7 }; //{1,2,6,5, 0,3,7,4}; // center of 0+4, 1+5, 2+6, 3+7
65 for ( Int_t i = 0; i < nzrPoints; i++ )
66 {
67 for ( Int_t j = 0; j < 3; j++ )
68 {
69 Pzr[3 * i + j] =
70 P[3 * iZRSeq[i] + j]; // ( P[3*iZRSeq[i]+j] + P[3*(iZRSeq[i+4])+j] )/2.0;
71 }
72 }
73 }
74 else
75 {
76 nzrPoints = 6;
77 Int_t iZRSeq[6] = { 1, 2, 3, 7, 6, 5 };
78 for ( Int_t i = 0; i < nzrPoints; i++ )
79 {
80 for ( Int_t j = 0; j < 3; j++ ) { Pzr[3 * i + j] = P[3 * iZRSeq[i] + j]; }
81 }
82 }
83
84 fStripZR = new BesPolygon2D( name, title, nzrPoints, &Pzr[0] );
85
86 // Init
87
88 SetStyle();
89
90 fTip = new BesPaveText( 0, 0, 0.1, 0.1 );
91 CloseInfo();
92}
93
94//_____________________________________________________
95
97 // Long Peixun's update: remove "if"
98 delete fStripXY;
99 delete fStripZR;
100}
101
103 lcStrip = 15;
104 lwStrip = 1;
105 lsStrip = 1;
106 fcStrip = 1007; // lightBrown // 1005; // lightBlue
107 fsStrip = 1001;
108
109 lcStripFired = 15; // kRed; //15
110 lwStripFired = 1;
111 lsStripFired = 1;
112 fcStripFired = kRed;
113 fsStripFired = 1001;
114
115 lcStripHL = lcStrip;
116 lwStripHL = 1;
117 lsStripHL = 1;
118 fcStripHL = kBlue;
119 fsStripHL = 1001;
120}
121
123 fInfoCon.clear();
124 fTip->DeleteText();
125}
126
128 if ( fTip )
129 {
130 fTip->Clear();
131
132 if ( fInfoCon.size() == 0 ) fInfoCon.push_back( GetTitle() );
133 fTip->SetText( fInfoCon );
134 }
135 else cout << "Muc2DStrip::CloseInfo, not initialized" << endl;
136}
137
138//_____________________________________________________
139
140Int_t Muc2DStrip::DistancetoPrimitive( Int_t px, Int_t py ) {
141
142 BesView* view = dynamic_cast<BesView*>( gPad->GetView() );
143 if ( view->GetViewType() & kXYView && fStripXY &&
144 ( view->GetVisMucStrips() || ( view->GetVisMucHitsGlobal() && this->IsFired() ) ) )
145 { return fStripXY->DistancetoPrimitive( px, py ); }
146 else if ( view->GetViewType() & kZRView && fStripZR &&
147 ( ( view->GetVisMucStrips() && this->IsZRVisible() ) ||
148 ( view->GetVisMucHitsGlobal() && this->IsFired() && this->IsZRVisible() ) ) )
149 { return fStripZR->DistancetoPrimitive( px, py ); }
150
151 return 9999;
152}
153
154//_____________________________________________________
155
156void Muc2DStrip::ExecuteEvent( Int_t event, Int_t px, Int_t py ) {
157
158 // cout << GetName() << endl;
159 BesView* view = dynamic_cast<BesView*>( gPad->GetView() );
160
161 if ( gBesCursor->GetType() == kBesHand )
162 {
163 if ( view ) view->ExecuteEvent( event, px, py );
164 }
165 else if ( gBesCursor->GetType() == kBesPick )
166 {
167
168 if ( gPad ) gPad->SetCursor( kPointer );
169
170 switch ( event )
171 {
172
173 case kMouseEnter:
174 this->SetHighlighted( true );
175
176 Draw();
177
178 fTip->SetPos( px, py );
179 view->UpdateView( 0 );
180
181 // Long Peixun's update: If ShowInfo is not checked, don't show tip text.
182 if ( gBesCursor->GetShowInfo() ) fTip->Draw( "BR,SAME" ); // "BR,ARC,SAME"
183 gPad->Modified();
184 gPad->Update();
185
186 break;
187
188 case kMouseLeave:
189 if ( this->IsHighlighted() )
190 {
191 this->SetHighlighted( false );
192 // if (view->GetVisMucHitsGlobal())
193 Draw();
194
195 view->UpdateView( 0 );
196 gPad->Modified();
197 gPad->Update();
198 break;
199 }
200 }
201
202 // if (view) view->ExecuteEvent(event, px, py);
203 }
204}
205
206//_____________________________________________________
207
208void Muc2DStrip::Draw( Option_t* option ) {
209 //
210 // Muc2DStrip draw function
211 TString opt = option;
212 opt.ToUpper();
213
214 AppendPad( option );
215}
216
217//_____________________________________________________
218
219void Muc2DStrip::Paint( Option_t* option ) {
220
221 TString opt = option;
222 opt.ToUpper();
223
224 BesView* view = dynamic_cast<BesView*>( gPad->GetView() );
225 Double_t min[3], max[3];
226 view->GetRange( &min[0], &max[0] );
227 Double_t maxRange = 0.0;
228 Double_t range[3];
229 for ( Int_t i = 0; i < 3; i++ )
230 {
231 range[i] = fabs( max[i] - min[i] );
232 if ( range[i] > maxRange ) maxRange = range[i];
233 }
234
235 if ( view->GetViewType() & kXYView )
236 {
237
238 if ( fStripXY )
239 {
240 fStripXY->SetLineColor( lcStrip );
241 fStripXY->SetLineWidth( lwStrip );
242 fStripXY->SetLineStyle( lsStrip );
243 fStripXY->SetFillColor( fcStrip );
244 fStripXY->SetFillStyle( fsStrip );
245 }
246
247 if ( this->IsFired() )
248 {
249 if ( fStripXY )
250 {
251 fStripXY->SetLineColor( lcStripFired );
252 if ( maxRange > m_kDrawLineRange && fPart == 1 )
253 fStripXY->SetLineColor( fcStripFired ); // too small makes it hard to see
254 fStripXY->SetLineWidth( lwStripFired );
255 fStripXY->SetLineStyle( lsStripFired );
256 fStripXY->SetFillColor( fcStripFired );
257 fStripXY->SetFillStyle( fsStripFired );
258 }
259 }
260
261 if ( this->IsHighlighted() )
262 {
263 if ( fStripXY )
264 {
265 fStripXY->SetLineColor( lcStripHL );
266 if ( maxRange > m_kDrawLineRange && fPart == 1 )
267 fStripXY->SetLineColor( fcStripHL ); // too small makes it hard to see
268 fStripXY->SetLineWidth( lwStripHL );
269 fStripXY->SetLineStyle( lsStripHL );
270 fStripXY->SetFillColor( fcStripHL );
271 fStripXY->SetFillStyle( fsStripHL );
272 }
273 }
274
275 if ( fStripXY && view->GetVisMucStrips() ) fStripXY->Paint();
276 if ( this->IsFired() )
277 {
278 if ( view->GetVisMucHitsGlobal() && ( ( fPart == 0 && view->GetVisMucHitsEast() ) ||
279 ( fPart == 1 && view->GetVisMucHitsBarrel() ) ||
280 ( fPart == 2 && view->GetVisMucHitsWest() ) ) )
281 { fStripXY->Paint(); }
282 }
283 }
284
285 if ( view->GetViewType() & kZRView )
286 {
287
288 if ( fStripZR )
289 {
290 fStripZR->SetLineColor( lcStrip );
291 fStripZR->SetLineWidth( lwStrip );
292 fStripZR->SetLineStyle( lsStrip );
293 fStripZR->SetFillColor( fcStrip );
294 fStripZR->SetFillStyle( fsStrip );
295 }
296
297 if ( this->IsFired() )
298 {
299 if ( fStripZR )
300 {
301 fStripZR->SetLineColor( lcStripFired );
302 if ( maxRange > m_kDrawLineRange )
303 fStripZR->SetLineColor( fcStripFired ); // too small makes it hard to see
304 fStripZR->SetLineWidth( lwStripFired );
305 fStripZR->SetLineStyle( lsStripFired );
306 fStripZR->SetFillColor( fcStripFired );
307 fStripZR->SetFillStyle( fsStripFired );
308 }
309 }
310
311 if ( this->IsHighlighted() )
312 {
313 if ( fStripZR )
314 {
315 fStripZR->SetLineColor( lcStripHL );
316 if ( maxRange > m_kDrawLineRange )
317 fStripZR->SetLineColor( fcStripHL ); // too small makes it hard to see
318 fStripZR->SetLineWidth( lwStripHL );
319 fStripZR->SetLineStyle( lsStripHL );
320 fStripZR->SetFillColor( fcStripHL );
321 fStripZR->SetFillStyle( fsStripHL );
322 }
323 }
324
325 if ( fStripZR && view->GetVisMucStrips() && IsZRVisible() ) fStripZR->Paint();
326 if ( this->IsFired() && IsZRVisible() )
327 {
328 if ( view->GetVisMucHitsGlobal() && ( ( fPart == 0 && view->GetVisMucHitsEast() ) ||
329 ( fPart == 1 && view->GetVisMucHitsBarrel() ) ||
330 ( fPart == 2 && view->GetVisMucHitsWest() ) ) )
331 { fStripZR->Paint(); }
332 }
333 }
334}
335
336//_____________________________________________________
337
338char* Muc2DStrip::GetObjectInfo( Int_t px, Int_t py ) const {
339
340 BesView* view = dynamic_cast<BesView*>( gPad->GetView() );
341 if ( view ) return view->GetObjectInfo( px, py );
342 else return TObject::GetObjectInfo( px, py );
343}
344
345//_____________________________________________________
346
348 BesView* view = dynamic_cast<BesView*>( gPad->GetView() );
349 Double_t viewPhi = view->GetLongitude();
350 viewPhi = Range360( viewPhi );
351
352 if ( fPart != 1 )
353 {
354 if ( (Int_t)viewPhi % 90 == 0 ) return true;
355 else return false;
356 }
357 else
358 {
359 Int_t viewSeg = Int_t( viewPhi / 45.0 + 0.5 );
360 // cout << "viewSeg " << viewSeg << endl;
361 Int_t upSeg = viewSeg - 2;
362 Int_t downSeg = viewSeg + 2;
363 if ( upSeg < 0 ) upSeg += 8;
364 else if ( upSeg >= 8 ) upSeg -= 8;
365 if ( downSeg < 0 ) downSeg += 8;
366 else if ( downSeg >= 8 ) downSeg -= 8;
367 // if (fStrip == 0) cout << GetName() << " upSeg " << upSeg << " downSeg " << downSeg <<
368 // endl;
369
370 if ( (Int_t)viewPhi % 45 == 0 && ( fSeg == upSeg || fSeg == downSeg ) ) return true;
371 else return false;
372 }
373
374 return false;
375}
376
377//_____________________________________________________
378
379Double_t Muc2DStrip::GetAngle( Double_t x, Double_t y ) // degree
380{
381 Double_t angle = TMath::ACos( x / TMath::Sqrt( x * x + y * y ) ) * TMath::RadToDeg();
382 if ( y < 0.0 ) angle *= -1;
383 angle = Range360( angle );
384
385 return angle;
386}
387
388//_____________________________________________________
389
390Double_t Muc2DStrip::Range360( Double_t input ) {
391 if ( input >= 360.0 )
392 {
393 do {
394 input -= 360.0;
395 } while ( input >= 360.0 );
396 }
397 else if ( input < 0.0 )
398 {
399 do {
400 input += 360.0;
401 } while ( input < 0.0 );
402 }
403
404 return input;
405}
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")
#define min(a, b)
#define max(a, b)
titledef title[20]
ClassImp(Muc2DStrip) Muc2DStrip
virtual void GetRange(Float_t *min, Float_t *max)
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
Double_t GetAngle(Double_t x, Double_t y)
virtual void SetHighlighted(bool status=true)
virtual void Draw(Option_t *option="")
virtual Int_t DistancetoPrimitive(Int_t px, Int_t py)
virtual char * GetObjectInfo(Int_t px, Int_t py) const
virtual void ClearInfo()
virtual bool IsZRVisible()
virtual void Paint(Option_t *option="")
virtual void SetStyle()
virtual void CloseInfo()
virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py)
Double_t Range360(Double_t input)