]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Adding AliGenInfoTask (Marian)
authormarian <marian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 10 Mar 2008 15:31:34 +0000 (15:31 +0000)
committermarian <marian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 10 Mar 2008 15:31:34 +0000 (15:31 +0000)
PWG1/AliGenInfoTask.cxx [new file with mode: 0644]
PWG1/AliGenInfoTask.h [new file with mode: 0644]

diff --git a/PWG1/AliGenInfoTask.cxx b/PWG1/AliGenInfoTask.cxx
new file mode 100644 (file)
index 0000000..44aad34
--- /dev/null
@@ -0,0 +1,193 @@
+//\r
+// This class is the task for connecting together \r
+// MC information and the RC information \r
+//\r
+// The task is a wrapper over two components\r
+// AliGenInfoMaker\r
+// AliESDRecInfoMaker.h\r
+\r
+// ROOT includes\r
+#include <TChain.h>\r
+#include <TMath.h>\r
+\r
+// ALIROOT includes\r
+#include <AliAnalysisManager.h>\r
+#include <AliESDInputHandler.h>\r
+#include "AliStack.h"\r
+#include "AliMCEvent.h"\r
+#include "AliMCEventHandler.h"\r
+\r
+#include <AliESD.h>\r
+#include "AliGenInfoTask.h"\r
+#include "AliGenInfoMaker.h"\r
+#include "AliHelix.h"\r
+\r
+// STL includes\r
+#include <iostream>\r
+\r
+using namespace std;\r
+\r
+ClassImp(AliGenInfoTask)\r
+\r
+//________________________________________________________________________\r
+AliGenInfoTask::AliGenInfoTask() : \r
+  AliAnalysisTask(), fGenMaker(0),\r
+  fESD(0), fESDfriend(0), fListOfHists(0)\r
+{\r
+  //\r
+  // Default constructor (should not be used)\r
+  //\r
+  fDebug = 0;\r
+  SetMaxTracks();\r
+}\r
+\r
+//________________________________________________________________________\r
+AliGenInfoTask::AliGenInfoTask(const char *name) : \r
+  AliAnalysisTask(name, "AliGenInfoTask"), \r
+  fGenMaker(0),\r
+  fESD(0), \r
+  fESDfriend(0), \r
+  fListOfHists(0)\r
+{\r
+  //\r
+  // Normal constructor\r
+  //\r
+  fGenMaker = new AliGenInfoMaker;\r
+  fGenMaker->SetIO();\r
+  // Input slot #0 works with a TChain\r
+  DefineInput(0, TChain::Class());\r
+  // Output slot #0 writes into a TList\r
+  DefineOutput(0, TList::Class());\r
+  \r
+  fDebug = 0;\r
+  SetMaxTracks();\r
+}\r
+\r
+//________________________________________________________________________\r
+void AliGenInfoTask::ConnectInputData(Option_t *) \r
+{\r
+  //\r
+  // Connect the input data\r
+  //\r
+  if(fDebug>3)\r
+    cout << "AnalysisTaskTPCCluster::ConnectInputData()" << endl;\r
+\r
+  AliESDInputHandler* esdH = (AliESDInputHandler*) \r
+    ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());\r
+  fESD = esdH->GetEvent();\r
+\r
+  if(fESD==0) {\r
+    \r
+    cout << endl << "WARNING: NO ESD event found" << endl << endl;\r
+  } else {\r
+\r
+    fESDfriend = \r
+      (AliESDfriend*)fESD->FindListObject("AliESDfriend");  \r
+    \r
+    if(fESDfriend==0) {\r
+      \r
+      cout << endl << "WARNING: NO ESD friend found" << endl << endl;\r
+    }\r
+  }\r
+}\r
+\r
+//________________________________________________________________________\r
+void AliGenInfoTask::CreateOutputObjects() \r
+{\r
+  //\r
+  // Connect the output objects\r
+  //\r
+  if(fDebug>3)\r
+    cout << "AnalysisTaskTPCCluster::CreateOutputObjects()" << endl;\r
+  \r
+//    OpenFile(0);\r
+//   fListOfHists = new TList();\r
+  \r
+//   hESDTracks = \r
+//     new TH1F("hESDTracks", \r
+//          "Number of ESD tracks per event; N ESD tracks; Counts", \r
+//          TMath::Min(fMaxTracks, 100), 0, fMaxTracks);\r
+//   fListOfHists->Add(hESDTracks);\r
+\r
+//   hGoodTracks = \r
+//     new TH1F("hGoodTracks", \r
+//          "Number of Good tracks per event; N good tracks; Counts", \r
+//          TMath::Min(fMaxTracks, 100), 0, fMaxTracks);\r
+//   fListOfHists->Add(hGoodTracks);\r
+}\r
+\r
+\r
+//________________________________________________________________________\r
+void AliGenInfoTask::Exec(Option_t *) {\r
+  //\r
+  // Execute analysis for current event \r
+  // For the moment I require that mcTruth is there!  I am afraid to\r
+  // get out of sync if it is missing for some events since I use the\r
+  // number of MC events for normalisation\r
+  //\r
+\r
+  if(fDebug>3)\r
+    cout << "AliGenInfoTask::Exec()" << endl;\r
+\r
+  if (fESD) {\r
+    AliHelix::SetBz(fESD->GetMagneticField());\r
+  }\r
+  \r
+  // Monte carlo info\r
+  AliMCEventHandler* mcinfo = (AliMCEventHandler*) (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());  \r
+  // If MC has been connected   \r
+  \r
+  if (!mcinfo){\r
+    cout << "Not MC info\n" << endl;\r
+  }\r
+  fGenMaker->ProcessEvent(mcinfo);\r
+\r
+\r
+\r
+  if(fESD==0 || fESDfriend==0) {\r
+    \r
+    cout << "AliGenInfoTask::Exec(): WARNING: fESD=" << fESD \r
+        << ", fESDfriend=" << fESDfriend << endl;\r
+    // Post final data. It will be written to a file with option "RECREATE"\r
+    PostData(0, fListOfHists);\r
+    return;\r
+  }\r
\r
+  fESD->SetESDfriend(fESDfriend);\r
+  const Int_t nESDTracks = fESD->GetNumberOfTracks();\r
+  \r
+  if(fDebug>0){\r
+    cout << " AliGenIfoTask::Exec() Number of ESD tracks: " << nESDTracks << endl;\r
+  }\r
+  if ( nESDTracks != fESDfriend->GetNumberOfTracks() ) {\r
+     AliWarning("Number of Tracks differs from Number of Friend-Tracks!");\r
+     printf("Number of tracks: %i, number of friend tracks: %i \n", nESDTracks, fESDfriend->GetNumberOfTracks());\r
+     return;\r
+  }\r
+//   // Post final data. It will be written to a file with option "RECREATE"\r
+  PostData(0, fListOfHists);\r
+}      \r
+\r
+//________________________________________________________________________\r
+Int_t AliGenInfoTask::FillTrackHistograms(Int_t nTracks, AliESDtrack* track, AliESDfriendTrack* friendTrack, AliTPCseed* seed) {\r
+  //\r
+  // This method should be overloaded and used to make cuts on tracks\r
+  // and fill histograms. \r
+  // return 0 if track was rejected, 1 if accepted\r
+  //\r
+\r
+  if(nTracks && track && friendTrack && seed)\r
+    return 1;\r
+  else\r
+    return 0;\r
+}\r
+\r
+//________________________________________________________________________\r
+void AliGenInfoTask::Terminate(Option_t *) {\r
+    //\r
+    // Terminate loop\r
+    //\r
+  if(fDebug>3)\r
+    printf("AliGenInfoTask: Terminate() \n");  \r
+  fGenMaker->CloseOutputFile();\r
+}\r
diff --git a/PWG1/AliGenInfoTask.h b/PWG1/AliGenInfoTask.h
new file mode 100644 (file)
index 0000000..ec50ac1
--- /dev/null
@@ -0,0 +1,48 @@
+#ifndef ALIGENINFOTASK_H\r
+#define ALIGENINFOTASK_H\r
+\r
+// ROOT includes\r
+#include <TList.h>\r
+#include <TH1.h>\r
+#include <TH2.h>\r
+\r
+// AliRoot includes\r
+#include <AliAnalysisTask.h>\r
+#include <AliESDEvent.h>\r
+#include <AliESDfriend.h>\r
+#include <AliESDtrack.h>\r
+#include <AliESDfriendTrack.h>\r
+#include <AliTPCseed.h>\r
+class AliGenInfoMaker;\r
+\r
+class AliGenInfoTask : public AliAnalysisTask {\r
+ public:\r
+ AliGenInfoTask();\r
+ AliGenInfoTask(const char *name);\r
+  virtual ~AliGenInfoTask() {};\r
+  \r
+  virtual void   ConnectInputData(Option_t *);\r
+  virtual void   CreateOutputObjects();\r
+  virtual void   Exec(Option_t *option);\r
+  virtual void   Terminate(Option_t *);\r
+  virtual void   SetDebugLevel(Int_t level) {fDebug = level;}\r
+  virtual void   SetMaxTracks(Int_t max=10) {fMaxTracks = max;}\r
+  \r
+ protected:\r
+  virtual Int_t FillTrackHistograms(Int_t nTracks, AliESDtrack* track, \r
+                                   AliESDfriendTrack* friendTrack, \r
+                                   AliTPCseed* seed);\r
+  AliGenInfoMaker *fGenMaker;    // gen Maker\r
+  Int_t         fDebug;          //  Debug flag\r
+  AliESDEvent*  fESD;            //! ESD\r
+  AliESDfriend* fESDfriend;      //! ESD friend\r
+  TList*        fListOfHists;    //! Output list of histograms\r
+  \r
+  Int_t         fMaxTracks;      // Max tracks in histogram\r
+  TH1F*         hESDTracks;      //! N ESD tracks\r
+  TH1F*         hGoodTracks;     //! GOOD tracks\r
+\r
+  ClassDef(AliGenInfoTask, 1); // Analysis task base class for TPC tracks and clusters\r
+};\r
+\r
+#endif\r