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"
40 fMdcTrackCol =
new TObjArray();
41 fTofTrackCol =
new TObjArray();
42 fEmcTrackCol =
new TObjArray();
43 fMucTrackCol =
new TObjArray();
44 fExtTrackCol =
new TObjArray();
67 for (
int j = 0; j < fMdcTrackCol->GetEntries(); j++ ) {
delete fMdcTrackCol->At( j ); }
68 fMdcTrackCol->Clear(
"C" );
73 for (
int j = 0; j < fTofTrackCol->GetEntries(); j++ ) {
delete fTofTrackCol->At( j ); }
74 fTofTrackCol->Clear(
"C" );
79 for (
int j = 0; j < fEmcTrackCol->GetEntries(); j++ ) {
delete fEmcTrackCol->At( j ); }
80 fEmcTrackCol->Clear(
"C" );
85 for (
int j = 0; j < fMucTrackCol->GetEntries(); j++ ) {
delete fMucTrackCol->At( j ); }
86 fMucTrackCol->Clear(
"C" );
91 for (
int j = 0; j < fExtTrackCol->GetEntries(); j++ ) {
delete fExtTrackCol->At( j ); }
92 fExtTrackCol->Clear(
"C" );
102 TString opt = option;
105 fDigiEvent->Clear(
"C" );
113 fDigiEvent = digiEvent;
114 fEvtHeader = evtHeader;
115 fRecEvTime = recEvTime;
121 if ( fTrigEvent != 0 )
123 vector<Int_t> trigConditionVector;
124 vector<Int_t> trigChannelVector;
126 const TTrigData* trigData = fTrigEvent->getTrigData();
131 for ( Int_t i = 0; i < 48; i++ )
134 if ( trigCondition ) trigConditionVector.push_back( i );
137 for ( Int_t i = 0; i < 16; i++ )
140 if ( trigChannel ) trigChannelVector.push_back( i );
143 fEventHeader.SetEventTrig( timeType, trigConditionVector, trigChannelVector );
145 else { std::cout <<
"fTrigEvent does not exit!" << std::endl; }
149 if ( fEvtHeader != 0 )
153 now = (time_t)evtHeader->
time();
160 struct tm* local_time;
161 local_time = localtime( &now );
171 Int_t time1 = ( 1900 + local_time->tm_year ) * 10000 + ( 1 + local_time->tm_mon ) * 100 +
173 Int_t time2 = local_time->tm_hour * 10000 + local_time->tm_min * 100 + local_time->tm_sec;
175 fEventHeader.SetEventHeaderGeneral( fEvtHeader->getRunId(), fEvtHeader->getEventId(),
178 else { cout <<
"fEvtHeader does not exit" << endl; }
185 if ( fRecEvTime != 0 )
187 fEventHeader.SetEventRec( isRec );
189 fEventHeader.SetEventEvTime( fRecEvTime->estime(), fRecEvTime->status(),
190 fRecEvTime->quality() );
191 else fEventHeader.SetEventEvTime( 0.0, 0, 0.0 );
195 cout <<
"fRecEvTime does not exit" << endl;
196 fEventHeader.SetEventRec(
false );
197 fEventHeader.SetEventEvTime( 0.0, 0, 0.0 );
203 Double_t p = 0.0, pt = 0.0, px = 0.0, py = 0.0, pz = 0.0;
212 fEventHeader.SetEventMdc( p, pt, px, py, pz );
221 fEventHeader.SetEventEmc( e );
225 if ( fDigiEvent != 0 )
228 fEventHeader.SetEventMC( fDigiEvent->getFromMc() );
230 if ( recEvent != 0 )
SetTracks( recEvent );
264 for (
int j = 0; j < fMdcTrackCol->GetEntries(); j++ ) {
delete fMdcTrackCol->At( j ); }
265 fMdcTrackCol->Clear(
"C" );
268 for ( Int_t i = 0; i < mdc_no; i++ )
275 fMdcTrackCol->Add( mdcTrack );
284 for (
int j = 0; j < fTofTrackCol->GetEntries(); j++ ) {
delete fTofTrackCol->At( j ); }
285 fTofTrackCol->Clear(
"C" );
289 for ( Int_t i = 0; i < tof_no; i++ )
292 if ( !Is_tofCounter( recTrack->
status() ) )
continue;
297 fTofTrackCol->Add( tofTrack );
306 for (
int j = 0; j < fEmcTrackCol->GetEntries(); j++ ) {
delete fEmcTrackCol->At( j ); }
307 fEmcTrackCol->Clear(
"C" );
311 for ( Int_t i = 0; i < emc_no; i++ )
318 fEmcTrackCol->Add( emcTrack );
327 for (
int j = 0; j < fMucTrackCol->GetEntries(); j++ ) {
delete fMucTrackCol->At( j ); }
328 fMucTrackCol->Clear(
"C" );
331 for ( Int_t i = 0; i < muc_no; i++ )
338 fMucTrackCol->Add( mucTrack );
362 Double_t field = -f_Magnetic;
363 Double_t
kvC = 3.0e8;
364 Int_t charge = recTrack->
charge();
365 Double_t pt = recTrack->
pxy();
366 Double_t pz = recTrack->
pz();
367 Double_t
pi = TMath::Pi();
370 Double_t orgx = recTrack->
x() * 10;
371 Double_t orgy = recTrack->
y() * 10;
372 Double_t orgz = recTrack->
z() * 10;
375 ( (TGeoTube*)
gBesGeometry->GetMdcROOTGeo()->GetVolumeMdc()->GetShape() )->GetRmax();
377 ( (TGeoTube*)
gBesGeometry->GetMdcROOTGeo()->GetVolumeMdc()->GetShape() )->GetDz();
379 Double_t radius, zStep;
387 radius = ( pt * 1.0e9 /
kvC * 1e3 ) / fabs( charge * field );
388 zStep = 2 *
pi * radius * fabs( pz / pt );
390 Double_t curvature = 1.0 / radius;
391 Double_t step = 10.0;
392 Double_t delt = step * ( 1.0e-3 ) /
kvC;
394 mdcTrack->
AddPoint( orgx, orgy, orgz, 0.0 );
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 );
412 mdcTrack->
AddPoint( x, y, z, delt * nStep );
417 mdcTrack->PaintMarker(
mp );
418 mdcTrack->SetMarkerColor( kBlack );
419 mdcTrack->SetMarkerSize( 10 );
420 mdcTrack->SetLineColor( kBlack );
423 }
while ( ( x * x + y * y ) < mdcR * mdcR && fabs( z ) < mdcZ );
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 );
433 mdcTrack->
AddPoint( x, y, z, delt * nStep );
438 mdcTrack->PaintMarker(
mp );
439 mdcTrack->SetMarkerColor( kBlack );
440 mdcTrack->SetMarkerSize( 10 );
441 mdcTrack->SetLineColor( kRed );
443 }
while ( ( x * x + y * y ) < mdcR * mdcR && fabs( z ) < mdcZ );
447 TGeoHelix helix( curvature, zStep, charge );
448 helix.InitPoint( orgx, orgy, orgz );
450 helix.InitDirection( recTrack->
px(), recTrack->
py(), recTrack->
pz(), kFALSE );
452 helix.SetField( 0.0, 0.0, field, kFALSE );
457 p = helix.GetCurrentPoint();
459 mdcTrack->
AddPoint( p[0], p[1], p[2], delt * nStep );
464 mdcTrack->PaintMarker(
mp );
465 mdcTrack->SetMarkerColor( kBlack );
466 mdcTrack->SetMarkerSize( 10 );
468 }
while ( ( p[0] * p[0] + p[1] * p[1] ) < mdcR * mdcR && fabs( p[2] ) < mdcZ );
472 vector<UInt_t> vecHits( 0 );
474 for ( Int_t i = 0; i < recMdcHitCol->GetEntriesFast(); i++ )
477 Int_t recHitId = recMdcHit->
getTrkId();
478 Int_t recTrkId = recTrack->
trackId();
479 if ( recHitId == recTrkId ) vecHits.push_back( recMdcHit->
getMdcId() );
481 for ( Int_t i = 0; i < (Int_t)vecHits.size(); i++ )
490 TGeoPhysicalNode* pHit =
gBesGeometry->GetMdcROOTGeo()->GetPhysicalReplica( layer, wire );
500 info = TString(
"MdcTrack " );
507 sprintf(
data,
"P=%-.3f GeV, Pt=%-.3f GeV", recTrack->
p(), recTrack->
pxy() );
513 sprintf(
data,
"Pxyz=(%-.3f,%-.3f,%-.3f) GeV", recTrack->
px(), recTrack->
py(),
517 sprintf(
data,
"helix(%-.3f,%-.3f,%-.3f,%-.3f,%-.3f)", recTrack->
helix( 0 ),
519 recTrack->
helix( 4 ) );
522 sprintf(
data,
"Origin (%-.3f, %-.3f, %-.3f) cm", orgx / 10, orgy / 10,
526 sprintf(
data,
"#phi=%-.3f #theta=%-.3f cos#theta=%-.3f", recTrack->
phi(), recTrack->
theta(),
676 vector<Int_t> vecBHits( 0 );
677 vector<Int_t> vecEHits( 0 );
680 for ( Int_t i = 0; i < recTofTrackCol->GetEntriesFast(); i++ )
683 if ( !Is_tofCounter( recHit->
status() ) )
continue;
685 Int_t recHitId = recHit->
trackID();
686 Int_t recTrkId = recTrack->
trackID();
687 if ( recHitId == recTrkId )
689 if ( Is_tofBarrel( recHit->
status() ) ) { vecBHits.push_back( recHit->
tofID() ); }
690 else { vecEHits.push_back( recHit->
tofID() ); }
694 TGeoPhysicalNode* phyNode = 0;
695 Double_t x = 0.0, y = 0.0, z = 0.0;
698 if ( vecBHits.size() )
700 nHits = vecBHits.size();
701 for ( Int_t i = 0; i < nHits; i++ )
707 if ( ( vecBHits[i] >= 0 ) && ( vecBHits[i] <= 87 ) )
715 scin = vecBHits[i] - 88;
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 );
727 phyNode->GetMatrix( -1 * phyNode->GetLevel() )->LocalToMaster( local, &master[0] );
737 z = recTrack->
zrhit();
742 else if ( vecEHits.size() )
744 nHits = vecEHits.size();
745 for ( Int_t i = 0; i < nHits; i++ )
751 if ( ( vecEHits[i] >= 0 ) && ( vecEHits[i] <= 47 ) )
759 scin = vecEHits[i] - 48;
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 );
771 phyNode->GetMatrix( -1 * phyNode->GetLevel() )->LocalToMaster( local, &master[0] );
788 info = TString(
"TofTrack " );
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;
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++ )
846 Int_t cellId = iCellMap->first;
847 vecHits.push_back( cellId );
849 for ( Int_t i = 0; i < (Int_t)vecHits.size(); i++ )
855 if ( part == 1 ) theta = 43 - theta;
860 TGeoPhysicalNode* pHit =
861 gBesGeometry->GetEmcROOTGeo()->GetPhysicalCrystal( part, phi, theta );
869 info = TString(
"EmcShower " );
877 recTrack->
dE() * 1000.0 );
885 sprintf(
data,
"cell Id= (%i, #theta %i, #phi %i)", part, theta, phi );
917 if ( recTrack->
depth() <= 0.0 )
return;
919 Double_t field = 1e-3;
920 Double_t
kvC = 3.0e8;
922 Double_t pz = recTrack->
pz();
924 sqrt( recTrack->
px() * recTrack->
px() + recTrack->
py() * recTrack->
py() );
925 Double_t
pi = TMath::Pi();
928 ( (TGeoBBox*)
gBesGeometry->GetMucROOTGeo()->GetVolumeMuc()->GetShape() )->GetDX();
930 ( (TGeoBBox*)
gBesGeometry->GetMucROOTGeo()->GetVolumeMuc()->GetShape() )->GetDZ();
932 Double_t radius = 1.0e+9;
933 Double_t curvature = 1.0 / radius;
934 Double_t zStep = 2 *
pi * radius * fabs( pz / pt );
936 Double_t delt = step * ( 1.0e-3 ) /
kvC;
938 TGeoHelix helix( curvature, zStep, charge );
940 Double_t x = recTrack->
xPos() * 10.0;
941 Double_t y = recTrack->
yPos() * 10.0;
942 Double_t z = recTrack->
zPos() * 10.0;
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 );
954 p = helix.GetCurrentPoint();
955 mucTrack->
AddPoint( p[0], p[1], p[2], delt * nStep );
960 mucTrack->PaintMarker(
mp );
961 mucTrack->SetMarkerColor( kBlack );
962 mucTrack->SetMarkerSize( 10 );
964 }
while ( ( p[0] * p[0] + p[1] * p[1] ) < mucR * mucR && fabs( p[2] ) < mucZ );
967 vector<Int_t> vecHits = recTrack->
vecHits();
968 for ( Int_t i = 0; i < (Int_t)vecHits.size(); i++ )
979 TGeoPhysicalNode* pHit =
980 gBesGeometry->GetMucROOTGeo()->GetPhysicalStrip( part, seg, gap, strip );
990 info = TString(
"MucTrack " );
1005 sprintf(
data,
"#chi^{2}= %-.3f, dof= %i, rms= %-.3f", recTrack->
chi2(), recTrack->
dof(),
1013 sprintf(
data,
"p (%-.3f, %-.3f, %-.3f) GeV", recTrack->
px(), recTrack->
py(),
1113 for ( Int_t i = 0; i < fMdcTrackCol->GetEntries(); i++ )
1120 for ( Int_t i = 0; i < fTofTrackCol->GetEntries(); i++ )
1127 for ( Int_t i = 0; i < fEmcTrackCol->GetEntries(); i++ )
1134 for ( Int_t i = 0; i < fMucTrackCol->GetEntries(); i++ )
1141 for ( Int_t i = 0; i < fExtTrackCol->GetEntries(); i++ )
1162 TString opt = option;
1183 if ( opt.Contains(
"ALL" ) || opt.Contains(
"Digi" ) )
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;
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;
ClassImp(BesEvent) BesEvent
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)
R__EXTERN BesEvent * gEvent
R__EXTERN BesGeometry * gBesGeometry
double sin(const BesAngle a)
double cos(const BesAngle a)
virtual void Delete(Option_t *option="")
const Int_t GetMucDigiNum() const
virtual void Clear(Option_t *option="")
const Int_t GetTofDigiNum() const
virtual void ConstructTofTrackFromRec(BesGeoTrack *tofTrack, const TRecTofTrack *recTrack, TDisTrack *recEvent)
virtual void SetTofTracks(TDisTrack *recEvent)
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)
virtual void Print(Option_t *option="")
const Int_t GetMdcDigiNum() const
virtual void SetMucTracks(TDisTrack *recEvent)
virtual void SetMdcTracks(TDisTrack *recEvent)
virtual void SetEmcShowers(TDisTrack *recEvent)
const Int_t GetEmcShowerNum(TDisTrack *recEvent) const
const TMucDigi * GetMucDigi(Int_t i) const
const TRecEmcShower * GetEmcShower(Int_t i, TDisTrack *recEvent) const
const Int_t GetEmcDigiNum() const
virtual void ConstructMucTrackFromRec(BesGeoTrack *mucTrack, const TRecMucTrack *recTrack)
const TMdcDigi * GetMdcDigi(Int_t i) const
virtual void SetEvent(TDigiEvent *digiEvent, TDisTrack *recEvent, TEvtHeader *evtHeader, TRecEvTime *recEvTime, Bool_t isRec)
const TEmcDigi * GetEmcDigi(Int_t i) const
virtual void ConstructMdcTrackFromRec(BesGeoTrack *mdcTrack, const TRecMdcTrack *recTrack, TDisTrack *recEvent)
virtual void DrawHits(Option_t *option)
virtual void DrawTracks(Option_t *option)
virtual void SetTracks(TDisTrack *recEvent)
virtual void SetExtTracks(TDisTrack *recEvent)
virtual void SetTrackType(Int_t type)
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 AddInfo(TString info)
virtual void AddHit(TObject *obj)
virtual void Add3DHit(TObject *obj)
virtual void SetCharge(Int_t charge)
Bool_t GetVisTracksGlobal()
static unsigned int barrel_ec(const Identifier &id)
Values of different levels (failure returns 0).
static unsigned int theta_module(const Identifier &id)
static unsigned int phi_module(const Identifier &id)
static int layer(const Identifier &id)
Values of different levels (failure returns 0).
static int wire(const Identifier &id)
static int part(const Identifier &id)
static int gap(const Identifier &id)
static int seg(const Identifier &id)
static int strip(const Identifier &id)
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
const TObjArray * getTofTrackCol() const
retrieve the whole TObjArray of TofTrack Data
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
map< Int_t, Double_t > cellIdMap() const
Int_t getTrkId(void) const
Double_t helix(Int_t i) const
Int_t brLastLayer() const
vector< Int_t > vecHits() const
Int_t maxHitsInLayer() const
Int_t ecLastLayer() const
int getTimingType() const
int getTrigCondition(int i) const
int getTrigChannel(int i) const