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

//-----------------------------------------------------------------------
//     Simulation event header class
//     Collaborates with AliRun, AliStack, and AliGenReaderTreeK classes
//     Many other classes depend on it
//     Author:
//-----------------------------------------------------------------------


#include <stdio.h>
#include <TObjArray.h>

#include "AliLog.h"
#include "AliHeader.h"
#include "AliDetectorEventHeader.h"
#include "AliGenEventHeader.h"
    
 
ClassImp(AliHeader)

//_______________________________________________________________________
AliHeader::AliHeader():
  fRun(-1),
  fNvertex(0),
  fNprimary(0),
  fNtrack(0),
  fEvent(0),
  fEventNrInRun(0),
  fTimeStamp(0),
  fStack(0),
  fGenHeader(0),
  fDetHeaders(0)
{
  //
  // Default constructor
  //
 }

//_______________________________________________________________________
AliHeader::AliHeader(const AliHeader& head):
  TObject(head),
  fRun(-1),
  fNvertex(0),
  fNprimary(0),
  fNtrack(0),
  fEvent(0),
  fEventNrInRun(0),
  fTimeStamp(0),
  fStack(0),
  fGenHeader(0),
  fDetHeaders(0)
{
  //
  // Copy constructor
  //
  head.Copy(*this);
}

//_______________________________________________________________________
AliHeader::AliHeader(Int_t run, Int_t event):
  fRun(run),
  fNvertex(0),
  fNprimary(0),
  fNtrack(0),
  fEvent(event),
  fEventNrInRun(0),
  fTimeStamp(0),
  fStack(0),
  fGenHeader(0), 
  fDetHeaders(0) 
{
  //
  // Standard constructor
  //
}

//_______________________________________________________________________
AliHeader::AliHeader(Int_t run, Int_t event, Int_t evNumber):
  fRun(run),
  fNvertex(0),
  fNprimary(0),
  fNtrack(0),
  fEvent(event),
  fEventNrInRun(evNumber),
  fTimeStamp(0),
  fStack(0),
  fGenHeader(0), 
  fDetHeaders(0) 
{
  //
  // Standard constructor
  //
}

AliHeader::~AliHeader()
{
    //
    // Destructor
    //
    if (fDetHeaders) {
	fDetHeaders->Delete();
	delete fDetHeaders;
    }
    delete fGenHeader;
}



//_______________________________________________________________________
void AliHeader::Reset(Int_t run, Int_t event)
{
  //
  // Resets the header with new run and event number
  //
  fRun=run;	
  fNvertex=0;
  fNprimary=0;
  fNtrack=0;
  fEvent=event;
  fTimeStamp=0;
  if (fDetHeaders) fDetHeaders->Delete();
}

//_______________________________________________________________________
void AliHeader::Reset(Int_t run, Int_t event, Int_t evNumber)
{
  //
  // Resets the header with new run and event number
  //
  fRun=run;	
  fNvertex=0;
  fNprimary=0;
  fNtrack=0;
  fEvent=event;
  fEventNrInRun=evNumber;
  fTimeStamp=0;
  if (fDetHeaders) fDetHeaders->Clear();
}

//_______________________________________________________________________
void AliHeader::Print(const char*) const
{
  //
  // Dumps header content
  //
  printf(
"\n=========== Header for run %d Event %d = beginning ======================================\n",
  fRun,fEvent);
  printf("              Number of Vertex %d\n",fNvertex);
  printf("              Number of Primary %d\n",fNprimary);
  printf("              Number of Tracks %d\n",fNtrack);
  printf("              Time-stamp %ld\n",fTimeStamp);
  printf(
  "=========== Header for run %d Event %d = end ============================================\n\n",
  fRun,fEvent);

}

//_______________________________________________________________________
AliStack* AliHeader::Stack() const
{
// Return pointer to stack
    return fStack;
}

//_______________________________________________________________________
void AliHeader::SetStack(AliStack* stack)
{
// Set pointer to stack
    fStack = stack;
}

//_______________________________________________________________________
void AliHeader::SetGenEventHeader(AliGenEventHeader* header)
{
// Set pointer to header for generated event
    fGenHeader = header;
}

void AliHeader::AddDetectorEventHeader(AliDetectorEventHeader* header)
{
// Add a detector specific header
//
//  Create the array of headers
    if (!fDetHeaders) fDetHeaders = new TObjArray(77);

//  Some basic checks

    if (!header) {
	Warning("AddDetectorEventHeader","Detector tries to add empty header \n");
	return;
    }
    
    if (strlen(header->GetName()) == 0) {
	Warning("AddDetectorEventHeader","Detector tries to add header without name \n");
	return;
    }
    
    TObject *mod=fDetHeaders->FindObject(header->GetName());
    if(mod) {
	Warning("AddDetectorEventHeader","Detector %s tries to add more than one header \n", header->GetName());
	return;
    }
    

//  Add the header to the list 
    fDetHeaders->Add(header);
}

AliDetectorEventHeader* AliHeader::GetDetectorEventHeader(const char *name) const
{
//
// Returns detector specific event header
//
    if (!fDetHeaders) {
	Warning("GetDetectorEventHeader","There are no  detector specific headers for this event");
	return 0x0;
    }
    return  dynamic_cast<AliDetectorEventHeader*>(fDetHeaders->FindObject(name)) ;
}


//_______________________________________________________________________
AliGenEventHeader*  AliHeader::GenEventHeader() const
{
// Get pointer to header for generated event
    return fGenHeader;
}

//_______________________________________________________________________
void AliHeader::Copy(TObject&) const
{
  AliFatal("Not implemented");
}



 AliHeader.cxx:1
 AliHeader.cxx:2
 AliHeader.cxx:3
 AliHeader.cxx:4
 AliHeader.cxx:5
 AliHeader.cxx:6
 AliHeader.cxx:7
 AliHeader.cxx:8
 AliHeader.cxx:9
 AliHeader.cxx:10
 AliHeader.cxx:11
 AliHeader.cxx:12
 AliHeader.cxx:13
 AliHeader.cxx:14
 AliHeader.cxx:15
 AliHeader.cxx:16
 AliHeader.cxx:17
 AliHeader.cxx:18
 AliHeader.cxx:19
 AliHeader.cxx:20
 AliHeader.cxx:21
 AliHeader.cxx:22
 AliHeader.cxx:23
 AliHeader.cxx:24
 AliHeader.cxx:25
 AliHeader.cxx:26
 AliHeader.cxx:27
 AliHeader.cxx:28
 AliHeader.cxx:29
 AliHeader.cxx:30
 AliHeader.cxx:31
 AliHeader.cxx:32
 AliHeader.cxx:33
 AliHeader.cxx:34
 AliHeader.cxx:35
 AliHeader.cxx:36
 AliHeader.cxx:37
 AliHeader.cxx:38
 AliHeader.cxx:39
 AliHeader.cxx:40
 AliHeader.cxx:41
 AliHeader.cxx:42
 AliHeader.cxx:43
 AliHeader.cxx:44
 AliHeader.cxx:45
 AliHeader.cxx:46
 AliHeader.cxx:47
 AliHeader.cxx:48
 AliHeader.cxx:49
 AliHeader.cxx:50
 AliHeader.cxx:51
 AliHeader.cxx:52
 AliHeader.cxx:53
 AliHeader.cxx:54
 AliHeader.cxx:55
 AliHeader.cxx:56
 AliHeader.cxx:57
 AliHeader.cxx:58
 AliHeader.cxx:59
 AliHeader.cxx:60
 AliHeader.cxx:61
 AliHeader.cxx:62
 AliHeader.cxx:63
 AliHeader.cxx:64
 AliHeader.cxx:65
 AliHeader.cxx:66
 AliHeader.cxx:67
 AliHeader.cxx:68
 AliHeader.cxx:69
 AliHeader.cxx:70
 AliHeader.cxx:71
 AliHeader.cxx:72
 AliHeader.cxx:73
 AliHeader.cxx:74
 AliHeader.cxx:75
 AliHeader.cxx:76
 AliHeader.cxx:77
 AliHeader.cxx:78
 AliHeader.cxx:79
 AliHeader.cxx:80
 AliHeader.cxx:81
 AliHeader.cxx:82
 AliHeader.cxx:83
 AliHeader.cxx:84
 AliHeader.cxx:85
 AliHeader.cxx:86
 AliHeader.cxx:87
 AliHeader.cxx:88
 AliHeader.cxx:89
 AliHeader.cxx:90
 AliHeader.cxx:91
 AliHeader.cxx:92
 AliHeader.cxx:93
 AliHeader.cxx:94
 AliHeader.cxx:95
 AliHeader.cxx:96
 AliHeader.cxx:97
 AliHeader.cxx:98
 AliHeader.cxx:99
 AliHeader.cxx:100
 AliHeader.cxx:101
 AliHeader.cxx:102
 AliHeader.cxx:103
 AliHeader.cxx:104
 AliHeader.cxx:105
 AliHeader.cxx:106
 AliHeader.cxx:107
 AliHeader.cxx:108
 AliHeader.cxx:109
 AliHeader.cxx:110
 AliHeader.cxx:111
 AliHeader.cxx:112
 AliHeader.cxx:113
 AliHeader.cxx:114
 AliHeader.cxx:115
 AliHeader.cxx:116
 AliHeader.cxx:117
 AliHeader.cxx:118
 AliHeader.cxx:119
 AliHeader.cxx:120
 AliHeader.cxx:121
 AliHeader.cxx:122
 AliHeader.cxx:123
 AliHeader.cxx:124
 AliHeader.cxx:125
 AliHeader.cxx:126
 AliHeader.cxx:127
 AliHeader.cxx:128
 AliHeader.cxx:129
 AliHeader.cxx:130
 AliHeader.cxx:131
 AliHeader.cxx:132
 AliHeader.cxx:133
 AliHeader.cxx:134
 AliHeader.cxx:135
 AliHeader.cxx:136
 AliHeader.cxx:137
 AliHeader.cxx:138
 AliHeader.cxx:139
 AliHeader.cxx:140
 AliHeader.cxx:141
 AliHeader.cxx:142
 AliHeader.cxx:143
 AliHeader.cxx:144
 AliHeader.cxx:145
 AliHeader.cxx:146
 AliHeader.cxx:147
 AliHeader.cxx:148
 AliHeader.cxx:149
 AliHeader.cxx:150
 AliHeader.cxx:151
 AliHeader.cxx:152
 AliHeader.cxx:153
 AliHeader.cxx:154
 AliHeader.cxx:155
 AliHeader.cxx:156
 AliHeader.cxx:157
 AliHeader.cxx:158
 AliHeader.cxx:159
 AliHeader.cxx:160
 AliHeader.cxx:161
 AliHeader.cxx:162
 AliHeader.cxx:163
 AliHeader.cxx:164
 AliHeader.cxx:165
 AliHeader.cxx:166
 AliHeader.cxx:167
 AliHeader.cxx:168
 AliHeader.cxx:169
 AliHeader.cxx:170
 AliHeader.cxx:171
 AliHeader.cxx:172
 AliHeader.cxx:173
 AliHeader.cxx:174
 AliHeader.cxx:175
 AliHeader.cxx:176
 AliHeader.cxx:177
 AliHeader.cxx:178
 AliHeader.cxx:179
 AliHeader.cxx:180
 AliHeader.cxx:181
 AliHeader.cxx:182
 AliHeader.cxx:183
 AliHeader.cxx:184
 AliHeader.cxx:185
 AliHeader.cxx:186
 AliHeader.cxx:187
 AliHeader.cxx:188
 AliHeader.cxx:189
 AliHeader.cxx:190
 AliHeader.cxx:191
 AliHeader.cxx:192
 AliHeader.cxx:193
 AliHeader.cxx:194
 AliHeader.cxx:195
 AliHeader.cxx:196
 AliHeader.cxx:197
 AliHeader.cxx:198
 AliHeader.cxx:199
 AliHeader.cxx:200
 AliHeader.cxx:201
 AliHeader.cxx:202
 AliHeader.cxx:203
 AliHeader.cxx:204
 AliHeader.cxx:205
 AliHeader.cxx:206
 AliHeader.cxx:207
 AliHeader.cxx:208
 AliHeader.cxx:209
 AliHeader.cxx:210
 AliHeader.cxx:211
 AliHeader.cxx:212
 AliHeader.cxx:213
 AliHeader.cxx:214
 AliHeader.cxx:215
 AliHeader.cxx:216
 AliHeader.cxx:217
 AliHeader.cxx:218
 AliHeader.cxx:219
 AliHeader.cxx:220
 AliHeader.cxx:221
 AliHeader.cxx:222
 AliHeader.cxx:223
 AliHeader.cxx:224
 AliHeader.cxx:225
 AliHeader.cxx:226
 AliHeader.cxx:227
 AliHeader.cxx:228
 AliHeader.cxx:229
 AliHeader.cxx:230
 AliHeader.cxx:231
 AliHeader.cxx:232
 AliHeader.cxx:233
 AliHeader.cxx:234
 AliHeader.cxx:235
 AliHeader.cxx:236
 AliHeader.cxx:237
 AliHeader.cxx:238
 AliHeader.cxx:239
 AliHeader.cxx:240
 AliHeader.cxx:241
 AliHeader.cxx:242
 AliHeader.cxx:243
 AliHeader.cxx:244
 AliHeader.cxx:245
 AliHeader.cxx:246
 AliHeader.cxx:247
 AliHeader.cxx:248
 AliHeader.cxx:249
 AliHeader.cxx:250
 AliHeader.cxx:251
 AliHeader.cxx:252
 AliHeader.cxx:253