Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

EventDisplay/GfxTrackList.cxx

Go to the documentation of this file.
00001 #include "GfxTrackList.h"
00002 #include "GfxTrackListCfg.h"
00003 #include "GfxProxy.h"
00004 #include "ViewState.h"
00005 #include "GfxTrack.h"
00006 #include <Midad/Gui/GuiSlider.h>
00007 #include <Midad/Base/Mint.h>
00008 #include <RecoBase/CandTrackHandle.h>
00009 #include <RecoBase/CandTrackListHandle.h>
00010 #include <RecoBase/CandFitTrackHandle.h>
00011 #include "GfxTrackListMenu.h"
00012 #include <TClonesArray.h>
00013 #include <Record/RecArrayAllocator.h>
00014 #include <DataUtil/CDL2STL.h>
00015 #include <JobControl/JobC.h>
00016 using namespace DataUtil;
00017 
00018 #include <sigc++/sigc++.h>
00019 #include <sigc++/class_slot.h>
00020 using namespace SigC;
00021 
00022 
00023 #include <Buttons.h> // part of ROOT
00024 
00025 static GfxProxy<GfxTrackList> 
00026 gsGfxTrackListProxy("TrackList", new GfxTrackListMenu());
00027 
00028 GfxTrackList::GfxTrackList()
00029     :fCfg(0)
00030       ,fHideTracks(false)
00031 {
00032     fCfg = new GfxTrackListCfg();
00033     fCfg->modified_signal.connect
00034         (SigC::slot_class(*this,&GfxTrackList::ReConfigure));
00035     RecArrayAllocator& a = RecArrayAllocator::Instance();
00036     fTracksCA = a.GetArray("GfxTrack");
00037 } 
00038 
00039 GfxTrackList::~GfxTrackList()
00040 {
00041   RecArrayAllocator& a = RecArrayAllocator::Instance();
00042   if (fTracksCA) { a.ReleaseArray(fTracksCA); fTracksCA = 0; }
00043 }
00044 
00045 
00046 void GfxTrackList::Init(PageDisplay& pd, EVD& mp)
00047 {
00048 
00049   fEVD= &mp;
00050   fPageDisplay= &pd;
00051   ViewState* vs = this->GetViewState();
00052   vs->spatial_metric.connect(slot_class(*this,&GfxTrackList::ReConfigure));
00053 }
00054 
00055 void GfxTrackList::Configure(Mint& mint)
00056 {
00057   this->ClearTrackList();
00058   CandRecord* crec = dynamic_cast<CandRecord*>
00059     (mint.GetJobC().Mom.GetFragment("CandRecord", "PrimaryCandidateRecord"));    
00060   if (!crec) return;
00061 
00062 
00063   
00064   // const CandTrackListHandle* ctlh = dynamic_cast<CandTrackListHandle*>(crec->FindCandHandle("CandFitTrackCamListHandle","CandFitTrackCamList"));
00065   CandTrackListHandle * ctlh = mint.GetTracks();
00066   if (!ctlh) return;
00067   RangeDouble& time_range = 
00068     fPageDisplay->GetTimeSlider().GetRangeCtrl().GetRange();
00069   TIter trackItr(ctlh->GetDaughterIterator());
00070   while (CandTrackHandle *cth = dynamic_cast<CandTrackHandle*>
00071          (trackItr())) {
00072     
00073     CandTrackHandle * findtrack=0;
00074     bool addtrack=true;
00075     if(GetEVD()->GetCandSlice()){
00076       CandSliceHandle slc1 =  *(GetEVD()->GetCandSlice());
00077       CandSliceHandle slc2;
00078       if(cth->GetCandSlice()) slc2=*(cth->GetCandSlice());
00079       if(slc1!=slc2 && !slc1.IsCloneOf(slc2)){
00080         addtrack=false;
00081       }
00082     }
00083     else if(GetEVD()->GetCandEvent()){
00084       addtrack=false;
00085       for( Int_t itrack=0;itrack<=GetEVD()->GetCandEvent()->GetLastTrack();itrack++){
00086         const CandFitTrackHandle *evtrack = dynamic_cast<const CandFitTrackHandle *>(GetEVD()->GetCandEvent()->GetTrack(itrack));
00087         findtrack=evtrack->GetFinderTrack();
00088         if(findtrack){
00089           if (*findtrack==*cth){
00090             addtrack=true;
00091             break;
00092           }
00093         }
00094         const CandTrackHandle *evtrackbase = dynamic_cast<const CandTrackHandle *>(evtrack);
00095         if(*evtrackbase==*cth){
00096           addtrack=true;
00097           break;
00098         }
00099       }
00100     }
00101     
00102     int last = fTracksCA->GetLast()+1;
00103     if(addtrack && (time_range.InRange(cth->GetVtxT()) || GetEVD()->GetNumSlices()<2) ){
00104       new ((*fTracksCA)[last]) GfxTrack(*cth,*this);
00105       GfxTrack* gs = dynamic_cast<GfxTrack*>(fTracksCA->UncheckedAt(last));
00106       fTracks.push_back(gs);
00107     }
00108   }
00109   this->ReConfigure();
00110 
00111 }
00112 void GfxTrackList::ReConfigure()
00113 {
00114   if (fHideTracks) return;
00115 
00116     for (TrackList_t::iterator it=fTracks.begin(); it != fTracks.end(); ++it) {
00117         (*it)->Configure();
00118     }
00119 }
00120 
00121 void GfxTrackList::ClearTrackList() 
00122 {
00123     fTracks.clear();
00124     fTracksCA->Clear("C");
00125 }
00126 
00127 void GfxTrackList::Draw(Option_t* option)
00128 {
00129 //    cerr << "GfxTrackList::Draw("<<option<<")\n";
00130     for (TrackList_t::iterator it=fTracks.begin(); it != fTracks.end(); ++it) {
00131 
00132       if(GetEVD()->GetDrawAll() || ((*it)->GetColor()==GetEVD()->GetGhostColor() && GetEVD()->GetDrawGhosts()) || ((*it)->GetColor()!=GetEVD()->GetGhostColor() && GetEVD()->GetDrawGhosts())){
00133         (*it)->Draw(option);
00134       }
00135         
00136     }
00137 }
00138 
00139 void GfxTrackList::ExecuteEvent(int event, int /*px*/, int /*py*/, GfxTrack* track)
00140 {
00141     switch (event) {
00142     case kMouseEnter: {
00143         const CandTrackHandle& cth = track->GetTrack();
00144         text_info.emit(Form("%s: %d strips, P=%.1f",
00145                             "track", cth.GetNDaughters(),
00146                             cth.GetMomentum()));
00147         break;
00148     }
00149     default: // nothing
00150         break;
00151     }
00152     
00153 }
00154 
00155 void GfxTrackList::HideTracks(bool hide)
00156 {
00157     fHideTracks = hide;
00158     this->ReConfigure();
00159     if(GetGraphicsView()==GraphicsView::kXY)fEVD->UpdateCanvas();
00160 
00161 }

Generated on Mon Feb 15 11:06:46 2010 for loon by  doxygen 1.3.9.1