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

//-------------------------------------------------------------------------
//                      Implementation of   Class AliAODMCHeader
//   Header data
//   for the ESD   
//   Origin: Christian Klein-Boesing, CERN, Christian.Klein-Boesing@cern.ch 
//-------------------------------------------------------------------------

#include "TList.h"
#include "AliAODMCHeader.h"
#include "AliGenEventHeader.h"
#include "AliGenCocktailEventHeader.h"




ClassImp(AliAODMCHeader)

// Without a trailing dot root does not support
// direct drawing of some variables if the name is not unique on top label
// bnrach e.g. fEventType is found here and in AliAODHeader....
TString AliAODMCHeader::fgkStdBranchName("mcHeader");

//______________________________________________________________________________

AliAODMCHeader::AliAODMCHeader() :
  AliVHeader()
  ,fGenerator("")
  ,fImpactPar(0)
  ,fPtHard(0)
  ,fXsection(0)
  ,fTrials(0)
  ,fEventType(0)
  ,fReactionPlaneAngle(0)  
  ,fHeaders(0)
{
  // default constructor
  fVertex[0] = fVertex[1] = fVertex[2] = 0;  
  SetName(fgkStdBranchName.Data());
}


AliAODMCHeader::~AliAODMCHeader() 
{

  Reset();
  delete fHeaders;
  // destructor
}


AliAODMCHeader::AliAODMCHeader(const AliAODMCHeader &header) :
  AliVHeader(header)
  ,fGenerator(header.fGenerator)
  ,fImpactPar(header.fImpactPar)
  ,fPtHard(header.fPtHard)
  ,fXsection(0)
  ,fTrials(0)
  ,fEventType(header.fEventType)
  ,fReactionPlaneAngle(header.fReactionPlaneAngle)  
  ,fHeaders(0)
{
  // copy constructor
  for(int i = 0;i<3;++i)fVertex[i] = header.fVertex[i];
  SetName(header.fName);
  SetTitle(header.fTitle);
}

AliAODMCHeader& AliAODMCHeader::operator=(const AliAODMCHeader &header)
{ 
  // assigment operator

  if(this!=&header) {
    Reset();
    AliVHeader::operator=(header);
    fGenerator = header.fGenerator;
    for(int i = 0;i<3;++i)fVertex[i] = header.fVertex[i];
    fImpactPar = header.fImpactPar;
    fPtHard = header.fPtHard;
    fXsection = header.fXsection;
    fTrials = header.fTrials;
    fEventType = header.fEventType;
    fReactionPlaneAngle = header.fReactionPlaneAngle;

    if(header.fHeaders){
      for(int i = 0;i < header.fHeaders->GetEntries();i++){
	AddCocktailHeader(dynamic_cast<AliGenEventHeader*>(header.fHeaders->At(i)));
      }
    }
  } 
  return *this;
}

void AliAODMCHeader::AddCocktailHeader(const AliGenEventHeader* header)
{
// Add a header to the list
  if(!header)return;
  if (!fHeaders){ 
    fHeaders = new TList();
    fHeaders->SetOwner(kTRUE);
  }
  fHeaders->Add(header->Clone());
}

void AliAODMCHeader::Copy(TObject &obj) const {
  
  // this overwrites the virtual TOBject::Copy()
  // to allow run time copying without casting
  // in AliESDEvent

  if(this==&obj)return;
  AliAODMCHeader *robj = dynamic_cast<AliAODMCHeader*>(&obj);
  if(!robj)return; // not an AliAODMCHeader
  *robj = *this;

}



//______________________________________________________________________________
void AliAODMCHeader::Reset()
{
  // reset all data members
  fGenerator = "";
  fImpactPar = 0;
  fEventType = 0;
  fPtHard = 0;
  fXsection = 0;
  fTrials = 0;
  fVertex[0] = fVertex[1] = fVertex[2] = 0;  
  fReactionPlaneAngle = 0;
  if(fHeaders)fHeaders->Delete();
}

//______________________________________________________________________________
void AliAODMCHeader::Print(const Option_t *) const
{
  // Print some data members
  Printf("MC EventHeader Generators: %s # EventType %d  Vtx = (%3.3f,%3.3f,%3.3f) ptHard = %3.3f GeV Impact parameter %3.3f  \n",
	 GetGeneratorName(),
	 GetEventType(),
	 GetVtxX(),GetVtxY(),GetVtxZ(),GetPtHard(),
	 GetImpactParameter());
  if(fHeaders){
    fHeaders->Print();
    for(int i = 0;i<fHeaders->GetEntries();++i){
      TObject *obj = fHeaders->At(i);
      if(obj){
	Printf(">> %d: %s %s",i,obj->GetName(),obj->GetTitle());
      }
    }
  }
}

AliGenEventHeader* AliAODMCHeader::GetCocktailHeader(Int_t i){
  if(i<0)return 0;
  return (AliGenEventHeader*)(fHeaders->At(i));
}

void  AliAODMCHeader::AddCocktailHeaders(AliGenEventHeader* header){
  AliGenCocktailEventHeader *cHeader = dynamic_cast<AliGenCocktailEventHeader*>(header);
  if(cHeader){
      TList *genHeaders = cHeader->GetHeaders();
      AliGenEventHeader* gH = 0;
      for (int i=0; i<genHeaders->GetEntries(); i++) {
	gH = (AliGenEventHeader*)genHeaders->At(i);
	if(gH){
	  AddGeneratorName(gH->GetName());
	  AddCocktailHeader(dynamic_cast<AliGenEventHeader*>(genHeaders->At(i)));	
	}
      }
  }
  else{
    // no cocktail header just addd the global header
    AddCocktailHeader(header);	
  }
}

void   AliAODMCHeader::AddGeneratorName(const char* c){
  if(fGenerator.Length()==0)fGenerator += c;
  else {
    fGenerator += " ";
    fGenerator += c;
  }
}
 AliAODMCHeader.cxx:1
 AliAODMCHeader.cxx:2
 AliAODMCHeader.cxx:3
 AliAODMCHeader.cxx:4
 AliAODMCHeader.cxx:5
 AliAODMCHeader.cxx:6
 AliAODMCHeader.cxx:7
 AliAODMCHeader.cxx:8
 AliAODMCHeader.cxx:9
 AliAODMCHeader.cxx:10
 AliAODMCHeader.cxx:11
 AliAODMCHeader.cxx:12
 AliAODMCHeader.cxx:13
 AliAODMCHeader.cxx:14
 AliAODMCHeader.cxx:15
 AliAODMCHeader.cxx:16
 AliAODMCHeader.cxx:17
 AliAODMCHeader.cxx:18
 AliAODMCHeader.cxx:19
 AliAODMCHeader.cxx:20
 AliAODMCHeader.cxx:21
 AliAODMCHeader.cxx:22
 AliAODMCHeader.cxx:23
 AliAODMCHeader.cxx:24
 AliAODMCHeader.cxx:25
 AliAODMCHeader.cxx:26
 AliAODMCHeader.cxx:27
 AliAODMCHeader.cxx:28
 AliAODMCHeader.cxx:29
 AliAODMCHeader.cxx:30
 AliAODMCHeader.cxx:31
 AliAODMCHeader.cxx:32
 AliAODMCHeader.cxx:33
 AliAODMCHeader.cxx:34
 AliAODMCHeader.cxx:35
 AliAODMCHeader.cxx:36
 AliAODMCHeader.cxx:37
 AliAODMCHeader.cxx:38
 AliAODMCHeader.cxx:39
 AliAODMCHeader.cxx:40
 AliAODMCHeader.cxx:41
 AliAODMCHeader.cxx:42
 AliAODMCHeader.cxx:43
 AliAODMCHeader.cxx:44
 AliAODMCHeader.cxx:45
 AliAODMCHeader.cxx:46
 AliAODMCHeader.cxx:47
 AliAODMCHeader.cxx:48
 AliAODMCHeader.cxx:49
 AliAODMCHeader.cxx:50
 AliAODMCHeader.cxx:51
 AliAODMCHeader.cxx:52
 AliAODMCHeader.cxx:53
 AliAODMCHeader.cxx:54
 AliAODMCHeader.cxx:55
 AliAODMCHeader.cxx:56
 AliAODMCHeader.cxx:57
 AliAODMCHeader.cxx:58
 AliAODMCHeader.cxx:59
 AliAODMCHeader.cxx:60
 AliAODMCHeader.cxx:61
 AliAODMCHeader.cxx:62
 AliAODMCHeader.cxx:63
 AliAODMCHeader.cxx:64
 AliAODMCHeader.cxx:65
 AliAODMCHeader.cxx:66
 AliAODMCHeader.cxx:67
 AliAODMCHeader.cxx:68
 AliAODMCHeader.cxx:69
 AliAODMCHeader.cxx:70
 AliAODMCHeader.cxx:71
 AliAODMCHeader.cxx:72
 AliAODMCHeader.cxx:73
 AliAODMCHeader.cxx:74
 AliAODMCHeader.cxx:75
 AliAODMCHeader.cxx:76
 AliAODMCHeader.cxx:77
 AliAODMCHeader.cxx:78
 AliAODMCHeader.cxx:79
 AliAODMCHeader.cxx:80
 AliAODMCHeader.cxx:81
 AliAODMCHeader.cxx:82
 AliAODMCHeader.cxx:83
 AliAODMCHeader.cxx:84
 AliAODMCHeader.cxx:85
 AliAODMCHeader.cxx:86
 AliAODMCHeader.cxx:87
 AliAODMCHeader.cxx:88
 AliAODMCHeader.cxx:89
 AliAODMCHeader.cxx:90
 AliAODMCHeader.cxx:91
 AliAODMCHeader.cxx:92
 AliAODMCHeader.cxx:93
 AliAODMCHeader.cxx:94
 AliAODMCHeader.cxx:95
 AliAODMCHeader.cxx:96
 AliAODMCHeader.cxx:97
 AliAODMCHeader.cxx:98
 AliAODMCHeader.cxx:99
 AliAODMCHeader.cxx:100
 AliAODMCHeader.cxx:101
 AliAODMCHeader.cxx:102
 AliAODMCHeader.cxx:103
 AliAODMCHeader.cxx:104
 AliAODMCHeader.cxx:105
 AliAODMCHeader.cxx:106
 AliAODMCHeader.cxx:107
 AliAODMCHeader.cxx:108
 AliAODMCHeader.cxx:109
 AliAODMCHeader.cxx:110
 AliAODMCHeader.cxx:111
 AliAODMCHeader.cxx:112
 AliAODMCHeader.cxx:113
 AliAODMCHeader.cxx:114
 AliAODMCHeader.cxx:115
 AliAODMCHeader.cxx:116
 AliAODMCHeader.cxx:117
 AliAODMCHeader.cxx:118
 AliAODMCHeader.cxx:119
 AliAODMCHeader.cxx:120
 AliAODMCHeader.cxx:121
 AliAODMCHeader.cxx:122
 AliAODMCHeader.cxx:123
 AliAODMCHeader.cxx:124
 AliAODMCHeader.cxx:125
 AliAODMCHeader.cxx:126
 AliAODMCHeader.cxx:127
 AliAODMCHeader.cxx:128
 AliAODMCHeader.cxx:129
 AliAODMCHeader.cxx:130
 AliAODMCHeader.cxx:131
 AliAODMCHeader.cxx:132
 AliAODMCHeader.cxx:133
 AliAODMCHeader.cxx:134
 AliAODMCHeader.cxx:135
 AliAODMCHeader.cxx:136
 AliAODMCHeader.cxx:137
 AliAODMCHeader.cxx:138
 AliAODMCHeader.cxx:139
 AliAODMCHeader.cxx:140
 AliAODMCHeader.cxx:141
 AliAODMCHeader.cxx:142
 AliAODMCHeader.cxx:143
 AliAODMCHeader.cxx:144
 AliAODMCHeader.cxx:145
 AliAODMCHeader.cxx:146
 AliAODMCHeader.cxx:147
 AliAODMCHeader.cxx:148
 AliAODMCHeader.cxx:149
 AliAODMCHeader.cxx:150
 AliAODMCHeader.cxx:151
 AliAODMCHeader.cxx:152
 AliAODMCHeader.cxx:153
 AliAODMCHeader.cxx:154
 AliAODMCHeader.cxx:155
 AliAODMCHeader.cxx:156
 AliAODMCHeader.cxx:157
 AliAODMCHeader.cxx:158
 AliAODMCHeader.cxx:159
 AliAODMCHeader.cxx:160
 AliAODMCHeader.cxx:161
 AliAODMCHeader.cxx:162
 AliAODMCHeader.cxx:163
 AliAODMCHeader.cxx:164
 AliAODMCHeader.cxx:165
 AliAODMCHeader.cxx:166
 AliAODMCHeader.cxx:167
 AliAODMCHeader.cxx:168
 AliAODMCHeader.cxx:169
 AliAODMCHeader.cxx:170
 AliAODMCHeader.cxx:171
 AliAODMCHeader.cxx:172
 AliAODMCHeader.cxx:173
 AliAODMCHeader.cxx:174
 AliAODMCHeader.cxx:175
 AliAODMCHeader.cxx:176
 AliAODMCHeader.cxx:177
 AliAODMCHeader.cxx:178
 AliAODMCHeader.cxx:179
 AliAODMCHeader.cxx:180
 AliAODMCHeader.cxx:181
 AliAODMCHeader.cxx:182
 AliAODMCHeader.cxx:183
 AliAODMCHeader.cxx:184
 AliAODMCHeader.cxx:185
 AliAODMCHeader.cxx:186
 AliAODMCHeader.cxx:187
 AliAODMCHeader.cxx:188
 AliAODMCHeader.cxx:189
 AliAODMCHeader.cxx:190
 AliAODMCHeader.cxx:191
 AliAODMCHeader.cxx:192
 AliAODMCHeader.cxx:193
 AliAODMCHeader.cxx:194
 AliAODMCHeader.cxx:195
 AliAODMCHeader.cxx:196
 AliAODMCHeader.cxx:197
 AliAODMCHeader.cxx:198
 AliAODMCHeader.cxx:199