]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Adding electron rejection cuts:
authormiweber <miweber@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 14 Aug 2013 14:41:26 +0000 (14:41 +0000)
committermiweber <miweber@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 14 Aug 2013 14:41:26 +0000 (14:41 +0000)
1) Possibility to do exclusive electron rejection (nisgma of other particles)
2) Possibility to do electron rejection only in given pT region
3) Electron rejection from MC PDG values (MCAOD and MCAODrec) for MC closure

PWGCF/EBYE/BalanceFunctions/AliAnalysisTaskBFPsi.cxx
PWGCF/EBYE/BalanceFunctions/AliAnalysisTaskBFPsi.h
PWGCF/EBYE/macros/AddTaskBalancePsiCentralityTrain.C

index 8f8085ab7ea129a596f4acb3dc7cdc7ae042a006..9022e55b2fb71a27fbe1b40da3fe8f2f1b3fc2e4 100755 (executable)
@@ -118,7 +118,10 @@ AliAnalysisTaskBFPsi::AliAnalysisTaskBFPsi(const char *name)
   fPIDNSigma(3.),\r
   fMinAcceptedPIDProbability(0.8),\r
   fElectronRejection(kFALSE),\r
+  fElectronOnlyRejection(kFALSE),\r
   fElectronRejectionNSigma(-1.),\r
+  fElectronRejectionMinPt(0.),\r
+  fElectronRejectionMaxPt(1000.),\r
   fESDtrackCuts(0),\r
   fCentralityEstimator("V0M"),\r
   fUseCentrality(kFALSE),\r
@@ -160,6 +163,7 @@ AliAnalysisTaskBFPsi::AliAnalysisTaskBFPsi(const char *name)
   fDifferentialV2(0),\r
   fUseFlowAfterBurner(kFALSE),\r
   fExcludeResonancesInMC(kFALSE),\r
+  fExcludeElectronsInMC(kFALSE),\r
   fUseMCPdgCode(kFALSE),\r
   fPDGCodeToBeAnalyzed(-1),\r
   fEventClass("EventPlane") \r
@@ -1177,10 +1181,16 @@ TObjArray* AliAnalysisTaskBFPsi::GetAcceptedTracks(AliVEvent *event, Double_t gC
        fHistTrackStats->Fill(iTrackBit,aodTrack->TestFilterBit(1<<iTrackBit));\r
       }\r
       if(!aodTrack->TestFilterBit(nAODtrackCutBit)) continue;\r
-\r
+      \r
+      vCharge = aodTrack->Charge();\r
+      vEta    = aodTrack->Eta();\r
+      vY      = aodTrack->Y();\r
+      vPhi    = aodTrack->Phi();// * TMath::RadToDeg();\r
+      vPt     = aodTrack->Pt();\r
+      \r
       //===========================PID (so far only for electron rejection)===============================//               \r
       if(fElectronRejection) {\r
-       \r
+\r
        // get the electron nsigma\r
        Double_t nSigma = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(aodTrack,(AliPID::EParticleType)AliPID::kElectron));\r
        \r
@@ -1189,21 +1199,36 @@ TObjArray* AliAnalysisTaskBFPsi::GetAcceptedTracks(AliVEvent *event, Double_t gC
        fHistNSigmaTPCvsPtbeforePID -> Fill(aodTrack->P()*aodTrack->Charge(),nSigma); \r
        //end of QA-before pid\r
        \r
-       //Make the decision based on the n-sigma\r
-       if(nSigma < fElectronRejectionNSigma) continue;\r
-       \r
+       // check only for given momentum range\r
+       if( vPt > fElectronRejectionMinPt && vPt < fElectronRejectionMaxPt ){\r
+                 \r
+         //look only at electron nsigma\r
+         if(!fElectronOnlyRejection){\r
+           \r
+           //Make the decision based on the n-sigma of electrons\r
+           if(nSigma < fElectronRejectionNSigma) continue;\r
+         }\r
+         else{\r
+           \r
+           Double_t nSigmaPions   = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(aodTrack,(AliPID::EParticleType)AliPID::kPion));\r
+           Double_t nSigmaKaons   = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(aodTrack,(AliPID::EParticleType)AliPID::kKaon));\r
+           Double_t nSigmaProtons = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(aodTrack,(AliPID::EParticleType)AliPID::kProton));\r
+           \r
+           //Make the decision based on the n-sigma of electrons exclusively ( = track not in nsigma region for other species)\r
+           if(nSigma < fElectronRejectionNSigma\r
+              && nSigmaPions   > fElectronRejectionNSigma\r
+              && nSigmaKaons   > fElectronRejectionNSigma\r
+              && nSigmaProtons > fElectronRejectionNSigma ) continue;\r
+         }\r
+       }\r
+  \r
        //Fill QA after the PID\r
        fHistdEdxVsPTPCafterPID -> Fill(aodTrack->P()*aodTrack->Charge(),aodTrack->GetTPCsignal());\r
        fHistNSigmaTPCvsPtafterPID -> Fill(aodTrack->P()*aodTrack->Charge(),nSigma); \r
+       \r
       }\r
       //===========================end of PID (so far only for electron rejection)===============================//\r
-      \r
-      vCharge = aodTrack->Charge();\r
-      vEta    = aodTrack->Eta();\r
-      vY      = aodTrack->Y();\r
-      vPhi    = aodTrack->Phi();// * TMath::RadToDeg();\r
-      vPt     = aodTrack->Pt();\r
-      \r
+\r
       Float_t dcaXY = aodTrack->DCA();      // this is the DCA from global track (not exactly what is cut on)\r
       Float_t dcaZ  = aodTrack->ZAtDCA();   // this is the DCA from global track (not exactly what is cut on)\r
       \r
@@ -1312,6 +1337,13 @@ TObjArray* AliAnalysisTaskBFPsi::GetAcceptedTracks(AliVEvent *event, Double_t gC
          //Exclude from the analysis decay products of rho0, rho+, eta, eta' and phi\r
          if(kExcludeParticle) continue;\r
        }\r
+\r
+       //Exclude electrons with PDG\r
+       if(fExcludeElectronsInMC) {\r
+         \r
+         if(TMath::Abs(aodTrack->GetPdgCode()) == 11) continue;\r
+         \r
+       }\r
        \r
        // fill QA histograms\r
        fHistPt->Fill(vPt,gCentrality);\r
@@ -1370,6 +1402,47 @@ TObjArray* AliAnalysisTaskBFPsi::GetAcceptedTracks(AliVEvent *event, Double_t gC
       vY      = aodTrack->Y();\r
       vPhi    = aodTrack->Phi();// * TMath::RadToDeg();\r
       vPt     = aodTrack->Pt();\r
+\r
+      //===========================PID (so far only for electron rejection)===============================//               \r
+      if(fElectronRejection) {\r
+\r
+       // get the electron nsigma\r
+       Double_t nSigma = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(aodTrack,(AliPID::EParticleType)AliPID::kElectron));\r
+\r
+       //Fill QA before the PID\r
+       fHistdEdxVsPTPCbeforePID -> Fill(aodTrack->P()*aodTrack->Charge(),aodTrack->GetTPCsignal());\r
+       fHistNSigmaTPCvsPtbeforePID -> Fill(aodTrack->P()*aodTrack->Charge(),nSigma); \r
+       //end of QA-before pid\r
+       \r
+       // check only for given momentum range\r
+       if( vPt > fElectronRejectionMinPt && vPt < fElectronRejectionMaxPt ){\r
+                 \r
+         //look only at electron nsigma\r
+         if(!fElectronOnlyRejection){\r
+           \r
+           //Make the decision based on the n-sigma of electrons\r
+           if(nSigma < fElectronRejectionNSigma) continue;\r
+         }\r
+         else{\r
+           \r
+           Double_t nSigmaPions   = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(aodTrack,(AliPID::EParticleType)AliPID::kPion));\r
+           Double_t nSigmaKaons   = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(aodTrack,(AliPID::EParticleType)AliPID::kKaon));\r
+           Double_t nSigmaProtons = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(aodTrack,(AliPID::EParticleType)AliPID::kProton));\r
+           \r
+           //Make the decision based on the n-sigma of electrons exclusively ( = track not in nsigma region for other species)\r
+           if(nSigma < fElectronRejectionNSigma\r
+              && nSigmaPions   > fElectronRejectionNSigma\r
+              && nSigmaKaons   > fElectronRejectionNSigma\r
+              && nSigmaProtons > fElectronRejectionNSigma ) continue;\r
+         }\r
+       }\r
+  \r
+       //Fill QA after the PID\r
+       fHistdEdxVsPTPCafterPID -> Fill(aodTrack->P()*aodTrack->Charge(),aodTrack->GetTPCsignal());\r
+       fHistNSigmaTPCvsPtafterPID -> Fill(aodTrack->P()*aodTrack->Charge(),nSigma); \r
+       \r
+      }\r
+      //===========================end of PID (so far only for electron rejection)===============================//\r
       \r
       Float_t dcaXY = aodTrack->DCA();      // this is the DCA from global track (not exactly what is cut on)\r
       Float_t dcaZ  = aodTrack->ZAtDCA();   // this is the DCA from global track (not exactly what is cut on)\r
@@ -1430,6 +1503,17 @@ TObjArray* AliAnalysisTaskBFPsi::GetAcceptedTracks(AliVEvent *event, Double_t gC
        //Exclude from the analysis decay products of rho0, rho+, eta, eta' and phi\r
        if(kExcludeParticle) continue;\r
       }\r
+\r
+      //Exclude electrons with PDG\r
+      if(fExcludeElectronsInMC) {\r
+       \r
+       Int_t label = TMath::Abs(aodTrack->GetLabel());\r
+       AliAODMCParticle *AODmcTrack = (AliAODMCParticle*) fArrayMC->At(label);\r
+       \r
+        if (AODmcTrack){ \r
+         if(TMath::Abs(AODmcTrack->GetPdgCode()) == 11) continue;\r
+       }\r
+      }\r
       \r
       // fill QA histograms\r
       fHistClus->Fill(aodTrack->GetITSNcls(),aodTrack->GetTPCNcls());\r
@@ -1729,7 +1813,17 @@ TObjArray* AliAnalysisTaskBFPsi::GetAcceptedTracks(AliVEvent *event, Double_t gC
          //Exclude from the analysis decay products of rho0, rho+, eta, eta' and phi\r
          if(kExcludeParticle) continue;\r
        }\r
-       \r
+\r
+       //Exclude electrons with PDG\r
+       if(fExcludeElectronsInMC) {\r
+         \r
+         TParticle *particle = track->Particle();\r
+         \r
+         if (particle){ \r
+           if(TMath::Abs(particle->GetPdgCode()) == 11) continue;\r
+         }\r
+       }\r
+      \r
        vPhi    = track->Phi();\r
        //Printf("phi (before): %lf",vPhi);\r
        \r
index 6100b3d9d834e15991ed6f04a320f10ec0d79592..a6fbe54605a41dd0890fe39bca830216ac89a093 100755 (executable)
@@ -97,6 +97,7 @@ class AliAnalysisTaskBFPsi : public AliAnalysisTaskSE {
     fUseFlowAfterBurner = kTRUE;\r
   }\r
   void ExcludeResonancesInMC() {fExcludeResonancesInMC = kTRUE;}\r
+  void ExcludeElectronsInMC()  {fExcludeElectronsInMC = kTRUE;}\r
 \r
   void SetPDGCode(Int_t gPdgCode) {\r
     fUseMCPdgCode = kTRUE;\r
@@ -158,6 +159,17 @@ class AliAnalysisTaskBFPsi : public AliAnalysisTaskSE {
       fElectronRejectionNSigma = gMaxNSigma;\r
     }\r
 \r
+    void SetElectronOnlyRejection(Double_t gMaxNSigma){\r
+      fElectronRejection       = kTRUE;\r
+      fElectronOnlyRejection   = kTRUE;\r
+      fElectronRejectionNSigma = gMaxNSigma;\r
+    }\r
+\r
+    void SetElectronRejectionPt(Double_t minPt,Double_t maxPt){\r
+      fElectronRejectionMinPt  = minPt;\r
+      fElectronRejectionMaxPt  = maxPt;\r
+    }\r
+\r
 \r
  private:\r
   Double_t    IsEventAccepted(AliVEvent* event);\r
@@ -250,7 +262,10 @@ class AliAnalysisTaskBFPsi : public AliAnalysisTaskSE {
   Double_t fMinAcceptedPIDProbability;//probability cut for PID\r
 \r
   Bool_t   fElectronRejection;//flag to use electron rejection\r
+  Bool_t   fElectronOnlyRejection;//flag to use electron rejection with exclusive electron PID (no other particle in nsigma range)\r
   Double_t fElectronRejectionNSigma;//nsigma cut for electron rejection\r
+  Double_t fElectronRejectionMinPt;//minimum pt for electron rejection (default = 0.)\r
+  Double_t fElectronRejectionMaxPt;//maximum pt for electron rejection (default = 1000.)\r
 \r
   //============PID============//\r
 \r
@@ -305,7 +320,8 @@ class AliAnalysisTaskBFPsi : public AliAnalysisTaskSE {
   TF1 *fDifferentialV2;//pt-differential v2 (from real data)\r
   Bool_t fUseFlowAfterBurner;//Usage of a flow after burner\r
 \r
-  Bool_t fExcludeResonancesInMC;//flag to exclude the resonances' decay products from the MC analysis\r
+  Bool_t fExcludeResonancesInMC;//flag to exclude the resonances' decay products (and conversion) from the MC analysis\r
+  Bool_t fExcludeElectronsInMC;//flag to exclude the electrons from the MC analysis\r
   Bool_t fUseMCPdgCode; //Boolean to analyze a set of particles in MC\r
   Int_t fPDGCodeToBeAnalyzed; //Analyze a set of particles in MC\r
   TString fEventClass; //Can be "EventPlane", "Centrality", "Multiplicity"\r
index fad5f82b8cbea0f10500ab02f844833211e2dbfb..3a2caf2beb4f7dd4260cc989845b364a4eb0893e 100644 (file)
@@ -45,6 +45,7 @@ AliAnalysisTaskBFPsi *AddTaskBalancePsiCentralityTrain(Double_t centrMin=0.,
                                                       TString analysisTypeUser="AOD",\r
                                                       Bool_t bVertexBinning=kTRUE,\r
                                                       Double_t sigmaElectronRejection=3,\r
+                                                      Bool_t electronExclusiveRejection=kFALSE,\r
                                                       TString correctionFileName = "",\r
                                                       Int_t nCentralityArrayBinsForCorrection,\r
                                                       Double_t *gCentralityArrayForCorrections) {\r
@@ -175,8 +176,10 @@ AliAnalysisTaskBFPsi *AddTaskBalancePsiCentralityTrain(Double_t centrMin=0.,
     taskBF->SetExtraTPCCutsAOD(maxTPCchi2, minNClustersTPC);\r
 \r
     // electron rejection (so far only for AOD), <0 --> no rejection\r
-    if(sigmaElectronRejection > 0) taskBF->SetElectronRejection(sigmaElectronRejection);\r
-    \r
+    if(sigmaElectronRejection > 0){\r
+      if(electronExclusiveRejection) taskBF->SetElectronOnlyRejection(sigmaElectronRejection); // no other particle in nsigma \r
+      else                           taskBF->SetElectronRejection(sigmaElectronRejection); // check only if electrons in nsigma\r
+    }\r
   }\r
   else if(analysisType == "MC") {\r
     taskBF->SetKinematicsCutsAOD(ptMin,ptMax,etaMin,etaMax); \r
@@ -197,6 +200,12 @@ AliAnalysisTaskBFPsi *AddTaskBalancePsiCentralityTrain(Double_t centrMin=0.,
 \r
     // set extra TPC chi2 / nr of clusters cut\r
     taskBF->SetExtraTPCCutsAOD(maxTPCchi2, minNClustersTPC);\r
+\r
+    // electron rejection (so far only for AOD), <0 --> no rejection\r
+    if(sigmaElectronRejection > 0){\r
+      if(electronExclusiveRejection) taskBF->SetElectronOnlyRejection(sigmaElectronRejection); // no other particle in nsigma \r
+      else                           taskBF->SetElectronRejection(sigmaElectronRejection); // check only if electrons in nsigma\r
+    }\r
   }//++++++++++++++++\r
 \r
   // offline trigger selection (AliVEvent.h)\r