ROOT logo
/**
 * @file   AliCopyHeaderTask.cxx
 * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
 * @date   Tue Jul 12 10:59:32 2011
 * 
 * @brief  Task to copy ESD header to AOD 
 * 
 * @ingroup pwglf_forward_tasks 
 */

#include "AliCopyHeaderTask.h"
#include "AliESDEvent.h"
#include "AliAODEvent.h"
#include "AliCentrality.h"
#include "AliInputEventHandler.h"
#include "TFile.h"
#include "AliEventplane.h"
#include "AliESDVertex.h"
#include "AliAODVertex.h"

ClassImp(AliCopyHeaderTask)
#if 0 
; // for emacs - do not remove 
#endif


void
AliCopyHeaderTask::UserExec(Option_t*)
{
  // 
  // Called at every event 
  //
  // Copies information from ESD header to AOD header
  // 
  AliESDEvent* esd = dynamic_cast<AliESDEvent*>(InputEvent());
  AliAODEvent* aod = dynamic_cast<AliAODEvent*>(AODEvent());

  if (!esd) { 
    AliWarning("Missing ESD event");
    return;
  }
  if (!aod) { 
    AliWarning("Missing AOD event");
    return;
  }

  LoadBranches();

  AliAODHeader* aodHeader = dynamic_cast<AliAODHeader*>(aod->GetHeader());
  if(!aodHeader) AliFatal("Not a standard AOD");
  if (!aodHeader) { 
    AliWarning("Missing AOD header");
    aodHeader = new AliAODHeader(esd->GetRunNumber(),
				 esd->GetBunchCrossNumber(),
				 esd->GetOrbitNumber(),
				 esd->GetPeriodNumber());
    aod->AddHeader(aodHeader);
  }

  aodHeader->SetRunNumber(esd->GetRunNumber());
  aodHeader->SetOfflineTrigger(fInputHandler->IsEventSelected());
  aodHeader->SetBunchCrossNumber(esd->GetBunchCrossNumber());
  aodHeader->SetOrbitNumber(esd->GetOrbitNumber());
  aodHeader->SetPeriodNumber(esd->GetPeriodNumber());
  aodHeader->SetEventType(esd->GetEventType());
  aodHeader->SetEventNumberESDFile(esd->GetHeader()->GetEventNumberInFile());
  if(esd->GetCentrality())
    aodHeader->SetCentrality(esd->GetCentrality());
  else
    aodHeader->SetCentrality(0);

  aodHeader->SetFiredTriggerClasses(esd->GetFiredTriggerClasses());
  aodHeader->SetTriggerMask(esd->GetTriggerMask()); 
  aodHeader->SetTriggerCluster(esd->GetTriggerCluster());
  aodHeader->SetL0TriggerInputs(esd->GetHeader()->GetL0TriggerInputs());    
  aodHeader->SetL1TriggerInputs(esd->GetHeader()->GetL1TriggerInputs());    
  aodHeader->SetL2TriggerInputs(esd->GetHeader()->GetL2TriggerInputs());    
  
  aodHeader->SetMagneticField(esd->GetMagneticField());
  aodHeader->SetMuonMagFieldScale(esd->GetCurrentDip()/6000.);
  aodHeader->SetZDCN1Energy(esd->GetZDCN1Energy());
  aodHeader->SetZDCP1Energy(esd->GetZDCP1Energy());
  aodHeader->SetZDCN2Energy(esd->GetZDCN2Energy());
  aodHeader->SetZDCP2Energy(esd->GetZDCP2Energy());
  aodHeader->SetZDCEMEnergy(esd->GetZDCEMEnergy(0),esd->GetZDCEMEnergy(1));

  AliESDHeader* esdHeader = esd->GetHeader();
  if (esdHeader) { 
    aodHeader->SetIRInt2InteractionMap(esdHeader->GetIRInt2InteractionMap());
    aodHeader->SetIRInt1InteractionMap(esdHeader->GetIRInt1InteractionMap());
  }
  
  TTree* tree = fInputHandler->GetTree();
  if (tree) {
    TFile* file = tree->GetCurrentFile();
    if (file) aodHeader->SetESDFileName(file->GetName());
  }

  AliEventplane* ep = esd->GetEventplane();
  if (ep) aodHeader->SetEventplane(ep);

  // Copy primary vertices
  CopyVertex(*aod, esd->GetPrimaryVertex(),    AliAODVertex::kPrimary);
  CopyVertex(*aod, esd->GetPrimaryVertexSPD(), AliAODVertex::kMainSPD);
  CopyVertex(*aod, esd->GetPrimaryVertexTPC(), AliAODVertex::kMainTPC);
  
  // Loop over pile-ups 
  for (Int_t i = 0; i < esd->GetNumberOfPileupVerticesSPD(); i++) 
    CopyVertex(*aod, esd->GetPileupVertexSPD(i), AliAODVertex::kPileupSPD);
  for (Int_t i = 0; i < esd->GetNumberOfPileupVerticesTracks(); i++) 
    CopyVertex(*aod, esd->GetPileupVertexTracks(i),AliAODVertex::kPileupTracks);
    
}

void
AliCopyHeaderTask::CopyVertex(AliAODEvent&        aod, 
			      const AliESDVertex* vtx, 
			      Int_t               type) 
{
  if (!vtx) return;

  TClonesArray* arr = aod.GetVertices();
  if (!arr) return;

  Int_t    n     = arr->GetEntriesFast(); 
  Double_t pos[] = { 0., 0., 0. };
  Double_t cov[] = { 0., 0., 0., 0., 0., 0. }; 
  Double_t chi2  = vtx->GetChi2toNDF();
  vtx->GetXYZ(pos);
  vtx->GetCovMatrix(cov);
  
  AliAODVertex* out = new((*arr)[n]) AliAODVertex(pos, cov, chi2, 0, -1, type);
  out->SetName(vtx->GetName());
  out->SetTitle(vtx->GetTitle());
  out->SetBC(vtx->GetBC());
  TString tit(out->GetTitle());
  if (!tit.Contains("VertexerTracks")) 
    out->SetNContributors(vtx->GetNContributors());
}

void
AliCopyHeaderTask::Terminate(Option_t*)
{
  // Called at the end of the job  - does nothing 
}

//
// EOF
//
 AliCopyHeaderTask.cxx:1
 AliCopyHeaderTask.cxx:2
 AliCopyHeaderTask.cxx:3
 AliCopyHeaderTask.cxx:4
 AliCopyHeaderTask.cxx:5
 AliCopyHeaderTask.cxx:6
 AliCopyHeaderTask.cxx:7
 AliCopyHeaderTask.cxx:8
 AliCopyHeaderTask.cxx:9
 AliCopyHeaderTask.cxx:10
 AliCopyHeaderTask.cxx:11
 AliCopyHeaderTask.cxx:12
 AliCopyHeaderTask.cxx:13
 AliCopyHeaderTask.cxx:14
 AliCopyHeaderTask.cxx:15
 AliCopyHeaderTask.cxx:16
 AliCopyHeaderTask.cxx:17
 AliCopyHeaderTask.cxx:18
 AliCopyHeaderTask.cxx:19
 AliCopyHeaderTask.cxx:20
 AliCopyHeaderTask.cxx:21
 AliCopyHeaderTask.cxx:22
 AliCopyHeaderTask.cxx:23
 AliCopyHeaderTask.cxx:24
 AliCopyHeaderTask.cxx:25
 AliCopyHeaderTask.cxx:26
 AliCopyHeaderTask.cxx:27
 AliCopyHeaderTask.cxx:28
 AliCopyHeaderTask.cxx:29
 AliCopyHeaderTask.cxx:30
 AliCopyHeaderTask.cxx:31
 AliCopyHeaderTask.cxx:32
 AliCopyHeaderTask.cxx:33
 AliCopyHeaderTask.cxx:34
 AliCopyHeaderTask.cxx:35
 AliCopyHeaderTask.cxx:36
 AliCopyHeaderTask.cxx:37
 AliCopyHeaderTask.cxx:38
 AliCopyHeaderTask.cxx:39
 AliCopyHeaderTask.cxx:40
 AliCopyHeaderTask.cxx:41
 AliCopyHeaderTask.cxx:42
 AliCopyHeaderTask.cxx:43
 AliCopyHeaderTask.cxx:44
 AliCopyHeaderTask.cxx:45
 AliCopyHeaderTask.cxx:46
 AliCopyHeaderTask.cxx:47
 AliCopyHeaderTask.cxx:48
 AliCopyHeaderTask.cxx:49
 AliCopyHeaderTask.cxx:50
 AliCopyHeaderTask.cxx:51
 AliCopyHeaderTask.cxx:52
 AliCopyHeaderTask.cxx:53
 AliCopyHeaderTask.cxx:54
 AliCopyHeaderTask.cxx:55
 AliCopyHeaderTask.cxx:56
 AliCopyHeaderTask.cxx:57
 AliCopyHeaderTask.cxx:58
 AliCopyHeaderTask.cxx:59
 AliCopyHeaderTask.cxx:60
 AliCopyHeaderTask.cxx:61
 AliCopyHeaderTask.cxx:62
 AliCopyHeaderTask.cxx:63
 AliCopyHeaderTask.cxx:64
 AliCopyHeaderTask.cxx:65
 AliCopyHeaderTask.cxx:66
 AliCopyHeaderTask.cxx:67
 AliCopyHeaderTask.cxx:68
 AliCopyHeaderTask.cxx:69
 AliCopyHeaderTask.cxx:70
 AliCopyHeaderTask.cxx:71
 AliCopyHeaderTask.cxx:72
 AliCopyHeaderTask.cxx:73
 AliCopyHeaderTask.cxx:74
 AliCopyHeaderTask.cxx:75
 AliCopyHeaderTask.cxx:76
 AliCopyHeaderTask.cxx:77
 AliCopyHeaderTask.cxx:78
 AliCopyHeaderTask.cxx:79
 AliCopyHeaderTask.cxx:80
 AliCopyHeaderTask.cxx:81
 AliCopyHeaderTask.cxx:82
 AliCopyHeaderTask.cxx:83
 AliCopyHeaderTask.cxx:84
 AliCopyHeaderTask.cxx:85
 AliCopyHeaderTask.cxx:86
 AliCopyHeaderTask.cxx:87
 AliCopyHeaderTask.cxx:88
 AliCopyHeaderTask.cxx:89
 AliCopyHeaderTask.cxx:90
 AliCopyHeaderTask.cxx:91
 AliCopyHeaderTask.cxx:92
 AliCopyHeaderTask.cxx:93
 AliCopyHeaderTask.cxx:94
 AliCopyHeaderTask.cxx:95
 AliCopyHeaderTask.cxx:96
 AliCopyHeaderTask.cxx:97
 AliCopyHeaderTask.cxx:98
 AliCopyHeaderTask.cxx:99
 AliCopyHeaderTask.cxx:100
 AliCopyHeaderTask.cxx:101
 AliCopyHeaderTask.cxx:102
 AliCopyHeaderTask.cxx:103
 AliCopyHeaderTask.cxx:104
 AliCopyHeaderTask.cxx:105
 AliCopyHeaderTask.cxx:106
 AliCopyHeaderTask.cxx:107
 AliCopyHeaderTask.cxx:108
 AliCopyHeaderTask.cxx:109
 AliCopyHeaderTask.cxx:110
 AliCopyHeaderTask.cxx:111
 AliCopyHeaderTask.cxx:112
 AliCopyHeaderTask.cxx:113
 AliCopyHeaderTask.cxx:114
 AliCopyHeaderTask.cxx:115
 AliCopyHeaderTask.cxx:116
 AliCopyHeaderTask.cxx:117
 AliCopyHeaderTask.cxx:118
 AliCopyHeaderTask.cxx:119
 AliCopyHeaderTask.cxx:120
 AliCopyHeaderTask.cxx:121
 AliCopyHeaderTask.cxx:122
 AliCopyHeaderTask.cxx:123
 AliCopyHeaderTask.cxx:124
 AliCopyHeaderTask.cxx:125
 AliCopyHeaderTask.cxx:126
 AliCopyHeaderTask.cxx:127
 AliCopyHeaderTask.cxx:128
 AliCopyHeaderTask.cxx:129
 AliCopyHeaderTask.cxx:130
 AliCopyHeaderTask.cxx:131
 AliCopyHeaderTask.cxx:132
 AliCopyHeaderTask.cxx:133
 AliCopyHeaderTask.cxx:134
 AliCopyHeaderTask.cxx:135
 AliCopyHeaderTask.cxx:136
 AliCopyHeaderTask.cxx:137
 AliCopyHeaderTask.cxx:138
 AliCopyHeaderTask.cxx:139
 AliCopyHeaderTask.cxx:140
 AliCopyHeaderTask.cxx:141
 AliCopyHeaderTask.cxx:142
 AliCopyHeaderTask.cxx:143
 AliCopyHeaderTask.cxx:144
 AliCopyHeaderTask.cxx:145
 AliCopyHeaderTask.cxx:146
 AliCopyHeaderTask.cxx:147
 AliCopyHeaderTask.cxx:148
 AliCopyHeaderTask.cxx:149