fListQAhmpid(0x0),\r
fListQAtofhmpid(0x0),\r
fListQAtpctof(0x0),\r
-fListQAV0(0x0)\r
+fListQAV0(0x0),\r
+fListQAinfo(0x0)\r
{\r
//\r
// Dummy constructor\r
fListQAhmpid(0x0),\r
fListQAtofhmpid(0x0),\r
fListQAtpctof(0x0),\r
-fListQAV0(0x0)\r
+fListQAV0(0x0),\r
+fListQAinfo(0x0)\r
{\r
//\r
// Default constructor\r
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
fListQA->Add(fListQAtpctof);\r
fListQA->Add(fListQAtofhmpid);\r
fListQA->Add(fListQAV0);\r
+ fListQA->Add(fListQAinfo);\r
\r
SetupITSqa();\r
SetupTPCqa();\r
SetupTPCTOFqa();\r
SetupTOFHMPIDqa();\r
SetupV0qa();\r
+ SetupQAinfo();\r
\r
PostData(1,fListQA);\r
}\r
// Clear the V0 PID arrays\r
ClearV0PIDlist();\r
\r
-\r
+ //QA info\r
+ FillQAinfo();\r
\r
PostData(1,fListQA);\r
}\r
}\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
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
//\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
\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
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
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
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
}\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
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
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
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
\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
\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
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
}\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
\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