-
-}
-
-//______________________________________________________________________________
-void AliAnalysisTaskPIDResponse::SetITSParametrisation()
-{
- //
- // Set the ITS parametrisation
- //
-}
-
-//______________________________________________________________________________
-void AliAnalysisTaskPIDResponse::SetTPCPidResponseMaster()
-{
- //
- // Load the TPC pid response functions from the OADB
- //
-
- //reset the PID response functions
- delete fArrPidResponseMaster;
- fArrPidResponseMaster=0x0;
-
- TString fileName(Form("%s/COMMON/PID/data/TPCPIDResponse.root", AliAnalysisManager::GetOADBPath()));
-
- TFile f(fileName.Data());
- if (f.IsOpen() && !f.IsZombie()){
- fArrPidResponseMaster=dynamic_cast<TObjArray*>(f.Get("TPCPIDResponse"));
- f.Close();
- }
-
- if (!fArrPidResponseMaster){
- AliFatal("Could not retrieve the TPC pid response");
- return;
- }
- fArrPidResponseMaster->SetOwner();
-}
-
-//______________________________________________________________________________
-void AliAnalysisTaskPIDResponse::SetTPCParametrisation()
-{
- //
- // Change BB parametrisation for current run
- //
-
- if (fLHCperiod.IsNull()) {
- AliFatal("No period set, not changing parametrisation");
- return;
- }
-
- //
- // Set default parametrisations for data and MC
- //
-
- //data type
- TString datatype="DATA";
- //in case of mc fRecoPass is per default 1
- if (fIsMC) {
- datatype="MC";
- fRecoPass=1;
- }
-
- //
- //set the PID splines
- //
- TString period=fLHCperiod;
- if (fArrPidResponseMaster){
- TObject *grAll=0x0;
- //for MC don't use period information
-// if (fIsMC) period="[A-Z0-9]*";
- //for MC use MC period information
- if (fIsMC) period=fMCperiodTPC;
-//pattern for the default entry (valid for all particles)
- TPRegexp reg(Form("TSPLINE3_%s_([A-Z]*)_%s_PASS%d_%s_MEAN",datatype.Data(),period.Data(),fRecoPass,fBeamType.Data()));
-
- //loop over entries and filter them
- for (Int_t iresp=0; iresp<fArrPidResponseMaster->GetEntriesFast();++iresp){
- TObject *responseFunction=fArrPidResponseMaster->At(iresp);
- if (responseFunction==0x0) continue;
- TString responseName=responseFunction->GetName();
-
- if (!reg.MatchB(responseName)) continue;
-
- TObjArray *arr=reg.MatchS(responseName);
- TString particleName=arr->At(1)->GetName();
- delete arr;
- if (particleName.IsNull()) continue;
- if (particleName=="ALL") grAll=responseFunction;
- else {
- //find particle id
- for (Int_t ispec=0; ispec<AliPID::kSPECIES; ++ispec){
- TString particle=AliPID::ParticleName(ispec);
- particle.ToUpper();
- if ( particle == particleName ){
- //test if there is already a function set. If yes, cleanup
- TObject *old=const_cast<TObject*>(fPIDResponse->GetTPCResponse().GetResponseFunction((AliPID::EParticleType)ispec));
- if (old) delete old;
- fPIDResponse->GetTPCResponse().SetResponseFunction((AliPID::EParticleType)ispec,responseFunction);
- fPIDResponse->GetTPCResponse().SetUseDatabase(kTRUE);
- AliInfo(Form("Adding graph: %d - %s",ispec,responseFunction->GetName()));
- break;
- }
- }
- }
- }
-
- //set default response function to all particles which don't have a specific one
- if (grAll){
- for (Int_t ispec=0; ispec<AliPID::kSPECIES; ++ispec){
- if (!fPIDResponse->GetTPCResponse().GetResponseFunction((AliPID::EParticleType)ispec)){
- fPIDResponse->GetTPCResponse().SetResponseFunction((AliPID::EParticleType)ispec,grAll);
- AliInfo(Form("Adding graph: %d - %s",ispec,grAll->GetName()));
- }
- }
- }
- }
-
- //
- // Setup resolution parametrisation
- //
-
- //default
- fPIDResponse->GetTPCResponse().SetSigma(3.79301e-03, 2.21280e+04);
-
- if (fRun>=122195){
- fPIDResponse->GetTPCResponse().SetSigma(2.30176e-02, 5.60422e+02);
- }
-// if ( fBeamType == "PBPB" ){
-// Double_t corrSigma=GetMultiplicityCorrectionSigma(GetTPCMultiplicityBin());
-// fPIDResponse->GetTPCResponse().SetSigma(3.79301e-03*corrSigma, 2.21280e+04);
-// }
-
-}
-
-//______________________________________________________________________________
-void AliAnalysisTaskPIDResponse::FillITSqa()
-{
- AliVEvent *event=InputEvent();
-
- Int_t ntracks=event->GetNumberOfTracks();
- for(Int_t itrack = 0; itrack < ntracks; itrack++){
- AliVTrack *track=(AliVTrack*)event->GetTrack(itrack);
- ULong_t status=track->GetStatus();
- // not that nice. status bits not in virtual interface
- // ITS refit + ITS pid
- if (!( (status&0x0004==0x0004) && (status&0x0008==0x0008) )) return;
- Double_t mom=track->P();
-
- for (Int_t ispecie=0; ispecie<AliPID::kSPECIES; ++ispecie){
- TH2 *h=(TH2*)fListQAits->At(ispecie);
- if (!h) continue;
- Double_t nSigma=fPIDResponse->NumberOfSigmasITS(track, (AliPID::EParticleType)ispecie);
- h->Fill(mom,nSigma);
- }
-
- TH2 *h=(TH2*)fListQAits->At(AliPID::kSPECIES);
- if (h) {
- Double_t sig=track->GetITSsignal();
- h->Fill(mom,sig);
- }
-
- }
-}
-
-//______________________________________________________________________________
-void AliAnalysisTaskPIDResponse::FillTPCqa()
-{
- AliVEvent *event=InputEvent();
-
- Int_t ntracks=event->GetNumberOfTracks();
- for(Int_t itrack = 0; itrack < ntracks; itrack++){
- AliVTrack *track=(AliVTrack*)event->GetTrack(itrack);
-
- //
- //basic track cuts
- //
- ULong_t status=track->GetStatus();
- // not that nice. status bits not in virtual interface
- // TPC refit + ITS refit + TPC pid
- if (!(status&0x0040==0x0040) || !(status&0x0004==0x0004) || !(status&0x0080==0x0080) ) return;
-
- Float_t nCrossedRowsTPC = track->GetTPCClusterInfo(2,1);
- Float_t ratioCrossedRowsOverFindableClustersTPC = 1.0;
- if (track->GetTPCNclsF()>0) {
- ratioCrossedRowsOverFindableClustersTPC = nCrossedRowsTPC/track->GetTPCNclsF();
- }
-
- if ( nCrossedRowsTPC<70 || ratioCrossedRowsOverFindableClustersTPC<.8 ) continue;
-
- Double_t mom=track->GetTPCmomentum();
-
- for (Int_t ispecie=0; ispecie<AliPID::kSPECIES; ++ispecie){
- TH2 *h=(TH2*)fListQAtpc->At(ispecie);
- if (!h) continue;
- Double_t nSigma=fPIDResponse->NumberOfSigmasTPC(track, (AliPID::EParticleType)ispecie);
- h->Fill(mom,nSigma);
- }
-
- TH2 *h=(TH2*)fListQAtpc->At(AliPID::kSPECIES);
- if (h) {
- Double_t sig=track->GetTPCsignal();
- h->Fill(mom,sig);
- }
-
- TH2 *hPt=(TH2*)fListQAtpc->At(AliPID::kSPECIES+1);
- if (hPt) {
- Double_t sig=track->GetTPCsignal();
- hPt->Fill(sig);
- }
-
- TH2 *hMom=(TH2*)fListQAtpc->At(AliPID::kSPECIES+2);
- if (hMom) {
- Double_t sig=track->GetTPCmomentum();
- hMom->Fill(sig);
- }
-
- }
-}
-
-//______________________________________________________________________________
-void AliAnalysisTaskPIDResponse::FillTOFqa()
-{
- AliVEvent *event=InputEvent();
-
- Int_t ntracks=event->GetNumberOfTracks();
- for(Int_t itrack = 0; itrack < ntracks; itrack++){
- AliVTrack *track=(AliVTrack*)event->GetTrack(itrack);
-
- //
- //basic track cuts
- //
- ULong_t status=track->GetStatus();
- // not that nice. status bits not in virtual interface
- // TPC refit + ITS refit +
- // TOF out + TOFpid +
- // kTIME
- if (!(status&0x0040==0x0040) || !(status&0x0004==0x0004)
- || !(status&0x2000==0x2000) || !(status&0x8000==0x8000)
- || !(status&0x80000000==0x80000000) ) return;
-
- Float_t nCrossedRowsTPC = track->GetTPCClusterInfo(2,1);
- Float_t ratioCrossedRowsOverFindableClustersTPC = 1.0;
- if (track->GetTPCNclsF()>0) {
- ratioCrossedRowsOverFindableClustersTPC = nCrossedRowsTPC/track->GetTPCNclsF();
- }
-
- if ( nCrossedRowsTPC<70 || ratioCrossedRowsOverFindableClustersTPC<.8 ) continue;
-
-
- Double_t mom=track->P();
-
- for (Int_t ispecie=0; ispecie<AliPID::kSPECIES; ++ispecie){
- TH2 *h=(TH2*)fListQAtof->At(ispecie);
- if (!h) continue;
- Double_t nSigma=fPIDResponse->NumberOfSigmasTOF(track, (AliPID::EParticleType)ispecie);
- h->Fill(mom,nSigma);
- }
-
- TH2 *h=(TH2*)fListQAtof->At(AliPID::kSPECIES);
- if (h) {
- Double_t sig=track->GetTOFsignal();
- h->Fill(mom,sig);
- }
-
- }
-}
-
-//______________________________________________________________________________
-void AliAnalysisTaskPIDResponse::SetupTTSqa()
-{
- //
- // Create the ITS qa objects
- //
-
- TVectorD *vX=MakeLogBinning(200,.1,30);
-
- for (Int_t ispecie=0; ispecie<AliPID::kSPECIES; ++ispecie){
- TH2F *hNsigmaP = new TH2F(Form("hNsigmaP_ITS_%s",AliPID::ParticleName(ispecie)),
- Form("ITS n#sigma %s vs. p;p [GeV]; n#sigma",AliPID::ParticleName(ispecie)),
- vX->GetNrows()-1,vX->GetMatrixArray(),
- 200,-10,10);
- fListQAits->Add(hNsigmaP);
- }
-
-
- TH2F *hSig = new TH2F("hSigP_ITS",
- "ITS signal vs. p;p [GeV]; ITS signal [arb. units]",
- vX->GetNrows()-1,vX->GetMatrixArray(),
- 300,0,300);
-
- fListQAits->Add(hSig);
-
-}
-
-//______________________________________________________________________________
-void AliAnalysisTaskPIDResponse::SetupTPCqa()
-{
- //
- // Create the TPC qa objects
- //
-
- TVectorD *vX=MakeLogBinning(200,.1,30);
-
- for (Int_t ispecie=0; ispecie<AliPID::kSPECIES; ++ispecie){
- TH2F *hNsigmaP = new TH2F(Form("hNsigmaP_TPC_%s",AliPID::ParticleName(ispecie)),
- Form("TPC n#sigma %s vs. p;p [GeV]; n#sigma",AliPID::ParticleName(ispecie)),
- vX->GetNrows()-1,vX->GetMatrixArray(),
- 200,-10,10);
- fListQAtpc->Add(hNsigmaP);
- }
-
-
- TH2F *hSig = new TH2F("hSigP_TPC",
- "TPC signal vs. p;p [GeV]; TPC signal [arb. units]",
- vX->GetNrows()-1,vX->GetMatrixArray(),
- 300,0,300);
-
- fListQAtpc->Add(hSig);
-
- TH1F *hPt = new TH1F("hPt","Pt_TPC",100,0,300);
- fListQAtpc->Add(hPt);
-
- TH1F *hMom = new TH1F("hMom","Mom_TPC",100,0,20);
- fListQAtpc->Add(hMom);
-
-}
-
-//______________________________________________________________________________
-void AliAnalysisTaskPIDResponse::SetupTRDqa()
-{
- //
- // Create the TRD qa objects
- //
-
-}