#include "TList.h"
#include "AliAODMCHeader.h"
#include "AliGenEventHeader.h"
#include "AliGenCocktailEventHeader.h"
ClassImp(AliAODMCHeader)
TString AliAODMCHeader::fgkStdBranchName("mcHeader");
AliAODMCHeader::AliAODMCHeader() :
AliVHeader()
,fGenerator("")
,fImpactPar(0)
,fPtHard(0)
,fXsection(0)
,fTrials(0)
,fEventType(0)
,fReactionPlaneAngle(0)
,fHeaders(0)
{
fVertex[0] = fVertex[1] = fVertex[2] = 0;
SetName(fgkStdBranchName.Data());
}
AliAODMCHeader::~AliAODMCHeader()
{
Reset();
delete fHeaders;
}
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)
{
for(int i = 0;i<3;++i)fVertex[i] = header.fVertex[i];
SetName(header.fName);
SetTitle(header.fTitle);
}
AliAODMCHeader& AliAODMCHeader::operator=(const AliAODMCHeader &header)
{
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)
{
if(!header)return;
if (!fHeaders){
fHeaders = new TList();
fHeaders->SetOwner(kTRUE);
}
fHeaders->Add(header->Clone());
}
void AliAODMCHeader::Copy(TObject &obj) const {
if(this==&obj)return;
AliAODMCHeader *robj = dynamic_cast<AliAODMCHeader*>(&obj);
if(!robj)return;
*robj = *this;
}
void AliAODMCHeader::Reset()
{
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
{
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{
AddCocktailHeader(header);
}
}
void AliAODMCHeader::AddGeneratorName(const char* c){
if(fGenerator.Length()==0)fGenerator += c;
else {
fGenerator += " ";
fGenerator += c;
}
}