AliPhysics  31210d0 (31210d0)
AliEmcalCorrectionTask.h
Go to the documentation of this file.
1 #ifndef ALIEMCALCORRECTIONTASK_H
2 #define ALIEMCALCORRECTIONTASK_H
3 
6 class AliEMCALGeometry;
7 class AliVEvent;
8 
9 #include <AliAnalysisTaskSE.h>
10 #include <AliVCluster.h>
11 
12 #include "AliYAMLConfiguration.h"
13 #include "AliEmcalContainerUtils.h"
14 #include "AliParticleContainer.h"
15 #include "AliMCParticleContainer.h"
16 #include "AliTrackContainer.h"
17 #include "AliClusterContainer.h"
18 #include "AliEmcalTrackSelection.h"
19 
44  public:
49  enum BeamType {
50  kNA = -1,
51  kpp = 0,
52  kAA = 1,
53  kpA = 2
54  };
55 
57  AliEmcalCorrectionTask(const char * name);
58  // Implemented using copy-and-swap mechanism
61  friend void swap(AliEmcalCorrectionTask & first, AliEmcalCorrectionTask & second);
63  virtual ~AliEmcalCorrectionTask();
64 
75  void Initialize(bool removeDummyTask = false);
76 
80  void SetUserConfigurationFilename(std::string name) { fUserConfigurationFilename = name; }
84  // Print the actual configuration string
85  std::ostream & PrintConfiguration(std::ostream & in, bool userConfig = false) const;
86  // Write configuration to file
87  bool WriteConfigurationFile(std::string filename, bool userConfig = false) const;
88  // Compare configurations
89  bool CompareToStoredConfiguration(std::string filename, bool userConfig = false);
94  // Options
95  // Printing
96  friend std::ostream & operator<<(std::ostream &in, const AliEmcalCorrectionTask &myTask);
97  void Print(Option_t* opt = "") const;
98  std::ostream & Print(std::ostream &in) const;
99  std::string toString(bool includeYAMLConfigurationInfo = false) const;
100  // Set
103  // Centrality options
105  void SetCentralityEstimator(const char * c) { fCentEst = c ; }
106  virtual void SetNCentBins(Int_t n) { fNcentBins = n ; }
107  void SetCentRange(Double_t min, Double_t max) { fMinCent = min ; fMaxCent = max ; }
108 
116  const std::vector<AliEmcalCorrectionComponent *> & CorrectionComponents() { return fCorrectionComponents; }
117  AliEmcalCorrectionComponent * GetCorrectionComponent(const std::string & name) const;
118 
119  // Containers and cells
120  AliParticleContainer *AddParticleContainer(const char *n) { return AliEmcalContainerUtils::AddContainer<AliParticleContainer>(n, fParticleCollArray); }
121  AliTrackContainer *AddTrackContainer(const char *n) { return AliEmcalContainerUtils::AddContainer<AliTrackContainer>(n, fParticleCollArray); }
122  AliMCParticleContainer *AddMCParticleContainer(const char *n) { return AliEmcalContainerUtils::AddContainer<AliMCParticleContainer>(n, fParticleCollArray); }
123  AliClusterContainer *AddClusterContainer(const char *n) { return AliEmcalContainerUtils::AddContainer<AliClusterContainer>(n, fClusterCollArray); }
128  AliParticleContainer *GetParticleContainer(Int_t i=0) const { return AliEmcalContainerUtils::GetContainer<AliParticleContainer>(i, fParticleCollArray); }
129  AliParticleContainer *GetParticleContainer(const char* name) const { return AliEmcalContainerUtils::GetContainer<AliParticleContainer>(name, fParticleCollArray); }
130  AliClusterContainer *GetClusterContainer(Int_t i=0) const { return AliEmcalContainerUtils::GetContainer<AliClusterContainer>(i, fClusterCollArray); }
131  AliClusterContainer *GetClusterContainer(const char* name) const { return AliEmcalContainerUtils::GetContainer<AliClusterContainer>(name, fClusterCollArray); }
133  AliMCParticleContainer *GetMCParticleContainer(const char* name) const { return dynamic_cast<AliMCParticleContainer*>(GetParticleContainer(name)); }
135  AliTrackContainer *GetTrackContainer(const char* name) const { return dynamic_cast<AliTrackContainer*>(GetParticleContainer(name)) ; }
137  void RemoveClusterContainer(Int_t i=0) { fClusterCollArray.RemoveAt(i) ; }
138  // Cells
139  AliEmcalCorrectionCellContainer *GetCellContainer(const std::string & cellsContainerName) const;
140 
141  // Methods from AliAnalysisTaskSE
143  void UserExec(Option_t * option);
144  Bool_t UserNotify();
145 
146  // Aditional steering functions
147  virtual void ExecOnce();
148  virtual Bool_t Run();
149 
172 
173  private:
174  // Utility functions
175  // Cell utilities
177  // Container utilities
178  void CheckForContainerArray(AliEmcalContainer * cont, AliEmcalContainerUtils::InputObject_t objectType);
179  // %YAML configuration utilities
181  bool CheckPossibleNamesForComponentName(std::string & name, std::set <std::string> & possibleComponents);
182  // General utilities
183  BeamType GetBeamType() const;
184  void PrintRequestedContainersInformation(AliEmcalContainerUtils::InputObject_t inputObjectType, std::ostream & stream) const;
185  // LEGO Train utilities
186  void RemoveDummyTask() const;
187 
188  // Retrieve objects in event
190 
191  // Execute component functions
193  void ExecOnceComponents();
194 
195  // Initialization functions
197  void DetermineComponentsToExecute(std::vector <std::string> & componentsToExecute);
199  void InitializeComponents();
200 
201  // Input objects (Cells, Clusters, Tracks) functions
203  void AddContainersToComponent(AliEmcalCorrectionComponent * component, AliEmcalContainerUtils::InputObject_t inputObjectType, bool checkObjectExists = false);
204 
205  // Hidden from CINT since it cannot handle %YAML objects well
206  // Input objects
207  void SetupContainersFromInputNodes(AliEmcalContainerUtils::InputObject_t inputObjectType, std::set <std::string> & requestedContainers);
208  // Cells
209  void SetupCellsInfo(std::string containerName);
210  // Containers
211  void SetupContainer(const AliEmcalContainerUtils::InputObject_t inputObjectType, const std::string containerName);
212  AliEmcalContainer * AddContainer(const AliEmcalContainerUtils::InputObject_t contType, const std::string containerName);
213 
214  // Utilities
215  // %YAML node dependent initialization utlitiles
216  void GetPropertyNamesFromNode(const std::string configurationName, const std::string componentName, std::set <std::string> & propertyNames, const bool nodeRequired);
217 
219 
220  std::string fSuffix;
221 
224 
225  std::vector <std::string> fOrderedComponentsToExecute;
226  std::vector <AliEmcalCorrectionComponent *> fCorrectionComponents;
228 
229  bool fIsEsd;
244  AliEMCALGeometry *fGeom;
245 
248  std::vector <AliEmcalCorrectionCellContainer *> fCellCollArray;
249 
251 
253  ClassDef(AliEmcalCorrectionTask, 6); // EMCal correction task
255 };
256 
276  public:
278  fBranchName(""),
279  fName(""),
280  fIsEmbedding(""),
281  fCells(0)
282  {}
283  AliEmcalCorrectionCellContainer(std::string branchName, std::string name, std::string branchToCopyName, bool isEmbedded):
284  fBranchName(branchName),
285  fName(name),
286  fIsEmbedding(isEmbedded),
287  fCells(0)
288  {}
290 
292  std::string GetBranchName() const { return fBranchName; }
294  std::string GetName() const { return fName; }
296  bool GetIsEmbedding() const { return fIsEmbedding; }
298  AliVCaloCells * GetCells() const { return fCells; }
299 
301  void SetBranchName(std::string branchName) { fBranchName = branchName; }
303  void SetName(std::string name ) { fName = name; }
305  void SetIsEmbedding(bool isEmbedded) { fIsEmbedding = isEmbedded; }
307  void SetCells(AliVCaloCells * cells) { fCells = cells; }
308 
309  protected:
310  std::string fBranchName;
311  std::string fName;
313  AliVCaloCells *fCells;
314 
316  ClassDef(AliEmcalCorrectionCellContainer, 1); // EMCal correction cell container
318 };
319 
320 #endif /* ALIEMCALCORRECTIONTASK_H */
Int_t fNcentBins
how many centrality bins
void SetBranchName(std::string branchName)
Set the name of the cells branch (NOT the same as the name!)
std::string fSuffix
Suffix of the Correction Task (used to select specialized components)
void PrintRequestedContainersInformation(AliEmcalContainerUtils::InputObject_t inputObjectType, std::ostream &stream) const
Steering task for the EMCal correction framework.
bool fIsEmbedding
Whether the cells should be taken from an external file (embedded)
AliEMCALGeometry * fGeom
! Emcal geometry
const char * filename
Definition: TestFCM.C:1
static AliEmcalCorrectionTask * ConfigureEmcalCorrectionTaskOnLEGOTrain(TString suffix)
std::string GetName() const
Get the name of the cells object (NOT the same as the branch!)
double Double_t
Definition: External.C:58
virtual void SetNCentBins(Int_t n)
AliTrackContainer * GetTrackContainer(const char *name) const
void SetCentralityEstimator(const char *c)
void SetupContainer(const AliEmcalContainerUtils::InputObject_t inputObjectType, const std::string containerName)
AliVCaloCells * fCells
! The actual cells object associated with this infomration
std::vector< std::string > fOrderedComponentsToExecute
Ordered set of components to execute.
bool WriteConfigurationFile(std::string filename, bool userConfig=false) const
bool CheckPossibleNamesForComponentName(std::string &name, std::set< std::string > &possibleComponents)
std::vector< AliEmcalCorrectionComponent * > fCorrectionComponents
Contains the correction components.
Container with name, TClonesArray and cuts for particles.
std::string GetInputFieldNameFromInputObjectType(AliEmcalContainerUtils::InputObject_t inputObjectType)
void AdoptClusterContainer(AliClusterContainer *cont)
void UserExec(Option_t *option)
AliEmcalCorrectionTask & operator=(AliEmcalCorrectionTask other)
void SetDefaultConfigurationFilename(std::string name)
Set the path to the default configuration filename (Expert use only! The user should set the user con...
Double_t fMaxCent
max centrality for event selection
Double_t fVertex[3]
! Event vertex
AliEmcalContainer * AddContainer(const AliEmcalContainerUtils::InputObject_t contType, const std::string containerName)
TCanvas * c
Definition: TestFitELoss.C:172
void DetermineComponentsToExecute(std::vector< std::string > &componentsToExecute)
TList * fOutput
! Output for histograms
bool CompareToStoredConfiguration(std::string filename, bool userConfig=false)
Wrapper around cells objects for the EMCal Correction Task.
bool fConfigurationInitialized
True if the YAML configuration files are initialized.
void RemoveClusterContainer(Int_t i=0)
void CheckForContainerArray(AliEmcalContainer *cont, AliEmcalContainerUtils::InputObject_t objectType)
AliParticleContainer * GetParticleContainer(Int_t i=0) const
friend void swap(AliEmcalCorrectionTask &first, AliEmcalCorrectionTask &second)
Container for particles within the EMCAL framework.
void SetUserConfigurationFilename(std::string name)
Set the path to the user configuration filename.
AliTrackContainer * GetTrackContainer(Int_t i=0) const
void SetupCellsInfo(std::string containerName)
PWG::Tools::AliYAMLConfiguration fYAMLConfig
Handles configuration from YAML.
AliMCParticleContainer * GetMCParticleContainer(const char *name) const
AliVCaloCells * GetCells() const
Pointer to the actual CaloCells object.
bool fEventInitialized
If the event is initialized properly.
TString fCentEst
name of V0 centrality estimator
AliTrackContainer * AddTrackContainer(const char *n)
int Int_t
Definition: External.C:63
std::string fUserConfigurationFilename
! User YAML configruation filename
void GetPropertyNamesFromNode(const std::string configurationName, const std::string componentName, std::set< std::string > &propertyNames, const bool nodeRequired)
InputObject_t
Type of input object to be created
std::string fBranchName
Name of the cells branch.
AliClusterContainer * GetClusterContainer(Int_t i=0) const
const std::vector< AliEmcalCorrectionComponent * > & CorrectionComponents()
AliClusterContainer * GetClusterContainer(const char *name) const
static AliEmcalCorrectionTask * AddTaskEmcalCorrectionTask(TString suffix="")
void SetCells(AliVCaloCells *cells)
Sets the Pointer to the actual CaloCells object.
Double_t fCent
! Event centrality
void CreateInputObjects(AliEmcalContainerUtils::InputObject_t inputObjectType)
Base class for correction components in the EMCal correction framework.
void SetUseNewCentralityEstimation(Bool_t b)
BeamType
Switch for the beam type.
AliEmcalCorrectionCellContainer(std::string branchName, std::string name, std::string branchToCopyName, bool isEmbedded)
friend std::ostream & operator<<(std::ostream &in, const AliEmcalCorrectionTask &myTask)
Bool_t fNeedEmcalGeom
whether or not the task needs the emcal geometry
std::string GetBranchName() const
Get the name of the cells branch (NOT the same as the name!)
PWG::Tools::AliYAMLConfiguration & GetYAMLConfiguration()
Retrieve the YAML configurations for direct access.
void SetCellsObjectInCellContainerBasedOnProperties(AliEmcalCorrectionCellContainer *cellContainer)
Bool_t fUseNewCentralityEstimation
Use new centrality estimation (for 2015 data)
bool GetIsEmbedding() const
True if the cells are located in the event that is being embedded.
AliEmcalCorrectionCellContainer * GetCellContainer(const std::string &cellsContainerName) const
std::string fDefaultConfigurationFilename
! Default YAML configuration filename
TObjArray fParticleCollArray
Particle/track collection array.
TObjArray fClusterCollArray
Cluster collection array.
AliClusterContainer * AddClusterContainer(const char *n)
AliMCParticleContainer * GetMCParticleContainer(Int_t i=0) const
void SetCentRange(Double_t min, Double_t max)
bool fRecycleUnusedEmbeddedEventsMode
Allows the recycling of embedded events which fail internal event selection. See the embedding helper...
void AdoptTrackContainer(AliTrackContainer *cont)
YAML configuration class for AliPhysics.
void AdoptParticleContainer(AliParticleContainer *cont)
AliParticleContainer * AddParticleContainer(const char *n)
std::string fName
Name of the cells object.
AliEmcalCorrectionComponent * GetCorrectionComponent(const std::string &name) const
void SetIsEmbedding(bool isEmbedded)
Set to true if the cells are located in the event that is being embedded.
BeamType fBeamType
! Event beam type
std::string toString(bool includeYAMLConfigurationInfo=false) const
std::ostream & PrintConfiguration(std::ostream &in, bool userConfig=false) const
const char Option_t
Definition: External.C:48
void Print(Option_t *opt="") const
Int_t fNVertCont
! Event vertex number of contributors
void RemoveParticleContainer(Int_t i=0)
void SetName(std::string name)
Set the name of the cells object (NOT the same as the branch!)
bool Bool_t
Definition: External.C:53
Int_t fCentBin
! Event centrality bin
void AdoptMCParticleContainer(AliMCParticleContainer *cont)
void SetupContainersFromInputNodes(AliEmcalContainerUtils::InputObject_t inputObjectType, std::set< std::string > &requestedContainers)
Double_t fMinCent
min centrality for event selection
std::vector< AliEmcalCorrectionCellContainer * > fCellCollArray
Cells collection array.
Container structure for EMCAL clusters.
Container for MC-true particles within the EMCAL framework.
void AddContainersToComponent(AliEmcalCorrectionComponent *component, AliEmcalContainerUtils::InputObject_t inputObjectType, bool checkObjectExists=false)
void Initialize(bool removeDummyTask=false)
AliParticleContainer * GetParticleContainer(const char *name) const
AliMCParticleContainer * AddMCParticleContainer(const char *n)
BeamType fForceBeamType
forced beam type