#include "TMath.h"
#include "AliFMDAnaParameters.h"
#include "AliFMDGeometry.h"
+#include "AliFMDRing.h"
ClassImp(AliFMDAnalysisTaskDensity)
Double_t vertexBinDouble = (vertex[2] + pars->GetVtxCutZ()) / delta;
Int_t vtxbin = (Int_t)vertexBinDouble;
-
+
fVertexString.SetString(Form("%d",vtxbin));
//Reset everything
for(UShort_t det=1;det<=3;det++) {
Float_t phi = TMath::ATan2(y,x);
if(phi<0)
phi = phi+2*TMath::Pi();
+ Float_t correction = GetAcceptanceCorrection(ring,strip);
+ if(correction) mult = mult / correction;
hMult->Fill(eta,phi,mult);
}
}
//_____________________________________________________________________
+Float_t AliFMDAnalysisTaskDensity::GetAcceptanceCorrection(Char_t ring, UShort_t strip)
+{
+ AliFMDRing fmdring(ring);
+ fmdring.Init();
+ Float_t rad = fmdring.GetMaxR()-fmdring.GetMinR();
+ Float_t segment = rad / fmdring.GetNStrips();
+ Float_t radius = fmdring.GetMinR() + segment*strip;
+
+ Float_t basearea1 = 0.5*fmdring.GetBaseStripLength(strip)*TMath::Power(radius,2);
+ Float_t basearea2 = 0.5*fmdring.GetBaseStripLength(strip)*TMath::Power((radius-segment),2);
+ Float_t basearea = basearea1 - basearea2;
+
+ Float_t area1 = 0.5*fmdring.GetStripLength(strip)*TMath::Power(radius,2);
+ Float_t area2 = 0.5*fmdring.GetStripLength(strip)*TMath::Power((radius-segment),2);
+ Float_t area = area1 - area2;
+
+ Float_t correction = area/basearea;
+
+ return correction;
+}
+
//
//EOF
//
virtual void Terminate(Option_t */*option*/) {}
virtual void SetDebugLevel(Int_t level) {fDebug = level;}
+ Float_t GetAcceptanceCorrection(Char_t ring, UShort_t strip);
void SetOutputList(TList* outlist) {fOutputList = outlist;}
void SetInputESDFMD(AliESDFMD* esdfmd) {fESD = esdfmd;}
void SetInputVertex(AliESDVertex* vertex) {fVertex = vertex;}
+
private:
+
Int_t fDebug; // Debug flag
TList* fOutputList;
TObjArray fArray;
TObjString fVertexString;
AliESDVertex* fVertex;
Bool_t fStandalone;
+
ClassDef(AliFMDAnalysisTaskDensity, 0); // Analysis task for FMD analysis
};
TH2F* hMultInput = (TH2F*)fInputList->FindObject(Form("mult_FMD%d%c_vtxbin%d",det,ringChar,vtxbin));
- // std::cout<<hMultInput->GetEntries()<<std::endl;
+
hMultTotal->Add(hMultInput);
//_____________________________________________________________________
void AliFMDAnalysisTaskDndeta::Terminate(Option_t */*option*/) {
- /*
+
AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
Int_t nVtxbins = pars->GetNvtxBins();
Int_t nRings = (det==1 ? 1 : 2);
for (UShort_t ir = 0; ir < nRings; ir++) {
TObjArray* vtxArray = (TObjArray*)detArray->At(ir);
+ Char_t ringChar = (ir == 0 ? 'I' : 'O');
for(Int_t i =0; i<nVtxbins; i++) {
TH2F* hMultTotal = (TH2F*)vtxArray->At(i);
- if(fNevents.At(i))
- hMultTotal->Scale(1/(Float_t)fNevents.At(i));
+ TH1D* hMultProj = hMultTotal->ProjectionX(Form("dNdeta_FMD%d%c_vtxbin%d_proj",det,ringChar,i),1,hMultTotal->GetNbinsY());
+ fOutputList->Add(hMultProj);
}
}
}
- */
+
}
//_____________________________________________________________________
//
fBackground("BackgroundCorrected",kFALSE),
fDndeta("dNdeta",kFALSE)
{
- // Default constructor
+
DefineOutput(1, TList::Class());
}
//_____________________________________________________________________
void AliFMDAnalysisTaskSE::UserCreateOutputObjects()
{
-// Create the output container
+// Create the output containers
//
fListOfHistos = new TList();
PostData(1, fListOfHistos);
}
+//_____________________________________________________________________
+void AliFMDAnalysisTaskSE::Terminate(Option_t */*option*/)
+{
+ fDndeta.Terminate("");
+}
//_____________________________________________________________________
//
// EOF
virtual void Init();
virtual void UserCreateOutputObjects();
virtual void UserExec(Option_t* /*option*/);
-
+ void Terminate(Option_t */*option*/);
private:
TList* fListOfHistos;
}
Double_t vertex[3];
- fESD->GetPrimaryVertexSPD()->GetXYZ(vertex);
-
+ GetVertex(vertex);
fEsdVertex->SetXYZ(vertex);
if(fStandalone) {
PostData(0, foutputESDFMD);
return nParticles;
}
+//_____________________________________________________________________
+void AliFMDAnalysisTaskSharing::GetVertex(Double_t* vertexXYZ)
+{
+ const AliESDVertex* vertex = 0;
+ vertex = fESD->GetPrimaryVertex();
+ if (!vertex) vertex = fESD->GetPrimaryVertexSPD();
+ if (!vertex) vertex = fESD->GetPrimaryVertexTPC();
+ if (!vertex) vertex = fESD->GetVertex();
+
+ if (vertex) {
+ vertex->GetXYZ(vertexXYZ);
+ return;
+ }
+ else if (fESD->GetESDTZERO()) {
+ vertexXYZ[0] = 0;
+ vertexXYZ[1] = 0;
+ vertexXYZ[2] = fESD->GetT0zVertex();
+ return;
+ }
+
+ return;
+}
//_____________________________________________________________________
//
// EOF
virtual void Terminate(Option_t* /* option*/) {}
virtual void SetDebugLevel(Int_t level) {fDebug = level;}
Float_t GetMultiplicityOfStrip(Float_t mult, Float_t Eprev, Float_t Enext, Int_t det, Char_t ring);
+ void GetVertex(Double_t* vertexXYZ) ;
void SetFMDData(AliESDFMD* fmd) {foutputESDFMD = fmd;}
void SetVertex(AliESDVertex* vertex) {fEsdVertex = vertex;}
void SetInputESD(AliESDEvent* esd) {fESD = esd;}