fHOutMultTKL(0),
fHOutMultCL0(0),
fHOutMultCL1(0),
+ fHOutMultV0MvsZDN(0),
+ fHOutMultZEMvsZDN(0),
fHOutMultV0MvsZDC(0),
fHOutMultZEMvsZDC(0),
fHOutMultV0MvsCL1(0),
fLowRunN =136851;
fHighRunN=139517;
- for (Int_t i=0; i<(fHighRunN-fLowRunN); i++) {
+ for (Int_t i=0; i < 2667; i++) {
V0MScaleFactor[i]=0.0;
SPDScaleFactor[i]=0.0;
TPCScaleFactor[i]=0.0;
fHOutMultTKL(0),
fHOutMultCL0(0),
fHOutMultCL1(0),
+ fHOutMultV0MvsZDN(0),
+ fHOutMultZEMvsZDN(0),
fHOutMultV0MvsZDC(0),
fHOutMultZEMvsZDC(0),
fHOutMultV0MvsCL1(0),
AliInfo("Centrality Selection enabled.");
DefineOutput(1, TList::Class());
- for (Int_t i=0; i<(fHighRunN-fLowRunN); i++) {
+ for (Int_t i=0; i<2667; i++) {
V0MScaleFactor[i]=0.0;
SPDScaleFactor[i]=0.0;
TPCScaleFactor[i]=0.0;
fHOutMultTKL(ana.fHOutMultTKL),
fHOutMultCL0(ana.fHOutMultCL0),
fHOutMultCL1(ana.fHOutMultCL1),
+ fHOutMultV0MvsZDN(ana.fHOutMultV0MvsZDN),
+ fHOutMultZEMvsZDN(ana.fHOutMultZEMvsZDN),
fHOutMultV0MvsZDC(ana.fHOutMultV0MvsZDC),
fHOutMultZEMvsZDC(ana.fHOutMultZEMvsZDC),
fHOutMultV0MvsCL1(ana.fHOutMultV0MvsCL1),
fHOutVertex(ana.fHOutVertex)
{
// Copy Constructor
+ for (Int_t i=0; i<2667; i++) {
+ V0MScaleFactor[i]=0.0;
+ SPDScaleFactor[i]=0.0;
+ TPCScaleFactor[i]=0.0;
+ V0MScaleFactorMC[i]=0.0;
+ }
+
}
//________________________________________________________________________
fHOutMultTKL = new TH1F("fHOutMultTKL","fHOutMultTKL; Multiplicity tracklets",5000,0,5000);
fHOutMultCL0 = new TH1F("fHOutMultCL0","fHOutMultCL0; Multiplicity SPD inner",7000,0,7000);
fHOutMultCL1 = new TH1F("fHOutMultCL1","fHOutMultCL1; Multiplicity SPD outer",7000,0,7000);
- fHOutMultV0MvsZDC = new TH2F("fHOutMultV0MvsZDC","fHOutMultV0MvsZDC; Multiplicity V0; Energy ZDC",500,0,25000,500,0,6000);
- fHOutMultZEMvsZDC = new TH2F("fHOutMultZEMvsZDC","fHOutMultZEMvsZDC; Energy ZEM; Energy ZDC",500,0,2500,500,0,6000);
+ fHOutMultV0MvsZDN = new TH2F("fHOutMultV0MvsZDN","fHOutMultV0MvsZDN; Multiplicity V0; Energy ZDC-N",500,0,25000,500,0,180000);
+ fHOutMultZEMvsZDN = new TH2F("fHOutMultZEMvsZDN","fHOutMultZEMvsZDN; Energy ZEM; Energy ZDC-N",500,0,2500,500,0,180000);
+ fHOutMultV0MvsZDC = new TH2F("fHOutMultV0MvsZDC","fHOutMultV0MvsZDC; Multiplicity V0; Energy ZDC",500,0,25000,500,0,200000);
+ fHOutMultZEMvsZDC = new TH2F("fHOutMultZEMvsZDC","fHOutMultZEMvsZDC; Energy ZEM; Energy ZDC",500,0,2500,500,0,200000);
fHOutMultV0MvsCL1 = new TH2F("fHOutMultV0MvsCL1","fHOutMultV0MvsCL1; Multiplicity V0; Multiplicity SPD outer",2500,0,25000,700,0,7000);
fHOutMultV0MvsTRK = new TH2F("fHOutMultV0MvsTRK","fHOutMultV0MvsTRK; Multiplicity V0; Multiplicity TPC",2500,0,25000,400,0,4000);
fHOutMultTRKvsCL1 = new TH2F("fHOutMultTRKvsCL1","fHOutMultTRKvsCL1; Multiplicity TPC; Multiplicity SPD outer",400,0,4000,700,0,7000);
fOutputList->Add( fHOutMultTKL);
fOutputList->Add( fHOutMultCL0);
fOutputList->Add( fHOutMultCL1);
+ fOutputList->Add( fHOutMultV0MvsZDN);
+ fOutputList->Add( fHOutMultZEMvsZDN);
fOutputList->Add( fHOutMultV0MvsZDC);
fOutputList->Add( fHOutMultZEMvsZDC);
fOutputList->Add( fHOutMultV0MvsCL1);
Float_t zpaEnergy = 0.; // ZPA Energy
Float_t zem1Energy = 0.; // ZEM1 Energy
Float_t zem2Energy = 0.; // ZEM2 Energy
-
+ Bool_t zdcEnergyCal = kFALSE; // if zdc is calibrated (in pass2)
+
Int_t nTracks = 0; // no. tracks
Int_t nTracklets = 0; // no. tracklets
Int_t nClusters[6] = {0}; // no. clusters on 6 ITS layers
// ***** ZDC info
AliESDZDC *esdZDC = esd->GetESDZDC();
- zncEnergy = (Float_t) (esdZDC->GetZDCN1Energy())/8.;
- zpcEnergy = (Float_t) (esdZDC->GetZDCP1Energy())/8.;
- znaEnergy = (Float_t) (esdZDC->GetZDCN2Energy())/8.;
- zpaEnergy = (Float_t) (esdZDC->GetZDCP2Energy())/8.;
+ zdcEnergyCal = esdZDC->AliESDZDC::TestBit(AliESDZDC::kEnergyCalibratedSignal);
+ if (zdcEnergyCal) {
+ zncEnergy = (Float_t) (esdZDC->GetZDCN1Energy());
+ zpcEnergy = (Float_t) (esdZDC->GetZDCP1Energy());
+ znaEnergy = (Float_t) (esdZDC->GetZDCN2Energy());
+ zpaEnergy = (Float_t) (esdZDC->GetZDCP2Energy());
+ } else {
+ zncEnergy = (Float_t) (esdZDC->GetZDCN1Energy())/8.;
+ zpcEnergy = (Float_t) (esdZDC->GetZDCP1Energy())/8.;
+ znaEnergy = (Float_t) (esdZDC->GetZDCN2Energy())/8.;
+ zpaEnergy = (Float_t) (esdZDC->GetZDCP2Energy())/8.;
+ }
zem1Energy = (Float_t) (esdZDC->GetZDCEMEnergy(0))/8.;
zem2Energy = (Float_t) (esdZDC->GetZDCEMEnergy(1))/8.;
-
+
}
else if(fAnalysisInput.CompareTo("AOD")==0){
//AliAODEvent *aod = dynamic_cast<AliAODEvent*> (InputEvent());
if(fHtempV0MvsFMD) fCentV0MvsFMD = fHtempV0MvsFMD->GetBinContent(fHtempV0MvsFMD->FindBin((multV0A+multV0C)));
if(fHtempTKLvsV0M) fCentTKLvsV0M = fHtempTKLvsV0M->GetBinContent(fHtempTKLvsV0M->FindBin(nTracklets));
- if(fHtempZEMvsZDC) fCentZEMvsZDC = fHtempZEMvsZDC->GetBinContent(fHtempZEMvsZDC->FindBin((zem1Energy+zem2Energy)/1000.));
-
+ if(fHtempZEMvsZDC) fCentZEMvsZDC = fHtempZEMvsZDC->GetBinContent(fHtempZEMvsZDC->FindBin(zem1Energy+zem2Energy,zncEnergy+znaEnergy+zpcEnergy+zpaEnergy));
// ***** Cleaning
fQuality=0;
// ***** outliers
// **** V0 vs SPD
- printf("AnalysisCentralitySelectionTask::centrality is %f\n",fCentV0M);
-
if (IsOutlierV0MSPD(spdCorr, v0Corr, int(fCentV0M))) fQuality += 2;
// ***** V0 vs TPC
if (IsOutlierV0MTPC(nTracks, v0Corr, int(fCentV0M))) fQuality += 4;
// ***** V0 vs ZDC
- if (IsOutlierV0MZDC((zncEnergy+znaEnergy+zpcEnergy+zpaEnergy), v0Corr)) fQuality += 8;
+ if (IsOutlierV0MZDC((zncEnergy+znaEnergy+zpcEnergy+zpaEnergy), v0Corr) &&
+ (zdcEnergyCal==kFALSE)) fQuality += 8;
if (esdCent) {
esdCent->SetQuality(fQuality);
fHOutQuality->Fill(fQuality);
fHOutVertex->Fill(zvtx);
+ fHOutMultV0MvsZDN->Fill(v0Corr,(zncEnergy+znaEnergy));
+ fHOutMultZEMvsZDN->Fill((zem1Energy+zem2Energy),(zncEnergy+znaEnergy));
fHOutMultV0MvsZDC->Fill(v0Corr,(zncEnergy+znaEnergy+zpcEnergy+zpaEnergy));
fHOutMultZEMvsZDC->Fill((zem1Energy+zem2Energy),(zncEnergy+znaEnergy+zpcEnergy+zpaEnergy));
fHOutMultV0MvsCL1->Fill(v0Corr,spdCorr);
owd->cd();
fHtempV0MvsFMD = (TH1F*) (fFile2->Get("hmultV0vsmultFMD_all_percentile"));
fHtempTKLvsV0M = (TH1F*) (fFile2->Get("hNtrackletsvsmultV0_all_percentile"));
- fHtempZEMvsZDC = (TH1F*) (fFile2->Get("hEzemvsEzdc_all_percentile"));
+ fHtempZEMvsZDC = (TH2F*) (fFile2->Get("hEzemvsEzdc_all_percentile"));
if (!fHtempV0MvsFMD) AliWarning(Form("Calibration for V0MvsFMD does not exist in %s", path.Data()));
if (!fHtempTKLvsV0M) AliWarning(Form("Calibration for TKLvsV0M does not exist in %s", path.Data()));
//________________________________________________________________________
Bool_t AliCentralitySelectionTask::IsOutlierV0MSPD(Float_t spd, Float_t v0, Int_t cent)
{
- TF1 *V0MSPDfun = new TF1("V0MSPDfun","-0.143789+ 0.288874*x",0,25000);
+ Float_t val= -0.143789 + 0.288874 * v0;
Float_t SPDsigma[100]={231.483, 189.446, 183.359, 179.923, 174.229, 170.309, 165.021,
160.84, 159.33, 154.453, 151.644, 148.337, 145.215, 142.353,
139.351, 136, 133.838, 129.885, 127.36, 125.032, 122.21, 120.3,
15.7185, 15.3006, 14.7432, 14.4174, 14.0805, 13.7638, 13.7638,
13.7638, 13.7638, 13.7638, 13.7638, 13.7638, 13.7638, 13.7638, 18.0803};
- if ( TMath::Abs(spd-V0MSPDfun->Eval(v0)) > fOutliersCut*SPDsigma[cent] )
+ if ( TMath::Abs(spd-val) > fOutliersCut*SPDsigma[cent] )
return kTRUE;
else
return kFALSE;
//________________________________________________________________________
Bool_t AliCentralitySelectionTask::IsOutlierV0MTPC(Int_t tracks, Float_t v0, Int_t cent)
{
- TF1 *V0MTPCfun = new TF1("V0MTPCfun","-0.540691+0.128358*x",0,25000);
+ Float_t val = -0.540691 + 0.128358 * v0;
Float_t TPCsigma[100]={106.439, 89.2834, 86.7568, 85.3641, 83.379, 81.6093, 79.3189,
78.0616, 77.2167, 75.0021, 73.9957, 72.0926, 71.0442, 69.8395,
68.1169, 66.6676, 66.0038, 64.2284, 63.3845, 61.7439, 60.642,
8.67375, 8.43029, 8.34818, 8.33484, 8.40709, 8.3974, 8.32814,
8.32814, 8.32814, 8.32814, 8.32814, 8.32814, 8.32814, 8.32814, 8.32814, 12.351};
- if ( TMath::Abs(tracks-V0MTPCfun->Eval(v0)) > fOutliersCut*TPCsigma[cent] )
+ if ( TMath::Abs(tracks-val) > fOutliersCut*TPCsigma[cent] )
return kTRUE;
else
return kFALSE;
//________________________________________________________________________
Bool_t AliCentralitySelectionTask::IsOutlierV0MZDC(Float_t zdc, Float_t v0)
{
- TF1 *fun1 = new TF1("fun1","6350-0.26*x",0,25000);
- TF1 *fun2 = new TF1("fun2","5580",0,25000);
-
- if ( (zdc > fun1->Eval(v0)) || (zdc > fun2->Eval(v0)) )
+ Float_t val1 = 6350. - 0.26 * v0;
+ Float_t val2 = 5580.;
+ if ((zdc > val1) || (zdc > val2))
return kTRUE;
else
return kFALSE;