ClassImp(AliRsnCutPrimaryVertex)
-//_________________________________________________________________________________________________
-AliRsnCutPrimaryVertex::AliRsnCutPrimaryVertex() :
- AliRsnCut(AliRsnCut::kEvent),
- fAcceptTPC(kFALSE)
-{
-//
-// Default constructor.
-//
-}
-
//_________________________________________________________________________________________________
AliRsnCutPrimaryVertex::AliRsnCutPrimaryVertex
(const char *name, Double_t maxVz, Int_t nContributors, Bool_t acceptTPC) :
- AliRsnCut(name, AliRsnCut::kEvent, 0, nContributors - 1),
- fAcceptTPC(acceptTPC)
+ AliRsnCut(name, AliRsnCut::kEvent, 0, nContributors - 1, 0.0, maxVz),
+ fAcceptTPC(acceptTPC),
+ fCheckPileUp(kFALSE)
{
//
// Main constructor.
}
//_________________________________________________________________________________________________
-Bool_t AliRsnCutPrimaryVertex::IsSelected(TObject *obj1, TObject* /*obj2*/)
+Bool_t AliRsnCutPrimaryVertex::IsSelected(TObject *object)
{
//
// Cut checker
//
-
- static Int_t evNum = 0;
- evNum++;
// retrieve ESD event
- AliRsnEvent *rsn = dynamic_cast<AliRsnEvent*>(obj1);
+ AliRsnEvent *rsn = dynamic_cast<AliRsnEvent*>(object);
if (!rsn) return kFALSE;
- AliESDEvent *esd = dynamic_cast<AliESDEvent*>(rsn->GetRef());
- AliAODEvent *aod = dynamic_cast<AliAODEvent*>(rsn->GetRef());
+ AliESDEvent *esd = rsn->GetRefESD();
+ AliAODEvent *aod = rsn->GetRefAOD();
if (esd)
{
+ // pile-up check
+ if (fCheckPileUp)
+ {
+ if (esd->IsPileupFromSPD()) return kFALSE;
+ }
+
// get the best primary vertex:
// first try the one with tracks
const AliESDVertex *vTrk = esd->GetPrimaryVertexTracks();
Int_t ncTrk = -1;
Int_t ncSPD = -1;
Int_t ncTPC = -1;
- Double_t vzTrk = 2.0 * fMaxD;
- Double_t vzSPD = 2.0 * fMaxD;
- Double_t vzTPC = 2.0 * fMaxD;
+ Double_t vzTrk = 1000000.0;
+ Double_t vzSPD = 1000000.0;
+ Double_t vzTPC = 1000000.0;
if (vTrk) vzTrk = TMath::Abs(vTrk->GetZv());
if (vSPD) vzSPD = TMath::Abs(vSPD->GetZv());
if (vTPC) vzTPC = TMath::Abs(vTPC->GetZv());
fCutValueI = ncSPD;
fCutValueD = vzSPD;
}
- else if (vTPC && fAcceptTPC && ncTPC > 0)
+ else if (vTPC && ncTPC > 0)
{
- fCutValueI = ncTPC;
- fCutValueD = vzTPC;
+ if (!fAcceptTPC)
+ return kFALSE;
+ else
+ {
+ fCutValueI = ncTPC;
+ fCutValueD = vzTPC;
+ }
}
else
- {
- fCutValueI = -1;
- fCutValueD = 2.0 * fMaxD;
- }
+ return kFALSE;
}
else if (aod)
{
+ // pile-up check is not yet available for AODs
+
// lines suggested by Andrea to reject TPC-only events
- if(!aod->GetPrimaryVertexSPD()) return kFALSE;
- if(aod->GetPrimaryVertexSPD()->GetNContributors() < 1) return kFALSE;
+ if(!fAcceptTPC)
+ {
+ if (!aod->GetPrimaryVertexSPD()) return kFALSE;
+ else if(aod->GetPrimaryVertexSPD()->GetNContributors() < 1) return kFALSE;
+ }
AliAODVertex *prim = (AliAODVertex*)aod->GetPrimaryVertex();
+ if (!prim) return kFALSE;
+
fCutValueI = prim->GetNContributors();
fCutValueD = prim->GetZ();
}
return result;
}
+//_________________________________________________________________________________________________
+void AliRsnCutPrimaryVertex::Print(const Option_t *) const
+{
+//
+// Print information on this cut
+//
+
+ AliInfo(Form("Cut name : %s", GetName()));
+ AliInfo(Form("Accepting TPC primary vertex : %s", (fAcceptTPC ? "YES" : "NO")));
+ AliInfo(Form("Contributors range (outside) : %d - %d", fMinI, fMaxI));
+ AliInfo(Form("Z-vertex range (inside) : %f - %f", fMinD, fMaxD));
+}