34 #include <TObjArray.h> 35 #include <TObjString.h> 38 #include "AliAODTrack.h" 39 #include "AliESDtrackCuts.h" 55 std::unique_ptr<TObjArray> cuts(cutstring.Tokenize(
","));
56 std::cout <<
"Creating track cuts for " << (aod ?
"AODs" :
"ESDs") << std::endl;
60 TString &cut =
static_cast<TObjString *
>(
c)->String();
61 if(cut ==
"standard"){
63 esdcuts->SetName(
"standardRAA");
64 esdcuts->SetTitle(
"Standard Track cuts");
65 trackcuts.Add(esdcuts);
67 if(cut ==
"standardcrossedrows"){
68 auto esdcuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(
true, 1);
69 esdcuts->DefineHistograms(kRed);
70 esdcuts->SetName(
"standardRAA");
71 esdcuts->SetTitle(
"Standard Track cuts");
72 esdcuts->SetMinNCrossedRowsTPC(120);
73 esdcuts->SetMaxDCAToVertexXYPtDep(
"0.0182+0.0350/pt^1.01");
74 trackcuts.Add(esdcuts);
77 std::cout <<
"Configuring standard hybrid track cuts" << std::endl;
79 esdcuts->SetTitle(
"hybridglobal");
80 esdcuts->SetTitle(
"Global Hybrid tracks, loose DCA");
81 trackcuts.Add(esdcuts);
83 if(cut ==
"hybrid2010_wNoRefit"){
84 std::cout <<
"Configuring hybrid track cuts 2010, including non-ITSrefit tracks" << std::endl;
85 auto hybridcuts =
new PWG::EMCAL::AliEmcalESDHybridTrackCuts(
"2010_wNoRefit", PWG::EMCAL::AliEmcalESDHybridTrackCuts::kDef2010);
86 hybridcuts->SetUseNoITSrefitTracks(kTRUE);
87 trackcuts.Add(hybridcuts);
89 if(cut ==
"hybrid2010_woNoRefit"){
90 std::cout <<
"Configuring hybrid track cuts 2010, excluding non-ITSrefit tracks" << std::endl;
91 auto hybridcuts =
new PWG::EMCAL::AliEmcalESDHybridTrackCuts(
"2010_woNoRefit", PWG::EMCAL::AliEmcalESDHybridTrackCuts::kDef2010);
92 hybridcuts->SetUseNoITSrefitTracks(kFALSE);
93 trackcuts.Add(hybridcuts);
95 if(cut ==
"hybrid2011_wNoRefit"){
96 std::cout <<
"Configuring hybrid track cuts 2011, including non-ITSrefit tracks" << std::endl;
97 auto hybridcuts =
new PWG::EMCAL::AliEmcalESDHybridTrackCuts(
"2011_wNoRefit", PWG::EMCAL::AliEmcalESDHybridTrackCuts::kDef2011);
98 hybridcuts->SetUseNoITSrefitTracks(kTRUE);
99 trackcuts.Add(hybridcuts);
101 if(cut ==
"hybrid2011_woNoRefit"){
102 std::cout <<
"Configuring hybrid track cuts 2011, excluding non-ITSrefit tracks" << std::endl;
103 auto hybridcuts =
new PWG::EMCAL::AliEmcalESDHybridTrackCuts(
"2011_woNoRefit", PWG::EMCAL::AliEmcalESDHybridTrackCuts::kDef2011);
104 hybridcuts->SetUseNoITSrefitTracks(kFALSE);
105 trackcuts.Add(hybridcuts);
113 if(cut.Contains(
"VarITSchi2")){
116 esdcuts->SetName(TString::Format(
"VarITSchi2Cut%04d", static_cast<int>(cutvalue * 10.)));
117 esdcuts->SetTitle(TString::Format(
"Default cuts - variation ITS chi2 cut at %f", cutvalue));
118 esdcuts->SetMaxChi2PerClusterITS(cutvalue);
119 trackcuts.Add(esdcuts);
121 if(cut.Contains(
"VarTPCchi2") && !cut.Contains(
"Constrained")){
124 esdcuts->SetName(TString::Format(
"VarTPCchi2Cut%04d", static_cast<int>(cutvalue * 10.)));
125 esdcuts->SetTitle(TString::Format(
"Default cuts - variation TPC chi2 cut at %f", cutvalue));
126 esdcuts->SetMaxChi2PerClusterTPC(cutvalue);
127 trackcuts.Add(esdcuts);
129 if(cut.Contains(
"VarTPCchi2Constrained")){
130 double cutvalue =
ValueDecoder(cut,
"VarTPCchi2Constrained");
132 esdcuts->SetName(TString::Format(
"VarTPCchi2ConstrainedCut%04d", static_cast<int>(cutvalue * 10.)));
133 esdcuts->SetTitle(TString::Format(
"Default cuts - variation TPC chi2 constrained cut at %f", cutvalue));
134 esdcuts->SetMaxChi2TPCConstrainedGlobal(cutvalue);
135 trackcuts.Add(esdcuts);
137 if(cut.Contains(
"VarDCAz")){
140 esdcuts->SetName(TString::Format(
"VarDCAzCut%04d", static_cast<int>(cutvalue * 10.)));
141 esdcuts->SetTitle(TString::Format(
"Default cuts - variation DCAz cut at %f", cutvalue));
142 esdcuts->SetMaxDCAToVertexZ(cutvalue);
143 trackcuts.Add(esdcuts);
145 if(cut.Contains(
"VarDCAr")){
147 double p1 = cutvalue * 0.0026, p2 = cutvalue * 0.005;
149 esdcuts->SetName(TString::Format(
"VarDCArCut%04d", static_cast<int>(cutvalue * 10.)));
150 esdcuts->SetTitle(TString::Format(
"Default cuts - variation DCAr cut at %f sigma", cutvalue));
151 esdcuts->SetMaxDCAToVertexXYPtDep(TString::Format(
"%f + %f/pt^1.01", p1, p2));
152 trackcuts.Add(esdcuts);
154 if(cut.Contains(
"VarRatioCrossedRowsFindable")){
155 double cutvalue =
ValueDecoder(cut,
"VarRatioCrossedRowsFindable");
157 esdcuts->SetName(TString::Format(
"VarRatioCRFindableCut%04d", static_cast<int>(cutvalue * 10.)));
158 esdcuts->SetTitle(TString::Format(
"Default cuts - variation ratio crossed rows over findable cut at %f", cutvalue));
159 esdcuts->SetMinRatioCrossedRowsOverFindableClustersTPC(cutvalue);
160 trackcuts.Add(esdcuts);
162 if(cut.Contains(
"VarFractionTPCshared")){
163 double cutvalue =
ValueDecoder(cut,
"VarFractionTPCshared");
165 esdcuts->SetName(TString::Format(
"VarFractionTPCShared%04d", static_cast<int>(cutvalue * 10.)));
166 esdcuts->SetTitle(TString::Format(
"Default cuts - variation fraction TPC shared clusters %f", cutvalue));
167 esdcuts->SetMaxFractionSharedTPCClusters(cutvalue);
168 trackcuts.Add(esdcuts);
170 if(cut.Contains(
"VarTrackLengthDeadArea")){
171 double cutvalue =
ValueDecoder(cut,
"VarTrackLengthDeadArea");
173 esdcuts->SetName(TString::Format(
"VarTLDeadAreaCut%04d", static_cast<int>(cutvalue * 10.)));
174 esdcuts->SetTitle(TString::Format(
"Default cuts - variation track length dead area cut at %f", cutvalue));
175 esdcuts->SetCutGeoNcrNcl(cutvalue, 130., 1.5, 0.0, 0.0);
176 trackcuts.Add(esdcuts);
178 if(cut.Contains(
"VarTrackLengthTPCLength")){
179 double cutvalue =
ValueDecoder(cut,
"VarTrackLengthTPCLength");
181 esdcuts->SetName(TString::Format(
"VarTLTPCLengthCut%04d", static_cast<int>(cutvalue * 10.)));
182 esdcuts->SetTitle(TString::Format(
"Default cuts - variation track length TPC length cut at %f", cutvalue));
183 esdcuts->SetCutGeoNcrNcl(3., cutvalue, 1.5, 0.0, 0.0);
184 trackcuts.Add(esdcuts);
186 if(cut.Contains(
"VarSPDhit")){
189 if(TMath::Abs(cutvalue) > DBL_EPSILON){
190 esdcuts->SetName(
"VarSPDhitOn");
191 esdcuts->SetTitle(
"Default cuts - variation SPD hit requirement on");
193 esdcuts->SetName(
"VarSPDhitOff");
194 esdcuts->SetTitle(
"Default cuts - variation SPD hit requirement off");
195 esdcuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kOff);
197 trackcuts.Add(esdcuts);
204 if(cut.Contains(
"TestITSchi2")){
206 std::cout <<
"Using ITS chi2 cut variation: " << itscut << std::endl;
209 esdcuts->SetName(Form(
"TestITSchi2%d",
int(itscut*10.)));
210 esdcuts->SetTitle(Form(
"Loose track cuts, ITS chi2 var %.1f", itscut));
213 esdcuts->SetMaxChi2PerClusterITS(itscut);
215 esdcuts->SetMaxChi2TPCConstrainedGlobal(100);
216 trackcuts.Add(esdcuts);
218 if(cut.Contains(
"TestTPCchi2")){
220 std::cout <<
"Using TPC chi2 cut variation: " << tpccut << std::endl;
222 auto esdcuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(
false, 1);
223 esdcuts->SetName(Form(
"VarTPCchi2%d",
int(tpccut * 10.)));
224 esdcuts->SetTitle(Form(
"Loose track cuts, TPC chi2 var %.1f", tpccut));
227 esdcuts->SetMaxChi2PerClusterTPC(tpccut);
228 trackcuts.Add(esdcuts);
230 if(cut.Contains(
"TestTPCchi2Constrained")){
231 double tpcconstrainedcut =
ValueDecoder(cut,
"TestTPCchi2Constrained");
232 std::cout <<
"Using TPC chi2 constrained cut variation: " << tpcconstrainedcut << std::endl;
235 esdcuts->SetName(Form(
"VarTPCchi2constrained%d",
int(tpcconstrainedcut * 10.)));
236 esdcuts->SetTitle(Form(
"Loose track cuts, TPC constrained chi2 variation %f", tpcconstrainedcut));
239 esdcuts->SetMaxChi2TPCConstrainedGlobal(tpcconstrainedcut);
241 esdcuts->SetMaxChi2PerClusterITS(100);
242 trackcuts.Add(esdcuts);
244 if(cut.Contains(
"geo")){
246 geocuts->SetName(
"geocuts");
247 geocuts->SetTitle(
"TPC track length cut");
248 geocuts->SetMinTPCTrackLengthCut();
249 trackcuts.Add(geocuts);
261 for(
auto cutiter : cuts){
262 if(cutiter->IsA() == AliEMCalTriggerExtraCuts::Class()){
270 TString &cut =
static_cast<TObjString *
>(
c)->String();
271 if(cut ==
"standard"){
273 filterbitcuts->SetFilterBits(AliAODTrack::kTrkGlobal);
274 std::cout <<
"Adding standard global track cuts" << std::endl;
275 trackcuts.Add(filterbitcuts);
280 trackcuts.Add(crossedrowcut);
287 if(cut ==
"hybrid2010_wNoRefit"){
290 if(cut ==
"hybrid2010_woNoRefit"){
293 if(cut ==
"hybrid2011_wNoRefit"){
296 if(cut ==
"hybrid2011_woNoRefit"){
303 trackcuts.Add(geocuts);
326 return isAOD ?
"caloClusters" :
"CaloClusters";
330 return isAOD ?
"tracks" :
"Tracks";
334 AliESDtrackCuts *esdcuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(
true, 1);
335 esdcuts->DefineHistograms(kRed);
336 esdcuts->SetCutGeoNcrNcl(3., 130., 1.5, 0.0, 0.0);
337 esdcuts->SetMaxDCAToVertexXYPtDep(
"0.0182+0.0350/pt^1.01");
338 esdcuts->SetMaxFractionSharedTPCClusters(0.4);
345 AliESDtrackCuts *esdcuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kFALSE);
346 esdcuts->SetMaxDCAToVertexXY(2.4);
347 esdcuts->SetMaxDCAToVertexZ(3.2);
348 esdcuts->SetDCAToVertex2D(kTRUE);
349 esdcuts->SetMaxChi2TPCConstrainedGlobal(36);
350 esdcuts->SetMaxFractionSharedTPCClusters(0.4);
356 Int_t position(cuttstring.Index(tag) + strlen(tag));
357 TString valuestring = cuttstring(position, 4);
358 Int_t value = valuestring.Atoi();
359 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...
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.
Implementation of the AOD filter bit selection as virtual cut class.
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.