]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
authorauras <antonio.uras@cern.ch>
Tue, 15 Apr 2014 21:34:08 +0000 (23:34 +0200)
committerauras <antonio.uras@cern.ch>
Tue, 15 Apr 2014 21:34:08 +0000 (23:34 +0200)
24 files changed:
ANALYSIS/macros/train/AddMCGenPythia8.C [new file with mode: 0644]
EVE/alice-macros/geom_mft.C [new file with mode: 0644]
PWG/FLOW/Tasks/AliJetFlowTools.cxx
PWG/FLOW/Tasks/AliJetFlowTools.h
PWGCF/Correlations/DPhi/AliAnalysisTaskPhiCorrelations.cxx
PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoModelBPLCMSCorrFctn.cxx
PWGCF/FLOW/macros/AddTaskPIDFlowSP.C
PWGGA/GammaConv/AliConversionCuts.cxx
PWGGA/GammaConv/macros/AddTask_GammaConvV1_PbPb.C
PWGJE/EMCALJetTasks/UserTasks/AliAnalysisTaskEmcalJetPatchTriggerQA.cxx
PWGJE/UserTasks/AliAnalysisTaskJetProtonCorr.cxx
PWGJE/UserTasks/AliAnalysisTaskJetProtonCorr.h
PWGJE/UserTasks/AliAnalysisTaskPID.cxx
PWGJE/UserTasks/AliAnalysisTaskPID.h
PWGJE/UserTasks/AliIDFFUtils.h
PWGLF/STRANGENESS/Hypernuclei/AliAnalysisTaskAntiHe4.cxx
PWGLF/STRANGENESS/Hypernuclei/AliAnalysisTaskAntiHe4.h
PWGUD/UPC/AliAnalysisTaskUpcPsi2s.cxx
PWGUD/UPC/AliAnalysisTaskUpcPsi2s.h
STEER/STEERBase/AliExternalTrackParam.cxx
STEER/STEERBase/AliExternalTrackParam.h
TRD/AliTRDtrackOnline.cxx
TRD/AliTRDtrackOnline.h
VZERO/CheckCalibOCDB.C

diff --git a/ANALYSIS/macros/train/AddMCGenPythia8.C b/ANALYSIS/macros/train/AddMCGenPythia8.C
new file mode 100644 (file)
index 0000000..366ae7d
--- /dev/null
@@ -0,0 +1,62 @@
+AliGenerator* AddMCGenPythia8(Float_t e_cms = 2760., Bool_t kCR = kTRUE) 
+{
+  // Add Pythia 8 generator: 
+  //    - Color reconnection = ON/OFF
+
+  gSystem->Load("liblhapdf.so");
+  AliGenerator *genP = NULL;
+  genP = CreatePythia8Gen(e_cms, kCR);
+  
+  return genP;
+}
+
+AliGenerator* CreatePythia8Gen(Float_t e_cms, Bool_t kCR) {
+    
+   gSystem->Load("libpythia6.so");
+   gSystem->Load("libAliPythia6.so");
+   gSystem->Load("libpythia8.so");
+   gSystem->Load("libAliPythia8.so");
+   gSystem->Setenv("PYTHIA8DATA", gSystem->ExpandPathName("$ALICE_ROOT/PYTHIA8/pythia8175/xmldoc"));
+   gSystem->Setenv("LHAPDF",      gSystem->ExpandPathName("$ALICE_ROOT/LHAPDF"));
+   gSystem->Setenv("LHAPATH",     gSystem->ExpandPathName("$ALICE_ROOT/LHAPDF/PDFsets"));
+
+
+  AliGenPythiaPlus* gener = new AliGenPythiaPlus(AliPythia8::Instance());
+
+  // set process (MB)
+  gener->SetProcess(kPyMbDefault);
+  // //   charm, beauty, charm_unforced, beauty_unforced, jpsi, jpsi_chi, mb
+  // if(ptHardMin>0.) {
+  //   gener->SetProcess(kPyJets);
+  //   gener->SetPtHard((float)ptHardMin,(float)ptHardMax);
+  // } else
+  //   gener->SetProcess(kPyMb); // Minimum Bias  
+  
+  //   Centre of mass energy 
+  gener->SetEnergyCMS(e_cms); // in GeV
+
+  // Event list
+  gener->SetEventListRange(-1, 2);
+
+  // color reconnection
+  (AliPythia8::Instance())->ReadString("Tune:pp = 5");//CR
+  //gener->UseNewMultipleInteractionsScenario(); // for all Pythia versions >= 6.3
+
+  if(kCR)             
+    (AliPythia8::Instance())->ReadString("BeamRemnants:reconnectColours = on");
+  else
+    (AliPythia8::Instance())->ReadString("BeamRemnants:reconnectColours = off");
+
+
+  //   vertex position and smearing 
+  //gener->SetVertexSmear(kPerEvent);
+
+  // structure function
+  // use kCTEQ5l for Perugia tunes 
+  // except for tunes: Perugia * (325, MRSTLO*), Perugia 6 (326, CTEQ6L),  
+  // Perugia 11 M (355, MRST LO**), Perugia 11 C (356, CTEQ6L1) 
+  //gener->SetStrucFunc(kCTEQ5L); 
+   
+  return gener;
+}
diff --git a/EVE/alice-macros/geom_mft.C b/EVE/alice-macros/geom_mft.C
new file mode 100644 (file)
index 0000000..477e574
--- /dev/null
@@ -0,0 +1,42 @@
+// $Id$
+// Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
+
+/**************************************************************************
+* Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
+* See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
+* full copyright notice.                                                 *
+**************************************************************************/
+
+#if !defined(__CINT__) || defined(__MAKECINT__)
+#include <TGeoManager.h>
+#include <TGeoNode.h>
+#include <TEveManager.h>
+#include <TEveGeoNode.h>
+
+#include <AliEveEventManager.h>
+#endif
+
+void geom_mft()
+
+{
+  //  AliEveEventManager::AssertGeometry();
+
+  gGeoManager = gEve->GetGeometry("geometry.root");
+
+  TEveElementList* list = new TEveElementList("MFT");
+  gEve->AddGlobalElement(list);
+  TGeoNode *node1 = gGeoManager->GetTopVolume()->FindNode("MFT_0");
+  if (!node1) {
+    Warning("geom_mft()", "Node MFT_0 not found !");
+    return;
+  }
+  
+  TEveGeoTopNode* re1 = new TEveGeoTopNode(gGeoManager,node1);
+  re1->UseNodeTrans();
+  gEve->AddGlobalElement(re1,list);
+  
+  gEve->Redraw3D();
+  
+  Info("geom_mft.C", "Done");
+}
index 80835968328e267994166bfc02b6587e24e269d1..9a6c8ff41f5a79bf351bc9ae8460913efc032f0d 100644 (file)
@@ -73,6 +73,8 @@ using namespace std;
 //_____________________________________________________________________________
 AliJetFlowTools::AliJetFlowTools() :
     fResponseMaker      (new AliAnaChargedJetResponseMaker()),
+    fRMS                (kTRUE),
+    fSymmRMS            (kTRUE),
     fPower              (new TF1("fPower","[0]*TMath::Power(x,-([1]))",0.,300.)),
     fSaveFull           (kTRUE),
     fActiveString       (""),
@@ -1817,7 +1819,6 @@ void AliJetFlowTools::GetShapeUncertainty(
         TGraphAsymmErrors*& shapeV2,    // pointer reference to final shape uncertainty of v2
         TArrayI* regularizationIn,      // regularization strength systematics, in plane
         TArrayI* regularizationOut,     // regularization strenght systematics, out of plane
-        Bool_t RMS,                     // get RMS instead of absolute value  
         TArrayI* trueBinIn,             // true bin ranges, in plane
         TArrayI* trueBinOut,            // true bin ranges, out of plane
         TArrayI* recBinIn,              // rec bin ranges, in plane
@@ -1885,7 +1886,7 @@ void AliJetFlowTools::GetShapeUncertainty(
                 rangeUp,
                 readMe,
                 "regularization",
-                RMS);
+                fRMS);
         if(relativeErrorRegularizationInUp) {
             // canvas with the error from regularization strength
             TCanvas* relativeErrorRegularization(new TCanvas("relativeErrorRegularization", "relativeErrorRegularization"));
@@ -2044,6 +2045,10 @@ void AliJetFlowTools::GetShapeUncertainty(
         // for the lower bound
         if(relativeErrorRegularizationInLow) aInLow = relativeErrorRegularizationInLow->GetBinContent(b+1);
         if(relativeErrorRegularizationOutLow) aOutLow = relativeErrorRegularizationOutLow->GetBinContent(b+1);
+        if(fSymmRMS) {  // take first category as symmetric
+            aInLow = aInUp;
+            aOutLow = aOutUp;
+        }
         if(relativeErrorTrueBinInLow) bInLow = relativeErrorTrueBinInLow->GetBinContent(b+1);
         if(relativeErrorTrueBinOutLow) bOutLow = relativeErrorTrueBinOutLow->GetBinContent(b+1);
         if(relativeErrorRecBinInLow) cInLow = relativeErrorRecBinInLow->GetBinContent(b+1);
@@ -2214,15 +2219,31 @@ void AliJetFlowTools::GetShapeUncertainty(
    relativeErrorOutUp = new TH1D(Form("max #sigma/|x| from  %s", source.Data()), Form("max #sigma/|x| from %s", source.Data()), fBinsTrue->GetSize()-1, fBinsTrue->GetArray());
    relativeErrorOutLow = new TH1D(Form("min #sigma/|x| from %s", source.Data()), Form("min #sigma/|x| from %s", source.Data()), fBinsTrue->GetSize()-1, fBinsTrue->GetArray());
    for(Int_t b(0); b < fBinsTrue->GetSize()-1; b++) {
-       relativeErrorInUp->SetBinContent(b+1, 1.);
-       relativeErrorInUp->SetBinError(b+1, 0.);
-       relativeErrorOutUp->SetBinContent(b+1, 1.);
-       relativeErrorOutUp->SetBinError(b+1, .0);
-       relativeErrorInLow->SetBinContent(b+1, 1.);
-       relativeErrorInLow->SetBinError(b+1, 0.);
-       relativeErrorOutLow->SetBinContent(b+1, 1.);
-       relativeErrorOutLow->SetBinError(b+1, .0);
+       if(!RMS) {
+           relativeErrorInUp->SetBinContent(b+1, 1.);
+           relativeErrorInUp->SetBinError(b+1, 0.);
+           relativeErrorOutUp->SetBinContent(b+1, 1.);
+           relativeErrorOutUp->SetBinError(b+1, .0);
+           relativeErrorInLow->SetBinContent(b+1, 1.);
+           relativeErrorInLow->SetBinError(b+1, 0.);
+           relativeErrorOutLow->SetBinContent(b+1, 1.);
+           relativeErrorOutLow->SetBinError(b+1, .0);
+       } else if(RMS) {
+           relativeErrorInUp->SetBinContent(b+1, 0.);
+           relativeErrorInUp->SetBinError(b+1, 0.);
+           relativeErrorOutUp->SetBinContent(b+1, 0.);
+           relativeErrorOutUp->SetBinError(b+1, 0.);
+           relativeErrorInLow->SetBinContent(b+1, 0.);
+           relativeErrorInLow->SetBinError(b+1, 0.);
+           relativeErrorOutLow->SetBinContent(b+1, 0.);
+           relativeErrorOutLow->SetBinError(b+1, 0.);
+       } 
    }
+   Int_t relativeErrorInUpN[100] = {0};
+   Int_t relativeErrorOutUpN[100] = {0};
+   Int_t relativeErrorInLowN[100] = {0};
+   Int_t relativeErrorOutLowN[100] = {0};
+   
    // define an output histogram with the systematic error from this systematic constribution
    if(!relativeStatisticalErrorIn && !relativeStatisticalErrorOut) {
        relativeStatisticalErrorIn = new TH1D("relative statistical error, in plane", "#sigma/|x|, statistical, in plane", fBinsTrue->GetSize()-1, fBinsTrue->GetArray());
@@ -2403,14 +2424,21 @@ void AliJetFlowTools::GetShapeUncertainty(
                                relativeErrorInLow->SetBinContent(b+1, temp->GetBinContent(b+1));
                                relativeErrorInLow->SetBinError(b+1, 0.);
                            }
-                       } else if (RMS) { // save info necessary for evaluating the RMS of a distribution of variations
-                           if( temp->GetBinContent(b+1) < 1) {
+                       } else if (RMS && !fSymmRMS) { // save info necessary for evaluating the RMS of a distribution of variations
+                           printf(" oops shouldnt be here \n " );
+                           if(temp->GetBinContent(b+1) < 1) {
                                relativeErrorInUp->SetBinContent(b+1, relativeErrorInUp->GetBinContent(b+1)+TMath::Power(1.-temp->GetBinContent(b+1), 2));
+                               relativeErrorInUpN[b]++;
                            }
                            // the variation is LOWER than the nominal point, so the bar goes DOWN
                            else if(temp->GetBinContent(b+1) > 1) {
                                relativeErrorInLow->SetBinContent(b+1, relativeErrorInLow->GetBinContent(b+1)+TMath::Power(1.-temp->GetBinContent(b+1), 2));
+                               relativeErrorInLowN[b]++;
                            }
+                       } else if (fSymmRMS) {
+                           // save symmetric sum of square to get a symmetric rms
+                           relativeErrorInUp->SetBinContent(b+1, relativeErrorInUp->GetBinContent(b+1)+TMath::Power(temp->GetBinContent(b+1)-1., 2));
+                           relativeErrorInUpN[b]++;
                        }
                        if(temp->GetBinError(b+1) > 0) relativeStatisticalErrorIn->SetBinContent(b+1, temp->GetBinError(b+1)/temp->GetBinContent(b+1));
                    }
@@ -2540,13 +2568,20 @@ void AliJetFlowTools::GetShapeUncertainty(
                                relativeErrorOutLow->SetBinContent(b+1, temp->GetBinContent(b+1));
                                relativeErrorOutLow->SetBinError(b+1, 0.);
                            }
-                       } else if (RMS) {
+                       } else if (RMS && !fSymmRMS) {
+                           printf(" OOps \n ");
                            if(temp->GetBinContent(b+1) < 1) {
                                relativeErrorOutUp->SetBinContent(b+1, relativeErrorOutUp->GetBinContent(b+1)+TMath::Power(1.-temp->GetBinContent(b+1), 2));
+                               relativeErrorOutUpN[b]++;
                            }
                            else if(temp->GetBinContent(b+1) > 1) {
                                relativeErrorOutLow->SetBinContent(b+1, relativeErrorOutLow->GetBinContent(b+1)+TMath::Power(1.-temp->GetBinContent(b+1), 2));
+                               relativeErrorOutLowN[b]++;
                            }
+                       } else if (fSymmRMS) {
+                           // save symmetric rms value
+                           relativeErrorOutUp->SetBinContent(b+1, relativeErrorOutUp->GetBinContent(b+1)+TMath::Power(temp->GetBinContent(b+1)-1., 2));
+                           relativeErrorOutUpN[b]++;
                        }
                        if(temp->GetBinError(b+1) > 0) relativeStatisticalErrorOut->SetBinContent(b+1, temp->GetBinError(b+1)/temp->GetBinContent(b+1));
                    }
@@ -2748,15 +2783,25 @@ void AliJetFlowTools::GetShapeUncertainty(
            // these guys are already stored as percentages, so no need to remove the offset of 1
            // RMS is defined as sqrt(sum(squared))/N
            // min is defined as negative, max is defined as positive
-           Float_t n((float)variationsIn->GetSize()-1);  // first variation is nominal, so shouldn't be counted
-           relativeErrorInUp->SetBinContent(b+1, TMath::Sqrt(relativeErrorInUp->GetBinContent(b+1))/n);
-           relativeErrorInUp->SetBinError(b+1, 0.);
-           relativeErrorOutUp->SetBinContent(b+1, TMath::Sqrt(relativeErrorOutUp->GetBinContent(b+1))/n);
-           relativeErrorOutUp->SetBinError(b+1, .0);
-           relativeErrorInLow->SetBinContent(b+1, -1.*TMath::Sqrt(relativeErrorInLow->GetBinContent(b+1))/n);
-           relativeErrorInLow->SetBinError(b+1, 0.);
-           relativeErrorOutLow->SetBinContent(b+1, -1.*TMath::Sqrt(relativeErrorOutLow->GetBinContent(b+1))/n);
-           relativeErrorOutLow->SetBinError(b+1, .0);
+           if(!fSymmRMS) {
+               if(relativeErrorInUpN[b] < 1) relativeErrorInUpN[b] = 1;
+               if(relativeErrorInLowN[b] < 1) relativeErrorInLowN[b] = 1;
+               if(relativeErrorOutUpN[b] < 1) relativeErrorOutUpN[b] = 1;
+               if(relativeErrorOutLowN[b] < 1) relativeErrorOutLowN[b] = 1;
+               relativeErrorInUp->SetBinContent(b+1, TMath::Sqrt(relativeErrorInUp->GetBinContent(b+1)/relativeErrorInUpN[b]));
+               relativeErrorInUp->SetBinError(b+1, 0.);
+               relativeErrorOutUp->SetBinContent(b+1, TMath::Sqrt(relativeErrorOutUp->GetBinContent(b+1)/relativeErrorOutUpN[b]));
+               relativeErrorOutUp->SetBinError(b+1, .0);
+               relativeErrorInLow->SetBinContent(b+1, -1.*TMath::Sqrt(relativeErrorInLow->GetBinContent(b+1)/relativeErrorInLowN[b]));
+               relativeErrorInLow->SetBinError(b+1, 0.);
+               relativeErrorOutLow->SetBinContent(b+1, -1.*TMath::Sqrt(relativeErrorOutLow->GetBinContent(b+1)/relativeErrorOutLowN[b]));
+               relativeErrorOutLow->SetBinError(b+1, .0);
+           } else if (fSymmRMS) {
+               if(relativeErrorInUpN[b] < 1) relativeErrorInUpN[b] = 1;
+               if(relativeErrorOutUpN[b] < 1) relativeErrorOutUpN[b] = 1;
+               relativeErrorInUp->SetBinContent(b+1, TMath::Sqrt(relativeErrorInUp->GetBinContent(b+1)/relativeErrorInUpN[b]));
+               relativeErrorOutUp->SetBinContent(b+1, TMath::Sqrt(relativeErrorOutUp->GetBinContent(b+1)/relativeErrorOutUpN[b]));
+           }
        }
    }
    relativeErrorInUp->SetYTitle("relative uncertainty");
index a3e182870225602f900be6fa0044a9aa6b119cbe..0af2f2ce76b8a6cd9bd0de6812bb0f0db73769ce 100644 (file)
@@ -133,6 +133,8 @@ class AliJetFlowTools {
         void            SetDphiDptUnfolding(Bool_t i)           {fDphiDptUnfolding      = i;}
         void            SetExLJDpt(Bool_t i)                    {fExLJDpt               = i;}
         void            SetWeightFunction(TF1* w)               {fResponseMaker->SetRMMergeWeightFunction(w);}
+        void            SetRMS(Bool_t r)                        {fRMS                   = r;}
+        void            SetSymmRMS(Bool_t r)                    {fSymmRMS               = r; fRMS               = r;}
         void            Make();
         void            MakeAU();       // test function, use with caution (09012014)
         void            Finish() {
@@ -177,7 +179,6 @@ class AliJetFlowTools {
                 TGraphAsymmErrors*& shapeV2,
                 TArrayI* regularizationIn,
                 TArrayI* regularizationOut,
-                Bool_t RMS = kFALSE,
                 TArrayI* trueBinIn = 0x0,
                 TArrayI* trueBinOut = 0x0,
                 TArrayI* recBinIn = 0x0,
@@ -237,25 +238,21 @@ class AliJetFlowTools {
         }
         static TPaveText*       AddTPaveText(TString text, Int_t r = 2) {
             TPaveText* t(new TPaveText(.35, .27, .76, .33,"NDC"));
-//            t->SetFillStyle(0);
             t->SetFillColor(0);            
             t->SetBorderSize(0);
             t->AddText(0.,0.,text.Data());
             t->AddText(0., 0., Form("#it{R} = 0.%i #it{k}_{T} charged jets", r));
             t->SetTextColor(kBlack);
-//            t->SetTextSize(0.03);
             t->SetTextFont(42);
             t->Draw("same");
             return t;
         } 
         static TPaveText*       AddText(TString text, EColor col) {
             TPaveText* t(new TPaveText(.35, .27, .76, .33,"NDC"));
-//            t->SetFillStyle(0);
             t->SetFillColor(0);            
             t->SetBorderSize(0);
             t->AddText(0.,0.,text.Data());
             t->SetTextColor(col);
-//            t->SetTextSize(0.03);
             t->SetTextFont(42);
             t->Draw("same");
             return t;
@@ -334,6 +331,8 @@ class AliJetFlowTools {
         TGraphErrors*   ProtectHeap(TGraphErrors* protect, Bool_t kill = kTRUE, TString suffix = "") const;
         // members, accessible via setters
         AliAnaChargedJetResponseMaker*  fResponseMaker; // utility object
+        Bool_t                  fRMS;                   // systematic method
+        Bool_t                  fSymmRMS;               // symmetric systematic method
         TF1*                    fPower;                 // smoothening fit
         Bool_t                  fSaveFull;              // save all generated histograms to file
         TString                 fActiveString;          // identifier of active output
index 6056fe1abc1a4e8b1fac5fd4b0e6af6816e2f905..9a71a1ec0aba6b96f288fe7fa40ae9b7a3e1b5e8 100644 (file)
@@ -142,7 +142,7 @@ fUseChargeHadrons(kFALSE),
 fParticleSpeciesTrigger(-1),
 fParticleSpeciesAssociated(-1),
 fCheckMotherPDG(kTRUE),
-fTrackletDphiCut(999.),
+fTrackletDphiCut(9999999.),
 fSelectCharge(0),
 fTriggerSelectCharge(0),
 fAssociatedSelectCharge(0),
@@ -339,7 +339,7 @@ void  AliAnalysisTaskPhiCorrelations::CreateOutputObjects()
   if (fTriggersFromDetector == 1 || fTriggersFromDetector == 2 || fAssociatedFromDetector == 1 || fAssociatedFromDetector == 2)
     fListOfHistos->Add(new TH1F("V0SingleCells", "V0 single cell multiplicity;multiplicity;events", 100, -0.5, 99.5));
   if (fTriggersFromDetector == 3 || fAssociatedFromDetector == 3)
-    fListOfHistos->Add(new TH1F("DphiTrklets", "tracklets Dphi;#Delta#phi,trklets;entries", 100, -0.1, 0.1));
+    fListOfHistos->Add(new TH1F("DphiTrklets", "tracklets Dphi;#Delta#phi,trklets (mrad);entries", 100, -100, 100));
   
   PostData(0,fListOfHistos);
   
@@ -1498,10 +1498,11 @@ TObjArray* AliAnalysisTaskPhiCorrelations::GetParticlesFromDetector(AliVEvent* i
        {
          Double_t eta=-TMath::Log(TMath::Tan(trklets->GetTheta(itrklets)/2));
          if(TMath::Abs(eta)>fTrackEtaCut)continue;
-         if(TMath::Abs(trklets->GetDeltaPhi(itrklets))>fTrackletDphiCut)continue;
+         Double_t pT=1000*TMath::Abs(trklets->GetDeltaPhi(itrklets));//in mrad
+         if(pT>fTrackletDphiCut)continue;
          TH1F* DphiTrklets = (TH1F*)fListOfHistos->FindObject("DphiTrklets");
-         DphiTrklets->Fill(trklets->GetDeltaPhi(itrklets));
-         AliDPhiBasicParticle* particle = new AliDPhiBasicParticle(eta,trklets->GetPhi(itrklets), 1.1, 0); // fit pT = 1.1 and charge = 0
+         DphiTrklets->Fill(1000*trklets->GetDeltaPhi(itrklets)); //in mrad
+         AliDPhiBasicParticle* particle = new AliDPhiBasicParticle(eta,trklets->GetPhi(itrklets), pT, 0); // pT = TMath::Abs(trklets->GetDeltaPhi(itrklets)) in mrad and charge = 0
          particle->SetUniqueID(fAnalyseUE->GetEventCounter()* 100000 + itrklets);
          
          obj->Add(particle);
@@ -1516,11 +1517,12 @@ TObjArray* AliAnalysisTaskPhiCorrelations::GetParticlesFromDetector(AliVEvent* i
        if (!track->IsMuonTrack()) continue;
        //Float_t dca    = track->DCA();
        //Float_t chi2   = track->Chi2perNDF();
-       //Int_t   mask   = track->GetMatchTrigger();
-       Float_t eta    = track->Eta();
        Float_t rabs   = track->GetRAtAbsorberEnd();
+       Float_t eta    = track->Eta();
+       Int_t   matching   = track->GetMatchTrigger();
        if (rabs < 17.6 || rabs > 89.5) continue;
        if (eta < -4 || eta > -2.5) continue;
+       if (matching < 2) continue;
        
        AliDPhiBasicParticle* particle = new AliDPhiBasicParticle(eta,track->Phi(), track->Pt(), track->Charge()); 
        particle->SetUniqueID(fAnalyseUE->GetEventCounter() * 100000 + iTrack);
index 7eb0bfa07eb5410bcf57c772eaac1c9715bdee43..789cd645a02a6c0e9e2250dcb2d138c35102a47a 100644 (file)
@@ -124,7 +124,7 @@ TList* AliFemtoModelBPLCMSCorrFctn::GetOutputList()
 
 //_________________________
 void AliFemtoModelBPLCMSCorrFctn::Finish(){
-  fQinvHisto->Divide(fDenominator);
+  //fQinvHisto->Divide(fDenominator);
 }
 
 //____________________________
@@ -195,16 +195,16 @@ void AliFemtoModelBPLCMSCorrFctn::AddMixedPair( AliFemtoPair* pair){
     if (fUseRPSelection) {
       AliFemtoKTPairCut *ktc = dynamic_cast<AliFemtoKTPairCut *>(fPairCut);
       if (!ktc) {
-       cout << "RP aware cut requested, but not connected to the CF" << endl;
-       if (!(fPairCut->Pass(pair))) return;
+        cout << "RP aware cut requested, but not connected to the CF" << endl;
+        if (!(fPairCut->Pass(pair))) return;
       }
       else {
-       AliFemtoAnalysisReactionPlane *arp = dynamic_cast<AliFemtoAnalysisReactionPlane *> (HbtAnalysis());
-       if (!arp) {
-         cout << "RP aware cut requested, but not connected to the CF" << endl;
-         if (!(fPairCut->Pass(pair))) return;
-       }
-       else if (!(ktc->Pass(pair, arp->GetCurrentReactionPlane()))) return;
+        AliFemtoAnalysisReactionPlane *arp = dynamic_cast<AliFemtoAnalysisReactionPlane *> (HbtAnalysis());
+        if (!arp) {
+          cout << "RP aware cut requested, but not connected to the CF" << endl;
+          if (!(fPairCut->Pass(pair))) return;
+        }
+        else if (!(ktc->Pass(pair, arp->GetCurrentReactionPlane()))) return;
       }
     }
     else
@@ -224,7 +224,7 @@ void AliFemtoModelBPLCMSCorrFctn::AddMixedPair( AliFemtoPair* pair){
   fDenominator3D->Fill(qOut, qSide, qLong, 1.0);
   fNumeratorFake->Fill(pair->QInv(), weight);
   fDenominator->Fill(pair->QInv(), 1.0);
-  fQinvHisto->Fill(qOut, qSide, qLong, pair->QInv());
+  fQinvHisto->Fill(qOut, qSide, qLong, pair->QInv() );
 }
 //_______________________
 AliFemtoModelCorrFctn* AliFemtoModelBPLCMSCorrFctn::Clone()
index b67dc968f132cd4a64dab5340e5855ca0ce98d77..f1c0c8e114c4689cf29f009ea8aac3fe0128fef6 100644 (file)
@@ -5,7 +5,7 @@ class AliFlowTrackCuts;
 class AliFlowEventCuts;
 
 
-void AddTaskFlowSP(Int_t triggerSelectionString=AliVEvent::kMB,
+void AddTaskPIDFlowSP(Int_t triggerSelectionString=AliVEvent::kMB,
                                    Float_t etamin=-0.8,
                                    Float_t etamax=0.8,
                                    Float_t EtaGap=0.2,
@@ -19,6 +19,7 @@ void AddTaskFlowSP(Int_t triggerSelectionString=AliVEvent::kMB,
                                    Int_t ncentrality = 6,
                                    Bool_t doQA=kTRUE,
                                    Bool_t isPID = kTRUE,
+                                   Bool_t VZERO = kFALSE, // use vzero sp method
                                    AliPID::EParticleType particleType=AliPID::kPion,
                                    AliFlowTrackCuts::PIDsource sourcePID=AliFlowTrackCuts::kTOFbayesian) {
 
@@ -41,7 +42,7 @@ int centrMax[9] = {5,10,20,30,40,50,60,70,80};
 const int ncentr = ncentrality;
     
     
-//---------Data selection----------
+//---------Data selection---------- ESD only!!!
 //kMC, kGlobal, kESD_TPConly, kESD_SPDtracklet
 AliFlowTrackCuts::trackParameterType rptype = AliFlowTrackCuts::kTPCstandalone;
 AliFlowTrackCuts::trackParameterType poitype = AliFlowTrackCuts::kTPCstandalone;
@@ -51,8 +52,8 @@ AliFlowTrackCuts::trackParameterType poitype = AliFlowTrackCuts::kTPCstandalone;
 AliFlowTrackCuts::trackParameterMix rpmix = AliFlowTrackCuts::kPure;
 AliFlowTrackCuts::trackParameterMix poimix = AliFlowTrackCuts::kPure;
     
-const char* rptypestr = AliFlowTrackCuts::GetParamTypeName(rptype);
-const char* poitypestr = AliFlowTrackCuts::GetParamTypeName(poitype);
+const char* rptypestr = AliFlowTrackCuts::GetParamTypeName(rptype);  //ESD
+const char* poitypestr = AliFlowTrackCuts::GetParamTypeName(poitype); //ESD
 
     
 //===========================================================================
@@ -75,21 +76,29 @@ for(int icentr=0;icentr<ncentr;icentr++){
     cutsEvent[icentr]->SetQA(doQA);
     cutsEvent[icentr]->SetCutTPCmultiplicityOutliers();
     
-    
     // RP TRACK CUTS:
-    cutsRP[icentr] = new AliFlowTrackCuts(Form("TPConlyRP_%d",icentr));
-    cutsRP[icentr]->SetParamType(rptype);
-    cutsRP[icentr]->SetParamMix(rpmix);
-    cutsRP[icentr]->SetPtRange(0.2,5.);
-    cutsRP[icentr]->SetEtaRange(etamin,etamax);
-    cutsRP[icentr]->SetMinNClustersTPC(70);
-    //  cutsRP->SetMinChi2PerClusterTPC(0.1);//
-    // cutsRP->SetMaxChi2PerClusterTPC(4.0);//
-    cutsRP[icentr]->SetMaxDCAToVertexXY(3.0);
-    cutsRP[icentr]->SetMaxDCAToVertexZ(3.0);
-    cutsRP[icentr]->SetAcceptKinkDaughters(kFALSE);
-    cutsRP[icentr]->SetMinimalTPCdedx(MinTPCdedx);
-    cutsRP[icentr]->SetAODfilterBit(AODfilterBitRP);
+    cutsRP[icentr] = new AliFlowTrackCuts(Form("RP_%d",icentr));
+    if(!VZERO){
+        //cutsRP[icentr]->SetParamType(rptype);
+        cutsRP[icentr]->SetParamMix(rpmix);
+        cutsRP[icentr]->SetPtRange(0.2,5.);
+        cutsRP[icentr]->SetEtaRange(etamin,etamax);
+        cutsRP[icentr]->SetMinNClustersTPC(70);
+        //  cutsRP->SetMinChi2PerClusterTPC(0.1);//
+        // cutsRP->SetMaxChi2PerClusterTPC(4.0);//
+        cutsRP[icentr]->SetMaxDCAToVertexXY(3.0);
+        cutsRP[icentr]->SetMaxDCAToVertexZ(3.0);
+        cutsRP[icentr]->SetAcceptKinkDaughters(kFALSE);
+        cutsRP[icentr]->SetMinimalTPCdedx(MinTPCdedx);
+        cutsRP[icentr]->SetAODfilterBit(AODfilterBitRP);
+    }
+    
+    if(VZERO) { // use vzero sub analysis
+        cutsRP[icentr] = cutsRP[icentr]->GetStandardVZEROOnlyTrackCuts(); // select vzero tracks
+      //  cutsRP[icentr]->SetV0gainEqualizationPerRing(kFALSE);
+        cutsRP[icentr]->SetApplyRecentering(kTRUE);
+        EtaGap = 0.;
+    }//vzero is not a tracking device it is just a scintillator. so pt range or DCAtoVertex are not set here.
     cutsRP[icentr]->SetQA(doQA);
 
     
@@ -105,13 +114,20 @@ for(int icentr=0;icentr<ncentr;icentr++){
     SP_POI[icentr]->SetParamMix(poimix);
     SP_POI[icentr]->SetPtRange(0.2,5.);//
     SP_POI[icentr]->SetMinNClustersTPC(70);
-    if(Qvector=="Qa"){
+    if(!VZERO && Qvector=="Qa"){
         SP_POI[icentr]->SetEtaRange( +0.5*EtaGap, etamax );
+        printf(" > NOTE: Using half TPC (Qa) as POI selection u < \n");
+
     }
-    if(Qvector=="Qb"){
+    if(!VZERO && Qvector=="Qb"){
         SP_POI[icentr]->SetEtaRange( etamin,-0.5*EtaGap );
-    }
+        printf(" > NOTE: Using half TPC (Qb) as POI selection u < \n");
 
+    }
+    if(VZERO){
+        SP_POI[icentr]->SetEtaRange( etamin,etamax );
+        printf(" > NOTE: Using full TPC as POI selection u < \n");
+    }
     // SP_POI->SetMinChi2PerClusterTPC(0.1); //
     // SP_POI->SetMaxChi2PerClusterTPC(4.0); //
     //  SP_POI->SetRequireITSRefit(kTRUE);
@@ -263,8 +279,10 @@ for (int icentr=0; icentr<ncentr; icentr++) {
                                                                    AliAnalysisManager::kExchangeContainer );
         
         tskFilter[icentr][harm-2] = new AliAnalysisTaskFilterFE( Form("TaskFilter_%s",myNameSP[icentr][harm-2].Data()),cutsRP[icentr], NULL);
-        tskFilter[icentr][harm-2]->SetSubeventEtaRange(etamin, -.5*EtaGap, +.5*EtaGap, etamax);
-        
+        if(!VZERO){
+            tskFilter[icentr][harm-2]->SetSubeventEtaRange(etamin, -.5*EtaGap, +.5*EtaGap, etamax);
+        }
+        else tskFilter[icentr][harm-2]->SetSubeventEtaRange(-10, -1, +1, 10);
         mgr->AddTask(tskFilter[icentr][harm-2]);
         mgr->ConnectInput( tskFilter[icentr][harm-2],0,coutputFE[icentr]);
         mgr->ConnectOutput(tskFilter[icentr][harm-2],1,flowEvent[icentr][harm-2]);
@@ -310,11 +328,11 @@ AliFlowEventCuts* DefinecutsEvent(Int_t icentr){
     return cutsEvent;
 }
 AliFlowTrackCuts* DefineRPcuts(Int_t icentr){
-    AliFlowTrackCuts* cutsRP = new AliFlowTrackCuts(Form("TPConlyRP_%d",icentr));
+    AliFlowTrackCuts* cutsRP = new AliFlowTrackCuts(Form("RP_%d",icentr));
     return cutsRP;
 }
 AliFlowTrackCuts* DefinePOIcuts(Int_t icentr){
-    AliFlowTrackCuts* cutsPOI = new AliFlowTrackCuts(Form("TPConlyPOI_%d",icentr));
+    AliFlowTrackCuts* cutsPOI = new AliFlowTrackCuts(Form("POI_%d",icentr));
     return cutsPOI;
 }
 
index a6d5fb336a5bebe3dda4f36e9d9e0b486844ff32..5cc1d0a000a0941c5692f75d83b2a3ab74febcf6 100644 (file)
@@ -3450,7 +3450,10 @@ Bool_t AliConversionCuts::IsTriggerSelected(AliVEvent *fInputEvent)
          else {
             if (fIsHeavyIon == 1) fOfflineTriggerMask = AliVEvent::kMB | AliVEvent::kCentral | AliVEvent::kSemiCentral;
             else if (fIsHeavyIon == 2) fOfflineTriggerMask = AliVEvent::kINT7;
-            else if (periodName.CompareTo("LHC11c") == 0 || periodName.CompareTo("LHC11d") == 0 || periodName.CompareTo("LHC11e") == 0 || periodName.CompareTo("LHC11f") == 0 || periodName.CompareTo("LHC11g") == 0  || periodName.CompareTo("LHC12a") == 0 || periodName.CompareTo("LHC12b") == 0 || periodName.CompareTo("LHC12c") == 0 || periodName.CompareTo("LHC12d") == 0 || periodName.CompareTo("LHC11f") == 0  || periodName.CompareTo("LHC13g") == 0 ) fOfflineTriggerMask = AliVEvent::kINT7;      
+            else if (periodName.CompareTo("LHC11c") == 0 || periodName.CompareTo("LHC11d") == 0 || periodName.CompareTo("LHC11e") == 0 || periodName.CompareTo("LHC11f") == 0 || periodName.CompareTo("LHC11g") == 0  || periodName.CompareTo("LHC12a") == 0 || periodName.CompareTo("LHC12b") == 0 || periodName.CompareTo("LHC12c") == 0 || periodName.CompareTo("LHC12d") == 0 || periodName.CompareTo("LHC12f") == 0  || periodName.CompareTo("LHC13g") == 0 ) {
+                               fOfflineTriggerMask = AliVEvent::kINT7;      
+//                             cout << "will take kINT7 as trigger mask" << endl; 
+                       }       
             else fOfflineTriggerMask = AliVEvent::kMB;
          }
       }
index 1132976b733686e47ca8b5ed02f82af05eb5d6b7..370370b680593f55ef7a2c02e6985211e34e11c9 100644 (file)
@@ -662,7 +662,7 @@ void AddTask_GammaConvV1_PbPb(  Int_t trainConfig = 1,  //change different set o
                cutarray[ 2] = "5010001002092970022250400000"; mesonCutArray[2]= "01525065000000"; // 0-10%
                cutarray[ 3] = "5240001002092970022250400000"; mesonCutArray[3]= "01525065000000"; // 20-40%
                cutarray[ 4] = "5250001002092970022250400000"; mesonCutArray[4]= "01525065000000"; // 20-50%
-       } else if ( trainConfig == 95){ // qt 0.07 no2D  added signal
+       } else if ( trainConfig         == 95){ // qt 0.07 no2D  added signal
                cutarray[ 0] = "6010002002092970022250400000"; mesonCutArray[0]= "01525065000000"; // 0-5%
                cutarray[ 1] = "6120002002092970022250400000"; mesonCutArray[1]= "01525065000000"; // 5-10%
                cutarray[ 2] = "5010002002092970022250400000"; mesonCutArray[2]= "01525065000000"; // 0-10%
@@ -752,9 +752,21 @@ void AddTask_GammaConvV1_PbPb(  Int_t trainConfig = 1,  //change different set o
                cutarray[ 2] = "5010002002092970028280400000"; mesonCutArray[2]= "01525065000000"; // 0-10%
                cutarray[ 3] = "5240002002092970028280400000"; mesonCutArray[3]= "01525065000000"; // 20-40%
                cutarray[ 4] = "5250002002092970028280400000"; mesonCutArray[4]= "01525065000000"; // 20-50%
+   } else if ( trainConfig == 110){ // cleaner cuts
+               cutarray[ 0] = "6010001002092970028250400000"; mesonCutArray[ 0] = "01525065000000"; // 0-5%
+               cutarray[ 1] = "6120001002092970028250400000"; mesonCutArray[ 1] = "01525065000000"; // 5-10%
+               cutarray[ 2] = "5010001002092970028250400000"; mesonCutArray[ 2] = "01525065000000"; // 0-10%
+               cutarray[ 3] = "5240001002092970028250400000"; mesonCutArray[ 3] = "01525065000000"; // 10-20%
+               cutarray[ 4] = "5250001002092970028250400000"; mesonCutArray[ 4] = "01525065000000"; // 0-20%
+   } else if ( trainConfig == 111){ // cleaner cuts added signal
+               cutarray[ 0] = "6010002002092970028250400000"; mesonCutArray[ 0] = "01525065000000"; // 0-5%
+               cutarray[ 1] = "6120002002092970028250400000"; mesonCutArray[ 1] = "01525065000000"; // 5-10%
+               cutarray[ 2] = "5010002002092970028250400000"; mesonCutArray[ 2] = "01525065000000"; // 0-10%
+               cutarray[ 3] = "5240002002092970028250400000"; mesonCutArray[ 3] = "01525065000000"; // 10-20%
+               cutarray[ 4] = "5250002002092970028250400000"; mesonCutArray[ 4] = "01525065000000"; // 0-20%                   
        } else {
-      Error(Form("GammaConvV1_%i",trainConfig), "wrong trainConfig variable no cuts have been specified for the configuration");
-      return;
+               Error(Form("GammaConvV1_%i",trainConfig), "wrong trainConfig variable no cuts have been specified for the configuration");
+               return;
    }
 
        TList *ConvCutList = new TList();
@@ -821,76 +833,76 @@ void AddTask_GammaConvV1_PbPb(  Int_t trainConfig = 1,  //change different set o
 
                if (trainConfig == 56 ){
                        if (periodName.CompareTo("LHC14a1a") ==0 || periodName.CompareTo("LHC14a1b") ==0 || periodName.CompareTo("LHC14a1c") ==0 ){
-                               if ( i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_0005TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_0005TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0005V0M","Eta_Fit_Data_PbPb_2760GeV_0005V0M");
-                               if ( i == 1 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_0510TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_0510TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0510V0M","Eta_Fit_Data_PbPb_2760GeV_0510V0M");
-                               if ( i == 2 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_0010TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_0010TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0010V0M","Eta_Fit_Data_PbPb_2760GeV_0010V0M");
-                               if ( i == 3 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_1020TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_1020TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_1020V0M","Eta_Fit_Data_PbPb_2760GeV_1020V0M");
-                               if ( i == 4 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_0020TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_0020TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0020V0M","Eta_Fit_Data_PbPb_2760GeV_0020V0M");
+                               if ( i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_0005TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_0005TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0005V0M","Eta_Fit_Data_PbPb_2760GeV_0005V0M");
+                               if ( i == 1 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_0510TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_0510TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0510V0M","Eta_Fit_Data_PbPb_2760GeV_0510V0M");
+                               if ( i == 2 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_0010TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_0010TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0010V0M","Eta_Fit_Data_PbPb_2760GeV_0010V0M");
+                               if ( i == 3 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_1020TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_1020TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_1020V0M","Eta_Fit_Data_PbPb_2760GeV_1020V0M");
+                               if ( i == 4 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_0020TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_0020TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0020V0M","Eta_Fit_Data_PbPb_2760GeV_0020V0M");
                        }       
                }         
                if (trainConfig == 57 ){
                        if (periodName.CompareTo("LHC14a1a") ==0 || periodName.CompareTo("LHC14a1b") ==0 || periodName.CompareTo("LHC14a1c") ==0 ){
-                               if ( i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_0005TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_0005TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0005V0M","Eta_Fit_Data_PbPb_2760GeV_0005V0M");
-                               if ( i == 1 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_0510TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_0510TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0510V0M","Eta_Fit_Data_PbPb_2760GeV_0510V0M");
-                               if ( i == 2 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_0010TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_0010TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0010V0M","Eta_Fit_Data_PbPb_2760GeV_0010V0M");
-                               if ( i == 3 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_1020TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_1020TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_1020V0M","Eta_Fit_Data_PbPb_2760GeV_1020V0M");
-                               if ( i == 4 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_0020TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_0020TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0020V0M","Eta_Fit_Data_PbPb_2760GeV_0020V0M");
+                               if ( i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_0005TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_0005TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0005V0M","Eta_Fit_Data_PbPb_2760GeV_0005V0M");
+                               if ( i == 1 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_0510TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_0510TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0510V0M","Eta_Fit_Data_PbPb_2760GeV_0510V0M");
+                               if ( i == 2 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_0010TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_0010TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0010V0M","Eta_Fit_Data_PbPb_2760GeV_0010V0M");
+                               if ( i == 3 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_1020TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_1020TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_1020V0M","Eta_Fit_Data_PbPb_2760GeV_1020V0M");
+                               if ( i == 4 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_0020TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_0020TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0020V0M","Eta_Fit_Data_PbPb_2760GeV_0020V0M");
                        }       
                }         
                if (trainConfig == 58 ){
                        if (periodName.CompareTo("LHC14a1a") ==0 || periodName.CompareTo("LHC14a1b") ==0 || periodName.CompareTo("LHC14a1c") ==0 ){
-                               if ( i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_2040TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_2040TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2040V0M","Eta_Fit_Data_PbPb_2760GeV_2040V0M");
-                               if ( i == 1 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_4060TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_4060TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_4060V0M","Eta_Fit_Data_PbPb_2760GeV_4060V0M");
-                               if ( i == 2 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_6080TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_6080TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_6080V0M","Eta_Fit_Data_PbPb_2760GeV_6080V0M");
-                               if ( i == 3 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_4080TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_4080TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_1020V0M","Eta_Fit_Data_PbPb_2760GeV_1020V0M");
-                               if ( i == 4 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_3050TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_3050TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_3050V0M","Eta_Fit_Data_PbPb_2760GeV_3050V0M");
+                               if ( i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_2040TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_2040TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2040V0M","Eta_Fit_Data_PbPb_2760GeV_2040V0M");
+                               if ( i == 1 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_4060TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_4060TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_4060V0M","Eta_Fit_Data_PbPb_2760GeV_4060V0M");
+                               if ( i == 2 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_6080TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_6080TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_6080V0M","Eta_Fit_Data_PbPb_2760GeV_6080V0M");
+                               if ( i == 3 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_4080TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_4080TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_1020V0M","Eta_Fit_Data_PbPb_2760GeV_1020V0M");
+                               if ( i == 4 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_3050TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_3050TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_3050V0M","Eta_Fit_Data_PbPb_2760GeV_3050V0M");
                        }       
                }         
                if (trainConfig == 59 ){
                        if (periodName.CompareTo("LHC14a1a") ==0 || periodName.CompareTo("LHC14a1b") ==0 || periodName.CompareTo("LHC14a1c") ==0 ){
-                               if ( i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_2040TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_2040TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2040V0M","Eta_Fit_Data_PbPb_2760GeV_2040V0M");
-                               if ( i == 1 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_4060TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_4060TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_4060V0M","Eta_Fit_Data_PbPb_2760GeV_4060V0M");
-                               if ( i == 2 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_6080TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_6080TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_6080V0M","Eta_Fit_Data_PbPb_2760GeV_6080V0M");
-                               if ( i == 3 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_4080TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_4080TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_1020V0M","Eta_Fit_Data_PbPb_2760GeV_1020V0M");
-                               if ( i == 4 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_3050TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_3050TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_3050V0M","Eta_Fit_Data_PbPb_2760GeV_3050V0M");
+                               if ( i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_2040TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_2040TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2040V0M","Eta_Fit_Data_PbPb_2760GeV_2040V0M");
+                               if ( i == 1 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_4060TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_4060TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_4060V0M","Eta_Fit_Data_PbPb_2760GeV_4060V0M");
+                               if ( i == 2 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_6080TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_6080TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_6080V0M","Eta_Fit_Data_PbPb_2760GeV_6080V0M");
+                               if ( i == 3 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_4080TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_4080TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_1020V0M","Eta_Fit_Data_PbPb_2760GeV_1020V0M");
+                               if ( i == 4 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_3050TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_3050TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_3050V0M","Eta_Fit_Data_PbPb_2760GeV_3050V0M");
                        }       
                }         
        
                if (trainConfig == 60 ){
                        if (periodName.CompareTo("LHC14a1a") ==0 || periodName.CompareTo("LHC14a1b") ==0 || periodName.CompareTo("LHC14a1c") ==0 ){
-                               if ( i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_2030TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_2030TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2030V0M","Eta_Fit_Data_PbPb_2760GeV_2030V0M");
-                               if ( i == 1 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_3040TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_3040TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_3040V0M","Eta_Fit_Data_PbPb_2760GeV_3040V0M");
-                               if ( i == 2 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_4050TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_4050TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_4050V0M","Eta_Fit_Data_PbPb_2760GeV_4050V0M");
-                               if ( i == 3 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_5060TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_5060TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_5060V0M","Eta_Fit_Data_PbPb_2760GeV_5060V0M");
-                               if ( i == 4 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_2050TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_2050TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2050V0M","Eta_Fit_Data_PbPb_2760GeV_2050V0M");
+                               if ( i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_2030TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_2030TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2030V0M","Eta_Fit_Data_PbPb_2760GeV_2030V0M");
+                               if ( i == 1 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_3040TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_3040TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_3040V0M","Eta_Fit_Data_PbPb_2760GeV_3040V0M");
+                               if ( i == 2 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_4050TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_4050TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_4050V0M","Eta_Fit_Data_PbPb_2760GeV_4050V0M");
+                               if ( i == 3 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_5060TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_5060TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_5060V0M","Eta_Fit_Data_PbPb_2760GeV_5060V0M");
+                               if ( i == 4 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_2050TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_2050TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2050V0M","Eta_Fit_Data_PbPb_2760GeV_2050V0M");
                        }       
                }         
                if (trainConfig == 61 ){
                        if (periodName.CompareTo("LHC14a1a") ==0 || periodName.CompareTo("LHC14a1b") ==0 || periodName.CompareTo("LHC14a1c") ==0 ){
-                               if ( i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_2030TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_2030TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2030V0M","Eta_Fit_Data_PbPb_2760GeV_2030V0M");
-                               if ( i == 1 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_3040TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_3040TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_3040V0M","Eta_Fit_Data_PbPb_2760GeV_3040V0M");
-                               if ( i == 2 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_4050TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_4050TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_4050V0M","Eta_Fit_Data_PbPb_2760GeV_4050V0M");
-                               if ( i == 3 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_5060TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_5060TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_5060V0M","Eta_Fit_Data_PbPb_2760GeV_5060V0M");
-                               if ( i == 4 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_2050TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_2050TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2050V0M","Eta_Fit_Data_PbPb_2760GeV_2050V0M");
+                               if ( i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_2030TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_2030TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2030V0M","Eta_Fit_Data_PbPb_2760GeV_2030V0M");
+                               if ( i == 1 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_3040TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_3040TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_3040V0M","Eta_Fit_Data_PbPb_2760GeV_3040V0M");
+                               if ( i == 2 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_4050TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_4050TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_4050V0M","Eta_Fit_Data_PbPb_2760GeV_4050V0M");
+                               if ( i == 3 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_5060TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_5060TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_5060V0M","Eta_Fit_Data_PbPb_2760GeV_5060V0M");
+                               if ( i == 4 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_2050TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_2050TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2050V0M","Eta_Fit_Data_PbPb_2760GeV_2050V0M");
                        }       
                }         
                
-               if ( trainConfig == 70 || trainConfig == 72  || trainConfig == 74  || trainConfig == 76  || trainConfig == 78  || trainConfig == 80  || trainConfig == 82  || trainConfig == 84 || trainConfig == 86  || trainConfig == 88  || trainConfig == 90 || trainConfig == 92 || trainConfig == 94 || trainConfig == 96  || trainConfig == 98  || trainConfig == 100 || trainConfig == 102  || trainConfig == 104 || trainConfig == 106 || trainConfig == 108){
+               if ( trainConfig == 70 || trainConfig == 72  || trainConfig == 74  || trainConfig == 76  || trainConfig == 78  || trainConfig == 80  || trainConfig == 82  || trainConfig == 84 || trainConfig == 86  || trainConfig == 88  || trainConfig == 90 || trainConfig == 92 || trainConfig == 94 || trainConfig == 96  || trainConfig == 98  || trainConfig == 100 || trainConfig == 102  || trainConfig == 104 || trainConfig == 106 || trainConfig == 108 || trainConfig == 110){
                        if (periodName.CompareTo("LHC14a1a") ==0 || periodName.CompareTo("LHC14a1b") ==0 || periodName.CompareTo("LHC14a1c") ==0 ){
-                               if ( i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_0005TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_0005TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0005V0M","Eta_Fit_Data_PbPb_2760GeV_0005V0M");
-                               if ( i == 1 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_0510TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_0510TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0510V0M","Eta_Fit_Data_PbPb_2760GeV_0510V0M");
-                               if ( i == 2 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_0010TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_0010TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0010V0M","Eta_Fit_Data_PbPb_2760GeV_0010V0M");
-                               if ( i == 3 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_2040TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_2040TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2040V0M","Eta_Fit_Data_PbPb_2760GeV_2040V0M");
-                               if ( i == 4 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_2050TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_2050TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2050V0M","Eta_Fit_Data_PbPb_2760GeV_2050V0M");
+                               if ( i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_0005TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_0005TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0005V0M","Eta_Fit_Data_PbPb_2760GeV_0005V0M");
+                               if ( i == 1 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_0510TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_0510TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0510V0M","Eta_Fit_Data_PbPb_2760GeV_0510V0M");
+                               if ( i == 2 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_0010TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_0010TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0010V0M","Eta_Fit_Data_PbPb_2760GeV_0010V0M");
+                               if ( i == 3 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_2040TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_2040TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2040V0M","Eta_Fit_Data_PbPb_2760GeV_2040V0M");
+                               if ( i == 4 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_2050TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_2050TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2050V0M","Eta_Fit_Data_PbPb_2760GeV_2050V0M");
                        }       
                } 
-               if ( trainConfig == 71 || trainConfig == 73  || trainConfig == 75  || trainConfig == 77  || trainConfig == 79  || trainConfig == 81  || trainConfig == 83  || trainConfig == 85 || trainConfig == 87  || trainConfig == 89  || trainConfig == 91 || trainConfig == 93 || trainConfig == 95 || trainConfig == 97  || trainConfig == 99  || trainConfig == 101 || trainConfig == 103  || trainConfig == 105 || trainConfig == 107 || trainConfig == 109){
+               if ( trainConfig == 71 || trainConfig == 73  || trainConfig == 75  || trainConfig == 77  || trainConfig == 79  || trainConfig == 81  || trainConfig == 83  || trainConfig == 85 || trainConfig == 87  || trainConfig == 89  || trainConfig == 91 || trainConfig == 93 || trainConfig == 95 || trainConfig == 97  || trainConfig == 99  || trainConfig == 101 || trainConfig == 103  || trainConfig == 105 || trainConfig == 107 || trainConfig == 109 || trainConfig == 111){
                        if (periodName.CompareTo("LHC14a1a") ==0 || periodName.CompareTo("LHC14a1b") ==0 || periodName.CompareTo("LHC14a1c") ==0 ){
-                               if ( i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_0005TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_0005TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0005V0M","Eta_Fit_Data_PbPb_2760GeV_0005V0M");
-                               if ( i == 1 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_0510TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_0510TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0510V0M","Eta_Fit_Data_PbPb_2760GeV_0510V0M");
-                               if ( i == 2 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_0010TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_0010TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0010V0M","Eta_Fit_Data_PbPb_2760GeV_0010V0M");
-                               if ( i == 3 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_2040TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_2040TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2040V0M","Eta_Fit_Data_PbPb_2760GeV_2040V0M");
-                               if ( i == 4 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_2050TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_2050TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2050V0M","Eta_Fit_Data_PbPb_2760GeV_2050V0M");
+                               if ( i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_0005TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_0005TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0005V0M","Eta_Fit_Data_PbPb_2760GeV_0005V0M");
+                               if ( i == 1 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_0510TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_0510TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0510V0M","Eta_Fit_Data_PbPb_2760GeV_0510V0M");
+                               if ( i == 2 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_0010TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_0010TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0010V0M","Eta_Fit_Data_PbPb_2760GeV_0010V0M");
+                               if ( i == 3 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_2040TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_2040TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2040V0M","Eta_Fit_Data_PbPb_2760GeV_2040V0M");
+                               if ( i == 4 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_2050TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_2050TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2050V0M","Eta_Fit_Data_PbPb_2760GeV_2050V0M");
                        }       
                } 
                
index ce83d367f74a119b769ccd8586e1ef51081ecb6e..cc7d2930f95c736e08bef6555dac1bf6f59ad6f8 100644 (file)
@@ -113,10 +113,10 @@ Bool_t AliAnalysisTaskEmcalJetPatchTriggerQA::Run()
 //  if (!fJets)  return kTRUE;
 
   // get centrality bin
-  Int_t centbin = GetCentBin(fCent);
-  //for pp analyses we will just use the first centrality bin
-  if (centbin == -1)
-    centbin = 0;
+//   Int_t centbin = GetCentBin(fCent);
+//   //for pp analyses we will just use the first centrality bin
+//   if (centbin == -1)
+//     centbin = 0;
 
   // get event plane info from event
   AliEventplane *aliEP = InputEvent()->GetEventplane();
@@ -184,7 +184,7 @@ Bool_t AliAnalysisTaskEmcalJetPatchTriggerQA::Run()
 
      // need to update entries soon
      //Double_t Entries[10] = {centbin, jetPtLocal, jetPtGlobal, jetPtraw, jet->Eta(), jet->Phi(), dEP, fLocalRhoVal, fRhoVal, fEPV0};
-     Double_t Entries[9] = {centbin, jetPtLocal, jetPtGlobal, jetPtraw, jet->Phi(), dEP, fLocalRhoVal, fRhoVal, fEPV0};
+     Double_t Entries[9] = {fCent, jetPtLocal, jetPtGlobal, jetPtraw, jet->Phi(), dEP, fLocalRhoVal, fRhoVal, fEPV0};
      fhnJetTriggerQA->Fill(Entries);        // fill Sparse Histo with entries
 
      // in plane and out of plane histo's
index dacb4a842583ba48537977cd9e3f3d35b6128406..c8421281e1944ce219065c4266128bd285f7a6f5 100644 (file)
@@ -4,6 +4,7 @@
 #include "TH1.h"
 #include "TH2.h"
 #include "TH3.h"
+#include "TF1.h"
 #include "TFormula.h"
 #include "TRandom.h"
 
@@ -72,6 +73,7 @@ AliAnalysisTaskJetProtonCorr::AliAnalysisTaskJetProtonCorr(const char *name) :
   fPoolMgr(),
   fPool(),
   fHistCorr(0x0),
+  fErrorMsg(10),
   fOutputList(),
   fHist(),
   fShortTaskId("jet_prot_corr"),
@@ -81,11 +83,16 @@ AliAnalysisTaskJetProtonCorr::AliAnalysisTaskJetProtonCorr(const char *name) :
   fCutsPrimTrgConstrain(new AliESDtrackCuts()),
   fCutsPrimAss(0x0),
   fCutsTwoTrackEff(0.02),
+  fAssFilterMask(1 << 10),
+  fTrgJetEtaMax(0.45),
+  fHadEtaMax(0.8),
   fTrgPartPtMin(6.),
   fTrgPartPtMax(8.),
   fTrgJetPtMin(50.),
   fTrgJetPtMax(80.),
-  fTrgJetLeadTrkPtMin(5.),
+  fTrgJetLeadTrkPtMin(6.),
+  fTrgJetLeadTrkPtMax(100.),
+  fTrgJetAreaMin(0.6 * TMath::Pi() * 0.2*0.2),
   fAssPartPtMin(2.),
   fAssPartPtMax(4.),
   fTrgAngleToEvPlane(TMath::Pi() / 4.),
@@ -147,15 +154,15 @@ AliAnalysisTaskJetProtonCorr::AliAnalysisTaskJetProtonCorr(const char *name) :
 
   }
 
-  fCutsPrimAss->SetEtaRange(-0.9, 0.9);
+  fCutsPrimAss->SetEtaRange(-fHadEtaMax, fHadEtaMax);
   fCutsPrimAss->SetPtRange(0.15, 1E+15);
 
   // track cuts for triggers
   fCutsPrimTrg = new AliESDtrackCuts(*fCutsPrimAss);
 
   // azimuthal modulation for triggers
-  fTrgJetPhiModCent->SetParameter(0, .02);
-  fTrgJetPhiModSemi->SetParameter(0, .02);
+  fTrgJetPhiModCent->SetParameter(0, .10);
+  fTrgJetPhiModSemi->SetParameter(0, .10);
   fTrgHadPhiModCent->SetParameter(0, .04);
   fTrgHadPhiModSemi->SetParameter(0, .10);
 
@@ -533,33 +540,33 @@ void AliAnalysisTaskJetProtonCorr::UserCreateOutputObjects()
 
   AddHistogram(ID(kHistPhiTrgJetEvPlane), "trg jet;#varphi - #Psi_{ev};centrality",
               100, -0. * TMath::Pi(), 2. * TMath::Pi(),
-              100., 0., 100.);
+              100, 0., 100.);
   AddHistogram(ID(kHistPhiTrgHadEvPlane), "trg had;#varphi - #Psi_{ev};centrality",
               100, -0. * TMath::Pi(), 2. * TMath::Pi(),
-              100., 0., 100.);
+              100, 0., 100.);
   AddHistogram(ID(kHistPhiAssHadEvPlane), "ass had;#varphi - #Psi_{ev};centrality",
               100, -0. * TMath::Pi(), 2. * TMath::Pi(),
-              100., 0., 100.);
+              100, 0., 100.);
   AddHistogram(ID(kHistPhiAssProtEvPlane), "ass prot;#varphi - #Psi_{ev};centrality",
               100, -0. * TMath::Pi(), 2. * TMath::Pi(),
-              100., 0., 100.);
+              100, 0., 100.);
   AddHistogram(ID(kHistPhiAssHadVsEvPlane), "ass had;#Psi_{ev};#varphi;centrality",
               100, -0. * TMath::Pi(), 1. * TMath::Pi(),
               100, -0. * TMath::Pi(), 2. * TMath::Pi(),
-              100., 0., 100.);
+              100, 0., 100.);
 
   AddHistogram(ID(kHistPhiTrgJetEvPlane3), "trg jet;#varphi - #Psi_{ev};centrality",
               100, -0. * TMath::Pi(), 2. * TMath::Pi(),
-              100., 0., 100.);
+              100, 0., 100.);
   AddHistogram(ID(kHistPhiTrgHadEvPlane3), "trg had;#varphi - #Psi_{ev};centrality",
               100, -0. * TMath::Pi(), 2. * TMath::Pi(),
-              100., 0., 100.);
+              100, 0., 100.);
   AddHistogram(ID(kHistPhiAssHadEvPlane3), "ass had;#varphi - #Psi_{ev};centrality",
               100, -0. * TMath::Pi(), 2. * TMath::Pi(),
-              100., 0., 100.);
+              100, 0., 100.);
   AddHistogram(ID(kHistPhiAssProtEvPlane3), "ass prot;#varphi - #Psi_{ev};centrality",
               100, -0. * TMath::Pi(), 2. * TMath::Pi(),
-              100., 0., 100.);
+              100, 0., 100.);
 
   for (Int_t iCorr = 0; iCorr < kCorrLast; ++iCorr) {
     for (Int_t iCl = 0; iCl < kClLast; ++iCl) {
@@ -871,11 +878,11 @@ void AliAnalysisTaskJetProtonCorr::UserExec(Option_t * /* option */)
          Double_t rndTOFmismatch = AliTOFPIDResponse::GetMismatchRandomValue(trk->Eta());
 
          if(IsClass(kClCentral)) {
-           FillH2(kHistNsigmaTOFmismatch, p, (rndTOFmismatch - expTOF) / expSigmaTOF);
+           FillH2(kHistNsigmaTOFmismatch, trk->P(), (rndTOFmismatch - expTOF) / expSigmaTOF);
            FillH2(kHistDeltaTOF, trk->P(), deltaTOF * 1.e-3); // ps -> ns
          }
          if(IsClass(kClSemiCentral)) {
-           FillH2(kHistNsigmaTOFmismatchSemi, p, (rndTOFmismatch - expTOF) / expSigmaTOF);
+           FillH2(kHistNsigmaTOFmismatchSemi, trk->P(), (rndTOFmismatch - expTOF) / expSigmaTOF);
            FillH2(kHistDeltaTOFSemi, trk->P(), deltaTOF * 1.e-3); // ps -> ns
          }
        }
@@ -1139,9 +1146,7 @@ Bool_t AliAnalysisTaskJetProtonCorr::PrepareEvent()
     const Int_t nTracksAODAss = fAODEvent->GetNumberOfTracks();
     for (Int_t iTrack = 0; iTrack < nTracksAODAss; ++iTrack) {
       AliAODTrack *trk = fAODEvent->GetTrack(iTrack);
-      // 4: track cuts esdTrackCutsH ???
-      // 10: R_AA cuts
-      if (trk->TestFilterMask(1 << 4))
+      if (trk->TestFilterMask(fAssFilterMask))
         fPrimTrackArrayAss->Add(trk);
     }
 
@@ -1165,7 +1170,10 @@ Bool_t AliAnalysisTaskJetProtonCorr::PrepareEvent()
       if (AODEvent())
         fJetArray = dynamic_cast<TClonesArray*> (AODEvent()->FindListObject(fJetBranchName));
       if (!fJetArray) {
-        printf("no jet branch \"%s\" found, in the AODs are:\n", fJetBranchName);
+       if (fErrorMsg > 0) {
+         AliError(Form("no jet branch \"%s\" found, in the AODs are:", fJetBranchName));
+         --fErrorMsg;
+       }
         if (fDebug > 0) {
          fAODEvent->GetList()->Print();
           if (AODEvent())
@@ -1188,7 +1196,7 @@ Bool_t AliAnalysisTaskJetProtonCorr::PrepareEvent()
   return eventGood;
 }
 
-Bool_t AliAnalysisTaskJetProtonCorr::AcceptTrigger(AliVTrack *trg)
+Bool_t AliAnalysisTaskJetProtonCorr::AcceptTrigger(const AliVTrack *trg)
 {
   // check pt interval
   Bool_t acceptPt =
@@ -1216,7 +1224,7 @@ Bool_t AliAnalysisTaskJetProtonCorr::AcceptTrigger(AliVTrack *trg)
   return (acceptPt && acceptOrientation);
 }
 
-AliVTrack* AliAnalysisTaskJetProtonCorr::GetLeadingTrack(AliAODJet *jet) const
+AliVTrack* AliAnalysisTaskJetProtonCorr::GetLeadingTrack(const AliAODJet *jet) const
 {
   // return leading track within a jet
 
@@ -1237,15 +1245,22 @@ AliVTrack* AliAnalysisTaskJetProtonCorr::GetLeadingTrack(AliAODJet *jet) const
   return (AliAODTrack*) jet->GetRefTracks()->At(iLeadingTrack);
 }
 
-Bool_t AliAnalysisTaskJetProtonCorr::AcceptTrigger(AliAODJet *trg)
+Bool_t AliAnalysisTaskJetProtonCorr::AcceptTrigger(const AliAODJet *trg)
 {
   // restrict eta
-  if (TMath::Abs(trg->Eta()) > .5)
+  if (TMath::Abs(trg->Eta()) > fTrgJetEtaMax)
+    return kFALSE;
+
+  // reject too small jets
+  if (trg->EffectiveAreaCharged() < fTrgJetAreaMin)
     return kFALSE;
 
   // require hard leading track
   // (leading track biased jet sample)
-  if (GetLeadingTrack(trg)->Pt() < fTrgJetLeadTrkPtMin)
+  // but reject jets with too high pt constituents
+  const Float_t ptLeadTrack = GetLeadingTrack(trg)->Pt();
+  if ((ptLeadTrack < fTrgJetLeadTrkPtMin) ||
+      (ptLeadTrack > fTrgJetLeadTrkPtMax))
     return kFALSE;
 
   // check for jet orientation w.r.t. event plane
@@ -1253,6 +1268,7 @@ Bool_t AliAnalysisTaskJetProtonCorr::AcceptTrigger(AliAODJet *trg)
   Bool_t acceptOrientation = IsSemiCentral() ?
     AcceptAngleToEvPlane(trg->Phi(), GetEventPlaneAngle()) :
     kTRUE;
+
   // check for jet pt
   Bool_t acceptPt =
     (trg->Pt() >= fTrgJetPtMin) &&
@@ -1284,7 +1300,7 @@ Bool_t AliAnalysisTaskJetProtonCorr::AcceptTrigger(AliAODJet *trg)
   return (acceptPt && acceptOrientation);
 }
 
-Bool_t AliAnalysisTaskJetProtonCorr::AcceptAssoc(AliVTrack *trk)
+Bool_t AliAnalysisTaskJetProtonCorr::AcceptAssoc(const AliVTrack *trk) const
 {
   if ((trk->Pt() > fAssPartPtMin) && (trk->Pt() < fAssPartPtMax) &&
       (fPIDResponse->CheckPIDStatus(AliPIDResponse::kTPC, trk) == AliPIDResponse::kDetPidOk) &&
@@ -1297,7 +1313,7 @@ Bool_t AliAnalysisTaskJetProtonCorr::AcceptAssoc(AliVTrack *trk)
   return kFALSE;
 }
 
-Bool_t AliAnalysisTaskJetProtonCorr::IsProton(AliVTrack *trk)
+Bool_t AliAnalysisTaskJetProtonCorr::IsProton(const AliVTrack *trk) const
 {
   Double_t nSigmaProtonTPC = fPIDResponse->NumberOfSigmasTPC(trk, AliPID::kProton);
   Double_t nSigmaProtonTOF = fPIDResponse->NumberOfSigmasTOF(trk, AliPID::kProton);
@@ -1309,7 +1325,7 @@ Bool_t AliAnalysisTaskJetProtonCorr::IsProton(AliVTrack *trk)
   return kFALSE;
 }
 
-Bool_t AliAnalysisTaskJetProtonCorr::AcceptAngleToEvPlane(Float_t phi, Float_t psi)
+Bool_t AliAnalysisTaskJetProtonCorr::AcceptAngleToEvPlane(Float_t phi, Float_t psi) const
 {
   Float_t deltaPhi = phi - psi;
   while (deltaPhi < 0.)
@@ -1327,7 +1343,7 @@ Bool_t AliAnalysisTaskJetProtonCorr::AcceptAngleToEvPlane(Float_t phi, Float_t p
 
 Float_t AliAnalysisTaskJetProtonCorr::GetDPhiStar(Float_t phi1, Float_t pt1, Float_t charge1,
                                                  Float_t phi2, Float_t pt2, Float_t charge2,
-                                                 Float_t radius, Float_t bSign)
+                                                 Float_t radius, Float_t bSign) const
 {
   // calculates dphistar
   // from AliUEHistograms
@@ -1350,7 +1366,7 @@ Float_t AliAnalysisTaskJetProtonCorr::GetDPhiStar(Float_t phi1, Float_t pt1, Flo
 }
 
 
-Bool_t AliAnalysisTaskJetProtonCorr::AcceptTwoTracks(AliVParticle *trgPart, AliVParticle *assPart)
+Bool_t AliAnalysisTaskJetProtonCorr::AcceptTwoTracks(const AliVParticle *trgPart, const AliVParticle *assPart) const
 {
   // apply two track pair cut
 
@@ -1480,15 +1496,15 @@ Bool_t AliAnalysisTaskJetProtonCorr::GenerateRandom(TCollection *trgJetArray,
     do {
       trgJetPhi = fTrgJetPhiModSemi->GetRandom();
     } while (!AcceptAngleToEvPlane(trgJetPhi, 0));
-    trgJetPhi += fEventPlaneAngle;
-    if (trgJetPhi < 0.)
-      trgJetPhi += 2. * TMath::Pi();
-    else if (trgJetPhi > 2. * TMath::Pi())
-      trgJetPhi -= 2. * TMath::Pi();
   }
   else {
     trgJetPhi = fTrgJetPhiModCent->GetRandom();
   }
+  trgJetPhi += fEventPlaneAngle;
+  if (trgJetPhi < 0.)
+    trgJetPhi += 2. * TMath::Pi();
+  else if (trgJetPhi > 2. * TMath::Pi())
+    trgJetPhi -= 2. * TMath::Pi();
 
   // generate one trigger particle
   TLorentzVector *trgJet = new TLorentzVector();
@@ -1533,15 +1549,15 @@ Bool_t AliAnalysisTaskJetProtonCorr::GenerateRandom(TCollection *trgJetArray,
     do {
       trgHadPhi = fTrgHadPhiModSemi->GetRandom();
     } while (!AcceptAngleToEvPlane(trgHadPhi, 0));
-    trgHadPhi += fEventPlaneAngle;
-    if (trgHadPhi < 0.)
-      trgHadPhi += 2. * TMath::Pi();
-    else if (trgHadPhi > 2. * TMath::Pi())
-      trgHadPhi -= 2. * TMath::Pi();
   }
   else {
     trgHadPhi = fTrgHadPhiModCent->GetRandom();
   }
+  trgHadPhi += fEventPlaneAngle;
+  if (trgHadPhi < 0.)
+    trgHadPhi += 2. * TMath::Pi();
+  else if (trgHadPhi > 2. * TMath::Pi())
+    trgHadPhi -= 2. * TMath::Pi();
 
   // generate one trigger particle
   TLorentzVector *trgHad = new TLorentzVector();
index 7a330816454a5109c9fca1e18d3067d4ced9fe8d..9a286201a175c57c023b9d38a088f3fcb6368ade 100644 (file)
@@ -1,6 +1,7 @@
 #include "TH1.h"
 #include "TH2.h"
 #include "TH3.h"
+#include "TF1.h"
 
 #include "AliLog.h"
 
@@ -10,7 +11,6 @@
 #define ID(x) x, #x
 #define LAB(x) x + 1, #x
 
-class TF1;
 class TList;
 class TClonesArray;
 class AliOADBContainer;
@@ -38,7 +38,7 @@ public:
   void SetParamsTOF();
 
   // task configuration
-  void SetJetBranchName(const char* const branchName) { strncpy(fJetBranchName, branchName, fgkStringLength-1); }
+  void SetJetBranchName(const char* branchName) { strncpy(fJetBranchName, branchName, fgkStringLength-1); }
   const char* GetJetBranchName() const { return fJetBranchName; }
 
   void SetPtThrPart(Float_t minPt, Float_t maxPt) { fTrgPartPtMin = minPt; fTrgPartPtMax = maxPt; }
@@ -51,13 +51,33 @@ public:
   Float_t GetPtMinAss() const { return fAssPartPtMin; }
   Float_t GetPtMaxAss() const { return fAssPartPtMax; }
 
-  void SetTrackCutsAss(AliESDtrackCuts cuts) { *fCutsPrimAss = cuts; }
-  void SetTrackCutsTrg(AliESDtrackCuts cuts) { *fCutsPrimTrg = cuts; }
-  void SetTrackCutsTrgConstrain(AliESDtrackCuts cuts) { *fCutsPrimTrgConstrain = cuts; }
+  void SetTrackCutsAss(const AliESDtrackCuts &cuts) { *fCutsPrimAss = cuts; }
+  void SetTrackCutsTrg(const AliESDtrackCuts &cuts) { *fCutsPrimTrg = cuts; }
+  void SetTrackCutsTrgConstrain(const AliESDtrackCuts &cuts) { *fCutsPrimTrgConstrain = cuts; }
 
   void SetUseEvplaneV0(Bool_t usev0 = kTRUE) { fUseEvplaneV0 = usev0; }
   Bool_t GetUseEvplaneV0() const { return fUseEvplaneV0; }
 
+  void SetJetV2(Float_t v2Cent, Float_t v2Semi) {
+    fTrgJetPhiModCent->SetParameter(0, v2Cent);
+    fTrgJetPhiModSemi->SetParameter(0, v2Semi);
+  }
+  void SetHadV2(Float_t v2Cent, Float_t v2Semi) {
+    fTrgHadPhiModCent->SetParameter(0, v2Cent);
+    fTrgHadPhiModSemi->SetParameter(0, v2Semi);
+  }
+
+  void SetLeadingTrackPtMin(Float_t pt) { fTrgJetLeadTrkPtMin = pt; }
+  void SetLeadingTrackPtMax(Float_t pt) { fTrgJetLeadTrkPtMax = pt; }
+
+  void SetJetAreaMin(Float_t area) { fTrgJetAreaMin = area; }
+
+  void SetFilterMask(Int_t mask) { fAssFilterMask = mask; }
+  Int_t GetFilterMask() const { return fAssFilterMask; }
+
+  void SetErrorCount(Int_t cnt) { fErrorMsg = cnt; }
+  Int_t GetErrorCount() const { return fErrorMsg; }
+
   void PrintTask(Option_t *option, Int_t indent) const;
 
   static Double_t TOFsignal(Double_t *x, Double_t *par)
@@ -328,6 +348,8 @@ protected:
 
   AliHistCorr **fHistCorr; //! [kCorrLast*kEvLast*kClLast]; //!
 
+  Int_t fErrorMsg; //! remaining number of error messages to be printed
+
   Bool_t DetectTriggers();
   void   MarkTrigger(Trigger_t trg) { fTriggerMask |= (1 << trg); }
   Bool_t IsTrigger(Trigger_t trg) const { return (fTriggerMask & (1 << trg)); }
@@ -342,21 +364,21 @@ protected:
   Float_t GetCentrality() const { return fCentrality; }
   Float_t GetEventPlaneAngle() const { return fEventPlaneAngle; }
   AliPIDResponse* GetPID() const { return fPIDResponse; }
-  Bool_t IsCentral() { return ((fCentrality >= 0.) && (fCentrality <= 10.)); }
-  Bool_t IsSemiCentral() { return ((fCentrality >= 30.) && (fCentrality <= 50.)); }
+  Bool_t IsCentral() const { return ((fCentrality >= 0.) && (fCentrality <= 10.)); }
+  Bool_t IsSemiCentral() const { return ((fCentrality >= 30.) && (fCentrality <= 50.)); }
 
-  AliVTrack* GetLeadingTrack(AliAODJet *jet) const;
+  AliVTrack* GetLeadingTrack(const AliAODJet *jet) const;
 
   Float_t GetDPhiStar(Float_t phi1, Float_t pt1, Float_t charge1,
                      Float_t phi2, Float_t pt2, Float_t charge2,
-                     Float_t radius, Float_t bSign);
+                     Float_t radius, Float_t bSign) const;
 
-  Bool_t AcceptTrigger(AliVTrack *trg);
-  Bool_t AcceptTrigger(AliAODJet *trg);
-  Bool_t AcceptAssoc(AliVTrack *trk);
-  Bool_t IsProton(AliVTrack *trk);
-  Bool_t AcceptAngleToEvPlane(Float_t phi, Float_t psi);
-  Bool_t AcceptTwoTracks(AliVParticle *trgPart, AliVParticle *assPart);
+  Bool_t AcceptTrigger(const AliVTrack *trg);
+  Bool_t AcceptTrigger(const AliAODJet *trg);
+  Bool_t AcceptAssoc(const AliVTrack *trk) const;
+  Bool_t IsProton(const AliVTrack *trk) const;
+  Bool_t AcceptAngleToEvPlane(Float_t phi, Float_t psi) const;
+  Bool_t AcceptTwoTracks(const AliVParticle *trgPart, const AliVParticle *assPart) const;
 
   TObjArray* CloneTracks(TObjArray *tracks) const;
 
@@ -413,11 +435,16 @@ protected:
   AliESDtrackCuts *fCutsPrimAss;       // track cuts for primary particles (associate)
   Float_t fCutsTwoTrackEff;
 
+  UInt_t  fAssFilterMask;
+  Float_t fTrgJetEtaMax;
+  Float_t fHadEtaMax;
   Float_t fTrgPartPtMin;
   Float_t fTrgPartPtMax;
   Float_t fTrgJetPtMin;
   Float_t fTrgJetPtMax;
   Float_t fTrgJetLeadTrkPtMin;
+  Float_t fTrgJetLeadTrkPtMax;
+  Float_t fTrgJetAreaMin;
   Float_t fAssPartPtMin;
   Float_t fAssPartPtMax;
   Float_t fTrgAngleToEvPlane;
index 4c2b20ffecb290d0cf014c1b46aa5e24587050c2..9d361bb7dc978bc01c94df7b6b4225c7575b45c5 100644 (file)
@@ -48,6 +48,7 @@ const Double_t AliAnalysisTaskPID::fgkSigmaReferenceForTransitionPars = 0.05; //
 //________________________________________________________________________
 AliAnalysisTaskPID::AliAnalysisTaskPID()
   : AliAnalysisTaskPIDV0base()
+  , fRun(-1)
   , fPIDcombined(new AliPIDCombined())
   , fInputFromOtherTask(kFALSE)
   , fDoPID(kTRUE)
@@ -130,6 +131,7 @@ AliAnalysisTaskPID::AliAnalysisTaskPID()
   , fGenRespPrDeltaPi(new Double_t[fgkMaxNumGenEntries])
   , fGenRespPrDeltaPr(new Double_t[fgkMaxNumGenEntries])
   */
+  , fhMaxEtaVariation(0x0)
   , fhEventsProcessed(0x0)
   , fhEventsTriggerSel(0x0)
   , fhEventsTriggerSelVtxCut(0x0) 
@@ -177,6 +179,7 @@ AliAnalysisTaskPID::AliAnalysisTaskPID()
 //________________________________________________________________________
 AliAnalysisTaskPID::AliAnalysisTaskPID(const char *name)
   : AliAnalysisTaskPIDV0base(name)
+  , fRun(-1)
   , fPIDcombined(new AliPIDCombined())
   , fInputFromOtherTask(kFALSE)
   , fDoPID(kTRUE)
@@ -259,6 +262,7 @@ AliAnalysisTaskPID::AliAnalysisTaskPID(const char *name)
   , fGenRespPrDeltaPi(new Double_t[fgkMaxNumGenEntries])
   , fGenRespPrDeltaPr(new Double_t[fgkMaxNumGenEntries])
   */
+  , fhMaxEtaVariation(0x0)
   , fhEventsProcessed(0x0)
   , fhEventsTriggerSel(0x0)
   , fhEventsTriggerSelVtxCut(0x0) 
@@ -380,6 +384,9 @@ AliAnalysisTaskPID::~AliAnalysisTaskPID()
   fGenRespPrDeltaPrimePi = 0x0;
   fGenRespPrDeltaPrimePr = 0x0;
   
+  delete fhMaxEtaVariation;
+  fhMaxEtaVariation = 0x0;
+  
   /*OLD with deltaSpecies 
   delete [] fGenRespElDeltaEl;
   delete [] fGenRespElDeltaKa;
@@ -482,6 +489,56 @@ void AliAnalysisTaskPID::SetUpPIDcombined()
 }
 
 
+//________________________________________________________________________
+Bool_t AliAnalysisTaskPID::CalculateMaxEtaVariationMapFromPIDResponse()
+{
+  // Calculate the maximum deviation from unity of the eta correction factors for each row in 1/dEdx(splines)
+  // from the eta correction map of the TPCPIDResponse. The result is stored in fhMaxEtaVariation.
+  
+  if (!fPIDResponse) {
+    AliError("No PID response!");
+    return kFALSE;
+  }
+  
+  delete fhMaxEtaVariation;
+  
+  const TH2D* hEta = fPIDResponse->GetTPCResponse().GetEtaCorrMap();
+  if (!hEta) {
+    AliError("No eta correction map!");
+    return kFALSE;
+  }
+  
+  // Take binning from hEta in Y for fhMaxEtaVariation
+  fhMaxEtaVariation = hEta->ProjectionY("hMaxEtaVariation");
+  fhMaxEtaVariation->SetDirectory(0);
+  fhMaxEtaVariation->Reset();
+  
+  // For each bin in 1/dEdx, loop of all tanTheta bins and find the maximum deviation from unity.
+  // Store the result in fhMaxEtaVariation
+  
+  for (Int_t binY = 1; binY <= fhMaxEtaVariation->GetNbinsX(); binY++) {
+    Double_t maxAbs = -1;
+    for (Int_t binX = 1; binX <= hEta->GetNbinsX(); binX++) {
+      Double_t curr = TMath::Abs(hEta->GetBinContent(binX, binY) - 1.);
+      if (curr > maxAbs)
+        maxAbs = curr;
+    }
+    
+    if (maxAbs < 1e-12) {
+      AliError(Form("Maximum deviation from unity is zero for 1/dEdx = %f (bin %d)", hEta->GetYaxis()->GetBinCenter(binY), binY));
+      delete fhMaxEtaVariation;
+      return kFALSE;
+    }
+    
+    fhMaxEtaVariation->SetBinContent(binY, maxAbs);
+  }
+  
+  printf("AliAnalysisTaskPID: Calculated max eta variation.\n");
+  
+  return kTRUE;
+}
+
+
 //________________________________________________________________________
 void AliAnalysisTaskPID::UserCreateOutputObjects()
 {
@@ -877,6 +934,19 @@ void AliAnalysisTaskPID::UserExec(Option_t *)
   if(fDebug > 1)
     printf("File: %s, Line: %d: UserExec\n", (char*)__FILE__, __LINE__);
   
+  Int_t run = InputEvent()->GetRunNumber();
+  
+  if (run != fRun){
+    // If systematics on eta is investigated, need to calculate the maxEtaVariationMap
+    if ((TMath::Abs(fSystematicScalingEtaCorrectionLowMomenta - 1.0) > fgkEpsilon) ||
+        (TMath::Abs(fSystematicScalingEtaCorrectionHighMomenta - 1.0) > fgkEpsilon)) {
+      if (!CalculateMaxEtaVariationMapFromPIDResponse())
+        AliFatal("Systematics on eta correction requested, but failed to calculate max eta varation map!");
+    }
+  }
+  
+  fRun = run;
+  
   // No processing of event, if input is fed in directly from another task
   if (fInputFromOtherTask)
     return;
@@ -1915,6 +1985,28 @@ Bool_t AliAnalysisTaskPID::SetParticleFractionHistosFromFile(const TString fileP
 }
 
 
+//_____________________________________________________________________________
+Double_t AliAnalysisTaskPID::GetMaxEtaVariation(Double_t dEdxSplines)
+{
+  // Returns the maximum eta variation (i.e. deviation of eta correction factor from unity) for the
+  // given (spline) dEdx
+  
+  if (dEdxSplines < 1. || !fhMaxEtaVariation) {
+    Printf("Error GetMaxEtaVariation: No map or invalid dEdxSplines (%f)!", dEdxSplines);
+    return 999.;
+  } 
+  
+  Int_t bin = fhMaxEtaVariation->GetXaxis()->FindFixBin(1. / dEdxSplines);
+  
+  if (bin == 0) 
+    bin = 1;
+  if (bin > fhMaxEtaVariation->GetXaxis()->GetNbins())
+    bin = fhMaxEtaVariation->GetXaxis()->GetNbins();
+  
+  return fhMaxEtaVariation->GetBinContent(bin);
+}
+
+
 //_____________________________________________________________________________
 Int_t AliAnalysisTaskPID::GetRandomParticleTypeAccordingToParticleFractions(Double_t trackPt, Double_t jetPt,
                                                                             Double_t centralityPercentile, 
@@ -2229,7 +2321,7 @@ Bool_t AliAnalysisTaskPID::ProcessTrack(const AliVTrack* track, Int_t particlePD
     Double_t etaCorrEl = fPIDResponse->UseTPCEtaCorrection() ? fPIDResponse->GetTPCResponse().GetEtaCorrectionFast(track, dEdxEl) : 1.;
     Double_t etaCorrKa = fPIDResponse->UseTPCEtaCorrection() ? fPIDResponse->GetTPCResponse().GetEtaCorrectionFast(track, dEdxKa) : 1.;
     Double_t etaCorrPi = fPIDResponse->UseTPCEtaCorrection() ? fPIDResponse->GetTPCResponse().GetEtaCorrectionFast(track, dEdxPi) : 1.;
-    Double_t etaCorrMu = fTakeIntoAccountMuons && !fPIDResponse->UseTPCEtaCorrection() ? 
+    Double_t etaCorrMu = fTakeIntoAccountMuons && fPIDResponse->UseTPCEtaCorrection() ? 
                             fPIDResponse->GetTPCResponse().GetEtaCorrectionFast(track, dEdxMu) : 1.;
     Double_t etaCorrPr = fPIDResponse->UseTPCEtaCorrection() ? fPIDResponse->GetTPCResponse().GetEtaCorrectionFast(track, dEdxPr) : 1.;
 
@@ -2252,11 +2344,33 @@ Bool_t AliAnalysisTaskPID::ProcessTrack(const AliVTrack* track, Int_t particlePD
                                              + fSystematicScalingEtaCorrectionHighMomenta * fractionHighMomentumScaleFactor;
       }
       
+      Double_t maxEtaVariationEl = GetMaxEtaVariation(dEdxEl);
+      etaCorrEl = etaCorrEl * (1.0 + (usedSystematicScalingEtaCorrection - 1.) * (etaCorrEl - 1.0) / maxEtaVariationEl);
+      
+      Double_t maxEtaVariationKa = GetMaxEtaVariation(dEdxKa);
+      etaCorrKa = etaCorrKa * (1.0 + (usedSystematicScalingEtaCorrection - 1.) * (etaCorrKa - 1.0) / maxEtaVariationKa);
+      
+      Double_t maxEtaVariationPi = GetMaxEtaVariation(dEdxPi);
+      etaCorrPi = etaCorrPi * (1.0 + (usedSystematicScalingEtaCorrection - 1.) * (etaCorrPi - 1.0) / maxEtaVariationPi);
+      
+      if (fTakeIntoAccountMuons) {
+        Double_t maxEtaVariationMu = GetMaxEtaVariation(dEdxMu);
+        etaCorrMu = etaCorrMu * (1.0 + (usedSystematicScalingEtaCorrection - 1.) * (etaCorrMu - 1.0) / maxEtaVariationMu);
+      }
+      else
+        etaCorrMu = 1.0;
+      
+      Double_t maxEtaVariationPr = GetMaxEtaVariation(dEdxPr);
+      etaCorrPr = etaCorrPr * (1.0 + (usedSystematicScalingEtaCorrection - 1.) * (etaCorrPr - 1.0) / maxEtaVariationPr);
+      
+      
+      /*OLD
       etaCorrEl = 1.0 + usedSystematicScalingEtaCorrection * (etaCorrEl - 1.0);
       etaCorrKa = 1.0 + usedSystematicScalingEtaCorrection * (etaCorrKa - 1.0);
       etaCorrPi = 1.0 + usedSystematicScalingEtaCorrection * (etaCorrPi - 1.0);
       etaCorrMu = fTakeIntoAccountMuons ? (1.0 + usedSystematicScalingEtaCorrection * (etaCorrMu - 1.0)) : 1.0;
       etaCorrPr = 1.0 + usedSystematicScalingEtaCorrection * (etaCorrPr - 1.0);
+      */
     }
     
     // Get the multiplicity correction factors for the (modified) expected dEdx
index cb339ad61ee08c6a7214eaee86681e38e08c5522..a063ff9472fc50507a9d047cf826d09ba28060ab 100644 (file)
@@ -218,6 +218,9 @@ class AliAnalysisTaskPID : public AliAnalysisTaskPIDV0base {
   void SetSystematicScalingMultCorrection(Double_t scaleFactor) 
     { fSystematicScalingMultCorrection = scaleFactor; CheckDoAnyStematicStudiesOnTheExpectedSignal(); };
   
+  Double_t GetMaxEtaVariation(Double_t dEdxSplines);
+  Bool_t CalculateMaxEtaVariationMapFromPIDResponse();
+  
   void CleanupParticleFractionHistos();
   Bool_t GetParticleFraction(Double_t trackPt, Double_t jetPt, Double_t multiplicity,
                              AliPID::EParticleType species, Double_t& fraction, Double_t& fractionErrorStat,
@@ -259,6 +262,7 @@ class AliAnalysisTaskPID : public AliAnalysisTaskPIDV0base {
  private:
   static const Double_t fgkOneOverSqrt2; // = 1. / TMath::Sqrt2();
   
+  Int_t fRun; // Current run number
   AliPIDCombined* fPIDcombined; //! PID combined object
   
   Bool_t fInputFromOtherTask; // If set to kTRUE, no events are processed and the input must be fed in from another task. If set to kFALSE, normal event processing
@@ -364,6 +368,8 @@ class AliAnalysisTaskPID : public AliAnalysisTaskPIDV0base {
   Double_t* fGenRespPrDeltaPr; //! Generated responses for a single track
   */
   
+  TH1D* fhMaxEtaVariation; //! Histo holding the maximum deviation of the eta correction factor from unity vs. 1/dEdx(splines)
+  
   TH1D* fhEventsProcessed; //! Histo holding the number of processed events (i.e. passing trigger selection, vtx and zvtx cuts
   TH1D* fhEventsTriggerSel; //! Histo holding the number of events passing trigger selection
   TH1D* fhEventsTriggerSelVtxCut; //! Histo holding the number of events passing trigger selection and vtx cut
@@ -388,7 +394,7 @@ class AliAnalysisTaskPID : public AliAnalysisTaskPIDV0base {
   AliAnalysisTaskPID(const AliAnalysisTaskPID&); // not implemented
   AliAnalysisTaskPID& operator=(const AliAnalysisTaskPID&); // not implemented
   
-  ClassDef(AliAnalysisTaskPID, 17);
+  ClassDef(AliAnalysisTaskPID, 18);
 };
 
 
index bcfff4cc3073b66142b73e415336205717410693..556b28477a9904499434789aa9cc5e862c2f3d40 100644 (file)
@@ -40,7 +40,7 @@ class AliIDFFUtils
   };
 
   static THnSparseD* GetTHn(const TString name);
-  static void FillTHn(THnSparseD * hh, Double_t jetpt, const AliAODTrack * trackk,  AliAODEvent* aodevt, const Int_t tofmode);  
+  static void FillTHn(THnSparseD * hh, Double_t jetpt, const AliAODTrack * trackk,  AliAODEvent* aodevt, Int_t tofmode);  
 
   static Bool_t TPCCutPIDN(const AliAODTrack * track);
   static Bool_t TPCCutMIGeo(const AliAODTrack * track, const AliVEvent* evt, TTreeStream * streamer=0x0);
@@ -53,12 +53,12 @@ class AliIDFFUtils
   static Double_t Xmax(){return 2;}
   static Int_t Nx(){return 300;}
 
-  static Int_t PDG2Type(const Int_t pdg);
+  static Int_t PDG2Type(Int_t pdg);
   
-  static Int_t TOFType(const AliAODTrack * trackptr, const Int_t tofmode);
+  static Int_t TOFType(const AliAODTrack * trackptr, Int_t tofmode);
   static Int_t TPCType(const AliAODTrack * trackptr);
 
-  static Int_t CombineTPCTOF(const Int_t ktpc, const Int_t ktof);
+  static Int_t CombineTPCTOF(Int_t ktpc, Int_t ktof);
 
   //static Bool_t HMPIDAcceptance(const AliAODTrack *track);
   //static Bool_t HMPIDQA(const AliAODTrack *track);
index 0a4c66c748c287a88628bf5505d3491773b1497b..06351dbb5db7d9094107a610f6e13607228449e9 100644 (file)
@@ -30,8 +30,6 @@
 //                                                       //
 ///////////////////////////////////////////////////////////
 
-using std::cout;
-using std::endl;
 
 ClassImp(AliAnalysisTaskAntiHe4)
 
@@ -78,7 +76,9 @@ AliAnalysisTaskAntiHe4::AliAnalysisTaskAntiHe4()
   fHistHelium4PtAsoSec(0),
   fHistAntiHelium4PtAso(0),
   fTree(0), 
-  fOutputContainer(0)
+  fOutputContainer(0),
+  fEvnt(0),
+  fItrk(0)
 {
   // default Constructor
   
@@ -129,7 +129,9 @@ AliAnalysisTaskAntiHe4::AliAnalysisTaskAntiHe4(const char *name)
     fHistHelium4PtAsoSec(0),
     fHistAntiHelium4PtAso(0),
     fTree(0), 
-    fOutputContainer(0)
+    fOutputContainer(0),
+    fEvnt(0),
+    fItrk(0)
 {
   // Constructor
 
@@ -152,7 +154,7 @@ AliAnalysisTaskAntiHe4::AliAnalysisTaskAntiHe4(const char *name)
   fESDtrackCuts->SetRequireTPCRefit(kTRUE);
   //fESDtrackCuts->SetRequireITSRefit(kTRUE);
   fESDtrackCuts->SetMinNClustersITS(2);
-  fESDtrackCuts->SetEtaRange(-0.8,0.8);
+  fESDtrackCuts->SetEtaRange(-1.0,1.0);
   //
   // cuts for final plots
   //
@@ -372,38 +374,51 @@ void AliAnalysisTaskAntiHe4::UserCreateOutputObjects()
 
 
   //------------ Tree and branch definitions ----------------//  
-  fTree = new TTree("tree", " alpha tree");   
-  
+  fTree = new TTree("tree", "alpha tree");     
   //------------ Event variables ------------//
-  fTree->Branch("Name",Name,"Name/C");
-  fTree->Branch("Evnt",&evnt, "evnt/I"); 
-  fTree->Branch("itrk", &itrk, "itrk/I"); 
-
+  fTree->Branch("fName",fName,"fName/C");
+  fTree->Branch("fEvnt",&fEvnt, "fEvnt/I"); 
+  fTree->Branch("fFileName",fFileName,"fFileName/C");
+  fTree->Branch("fEventNumber",fEventNumber,"fEventNumber/I");
+  fTree->Branch("fItrk",&fItrk, "fItrk/I"); 
   //-------------------------------------------//  
   //----------- Track variables --------------//  
-
-  fTree->Branch("TrkPtot",TrkPtot,"TrkPtot[itrk]/F"); 
-  fTree->Branch("TPCPtot",TPCPtot,"TPCPtot[itrk]/F"); 
-  fTree->Branch("DeDx",DeDx,"DeDx[itrk]/F");  
-  fTree->Branch("Sign",Sign,"Sign[itrk]/F");  
-  fTree->Branch("DCAXY",DCAXY,"DCAXY[itrk]/F");  
-  fTree->Branch("DCAZ",DCAZ,"DCAZ[itrk]/F");
-  fTree->Branch("ITSnCluster",ITSnCluster,"ITSnCluster[itrk]/F"); 
-  fTree->Branch("TPCNsignal",TPCNsignal,"TPCNsignal[itrk]/F");  
-  fTree->Branch("Mass",Mass,"Mass[itrk]/F");
-  //
-  fTree->Branch("ITSRefit",ITSRefit,"ITSRefit[itrk]/F"); 
-  fTree->Branch("TOFtime",TOFtime,"TOFtime[itrk]/F"); 
-  fTree->Branch("TOFRefit",TOFRefit,"TOFRefit[itrk]/F"); 
-  fTree->Branch("TOFout",TOFout,"TOFout[itrk]/F"); 
-  //
-  fTree->Branch("ITSsignal",ITSsignal,"ITSsignal[itrk]/F");
-  fTree->Branch("SharedClusters",SharedClusters,"SharedClusters[itrk]/F");
-  fTree->Branch("fFileName",fFileName,"fFileName/C");  
-  fTree->Branch("fEventNumber",fEventNumber,"fEventNumber/I");
+  fTree->Branch("fEta",fEta,"fEta[fItrk]/D");
+  fTree->Branch("fKinkIndex",fKinkIndex,"fKinkIndex[fItrk]/I");
+  //
+  fTree->Branch("fTPCnCluster",fTPCnCluster,"fTPCnCluster[fItrk]/s");
+  fTree->Branch("fTPCNsignal",fTPCNsignal,"fTPCNsignal[fItrk]/s");
+  fTree->Branch("fChi2PerClusterTPC",fChi2PerClusterTPC,"fChi2PerClusterTPC[fItrk]/D");
+  fTree->Branch("fTPCRefit",fTPCRefit,"fTPCRefit[fItrk]/O");
+  fTree->Branch("fTPCsignal0",fTPCsignal0,"fTPCsignal0[fItrk]/D");
+  fTree->Branch("fTPCsignal1",fTPCsignal1,"fTPCsignal1[fItrk]/D");
+  fTree->Branch("fTPCsignal2",fTPCsignal2,"fTPCsignal2[fItrk]/D");
+  fTree->Branch("fTPCsignal3",fTPCsignal3,"fTPCsignal3[fItrk]/D");
+  fTree->Branch("fTPCSharedClusters",fTPCSharedClusters,"fTPCSharedClusters[fItrk]/I");
+  fTree->Branch("fTPCNclsIter1",fTPCNclsIter1,"fTPCNclsIter1[fItrk]/s");
+  //
+  fTree->Branch("fITSsignal",fITSsignal,"fITSsignal[fItrk]/D");
+  fTree->Branch("fITSnCluster",fITSnCluster,"fITSnCluster[fItrk]/I");
+  fTree->Branch("fChi2PerClusterITS",fChi2PerClusterITS,"fChi2PerClusterITS[fItrk]/D");
+  fTree->Branch("fITSRefit",fITSRefit,"fITSRefit[fItrk]/O");
   //
-  fTree->Branch("fAssociated",fAssociated,"fAssociated[itrk]/O");
-  fTree->Branch("fTrackPt",fTrackPt,"fTrackPt[itrk]/F");
+  fTree->Branch("fTOFtime",fTOFtime,"fTOFtime[fItrk]/O");
+  fTree->Branch("fTOFRefit",fTOFRefit,"fTOFRefit[fItrk]/O");
+  fTree->Branch("fTOFout",fTOFout,"fTOFout[fItrk]/O");
+  fTree->Branch("fTOFsignalDz",fTOFsignalDz,"fTOFsignalDz[fItrk]/D");
+  fTree->Branch("fTOFsignalDx",fTOFsignalDx,"fTOFsignalDx[fItrk]/D");
+  //
+  fTree->Branch("fDCAXY",fDCAXY,"fDCAXY[fItrk]/F");
+  fTree->Branch("fDCAZ",fDCAZ,"fDCAZ[fItrk]/F");
+  //
+  fTree->Branch("fTrkPtot",fTrkPtot,"fTrkPtot[fItrk]/D"); 
+  fTree->Branch("fTPCPtot",fTPCPtot,"fTPCPtot[fItrk]/D"); 
+  fTree->Branch("fTrackPt",fTrackPt,"fTrackPt[fItrk]/D");
+  fTree->Branch("fDeDx",fDeDx,"fDeDx[fItrk]/D");  
+  fTree->Branch("fSign",fSign,"fSign[fItrk]/D");  
+  fTree->Branch("fMass",fMass,"Mass[fItrk]/F");
+  //
+  fTree->Branch("fAssociated",fAssociated,"fAssociated[fItrk]/O");
 
 }
 
@@ -490,8 +505,6 @@ void AliAnalysisTaskAntiHe4::UserExec(Option_t *)
     }
   }
   //
-  if (!fTriggerFired[0] && !fTriggerFired[1] && !fTriggerFired[2]) return; // select only events which pass kMB, kCentral, kSemiCentral
-  //
   fHistCentralityClass10->Fill(centralityClass10);
   fHistCentralityPercentile->Fill(centralityPercentile);
   //
@@ -509,9 +522,9 @@ void AliAnalysisTaskAntiHe4::UserExec(Option_t *)
   }
   //
   Float_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z for th // for Anti-Alpha
-  evnt =  fESD->GetEventNumberInFile();
-  sscanf(fInputHandler->GetTree()->GetCurrentFile()->GetName(),"%s", Name);
-  itrk = 0;
+  fEvnt =  fESD->GetEventNumberInFile();
+  sscanf(fInputHandler->GetTree()->GetCurrentFile()->GetName(),"%s", fName);
+  fItrk = 0;
   //
   Int_t runNumber = 0;
   runNumber = fESD->GetRunNumber();
@@ -519,7 +532,44 @@ void AliAnalysisTaskAntiHe4::UserExec(Option_t *)
   Bool_t fillTree = kFALSE;
   // Track loop to fill the spectram
   for (Int_t iTracks = 0; iTracks < fESD->GetNumberOfTracks(); iTracks++) {
-    //
+
+    fEventNumber[fItrk] = -1;
+
+    fEta[fItrk] = -2;
+    fTPCNsignal[fItrk] = -1;
+    fTPCnCluster[fItrk] = -1;
+    fChi2PerClusterTPC[fItrk] = -1;
+    fTPCRefit[fItrk] = kFALSE;
+    fTPCsignal0[fItrk] = -1;
+    fTPCsignal1[fItrk] = -1;
+    fTPCsignal2[fItrk] = -1;
+    fTPCsignal3[fItrk] = -1;
+    fTPCSharedClusters[fItrk] = -1;
+    fTPCNclsIter1[fItrk] = -1;
+
+    fITSsignal[fItrk] = -1;
+    fITSnCluster[fItrk] = -1;
+    fChi2PerClusterITS[fItrk] = -1;
+    fITSRefit[fItrk] = kFALSE;
+
+    fTOFRefit[fItrk] = kFALSE;
+    fTOFtime[fItrk] = kFALSE;
+    fTOFout[fItrk] = kFALSE;
+    fTOFsignalDz[fItrk] = -1;
+    fTOFsignalDx[fItrk] = -1;
+
+    fDCAZ[fItrk] = -1;
+    fDCAXY[fItrk] = -1;
+
+    fTrkPtot[fItrk] = -1;
+    fTPCPtot[fItrk] = -1;
+    fTrackPt[fItrk] = -1;
+    fDeDx[fItrk] = -1;
+    fSign[fItrk] = -2;
+    fMass[fItrk] = -1;
+    
+    fAssociated[fItrk] = kFALSE;
+
     AliESDtrack* track = dynamic_cast<AliESDtrack*>(fESD->GetTrack(iTracks));
     if (!fESDtrackCuts->AcceptTrack(track)) continue;
     //
@@ -596,7 +646,7 @@ void AliAnalysisTaskAntiHe4::UserExec(Option_t *)
                                                                5.04114e-11,
                                                                2.13096,
                                                                2.38541);
-    if (eta < 0.8 && tpcSignal > 120 && tpcSignal > cut && tpcSignal < 1000 && track->GetTPCsignalN() > 60 && dcaZ < 15 && dcaXY < 15 && ptot > 1.0 && ptot < 20) {
+    if (eta < 1.0 && tpcSignal > 120 && tpcSignal > cut && tpcSignal < 1000 && track->GetTPCsignalN() > 60 && dcaZ < 15 && dcaXY < 15 && ptot > 1.0 && ptot < 20) {
       //
     cout << "AntiAlphaEvent" << " " 
           << AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->GetTree()->GetCurrentFile()->GetName() << " " 
@@ -607,38 +657,53 @@ void AliAnalysisTaskAntiHe4::UserExec(Option_t *)
       //
       fillTree = kTRUE;
       //
-      TrkPtot[itrk] = track->P();
-      TPCPtot[itrk] = ptot;
-      DeDx[itrk] = tpcSignal;
-      DCAZ[itrk] = dcaZ;
-      TPCNsignal[itrk] = track->GetTPCsignalN();
-      ITSnCluster[itrk] = track->GetNcls(0);
-      Sign[itrk] = sign;
-      DCAXY[itrk] = dcaXY;
-      Mass[itrk] = mass;
-      //
-      ITSsignal[itrk] = track->GetITSsignal();
-      SharedClusters[itrk] = shared.CountBits();
+
       sscanf(fInputHandler->GetTree()->GetCurrentFile()->GetName(),"%s", fFileName);
-      //fFileName[itrk] = fInputHandler->GetTree()->GetCurrentFile()->GetName();
-      fEventNumber[itrk] = fESD->GetEventNumberInFile();
-      //
-      if(status&AliESDtrack::kITSrefit) 
-       ITSRefit[itrk] = 1;     
-      else ITSRefit[itrk] = 0;
-      //
-      if (time < 99998) {
-       TOFRefit[itrk] = 1;
-      } else {
-       TOFRefit[itrk] = 0;
-      }
-      //itrk++;
-      //
+      fEventNumber[fItrk] = fESD->GetEventNumberInFile();
+
+      fEta[fItrk] = eta;
+      fKinkIndex[fItrk] = track->GetKinkIndex(0);
+
+      fTPCNsignal[fItrk] = track->GetTPCsignalN();
+      fTPCnCluster[fItrk] = track->GetTPCNcls();
+      fChi2PerClusterTPC[fItrk] = track->GetTPCchi2()/fTPCnCluster[fItrk];
+      if(status&AliESDtrack::kTPCrefit)
+        fTPCRefit[fItrk] = kTRUE;
+      else fTPCRefit[fItrk] = kFALSE;
+      fTPCsignal0[fItrk] = signal[0];
+      fTPCsignal1[fItrk] = signal[1];
+      fTPCsignal2[fItrk] = signal[2];
+      fTPCsignal3[fItrk] = signal[3];
+      fTPCSharedClusters[fItrk] = shared.CountBits();
+      fTPCNclsIter1[fItrk] = track->GetTPCNclsIter1();
+
+      fITSsignal[fItrk] = track->GetITSsignal();
+      fITSnCluster[fItrk] = track->GetNcls(0);
+      fChi2PerClusterITS[fItrk] = track->GetITSchi2()/fITSnCluster[fItrk];
+      if(status&AliESDtrack::kITSrefit)
+        fITSRefit[fItrk] = kTRUE;
+      else fITSRefit[fItrk] = kFALSE;
+
+
+      if(status&AliESDtrack::kITSrefit)
+        fITSRefit[fItrk] = kTRUE;
+      else fITSRefit[fItrk] = kFALSE;
       hasTOFout = status&AliESDtrack::kTOFout;
       hasTOFtime  = status&AliESDtrack::kTIME;
-      //
-      TOFtime[itrk] = hasTOFtime;
-      TOFout[itrk]  = hasTOFout;
+      fTOFtime[fItrk] = hasTOFtime;
+      fTOFout[fItrk]  = hasTOFout;
+      fTOFsignalDz[fItrk] = track->GetTOFsignalDz();
+      fTOFsignalDx[fItrk] = track->GetTOFsignalDx();
+
+      fDCAZ[fItrk] = dcaXY;
+      fDCAXY[fItrk] = dcaZ;
+
+      fTrkPtot[fItrk] = track->P();
+      fTPCPtot[fItrk] = ptot;
+      fTrackPt[fItrk] = track->Pt();
+      fDeDx[fItrk] = tpcSignal;
+      fSign[fItrk] = sign;
+      fMass[fItrk] = mass;
 
       if (fMCtrue){ //associated
 
@@ -667,10 +732,9 @@ void AliAnalysisTaskAntiHe4::UserExec(Option_t *)
 
       }
       
-      fAssociated[itrk] = isAssociated;
-      fTrackPt[itrk] = track->Pt();
-      
-      itrk++;
+      fAssociated[fItrk] = isAssociated;
+
+      fItrk++;
     }
     //
     // do pid fill histogram for raw ratios
@@ -700,7 +764,7 @@ void AliAnalysisTaskAntiHe4::UserExec(Option_t *)
     if(sign<0) {
       fHistDeDx->Fill(ptot, track->GetTPCsignal());
       if (track->GetTPCsignalN() > 100 &&
-          TMath::Abs(track->Eta()) < 0.8 &&
+          TMath::Abs(track->Eta()) < 1.0 &&
           signal[3]/signal[1] > 0.6 &&
           signal[0]/signal[1] > 0.5 &&
           signal[3]/signal[1] < 1.2 &&
@@ -958,8 +1022,8 @@ void AliAnalysisTaskAntiHe4::MCGenerated(AliStack* stack)
              fHistHelium4PtGen->Fill(pTGen);
              if(isPrimary) fHistHelium4PtGenPrim->Fill(pTGen);
              if(isSecondary) fHistHelium4PtGenSec->Fill(pTGen);
-             if(eta < 0.8)fHistHelium4PtGenEta->Fill(pTGen);
-             if(isPrimary && eta < 0.8)fHistHelium4PtGenPrimEta->Fill(pTGen);
+             if(TMath::Abs(eta) < 1.0)fHistHelium4PtGenEta->Fill(pTGen);
+             if(isPrimary && TMath::Abs(eta) < 1.0)fHistHelium4PtGenPrimEta->Fill(pTGen);
            }
 
          //Anti-Alpha
@@ -968,7 +1032,7 @@ void AliAnalysisTaskAntiHe4::MCGenerated(AliStack* stack)
              fHistAntiHelium4PtGen->Fill(pTGen);
              if(isPrimary) fHistAntiHelium4PtGenPrim->Fill(pTGen);
              if(isSecondary) fHistAntiHelium4PtGenSec->Fill(pTGen);
-             if(eta < 0.8)fHistAntiHelium4PtGenEta->Fill(pTGen);
+             if(TMath::Abs(eta) < 1.0)fHistAntiHelium4PtGenEta->Fill(pTGen);
            }
 
              
index 163acc90f08025129b51750b3f8500a041a26051..3237f78c385a14fab8e6ef76d3b4caa7148f8e13 100644 (file)
@@ -94,29 +94,50 @@ class AliAnalysisTaskAntiHe4 : public AliAnalysisTaskSE {
   //
   // tree variables
   //
-  Char_t Name[1000];  
-  Int_t  evnt, itrk;
-  //
-  Float_t TrkPtot[1000];
-  Float_t TPCPtot[1000];
-  Float_t DeDx[1000];
-  Float_t DCAZ[1000];
-  Float_t TPCNsignal[1000];
-  Float_t ITSnCluster[1000];
-  Float_t Sign[1000];
-  Float_t DCAXY[1000];
-  Float_t Mass[1000];
-  Float_t ITSRefit[1000];
-  Float_t TOFRefit[1000];
-  Float_t TOFtime[1000];
-  Float_t TOFout[1000];
-  Float_t ITSsignal[1000];
-  Float_t SharedClusters[1000];
-  Char_t  fFileName[1000]; 
+  Char_t fName[1000];  
+  Int_t  fEvnt;
+  Char_t  fFileName[1000];
   Int_t   fEventNumber[1000];
+  // 
+  Int_t  fItrk;
+  //
+  Double_t fEta[1000];
+  Int_t    fKinkIndex[1000];
+  //
+  UShort_t   fTPCNsignal[1000];
+  UShort_t   fTPCnCluster[1000];
+  Double_t   fChi2PerClusterTPC[1000];
+  Bool_t  fTPCRefit[1000];
+  Double_t fTPCsignal0[1000];
+  Double_t fTPCsignal1[1000];
+  Double_t fTPCsignal2[1000];
+  Double_t fTPCsignal3[1000];
+  Int_t   fTPCSharedClusters[1000];
+  UShort_t   fTPCNclsIter1[1000];
+  //
+  Double_t fITSsignal[1000];
+  Int_t   fITSnCluster[1000];
+  Double_t   fChi2PerClusterITS[1000];
+  Bool_t  fITSRefit[1000];
+  //
+  Bool_t  fTOFRefit[1000];
+  Bool_t  fTOFtime[1000];
+  Bool_t  fTOFout[1000];
+  Double_t fTOFsignalDz[1000];
+  Double_t fTOFsignalDx[1000];
+  //
+  Float_t fDCAZ[1000];
+  Float_t fDCAXY[1000];
+  //
+  Double_t fTrkPtot[1000];
+  Double_t fTPCPtot[1000];
+  Double_t fTrackPt[1000];
+  Double_t fDeDx[1000];
+  Double_t fSign[1000];
+  Float_t fMass[1000];
+  //
   Bool_t  fAssociated[1000];
-  Float_t fTrackPt[1000];
-
   //
   //
   AliAnalysisTaskAntiHe4(const AliAnalysisTaskAntiHe4&); // not implemented
index 2078cad739fd7b70949887224492ee3c82e85ddf..0279b92c6923808821a130103a68a0c3e5cbbd4c 100644 (file)
@@ -77,7 +77,7 @@ AliAnalysisTaskUpcPsi2s::AliAnalysisTaskUpcPsi2s()
     fHistZedTriggersPerRun(0),fHistCvlnTriggersPerRun(0), fHistMBTriggersPerRun(0),fHistCentralTriggersPerRun(0),fHistSemiCentralTriggersPerRun(0),
     fListHist(0),fHistNeventsJPsi(0),fHistTPCsignalJPsi(0),fHistDiLeptonPtJPsi(0),fHistDiElectronMass(0),fHistDiMuonMass(0),fHistDiLeptonMass(0),
     fHistNeventsPsi2s(0),fHistPsi2sMassVsPt(0),fHistPsi2sMassCoherent(0),
-    fListSystematics(0),fListJPsiLoose(0),fListJPsiTight(0)
+    fListSystematics(0),fListJPsiLoose(0),fListJPsiTight(0),fListPsi2sLoose(0),fListPsi2sTight(0)
 
 {
 
@@ -100,7 +100,7 @@ AliAnalysisTaskUpcPsi2s::AliAnalysisTaskUpcPsi2s(const char *name)
     fHistZedTriggersPerRun(0),fHistCvlnTriggersPerRun(0), fHistMBTriggersPerRun(0),fHistCentralTriggersPerRun(0),fHistSemiCentralTriggersPerRun(0),
     fListHist(0),fHistNeventsJPsi(0),fHistTPCsignalJPsi(0),fHistDiLeptonPtJPsi(0),fHistDiElectronMass(0),fHistDiMuonMass(0),fHistDiLeptonMass(0),
     fHistNeventsPsi2s(0),fHistPsi2sMassVsPt(0),fHistPsi2sMassCoherent(0),
-    fListSystematics(0),fListJPsiLoose(0),fListJPsiTight(0)
+    fListSystematics(0),fListJPsiLoose(0),fListJPsiTight(0),fListPsi2sLoose(0),fListPsi2sTight(0)
 
 {
 
@@ -342,7 +342,7 @@ void AliAnalysisTaskUpcPsi2s::UserCreateOutputObjects()
   fHistPsi2sMassVsPt->GetYaxis()->SetTitle("#it{p}_{T} (GeV/#it{c})");
   fListHist->Add(fHistPsi2sMassVsPt);
   
-  fHistPsi2sMassCoherent = new TH1D("fHistPsi2sMassAllCoherent","Invariant mass of coherent #psi(2s) candidates",100,3,6);
+  fHistPsi2sMassCoherent = new TH1D("fHistPsi2sMassAllCoherent","Invariant mass of coherent #psi(2s) candidates",50,2.5,5.5);
   fHistPsi2sMassCoherent->GetXaxis()->SetTitle("Invariant mass(l^{+}l^{-}#pi^{+}#pi^{-}) (GeV/c)");
   fListHist->Add(fHistPsi2sMassCoherent);
   
@@ -381,6 +381,10 @@ fListJPsiLoose->Add(fHistJPsiDCAzLoose);
 TH1D *fHistJPsiDCAxyLoose = new TH1D("JPsiDCAxyLoose","Invariant mass of J/#psi candidates",130,2.1,6.0);
 fListJPsiLoose->Add(fHistJPsiDCAxyLoose);
 
+TH1D *fHistJPsiITShitsLoose = new TH1D("JPsiITShitsLoose","Invariant mass of J/#psi candidates",130,2.1,6.0);
+fListJPsiLoose->Add(fHistJPsiITShitsLoose);
+
+
 fListJPsiTight = new TList();
 fListJPsiTight->SetOwner();
 fListJPsiTight->SetName("JPsiTight");
@@ -399,6 +403,45 @@ TH1D *fHistJPsiDCAxyTight = new TH1D("JPsiDCAxyTight","Invariant mass of J/#psi
 fListJPsiTight->Add(fHistJPsiDCAxyTight);
 
 
+fListPsi2sLoose = new TList();
+fListPsi2sLoose->SetOwner();
+fListPsi2sLoose->SetName("Psi2sLoose");
+fListSystematics->Add(fListPsi2sLoose);
+
+TH1D *fHistPsi2sNClusLoose = new TH1D("Psi2sNClusLoose","Invariant mass of #psi(2S) candidates",50,2.5,5.5);
+fListPsi2sLoose->Add(fHistPsi2sNClusLoose);
+
+TH1D *fHistPsi2sChi2Loose = new TH1D("Psi2sChi2Loose","Invariant mass of #psi(2S) candidates",50,2.5,5.5);
+fListPsi2sLoose->Add(fHistPsi2sChi2Loose);
+
+TH1D *fHistPsi2sDCAzLoose = new TH1D("Psi2sDCAzLoose","Invariant mass of #psi(2S) candidates",50,2.5,5.5);
+fListPsi2sLoose->Add(fHistPsi2sDCAzLoose);
+
+TH1D *fHistPsi2sDCAxyLoose = new TH1D("Psi2sDCAxyLoose","Invariant mass of #psi(2S) candidates",50,2.5,5.5);
+fListPsi2sLoose->Add(fHistPsi2sDCAxyLoose);
+
+TH1D *fHistPsi2sITShitsLoose = new TH1D("Psi2sITShitsLoose","Invariant mass of #psi(2S) candidates",50,2.5,5.5);
+fListPsi2sLoose->Add(fHistPsi2sITShitsLoose);
+
+
+fListPsi2sTight = new TList();
+fListPsi2sTight->SetOwner();
+fListPsi2sTight->SetName("Psi2sTight");
+fListSystematics->Add(fListPsi2sTight);
+
+TH1D *fHistPsi2sNClusTight = new TH1D("Psi2sNClusTight","Invariant mass of #psi(2S) candidates",50,2.5,5.5);
+fListPsi2sTight->Add(fHistPsi2sNClusTight);
+
+TH1D *fHistPsi2sChi2Tight = new TH1D("Psi2sChi2Tight","Invariant mass of #psi(2S) candidates",50,2.5,5.5);
+fListPsi2sTight->Add(fHistPsi2sChi2Tight);
+
+TH1D *fHistPsi2sDCAzTight = new TH1D("Psi2sDCAzTight","Invariant mass of #psi(2S) candidates",50,2.5,5.5);
+fListPsi2sTight->Add(fHistPsi2sDCAzTight);
+
+TH1D *fHistPsi2sDCAxyTight = new TH1D("Psi2sDCAxyTight","Invariant mass of #psi(2S) candidates",50,2.5,5.5);
+fListPsi2sTight->Add(fHistPsi2sDCAxyTight);
+
+
 }
 
 //_____________________________________________________________________________
@@ -477,7 +520,7 @@ void AliAnalysisTaskUpcPsi2s::RunAODhist()
   AliAODEvent *aod = (AliAODEvent*) InputEvent();
   if(!aod) return;
   
-  cout<<"Event number: "<<((TTree*) GetInputData(0))->GetTree()->GetReadEntry()<<endl;
+  //cout<<"Event number: "<<((TTree*) GetInputData(0))->GetTree()->GetReadEntry()<<endl;
 
   fHistNeventsJPsi->Fill(1);
   fHistNeventsPsi2s->Fill(1);
@@ -526,10 +569,12 @@ void AliAnalysisTaskUpcPsi2s::RunAODhist()
   
   TLorentzVector vLepton[4], vPion[4], vCandidate, vDilepton;
   Short_t qLepton[4], qPion[4];
-  UInt_t nLepton=0, nPion=0, nHighPt=0;
+  UInt_t nLepton=0, nPion=0, nHighPt=0, nSpdHits=0;
   Double_t fRecTPCsignal[5], fRecTPCsignalDist;
   Int_t fChannel = 0;
   Int_t mass[3]={-1,-1,-1};
+  Double_t TrackPt[5]={0,0,0,0,0};
+  Double_t MeanPt = -1;
   
    
   //Four track loop
@@ -546,10 +591,13 @@ void AliAnalysisTaskUpcPsi2s::RunAODhist()
       AliAODTrack* trk_clone=(AliAODTrack*)trk->Clone("trk_clone");
       if(!trk_clone->PropagateToDCA(fAODVertex,aod->GetMagneticField(),300.,dca,cov)) continue;
       delete trk_clone;
-
       if(TMath::Abs(dca[1]) > 2) continue;
+      Double_t cut_DCAxy = 4*(0.0182 + 0.0350/TMath::Power(trk->Pt(),1.01));
+      if(TMath::Abs(dca[0]) > cut_DCAxy) continue;
+      if((trk->HasPointOnITSLayer(0))||(trk->HasPointOnITSLayer(1))) nSpdHits++;
      
       TrackIndex[nGoodTracks] = itr;
+      TrackPt[nGoodTracks] = trk->Pt();
       nGoodTracks++;
                                  
       if(nGoodTracks > 4) break;  
@@ -558,12 +606,13 @@ void AliAnalysisTaskUpcPsi2s::RunAODhist()
   nLepton=0; nPion=0; nHighPt=0;
   mass[0]= -1; mass[1]= -1, mass[2]= -1;
   
-  if(nGoodTracks == 4){
+  if(nGoodTracks == 4 && nSpdHits>1){
+         MeanPt = GetMedian(TrackPt);
          fHistNeventsPsi2s->Fill(6);
          for(Int_t i=0; i<4; i++){
                AliAODTrack *trk = aod->GetTrack(TrackIndex[i]);
                
-               if(trk->Pt() > 1){   
+               if(trk->Pt() > MeanPt){   
                        fRecTPCsignal[nLepton] = trk->GetTPCsignal();      
                        qLepton[nLepton] = trk->Charge();
                        if(fRecTPCsignal[nLepton] > 40 && fRecTPCsignal[nLepton] < 70){
@@ -591,14 +640,26 @@ void AliAnalysisTaskUpcPsi2s::RunAODhist()
                if((qLepton[0]*qLepton[1] > 0) && (qPion[0]*qPion[1] > 0)) fHistNeventsPsi2s->Fill(10);
                if((qLepton[0]*qLepton[1] < 0) && (qPion[0]*qPion[1] < 0)){
                        fHistNeventsPsi2s->Fill(11);
-                       if(mass[0] == mass[1]) {
+                       if(mass[0] != -1 && mass[1] != -1) {
                                fHistNeventsPsi2s->Fill(12); 
                                vCandidate = vLepton[0]+vLepton[1]+vPion[0]+vPion[1];
                                vDilepton = vLepton[0]+vLepton[1];
                                fHistPsi2sMassVsPt->Fill(vCandidate.M(),vCandidate.Pt());
-                               if(vCandidate.Pt() < 0.15) fHistPsi2sMassCoherent->Fill(vCandidate.M());
-                               if(mass[0] == 0) fHistNeventsPsi2s->Fill(13);   
-                               if(mass[0] == 1) fHistNeventsPsi2s->Fill(14);
+                               fRecTPCsignalDist = TMath::Sqrt(TMath::Power(fRecTPCsignal[0]-56,2)+TMath::Power(fRecTPCsignal[1]-56,2));
+                               if (fRecTPCsignalDist < 3.6*4.0) fChannel = -1;
+                               else { 
+                                       fRecTPCsignalDist = TMath::Sqrt(TMath::Power(fRecTPCsignal[0]-78,2)+TMath::Power(fRecTPCsignal[1]-78,2));
+                                       if (fRecTPCsignalDist < 4.1*4.0) fChannel = 1; 
+                                       }
+                               
+                               if(fChannel == -1) {
+                                       fHistNeventsPsi2s->Fill(13);
+                                       if(vDilepton.M() > 3.0 && vDilepton.M() < 3.2 && vCandidate.Pt()<0.15) fHistPsi2sMassCoherent->Fill(vCandidate.M());
+                                       }       
+                               if(fChannel == 1){ 
+                                       fHistNeventsPsi2s->Fill(14);
+                                       if(vDilepton.M() > 2.6 && vDilepton.M() < 3.2 && vCandidate.Pt()<0.3) fHistPsi2sMassCoherent->Fill(vCandidate.M());
+                                       }
                                }
                        }
                }
@@ -724,9 +785,9 @@ void AliAnalysisTaskUpcPsi2s::RunAODsystematics(AliAODEvent* aod)
   Int_t nGoodTracks = 0;
   Int_t TrackIndex[5] = {-1,-1,-1,-1,-1};
   
-  TLorentzVector vLepton[4], vCandidate, vDilepton;
-  Short_t qLepton[4];
-  UInt_t nLepton=0, nHighPt=0;
+  TLorentzVector vLepton[4], vPion[4], vCandidate, vDilepton;
+  Short_t qLepton[4],qPion[4];
+  UInt_t nLepton=0, nPion=0, nHighPt=0;
   Double_t fRecTPCsignal[5], fRecTPCsignalDist;
   Int_t fChannel = 0;
 
@@ -740,12 +801,12 @@ void AliAnalysisTaskUpcPsi2s::RunAODsystematics(AliAODEvent* aod)
   TParticlePDG *partElectron = pdgdat->GetParticle( 11 );
   Double_t electronMass = partElectron->Mass();
   
// TParticlePDG *partPion = pdgdat->GetParticle( 211 );
// Double_t pionMass = partPion->Mass();
+  TParticlePDG *partPion = pdgdat->GetParticle( 211 );
+  Double_t pionMass = partPion->Mass();
 
   
-for(Int_t i=0; i<4; i++){
-         cout<<"Loose sytematics, cut"<<i<<endl;
+for(Int_t i=0; i<5; i++){
+         //cout<<"Loose sytematics, cut"<<i<<endl;
          for(Int_t j=0; j<4; j++){
                  if(i==j) fJPsiSels[j] = fJPsiSelsLoose[i];
                  else fJPsiSels[j] = fJPsiSelsMid[j];
@@ -759,7 +820,7 @@ for(Int_t i=0; i<4; i++){
 
       if(!(trk->GetStatus() & AliESDtrack::kTPCrefit) ) continue;
       if(!(trk->GetStatus() & AliESDtrack::kITSrefit) ) continue;
-      if((!trk->HasPointOnITSLayer(0))&&(!trk->HasPointOnITSLayer(1))) continue;
+      if(i!=4){ if((!trk->HasPointOnITSLayer(0))&&(!trk->HasPointOnITSLayer(1))) continue;}
       Double_t dca[2] = {0.0,0.0}, cov[3] = {0.0,0.0,0.0};
       AliAODTrack* trk_clone=(AliAODTrack*)trk->Clone("trk_clone");
       if(!trk_clone->PropagateToDCA(fAODVertex,aod->GetMagneticField(),300.,dca,cov)) continue;
@@ -782,7 +843,6 @@ for(Int_t i=0; i<4; i++){
   nLepton=0; nHighPt=0;
   
   if(nGoodTracks == 2){
-         fHistNeventsJPsi->Fill(6);
          for(Int_t k=0; k<2; k++){
                AliAODTrack *trk = aod->GetTrack(TrackIndex[k]);                
                if(trk->Pt() > 1) nHighPt++;     
@@ -815,7 +875,7 @@ for(Int_t i=0; i<4; i++){
 }//loose cuts
 
 for(Int_t i=0; i<4; i++){
-         cout<<"Tight sytematics, cut"<<i<<endl;
+         //cout<<"Tight sytematics, cut"<<i<<endl;
          for(Int_t j=0; j<4; j++){
                  if(i==j) fJPsiSels[j] = fJPsiSelsTight[i];
                  else fJPsiSels[j] = fJPsiSelsMid[j];
@@ -853,7 +913,6 @@ for(Int_t i=0; i<4; i++){
   nLepton=0; nHighPt=0;
   
   if(nGoodTracks == 2){
-         fHistNeventsJPsi->Fill(6);
          for(Int_t k=0; k<2; k++){
                AliAODTrack *trk = aod->GetTrack(TrackIndex[k]);                
                if(trk->Pt() > 1) nHighPt++;     
@@ -885,6 +944,197 @@ for(Int_t i=0; i<4; i++){
   }
 }//tight cuts
 
+//---------------------------------------------Psi2s------------------------------------------------------------------------
+
+  Double_t fPsi2sSels[4];
+
+  fPsi2sSels[0] =   50; //min number of TPC clusters
+  fPsi2sSels[1] =   4; //chi2
+  fPsi2sSels[2] =   2; //DCAz
+  fPsi2sSels[3] =   4; // DCAxy 1x 
+
+  Double_t fPsi2sSelsMid[4];
+
+  fPsi2sSelsMid[0] =   50; //min number of TPC clusters
+  fPsi2sSelsMid[1] =   4; //chi2
+  fPsi2sSelsMid[2] =   2; //DCAz
+  fPsi2sSelsMid[3] =   4; // DCAxy 1x 
+  
+  Double_t fPsi2sSelsLoose[4];
+
+  fPsi2sSelsLoose[0] =   60; //min number of TPC clusters
+  fPsi2sSelsLoose[1] =   5; //chi2
+  fPsi2sSelsLoose[2] =   3; //DCAz
+  fPsi2sSelsLoose[3] =   6; // DCAxy 2x 
+
+  Double_t fPsi2sSelsTight[4];
+
+  fPsi2sSelsTight[0] =   70; //min number of TPC clusters
+  fPsi2sSelsTight[1] =   3.5; //chi2
+  fPsi2sSelsTight[2] =   1; //DCAz
+  fPsi2sSelsTight[3] =   2; // DCAxy 0.5x 
+
+  nGoodTracks = 0; nLepton=0; nHighPt=0; fChannel = 0;
+  Int_t nSpdHits = 0;
+  Double_t TrackPt[5]={0,0,0,0,0};
+  Double_t MeanPt = -1;
+
+for(Int_t i=0; i<5; i++){
+         //cout<<"Loose systematics psi2s, cut"<<i<<endl;
+         for(Int_t j=0; j<4; j++){
+                 if(i==j) fJPsiSels[j] = fJPsiSelsLoose[i];
+                 else fJPsiSels[j] = fJPsiSelsMid[j];
+         }
+  //Two track loop
+  for(Int_t itr=0; itr<aod ->GetNumberOfTracks(); itr++) {
+    AliAODTrack *trk = aod->GetTrack(itr);
+    if( !trk ) continue;
+    if(!(trk->TestFilterBit(1<<0))) continue;
+
+      if(!(trk->GetStatus() & AliESDtrack::kTPCrefit) ) continue;
+      if(!(trk->GetStatus() & AliESDtrack::kITSrefit) ) continue;
+      if((trk->HasPointOnITSLayer(0))||(trk->HasPointOnITSLayer(1))) nSpdHits++;
+      Double_t dca[2] = {0.0,0.0}, cov[3] = {0.0,0.0,0.0};
+      AliAODTrack* trk_clone=(AliAODTrack*)trk->Clone("trk_clone");
+      if(!trk_clone->PropagateToDCA(fAODVertex,aod->GetMagneticField(),300.,dca,cov)) continue;
+      delete trk_clone;
+      Double_t cut_DCAxy = (0.0182 + 0.0350/TMath::Power(trk->Pt(),1.01));
+      
+      if(trk->GetTPCNcls() < fJPsiSels[0])continue;
+      if(trk->Chi2perNDF() > fJPsiSels[1])continue;
+      if(TMath::Abs(dca[1]) > fJPsiSels[2]) continue;      
+      if(TMath::Abs(dca[0]) > fJPsiSels[3]*cut_DCAxy) continue;
+      if((trk->HasPointOnITSLayer(0))||(trk->HasPointOnITSLayer(1))) nSpdHits++;
+     
+      TrackIndex[nGoodTracks] = itr;
+      TrackPt[nGoodTracks] = trk->Pt();
+      nGoodTracks++;
+                                 
+      if(nGoodTracks > 4) break;  
+  }//Track loop
+    
+  Int_t mass[3]={-1,-1,-1};
+  fChannel = 0;
+  nLepton=0; nHighPt=0;
+  
+  if(nGoodTracks == 4){
+         if(i!=4){ if(nSpdHits<2) continue;} 
+         MeanPt = GetMedian(TrackPt);
+         for(Int_t k=0; k<4; k++){
+               AliAODTrack *trk = aod->GetTrack(TrackIndex[k]);
+               if(trk->Pt() > MeanPt){   
+                       fRecTPCsignal[nLepton] = trk->GetTPCsignal();      
+                       qLepton[nLepton] = trk->Charge();
+                       if(fRecTPCsignal[nLepton] > 40 && fRecTPCsignal[nLepton] < 70){
+                                       vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), muonMass);
+                                       mass[nLepton] = 0;
+                                       }
+                       if(fRecTPCsignal[nLepton] > 70 && fRecTPCsignal[nLepton] < 100){
+                                       vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), electronMass);
+                                       mass[nLepton] = 1;
+                                       }
+                       nLepton++;
+                       }
+               else{
+                       qPion[nPion] = trk->Charge();
+                       vPion[nPion].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), pionMass);
+                       nPion++;
+                       }             
+               }
+       if((qLepton[0]*qLepton[1] < 0) && (qPion[0]*qPion[1] < 0) && mass[0] != -1 && mass[1] != -1){
+               vCandidate = vLepton[0]+vLepton[1]+vPion[0]+vPion[1];
+               vDilepton = vLepton[0]+vLepton[1];
+               fRecTPCsignalDist = TMath::Sqrt(TMath::Power(fRecTPCsignal[0]-56,2)+TMath::Power(fRecTPCsignal[1]-56,2));
+               if (fRecTPCsignalDist < 3.6*4.0) fChannel = -1;
+               else { 
+                       fRecTPCsignalDist = TMath::Sqrt(TMath::Power(fRecTPCsignal[0]-78,2)+TMath::Power(fRecTPCsignal[1]-78,2));
+                       if (fRecTPCsignalDist < 4.1*4.0) fChannel = 1; 
+                       }                       
+               if(fChannel == -1) if(vDilepton.M() > 3.0 && vDilepton.M() < 3.2 && vCandidate.Pt()<0.15) ((TH1D*)(fListPsi2sLoose->At(i)))->Fill(vCandidate.M());              
+               if(fChannel == 1) if(vDilepton.M() > 2.6 && vDilepton.M() < 3.2 && vCandidate.Pt()<0.3) ((TH1D*)(fListPsi2sLoose->At(i)))->Fill(vCandidate.M());
+       }
+  }   
+}//loose cuts
+
+for(Int_t i=0; i<4; i++){
+         //cout<<"Tight systematics psi2s, cut"<<i<<endl;
+         for(Int_t j=0; j<4; j++){
+                 if(i==j) fJPsiSels[j] = fJPsiSelsTight[i];
+                 else fJPsiSels[j] = fJPsiSelsMid[j];
+         }
+  //Two track loop
+  for(Int_t itr=0; itr<aod ->GetNumberOfTracks(); itr++) {
+    AliAODTrack *trk = aod->GetTrack(itr);
+    if( !trk ) continue;
+    if(!(trk->TestFilterBit(1<<0))) continue;
+
+      if(!(trk->GetStatus() & AliESDtrack::kTPCrefit) ) continue;
+      if(!(trk->GetStatus() & AliESDtrack::kITSrefit) ) continue;
+      if((trk->HasPointOnITSLayer(0))||(trk->HasPointOnITSLayer(1))) nSpdHits++;
+      Double_t dca[2] = {0.0,0.0}, cov[3] = {0.0,0.0,0.0};
+      AliAODTrack* trk_clone=(AliAODTrack*)trk->Clone("trk_clone");
+      if(!trk_clone->PropagateToDCA(fAODVertex,aod->GetMagneticField(),300.,dca,cov)) continue;
+      delete trk_clone;
+      Double_t cut_DCAxy = (0.0182 + 0.0350/TMath::Power(trk->Pt(),1.01));
+      
+      if(trk->GetTPCNcls() < fJPsiSels[0])continue;
+      if(trk->Chi2perNDF() > fJPsiSels[1])continue;
+      if(TMath::Abs(dca[1]) > fJPsiSels[2]) continue;      
+      if(TMath::Abs(dca[0]) > fJPsiSels[3]*cut_DCAxy) continue;
+      if((trk->HasPointOnITSLayer(0))||(trk->HasPointOnITSLayer(1))) nSpdHits++;
+     
+      TrackIndex[nGoodTracks] = itr;
+      TrackPt[nGoodTracks] = trk->Pt();
+      nGoodTracks++;
+                                 
+      if(nGoodTracks > 4) break;  
+  }//Track loop
+    
+  Int_t mass[3]={-1,-1,-1};
+  fChannel = 0;
+  nLepton=0; nHighPt=0;
+  
+  if(nGoodTracks == 4){
+         if(nSpdHits<2) continue; 
+         MeanPt = GetMedian(TrackPt);
+         for(Int_t k=0; k<4; k++){
+               AliAODTrack *trk = aod->GetTrack(TrackIndex[k]);
+               if(trk->Pt() > MeanPt){   
+                       fRecTPCsignal[nLepton] = trk->GetTPCsignal();      
+                       qLepton[nLepton] = trk->Charge();
+                       if(fRecTPCsignal[nLepton] > 40 && fRecTPCsignal[nLepton] < 70){
+                                       vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), muonMass);
+                                       mass[nLepton] = 0;
+                                       }
+                       if(fRecTPCsignal[nLepton] > 70 && fRecTPCsignal[nLepton] < 100){
+                                       vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), electronMass);
+                                       mass[nLepton] = 1;
+                                       }
+                       nLepton++;
+                       }
+               else{
+                       qPion[nPion] = trk->Charge();
+                       vPion[nPion].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), pionMass);
+                       nPion++;
+                       }             
+               }
+       if((qLepton[0]*qLepton[1] < 0) && (qPion[0]*qPion[1] < 0) && mass[0] != -1 && mass[1] != -1){
+               vCandidate = vLepton[0]+vLepton[1]+vPion[0]+vPion[1];
+               vDilepton = vLepton[0]+vLepton[1];
+               fRecTPCsignalDist = TMath::Sqrt(TMath::Power(fRecTPCsignal[0]-56,2)+TMath::Power(fRecTPCsignal[1]-56,2));
+               if (fRecTPCsignalDist < 3.6*4.0) fChannel = -1;
+               else { 
+                       fRecTPCsignalDist = TMath::Sqrt(TMath::Power(fRecTPCsignal[0]-78,2)+TMath::Power(fRecTPCsignal[1]-78,2));
+                       if (fRecTPCsignalDist < 4.1*4.0) fChannel = 1; 
+                       }                       
+               if(fChannel == -1) if(vDilepton.M() > 3.0 && vDilepton.M() < 3.2 && vCandidate.Pt()<0.15) ((TH1D*)(fListPsi2sTight->At(i)))->Fill(vCandidate.M());              
+               if(fChannel == 1) if(vDilepton.M() > 2.6 && vDilepton.M() < 3.2 && vCandidate.Pt()<0.3) ((TH1D*)(fListPsi2sTight->At(i)))->Fill(vCandidate.M());
+       }
+  }   
+}//Tight cuts
+
 
 }
 //_____________________________________________________________________________
@@ -1079,7 +1329,6 @@ void AliAnalysisTaskUpcPsi2s::RunAODtree()
       AliAODTrack* trk_clone=(AliAODTrack*)trk->Clone("trk_clone");
       if(!trk_clone->PropagateToDCA(fAODVertex,aod->GetMagneticField(),300.,dca,cov)) continue;
       delete trk_clone;
-      if(!trk->PropagateToDCA(fAODVertex,aod->GetMagneticField(),300.,dca,cov)) continue;
       if(TMath::Abs(dca[1]) > 2) continue;
       Double_t cut_DCAxy = 4*(0.0182 + 0.0350/TMath::Power(trk->Pt(),1.01));
       if(TMath::Abs(dca[0]) > cut_DCAxy) continue;
@@ -1532,7 +1781,7 @@ void AliAnalysisTaskUpcPsi2s::RunESDtree()
       if(!trk->RelateToVertex(fESDVertex, esd->GetMagneticField(),300.,&cParam)) continue;
       trk->GetImpactParameters(dca[0],dca[1]);
       if(TMath::Abs(dca[1]) > 2) continue;
-      if(TMath::Abs(dca[1]) > 0.2) continue;
+      if(TMath::Abs(dca[0]) > 0.2) continue;
       
       TrackIndex[nGoodTracks] = itr;
       nGoodTracks++;
@@ -1662,3 +1911,26 @@ void AliAnalysisTaskUpcPsi2s::Terminate(Option_t *)
   cout<<"Analysis complete."<<endl;
 }//Terminate
 
+//_____________________________________________________________________________
+Double_t AliAnalysisTaskUpcPsi2s::GetMedian(Double_t *daArray) {
+    // Allocate an array of the same size and sort it.
+    Double_t dpSorted[4];
+    for (Int_t i = 0; i < 4; ++i) {
+        dpSorted[i] = daArray[i];
+    }
+    for (Int_t i = 3; i > 0; --i) {
+        for (Int_t j = 0; j < i; ++j) {
+            if (dpSorted[j] > dpSorted[j+1]) {
+                Double_t dTemp = dpSorted[j];
+                dpSorted[j] = dpSorted[j+1];
+                dpSorted[j+1] = dTemp;
+            }
+        }
+    }
+
+    // Middle or average of middle values in the sorted array.
+    Double_t dMedian = 0.0;
+    dMedian = (dpSorted[2] + dpSorted[1])/2.0;
+    
+    return dMedian;
+}
index fa85e3c0b7ae7f2e2645b0c5f270ba1ce78c1b54..f0b4737bb16be69b1e306fc026e4346a0d934f69 100644 (file)
@@ -41,6 +41,7 @@ class AliAnalysisTaskUpcPsi2s : public AliAnalysisTaskSE {
   void SetRunSyst(Bool_t runSyst){fRunSystematics = runSyst;}
   void SetIsMC(Bool_t MC){isMC = MC;}
   void InitSystematics();
+  Double_t GetMedian(Double_t *daArray);
 
  private:
   Int_t fType; // 0 - ESD, 1 - AOD
@@ -112,6 +113,8 @@ class AliAnalysisTaskUpcPsi2s : public AliAnalysisTaskSE {
   TList *fListSystematics;
   TList *fListJPsiLoose;
   TList *fListJPsiTight;
+  TList *fListPsi2sLoose;
+  TList *fListPsi2sTight;
   
   AliAnalysisTaskUpcPsi2s(const AliAnalysisTaskUpcPsi2s&); //not implemented
   AliAnalysisTaskUpcPsi2s& operator =(const AliAnalysisTaskUpcPsi2s&); //not implemented
index 255046a01d00f6b282134522fc360ee1dae20868..cb5bc753caad4772422c4da2f630ff957e67526b 100644 (file)
@@ -916,6 +916,45 @@ Bool_t AliExternalTrackParam::Rotate(Double_t alpha) {
   return kTRUE;
 }
 
+//______________________________________________________
+Bool_t AliExternalTrackParam::RotateParamOnly(Double_t alpha)
+{
+  // rotate to new frame, ignore covariance
+  if (TMath::Abs(fP[2]) >= kAlmost1) {
+    AliError(Form("Precondition is not satisfied: |sin(phi)|>1 ! %f",fP[2])); 
+    return kFALSE;
+  }
+  //
+  if      (alpha < -TMath::Pi()) alpha += 2*TMath::Pi();
+  else if (alpha >= TMath::Pi()) alpha -= 2*TMath::Pi();
+  //
+  Double_t &fP0=fP[0];
+  Double_t &fP2=fP[2];
+  //
+  Double_t x=fX;
+  Double_t ca=TMath::Cos(alpha-fAlpha), sa=TMath::Sin(alpha-fAlpha);
+  Double_t sf=fP2, cf=TMath::Sqrt((1.- fP2)*(1.+fP2)); // Improve precision
+  // RS: check if rotation does no invalidate track model (cos(local_phi)>=0, i.e. particle
+  // direction in local frame is along the X axis
+  if ((cf*ca+sf*sa)<0) {
+    AliDebug(1,Form("Rotation failed: local cos(phi) would become %.2f",cf*ca+sf*sa));
+    return kFALSE;
+  }
+  //
+  Double_t tmp=sf*ca - cf*sa;
+
+  if (TMath::Abs(tmp) >= kAlmost1) {
+     if (TMath::Abs(tmp) > 1.+ Double_t(FLT_EPSILON))  
+        AliWarning(Form("Rotation failed ! %.10e",tmp));
+     return kFALSE;
+  }
+  fAlpha = alpha;
+  fX =  x*ca + fP0*sa;
+  fP0= -x*sa + fP0*ca;
+  fP2=  tmp;
+  return kTRUE;
+}
+
 Bool_t AliExternalTrackParam::Invert() {
   //------------------------------------------------------------------
   // Transform this track to the local coord. system rotated by 180 deg. 
index 7dc0d12602ffca9c32a2193633034a3d9759cd99..93fb09afd5a0d6b088ab31be03c0fa698e292358 100644 (file)
@@ -59,6 +59,14 @@ class AliExternalTrackParam: public AliVTrack {
 
   }
 
+  void SetParamOnly(double x, double alpha, const double param[5]) {
+    //  Sets the parameters, neglect cov matrix
+    if      (alpha < -TMath::Pi()) alpha += 2*TMath::Pi();
+    else if (alpha >= TMath::Pi()) alpha -= 2*TMath::Pi();
+    fX=x; fAlpha=alpha;
+    for (Int_t i = 0; i < 5; i++)  fP[i] = param[i];
+  }
+
   void Set(Double_t xyz[3],Double_t pxpypz[3],Double_t cv[21],Short_t sign);
 
   static void SetMostProbablePt(Double_t pt) { fgMostProbablePt=pt; }
@@ -186,6 +194,7 @@ class AliExternalTrackParam: public AliVTrack {
   Double_t *GetResiduals(Double_t *p,Double_t *cov,Bool_t updated=kTRUE) const;
   Bool_t Update(Double_t p[2],Double_t cov[3]);
   Bool_t Rotate(Double_t alpha);
+  Bool_t RotateParamOnly(Double_t alpha);
   Bool_t Invert();
   Bool_t PropagateTo(Double_t x, Double_t b);
   Bool_t PropagateParamOnlyTo(Double_t xk, Double_t b);
index ee65f2451169aa9da7766e810e5b91b8d223c518..aaadefe332f2b4acda6ed8a185d0d56b83b218dd 100644 (file)
@@ -46,6 +46,8 @@ Bool_t AliTRDtrackOnline::Fit(ROOT::Math::Minimizer *minim)
   Bool_t minSuccess = kFALSE;
 
   if (minim) {
+    minSuccess = kTRUE;
+
     TIter param(&fTrackParametrizations);
 
     while (AliTRDtrackParametrization *par = (AliTRDtrackParametrization*) param()) {
@@ -54,7 +56,7 @@ Bool_t AliTRDtrackOnline::Fit(ROOT::Math::Minimizer *minim)
       minim->Clear();
       minim->SetFunction(res);
       par->SetParams(minim);
-      minSuccess = minim->Minimize();
+      minSuccess &= minim->Minimize();
       par->GetParams(minim);
     }
   }
@@ -338,8 +340,7 @@ Double_t AliTRDtrackResiduals::DoEval(const Double_t *par) const
 
     AliTRDpadPlane *pp = fgGeometry->GetPadPlane(trkl->GetDetector());
     Float_t zlen = 0.5 * pp->GetRowSize(trkl->GetBinZ());
-    Float_t zpad = pp->GetRowPos(trkl->GetBinZ()) - zlen;
-    zpad = AliTRDtrackOnline::GetZ(trkl);
+    Float_t zpad = AliTRDtrackOnline::GetZ(trkl);
     Float_t zrel = zext - zpad;
     if (zrel > zlen)
       zrel = zlen;
@@ -348,11 +349,11 @@ Double_t AliTRDtrackResiduals::DoEval(const Double_t *par) const
 
     Float_t ycorr = trkl->GetLocalY() + TMath::Tan(TMath::Pi()/180.*pp->GetTiltingAngle()) * zrel;
 
-    deltaY = ycorr        - yext;
-    deltaZ = AliTRDtrackOnline::GetZ(trkl) - zext;
-    deltaY /= 0.3;
-    deltaZ /= 3.;
-//     printf("in layer %i: deltaY = %f, deltaZ = %f\n", layer, deltaY, deltaZ);
+    deltaY = ycorr - yext;
+    deltaZ = zpad  - zext;
+    deltaY /= 0.05;
+    deltaZ /= pp->GetRowSize(trkl->GetBinZ()) / TMath::Sqrt(12.);
+    // printf("for tracklet %i: deltaY = %f, deltaZ = %f\n", iTracklet, deltaY, deltaZ);
 
     chi2 += deltaY*deltaY + deltaZ*deltaZ;
   }
index 87135a7694bb267ed9a3e5fc6490e6ebf13ebdff..707a1db4c36c13f55e9a2cce412d90ed1b664e8a 100644 (file)
@@ -124,8 +124,9 @@ class AliTRDtrackOnline : public TObject
   void Print(Option_t *option = "") const;
 
   static Float_t GetX(AliVTrdTracklet *trkl) { return fgGeometry->GetTime0(trkl->GetDetector() % 6); }
-  static Float_t GetZ(AliVTrdTracklet *trkl) { return fgGeometry->GetPadPlane((trkl->GetDetector() % 6), (trkl->GetDetector()/6) % 5)->GetRowPos(trkl->GetBinZ()) -
-      fgGeometry->GetPadPlane((trkl->GetDetector() % 6), (trkl->GetDetector()/6) % 5)->GetRowSize(trkl->GetBinZ()); }
+  static Float_t GetZ(AliVTrdTracklet *trkl) { return
+      fgGeometry->GetPadPlane(trkl->GetDetector())->GetRowPos(trkl->GetBinZ()) -
+      .5 * fgGeometry->GetPadPlane(trkl->GetDetector())->GetRowSize(trkl->GetBinZ()); }
   static AliTRDgeometry *fgGeometry;
 
  protected:
index dda803c095c56aadefbb9f0fc4acac609caac2e7..7e9ea00f39a521e1131614c04627e3477335cddb 100644 (file)
@@ -9,11 +9,12 @@ void CheckCalibOCDB(Int_t run)
   AliVZEROCalibData *calData = (AliVZEROCalibData*)ent->GetObject();
 
   for(Int_t pmNumber = 0; pmNumber < 64; ++pmNumber) {
-    printf("Ch=%d HV=%.1f MIP=%.3f Ped0=%.1f Ped1=%.1f Thr=%1.f\n",
+    printf("Ch=%d HV=%.1f MIP=%.3f Ped0=%.1f Ped1=%.1f Thr=%1.f Dead=%s\n",
           pmNumber,
           calData->GetMeanHV(pmNumber),
           1./calData->GetMIPperADC(pmNumber),
           calData->GetPedestal(pmNumber),calData->GetPedestal(pmNumber+64),
-          calData->GetDiscriThr(pmNumber));
+          calData->GetDiscriThr(pmNumber),
+          calData->IsChannelDead(pmNumber)?"yes":"no");
   }
 }