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.                  *
 **************************************************************************/

/* $Id$ */

//
// Generator to simulate beam gas interactions.
// At present single interactions are read from an external file. 
// Several interactions are combined in one event.
// By default the vertex is smeared between +/- 20 m
// Author: andreas.morsch@cern.ch

#include "AliGenBeamGas.h"
#include "AliGenReader.h"

#include <TParticle.h>


ClassImp(AliGenBeamGas)

AliGenBeamGas::AliGenBeamGas()
    :AliGenExtFile(), 
     fInteractions(1)
{
//  Constructor
//
    fOsigma[0] =    0.;
    fOsigma[1] =    0.;
    fOsigma[2] = 2000.;
}

//____________________________________________________________

AliGenBeamGas::~AliGenBeamGas()
{
// Destructor
    delete fReader;
}

//___________________________________________________________
void AliGenBeamGas::Init()
{
// Initialize
    AliGenExtFile::Init();
}

    
void AliGenBeamGas::Generate()
{
// Generate particles

  Float_t polar[3]  = {0,0,0};
  Float_t origin[3] = {0,0,0};
  Float_t p[3];
  Float_t random[2];
  Int_t i, nt;
  Int_t nInt = 0;
  
  while(nInt < fInteractions) {
//
      Rndm(random,2);
//
//  Interaction vertex
//
      origin[2] = 2. * fOsigma[2] * random[0] - fOsigma[2];
//
//    beam 1 or 2
//      
      Float_t ibeam = (random[1] < 0.5) ? -1. : 1.;

      // Interaction time
      Float_t time = origin[2]/TMath::Ccgs()*ibeam;
//
//    Read next event
//      
      Int_t nTracks = fReader->NextEvent(); 	
      if (nTracks == 0) {
	  // printf("\n No more events !!! !\n");
	  Warning("AliGenBeamGas::Generate",
		  "\nNo more events in external file!!!\n Last event may be empty or incomplete.\n");
	  return;
      }
      
      //
      // Stack filling loop
      //
      for (i = 0; i < nTracks; i++) {
	  TParticle* iparticle = fReader->NextParticle();
	  p[0] = iparticle->Px();
	  p[1] = iparticle->Py();
	  p[2] = iparticle->Pz() * ibeam;
	
	  Int_t idpart     = iparticle->GetPdgCode();
	  Int_t decayed    = iparticle->GetFirstDaughter();
	  Int_t doTracking = fTrackIt && (decayed < 0) && (TMath::Abs(idpart) > 10);
	  PushTrack(doTracking,-1,idpart,p,origin,polar,time,kPPrimary,nt);
	  KeepTrack(nt);
      } // track loop
      nInt++;
  } // event loop
//
  SetHighWaterMark(nt);
//
  CdEventFile();
}





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