1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
16 //-------------------------------------------------------------------------
17 // Implementation of Class AliAODMCHeader
20 // Origin: Christian Klein-Boesing, CERN, Christian.Klein-Boesing@cern.ch
21 //-------------------------------------------------------------------------
24 #include "AliAODMCHeader.h"
25 #include "AliGenEventHeader.h"
26 #include "AliGenCocktailEventHeader.h"
31 ClassImp(AliAODMCHeader)
33 // Without a trailing dot root does not support
34 // direct drawing of some variables if the name is not unique on top label
35 // bnrach e.g. fEventType is found here and in AliAODHeader....
36 TString AliAODMCHeader::fgkStdBranchName("mcHeader");
38 //______________________________________________________________________________
40 AliAODMCHeader::AliAODMCHeader() :
48 ,fReactionPlaneAngle(0)
51 // default constructor
52 fVertex[0] = fVertex[1] = fVertex[2] = 0;
53 SetName(fgkStdBranchName.Data());
57 AliAODMCHeader::~AliAODMCHeader()
66 AliAODMCHeader::AliAODMCHeader(const AliAODMCHeader &header) :
68 ,fGenerator(header.fGenerator)
69 ,fImpactPar(header.fImpactPar)
70 ,fPtHard(header.fPtHard)
73 ,fEventType(header.fEventType)
74 ,fReactionPlaneAngle(header.fReactionPlaneAngle)
78 for(int i = 0;i<3;++i)fVertex[i] = header.fVertex[i];
79 SetName(header.fName);
80 SetTitle(header.fTitle);
83 AliAODMCHeader& AliAODMCHeader::operator=(const AliAODMCHeader &header)
89 AliVHeader::operator=(header);
90 fGenerator = header.fGenerator;
91 for(int i = 0;i<3;++i)fVertex[i] = header.fVertex[i];
92 fImpactPar = header.fImpactPar;
93 fPtHard = header.fPtHard;
94 fXsection = header.fXsection;
95 fTrials = header.fTrials;
96 fEventType = header.fEventType;
97 fReactionPlaneAngle = header.fReactionPlaneAngle;
100 for(int i = 0;i < header.fHeaders->GetEntries();i++){
101 AddCocktailHeader(dynamic_cast<AliGenEventHeader*>(header.fHeaders->At(i)));
108 void AliAODMCHeader::AddCocktailHeader(const AliGenEventHeader* header)
110 // Add a header to the list
113 fHeaders = new TList();
114 fHeaders->SetOwner(kTRUE);
116 fHeaders->Add(header->Clone());
119 void AliAODMCHeader::Copy(TObject &obj) const {
121 // this overwrites the virtual TOBject::Copy()
122 // to allow run time copying without casting
125 if(this==&obj)return;
126 AliAODMCHeader *robj = dynamic_cast<AliAODMCHeader*>(&obj);
127 if(!robj)return; // not an AliAODMCHeader
134 //______________________________________________________________________________
135 void AliAODMCHeader::Reset()
137 // reset all data members
144 fVertex[0] = fVertex[1] = fVertex[2] = 0;
145 fReactionPlaneAngle = 0;
146 if(fHeaders)fHeaders->Delete();
149 //______________________________________________________________________________
150 void AliAODMCHeader::Print(const Option_t *) const
152 // Print some data members
153 Printf("MC EventHeader Generators: %s # EventType %d Vtx = (%3.3f,%3.3f,%3.3f) ptHard = %3.3f GeV Impact parameter %3.3f \n",
156 GetVtxX(),GetVtxY(),GetVtxZ(),GetPtHard(),
157 GetImpactParameter());
160 for(int i = 0;i<fHeaders->GetEntries();++i){
161 TObject *obj = fHeaders->At(i);
163 Printf(">> %d: %s %s",i,obj->GetName(),obj->GetTitle());
169 AliGenEventHeader* AliAODMCHeader::GetCocktailHeader(Int_t i){
171 return (AliGenEventHeader*)(fHeaders->At(i));
174 void AliAODMCHeader::AddCocktailHeaders(AliGenEventHeader* header){
175 AliGenCocktailEventHeader *cHeader = dynamic_cast<AliGenCocktailEventHeader*>(header);
177 TList *genHeaders = cHeader->GetHeaders();
178 AliGenEventHeader* gH = 0;
179 for (int i=0; i<genHeaders->GetEntries(); i++) {
180 gH = (AliGenEventHeader*)genHeaders->At(i);
182 AddGeneratorName(gH->GetName());
183 AddCocktailHeader(dynamic_cast<AliGenEventHeader*>(genHeaders->At(i)));
188 // no cocktail header just addd the global header
189 AddCocktailHeader(header);
193 void AliAODMCHeader::AddGeneratorName(const char* c){
194 if(fGenerator.Length()==0)fGenerator += c;