]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG3/vertexingHF/AliRDHFCuts.cxx
Added some more scripts
[u/mrichter/AliRoot.git] / PWG3 / vertexingHF / AliRDHFCuts.cxx
index 785b1a4bce5f1a220e2ce95a070d78ec5a3a535e..3485e353c45bb9b731ae75c24922a3bb30870659 100644 (file)
@@ -41,6 +41,7 @@ AliAnalysisCuts(name,title),
 fMinVtxType(3),
 fMinVtxContr(1),
 fMaxVtxRedChi2(1e6),
+fMaxVtxZ(1e6),
 fMinSPDMultiplicity(0),
 fTriggerMask(0),
 fTrackCuts(0),
@@ -53,7 +54,14 @@ fnVarsForOpt(0),
 fVarsForOpt(0),
 fGlobalIndex(1),
 fCutsRD(0),
-fIsUpperCut(0)
+fIsUpperCut(0),
+fUsePID(kFALSE),
+fPidHF(0),
+fWhyRejection(0),
+fRemoveDaughtersFromPrimary(kFALSE),
+fOptPileup(0),
+fMinContrPileup(3),
+fMinDzPileup(0.6)
 {
   //
   // Default Constructor
@@ -65,6 +73,7 @@ AliRDHFCuts::AliRDHFCuts(const AliRDHFCuts &source) :
   fMinVtxType(source.fMinVtxType),
   fMinVtxContr(source.fMinVtxContr),
   fMaxVtxRedChi2(source.fMaxVtxRedChi2),
+  fMaxVtxZ(source.fMaxVtxZ),
   fMinSPDMultiplicity(source.fMinSPDMultiplicity),
   fTriggerMask(source.fTriggerMask),
   fTrackCuts(0),
@@ -77,7 +86,14 @@ AliRDHFCuts::AliRDHFCuts(const AliRDHFCuts &source) :
   fVarsForOpt(0),
   fGlobalIndex(source.fGlobalIndex),
   fCutsRD(0),
-  fIsUpperCut(0)
+  fIsUpperCut(0),
+  fUsePID(source.fUsePID),
+  fPidHF(0),
+  fWhyRejection(source.fWhyRejection),
+  fRemoveDaughtersFromPrimary(source.fRemoveDaughtersFromPrimary),
+  fOptPileup(source.fOptPileup),
+  fMinContrPileup(source.fMinContrPileup),
+  fMinDzPileup(source.fMinDzPileup)  
 {
   //
   // Copy constructor
@@ -88,6 +104,7 @@ AliRDHFCuts::AliRDHFCuts(const AliRDHFCuts &source) :
   if(source.fVarNames) SetVarNames(source.fnVars,source.fVarNames,source.fIsUpperCut);
   if(source.fCutsRD) SetCuts(source.fGlobalIndex,source.fCutsRD);
   if(source.fVarsForOpt) SetVarsForOpt(source.fnVarsForOpt,source.fVarsForOpt);
+  if(source.fPidHF) SetPidHF(source.fPidHF);
   PrintAll();
 
 }
@@ -104,12 +121,20 @@ AliRDHFCuts &AliRDHFCuts::operator=(const AliRDHFCuts &source)
   fMinVtxType=source.fMinVtxType;
   fMinVtxContr=source.fMinVtxContr;
   fMaxVtxRedChi2=source.fMaxVtxRedChi2;
+  fMaxVtxZ=source.fMaxVtxZ;
   fMinSPDMultiplicity=source.fMinSPDMultiplicity;
   fTriggerMask=source.fTriggerMask;
   fnPtBins=source.fnPtBins;
   fnVars=source.fnVars;
   fGlobalIndex=source.fGlobalIndex;
   fnVarsForOpt=source.fnVarsForOpt;
+  fUsePID=source.fUsePID;
+  SetPidHF(source.GetPidHF());
+  fWhyRejection=source.fWhyRejection;
+  fRemoveDaughtersFromPrimary=source.fRemoveDaughtersFromPrimary;
+  fOptPileup=source.fOptPileup;
+  fMinContrPileup=source.fMinContrPileup;
+  fMinDzPileup=source.fMinDzPileup;
 
   if(source.GetTrackCuts()) AddTrackCuts(source.GetTrackCuts());
   if(source.fPtBinLimits) SetPtBins(source.fnPtBinLimits,source.fPtBinLimits);
@@ -133,17 +158,24 @@ AliRDHFCuts::~AliRDHFCuts() {
     fCutsRD=0;
   }
   if(fIsUpperCut) {delete [] fIsUpperCut; fIsUpperCut=0;}
-
+  if(fPidHF){ 
+    delete fPidHF;
+    fPidHF=0;
+  }
 }
 //---------------------------------------------------------------------------
-Bool_t AliRDHFCuts::IsEventSelected(AliVEvent *event) const {
+Bool_t AliRDHFCuts::IsEventSelected(AliVEvent *event) {
   //
   // Event selection
   // 
   //if(fTriggerMask && event->GetTriggerMask()!=fTriggerMask) return kFALSE;
 
+  fWhyRejection=0;
+
   // multiplicity cuts no implemented yet
 
+
+
   const AliVVertex *vertex = event->GetPrimaryVertex();
 
   if(!vertex) return kFALSE;
@@ -154,6 +186,25 @@ Bool_t AliRDHFCuts::IsEventSelected(AliVEvent *event) const {
 
   if(vertex->GetNContributors()<fMinVtxContr) return kFALSE; 
 
+  if(TMath::Abs(vertex->GetZ())>fMaxVtxZ) return kFALSE;
+
+  // switch to settings for 1-pad cls in TPC
+  if(fPidHF) {
+    if(event->GetRunNumber()>121693 && event->GetRunNumber()<136851) 
+      fPidHF->SetOnePad(kTRUE);
+    if(event->GetRunNumber()>=136851 && event->GetRunNumber()<=139517) 
+      fPidHF->SetPbPb(kTRUE);
+  }
+
+  if(fOptPileup==kRejectPileupEvent){
+    Int_t cutc=(Int_t)fMinContrPileup;
+    Double_t cutz=(Double_t)fMinDzPileup;
+    if(event->IsPileupFromSPD(cutc,cutz,3.,2.,10.)) {
+      fWhyRejection=1;
+      return kFALSE;
+    }
+  }
+
   return kTRUE;
 }
 //---------------------------------------------------------------------------
@@ -164,12 +215,11 @@ Bool_t AliRDHFCuts::AreDaughtersSelected(AliAODRecoDecayHF *d) const {
   if(!fTrackCuts) return kTRUE;
 
   Int_t ndaughters = d->GetNDaughters();
-  AliESDtrack* esdTrack=0;
   AliAODVertex *vAOD = d->GetPrimaryVtx();
   Double_t pos[3],cov[6];
   vAOD->GetXYZ(pos);
   vAOD->GetCovarianceMatrix(cov);
-  const AliESDVertex *vESD = new AliESDVertex(pos,cov,100.,100);
+  const AliESDVertex vESD(pos,cov,100.,100);
 
   Bool_t retval=kTRUE;
 
@@ -178,19 +228,35 @@ Bool_t AliRDHFCuts::AreDaughtersSelected(AliAODRecoDecayHF *d) const {
     if(!dgTrack) retval = kFALSE;
     //printf("charge %d\n",dgTrack->Charge());
     if(dgTrack->Charge()==0) continue; // it's not a track, but a V0
-    // convert to ESD track here
-    esdTrack=new AliESDtrack(dgTrack);
-    // needed to calculate the impact parameters
-    esdTrack->RelateToVertex(vESD,0.,3.); 
-    if(!fTrackCuts->IsSelected(esdTrack)) retval = kFALSE;
-    delete esdTrack; esdTrack=0;
-  }
 
-  delete vESD; vESD=0;
+    if(!IsDaughterSelected(dgTrack,&vESD,fTrackCuts)) retval = kFALSE;
+  }
 
   return retval;
 }
 //---------------------------------------------------------------------------
+Bool_t AliRDHFCuts::IsDaughterSelected(AliAODTrack *track,const AliESDVertex *primary,AliESDtrackCuts *cuts) const {
+  //
+  // Convert to ESDtrack, relate to vertex and check cuts
+  //
+  if(!cuts) return kTRUE;
+
+  Bool_t retval=kTRUE;
+
+  // convert to ESD track here
+  AliESDtrack esdTrack(track);
+  // needed to calculate the impact parameters
+  esdTrack.RelateToVertex(primary,0.,3.); 
+  if(!cuts->IsSelected(&esdTrack)) retval = kFALSE;
+  if(fOptPileup==kRejectTracksFromPileupVertex){
+    // to be implemented
+    // we need either to have here the AOD Event, 
+    // or to have the pileup vertex object
+  }
+  return retval; 
+}
+//---------------------------------------------------------------------------
 void AliRDHFCuts::SetPtBins(Int_t nPtBinLimits,Float_t *ptBinLimits) {
   // Set the pt bins
 
@@ -207,7 +273,7 @@ void AliRDHFCuts::SetPtBins(Int_t nPtBinLimits,Float_t *ptBinLimits) {
 
   fnPtBinLimits = nPtBinLimits;
   SetGlobalIndex();
-  cout<<"Changing also Global Index -> "<<fGlobalIndex<<endl;
+  //cout<<"Changing also Global Index -> "<<fGlobalIndex<<endl;
   fPtBinLimits = new Float_t[fnPtBinLimits];
   for(Int_t ib=0; ib<nPtBinLimits; ib++) fPtBinLimits[ib]=ptBinLimits[ib];
 
@@ -220,7 +286,7 @@ void AliRDHFCuts::SetVarNames(Int_t nVars,TString *varNames,Bool_t *isUpperCut){
   if(fVarNames) {
     delete [] fVarNames;
     fVarNames = NULL;
-    printf("Changing the variable names\n");
+    //printf("Changing the variable names\n");
   }
   if(nVars!=fnVars){
     printf("Wrong number of variables: it has to be %d\n",fnVars);
@@ -243,7 +309,7 @@ void AliRDHFCuts::SetVarsForOpt(Int_t nVars,Bool_t *forOpt) {
   if(fVarsForOpt) {
     delete [] fVarsForOpt;
     fVarsForOpt = NULL;
-    printf("Changing the variables for cut optimization\n");
+    //printf("Changing the variables for cut optimization\n");
   }
   
   if(nVars==0){//!=fnVars) {
@@ -314,6 +380,14 @@ void AliRDHFCuts::PrintAll() const {
   //
   // print all cuts values
   // 
+
+  printf("Minimum vtx type %d\n",fMinVtxType);
+  printf("Minimum vtx contr %d\n",fMinVtxContr);
+  printf("Max vtx red chi2 %f\n",fMaxVtxRedChi2);
+  printf("Min SPD mult %d\n",fMinSPDMultiplicity);
+  printf("Use PID %d\n",(Int_t)fUsePID);
+  printf("Remove daughters from vtx %d\n",(Int_t)fRemoveDaughtersFromPrimary);
+
   if(fVarNames){
     cout<<"Array of variables"<<endl;
     for(Int_t iv=0;iv<fnVars;iv++){
@@ -424,4 +498,81 @@ Float_t AliRDHFCuts::GetCutValue(Int_t iVar,Int_t iPtBin) const {
   }
   return fCutsRD[GetGlobalIndex(iVar,iPtBin)];
 }
+//-------------------------------------------------------------------
+Bool_t AliRDHFCuts::CompareCuts(const AliRDHFCuts *obj) const {
+  //
+  // Compare two cuts objects
+  //
 
+  Bool_t areEqual=kTRUE;
+
+  if(fMinVtxType!=obj->fMinVtxType) { printf("Minimum vtx type %d  %d\n",fMinVtxType,obj->fMinVtxType); areEqual=kFALSE;}
+
+  if(fMinVtxContr!=obj->fMinVtxContr) { printf("Minimum vtx contr %d  %d\n",fMinVtxContr,obj->fMinVtxContr); areEqual=kFALSE;}
+
+  if(TMath::Abs(fMaxVtxRedChi2-obj->fMaxVtxRedChi2)>1.e-10) {   printf("Max vtx red chi2 %f  %f\n",fMaxVtxRedChi2,obj->fMaxVtxRedChi2);areEqual=kFALSE;}
+
+  if(fMinSPDMultiplicity!=obj->fMinSPDMultiplicity) {  printf("Min SPD mult %d\n  %d",fMinSPDMultiplicity,obj->fMinSPDMultiplicity);areEqual=kFALSE;}
+
+  if(fUsePID!=obj->fUsePID) { printf("Use PID %d  %d\n",(Int_t)fUsePID,(Int_t)obj->fUsePID); areEqual=kFALSE;}
+
+  if(fRemoveDaughtersFromPrimary!=obj->fRemoveDaughtersFromPrimary) {printf("Remove daughters from vtx %d  %d\n",(Int_t)fRemoveDaughtersFromPrimary,(Int_t)obj->fRemoveDaughtersFromPrimary); areEqual=kFALSE;}
+  if(fTrackCuts){
+    if(fTrackCuts->GetMinNClusterTPC()!=obj->fTrackCuts->GetMinNClusterTPC()) {printf("MinNClsTPC %d  %d\n",fTrackCuts->GetMinNClusterTPC(),obj->fTrackCuts->GetMinNClusterTPC()); areEqual=kFALSE;}
+
+    if(fTrackCuts->GetMinNClustersITS()!=obj->fTrackCuts->GetMinNClustersITS()) {printf("MinNClsITS %d  %d\n",fTrackCuts->GetMinNClustersITS(),obj->fTrackCuts->GetMinNClustersITS()); areEqual=kFALSE;}
+
+    if(TMath::Abs(fTrackCuts->GetMaxChi2PerClusterTPC()-obj->fTrackCuts->GetMaxChi2PerClusterTPC())>1.e-10) {printf("MaxChi2ClsTPC %f  %f\n",fTrackCuts->GetMaxChi2PerClusterTPC(),obj->fTrackCuts->GetMaxChi2PerClusterTPC()); areEqual=kFALSE;}
+
+    if(fTrackCuts->GetClusterRequirementITS(AliESDtrackCuts::kSPD)!=obj->fTrackCuts->GetClusterRequirementITS(AliESDtrackCuts::kSPD)) {printf("ClusterReq SPD %d  %d\n",fTrackCuts->GetClusterRequirementITS(AliESDtrackCuts::kSPD),obj->fTrackCuts->GetClusterRequirementITS(AliESDtrackCuts::kSPD)); areEqual=kFALSE;}
+  }
+
+  if(fCutsRD) {
+   for(Int_t iv=0;iv<fnVars;iv++) {
+     for(Int_t ib=0;ib<fnPtBins;ib++) {
+       if(TMath::Abs(fCutsRD[GetGlobalIndex(iv,ib)]-obj->fCutsRD[GetGlobalIndex(iv,ib)])>1.e-10) {
+        cout<<"fCutsRD["<<iv<<"]["<<ib<<"] = "<<fCutsRD[GetGlobalIndex(iv,ib)]<<"   "<<obj->fCutsRD[GetGlobalIndex(iv,ib)]<<"\n";
+        areEqual=kFALSE;
+       }
+     }
+   }
+  }
+
+  return areEqual;
+}
+//---------------------------------------------------------------------------
+void AliRDHFCuts::MakeTable() const {
+  //
+  // print cuts values in table format
+  // 
+
+       TString ptString = "pT range";
+       if(fVarNames && fPtBinLimits && fCutsRD){
+               TString firstLine(Form("*       %-15s",ptString.Data()));
+               for (Int_t ivar=0; ivar<fnVars; ivar++){
+                       firstLine+=Form("*    %-15s  ",fVarNames[ivar].Data());
+                       if (ivar == fnVars){
+                               firstLine+="*\n";
+                       }
+               }
+               Printf("%s",firstLine.Data());
+               
+               for (Int_t ipt=0; ipt<fnPtBins; ipt++){
+                       TString line;
+                       if (ipt==fnPtBins-1){
+                               line=Form("*  %5.1f < pt < inf    ",fPtBinLimits[ipt]);
+                       }
+                       else{
+                               line=Form("*  %5.1f < pt < %4.1f   ",fPtBinLimits[ipt],fPtBinLimits[ipt+1]);
+                       }
+                       for (Int_t ivar=0; ivar<fnVars; ivar++){
+                               line+=Form("*     %-15f ",fCutsRD[GetGlobalIndex(ivar,ipt)]);
+                       }
+                       Printf("%s",line.Data());
+               }
+
+       }
+
+
+  return;
+}