Line data Source code
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 :
18 : //-----------------------------------------------------------------------
19 : // Simulation event header class
20 : // Collaborates with AliRun, AliStack, and AliGenReaderTreeK classes
21 : // Many other classes depend on it
22 : // Author:
23 : //-----------------------------------------------------------------------
24 :
25 :
26 : #include <stdio.h>
27 : #include <TObjArray.h>
28 :
29 : #include "AliLog.h"
30 : #include "AliHeader.h"
31 : #include "AliDetectorEventHeader.h"
32 : #include "AliGenEventHeader.h"
33 :
34 :
35 176 : ClassImp(AliHeader)
36 :
37 : //_______________________________________________________________________
38 18 : AliHeader::AliHeader():
39 18 : fRun(-1),
40 18 : fNvertex(0),
41 18 : fNprimary(0),
42 18 : fNtrack(0),
43 18 : fEvent(0),
44 18 : fEventNrInRun(0),
45 18 : fTimeStamp(0),
46 18 : fStack(0),
47 18 : fGenHeader(0),
48 18 : fDetHeaders(0)
49 90 : {
50 : //
51 : // Default constructor
52 : //
53 36 : }
54 :
55 : //_______________________________________________________________________
56 : AliHeader::AliHeader(const AliHeader& head):
57 0 : TObject(head),
58 0 : fRun(-1),
59 0 : fNvertex(0),
60 0 : fNprimary(0),
61 0 : fNtrack(0),
62 0 : fEvent(0),
63 0 : fEventNrInRun(0),
64 0 : fTimeStamp(0),
65 0 : fStack(0),
66 0 : fGenHeader(0),
67 0 : fDetHeaders(0)
68 0 : {
69 : //
70 : // Copy constructor
71 : //
72 0 : head.Copy(*this);
73 0 : }
74 :
75 : //_______________________________________________________________________
76 0 : AliHeader::AliHeader(Int_t run, Int_t event):
77 0 : fRun(run),
78 0 : fNvertex(0),
79 0 : fNprimary(0),
80 0 : fNtrack(0),
81 0 : fEvent(event),
82 0 : fEventNrInRun(0),
83 0 : fTimeStamp(0),
84 0 : fStack(0),
85 0 : fGenHeader(0),
86 0 : fDetHeaders(0)
87 0 : {
88 : //
89 : // Standard constructor
90 : //
91 0 : }
92 :
93 : //_______________________________________________________________________
94 0 : AliHeader::AliHeader(Int_t run, Int_t event, Int_t evNumber):
95 0 : fRun(run),
96 0 : fNvertex(0),
97 0 : fNprimary(0),
98 0 : fNtrack(0),
99 0 : fEvent(event),
100 0 : fEventNrInRun(evNumber),
101 0 : fTimeStamp(0),
102 0 : fStack(0),
103 0 : fGenHeader(0),
104 0 : fDetHeaders(0)
105 0 : {
106 : //
107 : // Standard constructor
108 : //
109 0 : }
110 :
111 : AliHeader::~AliHeader()
112 12 : {
113 : //
114 : // Destructor
115 : //
116 2 : if (fDetHeaders) {
117 0 : fDetHeaders->Delete();
118 0 : delete fDetHeaders;
119 : }
120 2 : delete fGenHeader;
121 6 : }
122 :
123 :
124 :
125 : //_______________________________________________________________________
126 : void AliHeader::Reset(Int_t run, Int_t event)
127 : {
128 : //
129 : // Resets the header with new run and event number
130 : //
131 0 : fRun=run;
132 0 : fNvertex=0;
133 0 : fNprimary=0;
134 0 : fNtrack=0;
135 0 : fEvent=event;
136 0 : fTimeStamp=0;
137 0 : if (fDetHeaders) fDetHeaders->Delete();
138 0 : }
139 :
140 : //_______________________________________________________________________
141 : void AliHeader::Reset(Int_t run, Int_t event, Int_t evNumber)
142 : {
143 : //
144 : // Resets the header with new run and event number
145 : //
146 16 : fRun=run;
147 8 : fNvertex=0;
148 8 : fNprimary=0;
149 8 : fNtrack=0;
150 8 : fEvent=event;
151 8 : fEventNrInRun=evNumber;
152 8 : fTimeStamp=0;
153 8 : if (fDetHeaders) fDetHeaders->Clear();
154 8 : }
155 :
156 : //_______________________________________________________________________
157 : void AliHeader::Print(const char*) const
158 : {
159 : //
160 : // Dumps header content
161 : //
162 0 : printf(
163 : "\n=========== Header for run %d Event %d = beginning ======================================\n",
164 0 : fRun,fEvent);
165 0 : printf(" Number of Vertex %d\n",fNvertex);
166 0 : printf(" Number of Primary %d\n",fNprimary);
167 0 : printf(" Number of Tracks %d\n",fNtrack);
168 0 : printf(" Time-stamp %ld\n",fTimeStamp);
169 0 : printf(
170 : "=========== Header for run %d Event %d = end ============================================\n\n",
171 0 : fRun,fEvent);
172 :
173 0 : }
174 :
175 : //_______________________________________________________________________
176 : AliStack* AliHeader::Stack() const
177 : {
178 : // Return pointer to stack
179 242 : return fStack;
180 : }
181 :
182 : //_______________________________________________________________________
183 : void AliHeader::SetStack(AliStack* stack)
184 : {
185 : // Set pointer to stack
186 8 : fStack = stack;
187 4 : }
188 :
189 : //_______________________________________________________________________
190 : void AliHeader::SetGenEventHeader(AliGenEventHeader* header)
191 : {
192 : // Set pointer to header for generated event
193 8 : fGenHeader = header;
194 4 : }
195 :
196 : void AliHeader::AddDetectorEventHeader(AliDetectorEventHeader* header)
197 : {
198 : // Add a detector specific header
199 : //
200 : // Create the array of headers
201 0 : if (!fDetHeaders) fDetHeaders = new TObjArray(77);
202 :
203 : // Some basic checks
204 :
205 0 : if (!header) {
206 0 : Warning("AddDetectorEventHeader","Detector tries to add empty header \n");
207 0 : return;
208 : }
209 :
210 0 : if (strlen(header->GetName()) == 0) {
211 0 : Warning("AddDetectorEventHeader","Detector tries to add header without name \n");
212 0 : return;
213 : }
214 :
215 0 : TObject *mod=fDetHeaders->FindObject(header->GetName());
216 0 : if(mod) {
217 0 : Warning("AddDetectorEventHeader","Detector %s tries to add more than one header \n", header->GetName());
218 0 : return;
219 : }
220 :
221 :
222 : // Add the header to the list
223 0 : fDetHeaders->Add(header);
224 0 : }
225 :
226 : AliDetectorEventHeader* AliHeader::GetDetectorEventHeader(const char *name) const
227 : {
228 : //
229 : // Returns detector specific event header
230 : //
231 0 : if (!fDetHeaders) {
232 0 : Warning("GetDetectorEventHeader","There are no detector specific headers for this event");
233 0 : return 0x0;
234 : }
235 0 : return dynamic_cast<AliDetectorEventHeader*>(fDetHeaders->FindObject(name)) ;
236 0 : }
237 :
238 :
239 : //_______________________________________________________________________
240 : AliGenEventHeader* AliHeader::GenEventHeader() const
241 : {
242 : // Get pointer to header for generated event
243 48 : return fGenHeader;
244 : }
245 :
246 : //_______________________________________________________________________
247 : void AliHeader::Copy(TObject&) const
248 : {
249 0 : AliFatal("Not implemented");
250 0 : }
251 :
252 :
253 :
|