Depndence on not committed code (AliHelix) removed (Marian)
[u/mrichter/AliRoot.git] / PWG1 / AliGenInfoTask.cxx
index 44aad34..9a89b86 100644 (file)
-//\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
+//
+// This class is the task for connecting together 
+// MC information and the RC information 
+//
+// The task is a wrapper over two components
+// AliGenInfoMaker
+// AliESDRecInfoMaker.h
+
+// ROOT includes
+#include <TChain.h>
+#include <TMath.h>
+
+// ALIROOT includes
+#include <AliAnalysisManager.h>
+#include <AliESDInputHandler.h>
+#include "AliStack.h"
+#include "AliMCEvent.h"
+#include "AliMCEventHandler.h"
+
+#include <AliESD.h>
+#include "AliGenInfoTask.h"
+#include "AliGenInfoMaker.h"
+#include "AliHelix.h"
+
+// STL includes
+#include <iostream>
+
+using namespace std;
+
+ClassImp(AliGenInfoTask)
+
+//________________________________________________________________________
+AliGenInfoTask::AliGenInfoTask() : 
+  AliAnalysisTask(), fGenMaker(0),
+  fESD(0), fESDfriend(0), fListOfHists(0)
+{
+  //
+  // Default constructor (should not be used)
+  //
+  fDebug = 0;
+  SetMaxTracks();
+}
+
+//________________________________________________________________________
+AliGenInfoTask::AliGenInfoTask(const char *name) : 
+  AliAnalysisTask(name, "AliGenInfoTask"), 
+  fGenMaker(0),
+  fESD(0), 
+  fESDfriend(0), 
+  fListOfHists(0)
+{
+  //
+  // Normal constructor
+  //
+  fGenMaker = new AliGenInfoMaker;
+  fGenMaker->SetIO();
+  // Input slot #0 works with a TChain
+  DefineInput(0, TChain::Class());
+  // Output slot #0 writes into a TList
+  DefineOutput(0, TList::Class());
+  
+  fDebug = 0;
+  SetMaxTracks();
+}
+
+//________________________________________________________________________
+void AliGenInfoTask::ConnectInputData(Option_t *) 
+{
+  //
+  // Connect the input data
+  //
+  if(fDebug>3)
+    cout << "AnalysisTaskTPCCluster::ConnectInputData()" << endl;
+
+  AliESDInputHandler* esdH = (AliESDInputHandler*) 
+    ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
+  fESD = esdH->GetEvent();
+
+  if(fESD==0) {
+    
+    cout << endl << "WARNING: NO ESD event found" << endl << endl;
+  } else {
+
+    fESDfriend = 
+      (AliESDfriend*)fESD->FindListObject("AliESDfriend");  
+    
+    if(fESDfriend==0) {
+      
+      cout << endl << "WARNING: NO ESD friend found" << endl << endl;
+    }
+  }
+}
+
+//________________________________________________________________________
+void AliGenInfoTask::CreateOutputObjects() 
+{
+  //
+  // Connect the output objects
+  //
+  if(fDebug>3)
+    cout << "AnalysisTaskTPCCluster::CreateOutputObjects()" << endl;
+  
+//    OpenFile(0);
+//   fListOfHists = new TList();
+  
+//   hESDTracks = 
+//     new TH1F("hESDTracks", 
+//          "Number of ESD tracks per event; N ESD tracks; Counts", 
+//          TMath::Min(fMaxTracks, 100), 0, fMaxTracks);
+//   fListOfHists->Add(hESDTracks);
+
+//   hGoodTracks = 
+//     new TH1F("hGoodTracks", 
+//          "Number of Good tracks per event; N good tracks; Counts", 
+//          TMath::Min(fMaxTracks, 100), 0, fMaxTracks);
+//   fListOfHists->Add(hGoodTracks);
+}
+
+
+//________________________________________________________________________
+void AliGenInfoTask::Exec(Option_t *) {
+  //
+  // Execute analysis for current event 
+  // For the moment I require that mcTruth is there!  I am afraid to
+  // get out of sync if it is missing for some events since I use the
+  // number of MC events for normalisation
+  //
+
+  if(fDebug>3)
+    cout << "AliGenInfoTask::Exec()" << endl;
+
+  if (fESD) {
+    //    AliHelix::SetBz(fESD->GetMagneticField());   // Enable after commit of AliHelix
+  }
+  
+  // Monte carlo info
+  AliMCEventHandler* mcinfo = (AliMCEventHandler*) (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());  
+  // If MC has been connected   
+  
+  if (!mcinfo){
+    cout << "Not MC info\n" << endl;
+  }
+  fGenMaker->ProcessEvent(mcinfo);
+
+
+
+  if(fESD==0 || fESDfriend==0) {
+    
+    cout << "AliGenInfoTask::Exec(): WARNING: fESD=" << fESD 
+        << ", fESDfriend=" << fESDfriend << endl;
+    // Post final data. It will be written to a file with option "RECREATE"
+    PostData(0, fListOfHists);
+    return;
+  }
+  fESD->SetESDfriend(fESDfriend);
+  const Int_t nESDTracks = fESD->GetNumberOfTracks();
+  
+  if(fDebug>0){
+    cout << " AliGenIfoTask::Exec() Number of ESD tracks: " << nESDTracks << endl;
+  }
+  if ( nESDTracks != fESDfriend->GetNumberOfTracks() ) {
+     AliWarning("Number of Tracks differs from Number of Friend-Tracks!");
+     printf("Number of tracks: %i, number of friend tracks: %i \n", nESDTracks, fESDfriend->GetNumberOfTracks());
+     return;
+  }
+//   // Post final data. It will be written to a file with option "RECREATE"
+  PostData(0, fListOfHists);
+}      
+
+//________________________________________________________________________
+Int_t AliGenInfoTask::FillTrackHistograms(Int_t nTracks, AliESDtrack* track, AliESDfriendTrack* friendTrack, AliTPCseed* seed) {
+  //
+  // This method should be overloaded and used to make cuts on tracks
+  // and fill histograms. 
+  // return 0 if track was rejected, 1 if accepted
+  //
+
+  if(nTracks && track && friendTrack && seed)
+    return 1;
+  else
+    return 0;
+}
+
+//________________________________________________________________________
+void AliGenInfoTask::Terminate(Option_t *) {
+    //
+    // Terminate loop
+    //
+  if(fDebug>3)
+    printf("AliGenInfoTask: Terminate() \n");  
+  fGenMaker->CloseOutputFile();
+}