]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ANALYSIS/AliAnalysisTaskPIDqa.cxx
fix missing pt cut (old part of framework)
[u/mrichter/AliRoot.git] / ANALYSIS / AliAnalysisTaskPIDqa.cxx
index e1eff32802d3071d504bf8dbdcd475cf2d42f451..e0f4962a6c72a6d59fb512ad99e5349b5b5c772d 100644 (file)
@@ -69,7 +69,8 @@ fListQAemcal(0x0),
 fListQAhmpid(0x0),\r
 fListQAtofhmpid(0x0),\r
 fListQAtpctof(0x0),\r
-fListQAV0(0x0)\r
+fListQAV0(0x0),\r
+fListQAinfo(0x0)\r
 {\r
   //\r
   // Dummy constructor\r
@@ -96,7 +97,8 @@ fListQAemcal(0x0),
 fListQAhmpid(0x0),\r
 fListQAtofhmpid(0x0),\r
 fListQAtpctof(0x0),\r
-fListQAV0(0x0)\r
+fListQAV0(0x0),\r
+fListQAinfo(0x0)\r
 {\r
   //\r
   // Default constructor\r
@@ -195,6 +197,10 @@ void AliAnalysisTaskPIDqa::UserCreateOutputObjects()
   fListQAV0=new TList;\r
   fListQAV0->SetOwner();\r
   fListQAV0->SetName("V0decay");\r
+\r
+  fListQAinfo=new TList;\r
+  fListQAinfo->SetOwner();\r
+  fListQAinfo->SetName("QAinfo");\r
   \r
   fListQA->Add(fListQAits);\r
   fListQA->Add(fListQAitsSA);\r
@@ -207,6 +213,7 @@ void AliAnalysisTaskPIDqa::UserCreateOutputObjects()
   fListQA->Add(fListQAtpctof);\r
   fListQA->Add(fListQAtofhmpid);\r
   fListQA->Add(fListQAV0);\r
+  fListQA->Add(fListQAinfo);\r
 \r
   SetupITSqa();\r
   SetupTPCqa();\r
@@ -217,6 +224,7 @@ void AliAnalysisTaskPIDqa::UserCreateOutputObjects()
   SetupTPCTOFqa();\r
   SetupTOFHMPIDqa();\r
   SetupV0qa();\r
+  SetupQAinfo();\r
   \r
   PostData(1,fListQA);\r
 }\r
@@ -249,7 +257,8 @@ void AliAnalysisTaskPIDqa::UserExec(Option_t */*option*/)
   // Clear the V0 PID arrays\r
   ClearV0PIDlist();\r
 \r
-\r
+  //QA info\r
+  FillQAinfo();\r
   \r
   PostData(1,fListQA);\r
 }\r
@@ -381,13 +390,13 @@ void AliAnalysisTaskPIDqa::FillITSqa()
     }\r
     \r
     \r
-    for (Int_t ispecie=0; ispecie<AliPID::kSPECIES; ++ispecie){\r
+    for (Int_t ispecie=0; ispecie<AliPID::kSPECIESC; ++ispecie){\r
       TH2 *h=(TH2*)theList->At(ispecie);\r
       if (!h) continue;\r
       Double_t nSigma=fPIDResponse->NumberOfSigmasITS(track, (AliPID::EParticleType)ispecie);\r
       h->Fill(mom,nSigma);\r
     }\r
-    TH2 *h=(TH2*)theList->At(AliPID::kSPECIES);\r
+    TH2 *h=(TH2*)theList->At(AliPID::kSPECIESC);\r
     if (h) {\r
       Double_t sig=track->GetITSsignal();\r
       h->Fill(mom,sig);\r
@@ -428,15 +437,35 @@ void AliAnalysisTaskPIDqa::FillTPCqa()
     if ( nCrossedRowsTPC<70 || ratioCrossedRowsOverFindableClustersTPC<.8 ) continue;\r
     \r
     Double_t mom=track->GetTPCmomentum();\r
-    \r
-    for (Int_t ispecie=0; ispecie<AliPID::kSPECIES; ++ispecie){\r
+    // the default scenario\r
+    for (Int_t ispecie=0; ispecie<AliPID::kSPECIESC; ++ispecie){\r
       TH2 *h=(TH2*)fListQAtpc->At(ispecie);\r
       if (!h) continue;\r
       Double_t nSigma=fPIDResponse->NumberOfSigmasTPC(track, (AliPID::EParticleType)ispecie);\r
       h->Fill(mom,nSigma);\r
     }\r
+    // the "hybrid" scenario\r
+    for (Int_t ispecie=0; ispecie<AliPID::kSPECIESC; ++ispecie){\r
+      TH2 *h=(TH2*)fListQAtpc->At(ispecie+AliPID::kSPECIESC);\r
+      if (!h) continue;\r
+      Double_t nSigma=fPIDResponse->NumberOfSigmasTPC(track, (AliPID::EParticleType)ispecie, AliTPCPIDResponse::kdEdxHybrid);\r
+      h->Fill(mom,nSigma);\r
+    }\r
+    \r
+    // the "OROC" scenario\r
+    for (Int_t ispecie=0; ispecie<AliPID::kSPECIESC; ++ispecie){\r
+      TH2 *h=(TH2*)fListQAtpc->At(ispecie+2*AliPID::kSPECIESC);\r
+      if (!h) continue;\r
+      Double_t nSigma=fPIDResponse->NumberOfSigmasTPC(track, (AliPID::EParticleType)ispecie, AliTPCPIDResponse::kdEdxOROC);\r
+      //TSpline3* spline = fPIDResponse->GetTPCResponse().GetCurrentResponseFunction();\r
+      //std::cout<<ispecie<<" "<<nSigma<<" phi:"<<track->Phi()<<". "<<std::endl;\r
+      //if (spline) {cout<<spline->GetName()<<endl;}\r
+      //else {cout<<"NULL spline"<<endl;}\r
+      h->Fill(mom,nSigma);\r
+    }\r
     \r
-    TH2 *h=(TH2*)fListQAtpc->At(AliPID::kSPECIES);\r
+    TH2 *h=(TH2*)fListQAtpc->At(3*AliPID::kSPECIESC);\r
+\r
     if (h) {\r
       Double_t sig=track->GetTPCsignal();\r
       h->Fill(mom,sig);\r
@@ -508,13 +537,13 @@ void AliAnalysisTaskPIDqa::FillTOFqa()
     //\r
     ULong_t status=track->GetStatus();\r
     // TPC refit + ITS refit +\r
-    // TOF out + TOFpid +\r
+    // TOF out + kTIME\r
     // kTIME\r
-    // (we don't use kTOFmismatch because it depends on TPC....)\r
+    // (we don't use kTOFmismatch because it depends on TPC and kTOFpid because it prevents light nuclei\r
     if (!((status & AliVTrack::kTPCrefit) == AliVTrack::kTPCrefit) ||\r
         !((status & AliVTrack::kITSrefit) == AliVTrack::kITSrefit) ||\r
         !((status & AliVTrack::kTOFout  ) == AliVTrack::kTOFout  ) ||\r
-        !((status & AliVTrack::kTOFpid  ) == AliVTrack::kTOFpid  ) ||\r
+       //        !((status & AliVTrack::kTOFpid  ) == AliVTrack::kTOFpid  ) ||\r
         !((status & AliVTrack::kTIME    ) == AliVTrack::kTIME    ) ) continue;\r
 \r
     Float_t nCrossedRowsTPC = track->GetTPCClusterInfo(2,1);\r
@@ -529,7 +558,7 @@ void AliAnalysisTaskPIDqa::FillTOFqa()
 \r
     Double_t mom=track->P();\r
 \r
-    for (Int_t ispecie=0; ispecie<AliPID::kSPECIES; ++ispecie){\r
+    for (Int_t ispecie=0; ispecie<AliPID::kSPECIESC; ++ispecie){\r
       TH2 *h=(TH2*)fListQAtof->At(ispecie);\r
       if (!h) continue;\r
       Double_t nSigma=fPIDResponse->NumberOfSigmasTOF(track, (AliPID::EParticleType)ispecie);\r
@@ -561,16 +590,13 @@ void AliAnalysisTaskPIDqa::FillTOFqa()
     Double_t res = (Double_t)fPIDResponse->GetTOFResponse().GetStartTimeRes(mom);\r
     ((TH1F*)fListQAtof->FindObject("hStartTimeRes_TOF"))->Fill(res);\r
 \r
-    AliESDEvent *esd = dynamic_cast<AliESDEvent *>(event);\r
-    if (esd) {\r
-      Double_t startTime = esd->GetT0TOF(0);\r
-      if (startTime < 90000) ((TH1F*)fListQAtof->FindObject("hStartTimeAC_T0"))->Fill(startTime);\r
-      else {\r
-        startTime = esd->GetT0TOF(1);\r
-        if (startTime < 90000) ((TH1F*)fListQAtof->FindObject("hStartTimeA_T0"))->Fill(startTime);\r
-        startTime = esd->GetT0TOF(2);\r
-        if (startTime < 90000) ((TH1F*)fListQAtof->FindObject("hStartTimeC_T0"))->Fill(startTime);\r
-      }\r
+    Double_t startTimeT0 = event->GetT0TOF(0);\r
+    if (startTimeT0 < 90000) ((TH1F*)fListQAtof->FindObject("hStartTimeAC_T0"))->Fill(startTimeT0);\r
+    else {\r
+      startTimeT0 = event->GetT0TOF(1);\r
+      if (startTimeT0 < 90000) ((TH1F*)fListQAtof->FindObject("hStartTimeA_T0"))->Fill(startTimeT0);\r
+      startTimeT0 = event->GetT0TOF(2);\r
+      if (startTimeT0 < 90000) ((TH1F*)fListQAtof->FindObject("hStartTimeC_T0"))->Fill(startTimeT0);\r
     }\r
   }\r
   if (tracksAtTof > 0) {\r
@@ -875,7 +901,7 @@ void AliAnalysisTaskPIDqa::FillTPCTOFqa()
     Double_t mom=track->P();\r
     Double_t momTPC=track->GetTPCmomentum();\r
 \r
-    for (Int_t ispecie=0; ispecie<AliPID::kSPECIES; ++ispecie){\r
+    for (Int_t ispecie=0; ispecie<AliPID::kSPECIESC; ++ispecie){\r
       //TOF nSigma\r
       Double_t nSigmaTOF=fPIDResponse->NumberOfSigmasTOF(track, (AliPID::EParticleType)ispecie);\r
       Double_t nSigmaTPC=fPIDResponse->NumberOfSigmasTPC(track, (AliPID::EParticleType)ispecie);\r
@@ -885,11 +911,11 @@ void AliAnalysisTaskPIDqa::FillTPCTOFqa()
       if (h && TMath::Abs(nSigmaTOF)<3.) h->Fill(momTPC,nSigmaTPC);\r
 \r
       //TOF after TPC cut\r
-      h=(TH2*)fListQAtpctof->At(ispecie+AliPID::kSPECIES);\r
+      h=(TH2*)fListQAtpctof->At(ispecie+AliPID::kSPECIESC);\r
       if (h && TMath::Abs(nSigmaTPC)<3.) h->Fill(mom,nSigmaTOF);\r
 \r
       //EMCAL after TOF and TPC cut\r
-      h=(TH2*)fListQAtpctof->At(ispecie+2*AliPID::kSPECIES);\r
+      h=(TH2*)fListQAtpctof->At(ispecie+2*AliPID::kSPECIESC);\r
       if (h && TMath::Abs(nSigmaTOF)<3. && TMath::Abs(nSigmaTPC)<3. ){\r
 \r
        Int_t nMatchClus = track->GetEMCALcluster();\r
@@ -919,6 +945,65 @@ void AliAnalysisTaskPIDqa::FillTPCTOFqa()
   }\r
 }\r
 \r
+//_____________________________________________________________________________\r
+void AliAnalysisTaskPIDqa::FillQAinfo()\r
+{\r
+  //\r
+  // Fill the QA information\r
+  //\r
+\r
+\r
+  //TPC QA info\r
+  TObjArray *arrTPC=static_cast<TObjArray*>(fListQAinfo->At(0));\r
+  if (fPIDResponse && arrTPC){\r
+    AliTPCPIDResponse &tpcResp=fPIDResponse->GetTPCResponse();\r
+    // fill spline names\r
+    if (!arrTPC->UncheckedAt(0)){\r
+      \r
+      TObjArray *arrTPCsplineNames=new TObjArray(AliPID::kSPECIESC);\r
+      arrTPCsplineNames->SetOwner();\r
+      arrTPCsplineNames->SetName("TPC_spline_names");\r
+      arrTPC->AddAt(arrTPCsplineNames,0);\r
+      \r
+      for (Int_t iresp=0; iresp<AliPID::kSPECIESC; ++iresp){\r
+        const TObject *o=tpcResp.GetResponseFunction((AliPID::EParticleType)iresp);\r
+        if (!o) continue;\r
+        arrTPCsplineNames->Add(new TObjString(Form("%02d: %s",iresp, o->GetName())));\r
+      }\r
+    }\r
+\r
+    // tpc response config\r
+    if (!arrTPC->UncheckedAt(1)){\r
+      \r
+      TObjArray *arrTPCconfigInfo=new TObjArray;\r
+      arrTPCconfigInfo->SetOwner();\r
+      arrTPCconfigInfo->SetName("TPC_config_info");\r
+      arrTPC->AddAt(arrTPCconfigInfo,1);\r
+\r
+      TObjString *ostr=0x0;\r
+      ostr=new TObjString;\r
+      ostr->String().Form("Eta Corr map: %s", tpcResp.GetEtaCorrMap()?tpcResp.GetEtaCorrMap()->GetName():"none");\r
+      arrTPCconfigInfo->Add(ostr);\r
+\r
+      ostr=new TObjString;\r
+      ostr->String().Form("Sigma Par map: %s", tpcResp.GetSigmaPar1Map()?tpcResp.GetSigmaPar1Map()->GetName():"none");\r
+      arrTPCconfigInfo->Add(ostr);\r
+\r
+      ostr=new TObjString;\r
+      ostr->String().Form("MIP: %.2f", tpcResp.GetMIP());\r
+      arrTPCconfigInfo->Add(ostr);\r
+      \r
+      ostr=new TObjString;\r
+      ostr->String().Form("Res: Def %.3g (%.3g) : AllHigh %.3g (%.3g) : OROC high %.3g (%.3g)",\r
+                          tpcResp.GetRes0(AliTPCPIDResponse::kDefault), tpcResp.GetResN2(AliTPCPIDResponse::kDefault),\r
+                          tpcResp.GetRes0(AliTPCPIDResponse::kALLhigh), tpcResp.GetResN2(AliTPCPIDResponse::kALLhigh),\r
+                          tpcResp.GetRes0(AliTPCPIDResponse::kOROChigh), tpcResp.GetResN2(AliTPCPIDResponse::kOROChigh)\r
+                         );\r
+      arrTPCconfigInfo->Add(ostr);\r
+    }\r
+  }\r
+}\r
+\r
 //______________________________________________________________________________\r
 void AliAnalysisTaskPIDqa::SetupITSqa()\r
 {\r
@@ -929,7 +1014,7 @@ void AliAnalysisTaskPIDqa::SetupITSqa()
   TVectorD *vX=MakeLogBinning(200,.1,30);\r
   \r
   //ITS+TPC tracks\r
-  for (Int_t ispecie=0; ispecie<AliPID::kSPECIES; ++ispecie){\r
+  for (Int_t ispecie=0; ispecie<AliPID::kSPECIESC; ++ispecie){\r
     TH2F *hNsigmaP = new TH2F(Form("hNsigmaP_ITS_%s",AliPID::ParticleName(ispecie)),\r
                               Form("ITS n#sigma %s vs. p;p [GeV]; n#sigma",AliPID::ParticleName(ispecie)),\r
                               vX->GetNrows()-1,vX->GetMatrixArray(),\r
@@ -943,7 +1028,7 @@ void AliAnalysisTaskPIDqa::SetupITSqa()
   fListQAits->Add(hSig);\r
 \r
   //ITS Standalone tracks\r
-  for (Int_t ispecie=0; ispecie<AliPID::kSPECIES; ++ispecie){\r
+  for (Int_t ispecie=0; ispecie<AliPID::kSPECIESC; ++ispecie){\r
     TH2F *hNsigmaPSA = new TH2F(Form("hNsigmaP_ITSSA_%s",AliPID::ParticleName(ispecie)),\r
                                Form("ITS n#sigma %s vs. p;p [GeV]; n#sigma",AliPID::ParticleName(ispecie)),\r
                                vX->GetNrows()-1,vX->GetMatrixArray(),\r
@@ -957,7 +1042,7 @@ void AliAnalysisTaskPIDqa::SetupITSqa()
   fListQAitsSA->Add(hSigSA);\r
   \r
   //ITS Pure Standalone tracks\r
-  for (Int_t ispecie=0; ispecie<AliPID::kSPECIES; ++ispecie){\r
+  for (Int_t ispecie=0; ispecie<AliPID::kSPECIESC; ++ispecie){\r
     TH2F *hNsigmaPPureSA = new TH2F(Form("hNsigmaP_ITSPureSA_%s",AliPID::ParticleName(ispecie)),\r
                                    Form("ITS n#sigma %s vs. p;p [GeV]; n#sigma",AliPID::ParticleName(ispecie)),\r
                                    vX->GetNrows()-1,vX->GetMatrixArray(),\r
@@ -982,20 +1067,39 @@ void AliAnalysisTaskPIDqa::SetupTPCqa()
   \r
   TVectorD *vX=MakeLogBinning(200,.1,30);\r
   \r
-  for (Int_t ispecie=0; ispecie<AliPID::kSPECIES; ++ispecie){\r
+  for (Int_t ispecie=0; ispecie<AliPID::kSPECIESC; ++ispecie){\r
     TH2F *hNsigmaP = new TH2F(Form("hNsigmaP_TPC_%s",AliPID::ParticleName(ispecie)),\r
                               Form("TPC n#sigma %s vs. p;p [GeV]; n#sigma",AliPID::ParticleName(ispecie)),\r
                               vX->GetNrows()-1,vX->GetMatrixArray(),\r
                               200,-10,10);\r
     fListQAtpc->Add(hNsigmaP);\r
   }\r
+\r
+  // the "hybrid" scenario\r
+  for (Int_t ispecie=0; ispecie<AliPID::kSPECIESC; ++ispecie){\r
+    TH2F *hNsigmaP = new TH2F(Form("hNsigmaP_TPC_%s_Hybrid",AliPID::ParticleName(ispecie)),\r
+                              Form("TPC n#sigma %s vs. p (Hybrid gain scenario);p [GeV]; n#sigma",AliPID::ParticleName(ispecie)),\r
+                              vX->GetNrows()-1,vX->GetMatrixArray(),\r
+                              200,-10,10);\r
+    fListQAtpc->Add(hNsigmaP);\r
+  }\r
+   \r
+  // the "OROC high" scenario\r
+  for (Int_t ispecie=0; ispecie<AliPID::kSPECIESC; ++ispecie){\r
+    TH2F *hNsigmaP = new TH2F(Form("hNsigmaP_TPC_%s_OROChigh",AliPID::ParticleName(ispecie)),\r
+                              Form("TPC n#sigma %s vs. p (OROChigh gain scenario);p [GeV]; n#sigma",AliPID::ParticleName(ispecie)),\r
+                              vX->GetNrows()-1,vX->GetMatrixArray(),\r
+                              200,-10,10);\r
+    fListQAtpc->Add(hNsigmaP);\r
+  }\r
+  \r
   \r
   \r
   TH2F *hSig = new TH2F("hSigP_TPC",\r
                         "TPC signal vs. p;p [GeV]; TPC signal [arb. units]",\r
                         vX->GetNrows()-1,vX->GetMatrixArray(),\r
                         300,0,300);\r
-  fListQAtpc->Add(hSig);\r
+  fListQAtpc->Add(hSig); //3*AliPID::kSPECIESC\r
 \r
   delete vX;  \r
 }\r
@@ -1028,7 +1132,7 @@ void AliAnalysisTaskPIDqa::SetupTOFqa()
   \r
   TVectorD *vX=MakeLogBinning(200,.1,30);\r
 \r
-  for (Int_t ispecie=0; ispecie<AliPID::kSPECIES; ++ispecie){\r
+  for (Int_t ispecie=0; ispecie<AliPID::kSPECIESC; ++ispecie){\r
     TH2F *hNsigmaP = new TH2F(Form("hNsigmaP_TOF_%s",AliPID::ParticleName(ispecie)),\r
                               Form("TOF n#sigma %s vs. p;p [GeV]; n#sigma",AliPID::ParticleName(ispecie)),\r
                               vX->GetNrows()-1,vX->GetMatrixArray(),\r
@@ -1158,7 +1262,7 @@ void AliAnalysisTaskPIDqa::SetupTPCTOFqa()
   TVectorD *vX=MakeLogBinning(200,.1,30);\r
 \r
   //TPC signals after TOF cut\r
-  for (Int_t ispecie=0; ispecie<AliPID::kSPECIES; ++ispecie){\r
+  for (Int_t ispecie=0; ispecie<AliPID::kSPECIESC; ++ispecie){\r
     TH2F *hNsigmaP = new TH2F(Form("hNsigmaP_TPC_TOF_%s",AliPID::ParticleName(ispecie)),\r
                               Form("TPC n#sigma %s vs. p (after TOF 3#sigma cut);p_{TPC} [GeV]; n#sigma",AliPID::ParticleName(ispecie)),\r
                               vX->GetNrows()-1,vX->GetMatrixArray(),\r
@@ -1167,7 +1271,7 @@ void AliAnalysisTaskPIDqa::SetupTPCTOFqa()
   }\r
 \r
   //TOF signals after TPC cut\r
-  for (Int_t ispecie=0; ispecie<AliPID::kSPECIES; ++ispecie){\r
+  for (Int_t ispecie=0; ispecie<AliPID::kSPECIESC; ++ispecie){\r
     TH2F *hNsigmaP = new TH2F(Form("hNsigmaP_TOF_TPC_%s",AliPID::ParticleName(ispecie)),\r
                               Form("TOF n#sigma %s vs. p (after TPC n#sigma cut);p [GeV]; n#sigma",AliPID::ParticleName(ispecie)),\r
                               vX->GetNrows()-1,vX->GetMatrixArray(),\r
@@ -1198,6 +1302,17 @@ void AliAnalysisTaskPIDqa::SetupV0qa()
  \r
 }\r
 \r
+//_____________________________________________________________________________\r
+void AliAnalysisTaskPIDqa::SetupQAinfo(){\r
+  //\r
+  // Setup the info of QA objects\r
+  //\r
+\r
+  TObjArray *arr=new TObjArray;\r
+  arr->SetName("TPC_info");\r
+  fListQAinfo->Add(arr);\r
+}\r
+\r
 //______________________________________________________________________________\r
 TVectorD* AliAnalysisTaskPIDqa::MakeLogBinning(Int_t nbinsX, Double_t xmin, Double_t xmax)\r
 {\r