-/**************************************************************************\r
- * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *\r
- * *\r
- * Author: The ALICE Off-line Project. *\r
- * Contributors are mentioned in the code where appropriate. *\r
- * *\r
- * Permission to use, copy, modify and distribute this software and its *\r
- * documentation strictly for non-commercial purposes is hereby granted *\r
- * without fee, provided that the above copyright notice appears in all *\r
- * copies and that both the copyright notice and this permission notice *\r
- * appear in the supporting documentation. The authors make no claims *\r
- * about the suitability of this software for any purpose. It is *\r
- * provided "as is" without express or implied warranty. *\r
- **************************************************************************/\r
-\r
-// Add the muon tracks to the generic AOD track branch during the \r
-// filtering of the ESD - R. Arnaldi 5/5/08\r
- \r
-#include <TChain.h>\r
-#include <TFile.h>\r
-\r
-#include "AliAnalysisTaskESDMuonFilter.h"\r
-#include "AliAnalysisManager.h"\r
-#include "AliESDEvent.h"\r
-#include "AliAODEvent.h"\r
-#include "AliESDInputHandler.h"\r
-#include "AliAODHandler.h"\r
-#include "AliAnalysisFilter.h"\r
-#include "AliESDtrack.h"\r
-#include "AliESDMuonTrack.h"\r
-#include "AliESDVertex.h"\r
-#include "AliMultiplicity.h"\r
-#include "AliLog.h"\r
-\r
-ClassImp(AliAnalysisTaskESDMuonFilter)\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-AliAnalysisTaskESDMuonFilter::AliAnalysisTaskESDMuonFilter():\r
- AliAnalysisTaskSE(),\r
- fTrackFilter(0x0)\r
-{\r
- // Default constructor\r
-}\r
-\r
-AliAnalysisTaskESDMuonFilter::AliAnalysisTaskESDMuonFilter(const char* name):\r
- AliAnalysisTaskSE(name),\r
- fTrackFilter(0x0)\r
-{\r
- // Constructor\r
-}\r
-\r
-void AliAnalysisTaskESDMuonFilter::UserCreateOutputObjects()\r
-{\r
- // Create the output container\r
- OutputTree()->GetUserInfo()->Add(fTrackFilter);\r
-}\r
-\r
-void AliAnalysisTaskESDMuonFilter::Init()\r
-{\r
- // Initialization\r
- if (fDebug > 1) AliInfo("Init() \n");\r
-}\r
-\r
-\r
-void AliAnalysisTaskESDMuonFilter::UserExec(Option_t */*option*/)\r
-{\r
- // Execute analysis for current event \r
- Long64_t ientry = Entry();\r
- printf("Muon Filter: Analysing event # %5d\n", (Int_t) ientry);\r
-\r
- ConvertESDtoAOD();\r
-}\r
-\r
-void AliAnalysisTaskESDMuonFilter::ConvertESDtoAOD() \r
-{\r
- // ESD Muon Filter analysis task executed for each event\r
- AliESDEvent* esd = dynamic_cast<AliESDEvent*>(InputEvent());\r
- \r
- // Define arrays for muons\r
- Double_t pos[3];\r
- Double_t p[3];\r
- Double_t pid[10];\r
- \r
- AliAODHeader* header = AODEvent()->GetHeader();\r
- AliAODTrack *aodTrack = 0x0;\r
- \r
- // Access to the AOD container of tracks\r
- TClonesArray &tracks = *(AODEvent()->GetTracks());\r
- Int_t jTracks = header->GetRefMultiplicity();\r
- \r
- // Read primary vertex from AOD event \r
- AliAODVertex * primary = AODEvent()->GetPrimaryVertex();\r
- primary->Print();\r
- \r
- // Loop on muon tracks to fill the AOD track branch\r
- Int_t nMuTracks = esd->GetNumberOfMuonTracks();\r
- printf("Number of Muon Tracks=%d\n",nMuTracks);\r
- \r
- // Update number of positive and negative tracks from AOD event (M.G.)\r
- Int_t nPosTracks = header->GetRefMultiplicityPos();\r
- Int_t nNegTracks = header->GetRefMultiplicityNeg();\r
- \r
- for (Int_t nMuTrack = 0; nMuTrack < nMuTracks; ++nMuTrack) {\r
-\r
- AliESDMuonTrack *esdMuTrack = esd->GetMuonTrack(nMuTrack); \r
- \r
- p[0] = esdMuTrack->Px(); \r
- p[1] = esdMuTrack->Py(); \r
- p[2] = esdMuTrack->Pz();\r
- pos[0] = primary->GetX(); \r
- pos[1] = primary->GetY(); \r
- pos[2] = primary->GetZ();\r
-\r
- // has to be changed once the muon pid is provided by the ESD\r
- for (Int_t i = 0; i < 10; pid[i++] = 0.); pid[AliAODTrack::kMuon]=1.;\r
- primary->AddDaughter(aodTrack =\r
- new(tracks[jTracks++]) AliAODTrack(0, // no ID provided\r
- 0, // no label provided\r
- p,\r
- kTRUE,\r
- pos,\r
- kFALSE,\r
- NULL, // no covariance matrix provided\r
- (Short_t)-99, // no charge provided\r
- 0, // no ITSClusterMap\r
- pid,\r
- primary,\r
- kTRUE, // check if this is right\r
- kTRUE, // not used for vertex fit\r
- AliAODTrack::kPrimary)\r
- );\r
- if (esdMuTrack->Charge() > 0) nPosTracks++;\r
- else nNegTracks++;\r
-\r
- aodTrack->ConvertAliPIDtoAODPID(); \r
- aodTrack->SetHitsPatternInTrigCh(esdMuTrack->GetHitsPatternInTrigCh());\r
- Int_t track2Trigger = esdMuTrack->GetMatchTrigger();\r
- aodTrack->SetMatchTrigger(track2Trigger);\r
- if (track2Trigger) \r
- aodTrack->SetChi2MatchTrigger(esdMuTrack->GetChi2MatchTrigger());\r
- else \r
- aodTrack->SetChi2MatchTrigger(0.);\r
- }\r
-\r
- header->SetRefMultiplicity(jTracks); \r
- header->SetRefMultiplicityPos(nPosTracks);\r
- header->SetRefMultiplicityNeg(nNegTracks);\r
- \r
- return;\r
-}\r
-\r
-void AliAnalysisTaskESDMuonFilter::Terminate(Option_t */*option*/)\r
-{\r
-// Terminate analysis\r
-//\r
- if (fDebug > 1) printf("AnalysisESDfilter: Terminate() \n");\r
-}\r
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * *
+ * Author: The ALICE Off-line Project. *
+ * Contributors are mentioned in the code where appropriate. *
+ * *
+ * Permission to use, copy, modify and distribute this software and its *
+ * documentation strictly for non-commercial purposes is hereby granted *
+ * without fee, provided that the above copyright notice appears in all *
+ * copies and that both the copyright notice and this permission notice *
+ * appear in the supporting documentation. The authors make no claims *
+ * about the suitability of this software for any purpose. It is *
+ * provided "as is" without express or implied warranty. *
+ **************************************************************************/
+
+// Add the muon tracks to the generic AOD track branch during the
+// filtering of the ESD - R. Arnaldi 5/5/08
+
+#include <TChain.h>
+#include <TFile.h>
+
+#include "AliAnalysisTaskESDMuonFilter.h"
+#include "AliAnalysisManager.h"
+#include "AliESDEvent.h"
+#include "AliAODEvent.h"
+#include "AliESDInputHandler.h"
+#include "AliAODHandler.h"
+#include "AliAnalysisFilter.h"
+#include "AliESDtrack.h"
+#include "AliESDMuonTrack.h"
+#include "AliESDVertex.h"
+#include "AliMultiplicity.h"
+#include "AliLog.h"
+
+ClassImp(AliAnalysisTaskESDMuonFilter)
+
+////////////////////////////////////////////////////////////////////////
+
+AliAnalysisTaskESDMuonFilter::AliAnalysisTaskESDMuonFilter():
+ AliAnalysisTaskSE(),
+ fTrackFilter(0x0)
+{
+ // Default constructor
+}
+
+AliAnalysisTaskESDMuonFilter::AliAnalysisTaskESDMuonFilter(const char* name):
+ AliAnalysisTaskSE(name),
+ fTrackFilter(0x0)
+{
+ // Constructor
+}
+
+void AliAnalysisTaskESDMuonFilter::UserCreateOutputObjects()
+{
+ // Create the output container
+ OutputTree()->GetUserInfo()->Add(fTrackFilter);
+}
+
+void AliAnalysisTaskESDMuonFilter::Init()
+{
+ // Initialization
+ if (fDebug > 1) AliInfo("Init() \n");
+}
+
+
+void AliAnalysisTaskESDMuonFilter::UserExec(Option_t */*option*/)
+{
+ // Execute analysis for current event
+ Long64_t ientry = Entry();
+ printf("Muon Filter: Analysing event # %5d\n", (Int_t) ientry);
+
+ ConvertESDtoAOD();
+}
+
+void AliAnalysisTaskESDMuonFilter::ConvertESDtoAOD()
+{
+ // ESD Muon Filter analysis task executed for each event
+ AliESDEvent* esd = dynamic_cast<AliESDEvent*>(InputEvent());
+
+ // Define arrays for muons
+ Double_t pos[3];
+ Double_t p[3];
+ Double_t pid[10];
+
+ AliAODHeader* header = AODEvent()->GetHeader();
+ AliAODTrack *aodTrack = 0x0;
+
+ // Access to the AOD container of tracks
+ TClonesArray &tracks = *(AODEvent()->GetTracks());
+ Int_t jTracks = header->GetRefMultiplicity();
+
+ // Read primary vertex from AOD event
+ AliAODVertex * primary = AODEvent()->GetPrimaryVertex();
+ primary->Print();
+
+ // Loop on muon tracks to fill the AOD track branch
+ Int_t nMuTracks = esd->GetNumberOfMuonTracks();
+ printf("Number of Muon Tracks=%d\n",nMuTracks);
+
+ // Update number of positive and negative tracks from AOD event (M.G.)
+ Int_t nPosTracks = header->GetRefMultiplicityPos();
+ Int_t nNegTracks = header->GetRefMultiplicityNeg();
+
+ for (Int_t nMuTrack = 0; nMuTrack < nMuTracks; ++nMuTrack) {
+
+ AliESDMuonTrack *esdMuTrack = esd->GetMuonTrack(nMuTrack);
+
+ p[0] = esdMuTrack->Px();
+ p[1] = esdMuTrack->Py();
+ p[2] = esdMuTrack->Pz();
+ pos[0] = primary->GetX();
+ pos[1] = primary->GetY();
+ pos[2] = primary->GetZ();
+
+
+ // has to be changed once the muon pid is provided by the ESD
+ for (Int_t i = 0; i < 10; pid[i++] = 0.); pid[AliAODTrack::kMuon]=1.;
+ primary->AddDaughter(aodTrack =
+ new(tracks[jTracks++]) AliAODTrack(0 , // no ID provided
+ 0, // no label provided
+ p,
+ kTRUE,
+ pos,
+ kFALSE,
+ NULL, // no covariance matrix provided
+ esdMuTrack->Charge(),
+ 0, // no ITSClusterMap
+ pid,
+ primary,
+ kTRUE, // check if this is right
+ kTRUE, // not used for vertex fit
+ AliAODTrack::kPrimary)
+ );
+ if (esdMuTrack->Charge() > 0) nPosTracks++;
+ else nNegTracks++;
+
+ aodTrack->ConvertAliPIDtoAODPID();
+ aodTrack->SetHitsPatternInTrigCh(esdMuTrack->GetHitsPatternInTrigCh());
+ Int_t track2Trigger = esdMuTrack->GetMatchTrigger();
+ aodTrack->SetMatchTrigger(track2Trigger);
+ if (track2Trigger)
+ aodTrack->SetChi2MatchTrigger(esdMuTrack->GetChi2MatchTrigger());
+ else
+ aodTrack->SetChi2MatchTrigger(0.);
+ }
+
+ header->SetRefMultiplicity(jTracks);
+ header->SetRefMultiplicityPos(nPosTracks);
+ header->SetRefMultiplicityNeg(nNegTracks);
+
+ return;
+}
+
+void AliAnalysisTaskESDMuonFilter::Terminate(Option_t */*option*/)
+{
+// Terminate analysis
+//
+ if (fDebug > 1) printf("AnalysisESDfilter: Terminate() \n");
+}