11141716 |
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 | /* |
17 | $Log$ |
18 | */ |
19 | #include "AliLHC.h" |
20 | #include "AliLhcIRegion.h" |
21 | #include "AliLhcProcess.h" |
22 | #include "AliLhcBeam.h" |
23 | |
24 | ClassImp(AliLHC) |
25 | |
26 | AliLHC::AliLHC() |
27 | { |
28 | // Constructor |
29 | fIRegions = new TList; |
30 | fProcesses = new TList; |
31 | fNRegions = 0; |
32 | fNProcesses = 0; |
33 | fBeams = new TObjArray(2); |
34 | (*fBeams)[0] = 0; |
35 | (*fBeams)[1] = 0; |
36 | fTime = 0; |
37 | fTimeMax = 0; |
38 | } |
39 | |
40 | AliLHC::AliLHC(const AliLHC& lhc) |
41 | { |
42 | // copy constructor |
43 | } |
44 | |
45 | AliLHC::~AliLHC() |
46 | { |
47 | // Destructor |
48 | delete fIRegions; |
49 | delete fProcesses; |
50 | delete fBeams; |
51 | } |
52 | |
53 | void AliLHC::AddIRegion(AliLhcIRegion *region) |
54 | { |
55 | // |
56 | // Add region to list |
57 | fIRegions->Add(region); |
58 | fNRegions++; |
59 | } |
60 | |
61 | void AliLHC::AddProcess(AliLhcProcess *process) |
62 | { |
63 | // |
64 | // Add process to list |
65 | fProcesses->Add(process); |
66 | fNProcesses++; |
67 | } |
68 | |
69 | void AliLHC::SetBeams(AliLhcBeam *beam1, AliLhcBeam *beam2 ) |
70 | { |
71 | |
72 | // |
73 | // Set the beams |
74 | |
75 | (*fBeams)[0] = beam1; |
76 | (*fBeams)[1] = beam2; |
77 | } |
78 | |
79 | void AliLHC::Init() |
80 | { |
81 | // Initialisation |
82 | fNt = 0; |
83 | fNmax = Int_t(fTimeMax/fTimeStep); |
84 | fTimeA = new Float_t[fNmax]; |
85 | // |
86 | Beam(0)->Init(); |
87 | Beam(1)->Init(); |
88 | |
89 | TIter next(fIRegions); |
90 | AliLhcIRegion *region; |
91 | // |
92 | // Loop over generators and initialize |
93 | while((region = (AliLhcIRegion*)next())) { |
94 | region->Init(); |
95 | region->SetMonitor(fNmax); |
96 | } |
97 | |
98 | Beam(0)->SetMonitor(fNmax); |
99 | Beam(1)->SetMonitor(fNmax); |
100 | |
101 | TIter nextp(fProcesses); |
102 | AliLhcProcess *process; |
103 | // |
104 | // Loop over generators and initialize |
105 | while((process = (AliLhcProcess*)nextp())) { |
106 | process->Init(); |
107 | process->SetMonitor(fNmax); |
108 | } |
109 | } |
110 | |
111 | void AliLHC::EvolveTime() |
112 | { |
113 | // |
114 | // Simulate Time Evolution |
115 | // |
116 | while (fTime <= fTimeMax) { |
117 | printf("\n Time: %f %f", fTime, fTimeStep); |
118 | // |
119 | // Processes |
120 | // |
121 | TIter next(fProcesses); |
122 | AliLhcProcess *process; |
123 | // |
124 | // Evolve for each process |
125 | while((process = (AliLhcProcess*)next())) { |
126 | process->Evolve(fTimeStep); |
127 | process->Record(); |
128 | } |
129 | // |
130 | // Update and Monitoring |
131 | // |
132 | TIter nextregion(fIRegions); |
133 | AliLhcIRegion *region; |
134 | // |
135 | while((region = (AliLhcIRegion*)nextregion())) { |
136 | printf("\n Region: %s, Luminosity %10.3e", |
137 | region->GetName(), region->Luminosity()); |
138 | region->Update(); |
139 | region->Record(); |
140 | } |
141 | Beam(0)->Record(); |
142 | fTimeA[fNt] = fTime/3600.; |
143 | fTime+=fTimeStep; |
144 | fNt++; |
145 | } |
146 | } |
147 | |
148 | void AliLHC::Evaluate() |
149 | { |
150 | // Evaluation of the results |
151 | TIter nextregion(fIRegions); |
152 | AliLhcIRegion *region; |
153 | // |
154 | // Loop over generators and initialize |
155 | while((region = (AliLhcIRegion*)nextregion())) { |
156 | region->Draw(); |
157 | } |
158 | |
159 | TIter next(fProcesses); |
160 | AliLhcProcess *process; |
161 | // |
162 | // Evolve for each process |
163 | while((process = (AliLhcProcess*)next())) { |
164 | process->Draw(); |
165 | } |
166 | |
167 | Beam(0)->Draw(); |
168 | } |
169 | |
170 | AliLHC& AliLHC::operator=(const AliLHC & rhs) |
171 | { |
172 | // Assignment operator |
173 | return *this; |
174 | } |
175 | |
176 | |