Coverity deffects fixed; MC event vertex rotated around beam axis with a random angle...
authoriarsene <iarsene@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 9 Mar 2011 15:43:12 +0000 (15:43 +0000)
committeriarsene <iarsene@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 9 Mar 2011 15:43:12 +0000 (15:43 +0000)
on/off for tracking was enabled

TUHKMgen/AliGenUHKM.cxx
TUHKMgen/AliGenUHKM.h
TUHKMgen/TUHKMgen.cxx
TUHKMgen/TUHKMgen.h
TUHKMgen/UHKM/DatabasePDG.cxx
TUHKMgen/UHKM/DecayChannel.cxx
TUHKMgen/UHKM/InitialStateHydjet.cxx
TUHKMgen/UHKM/InitialStateHydjet.h
TUHKMgen/UHKM/ParticlePDG.cxx

index f555186..f84e5f1 100755 (executable)
@@ -119,8 +119,8 @@ AliGenUHKM::AliGenUHKM()
   fHydjetParams.fIenglu=0;
   fHydjetParams.fIanglu=0;
 */
-  strcpy(fParticleFilename, Form("%s/TUHKMgen/UHKM/particles.data", gSystem->Getenv("ALICE_ROOT")));
-  strcpy(fDecayFilename, Form("%s/TUHKMgen/UHKM/tabledecay.txt", gSystem->Getenv("ALICE_ROOT")));
+  strncpy(fParticleFilename, Form("%s/TUHKMgen/UHKM/particles.data", gSystem->Getenv("ALICE_ROOT")), 256);
+  strncpy(fDecayFilename, Form("%s/TUHKMgen/UHKM/tabledecay.txt", gSystem->Getenv("ALICE_ROOT")), 256);
   for(Int_t i=0; i<500; i++) {
     fStableFlagPDG[i] = 0;
     fStableFlagStatus[i] = kFALSE;
@@ -209,8 +209,8 @@ AliGenUHKM::AliGenUHKM(Int_t npart)
   fHydjetParams.fIanglu=0;
 */
 
-  strcpy(fParticleFilename, Form("%s/TUHKMgen/UHKM/particles.data", gSystem->Getenv("ALICE_ROOT")));
-  strcpy(fDecayFilename, Form("%s/TUHKMgen/UHKM/tabledecay.txt", gSystem->Getenv("ALICE_ROOT")));
+  strncpy(fParticleFilename, Form("%s/TUHKMgen/UHKM/particles.data", gSystem->Getenv("ALICE_ROOT")), 256);
+  strncpy(fDecayFilename, Form("%s/TUHKMgen/UHKM/tabledecay.txt", gSystem->Getenv("ALICE_ROOT")), 256);
   for(Int_t i=0; i<500; i++) {
     fStableFlagPDG[i] = 0;
     fStableFlagStatus[i] = kFALSE;
@@ -324,32 +324,38 @@ void AliGenUHKM::Generate()
   Float_t polar[3] = {0,0,0};
   Float_t origin[3]   = {0,0,0};
   Float_t origin0[3]  = {0,0,0};
+  Float_t p[3];
   Float_t v[3];
-  Float_t mass, energy;
+  Float_t mass=0.0, energy=0.0;
 
   Vertex();
   for(Int_t j=0; j<3; j++) origin0[j] = fVertex[j];
 
-  fTrials = 0;
-
+  // Generate the event and import particles
+  fUHKMgen->GenerateEvent();
+  fUHKMgen->ImportParticles(&fParticles,"All");
+  Int_t np = fParticles.GetEntriesFast();
   Int_t nt  =  0;
-  Int_t np  = -1;
-  while (np <= 0 && fTrials < 100) {
-    fUHKMgen->GenerateEvent();
-    fTrials++;
-    fUHKMgen->ImportParticles(&fParticles,"All");
-    np = fParticles.GetEntriesFast();
-  }
-  if (np <= 0) {
-    AliFatal(Form("Attempted %d trials, giving up", fTrials));
-    return;
-  }
 
+
+  // Handle the IDs of particles on the stack  
   Int_t* idsOnStack = new Int_t[np];
+  Int_t* newPos     = new Int_t[np];
+  for(Int_t i=0; i<np; i++) {
+    newPos[i] = i;
+    idsOnStack[i] = -1;
+  }
   
-  //_________ Loop for particle selection
+
+  // Generate a random phi used to rotate the whole event
+  Double_t eventRotation = gRandom->Rndm()*TMath::Pi();
+
+  TParticle *iparticle;
+  Double_t partMomPhi=0.0, partPt=0.0;
+  Double_t partVtxPhi=0.0, partVtxR=0.0;
+  //_________ Loop for particles in the stack
   for(Int_t i=0; i<np; i++) {
-    TParticle *iparticle = (TParticle*)fParticles.At(i);
+    iparticle = (TParticle*)fParticles.At(i);
     Int_t kf = iparticle->GetPdgCode();
     Bool_t hasMother = (iparticle->GetFirstMother() >= 0);
     Bool_t hasDaughter = (iparticle->GetNDaughters() > 0);
@@ -359,14 +365,24 @@ void AliGenUHKM::Generate()
       // It will not be tracked
       // Add it only once with coordinates not
       // smeared with primary vertex position
-      Float_t p[3] = {p[0] = iparticle->Px(),
-                     p[1] = iparticle->Py(),
-                     p[2] = iparticle->Pz()};
+      
+      // rotate the direction of the particle
+      partMomPhi = TMath::ATan2(iparticle->Py(), iparticle->Px());
+      partPt = TMath::Hypot(iparticle->Px(), iparticle->Py());
+      p[0] = partPt*TMath::Cos(partMomPhi+eventRotation);
+      p[1] = partPt*TMath::Sin(partMomPhi+eventRotation);
+      p[2] = iparticle->Pz();
+      
       mass = TDatabasePDG::Instance()->GetParticle(kf)->Mass();
       energy = sqrt(mass*mass + p[0]*p[0] + p[1]*p[1] + p[2]*p[2]);
-      v[0] = iparticle->Vx();
-      v[1] = iparticle->Vy();
+
+      // rotate the freezeout point
+      partVtxPhi = TMath::ATan2(iparticle->Vy(), iparticle->Vx());
+      partVtxR = TMath::Hypot(iparticle->Vx(), iparticle->Vy());
+      v[0] = partVtxR*TMath::Cos(partVtxPhi + eventRotation);
+      v[1] = partVtxR*TMath::Cos(partVtxPhi + eventRotation);
       v[2] = iparticle->Vz();
+
       Float_t time = iparticle->T();
       
       Int_t imo = -1;
@@ -393,15 +409,22 @@ void AliGenUHKM::Generate()
       //   this one will not be tracked
       // Second time with event-wide c0ordinates and vertex smearing
       //   this one will be tracked
-      
-      Float_t p[3] = {p[0] = iparticle->Px(),
-                     p[1] = iparticle->Py(),
-                     p[2] = iparticle->Pz()};
-      mass = TDatabasePDG::Instance()->GetParticle(kf)->Mass();
+
+      // rotate the direction of the particle      
+      partMomPhi = TMath::ATan2(iparticle->Py(), iparticle->Px());
+      partPt = TMath::Hypot(iparticle->Px(), iparticle->Py());
+      p[0] = partPt*TMath::Cos(partMomPhi+eventRotation);
+      p[1] = partPt*TMath::Sin(partMomPhi+eventRotation);
+      p[2] = iparticle->Pz();      
+
       energy = sqrt(mass*mass + p[0]*p[0] + p[1]*p[1] + p[2]*p[2]);
-      v[0] = iparticle->Vx();
-      v[1] = iparticle->Vy();
-      v[2] = iparticle->Vz();
+
+      // rotate the freezeout point
+      partVtxPhi = TMath::ATan2(iparticle->Vy(), iparticle->Vx());
+      partVtxR = TMath::Hypot(iparticle->Vx(), iparticle->Vy());
+      v[0] = partVtxR*TMath::Cos(partVtxPhi + eventRotation);
+      v[1] = partVtxR*TMath::Cos(partVtxPhi + eventRotation);
+      v[2] = iparticle->Vz();      
       
       Int_t type    = iparticle->GetStatusCode(); // 1-from jet / 0-from hydro 
       Int_t coeffT=1;
@@ -417,7 +440,7 @@ void AliGenUHKM::Generate()
       Bool_t trackFlag = kFALSE;  // tFlag = kFALSE --> do not track this one, its for femtoscopy
       PushTrack(trackFlag, (imo>=0 ? idsOnStack[imo] : imo), kf,
                p[0], p[1], p[2], energy,
-               v[0], v[1], v[2], (iparticle->T())*coeffT,
+               v[0], v[1], v[2], (iparticle->T())*coeffT,    // freeze-out time is negative if the particle comes from jet
                polar[0], polar[1], polar[2],
                hasMother ? kPDecay:kPNoProcess, nt);
       
@@ -430,7 +453,7 @@ void AliGenUHKM::Generate()
       origin[2] = origin0[2]+v[2];
       imo = nt;
       
-      trackFlag = kTRUE;    // tFlag = kTRUE --> track this one
+      trackFlag = fTrackIt;    // Track this particle, unless otherwise specified by fTrackIt
       
       PushTrack(trackFlag, imo, kf,
                p[0], p[1], p[2], energy,
index de55ff9..3a35c25 100755 (executable)
@@ -86,8 +86,8 @@ class AliGenUHKM : public AliGenMC
                                                    //gluons (0: small-angular, 1: wide-angular, 2:collinear) (default: 0).
 
 
-  void SetPDGParticleFile(const Char_t *name) {strcpy(fParticleFilename, name);}//Set the filename containing the particle PDG info
-  void SetPDGDecayFile(const Char_t *name) {strcpy(fDecayFilename, name);} //Set the filename containing the PDG decay channels info
+  void SetPDGParticleFile(const Char_t *name) {strncpy(fParticleFilename, name, 256);}//Set the filename containing the particle PDG info
+  void SetPDGDecayFile(const Char_t *name) {strncpy(fDecayFilename, name, 256);} //Set the filename containing the PDG decay channels info
   void SetPDGParticleStable(Int_t pdg, Bool_t value) { // Turn on/off the decay flag for a PDG particle
     fStableFlagPDG[fStableFlagged] = pdg;
     fStableFlagStatus[fStableFlagged++] = value;
index 3fee931..893923b 100755 (executable)
@@ -121,8 +121,8 @@ TUHKMgen::TUHKMgen() :
   fHydjetParams.fIanglu=0;  
 */
    
-  strcpy(fParticleFilename, Form("%s/TUHKMgen/UHKM/particles.data", gSystem->Getenv("ALICE_ROOT")));
-  strcpy(fDecayFilename, Form("%s/TUHKMgen/UHKM/tabledecay.txt", gSystem->Getenv("ALICE_ROOT")));
+  strncpy(fParticleFilename, Form("%s/TUHKMgen/UHKM/particles.data", gSystem->Getenv("ALICE_ROOT")), 256);
+  strncpy(fDecayFilename, Form("%s/TUHKMgen/UHKM/tabledecay.txt", gSystem->Getenv("ALICE_ROOT")), 256);
   for(Int_t i=0; i<500; i++) {
     fStableFlagPDG[i] = 0;
     fStableFlagStatus[i] = kFALSE;
@@ -329,7 +329,12 @@ void TUHKMgen::Initialize()
 
 void TUHKMgen::Print(const Option_t*) const
 {
-  cout << "TUHKMgen::Print() method not implemented yet!!" << endl;
+  cout << "**********************************************************************************" << endl;
+  cout << "* UHKM Generator interface to ROOT::TGenerator                                   *" << endl;
+  cout << "*  Documentation:                                                                *" << endl;
+  cout << "* I.P.Lokhtin, L.V.Malinina, S.V.Petrushanko, A.M.Snigirev, I.Arsene, K.Tywoniuk *" << endl;
+  cout << "*    Comput.Phys.Commun.180:779-799, 2009                                        *" << endl;
+  cout << "**********************************************************************************" << endl;
 }
 
 void TUHKMgen::GenerateEvent()
index a6a457c..8b89989 100755 (executable)
@@ -107,8 +107,8 @@ class TUHKMgen : public TGenerator {
                                   // gluons (0: small-angular, 1: wide-angular, 2:collinear) (default: 0).
   
  
-  void SetPDGParticleFile(const Char_t *name)              {strcpy(fParticleFilename, name);}     // Set the filename containing the particle PDG info
-  void SetPDGDecayFile(const Char_t *name)                 {strcpy(fDecayFilename, name);}        // Set the filename containing the PDG decay channels info
+  void SetPDGParticleFile(const Char_t *name)              {strncpy(fParticleFilename, name, 256);}     // Set the filename containing the particle PDG info
+  void SetPDGDecayFile(const Char_t *name)                 {strncpy(fDecayFilename, name, 256);}        // Set the filename containing the PDG decay channels info
   void SetPDGParticleStable(Int_t pdg, Bool_t value) {                                      // Turn on/off the decay flag for a PDG particle
     fStableFlagPDG[fStableFlagged] = pdg;
     fStableFlagStatus[fStableFlagged++] = value;
index 4de0e63..4810c53 100644 (file)
@@ -41,8 +41,8 @@ DatabasePDG::DatabasePDG():
 {
   // Default constructor, initialize members, set input files  
   
-  strcpy(fParticleFilename, "particles.data");
-  strcpy(fDecayFilename, "tabledecay.txt");
+  strncpy(fParticleFilename, "particles.data", 256);
+  strncpy(fDecayFilename, "tabledecay.txt", 256);
   for(Int_t i=0; i<kMaxParticles; i++) {
     fParticles[i] = new ParticlePDG();
     fStatus[i] = kFALSE;
@@ -56,11 +56,11 @@ DatabasePDG::~DatabasePDG() {
 }
 
 void DatabasePDG::SetParticleFilename(Char_t *filename) {
-  strcpy(fParticleFilename, filename);
+  strncpy(fParticleFilename, filename, 256);
 }
 
 void DatabasePDG::SetDecayFilename(Char_t *filename) {
-  strcpy(fDecayFilename, filename);
+  strncpy(fDecayFilename, filename, 256);
 }
 
 Bool_t DatabasePDG::LoadData() {
@@ -674,7 +674,8 @@ Int_t DatabasePDG::GetNAllowedChannels(ParticlePDG *particle, Double_t motherMas
   // Check how many decay channels are allowed for a given particle definition at a given mass
 
   Int_t nAllowedChannels = 0;
-  for(Int_t i=0; i<particle->GetNDecayChannels(); i++)
+  for(Int_t i=0; i<particle->GetNDecayChannels(); i++) 
     nAllowedChannels += (IsChannelAllowed(particle->GetDecayChannel(i), motherMass) ? 1:0);
+  
   return nAllowedChannels;
 }
index d04ce52..28464c6 100644 (file)
@@ -37,7 +37,7 @@ DecayChannel::DecayChannel(const DecayChannel &copy):
   //
   // copy constructor
   //
-  for(Int_t i=0; i<fNDaughters; i++)
+  for(Int_t i=0; i<kMaxDaughters; i++)
     fDaughtersPDG[i] = copy.fDaughtersPDG[i];
 }
 
@@ -50,12 +50,15 @@ DecayChannel::DecayChannel(Int_t mother, Double_t branching, Int_t nDaughters, c
   //
   // constructor
   //
-  for(Int_t i=0; i<nDaughters; i++) {
+  for(Int_t i=0; i<kMaxDaughters; i++) {
     if(i >= kMaxDaughters) {
       cout << "ERROR in DecayChannel explicit constructor: " << endl;
       cout << "Number of daughters bigger than the maximum allowed one (" << kMaxDaughters << ") !!" << endl;
     }
-    fDaughtersPDG[fNDaughters++] = *(daughters+i);
+    if(i<nDaughters)
+      fDaughtersPDG[fNDaughters++] = *(daughters+i);
+    else
+      fDaughtersPDG[i] = kNonsensePDG;
   }
 }
 
index c3ba838..3d77eec 100644 (file)
@@ -469,7 +469,7 @@ Bool_t InitialStateHydjet::MultIni() {
     particleDensityPiTh = gcPiTh.ParticleNumberDensity(fDatabase->GetPDGParticle(211));
   }
 
-  for(Int_t particleIndex = 0; particleIndex < fDatabase->GetNParticles(); particleIndex++) {
+  for(Int_t particleIndex = 0; particleIndex < TMath::Min(fDatabase->GetNParticles(), kNPartTypes); particleIndex++) {
     ParticlePDG *currParticle = fDatabase->GetPDGParticleByIndex(particleIndex);
     Int_t encoding = currParticle->GetPDG();
     //strangeness supression
index 073b039..1ea88d9 100644 (file)
@@ -20,6 +20,8 @@
 
 class ParticleAllocator;
 
+const Int_t kNPartTypes = 1000;
+
 struct InitialParamsHydjet_t {
 
   Int_t fNevnt; //number of events
@@ -94,13 +96,12 @@ struct InitialParamsHydjet_t {
                                   // gluons (0: small-angular, 1: wide-angular, 2:collinear) (default: 0).
   
   
-
   Int_t    fNPartTypes;                   //counter of hadron species  
-  Int_t    fPartEnc[1000];                 //Hadron encodings. Maximal number of hadron species is 100!!!
-  Double_t fPartMult[2000];                //Multiplicities of hadron species
-  Double_t fPartMu[2000];                //Chemical potentials of hadron species
+  Int_t    fPartEnc[kNPartTypes];                 //Hadron encodings. Maximal number of hadron species is 100!!!
+  Double_t fPartMult[2*kNPartTypes];                //Multiplicities of hadron species
+  Double_t fPartMu[2*kNPartTypes];                //Chemical potentials of hadron species
 
-  Double_t fMuTh[1000];                    //Chemical potentials at thermal freezeout of hadron species
+  Double_t fMuTh[kNPartTypes];                    //Chemical potentials at thermal freezeout of hadron species
 
 };
 
index c7cb2db..b37b2ea 100644 (file)
@@ -11,8 +11,8 @@
 //
 
 #include <iostream>
-using std::cout;
-using std::endl;
+#include <string>
+using namespace std;
 #include "ParticlePDG.h"
 
 //________________________________________________________________________
@@ -35,6 +35,7 @@ ParticlePDG::ParticlePDG() :
 //
 // default constructor
 //
+  memset(fName,'0',9);
   for(Int_t i=0; i<kMaxDecayChannels; i++)
     fDecayChannels[i] = new DecayChannel();
 }