]>
Commit | Line | Data |
---|---|---|
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 | |
21 | ClassImp(AliCopyHeaderTask) | |
22 | #if 0 | |
23 | ; // for emacs - do not remove | |
24 | #endif | |
25 | ||
5934a3e3 | 26 | |
9416c923 | 27 | void |
28 | AliCopyHeaderTask::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 | ||
115 | void | |
116 | AliCopyHeaderTask::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 | ||
141 | void | |
142 | AliCopyHeaderTask::Terminate(Option_t*) | |
143 | { | |
144 | // Called at the end of the job - does nothing | |
145 | } | |
146 | ||
147 | // | |
148 | // EOF | |
149 | // |