2 * @file AliCopyHeaderTask.cxx
3 * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
4 * @date Tue Jul 12 10:59:32 2011
6 * @brief Task to copy ESD header to AOD
8 * @ingroup pwglf_forward_tasks
11 #include "AliCopyHeaderTask.h"
12 #include "AliESDEvent.h"
13 #include "AliAODEvent.h"
14 #include "AliCentrality.h"
15 #include "AliInputEventHandler.h"
17 #include "AliEventplane.h"
18 #include "AliESDVertex.h"
19 #include "AliAODVertex.h"
21 ClassImp(AliCopyHeaderTask)
23 ; // for emacs - do not remove
28 AliCopyHeaderTask::UserExec(Option_t*)
31 // Called at every event
33 // Copies information from ESD header to AOD header
35 AliESDEvent* esd = dynamic_cast<AliESDEvent*>(InputEvent());
36 AliAODEvent* aod = dynamic_cast<AliAODEvent*>(AODEvent());
39 AliWarning("Missing ESD event");
43 AliWarning("Missing AOD event");
49 AliAODHeader* aodHeader = dynamic_cast<AliAODHeader*>(aod->GetHeader());
50 if(!aodHeader) AliFatal("Not a standard AOD");
52 AliWarning("Missing AOD header");
53 aodHeader = new AliAODHeader(esd->GetRunNumber(),
54 esd->GetBunchCrossNumber(),
55 esd->GetOrbitNumber(),
56 esd->GetPeriodNumber());
57 aod->AddHeader(aodHeader);
60 aodHeader->SetRunNumber(esd->GetRunNumber());
61 aodHeader->SetOfflineTrigger(fInputHandler->IsEventSelected());
62 aodHeader->SetBunchCrossNumber(esd->GetBunchCrossNumber());
63 aodHeader->SetOrbitNumber(esd->GetOrbitNumber());
64 aodHeader->SetPeriodNumber(esd->GetPeriodNumber());
65 aodHeader->SetEventType(esd->GetEventType());
66 aodHeader->SetEventNumberESDFile(esd->GetHeader()->GetEventNumberInFile());
67 if(esd->GetCentrality())
68 aodHeader->SetCentrality(esd->GetCentrality());
70 aodHeader->SetCentrality(0);
72 aodHeader->SetFiredTriggerClasses(esd->GetFiredTriggerClasses());
73 aodHeader->SetTriggerMask(esd->GetTriggerMask());
74 aodHeader->SetTriggerCluster(esd->GetTriggerCluster());
75 aodHeader->SetL0TriggerInputs(esd->GetHeader()->GetL0TriggerInputs());
76 aodHeader->SetL1TriggerInputs(esd->GetHeader()->GetL1TriggerInputs());
77 aodHeader->SetL2TriggerInputs(esd->GetHeader()->GetL2TriggerInputs());
79 aodHeader->SetMagneticField(esd->GetMagneticField());
80 aodHeader->SetMuonMagFieldScale(esd->GetCurrentDip()/6000.);
81 aodHeader->SetZDCN1Energy(esd->GetZDCN1Energy());
82 aodHeader->SetZDCP1Energy(esd->GetZDCP1Energy());
83 aodHeader->SetZDCN2Energy(esd->GetZDCN2Energy());
84 aodHeader->SetZDCP2Energy(esd->GetZDCP2Energy());
85 aodHeader->SetZDCEMEnergy(esd->GetZDCEMEnergy(0),esd->GetZDCEMEnergy(1));
87 AliESDHeader* esdHeader = esd->GetHeader();
89 aodHeader->SetIRInt2InteractionMap(esdHeader->GetIRInt2InteractionMap());
90 aodHeader->SetIRInt1InteractionMap(esdHeader->GetIRInt1InteractionMap());
93 TTree* tree = fInputHandler->GetTree();
95 TFile* file = tree->GetCurrentFile();
96 if (file) aodHeader->SetESDFileName(file->GetName());
99 AliEventplane* ep = esd->GetEventplane();
100 if (ep) aodHeader->SetEventplane(ep);
102 // Copy primary vertices
103 CopyVertex(*aod, esd->GetPrimaryVertex(), AliAODVertex::kPrimary);
104 CopyVertex(*aod, esd->GetPrimaryVertexSPD(), AliAODVertex::kMainSPD);
105 CopyVertex(*aod, esd->GetPrimaryVertexTPC(), AliAODVertex::kMainTPC);
107 // Loop over pile-ups
108 for (Int_t i = 0; i < esd->GetNumberOfPileupVerticesSPD(); i++)
109 CopyVertex(*aod, esd->GetPileupVertexSPD(i), AliAODVertex::kPileupSPD);
110 for (Int_t i = 0; i < esd->GetNumberOfPileupVerticesTracks(); i++)
111 CopyVertex(*aod, esd->GetPileupVertexTracks(i),AliAODVertex::kPileupTracks);
116 AliCopyHeaderTask::CopyVertex(AliAODEvent& aod,
117 const AliESDVertex* vtx,
122 TClonesArray* arr = aod.GetVertices();
125 Int_t n = arr->GetEntriesFast();
126 Double_t pos[] = { 0., 0., 0. };
127 Double_t cov[] = { 0., 0., 0., 0., 0., 0. };
128 Double_t chi2 = vtx->GetChi2toNDF();
130 vtx->GetCovMatrix(cov);
132 AliAODVertex* out = new((*arr)[n]) AliAODVertex(pos, cov, chi2, 0, -1, type);
133 out->SetName(vtx->GetName());
134 out->SetTitle(vtx->GetTitle());
135 out->SetBC(vtx->GetBC());
136 TString tit(out->GetTitle());
137 if (!tit.Contains("VertexerTracks"))
138 out->SetNContributors(vtx->GetNContributors());
142 AliCopyHeaderTask::Terminate(Option_t*)
144 // Called at the end of the job - does nothing