/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/EventDisplay/BesVisLib/BesVisLib-00-04-04/src/BesEvent.cxx

Go to the documentation of this file.
00001 //
00002 // BesEvent.cxx
00003 //
00004 
00005 #include <TGeoHelix.h>
00006 #include <TMath.h>
00007 #include <TGeoTube.h>
00008 #include <iostream>
00009 
00010 #include "BesVisLib/BesEvent.h"
00011 #include "BesVisLib/BesVisDisplay.h"
00012 #include "BesVisLib/BesGeometry.h"
00013 #include "Identifier/Identifier.h"
00014 #include "Identifier/MdcID.h"
00015 #include "Identifier/TofID.h"
00016 #include "Identifier/EmcID.h"
00017 #include "Identifier/MucID.h"
00018 
00019 BesEvent *gEvent = 0;
00020 
00021 using namespace std;
00022 
00023 #ifndef __CINT__
00024 ClassImp(BesEvent)
00025 #endif
00026 
00027 //__________________________________________________________
00028 // BesEvent
00029 // BesVis Event
00030 //
00031 //
00032 BesEvent::BesEvent() : TObject() {
00033     //
00034     // BesEvent default constructor
00035 
00036     // Init
00037     f_Magnetic = 1.0;
00038     fMdcTrackCol = new TObjArray();
00039     fTofTrackCol = new TObjArray();
00040     fEmcTrackCol = new TObjArray();
00041     fMucTrackCol = new TObjArray();
00042     fExtTrackCol = new TObjArray();
00043 }
00044 
00045 //__________________________________________________________
00046 
00047 BesEvent::~BesEvent() {
00048     //
00049     // BesEvent default destructor
00050 
00051     // Delete all array elements
00052     Delete();
00053 }
00054 
00055 //__________________________________________________________
00056 
00057 void BesEvent::Delete(Option_t *option) {
00058     //
00059     // Clear event
00060     TString opt = option;
00061     opt.ToUpper();
00062 
00063     if (fMdcTrackCol) {
00064         for (int j = 0; j < fMdcTrackCol->GetEntries(); j++){
00065             delete      fMdcTrackCol->At(j);
00066         }
00067         fMdcTrackCol->Clear("C");
00068         delete fMdcTrackCol;
00069     }
00070     if (fTofTrackCol) {
00071         for (int j = 0; j < fTofTrackCol->GetEntries(); j++){
00072             delete      fTofTrackCol->At(j);
00073         }
00074         fTofTrackCol->Clear("C");
00075         delete fTofTrackCol;
00076     }
00077     if (fEmcTrackCol) {
00078         for (int j = 0; j < fEmcTrackCol->GetEntries(); j++){
00079             delete      fEmcTrackCol->At(j);
00080         }
00081         fEmcTrackCol->Clear("C");
00082         delete fEmcTrackCol;
00083     }
00084     if (fMucTrackCol) {
00085         for (int j = 0; j < fMucTrackCol->GetEntries(); j++){
00086             delete      fMucTrackCol->At(j);
00087         }
00088         fMucTrackCol->Clear("C");
00089         delete fMucTrackCol;
00090     }
00091     if (fExtTrackCol) {
00092         for (int j = 0; j < fExtTrackCol->GetEntries(); j++){
00093             delete      fExtTrackCol->At(j);
00094         }
00095         fExtTrackCol->Clear("C");
00096         delete fExtTrackCol;
00097     }
00098 }
00099 
00100 //__________________________________________________________
00101 
00102 void BesEvent::Clear(Option_t *option) {
00103     //
00104     // Clear event
00105     TString opt = option;
00106     opt.ToUpper();
00107 
00108     fDigiEvent->Clear("C");
00109 }
00110 
00111 //__________________________________________________________
00112 
00113 void BesEvent::SetEvent(TDigiEvent *digiEvent, TDisTrack *recEvent, TEvtHeader *evtHeader, TRecEvTime *recEvTime) {
00114     //fDigiEvent = 0;
00115     fDigiEvent = digiEvent;
00116     fEvtHeader = evtHeader;
00117     fRecEvTime = recEvTime;
00118     //fTrigEvent = trigEvt;
00119     fTrigEvent = 0;
00120     // ======================================== 
00121     // set trig information
00122     // ======================================== 
00123     if (fTrigEvent != 0){
00124       vector<Int_t> trigConditionVector;
00125       vector<Int_t> trigChannelVector;
00126 
00127       const TTrigData* trigData = fTrigEvent->getTrigData();
00128       const Int_t timeType = trigData->getTimingType();
00129       //std::cout << "BesEvent::timing type: " << timeType << std::endl;
00130       Int_t trigCondition;
00131       Int_t trigChannel;
00132       for (Int_t i = 0; i < 48; i++){
00133         trigCondition = trigData->getTrigCondition(i);
00134         if (trigCondition) trigConditionVector.push_back(i);
00135         //std::cout << "BesEvent::trig condition: " << trigCondition << std::endl;
00136       }
00137       for (Int_t i = 0; i < 16; i++){
00138         trigChannel = trigData->getTrigChannel(i);
00139         if (trigChannel) trigChannelVector.push_back(i);
00140         //std::cout << "BesEvent::trigChannel: " << trigChannel << std::endl;
00141       }
00142       fEventHeader.SetEventTrig(timeType, trigConditionVector, trigChannelVector);
00143     }
00144     else {
00145       std::cout << "fTrigEvent does not exit!" << std::endl;
00146     }
00147     // ======================================== 
00148     // set time information
00149     // ======================================== 
00150     if (fEvtHeader != 0){
00151         time_t now;
00152         //now = time(NULL);
00153         now = (time_t)evtHeader->time();
00154         //char str_time[256];
00155         //sprintf(str_time, ctime(&now));
00156         //cout << "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" << endl;
00157         //cout << "time now: " << str_time << endl;
00158         //cout << "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" << endl;
00159 
00160         struct tm *local_time;
00161         local_time = localtime(&now);
00162         //cout << "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" << endl;
00163         //cout << "time now sec: " << local_time->tm_sec << endl;
00164         //cout << "time now min: " << local_time->tm_min << endl;
00165         //cout << "time now hour: "<< local_time->tm_hour << endl;
00166         //cout << "time now day: " << local_time->tm_mday << endl;
00167         //cout << "time now mon: " << local_time->tm_mon << endl;
00168         //cout << "time now year: "<< local_time->tm_year << endl;
00169         //cout << "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" << endl;
00170 
00171         Int_t time1 = (1900 + local_time->tm_year) * 10000 + (1 + local_time->tm_mon) * 100
00172                       + local_time->tm_mday;
00173         Int_t time2 = local_time->tm_hour * 10000 + local_time->tm_min * 100
00174                       + local_time->tm_sec;
00175 
00176         fEventHeader.SetEventHeaderGeneral(fEvtHeader->getRunId(),
00177                                            fEvtHeader->getEventId(), time1, time2);
00178     }
00179     else {
00180         cout << "fEvtHeader does not exit" << endl;
00181     }
00182     // ======================================== 
00183     // set event start time information
00184     // ======================================== 
00185     if (fRecEvTime != 0){
00186         fEventHeader.SetEventEvTime(fRecEvTime->estime(),fRecEvTime->status(),fRecEvTime->quality());
00187     }else{
00188         cout << "fRecEvTime does not exit" << endl;
00189     }
00190 
00191     // ======================================== 
00192     // set Mdc information
00193     // ======================================== 
00194     Double_t p = 0.0, pt = 0.0, px = 0.0, py = 0.0, pz = 0.0;
00195     for (Int_t i = 0; i < GetMdcTrackNum(recEvent); i++) {
00196         p  += GetMdcTrack(i,recEvent)->p();
00197         pt += GetMdcTrack(i,recEvent)->pxy();
00198         px += GetMdcTrack(i,recEvent)->px();
00199         py += GetMdcTrack(i,recEvent)->py();
00200         pz += GetMdcTrack(i,recEvent)->pz();
00201     }
00202     fEventHeader.SetEventMdc(p, pt, px, py, pz);
00203 
00204     // ======================================== 
00205     // set Emc information
00206     // ======================================== 
00207     Double_t t = 9999.0;
00208     Double_t e = 0.0;
00209     for (Int_t i = 0; i < GetEmcShowerNum(recEvent); i++) {
00210         e += GetEmcShower(i,recEvent)->energy();
00211     }
00212     fEventHeader.SetEventEmc(e);
00213     // ======================================== 
00214     // set digi and rec 
00215     // ======================================== 
00216     if (fDigiEvent != 0){
00217         SetHits();
00218         fEventHeader.SetEventMC(fDigiEvent->getFromMc());
00219     }
00220     if (recEvent != 0)
00221         SetTracks(recEvent);
00222 
00223 }
00224 
00225 //__________________________________________________________
00226 
00227 void BesEvent::SetHits() {
00228     if (gBesGeometry) {
00229         gBesGeometry->GetMdcROOTGeo()->SetHits();
00230         gBesGeometry->GetTofROOTGeo()->SetHits();
00231         gBesGeometry->GetEmcROOTGeo()->SetHits();
00232         gBesGeometry->GetMucROOTGeo()->SetHits();
00233     }
00234 }
00235 
00236 //__________________________________________________________
00237 
00238 void BesEvent::SetTracks(TDisTrack *recEvent) {
00239     SetMdcTracks(recEvent);
00240     SetTofTracks(recEvent);
00241     SetEmcShowers(recEvent);
00242     SetMucTracks(recEvent);
00243     SetExtTracks(recEvent);
00244 }
00245 
00246 //__________________________________________________________
00247 
00248 void BesEvent::SetMdcTracks(TDisTrack *recEvent) {
00249     if (fMdcTrackCol){
00250         for (int j = 0; j < fMdcTrackCol->GetEntries(); j++){
00251             delete      fMdcTrackCol->At(j);
00252         }
00253         fMdcTrackCol->Clear("C");
00254     }
00255     int mdc_no = recEvent->getMdcTrackNum();
00256     for (Int_t i = 0; i < mdc_no; i++) {
00257         const TRecMdcTrack* recTrack =recEvent->getRecMdcTrack(i);
00258         BesGeoTrack *mdcTrack = new BesGeoTrack();
00259         mdcTrack->SetTrackType(0);
00260 
00261         ConstructMdcTrackFromRec(mdcTrack, recTrack,recEvent);
00262         fMdcTrackCol->Add(mdcTrack);
00263     }
00264 }
00265 
00266 //__________________________________________________________
00267 
00268 void BesEvent::SetTofTracks(TDisTrack *recEvent) {
00269     if (fTofTrackCol) {
00270         for (int j = 0; j < fTofTrackCol->GetEntries(); j++){
00271             delete      fTofTrackCol->At(j);
00272         }
00273       fTofTrackCol->Clear("C");
00274     }
00275     int tof_no = recEvent->getTofTrackNum();
00276 
00277     for (Int_t i = 0; i < tof_no; i++) {
00278         const TRecTofTrack* recTrack = recEvent->getTofTrack(i);
00279         if ( !Is_tofCounter( recTrack->status())) continue;
00280         BesGeoTrack *tofTrack = new BesGeoTrack();
00281         tofTrack->SetTrackType(1);
00282 
00283         ConstructTofTrackFromRec(tofTrack, recTrack,recEvent);
00284         fTofTrackCol->Add(tofTrack);
00285     }
00286 }
00287 
00288 //__________________________________________________________
00289 
00290 void BesEvent::SetEmcShowers(TDisTrack *recEvent) {
00291     if (fEmcTrackCol) {
00292         for (int j = 0; j < fEmcTrackCol->GetEntries(); j++){
00293             delete      fEmcTrackCol->At(j);
00294         }
00295       fEmcTrackCol->Clear("C");
00296     }
00297     int emc_no = recEvent->getEmcShowerNum();
00298 
00299     for (Int_t i = 0; i < emc_no; i++) {
00300         const TRecEmcShower* recShower =recEvent->getEmcShower(i);
00301         BesGeoTrack *emcTrack = new BesGeoTrack();
00302         emcTrack->SetTrackType(2);
00303 
00304         ConstructEmcTrackFromRec(emcTrack, recShower);
00305         fEmcTrackCol->Add(emcTrack);
00306     }
00307 }
00308 
00309 //__________________________________________________________
00310 
00311 void BesEvent::SetMucTracks(TDisTrack *recEvent) {
00312     if (fMucTrackCol) {
00313         for (int j = 0; j < fMucTrackCol->GetEntries(); j++){
00314             delete      fMucTrackCol->At(j);
00315         }
00316       fMucTrackCol->Clear("C");
00317     }
00318     int muc_no = recEvent->getMucTrackNum();
00319     for (Int_t i = 0; i < muc_no; i++) {
00320         const TRecMucTrack* recTrack =recEvent->getMucTrack(i);
00321         BesGeoTrack *mucTrack = new BesGeoTrack();
00322         mucTrack->SetTrackType(3);
00323 
00324         ConstructMucTrackFromRec(mucTrack, recTrack);
00325         fMucTrackCol->Add(mucTrack);
00326     }
00327 }
00328 
00329 //__________________________________________________________
00330 
00331 void BesEvent::SetExtTracks(TDisTrack *recEvent) {
00332     //if (fExtTrackCol) fExtTrackCol->Clear("C");
00333 
00334     //for (Int_t i = 0; i < GetExtTrackNum(); i++) {
00335     //    const TExtTrack* recTrack = GetExtTrack(i);
00336     //    BesGeoTrack *extTrack = new BesGeoTrack();
00337     //    extTrack->SetTrackType(4);
00338 
00339     //    ConstructExtTrackFromRec(extTrack, recTrack);
00340     //    fExtTrackCol->Add(extTrack);
00341     //}
00342 }
00343 
00344 //__________________________________________________________
00345 
00346 void BesEvent::ConstructMdcTrackFromRec(BesGeoTrack *mdcTrack, const TRecMdcTrack *recTrack,TDisTrack *fRecEvent) {
00347 
00348     Double_t field  = -f_Magnetic;   // Tesla
00349     Double_t kvC    = 3.0e8; // light speed
00350     Int_t    charge = recTrack->charge();
00351     Double_t pt     = recTrack->pxy(); // GeV
00352     Double_t pz     = recTrack->pz();  // GeV
00353     Double_t pi     = TMath::Pi();
00354 
00355     // unit is "cm"
00356     Double_t orgx = recTrack->x()*10;
00357     Double_t orgy = recTrack->y()*10;
00358     Double_t orgz = recTrack->z()*10;
00359 
00360 
00361     Double_t mdcR   = ((TGeoTube*)gBesGeometry->GetMdcROOTGeo()->GetVolumeMdc()->GetShape())->GetRmax();
00362     Double_t mdcZ   = ((TGeoTube*)gBesGeometry->GetMdcROOTGeo()->GetVolumeMdc()->GetShape())->GetDz();
00363 
00364     Double_t radius,zStep;
00365     if (charge == 0) {
00366         radius = 1e9 ;    // cosmic ray test
00367         zStep = 1e9;
00368     }
00369     else {
00370         radius = (pt * 1.0e9 / kvC * 1e3) / fabs(charge * field) ;
00371         zStep = 2*pi*radius * fabs(pz/pt);
00372     }
00373     Double_t curvature = 1.0/radius;
00374     Double_t step = 10.0; // mm
00375     Double_t delt = step*(1.0e-3)/kvC;
00376 
00377     mdcTrack->AddPoint(orgx, orgy, orgz, 0.0);
00378     const Double_t *p;
00379     Int_t nStep = 0;
00380 
00381     Double_t x,y,z,t;
00382     x = orgx;
00383     y = orgy;
00384     z = orgz;
00385 
00386     if (charge == 0){  //cosmic ray test
00387         do {
00388             x = recTrack->helix(0)* 10 *
00389                 cos(recTrack->helix(1))
00390                 - nStep * step * sin(recTrack->helix(1));
00391             y = recTrack->helix(0)* 10 *
00392                 sin(recTrack->helix(1))
00393                 + nStep * step * cos(recTrack->helix(1));
00394             z = recTrack->helix(3)* 10 +
00395                 nStep * step * recTrack->helix(4);
00396 
00397             mdcTrack->AddPoint(x, y, z, delt*nStep);
00398             Double_t mp[3];
00399             mp[0] = 0;
00400             mp[1] = 0;
00401             mp[2] = 0;
00402             mdcTrack->PaintMarker(mp);
00403             mdcTrack->SetMarkerColor(kBlack);
00404             mdcTrack->SetMarkerSize(10);
00405             mdcTrack->SetLineColor(kBlack);
00406 
00407             nStep++;
00408         }
00409         while ( (x*x + y*y) < mdcR*mdcR && fabs(z) < mdcZ );
00410 
00411         nStep = 0;
00412         do {
00413             x = recTrack->helix(0)* 10 *
00414                 cos(recTrack->helix(1))
00415                 - nStep * step * sin(recTrack->helix(1));
00416             y = recTrack->helix(0)* 10 *
00417                 sin(recTrack->helix(1))
00418                 + nStep * step * cos(recTrack->helix(1));
00419             z = recTrack->helix(3)* 10 +
00420                 nStep * step * recTrack->helix(4);
00421 
00422             mdcTrack->AddPoint(x, y, z, delt*nStep);
00423             Double_t mp[3];
00424             mp[0] = 0;
00425             mp[1] = 0;
00426             mp[2] = 0;
00427             mdcTrack->PaintMarker(mp);
00428             mdcTrack->SetMarkerColor(kBlack);
00429             mdcTrack->SetMarkerSize(10);
00430             mdcTrack->SetLineColor(kRed);
00431 
00432         }
00433         while ( (x*x + y*y) < mdcR*mdcR && fabs(z) < mdcZ );
00434     }
00435     else{    //normal track
00436         TGeoHelix helix(curvature, zStep, charge);
00437         helix.InitPoint(orgx, orgy, orgz);
00438 
00439         helix.InitDirection(recTrack->px(), recTrack->py(), recTrack->pz(), kFALSE);
00440         //helix.InitDirection(1000, 10, 10, kFALSE);
00441         helix.SetField(0.0, 0.0, field, kFALSE);
00442 
00443         do {
00444             // helix Step before GetCurrentPoint, or first point will be wrong
00445             helix.Step(step);
00446             p = helix.GetCurrentPoint();
00447 
00448             mdcTrack->AddPoint(p[0], p[1], p[2], delt*nStep);
00449             Double_t mp[3];
00450             mp[0] = p[0];
00451             mp[1] = p[1];
00452             mp[2] = p[2];
00453             mdcTrack->PaintMarker(mp);
00454             mdcTrack->SetMarkerColor(kBlack);
00455             mdcTrack->SetMarkerSize(10);
00456             nStep++;
00457         }
00458         while ( (p[0]*p[0] + p[1]*p[1]) < mdcR*mdcR && fabs(p[2]) < mdcZ );
00459 
00460     }
00461 
00462     // Add associated mdc hits
00463     vector<UInt_t> vecHits(0);
00464     const TObjArray *recMdcHitCol = fRecEvent->getRecMdcHitCol();
00465     for (Int_t i = 0; i < recMdcHitCol->GetEntriesFast(); i++){
00466         TRecMdcHit *recMdcHit = (TRecMdcHit*)recMdcHitCol->At(i);
00467         Int_t recHitId = recMdcHit->getTrkId();
00468         Int_t recTrkId = recTrack->trackId();
00469         if (recHitId == recTrkId) vecHits.push_back(recMdcHit->getMdcId());
00470     }
00471     for (Int_t i = 0; i < (Int_t)vecHits.size(); i++) {
00472         Identifier aMdcID( vecHits[i] );
00473         int layer = MdcID::layer( aMdcID );
00474         int wire  = MdcID::wire( aMdcID );
00475 
00476         Mdc2DWire* aHit = gBesGeometry->GetMdcROOTGeo()->Get2DWire(layer, wire);
00477         mdcTrack->AddHit( aHit );
00478     }
00479 
00480     mdcTrack->SetCharge(recTrack->charge());
00481 
00482     // Add mdc track info
00483     char data[100];
00484     TString info;
00485 
00486     info = TString("MdcTrack ");
00487     info += recTrack->trackId();
00488     mdcTrack->AddInfo( info );
00489 
00490     sprintf(data, "charge=%i, status=%i", recTrack->charge(), recTrack->stat());
00491     mdcTrack->AddInfo( TString(data) );
00492 
00493     sprintf(data, "P=%-.3f GeV, Pt=%-.3f GeV", recTrack->p(), recTrack->pxy());
00494     mdcTrack->AddInfo( TString(data) );
00495 
00496     //sprintf(data, "Pt= %-.3f GeV", recTrack->pxy());
00497     //mdcTrack->AddInfo( TString(data) );
00498 
00499     sprintf(data, "Pxyz=(%-.3f,%-.3f,%-.3f) GeV", recTrack->px(),recTrack->py(),recTrack->pz());
00500     mdcTrack->AddInfo( TString(data) );
00501 
00502     sprintf(data, "helix(%-.3f,%-.3f,%-.3f,%-.3f,%-.3f)", recTrack->helix(0),recTrack->helix(1),recTrack->helix(2),recTrack->helix(3), recTrack->helix(4));
00503     mdcTrack->AddInfo( TString(data) );
00504 
00505     sprintf(data, "Origin (%-.3f, %-.3f, %-.3f) cm", orgx/10, orgy/10, orgz/10); //recTrack->x(), recTrack->y(), recTrack->z());
00506     mdcTrack->AddInfo( TString(data) );
00507 
00508     sprintf(data, "#phi=%-.3f #theta=%-.3f cos#theta=%-.3f", recTrack->phi(),recTrack->theta(),cos(recTrack->theta()));
00509     mdcTrack->AddInfo( TString(data) );
00510 
00511 
00512     sprintf(data, "nHit=%i, #chi^{2}= %-.3f",recTrack->ndof()+5, recTrack->chi2());
00513     mdcTrack->AddInfo( TString(data) );
00514 
00515     // sprintf(data, "ndof= %i, rms= %-.3f", recTrack->ndof(), recTrack->rms());
00516     // mdcTrack->AddInfo( TString(data) );
00517 
00518     // sprintf(data, "extrp= %-.3f, pathL= %-.3f", recTrack->extrp(), recTrack->pathLength());
00519     // mdcTrack->AddInfo( TString(data) );
00520 
00521     //sprintf(data, "nHits= %i, nSter= %i", recTrack->getNhits(), recTrack->nster());
00522     mdcTrack->AddInfo( TString(data) );
00523 
00524     mdcTrack->CloseInfo();
00525 }
00526 
00527 //__________________________________________________________
00528 
00529 //void BesEvent::ConstructTofTrackFromRec(BesGeoTrack *tofTrack, const TRecETofTrack *recETrack){
00530 //
00531 //    // Add associated tof hits
00532 //    //vector<Int_t> vecBHits = recTrack->vecBHits();
00533 //    //vector<Int_t> vecEHits = recTrack->vecEHits();
00534 //    //vector<Int_t> vecHits;
00535 //    //for (Int_t i = 0; i < (Int_t)vecBHits.size(); i++)
00536 //    //    vecHits.push_back( vecBHits[i] );
00537 //    //for (Int_t i = 0; i < (Int_t)vecEHits.size(); i++)
00538 //    //    vecHits.push_back( vecEHits[i] );
00539 //
00540 //    vector<Int_t> vecHits(0);
00541 //    const TObjArray *recETofTrackCol = fRecEvent->getETofTrackCol();
00542 //    for (Int_t i = 0; i < recETofTrackCol->GetEntriesFast(); i++){
00543 //        TRecETofTrack *recHit = (TRecETofTrack*)recETofTrackCol->At(i);
00544 //        if ( !Is_tofCounter( recHit->status())) continue;
00545 //
00546 //        Int_t recHitId = recHit->trackID();
00547 //        Int_t recTrkId = recETrack->trackID();
00548 //        if (recHitId == recTrkId) vecHits.push_back(recHit->tofID());
00549 //    }
00550 //
00551 //    TGeoPhysicalNode *phyNode = 0;
00552 //    Double_t x=0.0, y=0.0, z=0.0;
00553 //    Int_t nHits = vecHits.size();
00554 //    for (Int_t i = 0; i < nHits; i++) {
00555 //        Identifier aTofID( vecHits[i] );
00556 //
00557 //        int part;
00558 //        if (recETrack->tofID() < 48) part   = 0;
00559 //        else part = 2;
00560 //
00561 //        int layer  = TofID::layer( aTofID );
00562 //        int scin   = TofID::phi_module( aTofID );
00563 //
00564 //        Tof2DScin* aHit = gBesGeometry->GetTofROOTGeo()->Get2DScin(part, layer, scin);
00565 //        tofTrack->AddHit( aHit );
00566 //
00567 //        // calculate average position
00568 //        Double_t local[3] = {0.0, 0.0, 0.0};
00569 //        Double_t master[3] = {0.0, 0.0, 0.0};
00570 //        phyNode = gBesGeometry->GetTofROOTGeo()->GetPhysicalScin(part, layer, scin);
00571 //        if (phyNode)
00572 //            phyNode->GetMatrix(-1*phyNode->GetLevel())->LocalToMaster(local, &master[0]);
00573 //        // transform to top
00574 //        x += master[0];
00575 //        y += master[1];
00576 //        z += master[2];
00577 //    }
00578 //    x /= nHits;
00579 //    y /= nHits;
00580 //    z /= nHits;
00581 //
00582 //    //if (recTrack->getPart() == 1) {
00583 //    //                z = 0.5*(recTrack->getZHit1() + recTrack->getZHit2());
00584 //    //}
00585 //    //else {
00586 //    Double_t curR = TMath::Sqrt(x*x+y*y);
00587 //    Double_t newR = recETrack->zrhit();
00588 //    if (curR != 0.0) {
00589 //        x = x * (newR/curR);
00590 //        y = y * (newR/curR);
00591 //    }
00592 //
00593 //
00594 //    tofTrack->SetMarker(x, y, z);
00595 //
00596 //    // Add tof track info
00597 //    char data[100];
00598 //    TString info;
00599 //
00600 //    info = TString("TofTrack ");
00601 //    info += recETrack->trackID();
00602 //    tofTrack->AddInfo(info);
00603 //
00604 //    //sprintf(data, "Part = %i, Qual1 = %i, Qual2 = %i", recTrack->getPart(), recTrack->getQual1(), recTrack->getQual2());
00605 //    //tofTrack->AddInfo( TString(data) );
00606 //
00607 //    //sprintf(data, "Tof   = (%-.3f #pm %-.3f) ns", recTrack->getTof(), recTrack->getETof());
00608 //    //tofTrack->AddInfo( TString(data) );
00609 //
00610 //    //sprintf(data, "Tof1 = (%-.3f #pm %-.3f) ns", recTrack->getTof1(), recTrack->getETof1());
00611 //    //tofTrack->AddInfo( TString(data) );
00612 //
00613 //    //sprintf(data, "Tof2 = (%-.3f #pm %-.3f) ns", recTrack->getTof2(), recTrack->getETof2());
00614 //    //tofTrack->AddInfo( TString(data) );
00615 //
00616 //    //sprintf(data, "Path(1=%-.2f, 2=%-.2f) mm", recTrack->getPath1(), recTrack->getPath2());
00617 //    //tofTrack->AddInfo( TString(data) );
00618 //
00619 //    //sprintf(data, "Pulse(1=%-.0f, 2=%-.0f)", recTrack->getPh1(), recTrack->getPh2());
00620 //    //tofTrack->AddInfo( TString(data) );
00621 //
00622 //    //sprintf(data, "ZHit(1=%-.2fmm, 2=%-.2f)mm", recTrack->getZHit1(), recTrack->getZHit2());
00623 //    //tofTrack->AddInfo( TString(data) );
00624 //
00625 //    ////sprintf(data, "ZTDC1=%-.2fmm, ZTDC2=%-.2fmm", recTrack->getZTDC1(), recTrack->getZTDC2());
00626 //    ////tofTrack->AddInfo( TString(data) );
00627 //
00628 //    //sprintf(data, "RHit = %-.3f, Beta = %-.3f", recTrack->getRHit(), recTrack->getBeta());
00629 //    //tofTrack->AddInfo( TString(data) );
00630 //
00631 //    //sprintf(data, "w_e = %-.2f%%, w_mu = %-.2f%%", recTrack->getWeightElectron()*100.0, recTrack->getWeightMuon()*100.0);
00632 //    //tofTrack->AddInfo( TString(data) );
00633 //
00634 //    //sprintf(data, "w_pi = %-.2f%%, w_K = %-.2f%%", recTrack->getWeightPion()*100.0, recTrack->getWeightKaon()*100.0);
00635 //    //tofTrack->AddInfo( TString(data) );
00636 //
00637 //    //sprintf(data, "w_P = %-.2f%%", recTrack->getWeightProton()*100.0);
00638 //    //tofTrack->AddInfo( TString(data) );
00639 //
00640 //    tofTrack->CloseInfo();
00641 //}
00642 
00643 
00644 //__________________________________________________________
00645 void BesEvent::ConstructTofTrackFromRec(BesGeoTrack *tofTrack,
00646                                         const TRecTofTrack *recTrack,
00647                                         TDisTrack *fRecEvent){
00648 
00649     vector<Int_t> vecBHits(0);
00650     vector<Int_t> vecEHits(0);
00651 
00652     const TObjArray *recTofTrackCol = fRecEvent->getTofTrackCol();
00653     for (Int_t i = 0; i < recTofTrackCol->GetEntriesFast(); i++){
00654         TRecTofTrack *recHit = (TRecTofTrack*)recTofTrackCol->At(i);
00655         if ( !Is_tofCounter( recHit->status())) continue;
00656 
00657         Int_t recHitId = recHit->trackID();
00658         Int_t recTrkId = recTrack->trackID();
00659         if (recHitId == recTrkId) {
00660             if ( Is_tofBarrel( recHit->status() ) ) {
00661                 vecBHits.push_back(recHit->tofID());
00662             }
00663             else {
00664                 vecEHits.push_back(recHit->tofID());
00665             }
00666         }
00667     }
00668 
00669     TGeoPhysicalNode *phyNode = 0;
00670     Double_t x=0.0, y=0.0, z=0.0;
00671 
00672     Int_t nHits;
00673     if (vecBHits.size()){
00674         nHits = vecBHits.size();
00675         for (Int_t i = 0; i < nHits; i++) {
00676 
00677             int part = 1;
00678             int layer = 0;
00679             int scin = 0;
00680             if ( ( vecBHits[i] >= 0 ) && ( vecBHits[i] <= 87 ) ) {
00681                 layer = 0;
00682                 scin  = vecBHits[i];
00683             }
00684             else {
00685                 layer = 1;
00686                 scin  = vecBHits[i] - 88;
00687             }
00688 
00689             Tof2DScin* aHit = gBesGeometry->GetTofROOTGeo()->Get2DScin(part, layer, scin);
00690             tofTrack->AddHit( aHit );
00691 
00692             // calculate average position
00693             Double_t local[3] = {0.0, 0.0, 0.0};
00694             Double_t master[3] = {0.0, 0.0, 0.0};
00695             phyNode = gBesGeometry->GetTofROOTGeo()->GetPhysicalScin(part, layer, scin);
00696             if (phyNode)
00697                 phyNode->GetMatrix(-1*phyNode->GetLevel())->LocalToMaster(local, &master[0]);
00698             // transform to top
00699             x += master[0];
00700             y += master[1];
00701             z += master[2];
00702         }
00703         x /= nHits;
00704         y /= nHits;
00705         z /= nHits;
00706 
00707         z = recTrack->zrhit();
00708 
00709         tofTrack->SetMarker(x, y, z);
00710     }
00711 
00712     else if (vecEHits.size()){
00713         nHits = vecEHits.size();
00714         for (Int_t i = 0; i < nHits; i++) {
00715 
00716             int part = 0;
00717             int layer = 0;
00718             int scin = 0;
00719             if ( ( vecEHits[i] >= 0 ) && ( vecEHits[i] <= 47 ) ) {
00720                 part = 2;
00721                 scin  = vecEHits[i];
00722             }
00723             else {
00724                 part = 0;
00725                 scin  = vecEHits[i] - 48;
00726             }
00727 
00728 
00729             Tof2DScin* aHit = gBesGeometry->GetTofROOTGeo()->Get2DScin(part, layer, scin);
00730             tofTrack->AddHit( aHit );
00731 
00732             // calculate average position
00733             Double_t local[3] = {0.0, 0.0, 0.0};
00734             Double_t master[3] = {0.0, 0.0, 0.0};
00735             phyNode = gBesGeometry->GetTofROOTGeo()->GetPhysicalScin(part, layer, scin);
00736             if (phyNode)
00737                 phyNode->GetMatrix(-1*phyNode->GetLevel())->LocalToMaster(local, &master[0]);
00738             // transform to top
00739             x += master[0];
00740             y += master[1];
00741             z += master[2];
00742         }
00743         x /= nHits;
00744         y /= nHits;
00745         z /= nHits;
00746 
00747         tofTrack->SetMarker(x, y, z);
00748     }
00749 
00750     // Add tof track info
00751     char data[100];
00752     TString info;
00753 
00754     info = TString("TofTrack ");
00755     info += recTrack->trackID();
00756     tofTrack->AddInfo(info);
00757 
00758     //sprintf(data, "Part = %i, Qual1 = %i, Qual2 = %i", recTrack->getPart(), recTrack->getQual1(), recTrack->getQual2());
00759     //tofTrack->AddInfo( TString(data) );
00760 
00761     //sprintf(data, "Tof   = (%-.3f #pm %-.3f) ns", recTrack->getTof(), recTrack->getETof());
00762     //tofTrack->AddInfo( TString(data) );
00763 
00764     //sprintf(data, "Tof1 = (%-.3f #pm %-.3f) ns", recTrack->getTof1(), recTrack->getETof1());
00765     //tofTrack->AddInfo( TString(data) );
00766 
00767     //sprintf(data, "Tof2 = (%-.3f #pm %-.3f) ns", recTrack->getTof2(), recTrack->getETof2());
00768     //tofTrack->AddInfo( TString(data) );
00769 
00770     //sprintf(data, "Path(1=%-.2f, 2=%-.2f) mm", recTrack->getPath1(), recTrack->getPath2());
00771     //tofTrack->AddInfo( TString(data) );
00772 
00773     //sprintf(data, "Pulse(1=%-.0f, 2=%-.0f)", recTrack->getPh1(), recTrack->getPh2());
00774     //tofTrack->AddInfo( TString(data) );
00775 
00776     //sprintf(data, "ZHit(1=%-.2fmm, 2=%-.2f)mm", recTrack->getZHit1(), recTrack->getZHit2());
00777     //tofTrack->AddInfo( TString(data) );
00778 
00781 
00782     //sprintf(data, "RHit = %-.3f, Beta = %-.3f", recTrack->getRHit(), recTrack->getBeta());
00783     //tofTrack->AddInfo( TString(data) );
00784 
00785     //sprintf(data, "w_e = %-.2f%%, w_mu = %-.2f%%", recTrack->getWeightElectron()*100.0, recTrack->getWeightMuon()*100.0);
00786     //tofTrack->AddInfo( TString(data) );
00787 
00788     //sprintf(data, "w_pi = %-.2f%%, w_K = %-.2f%%", recTrack->getWeightPion()*100.0, recTrack->getWeightKaon()*100.0);
00789     //tofTrack->AddInfo( TString(data) );
00790 
00791     //sprintf(data, "w_P = %-.2f%%", recTrack->getWeightProton()*100.0);
00792     //tofTrack->AddInfo( TString(data) );
00793 
00794     tofTrack->CloseInfo();
00795 }
00796 
00797 void BesEvent::ConstructEmcTrackFromRec(BesGeoTrack *emcTrack, const TRecEmcShower *recTrack) {
00798 
00799     Double_t x=0.0, y=0.0, z=0.0;
00800     x = recTrack->x() * 10.0;
00801     y = recTrack->y() * 10.0;
00802     z = recTrack->z() * 10.0;
00803 
00804     emcTrack->SetMarker(x, y, z);
00805     // Add associated emc hits
00806     vector<Int_t> vecHits(0);
00807     map<Int_t, Double_t> cellMap = recTrack->cellIdMap();
00808     map<Int_t, Double_t>::iterator iCellMap;
00809     for (iCellMap = cellMap.begin(); iCellMap != cellMap.end(); iCellMap++){
00810         Int_t cellId = iCellMap->first;
00811         vecHits.push_back(cellId);
00812     }
00813     for (Int_t i = 0; i < (Int_t)vecHits.size(); i++) {
00814         Identifier aEmcID( vecHits[i] );
00815         int part  = EmcID::barrel_ec( aEmcID );
00816         int theta = EmcID::theta_module( aEmcID );
00817         int phi   = EmcID::phi_module( aEmcID );
00818         if (part == 1) theta = 43-theta; // 43 = m_kThetaBr-1
00819 
00820         Emc2DCrystal* aHit = gBesGeometry->GetEmcROOTGeo()->Get2DCrystal(part, phi, theta);
00821         emcTrack->AddHit( aHit );
00822     }
00823 
00824     // Add Emc track info
00825     char data[100];
00826     TString info;
00827 
00828     info = TString("EmcShower ");
00829     info += recTrack->trackId();
00830     emcTrack->AddInfo(info);
00831 
00832     sprintf(data, "nHits = %i, status = %i", recTrack->numHits(), recTrack->status());
00833     emcTrack->AddInfo( TString(data) );
00834 
00835     sprintf(data, "energy= (%.2f #pm %-.2f) MeV", recTrack->energy()*1000.0, recTrack->dE()*1000.0);
00836     emcTrack->AddInfo( TString(data) );
00837 
00838     Identifier aEmcID( recTrack->cellId() );
00839     int part  = EmcID::barrel_ec( aEmcID );
00840     int theta = EmcID::theta_module( aEmcID );
00841     int phi   = EmcID::phi_module( aEmcID );
00842 
00843     sprintf(data, "cell Id= (%i, #theta %i, #phi %i)", part, theta, phi);
00844     emcTrack->AddInfo( TString(data) );
00845 
00846     sprintf(data, "module = %i", recTrack->module());
00847     emcTrack->AddInfo( TString(data) );
00848 
00849     //sprintf(data, "x = (%-.3f #pm %-.3f) mm", x, recTrack->dx());
00850     //emcTrack->AddInfo( TString(data) );
00851 
00852     //sprintf(data, "y = (%-.3f #pm %-.3f) mm", y, recTrack->dy());
00853     //emcTrack->AddInfo( TString(data) );
00854 
00855     //sprintf(data, "z = (%-.3f #pm %-.3f) mm", z, recTrack->dz());
00856     //emcTrack->AddInfo( TString(data) );
00857 
00858     sprintf(data, "#theta = (%-.3f #pm %-.3f)", recTrack->theta(), recTrack->dtheta());
00859     emcTrack->AddInfo( TString(data) );
00860 
00861     sprintf(data, "#phi = (%-.3f #pm %-.3f)", recTrack->phi(), recTrack->dphi());
00862     emcTrack->AddInfo( TString(data) );
00863 
00864 //   sprintf(data, "cos (x=%-.3f, y=%-.3f, z=%-.3f)", recTrack->cosx(), recTrack->cosy(), recTrack->cosz());   //from boss6.1.0. no these varibles
00865 //   emcTrack->AddInfo( TString(data) );
00866 
00867     emcTrack->CloseInfo();
00868 }
00869 
00870 //__________________________________________________________
00871 
00872 void BesEvent::ConstructMucTrackFromRec(BesGeoTrack *mucTrack, const TRecMucTrack *recTrack) {
00873     if (recTrack->depth() <= 0.0) return;  // bad track
00874 
00875     Double_t field  = 1e-3;   // Tesla
00876     Double_t kvC    = 3.0e8; // light speed
00877     Int_t    charge = 1;
00878     Double_t pz     = recTrack->pz();  // GeV
00879     Double_t pt     =
00880         sqrt(recTrack->px()*recTrack->px() + recTrack->py()*recTrack->py()); // GeV
00881     Double_t pi     = TMath::Pi();
00882 
00883     Double_t mucR   =
00884         ((TGeoBBox*)gBesGeometry->GetMucROOTGeo()->GetVolumeMuc()->GetShape())->GetDX();
00885     Double_t mucZ   =
00886         ((TGeoBBox*)gBesGeometry->GetMucROOTGeo()->GetVolumeMuc()->GetShape())->GetDZ();
00887 
00888     Double_t radius = 1.0e+9;
00889     Double_t curvature = 1.0/radius;
00890     Double_t zStep = 2*pi*radius * fabs(pz/pt);
00891     Double_t step = 1.0; // mm
00892     Double_t delt = step*(1.0e-3)/kvC;
00893 
00894     TGeoHelix helix(curvature, zStep, charge);
00895 
00896     Double_t x = recTrack->xPos() * 10.0;
00897     Double_t y = recTrack->yPos() * 10.0;
00898     Double_t z = recTrack->zPos() * 10.0;
00899 
00900     helix.InitPoint(x, y, z);
00901     helix.InitDirection(recTrack->px(), recTrack->py(), recTrack->pz(), kFALSE);
00902     helix.SetField(0.0, 0.0, field, kFALSE);
00903 
00904     mucTrack->AddPoint(x, y, z, 0.0);
00905     const Double_t *p;
00906     Int_t nStep = 0;
00907     do {
00908         // helix Step before GetCurrentPoint, or first point will be wrong
00909         helix.Step(step);
00910         p = helix.GetCurrentPoint();
00911         mucTrack->AddPoint(p[0], p[1], p[2], delt*nStep);
00912         Double_t mp[3];
00913         mp[0] = p[0];
00914         mp[1] = p[1];
00915         mp[2] = p[2];
00916         mucTrack->PaintMarker(mp);
00917         mucTrack->SetMarkerColor(kBlack);
00918         mucTrack->SetMarkerSize(10);
00919         nStep++;
00920     }
00921     while ( (p[0]*p[0] + p[1]*p[1]) < mucR*mucR && fabs(p[2]) < mucZ );
00922 
00923     // Add associated muc hits
00924     vector<Int_t> vecHits = recTrack->vecHits();
00925     for (Int_t i = 0; i < (Int_t)vecHits.size(); i++) {
00926         Identifier aMucID( vecHits[i] );
00927         int part  = MucID::part(  aMucID );
00928         int seg   = MucID::seg(   aMucID );
00929         int gap   = MucID::gap(   aMucID );
00930         int strip = MucID::strip( aMucID );
00931 
00932         Muc2DStrip* aHit = gBesGeometry->GetMucROOTGeo()->Get2DStrip(part, seg, gap, strip);
00933         mucTrack->AddHit( aHit );
00934     }
00935 
00936     mucTrack->SetCharge(charge);
00937 
00938     // Add Muc track info
00939     char data[100];
00940     TString info;
00941 
00942     info = TString("MucTrack ");
00943     info += recTrack->trackId();
00944     mucTrack->AddInfo(info);
00945 
00946     sprintf(data, "nHits= %i, maxHits= %i, nLayers= %i", recTrack->numHits(), recTrack->maxHitsInLayer(), recTrack->numLayers());
00947     mucTrack->AddInfo( TString(data) );
00948 
00949     sprintf(data, "lastLayer (br= %i, ec= %i)", recTrack->brLastLayer(), recTrack->ecLastLayer());
00950     mucTrack->AddInfo( TString(data) );
00951 
00952     sprintf(data, "depth = %.3f cm", recTrack->depth());
00953     mucTrack->AddInfo( TString(data) );
00954 
00955     sprintf(data, "#chi^{2}= %-.3f, dof= %i, rms= %-.3f", recTrack->chi2(), recTrack->dof(), recTrack->rms());
00956     mucTrack->AddInfo( TString(data) );
00957 
00958     sprintf(data, "Origin (%-.2f, %-.2f, %-.2f) cm", recTrack->xPos(), recTrack->yPos(), recTrack->zPos());
00959     mucTrack->AddInfo( TString(data) );
00960 
00961     sprintf(data, "p (%-.3f, %-.3f, %-.3f) GeV", recTrack->px(), recTrack->py(), recTrack->pz());
00962     mucTrack->AddInfo( TString(data) );
00963 
00964     mucTrack->CloseInfo();
00965 }
00966 
00967 //__________________________________________________________
00968 
00969 //void BesEvent::ConstructExtTrackFromRec(BesGeoTrack *extTrack, const TExtTrack *recTrack) {
00970 //
00971 //    extTrack->AddPoint(recTrack->GetTof1PositionX(),
00972 //                       recTrack->GetTof1PositionY(),
00973 //                       recTrack->GetTof1PositionZ(),
00974 //                       0.0);
00975 //    extTrack->AddPoint(recTrack->GetTof2PositionX(),
00976 //                       recTrack->GetTof2PositionY(),
00977 //                       recTrack->GetTof2PositionZ(),
00978 //                       0.1);
00979 //    extTrack->AddPoint(recTrack->GetEmcPositionX(),
00980 //                       recTrack->GetEmcPositionY(),
00981 //                       recTrack->GetEmcPositionZ(),
00982 //                       0.2);
00983 //    extTrack->AddPoint(recTrack->GetMucPositionX(),
00984 //                       recTrack->GetMucPositionY(),
00985 //                       recTrack->GetMucPositionZ(),
00986 //                       0.3);
00987 //
00988 //    // Add Ext track info
00989 //    char data[100];
00990 //    TString info;
00991 //
00992 //    info = TString("ExtTrack ");
00993 //    info += recTrack->GetTrackId();
00994 //    extTrack->AddInfo(info);
00995 //
00996 //    sprintf(data, "Tof1 pos (%-.2f, %-.2f, %-.2f) mm",
00997 //            recTrack->GetTof1PositionX(), recTrack->GetTof1PositionY(), recTrack->GetTof1PositionZ());
00998 //    extTrack->AddInfo( TString(data) );
00999 //
01000 //    sprintf(data, "Tof2 pos (%-.2f, %-.2f, %-.2f) mm",
01001 //            recTrack->GetTof2PositionX(), recTrack->GetTof2PositionY(), recTrack->GetTof2PositionZ());
01002 //    extTrack->AddInfo( TString(data) );
01003 //
01004 //    sprintf(data, "Emc pos (%-.2f, %-.2f, %-.2f) mm",
01005 //            recTrack->GetEmcPositionX(), recTrack->GetEmcPositionY(), recTrack->GetEmcPositionZ());
01006 //    extTrack->AddInfo( TString(data) );
01007 //
01008 //    sprintf(data, "Muc pos (%-.2f, %-.2f, %-.2f) mm",
01009 //            recTrack->GetMucPositionX(), recTrack->GetMucPositionY(), recTrack->GetMucPositionZ());
01010 //    extTrack->AddInfo( TString(data) );
01011 //
01012 //    sprintf(data, "Tof1 p (%-.3f, %-.3f, %-.3f) GeV",
01013 //            recTrack->GetTof1MomentumX()/1000.0, recTrack->GetTof1MomentumY()/1000.0, recTrack->GetTof1MomentumZ()/1000.0);
01014 //    extTrack->AddInfo( TString(data) );
01015 //
01016 //    sprintf(data, "Tof2 p (%-.3f, %-.3f, %-.3f) GeV",
01017 //            recTrack->GetTof2MomentumX()/1000.0, recTrack->GetTof2MomentumY()/1000.0, recTrack->GetTof2MomentumZ()/1000.0);
01018 //    extTrack->AddInfo( TString(data) );
01019 //
01020 //    sprintf(data, "Emc p (%-.3f, %-.3f, %-.3f) GeV",
01021 //            recTrack->GetEmcMomentumX()/1000.0, recTrack->GetEmcMomentumY()/1000.0, recTrack->GetEmcMomentumZ()/1000.0);
01022 //    extTrack->AddInfo( TString(data) );
01023 //
01024 //    sprintf(data, "Muc p (%-.3f, %-.3f, %-.3f) GeV",
01025 //            recTrack->GetMucMomentumX()/1000.0, recTrack->GetMucMomentumY()/1000.0, recTrack->GetMucMomentumZ()/1000.0);
01026 //    extTrack->AddInfo( TString(data) );
01027 //
01028 //    extTrack->CloseInfo();
01029 //}
01030 
01031 
01032 //__________________________________________________________
01033 
01034 void BesEvent::DrawHits(Option_t *option) {
01035     if (gBesGeometry) {
01036         gBesGeometry->GetMdcROOTGeo()->DrawHits(option);
01037         gBesGeometry->GetTofROOTGeo()->DrawHits(option);
01038         gBesGeometry->GetEmcROOTGeo()->DrawHits(option);
01039         gBesGeometry->GetMucROOTGeo()->DrawHits(option);
01040     }
01041 }
01042 
01043 //__________________________________________________________
01044 
01045 void BesEvent::DrawTracks(Option_t *option) {
01046 
01047     BesView *view = (BesView*)gPad->GetView();
01048 
01049     if (view && view->GetVisTracksGlobal()) {
01050 
01051         if (view->GetVisTracksMdc()) {
01052             for (Int_t i = 0; i < fMdcTrackCol->GetEntries(); i++) {
01053                 BesGeoTrack *track = (BesGeoTrack*)fMdcTrackCol->At(i);
01054                 track->Draw();
01055             }
01056         }
01057 
01058         if (view->GetVisTracksTof()) {
01059             for (Int_t i = 0; i < fTofTrackCol->GetEntries(); i++) {
01060                 BesGeoTrack *track = (BesGeoTrack*)fTofTrackCol->At(i);
01061                 track->Draw();
01062             }
01063         }
01064 
01065         if (view->GetVisTracksEmc()) {
01066             for (Int_t i = 0; i < fEmcTrackCol->GetEntries(); i++) {
01067                 BesGeoTrack *track = (BesGeoTrack*)fEmcTrackCol->At(i);
01068                 track->Draw();
01069             }
01070         }
01071 
01072         if (view->GetVisTracksMuc()) {
01073             for (Int_t i = 0; i < fMucTrackCol->GetEntries(); i++) {
01074                 BesGeoTrack *track = (BesGeoTrack*)fMucTrackCol->At(i);
01075                 track->Draw();
01076             }
01077         }
01078 
01079         if (view->GetVisTracksExt()) {
01080             for (Int_t i = 0; i < fExtTrackCol->GetEntries(); i++) {
01081                 BesGeoTrack *track = (BesGeoTrack*)fExtTrackCol->At(i);
01082                 track->Draw();
01083             }
01084         }
01085     }
01086 }
01087 
01088 //__________________________________________________________
01089 
01090 void BesEvent::Print(Option_t *option) {
01091     //
01092     // Print event information
01093     //
01094     // Options available:
01095     //   ''               - quiet, i.e. only numbers of hits and tracks etc. (default)
01096     //   'ALL'            - very detailed output (might be hundreds of lines!)
01097     //   'Digi'           - only Digi information
01098     //   'Dst'            - only Dst information
01099     //
01100     TString opt = option;
01101     opt.ToUpper();
01102     Int_t i;
01103 
01104     //cout << endl
01105     // << "==========================================================" << endl
01106     // << "Run:                            " << GetRun() << endl
01107     // << "Event:                          " << GetEvent() << endl
01108     // << "----------------------------------------------------------" << endl
01109     // << "Mdc digis:                      " << GetMdcDigiNum() << endl
01110     // << "Tof digis:                      " << GetTofDigiNum() << endl
01111     // << "Emc digis:                      " << GetEmcDigiNum() << endl
01112     // << "Muc digis:                      " << GetMucDigiNum() << endl
01113     // << "Mdc tracks:                     " << GetMdcTrackNum() << endl
01114     // << "Tof tracks:                     " << "debug++++++" /*GetTofTrackNum()*/ << endl
01115     // << "Emc tracks:                     " << GetEmcShowerNum() << endl
01116     // << "Muc tracks:                     " << GetMucTrackNum() << endl
01117     // << "Ext tracks:                     " << GetExtTrackNum() << endl
01118     // << "Dedx :                          " << GetDedxNum() << endl
01119     // << "----------------------------------------------------------" << endl;
01120 
01121     if ( opt.Contains("ALL") || opt.Contains("Digi") ) {
01122         for ( i = 0; i < GetMdcDigiNum(); i++ ) GetMdcDigi(i)->Print();
01123         for ( i = 0; i < GetTofDigiNum(); i++ ) GetTofDigi(i)->Print();
01124         for ( i = 0; i < GetEmcDigiNum(); i++ ) GetEmcDigi(i)->Print();
01125         for ( i = 0; i < GetMucDigiNum(); i++ ) GetMucDigi(i)->Print();
01126     }
01127 
01128     /* if ( opt.Contains("ALL") || opt.Contains("Dst") ) {
01129          for ( i = 0; i < GetMdcTrackNum(); i++ ) GetMdcTrack(i)->Print();
01130          // Tof -> BTof ETof
01131          //for ( i = 0; i < GetTofTrackNum(); i++ ) GetTofTrack(i)->Print();
01132          for ( i = 0; i < GetEmcShowerNum(); i++ ) GetEmcShower(i)->Print();
01133          for ( i = 0; i < GetMucTrackNum(); i++ ) GetMucTrack(i)->Print();
01134          cout << "wait for TRecExtEvent, BesEvent" << endl;
01135          //for ( i = 0; i < GetExtTrackNum(); i++ ) GetExtTrack(i)->Print();
01136          for ( i = 0; i < GetDedxNum();     i++ ) GetDedx(i)->Print();
01137      }
01138     */
01139     //cout << "=========================================================="
01140     //<< endl << endl;
01141 }
01142 
01143 bool BesEvent::Is_tofCounter(UInt_t status){
01144     const unsigned int  Counter_Mask = 0x00000004;
01145     const unsigned int  Counter_Index = 2;
01146     return ((status & Counter_Mask) >> Counter_Index) ? true: false;
01147 }
01148 
01149 bool BesEvent::Is_tofBarrel(UInt_t status) {
01150     const unsigned int Barrel_Index  = 4;
01151     const unsigned int Barrel_Mask   = 0x00000010;
01152     return ((status & Barrel_Mask) >> Barrel_Index ) ? true : false;
01153 }

Generated on Tue Nov 29 23:12:04 2016 for BOSS_7.0.2 by  doxygen 1.4.7