]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG/muon/AliAnalysisTaskSEMuonsHF.cxx
adding cuts for muons
[u/mrichter/AliRoot.git] / PWG / muon / AliAnalysisTaskSEMuonsHF.cxx
CommitLineData
fd1d0cb9 1/**************************************************************************
2 * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
27de2dfb 16/* $Id$ */
17
fd1d0cb9 18/////////////////////////////////////////////////////////////
19//
20// AliAnalysisTaskSE for the single muon and dimuon from HF analysis,
21// using the classes AliMuonsHFHeader,
22// AliMuonInfoStoreRD,
23// AliDimuInfoStoreRD,
24// AliMuonInfoStoreMC,
25// AliDimuInfoStoreMC.
26//
27// Author: X-M. Zhang, zhang@clermont.in2p3.fr
28// zhangxm@iopp.ccnu.edu.cn
29/////////////////////////////////////////////////////////////
30
31#include <TList.h>
4292b3b6 32#include <TClonesArray.h>
33
4292b3b6 34#include "AliESDEvent.h"
35#include "AliAODEvent.h"
9bcac085 36#include "AliESDHeader.h"
37#include "AliAODHeader.h"
4292b3b6 38#include "AliESDMuonTrack.h"
39#include "AliAODTrack.h"
9bcac085 40#include "AliCentrality.h"
4292b3b6 41#include "AliMuonsHFHeader.h"
fd1d0cb9 42#include "AliMuonInfoStoreRD.h"
43#include "AliMuonInfoStoreMC.h"
44#include "AliDimuInfoStoreRD.h"
45#include "AliDimuInfoStoreMC.h"
6709e09d 46#include "AliAnalysisManager.h"
9bcac085 47#include "AliInputEventHandler.h"
9bbc42ca 48#include "AliMuonTrackCuts.h"
49#include "AliMuonPairCuts.h"
9bcac085 50#include "AliAnalysisTaskSEMuonsHF.h"
4292b3b6 51
52ClassImp(AliAnalysisTaskSEMuonsHF)
53
54//_____________________________________________________________________________
55AliAnalysisTaskSEMuonsHF::AliAnalysisTaskSEMuonsHF() :
56AliAnalysisTaskSE(),
57fAnaMode(0),
58fIsOutputTree(kFALSE),
1195bb6f 59fIsMC(kFALSE),
9bbc42ca 60fCutsMuon(0x0),
61fCutsDimu(0x0),
4292b3b6 62fHeader(0),
fd1d0cb9 63fMuonClArr(0),
64fDimuClArr(0),
1195bb6f 65fListOutput(0)
4292b3b6 66{
67 //
68 // Default constructor
69 //
4292b3b6 70}
71
72//_____________________________________________________________________________
9bbc42ca 73AliAnalysisTaskSEMuonsHF::AliAnalysisTaskSEMuonsHF(const char *name, const AliMuonTrackCuts& cutsMuon, const AliMuonPairCuts& cutsDimu) :
4292b3b6 74AliAnalysisTaskSE(name),
75fAnaMode(0),
76fIsOutputTree(kFALSE),
1195bb6f 77fIsMC(kFALSE),
9bbc42ca 78fCutsMuon(new AliMuonTrackCuts(cutsMuon)),
79fCutsDimu(new AliMuonPairCuts(cutsDimu)),
4292b3b6 80fHeader(0),
fd1d0cb9 81fMuonClArr(0),
82fDimuClArr(0),
1195bb6f 83fListOutput(0)
4292b3b6 84{
85 //
86 // Constructor
87 //
1195bb6f 88 DefineOutput(1, TList::Class());
4292b3b6 89}
90
91//_____________________________________________________________________________
92AliAnalysisTaskSEMuonsHF::~AliAnalysisTaskSEMuonsHF()
93{
94 //
95 // Default destructor
96 //
9bbc42ca 97 if (fCutsMuon) { delete fCutsMuon; fCutsMuon =NULL; }
98 if (fCutsDimu) { delete fCutsDimu; fCutsDimu =NULL; }
1195bb6f 99 if (fHeader) { delete fHeader; fHeader =NULL; }
100 if (fMuonClArr) { delete fMuonClArr; fMuonClArr =NULL; }
101 if (fDimuClArr) { delete fDimuClArr; fDimuClArr =NULL; }
102 if (fListOutput) { delete fListOutput; fListOutput=NULL; }
4292b3b6 103}
104
105//_____________________________________________________________________________
fd1d0cb9 106void AliAnalysisTaskSEMuonsHF::Init()
4292b3b6 107{
fd1d0cb9 108 // Initialization
109 // Setting and initializing the running mode and status
4292b3b6 110
fd1d0cb9 111 AliMuonsHFHeader::SetAnaMode(fAnaMode);
1195bb6f 112 AliMuonsHFHeader::SetIsMC(fIsMC);
4292b3b6 113 if (!fHeader) {
114 fHeader = new AliMuonsHFHeader();
fd1d0cb9 115 fHeader->SetName(AliMuonsHFHeader::StdBranchName());
4292b3b6 116 }
fd1d0cb9 117
118 if (!fMuonClArr) {
1195bb6f 119 if (fIsMC) {
fd1d0cb9 120 fMuonClArr = new TClonesArray("AliMuonInfoStoreMC", 0);
121 fMuonClArr->SetName(AliMuonInfoStoreMC::StdBranchName());
122 } else {
123 fMuonClArr = new TClonesArray("AliMuonInfoStoreRD", 0);
124 fMuonClArr->SetName(AliMuonInfoStoreRD::StdBranchName());
125 }
4292b3b6 126 }
127
fd1d0cb9 128 if (fAnaMode!=1 && !fDimuClArr) {
1195bb6f 129 if (fIsMC) {
fd1d0cb9 130 fDimuClArr = new TClonesArray("AliDimuInfoStoreMC", 0);
131 fDimuClArr->SetName(AliDimuInfoStoreMC::StdBranchName());
132 } else {
133 fDimuClArr = new TClonesArray("AliDimuInfoStoreRD", 0);
134 fDimuClArr->SetName(AliDimuInfoStoreRD::StdBranchName());
135 }
136 }
137
138 return;
139}
140
141//_____________________________________________________________________________
142void AliAnalysisTaskSEMuonsHF::UserCreateOutputObjects()
143{
144 // Create the output container
145
1195bb6f 146 if (!fListOutput) fListOutput = new TList();
147 fHeader->CreateHistograms(fListOutput);
4292b3b6 148
149 if (fIsOutputTree) {
150 AddAODBranch("AliMuonsHFHeader", &fHeader);
fd1d0cb9 151 AddAODBranch("TClonesArray", &fMuonClArr);
152 if (fAnaMode!=1) AddAODBranch("TClonesArray", &fDimuClArr);
4292b3b6 153 }
154
9bbc42ca 155 fCutsMuon->Print("mask");
156 fCutsDimu->Print("mask");
4292b3b6 157 return;
158}
159
160//_____________________________________________________________________________
161void AliAnalysisTaskSEMuonsHF::UserExec(Option_t *)
162{
fd1d0cb9 163 // Execute analysis for current event:
164 // muon event header & (di)muon info store
165
1195bb6f 166 if (fIsMC) {
167 if (MCEvent()) {
168 if (MCEvent()->GetNumberOfTracks()<=0)
169 { AliError("MC event not found. Nothing done!"); return; }
170 } else { AliError("MC event not found. Nothing done!"); return; }
171 }
172
9bbc42ca 173 if ( !fCutsMuon) { AliError("AliMuonTrackCuts should be loaded!"); return;}
174 if ((!fCutsDimu) && (fAnaMode!=1)) { AliError("AliMuonPairCuts should be loaded!"); return; }
175
4292b3b6 176 Int_t ntrks = 0;
177 AliAODEvent *aod = 0;
178 AliESDEvent *esd = 0;
1195bb6f 179 if (((TString)InputEvent()->IsA()->GetName())=="AliAODEvent") {
4292b3b6 180 aod = dynamic_cast<AliAODEvent*>(InputEvent());
fd1d0cb9 181 if (!aod) { AliError("AOD event not found. Nothing done!"); return; }
9bcac085 182 if (!fIsMC && (aod->GetHeader()->GetEventType()!=7)) return;
4292b3b6 183 ntrks = aod->GetNTracks();
184 } else {
185 esd = dynamic_cast<AliESDEvent*>(InputEvent());
fd1d0cb9 186 if (!esd) { AliError("ESD event not found. Nothing done!"); return; }
9bcac085 187 if (!fIsMC && (esd->GetHeader()->GetEventType()!=7)) return;
4292b3b6 188 ntrks = esd->GetNumberOfMuonTracks();
9bbc42ca 189 } if (fIsOutputTree) AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler()->SetFillAOD(kTRUE);
4292b3b6 190
9bbc42ca 191 fHeader->SetEventInfo(fInputHandler, MCEvent());
9bcac085 192 fHeader->FillHistosEvnH(fListOutput);
193
fd1d0cb9 194 fMuonClArr->Delete();
195 TClonesArray &muonRef = *fMuonClArr;
196 Int_t countN = fMuonClArr->GetEntriesFast();
4292b3b6 197
9bbc42ca 198 Int_t trkID[ntrks];
fd1d0cb9 199 AliAODTrack *trkAOD = 0;
200 AliESDMuonTrack *trkESD = 0;
1195bb6f 201 AliMuonInfoStoreRD *muonRD = 0;
202 AliMuonInfoStoreMC *muonMC = 0;
4292b3b6 203 for (Int_t itrk=0; itrk<ntrks; itrk++) { // loop over all tracks
1195bb6f 204 if (aod) {
4292b3b6 205 trkAOD = (AliAODTrack*)aod->GetTrack(itrk);
1195bb6f 206 if (!trkAOD->IsMuonTrack()) { trkAOD=0; continue; }
9bbc42ca 207 if (fIsMC) muonMC = new AliMuonInfoStoreMC(trkAOD,MCEvent(),fCutsMuon->GetSelectionMask(trkAOD));
208 else muonRD = new AliMuonInfoStoreRD(trkAOD,fCutsMuon->GetSelectionMask(trkAOD));
fd1d0cb9 209 trkAOD = 0;
4292b3b6 210 } else {
211 trkESD = (AliESDMuonTrack*)esd->GetMuonTrack(itrk);
1195bb6f 212 if (!trkESD->ContainTrackerData()) { trkESD=0; continue; }
9bbc42ca 213 if (fIsMC) muonMC = new AliMuonInfoStoreMC(trkESD,MCEvent(),fCutsMuon->GetSelectionMask(trkESD));
214 else muonRD = new AliMuonInfoStoreRD(trkESD,fCutsMuon->GetSelectionMask(trkESD));
fd1d0cb9 215 trkESD = 0;
9bbc42ca 216 } if (muonRD) {
1195bb6f 217 new(muonRef[countN++]) AliMuonInfoStoreRD(*muonRD);
218 if (fAnaMode!=2) fHeader->FillHistosMuon(fListOutput, muonRD);
9bbc42ca 219 } if (muonMC) {
1195bb6f 220 new(muonRef[countN++]) AliMuonInfoStoreMC(*muonMC);
221 if (fAnaMode!=2) fHeader->FillHistosMuon(fListOutput, muonMC, muonMC->Source());
9bbc42ca 222 } trkID[countN-1] = itrk;
4292b3b6 223
1195bb6f 224 if (muonRD) { delete muonRD; muonRD=0; }
225 if (muonMC) { delete muonMC; muonMC=0; }
4292b3b6 226 } // end loop of all tracks
fd1d0cb9 227
9bbc42ca 228 if (fAnaMode==1) { aod=0; esd=0; PostData(1,fListOutput); return; }
1195bb6f 229
fd1d0cb9 230 fDimuClArr->Delete();
231 countN = fDimuClArr->GetEntriesFast();
232 TClonesArray &dimuRef = *fDimuClArr;
4292b3b6 233
fd1d0cb9 234 AliDimuInfoStoreRD *dimuRD = 0;
235 AliDimuInfoStoreMC *dimuMC = 0;
236 ntrks = fMuonClArr->GetEntriesFast();
4292b3b6 237 for (Int_t itrk=0; itrk<ntrks-1; itrk++) { // 1st loop over muon tracks
fd1d0cb9 238 for (Int_t jtrk=itrk+1; jtrk<ntrks; jtrk++) { // 2nd loop ofver muon tracks
9bbc42ca 239 UInt_t selMask = 0;
240 if (aod) selMask = fCutsDimu->GetSelectionMask(aod->GetTrack( trkID[itrk]),aod->GetTrack( trkID[jtrk]));
241 else selMask = fCutsDimu->GetSelectionMask(esd->GetMuonTrack(trkID[itrk]),esd->GetMuonTrack(trkID[jtrk]));
242
243 if (fIsMC) dimuMC = new AliDimuInfoStoreMC((AliMuonInfoStoreMC*)fMuonClArr->At(itrk),(AliMuonInfoStoreMC*)fMuonClArr->At(jtrk),selMask);
244 else dimuRD = new AliDimuInfoStoreRD((AliMuonInfoStoreRD*)fMuonClArr->At(itrk),(AliMuonInfoStoreRD*)fMuonClArr->At(jtrk),selMask);
4292b3b6 245
fd1d0cb9 246 if (dimuRD) {
1195bb6f 247 fHeader->FillHistosDimu(fListOutput, dimuRD);
fd1d0cb9 248 if (fIsOutputTree) new(dimuRef[countN++]) AliDimuInfoStoreRD(*dimuRD);
249 }
250 if (dimuMC) {
1195bb6f 251 fHeader->FillHistosDimu(fListOutput, dimuMC, dimuMC->Source());
fd1d0cb9 252 if (fIsOutputTree) new(dimuRef[countN++]) AliDimuInfoStoreMC(*dimuMC);
4292b3b6 253 }
254
fd1d0cb9 255 if (dimuRD) { delete dimuRD; dimuRD=0; }
256 if (dimuMC) { delete dimuMC; dimuMC=0; }
257 } // end 2nd loop of muon tracks
4292b3b6 258 } // end 1st loop of muon tracks
4292b3b6 259
9bbc42ca 260 aod = 0; esd = 0;
1195bb6f 261 PostData(1, fListOutput);
4292b3b6 262 return;
263}
264
265//_____________________________________________________________________________
266void AliAnalysisTaskSEMuonsHF::Terminate(Option_t *)
267{
fd1d0cb9 268 // Terminate analysis
4292b3b6 269
1195bb6f 270 // add the correction matrix
4292b3b6 271
4292b3b6 272 return;
273}
9bbc42ca 274
275void AliAnalysisTaskSEMuonsHF::NotifyRun()
276{
277 // Notify of the current run number
278
279 if (fCutsMuon) fCutsMuon->SetRun(fCurrentRunNumber);
280 if (fCutsDimu) fCutsDimu->SetRun(fCurrentRunNumber);
281 return;
282}