]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
included all the non-friends
authorabercuci <abercuci@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 10 May 2010 08:28:25 +0000 (08:28 +0000)
committerabercuci <abercuci@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 10 May 2010 08:28:25 +0000 (08:28 +0000)
histos that are necessary to make the monitoring plots we were
generating with the TRDmon task (Ionut).

PWG1/TRD/AliTRDcheckESD.cxx
PWG1/TRD/AliTRDcheckESD.h

index 4a1be79f224a0792718ff5d3fad0b78f35f3331d..5192267c764c5ac17196419e8ecaa0a023cd349d 100644 (file)
 #include <TLegend.h>
 #include <TF1.h>
 #include <TH2I.h>
+#include <TH2F.h>
 #include <TH3S.h>
+#include <TH3F.h>
+#include <TProfile2D.h>
 #include <TGraphErrors.h>
 #include <TGraphAsymmErrors.h>
 #include <TFile.h>
@@ -72,6 +75,7 @@ const Float_t AliTRDcheckESD::fgkTrkDCAz   = 15.;
 const Int_t   AliTRDcheckESD::fgkNclTPC    = 100;
 const Float_t AliTRDcheckESD::fgkPt        = 0.2;
 const Float_t AliTRDcheckESD::fgkEta       = 0.9;
+const Float_t AliTRDcheckESD::fgkQs        = 0.002;
 
 //____________________________________________________________________
 AliTRDcheckESD::AliTRDcheckESD():
@@ -291,7 +295,20 @@ void AliTRDcheckESD::UserExec(Option_t *){
       }
     }
   }
-  TH2 *h(NULL);
+  TH1 *h(NULL);
+  
+  // fill event vertex histos
+  h = (TH1F*)fHistos->At(kTPCVertex);
+  h->Fill(fESD->GetPrimaryVertexTPC()->GetZv());
+  h = (TH1F*)fHistos->At(kEventVertex);
+  h->Fill(fESD->GetPrimaryVertex()->GetZv());
+  // fill the uncutted number of tracks
+  h = (TH1I*)fHistos->At(kNTracksAll);
+  h->Fill(fESD->GetNumberOfTracks());
+  
+  // counters for number of tracks in acceptance&DCA and for those with a minimum of TPC clusters
+  Int_t nTracksAcc=0;
+  Int_t nTracksTPC=0;
   
   AliESDtrack *esdTrack(NULL);
   for(Int_t itrk = 0; itrk < fESD->GetNumberOfTracks(); itrk++){
@@ -318,12 +335,16 @@ void AliTRDcheckESD::UserExec(Option_t *){
       AliDebug(2, Form("Reject Ev[%4d] Trk[%3d] Kink", fESD->GetEventNumberInFile(), itrk));
       selected = kFALSE;
     }
-    if(esdTrack->GetTPCNcls() < fgkNclTPC){ 
-      AliDebug(2, Form("Reject Ev[%4d] Trk[%3d] NclTPC[%d]", fESD->GetEventNumberInFile(), itrk, esdTrack->GetTPCNcls()));
-      selected = kFALSE;
-    }
+    
     Float_t par[2], cov[3];
     esdTrack->GetImpactParameters(par, cov);
+    if(selected && esdTrack->GetTPCNcls()>=10) {
+      // fill DCA histograms
+      h = (TH1F*)fHistos->At(kDCAxy); h->Fill(par[0]);
+      h = (TH1F*)fHistos->At(kDCAz); h->Fill(par[1]);
+      // fill pt distribution at this stage
+      h = (TH1F*)fHistos->At(kPt1); h->Fill(esdTrack->Pt());
+    }
     if(IsCollision()){ // cuts on DCA
       if(TMath::Abs(par[0]) > fgkTrkDCAxy){ 
         AliDebug(2, Form("Reject Ev[%4d] Trk[%3d] DCAxy[%f]", fESD->GetEventNumberInFile(), itrk, TMath::Abs(par[0])));
@@ -334,18 +355,119 @@ void AliTRDcheckESD::UserExec(Option_t *){
         selected = kFALSE;
       }
     }
+    if(selected) {
+      nTracksAcc++;   // number of tracks in acceptance and DCA cut
+      if(esdTrack->GetTPCNcls()>=10) {
+      // fill pt distribution at this stage
+      h = (TH1F*)fHistos->At(kPt2); h->Fill(esdTrack->Pt());
+      // TPC nclusters distribution
+        h = (TH1I*)fHistos->At(kNTPCCl); h->Fill(esdTrack->GetTPCNcls());
+        if(esdTrack->GetTPCNcls()>1.0) {
+          h = (TH1I*)fHistos->At(kNTPCCl2); h->Fill(esdTrack->GetTPCNcls());
+        }
+      }
+    }
+      
+    Int_t nClustersTPC = esdTrack->GetTPCNcls();
+    if(nClustersTPC < fgkNclTPC){ 
+      AliDebug(2, Form("Reject Ev[%4d] Trk[%3d] NclTPC[%d]", fESD->GetEventNumberInFile(), itrk, nClustersTPC));
+      selected = kFALSE;
+    }
     if(!selected) continue;
-
-    //Int_t nTPC(esdTrack->GetNcls(1));
+    
+    // number of TPC reference tracks
+    nTracksTPC++;
+    
     Int_t nTRD(esdTrack->GetNcls(2));
     Double_t pt(esdTrack->Pt());
-    //Double_t eta(esdTrack->Eta());
-    //Double_t phi(esdTrack->Phi());
     Double_t p[AliPID::kSPECIES]; esdTrack->GetTRDpid(p);
     // pid quality
-    //esdTrack->GetTRDntrackletsPID();
     Bool_t kBarrel = Bool_t(status & AliESDtrack::kTRDin);
+    Float_t theta=esdTrack->Theta();
+    Float_t phi=esdTrack->Phi();
+    Float_t eta=-TMath::Log(TMath::Tan(theta/2.));
 
+    TH3F *hhh;
+    // find position and momentum of the track at entrance in TRD
+    Double_t localCoord[3] = {0., 0., 0.};
+    Bool_t localCoordGood = esdTrack->GetXYZAt(298., fESD->GetMagneticField(), localCoord);
+    if(localCoordGood) {
+      hhh = (TH3F*)fHistos->At(kPropagXYvsP); hhh->Fill(localCoord[0], localCoord[1], esdTrack->GetP());
+      hhh = (TH3F*)fHistos->At(kPropagRZvsP); hhh->Fill(localCoord[2], TMath::Sqrt(localCoord[0]*localCoord[0]+localCoord[1]*localCoord[1]), esdTrack->GetP());
+    }
+    Double_t localMom[3] = {0., 0., 0.};
+    Bool_t localMomGood = esdTrack->GetPxPyPzAt(298., fESD->GetMagneticField(), localMom);
+    Double_t localPhi = (localMomGood ? TMath::ATan2(localMom[1], localMom[0]) : 0.0);
+    Double_t localSagitaPhi = (localCoordGood ? TMath::ATan2(localCoord[1], localCoord[0]) : 0.0);
+
+    // fill pt distribution at this stage
+    if(esdTrack->Charge()>0) {
+      h = (TH1F*)fHistos->At(kPt3pos); h->Fill(pt);
+      // fill eta-phi map of TPC positive ref. tracks
+      if(localCoordGood && localMomGood) {
+        hhh = (TH3F*)fHistos->At(kTPCRefTracksPos); hhh->Fill(eta, localSagitaPhi, pt);
+      }
+    }
+    if(esdTrack->Charge()<0) {
+      h = (TH1F*)fHistos->At(kPt3neg); h->Fill(pt);
+      // fill eta-phi map of TPC negative ref. tracks
+      if(localCoordGood && localMomGood) {
+        hhh = (TH3F*)fHistos->At(kTPCRefTracksNeg); hhh->Fill(eta, localSagitaPhi, pt);
+      }
+    }
+    // TPC dE/dx vs P
+    h = (TH2F*)fHistos->At(kTPCDedx); h->Fill(esdTrack->GetP(), esdTrack->GetTPCsignal());
+    // (eta,phi) distrib of TPC ref. tracks
+    h = (TH2F*)fHistos->At(kEtaPhi); h->Fill(eta, phi);
+    // (eta,nclustersTPC) distrib of TPC ref. tracks
+    h = (TH2F*)fHistos->At(kEtaNclsTPC); h->Fill(eta, nClustersTPC);
+    // (phi,nclustersTPC) distrib of TPC ref. tracks
+    h = (TH2F*)fHistos->At(kPhiNclsTPC); h->Fill(phi, nClustersTPC);
+        
+    Int_t nTRDtrkl = esdTrack->GetTRDntracklets();
+    // TRD reference tracks
+    if(nTRDtrkl>=1) {
+      // fill pt distribution at this stage
+      if(esdTrack->Charge()>0) {
+        h = (TH1F*)fHistos->At(kPt4pos); h->Fill(pt);
+        // fill eta-phi map of TRD positive ref. tracks
+        if(localCoordGood && localMomGood) {
+          hhh = (TH3F*)fHistos->At(kTRDRefTracksPos); hhh->Fill(eta, localSagitaPhi, pt);
+        }
+      }
+      if(esdTrack->Charge()<0) {
+        h = (TH1F*)fHistos->At(kPt4neg); h->Fill(pt);
+        // fill eta-phi map of TRD negative ref. tracks
+        if(localCoordGood && localMomGood) {
+          hhh = (TH3F*)fHistos->At(kTRDRefTracksNeg); hhh->Fill(eta, localSagitaPhi, pt);
+        }
+      }
+      TProfile2D *h2d;
+      // fill eta-phi map of TRD negative ref. tracks
+      if(localCoordGood && localMomGood) {
+        h2d = (TProfile2D*)fHistos->At(kTRDEtaPhiAvNtrkl); h2d->Fill(eta, localSagitaPhi, (Float_t)nTRDtrkl);
+        h2d = (TProfile2D*)fHistos->At(kTRDEtaDeltaPhiAvNtrkl); h2d->Fill(eta, localPhi-localSagitaPhi, (Float_t)nTRDtrkl);
+      }
+      // ntracklets/track vs P
+      h = (TH2F*)fHistos->At(kNTrackletsTRD); h->Fill(esdTrack->GetP(), nTRDtrkl);
+      // ntracklets/track vs P
+      h = (TH2F*)fHistos->At(kNClsTrackTRD); h->Fill(esdTrack->GetP(), esdTrack->GetTRDncls());
+      // (slicePH,sliceNo) distribution and Qtot from slices
+      for(Int_t iPlane=0; iPlane<6; iPlane++) {
+        Float_t Qtot=0;
+        for(Int_t iSlice=0; iSlice<8; iSlice++) {
+        if(esdTrack->GetTRDslice(iPlane, iSlice)>20.) {
+          h = (TH2F*)fHistos->At(kPHSlice); h->Fill(iSlice, esdTrack->GetTRDslice(iPlane, iSlice));
+          Qtot += esdTrack->GetTRDslice(iPlane, iSlice);
+        }
+        }
+        h = (TH2F*)fHistos->At(kQtotP); h->Fill(esdTrack->GetTRDmomentum(iPlane), fgkQs*Qtot);
+      }
+      // theta distribution
+      h = (TH1F*)fHistos->At(kTheta); h->Fill(theta);
+      h = (TH1F*)fHistos->At(kPhi); h->Fill(phi);
+    }  // end if nTRDtrkl>=1
+    
     // look at external track param
     const AliExternalTrackParam *op = esdTrack->GetOuterParam();
     const AliExternalTrackParam *ip = esdTrack->GetInnerParam();
@@ -403,7 +525,7 @@ void AliTRDcheckESD::UserExec(Option_t *){
         ptTRD=ip->Pt();
         kFOUND=kTRUE;
       }
-    }
+    }     // end if(HasMC())
 
     if(kFOUND){
       h = (TH2I*)fHistos->At(kTRDstat);
@@ -430,7 +552,14 @@ void AliTRDcheckESD::UserExec(Option_t *){
         h->Fill(ip->GetP()-pTRD, ily);
       }
     }
-  }  
+  }  // end loop over tracks
+  
+  // fill the number of tracks histograms
+  h = (TH1I*)fHistos->At(kNTracksAcc);
+  h->Fill(nTracksAcc);
+  h = (TH1I*)fHistos->At(kNTracksTPC);
+  h->Fill(nTracksTPC);
+  
   PostData(1, fHistos);
 }
 
@@ -504,6 +633,235 @@ TObjArray* AliTRDcheckESD::Histos()
   } else h->Reset();
   fHistos->AddAt(h, kPtRes);
 
+  // TPC event vertex distribution
+  if(!(h = (TH1F*)gROOT->FindObject("hTPCVertex"))){
+    h = new TH1F("hTPCVertex", "Event vertex Z coord. from TPC tracks", 100, -25., 25.);
+  } else h->Reset();
+  fHistos->AddAt(h, kTPCVertex);
+  
+  // Event vertex
+  if(!(h = (TH1F*)gROOT->FindObject("hEventVertex"))){
+    h = new TH1F("hEventVertex", "Event vertex Z coord.", 100, -25., 25.);
+  } else h->Reset();
+  fHistos->AddAt(h, kEventVertex);
+  
+  // Number of all tracks
+  if(!(h = (TH1I*)gROOT->FindObject("hNTracksAll"))){
+    h = new TH1I("hNTracksAll", "Number of tracks per event, event vertex cuts", 5000, 0, 5000);
+  } else h->Reset();
+  fHistos->AddAt(h, kNTracksAll);
+  
+  // Number of tracks in acceptance and DCA cut
+  if(!(h = (TH1I*)gROOT->FindObject("hNTracksAcc"))){
+    h = new TH1I("hNTracksAcc", Form("Number of tracks per event, |#eta|<%.1f, |DCAxy|<%.1f, |DCAz|<%.1f",
+                                    fgkEta, fgkTrkDCAxy, fgkTrkDCAz), 5000, 0, 5000);
+  } else h->Reset();
+  fHistos->AddAt(h, kNTracksAcc);
+  
+  // Number of tracks in TPC (Ncls>10)
+  if(!(h = (TH1I*)gROOT->FindObject("hNTracksTPC"))){
+    h = new TH1I("hNTracksTPC", Form("Number of tracks per event, |#eta|<%.1f, pt>%.1f, |DCAxy|<%.1f, |DCAz|<%.1f, TPC nclusters>%d",
+                                    fgkEta, fgkPt, fgkTrkDCAxy, fgkTrkDCAz, fgkNclTPC), 5000, 0, 5000);
+  } else h->Reset();
+  fHistos->AddAt(h, kNTracksTPC);
+  
+  // Distribution of DCA-xy
+  if(!(h = (TH1F*)gROOT->FindObject("hDCAxy"))){
+    h = new TH1F("hDCAxy", "Distribution of transverse DCA", 100, -100., 100.);
+  } else h->Reset();
+  fHistos->AddAt(h, kDCAxy);
+  
+  // Distribution of DCA-z
+  if(!(h = (TH1F*)gROOT->FindObject("hDCAz"))){
+    h = new TH1F("hDCAz", "Distribution of longitudinal DCA", 100, -100., 100.);
+  } else h->Reset();
+  fHistos->AddAt(h, kDCAz);
+  
+  Float_t binPtLimits[33] = {0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9,
+                            1.0, 1.1, 1.2, 1.3, 1.4, 
+                            1.6, 1.8, 2.0, 2.2, 2.4, 2.6, 2.8, 3.0,
+                            3.4, 3.8, 4.2, 4.6, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0};
+  // Pt distributions
+  if(!(h = (TH1F*)gROOT->FindObject("hPt1"))){
+    h = new TH1F("hPt1", Form("dN/dpt, |#eta|<%.1f and pt>%.1f", fgkEta, fgkPt), 32, binPtLimits);
+  } else h->Reset();
+  fHistos->AddAt(h, kPt1);
+  
+  if(!(h = (TH1F*)gROOT->FindObject("hPt2"))){
+    h = new TH1F("hPt2", Form("dN/dpt, |#eta|<%.1f and pt>%.1f, |DCAxy|<%.1f, |DCAz|<%.1f",
+                             fgkEta, fgkPt, fgkTrkDCAxy, fgkTrkDCAz), 32, binPtLimits);
+  } else h->Reset();
+  fHistos->AddAt(h, kPt2);
+  
+  if(!(h = (TH1F*)gROOT->FindObject("hPt3pos"))){
+    h = new TH1F("hPt3pos", Form("dN/dpt (positives), |#eta|<%.1f and pt>%.1f, |DCAxy|<%.1f, |DCAz|<%.1f, TPC nclusters>%d",
+                fgkEta, fgkPt, fgkTrkDCAxy, fgkTrkDCAz, fgkNclTPC), 32, binPtLimits);
+  } else h->Reset();
+  fHistos->AddAt(h, kPt3pos);
+  
+  if(!(h = (TH1F*)gROOT->FindObject("hPt3neg"))){
+    h = new TH1F("hPt3neg", Form("dN/dpt (negatives), |#eta|<%.1f and pt>%.1f, |DCAxy|<%.1f, |DCAz|<%.1f, TPC nclusters>%d",
+                fgkEta, fgkPt, fgkTrkDCAxy, fgkTrkDCAz, fgkNclTPC), 32, binPtLimits);
+  } else h->Reset();
+  fHistos->AddAt(h, kPt3neg);
+  
+  if(!(h = (TH1F*)gROOT->FindObject("hPt4pos"))){
+    h = new TH1F("hPt4pos", Form("dN/dpt (positives), |#eta|<%.1f and pt>%.1f, |DCAxy|<%.1f, |DCAz|<%.1f, TPC nclusters>%d, nTRDtracklets#geq 1",
+                fgkEta, fgkPt, fgkTrkDCAxy, fgkTrkDCAz, fgkNclTPC), 32, binPtLimits);
+  } else h->Reset();
+  fHistos->AddAt(h, kPt4pos);
+  
+  if(!(h = (TH1F*)gROOT->FindObject("hPt4neg"))){
+    h = new TH1F("hPt4pos", Form("dN/dpt (negatives), |#eta|<%.1f and pt>%.1f, |DCAxy|<%.1f, |DCAz|<%.1f, TPC nclusters>%d, nTRDtracklets#geq 1",
+                fgkEta, fgkPt, fgkTrkDCAxy, fgkTrkDCAz, fgkNclTPC), 32, binPtLimits);
+  } else h->Reset();
+  fHistos->AddAt(h, kPt4neg);
+  
+  // theta distribution of TRD tracks
+  if(!(h = (TH1F*)gROOT->FindObject("hTheta"))){
+    h = new TH1F("hTheta", Form("dN/d#theta, |#eta|<%.1f and pt>%.1f, |DCAxy|<%.1f, |DCAz|<%.1f, TPC nclusters>%d, nTRDtracklets#geq 1",
+                fgkEta, fgkPt, fgkTrkDCAxy, fgkTrkDCAz, fgkNclTPC), 220,.5,2.7);
+  } else h->Reset();
+  fHistos->AddAt(h, kTheta);
+  
+  // phi distribution of TRD tracks
+  if(!(h = (TH1F*)gROOT->FindObject("hPhi"))){
+    h = new TH1F("hPhi", Form("dN/d#varphi, |#eta|<%.1f and pt>%.1f, |DCAxy|<%.1f, |DCAz|<%.1f, TPC nclusters>%d, nTRDtracklets#geq 1",
+                fgkEta, fgkPt, fgkTrkDCAxy, fgkTrkDCAz, fgkNclTPC), 157,0,6.28);
+  } else h->Reset();
+  fHistos->AddAt(h, kPhi);
+  
+  // TPC cluster distribution
+  if(!(h = (TH1F*)gROOT->FindObject("hNTPCCl"))){
+    h = new TH1I("hNTPCCl", Form("Number of TPC clusters/track, |#eta|<%.1f and pt>%.1f, |DCAxy|<%.1f, |DCAz|<%.1f",
+                fgkEta, fgkPt, fgkTrkDCAxy, fgkTrkDCAz), 160, 0, 160);
+  } else h->Reset();
+  fHistos->AddAt(h, kNTPCCl);
+  
+  if(!(h = (TH1I*)gROOT->FindObject("hNTPCCl2"))){
+    h = new TH1F("hNTPCCl2", Form("Number of TPC clusters/track, |#eta|<%.1f and pt>%.1f, |DCAxy|<%.1f, |DCAz|<%.1f, pt>1.0 GeV/c",
+                fgkEta, fgkPt, fgkTrkDCAxy, fgkTrkDCAz), 160, 0, 160);
+  } else h->Reset();
+  fHistos->AddAt(h, kNTPCCl2);
+  
+  // dE/dx vs P for TPC reference tracks
+  if(!(h = (TH2F*)gROOT->FindObject("hTPCDedx"))){
+    h = new TH2F("hTPCDedx", Form("TPC dE/dx vs P, |#eta|<%.1f and pt>%.1f, |DCAxy|<%.1f, |DCAz|<%.1f, TPC nclusters>%d",
+                fgkEta, fgkPt, fgkTrkDCAxy, fgkTrkDCAz, fgkNclTPC), 100, 0.1,10.1, 120, 0,600.);
+  } else h->Reset();
+  fHistos->AddAt(h, kTPCDedx);
+  
+  // eta,phi distribution of TPC reference tracks
+  if(!(h = (TH2F*)gROOT->FindObject("hEtaPhi"))){
+    h = new TH2F("hEtaPhi", Form("TPC (#eta,#varphi), |#eta|<%.1f and pt>%.1f, |DCAxy|<%.1f, |DCAz|<%.1f, TPC nclusters>%d",
+                fgkEta, fgkPt, fgkTrkDCAxy, fgkTrkDCAz, fgkNclTPC), 50, -1, 1, 157, 0, 6.28);
+  } else h->Reset();
+  fHistos->AddAt(h, kEtaPhi);
+  
+  // Nclusters vs eta distribution for TPC reference tracks
+  if(!(h = (TH2F*)gROOT->FindObject("hEtaNclsTPC"))){
+    h = new TH2F("hEtaNclsTPC", Form("TPC Nclusters vs. #eta, |#eta|<%.1f and pt>%.1f, |DCAxy|<%.1f, |DCAz|<%.1f, TPC nclusters>%d",
+                fgkEta, fgkPt, fgkTrkDCAxy, fgkTrkDCAz, fgkNclTPC), 50, -1, 1, 160, 0, 160.);
+  } else h->Reset();
+  fHistos->AddAt(h, kEtaNclsTPC);
+  
+  // Nclusters vs phi distribution for TPC reference tracks
+  if(!(h = (TH2F*)gROOT->FindObject("hPhiNclsTPC"))){
+    h = new TH2F("hPhiNclsTPC", Form("TPC Nclusters vs. #varphi, |#eta|<%.1f and pt>%.1f, |DCAxy|<%.1f, |DCAz|<%.1f, TPC nclusters>%d",
+                fgkEta, fgkPt, fgkTrkDCAxy, fgkTrkDCAz, fgkNclTPC), 157, 0, 6.28, 160, 0, 160.);
+  } else h->Reset();
+  fHistos->AddAt(h, kPhiNclsTPC);
+  
+  // Ntracklets/track vs P for TRD reference tracks
+  Double_t binsP[19] = {0.0, 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.7, 2.0,
+                       2.5, 3.0, 3.5, 4.0, 5.0, 6.0, 7.0, 9.0, 12.0};
+  if(!(h = (TH2F*)gROOT->FindObject("hNTrackletsTRD"))){
+    h = new TH2F("hNTrackletsTRD", Form("TRD Ntracklets/track vs. P, |#eta|<%.1f and pt>%.1f, |DCAxy|<%.1f, |DCAz|<%.1f, TPC nclusters>%d",
+                fgkEta, fgkPt, fgkTrkDCAxy, fgkTrkDCAz, fgkNclTPC), 18, binsP, 7, -0.5, 6.5);
+  } else h->Reset();
+  fHistos->AddAt(h, kNTrackletsTRD);
+  
+  // Nclusters/track vs P for TRD reference tracks
+  if(!(h = (TH2F*)gROOT->FindObject("hNClsTrackTRD"))){
+    h = new TH2F("hNClsTrackTRD", Form("TRD Nclusters/track vs. P, |#eta|<%.1f and pt>%.1f, |DCAxy|<%.1f, |DCAz|<%.1f, TPC nclusters>%d",
+                fgkEta, fgkPt, fgkTrkDCAxy, fgkTrkDCAz, fgkNclTPC), 18, binsP, 180, 0., 180.);
+  } else h->Reset();
+  fHistos->AddAt(h, kNClsTrackTRD);
+  
+  // <PH> vs slice number for TRD reference tracklets
+  if(!(h = (TH2F*)gROOT->FindObject("hPHSlice"))){
+    h = new TH2F("hPHSlice", Form("<PH> vs sliceNo, |#eta|<%.1f and pt>%.1f, |DCAxy|<%.1f, |DCAz|<%.1f, TPC nclusters>%d",
+                fgkEta, fgkPt, fgkTrkDCAxy, fgkTrkDCAz, fgkNclTPC), 8, -0.5, 7.5, 2000, 0., 2000.);
+  } else h->Reset();
+  fHistos->AddAt(h, kPHSlice);
+  
+  // Qtot vs P for TRD reference tracklets
+  if(!(h = (TH2F*)gROOT->FindObject("hQtotP"))){
+    h = new TH2F("hQtotP", Form("Qtot(from slices) vs P, |#eta|<%.1f and pt>%.1f, |DCAxy|<%.1f, |DCAz|<%.1f, TPC nclusters>%d",
+                fgkEta, fgkPt, fgkTrkDCAxy, fgkTrkDCAz, fgkNclTPC), 18, binsP, 400, 0., 200);
+  } else h->Reset();
+  fHistos->AddAt(h, kQtotP);
+  
+  // (X,Y,momentum) distribution after AliESDtrack::PropagateTo(r=300.)
+  if(!(h = (TH3F*)gROOT->FindObject("hPropagXYvsP"))){
+    h = new TH3F("hPropagXYvsP", Form("(x,y) vs P after AliESDtrack::PropagateTo(r=300.), |#eta|<%.1f and pt>%.1f, |DCAxy|<%.1f, |DCAz|<%.1f, TPC nclusters>%d",
+                fgkEta, fgkPt, fgkTrkDCAxy, fgkTrkDCAz, fgkNclTPC), 100,-500,500, 100,-500,500, 10, 0.,10.);
+  } else h->Reset();
+  fHistos->AddAt(h, kPropagXYvsP);
+  
+  // (R,Z,momentum) distribution after AliESDtrack::PropagateTo(r=300.)
+  if(!(h = (TH3F*)gROOT->FindObject("hPropagRZvsP"))){
+    h = new TH3F("hPropagRZvsP", Form("(r,z) vs P after AliESDtrack::PropagateTo(r=300.), |#eta|<%.1f and pt>%.1f, |DCAxy|<%.1f, |DCAz|<%.1f, TPC nclusters>%d",
+                fgkEta, fgkPt, fgkTrkDCAxy, fgkTrkDCAz, fgkNclTPC), 100,-350., 350., 100,0.,500., 10, 0.,10.);
+  } else h->Reset();
+  fHistos->AddAt(h, kPropagRZvsP);
+  
+  Float_t etaBinLimits[51];    
+  for(Int_t i=0; i<51; i++) etaBinLimits[i] = -1.0 + i*2.0/50.;
+  Float_t phiBinLimits[151];
+  for(Int_t i=0; i<151; i++) phiBinLimits[i] = -1.1*TMath::Pi() + i*2.2*TMath::Pi()/150.;
+  // (eta,detector phi,P) distribution of reference TPC positive tracks
+  if(!(h = (TH3F*)gROOT->FindObject("hTPCRefTracksPos"))){
+    h = new TH3F("hTPCRefTracksPos", Form("(#eta,detector #varphi,p) for TPC positive reference tracks, |#eta|<%.1f and pt>%.1f, |DCAxy|<%.1f, |DCAz|<%.1f, TPC nclusters>%d",
+                fgkEta, fgkPt, fgkTrkDCAxy, fgkTrkDCAz, fgkNclTPC), 50, etaBinLimits, 150, phiBinLimits, 32, binPtLimits);
+  } else h->Reset();
+  fHistos->AddAt(h, kTPCRefTracksPos);
+  
+  // (eta,detector phi,P) distribution of reference TPC negative tracks
+  if(!(h = (TH3F*)gROOT->FindObject("hTPCRefTracksNeg"))){
+    h = new TH3F("hTPCRefTracksNeg", Form("(#eta,detector #varphi,p) for TPC negative reference tracks, |#eta|<%.1f and pt>%.1f, |DCAxy|<%.1f, |DCAz|<%.1f, TPC nclusters>%d",
+                fgkEta, fgkPt, fgkTrkDCAxy, fgkTrkDCAz, fgkNclTPC), 50, etaBinLimits, 150, phiBinLimits, 32, binPtLimits);
+  } else h->Reset();
+  fHistos->AddAt(h, kTPCRefTracksNeg);
+  
+  // (eta,detector phi,P) distribution of reference TRD positive tracks
+  if(!(h = (TH3F*)gROOT->FindObject("hTRDRefTracksPos"))){
+    h = new TH3F("hTRDRefTracksPos", Form("(#eta,detector #varphi,p) for TRD positive reference tracks, |#eta|<%.1f and pt>%.1f, |DCAxy|<%.1f, |DCAz|<%.1f, TPC nclusters>%d, nTRDtracklets#geq1",
+                fgkEta, fgkPt, fgkTrkDCAxy, fgkTrkDCAz, fgkNclTPC), 50, etaBinLimits, 150, phiBinLimits, 32, binPtLimits);
+  } else h->Reset();
+  fHistos->AddAt(h, kTRDRefTracksPos);
+  
+  // (eta,detector phi,P) distribution of reference TRD negative tracks
+  if(!(h = (TH3F*)gROOT->FindObject("hTRDRefTracksNeg"))){
+    h = new TH3F("hTRDRefTracksNeg", Form("(#eta,detector #varphi,p) for TRD negative reference tracks, |#eta|<%.1f and pt>%.1f, |DCAxy|<%.1f, |DCAz|<%.1f, TPC nclusters>%d, nTRDtracklets#geq1",
+                fgkEta, fgkPt, fgkTrkDCAxy, fgkTrkDCAz, fgkNclTPC), 50, etaBinLimits, 150, phiBinLimits, 32, binPtLimits);
+  } else h->Reset();
+  fHistos->AddAt(h, kTRDRefTracksNeg);
+  
+  // (eta,detector phi) profile of average number of TRD tracklets/track
+  if(!(h = (TProfile2D*)gROOT->FindObject("hTRDEtaPhiAvNtrkl"))){
+    h = new TProfile2D("hTRDEtaPhiAvNtrkl", Form("<Ntracklets/track> vs (#eta,detector #varphi) for TRD reference tracks, |#eta|<%.1f and pt>%.1f, |DCAxy|<%.1f, |DCAz|<%.1f, TPC nclusters>%d, nTRDtracklets#geq1",
+                fgkEta, fgkPt, fgkTrkDCAxy, fgkTrkDCAz, fgkNclTPC), 50, -1.0, 1.0, 150, -1.1*TMath::Pi(), 1.1*TMath::Pi());
+  } else h->Reset();
+  fHistos->AddAt(h, kTRDEtaPhiAvNtrkl);
+
+  // (eta,delta phi) profile of average number of TRD tracklets/track
+  if(!(h = (TProfile2D*)gROOT->FindObject("hTRDEtaDeltaPhiAvNtrkl"))){
+    h = new TProfile2D("hTRDEtaDeltaPhiAvNtrkl", Form("<Ntracklets/track> vs (#eta, #Delta#varphi) for TRD reference tracks, |#eta|<%.1f and pt>%.1f, |DCAxy|<%.1f, |DCAz|<%.1f, TPC nclusters>%d, nTRDtracklets#geq1",
+                fgkEta, fgkPt, fgkTrkDCAxy, fgkTrkDCAz, fgkNclTPC), 50, -1.0, 1.0, 50, -0.4*TMath::Pi(), 0.4*TMath::Pi());
+  } else h->Reset();
+  fHistos->AddAt(h, kTRDEtaDeltaPhiAvNtrkl);
+  
   return fHistos;
 }
 
index 8eeb2c2d80cc7c8eec35c2be8073df8c8525b113..97ddf51cd784f4382d195f28ac24eef7514a9fd2 100644 (file)
@@ -32,12 +32,46 @@ public:
     ,kCollision = BIT(1)  // 
   };
   enum ETRDcheckESDhistos {
-    kNCl  = 0    // number of clusters per track
-   ,kTRDstat     // TRD tracks status
-   ,kTRDmom      // TRD track momentum
-   ,kPtRes       // Pt resolution @ vertex for TRD
-   ,kNhistos = 4 // number of histograms
-   ,kNrefs   = 4 // number of reference plots
+    kNCl = 0                // number of clusters per track
+   ,kTRDstat                // TRD tracks status
+   ,kTRDmom                 // TRD track momentum
+   ,kPtRes                  // Pt resolution @ vertex for TRD
+   ,kTPCVertex              // event vertex from TPC
+   ,kEventVertex            // event vertex
+   ,kNTracksAll             // ntracks - all
+   ,kNTracksAcc             // ntracks - inside acc. and DCA cut
+   ,kNTracksTPC             // additional cut on number of TPC clusters
+   ,kDCAxy                  // transverse DCA 
+   ,kDCAz                   // z - DCA
+   ,kPt1                    // Pt distribution, eta and ptmin cuts
+   ,kPt2                    // Pt distribution, cuts from kPt1 and DCA cuts
+   ,kPt3pos                 // Pt distribution, cuts from kPt2 and cut on TPC clusters for positives (>100)
+   ,kPt3neg                 // Pt distribution, cuts from kPt2 and cut on TPC clusters for negatives (>100)
+   ,kPt4pos                 // Pt distribution, cuts from kPt3pos and at least one TRD tracklet
+   ,kPt4neg                 // Pt distribution, cuts from kPt3neg and at least one TRD tracklet
+   ,kTheta                  // distribution of theta for tracks passing the cuts from kPt4pos and kPt4neg
+   ,kPhi                    // distribution of phi for tracks passing the cuts from kPt4pos and kPt4neg
+   ,kNTPCCl                 // number of TPC clusters, cuts from kPt2
+   ,kNTPCCl2                // number of TPC clusters, cuts from kPt2 + pt>1 GeV/c
+   ,kTPCDedx                // TPC dE/dx, cuts from kPt3pos or kPt3neg
+   ,kEtaPhi                 // (eta,phi) distrib. for tracks after the cuts from kPt3pos or kPt3neg
+   ,kEtaNclsTPC             // (TPC_Ncls,eta) distrib. for tracks after the cuts from kPt3pos or kPt3neg
+   ,kPhiNclsTPC             // (TPC_Ncls,phi) distrib. for tracks after the cuts from kPt3pos or kPt3neg
+   ,kNTrackletsTRD          // (TRD tracklets per track, P) distribution, after cuts from kPt4pos or kPt4neg
+   ,kNClsTrackTRD           // (TRD clusters per track, P) distribution, after cuts from kPt4pos or kPt4neg
+   ,kPHSlice                // (slicePH,sliceNo) distribution, after cuts from kPt4pos or kPt4neg
+   ,kQtotP                  // (total Q from slices, momentum) distribution, after cuts from kPt4pos or kPt4neg
+   ,kPropagXYvsP            // (X,Y,momentum) distribution after AliESDtrack::PropagateTo(r=300.)
+   ,kPropagRZvsP            // (R,Z,momentum) distribution after AliESDtrack::PropagateTo(r=300.)
+   ,kTPCRefTracksPos        // (eta,detector phi,P) distribution of reference TPC positive tracks (fulfill cuts from kPt3pos)
+   ,kTPCRefTracksNeg        // (eta,detector phi,P) distribution of reference TPC negative tracks (fulfill cuts from kPt3neg)
+   ,kTRDRefTracksPos        // (eta,detector phi,P) distribution of reference TRD positive tracks (fulfill cuts from kPt4pos)
+   ,kTRDRefTracksNeg        // (eta,detector phi,P) distribution of reference TRD negative tracks (fulfill cuts from kPt4neg)
+   ,kTRDEtaPhiAvNtrkl       // (eta, detector phi) profile of average number of tracklets
+   ,kTRDEtaDeltaPhiAvNtrkl  // (eta, delta-phi) profile of average number of tracklets
+                            // delta-phi is the angle made by the track with the normal to the chamber entrance plane
+   ,kNhistos = 37 // number of histograms
+   ,kNrefs   = 37 // number of reference plots
   };
   enum ETRDcheckESDbits {
     kTPCout = 1 // track left TPC
@@ -92,6 +126,8 @@ private:
   static const Int_t   fgkNclTPC;   // N clusters TPC
   static const Float_t fgkPt;       // min. pt
   static const Float_t fgkEta;      // eta range
+  
+  static const Float_t fgkQs;      // scale for the total charge
 
   ClassDef(AliTRDcheckESD, 5)          // user oriented TRD analysis based on ESD-MC data
 };