using namespace std;
#include <hades.h>
#include <hcategory.h>
#include <hpidparticle.h>
#include "hpairfl.h"
#include "pairsdef.h"
#include "hpair.h"
ClassImp(HPair)
HPair::HPair()
{
reset();
}
HPair::HPair(HPidParticle *p1, HPidParticle *p2 )
{
reset();
calcPairProperties(p1,p2);
}
HPair::~HPair()
{
}
HPair::HPair(const HPair& source)
{
}
void HPair::print()
{
printf("--- EXP -----------------------------------------------------\n");
printf("Pair: 4Momentum : (px=%5.1f, py=%5.1f, pz=%5.1f, E=%5.1f)\nMom. mag.: p=%5.1f MeV/c\n",
X(), Y(), Z(), T(), P());
printf("Pair: inv. mass (MeV/c2) = %5.1f, pt = %5.1f, rapidity = %5.1f\n", fInvMass, Pt(), Rapidity());
printf("Pair: opening angle (deg) = %5.1f, charge = %2i\nindex1 = %2i, index2 = %2i\npid1 = %2i, prob1 = %3.2f, pid2 = %2i, prob2 = %3.2f\n",
fOpang, (Int_t)getCharge(), sIdxP1, sIdxP2, nPid1, fProbability1, nPid2, fProbability2);
}
Bool_t HPair::calcPairProperties(HPidParticle *p1, HPidParticle *p2 )
{
if (p1 && p2)
{
if (p1->getMostProbablePID() < 0 || p2->getMostProbablePID() < 0)
{
*(TLorentzVector *)this = *p1 + *p2;
setOpeningAngleDeg(TMath::RadToDeg() * p1->Angle(p2->Vect()));
setIndexParticle1((Short_t) p1->getIndex());
setIndexParticle2((Short_t) p2->getIndex());
setPid1(p1->getMostProbablePID());
setPid2(p2->getMostProbablePID());
setPidProbability1(p1->getWeightForPID(p1->getMostProbablePID()));
setPidProbability2(p2->getWeightForPID(p2->getMostProbablePID()));
setInvariantMass(this->M());
return kFALSE;
}
TLorentzVector pair;
if (gHades->isReal())
{
TVector3 p13 = p1->Vect();
TVector3 p23 = p2->Vect();
TLorentzVector p1t;
TLorentzVector p2t;
p1t.SetVectM(p13,HPidPhysicsConstants::mass(p1->getMostProbablePID()));
p2t.SetVectM(p23,HPidPhysicsConstants::mass(p2->getMostProbablePID()));
pair = p1t + p2t;
*(TLorentzVector *)this = pair;
}
else *(TLorentzVector *)this = *p1 + *p2;
setOpeningAngleDeg(TMath::RadToDeg() * p1->Angle(p2->Vect()));
setIndexParticle1((Short_t) p1->getIndex());
setIndexParticle2((Short_t) p2->getIndex());
setPid1(p1->getMostProbablePID());
setPid2(p2->getMostProbablePID());
setPidProbability1(p1->getWeightForPID(p1->getMostProbablePID()));
setPidProbability2(p2->getWeightForPID(p2->getMostProbablePID()));
setInvariantMass(this->M());
}
else
{
Error("calcPairProperties","pointer to particle1 and/or particle2 is null");
return kFALSE;
}
return kTRUE;
}
void HPair::reset(void)
{
setIndexParticle1(-1);
setIndexParticle2(-1);
setPid1(-100);
setPid2(-100);
setPidProbability1(-1.);
setPidProbability2(-1.);
setOpeningAngleDeg(-1.);
setIsCutFlag(0);
SetPxPyPzE(0., 0., 0., 0.);
setBitFieldPassedCuts(0);
setInvariantMass(-1.);
}
Char_t HPair::getCharge(void) const
{
HCategory* pCatPidPart = HPairFL::getCategory(catPidPart);
if (!pCatPidPart)
{
Warning("getCharge","no HPidParticle category found !");
return -10;
}
HPidParticle* p1 = (HPidParticle*) pCatPidPart->getObject(getIndexParticle1());
HPidParticle* p2 = (HPidParticle*) pCatPidPart->getObject(getIndexParticle2());
if (!p1 || !p2)
{
Warning("getCharge","HPidParticle not found for given index");
return -10;
}
return (p1->getCharge() + p2->getCharge());
}
Last change: Sat May 22 13:06:04 2010
Last generated: 2010-05-22 13:06
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.