printf("INFO: In the central region the track correction of %s has %d empty bins\n", GetName(), emptyBins);
}
+//____________________________________________________________________
+void AliCorrection::Add(AliCorrection* aCorrectionToAdd, Float_t c)
+{
+ //
+ // add to measured and generated the measured and generated of aCorrectionToAdd
+ // with the weight c
+
+ fEventCorr->Add(aCorrectionToAdd->GetEventCorrection(),c);
+ fTrackCorr->Add(aCorrectionToAdd->GetTrackCorrection(),c);
+}
+
+
//____________________________________________________________________
Bool_t AliCorrection::LoadHistograms(const Char_t* dir)
{
void Multiply();
void SetCorrectionToUnity();
+ void Add(AliCorrection* aCorrectionToAdd, Float_t c=1);
+
virtual Bool_t LoadHistograms(const Char_t* dir = 0);
virtual void SaveHistograms();
virtual void DrawHistograms(const Char_t* name = 0);
fhGene->Multiply(fhMeas, fhCorr, 1, 1, "B");
}
+//____________________________________________________________________
+void AliCorrectionMatrix::Add(AliCorrectionMatrix* aMatrixToAdd, Float_t c) {
+ //
+ // adds the measured and generated of aMatrixToAdd to measured and generated of this
+ //
+ // NB: the correction will naturally stay the same
+
+ fhMeas->Add(aMatrixToAdd->GetMeasuredHistogram(), c);
+ fhGene->Add(aMatrixToAdd->GetGeneratedHistogram(), c);
+}
+
+
//____________________________________________________________________
Bool_t AliCorrectionMatrix::LoadHistograms(const Char_t* dir)
{
void Multiply();
void SetCorrectionToUnity();
+ void Add(AliCorrectionMatrix* aMatrixToAdd, Float_t c=1);
+
void SetAxisTitles(const Char_t* titleX="", const Char_t* titleY="", const Char_t* titleZ="");
virtual Bool_t LoadHistograms(const Char_t* dir = 0);
return count+1;
}
+//____________________________________________________________________
+void AlidNdEtaCorrection::Add(AlidNdEtaCorrection* aCorrectionsToAdd, Float_t c) {
+ //
+ // adds the measured and generated of aCorrectionsToAdd to measured and generated
+ // of all corrections in this
+
+ fTrack2ParticleCorrection ->Add(aCorrectionsToAdd->GetTrack2ParticleCorrection() ,c);
+ fVertexRecoCorrection ->Add(aCorrectionsToAdd->GetVertexRecoCorrection() ,c);
+ fTriggerBiasCorrectionMBToINEL ->Add(aCorrectionsToAdd->GetTriggerBiasCorrectionINEL(),c);
+ fTriggerBiasCorrectionMBToNSD ->Add(aCorrectionsToAdd->GetTriggerBiasCorrectionNSD() ,c);
+ fTriggerBiasCorrectionMBToND ->Add(aCorrectionsToAdd->GetTriggerBiasCorrectionND() ,c);
+
+}
+
+//____________________________________________________________________
+void AlidNdEtaCorrection::Reset(void) {
+ //
+ // reset all corrections
+ //
+
+ fTrack2ParticleCorrection ->Reset();
+ fVertexRecoCorrection ->Reset();
+ fTriggerBiasCorrectionMBToINEL ->Reset();
+ fTriggerBiasCorrectionMBToNSD ->Reset();
+ fTriggerBiasCorrectionMBToND ->Reset();
+
+}
+
+
+
//____________________________________________________________________
Bool_t AlidNdEtaCorrection::LoadHistograms(const Char_t* dir)
{
AliCorrection* GetTriggerBiasCorrectionND() {return fTriggerBiasCorrectionMBToND;}
AliCorrection* GetCorrection(CorrectionType correctionType);
+ void Reset(void);
+ void Add(AlidNdEtaCorrection* aCorrectionsToAdd, Float_t c=1);
+
void SaveHistograms();
Bool_t LoadHistograms(const Char_t* dir = 0);
- void DrawHistograms();
+ void DrawHistograms();
Float_t GetMeasuredFraction(CorrectionType correctionType, Float_t ptCutOff, Float_t eta = -100, Bool_t debug = kFALSE);
if (!esdTrack)
continue;
+ Float_t eta = particle->Eta();
+ Float_t pt = particle->Pt();
+
+ // non diffractive
+ if (processtype!=92 && processtype!=93 && processtype!=94) {
+ if (triggerBiasStudy) fdNdEtaCorrectionTriggerBias[0]->FillTrackedParticle(vtxMC[2], eta, pt);
+ if (vertexRecoStudy) fdNdEtaCorrectionVertexReco[0] ->FillTrackedParticle(vtxMC[2], eta, pt);
+ }
+
+ // single diffractive
+ if (processtype==92 || processtype==93) {
+ if (triggerBiasStudy) fdNdEtaCorrectionTriggerBias[1]->FillTrackedParticle(vtxMC[2], eta, pt);
+ if (vertexRecoStudy) fdNdEtaCorrectionVertexReco[1] ->FillTrackedParticle(vtxMC[2], eta, pt);
+ }
+
+ // double diffractive
+ if (processtype==94) {
+ if (triggerBiasStudy) fdNdEtaCorrectionTriggerBias[2]->FillTrackedParticle(vtxMC[2], eta, pt);
+ if (vertexRecoStudy) fdNdEtaCorrectionVertexReco[2] ->FillTrackedParticle(vtxMC[2], eta, pt);
+ }
+
+
// using the properties of the mc particle
Int_t label = TMath::Abs(esdTrack->GetLabel());
TParticle* particle = stack->Particle(label);
case 2212: id = 2; break;
default: id = 3; break;
}
- Float_t eta = particle->Eta();
- Float_t pt = particle->Pt();
if (vertexReconstructed && eventTriggered) {
if (fdNdEtaCorrectionSpecies[id])
if (fPIDTracks)
fPIDTracks->Fill(particle->GetPdgCode());
}
-
- // non diffractive
- if (processtype!=92 && processtype!=93 && processtype!=94) {
- if (triggerBiasStudy) fdNdEtaCorrectionTriggerBias[0]->FillTrackedParticle(vtxMC[2], eta, pt);
- if (vertexRecoStudy) fdNdEtaCorrectionVertexReco[0] ->FillTrackedParticle(vtxMC[2], eta, pt);
- }
-
- // single diffractive
- if (processtype==92 || processtype==93) {
- if (triggerBiasStudy) fdNdEtaCorrectionTriggerBias[1]->FillTrackedParticle(vtxMC[2], eta, pt);
- if (vertexRecoStudy) fdNdEtaCorrectionVertexReco[1] ->FillTrackedParticle(vtxMC[2], eta, pt);
- }
-
- // double diffractive
- if (processtype==94) {
- if (triggerBiasStudy) fdNdEtaCorrectionTriggerBias[2]->FillTrackedParticle(vtxMC[2], eta, pt);
- if (vertexRecoStudy) fdNdEtaCorrectionVertexReco[2] ->FillTrackedParticle(vtxMC[2], eta, pt);
- }
-
} // end of track loop
//printf("vertexBinGlobalBegin = %d, vertexBinWidth = %d\n", vertexBinGlobalBegin, vertexBinWidth);
for (Int_t vertexPos=0; vertexPos<kVertexBinning; ++vertexPos)
{
+
Int_t vertexBinBegin = vertexBinGlobalBegin;
- Int_t vertexBinEnd = vertexBinGlobalBegin + vertexBinWidth * (kVertexBinning-1);
+ Int_t vertexBinEnd = vertexBinGlobalBegin + vertexBinWidth * (kVertexBinning-1);
// the first histogram is always for the whole vertex range
if (vertexPos > 0)
Float_t sum = 0;
Float_t sumError2 = 0;
for (Int_t iVtx = vertexBinBegin; iVtx < vertexBinEnd; iVtx++)
- {
- if (vtxVsEta->GetBinContent(iVtx, iEta) != 0)
+ {
+ if (vtxVsEta->GetBinContent(iVtx, iEta) != 0)
{
sum = sum + vtxVsEta->GetBinContent(iVtx, iEta);
+
+ if (sumError2 > 10e30)
+ printf("WARNING: sum of error2 is dangerously large - be prepared for crash... ");
+
sumError2 = sumError2 + TMath::Power(vtxVsEta->GetBinError(iVtx, iEta),2);
}
}
}
printf("Eta: %d Vertex Range: %d %d, Event Count %f, Track Sum: %f, Track Sum corrected: %f\n", iEta, vertexBinBegin, vertexBinEnd, totalEvents, sum, sum / ptCutOffCorrection);
-
+
Float_t dndeta = sum / totalEvents;
Float_t error = TMath::Sqrt(sumError2) / totalEvents;
fdNdEtaPtCutOffCorrected[vertexPos]->SetBinContent(iEta, dndeta);
fdNdEtaPtCutOffCorrected[vertexPos]->SetBinError(iEta, error);
+
}
}
}