]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG1/AliAnaFwdDetsQA.cxx
remove data member with name of currently analyzed file, it causes problems with...
[u/mrichter/AliRoot.git] / PWG1 / AliAnaFwdDetsQA.cxx
index e7a0933a49674fdd9d3869f50dc623c3b938a788..0c17c1591f080f832edb0f05b9e44817e10b50e9 100644 (file)
@@ -29,6 +29,8 @@
 #include "TCanvas.h"
 #include "TVector3.h"
 #include "TParticle.h"
+#include "AliVParticle.h"
+#include "AliMCParticle.h"
 #include "AliESDEvent.h"
 #include "AliESDv0.h"
 #include "AliESDcascade.h"
@@ -51,8 +53,10 @@ AliAnalysisTaskSE("AliAnaFwdDetsQA"),
   fT0vtxRec(0),
   fT0vtxRecGen(0),
   fT0time(0),
+  fT0time2(0),
   fT0mult(0),
   fT0vtxRes(0),
+  fT0ampl(0),
   fV0a(0),
   fV0c(0),
   fV0multA(0),
@@ -60,7 +64,8 @@ AliAnalysisTaskSE("AliAnaFwdDetsQA"),
   fV0multAcorr(0),
   fV0multCcorr(0),
   fV0Acorr(0),
-  fV0Ccorr(0)
+  fV0Ccorr(0),
+  fV0ampl(0)
 {
   // Default constructor
   // Define input and output slots here
@@ -76,8 +81,10 @@ AliAnalysisTaskSE(name),
   fT0vtxRec(0),
   fT0vtxRecGen(0),
   fT0time(0),
+  fT0time2(0),
   fT0mult(0),
   fT0vtxRes(0),
+  fT0ampl(0),
   fV0a(0),
   fV0c(0),
   fV0multA(0),
@@ -85,12 +92,13 @@ AliAnalysisTaskSE(name),
   fV0multAcorr(0),
   fV0multCcorr(0),
   fV0Acorr(0),
-  fV0Ccorr(0)
+  fV0Ccorr(0),
+  fV0ampl(0)
 {
   // Constructor
-  AliInfo("Constructor AliAnaFwdDetsQA");
   // Define input and output slots here
   // Input slot #0 works with a TChain
+  AliInfo("Constructor AliAnaFwdDetsQA");
   DefineInput(0, TChain::Class());
   // Output slot #1 TList
   DefineOutput(1, TList::Class());
@@ -100,7 +108,8 @@ TH1F * AliAnaFwdDetsQA::CreateHisto(const char* name, const char* title,Int_t nB
                                            Double_t xMin, Double_t xMax,
                                            const char* xLabel, const char* yLabel)
 {
-  // create a histogram
+  // helper method which can be used
+  // in order to create a histogram
   TH1F* result = new TH1F(name, title, nBins, xMin, xMax);
   result->SetOption("E");
   if (xLabel) result->GetXaxis()->SetTitle(xLabel);
@@ -111,7 +120,8 @@ TH1F * AliAnaFwdDetsQA::CreateHisto(const char* name, const char* title,Int_t nB
 
 TH1F *AliAnaFwdDetsQA::CreateEffHisto(const TH1F* hGen, const TH1F* hRec)
 {
-  // create an efficiency histogram
+  // helper method which can be used
+  // in order create an efficiency histogram
   Int_t nBins = hGen->GetNbinsX();
   TH1F* hEff = (TH1F*) hGen->Clone("hEff");
   hEff->SetTitle("");
@@ -127,7 +137,7 @@ TH1F *AliAnaFwdDetsQA::CreateEffHisto(const TH1F* hGen, const TH1F* hRec)
       Double_t eff = nRecEff/nGenEff;
       hEff->SetBinContent(iBin, 100. * eff);
       Double_t error = sqrt(eff*(1.-eff) / nGenEff);
-      if (error == 0) error = 0.0001;
+      if (error < 1e-12) error = 0.0001;
       hEff->SetBinError(iBin, 100. * error);                   
     }
     else {
@@ -141,7 +151,8 @@ TH1F *AliAnaFwdDetsQA::CreateEffHisto(const TH1F* hGen, const TH1F* hRec)
 
 Bool_t AliAnaFwdDetsQA::FitHisto(TH1* histo, Double_t& res, Double_t& resError)
 {
-  // fit a gaussian to a histogram
+  // fit a gaussian to
+  // a histogram
   static TF1* fitFunc = new TF1("fitFunc", "gaus");
   fitFunc->SetLineWidth(2);
   fitFunc->SetFillStyle(0);
@@ -164,14 +175,16 @@ Bool_t AliAnaFwdDetsQA::FitHisto(TH1* histo, Double_t& res, Double_t& resError)
 void AliAnaFwdDetsQA::UserCreateOutputObjects()
 {
   // Create histograms
-  AliInfo("AliAnaFwdDetsQA::UserCreateOutputObjects");
   // Create output container
+  AliInfo("AliAnaFwdDetsQA::UserCreateOutputObjects");
   fListOfHistos = new TList();
   
   fT0vtxRec = CreateHisto("hT0vtxRec", "Z vertex reconstructed with T0", 100, -25, 25, "Z_{vtx} [cm]", "");
   fT0time   = CreateHisto("hT0time", "Time0 reconstruction with T0", 5000, 10000, 20000, "t_{0} [ps]", "");
+  fT0time2  = CreateHisto("hT0time2", "Time0 reconstruction with T0 (mult > 10)", 5000, 10000, 20000, "t_{0} [ps]", "");
   fT0mult   = CreateHisto("hT0mult", "Total reconstructed multiplicity in T0", 100, -0.5, 99.5, "Multiplicity", "");
   fT0vtxRes = CreateHisto("hT0vtxRes", "T0 Z vertex resolution", 100, -25, 25, "Delta(Z_{vtx}) [cm]", "");
+  fT0ampl   = CreateHisto("hT0ampl","T0 multiplicity in single channel (all T0 channels)",400,-0.5,99.5);
   
   fT0vtxRecGen = new TH2F("hT0vtxRecGen", "T0 reconstructed vs generated Z vertex", 100, -25, 25, 100, -25, 25);
   fT0vtxRecGen->GetXaxis()->SetTitle("Generated Z vertex");
@@ -183,6 +196,7 @@ void AliAnaFwdDetsQA::UserCreateOutputObjects()
   fV0c = CreateHisto("hV0c","Number of fired PMTs (V0C)",65,-0.5,64.5);
   fV0multA = CreateHisto("hV0multA","Total reconstructed multiplicity (V0A)",100,0.,1000.);
   fV0multC = CreateHisto("hV0multC","Total reconstructed multiplicity (V0C)",100,0.,1000.);
+  fV0ampl  = CreateHisto("hV0ampl","V0 multiplicity in single channel (all V0 channels)",400,-0.5,99.5);
 
   fV0multAcorr = new TH2F("hV0multAcorr", "Reconstructed vs generated (primaries only) multiplicity (V0A)",100,0.,500.,100,0.,1000.);
   fV0multAcorr->GetXaxis()->SetTitle("# of primaries in V0A acceptance");
@@ -211,11 +225,15 @@ void AliAnaFwdDetsQA::UserCreateOutputObjects()
   fListOfHistos->Add(fV0multCcorr);
   fListOfHistos->Add(fV0Acorr);
   fListOfHistos->Add(fV0Ccorr);
+  fListOfHistos->Add(fT0ampl);
+  fListOfHistos->Add(fV0ampl);
+  fListOfHistos->Add(fT0time2);
 }
 
 void AliAnaFwdDetsQA::UserExec(Option_t */*option*/)
 {
-
+  // The analysis code
+  // goes here
   AliMCEvent* mcEvent = MCEvent();
   if (!mcEvent) {
     Printf("ERROR: Could not retrieve MC event");
@@ -236,9 +254,10 @@ void AliAnaFwdDetsQA::UserExec(Option_t */*option*/)
   Int_t nV0C = 0;
   for (Int_t iTracks = 0; iTracks < mcEvent->GetNumberOfTracks(); iTracks++) {//Check this loop again
     if (!stack->IsPhysicalPrimary(iTracks)) continue;
-    AliMCParticle* track = mcEvent->GetTrack(iTracks);
+    AliMCParticle* track = (AliMCParticle*)mcEvent->GetTrack(iTracks);
     TParticle* particle = track->Particle();
     if (!particle) continue;
+    if (track->Charge() == 0) continue;
     Double_t eta = particle->Eta();
     if (eta > 2.8 && eta < 5.1) {
       nV0A++;
@@ -256,6 +275,10 @@ void AliAnaFwdDetsQA::UserExec(Option_t */*option*/)
   }
 
   AliESDEvent* esd = dynamic_cast<AliESDEvent*>(event);
+  if (!esd) {
+    Printf("ERROR: Could not retrieve esd");
+    return;
+  }
   const AliESDTZERO* esdT0 = esd->GetESDTZERO();
   Double_t t0zvtx = esdT0->GetT0zVertex();
   Double_t t0time = esdT0->GetT0();
@@ -269,9 +292,12 @@ void AliAnaFwdDetsQA::UserExec(Option_t */*option*/)
   Double_t t0mult = 0;
   for(Int_t i = 0; i < 24; i++) {
     t0mult += esdT0->GetT0amplitude()[i];
+    fT0ampl->Fill(esdT0->GetT0amplitude()[i]);
   }
 
   fT0mult->Fill(t0mult);
+  if (t0mult > 10)
+    fT0time2->Fill(t0time);
 
   AliESDVZERO* esdV0 = esd->GetVZEROData();
   fV0a->Fill(esdV0->GetNbPMV0A());
@@ -284,88 +310,23 @@ void AliAnaFwdDetsQA::UserExec(Option_t */*option*/)
   fV0Acorr->Fill((Float_t)nV0A,(Float_t)esdV0->GetNbPMV0A());
   fV0Ccorr->Fill((Float_t)nV0C,(Float_t)esdV0->GetNbPMV0C());
 
+  for(Int_t i = 0; i < 64; i++) {
+    fV0ampl->Fill(esdV0->GetMultiplicity(i));
+  }
   // Post output data.
   PostData(1, fListOfHistos);
 }
 
 void AliAnaFwdDetsQA::Terminate(Option_t *)
 {
+  // Terminate
+  // Store the output histos
   fListOfHistos = dynamic_cast<TList*>(GetOutputData(1));
   if (!fListOfHistos) {
     Printf("ERROR: fListOfHistos not available");
     return;
   }
        
-  fT0vtxRec = dynamic_cast<TH1F*>(fListOfHistos->At(0));
-  fT0time = dynamic_cast<TH1F*>(fListOfHistos->At(1));
-  fT0mult = dynamic_cast<TH1F*>(fListOfHistos->At(2));
-  fT0vtxRecGen = dynamic_cast<TH2F*>(fListOfHistos->At(3));
-  fT0vtxRes = dynamic_cast<TH1F*>(fListOfHistos->At(4));
-
-  fV0a = dynamic_cast<TH1F*>(fListOfHistos->At(5));
-  fV0c = dynamic_cast<TH1F*>(fListOfHistos->At(6));
-  fV0multA = dynamic_cast<TH1F*>(fListOfHistos->At(7));
-  fV0multC = dynamic_cast<TH1F*>(fListOfHistos->At(8));
-  fV0multAcorr = dynamic_cast<TH2F*>(fListOfHistos->At(9));
-  fV0multCcorr = dynamic_cast<TH2F*>(fListOfHistos->At(10));
-  fV0Acorr = dynamic_cast<TH2F*>(fListOfHistos->At(11));
-  fV0Ccorr = dynamic_cast<TH2F*>(fListOfHistos->At(12));
-
-  // draw the histograms if not in batch mode
-  if (!gROOT->IsBatch()) {
-    new TCanvas;
-    fT0vtxRec->DrawCopy("E");
-    new TCanvas;
-    fT0time->DrawCopy("E");
-    new TCanvas;
-    fT0mult->DrawCopy("E");
-    new TCanvas;
-    fT0vtxRes->DrawCopy("E");
-    new TCanvas;
-    fT0vtxRecGen->DrawCopy();
-    new TCanvas;
-    fV0a->DrawCopy("E");
-    new TCanvas;
-    fV0c->DrawCopy("E");
-    new TCanvas;
-    fV0multA->DrawCopy("E");
-    new TCanvas;
-    fV0multC->DrawCopy("E");
-    new TCanvas;
-    fV0multAcorr->DrawCopy();
-    new TCanvas;
-    fV0multCcorr->DrawCopy();
-    new TCanvas;
-    fV0Acorr->DrawCopy();
-    new TCanvas;
-    fV0Ccorr->DrawCopy();
-  }
-
-  // write the output histograms to a file
-  TFile* outputFile = TFile::Open("FwdDetsQA.root", "recreate");
-  if (!outputFile || !outputFile->IsOpen())
-    {
-      Error("AliAnaFwdDetsQA", "opening output file FwdDetsQA.root failed");
-      return;
-    }
-  fT0vtxRec->Write();
-  fT0time->Write();
-  fT0mult->Write();
-  fT0vtxRecGen->Write();
-  fT0vtxRes->Write();
-
-  fV0a->Write();
-  fV0c->Write();
-  fV0multA->Write();
-  fV0multC->Write();
-  fV0multAcorr->Write();
-  fV0multCcorr->Write();
-  fV0Acorr->Write();
-  fV0Ccorr->Write();
-
-  outputFile->Close();
-  delete outputFile;
-
   //delete esd;
   Info("AliAnaFwdDetsQA", "Successfully finished");
 }