ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

#include <TMath.h>
#include <TF1.h>
#include <TDatabasePDG.h>
#include <TParticlePDG.h>
#include <TParticle.h>
#include <TVector3.h>
#include <TRandom.h>
#include <TObjectTable.h>

#include "AliDecayerPolarized.h"
#include "AliLog.h"

ClassImp(AliDecayerPolarized)



//____________________________________________________________
AliDecayerPolarized::AliDecayerPolarized():
    fAlpha(0),
    fSystRef(kHelicity),
    fDecProd(kMuon),
    fPol(0),
    fMother(0),
    fDaughter1(0),
    fDaughter2(0)
{
// Default constructor

}

//____________________________________________________________
AliDecayerPolarized::AliDecayerPolarized(Double_t alpha, Polar_t systref, FinState_t decprod):
    fAlpha(alpha),
    fSystRef(systref),
    fDecProd(decprod),
    fPol(new TF1("dsigdcostheta","1.+[0]*x*x",-1.,1.)),
    fMother(0),
    fDaughter1(0),
    fDaughter2(0)
{
// Another constructor
    fPol->SetParameter(0,fAlpha);
    if(fDecProd!=kMuon && fDecProd!=kElectron)
	AliFatal("Only polarized decay into muons or electrons is implemented!");
}

AliDecayerPolarized::AliDecayerPolarized(const AliDecayerPolarized &decayer):
    AliDecayer(decayer),
    fAlpha(0),
    fSystRef(kHelicity),
    fDecProd(kMuon),
    fPol(new TF1("dsigdcostheta","1.+[0]*x*x",-1.,1.)),
    fMother(0),
    fDaughter1(0),
    fDaughter2(0)   
{
    // Copy Constructor
    decayer.Copy(*this);
}

//____________________________________________________________
AliDecayerPolarized::~AliDecayerPolarized()
{
// Destructor
    delete fPol; 
    delete fMother;
    delete fDaughter1;
    delete fDaughter2;
}
//____________________________________________________________
void AliDecayerPolarized::Decay(Int_t ipart, TLorentzVector *p)
{
// Polarized 2- body decay 
    TDatabasePDG *pDataBase = TDatabasePDG::Instance();
    if(ipart!= (pDataBase->GetParticle("J/psi")->PdgCode()) &&
       ipart!= (pDataBase->GetParticle("psi'")->PdgCode())  &&
       ipart!= (pDataBase->GetParticle("Upsilon")->PdgCode())  &&
       ipart!= (pDataBase->GetParticle("Upsilon'")->PdgCode()))  
       AliFatal("Polarized decay only implemented for J/psi, psi', Upsilon and Upsilon' !");

    TParticlePDG *d1 = 0, *d2 = 0;
    if(fDecProd==kMuon){
      d1 = pDataBase->GetParticle("mu-");
      d2 = pDataBase->GetParticle("mu+");
    }
    else if(fDecProd==kElectron){
      d1 = pDataBase->GetParticle("e-");
      d2 = pDataBase->GetParticle("e+");
    }
// energies and momenta in lab frame 
    Double_t e1 = p->M() / 2.;
    Double_t e2 = e1; 
    Double_t p1 = TMath::Sqrt((e1 + d1->Mass())*(e1 - d1->Mass())); 

    Double_t costheta = fPol->GetRandom();
    
    Double_t sintheta = TMath::Sqrt((1. + costheta)*(1. - costheta));
    Double_t phi      = 2. * TMath::Pi() * gRandom->Rndm(); 
    Double_t px1 = p1 * sintheta * TMath::Cos(phi); 
    Double_t py1 = p1 * sintheta * TMath::Sin(phi); 
    Double_t pz1 = p1 * costheta; 

    TLorentzVector v1,v2, boosted1, boosted2;	
    v1.SetPxPyPzE(-px1,-py1,-pz1,e1);   //in the dimuon rest frame
    v2.SetPxPyPzE(px1,py1,pz1,e2); 
	
    TLorentzVector pProj, pTarg; // In the CM frame
    Float_t mp = 0.938;
    pProj.SetPxPyPzE(0.,0.,-7000.,TMath::Sqrt(7000.*7000.+mp*mp)); // projectile
    pTarg.SetPxPyPzE(0.,0.,7000.,TMath::Sqrt(7000.*7000.+mp*mp)); // target
 
    TVector3 betajpsicm;
    betajpsicm = (-1./p->E()*p->Vect());
      
    if(fSystRef == kHelicity) {
      //  polarization axis: direction of the JPsi in the CM 
      TVector3 v3jpsi = (p->Vect()).Unit();  
      v1.RotateUz(v3jpsi);  
      v2.RotateUz(v3jpsi); 	
    } else if (fSystRef == kColSop){
      //  polarization axis: bisector of proj and target in the dimuon rest frame
      pProj.Boost(betajpsicm);   //boost proj and targ from CM to DIMU rest frame
      pTarg.Boost(betajpsicm);

      TVector3 zaxisCS;
      zaxisCS=(((pProj.Vect()).Unit())-((pTarg.Vect()).Unit())).Unit();
      v1.RotateUz(zaxisCS);
      v2.RotateUz(zaxisCS);
    }
 
//    printf("v1 components (mu1 with jpsi at rest)%f %f %f %f\n",v1.Px(),v1.Py(),v1.Pz(),v1.E());
//    printf("v2 components (mu2 with jpsi at rest)%f %f %f %f\n",v2.Px(),v2.Py(),v2.Pz(),v2.E());

    v1.Boost(-betajpsicm);  //boost muons from DIMUON rest frame to CM
    v2.Boost(-betajpsicm); 

//    printf("v1 components (mu1 in polar. ref. syst.) %f %f %f %f\n",v1.Px(),v1.Py(),v1.Pz(),v1.E());
//    printf("v2 components (mu2 in polar. ref. syst.) %f %f %f %f\n",v2.Px(),v2.Py(),v2.Pz(),v2.E());

    Int_t statusDecayed=11;
    Int_t statusUndecayed=1;
        
   
    fMother = new TParticle(ipart,statusDecayed,0,-1,2,3,p->Px(),p->Py(),p->Pz(),p->E(),0.,0.,0.,0);   
    fDaughter1 = new TParticle(d1->PdgCode(),statusUndecayed,1,-1,0,0,v1.Px(),v1.Py(),v1.Pz(),v1.E(),0.,0.,0.,0);   
    fDaughter2 = new TParticle(d2->PdgCode(),statusUndecayed,1,-1,0,0,v2.Px(),v2.Py(),v2.Pz(),v2.E(),0.,0.,0.,0);

}

//____________________________________________________________
Int_t AliDecayerPolarized::ImportParticles(TClonesArray *part)
{
// Return array of particles  
  TClonesArray &cloneparticles = *part;
  cloneparticles.Clear();
  
  new(cloneparticles[0])TParticle(*fMother);
  new(cloneparticles[1])TParticle(*fDaughter1);
  new(cloneparticles[2])TParticle(*fDaughter2);

  return part->GetEntries();
}

void  AliDecayerPolarized::Copy(TObject &) const
{
    //
    // Copy *this onto AliDecayerPolarized -- not implemented
    //
    Fatal("Copy","Not implemented!\n");
}

void AliDecayerPolarized::SetForceDecay(Int_t)
{
    // This method is dummy
}

void AliDecayerPolarized::ForceDecay()
{
    // This method is dummy
    AliWarning("Method not implemented for this class !\n");
}

Float_t AliDecayerPolarized::GetPartialBranchingRatio(Int_t)
{
    // This method is dummy
    return  1.;
}

Float_t AliDecayerPolarized::GetLifetime(Int_t)
{
    // This method is dummy
    AliWarning("Method not implemented for this class !\n");
    return -1.;
}

void AliDecayerPolarized::ReadDecayTable()
{
    // This method is dummy
    AliWarning("Method not implemented for this class !\n");
}

 AliDecayerPolarized.cxx:1
 AliDecayerPolarized.cxx:2
 AliDecayerPolarized.cxx:3
 AliDecayerPolarized.cxx:4
 AliDecayerPolarized.cxx:5
 AliDecayerPolarized.cxx:6
 AliDecayerPolarized.cxx:7
 AliDecayerPolarized.cxx:8
 AliDecayerPolarized.cxx:9
 AliDecayerPolarized.cxx:10
 AliDecayerPolarized.cxx:11
 AliDecayerPolarized.cxx:12
 AliDecayerPolarized.cxx:13
 AliDecayerPolarized.cxx:14
 AliDecayerPolarized.cxx:15
 AliDecayerPolarized.cxx:16
 AliDecayerPolarized.cxx:17
 AliDecayerPolarized.cxx:18
 AliDecayerPolarized.cxx:19
 AliDecayerPolarized.cxx:20
 AliDecayerPolarized.cxx:21
 AliDecayerPolarized.cxx:22
 AliDecayerPolarized.cxx:23
 AliDecayerPolarized.cxx:24
 AliDecayerPolarized.cxx:25
 AliDecayerPolarized.cxx:26
 AliDecayerPolarized.cxx:27
 AliDecayerPolarized.cxx:28
 AliDecayerPolarized.cxx:29
 AliDecayerPolarized.cxx:30
 AliDecayerPolarized.cxx:31
 AliDecayerPolarized.cxx:32
 AliDecayerPolarized.cxx:33
 AliDecayerPolarized.cxx:34
 AliDecayerPolarized.cxx:35
 AliDecayerPolarized.cxx:36
 AliDecayerPolarized.cxx:37
 AliDecayerPolarized.cxx:38
 AliDecayerPolarized.cxx:39
 AliDecayerPolarized.cxx:40
 AliDecayerPolarized.cxx:41
 AliDecayerPolarized.cxx:42
 AliDecayerPolarized.cxx:43
 AliDecayerPolarized.cxx:44
 AliDecayerPolarized.cxx:45
 AliDecayerPolarized.cxx:46
 AliDecayerPolarized.cxx:47
 AliDecayerPolarized.cxx:48
 AliDecayerPolarized.cxx:49
 AliDecayerPolarized.cxx:50
 AliDecayerPolarized.cxx:51
 AliDecayerPolarized.cxx:52
 AliDecayerPolarized.cxx:53
 AliDecayerPolarized.cxx:54
 AliDecayerPolarized.cxx:55
 AliDecayerPolarized.cxx:56
 AliDecayerPolarized.cxx:57
 AliDecayerPolarized.cxx:58
 AliDecayerPolarized.cxx:59
 AliDecayerPolarized.cxx:60
 AliDecayerPolarized.cxx:61
 AliDecayerPolarized.cxx:62
 AliDecayerPolarized.cxx:63
 AliDecayerPolarized.cxx:64
 AliDecayerPolarized.cxx:65
 AliDecayerPolarized.cxx:66
 AliDecayerPolarized.cxx:67
 AliDecayerPolarized.cxx:68
 AliDecayerPolarized.cxx:69
 AliDecayerPolarized.cxx:70
 AliDecayerPolarized.cxx:71
 AliDecayerPolarized.cxx:72
 AliDecayerPolarized.cxx:73
 AliDecayerPolarized.cxx:74
 AliDecayerPolarized.cxx:75
 AliDecayerPolarized.cxx:76
 AliDecayerPolarized.cxx:77
 AliDecayerPolarized.cxx:78
 AliDecayerPolarized.cxx:79
 AliDecayerPolarized.cxx:80
 AliDecayerPolarized.cxx:81
 AliDecayerPolarized.cxx:82
 AliDecayerPolarized.cxx:83
 AliDecayerPolarized.cxx:84
 AliDecayerPolarized.cxx:85
 AliDecayerPolarized.cxx:86
 AliDecayerPolarized.cxx:87
 AliDecayerPolarized.cxx:88
 AliDecayerPolarized.cxx:89
 AliDecayerPolarized.cxx:90
 AliDecayerPolarized.cxx:91
 AliDecayerPolarized.cxx:92
 AliDecayerPolarized.cxx:93
 AliDecayerPolarized.cxx:94
 AliDecayerPolarized.cxx:95
 AliDecayerPolarized.cxx:96
 AliDecayerPolarized.cxx:97
 AliDecayerPolarized.cxx:98
 AliDecayerPolarized.cxx:99
 AliDecayerPolarized.cxx:100
 AliDecayerPolarized.cxx:101
 AliDecayerPolarized.cxx:102
 AliDecayerPolarized.cxx:103
 AliDecayerPolarized.cxx:104
 AliDecayerPolarized.cxx:105
 AliDecayerPolarized.cxx:106
 AliDecayerPolarized.cxx:107
 AliDecayerPolarized.cxx:108
 AliDecayerPolarized.cxx:109
 AliDecayerPolarized.cxx:110
 AliDecayerPolarized.cxx:111
 AliDecayerPolarized.cxx:112
 AliDecayerPolarized.cxx:113
 AliDecayerPolarized.cxx:114
 AliDecayerPolarized.cxx:115
 AliDecayerPolarized.cxx:116
 AliDecayerPolarized.cxx:117
 AliDecayerPolarized.cxx:118
 AliDecayerPolarized.cxx:119
 AliDecayerPolarized.cxx:120
 AliDecayerPolarized.cxx:121
 AliDecayerPolarized.cxx:122
 AliDecayerPolarized.cxx:123
 AliDecayerPolarized.cxx:124
 AliDecayerPolarized.cxx:125
 AliDecayerPolarized.cxx:126
 AliDecayerPolarized.cxx:127
 AliDecayerPolarized.cxx:128
 AliDecayerPolarized.cxx:129
 AliDecayerPolarized.cxx:130
 AliDecayerPolarized.cxx:131
 AliDecayerPolarized.cxx:132
 AliDecayerPolarized.cxx:133
 AliDecayerPolarized.cxx:134
 AliDecayerPolarized.cxx:135
 AliDecayerPolarized.cxx:136
 AliDecayerPolarized.cxx:137
 AliDecayerPolarized.cxx:138
 AliDecayerPolarized.cxx:139
 AliDecayerPolarized.cxx:140
 AliDecayerPolarized.cxx:141
 AliDecayerPolarized.cxx:142
 AliDecayerPolarized.cxx:143
 AliDecayerPolarized.cxx:144
 AliDecayerPolarized.cxx:145
 AliDecayerPolarized.cxx:146
 AliDecayerPolarized.cxx:147
 AliDecayerPolarized.cxx:148
 AliDecayerPolarized.cxx:149
 AliDecayerPolarized.cxx:150
 AliDecayerPolarized.cxx:151
 AliDecayerPolarized.cxx:152
 AliDecayerPolarized.cxx:153
 AliDecayerPolarized.cxx:154
 AliDecayerPolarized.cxx:155
 AliDecayerPolarized.cxx:156
 AliDecayerPolarized.cxx:157
 AliDecayerPolarized.cxx:158
 AliDecayerPolarized.cxx:159
 AliDecayerPolarized.cxx:160
 AliDecayerPolarized.cxx:161
 AliDecayerPolarized.cxx:162
 AliDecayerPolarized.cxx:163
 AliDecayerPolarized.cxx:164
 AliDecayerPolarized.cxx:165
 AliDecayerPolarized.cxx:166
 AliDecayerPolarized.cxx:167
 AliDecayerPolarized.cxx:168
 AliDecayerPolarized.cxx:169
 AliDecayerPolarized.cxx:170
 AliDecayerPolarized.cxx:171
 AliDecayerPolarized.cxx:172
 AliDecayerPolarized.cxx:173
 AliDecayerPolarized.cxx:174
 AliDecayerPolarized.cxx:175
 AliDecayerPolarized.cxx:176
 AliDecayerPolarized.cxx:177
 AliDecayerPolarized.cxx:178
 AliDecayerPolarized.cxx:179
 AliDecayerPolarized.cxx:180
 AliDecayerPolarized.cxx:181
 AliDecayerPolarized.cxx:182
 AliDecayerPolarized.cxx:183
 AliDecayerPolarized.cxx:184
 AliDecayerPolarized.cxx:185
 AliDecayerPolarized.cxx:186
 AliDecayerPolarized.cxx:187
 AliDecayerPolarized.cxx:188
 AliDecayerPolarized.cxx:189
 AliDecayerPolarized.cxx:190
 AliDecayerPolarized.cxx:191
 AliDecayerPolarized.cxx:192
 AliDecayerPolarized.cxx:193
 AliDecayerPolarized.cxx:194
 AliDecayerPolarized.cxx:195
 AliDecayerPolarized.cxx:196
 AliDecayerPolarized.cxx:197
 AliDecayerPolarized.cxx:198
 AliDecayerPolarized.cxx:199
 AliDecayerPolarized.cxx:200
 AliDecayerPolarized.cxx:201
 AliDecayerPolarized.cxx:202
 AliDecayerPolarized.cxx:203
 AliDecayerPolarized.cxx:204
 AliDecayerPolarized.cxx:205
 AliDecayerPolarized.cxx:206
 AliDecayerPolarized.cxx:207
 AliDecayerPolarized.cxx:208
 AliDecayerPolarized.cxx:209
 AliDecayerPolarized.cxx:210
 AliDecayerPolarized.cxx:211
 AliDecayerPolarized.cxx:212
 AliDecayerPolarized.cxx:213
 AliDecayerPolarized.cxx:214
 AliDecayerPolarized.cxx:215
 AliDecayerPolarized.cxx:216