20 #include "AliVEventHandler.h"
21 #include "AliEMCALGeometry.h"
22 #include "AliVCaloCells.h"
23 #include "AliVCluster.h"
25 #include "AliMultSelection.h"
26 #include "AliCentrality.h"
27 #include "AliESDEvent.h"
28 #include "AliAnalysisManager.h"
46 fUserConfigurationFilename(
""),
47 fUserConfigurationString(
""),
48 fDefaultConfiguration(),
49 fDefaultConfigurationFilename(
""),
50 fDefaultConfigurationString(
""),
51 fCorrectionComponents(),
55 fConfigurationInitialized(false),
56 fOrderedComponentsToExecute(),
57 fEventInitialized(false),
64 fUseNewCentralityEstimation(kFALSE),
67 fNeedEmcalGeom(kTRUE),
75 AliDebug(3, Form(
"%s", __PRETTY_FUNCTION__));
98 fUserConfigurationFilename(
""),
99 fUserConfigurationString(
""),
100 fDefaultConfiguration(),
101 fDefaultConfigurationFilename(
""),
102 fDefaultConfigurationString(
""),
103 fCorrectionComponents(),
107 fConfigurationInitialized(false),
108 fOrderedComponentsToExecute(),
109 fEventInitialized(false),
116 fUseNewCentralityEstimation(kFALSE),
119 fNeedEmcalGeom(kTRUE),
121 fParticleCollArray(),
127 AliDebug(3, Form(
"%s", __PRETTY_FUNCTION__));
136 DefineInput(0, TChain::Class());
137 DefineOutput(1, TList::Class());
150 std::ifstream inFile(filename);
151 return inFile.good();
167 filename =
gSystem->ExpandPathName(filename.c_str());
170 if(filename.find(
"alien://") != std::string::npos)
172 AliDebug(2, TString::Format(
"Opening file \"%s\" on the grid!", filename.c_str()));
175 TGrid::Connect(
"alien://");
179 std::string localFilename =
gSystem->BaseName(filename.c_str());
181 if (userFile ==
true) {
182 localFilename =
"user" + localFilename;
184 TFile::Cp(filename.c_str(), localFilename.c_str());
187 filename = localFilename;
241 AliInfo(TString::Format(
"User file at \"%s\" does not exist! All settings will be from the default file!",
fUserConfigurationFilename.c_str()));
247 AliFatal(
"Must pass a run period to the correction task!");
250 TString userRunPeriod =
"kNoUserFile";
260 AliFatal(
"User must specify a period. Leave the period as an empty string to apply to all periods.");
264 AliDebug(3, TString::Format(
"userRunPeriod: %s", userRunPeriod.Data()));
266 userRunPeriod.ToLower();
268 if (userRunPeriod !=
"" && userRunPeriod !=
"knouserfile" && userRunPeriod !=
fRunPeriod)
270 AliFatal(TString::Format(
"User run period \"%s\" does not match the run period of \"%s\" passed to the correction task!", userRunPeriod.Data(),
fRunPeriod.Data()));
274 if (userRunPeriod ==
"")
276 AliWarning(
"User run period is an empty string. Settings apply to all run periods!");
281 std::stringstream tempConfiguration;
284 tempConfiguration.str(
"");
304 bool returnValue =
false;
309 std::ofstream outFile(filename);
311 if (stringToWrite ==
"") {
312 AliWarning(TString::Format(
"%s configuration is empty!", userConfig ?
"User" :
"Default"));
314 outFile << stringToWrite;
321 AliWarning(TString::Format(
"Configuration not properly initialized! Cannot print %s configuration!", userConfig ?
"user" :
"default"));
327 AliWarning(
"Please pass a valid filename instead of empty quotes!");
345 AliVEventHandler *evhand = mgr->GetInputEventHandler();
347 if (evhand->InheritsFrom(
"AliESDInputHandler")) {
355 AliError(
"Event handler not found!");
359 AliError(
"Analysis manager not found!");
363 std::string tempName = GetName();
364 std::size_t foundSuffix = tempName.find(
"_");
365 if (foundSuffix != std::string::npos) {
367 fSuffix = tempName.substr(foundSuffix + 1).c_str();
375 AliFatal(
"YAML configuration must be initialized before running (ie. the AddTask, run macro or wagon)!");
389 AliDebugStream(2) <<
"Cell info: " << std::endl;
391 AliDebugStream(2) <<
"\tName: " << cellInfo->GetName() <<
"\tBranch: " << cellInfo->GetBranchName() <<
"\tIsEmbedding:" << cellInfo->GetIsEmbedding() << std::endl;
421 std::vector <std::string> executionOrder;
427 std::set <std::string> possibleComponents;
429 possibleComponents.insert(node.first.as<std::string>());
432 possibleComponents.insert(node.first.as<std::string>());
436 std::string expectedComponentName =
"";
437 bool foundSuffixComponent =
false;
438 bool foundComponent =
false;
439 bool componentEnabled =
true;
442 for (
auto & execName : executionOrder)
445 expectedComponentName = TString::Format(
"%s_%s", execName.c_str(),
fSuffix.c_str()).
Data();
446 foundComponent =
false;
447 componentEnabled =
false;
455 if (componentEnabled ==
true) {
456 foundSuffixComponent =
true;
457 correctionComponents.push_back(expectedComponentName);
460 AliInfo(TString::Format(
"Component %s is disabled and will not be run!", expectedComponentName.c_str()));
468 expectedComponentName = execName;
473 if (componentEnabled ==
true) {
474 if (foundSuffixComponent ==
true) {
475 AliFatal(TString::Format(
"Found earlier component %s with suffix \"%s\", but could not found component %s with that same suffix!", correctionComponents.back().c_str(),
fSuffix.c_str(), expectedComponentName.c_str()));
479 correctionComponents.push_back(expectedComponentName);
483 AliInfo(TString::Format(
"Component %s is disabled and will not be run!", expectedComponentName.c_str()));
489 AliDebug(2,
"Found EMCal Correction Components: ");
490 for (
auto & component : correctionComponents)
492 component =
"AliEmcalCorrection" + component;
493 AliDebug(2, TString::Format(
"%s", component.c_str()) );
510 bool foundComponent =
false;
511 for (
auto & possibleComponent : possibleComponents)
513 if (possibleComponent == name) {
514 foundComponent =
true;
519 return foundComponent;
536 for (
auto propertyName : tempNode)
538 propertyNames.insert(propertyName.first.as<std::string>());
553 std::set <std::string> userPropertyNames;
554 std::set <std::string> defaultPropertyNames;
556 bool foundMatch =
false;
557 std::string tempComponentName =
"";
563 userPropertyNames.clear();
564 defaultPropertyNames.clear();
567 tempComponentName = componentName.substr(componentName.find(
"AliEmcalCorrection")+18);
569 AliDebugStream(2) <<
"Checking component " << componentName <<
" for unmatched user settings" << std::endl;
579 if (tempComponentName.find(
"_") != std::string::npos) {
588 for (
auto userPropertyName : userPropertyNames)
590 AliDebugStream(2) <<
"Checking property " << userPropertyName << std::endl;
592 for (
auto defaultPropertyName : defaultPropertyNames)
594 if (userPropertyName == defaultPropertyName) {
595 AliDebugStream(2) <<
"Found match of " << userPropertyName <<
" with " << defaultPropertyName << std::endl;
599 if (foundMatch ==
false) {
600 AliFatal(TString::Format(
"Property \"%s:%s\" defined in the user configuration file cannot be found in the default configuration file! Check the spelling in your user file!", tempComponentName.c_str(), userPropertyName.c_str()));
618 std::string noPrefixComponentName = componentName.substr(0, componentName.find(
"_" +
fSuffix));
622 AliFatal(TString::Format(
"Failed to create requested component %s!", componentName.c_str()));
626 component->SetName(componentName.c_str());
627 component->SetTitle(componentName.c_str());
646 AliInfo(TString::Format(
"Successfully added correction task: %s", componentName.c_str()));
662 AliDebug(3, Form(
"%s", __PRETTY_FUNCTION__));
667 AliFatal(
"YAML configuration must be initialized before running (ie. the AddTask, run macro or wagon)!");
680 AliInfo(
"Reinitializing user configuration from string. Expected if running on grid!");
685 AliInfo(
"Reinitializing default configuration from string. Expected if running on grid!");
691 AliDebugStream(4) <<
"(Re)initialized user configuration: " <<
fUserConfiguration << std::endl;
693 AliDebugStream(4) <<
"(Re)initialized default configuration: " <<
fDefaultConfiguration << std::endl;
717 AliDebug(3, Form(
"%s", __PRETTY_FUNCTION__));
725 component->UserCreateOutputObjects();
727 if (component->GetOutputList() != 0)
734 t->SetName(component->GetName());
737 TIter next(component->GetOutputList());
742 AliDebug(1, TString::Format(
"Added output list from task %s to output.", component->GetName()));
757 std::string inputObjectName =
"";
759 inputObjectName =
"clusterContainers";
761 else if (inputObjectType ==
kTrack) {
762 inputObjectName =
"trackContainers";
765 inputObjectName =
"cells";
768 AliFatal(TString::Format(
"Unrecognized input object type %d", inputObjectType));
771 return inputObjectName;
789 if (nodeToRetrieveFrom[
"sharedParameters"]) {
790 inputNode[
"sharedParameters"] = nodeToRetrieveFrom[
"sharedParameters"];
805 for(
auto & containerName : requestedContainers)
815 AliDebug(2, TString::Format(
"Processing container %s of inputType %d", containerName.c_str(), inputObjectType));
817 SetupContainer(inputObjectType, containerName, userInputObjectNode, defaultInputObjectNode);
820 SetupCellsInfo(containerName, userInputObjectNode, defaultInputObjectNode);
840 AliDebugStream(2) <<
"User: " << std::endl << userNode << std::endl <<
"default: " << std::endl << defaultNode << std::endl;
844 cellObj->
SetName(containerName);
846 std::string tempString =
"";
848 if (tempString ==
"usedefault") {
854 bool tempBool =
false;
882 YAML::Node userInputObjectNode;
883 YAML::Node defaultInputObjectNode;
887 AliDebugStream(3) <<
"userInputObjectNode: " << userInputObjectNode << std::endl;
888 AliDebugStream(3) <<
"defaultInputObjectNode: " << defaultInputObjectNode << std::endl;
891 std::set <std::string> requestedContainers;
892 std::vector <std::string> componentRequest;
895 componentRequest.clear();
899 for (
auto & req : componentRequest )
901 AliDebugStream(3) <<
"Component " << componentName <<
" requested container name " << req << std::endl;
902 requestedContainers.insert(req);
906 AliInfoStream() << inputObjectName <<
" Containers requested by components: " << std::endl;
907 for (
auto &
str : requestedContainers) {
908 AliInfoStream() <<
"\t" <<
str << std::endl;;
912 AliDebug(2, TString::Format(
"Setting up requested containers!"));
936 AliDebugStream(2) <<
"Adding container" << std::endl;
937 AliEmcalContainer * cont =
AddContainer(inputObjectType, containerName, userNode, defaultNode);
938 AliDebugStream(2) <<
"Added container" << std::endl;
950 std::string tempString =
"";
952 bool tempBool =
false;
958 AliDebugStream(2) << cont->GetName() <<
": Setting minPt of " << tempDouble << std::endl;
959 cont->SetMinPt(tempDouble);
964 AliDebugStream(2) << cont->GetName() <<
": Setting minE of " << tempDouble << std::endl;
965 cont->SetMinE(tempDouble);
974 AliDebugStream(2) << cont->GetName() <<
": Setting eta limits of " << tempDouble <<
" to " << tempDouble2 << std::endl;
975 cont->SetEtaLimits(tempDouble, tempDouble2);
985 AliDebugStream(2) << cont->GetName() <<
": Setting phi limits of " << tempDouble <<
" to " << tempDouble2 << std::endl;
986 cont->SetPhiLimits(tempDouble, tempDouble2);
999 if (clusterContainer) {
1013 AliDebugStream(2) << clusterContainer->GetName() <<
": Setting clusNonLinCorrEnergyCut of " << tempDouble << std::endl;
1020 AliDebugStream(2) << clusterContainer->GetName() <<
": Setting clusHadCorrEnergyCut of " << tempDouble << std::endl;
1027 if (trackContainer) {
1030 std::vector <UInt_t> filterBitsVector;
1034 for (
int filterBit : filterBitsVector) {
1035 filterBits += filterBit;
1037 AliDebugStream(2) << trackContainer->GetName() <<
": Setting filterBits of " << filterBits << std::endl;
1046 AliDebugStream(2) << trackContainer->GetName() <<
": Setting trackFilterType of " << trackFilterType << std::endl;
1069 std::string returnValue =
"";
1071 if (esdMode ==
true) {
1072 if (returnObjectType ==
true) {
1073 returnValue =
"AliESDCaloCluster";
1076 returnValue =
"CaloClusters";
1080 if (returnObjectType ==
true) {
1081 returnValue =
"AliAODCaloCluster";
1084 returnValue =
"caloClusters";
1088 else if (objType ==
kTrack) {
1089 if (esdMode ==
true) {
1090 if (returnObjectType ==
true) {
1091 returnValue =
"AliESDtrack";
1094 returnValue =
"Tracks";
1098 if (returnObjectType ==
true) {
1099 returnValue =
"AliAODTrack";
1102 returnValue =
"tracks";
1107 if (esdMode ==
true) {
1108 if (returnObjectType ==
true) {
1109 returnValue =
"AliESDCaloCells";
1112 returnValue =
"EMCALCells";
1116 if (returnObjectType ==
true) {
1117 returnValue =
"AliAODCaloCells";
1120 returnValue =
"emcalCells";
1152 std::string containerBranch =
"";
1154 AliFatal(
"Must specify type of container when requesting branch.");
1159 AliDebugStream(2) <<
"User Node: " << userNode << std::endl;
1160 AliDebugStream(2) <<
"Default Node: " << defaultNode << std::endl;
1169 if (containerBranch ==
"usedefault") {
1174 AliEmcalContainer * cont = 0;
1180 else if (contType ==
kTrack)
1182 if (containerBranch ==
"mcparticles") {
1190 cont->SetName(containerName.c_str());
1206 inputObjectName = inputObjectName +
"Names";
1208 std::vector <std::string> inputObjects;
1215 for (
auto const &
str : inputObjects)
1222 AliDebugStream(2) <<
"Adding cluster container " <<
str <<
" of array " << cont->GetArrayName() <<
" to component " << component->GetName() << std::endl;
1225 else if (inputObjectType ==
kTrack)
1228 AliDebugStream(2) <<
"Adding particle container " <<
str <<
" of array " << cont->GetArrayName() <<
" to component " << component->GetName() << std::endl;
1234 if (inputObjects.size() > 1) {
1235 AliFatal(TString::Format(
"Component %s requested more than one cell branch, but this is not supported! Check the configuration!", component->GetName()));
1241 AliDebugStream(3) <<
"component GetNumberOfCells: " << component->
GetCaloCells()->GetNumberOfCells() << std::endl;
1257 if (cellContainer->GetName() == cellsContainerName) {
1258 return cellContainer;
1273 AliDebugStream(2) <<
"Retrieving cells object " << cellContainer->
GetName() << std::endl;
1277 cellContainer->
SetCells(dynamic_cast<AliVCaloCells *>(event->FindListObject(cellContainer->
GetBranchName().c_str())));
1287 AliDebug(3, Form(
"%s", __PRETTY_FUNCTION__));
1291 component->SetEMCALGeometry(
fGeom);
1299 component->ExecOnce();
1314 const AliVVertex *vert = InputEvent()->GetPrimaryVertex();
1324 AliMultSelection *MultSelection =
static_cast<AliMultSelection*
>(InputEvent()->FindListObject(
"MultSelection"));
1325 if (MultSelection) {
1326 fCent = MultSelection->GetMultiplicityPercentile(
fCentEst.Data());
1329 AliWarning(
"Could not retrieve centrality information! Assuming 99");
1333 AliCentrality *aliCent = InputEvent()->GetCentrality();
1338 AliWarning(
"Could not retrieve centrality information! Assuming 99");
1348 AliWarning(Form(
"Negative centrality: %f. Assuming 99",
fCent));
1357 else if (
fCent > 90) {
1362 AliWarning(Form(
"Negative centrality: %f. Assuming 99",
fCent));
1375 AliWarning(Form(
"fCentBin too large: cent = %f fCentBin = %d. Assuming 99",
fCent,
fCentBin));
1385 AliEmcalContainer* cont = 0;
1388 while ((cont = static_cast<AliEmcalContainer*>(nextPartColl()))) cont->NextEvent();
1391 while ((cont = static_cast<AliEmcalContainer*>(nextClusColl()))) cont->NextEvent();
1409 if (!InputEvent()) {
1410 AliError(
"Could not retrieve event! Returning!");
1415 fGeom = AliEMCALGeometry::GetInstanceFromRunNumber(InputEvent()->
GetRunNumber());
1417 AliFatal(
"Can not get EMCal geometry instance. If you do not need the EMCal geometry, disable it by setting task->SetNeedEmcalGeometry(kFALSE).");
1426 cont->SetArray(InputEvent());
1433 cont->SetArray(InputEvent());
1459 AliVEvent *
event = 0;
1487 AliVEvent *
event =
GetEvent(InputEvent());
1489 TClonesArray * array =
dynamic_cast<TClonesArray *
>(
event->FindListObject(cont->GetArrayName()));
1491 AliWarning(TString::Format(
"Container %s requested branch %s, but it does not exist! Creating it for you! Please check that this the proper action!", cont->GetName(), cont->GetArrayName().Data()));
1493 array->SetName(cont->GetArrayName());
1494 event->AddObject(array);
1507 if (
TString(n).IsNull())
return 0;
1525 if (
TString(n).IsNull())
return 0;
1543 if (
TString(n).IsNull())
return 0;
1561 if (
TString(n).IsNull())
return 0;
1623 AliDebug(3, Form(
"%s", __PRETTY_FUNCTION__));
1652 AliDebug(3, Form(
"%s", __PRETTY_FUNCTION__));
1655 component->SetEvent(InputEvent());
1656 component->SetMCEvent(MCEvent());
1657 component->SetCentralityBin(
fCentBin);
1658 component->SetCentrality(
fCent);
1675 AliDebug(3, Form(
"%s", __PRETTY_FUNCTION__));
1678 component->UserNotify();
1706 const AliESDRun *run = esd->GetESDRun();
1707 TString beamType = run->GetBeamType();
1708 if (beamType ==
"p-p")
1710 else if (beamType ==
"A-A")
1712 else if (beamType ==
"p-A")
1717 Int_t runNumber = InputEvent()->GetRunNumber();
1718 if ((runNumber >= 136851 && runNumber <= 139517) ||
1719 (runNumber >= 166529 && runNumber <= 170593)) {
1721 }
else if ((runNumber>=188365 && runNumber <= 188366) ||
1722 (runNumber >= 195344 && runNumber <= 196608)) {
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
Default YAML Configuration.
Steering task for the EMCal correction framework.
AliEMCALGeometry * fGeom
! Emcal geometry
return jsonbuilder str().c_str()
static bool DoesFileExist(const std::string &filename)
std::string GetName() const
Get the name of the cells object (NOT the same as the branch!)
void InitializeConfiguration()
AliTrackContainer * AddTrackContainer(const char *n)
void SetClusterContainer(AliClusterContainer *cont)
std::vector< std::string > fOrderedComponentsToExecute
Ordered set of components to execute.
std::string GetInputFieldNameFromInputObjectType(InputObject_t inputObjectType)
AliClusterContainer * GetClusterContainer(Int_t i=0) 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.
void AdoptClusterContainer(AliClusterContainer *cont)
void SetupConfigurationFilePath(std::string &filename, bool userFile=false)
void UserExec(Option_t *option)
void UserCreateOutputObjectsComponents()
YAML::Node fUserConfiguration
Double_t fMaxCent
max centrality for event selection
Double_t fVertex[3]
! Event vertex
void DetermineComponentsToExecute(std::vector< std::string > &componentsToExecute)
TList * fOutput
! Output for histograms
Wrapper around cells objects for the EMCal Correction Task.
bool fConfigurationInitialized
True if the YAML configuration files are initialized.
Container for particles within the EMCAL framework.
AliEmcalContainer * AddContainer(InputObject_t contType, std::string &containerName, YAML::Node &userNode, YAML::Node &defaultNode)
void SetUserConfiguration(YAML::Node &node)
Make copy to ensure that the nodes do not point to each other (?)
void AddContainersToComponent(AliEmcalCorrectionComponent *component, InputObject_t inputObjectType)
void SetParticleContainer(AliParticleContainer *cont)
bool fEventInitialized
If the event is initialized properly.
TString fCentEst
name of V0 centrality estimator
void SetAODFilterBits(UInt_t bits)
std::string fUserConfigurationFilename
! User YAML configruation filename
std::string fDefaultConfigurationString
Store the default YAML configuration as a string so that it can be streamed.
void SetClusNonLinCorrEnergyCut(Double_t cut)
TString fRunPeriod
Run period (passed by user)
void SetCells(AliVCaloCells *cells)
Sets the Pointer to the actual CaloCells object.
Double_t fCent
! Event centrality
void ExecOnceComponents()
Base class for correction components in the EMCal correction framework.
BeamType
Switch for the beam type.
AliMCParticleContainer * AddMCParticleContainer(const char *n)
void InitializeComponents()
std::map< std::string, AliEmcalTrackSelection::ETrackFilterType_t > trackFilterTypeMap
Relates string to the track filter enumeration for YAML configuration.
void SetupContainersFromInputNodes(InputObject_t inputObjectType, YAML::Node &userInputObjectNode, YAML::Node &defaultInputObjectNode, std::set< std::string > &requestedContainers)
static std::string DetermineUseDefaultName(InputObject_t contType, bool esdMode, bool returnObjectType=false)
void SetupContainer(InputObject_t inputObjectType, std::string containerName, YAML::Node &userNode, YAML::Node &defaultNode)
bool WriteConfigurationFile(std::string filename, bool userConfig=false)
Bool_t fNeedEmcalGeom
whether or not the task needs the emcal geometry
void CheckForUnmatchedUserSettings()
std::string GetBranchName() const
Get the name of the cells branch (NOT the same as the name!)
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.
void CheckForContainerArray(AliEmcalContainer *cont, InputObject_t objectType)
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
AliEmcalCorrectionCellContainer * GetCellContainer(const std::string &cellsContainerName) const
std::string fDefaultConfigurationFilename
! Default YAML configuration filename
void UserCreateOutputObjects()
void GetNodeForInputObjects(YAML::Node &inputNode, YAML::Node &nodeToRetrieveFrom, std::string &inputObjectName, bool requiredProperty)
TObjArray fParticleCollArray
Particle/track collection array.
TObjArray fClusterCollArray
Cluster collection array.
static AliVEvent * GetEvent(AliVEvent *inputEvent, bool isEmbedding=false)
virtual Bool_t Initialize()
void SetDefaultConfiguration(YAML::Node &node)
virtual ~AliEmcalCorrectionTask()
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
AliParticleContainer * GetParticleContainer(Int_t i=0) const
void AdoptParticleContainer(AliParticleContainer *cont)
void SetIsESD(Bool_t isESD)
AliVCaloCells * GetCaloCells()
void SetCaloCells(AliVCaloCells *cells)
void SetIsEmbedding(bool isEmbedded)
Set to true if the cells are located in the event that is being embedded.
BeamType fBeamType
! Event beam type
Int_t GetRunNumber(TString)
void SetTrackFilterType(ETrackFilterType_t f)
YAML::Node fDefaultConfiguration
User YAML Configuration.
void SetupCellsInfo(std::string containerName, YAML::Node &userNode, YAML::Node &defaultNode)
Int_t fNVertCont
! Event vertex number of contributors
static AliEmcalCorrectionComponent * createInstance(std::string const &s)
void SetName(std::string name)
Set the name of the cells object (NOT the same as the branch!)
Int_t fCentBin
! Event centrality bin
Double_t fMinCent
min centrality for event selection
AliClusterContainer * AddClusterContainer(const char *n)
std::vector< AliEmcalCorrectionCellContainer * > fCellCollArray
Cells collection array.
Bool_t RetrieveEventObjects()
AliParticleContainer * AddParticleContainer(const char *n)
Container structure for EMCAL clusters.
Container for MC-true particles within the EMCAL framework.
std::string fUserConfigurationString
Store the user YAML configuration as a string so that it can be streamed.
void GetPropertyNamesFromNode(const std::string &componentName, const YAML::Node &node, std::set< std::string > &propertyNames, const bool nodeRequired)
InputObject_t
Type of input object to be created
TList * OpenFile(const char *fname)
void SetClusHadCorrEnergyCut(Double_t cut)
bool GetProperty(std::string propertyName, T &property, bool requiredProperty=true, std::string correctionName="")
Retrieve property.
BeamType fForceBeamType
forced beam type
void CreateInputObjects(InputObject_t inputObjectType)