]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ANALYSIS/AliAnalysisTaskPIDqa.cxx
new data types for arrays of cluster ids used for verification of data compression
[u/mrichter/AliRoot.git] / ANALYSIS / AliAnalysisTaskPIDqa.cxx
index adf86a378520bf6a896690e9f13be7f559592b77..355e4edadb831733eb8a4196c9569e00dbc965ef 100644 (file)
@@ -122,11 +122,11 @@ void AliAnalysisTaskPIDqa::UserCreateOutputObjects()
 
   fListQAitsSA=new TList;
   fListQAitsSA->SetOwner();
-  fListQAitsSA->SetName("ITS");
+  fListQAitsSA->SetName("ITS_SA");
 
   fListQAitsPureSA=new TList;
   fListQAitsPureSA->SetOwner();
-  fListQAitsPureSA->SetName("ITS");
+  fListQAitsPureSA->SetName("ITS_PureSA");
 
   fListQAtpc=new TList;
   fListQAtpc->SetOwner();
@@ -291,19 +291,53 @@ void AliAnalysisTaskPIDqa::FillTRDqa()
   //
   // Fill PID qa histograms for the TRD
   //
+  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 + TRD out
+    if (!( (status & AliVTrack::kTPCrefit) == AliVTrack::kTPCrefit) ||
+        !( (status & AliVTrack::kITSrefit) == AliVTrack::kITSrefit) ||
+        !( (status & AliVTrack::kTPCpid  ) == AliVTrack::kTPCpid  ) ||
+        !( (status & AliVTrack::kTRDout  ) == AliVTrack::kTRDout  )) continue;
+    
+    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 likelihoods[AliPID::kSPECIES];
+    if(fPIDResponse->ComputeTRDProbability(track, AliPID::kSPECIES, likelihoods) != AliPIDResponse::kDetPidOk) continue;
+    Int_t ntracklets = 0;
+    Double_t momentum = -1.;
+    for(Int_t itl = 0; itl < 6; itl++)
+      if(track->GetTRDmomentum(itl) > 0.){
+        ntracklets++;
+        if(momentum < 0) momentum = track->GetTRDmomentum(itl);
+    } 
+    for(Int_t ispecie = 0; ispecie < AliPID::kSPECIES; ispecie++){
+      TH2F *hLike = (TH2F *)fListQAtrd->At(ntracklets*AliPID::kSPECIES+ispecie);
+      if (hLike) hLike->Fill(momentum,likelihoods[ispecie]);
+    }
+  }
 }
 
 //______________________________________________________________________________
 void AliAnalysisTaskPIDqa::FillTOFqa()
 {
-  //
-  // Fill PID qa histograms for the TOF
-  //
-
   AliVEvent *event=InputEvent();
 
 
+
   Int_t ntracks=event->GetNumberOfTracks();
   Int_t tracksAtTof = 0;
   for(Int_t itrack = 0; itrack < ntracks; itrack++){
@@ -351,6 +385,19 @@ void AliAnalysisTaskPIDqa::FillTOFqa()
     Double_t mask = (Double_t)fPIDResponse->GetTOFResponse().GetStartTimeMask(mom) + 0.5;
     ((TH1F*)fListQAtof->FindObject("hStartTimeMask_TOF"))->Fill(mask);
 
+    if (mom >= 1.0 && mom <= 2.0 ) {
+      Double_t nsigma= fPIDResponse->NumberOfSigmasTOF(track, (AliPID::EParticleType)AliPID::kKaon);
+      if (mask == 0) {
+       ((TH1F*)fListQAtof->FindObject("hNsigma_TOF_Kaon_T0-Fill"))->Fill(nsigma);
+      } else if (mask == 1) {
+       ((TH1F*)fListQAtof->FindObject("hNsigma_TOF_Kaon_T0-TOF"))->Fill(nsigma);
+      } else if ( (mask == 2) || (mask == 4) || (mask == 6) ) {
+       ((TH1F*)fListQAtof->FindObject("hNsigma_TOF_Kaon_T0-T0"))->Fill(nsigma);
+      } else {
+       ((TH1F*)fListQAtof->FindObject("hNsigma_TOF_Kaon_T0-Best"))->Fill(nsigma);
+      }
+    }
+
     Double_t res = (Double_t)fPIDResponse->GetTOFResponse().GetStartTimeRes(mom);
     ((TH1F*)fListQAtof->FindObject("hStartTimeRes_TOF"))->Fill(res);
 
@@ -374,6 +421,7 @@ void AliAnalysisTaskPIDqa::FillTOFqa()
 
 }
 
+
 //______________________________________________________________________________
 void AliAnalysisTaskPIDqa::FillEMCALqa()
 {
@@ -430,9 +478,6 @@ void AliAnalysisTaskPIDqa::FillEMCALqa()
          }
        }
       }
-      else{
-       Printf("status status = AliVTrack::kEMCALmatch, BUT no matched cluster!");
-      }
     }
   }
 }
@@ -609,7 +654,17 @@ void AliAnalysisTaskPIDqa::SetupTRDqa()
   //
   // Create the TRD qa objects
   //
-  
+  TVectorD *vX=MakeLogBinning(200,.1,30);
+  for(Int_t itl = 0; itl < 6; ++itl){
+    for(Int_t ispecie = 0; ispecie < AliPID::kSPECIES; ispecie++){
+      TH2F *hLikeP = new TH2F(Form("hLikeP_TRD_%dtls_%s", itl, AliPID::ParticleName(ispecie)),
+                              Form("TRD Likelihood to be %s %s for tracks having %d %s; p (GeV/c); TRD %s Likelihood", ispecie == 0 ? "an" : "a", AliPID::ParticleName(ispecie), itl+1, itl == 0 ? "tracklet" : "tracklets", AliPID::ParticleName(ispecie)),
+                              vX->GetNrows()-1, vX->GetMatrixArray(),
+                              100, 0., 1.);
+      fListQAtrd->Add(hLikeP);
+    }
+  }
+  delete vX;
 }
 
 //______________________________________________________________________________
@@ -627,9 +682,17 @@ void AliAnalysisTaskPIDqa::SetupTOFqa()
                               vX->GetNrows()-1,vX->GetMatrixArray(),
                               200,-10,10);
     fListQAtof->Add(hNsigmaP);
-    // to be added: t-texp without StartTime subtraction
   }
 
+  // for Kaons PID we differentiate on Time Zero
+  TH1F *hnSigT0Fill = new TH1F("hNsigma_TOF_Kaon_T0-Fill","TOF n#sigma (Kaon) T0-FILL [1-2. GeV/c]",200,-10,10);
+  fListQAtof->Add(hnSigT0Fill);
+  TH1F *hnSigT0T0 = new TH1F("hNsigma_TOF_Kaon_T0-T0","TOF n#sigma (Kaon) T0-T0 [1-2. GeV/c]",200,-10,10);
+  fListQAtof->Add(hnSigT0T0);
+  TH1F *hnSigT0TOF = new TH1F("hNsigma_TOF_Kaon_T0-TOF","TOF n#sigma (Kaon) T0-TOF [1.-2. GeV/c]",200,-10,10);
+  fListQAtof->Add(hnSigT0TOF);
+  TH1F *hnSigT0Best = new TH1F("hNsigma_TOF_Kaon_T0-Best","TOF n#sigma (Kaon) T0-Best [1-2. GeV/c]",200,-10,10);
+  fListQAtof->Add(hnSigT0Best);
 
   TH2F *hSig = new TH2F("hSigP_TOF",
                         "TOF signal vs. p;p [GeV]; TOF signal [arb. units]",
@@ -640,23 +703,23 @@ void AliAnalysisTaskPIDqa::SetupTOFqa()
   
   fListQAtof->Add(hSig);
 
-  TH1F *hStartTimeMask_TOF = new TH1F("hStartTimeMask_TOF","StartTime mask",8,0,8);
-  fListQAtof->Add(hStartTimeMask_TOF);
-  TH1F *hStartTimeRes_TOF = new TH1F("hStartTimeRes_TOF","StartTime resolution [ps]",100,0,500);
-  fListQAtof->Add(hStartTimeRes_TOF);
+  TH1F *hStartTimeMaskTOF = new TH1F("hStartTimeMask_TOF","StartTime mask",8,0,8);
+  fListQAtof->Add(hStartTimeMaskTOF);
+  TH1F *hStartTimeResTOF = new TH1F("hStartTimeRes_TOF","StartTime resolution [ps]",100,0,500);
+  fListQAtof->Add(hStartTimeResTOF);
 
-  TH1F *hnTracksAt_TOF = new TH1F("hnTracksAt_TOF","Matched tracks at TOF",20,0,20);
-  fListQAtof->Add(hnTracksAt_TOF);
+  TH1F *hnTracksAtTOF = new TH1F("hnTracksAt_TOF","Matched tracks at TOF",20,0,20);
+  fListQAtof->Add(hnTracksAtTOF);
   TH1F *hT0MakerEff = new TH1F("hT0MakerEff","Events with T0-TOF vs nTracks",20,0,20);
   fListQAtof->Add(hT0MakerEff);
 
   // this in principle should stay on a T0 PID QA, but are just the data prepared for TOF use
-  TH1F *hStartTimeA_T0 = new TH1F("hStartTimeA_T0","StartTime from T0A [ps]",1000,-1000,1000);
-  fListQAtof->Add(hStartTimeA_T0);
-  TH1F *hStartTimeC_T0 = new TH1F("hStartTimeC_T0","StartTime from T0C [ps]",1000,-1000,1000);
-  fListQAtof->Add(hStartTimeC_T0);
-  TH1F *hStartTimeAC_T0 = new TH1F("hStartTimeAC_T0","StartTime from T0AC [ps]",1000,-1000,1000);;
-  fListQAtof->Add(hStartTimeAC_T0);
+  TH1F *hStartTimeAT0 = new TH1F("hStartTimeA_T0","StartTime from T0A [ps]",1000,-1000,1000);
+  fListQAtof->Add(hStartTimeAT0);
+  TH1F *hStartTimeCT0 = new TH1F("hStartTimeC_T0","StartTime from T0C [ps]",1000,-1000,1000);
+  fListQAtof->Add(hStartTimeCT0);
+  TH1F *hStartTimeACT0 = new TH1F("hStartTimeAC_T0","StartTime from T0AC [ps]",1000,-1000,1000);;
+  fListQAtof->Add(hStartTimeACT0);
 }
 
 //______________________________________________________________________________