]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
from Carlos Perez Lara:
authormkrzewic <mkrzewic@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 4 Mar 2013 15:53:06 +0000 (15:53 +0000)
committermkrzewic <mkrzewic@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 4 Mar 2013 15:53:06 +0000 (15:53 +0000)
 activate outliers rejection, do vertex QA and allow for pPb analysis

PWG/FLOW/Tasks/AliAnalysisTaskFlowStrange.cxx
PWG/FLOW/Tasks/AliAnalysisTaskFlowStrange.h
PWGCF/FLOW/macros/AddTaskFlowStrange.C

index 0fb0cc4a1ec2fc02eae6880092702c6a4ae96c5a..8c4eccb99163cb975952bd99d9c134eae96dd5cd 100644 (file)
@@ -73,6 +73,10 @@ AliAnalysisTaskFlowStrange::AliAnalysisTaskFlowStrange() :
   fDebug(kFALSE),\r
   fUseEventSelection(kTRUE),\r
   fDoQA(kFALSE),\r
+  fDoExtraQA(kFALSE),\r
+  fRunOnpA(kFALSE),\r
+  fRunOnpp(kFALSE),\r
+  fCalib(NULL),\r
   fPsi2(0.0),\r
   fSpecie(0),\r
   fMCmatch(-1),\r
@@ -105,6 +109,10 @@ AliAnalysisTaskFlowStrange::AliAnalysisTaskFlowStrange(const char *name,
   fDebug(kFALSE),\r
   fUseEventSelection(kTRUE),\r
   fDoQA(kFALSE),\r
+  fDoExtraQA(kFALSE),\r
+  fRunOnpA(kFALSE),\r
+  fRunOnpp(kFALSE),\r
+  fCalib(NULL),\r
   fPsi2(0.0),\r
   fSpecie(0),\r
   fMCmatch(-1),\r
@@ -142,6 +150,7 @@ AliAnalysisTaskFlowStrange::~AliAnalysisTaskFlowStrange()
   if (fCutsPOI)      delete fCutsPOI;\r
   if (fCutsRFPTPC)   delete fCutsRFPTPC;\r
   if (fCutsRFPVZE)   delete fCutsRFPVZE;\r
+  if (fCalib)        delete fCalib;\r
 }\r
 //=======================================================================\r
 void AliAnalysisTaskFlowStrange::UserCreateOutputObjects()\r
@@ -196,6 +205,27 @@ void AliAnalysisTaskFlowStrange::Exec(Option_t* option)
 void AliAnalysisTaskFlowStrange::UserExec(Option_t *option)\r
 {\r
   // dummy user exec\r
+  if(fRunOnpA) { // temporal extra cuts for pA (2BE REMOVED!)\r
+    AliAODEvent *aod=dynamic_cast<AliAODEvent*>(InputEvent());\r
+    if(!aod) return;\r
+    if(aod->GetHeader()->GetEventNumberESDFile() == 0) return; //rejecting first chunk\r
+     // https://twiki.cern.ch/twiki/bin/viewauth/ALICE/PAVertexSelectionStudies\r
+    const AliAODVertex* trkVtx = aod->GetPrimaryVertex();\r
+    if (!trkVtx || trkVtx->GetNContributors()<=0) return;\r
+    TString vtxTtl = trkVtx->GetTitle();\r
+    if (!vtxTtl.Contains("VertexerTracks")) return;\r
+    Float_t zvtx = trkVtx->GetZ();\r
+    const AliAODVertex* spdVtx = aod->GetPrimaryVertexSPD();\r
+    if (spdVtx->GetNContributors()<=0) return;\r
+    TString vtxTyp = spdVtx->GetTitle();\r
+    Double_t cov[6]={0};\r
+    spdVtx->GetCovarianceMatrix(cov);\r
+    Double_t zRes = TMath::Sqrt(cov[5]);\r
+    if (vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) return;\r
+    if (TMath::Abs(spdVtx->GetZ() - trkVtx->GetZ())>0.5) return;\r
+    if (TMath::Abs(zvtx) > 10) return;\r
+  }\r
+\r
   AliAnalysisTaskFlowStrange::MyUserExec(option);\r
 }\r
 //=======================================================================\r
@@ -211,13 +241,26 @@ void AliAnalysisTaskFlowStrange::AddQAEvents()
   tEvent->GetXaxis()->SetBinLabel(2,"selected");\r
   tEvent->GetXaxis()->SetBinLabel(3,"unexpected");\r
 \r
-  TH1D *tTPCRFP = new TH1D("RFPTPC","TPC Reference Flow Particles;multiplicity",100,0,3000); tQAEvents->Add(tTPCRFP);\r
-  TH1D *tVZERFP = new TH1D("RFPVZE","VZERO Reference Flow Particles;multiplicity",100,0,30000); tQAEvents->Add(tVZERFP);\r
+  TH2D *tH2D;\r
+  TH1D *tTPCRFP = new TH1D("RFPTPC","TPC Reference Flow Particles;multiplicity",3000,0,3000); tQAEvents->Add(tTPCRFP);\r
+  TH1D *tVZERFP = new TH1D("RFPVZE","VZERO Reference Flow Particles;multiplicity",3000,0,30000); tQAEvents->Add(tVZERFP);\r
+  tH2D = new TH2D("TPCPhiEta","TPC RFP;Phi;Eta",100,0,TMath::TwoPi(),100,-1.0,+1.0); tQAEvents->Add( tH2D );\r
+  tH2D = new TH2D("VZEPhiEta","VZE RFP;Phi;Eta",20,0,TMath::TwoPi(),40,-4.0,+6.0); tQAEvents->Add( tH2D );\r
   TH1D *tPOI = new TH1D("POI","POIs;multiplicity",500,0,500); tQAEvents->Add( tPOI );\r
   if(fDoQA) {\r
-    TH2D *tH2D = new TH2D("VTXZ","VTXZ;Global||SPD;SPD",60,-15,+15,60,-15,+15); tQAEvents->Add( tH2D );\r
+    printf("QA enabled\n");\r
+    tH2D = new TH2D("VTXZ","VTXZ;Global||SPD;SPD",60,-25,+25,60,-25,+25); tQAEvents->Add( tH2D );\r
     TH3D *tH3D = new TH3D("EVPLANE","EVPLANE;TPC;V0A;V0C",72,0,TMath::Pi(),72,0,TMath::Pi(),72,0,TMath::Pi()); tQAEvents->Add( tH3D );\r
     tH2D = new TH2D("VTXZSEL","VTXZ SEL;Global||SPD;SPD",40,-10,+10,40,-10,+10); tQAEvents->Add( tH2D );\r
+    tH3D = new TH3D("PRIMVERTEX","PRIMVERTEX;#sigma_{x};#sigma_{y};#sigma_{z}",100,0,5e-3,100,0,5e-3,100,0,8e-3); tQAEvents->Add( tH3D );\r
+    double dArrayPt[25] = {0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0,\r
+                          1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0,\r
+                          2.5, 3.0, 3.5, 4.0, 5.0 };\r
+    tH2D = new TH2D("TPCPtQx","TPCPtQx;pT;Qx/M",24,dArrayPt,100,-0.2,+0.2); tQAEvents->Add( tH2D );\r
+    tH2D = new TH2D("TPCPtQy","TPCPtQy;pT;Qy/M",24,dArrayPt,100,-0.2,+0.2); tQAEvents->Add( tH2D );\r
+    tH2D = new TH2D("TPCPtEta","TPCPtEta;pT;Eta/M",24,dArrayPt,100,-0.3,+0.3); tQAEvents->Add( tH2D );\r
+    tH2D = new TH2D("TPCQxQy","TPCQxQy;Qx/M;Qy/M",100,-0.3,+0.3,100,-0.3,+0.3); tQAEvents->Add( tH2D );\r
+    tH2D = new TH2D("VZEQxQy","VZEQxQy;Qx/M;Qy/M",100,-0.3,+0.3,100,-0.3,+0.3); tQAEvents->Add( tH2D );\r
   }\r
   TProfile *tCuts = new TProfile("Cuts","Analysis Cuts",11,0,11);\r
   tCuts->Fill(0.5,fV0Cuts[0],1); tCuts->GetXaxis()->SetBinLabel(1,"dl");\r
@@ -257,8 +300,18 @@ void AliAnalysisTaskFlowStrange::AddQACandidates()
     dMaxMass = 1.0;\r
     break;\r
   }\r
-\r
-  if(fDoQA) {\r
+  double dArrayPt[29] = {0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0,\r
+                        1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0,\r
+                        2.5, 3.0, 3.5, 4.0, 5.0, 6.0, 8.0, 10., 12. };\r
+  tList=new TList();\r
+  tList->SetName("Candidates");\r
+  tList->SetOwner();\r
+  tH2D = new TH2D("V0MASS","V0MASS;pT;Mass",28,dArrayPt,nMass,dMinMass,dMaxMass); tList->Add(tH2D);\r
+  tH2D = new TH2D("V0PhiEta","V0PhiEta;Phi;Eta",100,0,TMath::TwoPi(),100,-1.0,+1.0); tList->Add(tH2D);\r
+  fQAList->Add(tList);\r
+\r
+  if(fDoExtraQA) {\r
+    printf("Extra QA enabled\n");\r
     tList = new TList(); tList->SetOwner(); tList->SetName("QACutsBefore_IP");\r
     tH3D = new TH3D("BefVOL", "VOLUME;Phi;Eta;Pt [GeV]",       63, 0.0,+6.3, 40,-1.0,+1.0, 60,0,12); tList->Add( tH3D );\r
     tH3D = new TH3D("BefRAP", "RAPIDITY;y;Pt [GeV]",           40,-1.0,+1.0, 60,0,12, nMass, dMinMass, dMaxMass); tList->Add( tH3D );\r
@@ -310,6 +363,7 @@ void AliAnalysisTaskFlowStrange::AddQACandidates()
   }\r
 \r
   if(fMCmatch>0) { // only for MCanalysis\r
+    printf("MC mode enabled\n");\r
     tList = new TList(); tList->SetOwner(); tList->SetName("QAMC");\r
     tH3D = new TH3D("MCPDG","MC PDGm;p_{T} (GeV);Mass [GeV]",24,0,12,nMass,dMinMass,dMaxMass,30,0,30); tList->Add( tH3D );\r
     tH3D->GetZaxis()->SetBinLabel( 1,"NONE");\r
@@ -539,6 +593,20 @@ void AliAnalysisTaskFlowStrange::ReadFromAODv0(AliAODEvent *tAOD)
   fFlowEventTPC->Fill(fCutsRFPTPC,fCutsPOI);\r
   fFlowEventVZE->Fill(fCutsRFPVZE,fCutsPOI);\r
   fPsi2 = (fFlowEventVZE->GetQ()).Phi()/2;\r
+\r
+  for(Int_t i=0; i!=fFlowEventTPC->NumberOfTracks(); i++) {\r
+    AliFlowTrackSimple *pTrack = (AliFlowTrackSimple*) fFlowEventTPC->GetTrack(i);\r
+    if(!pTrack) continue;\r
+    if(!pTrack->InRPSelection()) continue;\r
+    ((TH2D*)((TList*)fQAList->FindObject("Event"))->FindObject("TPCPhiEta"))->Fill( pTrack->Phi(), pTrack->Eta(), pTrack->Weight() );\r
+  }\r
+  for(Int_t i=0; i!=fFlowEventVZE->NumberOfTracks(); i++) {\r
+    AliFlowTrackSimple *pTrack = (AliFlowTrackSimple*) fFlowEventVZE->GetTrack(i);\r
+    if(!pTrack) continue;\r
+    if(!pTrack->InRPSelection()) continue;\r
+    ((TH2D*)((TList*)fQAList->FindObject("Event"))->FindObject("VZEPhiEta"))->Fill( pTrack->Phi(), pTrack->Eta(), pTrack->Weight() );\r
+  }\r
+\r
   if(fDoQA) {\r
     AliFlowVector Qs[2];\r
     fFlowEventVZE->TagSubeventsInEta(-5,1,1,+5);\r
@@ -547,6 +615,61 @@ void AliAnalysisTaskFlowStrange::ReadFromAODv0(AliAODEvent *tAOD)
     Double_t dEPV0A = Qs[0].Phi()/2;\r
     Double_t dEPTPC = (fFlowEventTPC->GetQ()).Phi()/2;\r
     ((TH3D*)((TList*)fQAList->FindObject("Event"))->FindObject("EVPLANE"))->Fill( dEPTPC, dEPV0A, dEPV0C );\r
+    Double_t dVZEQx = (fFlowEventVZE->GetQ(2)).Px() / (fFlowEventVZE->GetQ(2)).GetMult();\r
+    Double_t dVZEQy = (fFlowEventVZE->GetQ(2)).Py() / (fFlowEventVZE->GetQ(2)).GetMult();\r
+    ((TH2D*)((TList*)fQAList->FindObject("Event"))->FindObject("VZEQxQy"))->Fill( dVZEQx, dVZEQy );\r
+    ((TH2D*)((TList*)fQAList->FindObject("Event"))->FindObject("TPCQxQy"))->Fill( (fFlowEventTPC->GetQ(2)).Px() / (fFlowEventTPC->GetQ(2)).GetMult(),\r
+                                                                                 (fFlowEventTPC->GetQ(2)).Py() / (fFlowEventTPC->GetQ(2)).GetMult() );\r
+    // TPC Q\r
+    const int ngr=24;\r
+    double dArrayPt[25] = {0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0,\r
+                          1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0,\r
+                          2.5, 3.0, 3.5, 4.0, 5.0 };\r
+    double dTPCPt[ngr];\r
+    double dTPCQx[ngr];\r
+    double dTPCQy[ngr];\r
+    double dTPCEta[ngr];\r
+    double dTPCM[ngr];\r
+    for(int i=0; i!=ngr; ++i) {\r
+      dTPCPt[i] = 0;\r
+      dTPCQx[i] = 0;\r
+      dTPCQy[i] = 0;\r
+      dTPCEta[i] = 0;\r
+      dTPCM[i] = 0;\r
+    }\r
+    for(Int_t i=0; i!=fFlowEventTPC->NumberOfTracks(); i++) {\r
+      AliFlowTrackSimple *pTrack = (AliFlowTrackSimple*) fFlowEventTPC->GetTrack(i);\r
+      if(!pTrack) continue;\r
+      if(!pTrack->InRPSelection()) continue;\r
+      Double_t dPt  = pTrack->Pt();\r
+      int npt=-1;\r
+      for(int pt=0; pt!=ngr; ++pt)\r
+       if( (dPt > dArrayPt[pt])&&(dPt < dArrayPt[pt+1]) ) {\r
+         npt = pt;\r
+         break;\r
+       }\r
+      if(npt<0) continue;\r
+      Double_t dPhi = pTrack->Phi();\r
+      Double_t dWeight = pTrack->Weight();\r
+      dTPCPt[npt] += dWeight*dPt;\r
+      dTPCQx[npt] += dWeight*TMath::Cos(2*dPhi);\r
+      dTPCQy[npt] += dWeight*TMath::Sin(2*dPhi);\r
+      dTPCEta[npt] += dWeight*pTrack->Eta();\r
+      dTPCM[npt] += dWeight;\r
+    }\r
+    for(int i=0; i!=ngr; ++i)\r
+      if( dTPCM[i]>0 ) {\r
+       ((TH2D*)((TList*)fQAList->FindObject("Event"))->FindObject("TPCPtQx"))->Fill( dTPCPt[i]/dTPCM[i], dTPCQx[i]/dTPCM[i] );\r
+       ((TH2D*)((TList*)fQAList->FindObject("Event"))->FindObject("TPCPtQy"))->Fill( dTPCPt[i]/dTPCM[i], dTPCQy[i]/dTPCM[i] );\r
+       ((TH2D*)((TList*)fQAList->FindObject("Event"))->FindObject("TPCPtEta"))->Fill( dTPCPt[i]/dTPCM[i], dTPCEta[i]/dTPCM[i] );\r
+      }\r
+    // End of TPC Q\r
+    const AliAODVertex* trkVtx = tAOD->GetPrimaryVertex();\r
+    Double_t cov[6]={0};\r
+    trkVtx->GetCovarianceMatrix(cov);\r
+    ((TH3D*)((TList*)fQAList->FindObject("Event"))->FindObject("PRIMVERTEX"))->Fill( TMath::Sqrt( cov[0] ),\r
+                                                                                    TMath::Sqrt( cov[2] ),\r
+                                                                                    TMath::Sqrt( cov[5] ) );\r
   }\r
 \r
   if(fSpecie>80) {\r
@@ -664,7 +787,7 @@ Int_t AliAnalysisTaskFlowStrange::PassesAODCuts(AliAODv0 *myV0, AliAODEvent *tAO
   TString sIPOP = "IP";\r
   if( (dDPHI>TMath::PiOver4()) && (dDPHI<3*TMath::PiOver4()) )\r
     sIPOP = "OP";\r
-  if(fDoQA) {\r
+  if(fDoExtraQA) {\r
     ((TH3D*)((TList*)fQAList->FindObject(Form("QACutsBefore_%s",sIPOP.Data())))->FindObject("BefRAP")) ->Fill(dRAP,  dPT, dMASS);\r
     ((TH3D*)((TList*)fQAList->FindObject(Form("QACutsBefore_%s",sIPOP.Data())))->FindObject("BefDLZ")) ->Fill(dDLZ,  dPT, dMASS);\r
     ((TH3D*)((TList*)fQAList->FindObject(Form("QACutsBefore_%s",sIPOP.Data())))->FindObject("BefDLXY"))->Fill(dDLXY, dPT, dMASS);\r
@@ -790,7 +913,7 @@ Int_t AliAnalysisTaskFlowStrange::PassesAODCuts(AliAODv0 *myV0, AliAODEvent *tAO
     passes=mcpasses;\r
   }\r
   // <<=== MATCHED TO MC ===\r
-  if(passes&&fDoQA) {\r
+  if(passes&&fDoExtraQA) {\r
     ((TH3D*)((TList*)fQAList->FindObject(Form("QACutsAfter_%s",sIPOP.Data())))->FindObject("AftRAP")) ->Fill(dRAP,  dPT, dMASS);\r
     ((TH3D*)((TList*)fQAList->FindObject(Form("QACutsAfter_%s",sIPOP.Data())))->FindObject("AftDLZ")) ->Fill(dDLZ,  dPT, dMASS);\r
     ((TH3D*)((TList*)fQAList->FindObject(Form("QACutsAfter_%s",sIPOP.Data())))->FindObject("AftDLXY"))->Fill(dDLXY, dPT, dMASS);\r
@@ -803,6 +926,10 @@ Int_t AliAnalysisTaskFlowStrange::PassesAODCuts(AliAODv0 *myV0, AliAODEvent *tAO
     ((TH3D*)((TList*)fQAList->FindObject(Form("QACutsAfter_%s",sIPOP.Data())))->FindObject("AftAP"))  ->Fill(dALPHA,dQT,dPT);\r
     ((TH3D*)((TList*)fQAList->FindObject(Form("QACutsAfter_%s",sIPOP.Data())))->FindObject("AftVOL")) ->Fill(dPHI, dETA,dPT);\r
   }\r
+  if(passes&&fDoQA) {\r
+    ((TH2D*)((TList*)fQAList->FindObject("Candidates"))->FindObject("V0MASS"))->Fill( dPT, dMASS );\r
+    ((TH2D*)((TList*)fQAList->FindObject("Candidates"))->FindObject("V0PhiEta"))->Fill( dPHI, dETA );\r
+  }\r
   return passes;\r
 }\r
 //=======================================================================\r
index 86fc989c7a5b1e516c71fcd1960ba21429025bd6..7fc9daa8daa05ea96883c0cd7a78430d96a00987 100644 (file)
@@ -40,6 +40,10 @@ class AliAnalysisTaskFlowStrange : public AliAnalysisTaskSE {
     void MyUserExec(Option_t *);\r
     void SetDebug() {fDebug = kTRUE;}\r
     void SetQA(Bool_t qa) {fDoQA = qa;}\r
+    void SetExtraQA(Bool_t qa) {fDoExtraQA = qa;}\r
+    void SetpA(Bool_t pa) {fRunOnpA = pa;}\r
+    void Setpp(Bool_t pp) {fRunOnpp = pp;}\r
+    void SetCalibration(TList *cal) {fCalib = cal;}\r
     void SetCuts(Double_t cuts[11]);\r
     void SetK0L0(Int_t specie) {fSpecie=specie;}\r
     void SetCommonConstants(Int_t massBins, Double_t minMass, Double_t maxMass);\r
@@ -63,6 +67,10 @@ class AliAnalysisTaskFlowStrange : public AliAnalysisTaskSE {
     Bool_t fDebug; // true if we want to inspect the main steps of the task\r
     Bool_t fUseEventSelection; // true if we want to use AliFlowEventCuts\r
     Bool_t fDoQA;  // true if we want to produce QA plots\r
+    Bool_t fDoExtraQA; // full QA\r
+    Bool_t fRunOnpA; // Make task compatible with pA event selection\r
+    Bool_t fRunOnpp; // Make task compatible with pp event selection\r
+    TList *fCalib; // calibration list\r
     Double_t fPsi2;// best estimation of Psi2\r
     Int_t fSpecie; // K0=>0 L0=>1\r
     Int_t fMCmatch; // for studies regarding background and efficiency\r
index 115a35f792f7819401fa0af94699cfa2ea478774..eef318c9427a15c5c77d84a78057acab84bb1064 100644 (file)
@@ -1,7 +1,8 @@
 // ONE PRECONF WAGON\r
 void AddTaskFlowStrange(int trigger, float centrMin, float centrMax, int set, TString folderName="myFolder", TString suffixName="mySuffix", \r
                        int specie=0, char* MULT="V0M", int harmonic=2, int matchMC=-1, bool doQC=true, bool doSPTPC=true, bool doSPVZE=true,\r
-                       bool doQA=false, bool useFlowEventCuts=true) {\r
+                       bool doQA=false, bool useFlowEventCuts=true,\r
+                       bool runpp=false, bool runpA=false, bool doExtraQA=false, TString calibfile="alien:///alice/cern.ch/user/c/cperez/calib/calibPbPb2010.root") {\r
   Double_t c[11];\r
   switch(set) {\r
   case(0): // Filtering cuts //\r
@@ -15,13 +16,15 @@ void AddTaskFlowStrange(int trigger, float centrMin, float centrMax, int set, TS
   }\r
   AddTaskFlowStrange(trigger, centrMin, centrMax, folderName, suffixName, specie,\r
                     c[0],c[1],c[2],c[3],c[4],c[5],c[6],c[7],c[8],c[9],c[10],\r
-                    MULT, harmonic, matchMC, doQC, doSPTPC, doSPVZE, doQA, useFlowEventCuts);\r
+                    MULT, harmonic, matchMC, doQC, doSPTPC, doSPVZE, doQA, useFlowEventCuts,\r
+                    runpp, runpA, doExtraQA, calibfile);\r
 }\r
 // ALL CENTRALITIES\r
 void AddTaskFlowStrange(int trigger, TString folderName="myFolder", TString suffix="mySuffix", int specie=0,\r
                         double cut0, double cut1, double cut2, double cut3, double cut4, double cut5, double cut6, double cut7, double cut8,\r
                         double cut9, double cut10, char* MULT="V0M", int harmonic=2, int matchMC=-1,\r
-                        bool doQC=true, bool doSPTPC=true, bool doSPVZE=true, bool doQA=false, bool useFlowEventCuts=true ) {\r
+                        bool doQC=true, bool doSPTPC=true, bool doSPVZE=true, bool doQA=false, bool useFlowEventCuts=true,\r
+                       bool runpp=false, bool runpA=false, bool doExtraQA=false, TString calibfile="alien:///alice/cern.ch/user/c/cperez/calib/calibPbPb2010.root") {\r
   int centMin[8] = {00,05,10,20,30,40,50,60};\r
   int centMax[8] = {05,10,20,30,40,50,60,80};\r
   TString particle="none";\r
@@ -33,14 +36,16 @@ void AddTaskFlowStrange(int trigger, TString folderName="myFolder", TString suff
     name = Form("%s%02d%02d%s",particle.Data(),centMin[i],centMax[i],suffix.Data());\r
     AddTaskFlowStrange(trigger, centMin[i], centMax[i], folderName, name, specie,\r
                       cut0, cut1, cut2, cut3, cut4, cut5, cut6, cut7, cut8, cut9, cut10, MULT, harmonic, matchMC,\r
-                      doQC, doSPTPC, doSPVZE, doQA, useFlowEventCuts);\r
+                      doQC, doSPTPC, doSPVZE, doQA, useFlowEventCuts,\r
+                      runpp, runpA, doExtraQA, calibfile);\r
   }\r
 }\r
 // ONE WAGON\r
 void AddTaskFlowStrange(int trigger, float centrMin, float centrMax, TString folderName="myFolder", TString suffixName="mySuffix", int specie=0, \r
                        double cut0, double cut1, double cut2, double cut3, double cut4, double cut5, double cut6, double cut7, double cut8,\r
                        double cut9, double cut10, char* MULT="V0M", int harmonic=2, int matchMC=-1, \r
-                       bool doQC=true, bool doSPTPC=true, bool doSPVZE=true, bool doQA=false, bool useFlowEventCuts=true) {\r
+                       bool doQC=true, bool doSPTPC=true, bool doSPVZE=true, bool doQA=false, bool useFlowEventCuts=true, \r
+                       bool runpp=false, bool runpA=false, bool doExtraQA=false, TString calibfile="alien:///alice/cern.ch/user/c/cperez/calib/calibPbPb2010.root") {\r
   TString fileName = AliAnalysisManager::GetCommonFileName();\r
   fileName.ReplaceAll(".root","");\r
 \r
@@ -54,6 +59,7 @@ void AddTaskFlowStrange(int trigger, float centrMin, float centrMax, TString fol
   cutsEvent->SetRefMultMethod(AliFlowEventCuts::kSPDtracklets);\r
   cutsEvent->SetNContributorsRange(2);\r
   cutsEvent->SetPrimaryVertexZrange(-10.0,+10.0);\r
+  cutsEvent->SetCutTPCmultiplicityOutliers();\r
 \r
   //-R-P---c-u-t-s--------------------------------------------------------------\r
   AliFlowTrackCuts *cutsRPTPC = AliFlowTrackCuts::GetStandardTPCStandaloneTrackCuts();\r
@@ -86,6 +92,16 @@ void AddTaskFlowStrange(int trigger, float centrMin, float centrMax, TString fol
   taskSel->SetMCmatch(matchMC);\r
   taskSel->SetUseEventSelection(useFlowEventCuts);\r
   taskSel->SetCommonConstants( SFT_MassBins(specie), SFT_MinMass(specie), SFT_MaxMass(specie) );\r
+  taskSel->SetExtraQA( doExtraQA );\r
+  taskSel->Setpp( runpp );\r
+  taskSel->SetpA( runpA );\r
+  TFile *filecal = TFile::Open( calibfile.Data() );\r
+  if( (!filecal) || ( filecal && !filecal->IsOpen()) ){\r
+    printf("AddTaskStrange -> no complementary calibration file needed? Very good.\n");\r
+  } else {\r
+    TList *myCalib = (TList*)filecal->Get("calibration");\r
+    if(myCalib) taskSel->SetCalib(myCalib);\r
+  }\r
   AliAnalysisDataContainer *cOutHist = mgr->CreateContainer(Form("OutHistos_%s",suffixName.Data()),\r
                                                            TList::Class(),\r
                                                            AliAnalysisManager::kOutputContainer,\r