]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Interface class for quarkonia efficiencies (Zaida)
authormartinez <martinez@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 20 Oct 2006 15:46:42 +0000 (15:46 +0000)
committermartinez <martinez@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 20 Oct 2006 15:46:42 +0000 (15:46 +0000)
PWG3/AliQuarkoniaEfficiency.cxx [new file with mode: 0644]
PWG3/AliQuarkoniaEfficiency.h [new file with mode: 0644]
PWG3/QuarkoniaEfficiency.C [new file with mode: 0644]
PWG3/QuarkoniaEfficiency.root [new file with mode: 0644]

diff --git a/PWG3/AliQuarkoniaEfficiency.cxx b/PWG3/AliQuarkoniaEfficiency.cxx
new file mode 100644 (file)
index 0000000..2dc048f
--- /dev/null
@@ -0,0 +1,207 @@
+
+// Root 
+#include "TAxis.h"
+#include "TFile.h"
+#include "TH2.h"
+#include "TString.h"
+#include "TDirectory.h"
+
+// AliRoot includes
+#include "AliQuarkoniaEfficiency.h"
+#include "AliLog.h"
+
+
+AliQuarkoniaEfficiency::AliQuarkoniaEfficiency(Int_t quarkoniaResonance, Int_t decayChannel,
+                                              Int_t simParameterization):
+  fEfficiencyFileName("QuarkoniaEfficiency.root"),
+  fQuarkoniaResonance(quarkoniaResonance),     
+  fDecayChannel(decayChannel),           
+  fParameterization(simParameterization),  
+  fTriggerType(kPairUnlikeApt),
+  fTrigger(kFALSE),
+  fEfficiency(0x0)
+{
+
+}
+
+AliQuarkoniaEfficiency::~AliQuarkoniaEfficiency()
+{
+  delete fEfficiency;
+}
+
+void AliQuarkoniaEfficiency::Init()
+{
+  switch (fQuarkoniaResonance)  {  
+  case kJpsi:
+    SetTitle("Jpsi");
+    break;
+  case kPsiP:
+    SetTitle("PsiP");
+    break;
+  case kUpsilon:
+    SetTitle("Upsilon");
+    break;
+  case kUpsilonP:
+    SetTitle("UpsilonP");
+    break;
+  case kUpsilonPP:
+    SetTitle("UpsilonPP");
+    break;
+  case kOmega:
+    SetTitle("Omega");
+    break;
+  case kPhi:
+    SetTitle("Phi");
+    break;
+  }
+
+  switch (fDecayChannel) {
+  case kDimuon:
+    SetName("Dimuon");
+    break;
+  case kDielectron:
+    SetName("Dielectron");
+    break;
+  }
+
+  char *param=0;
+  switch (fParameterization){
+  case kFlat:
+    param = "Flat";
+    break;
+  case kCDFscaled:
+    param = "CDFscaled";
+    break;
+  case kCDFscaledPP:
+    param = "CDFscaledPP";
+    break;
+  }
+  
+  char *trig=0;
+  switch (fTriggerType){
+  case kSinglePlusLpt:
+    trig = "SinglePlusLpt";
+    break;
+  case kSinglePlusHpt: 
+    trig = "SinglePlusHpt";
+    break;
+  case kSinglePlusApt:
+    trig = "SinglePlusApt";
+    break;    
+  case kSingleMinusLpt:
+    trig = "SingleMinusLpt";
+    break;    
+  case kSingleMinusHpt:
+    trig = "SingleMinusHpt";
+    break;    
+  case kSingleMinusApt:
+    trig = "SingleMinusApt";
+    break;    
+  case kSingleUndefLpt:
+    trig = "SingleUndefLpt";
+    break;    
+  case kSingleUndefHpt:
+    trig = "SingleUndefHpt";
+    break;    
+  case kSingleUndefApt:
+    trig = "SingleUndefApt";
+    break;    
+  case kPairUnlikeLpt:
+    trig = "PairUnlikeLpt";
+    break;    
+  case kPairUnlikeHpt:
+    trig = "PairUnlikeHpt";
+    break;    
+  case kPairUnlikeApt:
+    trig = "PairUnlikeApt";
+    break;    
+  case kPairLikeLpt:
+    trig = "PairLikeLpt";
+    break;    
+  case kPairLikeHpt:
+    trig = "PairLikeHpt";
+    break;    
+  case kPairLikeApt:
+    trig = "PairLikeApt";
+    break;    
+  }
+
+
+  if(!fEfficiency) delete fEfficiency; 
+
+  TFile efficiencyFile(fEfficiencyFileName);
+  if ( efficiencyFile.IsOpen() ) {
+
+    char quarkoniaDir[15];
+    sprintf(quarkoniaDir,"%s",GetTitle());
+    if (! efficiencyFile.cd(quarkoniaDir) ){
+      AliError(Form("Directory %s not found in file %s \n Efficiency data for quarkonia %s and channel %s not found ",
+                   quarkoniaDir,fEfficiencyFileName.Data(),GetTitle(),GetName() ));
+      return;
+    }
+    
+    char histosDir[30];
+    sprintf(histosDir,"%s/%s_%s_%s",quarkoniaDir,GetTitle(),GetName(),param);
+    if(! efficiencyFile.cd(histosDir) ){
+      AliError(Form("Subdirectory %s/%s not found in file %s \n Efficiency data for quarkonia %s and channel %s not found ",
+                   quarkoniaDir,histosDir,fEfficiencyFileName.Data(),GetTitle(),GetName() ));
+      return;
+    }
+
+    char histoname[50];
+    if(fTrigger) sprintf(histoname,"h%sEfficiencyPtRap_%s",GetTitle(),trig);
+    else sprintf(histoname,"h%sEfficiencyPtRap",GetTitle());
+    char histonameposition[99];
+    sprintf(histonameposition,"%s/%s",histosDir,histoname);
+    fEfficiency = (TH2F*)efficiencyFile.Get(histonameposition);
+
+    if ( !fEfficiency ) {
+      AliError(Form("Histo %s not found in file %s \n Efficiency data for quarkonia %s and channel %s not found",
+                   histoname,GetTitle(), GetName() ));
+    }
+    else {
+      fEfficiency->SetDirectory(0);
+    }
+    efficiencyFile.Close();
+
+  }
+  else {
+    AliError(Form("File %s not found",fEfficiencyFileName.Data()));
+  }
+
+}
+
+TH2F*  AliQuarkoniaEfficiency::GetEfficiencyHisto() const
+{
+  if (fEfficiency) return fEfficiency;
+  else {
+    AliError(Form("Efficiency data for quarkonia %s and channel %s not found",GetTitle(),GetName()));
+    return 0x0;
+  }
+}
+
+void  AliQuarkoniaEfficiency::GetEfficiency(Float_t rap, Float_t pT, Double_t &eff, Double_t &error)
+{
+  Int_t binx=0;
+  Int_t biny=0;
+  
+  if (!fEfficiency) {
+    AliError(Form("Efficiency data for quarkonia %s and channel %s not found",GetTitle(),GetName()));
+  }
+  else {
+    if ( rap < (fEfficiency->GetXaxis())->GetXmin()  ||  
+        rap > (fEfficiency->GetXaxis())->GetXmax()  ||
+        pT  < (fEfficiency->GetYaxis())->GetXmin()  ||  
+         pT  > (fEfficiency->GetYaxis())->GetXmax()   ) {
+      AliInfo("Values out of range");
+      eff   = 0.;
+      error = 0.;
+    }
+    else  { 
+      binx  = fEfficiency->GetXaxis()->FindBin(rap);  
+      biny  = fEfficiency->GetYaxis()->FindBin(pT);
+      eff   = fEfficiency->GetBinContent(binx,biny);
+      error = fEfficiency->GetBinError(binx,biny);
+    }
+  } 
+}
diff --git a/PWG3/AliQuarkoniaEfficiency.h b/PWG3/AliQuarkoniaEfficiency.h
new file mode 100644 (file)
index 0000000..c6bd565
--- /dev/null
@@ -0,0 +1,90 @@
+#ifndef ALIQUARKONIAEFFICENCY_H
+#define ALIQUARKONIAEFFICENCY_H
+
+//===================================================================
+//  Class AliQuarkoniaEfficiency                               
+//
+//  This class will provide the quarkonia reconstruction efficiency 
+//  in ALICE without acceptance consideration
+//  for different resonances :
+//    kJpsi
+//    kPsiP
+//    kUpsilon
+//    kUpsilonP
+//    kUpsilonPP
+//  for some vector mesons :
+//    kPhi
+//    kOmega
+//  different decay channels:
+//    kDimuon
+//    kDielectron
+//  different trigger configurations:
+//    kSinglePlusLpt, kSinglePlusHpt, kSinglePlusApt,
+//    kSingleMinusLpt, kSingleMinusHpt, kSingleMinusApt,
+//    kSingleUndefLpt, kSingleUndefHpt, kSingleUndefApt,
+//    kPairUnlikeLpt, kPairUnlikeHpt, kPairUnlikeApt,
+//    kPairLikeLpt, kPairLikeHpt, kPairLikeApt
+//  different parameterizations:
+//    kFlat
+//    kCDFscaled
+//    kCDFscaledPP
+//
+//
+//  Reconstruction efficiency has been evaluated by means of a flat
+//  y and pt distribution of quarkonia in -4 < y < -2.5, 
+//  0 < pt < 20 GeV/c. Weights have been used to evaluate the
+//  reconstruction efficiency in different parameterizations.
+//                                                              
+//  Subatech 2006
+//===================================================================
+
+#include "TNamed.h"
+
+class TH2F;
+class TString;
+
+class AliQuarkoniaEfficiency : public TNamed{
+
+ public:
+
+  enum quarkonia{kJpsi, kPsiP, kUpsilon, kUpsilonP, kUpsilonPP, kOmega, kPhi};
+  enum decay{kDimuon, kDielectron};
+  enum parameterization{kFlat, kCDFscaled, kCDFscaledPP};
+  enum trigger{kSinglePlusLpt, kSinglePlusHpt, kSinglePlusApt,
+              kSingleMinusLpt, kSingleMinusHpt, kSingleMinusApt,
+              kSingleUndefLpt, kSingleUndefHpt, kSingleUndefApt,
+              kPairUnlikeLpt, kPairUnlikeHpt, kPairUnlikeApt,
+              kPairLikeLpt, kPairLikeHpt, kPairLikeApt };
+
+
+  AliQuarkoniaEfficiency(Int_t quarkoniaResonance=kJpsi, Int_t decayChannel=kDimuon, Int_t simParameterization=kCDFscaledPP);
+  virtual ~AliQuarkoniaEfficiency();    
+  void   Init(); 
+
+  TH2F*  GetEfficiencyHisto() const;
+  void   GetEfficiency(Float_t rap, Float_t pT, Double_t & eff, Double_t & error); 
+
+  inline void  SetEfficiencyFileName(char * efficiencyFileName) { fEfficiencyFileName = efficiencyFileName; }
+  inline void  SetQuarkoniaResonance(Int_t quarkoniaResonance = kJpsi) { fQuarkoniaResonance= quarkoniaResonance;}
+  inline void  SetDecayChannel(Int_t decayChannel = kDimuon) { fDecayChannel = decayChannel;}
+  inline void  SetSimulatedParameterization(Int_t simParameterization = kCDFscaledPP) { 
+    fParameterization = simParameterization;
+  }
+  inline void  SetTrigger(bool trigger = kFALSE, Int_t triggerType = kPairUnlikeApt){ 
+    fTrigger = trigger; fTriggerType = triggerType;
+  }
+  
+ private:
+
+  TString        fEfficiencyFileName;      // Name of the efficiency root file
+  Int_t          fQuarkoniaResonance;      // Resonance Acceptance
+  Int_t          fDecayChannel;            // Studied decay channel
+  Int_t          fParameterization;        // Quarkonia simulated parameterization  
+  Int_t          fTriggerType;             // Trigger type to be considered  
+  Bool_t         fTrigger;                 // Boolean to decide if consider or not trigger
+  TH2F *         fEfficiency;              // Efficiency histogram
+
+  ClassDef(AliQuarkoniaEfficiency,1)
+    };
+
+#endif
diff --git a/PWG3/QuarkoniaEfficiency.C b/PWG3/QuarkoniaEfficiency.C
new file mode 100644 (file)
index 0000000..2d207c8
--- /dev/null
@@ -0,0 +1,21 @@
+#if !defined(__CINT__) || defined(__MAKECINT__)
+//C++ includes
+#include <Riostream.h>
+#include <stdio.h>
+#include <string.h>
+
+//PWG3
+#include "AliQuarkoniaEfficiency.h"
+#endif
+
+
+void QuarkoniaEfficiency(double Rapidity, double Pt){
+  
+  //Read Acceptance
+  Double_t eff,error;
+  AliQuarkoniaEfficiency * JPsiEff = new AliQuarkoniaEfficiency();
+  JPsiEff->Init();
+  JPsiEff->GetEfficiency(Rapidity,Pt,eff,error);
+  printf(" Efficiency calculations give us: eff = %2.2e  error %2.2e \n",eff,error);
+
+}
diff --git a/PWG3/QuarkoniaEfficiency.root b/PWG3/QuarkoniaEfficiency.root
new file mode 100644 (file)
index 0000000..93a7c98
Binary files /dev/null and b/PWG3/QuarkoniaEfficiency.root differ