ClassImp(AliRsnAnalysisSE)
//_____________________________________________________________________________
-AliRsnAnalysisSE::AliRsnAnalysisSE(const char *name,Int_t numOfOutputs) :
- AliRsnVAnalysisTaskSE(name,numOfOutputs),
+AliRsnAnalysisSE::AliRsnAnalysisSE(const char *name,Int_t numOfOutputs,Bool_t useKine) :
+ AliRsnVAnalysisTaskSE(name,numOfOutputs,useKine),
fRsnAnalysisManager(),
fEventCuts(0x0),
fZeroEventPercentWarning(50),
{
public:
- AliRsnAnalysisSE(const char *name = "AliRsnAnalysisSE",Int_t numOfOutputs=1);
+ AliRsnAnalysisSE(const char *name = "AliRsnAnalysisSE",Int_t numOfOutputs=1,Bool_t useKine=kFALSE);
AliRsnAnalysisSE(const AliRsnAnalysisSE& copy);
virtual ~AliRsnAnalysisSE() {;};
out.SetParticle(refMC);
out.FindMotherPDG(fRefMC->Stack());
}
+
+ // if fRef is MC event return
+ AliMCEvent *mc = dynamic_cast<AliMCEvent *> (fRef);
+ if (mc) return;
// retrieve vertex and set impact parameters
Double_t dx = out.Xv(), dy = out.Yv(), dz = out.Zv();
fType(kAxisTypes),
fNBins(0),
fMin(0.0),
- fMax(0.0)
+ fMax(0.0),
+ fMass(0.0)
{
//
// Default constructor
fType(type),
fNBins(0),
fMin(0.0),
- fMax(0.0)
+ fMax(0.0),
+ fMass(0.0)
{
//
// Main constructor (version 1)
fType(type),
fNBins(0),
fMin(0.0),
- fMax(0.0)
+ fMax(0.0),
+ fMass(0.0)
{
//
// Main constructor (version 2)
case kPairInvMassRes: return "IMRES";
case kPairPt: return "PT";
case kPairEta: return "ETA";
+ case kPairMt: return "MT";
+ case kPairY: return "Y";
case kEventMult: return "MULT";
default: return "UNDEF";
}
case kPairInvMassRes:
case kPairPt:
case kPairEta:
+ case kPairMt:
+ case kPairY:
return kPair;
case kEventMult:
return kEvent;
return pair->GetPt();
case kPairEta:
return pair->GetEta();
+ case kPairMt:
+ if (TMath::Abs(fMass) < 1E-5) AliWarning(Form("Suspicious mass value specified: %f", fMass));
+ return TMath::Sqrt(pair->GetPt()*pair->GetPt() + fMass*fMass);
+ case kPairY:
+ if (TMath::Abs(fMass) < 1E-5) AliWarning(Form("Suspicious mass value specified: %f", fMass));
+ return pair->GetY(fMass);
default:
AliWarning("This axis type cannot be applied to pairs");
return -999.0;
kPairInvMassRes,
kPairPt,
kPairEta,
+ kPairMt,
+ kPairY,
kEventMult,
kAxisTypes
};
void SetType(EAxisType type) {fType = type;}
void SetBins(Int_t n, Double_t min, Double_t max);
void SetBins(Double_t min, Double_t max, Double_t step);
+ void SetMass(Double_t mass) {fMass = mass;}
Double_t Eval(AliRsnDaughter *daughter) const;
Double_t Eval(AliRsnPairParticle*const pair, AliRsnPairDef*const pairDef) const;
Int_t fNBins; // number of bins
Double_t fMin; // lower edge
Double_t fMax; // upper edge
+ Double_t fMass; // reference mass for Y and Mt bins
// ROOT dictionary
ClassDef(AliRsnFunctionAxis, 1)
Double_t GetInvMassMC(Double_t m1, Double_t m2);
Double_t GetEtot(Double_t m1, Double_t m2) const;
+ Double_t GetEtot(Double_t mass) const {return TMath::Sqrt(mass*mass + GetP2());}
Double_t GetP2() const {return (fPTot[0]*fPTot[0] + fPTot[1]*fPTot[1] + fPTot[2]*fPTot[2]);}
Double_t GetPt2() const {return (fPTot[0]*fPTot[0] + fPTot[1]*fPTot[1]);}
Double_t GetP() const {return TMath::Sqrt(GetP2());}
}
Double_t GetEta() const {Double_t a = TMath::Tan(0.5*GetTheta()); if (a > 0.) return -TMath::Log(a); return 999999.0;}
Double_t GetY(Double_t m1, Double_t m2) const {return 0.5*TMath::Log((GetEtot(m1,m2)+fPTot[2])/(GetEtot(m1,m2)-fPTot[2]));}
+ Double_t GetY(Double_t mass) const {return 0.5*TMath::Log((GetEtot(mass)+fPTot[2])/(GetEtot(mass)-fPTot[2]));}
Double_t GetEtotMC(Double_t m1, Double_t m2) const;
+ Double_t GetEtotMC(Double_t mass) const {return TMath::Sqrt(mass*mass + GetP2MC());}
Double_t GetP2MC() const {return (fPTotMC[0]*fPTotMC[0] + fPTotMC[1]*fPTotMC[1] + fPTotMC[2]*fPTotMC[2]);}
Double_t GetPt2MC() const {return (fPTotMC[0]*fPTotMC[0] + fPTotMC[1]*fPTotMC[1]);}
Double_t GetPMC() const {return TMath::Sqrt(GetP2MC());}
}
Double_t GetEtaMC() const {return -TMath::Log(TMath::Tan(0.5*GetThetaMC()));}
Double_t GetYMC(Double_t m1, Double_t m2) const {return 0.5*TMath::Log((GetEtotMC(m1,m2)+fPTotMC[2])/(GetEtotMC(m1,m2)-fPTotMC[2]));}
+ Double_t GetYMC(Double_t mass) const {return 0.5*TMath::Log((GetEtotMC(mass)+fPTot[2])/(GetEtotMC(mass)-fPTot[2]));}
Double_t GetAngle() const;
Bool_t AddAnalysisTaskRsnEffNoPID
(
- const char *outFile = "eff_nopid.root", // output file name
+ const char *outFile = "eff_nopid.root", // output file name
)
{
// retrieve analysis manager
task->AddPairDef(pairDef3);
// axis definition
- //AliRsnFunctionAxis *axisIM = new AliRsnFunctionAxis(AliRsnFunctionAxis::kPairInvMass, 1000, 0.0, 2.0);
- AliRsnFunctionAxis *axisPt = new AliRsnFunctionAxis(AliRsnFunctionAxis::kPairPt, 100, 0.0, 10.0);
- AliRsnFunctionAxis *axisEta = new AliRsnFunctionAxis(AliRsnFunctionAxis::kPairEta, 10, -1.0, 1.0);
- AliRsnFunctionAxis *axisMult = new AliRsnFunctionAxis(AliRsnFunctionAxis::kEventMult, 8, 0.0, 200.0);
- //task->AddAxis(axisIM);
+ AliRsnFunctionAxis *axisPt = new AliRsnFunctionAxis(AliRsnFunctionAxis::kPairPt, 100, 0.0, 10.0);
+ AliRsnFunctionAxis *axisEta = new AliRsnFunctionAxis(AliRsnFunctionAxis::kPairEta, 10, -1.0, 1.0);
+ AliRsnFunctionAxis *axisMult = new AliRsnFunctionAxis(AliRsnFunctionAxis::kEventMult, 500, 0.0, 500.0);
task->AddAxis(axisMult);
task->AddAxis(axisPt);
task->AddAxis(axisEta);
// define all binnings
AliRsnFunctionAxis *axisIM = new AliRsnFunctionAxis(AliRsnFunctionAxis::kPairInvMass, 1000, 0.0, 2.0);
- AliRsnFunctionAxis *axisPt = new AliRsnFunctionAxis(AliRsnFunctionAxis::kPairPt, 100, 0.0, 10.0);
+ AliRsnFunctionAxis *axisPt = new AliRsnFunctionAxis(AliRsnFunctionAxis::kPairPt, 400, 0.0, 10.0);
AliRsnFunctionAxis *axisEta = new AliRsnFunctionAxis(AliRsnFunctionAxis::kPairEta, 10, -1.0, 1.0);
AliRsnFunctionAxis *axisMult = new AliRsnFunctionAxis(AliRsnFunctionAxis::kEventMult, 8, 0.0, 200.0);
ifeq (win32gcc,$(ALICE_TARGET))
PACKSOFLAGS:= $(SOFLAGS) -L$(ALICE_ROOT)/lib/tgt_$(ALICE_TARGET) -lSTEERBase \
-lESD -lANALYSIS -lANALYSISalice \
- -L$(ROOTLIBDIR) -lEG
+ -L$(shell root-config --libdir) -lEG
endif