]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/FORWARD/analysis2/AliCopyHeaderTask.cxx
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGLF / FORWARD / analysis2 / AliCopyHeaderTask.cxx
CommitLineData
9416c923 1/**
2 * @file AliCopyHeaderTask.cxx
3 * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
4 * @date Tue Jul 12 10:59:32 2011
5 *
6 * @brief Task to copy ESD header to AOD
7 *
bd6f5206 8 * @ingroup pwglf_forward_tasks
9416c923 9 */
10
11#include "AliCopyHeaderTask.h"
12#include "AliESDEvent.h"
13#include "AliAODEvent.h"
14#include "AliCentrality.h"
15#include "AliInputEventHandler.h"
0b9d5cd0 16#include "TFile.h"
17#include "AliEventplane.h"
9de105b3 18#include "AliESDVertex.h"
19#include "AliAODVertex.h"
9416c923 20
21ClassImp(AliCopyHeaderTask)
22#if 0
23; // for emacs - do not remove
24#endif
25
5934a3e3 26
9416c923 27void
28AliCopyHeaderTask::UserExec(Option_t*)
29{
30 //
31 // Called at every event
32 //
33 // Copies information from ESD header to AOD header
34 //
35 AliESDEvent* esd = dynamic_cast<AliESDEvent*>(InputEvent());
36 AliAODEvent* aod = dynamic_cast<AliAODEvent*>(AODEvent());
37
38 if (!esd) {
39 AliWarning("Missing ESD event");
40 return;
41 }
42 if (!aod) {
43 AliWarning("Missing AOD event");
44 return;
45 }
5934a3e3 46
47 LoadBranches();
48
0a918d8d 49 AliAODHeader* aodHeader = dynamic_cast<AliAODHeader*>(aod->GetHeader());
50 if(!aodHeader) AliFatal("Not a standard AOD");
9416c923 51 if (!aodHeader) {
52 AliWarning("Missing AOD header");
53 aodHeader = new AliAODHeader(esd->GetRunNumber(),
54 esd->GetBunchCrossNumber(),
55 esd->GetOrbitNumber(),
56 esd->GetPeriodNumber());
57 aod->AddHeader(aodHeader);
58 }
59
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())
9de105b3 68 aodHeader->SetCentrality(esd->GetCentrality());
9416c923 69 else
70 aodHeader->SetCentrality(0);
71
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());
78
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));
0b9d5cd0 86
9de105b3 87 AliESDHeader* esdHeader = esd->GetHeader();
88 if (esdHeader) {
89 aodHeader->SetIRInt2InteractionMap(esdHeader->GetIRInt2InteractionMap());
90 aodHeader->SetIRInt1InteractionMap(esdHeader->GetIRInt1InteractionMap());
91 }
92
0b9d5cd0 93 TTree* tree = fInputHandler->GetTree();
94 if (tree) {
95 TFile* file = tree->GetCurrentFile();
96 if (file) aodHeader->SetESDFileName(file->GetName());
97 }
98
99 AliEventplane* ep = esd->GetEventplane();
100 if (ep) aodHeader->SetEventplane(ep);
101
9de105b3 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);
106
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);
112
113}
114
115void
116AliCopyHeaderTask::CopyVertex(AliAODEvent& aod,
117 const AliESDVertex* vtx,
118 Int_t type)
119{
120 if (!vtx) return;
121
122 TClonesArray* arr = aod.GetVertices();
123 if (!arr) return;
124
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();
129 vtx->GetXYZ(pos);
130 vtx->GetCovMatrix(cov);
131
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());
9416c923 139}
140
141void
142AliCopyHeaderTask::Terminate(Option_t*)
143{
144 // Called at the end of the job - does nothing
145}
146
147//
148// EOF
149//