]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGDQ/dielectron/AliDielectronVarManager.h
including switch to set on/off iso-track core removal, cleaning and bug fix
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / AliDielectronVarManager.h
index 70cc97ea3c3dfd59accb21542c4e3b956adcf048..bbbd1a9333be8805656081abb0d48ae73176ed07 100644 (file)
@@ -26,6 +26,7 @@
 #include <TProfile3D.h>
 #include <TH3D.h>
 #include <THnBase.h>
+#include <TSpline.h>
 #include <TFile.h>
 #include <TDatabasePDG.h>
 #include <TKey.h>
@@ -446,8 +447,8 @@ public:
   static void InitAODpidUtil(Int_t type=0);
   static void InitEstimatorAvg(const Char_t* filename);
   static void InitTRDpidEffHistograms(const Char_t* filename);
-  static void SetLegEffMap( THnBase *map) { fgLegEffMap=map; }
-  static void SetPairEffMap(THnBase *map) { fgPairEffMap=map; }
+  static void SetLegEffMap( TObject *map) { fgLegEffMap=map; }
+  static void SetPairEffMap(TObject *map) { fgPairEffMap=map; }
   static void SetFillMap(   TBits   *map) { fgFillMap=map; }
   static void SetVZEROCalibrationFile(const Char_t* filename) {fgVZEROCalibrationFile = filename;}
   
@@ -509,8 +510,8 @@ private:
   static TProfile        *fgMultEstimatorAvg[4][9];  // multiplicity estimator averages (4 periods x 9 estimators)
   static Double_t         fgTRDpidEffCentRanges[10][4];   // centrality ranges for the TRD pid efficiency histograms
   static TH3D            *fgTRDpidEff[10][4];   // TRD pid efficiencies from conversion electrons
-  static THnBase         *fgLegEffMap;             // single electron efficiencies
-  static THnBase         *fgPairEffMap;             // pair efficiencies
+  static TObject         *fgLegEffMap;             // single electron efficiencies
+  static TObject         *fgPairEffMap;             // pair efficiencies
   static TBits           *fgFillMap;             // map for requested variable filling
   static TString          fgVZEROCalibrationFile;  // file with VZERO channel-by-channel calibrations
   static TString          fgVZERORecenteringFile;  // file with VZERO Q-vector averages needed for event plane recentering
@@ -1566,10 +1567,10 @@ inline void AliDielectronVarManager::FillVarDielectronPair(const AliDielectronPa
     values[AliDielectronVarManager::kPseudoProperTimeResolution] = -1e10;
     // values[AliDielectronVarManager::kPseudoProperTimePull] = -1e10;
     if(samemother && fgEvent) {
-      if(pair->GetFirstDaughter()->GetLabel() > 0) {
+      if(pair->GetFirstDaughterP()->GetLabel() > 0) {
         const AliVParticle *motherMC = 0x0;
-        if(fgEvent->IsA() == AliESDEvent::Class())  motherMC = (AliMCParticle*)mc->GetMCTrackMother((AliESDtrack*)pair->GetFirstDaughter());
-        else if(fgEvent->IsA() == AliAODEvent::Class())  motherMC = (AliAODMCParticle*)mc->GetMCTrackMother((AliAODTrack*)pair->GetFirstDaughter());
+        if(fgEvent->IsA() == AliESDEvent::Class())  motherMC = (AliMCParticle*)mc->GetMCTrackMother((AliESDtrack*)pair->GetFirstDaughterP());
+        else if(fgEvent->IsA() == AliAODEvent::Class())  motherMC = (AliAODMCParticle*)mc->GetMCTrackMother((AliAODTrack*)pair->GetFirstDaughterP());
         Double_t vtxX, vtxY, vtxZ;
        if(motherMC && mc->GetPrimaryVertex(vtxX,vtxY,vtxZ)) {
          Int_t motherLbl = motherMC->GetLabel();
@@ -1588,8 +1589,8 @@ inline void AliDielectronVarManager::FillVarDielectronPair(const AliDielectronPa
        if (fgTRDpidEff[0][0]){
          Double_t valuesLeg1[AliDielectronVarManager::kNMaxValues];
          Double_t valuesLeg2[AliDielectronVarManager::kNMaxValues];
-         AliVParticle* leg1 = pair->GetFirstDaughter();
-         AliVParticle* leg2 = pair->GetSecondDaughter();
+         AliVParticle* leg1 = pair->GetFirstDaughterP();
+         AliVParticle* leg2 = pair->GetSecondDaughterP();
          if (leg1 && leg2){
                Fill(leg1, valuesLeg1);
                Fill(leg2, valuesLeg2);
@@ -1600,8 +1601,8 @@ inline void AliDielectronVarManager::FillVarDielectronPair(const AliDielectronPa
 
   }//if (mc->HasMC())
 
-  AliVParticle* leg1 = pair->GetFirstDaughter();
-  AliVParticle* leg2 = pair->GetSecondDaughter();
+  AliVParticle* leg1 = pair->GetFirstDaughterP();
+  AliVParticle* leg2 = pair->GetSecondDaughterP();
   if (leg1)
     values[AliDielectronVarManager::kMomAsymDau1] = (values[AliDielectronVarManager::kP] != 0)? leg1->P()  / values[AliDielectronVarManager::kP]: 0;
   else 
@@ -1904,14 +1905,20 @@ inline void AliDielectronVarManager::FillVarVEvent(const AliVEvent *event, Doubl
   values[AliDielectronVarManager::kv0C0v0C3DiffH2] = TMath::Cos( 2.*(values[AliDielectronVarManager::kv0C0rpH2] - 
                                                                     values[AliDielectronVarManager::kv0C3rpH2]) ); 
 
-  Double_t ZDCqvec[3][2];
-  memset(ZDCqvec, 999, sizeof(ZDCqvec));
+  Double_t ZDCqvec[3][2] = {{999., 999.}, {999., 999.}, {999., 999.} };
   GetZDCRP(event, ZDCqvec);
 
   values[AliDielectronVarManager::kZDCArpH1] = TMath::ATan2(ZDCqvec[0][1], ZDCqvec[0][0]);
   values[AliDielectronVarManager::kZDCCrpH1] = TMath::ATan2(ZDCqvec[1][1], ZDCqvec[1][0]);
   values[AliDielectronVarManager::kZDCACrpH1] = TMath::ATan2(ZDCqvec[2][1], ZDCqvec[2][0]);
 
+  if(TMath::Abs(ZDCqvec[0][0] - 999.) < 1e-10 || TMath::Abs(ZDCqvec[0][1] - 999.) < 1e-10 || TMath::Abs(ZDCqvec[1][0] - 999.) < 1e-10 || TMath::Abs(ZDCqvec[1][1] - 999.) < 1e-10){
+    values[AliDielectronVarManager::kZDCArpH1] = 999;
+    values[AliDielectronVarManager::kZDCCrpH1] = 999;
+    values[AliDielectronVarManager::kZDCACrpH1] = 999;
+  }
+
+
 
   values[AliDielectronVarManager::kv0ZDCrpRes] = cos(2*(values[AliDielectronVarManager::kZDCArpH1] - values[AliDielectronVarManager::kv0ArpH2]));
   values[AliDielectronVarManager::kZDCrpResH1] = cos(values[AliDielectronVarManager::kZDCArpH1] - values[AliDielectronVarManager::kZDCCrpH1]);
@@ -2293,19 +2300,19 @@ inline Double_t AliDielectronVarManager::GetSingleLegEff(Double_t * const values
   //
   if(!fgLegEffMap) return -1.;
 
-  Int_t dim=fgLegEffMap->GetNdimensions();
-  Int_t idx[dim];
-  for(Int_t idim=0; idim<dim; idim++) {
-    UInt_t var = GetValueType(fgLegEffMap->GetAxis(idim)->GetName());
-    idx[idim] = fgLegEffMap->GetAxis(idim)->FindBin(values[var]);
-    if(idx[idim] < 0 || idx[idim]>fgLegEffMap->GetAxis(idim)->GetNbins()) return 0.0;
-    /*   printf(" [E] AliDielectronVarManager::GetSingleLegEff values %f for %s not found in axis range \n",values[var],fgLegEffMap->GetAxis(idim)->GetName()); */
-    //    printf(" (%d,%f,%s) \t",idx[idim],values[var],fgLegEffMap->GetAxis(idim)->GetName());
+  if(fgLegEffMap->IsA()== THnBase::Class()) {
+    THnBase *eff = static_cast<THnBase*>(fgLegEffMap);
+    Int_t dim=eff->GetNdimensions();
+    Int_t idx[dim];
+    for(Int_t idim=0; idim<dim; idim++) {
+      UInt_t var = GetValueType(eff->GetAxis(idim)->GetName());
+    idx[idim] = eff->GetAxis(idim)->FindBin(values[var]);
+    if(idx[idim] < 0 || idx[idim]>eff->GetAxis(idim)->GetNbins()) return 0.0;
+    }
+    //  printf(" bin content %f+-%f \n",eff->GetBinContent(idx), eff->GetBinError(idx));
+    return (eff->GetBinContent(idx));
   }
-  //  printf(" bin content %f+-%f \n",fgLegEffMap->GetBinContent(idx), fgLegEffMap->GetBinError(idx));
-  //  if(fgLegEffMap->GetBinContent(idx)<0.01) return 0.0;
-  //  if(fgLegEffMap->GetBinError(idx)/fgLegEffMap->GetBinContent(idx)>0.2) return 0.0;
-  return (fgLegEffMap->GetBinContent(idx));
+  return -1.;
 }
 
 inline Double_t AliDielectronVarManager::GetPairEff(Double_t * const values) {
@@ -2314,15 +2321,27 @@ inline Double_t AliDielectronVarManager::GetPairEff(Double_t * const values) {
   //
   if(!fgPairEffMap) return -1.;
 
-  Int_t dim=fgPairEffMap->GetNdimensions();
-  Int_t idx[dim];
-  for(Int_t idim=0; idim<dim; idim++) {
-    UInt_t var = GetValueType(fgPairEffMap->GetAxis(idim)->GetName());
-    idx[idim] = fgPairEffMap->GetAxis(idim)->FindBin(values[var]);
-    if(idx[idim] < 0 || idx[idim]>fgPairEffMap->GetAxis(idim)->GetNbins()) return 0.0;
+  if(fgPairEffMap->IsA()== THnBase::Class()) {
+    THnBase *eff = static_cast<THnBase*>(fgPairEffMap);
+    Int_t dim=eff->GetNdimensions();
+    Int_t idx[dim];
+    for(Int_t idim=0; idim<dim; idim++) {
+      UInt_t var = GetValueType(eff->GetAxis(idim)->GetName());
+    idx[idim] = eff->GetAxis(idim)->FindBin(values[var]);
+    if(idx[idim] < 0 || idx[idim]>eff->GetAxis(idim)->GetNbins()) return 0.0;
+    }
+    //  printf(" bin content %f+-%f \n",eff->GetBinContent(idx), eff->GetBinError(idx));
+    return (eff->GetBinContent(idx));
+  }
+  if(fgPairEffMap->IsA()== TSpline3::Class()) {
+    TSpline3 *eff = static_cast<TSpline3*>(fgPairEffMap);
+    if(!eff->GetHistogram()) { printf("no histogram added to the spline\n"); return -1.;}
+    UInt_t var = GetValueType(eff->GetHistogram()->GetXaxis()->GetName());
+    //printf(" bin content %f \n",eff->Eval(values[var]) );
+    return (eff->Eval(values[var]));
   }
-  //  printf(" bin content %f+-%f \n",fgPairEffMap->GetBinContent(idx), fgPairEffMap->GetBinError(idx));
-  return (fgPairEffMap->GetBinContent(idx));
+
+  return -1.;
 }
 
 
@@ -2391,15 +2410,16 @@ inline void AliDielectronVarManager::InitZDCRecenteringHistograms(Int_t runNo) {
         fgZDCRecentering[i][j] = 0x0;
       }
 
-  TFile file(fgZDCRecenteringFile.Data());
-  if (!file.IsOpen()) return;
+  TFile* file=TFile::Open(fgZDCRecenteringFile.Data());
+  if(!file) return;
 
-  fgZDCRecentering[0][0] = (TProfile3D*)file.Get(Form("RUN%06d_QxA_Recent", runNo));
-  fgZDCRecentering[0][1] = (TProfile3D*)file.Get(Form("RUN%06d_QyA_Recent", runNo));
-  fgZDCRecentering[1][0] = (TProfile3D*)file.Get(Form("RUN%06d_QxC_Recent", runNo));
-  fgZDCRecentering[1][1] = (TProfile3D*)file.Get(Form("RUN%06d_QyC_Recent", runNo));
-  fgZDCRecentering[2][0] = (TProfile3D*)file.Get(Form("RUN%06d_QxAC_Recent", runNo));
-  fgZDCRecentering[2][1] = (TProfile3D*)file.Get(Form("RUN%06d_QyAC_Recent", runNo));
+
+  fgZDCRecentering[0][0] = (TProfile3D*)file->Get(Form("RUN%06d_QxA_Recent", runNo));
+  fgZDCRecentering[0][1] = (TProfile3D*)file->Get(Form("RUN%06d_QyA_Recent", runNo));
+  fgZDCRecentering[1][0] = (TProfile3D*)file->Get(Form("RUN%06d_QxC_Recent", runNo));
+  fgZDCRecentering[1][1] = (TProfile3D*)file->Get(Form("RUN%06d_QyC_Recent", runNo));
+  fgZDCRecentering[2][0] = (TProfile3D*)file->Get(Form("RUN%06d_QxAC_Recent", runNo));
+  fgZDCRecentering[2][1] = (TProfile3D*)file->Get(Form("RUN%06d_QyAC_Recent", runNo));
 
 
   if (fgZDCRecentering[0][0]) fgZDCRecentering[0][0]->SetDirectory(0x0);
@@ -2409,6 +2429,8 @@ inline void AliDielectronVarManager::InitZDCRecenteringHistograms(Int_t runNo) {
   if (fgZDCRecentering[2][0]) fgZDCRecentering[2][0]->SetDirectory(0x0);
   if (fgZDCRecentering[2][1]) fgZDCRecentering[2][1]->SetDirectory(0x0);
 
+  delete file;
+
 }