#include "Riostream.h"
#include "AliLog.h"
#include "AliRsnMiniPair.h"
#include "AliRsnMiniEvent.h"
#include "AliRsnMiniParticle.h"
#include "AliRsnMiniValue.h"
ClassImp(AliRsnMiniValue)
AliRsnMiniValue::AliRsnMiniValue(EType type, Bool_t useMC) :
TNamed(ValueName(type, useMC), ""),
fType(type),
fUseMCInfo(useMC)
{
}
AliRsnMiniValue::AliRsnMiniValue(const AliRsnMiniValue ©) :
TNamed(copy),
fType(copy.fType),
fUseMCInfo(copy.fUseMCInfo)
{
}
AliRsnMiniValue &AliRsnMiniValue::operator=(const AliRsnMiniValue ©)
{
TNamed::operator=(copy);
if (this == ©)
return *this;
fType = copy.fType;
fUseMCInfo = copy.fUseMCInfo;
return (*this);
}
const char *AliRsnMiniValue::TypeName(EType type)
{
switch (type) {
case kVz: return "EventVz";
case kMult: return "EventMult";
case kTracklets: return "EventTracklets";
case kPlaneAngle: return "EventPlane";
case kLeadingPt: return "EventLeadingPt";
case kPt: return "Pt";
case kPz: return "Pz";
case kInvMass: return "InvMass";
case kInvMassRes: return "InvMassResolution";
case kInvMassDiff: return "InvMassDifference";
case kEta: return "Eta";
case kMt: return "Mt";
case kY: return "Y";
case kPtRatio: return "PtRatio";
case kDipAngle: return "DipAngle";
case kCosThetaStar: return "CosThetaStar";
case kAngleLeading: return "AngleToLeading";
case kFirstDaughterPt: return "FirstDaughterPt";
case kSecondDaughterPt: return "SecondDaughterPt";
case kFirstDaughterP: return "FirstDaughterP";
case kSecondDaughterP: return "SecondDaughterP";
case kDCAproduct: return "DaughterDCAproduct";
case kFirstDaughterDCA: return "FirstDaughterDCA";
case kSecondDaughterDCA: return "SecondDaughterDCA";
case kNSisters: return "NumberOfSisters";
default: return "Undefined";
}
}
Float_t AliRsnMiniValue::Eval(AliRsnMiniPair *pair, AliRsnMiniEvent *event)
{
if (!pair && fType > kEventCuts) {
AliError("Null pair passed!");
return 1E20;
}
Double_t p3[3]= {0.,0.,0.};
AliRsnMiniParticle *l;
TLorentzVector v;
switch (fType) {
case kVz:
return event->Vz();
case kMult:
return event->Mult();
case kTracklets:
return event->Tracklets();
case kPlaneAngle:
return event->Angle();
case kLeadingPt:
l = event->LeadingParticle();
if (l) {
l->Set4Vector(v,-1.0,fUseMCInfo);
return v.Pt();
}
return 0.0;
case kPt:
return pair->Pt(fUseMCInfo);
case kInvMass:
return pair->InvMass(fUseMCInfo);
case kEta:
return pair->Eta(fUseMCInfo);
case kInvMassRes:
return pair->InvMassRes();
case kInvMassDiff:
return pair->InvMassDiff();
case kMt:
return pair->Mt(fUseMCInfo);
case kY:
return pair->Y(fUseMCInfo);
case kPtRatio:
return pair->PtRatio(fUseMCInfo);
case kDipAngle:
return pair->DipAngle(fUseMCInfo);
case kCosThetaStar:
return pair->CosThetaStar(fUseMCInfo);
case kAngleLeading:
l = event->LeadingParticle();
if (l) {
l->Set4Vector(v,-1.0,fUseMCInfo);
Double_t angle = v.Phi() - pair->Sum(fUseMCInfo).Phi();
while (angle >= 1.5 * TMath::Pi()) angle -= 2 * TMath::Pi();
while (angle < -0.5 * TMath::Pi()) angle += 2 * TMath::Pi();
return angle;
}
return 1E20;
case kFirstDaughterPt:
return pair->DaughterPt(0,fUseMCInfo);
case kSecondDaughterPt:
return pair->DaughterPt(1,fUseMCInfo);
case kFirstDaughterP:
pair->DaughterPxPyPz(0,fUseMCInfo, p3);
return TMath::Sqrt(p3[0]*p3[0]+p3[1]*p3[1]+p3[2]*p3[2]);
case kSecondDaughterP:
pair->DaughterPxPyPz(1,fUseMCInfo, p3);
return TMath::Sqrt(p3[0]*p3[0]+p3[1]*p3[1]+p3[2]*p3[2]);
case kDCAproduct:
return pair->DCAProduct();
case kFirstDaughterDCA:
return pair->DaughterDCA(0);
case kSecondDaughterDCA:
return pair->DaughterDCA(1);
case kNSisters:
return pair->NSisters();
default:
AliError("Invalid value type");
return 1E20;
}
}