]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TAmpt/TAmpt.cxx
Added possibility to declare list of libraries needed to read friends info, extending...
[u/mrichter/AliRoot.git] / TAmpt / TAmpt.cxx
index e45d6dfa4c13e528c6d2b400b33a053412502594..93e60c4d688555630dfb73c67750d3993b882c6b 100644 (file)
@@ -65,6 +65,7 @@ extern "C" void type_of_call rluset_ampt(Int_t & lfn, Int_t & move);
 
 ClassImp(TAmpt)
 
+
 //______________________________________________________________________________
 TAmpt::TAmpt()
   : TGenerator("Ampt","Ampt"),
@@ -78,7 +79,7 @@ TAmpt::TAmpt()
     fIzt(82),
     fBmin(0.),
     fBmax(5.),
-    fPhi(0.)
+    fPsi(0.)
 {
   // Default constructor 
   amptsetdef();
@@ -100,11 +101,12 @@ TAmpt::TAmpt(Double_t efrm, const char *frame="CMS",
     fIzt(izt),
     fBmin(bmin),
     fBmax(bmax),
-    fPhi(0.)
+    fPsi(0.)
 {
   // TAmpt constructor: 
   // Note that there may be only one functional TAmpt object
-  // at a time, so it's not use to create more than one instance of it.
+  // at a time, so it's not useful to create more than one 
+  // instance of it.
   amptsetdef();
 }
 
@@ -123,46 +125,50 @@ TObjArray* TAmpt::ImportParticles(Option_t */*option*/)
   Int_t numpart = HBT.nlast;
   printf("TAmpt: AMPT stack contains %d particles.\n", numpart);
 
-  Double_t sinphi = TMath::Sin(fPhi);
-  Double_t cosphi = TMath::Cos(fPhi);
-
   for (Int_t i=0; i < numpart; ++i) {
     Int_t status = 1;
-    Double_t px0 = HBT.plast[i][0];//GeV/c
-    Double_t py0 = HBT.plast[i][1];//GeV/c
-    Double_t px = px0*cosphi-py0*sinphi;
-    Double_t py = py0*cosphi+px0*sinphi;
-    Double_t pz  = HBT.plast[i][2];//GeV/c
-    Double_t ma  = HBT.plast[i][3];//GeV/c/c
-    Double_t vx0 = 0;//HBT.xlast[i][0]*1e-12;//mm
-    Double_t vy0 = 0;//HBT.xlast[i][1]*1e-12;//mm
-    Double_t vx  = vx0*cosphi-vy0*sinphi;
-    Double_t vy  = vy0*cosphi+vx0*sinphi;
-    Double_t vz  = 0;//HBT.xlast[i][2]*1e-12;//mm
-    Double_t vt  = 0;//HBT.xlast[i][3]*1e-12;//mm/c
-    Int_t pdg  = invflv(HBT.lblast[i]);
+    Double_t px = HBT.plast[i][0];//GeV/c
+    Double_t py = HBT.plast[i][1];//GeV/c
+    Double_t pz = HBT.plast[i][2];//GeV/c
+    Double_t ma = HBT.plast[i][3];//GeV/c/c
+    Double_t vx = 0;//HBT.xlast[i][0]*1e-12;//mm
+    Double_t vy = 0;//HBT.xlast[i][1]*1e-12;//mm
+    Double_t vz = 0;//HBT.xlast[i][2]*1e-12;//mm
+    Double_t vt = 0;//HBT.xlast[i][3]*1e-12;//mm/c
+    //Double_t vx = HBT.xlast[i][0]*1e-12;//mm
+    //Double_t vy = HBT.xlast[i][1]*1e-12;//mm
+    //Double_t vz = HBT.xlast[i][2]*1e-12;//mm
+    //Double_t vt = HBT.xlast[i][3]*1e-12;//mm/c
+
+    // Rotate xy components of vectors to new reaction plane:
+    Double_t pxp=TMath::Cos(fPsi)*px - TMath::Sin(fPsi)*py;
+    Double_t pyp=TMath::Sin(fPsi)*px + TMath::Cos(fPsi)*py;
+    Double_t vxp=TMath::Cos(fPsi)*vx - TMath::Sin(fPsi)*vy;
+    Double_t vyp=TMath::Sin(fPsi)*vx + TMath::Cos(fPsi)*vy;
+
+    Int_t pdg   = invflv(HBT.lblast[i]);
     TParticle *p = new TParticle(pdg,
                                  status,
                                  -1,
                                  -1,
                                  -1,
                                  -1,
-                                 px,
-                                 py,
+                                 pxp,
+                                 pyp,
                                  pz,
                                  TMath::Sqrt(ma*ma+px*px+py*py+pz*pz),
-                                 vx,
-                                 vy,
+                                 vxp,
+                                 vyp,
                                  vz,
-                                 vt
-      );
-    if((px0==0)&&(py0==0)) {
+                                 vt);
+    if((px==0)&&(py==0)) {
       if(pz<0)
         p->SetUniqueID(0);
       else 
         p->SetUniqueID(10);
     } else 
       p->SetUniqueID(999);
+    fParticles->Add(p);
   }
   return fParticles;
 }
@@ -181,24 +187,28 @@ Int_t TAmpt::ImportParticles(TClonesArray *particles, Option_t */*option*/)
   Int_t numpart = HBT.nlast;
   printf("TAmpt: AMPT stack contains %d particles.\n", numpart);
 
-  Double_t sinphi = TMath::Sin(fPhi);
-  Double_t cosphi = TMath::Cos(fPhi);
-
   //at this point not clear how to read particle history, just take primaries.
   for (Int_t i=0; i < numpart; ++i) {
     Int_t status = 1;
-    Double_t px0 = HBT.plast[i][0];//GeV/c
-    Double_t py0 = HBT.plast[i][1];//GeV/c
-    Double_t px = px0*cosphi-py0*sinphi;
-    Double_t py = py0*cosphi+px0*sinphi;
-    Double_t pz  = HBT.plast[i][2];//GeV/c
-    Double_t ma  = HBT.plast[i][3];//GeV/c/c
-    Double_t vx0 = 0;//HBT.xlast[i][0]*1e-12;//mm
-    Double_t vy0 = 0;//HBT.xlast[i][1]*1e-12;//mm
-    Double_t vx  = vx0*cosphi-vy0*sinphi;
-    Double_t vy  = vy0*cosphi+vx0*sinphi;
-    Double_t vz  = 0;//HBT.xlast[i][2]*1e-12;//mm
-    Double_t vt  = 0;//HBT.xlast[i][3]*1e-12;//mm/c
+    Double_t px = HBT.plast[i][0];//GeV/c
+    Double_t py = HBT.plast[i][1];//GeV/c
+    Double_t pz = HBT.plast[i][2];//GeV/c
+    Double_t ma = HBT.plast[i][3];//GeV/c/c
+    Double_t vx = 0;//HBT.xlast[i][0]*1e-12;//mm
+    Double_t vy = 0;//HBT.xlast[i][1]*1e-12;//mm
+    Double_t vz = 0;//HBT.xlast[i][2]*1e-12;//mm
+    Double_t vt = 0;//HBT.xlast[i][3]*1e-12;//mm/c
+    //Double_t vx = HBT.xlast[i][0]*1e-12;//mm
+    //Double_t vy = HBT.xlast[i][1]*1e-12;//mm
+    //Double_t vz = HBT.xlast[i][2]*1e-12;//mm
+    //Double_t vt = HBT.xlast[i][3]*1e-12;//mm/c
+
+    // Rotate xy components of vectors to new reaction plane:
+    Double_t pxp=TMath::Cos(fPsi)*px - TMath::Sin(fPsi)*py;
+    Double_t pyp=TMath::Sin(fPsi)*px + TMath::Cos(fPsi)*py;
+    Double_t vxp=TMath::Cos(fPsi)*vx - TMath::Sin(fPsi)*vy;
+    Double_t vyp=TMath::Sin(fPsi)*vx + TMath::Cos(fPsi)*vy;
+
     Int_t pdg  = invflv(HBT.lblast[i]);
     //printf("i %d pdg %d px %f py %f pz %f vx %f vy %f vz %f vt %f\n", i, pdg, px, py, pz, vx, vy, vz, vt);
     new(particlesR[i]) TParticle(pdg,
@@ -207,16 +217,15 @@ Int_t TAmpt::ImportParticles(TClonesArray *particles, Option_t */*option*/)
                                  -1,
                                  -1,
                                  -1,
-                                 px,
-                                 py,
+                                 pxp,
+                                 pyp,
                                  pz,
                                  TMath::Sqrt(ma*ma+px*px+py*py+pz*pz),
-                                 vx,
-                                 vy,
+                                 vxp,
+                                 vyp,
                                  vz,
-                                 vt
-      );
-    if((px0==0)&&(py0==0)){
+                                 vt);
+    if((px==0)&&(py==0)){
       if(pz<0)
         particlesR[i]->SetUniqueID(0);
       else 
@@ -238,18 +247,18 @@ Int_t TAmpt::ImportNucleons(TClonesArray *nucleons, Option_t */*option*/)
   TClonesArray &nucleonsR = *nucleons;
   nucleonsR.Clear();
 
-  Double_t sinphi = TMath::Sin(fPhi);
-  Double_t cosphi = TMath::Cos(fPhi);
-
   Int_t nA = HPARNT.ihnt2[0];
   for (Int_t i=0; i < nA; ++i) {
-    Double_t x0 = HJCRDN.yp[i][0] + 0.5*GetBB();
-    Double_t y0 = HJCRDN.yp[i][1];
-    Double_t x  = x0*cosphi-y0*sinphi;
-    Double_t y  = y0*cosphi+x0*sinphi;
-    Double_t z  = HJCRDN.yp[i][2];
-    Int_t    p  = HSTRNG.nfp[3][i];
-    Int_t    s  = HSTRNG.nfp[4][i];
+    Double_t x = HJCRDN.yp[i][0] + 0.5*GetBB();
+    Double_t y = HJCRDN.yp[i][1];
+    Double_t z = HJCRDN.yp[i][2];
+
+    // Rotate xy components of vectors to new reaction plane:
+    Double_t xp=TMath::Cos(fPsi)*x - TMath::Sin(fPsi)*y;
+    Double_t yp=TMath::Sin(fPsi)*x + TMath::Cos(fPsi)*y;
+
+    Int_t    p = HSTRNG.nfp[3][i];
+    Int_t    s = HSTRNG.nfp[4][i];
     new(nucleonsR[i]) TParticle(p,
                                 s,
                                 -1,
@@ -260,22 +269,24 @@ Int_t TAmpt::ImportNucleons(TClonesArray *nucleons, Option_t */*option*/)
                                  0,
                                  0,
                                  0,
-                                 x,
-                                 y,
+                                 xp,
+                                 yp,
                                  z,
-                                 0
-      );
+                                 0);
     nucleonsR[i]->SetUniqueID(1);
   }
   Int_t nB = HPARNT.ihnt2[2];
   for (Int_t i=0; i < nB; ++i) {
-    Double_t x0 = HJCRDN.yt[i][0] - 0.5*HPARNT.hint1[18];
-    Double_t y0 = HJCRDN.yt[i][1];
-    Double_t x  = x0*cosphi-y0*sinphi;
-    Double_t y  = y0*cosphi+x0*sinphi;
-    Double_t z  = HJCRDN.yt[i][2];
-    Int_t    p  = HSTRNG.nft[3][i];
-    Int_t    s  = HSTRNG.nft[4][i];
+    Double_t x = HJCRDN.yt[i][0] - 0.5*HPARNT.hint1[18];
+    Double_t y = HJCRDN.yt[i][1];
+    Double_t z = HJCRDN.yt[i][2];
+
+    // Rotate xy components of vectors to new reaction plane:
+    Double_t xp=TMath::Cos(fPsi)*x - TMath::Sin(fPsi)*y;
+    Double_t yp=TMath::Sin(fPsi)*x + TMath::Cos(fPsi)*y;
+
+    Int_t    p = HSTRNG.nft[3][i];
+    Int_t    s = HSTRNG.nft[4][i];
     new(nucleonsR[nA+i]) TParticle(p,
                                    s,
                                    -1,
@@ -286,11 +297,10 @@ Int_t TAmpt::ImportNucleons(TClonesArray *nucleons, Option_t */*option*/)
                                    0,
                                    0,
                                    0,
-                                   x,
-                                   y,
+                                   xp,
+                                   yp,
                                    z,
-                                   0
-      );
+                                   0);
     nucleonsR[nA+i]->SetUniqueID(-1);
   }
   return nA+nB;
@@ -589,9 +599,9 @@ Float_t  TAmpt::GetBB() const
 Int_t TAmpt::GetKATT(Int_t key1, Int_t key2) const
 {
   // Get values of array KATT in common HMAIN2
-  if ( key1<1 || key1>200000 ) {
+  if ( key1<1 || key1> _MAXNPARTICLE_ ) {
     printf("ERROR in TAmpt::GetKATT(key1,key2):\n");
-    printf("      key1=%i is out of range [1..200000]\n",key1);
+    printf("      key1=%i is out of range [1..%d]\n",key1,_MAXNPARTICLE_);
     return 0;
   }
   if ( key2<1 || key2>4 ) {
@@ -606,7 +616,7 @@ Int_t TAmpt::GetKATT(Int_t key1, Int_t key2) const
 Float_t TAmpt::GetPATT(Int_t key1, Int_t key2) const
 {
   // Get values of array PATT in common HMAIN2
-  if ( key1<1 || key1>200000 ) {
+  if ( key1<1 || key1>_MAXNPARTICLE_ ) {
     printf("ERROR in TAmpt::GetPATT(key1,key2):\n");
     printf("      key1=%i is out of range [1..130000]\n",key1);
     return 0;
@@ -623,7 +633,7 @@ Float_t TAmpt::GetPATT(Int_t key1, Int_t key2) const
 Float_t TAmpt::GetVATT(Int_t key1, Int_t key2) const
 {
   // Get values of array VATT in common HMAIN2
-  if ( key1<1 || key1>200000 ) {
+  if ( key1<1 || key1>_MAXNPARTICLE_ ) {
     printf("ERROR in TAmpt::GetVATT(key1,key2):\n");
     printf("      key1=%i is out of range [1..130000]\n",key1);
     return 0;
@@ -1099,6 +1109,7 @@ void TAmpt::SetPARJ(Int_t key, Float_t parm)
   if ( key < 1 || key > 200) {
     printf("ERROR in TAmpt::SetPARJ(key,parm):\n");
     printf("      key=%i is out of range [1..200]\n",key);
+    return;
   }
   LUDAT1.parj[key-1] = parm;
 }
@@ -1110,6 +1121,7 @@ void TAmpt::SetMSTJ(Int_t key, Int_t parm)
   if ( key < 1 || key > 200) {
     printf("ERROR in TAmpt::SetMSTJ(key,parm):\n");
     printf("      key=%i is out of range [1..200]\n",key);
+    return;
   }
   LUDAT1.mstj[key-1] = parm;
 }
@@ -1158,7 +1170,6 @@ void TAmpt::GenerateEvent()
   // Generates one event;
 
   //printf("Next event ------------------------\n");
-  fPhi =  TMath::TwoPi()*AliAmptRndm::GetAmptRandom()->Rndm()-TMath::Pi();
   Ampt(fFrame.Data(),fBmin,fBmax);
 }