29-mar-2007 NvE New memberfunction Almanac() introduced in AliTimestamp to provide a
[u/mrichter/AliRoot.git] / RALICE / AliCollider.h
1 #ifndef ALICOLLIDER2_H
2 #define ALICOLLIDER2_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 // $Id: AliCollider.h,v 1.9 2004/05/04 15:33:04 nick Exp $
7
8 #include "TPythia6.h"
9 #include "TString.h"
10 #include "TFile.h"
11 #include "TTree.h"
12 #include "TArrayI.h" 
13
14 #include "AliEvent.h"
15 #include "AliRandom.h"
16  
17 class AliCollider : public TPythia6
18 {
19  public:
20   AliCollider();                                        // Default constructor
21   virtual ~AliCollider();                               // Default destructor
22   void SetOutputFile(TString name);                     // Initialise the ROOT output data file
23   void SetVertexMode(Int_t mode);                       // Select mode for (sec.) vertex structure creation
24   Int_t GetVertexMode() const;                          // Provide vertex structure creation mode
25   void SetResolution(Double_t res);                     // Set resolution (in meter) for resolving (sec.) vertices
26   Double_t GetResolution() const;                       // Provide (sec.) vertex resolving resolution (in meter)
27   void SetRunNumber(Int_t run);                         // Set user defined run number
28   Int_t GetRunNumber() const;                           // Provide the user defined run number
29   void SetPrintFreq(Int_t n);                           // Set print frequency for every 'n' events
30   Int_t GetPrintFreq() const;                           // Provide the print frequency
31   void Init(char* frame,char* beam,char* target,Float_t win); // Standard Pythia initialisation
32   void Init(char* frame,Int_t zp,Int_t ap,Int_t zt,Int_t at,Float_t win); // Nucl-Nucl initialisation
33   void SetStable(Int_t id,Int_t mode=1);                // Declare a certain particle as stable or not
34   void SelectEvent(Int_t id);                           // Select only events containing specified particles
35   Int_t GetSelectionFlag() const;                       // Return the selection flag for this event
36   void MakeEvent(Int_t npt=0,Int_t mlist=-1,Int_t medit=1);// Generate a single event with npt participant nucleons
37   void EndRun();                                        // Properly close all buffers and output file
38   AliEvent* GetEvent(Int_t select=0) const;             // Provide pointer to the generated event structure
39   void SetSpectatorPmin(Float_t pmin);                  // Set minimal momentum for spectator track to be stored
40   Float_t GetSpectatorPmin() const;                     // Provide the minimal momentum for spectator tracks
41   void SetUserControl(Int_t flag);                      // Selection of full user control w.r.t. MC parameters. 
42   Int_t GetUserControl() const;                         // Provide the value of the user control flag.
43   void SetElastic(Int_t flag);                          // Selection flag for elastic and diffractive processes.
44   Int_t GetElastic() const;                             // Provide the value of the elastic selection flag.
45
46  protected:
47   Int_t fVertexmode;    // The vertex structure creation mode
48   Double_t fResolution; // The resolution (in meter) for resolving (sec.) vertices 
49   Int_t fRunnum;        // The user defined run number
50   Int_t fEventnum;      // The automatically updated event number
51   Int_t fPrintfreq;     // The user selected print frequency
52   char* fFrame;         // The Pythia frame indicator
53   Float_t fWin;         // The Pythia energy indicator
54   Int_t fNucl;          // Flag to denote nucleus-nucleus (1) or standard Pythia (0) running
55   Int_t fZproj;         // Z of the projectile particle
56   Int_t fAproj;         // A of the projectile particle
57   Int_t fZtarg;         // Z of the target particle
58   Int_t fAtarg;         // A of the target particle
59   Float_t fFracpp;      // Fraction of p+p collisions
60   Float_t fFracnp;      // Fraction of n+p collisions
61   Float_t fFracpn;      // Fraction of p+n collisions
62   Float_t fFracnn;      // Fraction of n+n collisions
63   AliRandom fRan;       // Random number generator
64   AliEvent* fEvent;     // The produced event structure
65   Float_t fSpecpmin;    // The minimal momentum for spectator tracks to be stored
66   Int_t fUserctrl;      // Flag to denote the user control selection w.r.t. MC parameters
67   Int_t fElastic;       // Flag to denote inclusion of elastic and difractive processes.
68
69   TFile* fOutFile;      // The user defined output data file 
70   TTree* fOutTree;      // The standard ROOT output tree
71
72   TArrayI* fSelections; // The particle KC codes for event selection
73   Int_t fSelect;        // Flag to indicate whether the total event is selected (1) or not (0)
74
75   Int_t IsSelected();   // Check whether (sub)event passed the selection criteria
76   void GetFractions(Float_t zp,Float_t ap,Float_t zt,Float_t at); // Determine various N-N collision fractions
77   TString GetPyname(Int_t kf); // Provide the correctly truncated Pythia particle name for PDG code kf  
78
79  ClassDef(AliCollider,8) // Pythia based universal physics event generator
80 };
81 #endif