, fGcutInvMass(0.05)\r
, fK0cutChi2NDF(10)\r
, fLcutChi2NDF(10)\r
+ , fUseExternalVertex(kFALSE)\r
+ , fDeleteVertex(kFALSE)\r
{\r
//\r
// Default constructor\r
, fGcutInvMass(0.05)\r
, fK0cutChi2NDF(10)\r
, fLcutChi2NDF(10)\r
+ , fUseExternalVertex(kFALSE)\r
+ , fDeleteVertex(kFALSE)\r
{\r
//\r
// Copy operator\r
target.fTPCchi2perCls = fTPCchi2perCls;\r
target.fTPCclsRatio = fTPCclsRatio;\r
target.fNoKinks = fNoKinks;\r
-\r
+ target.fUseExternalVertex = fUseExternalVertex; //added december 2nd 2011\r
+ target.fDeleteVertex = fDeleteVertex; //added december 2nd 2011\r
\r
// default gamma cuts values\r
target.fGcutChi2NDF = fGcutChi2NDF;\r
return kTRUE;\r
}\r
//____________________________________________________________________\r
-Bool_t AliESDv0KineCuts::V0CutsCommon(AliESDv0 * const v0) const \r
+Bool_t AliESDv0KineCuts::V0CutsCommon(const AliESDv0 * const v0) const \r
{\r
//\r
// V0 cuts common to all V0s\r
xpoint = - xpoint;\r
ypoint = - ypoint;\r
}\r
-\r
+ /* avoid self assignment\r
if(charge < 0){\r
xpoint = xpoint;\r
ypoint = ypoint;\r
}\r
+ */\r
}\r
if(b>0){\r
+ /* avoid self assignment\r
if(charge > 0){\r
xpoint = xpoint;\r
ypoint = ypoint;\r
}\r
-\r
+ */\r
if(charge < 0){\r
xpoint = - xpoint;\r
ypoint = - ypoint;\r
AliErrorClass("Invalid input event pointer");\r
return;\r
}\r
+if (fUseExternalVertex) return;\r
+else{\r
+ if(fPrimaryVertex && fDeleteVertex){\r
+ delete fPrimaryVertex;\r
+ fPrimaryVertex=0x0;\r
+ }\r
+ fPrimaryVertex = new AliKFVertex(*(fEvent->GetPrimaryVertex()));\r
+ fDeleteVertex=kTRUE;\r
+ }\r
+\r
+\r
\r
}\r
//____________________________________________________________________\r
//\r
// direct setter of ESD event\r
//\r
- if(event)\r
- fEvent = static_cast<AliESDEvent*>(event);\r
+\r
+ fEvent = dynamic_cast<AliESDEvent*>(event);\r
if(!fEvent){\r
AliErrorClass("Invalid input event pointer");\r
return;\r
}\r
+ \r
+ if (fUseExternalVertex) return;\r
+ else{\r
+ if(fPrimaryVertex && fDeleteVertex){\r
+ delete fPrimaryVertex;\r
+ fPrimaryVertex=0x0;\r
+ }\r
+ fPrimaryVertex = new AliKFVertex(*(fEvent->GetPrimaryVertex()));\r
+ fDeleteVertex=kTRUE;\r
+ }\r
+}\r
\r
+\r
+//________________________________________________________________\r
+void AliESDv0KineCuts::UseExternalVertex(Bool_t use_external){\r
+ //\r
+ // Reenable primary Vertex from ESD event\r
+ //\r
+ if (use_external) fUseExternalVertex =kTRUE;\r
+ else fUseExternalVertex =kFALSE;\r
}\r
+\r
+\r
+\r
+\r
//________________________________________________________________\r
void AliESDv0KineCuts::SetPrimaryVertex(AliKFVertex* const v){\r
//\r
// set the primary vertex of the event\r
//\r
- fPrimaryVertex = v;\r
+ if(fPrimaryVertex && fDeleteVertex){ \r
+ delete fPrimaryVertex;\r
+ fPrimaryVertex =0x0;\r
+ fDeleteVertex = kFALSE;\r
+ } \r
+ fUseExternalVertex=kTRUE; \r
+ fPrimaryVertex = v; // set primary Vertex\r
if(!fPrimaryVertex){\r
AliErrorClass("Failed to initialize the primary vertex");\r
return;\r
switch(mode){\r
case kPurity:\r
fMode = kPurity; // used to obtain highest purity possible - the efficiency may be low\r
+ break;\r
case kEffGamma:\r
fMode = kEffGamma; // used to obtain highes efficiency possible - the purity may be worse\r
+ break;\r
default:\r
AliError("V0 selection mode not recognozed, setting 'kPurity'");\r
fMode = kPurity;\r
switch(type){\r
case kPP:\r
fType = kPP; // cuts optimized for low multiplicity \r
+ break;\r
case kPbPb:\r
fType = kPbPb; // cuts optimized for high multiplicity\r
+ break;\r
}\r
\r
// setup the cut values for selected mode & type\r