From 75c432a7d7c848240fcddcb2f4a087ff055cb047 Mon Sep 17 00:00:00 2001 From: akisiel Date: Thu, 3 May 2007 09:48:46 +0000 Subject: [PATCH] Initial check-in of the model classes --- .../AliFemto/Model/AliFemtoModelCorrFctn.cxx | 149 +++++++++++++++ .../AliFemto/Model/AliFemtoModelCorrFctn.h | 56 ++++++ .../Model/AliFemtoModelFreezeOutGenerator.h | 55 ++++++ ...liFemtoModelGausLCMSFreezeOutGenerator.cxx | 129 +++++++++++++ .../AliFemtoModelGausLCMSFreezeOutGenerator.h | 49 +++++ .../Model/AliFemtoModelHiddenInfo.cxx | 151 +++++++++++++++ .../AliFemto/Model/AliFemtoModelHiddenInfo.h | 57 ++++++ .../AliFemto/Model/AliFemtoModelManager.cxx | 108 +++++++++++ .../AliFemto/Model/AliFemtoModelManager.h | 48 +++++ .../Model/AliFemtoModelWeightGenerator.cxx | 107 +++++++++++ .../Model/AliFemtoModelWeightGenerator.h | 82 ++++++++ .../AliFemtoModelWeightGeneratorBasic.cxx | 179 ++++++++++++++++++ .../Model/AliFemtoModelWeightGeneratorBasic.h | 41 ++++ 13 files changed, 1211 insertions(+) create mode 100644 PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelCorrFctn.cxx create mode 100644 PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelCorrFctn.h create mode 100644 PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelFreezeOutGenerator.h create mode 100644 PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelGausLCMSFreezeOutGenerator.cxx create mode 100644 PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelGausLCMSFreezeOutGenerator.h create mode 100644 PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelHiddenInfo.cxx create mode 100644 PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelHiddenInfo.h create mode 100644 PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelManager.cxx create mode 100644 PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelManager.h create mode 100644 PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelWeightGenerator.cxx create mode 100644 PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelWeightGenerator.h create mode 100644 PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelWeightGeneratorBasic.cxx create mode 100644 PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelWeightGeneratorBasic.h diff --git a/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelCorrFctn.cxx b/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelCorrFctn.cxx new file mode 100644 index 00000000000..56fb33a729c --- /dev/null +++ b/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelCorrFctn.cxx @@ -0,0 +1,149 @@ +//////////////////////////////////////////////////////////////////////////////// +/// /// +/// AliFemtoModelCorrFctn - the base class for correlation function which /// +/// uses the model framework and weight generation /// +/// /// +//////////////////////////////////////////////////////////////////////////////// +#ifdef __ROOT__ + ClassImp(AliFemtoModelCorrFctn, 1) +#endif + +#include "AliFemtoModelGausLCMSFreezeOutGenerator.h" +#include "AliFemtoModelHiddenInfo.h" +#include "AliFemtoModelCorrFctn.h" + +//_______________________ +AliFemtoModelCorrFctn::AliFemtoModelCorrFctn(): + fManager(0), + fNumeratorTrue(0), + fNumeratorFake(0), + fDenominator(0) +{ + fNumeratorTrue = new TH1D("ModelNumTrue","ModelNumTrue",50,0.0,0.5); + fNumeratorFake = new TH1D("ModelNumFake","ModelNumFake",50,0.0,0.5); + fDenominator = new TH1D("ModelDen","ModelDen",50,0.0,0.5); + + fNumeratorTrue->Sumw2(); + fNumeratorFake->Sumw2(); + fDenominator->Sumw2(); +} +//_______________________ +AliFemtoModelCorrFctn::AliFemtoModelCorrFctn(const char *title, Int_t aNbins, Double_t aQinvLo, Double_t aQinvHi): + fManager(0), + fNumeratorTrue(0), + fNumeratorFake(0), + fDenominator(0) +{ + char buf[100]; + sprintf(buf, "NumTrue%s", title); + fNumeratorTrue = new TH1D(buf,buf,aNbins,aQinvLo,aQinvHi); + sprintf(buf, "NumFake%s", title); + fNumeratorFake = new TH1D(buf,buf,aNbins,aQinvLo,aQinvHi); + sprintf(buf, "Den%s", title); + fDenominator = new TH1D(buf,buf,aNbins,aQinvLo,aQinvHi); + + fNumeratorTrue->Sumw2(); + fNumeratorFake->Sumw2(); + fDenominator->Sumw2(); +} +//_______________________ +AliFemtoModelCorrFctn::AliFemtoModelCorrFctn(const AliFemtoModelCorrFctn& aCorrFctn) : + fManager(0), + fNumeratorTrue(0), + fNumeratorFake(0), + fDenominator(0) +{ + if (aCorrFctn.fNumeratorTrue) + fNumeratorTrue = new TH1D(*(aCorrFctn.fNumeratorTrue)); + if (aCorrFctn.fNumeratorFake) + fNumeratorFake = new TH1D(*(aCorrFctn.fNumeratorFake)); + if (aCorrFctn.fDenominator) + fDenominator = new TH1D(*(aCorrFctn.fDenominator)); + fManager = aCorrFctn.fManager; +} +//_______________________ +AliFemtoModelCorrFctn::~AliFemtoModelCorrFctn() +{ + if (fNumeratorTrue) delete fNumeratorTrue; + if (fNumeratorFake) delete fNumeratorFake; + if (fDenominator) delete fDenominator; +} +//_______________________ +AliFemtoModelCorrFctn& AliFemtoModelCorrFctn::operator=(const AliFemtoModelCorrFctn& aCorrFctn) +{ + if (this == &aCorrFctn) + return *this; + + if (aCorrFctn.fNumeratorTrue) + fNumeratorTrue = new TH1D(*(aCorrFctn.fNumeratorTrue)); + else + fNumeratorTrue = 0; + if (aCorrFctn.fNumeratorFake) + fNumeratorFake = new TH1D(*(aCorrFctn.fNumeratorFake)); + else + fNumeratorFake = 0; + if (aCorrFctn.fDenominator) + fDenominator = new TH1D(*(aCorrFctn.fDenominator)); + else + fDenominator = 0; + fManager = aCorrFctn.fManager; + + return *this; +} +//_______________________ +void AliFemtoModelCorrFctn::ConnectToManager(AliFemtoModelManager *aManager) +{ + fManager = aManager; +} + +//_______________________ +AliFemtoString AliFemtoModelCorrFctn::Report() +{ + AliFemtoString tStr = "AliFemtoModelCorrFctn report"; + + return tStr; +} + +//_______________________ +void AliFemtoModelCorrFctn::AddRealPair(AliFemtoPair* aPair) +{ + Double_t weight = fManager->GetWeight(aPair); + fNumeratorTrue->Fill(aPair->qInv(), weight); +} +//_______________________ +void AliFemtoModelCorrFctn::AddMixedPair(AliFemtoPair* aPair) +{ + Double_t weight = fManager->GetWeight(aPair); + fNumeratorFake->Fill(aPair->qInv(), weight); + fDenominator->Fill(aPair->qInv(), 1.0); +} +//_______________________ +void AliFemtoModelCorrFctn::EventBegin(const AliFemtoEvent* aEvent) +{ + /* Do nothing */ +} +//_______________________ +void AliFemtoModelCorrFctn::EventEnd(const AliFemtoEvent* aEvent) +{ + /* Do nothing */ +} +//_______________________ +void AliFemtoModelCorrFctn::Finish() +{ + /* Do nothing */ +} +//_______________________ +void AliFemtoModelCorrFctn::Write() +{ + fNumeratorTrue->Write(); + fNumeratorFake->Write(); + fDenominator->Write(); +} +//_______________________ +AliFemtoModelCorrFctn* AliFemtoModelCorrFctn::Clone() +{ + AliFemtoModelCorrFctn *tCopy = new AliFemtoModelCorrFctn(*this); + + return tCopy; +} + diff --git a/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelCorrFctn.h b/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelCorrFctn.h new file mode 100644 index 00000000000..5dc6c9ae3fb --- /dev/null +++ b/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelCorrFctn.h @@ -0,0 +1,56 @@ +//////////////////////////////////////////////////////////////////////////////// +/// /// +/// AliFemtoModelCorrFctn - the base class for correlation function which /// +/// uses the model framework and weight generation /// +/// /// +//////////////////////////////////////////////////////////////////////////////// +#ifndef AliFemtoModelCorrFctn_hh +#define AliFemtoModelCorrFctn_hh + +#include "Base/AliFemtoCorrFctn.h" +#include "Infrastructure/AliFemtoPair.h" +#include "AliFemtoModelManager.h" + +class AliFemtoModelCorrFctn: public AliFemtoCorrFctn { + +public: + AliFemtoModelCorrFctn(); + AliFemtoModelCorrFctn(const char *title, Int_t aNbins, Double_t aQinvLo, Double_t aQinvHi); + AliFemtoModelCorrFctn(const AliFemtoModelCorrFctn& aCorrFctn); + virtual ~AliFemtoModelCorrFctn(); + + AliFemtoModelCorrFctn& operator=(const AliFemtoModelCorrFctn& aCorrFctn); + + virtual void ConnectToManager(AliFemtoModelManager *aManager); + + virtual AliFemtoString Report(); + + virtual void AddRealPair(AliFemtoPair* aPair); + virtual void AddMixedPair(AliFemtoPair* aPir); + + virtual void EventBegin(const AliFemtoEvent* aEvent); + virtual void EventEnd(const AliFemtoEvent* aEvent); + virtual void Finish(); + + virtual void Write(); + + virtual AliFemtoModelCorrFctn* Clone(); + + AliFemtoBaseAnalysis* HbtAnalysis(){return fyAnalysis;}; + void SetAnalysis(AliFemtoBaseAnalysis* aAnalysis); + +protected: + AliFemtoModelManager *fManager; // Link back to the managet to get the weights + + TH1D *fNumeratorTrue; // Numerator made with pairs from the same event + TH1D *fNumeratorFake; // Numerator made with pairs from different events (mixed pairs) + TH1D *fDenominator; // Denominator made with mixed pairs + +private: + +#ifdef __ROOT__ + ClassDef(AliFemtoModelCorrFctn, 1) +#endif +}; + +#endif diff --git a/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelFreezeOutGenerator.h b/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelFreezeOutGenerator.h new file mode 100644 index 00000000000..3fdc95954f1 --- /dev/null +++ b/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelFreezeOutGenerator.h @@ -0,0 +1,55 @@ +//////////////////////////////////////////////////////////////////////////////// +/// /// +/// AliFemtoModelFreezeOutGenerator - abstract base class for freeze-out /// +/// coordinates generator /// +/// Authors: Adam Kisiel kisiel@mps.ohio-state.edu /// +/// /// +//////////////////////////////////////////////////////////////////////////////// +#ifndef AliFemtoModelFreezeOutGenerator_hh +#define AliFemtoModelFreezeOutGenerator_hh + +#include "TRandom2.h" +#include "AliFemtoPair.h" + +class AliFemtoModelFreezeOutGenerator +{ + public: + AliFemtoModelFreezeOutGenerator(); + AliFemtoModelFreezeOutGenerator(AliFemtoModelFreezeOutGenerator &aModel); + + AliFemtoModelFreezeOutGenerator& operator=(const AliFemtoModelFreezeOutGenerator& aGen); + + virtual ~AliFemtoModelFreezeOutGenerator(); + virtual void GenerateFreezeOut(AliFemtoPair *aPair) = 0; + + virtual AliFemtoModelFreezeOutGenerator* Clone() const; + + protected: + TRandom2 *fRandom; + + private: + +#ifdef __ROOT__ + ClassDef(AliFemtoModelFreezeOutGenerator, 1) +#endif + +}; + +inline AliFemtoModelFreezeOutGenerator::AliFemtoModelFreezeOutGenerator(): fRandom(0) { /* no-op */ }; +inline AliFemtoModelFreezeOutGenerator::AliFemtoModelFreezeOutGenerator(AliFemtoModelFreezeOutGenerator &aModel): fRandom(0){/* no-op */}; +inline AliFemtoModelFreezeOutGenerator& AliFemtoModelFreezeOutGenerator::operator=(const AliFemtoModelFreezeOutGenerator& aGen) +{ + if (this == &aGen) return *this; + if (aGen.fRandom) + fRandom = new TRandom2(*aGen.fRandom); + else + fRandom=0; + return *this; +}; + +inline AliFemtoModelFreezeOutGenerator::AliFemtoModelFreezeOutGenerator* Clone() { return 0; }; + + +#endif + + diff --git a/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelGausLCMSFreezeOutGenerator.cxx b/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelGausLCMSFreezeOutGenerator.cxx new file mode 100644 index 00000000000..83db74d7406 --- /dev/null +++ b/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelGausLCMSFreezeOutGenerator.cxx @@ -0,0 +1,129 @@ +//////////////////////////////////////////////////////////////////////////////// +/// /// +/// AliFemtoModelGausLCMSFreezeOutGenerator - freeze-out /// +/// coordinates generator, generating a 3D gaussian ellipsoid in LCMS /// +/// Authors: Adam Kisiel kisiel@mps.ohio-state.edu /// +/// /// +//////////////////////////////////////////////////////////////////////////////// +#ifdef __ROOT__ + ClassImp(AliFemtoModelGausLCMSFreezeOutGenerator, 1) +#endif + +#include "math.h" +#include "AliFemtoModelGausLCMSFreezeOutGenerator.h" +#include "AliFemtoModelHiddenInfo.h" +#include "AliFemtoLorentzVector.h" + +//_______________________ +AliFemtoModelGausLCMSFreezeOutGenerator::AliFemtoModelGausLCMSFreezeOutGenerator() : + fSizeOut(0), fSizeSide(0), fSizeLong(0) +{ + // Default constructor + fRandom = new TRandom2(); +} + +//_______________________ +AliFemtoModelGausLCMSFreezeOutGenerator::AliFemtoModelGausLCMSFreezeOutGenerator(const AliFemtoModelGausLCMSFreezeOutGenerator &aModel): + fSizeOut(0), fSizeSide(0), fSizeLong(0) +{ + // Copy constructor + fRandom = new TRandom2(); + SetSizeOut(aModel.GetSizeOut()); + SetSizeSide(aModel.GetSizeSide()); + SetSizeLong(aModel.GetSizeLong()); +} +//_______________________ +AliFemtoModelGausLCMSFreezeOutGenerator::~AliFemtoModelGausLCMSFreezeOutGenerator() +{ + if (fRandom) delete fRandom; +} +//_______________________ +void AliFemtoModelGausLCMSFreezeOutGenerator::GenerateFreezeOut(AliFemtoPair *aPair) +{ + // Generate two particle emission points with respect + // to their pair momentum + // The source is the 3D Gaussian ellipsoid in the LCMS frame + AliFemtoModelHiddenInfo *inf1 = (AliFemtoModelHiddenInfo *) aPair->track1()->HiddenInfo(); + AliFemtoModelHiddenInfo *inf2 = (AliFemtoModelHiddenInfo *) aPair->track2()->HiddenInfo(); + + if ((!inf1) || (!inf2)) { cout << "Hidden info not created! " << endl; exit(kFALSE); } + + Double_t tPx = inf1->GetTrueMomentum()->x() + inf2->GetTrueMomentum()->x(); + Double_t tPy = inf1->GetTrueMomentum()->y() + inf2->GetTrueMomentum()->y(); + Double_t tPz = inf1->GetTrueMomentum()->z() + inf2->GetTrueMomentum()->z(); + Double_t tM1 = inf1->GetMass(); + Double_t tM2 = inf2->GetMass(); + Double_t tE1 = sqrt(tM1*tM1 + inf1->GetTrueMomentum()->mag2()); + Double_t tE2 = sqrt(tM2*tM2 + inf2->GetTrueMomentum()->mag2()); + Double_t tEs = tE1 + tE2; + + Double_t tPt = sqrt(tPx*tPx + tPy*tPy); + + Double_t tRout = fRandom->Gaus(0.0, fSizeOut); + Double_t tRside = fRandom->Gaus(0.0, fSizeSide); + Double_t tRlong = fRandom->Gaus(0.0, fSizeLong); + + Double_t tXout = (tPx * tRout + tPy * tRside)/tPt; + Double_t tXside = (tPy * tRout - tPx * tRside)/tPt; + + Double_t tBetaz = tPz/tEs; + Double_t tGammaz = 1.0/(1-tBetaz*tBetaz); + + Double_t tXlong = tGammaz * (tRlong + tBetaz * 0); + Double_t tXtime = tGammaz * (0 + tBetaz * tRlong); + + if (!(inf1->GetEmissionPoint())) { + AliFemtoLorentzVector *tPos = new AliFemtoLorentzVector(0,0,0,0); + inf1->SetEmissionPoint(tPos); + } + else + inf1->SetEmissionPoint(0,0,0,0); + if (!(inf2->GetEmissionPoint())) { + AliFemtoLorentzVector *tPos = new AliFemtoLorentzVector(tXout,tXside,tXlong,tXtime); + inf2->SetEmissionPoint(tPos); + } + else + inf2->SetEmissionPoint(tXout, tXside, tXlong, tXtime); +} + +//_______________________ +void AliFemtoModelGausLCMSFreezeOutGenerator::SetSizeOut(Double_t aSizeOut) +{ + fSizeOut = aSizeOut; +} +//_______________________ +void AliFemtoModelGausLCMSFreezeOutGenerator::SetSizeSide(Double_t aSizeSide) +{ + fSizeSide = aSizeSide; +} +//_______________________ +void AliFemtoModelGausLCMSFreezeOutGenerator::SetSizeLong(Double_t aSizeLong) +{ + fSizeLong = aSizeLong; +} + +//_______________________ +Double_t AliFemtoModelGausLCMSFreezeOutGenerator::GetSizeOut() const +{ + return fSizeOut; +} +//_______________________ +Double_t AliFemtoModelGausLCMSFreezeOutGenerator::GetSizeSide() const +{ + return fSizeSide; +} +//_______________________ +Double_t AliFemtoModelGausLCMSFreezeOutGenerator::GetSizeLong() const +{ + return fSizeLong; +} +//_______________________ +AliFemtoModelFreezeOutGenerator* AliFemtoModelGausLCMSFreezeOutGenerator::Clone() const +{ + return GetGenerator(); +} +//_______________________ +AliFemtoModelFreezeOutGenerator* AliFemtoModelGausLCMSFreezeOutGenerator::GetGenerator() const +{ + AliFemtoModelFreezeOutGenerator* tModel = new AliFemtoModelGausLCMSFreezeOutGenerator(*this); return tModel; +} diff --git a/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelGausLCMSFreezeOutGenerator.h b/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelGausLCMSFreezeOutGenerator.h new file mode 100644 index 00000000000..198a9c5a427 --- /dev/null +++ b/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelGausLCMSFreezeOutGenerator.h @@ -0,0 +1,49 @@ +//////////////////////////////////////////////////////////////////////////////// +/// /// +/// AliFemtoModelGausLCMSFreezeOutGenerator - freeze-out /// +/// coordinates generator, generating a 3D gaussian ellipsoid in LCMS /// +/// Authors: Adam Kisiel kisiel@mps.ohio-state.edu /// +/// /// +//////////////////////////////////////////////////////////////////////////////// +#ifndef AliFemtoModelGausLCMSFreezeOutGenerator_hh +#define AliFemtoModelGausLCMSFreezeOutGenerator_hh + +#include "Model/AliFemtoModelFreezeOutGenerator.h" + +#include "TRandom.h" + +class AliFemtoModelGausLCMSFreezeOutGenerator : public AliFemtoModelFreezeOutGenerator +{ + public: + AliFemtoModelGausLCMSFreezeOutGenerator(); + AliFemtoModelGausLCMSFreezeOutGenerator(const AliFemtoModelGausLCMSFreezeOutGenerator &aModel); + virtual ~AliFemtoModelGausLCMSFreezeOutGenerator(); + virtual void GenerateFreezeOut(AliFemtoPair *aPair);; + + void SetSizeOut(Double_t aSizeOut); + void SetSizeSide(Double_t aSizeSide); + void SetSizeLong(Double_t aSizeLong); + + Double_t GetSizeOut() const; + Double_t GetSizeSide() const; + Double_t GetSizeLong() const; + + virtual AliFemtoModelFreezeOutGenerator* Clone() const; + + protected: + Double_t fSizeOut; + Double_t fSizeSide; + Double_t fSizeLong; + + private: + AliFemtoModelFreezeOutGenerator* GetGenerator() const; + +#ifdef __ROOT__ + ClassDef(AliFemtoModelGausLCMSFreezeOutGenerator, 1) +#endif + + }; + +#endif + + diff --git a/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelHiddenInfo.cxx b/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelHiddenInfo.cxx new file mode 100644 index 00000000000..a5136f258ff --- /dev/null +++ b/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelHiddenInfo.cxx @@ -0,0 +1,151 @@ +#include "AliFemtoModelHiddenInfo.h" + +//_____________________________________________ +AliFemtoModelHiddenInfo::AliFemtoModelHiddenInfo() : + fTrueMomentum(0), + fEmissionPoint(0), + fPDGPid(0), + fMass(0) +{ +}; +//_____________________________________________ +AliFemtoModelHiddenInfo::AliFemtoModelHiddenInfo(const AliFemtoModelHiddenInfo &aInfo) : + fTrueMomentum(0), + fEmissionPoint(0), + fPDGPid(0), + fMass(0) +{ + if (aInfo.GetTrueMomentum()) + SetTrueMomentum(aInfo.GetTrueMomentum()); + if (aInfo.GetEmissionPoint()) + SetEmissionPoint(aInfo.GetEmissionPoint()); + fPDGPid = aInfo.GetPDGPid(); + fMass = aInfo.GetMass(); +} +//_____________________________________________ +AliFemtoModelHiddenInfo::~AliFemtoModelHiddenInfo() +{ + if (fTrueMomentum) delete fTrueMomentum; + if (fEmissionPoint) delete fEmissionPoint; +} +//_____________________________________________ +AliFemtoModelHiddenInfo& AliFemtoModelHiddenInfo::operator=(const AliFemtoModelHiddenInfo& aInfo) +{ + if (this == &aInfo) + return *this; + + if (aInfo.GetTrueMomentum()) + SetTrueMomentum(aInfo.GetTrueMomentum()); + else SetTrueMomentum(0); + if (aInfo.GetEmissionPoint()) + SetEmissionPoint(aInfo.GetEmissionPoint()); + else SetEmissionPoint(0); + fPDGPid = aInfo.GetPDGPid(); + fMass = aInfo.GetMass(); + + return *this; +} +//_____________________________________________ +AliFemtoThreeVector *AliFemtoModelHiddenInfo::GetTrueMomentum() const +{ + return fTrueMomentum; +} +//_____________________________________________ +AliFemtoLorentzVector *AliFemtoModelHiddenInfo::GetEmissionPoint() const +{ + return fEmissionPoint; +} +//_____________________________________________ +Int_t AliFemtoModelHiddenInfo::GetPDGPid() const +{ + return fPDGPid; +} +//_____________________________________________ +Double_t AliFemtoModelHiddenInfo::GetMass() const +{ + return fMass; +} +//_____________________________________________ +void AliFemtoModelHiddenInfo::SetTrueMomentum(AliFemtoThreeVector *aMom) +{ + if (fTrueMomentum) { + fTrueMomentum->setX(aMom->x()); + fTrueMomentum->setY(aMom->y()); + fTrueMomentum->setZ(aMom->z()); + } + else { + fTrueMomentum = new AliFemtoThreeVector(*aMom); + } +} +//_____________________________________________ +void AliFemtoModelHiddenInfo::SetTrueMomentum(const AliFemtoThreeVector& aMom) +{ + if (fTrueMomentum) { + fTrueMomentum->setX(aMom.x()); + fTrueMomentum->setY(aMom.y()); + fTrueMomentum->setZ(aMom.z()); + } + else { + fTrueMomentum = new AliFemtoThreeVector(); + *fTrueMomentum = aMom; + } +} +//_____________________________________________ +void AliFemtoModelHiddenInfo::SetTrueMomentum(Double_t aPx, Double_t aPy, Double_t aPz) +{ + if (!fTrueMomentum) fTrueMomentum = new AliFemtoThreeVector(); + fTrueMomentum->setX(aPx); + fTrueMomentum->setY(aPy); + fTrueMomentum->setZ(aPz); +} +//_____________________________________________ +void AliFemtoModelHiddenInfo::SetEmissionPoint(AliFemtoLorentzVector *aPos) +{ + if (fEmissionPoint) { + fEmissionPoint->setX(aPos->px()); + fEmissionPoint->setY(aPos->py()); + fEmissionPoint->setZ(aPos->pz()); + fEmissionPoint->setT(aPos->e()); + } + else { + fEmissionPoint = new AliFemtoLorentzVector(*aPos); + } +} +//_____________________________________________ +void AliFemtoModelHiddenInfo::SetEmissionPoint(const AliFemtoLorentzVector& aPos) +{ + if (fEmissionPoint) { + fEmissionPoint->setX(aPos.px()); + fEmissionPoint->setY(aPos.py()); + fEmissionPoint->setZ(aPos.pz()); + fEmissionPoint->setT(aPos.e()); + } + else { + fEmissionPoint = new AliFemtoLorentzVector(); + *fEmissionPoint = aPos; + } +} +//_____________________________________________ +void AliFemtoModelHiddenInfo::SetPDGPid(Int_t aPid) +{ + fPDGPid = aPid; +} +//_____________________________________________ +void AliFemtoModelHiddenInfo::SetMass(Double_t aMass) +{ + fMass = aMass; +} +//_____________________________________________ +void AliFemtoModelHiddenInfo::SetEmissionPoint(Double_t aRx, Double_t aRy, Double_t aRz, Double_t aT) +{ + fEmissionPoint->setX(aRx); + fEmissionPoint->setY(aRy); + fEmissionPoint->setZ(aRz); + fEmissionPoint->setT(aT); +} +//_____________________________________________ + AliFemtoHiddenInfo* AliFemtoModelHiddenInfo::getParticleHiddenInfo() const +{ + AliFemtoModelHiddenInfo* tBuf = new AliFemtoModelHiddenInfo(*this); + return tBuf; +} diff --git a/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelHiddenInfo.h b/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelHiddenInfo.h new file mode 100644 index 00000000000..d707373efe4 --- /dev/null +++ b/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelHiddenInfo.h @@ -0,0 +1,57 @@ +//////////////////////////////////////////////////////////////////////////////// +/// /// +/// AliFemtoModelHiddenInfo - the hidden info for model calculations /// +/// Stores information needed for the weight generation - the true /// +/// simulated momenta, freeze-out coordinates from model and particle PID /// +/// /// +//////////////////////////////////////////////////////////////////////////////// + +#ifndef AliFemtoModelHiddenInfo_hh +#define AliFemtoModelHiddenInfo_hh + +#include +#include "Infrastructure/AliFemtoTypes.h" +#include "Infrastructure/AliFemtoThreeVector.h" +#include "Infrastructure/AliFemtoLorentzVector.h" +#include "Base/AliFemtoHiddenInfo.h" + +class AliFemtoModelHiddenInfo : public AliFemtoHiddenInfo{ + +public: + AliFemtoModelHiddenInfo(); + AliFemtoModelHiddenInfo(const AliFemtoModelHiddenInfo &aInfo); + virtual ~AliFemtoModelHiddenInfo(); + + AliFemtoModelHiddenInfo& operator=(const AliFemtoModelHiddenInfo& aInfo); + AliFemtoThreeVector *GetTrueMomentum() const; + AliFemtoLorentzVector *GetEmissionPoint() const; + Int_t GetPDGPid() const; + Double_t GetMass() const; + + void SetTrueMomentum(AliFemtoThreeVector *aMom); + void SetTrueMomentum(const AliFemtoThreeVector& aMom); + void SetTrueMomentum(Double_t aPx, Double_t aPy, Double_t aPz); + void SetEmissionPoint(AliFemtoLorentzVector *aPos); + void SetEmissionPoint(const AliFemtoLorentzVector& aPos); + void SetEmissionPoint(Double_t aRx, Double_t aRy, Double_t aRz, Double_t aT); + void SetPDGPid(Int_t aPid); + void SetMass(Double_t aMass); + +// !!! MANDATORY !!! +// --- Copy the hidden info from AliFemtoTrack to AliFemtoParticle + virtual AliFemtoHiddenInfo* getParticleHiddenInfo() const; + virtual AliFemtoHiddenInfo* clone() const; + + protected: + AliFemtoThreeVector *fTrueMomentum; // True (simulated) momentum + AliFemtoLorentzVector *fEmissionPoint; // Emission point coordinates + Int_t fPDGPid; // True PID of the particle + Double_t fMass; +}; +//_______________________________________ +inline AliFemtoHiddenInfo* AliFemtoModelHiddenInfo::clone() const{ + // return exact copy of this hidden info + return getParticleHiddenInfo(); +} + +#endif diff --git a/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelManager.cxx b/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelManager.cxx new file mode 100644 index 00000000000..541a4633396 --- /dev/null +++ b/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelManager.cxx @@ -0,0 +1,108 @@ +//////////////////////////////////////////////////////////////////////////////// +/// /// +/// AliFemtoModelManager - main helper class for femtoscopy calculations /// +/// Manages weight generation, freeze-out coordinates generation /// +/// Authors: Adam Kisiel kisiel@mps.ohio-state.edu /// +/// /// +//////////////////////////////////////////////////////////////////////////////// +#ifdef __ROOT__ + ClassImp(AliFemtoModelManager, 1) +#endif + +#include "AliFemtoModelManager.h" +#include "AliFemtoModelHiddenInfo.h" + +//_____________________________________________ +AliFemtoModelManager::AliFemtoModelManager(): + fFreezeOutGenerator(0), + fWeightGenerator(0), + fCreateCopyHiddenInfo(kFALSE) +{ +} +//_____________________________________________ +AliFemtoModelManager::AliFemtoModelManager(const AliFemtoModelManager& aManager): + fFreezeOutGenerator(0), + fWeightGenerator(0), + fCreateCopyHiddenInfo(aManager.fCreateCopyHiddenInfo) +{ + if (aManager.fFreezeOutGenerator) { + fFreezeOutGenerator = aManager.fFreezeOutGenerator->Clone(); + } + if (aManager.fWeightGenerator) { + fWeightGenerator = aManager.fWeightGenerator->Clone(); + } +} +//_____________________________________________ +AliFemtoModelManager::~AliFemtoModelManager() +{ + if (fFreezeOutGenerator) delete fFreezeOutGenerator; + if (fWeightGenerator) delete fWeightGenerator; +} +//_____________________________________________ +AliFemtoModelManager& AliFemtoModelManager::operator=(const AliFemtoModelManager& aManager) +{ + if (this == &aManager) + return *this; + if (aManager.fFreezeOutGenerator) { + fFreezeOutGenerator = aManager.fFreezeOutGenerator->Clone(); + } + else fFreezeOutGenerator = 0; + if (aManager.fWeightGenerator) { + fWeightGenerator = aManager.fWeightGenerator->Clone(); + } + else fWeightGenerator = 0; + fCreateCopyHiddenInfo = aManager.fCreateCopyHiddenInfo; + + return *this; +} +//_____________________________________________ +void AliFemtoModelManager::AcceptFreezeOutGenerator(AliFemtoModelFreezeOutGenerator *aFreeze) +{ + fFreezeOutGenerator = aFreeze; +} +//_____________________________________________ +void AliFemtoModelManager::AcceptWeightGenerator(AliFemtoModelWeightGenerator *aWeight) +{ + fWeightGenerator = aWeight; +} +//_____________________________________________ +Double_t AliFemtoModelManager::GetWeight(AliFemtoPair *aPair) +{ + // Return femtoscopic weight for a fiven pair + if (fCreateCopyHiddenInfo) { + if (!(aPair->track1()->HiddenInfo())) { + AliFemtoModelHiddenInfo *inf1 = new AliFemtoModelHiddenInfo(); + inf1->SetTrueMomentum(aPair->track1()->Track()->P()); + inf1->SetMass(0.13957); + aPair->track1()->SetHiddenInfo(inf1); + delete inf1; + } + if (!(aPair->track2()->HiddenInfo())) { + AliFemtoModelHiddenInfo *inf2 = new AliFemtoModelHiddenInfo(); + inf2->SetTrueMomentum(aPair->track2()->Track()->P()); + inf2->SetMass(0.13957); + aPair->track2()->SetHiddenInfo(inf2); + delete inf2; + } + } + + if (fFreezeOutGenerator) { + fFreezeOutGenerator->GenerateFreezeOut(aPair); + } + return fWeightGenerator->GenerateWeight(aPair); +} +//_____________________________________________ +void AliFemtoModelManager::CreateCopyHiddenInfo() +{ + fCreateCopyHiddenInfo = kTRUE; +} +//_____________________________________________ +AliFemtoModelFreezeOutGenerator* AliFemtoModelManager::GetFreezeOutGenerator() +{ + return fFreezeOutGenerator; +} +//_____________________________________________ +AliFemtoModelWeightGenerator* AliFemtoModelManager::GetWeightGenerator() +{ + return fWeightGenerator; +} diff --git a/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelManager.h b/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelManager.h new file mode 100644 index 00000000000..dcd5efd77fb --- /dev/null +++ b/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelManager.h @@ -0,0 +1,48 @@ +//////////////////////////////////////////////////////////////////////////////// +/// /// +/// AliFemtoModelManager - main helper class for femtoscopy calculations /// +/// Manages weight generation, freeze-out coordinates generation /// +/// Authors: Adam Kisiel kisiel@mps.ohio-state.edu /// +/// /// +//////////////////////////////////////////////////////////////////////////////// +#ifndef AliFemtoModelManager_hh +#define AliFemtoModelManager_hh + +#include "Infrastructure/AliFemtoEnumeration.h" +#include "AliFemtoModelWeightGenerator.h" +#include "AliFemtoModelFreezeOutGenerator.h" + +class AliFemtoModelManager +{ + public: + AliFemtoModelManager(); + AliFemtoModelManager(const AliFemtoModelManager& aManager); + virtual ~AliFemtoModelManager(); + + AliFemtoModelManager& operator=(const AliFemtoModelManager& aManager); + + void AcceptFreezeOutGenerator(AliFemtoModelFreezeOutGenerator *aFreeze); + void AcceptWeightGenerator(AliFemtoModelWeightGenerator *aWeight); + void CreateCopyHiddenInfo(); + + AliFemtoModelFreezeOutGenerator* GetFreezeOutGenerator(); + AliFemtoModelWeightGenerator* GetWeightGenerator(); + + virtual Double_t GetWeight(AliFemtoPair *aPair); + + protected: + AliFemtoModelFreezeOutGenerator *fFreezeOutGenerator; // Freeze-out coordinates generator + AliFemtoModelWeightGenerator *fWeightGenerator; // Femtoscopic weight generator + Bool_t fCreateCopyHiddenInfo; // Switch to turn on hidden-info generation + + private: + +#ifdef __ROOT__ + ClassDef(AliFemtoModelManager, 1) +#endif + + }; + +#endif + + diff --git a/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelWeightGenerator.cxx b/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelWeightGenerator.cxx new file mode 100644 index 00000000000..42432791744 --- /dev/null +++ b/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelWeightGenerator.cxx @@ -0,0 +1,107 @@ +//////////////////////////////////////////////////////////////////////////////// +/// /// +/// AliFemtoModelWeightGenerator - abstract base class for femtoscopic /// +/// weight generator /// +/// Authors: Adam Kisiel kisiel@mps.ohio-state.edu /// +/// /// +//////////////////////////////////////////////////////////////////////////////// +#ifdef __ROOT__ + ClassImp(AliFemtoModelGausLCMSFreezeOutGenerator, 1) +#endif + +#include "AliFemtoModelWeightGenerator.h" +#include "AliFemtoModelHiddenInfo.h" + +const Int_t AliFemtoModelWeightGenerator::kPionPlusPionPlus = 1; +const Int_t AliFemtoModelWeightGenerator::kPionPlusPionMinus = 2; +const Int_t AliFemtoModelWeightGenerator::kKaonPlusKaonPlus = 3; +const Int_t AliFemtoModelWeightGenerator::kKaonPlusKaonMinus = 4; +const Int_t AliFemtoModelWeightGenerator::kProtonProton = 5; +const Int_t AliFemtoModelWeightGenerator::kProtonAntiproton = 6; +const Int_t AliFemtoModelWeightGenerator::kPionPlusKaonPlus = 7; +const Int_t AliFemtoModelWeightGenerator::kPionPlusKaonMinus = 8; +const Int_t AliFemtoModelWeightGenerator::kPionPlusProton = 9; +const Int_t AliFemtoModelWeightGenerator::kPionPlusAntiproton = 10; +const Int_t AliFemtoModelWeightGenerator::kKaonPlusProton = 11; +const Int_t AliFemtoModelWeightGenerator::kKaonPlusAntiproton = 12; + +//_____________________________________________ +AliFemtoModelWeightGenerator::AliFemtoModelWeightGenerator() : + fPairType(0), + fKStarOut(0), fKStarSide(0), fKStarLong(0), fKStar(0), + fRStarOut(0), fRStarSide(0), fRStarLong(0), fRStar(0) +{} +//_____________________________________________ +AliFemtoModelWeightGenerator::AliFemtoModelWeightGenerator(const AliFemtoModelWeightGenerator &aModel) : + fPairType(0), + fKStarOut(0), fKStarSide(0), fKStarLong(0), fKStar(0), + fRStarOut(0), fRStarSide(0), fRStarLong(0), fRStar(0) +{ + fPairType = aModel.fPairType; +} +//_____________________________________________ +AliFemtoModelWeightGenerator::~AliFemtoModelWeightGenerator(){/* no-op */} +//_____________________________________________ +void AliFemtoModelWeightGenerator::SetPairType(Int_t aPairType) +{ + fPairType = aPairType; +} + +//_____________________________________________ +Int_t AliFemtoModelWeightGenerator::GetPairType() +{ + return fPairType; +} + +//_____________________________________________ +void AliFemtoModelWeightGenerator::SetPairTypeFromPair(AliFemtoPair *aPair) +{ + AliFemtoModelHiddenInfo *inf1 = ( AliFemtoModelHiddenInfo *) aPair->track1()->HiddenInfo(); + AliFemtoModelHiddenInfo *inf2 = ( AliFemtoModelHiddenInfo *) aPair->track2()->HiddenInfo(); + + const Int_t tPid1 = inf1->GetPDGPid(); + const Int_t tPid2 = inf2->GetPDGPid(); + + if (((tPid1 == 211) && (tPid2 == 211)) || + ((tPid1 == -211) && (tPid2 == -211))) + fPairType = kPionPlusPionPlus; + else if (((tPid1 == -211) && (tPid2 == 211)) || + ((tPid1 == 211) && (tPid2 == -211))) + fPairType = kPionPlusPionMinus; + else if (((tPid1 == 321) && (tPid2 == 321)) || + ((tPid1 == -321) && (tPid2 == -321))) + fPairType = kKaonPlusKaonPlus; + else if (((tPid1 == -321) && (tPid2 == 321)) || + ((tPid1 == 321) && (tPid2 == -321))) + fPairType = kKaonPlusKaonMinus; + else if (((tPid1 == 2212) && (tPid2 == 2212)) || + ((tPid1 == -2212) && (tPid2 == -2212))) + fPairType = kProtonProton; + else if (((tPid1 == -2212) && (tPid2 == 2212)) || + ((tPid1 == 2212) && (tPid2 == -2212))) + fPairType = kProtonAntiproton; + else if (((tPid1 == 211) && (tPid2 == 321)) || + ((tPid1 == -211) && (tPid2 == -321))) + fPairType = kPionPlusKaonPlus; + else if (((tPid1 == -211) && (tPid2 == 321)) || + ((tPid1 == 211) && (tPid2 == -321))) + fPairType = kPionPlusKaonMinus; + else if (((tPid1 == 211) && (tPid2 == 2212)) || + ((tPid1 == -211) && (tPid2 == -2212))) + fPairType = kPionPlusProton; + else if (((tPid1 == -211) && (tPid2 == 2212)) || + ((tPid1 == 211) && (tPid2 == -2212))) + fPairType = kPionPlusAntiproton; + else if (((tPid1 == 321) && (tPid2 == 2212)) || + ((tPid1 == -321) && (tPid2 == -2212))) + fPairType = kKaonPlusProton; + else if (((tPid1 == -321) && (tPid2 == 2212)) || + ((tPid1 == 321) && (tPid2 == -2212))) + fPairType = kKaonPlusAntiproton; +} + +//_____________________________________________ +AliFemtoModelWeightGenerator* AliFemtoModelWeightGenerator::Clone() const +{ + return 0; +} diff --git a/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelWeightGenerator.h b/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelWeightGenerator.h new file mode 100644 index 00000000000..e6a6520684a --- /dev/null +++ b/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelWeightGenerator.h @@ -0,0 +1,82 @@ +//////////////////////////////////////////////////////////////////////////////// +/// /// +/// AliFemtoModelWeightGenerator - abstract base class for femtoscopic /// +/// weight generator /// +/// Authors: Adam Kisiel kisiel@mps.ohio-state.edu /// +/// /// +//////////////////////////////////////////////////////////////////////////////// +#ifndef AliFemtoModelWeightGenerator_hh +#define AliFemtoModelWeightGenerator_hh + +#include "TRandom2.h" +#include "AliFemtoPair.h" + +class AliFemtoModelWeightGenerator +{ + public: + AliFemtoModelWeightGenerator(); + AliFemtoModelWeightGenerator(const AliFemtoModelWeightGenerator &aModel); + virtual ~AliFemtoModelWeightGenerator(); + virtual Double_t GenerateWeight(AliFemtoPair *aPair) = 0; + + virtual void SetPairType(Int_t aPairType); + virtual void SetPairTypeFromPair(AliFemtoPair *aPair); + virtual Int_t GetPairType(); + + virtual Double_t GetKStar(); + virtual Double_t GetKStarOut(); + virtual Double_t GetKStarSide(); + virtual Double_t GetKStarLong(); + virtual Double_t GetRStar(); + virtual Double_t GetRStarOut(); + virtual Double_t GetRStarSide(); + virtual Double_t GetRStarLong(); + + virtual AliFemtoModelWeightGenerator* Clone() const; + + static const Int_t kPionPlusPionPlus; + static const Int_t kPionPlusPionMinus; + static const Int_t kKaonPlusKaonPlus; + static const Int_t kKaonPlusKaonMinus; + static const Int_t kProtonProton; + static const Int_t kProtonAntiproton; + static const Int_t kPionPlusKaonPlus; + static const Int_t kPionPlusKaonMinus; + static const Int_t kPionPlusProton; + static const Int_t kPionPlusAntiproton; + static const Int_t kKaonPlusProton; + static const Int_t kKaonPlusAntiproton; + + protected: + Int_t fPairType; + + Double_t fKStarOut; // relative momentum out component in PRF + Double_t fKStarSide; // relative momentum side component in PRF + Double_t fKStarLong; // relative momentum long component in PRF + Double_t fKStar; // relative momentum magnitude + + Double_t fRStarOut; // relative separation out component in PRF + Double_t fRStarSide; // relative separation side component in PRF + Double_t fRStarLong; // relative separation long component in PRF + Double_t fRStar; // relative separation magnitude + private: + +#ifdef __ROOT__ + ClassDef(AliFemtoModelWeightGenerator, 1) +#endif + + }; + +inline Double_t AliFemtoModelWeightGenerator::GetKStar() { return fKStar; } +inline Double_t AliFemtoModelWeightGenerator::GetKStarOut() { return fKStarOut; } +inline Double_t AliFemtoModelWeightGenerator::GetKStarSide() { return fKStarSide; } +inline Double_t AliFemtoModelWeightGenerator::GetKStarLong() { return fKStarLong; } +inline Double_t AliFemtoModelWeightGenerator::GetRStar() { return fRStar; } +inline Double_t AliFemtoModelWeightGenerator::GetRStarOut() { return fRStarOut; } +inline Double_t AliFemtoModelWeightGenerator::GetRStarSide() { return fRStarSide; } +inline Double_t AliFemtoModelWeightGenerator::GetRStarLong() { return fRStarLong; } + + +#endif + + diff --git a/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelWeightGeneratorBasic.cxx b/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelWeightGeneratorBasic.cxx new file mode 100644 index 00000000000..70e03aeca9f --- /dev/null +++ b/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelWeightGeneratorBasic.cxx @@ -0,0 +1,179 @@ +//////////////////////////////////////////////////////////////////////////////// +/// /// +/// AliFemtoModelWeightGeneratorBasic - basic femtoscopic weight generator /// +/// only return a simple /// +/// Authors: Adam Kisiel kisiel@mps.ohio-state.edu /// +/// /// +//////////////////////////////////////////////////////////////////////////////// +#ifdef __ROOT__ + ClassImp(AliFemtoModelWeightGeneratorBasic, 1) +#endif + +#include "AliFemtoModelWeightGeneratorBasic.h" +#include "AliFemtoModelHiddenInfo.h" + +//________________________ +AliFemtoModelWeightGeneratorBasic::AliFemtoModelWeightGeneratorBasic(): + AliFemtoModelWeightGenerator() +{ + /* no-op */ +} +//________________________ +AliFemtoModelWeightGeneratorBasic::AliFemtoModelWeightGeneratorBasic(const AliFemtoModelWeightGeneratorBasic &aModel) : + AliFemtoModelWeightGenerator(aModel) +{ + /* no-op */ +} + +//________________________ +AliFemtoModelWeightGeneratorBasic::~AliFemtoModelWeightGeneratorBasic() +{ + /* no-op */ +} + +//________________________ +Double_t AliFemtoModelWeightGeneratorBasic::GenerateWeight(AliFemtoPair *aPair) +{ + // Generate a simple femtoscopic weight coming only from + // quantum statistics - symmetrization or anti-symmetrization + // of the pair wave function + + // Get hidden information pointers + AliFemtoModelHiddenInfo *inf1 = (AliFemtoModelHiddenInfo *) aPair->track1()->HiddenInfo(); + AliFemtoModelHiddenInfo *inf2 = (AliFemtoModelHiddenInfo *) aPair->track2()->HiddenInfo(); + + // Calculate pair variables + Double_t tPx = inf1->GetTrueMomentum()->x()+inf2->GetTrueMomentum()->x(); + Double_t tPy = inf1->GetTrueMomentum()->y()+inf2->GetTrueMomentum()->y(); + Double_t tPz = inf1->GetTrueMomentum()->z()+inf2->GetTrueMomentum()->z(); + // double tE = inf1->GetTrueMomentum()->e +inf2->GetTrueMomentum()->.e; + Double_t tM1 = inf1->GetMass(); + Double_t tM2 = inf2->GetMass(); + Double_t tE1 = sqrt(tM1*tM1 + inf1->GetTrueMomentum()->mag2()); + Double_t tE2 = sqrt(tM2*tM2 + inf2->GetTrueMomentum()->mag2()); + Double_t tE = tE1 + tE2; + Double_t tPt = tPx*tPx + tPy*tPy; + Double_t tMt = tE*tE - tPz*tPz;//mCVK; + Double_t tM = sqrt(tMt - tPt); + tMt = sqrt(tMt); + tPt = sqrt(tPt); + Double_t tBetat = tPt/tMt; + + // Boost to LCMS + Double_t tBeta = tPz/tE; + Double_t tGamma = tE/tMt; + fKStarLong = tGamma * (inf1->GetTrueMomentum()->z() - tBeta * tE1); + Double_t tE1L = tGamma * (tE1 - tBeta * inf1->GetTrueMomentum()->z()); + + // Transform positions to LCMS +// Double_t tP1zl = tGamma * (inf1->GetEmissionPoint()->z() - tBeta * inf1->GetEmissionPoint()->t()); +// Double_t tP1tl = tGamma * (inf1->GetEmissionPoint()->t() - tBeta * inf1->GetEmissionPoint()->z()); + +// Double_t tP2zl = tGamma * (inf2->GetEmissionPoint()->z() - tBeta * inf2->GetEmissionPoint()->t()); +// Double_t tP2tl = tGamma * (inf2->GetEmissionPoint()->t() - tBeta * inf2->GetEmissionPoint()->z()); + +// Double_t tP1pzl = tGamma * (inf1->GetTrueMomentum()->z() - tBeta * tE1); +// Double_t tP1el = tGamma * (tE1 - tBeta * inf1->GetTrueMomentum()->z()); + +// Double_t tP2pzl = tGamma * (inf2->GetTrueMomentum()->z() - tBeta * tE2); +// Double_t tP2el = tGamma * (tE2 - tBeta * inf2->GetTrueMomentum()->z()); + + // Rotate in transverse plane + fKStarOut = ( inf1->GetTrueMomentum()->x()*tPx + inf1->GetTrueMomentum()->y()*tPy)/tPt; + fKStarSide = (-inf1->GetTrueMomentum()->x()*tPy + inf1->GetTrueMomentum()->y()*tPx)/tPt; + +// Double_t tP1pxl = fKStarOut; +// Double_t tP1pyl = fKStarSide; + +// Double_t tP2pxl = (inf2->GetTrueMomentum()->x()*tPx + inf2->GetTrueMomentum()->y()*tPy)/tPt; +// Double_t tP2pyl = (inf2->GetTrueMomentum()->y()*tPx - inf2->GetTrueMomentum()->x()*tPy)/tPt;; + +// Double_t tKO = tP1pxl - tP2pxl; +// Double_t tKS = tP1pyl - tP2pyl; +// Double_t tKL = tP1pzl - tP2pzl; +// Double_t tDE = tP1el - tP2el; + + // save the rotated coordinates in LCMS variables +// Double_t tP1xl = ( inf1->GetEmissionPoint()->x()*tPx + inf1->GetEmissionPoint()->y()*tPy)/tPt; +// Double_t tP1yl = (-inf1->GetEmissionPoint()->x()*tPy + inf1->GetEmissionPoint()->y()*tPx)/tPt; + +// Double_t tP2xl = ( inf2->GetEmissionPoint()->x()*tPx + inf2->GetEmissionPoint()->y()*tPy)/tPt; +// Double_t tP2yl = (-inf2->GetEmissionPoint()->x()*tPy + inf2->GetEmissionPoint()->y()*tPx)/tPt; + + // Boost to pair cms + fKStarOut = tMt/tM * (fKStarOut - tPt/tMt * tE1L); + + tBetat = tPt/tMt; +// Double_t tGammat = 1.0/sqrt(1.0-tBetat*tBetat); + +// Double_t tP1xp = tGammat*(tP1xl - tBetat*tP1tl); +// Double_t tP1tp = tGammat*(tP1tl - tBetat*tP1xl); + +// Double_t tP2xp = tGammat*(tP2xl - tBetat*tP2tl); +// Double_t tP2tp = tGammat*(tP2tl - tBetat*tP2xl); + +// Double_t tRO = (tP1xl - tP2xl)/0.197327; +// Double_t tRS = (tP1yl - tP2yl)/0.197327; +// Double_t tRL = (tP1zl - tP2zl)/0.197327; +// Double_t tDT = (tP1tl - tP2tl)/0.197327; + + Double_t tDX = inf1->GetEmissionPoint()->x()-inf2->GetEmissionPoint()->x(); + Double_t tDY = inf1->GetEmissionPoint()->y()-inf2->GetEmissionPoint()->y(); + Double_t tRLong = inf1->GetEmissionPoint()->z()-inf2->GetEmissionPoint()->z(); + Double_t tDTime = inf1->GetEmissionPoint()->t()-inf2->GetEmissionPoint()->t(); + + Double_t tROut = (tDX*tPx + tDY*tPy)/tPt; + Double_t tRSide = (-tDX*tPy + tDY*tPx)/tPt; + + fRStarSide = tRSide; + Double_t tRSS = fRStarSide/0.197327; + + fRStarLong = tGamma*(tRLong - tBeta* tDTime); + Double_t tDTimePairLCMS = tGamma*(tDTime - tBeta* tRLong); + + Double_t tRLS = fRStarLong/0.197327; + tBeta = tPt/tMt; + tGamma = tMt/tM; + + fRStarOut = tGamma*(tROut - tBeta* tDTimePairLCMS); + Double_t tROS = fRStarOut/0.197327; +// Double_t tDTimePairCMS = tGamma*(tDTimePairLCMS - tBeta* tROut); + fRStar = ::sqrt(fRStarOut*fRStarOut + fRStarSide*fRStarSide + + fRStarLong*fRStarLong); + fKStar = ::sqrt(fKStarOut*fKStarOut + fKStarSide*fKStarSide + fKStarLong*fKStarLong); +// Double_t tRSt = fRStar/0.197327; + + if ((fPairType == kPionPlusPionPlus) || (fPairType == kKaonPlusKaonPlus)) + return 1.0 + cos (2*(fKStarOut * tROS + fKStarSide * tRSS + fKStarLong * tRLS)); + else if (fPairType == kProtonProton) + return 1.0 - 0.5 * cos (2*(fKStarOut * tROS + fKStarSide * tRSS + fKStarLong * tRLS)); + else + return 1.0; +} + +//________________________ +void AliFemtoModelWeightGeneratorBasic::SetPairType(Int_t aPairType) +{ + AliFemtoModelWeightGenerator::SetPairType(aPairType); +} +//________________________ +void AliFemtoModelWeightGeneratorBasic::SetPairTypeFromPair(AliFemtoPair *aPair) +{ + AliFemtoModelWeightGenerator::SetPairTypeFromPair(aPair); +} +//________________________ +Int_t AliFemtoModelWeightGeneratorBasic::GetPairType() +{ + return AliFemtoModelWeightGenerator::GetPairType(); +} +//________________________ +AliFemtoModelWeightGenerator* AliFemtoModelWeightGeneratorBasic::Clone() const +{ + return GetGenerator(); +} +//________________________ +AliFemtoModelWeightGenerator* AliFemtoModelWeightGeneratorBasic::GetGenerator() const +{ + AliFemtoModelWeightGeneratorBasic *tGen = new AliFemtoModelWeightGeneratorBasic(*this); + return tGen; +} diff --git a/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelWeightGeneratorBasic.h b/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelWeightGeneratorBasic.h new file mode 100644 index 00000000000..def791b06e8 --- /dev/null +++ b/PWG2/FEMTOSCOPY/AliFemto/Model/AliFemtoModelWeightGeneratorBasic.h @@ -0,0 +1,41 @@ +//////////////////////////////////////////////////////////////////////////////// +/// /// +/// AliFemtoModelWeightGeneratorBasic - basic femtoscopic weight generator /// +/// only return a simple /// +/// Authors: Adam Kisiel kisiel@mps.ohio-state.edu /// +/// /// +//////////////////////////////////////////////////////////////////////////////// +#ifndef AliFemtoModelWeightGeneratorBasic_hh +#define AliFemtoModelWeightGeneratorBasic_hh + +#include "TRandom2.h" +#include "AliFemtoPair.h" +#include "AliFemtoModelWeightGenerator.h" + +class AliFemtoModelWeightGeneratorBasic : public AliFemtoModelWeightGenerator +{ + public: + AliFemtoModelWeightGeneratorBasic(); + AliFemtoModelWeightGeneratorBasic(const AliFemtoModelWeightGeneratorBasic &aModel); + virtual ~AliFemtoModelWeightGeneratorBasic(); + virtual Double_t GenerateWeight(AliFemtoPair *aPair); + + virtual void SetPairType(Int_t aPairType); + virtual void SetPairTypeFromPair(AliFemtoPair *aPair); + virtual Int_t GetPairType(); + + virtual AliFemtoModelWeightGenerator* Clone() const; + protected: + + private: + AliFemtoModelWeightGenerator* GetGenerator() const; + +#ifdef __ROOT__ + ClassDef(AliFemtoModelWeightGeneratorBasic, 1) +#endif + + }; + +#endif + + -- 2.31.1