]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG/muon/AliAnalysisTaskSEMuonsHF.cxx
Updates on single muon HF analysis (Shuang)
[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"
d387f518 36#include "AliMCEvent.h"
9bcac085 37#include "AliESDHeader.h"
38#include "AliAODHeader.h"
4292b3b6 39#include "AliESDMuonTrack.h"
40#include "AliAODTrack.h"
9bcac085 41#include "AliCentrality.h"
4292b3b6 42#include "AliMuonsHFHeader.h"
fd1d0cb9 43#include "AliMuonInfoStoreRD.h"
44#include "AliMuonInfoStoreMC.h"
45#include "AliDimuInfoStoreRD.h"
46#include "AliDimuInfoStoreMC.h"
6709e09d 47#include "AliAnalysisManager.h"
9bcac085 48#include "AliInputEventHandler.h"
9bbc42ca 49#include "AliMuonTrackCuts.h"
50#include "AliMuonPairCuts.h"
9bcac085 51#include "AliAnalysisTaskSEMuonsHF.h"
4292b3b6 52
53ClassImp(AliAnalysisTaskSEMuonsHF)
54
55//_____________________________________________________________________________
56AliAnalysisTaskSEMuonsHF::AliAnalysisTaskSEMuonsHF() :
57AliAnalysisTaskSE(),
58fAnaMode(0),
59fIsOutputTree(kFALSE),
1195bb6f 60fIsMC(kFALSE),
d387f518 61fIsFull(kFALSE),
9bbc42ca 62fCutsMuon(0x0),
63fCutsDimu(0x0),
4292b3b6 64fHeader(0),
fd1d0cb9 65fMuonClArr(0),
66fDimuClArr(0),
1195bb6f 67fListOutput(0)
4292b3b6 68{
69 //
70 // Default constructor
71 //
4292b3b6 72}
73
74//_____________________________________________________________________________
9bbc42ca 75AliAnalysisTaskSEMuonsHF::AliAnalysisTaskSEMuonsHF(const char *name, const AliMuonTrackCuts& cutsMuon, const AliMuonPairCuts& cutsDimu) :
4292b3b6 76AliAnalysisTaskSE(name),
77fAnaMode(0),
78fIsOutputTree(kFALSE),
1195bb6f 79fIsMC(kFALSE),
d387f518 80fIsFull(kFALSE),
9bbc42ca 81fCutsMuon(new AliMuonTrackCuts(cutsMuon)),
82fCutsDimu(new AliMuonPairCuts(cutsDimu)),
4292b3b6 83fHeader(0),
fd1d0cb9 84fMuonClArr(0),
85fDimuClArr(0),
1195bb6f 86fListOutput(0)
4292b3b6 87{
88 //
89 // Constructor
90 //
1195bb6f 91 DefineOutput(1, TList::Class());
4292b3b6 92}
93
94//_____________________________________________________________________________
95AliAnalysisTaskSEMuonsHF::~AliAnalysisTaskSEMuonsHF()
96{
97 //
98 // Default destructor
99 //
9bbc42ca 100 if (fCutsMuon) { delete fCutsMuon; fCutsMuon =NULL; }
101 if (fCutsDimu) { delete fCutsDimu; fCutsDimu =NULL; }
1195bb6f 102 if (fHeader) { delete fHeader; fHeader =NULL; }
103 if (fMuonClArr) { delete fMuonClArr; fMuonClArr =NULL; }
104 if (fDimuClArr) { delete fDimuClArr; fDimuClArr =NULL; }
105 if (fListOutput) { delete fListOutput; fListOutput=NULL; }
4292b3b6 106}
107
108//_____________________________________________________________________________
fd1d0cb9 109void AliAnalysisTaskSEMuonsHF::Init()
4292b3b6 110{
fd1d0cb9 111 // Initialization
112 // Setting and initializing the running mode and status
4292b3b6 113
114 if (!fHeader) {
115 fHeader = new AliMuonsHFHeader();
fd1d0cb9 116 fHeader->SetName(AliMuonsHFHeader::StdBranchName());
d387f518 117 } fHeader->SetAnaMode(fAnaMode);
118 fHeader->SetIsMC(fIsMC);
fd1d0cb9 119
120 if (!fMuonClArr) {
1195bb6f 121 if (fIsMC) {
fd1d0cb9 122 fMuonClArr = new TClonesArray("AliMuonInfoStoreMC", 0);
123 fMuonClArr->SetName(AliMuonInfoStoreMC::StdBranchName());
124 } else {
125 fMuonClArr = new TClonesArray("AliMuonInfoStoreRD", 0);
126 fMuonClArr->SetName(AliMuonInfoStoreRD::StdBranchName());
127 }
4292b3b6 128 }
129
fd1d0cb9 130 if (fAnaMode!=1 && !fDimuClArr) {
1195bb6f 131 if (fIsMC) {
fd1d0cb9 132 fDimuClArr = new TClonesArray("AliDimuInfoStoreMC", 0);
133 fDimuClArr->SetName(AliDimuInfoStoreMC::StdBranchName());
134 } else {
135 fDimuClArr = new TClonesArray("AliDimuInfoStoreRD", 0);
136 fDimuClArr->SetName(AliDimuInfoStoreRD::StdBranchName());
137 }
138 }
139
140 return;
141}
142
143//_____________________________________________________________________________
144void AliAnalysisTaskSEMuonsHF::UserCreateOutputObjects()
145{
146 // Create the output container
147
1195bb6f 148 if (!fListOutput) fListOutput = new TList();
149 fHeader->CreateHistograms(fListOutput);
4292b3b6 150
151 if (fIsOutputTree) {
152 AddAODBranch("AliMuonsHFHeader", &fHeader);
fd1d0cb9 153 AddAODBranch("TClonesArray", &fMuonClArr);
154 if (fAnaMode!=1) AddAODBranch("TClonesArray", &fDimuClArr);
4292b3b6 155 }
156
9bbc42ca 157 fCutsMuon->Print("mask");
158 fCutsDimu->Print("mask");
d387f518 159
4292b3b6 160 return;
161}
162
163//_____________________________________________________________________________
164void AliAnalysisTaskSEMuonsHF::UserExec(Option_t *)
165{
fd1d0cb9 166 // Execute analysis for current event:
167 // muon event header & (di)muon info store
168
1195bb6f 169 if (fIsMC) {
d387f518 170 if (fInputHandler->MCEvent()) {
171 if (fInputHandler->MCEvent()->GetNumberOfTracks()<=0)
1195bb6f 172 { AliError("MC event not found. Nothing done!"); return; }
173 } else { AliError("MC event not found. Nothing done!"); return; }
d387f518 174 }
1195bb6f 175
9bbc42ca 176 if ( !fCutsMuon) { AliError("AliMuonTrackCuts should be loaded!"); return;}
177 if ((!fCutsDimu) && (fAnaMode!=1)) { AliError("AliMuonPairCuts should be loaded!"); return; }
178
4292b3b6 179 Int_t ntrks = 0;
180 AliAODEvent *aod = 0;
181 AliESDEvent *esd = 0;
1195bb6f 182 if (((TString)InputEvent()->IsA()->GetName())=="AliAODEvent") {
4292b3b6 183 aod = dynamic_cast<AliAODEvent*>(InputEvent());
fd1d0cb9 184 if (!aod) { AliError("AOD event not found. Nothing done!"); return; }
9bcac085 185 if (!fIsMC && (aod->GetHeader()->GetEventType()!=7)) return;
4640c275 186 ntrks = aod->GetNumberOfTracks();
4292b3b6 187 } else {
188 esd = dynamic_cast<AliESDEvent*>(InputEvent());
fd1d0cb9 189 if (!esd) { AliError("ESD event not found. Nothing done!"); return; }
9bcac085 190 if (!fIsMC && (esd->GetHeader()->GetEventType()!=7)) return;
4292b3b6 191 ntrks = esd->GetNumberOfMuonTracks();
9bbc42ca 192 } if (fIsOutputTree) AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler()->SetFillAOD(kTRUE);
4292b3b6 193
d387f518 194 fHeader->SetEventInfo(fInputHandler);
9bcac085 195 fHeader->FillHistosEvnH(fListOutput);
196
fd1d0cb9 197 fMuonClArr->Delete();
198 TClonesArray &muonRef = *fMuonClArr;
199 Int_t countN = fMuonClArr->GetEntriesFast();
4292b3b6 200
9bbc42ca 201 Int_t trkID[ntrks];
fd1d0cb9 202 AliAODTrack *trkAOD = 0;
203 AliESDMuonTrack *trkESD = 0;
1195bb6f 204 AliMuonInfoStoreRD *muonRD = 0;
205 AliMuonInfoStoreMC *muonMC = 0;
4292b3b6 206 for (Int_t itrk=0; itrk<ntrks; itrk++) { // loop over all tracks
1195bb6f 207 if (aod) {
4292b3b6 208 trkAOD = (AliAODTrack*)aod->GetTrack(itrk);
1195bb6f 209 if (!trkAOD->IsMuonTrack()) { trkAOD=0; continue; }
d387f518 210 if (fIsMC) muonMC = new AliMuonInfoStoreMC(trkAOD,fInputHandler->MCEvent(),fCutsMuon->GetSelectionMask(trkAOD),fIsFull);
9bbc42ca 211 else muonRD = new AliMuonInfoStoreRD(trkAOD,fCutsMuon->GetSelectionMask(trkAOD));
fd1d0cb9 212 trkAOD = 0;
4292b3b6 213 } else {
214 trkESD = (AliESDMuonTrack*)esd->GetMuonTrack(itrk);
1195bb6f 215 if (!trkESD->ContainTrackerData()) { trkESD=0; continue; }
d387f518 216 if (fIsMC) muonMC = new AliMuonInfoStoreMC(trkESD,fInputHandler->MCEvent(),fCutsMuon->GetSelectionMask(trkESD),fIsFull);
9bbc42ca 217 else muonRD = new AliMuonInfoStoreRD(trkESD,fCutsMuon->GetSelectionMask(trkESD));
fd1d0cb9 218 trkESD = 0;
9bbc42ca 219 } if (muonRD) {
1195bb6f 220 new(muonRef[countN++]) AliMuonInfoStoreRD(*muonRD);
221 if (fAnaMode!=2) fHeader->FillHistosMuon(fListOutput, muonRD);
9bbc42ca 222 } if (muonMC) {
1195bb6f 223 new(muonRef[countN++]) AliMuonInfoStoreMC(*muonMC);
224 if (fAnaMode!=2) fHeader->FillHistosMuon(fListOutput, muonMC, muonMC->Source());
9bbc42ca 225 } trkID[countN-1] = itrk;
4292b3b6 226
1195bb6f 227 if (muonRD) { delete muonRD; muonRD=0; }
228 if (muonMC) { delete muonMC; muonMC=0; }
4292b3b6 229 } // end loop of all tracks
fd1d0cb9 230
9bbc42ca 231 if (fAnaMode==1) { aod=0; esd=0; PostData(1,fListOutput); return; }
1195bb6f 232
fd1d0cb9 233 fDimuClArr->Delete();
234 countN = fDimuClArr->GetEntriesFast();
235 TClonesArray &dimuRef = *fDimuClArr;
4292b3b6 236
fd1d0cb9 237 AliDimuInfoStoreRD *dimuRD = 0;
238 AliDimuInfoStoreMC *dimuMC = 0;
239 ntrks = fMuonClArr->GetEntriesFast();
4292b3b6 240 for (Int_t itrk=0; itrk<ntrks-1; itrk++) { // 1st loop over muon tracks
fd1d0cb9 241 for (Int_t jtrk=itrk+1; jtrk<ntrks; jtrk++) { // 2nd loop ofver muon tracks
9bbc42ca 242 UInt_t selMask = 0;
243 if (aod) selMask = fCutsDimu->GetSelectionMask(aod->GetTrack( trkID[itrk]),aod->GetTrack( trkID[jtrk]));
244 else selMask = fCutsDimu->GetSelectionMask(esd->GetMuonTrack(trkID[itrk]),esd->GetMuonTrack(trkID[jtrk]));
245
246 if (fIsMC) dimuMC = new AliDimuInfoStoreMC((AliMuonInfoStoreMC*)fMuonClArr->At(itrk),(AliMuonInfoStoreMC*)fMuonClArr->At(jtrk),selMask);
247 else dimuRD = new AliDimuInfoStoreRD((AliMuonInfoStoreRD*)fMuonClArr->At(itrk),(AliMuonInfoStoreRD*)fMuonClArr->At(jtrk),selMask);
4292b3b6 248
fd1d0cb9 249 if (dimuRD) {
1195bb6f 250 fHeader->FillHistosDimu(fListOutput, dimuRD);
fd1d0cb9 251 if (fIsOutputTree) new(dimuRef[countN++]) AliDimuInfoStoreRD(*dimuRD);
252 }
253 if (dimuMC) {
1195bb6f 254 fHeader->FillHistosDimu(fListOutput, dimuMC, dimuMC->Source());
fd1d0cb9 255 if (fIsOutputTree) new(dimuRef[countN++]) AliDimuInfoStoreMC(*dimuMC);
4292b3b6 256 }
257
d387f518 258 if (dimuRD) { delete dimuRD; dimuRD = 0; }
259 if (dimuMC) { delete dimuMC; dimuMC = 0; }
fd1d0cb9 260 } // end 2nd loop of muon tracks
4292b3b6 261 } // end 1st loop of muon tracks
4292b3b6 262
9bbc42ca 263 aod = 0; esd = 0;
1195bb6f 264 PostData(1, fListOutput);
d387f518 265
4292b3b6 266 return;
267}
268
269//_____________________________________________________________________________
270void AliAnalysisTaskSEMuonsHF::Terminate(Option_t *)
271{
fd1d0cb9 272 // Terminate analysis
4292b3b6 273
1195bb6f 274 // add the correction matrix
4292b3b6 275
4292b3b6 276 return;
277}
9bbc42ca 278
279void AliAnalysisTaskSEMuonsHF::NotifyRun()
280{
d387f518 281 // Notify of the input handler
9bbc42ca 282
68e9b988 283 if (fCutsMuon) fCutsMuon->SetRun(fInputHandler);
284 if (fCutsDimu) fCutsDimu->SetRun(fInputHandler);
d387f518 285
9bbc42ca 286 return;
287}