]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/FORWARD/analysis2/AliCopyHeaderTask.cxx
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGLF / FORWARD / analysis2 / AliCopyHeaderTask.cxx
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  * 
8  * @ingroup pwglf_forward_tasks 
9  */
10
11 #include "AliCopyHeaderTask.h"
12 #include "AliESDEvent.h"
13 #include "AliAODEvent.h"
14 #include "AliCentrality.h"
15 #include "AliInputEventHandler.h"
16 #include "TFile.h"
17 #include "AliEventplane.h"
18 #include "AliESDVertex.h"
19 #include "AliAODVertex.h"
20
21 ClassImp(AliCopyHeaderTask)
22 #if 0 
23 ; // for emacs - do not remove 
24 #endif
25
26
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   }
46
47   LoadBranches();
48
49   AliAODHeader* aodHeader = dynamic_cast<AliAODHeader*>(aod->GetHeader());
50   if(!aodHeader) AliFatal("Not a standard AOD");
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())
68     aodHeader->SetCentrality(esd->GetCentrality());
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));
86
87   AliESDHeader* esdHeader = esd->GetHeader();
88   if (esdHeader) { 
89     aodHeader->SetIRInt2InteractionMap(esdHeader->GetIRInt2InteractionMap());
90     aodHeader->SetIRInt1InteractionMap(esdHeader->GetIRInt1InteractionMap());
91   }
92   
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
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());
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 //