ClassImp(Reve::Track)
-Track::Track()
+Track::Track() :
+ RenderElement(),
+ TPolyLine3D(),
+
+ fV(),
+ fP(),
+ fBeta(0),
+ fCharge(0),
+ fLabel(0),
+ fPathMarks(),
+
+ fRnrStyle(0),
+
+ fName(),
+ fTitle()
+{}
+
+Track::Track(TParticle* t, Int_t label, TrackRnrStyle* rs):
+ RenderElement(),
+ TPolyLine3D(),
+
+ fV(t->Vx(), t->Vy(), t->Vz()),
+ fP(t->Px(), t->Py(), t->Pz()),
+ fBeta(t->P()/t->Energy()),
+ fCharge(0),
+ fLabel(label),
+ fPathMarks(),
+
+ fRnrStyle(rs),
+
+ fName(t->GetName()),
+ fTitle()
{
- fRnrStyle = 0;
+ fLineColor = fRnrStyle->GetColor();
+ fMainColorPtr = &fLineColor;
+
+ TParticlePDG* pdgp = t->GetPDG();
+ if (pdgp)
+ fCharge = (Int_t) TMath::Nint(pdgp->Charge()/3);
}
-Track::Track(Reve::MCTrack* t, TrackRnrStyle* rs)
-{
- fRnrStyle = rs;
+Track::Track(Reve::MCTrack* t, TrackRnrStyle* rs):
+ RenderElement(),
+ TPolyLine3D(),
+
+ fV(t->Vx(), t->Vy(), t->Vz()),
+ fP(t->Px(), t->Py(), t->Pz()),
+ fBeta(t->P()/t->Energy()),
+ fCharge(0),
+ fLabel(t->label),
+ fPathMarks(),
+
+ fRnrStyle(rs),
- fName = t->GetName();
+ fName(t->GetName()),
+ fTitle()
+{
fLineColor = fRnrStyle->GetColor();
fMainColorPtr = &fLineColor;
- fV.Set(t->Vx(), t->Vy(), t->Vz());
- fP.Set(t->Px(), t->Py(), t->Pz());
- fBeta = t->P()/t->Energy();
-
TParticlePDG* pdgp = t->GetPDG();
if(pdgp == 0) {
t->ResetPdgCode(); pdgp = t->GetPDG();
}
-
- fCharge = (Int_t) pdgp->Charge();
- fLabel = t->label;
+ fCharge = (Int_t) TMath::Nint(pdgp->Charge()/3);
}
-Track::Track(Reve::RecTrack* t, TrackRnrStyle* rs)
+Track::Track(Reve::RecTrack* t, TrackRnrStyle* rs) :
+ RenderElement(),
+ TPolyLine3D(),
+
+ fV(t->V),
+ fP(t->P),
+ fBeta(t->beta),
+ fCharge(t->sign),
+ fLabel(t->label),
+ fPathMarks(),
+
+ fRnrStyle(rs),
+
+ fName(t->GetName()),
+ fTitle()
{
- fRnrStyle = rs;
- fName = t->GetName();
fLineColor = fRnrStyle->GetColor();
fMainColorPtr = &fLineColor;
-
- fV = t->V;
- fP = t->P;
- fBeta = t->beta;
- fCharge = t->sign;
- fLabel = t->label;
}
Track::~Track()
-{}
+{
+ for (vpPathMark_i i=fPathMarks.begin(); i!=fPathMarks.end(); ++i)
+ delete *i;
+}
void Track::Reset(Int_t n_points)
{
mc_v0.t = 0;
std::vector<MCVertex> track_points;
- Bool_t decay = false;
+ Bool_t decay = kFALSE;
if ((TMath::Abs(fV.z) > RS.fMaxZ) || (fV.x*fV.x + fV.y*fV.y > RS.fMaxR*RS.fMaxR))
goto make_polyline;
- if (fCharge) { // Charged particle
+ if (fCharge != 0 && TMath::Abs(RS.fMagField) > 1e-5) {
+
+ // Charged particle in magnetic field
- Float_t a = 0.2998*RS.fMagField*fCharge/300; // m->cm
+ Float_t a = RS.fgkB2C * RS.fMagField * fCharge;
MCHelix helix(fRnrStyle, &mc_v0, TMath::C()*fBeta, &track_points, a); //m->cm
helix.Init(TMath::Sqrt(px*px+py*py), pz);
}
helix_bounds:
//go to bounds
- if(!decay || RS.fFitDecay == false){
+ if(!decay || RS.fFitDecay == kFALSE){
helix.LoopToBounds(px,py,pz);
// printf("%s loop to bounds \n",fName.Data() );
}
- } else { // Neutral particle
+ } else {
+
+ // Neutral particle or no field
MCLine line(fRnrStyle, &mc_v0, TMath::C()*fBeta, &track_points);
}
line_bounds:
- if(!decay || RS.fFitDecay == false)
+ if(!decay || RS.fFitDecay == kFALSE)
line.GotoBounds(px,py,pz);
}
/**************************************************************************/
+void Track::ImportHits()
+{
+ Reve::LoadMacro("hits_from_label.C");
+ gROOT->ProcessLine(Form("hits_from_label(%d);", fLabel));
+}
+
+void Track::ImportClusters()
+{
+ Reve::LoadMacro("clusters_from_label.C");
+ gROOT->ProcessLine(Form("clusters_from_label(%d);", fLabel));
+}
+
+
+/**************************************************************************/
+/**************************************************************************/
+
//______________________________________________________________________
// TrackRnrStyle
//
ClassImp(Reve::TrackRnrStyle)
-Float_t TrackRnrStyle::fgDefMagField = 0.5;
+Float_t TrackRnrStyle::fgDefMagField = 5;
+const Float_t TrackRnrStyle::fgkB2C = 0.299792458e-3;
TrackRnrStyle TrackRnrStyle::fgDefStyle;
-void TrackRnrStyle::Init()
-{
- fMagField = fgDefMagField;
+TrackRnrStyle::TrackRnrStyle() :
+ TObject(),
- fMaxR = 450;
- fMaxZ = 550;
+ fColor(1),
+ fWidth(1),
+ fMagField(fgDefMagField),
- fMaxOrbs = 2;
- fMinAng = 45;
+ fMaxR (350),
+ fMaxZ (450),
- fFitDaughters = true;
- fFitDecay = true;
+ fMaxOrbs (0.5),
+ fMinAng (45),
+ fDelta (0.1),
- fDelta = 0.1; //calculate step size depending on helix radius
-}
+ fFitDaughters(kTRUE),
+ fFitDecay (kTRUE)
+{}
/**************************************************************************/
/**************************************************************************/
fMarkerColor = 5;
// fMarker->SetMarkerSize(0.05);
- fRnrMarkers = true;
- fRnrTracks = true;
-
- mRnrStyle = new TrackRnrStyle;
- SetMainColorPtr(&mRnrStyle->fColor);
+ if (fRnrStyle== 0) fRnrStyle = new TrackRnrStyle;
+ SetMainColorPtr(&fRnrStyle->fColor);
}
-TrackList::TrackList(Int_t n_tracks) :
+TrackList::TrackList(Int_t n_tracks, TrackRnrStyle* rs) :
+ RenderElementListBase(),
TPolyMarker3D(n_tracks),
- RenderElementListBase()
+
+ fTitle(),
+
+ fRnrStyle (rs),
+ fRnrMarkers (kTRUE),
+ fRnrTracks (kTRUE)
{
Init();
}
-TrackList::TrackList(const Text_t* name, Int_t n_tracks) :
+TrackList::TrackList(const Text_t* name, Int_t n_tracks, TrackRnrStyle* rs) :
+ RenderElementListBase(),
TPolyMarker3D(n_tracks),
- RenderElementListBase()
+
+ fTitle(),
+
+ fRnrStyle (rs),
+ fRnrMarkers (kTRUE),
+ fRnrTracks (kTRUE)
{
Init();
SetName(name);
TPolyMarker3D::Paint(option);
}
if(fRnrTracks) {
- for(lpRE_i i=fList.begin(); i!=fList.end(); ++i) {
+ for(lpRE_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
if((*i)->GetRnrElement())
(*i)->GetObject()->Paint(option);
}
void TrackList::MakeTracks()
{
- for(lpRE_i i=fList.begin(); i!=fList.end(); ++i) {
+ for(lpRE_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
((Track*)(*i))->MakeTrack();
}
gReve->Redraw3D();
void TrackList::MakeMarkers()
{
- Reset(fList.size());
- for(lpRE_i i=fList.begin(); i!=fList.end(); ++i) {
+ Reset(fChildren.size());
+ for(lpRE_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
Track& t = *((Track*)(*i));
if(t.GetN() > 0)
SetNextPoint(t.fV.x, t.fV.y, t.fV.z);
/**************************************************************************/
/*************************************************************************/
+void TrackList::SetWidth(Width_t w)
+{
+ Width_t oldw = fRnrStyle->fWidth;
+ fRnrStyle->fWidth = w;
+ for (lpRE_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
+ Track& t = *((Track*)(*i));
+ if (t.GetLineWidth() == oldw)
+ t.SetLineWidth(w);
+ }
+}
+
void TrackList::SetMaxR(Float_t x)
{
- mRnrStyle->fMaxR = x;
+ fRnrStyle->fMaxR = x;
MakeTracks();
MakeMarkers();
}
void TrackList::SetMaxZ(Float_t x)
{
- mRnrStyle->fMaxZ = x;
+ fRnrStyle->fMaxZ = x;
MakeTracks();
MakeMarkers();
}
void TrackList::SetMaxOrbs(Float_t x)
{
- mRnrStyle->fMaxOrbs = x;
+ fRnrStyle->fMaxOrbs = x;
MakeTracks();
}
void TrackList::SetMinAng(Float_t x)
{
- mRnrStyle->fMinAng = x;
+ fRnrStyle->fMinAng = x;
MakeTracks();
}
void TrackList::SetDelta(Float_t x)
{
- mRnrStyle->fDelta = x;
+ fRnrStyle->fDelta = x;
MakeTracks();
}
void TrackList::SetFitDaughters(Bool_t x)
{
- mRnrStyle->fFitDaughters = x;
+ fRnrStyle->fFitDaughters = x;
MakeTracks();
}
void TrackList::SetFitDecay(Bool_t x)
{
- mRnrStyle->fFitDecay = x;
+ fRnrStyle->fFitDecay = x;
MakeTracks();
}
Float_t maxptsq = max_pt*max_pt;
Float_t ptsq;
- for(lpRE_i i=fList.begin(); i!=fList.end(); ++i) {
+ for(lpRE_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
ptsq = ((Track*)(*i))->fP.Perp2();
(*i)->SetRnrElement(ptsq >= minptsq && ptsq <= maxptsq);
}
/**************************************************************************/
-#include <TGFrame.h>
-#include <TGDoubleSlider.h>
-#include <TGXYLayout.h>
-
-void TrackList::MakePtScrollbar()
+void TrackList::ImportHits()
{
- TGMainFrame* mf = new TGMainFrame(gClient->GetRoot(), 320, 60);
-
- TGDoubleHSlider* hs = new TGDoubleHSlider(mf);
- hs->SetRange(0.2, 10);
- hs->SetPosition(0.2, 10);
- hs->Resize(300, 25);
- mf->AddFrame(hs, new TGLayoutHints(kLHintsCenterX, 10, 10, 10, 10));
-
- hs->Connect("PositionChanged()", "Reve::TrackList",
- this, "HandlePtScrollEvent()");
-
- mf->SetWindowName("Pt Selector");
- mf->MapSubwindows();
- mf->Resize(mf->GetDefaultSize()); // this is used here to init layout algorithm
- mf->MapWindow();
+ for(lpRE_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
+ ((Track*)(*i))->ImportHits();
+ }
}
-void TrackList::HandlePtScrollEvent()
+void TrackList::ImportClusters()
{
- TGDoubleHSlider* hs = (TGDoubleHSlider*)gTQSender;
-
- Float_t min = hs->GetMinPosition(), max = hs->GetMaxPosition();
- printf("hslidor min=%f max=%f\n", min, max);
- SelectByPt(min, max);
+ for(lpRE_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
+ ((Track*)(*i))->ImportClusters();
+ }
}