]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Adding charge of the muon track in the AOD (Roberta)
authormartinez <martinez@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 19 May 2008 21:25:06 +0000 (21:25 +0000)
committermartinez <martinez@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 19 May 2008 21:25:06 +0000 (21:25 +0000)
PWG3/muon/AliAnalysisTaskESDMuonFilter.cxx

index 1654f3eb7535870190fb3ce6af269f5455d7387c..11823dee7d608fe901fb1c5f4e5a0dc68b5a2064 100644 (file)
-/**************************************************************************\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");
+}