--- /dev/null
+
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * *
+ * Author: Satyajit Jena. *
+ * Contributors are mentioned in the code where appropriate. *
+ * *
+ * Permission to use, copy, modify and distribute this software and its *
+ * documentation strictly for non-commercial purposes is hereby granted *
+ * without fee, provided that the above copyright notice appears in all *
+ * copies and that both the copyright notice and this permission notice *
+ * appear in the supporting documentation. The authors make no claims *
+ * about the suitability of this software for any purpose. It is *
+ * provided "as is" without express or implied warranty. *
+ **************************************************************************/
+
+/*-------------------------------------------------------------------------
+ * AliEbyECFAnalysisTask Class
+ * This class deals with runing Charge Fluctuation Task
+ * origin: Satyajit Jena <sjena@cern.ch>
+ * CF: Charge Fluctuation
+ *------------------------------------------------------------------------*/
+
+
+#include "TChain.h"
+#include "TString.h"
+#include "TList.h"
+#include "TFile.h"
+#include "TTree.h"
+#include "TH1F.h"
+#include "TH2F.h"
+#include "TH3D.h"
+#include "TCanvas.h"
+#include "AliAnalysisManager.h"
+#include "AliVEvent.h"
+#include "AliESD.h"
+#include "AliESDEvent.h"
+#include "AliAODEvent.h"
+#include "AliEbyEEventBase.h"
+#include "AliEbyEChargeFluctuationAnalysis.h"
+#include "AliEbyECFAnalysisTask.h"
+
+ClassImp(AliEbyECFAnalysisTask)
+
+//________________________________________________________________________
+AliEbyECFAnalysisTask::AliEbyECFAnalysisTask(const char *name)
+ : AliAnalysisTaskSE(name),
+ fListPhy(0),
+ fEbyECFBase(0),
+ fEvtCounter(0),
+ fECnt(0)
+
+{
+ // DefineInput(0, TChain::Class());
+ DefineOutput(1, TList::Class());
+}
+
+//________________________________________________________________________
+void AliEbyECFAnalysisTask::UserCreateOutputObjects()
+{
+ fListPhy = new TList();
+
+ fEvtCounter = new TH1F("hEvtCounter","Event Statistic",50,0,50);
+ fListPhy->Add(fEvtCounter);
+
+ fListPhy->Add(dynamic_cast<AliEbyEEventBase*>(fEbyECFBase->GetEbyEEventBaseObject())->GetQA());
+ fListPhy->Add(fEbyECFBase->GetListCFQA());
+ fListPhy->Add(fEbyECFBase->GetListMeasureCF());
+
+ PostData(1, fListPhy);
+}
+
+//________________________________________________________________________
+void AliEbyECFAnalysisTask::UserExec(Option_t *)
+{
+
+ fEvtCounter->Fill(0);
+ fECnt++;
+
+ TString gAnalType = dynamic_cast<AliEbyEEventBase*>(fEbyECFBase->GetEbyEEventBaseObject())->GetAnalysisLevel();
+
+ if(gAnalType == "ESD")
+ {
+ AliESDEvent* gESD = dynamic_cast<AliESDEvent*>(InputEvent());
+ if (!gESD) {
+ Printf("ERROR: gESD not available");
+ return;
+ }
+ const AliESDVertex *vertex = dynamic_cast<AliEbyEEventBase*>(fEbyECFBase->GetEbyEEventBaseObject())->GetVertex(gESD,dynamic_cast<AliEbyEEventBase*>(fEbyECFBase->GetEbyEEventBaseObject())->GetAnalysisMode(),dynamic_cast<AliEbyEEventBase*>(fEbyECFBase->GetEbyEEventBaseObject())->GetVxMax(),dynamic_cast<AliEbyEEventBase*>(fEbyECFBase->GetEbyEEventBaseObject())->GetVyMax(),dynamic_cast<AliEbyEEventBase*>(fEbyECFBase->GetEbyEEventBaseObject())->GetVzMax());
+ if(vertex){
+
+ fEbyECFBase->Analyze(gESD);
+ }
+
+ }
+ PostData(1, fListPhy);
+
+}
+
+//______________________________________________________________________//
+void AliEbyECFAnalysisTask::Terminate(Option_t *) {
+
+fListPhy = dynamic_cast<TList*> (GetOutputData(1));
+ if (!fListPhy) {
+ Error("Terminate","Out Put List not available");
+ return;
+ }
+
+ Info("AliEbyECFAnalysisTask","Charge Fluctuation Job Successfully finished");
+
+}
--- /dev/null
+#ifndef ALIEBYECFANALYSISTASK_H\r
+#define ALIEBYECFANALYSISTASK_H\r
+\r
+\r
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *\r
+ * See cxx source for full Copyright notice */\r
+\r
+/*-------------------------------------------------------------------------\r
+ * AliEbyECFAnalysisTask Class \r
+ * This class deals with runing Charge Fluctuation Task \r
+ * origin: Satyajit Jena <sjena@cern.ch>\r
+ * \r
+ *------------------------------------------------------------------------*/\r
+\r
+class TString;\r
+class TH1F;\r
+class TH2F;\r
+\r
+class TList;\r
+\r
+#include "AliAnalysisTaskSE.h"\r
+\r
+class AliEbyEEventBase;\r
+class AliEbyEChargeFluctuationAnalysis;\r
+\r
+class AliEbyECFAnalysisTask: public AliAnalysisTaskSE {\r
+ public:\r
+ AliEbyECFAnalysisTask(const char *name = "AliEbyECFAnalysisTask");\r
+ virtual ~AliEbyECFAnalysisTask() {}\r
+ \r
+ virtual void UserCreateOutputObjects();\r
+ virtual void UserExec(Option_t *option);\r
+ virtual void Terminate(Option_t *);\r
+ \r
+ void SetAnalysisObject(AliEbyEChargeFluctuationAnalysis *const analysis) { fEbyECFBase = analysis;}\r
+\r
+ private:\r
+\r
+ TList *fListPhy;\r
+\r
+ AliEbyEChargeFluctuationAnalysis *fEbyECFBase;\r
+ TH1F *fEvtCounter;\r
+ Int_t fECnt;\r
+ \r
+ AliEbyECFAnalysisTask(const AliEbyECFAnalysisTask&); \r
+ AliEbyECFAnalysisTask& operator=(const AliEbyECFAnalysisTask&); \r
+ \r
+ ClassDef(AliEbyECFAnalysisTask, 1); \r
+};\r
+\r
+#endif\r
+\r
--- /dev/null
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * *
+ * Author: Satyajit Jena . *
+ * Contributors are mentioned in the code where appropriate. *
+ * *
+ * Permission to use, copy, modify and distribute this software and its *
+ * documentation strictly for non-commercial purposes is hereby granted *
+ * without fee, provided that the above copyright notice appears in all *
+ * copies and that both the copyright notice and this permission notice *
+ * appear in the supporting documentation. The authors make no claims *
+ * about the suitability of this software for any purpose. It is *
+ * provided "as is" without express or implied warranty. *
+ **************************************************************************/
+
+/*-------------------------------------------------------------------------
+ *
+ * AliEbyEChargeFluctuationAnalysis base class
+ * This class deals with the Charge fluctuation
+ * Origin: Satyajit Jena <sjena@cern.ch>
+ *
+ ------------------------------------------------------------------------*/
+
+#include <Riostream.h>
+#include <TFile.h>
+#include <TSystem.h>
+#include <TF1.h>
+#include <TH3F.h>
+#include <TH2D.h>
+#include <TH1D.h>
+#include <TH1I.h>
+#include <TParticle.h>
+#include <TList.h>
+
+#include <AliExternalTrackParam.h>
+#include <AliAODEvent.h>
+#include <AliESDEvent.h>
+#include <AliESDtrack.h>
+#include <AliAODTrack.h>
+#include <AliMCParticle.h>
+#include <AliPID.h>
+#include <AliStack.h>
+#include <AliCFContainer.h>
+#include <AliCFEffGrid.h>
+#include <AliCFDataGrid.h>
+#include <AliTPCPIDResponse.h>
+#include <AliESDpid.h>
+#include "AliEbyEEventBase.h"
+#include "AliEbyEChargeFluctuationAnalysis.h"
+
+
+ClassImp(AliEbyEChargeFluctuationAnalysis)
+
+//____________________________________________________________________//
+AliEbyEChargeFluctuationAnalysis::AliEbyEChargeFluctuationAnalysis() :
+ TObject(),
+ fListCFQA(0),
+ fListMeasureCF(0),
+ fEbyEBase(0)
+{
+ InitHistos();
+ //Default constructor
+}
+
+
+//____________________________________________________________________//
+AliEbyEChargeFluctuationAnalysis::~AliEbyEChargeFluctuationAnalysis() {
+ //Default destructor
+ if(fEbyEBase) delete fEbyEBase;
+ if(fListCFQA) delete fListCFQA;
+ if(fListMeasureCF) delete fListMeasureCF;
+
+}
+
+//____________________________________________________________________//
+void AliEbyEChargeFluctuationAnalysis::InitHistos() {
+
+ fListCFQA = new TList();
+ fListCFQA->SetName("MFQaList");
+
+ fListMeasureCF = new TList();
+ fListMeasureCF->SetName("MFMeasureList");
+
+ TH1F *fEvtStat = new TH1F("hEventCounterMH"," Event Counters for MF Analysis", 20,0,20);
+ fListCFQA->Add(fEvtStat); // --:0
+
+
+ // Int_t kCentBin = fEbyEBase->GetCentralityBin();
+ Int_t kCentBin = 50;
+Int_t kMultBin = 2000;
+ Double_t kMultMin = 0.0;
+ Double_t kMultMax = 2000;
+
+ TH2F *fhCentralityV0 = new TH2F("hCentralityV0", "Total Charge Fuctuation", kCentBin,0, (Double_t)kCentBin, 3000,0,30000);
+ fhCentralityV0->GetXaxis()->SetTitle(" #-");
+ fhCentralityV0->GetYaxis()->SetTitle("Frequency");
+
+ fListCFQA->Add(fhCentralityV0); // --:1
+
+ TH2F *fNChargeFluc = new TH2F("hNChargeFluc", "Total Charge Fuctuation",kCentBin,0, (Double_t)kCentBin, kMultBin,kMultMin, kMultMax);
+ fNChargeFluc->GetXaxis()->SetTitle(" #-");
+ fNChargeFluc->GetYaxis()->SetTitle("Frequency");
+ fListMeasureCF->Add(fNChargeFluc); // -->:0
+
+ TH2F *fNpChargeFluc = new TH2F("hNpChargeFluc", "Possitive Charge Fuctuation",kCentBin,0, (Double_t)kCentBin, kMultBin,kMultMin, kMultMax);
+ fNpChargeFluc->GetXaxis()->SetTitle(" #-");
+ fNpChargeFluc->GetYaxis()->SetTitle("Frequency");
+ fListMeasureCF->Add(fNpChargeFluc); // -->:1
+
+ TH2F *fNnChargeFluc = new TH2F("hNnChargeFluc", "Negative Charge Fuctuation", kCentBin,0, (Double_t)kCentBin, kMultBin,kMultMin, kMultMax);
+ fNnChargeFluc->GetXaxis()->SetTitle(" #-");
+ fNnChargeFluc->GetYaxis()->SetTitle("Frequency");
+ fListMeasureCF->Add(fNpChargeFluc); // -->:2
+
+ TH2F *fNnbpFluc = new TH2F("hNnbpFluc", "[-/+] Fuctuation",kCentBin,0, (Double_t)kCentBin, 100,0,10);
+ fNnbpFluc->GetXaxis()->SetTitle(" #-");
+ fNnbpFluc->GetYaxis()->SetTitle("Frequency");
+ fListMeasureCF->Add(fNnbpFluc); // -->:3
+
+ TH2F *fNpbnFluc = new TH2F("hNpbnFluc", "[+/-] Fuctuation",kCentBin,0, (Double_t)kCentBin, 100,0,10);
+ fNpbnFluc->GetXaxis()->SetTitle(" #-");
+ fNpbnFluc->GetYaxis()->SetTitle("Frequency");
+ fListMeasureCF->Add(fNpbnFluc); // -->:4
+
+ TH2F *fNFluc = new TH2F("hNFluc", "N [(+/-) - (-/+)] Fuctuation",kCentBin,0, (Double_t)kCentBin,100,-5,5);
+ fNFluc->GetXaxis()->SetTitle(" #-");
+ fNFluc->GetYaxis()->SetTitle("Frequency");
+ fListMeasureCF->Add(fNFluc); // -->:5
+
+}
+
+
+//____________________________________________________________________//
+void AliEbyEChargeFluctuationAnalysis::Analyze(AliESDEvent* esd) {
+
+ // Analysis from ESD
+ ((TH1F*)(fListCFQA->At(0)))->Fill(1.);
+
+ Int_t kCent = 1;
+
+ TObjArray *array = new TObjArray();
+ Int_t itr = esd->GetNumberOfTracks();
+ for (Int_t iTracks = 0; iTracks < itr; iTracks++)
+ {
+ AliESDtrack* track = esd->GetTrack(iTracks);
+ if (!track) continue;
+ array->Add(track);
+ }
+
+ Calculate(array,kCent);
+
+ delete array;
+}
+
+
+//____________________________________________________________________//
+void AliEbyEChargeFluctuationAnalysis::Analyze(AliAODEvent* aod) {
+ // Analysis from AOD
+ ((TH1F*)(fListCFQA->At(0)))->Fill(1.);
+
+ printf("%d\n",aod->GetNTracks());
+
+
+}
+
+
+//____________________________________________________________________//
+void AliEbyEChargeFluctuationAnalysis::Analyze(AliStack* stack) {
+ // Analysis from MC stack
+ ((TH1F*)(fListCFQA->At(0)))->Fill(1.);
+
+ printf("%d \n",stack->GetNtrack());
+
+}
+
+//____________________________________________________________________________//
+void AliEbyEChargeFluctuationAnalysis::Calculate(TObjArray *gTrackArray, Int_t cent){
+
+ Int_t i = 0;
+ AliVParticle* track = 0;
+ Int_t pCharge = 0;
+ Int_t nCharge = 0;
+ Int_t gNtrack = gTrackArray->GetEntries();
+ TString gAnalysisLevel = fEbyEBase->GetAnalysisLevel();
+ Double_t par[6] = {0.0};
+
+ for(i = 0; i < gNtrack; i++) {
+ if(gAnalysisLevel == "ESD")
+ track = dynamic_cast<AliESDtrack*>(gTrackArray->At(i));
+ else if(gAnalysisLevel == "AOD")
+ track = dynamic_cast<AliAODTrack *>(gTrackArray->At(i));
+ else if(gAnalysisLevel == "MC")
+ track = dynamic_cast<AliMCParticle *>(gTrackArray->At(i));
+ Short_t charge = track->Charge();
+ if(charge > 0) pCharge += 1;
+ if(charge < 0) nCharge += 1;
+ }
+
+ par[0] = (Double_t)pCharge;
+ par[1] = (Double_t)nCharge;
+ par[2] = (Double_t)pCharge + (Double_t)nCharge;
+
+ if(pCharge != 0 ) par[3] = (Double_t)pCharge/(Double_t)nCharge;
+ if(nCharge != 0 ) par[4] = (Double_t)nCharge/(Double_t)pCharge;
+
+ par[5] = (Double_t)pCharge - (Double_t)nCharge;
+
+ ((TH2F*)(fListMeasureCF->At(0)))->Fill(cent, par[2]);
+ ((TH2F*)(fListMeasureCF->At(1)))->Fill(cent, par[0]);
+ ((TH2F*)(fListMeasureCF->At(2)))->Fill(cent, par[1]);
+ ((TH2F*)(fListMeasureCF->At(3)))->Fill(cent, par[4]);
+ ((TH2F*)(fListMeasureCF->At(4)))->Fill(cent, par[3]);
+ ((TH2F*)(fListMeasureCF->At(5)))->Fill(cent, par[5]);
+
+}
--- /dev/null
+#ifndef ALIEBYECHARGEFLUCTUATIONANALYSIS_H
+#define ALIEBYECHARGEFLUCTUATIONANALYSIS_H
+
+/*------------------------------------------------------------------------
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved.
+ * See cxx source for full Copyright notice
+ *
+ *-----------------------------------------------------------------------*/
+
+/*-------------------------------------------------------------------------
+ *
+ * AliEbyEChargeFluctuationAnalysis base class
+ * This class deals with the Charge fluctuation
+ * Origin: Satyajit Jena <sjena@cern.ch>
+ *
+ ------------------------------------------------------------------------*/
+
+#include "TObject.h"
+#include "TH1I.h"
+
+class TF1;
+class TH2D;
+class TH1F;
+class TList;
+class AliAODEvent;
+class AliAODtrack;
+class AliESDEvent;
+class AliESDtrack;
+class AliStack;
+class AliESDVertex;
+
+class AliEbyEEventBase;
+
+
+class AliEbyEChargeFluctuationAnalysis : public TObject {
+ public:
+
+ AliEbyEChargeFluctuationAnalysis();
+ virtual ~AliEbyEChargeFluctuationAnalysis();
+
+ void SetBaseAnalysis(AliEbyEEventBase * const baseAnalysis) {
+ fEbyEBase = baseAnalysis;}
+ AliEbyEEventBase *GetEbyEEventBaseObject() const {
+ return fEbyEBase;}
+
+ void InitHistos();
+
+ void Analyze(AliESDEvent *esd);
+ void Analyze(AliAODEvent *aod);
+ void Analyze(AliStack *stack);
+
+ void Calculate(TObjArray *gTrackArray, Int_t cent);
+ TList *GetListCFQA() const {return fListCFQA;}
+ TList *GetListMeasureCF() const {return fListMeasureCF;}
+
+
+ private:
+TList *fListCFQA; //! Global list
+TList *fListMeasureCF; //! List Of Mesures for Multiplisity Fluctuation
+AliEbyEEventBase *fEbyEBase;//EbyE Events base
+
+AliEbyEChargeFluctuationAnalysis(const AliEbyEChargeFluctuationAnalysis&); //! Not implemented
+AliEbyEChargeFluctuationAnalysis& operator=(const AliEbyEChargeFluctuationAnalysis&); //! Not implemented
+
+ClassDef(AliEbyEChargeFluctuationAnalysis,1);
+};
+
+#endif
--- /dev/null
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * *
+ * Author: Satyajit Jena. *
+ * Contributors are mentioned in the code where appropriate. *
+ * *
+ * Permission to use, copy, modify and distribute this software and its *
+ * documentation strictly for non-commercial purposes is hereby granted *
+ * without fee, provided that the above copyright notice appears in all *
+ * copies and that both the copyright notice and this permission notice *
+ * appear in the supporting documentation. The authors make no claims *
+ * about the suitability of this software for any purpose. It is *
+ * provided "as is" without express or implied warranty. *
+ **************************************************************************/
+
+//-----------------------------------------------------------------
+// AliEbyEEventBase class
+// This is the class to deal with the EbyE Fluctuation analysis
+// Origin: Satyajit Jena, sjena@cern.ch
+//-----------------------------------------------------------------
+#include <Riostream.h>
+#include <TCanvas.h>
+#include <TLatex.h>
+#include <TH2F.h>
+#include <TList.h>
+#include <TH1F.h>
+#include <THnSparse.h>
+#include <AliExternalTrackParam.h>
+#include <AliESDEvent.h>
+#include <AliPID.h>
+#include <AliVertexerTracks.h>
+#include <AliESDpid.h>
+#include <AliTPCPIDResponse.h>
+#include <AliAODTrack.h>
+#include <AliMCParticle.h>
+#include <AliESDCentrality.h>
+#include <AliCentralitySelectionTask.h>
+#include <AliESDVZERO.h>
+class AliLog;
+class AliESDVertex;
+
+#include "AliEbyEEventBase.h"
+
+ClassImp(AliEbyEEventBase)
+
+//____________________________________________________________________//
+AliEbyEEventBase::AliEbyEEventBase() : TObject(),
+ fAnalysisLevel("ESD"),
+ fAnalysisMode(kTPC),
+ fDebugMode(kFALSE),
+ fPhySel(0),
+ fListQA(0),
+ fNBinsX(0),
+ fMinX(0),
+ fMaxX(0),
+ fNBinsY(0),
+ fMinY(0),
+ fMaxY(0),
+ fVxMax(20.),
+ fVyMax(20.),
+ fVzMax(20.),
+ fCentralityType(kFlat),
+ fCentralityBin(50),
+ fCentralityEstimator("V0M"),
+ fCentralityPointer(0),
+ fFile1(""),
+ fFile2("") {
+ //Default constructor
+
+ fListQA = new TList();
+ fListQA->SetName("fListQA");
+ TH1F *gHistVx = new TH1F("gHistVx",
+ "Vx distribution;V_{x} [cm];Entries",
+ 100,-5.,5.);
+ gHistVx->SetFillColor(kRed-2);
+ fListQA->Add(gHistVx);//0
+ TH1F *gHistVxAccepted = new TH1F("gHistVxaccepted",
+ "Vx distribution;V_{x} [cm];Entries",
+ 100,-5.,5.);
+ fListQA->Add(gHistVxAccepted); //1
+ TH1F *gHistVy = new TH1F("gHistVy",
+ "Vy distribution;V_{y} [cm];Entries",
+ 100,-5.,5.);
+ gHistVy->SetFillColor(kRed-2);
+ fListQA->Add(gHistVy);//2
+ TH1F *gHistVyAccepted = new TH1F("gHistVyaccepted",
+ "Vy distribution;V_{y} [cm];Entries",
+ 100,-5.,5.);
+ fListQA->Add(gHistVyAccepted);//3
+ TH1F *gHistVz = new TH1F("gHistVz",
+ "Vz distribution;V_{z} [cm];Entries",
+ 100,-25.,25.);
+ gHistVz->SetFillColor(kRed-2);
+ fListQA->Add(gHistVz);//4
+ TH1F *gHistVzAccepted = new TH1F("gHistVzaccepted",
+ "Vz distribution;V_{z} [cm];Entries",
+ 100,-25.,25.);
+ fListQA->Add(gHistVzAccepted);//5
+
+
+ TH2F *hCentralityQA = new TH2F("HCentralityQA","Tracks In Centrality",fCentralityBin+1,0,(Double_t)fCentralityBin+1,1000,0,20000);
+ fListQA->Add(hCentralityQA);//6
+}
+
+//____________________________________________________________________//
+AliEbyEEventBase::~AliEbyEEventBase() {
+ if(fListQA) delete fListQA;
+
+}
+
+//____________________________________________________________________//
+const AliESDVertex* AliEbyEEventBase::GetVertex(AliESDEvent* esd,
+ AnalysisMode mode,
+ Double_t gVxMax,
+ Double_t gVyMax,
+ Double_t gVzMax) {
+ // Vertex selection
+ const AliESDVertex* vertex = 0;
+ if((mode == kITS)||(mode == kTPCnITS))
+ vertex = esd->GetPrimaryVertexSPD();
+ else if(mode == kTPC){
+ Double_t kBz = esd->GetMagneticField();
+ AliVertexerTracks vertexer(kBz);
+ vertexer.SetTPCMode();
+ AliESDVertex *vTPC = vertexer.FindPrimaryVertex(esd);
+ esd->SetPrimaryVertexTPC(vTPC);
+ for (Int_t i=0; i<esd->GetNumberOfTracks(); i++) {
+ AliESDtrack *t = esd->GetTrack(i);
+ t->RelateToVertexTPC(vTPC, kBz, kVeryBig);
+ }
+ delete vTPC;
+ vertex = esd->GetPrimaryVertexTPC();
+ }
+ else if(mode == kGlobal)
+ vertex = esd->GetPrimaryVertex();
+ else
+ Printf("GetVertex: ERROR: Invalid second argument %d", mode);
+
+ if(!vertex) {
+ // if(fDebugMode)
+ Printf("GetVertex: Event rejected because there is no valid vertex object");
+ return 0;
+ }
+
+
+ // check resolution
+ Double_t zRes = vertex->GetZRes();
+ if(zRes == 0) {
+ if(fDebugMode)
+ Printf("GetVertex: Event rejected because the value of the vertex resolution in z is 0");
+ return 0;
+ }
+ ((TH1F *)(fListQA->At(0)))->Fill(vertex->GetXv());
+ ((TH1F *)(fListQA->At(2)))->Fill(vertex->GetYv());
+ ((TH1F *)(fListQA->At(4)))->Fill(vertex->GetZv());
+
+ //check position
+ if(TMath::Abs(vertex->GetXv()) > gVxMax) {
+ if(fDebugMode)
+ Printf("GetVertex: Event rejected because it has a Vx value of %lf cm (accepted interval: -%lf - %lf)",TMath::Abs(vertex->GetXv()),gVxMax,gVxMax);
+ return 0;
+ }
+ if(TMath::Abs(vertex->GetYv()) > gVyMax) {
+ if(fDebugMode)
+ Printf("GetVertex: Event rejected because it has a Vy value of %lf cm (accepted interval: -%lf - %lf)",TMath::Abs(vertex->GetYv()),gVyMax,gVyMax);
+ return 0;
+ }
+ if(TMath::Abs(vertex->GetZv()) > gVzMax) {
+ if(fDebugMode)
+ Printf("GetVertex: Event rejected because it has a Vz value of %lf cm (accepted interval: -%lf - %lf)",TMath::Abs(vertex->GetZv()),gVzMax,gVzMax);
+ return 0;
+ }
+ ((TH1F *)(fListQA->At(1)))->Fill(vertex->GetXv());
+ ((TH1F *)(fListQA->At(3)))->Fill(vertex->GetYv());
+ ((TH1F *)(fListQA->At(5)))->Fill(vertex->GetZv());
+
+ return vertex;
+}
+
+//____________________________________________________________________//
+Int_t AliEbyEEventBase::GetCentrality(AliESDEvent *esd) const {
+ //Get the centrality
+ AliESDCentrality *centrality = esd->GetCentrality();
+ Int_t cent = -1;
+
+ if(fCentralityType == kHardFlat) {
+ AliESDVZERO* esdV0 = esd->GetVZEROData();
+ Double_t mult = esdV0->GetMTotV0A() + esdV0->GetMTotV0C();
+
+ ((TH2F *)(fListQA->At(6)))->Fill(50,mult);
+
+ if(fAnalysisLevel == "ESD") cent = FindCentralityESD(mult);
+ if(fAnalysisLevel == "MC") cent = FindCentralityMC(mult);
+ if(cent > -1) ((TH2F *)(fListQA->At(6)))->Fill(cent,mult);
+ return cent;
+ }
+
+ if(fCentralityType == kHardAcc) {
+ AliESDVZERO* esdV0 = esd->GetVZEROData();
+ Double_t mult = esdV0->GetMTotV0A() + esdV0->GetMTotV0C();
+ ((TH2F *)(fListQA->At(6)))->Fill(50,mult);
+ if(fAnalysisLevel == "ESD") cent = FindCentralityESD(mult);
+ if(fAnalysisLevel == "MC") cent = FindCentralityMC(mult);
+ if(cent > -1) ((TH2F *)(fListQA->At(6)))->Fill(cent,mult);
+ return cent;
+ }
+
+ if(fCentralityType == kAll) {
+ if(centrality->IsEventInCentralityClass(0,100,fCentralityEstimator)) return 0;
+ }
+ if(fCentralityType == kFlat) {
+ for(int i = 0; i < 50; i++) {
+ if(centrality->IsEventInCentralityClass(i*2,i*2+2,fCentralityEstimator)) {
+ cent = i;
+ break;
+ }
+ }
+ }
+
+ if(fCentralityType == kAcc) {
+ for(int i = 0; i < 50; i++) {
+ if(centrality->IsEventInCentralityClass(0,i*2+2,fCentralityEstimator)) {
+ cent = i;
+ break;
+ }
+ }
+ }
+
+ return cent;
+}
+
+//____________________________________________________________________//
+Int_t AliEbyEEventBase::FindCentralityESD(Double_t mult) const {
+ //hardcoded centrality bins (to be removed)
+ Double_t data[101] = { 250000.0,
+ 17760.0, 16870.0, 16070.0, 15360.0, 14660.0,
+ 13970.0, 13320.0, 12700.0, 12140.0, 11570.0,
+ 11020.0, 10530.0, 10030.0, 9560.0, 9110.0,
+ 8680.0, 8270.0, 7870.0, 7490.0, 7120.0,
+ 6780.0, 6440.0, 6120.0, 5810.0, 5510.0,
+ 5230.0, 4950.0, 4690.0, 4440.0, 4190.0,
+ 3960.0, 3740.0, 3530.0, 3330.0, 3130.0,
+ 2940.0, 2770.0, 2600.0, 2440.0, 2290.0,
+ 2150.0, 2010.0, 1880.0, 1760.0, 1640.0,
+ 1540.0, 1440.0, 1350.0, 1260.0, 1180.0,
+ 1110.0, 1030.0, 970.0, 900.0, 840.0,
+ 790.0, 740.0, 700.0, 650.0, 610.0,
+ 580.0, 540.0, 510.0, 480.0, 450.0,
+ 430.0, 400.0, 380.0, 360.0, 340.0,
+ 320.0, 300.0, 290.0, 270.0, 250.0,
+ 240.0, 230.0, 210.0, 200.0, 190.0,
+ 180.0, 170.0, 160.0, 150.0, 150.0,
+ 140.0, 130.0, 120.0, 120.0, 110.0,
+ 100.0, 100.0, 90.0, 90.0, 80.0,
+ 80.0, 80.0, 70.0, 70.0, 70.0 };
+
+
+ if(fCentralityType == kHardFlat) {
+ for(Int_t i = 0; i < 100; i+=2) {
+
+ if( (mult < data[i]) && (mult >= data[i+2]) )
+ return i/2;
+ }
+ }
+ if(fCentralityType == kHardAcc) {
+ for(int i = 0; i < 100; i+=2) {
+ if((mult < data[0]) && (mult >data[i+2]) ) {
+ return i/2;
+ }
+ }
+ }
+
+return -2;
+
+
+}
+
+//____________________________________________________________________//
+Int_t AliEbyEEventBase::FindCentralityMC(Double_t mult) const {
+ //hardcoded centrality bins (MC) ==> to be removed
+ Double_t data[101] = { 250000.0, 17760.0, 16870.0, 16070.0, 15360.0,
+ 14660.0, 13970.0, 13320.0, 12700.0, 12140.0,
+ 11570.0,
+ 11020.0, 10530.0, 10030.0, 9560.0, 9110.0,
+ 8680.0, 8270.0, 7870.0, 7490.0, 7120.0,
+ 6780.0, 6440.0, 6120.0, 5810.0, 5510.0,
+ 5230.0, 4950.0, 4690.0, 4440.0, 4190.0,
+ 3960.0, 3740.0, 3530.0, 3330.0, 3130.0,
+ 2940.0, 2770.0, 2600.0, 2440.0, 2290.0,
+ 2150.0, 2010.0, 1880.0, 1760.0, 1640.0,
+ 1540.0, 1440.0, 1350.0, 1260.0, 1180.0,
+ 1110.0, 1030.0, 970.0, 900.0, 840.0,
+ 790.0, 740.0, 700.0, 650.0, 610.0,
+ 580.0, 540.0, 510.0, 480.0, 450.0,
+ 430.0, 400.0, 380.0, 360.0, 340.0,
+ 320.0, 300.0, 290.0, 270.0, 250.0,
+ 240.0, 230.0, 210.0, 200.0, 190.0,
+ 180.0, 170.0, 160.0, 150.0, 150.0,
+ 140.0, 130.0, 120.0, 120.0, 110.0,
+ 100.0, 100.0, 90.0, 90.0, 80.0,
+ 80.0, 80.0, 70.0, 70.0, 70.0
+ };
+
+ if(fCentralityType == kHardFlat) {
+ for(Int_t i = 0; i < 100; i+=2) {
+ if( (mult < data[i]) && (mult >= data[i+2]) )
+ return i/2;
+ }
+ }
+ if(fCentralityType == kHardAcc) {
+ for(int i = 0; i < 100; i+=2) {
+ if((mult < data[0]) && (mult >= data[i+2]) ) {
+ return i/2;
+ }
+ }
+ }
+
+ return -3;
+}
+
--- /dev/null
+#ifndef ALIEBYEEVENTBASE_H
+#define ALIEBYEEVENTBASE_H
+
+
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice */
+
+/*-------------------------------------------------------------------------
+ * AliEbyEEventBase Base Class
+ * This class deals with Selectoin of Events fot MF and CF Analysis
+ * origin: Satyajit Jena <sjena@cern.ch>
+ *
+ *------------------------------------------------------------------------*/
+
+#include "TObject.h"
+#include "TString.h"
+class TH1F;
+class TH2F;
+class TList;
+
+#include "AliPhysicsSelection.h"
+#include "AliBackgroundSelection.h"
+#include "AliPID.h"
+#include "AliESDCentrality.h"
+#include "AliCentralitySelectionTask.h"
+class AliESDEvent;
+class AliESDtrack;
+class AliESDVertex;
+class AliAODTrack;
+class AliMCParticle;
+
+class AliEbyEEventBase : public TObject {
+ public:
+ enum TriggerMode { kMB1 = 0, kMB2, kSPDFASTOR };
+ enum AnalysisMode { kInvalid = -1, kTPC = 0, kITS, kTPCnITS, kForward, kGlobal };
+ enum CentralityType { kHardFlat = 0, kHardAcc, kAll, kFlat, kAcc};
+ //____________________________________________________________________________//
+ AliEbyEEventBase();
+ virtual ~AliEbyEEventBase();
+ //____________________________________________________________________________//
+ void SetAnalysisLevel(const char* type) {fAnalysisLevel = type; }
+ const char *GetAnalysisLevel() {return fAnalysisLevel.Data(); }
+ void SetAnalysisMode(AnalysisMode analysismode) {fAnalysisMode = analysismode;}
+ AnalysisMode GetAnalysisMode() const {return fAnalysisMode;}
+ void SetDebugMode() {fDebugMode = kTRUE;}
+ //____________________________________________________________________________//
+ /* void OfflineTriggerInit() {
+ kUseOfflineTrigger = kTRUE;
+ fPhySel = new AliPhysicsSelection();
+ fPhySel->AddBackgroundIdentification(new AliBackgroundSelection());
+ fPhySel->SetAnalyzeMC(fAnalysisMC);
+ }
+
+ Bool_t IsOfflineTriggerUsed() {return kUseOfflineTrigger;}
+ AliPhysicsSelection *GetPhysicsSelectionObject() {return fPhySel;}*/
+ //____________________________________________________________________________//
+
+ void SetPhaseSpace(Int_t nBinsX, Double_t gXmin, Double_t gXmax,
+ Int_t nBinsY, Double_t gYmin, Double_t gYmax) {
+ fNBinsX = nBinsX; fMinX = gXmin; fMaxX = gXmax;
+ fNBinsY = nBinsY; fMinY = gYmin; fMaxY = gYmax;
+ }
+
+ Int_t GetNBinsX() const {return fNBinsX;}
+ Int_t GetNBinsY() const {return fNBinsY;}
+ Double_t GetMinX() const {return fMinX;}
+ Double_t GetMinY() const {return fMinY;}
+ Double_t GetMaxX() const {return fMaxX;}
+ Double_t GetMaxY() const {return fMaxY;}
+
+ // Bool_t IsInPhaseSpace(AliESDtrack *track);
+
+ //____________________________________________________________________________//
+
+ const AliESDVertex *GetVertex(AliESDEvent *esd,
+ AnalysisMode mode,
+ Double_t gVx = 100.,
+ Double_t gVy = 100.,
+ Double_t gVz = 100.);
+
+ void SetAcceptedVertexDiamond(Double_t gVx, Double_t gVy, Double_t gVz) {
+ fVxMax = gVx;
+ fVyMax = gVy;
+ fVzMax = gVz;
+ }
+ Double_t GetVxMax() const {return fVxMax;}
+ Double_t GetVyMax() const {return fVyMax;}
+ Double_t GetVzMax() const {return fVzMax;}
+ //____________________________________________________________________________//
+
+ TList *GetQA() {return fListQA;}
+ //____________________________________________________________________________//
+
+ void SetCentralityType(CentralityType centralitytype) {fCentralityType = centralitytype;}
+ CentralityType GetCentralityType() const {return fCentralityType;}
+ void SetCentralityBin(Int_t cBin) { fCentralityBin = cBin;}
+ Int_t GetCentrality(AliESDEvent *esd) const;
+ void SetCentralityEstimator(const char *estimator) { fCentralityEstimator = estimator;}
+ const char *GetCentralityEstimator() {return fCentralityEstimator.Data();}
+ const Int_t GetCentralityBin() {return fCentralityBin;}
+ void SetCentralityInputFiles(const char * file1, const char * file2) { fFile1 = file1; fFile2 = file2;
+ fCentralityPointer->SetPercentileFile(fFile1);
+ fCentralityPointer->SetPercentileFile2(fFile2);
+ }
+ AliCentralitySelectionTask *GetCentralityObject() {return fCentralityPointer;}
+ Int_t FindCentralityESD(Double_t mult) const;
+ Int_t FindCentralityMC(Double_t mult) const;
+ //____________________________________________________________________________//
+ private:
+
+ TString fAnalysisLevel; //! ESD or AOD or MC
+ AnalysisMode fAnalysisMode; //! Global, TPC, TPCnITS kForward, kGlobal
+ Bool_t fDebugMode;
+ AliPhysicsSelection *fPhySel; //! Physics Seletection
+
+
+ TList *fListQA;
+
+ Int_t fNBinsX; //! number of bins in y or eta
+ Double_t fMinX; //! max value of y or eta
+ Double_t fMaxX; //! max value of y or eta
+ Int_t fNBinsY; //! number of bins in pT
+ Double_t fMinY; //! Min value of pT
+ Double_t fMaxY; //! Max value of pT
+
+ Double_t fVxMax; //!vertex x
+ Double_t fVyMax; //!vertex x
+ Double_t fVzMax; //!vertex x
+
+ CentralityType fCentralityType; //! All | EquiDivision | Accumulated |
+ Int_t fCentralityBin; //! Centrality Bin
+ TString fCentralityEstimator; //! Centrality Estimator
+ AliCentralitySelectionTask *fCentralityPointer;
+ TString fFile1; //! file used by centrality task. Set here for bookkeeping
+ TString fFile2; //! file used by centrality task. Set here for bookkeeping
+ //____________________________________________________________________________//
+ AliEbyEEventBase(const AliEbyEEventBase&); // Not implemented
+ AliEbyEEventBase& operator=(const AliEbyEEventBase&); // Not implemented
+
+
+ ClassDef(AliEbyEEventBase,1);
+};
+
+#endif
--- /dev/null
+
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * *
+ * Author: Satyajit Jena. *
+ * Contributors are mentioned in the code where appropriate. *
+ * *
+ * Permission to use, copy, modify and distribute this software and its *
+ * documentation strictly for non-commercial purposes is hereby granted *
+ * without fee, provided that the above copyright notice appears in all *
+ * copies and that both the copyright notice and this permission notice *
+ * appear in the supporting documentation. The authors make no claims *
+ * about the suitability of this software for any purpose. It is *
+ * provided "as is" without express or implied warranty. *
+ **************************************************************************/
+
+/*-------------------------------------------------------------------------
+ * AliEbyEMFAnalysisTask Class
+ * This class deals with runing Multiplicity Fluctuation Task
+ * origin: Satyajit Jena <sjena@cern.ch>
+ * MF: Multiplicity Fluctuation
+ *------------------------------------------------------------------------*/
+
+#include "TChain.h"
+#include "TString.h"
+#include "TList.h"
+#include "TFile.h"
+#include "TTree.h"
+#include "TH1F.h"
+#include "TH2F.h"
+#include "TH3D.h"
+#include "TCanvas.h"
+#include "AliAnalysisManager.h"
+#include "AliVEvent.h"
+#include "AliESD.h"
+#include "AliESDEvent.h"
+#include "AliAODEvent.h"
+#include "AliEbyEEventBase.h"
+#include "AliEbyEMultiplicityFluctuationAnalysis.h"
+#include "AliEbyEMFAnalysisTask.h"
+
+ClassImp(AliEbyEMFAnalysisTask)
+
+//________________________________________________________________________
+AliEbyEMFAnalysisTask::AliEbyEMFAnalysisTask(const char *name)
+ : AliAnalysisTaskSE(name),
+ fListPhy(0),
+ fEbyEMFBase(0),
+ fEvtCounter(0),
+ fECnt(0)
+
+{
+ // DefineInput(0, TChain::Class());
+ DefineOutput(1, TList::Class());
+}
+
+//________________________________________________________________________
+void AliEbyEMFAnalysisTask::UserCreateOutputObjects()
+{
+ fListPhy = new TList();
+
+ fEvtCounter = new TH1F("hEvtCounter","Event Statistic",50,0,50);
+ fListPhy->Add(fEvtCounter);
+ fListPhy->Add(dynamic_cast<AliEbyEEventBase*>(fEbyEMFBase->GetEbyEEventBaseObject())->GetQA());
+ fListPhy->Add(fEbyEMFBase->GetListMFQA());
+ fListPhy->Add(fEbyEMFBase->GetListMeasureMF());
+
+ PostData(1, fListPhy);
+}
+
+//________________________________________________________________________
+void AliEbyEMFAnalysisTask::UserExec(Option_t *)
+{
+
+ fEvtCounter->Fill(0);
+ fECnt++;
+
+ TString gAnalType = dynamic_cast<AliEbyEEventBase*>(fEbyEMFBase->GetEbyEEventBaseObject())->GetAnalysisLevel();
+
+ if(gAnalType == "ESD")
+ {
+ AliESDEvent* gESD = dynamic_cast<AliESDEvent*>(InputEvent());
+ if (!gESD) {
+ Printf("ERROR: gESD not available");
+ return;
+ }
+
+ const AliESDVertex *vertex = dynamic_cast<AliEbyEEventBase*>(fEbyEMFBase->GetEbyEEventBaseObject())->GetVertex(gESD,dynamic_cast<AliEbyEEventBase*>(fEbyEMFBase->GetEbyEEventBaseObject())->GetAnalysisMode(),dynamic_cast<AliEbyEEventBase*>(fEbyEMFBase->GetEbyEEventBaseObject())->GetVxMax(),dynamic_cast<AliEbyEEventBase*>(fEbyEMFBase->GetEbyEEventBaseObject())->GetVyMax(),dynamic_cast<AliEbyEEventBase*>(fEbyEMFBase->GetEbyEEventBaseObject())->GetVzMax());
+
+ if(vertex){
+
+ fEbyEMFBase->Analyze(gESD);
+
+ }
+
+ }
+ PostData(1, fListPhy);
+
+}
+
+//______________________________________________________________________//
+void AliEbyEMFAnalysisTask::Terminate(Option_t *) {
+
+fListPhy = dynamic_cast<TList*> (GetOutputData(1));
+ if (!fListPhy) {
+ Error("Terminate","Out Put List not available");
+ return;
+ }
+
+ Info("AliEbyEMFAnalysisTask"," AliEbyEMFAnalysisTask Successfully finished");
+
+}
--- /dev/null
+#ifndef ALIEBYEMFANALYSISTASK_H\r
+#define ALIEBYEMFANALYSISTASK_H\r
+\r
+\r
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *\r
+ * See cxx source for full Copyright notice */\r
+\r
+/*-------------------------------------------------------------------------\r
+ * AliEbyEMFAnalysisTask Class \r
+ * This class deals with runing Multiplicity Fluctuation Task \r
+ * origin: Satyajit Jena <sjena@cern.ch>\r
+ * \r
+ *------------------------------------------------------------------------*/\r
+\r
+\r
+class TString;\r
+class TH1F;\r
+class TH2F;\r
+\r
+class TList;\r
+\r
+#include "AliAnalysisTaskSE.h"\r
+\r
+class AliEbyEEventBase;\r
+class AliEbyEMultiplicityFluctuationAnalysis;\r
+\r
+class AliEbyEMFAnalysisTask: public AliAnalysisTaskSE {\r
+ public:\r
+ AliEbyEMFAnalysisTask(const char *name = "AliEbyEMFAnalysisTask");\r
+ virtual ~AliEbyEMFAnalysisTask() {}\r
+ \r
+ virtual void UserCreateOutputObjects();\r
+ virtual void UserExec(Option_t *option);\r
+ virtual void Terminate(Option_t *);\r
+ \r
+ void SetAnalysisObject(AliEbyEMultiplicityFluctuationAnalysis *const analysis) { fEbyEMFBase = analysis;}\r
+\r
+ private:\r
+\r
+ TList *fListPhy;\r
+\r
+ AliEbyEMultiplicityFluctuationAnalysis *fEbyEMFBase;\r
+ TH1F *fEvtCounter;\r
+ Int_t fECnt;\r
+ \r
+ AliEbyEMFAnalysisTask(const AliEbyEMFAnalysisTask&); \r
+ AliEbyEMFAnalysisTask& operator=(const AliEbyEMFAnalysisTask&); \r
+ \r
+ ClassDef(AliEbyEMFAnalysisTask, 1); \r
+};\r
+\r
+#endif\r
+\r
--- /dev/null
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * *
+ * Author: Satyajit Jena . *
+ * Contributors are mentioned in the code where appropriate. *
+ * *
+ * Permission to use, copy, modify and distribute this software and its *
+ * documentation strictly for non-commercial purposes is hereby granted *
+ * without fee, provided that the above copyright notice appears in all *
+ * copies and that both the copyright notice and this permission notice *
+ * appear in the supporting documentation. The authors make no claims *
+ * about the suitability of this software for any purpose. It is *
+ * provided "as is" without express or implied warranty. *
+ **************************************************************************/
+
+/*-------------------------------------------------------------------------
+ *
+ * AliEbyEMultiplicityFluctuationAnalysis base class
+ * This class deals with the multiplicity fluctuation
+ * Origin: Satyajit Jena <sjena@cern.ch>
+ *
+ ------------------------------------------------------------------------*/
+
+#include <Riostream.h>
+#include <TFile.h>
+#include <TSystem.h>
+#include <TF1.h>
+#include <TH3F.h>
+#include <TH2D.h>
+#include <TH1D.h>
+#include <TH1I.h>
+#include <TParticle.h>
+#include <TList.h>
+
+#include <AliExternalTrackParam.h>
+#include <AliAODEvent.h>
+#include <AliESDEvent.h>
+#include <AliESDtrack.h>
+#include <AliAODTrack.h>
+#include <AliMCParticle.h>
+#include <AliPID.h>
+#include <AliStack.h>
+#include <AliCFContainer.h>
+#include <AliCFEffGrid.h>
+#include <AliCFDataGrid.h>
+#include <AliTPCPIDResponse.h>
+#include <AliESDpid.h>
+#include "AliEbyEEventBase.h"
+#include "AliEbyEMultiplicityFluctuationAnalysis.h"
+
+ClassImp(AliEbyEMultiplicityFluctuationAnalysis)
+
+//____________________________________________________________________//
+AliEbyEMultiplicityFluctuationAnalysis::AliEbyEMultiplicityFluctuationAnalysis() :
+ TObject(),
+ fListMFQA(0),
+ fListMeasureMF(0),
+ fEbyEBase(0)
+{
+ //Default constructor
+ InitHistos();
+
+}
+
+//____________________________________________________________________//
+AliEbyEMultiplicityFluctuationAnalysis::~AliEbyEMultiplicityFluctuationAnalysis() {
+
+ //Default destructor
+ if(fEbyEBase) delete fEbyEBase;
+ if(fListMFQA) delete fListMFQA;
+ if(fListMeasureMF) delete fListMeasureMF;
+
+}
+
+//____________________________________________________________________//
+void AliEbyEMultiplicityFluctuationAnalysis::InitHistos() {
+
+ fListMFQA = new TList();
+ fListMFQA->SetName("MFQaList");
+
+ fListMeasureMF = new TList();
+ fListMeasureMF->SetName("MFMeasureList");
+
+ TH1F *fEvtStat = new TH1F("hEventCounterMH"," Event Counters for MF Analysis", 20,0,20);
+ fListMFQA->Add(fEvtStat); // --:0
+
+ TH2F *fhMultiplicity = new TH2F("hMultiplicity"," Multiplisity in Centrality Bin", 50,0,50, 3000,0,3000);
+ fListMeasureMF->Add(fhMultiplicity); //! -->:0
+
+
+}
+
+
+//____________________________________________________________________//
+void AliEbyEMultiplicityFluctuationAnalysis::Analyze(AliESDEvent* esd) {
+
+ // Analysis from ESD
+ Int_t cent = 0;
+
+ ((TH1F*)(fListMFQA->At(0)))->Fill(1.);
+ Int_t itr = esd->GetNumberOfTracks();
+ ((TH2F*)(fListMeasureMF->At(0)))->Fill(cent,itr);
+
+}
+
+
+//____________________________________________________________________//
+void AliEbyEMultiplicityFluctuationAnalysis::Analyze(AliAODEvent* aod) {
+ // Analysis from AOD
+ ((TH1F*)(fListMFQA->At(0)))->Fill(1.);
+ printf("%d\n",aod->GetNTracks());
+
+
+}
+
+//____________________________________________________________________//
+void AliEbyEMultiplicityFluctuationAnalysis::Analyze(AliStack* stack) {
+ // Analysis from MC stack
+ ((TH1F*)(fListMFQA->At(0)))->Fill(1.);
+
+ printf("%d \n",stack->GetNtrack());
+
+
+}
--- /dev/null
+#ifndef ALIEBYEMULTIPLICITYFLUCTUATIONANALYSIS_H
+#define ALIEBYEMULTIPLICITYFLUCTUATIONANALYSIS_H
+
+
+/*------------------------------------------------------------------------
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved.
+ * See cxx source for full Copyright notice
+ *
+ *-----------------------------------------------------------------------*/
+
+/*-------------------------------------------------------------------------
+ *
+ * AliEbyEMultiplicityFluctuationAnalysis base class
+ * This class deals with the multiplicity fluctuation
+ * Origin: Satyajit Jena <sjena@cern.ch>
+ *
+ ------------------------------------------------------------------------*/
+
+
+#include "TObject.h"
+#include "TH1I.h"
+
+class TF1;
+class TH2D;
+class TH1F;
+class TList;
+class AliAODEvent;
+class AliAODtrack;
+class AliESDEvent;
+class AliESDtrack;
+class AliStack;
+
+class AliEbyEEventBase;
+
+class AliEbyEMultiplicityFluctuationAnalysis : public TObject {
+ public:
+
+ AliEbyEMultiplicityFluctuationAnalysis();
+ virtual ~AliEbyEMultiplicityFluctuationAnalysis();
+
+ void SetBaseAnalysis(AliEbyEEventBase * const baseAnalysis) { fEbyEBase = baseAnalysis;}
+ AliEbyEEventBase *GetEbyEEventBaseObject() const { return fEbyEBase;}
+
+ void InitHistos();
+
+ void Analyze(AliESDEvent *esd);
+ void Analyze(AliAODEvent *aod);
+ void Analyze(AliStack *stack);
+
+ TList *GetListMFQA() const {return fListMFQA;}
+ TList *GetListMeasureMF() {return fListMeasureMF;}
+
+ private:
+
+ TList *fListMFQA; //! Global list
+ TList *fListMeasureMF; //! List Of Mesures for Multiplisity Fluctuation
+
+ AliEbyEEventBase *fEbyEBase;//EbyE Events base
+
+ //____________________________________________________________________________//
+ AliEbyEMultiplicityFluctuationAnalysis(const AliEbyEMultiplicityFluctuationAnalysis&); //! Not implemented
+ AliEbyEMultiplicityFluctuationAnalysis& operator=(const AliEbyEMultiplicityFluctuationAnalysis&); //! Not implemented
+
+ ClassDef(AliEbyEMultiplicityFluctuationAnalysis,1);
+};
+
+#endif
--- /dev/null
+/************************************************
+ Charge Flatuation analysis task
+
+ Auther: Satyajit Jena
+ Email: sjena@cern.ch
+ Mon Oct 25 12:47:38 CEST 2010
+
+*************************************************/
+
+AliEbyECFAnalysisTask *AddTaskCF()
+{
+ AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+ if (!mgr) {
+ Error("AddTaskCF", "ERROR: No Analysis Manager");
+ return NULL;
+ }
+
+ if (!mgr->GetInputEventHandler()) {
+ Error("AddTaskCF", "ERROR: No input event handler");
+ return NULL;
+ }
+
+ TString type = mgr->GetInputEventHandler()->GetDataType();
+ TString OutName;
+ OutName="CF."+type;
+ TString outputFileName = AliAnalysisManager::GetCommonFileName();
+
+ // getting default name
+
+ outputFileName += ":PWG2EbyE_CF"; // adding directory type
+
+ gROOT->LoadMacro("$ALICE_ROOT/PWG2/EBYE/Fluctuations/macro/ConfigureCFAnalysis.C");
+
+ AliEbyEChargeFluctuationAnalysis *analysis = GetAnalysisCFObject();
+
+ AliEbyECFAnalysisTask *taskCF
+ = new AliEbyECFAnalysisTask("AliEbyECFAnalysisTask");
+
+ taskCF->SetAnalysisObject(analysis);
+
+ mgr->AddTask(taskCF);
+
+ AliAnalysisDataContainer *cout
+ = mgr->CreateContainer(OutName, TList::Class(),
+ AliAnalysisManager::kOutputContainer,
+ outputFileName.Data());
+
+ mgr->ConnectInput(taskCF, 0, mgr->GetCommonInputContainer());
+ mgr->ConnectOutput(taskCF, 1, cout);
+ return taskCF;
+
+}
+
--- /dev/null
+/************************************************
+ Multiplisity Flatuation analysis task
+
+ Auther: Satyajit Jena
+ Email: sjena@cern.ch
+ Mon Oct 25 12:47:38 CEST 2010
+
+*************************************************/
+
+AliEbyEMFAnalysisTask *AddTaskMF()
+{
+ AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+ if (!mgr) {
+ Error("AddTaskMF", "ERROR: No Analysis Manager");
+ return NULL;
+ }
+
+ if (!mgr->GetInputEventHandler()) {
+ Error("AddTaskMF", "ERROR: No input event handler");
+ return NULL;
+ }
+
+ TString type = mgr->GetInputEventHandler()->GetDataType();
+ TString OutName;
+ OutName="MF."+type;
+ TString outputFileName = AliAnalysisManager::GetCommonFileName();
+
+ // getting default name
+
+ outputFileName += ":PWG2EbyE_MF"; // adding directory type
+
+ gROOT->LoadMacro("$ALICE_ROOT/PWG2/EBYE/Fluctuations/macro/ConfigureMFAnalysis.C");
+
+ AliEbyEMultiplicityFluctuationAnalysis *analysis = GetAnalysisMFObject();
+
+ AliEbyEMFAnalysisTask *taskMF
+ = new AliEbyEMFAnalysisTask("AliEbyEMFAnalysisTask");
+
+ taskMF->SetAnalysisObject(analysis);
+
+ mgr->AddTask(taskMF);
+
+ AliAnalysisDataContainer *cout
+ = mgr->CreateContainer(OutName, TList::Class(),
+ AliAnalysisManager::kOutputContainer,
+ outputFileName.Data());
+
+ mgr->ConnectInput(taskMF, 0, mgr->GetCommonInputContainer());
+ mgr->ConnectOutput(taskMF, 1, cout);
+ return taskMF;
+
+}
+
--- /dev/null
+//__________________________________________________//
+AliEbyEChargeFluctuationAnalysis *GetAnalysisCFObject() {
+
+ gROOT->LoadMacro("$ALICE_ROOT/PWG2/EBYE/Fluctuations/macro/ConfigureEbyEBaseObject.C");
+ AliEbyEEventSelector *base = 0;
+ base = GetEbyEAnalysisBaseObject();
+
+ AliEbyEChargeFluctuationAnalysis *analysis = new AliEbyEChargeFluctuationAnalysis();
+
+ analysis->SetBaseAnalysis(base);
+ return analysis;
+}
+
--- /dev/null
+/*************************************************************************\r
+ Configure Macro to set all cuts for Fluctuation Study \r
+ AliEbyEEventSelector | Implimented\r
+ Origin: Satyajit Jena\r
+ Date:Mon Nov 22 22:15:40 CET 2010\r
+ *************************************************************************/\r
+\r
+AliEbyEEventSelector *GetEbyEAnalysisBaseObject(const char* analysisLevel = "ESD",\r
+ const char* esdAnalysisType = "kGlobal",\r
+ Bool_t kUseOnlineTrigger = kFALSE,\r
+ Bool_t kUseOfflineTrigger = kFALSE,\r
+ const char* CentralityType = "HardType") \r
+\r
+{\r
+ \r
+ AliEbyEEventSelector *base = new AliEbyEEventSelector();\r
+ base->SetAnalysisLevel(analysisLevel);\r
+ \r
+ base->SetCentralityBin(50);\r
+ if(CentralityType == "HardType") {\r
+ base->SetCentralityType(AliEbyEEventSelector::kHardFlat);\r
+ base->SetCentralityEstimator("V0M");\r
+\r
+ printf(" I am Inside centrality Flat \n");\r
+ }\r
+\r
+ if (CentralityType == "Central") {\r
+ base->SetCentralityType(AliEbyEEventSelector::kFlat);\r
+ base->SetCentralityEstimator("V0M");\r
+ base->SetCentralityInputFiles("$ALICE_ROOT/ANALYSIS/macros/AliCentralityBy1D_LHC10g2a_100.root",\r
+ "$ALICE_ROOT/ANALYSIS/macros/AliCentralityByFunction_LHC10g2a_100.root");\r
+ }\r
+\r
+ if(analysisLevel == "ESD") {\r
+ /* if(kAnalyzeMC)\r
+ base->SetTriggerMode(AliEbyEEventSelector::kMB2);\r
+ if(kUseOnlineTrigger) base->UseOnlineTrigger();\r
+ if(kUseOfflineTrigger) base->OfflineTriggerInit();\r
+ \r
+ */\r
+\r
+ switch(esdAnalysisType) {\r
+ case "TPC":\r
+ base->SetAnalysisMode(AliEbyEEventSelector::kTPC);\r
+ base->SetPhaseSpace(10, -0.5, 0.5, 16, 0.5, 0.9);\r
+ break;\r
+ \r
+ case "ITS":\r
+ base->SetAnalysisMode(AliEbyEEventSelector::kITS);\r
+ base->SetPhaseSpace(9, -0.9, 0.9, 6, 0.45, 1.05);\r
+ break;\r
+ \r
+ case "TPCnITS":\r
+ base->SetAnalysisMode(AliEbyEEventSelector::kTPCnITS);\r
+ base->SetPhaseSpace(9, -0.9, 0.9, 6, 0.45, 1.05);\r
+ break;\r
+ \r
+ case "Global":\r
+ base->SetAnalysisMode(AliEbyEEventSelector::kGlobal);\r
+ base->SetPhaseSpace(20, -1.0, 1.0, 48, 0.3, 1.5);\r
+ break;\r
+\r
+ case "Forward":\r
+ base->SetAnalysisMode(AliEbyEEventSelector::kForward);\r
+ base->SetPhaseSpace(20, -1.0, 1.0, 48, 0.3, 1.5);\r
+ break;\r
+ \r
+ default:\r
+ break;\r
+ }\r
+ base->SetAcceptedVertexDiamond(1.,1.,10.);\r
+ \r
+ }\r
+ if(analysisLevel == "MC") \r
+ base->SetPhaseSpace(10, -0.5, 0.5, 16, 0.5, 0.9);\r
+ if(analysisLevel == "AOD")\r
+ base->SetPhaseSpace(10, -0.5, 0.5, 16, 0.5, 0.9);\r
+ \r
+ return base;\r
+}\r
--- /dev/null
+//__________________________________________________//
+AliEbyEMultiplicityFluctuationAnalysis *GetAnalysisMFObject() {
+
+ gROOT->LoadMacro("$ALICE_ROOT/PWG2/EBYE/Fluctuations/macro/ConfigureEbyEBaseObject.C");
+ AliEbyEEventSelector *base = 0;
+ base = GetEbyEAnalysisBaseObject();
+
+ AliEbyEMultiplicityFluctuationAnalysis *analysis = new AliEbyEMultiplicityFluctuationAnalysis();
+
+ analysis->SetBaseAnalysis(base);
+ return analysis;
+}
+
--- /dev/null
+/Users/sjena/data/temp/pass1_plusplusplus/10000137161001.100/AliESDs.root
+/Users/sjena/data/temp/pass1_plusplusplus/10000137161001.1000/AliESDs.root
+/Users/sjena/data/temp/pass1_plusplusplus/10000137161001.1010/AliESDs.root
+/Users/sjena/data/temp/pass1_plusplusplus/10000137161001.1020/AliESDs.root
+/Users/sjena/data/temp/pass1_plusplusplus/10000137161001.1030/AliESDs.root
+/Users/sjena/data/temp/pass1_plusplusplus/10000137161001.1040/AliESDs.root
+/Users/sjena/data/temp/pass1_plusplusplus/10000137161001.1050/AliESDs.root
+/Users/sjena/data/temp/pass1_plusplusplus/10000137161001.1060/AliESDs.root
+/Users/sjena/data/temp/pass1_plusplusplus/10000137161001.1070/AliESDs.root
+/Users/sjena/data/temp/pass1_plusplusplus/10000137161001.1080/AliESDs.root
+/Users/sjena/data/temp/pass1_plusplusplus/10000137161001.1090/AliESDs.root
+/Users/sjena/data/temp/pass1_plusplusplus/10000137161001.110/AliESDs.root
+/Users/sjena/data/temp/pass1_plusplusplus/10000137161001.1100/AliESDs.root
+/Users/sjena/data/temp/pass1_plusplusplus/10000137161001.1110/AliESDs.root
+/Users/sjena/data/temp/pass1_plusplusplus/10000137161001.1120/AliESDs.root
+/Users/sjena/data/temp/pass1_plusplusplus/10000137161001.1130/AliESDs.root
+/Users/sjena/data/temp/pass1_plusplusplus/10000137161001.1140/AliESDs.root
+/Users/sjena/data/temp/pass1_plusplusplus/10000137161001.1150/AliESDs.root
+/Users/sjena/data/temp/pass1_plusplusplus/10000137161001.1160/AliESDs.root
+/Users/sjena/data/temp/pass1_plusplusplus/10000137161001.1170/AliESDs.root
+/Users/sjena/data/temp/pass1_plusplusplus/10000137161001.1180/AliESDs.root
+/Users/sjena/data/temp/pass1_plusplusplus/10000137161001.1190/AliESDs.root
+/Users/sjena/data/temp/pass1_plusplusplus/10000137161001.1200/AliESDs.root
--- /dev/null
+/****************************************************************
+
+runs for Analysis Charge Fluctuation Task
+Author: Satyajit Jena
+Email: sjena@cern.ch
+
+Running in Local = analmode = local,
+input list of files, number of esds
+useMC and format
+
+and AFF = analmode = "proof" and
+data set.
+
+*******************************************************************/
+
+void runTaskCF(TString analmode = "local")
+{
+
+ // TString analmode = "local";
+ // TString analmode = "proof";
+ TString dataset = "/PMD/sjena/LHC10a10_2360Gev_pythia";
+ Bool_t useMC = kFALSE;
+ TString format="esd";
+ TString output = "test.root";
+
+
+ if(analmode.CompareTo("local") == 0)
+ {
+ if(!LoadLibraries(analmode))
+ {
+ printf("Library Not loaded\n");
+ return;
+ }
+ runLocal("file.txt",5, useMC, format, output);
+
+ }
+ else if(analmode.CompareTo("proof") == 0)
+ {
+ if(!LoadLibraries(analmode)) return;
+ runproof(dataset, useMC);
+
+
+ }
+ else printf("load error\n");
+
+}
+
+//___________________________________________________________________________________
+Bool_t LoadLibraries(TString mode = "local")
+{
+
+ if(mode.CompareTo("local") == 0)
+ {
+ gSystem->Load("libSTEERBase.so");
+ gSystem->Load("libVMC.so");
+ gSystem->Load("libESD.so");
+ gSystem->Load("libAOD.so");
+ gSystem->Load("libANALYSIS.so");
+ gSystem->Load("libANALYSISalice.so");
+ gSystem->Load("libPWG2ebye.so");
+ gSystem->AddIncludePath("-I$ALICE_ROOT/include");
+ printf("Library is Loaded \n");
+
+ return kTRUE;
+
+ }
+ else if(mode.CompareTo("proof") == 0)
+ {
+ TString proofCluster="alice-caf.cern.ch";
+ TString alirootVer = "VO_ALICE@AliRoot::v4-20-11-AN";
+
+ gEnv->SetValue("XSec.GSI.DelegProxy","2");
+ TProof *p = TProof::Open(proofCluster.Data());
+
+ p->ShowPackages();
+ p->EnablePackage(alirootVer.Data());
+
+ return kTRUE;
+
+ }
+ else
+ {
+ printf(" ERROR: Give proper running mode \n");
+ return kFALSE;
+ }
+
+}
+//______________________________________________________________________
+// Running local
+void runLocal(TString input,int nfile, Bool_t useMC, TString format,TString OutPutFile)
+{
+
+ gROOT->LoadMacro("$ALICE_ROOT/PWG0/CreateESDChain.C");
+ TChain* chain = CreateESDChain(input, nfile);
+
+ AliAnalysisManager *mgr = new AliAnalysisManager("Analysis");
+ AliVEventHandler* esdH = new AliESDInputHandler();
+ mgr->SetInputEventHandler(esdH);
+
+// gROOT->LoadMacro("$ALICE_ROOT/PWG2/EBYE/Fluctuations/AliEbyEEventSelector.cxx++g");
+// gROOT->LoadMacro("$ALICE_ROOT/PWG2/EBYE/Fluctuations/AliEbyEChargeFluctuationAnalysis.cxx++g");
+// gROOT->LoadMacro("$ALICE_ROOT/PWG2/EBYE/Fluctuations/AliEbyECFAnalysisTask.cxx++g");
+ gROOT->LoadMacro("$ALICE_ROOT/PWG2/EBYE/Fluctuations/macro/AddTaskCF.C");
+ AddTaskCF();
+
+ mgr->SetDebugLevel(0);
+
+ if (!mgr->InitAnalysis()) return;
+ mgr->PrintStatus();
+
+ mgr->InitAnalysis();
+ mgr->StartAnalysis("local", chain);
+
+
+}
+
+
+//________________________________________________________
+//Running in proof
+
+void runproof(TString dataset, Bool_t useMC)
+{
+
+ AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+ if (!mgr) mgr = new AliAnalysisManager("FirstCheck");
+
+ AliVEventHandler* esdH = new AliESDInputHandler();
+ mgr->SetInputEventHandler(esdH);
+
+ gProof->LoadMacro("$ALICE_ROOT/PWG2/EBYE/Fluctuations/AliEbyEEventSelector.cxx++g");
+ gProof->LoadMacro("$ALICE_ROOT/PWG2/EBYE/Fluctuations/AliEbyEMFAnalysisTask.cxx++g");
+ gProof->LoadMacro("$ALICE_ROOT/PWG2/EBYE/Fluctuations/macro/AddTaskMF.C");
+ AddTaskMF();
+
+ mgr->SetDebugLevel(0);
+
+ if (!mgr->InitAnalysis())
+ return;
+
+ mgr->PrintStatus();
+ mgr->InitAnalysis();
+
+ mgr->StartAnalysis("proof",dataset.Data());
+
+}
+
+//_________________
+//Runningin grid
--- /dev/null
+/****************************************************************
+
+Lunch the Analysis Task for Multiplicity Fluctuation
+Author: Satyajit Jena
+Email: sjena@cern.ch
+
+Running in Local = analmode = local,
+input list of files, number of esds
+useMC and format
+
+and AFF = analmode = "proof" and
+data set.
+
+*******************************************************************/
+
+void runTaskMF(TString analmode = "local")
+{
+
+ TString dataset = "/PMD/sjena/LHC10a10_2360Gev_pythia";
+ Bool_t useMC = kFALSE;
+ TString format="esd";
+ TString output = "test.root";
+
+
+ if(analmode.CompareTo("local") == 0)
+ {
+ if(!LoadLibraries(analmode))
+ {
+ printf("Library Not loaded\n");
+ return;
+ }
+ runLocal("file.txt",5, useMC, format, output);
+
+ }
+ else if(analmode.CompareTo("proof") == 0)
+ {
+ if(!LoadLibraries(analmode)) return;
+ runproof(dataset, useMC);
+
+
+ }
+ else printf("load error\n");
+
+}
+
+//___________________________________________________________________________________
+Bool_t LoadLibraries(TString mode = "local")
+{
+
+ if(mode.CompareTo("local") == 0)
+ {
+ gSystem->Load("libSTEERBase.so");
+ gSystem->Load("libVMC.so");
+ gSystem->Load("libESD.so");
+ gSystem->Load("libAOD.so");
+ gSystem->Load("libANALYSIS.so");
+ gSystem->Load("libANALYSISalice.so");
+ gSystem->Load("libPWG2ebye.so");
+ gSystem->AddIncludePath("-I$ALICE_ROOT/include");
+ printf("Library is Loaded \n");
+
+ return kTRUE;
+
+ }
+ else if(mode.CompareTo("proof") == 0)
+ {
+ TString proofCluster="alice-caf.cern.ch";
+ TString alirootVer = "VO_ALICE@AliRoot::v4-20-11-AN";
+
+ gEnv->SetValue("XSec.GSI.DelegProxy","2");
+ TProof *p = TProof::Open(proofCluster.Data());
+
+ p->ShowPackages();
+ p->EnablePackage(alirootVer.Data());
+
+ return kTRUE;
+
+ }
+ else
+ {
+ printf(" ERROR: Give proper running mode \n");
+ return kFALSE;
+ }
+
+}
+//______________________________________________________________________
+// Running local
+void runLocal(TString input,int nfile, Bool_t useMC, TString format,TString OutPutFile)
+{
+
+ gROOT->LoadMacro("$ALICE_ROOT/PWG0/CreateESDChain.C");
+ TChain* chain = CreateESDChain(input, nfile);
+
+ AliAnalysisManager *mgr = new AliAnalysisManager("Analysis");
+ AliVEventHandler* esdH = new AliESDInputHandler();
+ mgr->SetInputEventHandler(esdH);
+
+// gROOT->LoadMacro("$ALICE_ROOT/PWG2/EBYE/Fluctuations/AliEbyEEventSelector.cxx++g");
+// gROOT->LoadMacro("$ALICE_ROOT/PWG2/EBYE/Fluctuations/AliEbyEMultiplicityFluctuationAnalysis.cxx++g");
+// gROOT->LoadMacro("$ALICE_ROOT/PWG2/EBYE/Fluctuations/AliEbyEMFAnalysisTask.cxx++g");
+ gROOT->LoadMacro("$ALICE_ROOT/PWG2/EBYE/Fluctuations/macro/AddTaskMF.C");
+ AddTaskMF();
+
+ mgr->SetDebugLevel(0);
+
+ if (!mgr->InitAnalysis()) return;
+ mgr->PrintStatus();
+
+ mgr->InitAnalysis();
+ mgr->StartAnalysis("local", chain);
+
+
+}
+
+
+//________________________________________________________
+//Running in proof
+
+void runproof(TString dataset, Bool_t useMC)
+{
+
+ AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+ if (!mgr) mgr = new AliAnalysisManager("FirstCheck");
+
+ AliVEventHandler* esdH = new AliESDInputHandler();
+ mgr->SetInputEventHandler(esdH);
+
+ gProof->LoadMacro("$ALICE_ROOT/PWG2/EBYE/Fluctuations/AliEbyEEventSelector.cxx++g");
+ gProof->LoadMacro("$ALICE_ROOT/PWG2/EBYE/Fluctuations/AliEbyEMFAnalysisTask.cxx++g");
+ gProof->LoadMacro("$ALICE_ROOT/PWG2/EBYE/Fluctuations/macro/AddTaskMF.C");
+ AddTaskMF();
+
+ mgr->SetDebugLevel(0);
+
+ if (!mgr->InitAnalysis())
+ return;
+
+ mgr->PrintStatus();
+ mgr->InitAnalysis();
+
+ mgr->StartAnalysis("proof",dataset.Data());
+
+}
+
+//_________________
+//Runningin grid