-//\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),
+ fDebug(0),
+ fESD(0),
+ fESDfriend(0),
+ fListOfHists(0),
+ fMaxTracks(0), // Max tracks in histogram
+ hESDTracks(0) , //! N ESD tracks
+ hGoodTracks(0) //! GOOD tracks
+{
+ //
+ // Default constructor (should not be used)
+ //
+ fDebug = 0;
+ SetMaxTracks();
+}
+
+AliGenInfoTask::AliGenInfoTask(const AliGenInfoTask& /*info*/) :
+ AliAnalysisTask(),
+ fGenMaker(0),
+ fDebug(0),
+ fESD(0),
+ fESDfriend(0),
+ fListOfHists(0),
+ fMaxTracks(0), // Max tracks in histogram
+ hESDTracks(0) , //! N ESD tracks
+ hGoodTracks(0) //! GOOD tracks
+{
+ //
+ // Default constructor
+ //
+ fDebug = 0;
+ SetMaxTracks();
+}
+
+
+
+//________________________________________________________________________
+AliGenInfoTask::AliGenInfoTask(const char *name) :
+ AliAnalysisTask(name, "AliGenInfoTask"),
+ fGenMaker(0),
+ fDebug(0),
+ fESD(0),
+ fESDfriend(0),
+ fListOfHists(0),
+ fMaxTracks(0), // Max tracks in histogram
+ hESDTracks(0) , //! N ESD tracks
+ hGoodTracks(0) //! GOOD tracks
+{
+ //
+ // 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();
+}