]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
adding a histo to track cuts
authorslindal <slindal@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 23 Feb 2012 17:04:24 +0000 (17:04 +0000)
committerslindal <slindal@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 23 Feb 2012 17:04:24 +0000 (17:04 +0000)
PWGGA/GammaConv/AliAnalysisTaskdPhi.cxx
PWGGA/GammaConv/ConvCorrelations/AliConversionTrackCuts.cxx
PWGGA/GammaConv/ConvCorrelations/AliConversionTrackCuts.h

index 740576afd828267ef689fa8b930f7f1fa747cf90..60e2ae5f7011f90e3ea1aef404c056e907860567 100644 (file)
@@ -238,6 +238,8 @@ void AliAnalysisTaskdPhi::UserCreateOutputObjects() {
   }
   
 
+  fHistograms->Add(fTrackCuts.CreateHistograms());
+
   SetUpCorrObjects();
 
 
index be33bb477574b0032c99968544f2db9118dfdb4d..abc03c54b1700b6399c3057b51b45375a898f3aa 100644 (file)
@@ -23,6 +23,7 @@
 #include "AliAODEvent.h"
 #include <TFormula.h>
 #include <iostream>
+#include "TH2F.h"
 
 
 using namespace std;
@@ -45,7 +46,9 @@ AliAnalysisCuts(),
   fITSmaxChi2(1E20),
   fTPCminNClusters(0),
   fTPCmaxChi2(1E20),
-  fAODTestFilterBit(-1)
+  fAODTestFilterBit(-1),
+  fhPhi(NULL),
+  fHistograms(NULL)
 {
   //Constructor
 }
@@ -66,17 +69,41 @@ AliConversionTrackCuts::AliConversionTrackCuts(TString name, TString title = "ti
   fITSmaxChi2(1E20),
   fTPCminNClusters(0),
   fTPCmaxChi2(1E20),
-  fAODTestFilterBit(-1)
-
+  fAODTestFilterBit(-1),
+  fhPhi(NULL),
+  fHistograms(NULL)
 {
   //Constructor
 }
 
 
 //________________________________________________________________________________
-// AliConversionTrackCuts::~AliConversionTrackCuts() {
-//   ///destructor
-// }
+ AliConversionTrackCuts::~AliConversionTrackCuts() {
+   ///destructor
+   // if(fHistograms)
+   //   delete fHistograms;
+   // fHistograms = NULL;
+
+}
+
+TList * AliConversionTrackCuts::CreateHistograms() {
+
+  if(!fHistograms) fHistograms = new TList();
+
+  fHistograms->SetOwner(kTRUE);
+  fHistograms->SetName("trackCuts");
+
+  fhPhi = new TH2F("phi", "phi", 20, -0.5, 19.5, 64, 0, TMath::TwoPi());
+  fHistograms->Add(fhPhi);
+
+  return fHistograms;
+}
+
+
+void AliConversionTrackCuts::FillHistograms(Int_t cutIndex, AliVTrack * track) {
+  
+  fhPhi->Fill(cutIndex, track->Phi());
+}
 
 Bool_t AliConversionTrackCuts::AcceptTrack(AliAODTrack * track, AliAODEvent * aodEvent) {
   // Check an AOD track.
@@ -92,99 +119,128 @@ Bool_t AliConversionTrackCuts::AcceptTrack(AliAODTrack * track, AliAODEvent * ao
    //    return kFALSE;
    // }
 
-
-   // step #0: check SPD and ITS clusters
-   Int_t nSPD = 0;
-   nSPD  = TESTBIT(track->GetITSClusterMap(), 0);
-   nSPD += TESTBIT(track->GetITSClusterMap(), 1);
-   if (nSPD < fSPDminNClusters) {
-      AliDebug(AliLog::kDebug + 2, "Not enough SPD clusters in this track. Rejected");
-      return kFALSE;
-   }
-
-   // step #1: check number of clusters in TPC
-   if (track->GetTPCNcls() < fTPCminNClusters) {
-      AliDebug(AliLog::kDebug + 2, "Too few TPC clusters. Rejected");
-      return kFALSE;
-   }
-
-   if (track->GetITSNcls() < fITSminNClusters) {
-      AliDebug(AliLog::kDebug + 2, "Too few ITS clusters. Rejected");
-      return kFALSE;
-   }
-   // step #2: check chi square
-   if (track->Chi2perNDF() > fTPCmaxChi2) {
-      AliDebug(AliLog::kDebug + 2, "Bad chi2. Rejected");
-      return kFALSE;
-   }
-
-   if (track->Chi2perNDF() > fITSmaxChi2) {
-      AliDebug(AliLog::kDebug + 2, "Bad chi2. Rejected");
-      return kFALSE;
-   }
+  Int_t cutIndex = 0;
+  
+  FillHistograms(cutIndex, track);
+  cutIndex++;
+  // step #0: check SPD and ITS clusters
+  Int_t nSPD = 0;
+  nSPD  = TESTBIT(track->GetITSClusterMap(), 0);
+  nSPD += TESTBIT(track->GetITSClusterMap(), 1);
+  if (nSPD < fSPDminNClusters) {
+  FillHistograms(cutIndex, track);
+       AliDebug(AliLog::kDebug + 2, "Not enough SPD clusters in this track. Rejected");
+       return kFALSE;
+  }
+  cutIndex++;
+  
+  // step #1: check number of clusters in TPC
+  if (track->GetTPCNcls() < fTPCminNClusters) {
+  FillHistograms(cutIndex, track);
+       AliDebug(AliLog::kDebug + 2, "Too few TPC clusters. Rejected");
+       return kFALSE;
+  }
+  cutIndex++;
+  
+  if (track->GetITSNcls() < fITSminNClusters) {
+  FillHistograms(cutIndex, track);
+       AliDebug(AliLog::kDebug + 2, "Too few ITS clusters. Rejected");
+       return kFALSE;
+  }
+  cutIndex++;
+  
+  // step #2: check chi square
+  if (track->Chi2perNDF() > fTPCmaxChi2) {
+  FillHistograms(cutIndex, track);
+       AliDebug(AliLog::kDebug + 2, "Bad chi2. Rejected");
+       return kFALSE;
+  }
+  cutIndex++;
+
+  if (track->Chi2perNDF() > fITSmaxChi2) {
+  FillHistograms(cutIndex, track);
+       AliDebug(AliLog::kDebug + 2, "Bad chi2. Rejected");
+       return kFALSE;
+  }
+  cutIndex++;
 
 
    // step #3: reject kink daughters
    AliAODVertex *vertex = track->GetProdVertex();
    if (vertex && fRejectKinkDaughters) {
       if (vertex->GetType() == AliAODVertex::kKink) {
+  FillHistograms(cutIndex, track);
          AliDebug(AliLog::kDebug + 2, "Kink daughter. Rejected");
          return kFALSE;
       }
    }
+  cutIndex++;
 
 
    // step #4: DCA cut (transverse)
    Double_t b[2], cov[3];
    vertex = aodEvent->GetPrimaryVertex();
    if (!vertex) {
+  FillHistograms(cutIndex, track);
       AliDebug(AliLog::kDebug + 2, "NULL vertex");
       return kFALSE;
    }
+  cutIndex++;
 
    if (!track->PropagateToDCA(vertex, aodEvent->GetMagneticField(), kVeryBig, b, cov)) {
       AliDebug(AliLog::kDebug + 2, "Failed propagation to vertex");
+  FillHistograms(cutIndex, track);
       return kFALSE;
    }
+  cutIndex++;
 
    // if the DCA cut is not fixed, compute current value
    if (!fDCARfixed) {
+        FillHistograms(cutIndex, track);
       static TString str(fDCARptFormula);
       str.ReplaceAll("pt", "x");
       static const TFormula dcaXY(Form("%s_dcaXY", GetName()), str.Data());
       fDCARmax = dcaXY.Eval(track->Pt());
    }
+  cutIndex++;
 
    // check the cut
    if (TMath::Abs(b[0]) > fDCARmax) {
-      AliDebug(AliLog::kDebug + 2, "Too large transverse DCA");
+       FillHistograms(cutIndex, track);
+          AliDebug(AliLog::kDebug + 2, "Too large transverse DCA");
       return kFALSE;
    }
+  cutIndex++;
 
  
    // step #5: DCA cut (longitudinal)
    // the DCA has already been computed above
    // if the DCA cut is not fixed, compute current value
    if (!fDCAZfixed) {
-      static TString str(fDCAZptFormula);
+        FillHistograms(cutIndex, track);
+               static TString str(fDCAZptFormula);
       str.ReplaceAll("pt", "x");
       static const TFormula dcaZ(Form("%s_dcaXY", GetName()), str.Data());
       fDCAZmax = dcaZ.Eval(track->Pt());
    }
+  cutIndex++;
 
    // check the cut
   if (TMath::Abs(b[1]) > fDCAZmax) {
-      AliDebug(AliLog::kDebug + 2, "Too large longitudinal DCA");
+       FillHistograms(cutIndex, track);
+          AliDebug(AliLog::kDebug + 2, "Too large longitudinal DCA");
       return kFALSE;
    }
 
+  cutIndex++;
  
    // step #6: check eta/pt range
    if (track->Eta() < fEta[0] || track->Eta() > fEta[1]) {
-      AliDebug(AliLog::kDebug + 2, "Outside ETA acceptance");
+      FillHistograms(cutIndex, track);
+         AliDebug(AliLog::kDebug + 2, "Outside ETA acceptance");
       return kFALSE;
    }
+  cutIndex++;
 
    // if (track->Pt() < fPt[0] || track->Pt() > fPt[1]) {
    //    AliDebug(AliLog::kDebug + 2, "Outside PT acceptance");
@@ -229,221 +285,3 @@ void AliConversionTrackCuts::Print(const Option_t *) const
 
 
 
-
-//________________________________________________________________________________
-// void AliConversionTrackCuts::CreateHistograms() {
-//   CreateBaseHistograms();
-// }
-
-
-// ///________________________________________________________________________________
-// void AliConversionTrackCuts::SetUpDefaultBins() {
-//   //Set up default bins
-//   Double_t ptbins[19] = {0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 5.0, 6.0, 8.0, 10.0, 12.5, 15, 20, 25, 30, 50, 100};
-//   fAxisdEta.Set(160, -1.6, 1.6);
-//   fAxisdEta.SetNameTitle("dEta", "delta eta");
-
-//   fAxisdPhi.Set(64, -TMath::PiOver2(), 3*TMath::PiOver2());
-//   fAxisdPhi.SetNameTitle("dPhi", "delta Phi");
-
-//   fAxistPt.Set(18, ptbins);
-//   fAxistPt.SetNameTitle("tPt", "trigger Pt");
-
-//   fAxiscPt.Set(18, ptbins);
-//   fAxiscPt.SetNameTitle("cPt", "track Pt");
-
-//   fAxisIso.Set(3, -0.5, 2.5);
-//   fAxisIso.SetNameTitle("iso", "isolation");
-
-//   fAxesList.AddAt(&fAxisdEta, 0);
-//   fAxesList.AddAt(&fAxisdPhi, 1);
-//   fAxesList.AddAt(&fAxistPt, 2);
-//   fAxesList.AddAt(&fAxiscPt, 3);
-//   fAxesList.AddAt(&fAxisIso, 4);
-
-//   fAxisMEEta.Set(160, -0.8, 0.8);
-//   fAxisMEEta.SetNameTitle("eta", "eta");
-  
-//   fAxisMEPhi.Set(64, 0, TMath::TwoPi());
-//   fAxisMEPhi.SetNameTitle("phi", "phi");
-
-//   fTrackAxisList.AddAt(&fAxisMEEta, 0);
-//   fTrackAxisList.AddAt(&fAxisMEPhi, 1);
-//   fTrackAxisList.AddAt(&fAxistPt, 2);
-//   fTrackAxisList.AddAt(&fAxiscPt, 3);
-//   fTrackAxisList.AddAt(&fAxisIso, 4);
-
-//   fTrigAxisList.AddAt(&fAxisMEEta, 0);
-//   fTrigAxisList.AddAt(&fAxisMEPhi, 1);
-//   fTrigAxisList.AddAt(&fAxistPt, 2);
-//   fTrigAxisList.AddAt(&fAxisIso, 3);
-
-//   for(int iIso = 0; iIso < 2; iIso++) {
-//     fHNTriggers[iIso] = NULL;
-//   }
-// }
-
-
-// //________________________________________________________________________
-// void AliConversionTrackCuts::CreateBaseHistograms() {
-//   //Create histograms add, to outputlis
-
-//   cout << "Creating histograms for "<< GetName() << endl;
-
-//   fHistograms = new TList();
-//   fHistograms->SetOwner(kTRUE);
-//   fHistograms->SetName(fName);
-
-//   for(int iIso = 0; iIso < 2; iIso++) {
-
-//     fHNTriggers[iIso] = new TH1F(Form("%s_%s_fNTriggers", fName.Data(), (iIso==0)?"nonIso":"isolated"), 
-//                                                              Form("%s_%s_fNTriggers", fName.Data(), (iIso==0)?"nonIso":"isolated"), 
-//                                                              fAxistPt.GetNbins(), fAxistPt.GetXbins()->GetArray());
-//     fHNTriggers[iIso]->Sumw2();
-//     fHistograms->Add(fHNTriggers[iIso]);
-  
-//   }
-
-//   fCorrSparse = CreateSparse(GetName(), GetTitle(), &fAxesList);
-//   fHistograms->Add(fCorrSparse);
-
-//   fTrackSparse = CreateSparse(Form("%s_%s", GetName(), "METrack"), Form("%s %s", GetTitle(), "ME Tracks"), &fTrackAxisList);
-//   fHistograms->Add(fTrackSparse);
-
-//   fTrigSparse = CreateSparse(Form("%s_%s", GetName(), "METrig"), Form("%s %s", GetTitle(), "ME Triggers"), &fTrigAxisList);
-//   fHistograms->Add(fTrigSparse);
-
-// }
-
-// ///________________________________________________________________________
-// THnSparseF * AliConversionTrackCuts::CreateSparse(TString nameString, TString titleString, TList * axesList) {
-//   //Create sparse
-//   const Int_t dim = axesList->GetSize();
-  
-//   cout << nameString << " " << titleString << " " <<   "    dimesion: " << dim << endl;
-
-//   TAxis * axes[dim];
-//   Int_t   bins[dim];
-//   Double_t min[dim];
-//   Double_t max[dim];
-
-//   for(Int_t i = 0; i<dim; i++) {
-//     TAxis * axis = dynamic_cast<TAxis*>(axesList->At(i));
-//     if(axis) axes[i] = axis;
-//     else {
-//       cout << "AliAnalysisTaskdPhi::CreateSparse: Error error, all the axes are not present in axis list" << endl;
-//       return NULL;
-//     }
-//   }
-
-//   for(Int_t i = 0; i<dim; i++) {
-//     cout << axes[i]->GetTitle() << endl;
-//     bins[i] = axes[i]->GetNbins(); 
-//     min[i] = axes[i]->GetBinLowEdge(1);
-//     max[i] = axes[i]->GetBinUpEdge(axes[i]->GetNbins());
-//   }
-
-//   THnSparseF * sparse = new THnSparseF(Form("%s", nameString.Data()), 
-//                                                                        Form("%s", titleString.Data()), 
-//                                                                        dim, bins, min, max);
-  
-//   for(Int_t i = 0; i<dim; i++) {
-//     sparse->GetAxis(i)->SetNameTitle(axes[i]->GetName(), axes[i]->GetTitle() );
-//     if(axes[i]->GetXbins()->GetSize() > 0) {
-//       sparse->SetBinEdges(i, axes[i]->GetXbins()->GetArray() );
-//     }
-//   }
-//   return sparse;
-// }
-
-
-// ///____________________________________________________________________________
-// // void AliConversionTrackCuts::FillTriggerCounters(Float_t tPt, Bool_t isolated){ 
-// //   //Fill histogram with trigger counters
-
-// //   fHNTriggers[0]->Fill(tPt);
-  
-// //   if(isolated) {
-// //     fHNTriggers[isolated]->Fill(tPt);
-    
-// //   }
-// // }
-
-// // ///_____________________________________________________________________________
-// // void AliConversionTrackCuts::FillHistograms(Float_t tPt, Float_t cPt, Float_t dPhi, Float_t dEta, Bool_t isolated) {
-// //   //Fill histograms
-
-// //   if(dEta) { ;}
-// //   //fHdPhi[0]->Fill(tPt, cPt, dPhi);
-// //   if(isolated) {
-// //     //fHdPhi[isolated]->Fill(tPt, cPt, dPhi);
-// //   }
-// // }
-
-// //_______________________________________________________________________________
-
-// void AliConversionTrackCuts::PrintStatistics()  { 
-//   //Print some statistics between each file
-//   for(Int_t i = 1; i <= fHNTriggers[0]->GetNbinsX(); i++) {
-//     Int_t nTrig = (Int_t) fHNTriggers[0]->GetBinContent(i+1);
-//     cout << "triggers: " << nTrig << endl;
-
-//   }
-// }
-
-
-// //_______________________________________________________________________________
-// void AliConversionTrackCuts::FillTriggerCounters(const AliAODConversionParticle * particle, Bool_t leading) {
-//   fHNTriggers[leading]->Fill(particle->Pt());
-// }
-
-
-// //________________________________________________________________
-// void AliConversionTrackCuts::CorrelateWithTracks(AliAODConversionParticle * particle, TObjArray * tracks, Int_t const tIDs[4], Int_t isolated = 0) {
-//   //Correlate particle with tracks
-
-//   FillTriggerCounters(particle, isolated);
-
-//   Int_t nDim = fAxesList.GetSize();
-//   Double_t dphivalues[nDim];
-//   Double_t trackValues[nDim];
-//   Double_t trigValues[nDim - 1];
-
-//   for(int ij = 0; ij < tracks->GetEntriesFast(); ij++) {
-//     AliVTrack * track = static_cast<AliVTrack*>(tracks->UncheckedAt(ij));
-//     Int_t tid = track->GetID();
-
-//     if((tid > 0) && (tid == tIDs[0] || tid == tIDs[1] || tid == tIDs[2] || tid == tIDs[3]) ) {
-//       continue;
-//     }
-       
-//     dphivalues[0] = particle->Eta() - track->Eta();
-//     dphivalues[1] = GetDPhi(particle->Phi() - track->Phi());
-//     dphivalues[2] = particle->Pt();
-//     dphivalues[3] = track->Pt();
-//     dphivalues[4] = isolated;
-
-//     trackValues[0] = track->Eta();
-//     trackValues[1] = track->Phi();
-//     trackValues[2] = particle->Pt();
-//     trackValues[3] = track->Pt();
-//     trackValues[4] = isolated;
-
-//     trigValues[0] = particle->Eta();
-//     trigValues[1] = particle->Phi();
-//     trigValues[2] = particle->Pt();
-//     trigValues[4] = isolated;
-
-//     if(nDim > 4) {
-//       dphivalues[5] = particle->M();
-//       trackValues[5] = particle->M();
-//       trigValues[4] = particle->M();
-//     }
-       
-//     fCorrSparse->Fill(dphivalues);
-//     fTrackSparse->Fill(trackValues);
-//     fTrigSparse->Fill(trigValues);
-//   }
-// }
-
index a23b0ca1f62aa5d6f01a1868b4f43b4f9031fac4..c2779e01aeb090acc1bdaf9a4fa9cfd3fc932591 100644 (file)
@@ -5,6 +5,8 @@
 // Authors: (this code is mostly copied from AliRsnTrackQuality) adapted by Svein Lindal       *
 
 class AliAODEvent;
+class TH2F;
+class TList;
 #include "AliAODTrack.h"
 #include "AliESDtrack.h"
 #include "AliAnalysisCuts.h"
@@ -21,7 +23,7 @@ public:
 
   AliConversionTrackCuts();
   AliConversionTrackCuts(TString name, TString title);
-  
+  ~AliConversionTrackCuts();
 
   void      AddStatusFlag(ULong_t f, Bool_t on)       {if (on) fFlagsOn = fFlagsOn | f; else fFlagsOff = fFlagsOff | f;}
   void      SetStatusFlags(ULong_t f, Bool_t on)      {if (on) fFlagsOn = f; else fFlagsOff = f;}
@@ -44,6 +46,8 @@ public:
   void      SetAODTestFilterBit(Int_t value)          {fAODTestFilterBit = value;}
   void      SetDefaults2010();
   
+  TList * CreateHistograms();
+  void FillHistograms(Int_t cutIndex, AliVTrack * track);
   virtual void   Print(const Option_t *option = "") const;
 
 protected :
@@ -70,6 +74,8 @@ protected :
    Double_t   fTPCmaxChi2;             // maximum chi2 / number of clusters in TPC
    Int_t      fAODTestFilterBit;       // test filter bit for AOD tracks
 
+  TH2F * fhPhi;
+  TList * fHistograms;
 
   AliConversionTrackCuts(const AliConversionTrackCuts&); // not implemented
   AliConversionTrackCuts& operator=(const AliConversionTrackCuts&); // not implemented
@@ -89,11 +95,11 @@ inline void AliConversionTrackCuts::SetDefaults2010()
 
    AddStatusFlag(AliESDtrack::kTPCin   , kTRUE);
    AddStatusFlag(AliESDtrack::kTPCrefit, kTRUE);
-   AddStatusFlag(AliESDtrack::kITSrefit, kTRUE);
+   //AddStatusFlag(AliESDtrack::kITSrefit, kTRUE);
    SetEtaRange(-0.8, 0.8);
    //SetDCARPtFormula("0.0182+0.0350/pt^1.01");
    SetDCAZmax(2.0);
-   SetSPDminNClusters(1);
+   SetSPDminNClusters(0);
    SetITSminNClusters(0);
    SetITSmaxChi2(1E+20);
    SetTPCminNClusters(70);