ROOT logo
////////////////////////////////////////////////////////////////////////////////
///                                                                          ///
/// AliFemtoModelWeightGenerator - abstract base class for femtoscopic       ///
/// weight generator                                                         ///
/// Authors: Adam Kisiel kisiel@mps.ohio-state.edu                           ///
///                                                                          ///
////////////////////////////////////////////////////////////////////////////////
#ifndef ALIFEMTOMODELWEIGHTGENERATOR_H
#define ALIFEMTOMODELWEIGHTGENERATOR_H

#include "TRandom2.h"
class AliFemtoPair;

class AliFemtoModelWeightGenerator 
{
 public:
  AliFemtoModelWeightGenerator();
  AliFemtoModelWeightGenerator(const AliFemtoModelWeightGenerator &aModel);
  virtual ~AliFemtoModelWeightGenerator();
  AliFemtoModelWeightGenerator& operator=(const AliFemtoModelWeightGenerator &aModel);
  virtual Double_t GenerateWeight(AliFemtoPair *aPair) = 0;

  virtual void     SetPairType(Int_t aPairType);
  virtual void     SetPairTypeFromPair(AliFemtoPair *aPair);
  virtual Int_t    GetPairType() const;
  virtual Int_t    GetPairTypeFromPair(AliFemtoPair *aPair);

  virtual Double_t GetKStar() const;
  virtual Double_t GetKStarOut() const;
  virtual Double_t GetKStarSide() const;
  virtual Double_t GetKStarLong() const;
  virtual Double_t GetRStar() const;
  virtual Double_t GetRStarOut() const;
  virtual Double_t GetRStarSide() const;
  virtual Double_t GetRStarLong() const;

  virtual AliFemtoModelWeightGenerator* Clone() const;

  static Int_t PionPlusPionPlus();  
  static Int_t PionPlusPionMinus(); 
  static Int_t KaonPlusKaonPlus();  
  static Int_t KaonPlusKaonMinus(); 
  static Int_t ProtonProton();      
  static Int_t ProtonAntiproton();  
  static Int_t PionPlusKaonPlus();  
  static Int_t PionPlusKaonMinus(); 
  static Int_t PionPlusProton();    
  static Int_t PionPlusAntiproton();
  static Int_t KaonPlusProton();    
  static Int_t KaonPlusAntiproton();
  static Int_t PairTypeNone();

 protected:
  static const Int_t fgkPairTypeNone;      // no pair type set - read from model
  static const Int_t fgkPionPlusPionPlus;  // identical pion pair
  static const Int_t fgkPionPlusPionMinus; // non-identical pion pair
  static const Int_t fgkKaonPlusKaonPlus;  // identical kaon pair
  static const Int_t fgkKaonPlusKaonMinus; // non-identical kaon pair
  static const Int_t fgkProtonProton;      // identical proton pair
  static const Int_t fgkProtonAntiproton;  // non-identical proton pair
  static const Int_t fgkPionPlusKaonPlus;  // same-charge pion kaon pair
  static const Int_t fgkPionPlusKaonMinus; // opposite-charge pion kaon pair
  static const Int_t fgkPionPlusProton;    // same-charge pion proton pair
  static const Int_t fgkPionPlusAntiproton;// opposite-chare pion proton pair
  static const Int_t fgkKaonPlusProton;    // same-charge kaon proton pair
  static const Int_t fgkKaonPlusAntiproton;// opposite-charge kaon proton pair

  Int_t fPairType;     // Type of the pair for which the calculation is done

  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() const { return fKStar; }
inline Double_t AliFemtoModelWeightGenerator::GetKStarOut() const { return fKStarOut; }
inline Double_t AliFemtoModelWeightGenerator::GetKStarSide() const { return fKStarSide; }
inline Double_t AliFemtoModelWeightGenerator::GetKStarLong() const { return fKStarLong; }
inline Double_t AliFemtoModelWeightGenerator::GetRStar() const { return fRStar; }
inline Double_t AliFemtoModelWeightGenerator::GetRStarOut() const { return fRStarOut; }
inline Double_t AliFemtoModelWeightGenerator::GetRStarSide() const { return fRStarSide; }
inline Double_t AliFemtoModelWeightGenerator::GetRStarLong() const { return fRStarLong; }

inline Int_t AliFemtoModelWeightGenerator::PairTypeNone() { return fgkPairTypeNone; }  
inline Int_t AliFemtoModelWeightGenerator::PionPlusPionPlus() { return fgkPionPlusPionPlus; }  
inline Int_t AliFemtoModelWeightGenerator::PionPlusPionMinus() { return fgkPionPlusPionMinus; } 
inline Int_t AliFemtoModelWeightGenerator::KaonPlusKaonPlus() { return fgkKaonPlusKaonPlus; }  
inline Int_t AliFemtoModelWeightGenerator::KaonPlusKaonMinus() { return fgkKaonPlusKaonMinus; } 
inline Int_t AliFemtoModelWeightGenerator::ProtonProton() { return fgkProtonProton; }      
inline Int_t AliFemtoModelWeightGenerator::ProtonAntiproton() { return fgkProtonAntiproton; }  
inline Int_t AliFemtoModelWeightGenerator::PionPlusKaonPlus() { return fgkPionPlusKaonPlus; }  
inline Int_t AliFemtoModelWeightGenerator::PionPlusKaonMinus() { return fgkPionPlusKaonMinus; } 
inline Int_t AliFemtoModelWeightGenerator::PionPlusProton() { return fgkPionPlusProton; }    
inline Int_t AliFemtoModelWeightGenerator::PionPlusAntiproton() { return fgkPionPlusAntiproton; }
inline Int_t AliFemtoModelWeightGenerator::KaonPlusProton() { return fgkKaonPlusProton; }    
inline Int_t AliFemtoModelWeightGenerator::KaonPlusAntiproton() { return fgkKaonPlusAntiproton; }

#endif


 AliFemtoModelWeightGenerator.h:1
 AliFemtoModelWeightGenerator.h:2
 AliFemtoModelWeightGenerator.h:3
 AliFemtoModelWeightGenerator.h:4
 AliFemtoModelWeightGenerator.h:5
 AliFemtoModelWeightGenerator.h:6
 AliFemtoModelWeightGenerator.h:7
 AliFemtoModelWeightGenerator.h:8
 AliFemtoModelWeightGenerator.h:9
 AliFemtoModelWeightGenerator.h:10
 AliFemtoModelWeightGenerator.h:11
 AliFemtoModelWeightGenerator.h:12
 AliFemtoModelWeightGenerator.h:13
 AliFemtoModelWeightGenerator.h:14
 AliFemtoModelWeightGenerator.h:15
 AliFemtoModelWeightGenerator.h:16
 AliFemtoModelWeightGenerator.h:17
 AliFemtoModelWeightGenerator.h:18
 AliFemtoModelWeightGenerator.h:19
 AliFemtoModelWeightGenerator.h:20
 AliFemtoModelWeightGenerator.h:21
 AliFemtoModelWeightGenerator.h:22
 AliFemtoModelWeightGenerator.h:23
 AliFemtoModelWeightGenerator.h:24
 AliFemtoModelWeightGenerator.h:25
 AliFemtoModelWeightGenerator.h:26
 AliFemtoModelWeightGenerator.h:27
 AliFemtoModelWeightGenerator.h:28
 AliFemtoModelWeightGenerator.h:29
 AliFemtoModelWeightGenerator.h:30
 AliFemtoModelWeightGenerator.h:31
 AliFemtoModelWeightGenerator.h:32
 AliFemtoModelWeightGenerator.h:33
 AliFemtoModelWeightGenerator.h:34
 AliFemtoModelWeightGenerator.h:35
 AliFemtoModelWeightGenerator.h:36
 AliFemtoModelWeightGenerator.h:37
 AliFemtoModelWeightGenerator.h:38
 AliFemtoModelWeightGenerator.h:39
 AliFemtoModelWeightGenerator.h:40
 AliFemtoModelWeightGenerator.h:41
 AliFemtoModelWeightGenerator.h:42
 AliFemtoModelWeightGenerator.h:43
 AliFemtoModelWeightGenerator.h:44
 AliFemtoModelWeightGenerator.h:45
 AliFemtoModelWeightGenerator.h:46
 AliFemtoModelWeightGenerator.h:47
 AliFemtoModelWeightGenerator.h:48
 AliFemtoModelWeightGenerator.h:49
 AliFemtoModelWeightGenerator.h:50
 AliFemtoModelWeightGenerator.h:51
 AliFemtoModelWeightGenerator.h:52
 AliFemtoModelWeightGenerator.h:53
 AliFemtoModelWeightGenerator.h:54
 AliFemtoModelWeightGenerator.h:55
 AliFemtoModelWeightGenerator.h:56
 AliFemtoModelWeightGenerator.h:57
 AliFemtoModelWeightGenerator.h:58
 AliFemtoModelWeightGenerator.h:59
 AliFemtoModelWeightGenerator.h:60
 AliFemtoModelWeightGenerator.h:61
 AliFemtoModelWeightGenerator.h:62
 AliFemtoModelWeightGenerator.h:63
 AliFemtoModelWeightGenerator.h:64
 AliFemtoModelWeightGenerator.h:65
 AliFemtoModelWeightGenerator.h:66
 AliFemtoModelWeightGenerator.h:67
 AliFemtoModelWeightGenerator.h:68
 AliFemtoModelWeightGenerator.h:69
 AliFemtoModelWeightGenerator.h:70
 AliFemtoModelWeightGenerator.h:71
 AliFemtoModelWeightGenerator.h:72
 AliFemtoModelWeightGenerator.h:73
 AliFemtoModelWeightGenerator.h:74
 AliFemtoModelWeightGenerator.h:75
 AliFemtoModelWeightGenerator.h:76
 AliFemtoModelWeightGenerator.h:77
 AliFemtoModelWeightGenerator.h:78
 AliFemtoModelWeightGenerator.h:79
 AliFemtoModelWeightGenerator.h:80
 AliFemtoModelWeightGenerator.h:81
 AliFemtoModelWeightGenerator.h:82
 AliFemtoModelWeightGenerator.h:83
 AliFemtoModelWeightGenerator.h:84
 AliFemtoModelWeightGenerator.h:85
 AliFemtoModelWeightGenerator.h:86
 AliFemtoModelWeightGenerator.h:87
 AliFemtoModelWeightGenerator.h:88
 AliFemtoModelWeightGenerator.h:89
 AliFemtoModelWeightGenerator.h:90
 AliFemtoModelWeightGenerator.h:91
 AliFemtoModelWeightGenerator.h:92
 AliFemtoModelWeightGenerator.h:93
 AliFemtoModelWeightGenerator.h:94
 AliFemtoModelWeightGenerator.h:95
 AliFemtoModelWeightGenerator.h:96
 AliFemtoModelWeightGenerator.h:97
 AliFemtoModelWeightGenerator.h:98
 AliFemtoModelWeightGenerator.h:99
 AliFemtoModelWeightGenerator.h:100
 AliFemtoModelWeightGenerator.h:101
 AliFemtoModelWeightGenerator.h:102
 AliFemtoModelWeightGenerator.h:103
 AliFemtoModelWeightGenerator.h:104
 AliFemtoModelWeightGenerator.h:105
 AliFemtoModelWeightGenerator.h:106
 AliFemtoModelWeightGenerator.h:107
 AliFemtoModelWeightGenerator.h:108
 AliFemtoModelWeightGenerator.h:109
 AliFemtoModelWeightGenerator.h:110
 AliFemtoModelWeightGenerator.h:111
 AliFemtoModelWeightGenerator.h:112