]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STARLIGHT/AliGenStarLight.cxx
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / STARLIGHT / AliGenStarLight.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 /* $Id:  $ */
17 #include <Riostream.h>
18 #include "AliLog.h"
19 #include "TStarLight.h"
20 #include "starlight.h"
21 #include "upcevent.h"
22 #include "AliGenStarLight.h"
23
24 AliGenStarLight::AliGenStarLight()
25   : AliGenMC()
26   , fTrials(0)
27   , fHeader()
28   , fSLgenerator(NULL) {
29 }
30 //----------------------------------------------------------------------
31 AliGenStarLight::AliGenStarLight(Int_t npart)
32   : AliGenMC(npart)
33   , fTrials(0)
34   , fHeader()
35   , fSLgenerator(NULL) {
36   fSLgenerator = new TStarLight("TStarLight",
37                                 "StarLight UPC Event Generator",
38                                 ""); // no config file name
39 }
40 //----------------------------------------------------------------------
41 AliGenStarLight::~AliGenStarLight() {
42   delete fSLgenerator;
43   fSLgenerator = NULL;
44 }
45 void AliGenStarLight::ImportConfigurationFromFile(const char* filename) {
46   if (NULL == fSLgenerator) {
47     AliFatal("AliGenStarLight class not constructed properly. ");
48     return;
49   }
50   fSLgenerator->ImportConfigurationFromFile(filename);
51 }
52 void AliGenStarLight::SetParameter(const char* line) {
53   if (NULL == fSLgenerator) {
54     AliFatal("AliGenStarLight class not constructed properly. ");
55     return;
56   }
57   fSLgenerator->SetParameter(line);
58 }
59 //----------------------------------------------------------------------
60 void AliGenStarLight::Init() {
61   if (NULL == fSLgenerator) {
62     AliFatal("AliGenStarLight class not constructed properly. ");
63     return;
64   }
65   fSLgenerator->InitStarLight();
66 }
67 //----------------------------------------------------------------------
68 void AliGenStarLight::Generate() {
69   Float_t origin0[4] = {0,0,0,0};
70   if (fVertexSmear == kPerEvent) {
71     Vertex(); // get vertex
72     for (Int_t i=0; i<3; ++i)
73       origin0[i] = fVertex[i];
74     origin0[3] = fTime;
75   }
76
77   Int_t          nt(0); // number of tracks
78   const Int_t    itp(1); // transport all partiles.
79   const Double_t weight(1.0);
80   Bool_t         genOK(kFALSE);
81   fTrials = 0;
82   do { // simulate one event passing all requirements
83     fTrials++;
84     fSLgenerator->GenerateEvent();
85     fSLgenerator->BoostEvent();
86     fSLgenerator->ImportParticles(&fParticles, "ALL");
87     
88     for (size_t i(0), n(fParticles.GetEntries()); i!=n; ++i) {
89       const TParticle *part(dynamic_cast<TParticle*>(fParticles.At(i)));
90       const Int_t iparent(-1); //iparent = part->getParent();
91       //ifDaugh = part->getFirstDaughter();
92       //ilDaugh = part->getLastDaughter();
93       const Double_t pol[3] = {0,0,0};
94       PushTrack(itp, 
95                 iparent, 
96                 part->GetPdgCode(),
97                 part->Px(), part->Py(), part->Pz(), part->Energy(),
98                 origin0[0], origin0[1], origin0[2], origin0[3],
99                 pol[0],     pol[1],     pol[2],
100                 kPNoProcess,
101                 nt,
102                 weight,
103                 part->GetStatusCode());
104       KeepTrack(nt);
105       //cout<<"AliGenStarLight::Generate: fTrials="<<fTrials
106       //  <<" iparent="<<iparent<<" ipdg="<<ipdg
107       //  <<" p="<<px<<","<<py<<","<<pz<<","<<E
108       //  <<" origin="<<origin0[0]<<","<<origin0[1]<<","<<origin0[2]<<","<<origin0[2]
109       //  <<endl;
110     }
111     genOK = kTRUE;
112   } while (!genOK);
113   MakeHeader(nt, origin0);
114   SetHighWaterMark(nt);
115 }
116 //----------------------------------------------------------------------
117 void AliGenStarLight::MakeHeader(Int_t np, Float_t orn[4]) {
118   fHeader.SetInputParameters(fSLgenerator->GetInputParameters());
119   fHeader.SetTrials(fTrials);
120   fHeader.SetEventWeight(1.0);
121   fHeader.SetInteractionTime(orn[3]);
122   fHeader.SetNProduced(np);
123
124   const TArrayF vertexPosition(3, orn);
125   fHeader.SetPrimaryVertex(vertexPosition);
126
127   AddHeader(&fHeader);
128 }
129 //----------------------------------------------------------------------