34 #include <TObjArray.h> 35 #include <TObjString.h> 38 #include "AliAODTrack.h" 39 #include "AliESDtrackCuts.h" 54 std::unique_ptr<TObjArray> cuts(cutstring.Tokenize(
","));
55 std::cout <<
"Creating track cuts for " << (aod ?
"AODs" :
"ESDs") << std::endl;
59 TString &cut =
static_cast<TObjString *
>(
c)->String();
60 if(cut ==
"standard"){
62 esdcuts->SetName(
"standardRAA");
63 esdcuts->SetTitle(
"Standard Track cuts");
64 trackcuts.Add(esdcuts);
66 if(cut ==
"standardcrossedrows"){
67 auto esdcuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(
true, 1);
68 esdcuts->DefineHistograms(kRed);
69 esdcuts->SetName(
"standardRAA");
70 esdcuts->SetTitle(
"Standard Track cuts");
71 esdcuts->SetMinNCrossedRowsTPC(120);
72 esdcuts->SetMaxDCAToVertexXYPtDep(
"0.0182+0.0350/pt^1.01");
73 trackcuts.Add(esdcuts);
76 std::cout <<
"Configuring standard hybrid track cuts" << std::endl;
78 esdcuts->SetTitle(
"hybridglobal");
79 esdcuts->SetTitle(
"Global Hybrid tracks, loose DCA");
80 trackcuts.Add(esdcuts);
82 if(cut ==
"hybrid2010_wNoRefit"){
83 std::cout <<
"Configuring hybrid track cuts 2010, including non-ITSrefit tracks" << std::endl;
84 auto hybridcuts =
new PWG::EMCAL::AliEmcalESDHybridTrackCuts(
"2010_wNoRefit", PWG::EMCAL::AliEmcalESDHybridTrackCuts::kDef2010);
85 hybridcuts->SetUseNoITSrefitTracks(kTRUE);
86 trackcuts.Add(hybridcuts);
88 if(cut ==
"hybrid2010_woNoRefit"){
89 std::cout <<
"Configuring hybrid track cuts 2010, excluding non-ITSrefit tracks" << std::endl;
90 auto hybridcuts =
new PWG::EMCAL::AliEmcalESDHybridTrackCuts(
"2010_woNoRefit", PWG::EMCAL::AliEmcalESDHybridTrackCuts::kDef2010);
91 hybridcuts->SetUseNoITSrefitTracks(kFALSE);
92 trackcuts.Add(hybridcuts);
94 if(cut ==
"hybrid2011_wNoRefit"){
95 std::cout <<
"Configuring hybrid track cuts 2011, including non-ITSrefit tracks" << std::endl;
96 auto hybridcuts =
new PWG::EMCAL::AliEmcalESDHybridTrackCuts(
"2011_wNoRefit", PWG::EMCAL::AliEmcalESDHybridTrackCuts::kDef2011);
97 hybridcuts->SetUseNoITSrefitTracks(kTRUE);
98 trackcuts.Add(hybridcuts);
100 if(cut ==
"hybrid2011_woNoRefit"){
101 std::cout <<
"Configuring hybrid track cuts 2011, excluding non-ITSrefit tracks" << std::endl;
102 auto hybridcuts =
new PWG::EMCAL::AliEmcalESDHybridTrackCuts(
"2011_woNoRefit", PWG::EMCAL::AliEmcalESDHybridTrackCuts::kDef2011);
103 hybridcuts->SetUseNoITSrefitTracks(kFALSE);
104 trackcuts.Add(hybridcuts);
112 if(cut.Contains(
"VarITSchi2")){
115 esdcuts->SetName(TString::Format(
"VarITSchi2Cut%04d", static_cast<int>(cutvalue * 10.)));
116 esdcuts->SetTitle(TString::Format(
"Default cuts - variation ITS chi2 cut at %f", cutvalue));
117 esdcuts->SetMaxChi2PerClusterITS(cutvalue);
118 trackcuts.Add(esdcuts);
120 if(cut.Contains(
"VarTPCchi2") && !cut.Contains(
"Constrained")){
123 esdcuts->SetName(TString::Format(
"VarTPCchi2Cut%04d", static_cast<int>(cutvalue * 10.)));
124 esdcuts->SetTitle(TString::Format(
"Default cuts - variation TPC chi2 cut at %f", cutvalue));
125 esdcuts->SetMaxChi2PerClusterTPC(cutvalue);
126 trackcuts.Add(esdcuts);
128 if(cut.Contains(
"VarTPCchi2Constrained")){
129 double cutvalue =
ValueDecoder(cut,
"VarTPCchi2Constrained");
131 esdcuts->SetName(TString::Format(
"VarTPCchi2ConstrainedCut%04d", static_cast<int>(cutvalue * 10.)));
132 esdcuts->SetTitle(TString::Format(
"Default cuts - variation TPC chi2 constrained cut at %f", cutvalue));
133 esdcuts->SetMaxChi2TPCConstrainedGlobal(cutvalue);
134 trackcuts.Add(esdcuts);
136 if(cut.Contains(
"VarDCAz")){
139 esdcuts->SetName(TString::Format(
"VarDCAzCut%04d", static_cast<int>(cutvalue * 10.)));
140 esdcuts->SetTitle(TString::Format(
"Default cuts - variation DCAz cut at %f", cutvalue));
141 esdcuts->SetMaxDCAToVertexZ(cutvalue);
142 trackcuts.Add(esdcuts);
144 if(cut.Contains(
"VarDCAr")){
146 double p1 = cutvalue * 0.0026, p2 = cutvalue * 0.005;
148 esdcuts->SetName(TString::Format(
"VarDCArCut%04d", static_cast<int>(cutvalue * 10.)));
149 esdcuts->SetTitle(TString::Format(
"Default cuts - variation DCAr cut at %f sigma", cutvalue));
150 esdcuts->SetMaxDCAToVertexXYPtDep(TString::Format(
"%f + %f/pt^1.01", p1, p2));
151 trackcuts.Add(esdcuts);
153 if(cut.Contains(
"VarRatioCrossedRowsFindable")){
154 double cutvalue =
ValueDecoder(cut,
"VarRatioCrossedRowsFindable");
156 esdcuts->SetName(TString::Format(
"VarRatioCRFindableCut%04d", static_cast<int>(cutvalue * 10.)));
157 esdcuts->SetTitle(TString::Format(
"Default cuts - variation ratio crossed rows over findable cut at %f", cutvalue));
158 esdcuts->SetMinRatioCrossedRowsOverFindableClustersTPC(cutvalue);
159 trackcuts.Add(esdcuts);
161 if(cut.Contains(
"VarFractionTPCshared")){
162 double cutvalue =
ValueDecoder(cut,
"VarFractionTPCshared");
164 esdcuts->SetName(TString::Format(
"VarFractionTPCShared%04d", static_cast<int>(cutvalue * 10.)));
165 esdcuts->SetTitle(TString::Format(
"Default cuts - variation fraction TPC shared clusters %f", cutvalue));
166 esdcuts->SetMaxFractionSharedTPCClusters(cutvalue);
167 trackcuts.Add(esdcuts);
169 if(cut.Contains(
"VarTrackLengthDeadArea")){
170 double cutvalue =
ValueDecoder(cut,
"VarTrackLengthDeadArea");
172 esdcuts->SetName(TString::Format(
"VarTLDeadAreaCut%04d", static_cast<int>(cutvalue * 10.)));
173 esdcuts->SetTitle(TString::Format(
"Default cuts - variation track length dead area cut at %f", cutvalue));
174 esdcuts->SetCutGeoNcrNcl(cutvalue, 130., 1.5, 0.0, 0.0);
175 trackcuts.Add(esdcuts);
177 if(cut.Contains(
"VarTrackLengthTPCLength")){
178 double cutvalue =
ValueDecoder(cut,
"VarTrackLengthTPCLength");
180 esdcuts->SetName(TString::Format(
"VarTLTPCLengthCut%04d", static_cast<int>(cutvalue * 10.)));
181 esdcuts->SetTitle(TString::Format(
"Default cuts - variation track length TPC length cut at %f", cutvalue));
182 esdcuts->SetCutGeoNcrNcl(3., cutvalue, 1.5, 0.0, 0.0);
183 trackcuts.Add(esdcuts);
185 if(cut.Contains(
"VarSPDhit")){
188 if(TMath::Abs(cutvalue) > DBL_EPSILON){
189 esdcuts->SetName(
"VarSPDhitOn");
190 esdcuts->SetTitle(
"Default cuts - variation SPD hit requirement on");
192 esdcuts->SetName(
"VarSPDhitOff");
193 esdcuts->SetTitle(
"Default cuts - variation SPD hit requirement off");
194 esdcuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kOff);
196 trackcuts.Add(esdcuts);
203 if(cut.Contains(
"TestITSchi2")){
205 std::cout <<
"Using ITS chi2 cut variation: " << itscut << std::endl;
208 esdcuts->SetName(Form(
"TestITSchi2%d",
int(itscut*10.)));
209 esdcuts->SetTitle(Form(
"Loose track cuts, ITS chi2 var %.1f", itscut));
212 esdcuts->SetMaxChi2PerClusterITS(itscut);
214 esdcuts->SetMaxChi2TPCConstrainedGlobal(100);
215 trackcuts.Add(esdcuts);
217 if(cut.Contains(
"TestTPCchi2")){
219 std::cout <<
"Using TPC chi2 cut variation: " << tpccut << std::endl;
221 auto esdcuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(
false, 1);
222 esdcuts->SetName(Form(
"VarTPCchi2%d",
int(tpccut * 10.)));
223 esdcuts->SetTitle(Form(
"Loose track cuts, TPC chi2 var %.1f", tpccut));
226 esdcuts->SetMaxChi2PerClusterTPC(tpccut);
227 trackcuts.Add(esdcuts);
229 if(cut.Contains(
"TestTPCchi2Constrained")){
230 double tpcconstrainedcut =
ValueDecoder(cut,
"TestTPCchi2Constrained");
231 std::cout <<
"Using TPC chi2 constrained cut variation: " << tpcconstrainedcut << std::endl;
234 esdcuts->SetName(Form(
"VarTPCchi2constrained%d",
int(tpcconstrainedcut * 10.)));
235 esdcuts->SetTitle(Form(
"Loose track cuts, TPC constrained chi2 variation %f", tpcconstrainedcut));
238 esdcuts->SetMaxChi2TPCConstrainedGlobal(tpcconstrainedcut);
240 esdcuts->SetMaxChi2PerClusterITS(100);
241 trackcuts.Add(esdcuts);
243 if(cut.Contains(
"geo")){
245 geocuts->SetName(
"geocuts");
246 geocuts->SetTitle(
"TPC track length cut");
247 geocuts->SetMinTPCTrackLengthCut();
248 trackcuts.Add(geocuts);
260 for(
auto cutiter : cuts){
261 if(cutiter->IsA() == AliEMCalTriggerExtraCuts::Class()){
269 TString &cut =
static_cast<TObjString *
>(
c)->String();
270 if(cut ==
"standard"){
275 trackcuts.Add(extracuts);
282 if(cut ==
"hybrid2010_wNoRefit"){
285 if(cut ==
"hybrid2010_woNoRefit"){
288 if(cut ==
"hybrid2011_wNoRefit"){
291 if(cut ==
"hybrid2011_woNoRefit"){
298 trackcuts.Add(extracuts);
321 return isAOD ?
"caloClusters" :
"CaloClusters";
325 return isAOD ?
"tracks" :
"Tracks";
329 AliESDtrackCuts *esdcuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(
true, 1);
330 esdcuts->DefineHistograms(kRed);
331 esdcuts->SetCutGeoNcrNcl(3., 130., 1.5, 0.0, 0.0);
332 esdcuts->SetMaxDCAToVertexXYPtDep(
"0.0182+0.0350/pt^1.01");
333 esdcuts->SetMaxFractionSharedTPCClusters(0.4);
340 AliESDtrackCuts *esdcuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kFALSE);
341 esdcuts->SetMaxDCAToVertexXY(2.4);
342 esdcuts->SetMaxDCAToVertexZ(3.2);
343 esdcuts->SetDCAToVertex2D(kTRUE);
344 esdcuts->SetMaxChi2TPCConstrainedGlobal(36);
345 esdcuts->SetMaxFractionSharedTPCClusters(0.4);
351 Int_t position(cuttstring.Index(tag) + strlen(tag));
352 TString valuestring = cuttstring(position, 4);
353 Int_t value = valuestring.Atoi();
354 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.
Hybrid tracks using the 2011 definition including NoITSrefit tracks (ESD-only)
Hybrid tracks using the 2010 definition including NoITSrefit tracks (ESD-only)
static AliESDtrackCuts * GenerateLooseDCACutsESD()
Hybrid tracks using the 2010 definition excluding NoITSrefit tracks (ESD-only)
static TString GetDefTrackCutsPeriod()
void SetOfflineEnergyThreshold(EmcalTriggerClass trgcls, double threshold)
Specify threshold for a given offline trigger class.
Hybrid tracks using the 2011 definition excluding NoITSrefit tracks (ESD-only)
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.
Analysis of high- tracks in triggered events.
virtual void GenerateTrackCuts(ETrackFilterType_t type, const char *="")
Automatically generates track cuts depending on the requested type of filtering.
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.