33 #include "AliAODTrack.h"
34 #include "AliESDtrackCuts.h"
43 namespace EMCalTriggerPtAnalysis {
48 std::vector<AliVCuts *> trackcuts;
49 if(cut.Contains(
"standard")){
51 esdcuts->SetName(
"standardRAA");
52 esdcuts->SetTitle(
"Standard Track cuts");
53 trackcuts.push_back(esdcuts);
55 if(cut.Contains(
"standardcrossedrows")){
56 AliESDtrackCuts *esdcuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(
true, 1);
57 esdcuts->DefineHistograms(kRed);
58 esdcuts->SetName(
"standardRAA");
59 esdcuts->SetTitle(
"Standard Track cuts");
60 esdcuts->SetMinNCrossedRowsTPC(120);
61 esdcuts->SetMaxDCAToVertexXYPtDep(
"0.0182+0.0350/pt^1.01");
62 trackcuts.push_back(esdcuts);
64 if(cut.Contains(
"hybrid")){
66 esdcuts->SetTitle(
"hybridglobal");
67 esdcuts->SetTitle(
"Global Hybrid tracks, loose DCA");
68 trackcuts.push_back(esdcuts);
75 if(cut.Contains(
"VarITSchi2")){
78 esdcuts->SetName(TString::Format(
"VarITSchi2Cut%04d", static_cast<int>(cutvalue * 10.)));
79 esdcuts->SetTitle(TString::Format(
"Default cuts - variation ITS chi2 cut at %f", cutvalue));
80 esdcuts->SetMaxChi2PerClusterITS(cutvalue);
81 trackcuts.push_back(esdcuts);
83 if(cut.Contains(
"VarTPCchi2") && !cut.Contains(
"Constrained")){
86 esdcuts->SetName(TString::Format(
"VarTPCchi2Cut%04d", static_cast<int>(cutvalue * 10.)));
87 esdcuts->SetTitle(TString::Format(
"Default cuts - variation TPC chi2 cut at %f", cutvalue));
88 esdcuts->SetMaxChi2PerClusterTPC(cutvalue);
89 trackcuts.push_back(esdcuts);
91 if(cut.Contains(
"VarTPCchi2Constrained")){
92 double cutvalue =
ValueDecoder(cut,
"VarTPCchi2Constrained");
94 esdcuts->SetName(TString::Format(
"VarTPCchi2ConstrainedCut%04d", static_cast<int>(cutvalue * 10.)));
95 esdcuts->SetTitle(TString::Format(
"Default cuts - variation TPC chi2 constrained cut at %f", cutvalue));
96 esdcuts->SetMaxChi2TPCConstrainedGlobal(cutvalue);
97 trackcuts.push_back(esdcuts);
99 if(cut.Contains(
"VarDCAz")){
102 esdcuts->SetName(TString::Format(
"VarDCAzCut%04d", static_cast<int>(cutvalue * 10.)));
103 esdcuts->SetTitle(TString::Format(
"Default cuts - variation DCAz cut at %f", cutvalue));
104 esdcuts->SetMaxDCAToVertexZ(cutvalue);
105 trackcuts.push_back(esdcuts);
107 if(cut.Contains(
"VarDCAr")){
109 double p1 = cutvalue * 0.0026, p2 = cutvalue * 0.005;
111 esdcuts->SetName(TString::Format(
"VarDCArCut%04d", static_cast<int>(cutvalue * 10.)));
112 esdcuts->SetTitle(TString::Format(
"Default cuts - variation DCAr cut at %f sigma", cutvalue));
113 esdcuts->SetMaxDCAToVertexXYPtDep(TString::Format(
"%f + %f/pt^1.01", p1, p2));
114 trackcuts.push_back(esdcuts);
116 if(cut.Contains(
"VarRatioCrossedRowsFindable")){
117 double cutvalue =
ValueDecoder(cut,
"VarRatioCrossedRowsFindable");
119 esdcuts->SetName(TString::Format(
"VarRatioCRFindableCut%04d", static_cast<int>(cutvalue * 10.)));
120 esdcuts->SetTitle(TString::Format(
"Default cuts - variation ratio crossed rows over findable cut at %f", cutvalue));
121 esdcuts->SetMinRatioCrossedRowsOverFindableClustersTPC(cutvalue);
122 trackcuts.push_back(esdcuts);
124 if(cut.Contains(
"VarFractionTPCshared")){
125 double cutvalue =
ValueDecoder(cut,
"VarFractionTPCshared");
127 esdcuts->SetName(TString::Format(
"VarFractionTPCShared%04d", static_cast<int>(cutvalue * 10.)));
128 esdcuts->SetTitle(TString::Format(
"Default cuts - variation fraction TPC shared clusters %f", cutvalue));
129 esdcuts->SetMaxFractionSharedTPCClusters(cutvalue);
130 trackcuts.push_back(esdcuts);
132 if(cut.Contains(
"VarTrackLengthDeadArea")){
133 double cutvalue =
ValueDecoder(cut,
"VarTrackLengthDeadArea");
135 esdcuts->SetName(TString::Format(
"VarTLDeadAreaCut%04d", static_cast<int>(cutvalue * 10.)));
136 esdcuts->SetTitle(TString::Format(
"Default cuts - variation track length dead area cut at %f", cutvalue));
137 esdcuts->SetCutGeoNcrNcl(cutvalue, 130., 1.5, 0.0, 0.0);
138 trackcuts.push_back(esdcuts);
140 if(cut.Contains(
"VarTrackLengthTPCLength")){
141 double cutvalue =
ValueDecoder(cut,
"VarTrackLengthTPCLength");
143 esdcuts->SetName(TString::Format(
"VarTLTPCLengthCut%04d", static_cast<int>(cutvalue * 10.)));
144 esdcuts->SetTitle(TString::Format(
"Default cuts - variation track length TPC length cut at %f", cutvalue));
145 esdcuts->SetCutGeoNcrNcl(3., cutvalue, 1.5, 0.0, 0.0);
146 trackcuts.push_back(esdcuts);
148 if(cut.Contains(
"VarSPDhit")){
151 if(TMath::Abs(cutvalue) > DBL_EPSILON){
152 esdcuts->SetName(
"VarSPDhitOn");
153 esdcuts->SetTitle(
"Default cuts - variation SPD hit requirement on");
155 esdcuts->SetName(
"VarSPDhitOff");
156 esdcuts->SetTitle(
"Default cuts - variation SPD hit requirement off");
157 esdcuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kOff);
159 trackcuts.push_back(esdcuts);
166 if(cut.Contains(
"TestITSchi2")){
168 std::cout <<
"Using ITS chi2 cut variation: " << itscut << std::endl;
171 esdcuts->SetName(Form(
"TestITSchi2%d",
int(itscut*10.)));
172 esdcuts->SetTitle(Form(
"Loose track cuts, ITS chi2 var %.1f", itscut));
175 esdcuts->SetMaxChi2PerClusterITS(itscut);
177 esdcuts->SetMaxChi2TPCConstrainedGlobal(100);
178 trackcuts.push_back(esdcuts);
180 if(cut.Contains(
"TestTPCchi2")){
182 std::cout <<
"Using TPC chi2 cut variation: " << tpccut << std::endl;
184 AliESDtrackCuts *esdcuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(
false, 1);
185 esdcuts->SetName(Form(
"VarTPCchi2%d",
int(tpccut * 10.)));
186 esdcuts->SetTitle(Form(
"Loose track cuts, TPC chi2 var %.1f", tpccut));
189 esdcuts->SetMaxChi2PerClusterTPC(tpccut);
190 trackcuts.push_back(esdcuts);
192 if(cut.Contains(
"TestTPCchi2Constrained")){
193 double tpcconstrainedcut =
ValueDecoder(cut,
"TestTPCchi2Constrained");
194 std::cout <<
"Using TPC chi2 constrained cut variation: " << tpcconstrainedcut << std::endl;
197 esdcuts->SetName(Form(
"VarTPCchi2constrained%d",
int(tpcconstrainedcut * 10.)));
198 esdcuts->SetTitle(Form(
"Loose track cuts, TPC constrained chi2 variation %f", tpcconstrainedcut));
201 esdcuts->SetMaxChi2TPCConstrainedGlobal(tpcconstrainedcut);
203 esdcuts->SetMaxChi2PerClusterITS(100);
204 trackcuts.push_back(esdcuts);
206 if(cut.Contains(
"geo")){
208 geocuts->SetName(
"geocuts");
209 geocuts->SetTitle(
"TPC track length cut");
211 trackcuts.push_back(geocuts);
214 for(std::vector<AliVCuts *>::iterator it = trackcuts.begin(); it != trackcuts.end(); ++it)
219 std::vector<AliVCuts *> trackcuts;
222 std::function<AliEMCalTriggerExtraCuts *(const std::vector<AliVCuts *> &)> FindTrackCuts = [] (
const std::vector<AliVCuts *> &cuts) ->
AliEMCalTriggerExtraCuts * {
224 for(std::vector<AliVCuts *>::const_iterator cutiter = cuts.begin(); cutiter != cuts.end(); ++cutiter){
225 if((*cutiter)->IsA() == AliEMCalTriggerExtraCuts::Class()){
232 if(cut.Contains(
"standard")){
237 trackcuts.push_back(extracuts);
241 if(cut.Contains(
"hybrid")){
245 if(cut.Contains(
"geo")){
249 trackcuts.push_back(extracuts);
253 for(std::vector<AliVCuts *>::iterator it = trackcuts.begin(); it != trackcuts.end(); ++it)
272 return isAOD ?
"caloClusters" :
"CaloClusters";
276 return isAOD ?
"tracks" :
"Tracks";
280 AliESDtrackCuts *esdcuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(
true, 1);
281 esdcuts->DefineHistograms(kRed);
282 esdcuts->SetCutGeoNcrNcl(3., 130., 1.5, 0.0, 0.0);
283 esdcuts->SetMaxDCAToVertexXYPtDep(
"0.0182+0.0350/pt^1.01");
284 esdcuts->SetMaxFractionSharedTPCClusters(0.4);
291 AliESDtrackCuts *esdcuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kFALSE);
292 esdcuts->SetMaxDCAToVertexXY(2.4);
293 esdcuts->SetMaxDCAToVertexZ(3.2);
294 esdcuts->SetDCAToVertex2D(kTRUE);
295 esdcuts->SetMaxChi2TPCConstrainedGlobal(36);
296 esdcuts->SetMaxFractionSharedTPCClusters(0.4);
302 Int_t position(cuttstring.Index(tag) + strlen(tag));
303 TString valuestring = cuttstring(position, 4);
304 Int_t value = valuestring.Atoi();
305 return static_cast<double>(value) / 10.;
EMCAL L1 Jet trigger, low threshold.
Interface for virtual track selection.
static double ValueDecoder(const char *string, const char *tag)
Helper class selecting events on the presence of a trigger patch for the given type above threshold...
void AddFilterBit(UInt_t filterbits)
Add a new filter bit to the track selection.
EMCAL L1 Gamma trigger, high threshold.
EMCAL L1 Jet trigger, high threshold.
static AliEmcalTrackSelection * TrackCutsFactory(TString name, Bool_t isAOD)
Fully-configure EMCAL track selection independent of the data type.
static AliESDtrackCuts * GenerateLooseDCACutsESD()
void SetOfflineEnergyThreshold(EmcalTriggerClass trgcls, double threshold)
Specify threshold for a given offline trigger class.
EMCAL L1 Gamma trigger, low threshold.
void AddTrackCuts(AliVCuts *cuts)
Add new track cuts to the list of cuts.
Implement virtual track selection for AOD analysis.
EmcalEnergyDefinition_t
Definition of EMCAL patch energy measurements.
static AliESDtrackCuts * GenerateDefaultCutsESD()
void SetEnergyDefinition(EmcalEnergyDefinition_t endef)
Define according to which energy measurement a patch is selected as trigger patch.
Implementation of virtual track selection for ESDs.
static AliEmcalTriggerOfflineSelection * TriggerSelectionFactory(Double_t el0, Double_t eg1, Double_t eg2, Double_t ej1, Double_t ej2, AliEmcalTriggerOfflineSelection::EmcalEnergyDefinition_t endef=AliEmcalTriggerOfflineSelection::kFEEEnergy)
Configures EMCAL trigger offline selection used to restrict EMCAL triggered sample.
static TString TrackContainerNameFactory(Bool_t isAOD)
Get name of the default track container.
static TString ClusterContainerNameFactory(Bool_t isAOD)
Get name of the default cluster container.