#include <TProfile3D.h>
#include <TH3D.h>
#include <THnBase.h>
+#include <TSpline.h>
#include <TFile.h>
#include <TDatabasePDG.h>
#include <TKey.h>
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;}
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
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();
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);
}//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
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]);
//
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) {
//
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.;
}
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);
if (fgZDCRecentering[2][0]) fgZDCRecentering[2][0]->SetDirectory(0x0);
if (fgZDCRecentering[2][1]) fgZDCRecentering[2][1]->SetDirectory(0x0);
+ delete file;
+
}