BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
BesEvent.cxx
Go to the documentation of this file.
1//
2// BesEvent.cxx
3//
4
5#include <TGeoHelix.h>
6#include <TGeoTube.h>
7#include <TMath.h>
8#include <iostream>
9
10#include "BesVisLib/BesEvent.h"
11#include "BesVisLib/BesGeometry.h"
12#include "BesVisLib/BesVisDisplay.h"
13#include "Identifier/EmcID.h"
14#include "Identifier/Identifier.h"
15#include "Identifier/MdcID.h"
16#include "Identifier/MucID.h"
17#include "Identifier/TofID.h"
18
20
21using namespace std;
22
23#ifndef __CINT__
25#endif
26
27 //__________________________________________________________
28 // BesEvent
29 // BesVis Event
30 //
31 //
33 : TObject() {
34 //
35 // BesEvent default constructor
36
37 // Init
38 f_Magnetic = 1.0;
39
40 fMdcTrackCol = new TObjArray();
41 fTofTrackCol = new TObjArray();
42 fEmcTrackCol = new TObjArray();
43 fMucTrackCol = new TObjArray();
44 fExtTrackCol = new TObjArray();
45}
46
47//__________________________________________________________
48
50 //
51 // BesEvent default destructor
52
53 // Delete all array elements
54 Delete();
55}
56
57//__________________________________________________________
58
59void BesEvent::Delete( Option_t* option ) {
60 //
61 // Clear event
62 TString opt = option;
63 opt.ToUpper();
64
65 if ( fMdcTrackCol )
66 {
67 for ( int j = 0; j < fMdcTrackCol->GetEntries(); j++ ) { delete fMdcTrackCol->At( j ); }
68 fMdcTrackCol->Clear( "C" );
69 delete fMdcTrackCol;
70 }
71 if ( fTofTrackCol )
72 {
73 for ( int j = 0; j < fTofTrackCol->GetEntries(); j++ ) { delete fTofTrackCol->At( j ); }
74 fTofTrackCol->Clear( "C" );
75 delete fTofTrackCol;
76 }
77 if ( fEmcTrackCol )
78 {
79 for ( int j = 0; j < fEmcTrackCol->GetEntries(); j++ ) { delete fEmcTrackCol->At( j ); }
80 fEmcTrackCol->Clear( "C" );
81 delete fEmcTrackCol;
82 }
83 if ( fMucTrackCol )
84 {
85 for ( int j = 0; j < fMucTrackCol->GetEntries(); j++ ) { delete fMucTrackCol->At( j ); }
86 fMucTrackCol->Clear( "C" );
87 delete fMucTrackCol;
88 }
89 if ( fExtTrackCol )
90 {
91 for ( int j = 0; j < fExtTrackCol->GetEntries(); j++ ) { delete fExtTrackCol->At( j ); }
92 fExtTrackCol->Clear( "C" );
93 delete fExtTrackCol;
94 }
95}
96
97//__________________________________________________________
98
99void BesEvent::Clear( Option_t* option ) {
100 //
101 // Clear event
102 TString opt = option;
103 opt.ToUpper();
104
105 fDigiEvent->Clear( "C" );
106}
107
108//__________________________________________________________
109// Long Peixun's update: add parameter "isRec"
110void BesEvent::SetEvent( TDigiEvent* digiEvent, TDisTrack* recEvent, TEvtHeader* evtHeader,
111 TRecEvTime* recEvTime, Bool_t isRec ) {
112 // fDigiEvent = 0;
113 fDigiEvent = digiEvent;
114 fEvtHeader = evtHeader;
115 fRecEvTime = recEvTime;
116 // fTrigEvent = trigEvt;
117 fTrigEvent = 0;
118 // ========================================
119 // set trig information
120 // ========================================
121 if ( fTrigEvent != 0 )
122 {
123 vector<Int_t> trigConditionVector;
124 vector<Int_t> trigChannelVector;
125
126 const TTrigData* trigData = fTrigEvent->getTrigData();
127 const Int_t timeType = trigData->getTimingType();
128 // std::cout << "BesEvent::timing type: " << timeType << std::endl;
129 Int_t trigCondition;
130 Int_t trigChannel;
131 for ( Int_t i = 0; i < 48; i++ )
132 {
133 trigCondition = trigData->getTrigCondition( i );
134 if ( trigCondition ) trigConditionVector.push_back( i );
135 // std::cout << "BesEvent::trig condition: " << trigCondition << std::endl;
136 }
137 for ( Int_t i = 0; i < 16; i++ )
138 {
139 trigChannel = trigData->getTrigChannel( i );
140 if ( trigChannel ) trigChannelVector.push_back( i );
141 // std::cout << "BesEvent::trigChannel: " << trigChannel << std::endl;
142 }
143 fEventHeader.SetEventTrig( timeType, trigConditionVector, trigChannelVector );
144 }
145 else { std::cout << "fTrigEvent does not exit!" << std::endl; }
146 // ========================================
147 // set time information
148 // ========================================
149 if ( fEvtHeader != 0 )
150 {
151 time_t now;
152 // now = time(NULL);
153 now = (time_t)evtHeader->time();
154 // char str_time[256];
155 // sprintf(str_time, ctime(&now));
156 // cout << "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" << endl;
157 // cout << "time now: " << str_time << endl;
158 // cout << "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" << endl;
159
160 struct tm* local_time;
161 local_time = localtime( &now );
162 // cout << "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" << endl;
163 // cout << "time now sec: " << local_time->tm_sec << endl;
164 // cout << "time now min: " << local_time->tm_min << endl;
165 // cout << "time now hour: "<< local_time->tm_hour << endl;
166 // cout << "time now day: " << local_time->tm_mday << endl;
167 // cout << "time now mon: " << local_time->tm_mon << endl;
168 // cout << "time now year: "<< local_time->tm_year << endl;
169 // cout << "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" << endl;
170
171 Int_t time1 = ( 1900 + local_time->tm_year ) * 10000 + ( 1 + local_time->tm_mon ) * 100 +
172 local_time->tm_mday;
173 Int_t time2 = local_time->tm_hour * 10000 + local_time->tm_min * 100 + local_time->tm_sec;
174
175 fEventHeader.SetEventHeaderGeneral( fEvtHeader->getRunId(), fEvtHeader->getEventId(),
176 time1, time2 );
177 }
178 else { cout << "fEvtHeader does not exit" << endl; }
179
180 // ========================================
181 // set event start time information
182 // ========================================
183 // Long Peixun's update: if this event is not a rec event, don't show estime, status and
184 // quality
185 if ( fRecEvTime != 0 )
186 {
187 fEventHeader.SetEventRec( isRec );
188 if ( isRec )
189 fEventHeader.SetEventEvTime( fRecEvTime->estime(), fRecEvTime->status(),
190 fRecEvTime->quality() );
191 else fEventHeader.SetEventEvTime( 0.0, 0, 0.0 );
192 }
193 else
194 {
195 cout << "fRecEvTime does not exit" << endl;
196 fEventHeader.SetEventRec( false );
197 fEventHeader.SetEventEvTime( 0.0, 0, 0.0 );
198 }
199
200 // ========================================
201 // set Mdc information
202 // ========================================
203 Double_t p = 0.0, pt = 0.0, px = 0.0, py = 0.0, pz = 0.0;
204 for ( Int_t i = 0; i < GetMdcTrackNum( recEvent ); i++ )
205 {
206 p += GetMdcTrack( i, recEvent )->p();
207 pt += GetMdcTrack( i, recEvent )->pxy();
208 px += GetMdcTrack( i, recEvent )->px();
209 py += GetMdcTrack( i, recEvent )->py();
210 pz += GetMdcTrack( i, recEvent )->pz();
211 }
212 fEventHeader.SetEventMdc( p, pt, px, py, pz );
213
214 // ========================================
215 // set Emc information
216 // ========================================
217 Double_t t = 9999.0;
218 Double_t e = 0.0;
219 for ( Int_t i = 0; i < GetEmcShowerNum( recEvent ); i++ )
220 { e += GetEmcShower( i, recEvent )->energy(); }
221 fEventHeader.SetEventEmc( e );
222 // ========================================
223 // set digi and rec
224 // ========================================
225 if ( fDigiEvent != 0 )
226 {
227 SetHits();
228 fEventHeader.SetEventMC( fDigiEvent->getFromMc() );
229 }
230 if ( recEvent != 0 ) SetTracks( recEvent );
231}
232
233//__________________________________________________________
234
236 if ( gBesGeometry )
237 {
238 gBesGeometry->GetMdcROOTGeo()->SetHits();
239 gBesGeometry->GetTofROOTGeo()->SetHits();
240 gBesGeometry->GetEmcROOTGeo()->SetHits();
241 gBesGeometry->GetMucROOTGeo()->SetHits();
242 }
243}
244
245//__________________________________________________________
246
248 if ( gBesGeometry )
249 {
250 // Long Peixun's update: Add judging detector geometry code
251 SetMdcTracks( recEvent );
252 SetTofTracks( recEvent );
253 SetEmcShowers( recEvent );
254 SetMucTracks( recEvent );
255 SetExtTracks( recEvent );
256 }
257}
258
259//__________________________________________________________
260
262 if ( fMdcTrackCol )
263 {
264 for ( int j = 0; j < fMdcTrackCol->GetEntries(); j++ ) { delete fMdcTrackCol->At( j ); }
265 fMdcTrackCol->Clear( "C" );
266 }
267 int mdc_no = recEvent->getMdcTrackNum();
268 for ( Int_t i = 0; i < mdc_no; i++ )
269 {
270 const TRecMdcTrack* recTrack = recEvent->getRecMdcTrack( i );
271 BesGeoTrack* mdcTrack = new BesGeoTrack();
272 mdcTrack->SetTrackType( 0 );
273
274 ConstructMdcTrackFromRec( mdcTrack, recTrack, recEvent );
275 fMdcTrackCol->Add( mdcTrack );
276 }
277}
278
279//__________________________________________________________
280
282 if ( fTofTrackCol )
283 {
284 for ( int j = 0; j < fTofTrackCol->GetEntries(); j++ ) { delete fTofTrackCol->At( j ); }
285 fTofTrackCol->Clear( "C" );
286 }
287 int tof_no = recEvent->getTofTrackNum();
288
289 for ( Int_t i = 0; i < tof_no; i++ )
290 {
291 const TRecTofTrack* recTrack = recEvent->getTofTrack( i );
292 if ( !Is_tofCounter( recTrack->status() ) ) continue;
293 BesGeoTrack* tofTrack = new BesGeoTrack();
294 tofTrack->SetTrackType( 1 );
295
296 ConstructTofTrackFromRec( tofTrack, recTrack, recEvent );
297 fTofTrackCol->Add( tofTrack );
298 }
299}
300
301//__________________________________________________________
302
304 if ( fEmcTrackCol )
305 {
306 for ( int j = 0; j < fEmcTrackCol->GetEntries(); j++ ) { delete fEmcTrackCol->At( j ); }
307 fEmcTrackCol->Clear( "C" );
308 }
309 int emc_no = recEvent->getEmcShowerNum();
310
311 for ( Int_t i = 0; i < emc_no; i++ )
312 {
313 const TRecEmcShower* recShower = recEvent->getEmcShower( i );
314 BesGeoTrack* emcTrack = new BesGeoTrack();
315 emcTrack->SetTrackType( 2 );
316
317 ConstructEmcTrackFromRec( emcTrack, recShower );
318 fEmcTrackCol->Add( emcTrack );
319 }
320}
321
322//__________________________________________________________
323
325 if ( fMucTrackCol )
326 {
327 for ( int j = 0; j < fMucTrackCol->GetEntries(); j++ ) { delete fMucTrackCol->At( j ); }
328 fMucTrackCol->Clear( "C" );
329 }
330 int muc_no = recEvent->getMucTrackNum();
331 for ( Int_t i = 0; i < muc_no; i++ )
332 {
333 const TRecMucTrack* recTrack = recEvent->getMucTrack( i );
334 BesGeoTrack* mucTrack = new BesGeoTrack();
335 mucTrack->SetTrackType( 3 );
336
337 ConstructMucTrackFromRec( mucTrack, recTrack );
338 fMucTrackCol->Add( mucTrack );
339 }
340}
341
342//__________________________________________________________
343
345 // if (fExtTrackCol) fExtTrackCol->Clear("C");
346
347 // for (Int_t i = 0; i < GetExtTrackNum(); i++) {
348 // const TExtTrack* recTrack = GetExtTrack(i);
349 // BesGeoTrack *extTrack = new BesGeoTrack();
350 // extTrack->SetTrackType(4);
351
352 // ConstructExtTrackFromRec(extTrack, recTrack);
353 // fExtTrackCol->Add(extTrack);
354 //}
355}
356
357//__________________________________________________________
358
360 TDisTrack* fRecEvent ) {
361
362 Double_t field = -f_Magnetic; // Tesla
363 Double_t kvC = 3.0e8; // light speed
364 Int_t charge = recTrack->charge();
365 Double_t pt = recTrack->pxy(); // GeV
366 Double_t pz = recTrack->pz(); // GeV
367 Double_t pi = TMath::Pi();
368
369 // unit is "cm"
370 Double_t orgx = recTrack->x() * 10;
371 Double_t orgy = recTrack->y() * 10;
372 Double_t orgz = recTrack->z() * 10;
373
374 Double_t mdcR =
375 ( (TGeoTube*)gBesGeometry->GetMdcROOTGeo()->GetVolumeMdc()->GetShape() )->GetRmax();
376 Double_t mdcZ =
377 ( (TGeoTube*)gBesGeometry->GetMdcROOTGeo()->GetVolumeMdc()->GetShape() )->GetDz();
378
379 Double_t radius, zStep;
380 if ( charge == 0 )
381 {
382 radius = 1e9; // cosmic ray test
383 zStep = 1e9;
384 }
385 else
386 {
387 radius = ( pt * 1.0e9 / kvC * 1e3 ) / fabs( charge * field );
388 zStep = 2 * pi * radius * fabs( pz / pt );
389 }
390 Double_t curvature = 1.0 / radius;
391 Double_t step = 10.0; // mm
392 Double_t delt = step * ( 1.0e-3 ) / kvC;
393
394 mdcTrack->AddPoint( orgx, orgy, orgz, 0.0 );
395 const Double_t* p;
396 Int_t nStep = 0;
397
398 Double_t x, y, z, t;
399 x = orgx;
400 y = orgy;
401 z = orgz;
402
403 if ( charge == 0 )
404 { // cosmic ray test
405 do {
406 x = recTrack->helix( 0 ) * 10 * cos( recTrack->helix( 1 ) ) -
407 nStep * step * sin( recTrack->helix( 1 ) );
408 y = recTrack->helix( 0 ) * 10 * sin( recTrack->helix( 1 ) ) +
409 nStep * step * cos( recTrack->helix( 1 ) );
410 z = recTrack->helix( 3 ) * 10 + nStep * step * recTrack->helix( 4 );
411
412 mdcTrack->AddPoint( x, y, z, delt * nStep );
413 Double_t mp[3];
414 mp[0] = 0;
415 mp[1] = 0;
416 mp[2] = 0;
417 mdcTrack->PaintMarker( mp );
418 mdcTrack->SetMarkerColor( kBlack );
419 mdcTrack->SetMarkerSize( 10 );
420 mdcTrack->SetLineColor( kBlack );
421
422 nStep++;
423 } while ( ( x * x + y * y ) < mdcR * mdcR && fabs( z ) < mdcZ );
424
425 nStep = 0;
426 do {
427 x = recTrack->helix( 0 ) * 10 * cos( recTrack->helix( 1 ) ) -
428 nStep * step * sin( recTrack->helix( 1 ) );
429 y = recTrack->helix( 0 ) * 10 * sin( recTrack->helix( 1 ) ) +
430 nStep * step * cos( recTrack->helix( 1 ) );
431 z = recTrack->helix( 3 ) * 10 + nStep * step * recTrack->helix( 4 );
432
433 mdcTrack->AddPoint( x, y, z, delt * nStep );
434 Double_t mp[3];
435 mp[0] = 0;
436 mp[1] = 0;
437 mp[2] = 0;
438 mdcTrack->PaintMarker( mp );
439 mdcTrack->SetMarkerColor( kBlack );
440 mdcTrack->SetMarkerSize( 10 );
441 mdcTrack->SetLineColor( kRed );
442
443 } while ( ( x * x + y * y ) < mdcR * mdcR && fabs( z ) < mdcZ );
444 }
445 else
446 { // normal track
447 TGeoHelix helix( curvature, zStep, charge );
448 helix.InitPoint( orgx, orgy, orgz );
449
450 helix.InitDirection( recTrack->px(), recTrack->py(), recTrack->pz(), kFALSE );
451 // helix.InitDirection(1000, 10, 10, kFALSE);
452 helix.SetField( 0.0, 0.0, field, kFALSE );
453
454 do {
455 // helix Step before GetCurrentPoint, or first point will be wrong
456 helix.Step( step );
457 p = helix.GetCurrentPoint();
458
459 mdcTrack->AddPoint( p[0], p[1], p[2], delt * nStep );
460 Double_t mp[3];
461 mp[0] = p[0];
462 mp[1] = p[1];
463 mp[2] = p[2];
464 mdcTrack->PaintMarker( mp );
465 mdcTrack->SetMarkerColor( kBlack );
466 mdcTrack->SetMarkerSize( 10 );
467 nStep++;
468 } while ( ( p[0] * p[0] + p[1] * p[1] ) < mdcR * mdcR && fabs( p[2] ) < mdcZ );
469 }
470
471 // Add associated mdc hits
472 vector<UInt_t> vecHits( 0 );
473 const TObjArray* recMdcHitCol = fRecEvent->getRecMdcHitCol();
474 for ( Int_t i = 0; i < recMdcHitCol->GetEntriesFast(); i++ )
475 {
476 TRecMdcHit* recMdcHit = (TRecMdcHit*)recMdcHitCol->At( i );
477 Int_t recHitId = recMdcHit->getTrkId();
478 Int_t recTrkId = recTrack->trackId();
479 if ( recHitId == recTrkId ) vecHits.push_back( recMdcHit->getMdcId() );
480 }
481 for ( Int_t i = 0; i < (Int_t)vecHits.size(); i++ )
482 {
483 Identifier aMdcID( vecHits[i] );
484 int layer = MdcID::layer( aMdcID );
485 int wire = MdcID::wire( aMdcID );
486
487 Mdc2DWire* aHit = gBesGeometry->GetMdcROOTGeo()->Get2DWire( layer, wire );
488 mdcTrack->AddHit( aHit );
489 // Long Peixun's update: for Mdc 3D track display
490 TGeoPhysicalNode* pHit = gBesGeometry->GetMdcROOTGeo()->GetPhysicalReplica( layer, wire );
491 mdcTrack->Add3DHit( pHit );
492 }
493
494 mdcTrack->SetCharge( recTrack->charge() );
495
496 // Add mdc track info
497 char data[200]; // Long Peixun's update: 100 -> 200
498 TString info;
499
500 info = TString( "MdcTrack " );
501 info += recTrack->trackId();
502 mdcTrack->AddInfo( info );
503
504 sprintf( data, "charge=%i, status=%i", recTrack->charge(), recTrack->stat() );
505 mdcTrack->AddInfo( TString( data ) );
506
507 sprintf( data, "P=%-.3f GeV, Pt=%-.3f GeV", recTrack->p(), recTrack->pxy() );
508 mdcTrack->AddInfo( TString( data ) );
509
510 // sprintf(data, "Pt= %-.3f GeV", recTrack->pxy());
511 // mdcTrack->AddInfo( TString(data) );
512
513 sprintf( data, "Pxyz=(%-.3f,%-.3f,%-.3f) GeV", recTrack->px(), recTrack->py(),
514 recTrack->pz() );
515 mdcTrack->AddInfo( TString( data ) );
516
517 sprintf( data, "helix(%-.3f,%-.3f,%-.3f,%-.3f,%-.3f)", recTrack->helix( 0 ),
518 recTrack->helix( 1 ), recTrack->helix( 2 ), recTrack->helix( 3 ),
519 recTrack->helix( 4 ) );
520 mdcTrack->AddInfo( TString( data ) );
521
522 sprintf( data, "Origin (%-.3f, %-.3f, %-.3f) cm", orgx / 10, orgy / 10,
523 orgz / 10 ); // recTrack->x(), recTrack->y(), recTrack->z());
524 mdcTrack->AddInfo( TString( data ) );
525
526 sprintf( data, "#phi=%-.3f #theta=%-.3f cos#theta=%-.3f", recTrack->phi(), recTrack->theta(),
527 cos( recTrack->theta() ) );
528 mdcTrack->AddInfo( TString( data ) );
529
530 sprintf( data, "nHit=%i, #chi^{2}= %-.3f", recTrack->ndof() + 5, recTrack->chi2() );
531 mdcTrack->AddInfo( TString( data ) );
532
533 // sprintf(data, "ndof= %i, rms= %-.3f", recTrack->ndof(), recTrack->rms());
534 // mdcTrack->AddInfo( TString(data) );
535
536 // sprintf(data, "extrp= %-.3f, pathL= %-.3f", recTrack->extrp(), recTrack->pathLength());
537 // mdcTrack->AddInfo( TString(data) );
538
539 // sprintf(data, "nHits= %i, nSter= %i", recTrack->getNhits(), recTrack->nster());
540 // mdcTrack->AddInfo( TString(data) ); //Long Peixun's update: this line should be
541 // annotated
542
543 mdcTrack->CloseInfo();
544}
545
546//__________________________________________________________
547
548// void BesEvent::ConstructTofTrackFromRec(BesGeoTrack *tofTrack, const TRecETofTrack
549// *recETrack){
550//
551// // Add associated tof hits
552// //vector<Int_t> vecBHits = recTrack->vecBHits();
553// //vector<Int_t> vecEHits = recTrack->vecEHits();
554// //vector<Int_t> vecHits;
555// //for (Int_t i = 0; i < (Int_t)vecBHits.size(); i++)
556// // vecHits.push_back( vecBHits[i] );
557// //for (Int_t i = 0; i < (Int_t)vecEHits.size(); i++)
558// // vecHits.push_back( vecEHits[i] );
559//
560// vector<Int_t> vecHits(0);
561// const TObjArray *recETofTrackCol = fRecEvent->getETofTrackCol();
562// for (Int_t i = 0; i < recETofTrackCol->GetEntriesFast(); i++){
563// TRecETofTrack *recHit = (TRecETofTrack*)recETofTrackCol->At(i);
564// if ( !Is_tofCounter( recHit->status())) continue;
565//
566// Int_t recHitId = recHit->trackID();
567// Int_t recTrkId = recETrack->trackID();
568// if (recHitId == recTrkId) vecHits.push_back(recHit->tofID());
569// }
570//
571// TGeoPhysicalNode *phyNode = 0;
572// Double_t x=0.0, y=0.0, z=0.0;
573// Int_t nHits = vecHits.size();
574// for (Int_t i = 0; i < nHits; i++) {
575// Identifier aTofID( vecHits[i] );
576//
577// int part;
578// if (recETrack->tofID() < 48) part = 0;
579// else part = 2;
580//
581// int layer = TofID::layer( aTofID );
582// int scin = TofID::phi_module( aTofID );
583//
584// Tof2DScin* aHit = gBesGeometry->GetTofROOTGeo()->Get2DScin(part, layer, scin);
585// tofTrack->AddHit( aHit );
586//
587// // calculate average position
588// Double_t local[3] = {0.0, 0.0, 0.0};
589// Double_t master[3] = {0.0, 0.0, 0.0};
590// phyNode = gBesGeometry->GetTofROOTGeo()->GetPhysicalScin(part, layer, scin);
591// if (phyNode)
592// phyNode->GetMatrix(-1*phyNode->GetLevel())->LocalToMaster(local, &master[0]);
593// // transform to top
594// x += master[0];
595// y += master[1];
596// z += master[2];
597// }
598// x /= nHits;
599// y /= nHits;
600// z /= nHits;
601//
602// //if (recTrack->getPart() == 1) {
603// // z = 0.5*(recTrack->getZHit1() + recTrack->getZHit2());
604// //}
605// //else {
606// Double_t curR = TMath::Sqrt(x*x+y*y);
607// Double_t newR = recETrack->zrhit();
608// if (curR != 0.0) {
609// x = x * (newR/curR);
610// y = y * (newR/curR);
611// }
612//
613//
614// tofTrack->SetMarker(x, y, z);
615//
616// // Add tof track info
617// char data[100];
618// TString info;
619//
620// info = TString("TofTrack ");
621// info += recETrack->trackID();
622// tofTrack->AddInfo(info);
623//
624// //sprintf(data, "Part = %i, Qual1 = %i, Qual2 = %i", recTrack->getPart(),
625// recTrack->getQual1(), recTrack->getQual2());
626// //tofTrack->AddInfo( TString(data) );
627//
628// //sprintf(data, "Tof = (%-.3f #pm %-.3f) ns", recTrack->getTof(),
629// recTrack->getETof());
630// //tofTrack->AddInfo( TString(data) );
631//
632// //sprintf(data, "Tof1 = (%-.3f #pm %-.3f) ns", recTrack->getTof1(),
633// recTrack->getETof1());
634// //tofTrack->AddInfo( TString(data) );
635//
636// //sprintf(data, "Tof2 = (%-.3f #pm %-.3f) ns", recTrack->getTof2(),
637// recTrack->getETof2());
638// //tofTrack->AddInfo( TString(data) );
639//
640// //sprintf(data, "Path(1=%-.2f, 2=%-.2f) mm", recTrack->getPath1(),
641// recTrack->getPath2());
642// //tofTrack->AddInfo( TString(data) );
643//
644// //sprintf(data, "Pulse(1=%-.0f, 2=%-.0f)", recTrack->getPh1(), recTrack->getPh2());
645// //tofTrack->AddInfo( TString(data) );
646//
647// //sprintf(data, "ZHit(1=%-.2fmm, 2=%-.2f)mm", recTrack->getZHit1(),
648// recTrack->getZHit2());
649// //tofTrack->AddInfo( TString(data) );
650//
651// ////sprintf(data, "ZTDC1=%-.2fmm, ZTDC2=%-.2fmm", recTrack->getZTDC1(),
652// recTrack->getZTDC2());
653// ////tofTrack->AddInfo( TString(data) );
654//
655// //sprintf(data, "RHit = %-.3f, Beta = %-.3f", recTrack->getRHit(), recTrack->getBeta());
656// //tofTrack->AddInfo( TString(data) );
657//
658// //sprintf(data, "w_e = %-.2f%%, w_mu = %-.2f%%", recTrack->getWeightElectron()*100.0,
659// recTrack->getWeightMuon()*100.0);
660// //tofTrack->AddInfo( TString(data) );
661//
662// //sprintf(data, "w_pi = %-.2f%%, w_K = %-.2f%%", recTrack->getWeightPion()*100.0,
663// recTrack->getWeightKaon()*100.0);
664// //tofTrack->AddInfo( TString(data) );
665//
666// //sprintf(data, "w_P = %-.2f%%", recTrack->getWeightProton()*100.0);
667// //tofTrack->AddInfo( TString(data) );
668//
669// tofTrack->CloseInfo();
670// }
671
672//__________________________________________________________
674 TDisTrack* fRecEvent ) {
675
676 vector<Int_t> vecBHits( 0 );
677 vector<Int_t> vecEHits( 0 );
678
679 const TObjArray* recTofTrackCol = fRecEvent->getTofTrackCol();
680 for ( Int_t i = 0; i < recTofTrackCol->GetEntriesFast(); i++ )
681 {
682 TRecTofTrack* recHit = (TRecTofTrack*)recTofTrackCol->At( i );
683 if ( !Is_tofCounter( recHit->status() ) ) continue;
684
685 Int_t recHitId = recHit->trackID();
686 Int_t recTrkId = recTrack->trackID();
687 if ( recHitId == recTrkId )
688 {
689 if ( Is_tofBarrel( recHit->status() ) ) { vecBHits.push_back( recHit->tofID() ); }
690 else { vecEHits.push_back( recHit->tofID() ); }
691 }
692 }
693
694 TGeoPhysicalNode* phyNode = 0;
695 Double_t x = 0.0, y = 0.0, z = 0.0;
696
697 Int_t nHits;
698 if ( vecBHits.size() )
699 {
700 nHits = vecBHits.size();
701 for ( Int_t i = 0; i < nHits; i++ )
702 {
703
704 int part = 1;
705 int layer = 0;
706 int scin = 0;
707 if ( ( vecBHits[i] >= 0 ) && ( vecBHits[i] <= 87 ) )
708 {
709 layer = 0;
710 scin = vecBHits[i];
711 }
712 else
713 {
714 layer = 1;
715 scin = vecBHits[i] - 88;
716 }
717
718 Tof2DScin* aHit = gBesGeometry->GetTofROOTGeo()->Get2DScin( part, layer, scin );
719 tofTrack->AddHit( aHit );
720
721 // calculate average position
722 Double_t local[3] = { 0.0, 0.0, 0.0 };
723 Double_t master[3] = { 0.0, 0.0, 0.0 };
724 phyNode = gBesGeometry->GetTofROOTGeo()->GetPhysicalScin( part, layer, scin );
725 tofTrack->Add3DHit( phyNode ); // Long Peixun's update: for Tof 3D track display
726 if ( phyNode )
727 phyNode->GetMatrix( -1 * phyNode->GetLevel() )->LocalToMaster( local, &master[0] );
728 // transform to top
729 x += master[0];
730 y += master[1];
731 z += master[2];
732 }
733 x /= nHits;
734 y /= nHits;
735 z /= nHits;
736
737 z = recTrack->zrhit();
738
739 tofTrack->SetMarker( x, y, z );
740 }
741
742 else if ( vecEHits.size() )
743 {
744 nHits = vecEHits.size();
745 for ( Int_t i = 0; i < nHits; i++ )
746 {
747
748 int part = 0;
749 int layer = 0;
750 int scin = 0;
751 if ( ( vecEHits[i] >= 0 ) && ( vecEHits[i] <= 47 ) )
752 {
753 part = 2;
754 scin = vecEHits[i];
755 }
756 else
757 {
758 part = 0;
759 scin = vecEHits[i] - 48;
760 }
761
762 Tof2DScin* aHit = gBesGeometry->GetTofROOTGeo()->Get2DScin( part, layer, scin );
763 tofTrack->AddHit( aHit );
764
765 // calculate average position
766 Double_t local[3] = { 0.0, 0.0, 0.0 };
767 Double_t master[3] = { 0.0, 0.0, 0.0 };
768 phyNode = gBesGeometry->GetTofROOTGeo()->GetPhysicalScin( part, layer, scin );
769 tofTrack->Add3DHit( phyNode ); // Long Peixun's update: for Tof 3D track display
770 if ( phyNode )
771 phyNode->GetMatrix( -1 * phyNode->GetLevel() )->LocalToMaster( local, &master[0] );
772 // transform to top
773 x += master[0];
774 y += master[1];
775 z += master[2];
776 }
777 x /= nHits;
778 y /= nHits;
779 z /= nHits;
780
781 tofTrack->SetMarker( x, y, z );
782 }
783
784 // Add tof track info
785 char data[100];
786 TString info;
787
788 info = TString( "TofTrack " );
789 info += recTrack->trackID();
790 tofTrack->AddInfo( info );
791
792 // sprintf(data, "Part = %i, Qual1 = %i, Qual2 = %i", recTrack->getPart(),
793 // recTrack->getQual1(), recTrack->getQual2()); tofTrack->AddInfo( TString(data) );
794
795 // sprintf(data, "Tof = (%-.3f #pm %-.3f) ns", recTrack->getTof(), recTrack->getETof());
796 // tofTrack->AddInfo( TString(data) );
797
798 // sprintf(data, "Tof1 = (%-.3f #pm %-.3f) ns", recTrack->getTof1(), recTrack->getETof1());
799 // tofTrack->AddInfo( TString(data) );
800
801 // sprintf(data, "Tof2 = (%-.3f #pm %-.3f) ns", recTrack->getTof2(), recTrack->getETof2());
802 // tofTrack->AddInfo( TString(data) );
803
804 // sprintf(data, "Path(1=%-.2f, 2=%-.2f) mm", recTrack->getPath1(), recTrack->getPath2());
805 // tofTrack->AddInfo( TString(data) );
806
807 // sprintf(data, "Pulse(1=%-.0f, 2=%-.0f)", recTrack->getPh1(), recTrack->getPh2());
808 // tofTrack->AddInfo( TString(data) );
809
810 // sprintf(data, "ZHit(1=%-.2fmm, 2=%-.2f)mm", recTrack->getZHit1(), recTrack->getZHit2());
811 // tofTrack->AddInfo( TString(data) );
812
813 ////sprintf(data, "ZTDC1=%-.2fmm, ZTDC2=%-.2fmm", recTrack->getZTDC1(),
814 ///recTrack->getZTDC2()); /tofTrack->AddInfo( TString(data) );
815
816 // sprintf(data, "RHit = %-.3f, Beta = %-.3f", recTrack->getRHit(), recTrack->getBeta());
817 // tofTrack->AddInfo( TString(data) );
818
819 // sprintf(data, "w_e = %-.2f%%, w_mu = %-.2f%%", recTrack->getWeightElectron()*100.0,
820 // recTrack->getWeightMuon()*100.0); tofTrack->AddInfo( TString(data) );
821
822 // sprintf(data, "w_pi = %-.2f%%, w_K = %-.2f%%", recTrack->getWeightPion()*100.0,
823 // recTrack->getWeightKaon()*100.0); tofTrack->AddInfo( TString(data) );
824
825 // sprintf(data, "w_P = %-.2f%%", recTrack->getWeightProton()*100.0);
826 // tofTrack->AddInfo( TString(data) );
827
828 tofTrack->CloseInfo();
829}
830
832 const TRecEmcShower* recTrack ) {
833
834 Double_t x = 0.0, y = 0.0, z = 0.0;
835 x = recTrack->x() * 10.0;
836 y = recTrack->y() * 10.0;
837 z = recTrack->z() * 10.0;
838
839 emcTrack->SetMarker( x, y, z );
840 // Add associated emc hits
841 vector<Int_t> vecHits( 0 );
842 map<Int_t, Double_t> cellMap = recTrack->cellIdMap();
843 map<Int_t, Double_t>::iterator iCellMap;
844 for ( iCellMap = cellMap.begin(); iCellMap != cellMap.end(); iCellMap++ )
845 {
846 Int_t cellId = iCellMap->first;
847 vecHits.push_back( cellId );
848 }
849 for ( Int_t i = 0; i < (Int_t)vecHits.size(); i++ )
850 {
851 Identifier aEmcID( vecHits[i] );
852 int part = EmcID::barrel_ec( aEmcID );
853 int theta = EmcID::theta_module( aEmcID );
854 int phi = EmcID::phi_module( aEmcID );
855 if ( part == 1 ) theta = 43 - theta; // 43 = m_kThetaBr-1
856
857 Emc2DCrystal* aHit = gBesGeometry->GetEmcROOTGeo()->Get2DCrystal( part, phi, theta );
858 emcTrack->AddHit( aHit );
859 // Long Peixun's update: for Emc 3D track display
860 TGeoPhysicalNode* pHit =
861 gBesGeometry->GetEmcROOTGeo()->GetPhysicalCrystal( part, phi, theta );
862 emcTrack->Add3DHit( pHit );
863 }
864
865 // Add Emc track info
866 char data[100];
867 TString info;
868
869 info = TString( "EmcShower " );
870 info += recTrack->trackId();
871 emcTrack->AddInfo( info );
872
873 sprintf( data, "nHits = %i, status = %i", recTrack->numHits(), recTrack->status() );
874 emcTrack->AddInfo( TString( data ) );
875
876 sprintf( data, "energy= (%.2f #pm %-.2f) MeV", recTrack->energy() * 1000.0,
877 recTrack->dE() * 1000.0 );
878 emcTrack->AddInfo( TString( data ) );
879
880 Identifier aEmcID( recTrack->cellId() );
881 int part = EmcID::barrel_ec( aEmcID );
882 int theta = EmcID::theta_module( aEmcID );
883 int phi = EmcID::phi_module( aEmcID );
884
885 sprintf( data, "cell Id= (%i, #theta %i, #phi %i)", part, theta, phi );
886 emcTrack->AddInfo( TString( data ) );
887
888 sprintf( data, "module = %i", recTrack->module() );
889 emcTrack->AddInfo( TString( data ) );
890
891 // sprintf(data, "x = (%-.3f #pm %-.3f) mm", x, recTrack->dx());
892 // emcTrack->AddInfo( TString(data) );
893
894 // sprintf(data, "y = (%-.3f #pm %-.3f) mm", y, recTrack->dy());
895 // emcTrack->AddInfo( TString(data) );
896
897 // sprintf(data, "z = (%-.3f #pm %-.3f) mm", z, recTrack->dz());
898 // emcTrack->AddInfo( TString(data) );
899
900 sprintf( data, "#theta = (%-.3f #pm %-.3f)", recTrack->theta(), recTrack->dtheta() );
901 emcTrack->AddInfo( TString( data ) );
902
903 sprintf( data, "#phi = (%-.3f #pm %-.3f)", recTrack->phi(), recTrack->dphi() );
904 emcTrack->AddInfo( TString( data ) );
905
906 // sprintf(data, "cos (x=%-.3f, y=%-.3f, z=%-.3f)", recTrack->cosx(), recTrack->cosy(),
907 // recTrack->cosz()); //from boss6.1.0. no these varibles emcTrack->AddInfo(
908 // TString(data) );
909
910 emcTrack->CloseInfo();
911}
912
913//__________________________________________________________
914
916 const TRecMucTrack* recTrack ) {
917 if ( recTrack->depth() <= 0.0 ) return; // bad track
918
919 Double_t field = 1e-3; // Tesla
920 Double_t kvC = 3.0e8; // light speed
921 Int_t charge = 1;
922 Double_t pz = recTrack->pz(); // GeV
923 Double_t pt =
924 sqrt( recTrack->px() * recTrack->px() + recTrack->py() * recTrack->py() ); // GeV
925 Double_t pi = TMath::Pi();
926
927 Double_t mucR =
928 ( (TGeoBBox*)gBesGeometry->GetMucROOTGeo()->GetVolumeMuc()->GetShape() )->GetDX();
929 Double_t mucZ =
930 ( (TGeoBBox*)gBesGeometry->GetMucROOTGeo()->GetVolumeMuc()->GetShape() )->GetDZ();
931
932 Double_t radius = 1.0e+9;
933 Double_t curvature = 1.0 / radius;
934 Double_t zStep = 2 * pi * radius * fabs( pz / pt );
935 Double_t step = 1.0; // mm
936 Double_t delt = step * ( 1.0e-3 ) / kvC;
937
938 TGeoHelix helix( curvature, zStep, charge );
939
940 Double_t x = recTrack->xPos() * 10.0;
941 Double_t y = recTrack->yPos() * 10.0;
942 Double_t z = recTrack->zPos() * 10.0;
943
944 helix.InitPoint( x, y, z );
945 helix.InitDirection( recTrack->px(), recTrack->py(), recTrack->pz(), kFALSE );
946 helix.SetField( 0.0, 0.0, field, kFALSE );
947
948 mucTrack->AddPoint( x, y, z, 0.0 );
949 const Double_t* p;
950 Int_t nStep = 0;
951 do {
952 // helix Step before GetCurrentPoint, or first point will be wrong
953 helix.Step( step );
954 p = helix.GetCurrentPoint();
955 mucTrack->AddPoint( p[0], p[1], p[2], delt * nStep );
956 Double_t mp[3];
957 mp[0] = p[0];
958 mp[1] = p[1];
959 mp[2] = p[2];
960 mucTrack->PaintMarker( mp );
961 mucTrack->SetMarkerColor( kBlack );
962 mucTrack->SetMarkerSize( 10 );
963 nStep++;
964 } while ( ( p[0] * p[0] + p[1] * p[1] ) < mucR * mucR && fabs( p[2] ) < mucZ );
965
966 // Add associated muc hits
967 vector<Int_t> vecHits = recTrack->vecHits();
968 for ( Int_t i = 0; i < (Int_t)vecHits.size(); i++ )
969 {
970 Identifier aMucID( vecHits[i] );
971 int part = MucID::part( aMucID );
972 int seg = MucID::seg( aMucID );
973 int gap = MucID::gap( aMucID );
974 int strip = MucID::strip( aMucID );
975
976 Muc2DStrip* aHit = gBesGeometry->GetMucROOTGeo()->Get2DStrip( part, seg, gap, strip );
977 mucTrack->AddHit( aHit );
978 // Long Peixun's update: for Muc 3D track display
979 TGeoPhysicalNode* pHit =
980 gBesGeometry->GetMucROOTGeo()->GetPhysicalStrip( part, seg, gap, strip );
981 mucTrack->Add3DHit( pHit );
982 }
983
984 mucTrack->SetCharge( charge );
985
986 // Add Muc track info
987 char data[100];
988 TString info;
989
990 info = TString( "MucTrack " );
991 info += recTrack->trackId();
992 mucTrack->AddInfo( info );
993
994 sprintf( data, "nHits= %i, maxHits= %i, nLayers= %i", recTrack->numHits(),
995 recTrack->maxHitsInLayer(), recTrack->numLayers() );
996 mucTrack->AddInfo( TString( data ) );
997
998 sprintf( data, "lastLayer (br= %i, ec= %i)", recTrack->brLastLayer(),
999 recTrack->ecLastLayer() );
1000 mucTrack->AddInfo( TString( data ) );
1001
1002 sprintf( data, "depth = %.3f cm", recTrack->depth() );
1003 mucTrack->AddInfo( TString( data ) );
1004
1005 sprintf( data, "#chi^{2}= %-.3f, dof= %i, rms= %-.3f", recTrack->chi2(), recTrack->dof(),
1006 recTrack->rms() );
1007 mucTrack->AddInfo( TString( data ) );
1008
1009 sprintf( data, "Origin (%-.2f, %-.2f, %-.2f) cm", recTrack->xPos(), recTrack->yPos(),
1010 recTrack->zPos() );
1011 mucTrack->AddInfo( TString( data ) );
1012
1013 sprintf( data, "p (%-.3f, %-.3f, %-.3f) GeV", recTrack->px(), recTrack->py(),
1014 recTrack->pz() );
1015 mucTrack->AddInfo( TString( data ) );
1016
1017 mucTrack->CloseInfo();
1018}
1019
1020//__________________________________________________________
1021
1022// void BesEvent::ConstructExtTrackFromRec(BesGeoTrack *extTrack, const TExtTrack *recTrack) {
1023//
1024// extTrack->AddPoint(recTrack->GetTof1PositionX(),
1025// recTrack->GetTof1PositionY(),
1026// recTrack->GetTof1PositionZ(),
1027// 0.0);
1028// extTrack->AddPoint(recTrack->GetTof2PositionX(),
1029// recTrack->GetTof2PositionY(),
1030// recTrack->GetTof2PositionZ(),
1031// 0.1);
1032// extTrack->AddPoint(recTrack->GetEmcPositionX(),
1033// recTrack->GetEmcPositionY(),
1034// recTrack->GetEmcPositionZ(),
1035// 0.2);
1036// extTrack->AddPoint(recTrack->GetMucPositionX(),
1037// recTrack->GetMucPositionY(),
1038// recTrack->GetMucPositionZ(),
1039// 0.3);
1040//
1041// // Add Ext track info
1042// char data[100];
1043// TString info;
1044//
1045// info = TString("ExtTrack ");
1046// info += recTrack->GetTrackId();
1047// extTrack->AddInfo(info);
1048//
1049// sprintf(data, "Tof1 pos (%-.2f, %-.2f, %-.2f) mm",
1050// recTrack->GetTof1PositionX(), recTrack->GetTof1PositionY(),
1051// recTrack->GetTof1PositionZ());
1052// extTrack->AddInfo( TString(data) );
1053//
1054// sprintf(data, "Tof2 pos (%-.2f, %-.2f, %-.2f) mm",
1055// recTrack->GetTof2PositionX(), recTrack->GetTof2PositionY(),
1056// recTrack->GetTof2PositionZ());
1057// extTrack->AddInfo( TString(data) );
1058//
1059// sprintf(data, "Emc pos (%-.2f, %-.2f, %-.2f) mm",
1060// recTrack->GetEmcPositionX(), recTrack->GetEmcPositionY(),
1061// recTrack->GetEmcPositionZ());
1062// extTrack->AddInfo( TString(data) );
1063//
1064// sprintf(data, "Muc pos (%-.2f, %-.2f, %-.2f) mm",
1065// recTrack->GetMucPositionX(), recTrack->GetMucPositionY(),
1066// recTrack->GetMucPositionZ());
1067// extTrack->AddInfo( TString(data) );
1068//
1069// sprintf(data, "Tof1 p (%-.3f, %-.3f, %-.3f) GeV",
1070// recTrack->GetTof1MomentumX()/1000.0, recTrack->GetTof1MomentumY()/1000.0,
1071// recTrack->GetTof1MomentumZ()/1000.0);
1072// extTrack->AddInfo( TString(data) );
1073//
1074// sprintf(data, "Tof2 p (%-.3f, %-.3f, %-.3f) GeV",
1075// recTrack->GetTof2MomentumX()/1000.0, recTrack->GetTof2MomentumY()/1000.0,
1076// recTrack->GetTof2MomentumZ()/1000.0);
1077// extTrack->AddInfo( TString(data) );
1078//
1079// sprintf(data, "Emc p (%-.3f, %-.3f, %-.3f) GeV",
1080// recTrack->GetEmcMomentumX()/1000.0, recTrack->GetEmcMomentumY()/1000.0,
1081// recTrack->GetEmcMomentumZ()/1000.0);
1082// extTrack->AddInfo( TString(data) );
1083//
1084// sprintf(data, "Muc p (%-.3f, %-.3f, %-.3f) GeV",
1085// recTrack->GetMucMomentumX()/1000.0, recTrack->GetMucMomentumY()/1000.0,
1086// recTrack->GetMucMomentumZ()/1000.0);
1087// extTrack->AddInfo( TString(data) );
1088//
1089// extTrack->CloseInfo();
1090// }
1091
1092//__________________________________________________________
1093
1094void BesEvent::DrawHits( Option_t* option ) {
1095 if ( gBesGeometry )
1096 {
1097 gBesGeometry->GetMdcROOTGeo()->DrawHits( option );
1098 gBesGeometry->GetTofROOTGeo()->DrawHits( option );
1099 gBesGeometry->GetEmcROOTGeo()->DrawHits( option );
1100 gBesGeometry->GetMucROOTGeo()->DrawHits( option );
1101 }
1102}
1103
1104//__________________________________________________________
1105
1106void BesEvent::DrawTracks( Option_t* option ) {
1107
1108 BesView* view = dynamic_cast<BesView*>( gPad->GetView() );
1109
1110 // Long Peixun's update: Always construct 3D line, whether draw it or not
1111 if ( view )
1112 {
1113 for ( Int_t i = 0; i < fMdcTrackCol->GetEntries(); i++ )
1114 {
1115 BesGeoTrack* track = (BesGeoTrack*)fMdcTrackCol->At( i );
1116 if ( view->GetVisTracksGlobal() && view->GetVisTracksMdc() ) track->Draw();
1117 else track->Construct3DLine();
1118 }
1119
1120 for ( Int_t i = 0; i < fTofTrackCol->GetEntries(); i++ )
1121 {
1122 BesGeoTrack* track = (BesGeoTrack*)fTofTrackCol->At( i );
1123 if ( view->GetVisTracksGlobal() && view->GetVisTracksTof() ) track->Draw();
1124 else track->Construct3DLine();
1125 }
1126
1127 for ( Int_t i = 0; i < fEmcTrackCol->GetEntries(); i++ )
1128 {
1129 BesGeoTrack* track = (BesGeoTrack*)fEmcTrackCol->At( i );
1130 if ( view->GetVisTracksGlobal() && view->GetVisTracksEmc() ) track->Draw();
1131 else track->Construct3DLine();
1132 }
1133
1134 for ( Int_t i = 0; i < fMucTrackCol->GetEntries(); i++ )
1135 {
1136 BesGeoTrack* track = (BesGeoTrack*)fMucTrackCol->At( i );
1137 if ( view->GetVisTracksGlobal() && view->GetVisTracksMuc() ) track->Draw();
1138 else track->Construct3DLine();
1139 }
1140
1141 for ( Int_t i = 0; i < fExtTrackCol->GetEntries(); i++ )
1142 {
1143 BesGeoTrack* track = (BesGeoTrack*)fExtTrackCol->At( i );
1144 if ( view->GetVisTracksGlobal() && view->GetVisTracksExt() ) track->Draw();
1145 else track->Construct3DLine();
1146 }
1147 }
1148}
1149
1150//__________________________________________________________
1151
1152void BesEvent::Print( Option_t* option ) {
1153 //
1154 // Print event information
1155 //
1156 // Options available:
1157 // '' - quiet, i.e. only numbers of hits and tracks etc. (default)
1158 // 'ALL' - very detailed output (might be hundreds of lines!)
1159 // 'Digi' - only Digi information
1160 // 'Dst' - only Dst information
1161 //
1162 TString opt = option;
1163 opt.ToUpper();
1164 Int_t i;
1165
1166 // cout << endl
1167 // << "==========================================================" << endl
1168 // << "Run: " << GetRun() << endl
1169 // << "Event: " << GetEvent() << endl
1170 // << "----------------------------------------------------------" << endl
1171 // << "Mdc digis: " << GetMdcDigiNum() << endl
1172 // << "Tof digis: " << GetTofDigiNum() << endl
1173 // << "Emc digis: " << GetEmcDigiNum() << endl
1174 // << "Muc digis: " << GetMucDigiNum() << endl
1175 // << "Mdc tracks: " << GetMdcTrackNum() << endl
1176 // << "Tof tracks: " << "debug++++++" /*GetTofTrackNum()*/ << endl
1177 // << "Emc tracks: " << GetEmcShowerNum() << endl
1178 // << "Muc tracks: " << GetMucTrackNum() << endl
1179 // << "Ext tracks: " << GetExtTrackNum() << endl
1180 // << "Dedx : " << GetDedxNum() << endl
1181 // << "----------------------------------------------------------" << endl;
1182
1183 if ( opt.Contains( "ALL" ) || opt.Contains( "Digi" ) )
1184 {
1185 for ( i = 0; i < GetMdcDigiNum(); i++ ) GetMdcDigi( i )->Print();
1186 for ( i = 0; i < GetTofDigiNum(); i++ ) GetTofDigi( i )->Print();
1187 for ( i = 0; i < GetEmcDigiNum(); i++ ) GetEmcDigi( i )->Print();
1188 for ( i = 0; i < GetMucDigiNum(); i++ ) GetMucDigi( i )->Print();
1189 }
1190
1191 /* if ( opt.Contains("ALL") || opt.Contains("Dst") ) {
1192 for ( i = 0; i < GetMdcTrackNum(); i++ ) GetMdcTrack(i)->Print();
1193 // Tof -> BTof ETof
1194 //for ( i = 0; i < GetTofTrackNum(); i++ ) GetTofTrack(i)->Print();
1195 for ( i = 0; i < GetEmcShowerNum(); i++ ) GetEmcShower(i)->Print();
1196 for ( i = 0; i < GetMucTrackNum(); i++ ) GetMucTrack(i)->Print();
1197 cout << "wait for TRecExtEvent, BesEvent" << endl;
1198 //for ( i = 0; i < GetExtTrackNum(); i++ ) GetExtTrack(i)->Print();
1199 for ( i = 0; i < GetDedxNum(); i++ ) GetDedx(i)->Print();
1200 }
1201 */
1202 // cout << "=========================================================="
1203 //<< endl << endl;
1204}
1205
1206bool BesEvent::Is_tofCounter( UInt_t status ) {
1207 const unsigned int Counter_Mask = 0x00000004;
1208 const unsigned int Counter_Index = 2;
1209 return ( ( status & Counter_Mask ) >> Counter_Index ) ? true : false;
1210}
1211
1212bool BesEvent::Is_tofBarrel( UInt_t status ) {
1213 const unsigned int Barrel_Index = 4;
1214 const unsigned int Barrel_Mask = 0x00000010;
1215 return ( ( status & Barrel_Mask ) >> Barrel_Index ) ? true : false;
1216}
ClassImp(BesEvent) BesEvent
Definition BesEvent.cxx:24
sprintf(cut, "kal_costheta0_em>-0.93&&kal_costheta0_em<0.93&&kal_pxy0_em>=0.05+%d*0.1&&kal_" "pxy0_em<0.15+%d*0.1&&NGch>=2", j, j)
TTree * data
R__EXTERN BesGeometry * gBesGeometry
double pi
double mp
virtual void Delete(Option_t *option="")
Definition BesEvent.cxx:59
virtual void SetHits()
Definition BesEvent.cxx:235
virtual ~BesEvent()
Definition BesEvent.cxx:49
virtual void Clear(Option_t *option="")
Definition BesEvent.cxx:99
virtual void ConstructTofTrackFromRec(BesGeoTrack *tofTrack, const TRecTofTrack *recTrack, TDisTrack *recEvent)
Definition BesEvent.cxx:673
virtual void SetTofTracks(TDisTrack *recEvent)
Definition BesEvent.cxx:281
const TTofDigi * GetTofDigi(Int_t i) const
const TRecMdcTrack * GetMdcTrack(Int_t i, TDisTrack *recEvent) const
const Int_t GetMdcTrackNum(TDisTrack *recEvent) const
virtual void ConstructEmcTrackFromRec(BesGeoTrack *emcTrack, const TRecEmcShower *recTrack)
Definition BesEvent.cxx:831
virtual void Print(Option_t *option="")
virtual void SetMucTracks(TDisTrack *recEvent)
Definition BesEvent.cxx:324
virtual void SetMdcTracks(TDisTrack *recEvent)
Definition BesEvent.cxx:261
virtual void SetEmcShowers(TDisTrack *recEvent)
Definition BesEvent.cxx:303
const Int_t GetEmcShowerNum(TDisTrack *recEvent) const
const TMucDigi * GetMucDigi(Int_t i) const
const TRecEmcShower * GetEmcShower(Int_t i, TDisTrack *recEvent) const
virtual void ConstructMucTrackFromRec(BesGeoTrack *mucTrack, const TRecMucTrack *recTrack)
Definition BesEvent.cxx:915
const TMdcDigi * GetMdcDigi(Int_t i) const
virtual void SetEvent(TDigiEvent *digiEvent, TDisTrack *recEvent, TEvtHeader *evtHeader, TRecEvTime *recEvTime, Bool_t isRec)
Definition BesEvent.cxx:110
const TEmcDigi * GetEmcDigi(Int_t i) const
virtual void ConstructMdcTrackFromRec(BesGeoTrack *mdcTrack, const TRecMdcTrack *recTrack, TDisTrack *recEvent)
Definition BesEvent.cxx:359
virtual void DrawHits(Option_t *option)
virtual void DrawTracks(Option_t *option)
virtual void SetTracks(TDisTrack *recEvent)
Definition BesEvent.cxx:247
virtual void SetExtTracks(TDisTrack *recEvent)
Definition BesEvent.cxx:344
virtual void CloseInfo()
virtual void Draw(Option_t *option="")
virtual void AddPoint(Double_t x, Double_t y, Double_t z, Double_t t)
virtual void Construct3DLine()
virtual void SetMarker(Double_t x, Double_t y, Double_t z)
virtual void SetCharge(Int_t charge)
static unsigned int barrel_ec(const Identifier &id)
Values of different levels (failure returns 0).
Definition EmcID.cxx:36
static unsigned int theta_module(const Identifier &id)
Definition EmcID.cxx:41
static unsigned int phi_module(const Identifier &id)
Definition EmcID.cxx:46
static int layer(const Identifier &id)
Values of different levels (failure returns 0).
Definition MdcID.cxx:47
static int wire(const Identifier &id)
Definition MdcID.cxx:52
static int part(const Identifier &id)
Definition MucID.cxx:43
static int gap(const Identifier &id)
Definition MucID.cxx:63
static int seg(const Identifier &id)
Definition MucID.cxx:53
static int strip(const Identifier &id)
Definition MucID.cxx:73
const TRecTofTrack * getTofTrack(Int_t i) const
retrieve a TofTrack From the collection, using the index into the array
const TRecMucTrack * getMucTrack(Int_t i) const
retrieve a MucTrack From the collection, using the index into the array
const TObjArray * getRecMdcHitCol() const
retrieve the whole TObjArray of RecMdcHit Data
const TRecEmcShower * getEmcShower(Int_t i) const
retrieve a EmcShower from the collection, using the index into the array
int getMdcTrackNum()
const TObjArray * getTofTrackCol() const
retrieve the whole TObjArray of TofTrack Data
int getMucTrackNum()
int getEmcShowerNum()
int getTofTrackNum()
const TRecMdcTrack * getRecMdcTrack(Int_t i) const
retrieve a MdcTrack from the collection, using the index into the array
void Print(Option_t *option="") const
Definition TRawData.cxx:21
Double_t y() const
Double_t theta() const
Double_t p() const
Double_t px() const
Double_t x() const
Double_t py() const
Double_t z() const
Double_t pz() const
Double_t pxy() const
Double_t phi() const
Int_t charge() const
int t()
Definition t.c:1