#include "AliEveV0.h"
#include <TEveTrackPropagator.h>
#include <TEveManager.h>
#include <TPolyLine3D.h>
#include <TColor.h>
#include <TDatabasePDG.h>
#include <TParticlePDG.h>
#include <vector>
ClassImp(AliEveV0)
AliEveV0::AliEveV0() :
TEvePointSet(),
fRecBirthV(),
fRecDecayV(),
fRecDecayP(),
fNegTrack(0),
fPosTrack(0),
fRnrStyle(0),
fPointingLine(0),
fESDIndex(-1),
fOnFlyStatus(kFALSE),
fDaughterDCA(999),
fChi2V0(-1),
fNegMaxProbPdg(0),
fPosMaxProbPdg(0),
fNegMaxProbPid(0),
fPosMaxProbPid(0)
{
fPickable = kTRUE;
fMainColorPtr = &fMarkerColor;
}
AliEveV0::AliEveV0(TEveRecTrack* tNeg, TEveRecTrack* tPos,
TEveRecV0* v0, TEveTrackPropagator* rs) :
TEvePointSet(),
fRecBirthV(v0->fV0Birth),
fRecDecayV(v0->fVCa),
fRecDecayP(v0->fPNeg + v0->fPPos),
fNegTrack(new AliEveTrack(tNeg, rs)),
fPosTrack(new AliEveTrack(tPos, rs)),
fRnrStyle(rs),
fPointingLine(new TEveLine("Pointing line")),
fESDIndex(-1),
fOnFlyStatus(kFALSE),
fDaughterDCA(999),
fChi2V0(-1),
fNegMaxProbPdg(0),
fPosMaxProbPdg(0),
fNegMaxProbPid(0),
fPosMaxProbPid(0)
{
fPickable = kTRUE;
fMainColorPtr = &fMarkerColor;
fMarkerStyle = 2;
fMarkerColor = kSpring + 6;
fMarkerSize = 1;
fPointingLine->SetLineColor(fMarkerColor);
fPointingLine->SetLineWidth(2);
fPointingLine->IncDenyDestroy();
AddElement(fPointingLine);
fPosTrack->SetLineColor(2);
fPosTrack->SetStdTitle();
fNegTrack->SetLineColor(7);
fNegTrack->SetStdTitle();
fNegTrack->IncDenyDestroy();
AddElement(fNegTrack);
fPosTrack->IncDenyDestroy();
AddElement(fPosTrack);
}
AliEveV0::~AliEveV0()
{
fNegTrack->DecDenyDestroy();
fPosTrack->DecDenyDestroy();
fPointingLine->DecDenyDestroy();
}
void AliEveV0::SetMaxProbPdgPid(Int_t iDaughter, Int_t rPdg, Float_t rPid)
{
if(iDaughter==0){
fNegMaxProbPdg = rPdg;
fNegMaxProbPid = rPid;
}
else if (iDaughter==1){
fPosMaxProbPdg = rPdg;
fPosMaxProbPid = rPid;
}
}
Float_t AliEveV0::GetInvMass(Int_t nPdgCode, Int_t pPdgCode) const
{
TEveVector lNegMomentum = fNegTrack->GetMomentum();
TEveVector lPosMomentum = fPosTrack->GetMomentum();
Double_t nMass=TDatabasePDG::Instance()->GetParticle(nPdgCode)->Mass();
Double_t pMass=TDatabasePDG::Instance()->GetParticle(pPdgCode)->Mass();
printf("\n check the mass of the particle negative %.5f positive %.5f \n",nMass,pMass);
Double_t eNeg = TMath::Sqrt(nMass*nMass + lNegMomentum.Mag2());
Double_t ePos = TMath::Sqrt(pMass*pMass + lPosMomentum.Mag2());
return TMath::Sqrt( (eNeg+ePos)*(eNeg+ePos) - fRecDecayP.Mag2() );
}
void AliEveV0::MakeV0()
{
SetPoint(0, fRecDecayV.fX, fRecDecayV.fY, fRecDecayV.fZ);
fNegTrack->MakeTrack();
fPosTrack->MakeTrack();
fPointingLine->SetPoint(0, fRecBirthV.fX, fRecBirthV.fY, fRecBirthV.fZ);
fPointingLine->SetPoint(1, fRecDecayV.fX, fRecDecayV.fY, fRecDecayV.fZ);
}
ClassImp(AliEveV0List)
AliEveV0List::AliEveV0List() :
TEveElementList(),
fTitle(),
fRnrStyle(0),
fRnrDaughters(kTRUE),
fRnrV0vtx(kTRUE),
fRnrV0path(kTRUE),
fNegColor(0),
fPosColor(0),
fMinRCut(0),
fMaxRCut(250),
fMinDaughterDCA(0),
fMaxDaughterDCA(1),
fMinPt(0),
fMaxPt(20),
fNegCheckedPid(211),
fPosCheckedPid(211),
fNegCheckedProb(0.5),
fPosCheckedProb(0.5),
fMinInvariantMass(0),
fMaxInvariantMass(1.2)
{
fChildClass = AliEveV0::Class();
}
AliEveV0List::AliEveV0List(TEveTrackPropagator* rs) :
TEveElementList(),
fTitle(),
fRnrStyle(rs),
fRnrDaughters(kTRUE),
fRnrV0vtx(kTRUE),
fRnrV0path(kTRUE),
fNegColor(0),
fPosColor(0),
fMinRCut(0),
fMaxRCut(250),
fMinDaughterDCA(0),
fMaxDaughterDCA(1),
fMinPt(0),
fMaxPt(20),
fNegCheckedPid(211),
fPosCheckedPid(211),
fNegCheckedProb(0.5),
fPosCheckedProb(0.5),
fMinInvariantMass(0),
fMaxInvariantMass(1.2)
{
fChildClass = AliEveV0::Class();
Init();
}
AliEveV0List::AliEveV0List(const Text_t* name, TEveTrackPropagator* rs) :
TEveElementList(),
fTitle(),
fRnrStyle(rs),
fRnrDaughters(kTRUE),
fRnrV0vtx(kTRUE),
fRnrV0path(kTRUE),
fNegColor(0),
fPosColor(0),
fMinRCut(0),
fMaxRCut(100),
fMinDaughterDCA(0),
fMaxDaughterDCA(1),
fMinPt(0),
fMaxPt(20),
fNegCheckedPid(211),
fPosCheckedPid(211),
fNegCheckedProb(0.5),
fPosCheckedProb(0.5),
fMinInvariantMass(0),
fMaxInvariantMass(1.2)
{
fChildClass = AliEveV0::Class();
Init();
SetName(name);
}
void AliEveV0List::Init()
{
if (fRnrStyle== 0) fRnrStyle = new TEveTrackPropagator;
}
void AliEveV0List::MakeV0s()
{
for(List_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
((AliEveV0*)(*i))->MakeV0();
}
gEve->Redraw3D();
}
void AliEveV0List::FilterByRadius(Float_t minR, Float_t maxR)
{
fMinRCut = minR;
fMaxRCut = maxR;
for(List_i i = fChildren.begin(); i != fChildren.end(); ++i)
{
AliEveV0* v0 = (AliEveV0*) *i;
Float_t rad = v0->GetRadius();
Bool_t show = rad >= fMinRCut && rad <= fMaxRCut;
v0->SetRnrState(show);
}
ElementChanged();
gEve->Redraw3D();
}
void AliEveV0List::FilterByDaughterDCA(Float_t minDaughterDCA, Float_t maxDaughterDCA)
{
fMinDaughterDCA = minDaughterDCA;
fMaxDaughterDCA = maxDaughterDCA;
for(List_i i = fChildren.begin(); i != fChildren.end(); ++i)
{
AliEveV0* v0 = (AliEveV0*) *i;
Float_t dca = v0->GetDaughterDCA();
Bool_t show = dca >= fMinDaughterDCA && dca <= fMaxDaughterDCA;
v0->SetRnrState(show);
}
ElementChanged();
gEve->Redraw3D();
}
void AliEveV0List::FilterByPt(Float_t minPt, Float_t maxPt)
{
fMinPt = minPt;
fMaxPt = maxPt;
for(List_i i = fChildren.begin(); i != fChildren.end(); ++i)
{
AliEveV0* v0 = (AliEveV0*) *i;
Float_t pt = v0->GetPt();
Bool_t show = pt >= fMinPt && pt <= fMaxPt;
v0->SetRnrState(show);
}
ElementChanged();
gEve->Redraw3D();
}
void AliEveV0List::FilterByCheckedPidMinProb(Int_t rFlag,Int_t rDaughter, Int_t rPid, Float_t rProb)
{
if (!rDaughter){
fNegCheckedPid = rPid;
fNegCheckedProb = rProb;
}
else {
fPosCheckedPid = rPid;
fPosCheckedProb = rProb;
}
for(List_i i = fChildren.begin(); i != fChildren.end(); ++i)
{
AliEveV0* v0 = (AliEveV0*) *i;
Int_t pid = 0;
Float_t prob = 0.0;
Bool_t show = 0;
if (!rDaughter) {
pid = v0->GetNegMaxProbPdg();
prob = v0->GetNegMaxProbPid();
show = (pid == fNegCheckedPid && prob > fNegCheckedProb) || !rFlag ;
}
else if (rDaughter) {
pid = v0->GetPosMaxProbPdg();
prob = v0->GetPosMaxProbPid();
show = (pid == fPosCheckedPid && prob > fPosCheckedProb) || !rFlag ;
}
v0->SetRnrState(show);
}
ElementChanged();
gEve->Redraw3D();
}
void AliEveV0List::FilterByInvariantMass(Float_t minInvariantMass, Float_t maxInvariantMass, Int_t nPdgCode, Int_t pPdgCode)
{
fMinInvariantMass = minInvariantMass;
fMaxInvariantMass = maxInvariantMass;
for(List_i i = fChildren.begin(); i != fChildren.end(); ++i)
{
AliEveV0* v0 = (AliEveV0*) *i;
Float_t invMass = v0->GetInvMass(nPdgCode, pPdgCode);
Bool_t show = invMass >= fMinInvariantMass && invMass <= fMaxInvariantMass;
v0->SetRnrState(show);
}
ElementChanged();
gEve->Redraw3D();
}