]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Updated code by Satya on the charge and multiplicity fluctuations
authorpchrist <pchrist@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 20 Jan 2011 10:31:46 +0000 (10:31 +0000)
committerpchrist <pchrist@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 20 Jan 2011 10:31:46 +0000 (10:31 +0000)
17 files changed:
PWG2/EBYE/Fluctuations/AliEbyECFAnalysisTask.cxx
PWG2/EBYE/Fluctuations/AliEbyEChargeFluctuationAnalysis.cxx
PWG2/EBYE/Fluctuations/AliEbyEChargeFluctuationAnalysis.h
PWG2/EBYE/Fluctuations/AliEbyEEventBase.cxx
PWG2/EBYE/Fluctuations/AliEbyEEventBase.h
PWG2/EBYE/Fluctuations/AliEbyEFluctuationAnalysis.cxx [new file with mode: 0644]
PWG2/EBYE/Fluctuations/AliEbyEFluctuationTask.cxx [new file with mode: 0644]
PWG2/EBYE/Fluctuations/AliEbyEMFAnalysisTask.cxx
PWG2/EBYE/Fluctuations/AliEbyEMFAnalysisTask.h
PWG2/EBYE/Fluctuations/AliEbyEMFAnalysisTaskT.cxx [new file with mode: 0644]
PWG2/EBYE/Fluctuations/AliEbyEMultiplicityFluctuationAnalysis.cxx
PWG2/EBYE/Fluctuations/AliEbyEMultiplicityFluctuationAnalysis.h
PWG2/EBYE/Fluctuations/macro/AddFluctuationTask.C [new file with mode: 0644]
PWG2/EBYE/Fluctuations/macro/AddTaskCentrality.C [new file with mode: 0644]
PWG2/EBYE/Fluctuations/macro/AddTaskPhysicsSelection.C [new file with mode: 0644]
PWG2/EBYE/Fluctuations/macro/TestCompile.C [new file with mode: 0644]
PWG2/EBYE/Fluctuations/macro/runFluctuationTask.C [new file with mode: 0644]

index 8a44d9cc63791565852db504d07bb59e8668ebca..9295f5432a8fd9efec7b14ca20ce52bb4df49b2d 100755 (executable)
@@ -56,13 +56,15 @@ AliEbyECFAnalysisTask::AliEbyECFAnalysisTask(const char *name)
 }
 
 //________________________________________________________________________
-void AliEbyECFAnalysisTask::UserCreateOutputObjects()
-{
+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());
@@ -71,9 +73,8 @@ void AliEbyECFAnalysisTask::UserCreateOutputObjects()
 }
 
 //________________________________________________________________________
-void AliEbyECFAnalysisTask::UserExec(Option_t *) 
-{
-
+void AliEbyECFAnalysisTask::UserExec(Option_t *) {
+  //
   fEvtCounter->Fill(0);  
   fECnt++;
   
@@ -99,7 +100,7 @@ void AliEbyECFAnalysisTask::UserExec(Option_t *)
 
 //______________________________________________________________________//
 void AliEbyECFAnalysisTask::Terminate(Option_t *) {
-
+  //
 fListPhy = dynamic_cast<TList*> (GetOutputData(1));
   if (!fListPhy) {
     Error("Terminate","Out Put List not available");
index 5a45f7aa5ec629540b3a81606139cd13f993c4d5..bdfe8427d4e80ef2bb2ca1be00b40096f2bbc515 100644 (file)
@@ -56,9 +56,14 @@ AliEbyEChargeFluctuationAnalysis::AliEbyEChargeFluctuationAnalysis() :
   TObject(), 
   fListCFQA(0),
   fListMeasureCF(0),
-  fEbyEBase(0)
+  fEbyEBase(0),
+  fhNpAverage(0),   
+  fhNnAverage(0),   
+  fhNCAverage(0),   
+  fhNetAverage(0),  
+  fhNnSNpAverage(0)
 {
-  InitHistos();
+  //InitHistos();
   //Default constructor
 }
 
@@ -70,6 +75,19 @@ AliEbyEChargeFluctuationAnalysis::~AliEbyEChargeFluctuationAnalysis() {
   if(fListCFQA) delete fListCFQA;
   if(fListMeasureCF) delete fListMeasureCF;
 
+}
+//____________________________________________________________________//
+
+void AliEbyEChargeFluctuationAnalysis::ReadFromFile() {
+  //To read Average values from input histograms
+
+  TFile *file = TFile::Open("InputFluctuationAnalysis.root");
+  fhNpAverage    = (TH1F*)file->Get("hNpAverage");     
+  fhNnAverage    = (TH1F*)file->Get("hNnAverage");     
+  fhNCAverage    = (TH1F*)file->Get("hNCAverage");
+  fhNetAverage   = (TH1F*)file->Get("hNetAverage");
+  fhNnSNpAverage = (TH1F*)file->Get("hNnSNpAverage");  
+
 }
 
 //____________________________________________________________________//
@@ -87,45 +105,71 @@ void AliEbyEChargeFluctuationAnalysis::InitHistos() {
 
   // Int_t kCentBin = fEbyEBase->GetCentralityBin();
   Int_t kCentBin = 50;  
-Int_t kMultBin = 2000;
+  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);
+  TH2F *fNChargeFluc = new TH2F("hNpCharge", "Possitive Charge",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);
+  TH2F *fNpChargeFluc = new TH2F("hNnCharge", "Negative Charge",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);
+  TH2F *fNnChargeFluc = new TH2F("hNCharge", "[ (+) + (-)]", 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); 
+  TH2F *fNnbpFluc = new TH2F("hNPmN", " [ (+) - (-)] ",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);
+  TH2F *fNpbnFluc = new TH2F("hNpByNpa", "[ +/<+> ] ",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);
+  TH2F *fNFluc = new TH2F("hNnByNna", "[ -/<-> ]",kCentBin,0, (Double_t)kCentBin,100,-5,5);
   fNFluc->GetXaxis()->SetTitle(" #-");
   fNFluc->GetYaxis()->SetTitle("Frequency");
   fListMeasureCF->Add(fNFluc); // -->:5
+
+  TH2F *fNFluc1 = new TH2F("hNpByPmNa", "[ +/<+ - -> ]",kCentBin,0, (Double_t)kCentBin,100,-5,5);
+  fNFluc1->GetXaxis()->SetTitle(" #-");
+  fNFluc1->GetYaxis()->SetTitle("Frequency");
+  fListMeasureCF->Add(fNFluc1); // -->:6
+
+
+  TH2F *fNFluc2 = new TH2F("hNnByPmNa", "[ -/<+ - -> ]",kCentBin,0, (Double_t)kCentBin,100,-5,5);
+  fNFluc2->GetXaxis()->SetTitle(" #-");
+  fNFluc2->GetYaxis()->SetTitle("Frequency");
+  fListMeasureCF->Add(fNFluc2); // -->:7
+
+  TH2F *fNFluc3 = new TH2F("hNpByPpNa", "[ +/<+ + -> ]",kCentBin,0, (Double_t)kCentBin,100,-5,5);
+  fNFluc3->GetXaxis()->SetTitle(" #-");
+  fNFluc3->GetYaxis()->SetTitle("Frequency");
+  fListMeasureCF->Add(fNFluc3); // -->:8
+
+  TH2F *fNFluc4 = new TH2F("hNnByPpNa", "[ -/<+ + -> ]",kCentBin,0, (Double_t)kCentBin,100,-5,5);
+  fNFluc4->GetXaxis()->SetTitle(" #-");
+  fNFluc4->GetYaxis()->SetTitle("Frequency");
+  fListMeasureCF->Add(fNFluc4); // -->:9
+
+  TH2F *fNFluc5 = new TH2F("hNpNnByNpNaa", "[ (+)(-)/<(-)(+)> ]",kCentBin,0, (Double_t)kCentBin,100,-5,5);
+  fNFluc5->GetXaxis()->SetTitle(" #-");
+  fNFluc5->GetYaxis()->SetTitle("Frequency");
+  fListMeasureCF->Add(fNFluc5); // -->:10
   
 }
 
@@ -136,15 +180,20 @@ void AliEbyEChargeFluctuationAnalysis::Analyze(AliESDEvent* esd) {
   // Analysis from ESD
   ((TH1F*)(fListCFQA->At(0)))->Fill(1.);  
 
-  Int_t kCent = 1;
-
+  Int_t kCent =  fEbyEBase->GetCentrality(esd);
+  
   TObjArray *array = new TObjArray();
   Int_t itr = esd->GetNumberOfTracks();
+
+  // printf(" Centrality bin %d and Number of Good Track %d\n",itr,kCent);
+
   for (Int_t iTracks = 0; iTracks < itr; iTracks++) 
     {
       AliESDtrack* track = esd->GetTrack(iTracks);
       if (!track) continue;
-      array->Add(track);
+      if(fEbyEBase->IsInPhaseSpace(track))
+       array->Add(track);
     }
 
   Calculate(array,kCent);
@@ -176,40 +225,93 @@ void AliEbyEChargeFluctuationAnalysis::Analyze(AliStack* stack) {
 //____________________________________________________________________________//
 void AliEbyEChargeFluctuationAnalysis::Calculate(TObjArray *gTrackArray, Int_t cent){
 
-  Int_t i = 0;
+
+  ((TH1F*)(fListCFQA->At(0)))->Fill(1,1); 
+  if(cent < 0) return;
+  ((TH1F*)(fListCFQA->At(0)))->Fill(10,1); 
+
+  Int_t gNtrack = gTrackArray->GetEntries();
+  if(gNtrack < 1) return;
+
+  ((TH1F*)(fListCFQA->At(0)))->Fill(20,1); 
+
   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};
+  Double_t par[16];
+  for(Int_t i = 0; i < 8; i++) par[i] = 0.0;
+  Double_t pr[5];
+  for(Int_t i = 0; i < 5; i++) pr[i] = 0.0;
 
-  for(i = 0; i < gNtrack; i++) {
+   
+
+  for(Int_t 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;
+    if(charge > 0) {
+      pCharge += 1; 
+      ((TH1F*)(fListCFQA->At(3)))->Fill(cent,1);  
+      ((TH1F*)(fListCFQA->At(5)))->Fill(cent,1);  
+    }
+    if(charge < 0) {
+      nCharge += 1; 
+      ((TH1F*)(fListCFQA->At(4)))->Fill(cent,1); 
+      ((TH1F*)(fListCFQA->At(5)))->Fill(cent,1);   
+    }
   }
   
+  ((TH1F*)(fListCFQA->At(0)))->Fill(131+cent,pCharge);  
+  ((TH1F*)(fListCFQA->At(0)))->Fill(5,nCharge);  
+  ((TH1F*)(fListCFQA->At(0)))->Fill(6,pCharge+nCharge);  
+  ((TH2F*)(fListCFQA->At(1)))->Fill(cent,pCharge+nCharge);  
+
+  pr[0] = fhNpAverage->GetBinContent(cent+1);   
+  pr[1] = fhNnAverage->GetBinContent(cent+1);      
+  pr[2] = fhNCAverage->GetBinContent(cent+1);      
+  pr[3] = fhNetAverage->GetBinContent(cent+1);     
+  pr[4] = fhNnSNpAverage->GetBinContent(cent+1);   
+
+
   par[0] = (Double_t)pCharge;
   par[1] = (Double_t)nCharge;
   par[2] = (Double_t)pCharge + (Double_t)nCharge;
+  par[3] = (Double_t)pCharge - (Double_t)nCharge;
+  par[4] = (Double_t)pCharge*((Double_t)pCharge - 1);
+  par[5] = (Double_t)nCharge*((Double_t)nCharge - 1);
+  par[6] = (Double_t)pCharge*(Double_t)nCharge;
+
+  if(pr[0] != 0) par[7]  = par[0]/pr[0]; // +/<+>
+  if(pr[1] != 0) par[8]  = par[0]/pr[1]; // -/<->
+  if(pr[2] != 0) par[9]  = par[0]/pr[2]; // ++-/<++->
+  if(pr[2] != 0) par[10] = par[0]/pr[2]; // +--/<++->
+  if(pr[3] != 0) par[11] = par[0]/pr[3]; // ++-/<+-->
+  if(pr[3] != 0) par[12] = par[0]/pr[3]; // +--/<+-->
+  if(pr[4] != 0) par[13] = par[0]/pr[4]; //+*-/<+*->
   
-  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]); 
+  par[14] = (par[7] + par[8])*(par[7] + par[8]); // eqn - 1
+  //  par[15] = (par[4]/pr[0]*[pr[0] + par[8])*(par[7] + par[8]); // eqn - 1
 
+    
+  Float_t value  = 0;
+  if( pr[0] != 0 || pr[1] != 0)
+    value = par[0]/pr[0] + par[1]/pr[1]; 
+
+  printf("Centrality: %2d  NTrack: %8d  +ve : %8d  -ve : %8d  %10.6f %10.6f %10.6f\n",cent, gNtrack, pCharge, nCharge, pr[0], pr[1],value);
+
+
+  ((TH2F*)(fListMeasureCF->At(0)))->Fill(cent, par[0]); //+
+  ((TH2F*)(fListMeasureCF->At(1)))->Fill(cent, par[1]); //-
+  ((TH2F*)(fListMeasureCF->At(2)))->Fill(cent, par[2]); //++-
+  ((TH2F*)(fListMeasureCF->At(3)))->Fill(cent, par[3]); //+--
+  ((TH2F*)(fListMeasureCF->At(4)))->Fill(cent, par[4]); //+/-
+  ((TH2F*)(fListMeasureCF->At(5)))->Fill(cent, value); //-/+
+  ((TH2F*)(fListMeasureCF->At(6)))->Fill(cent, value*value); //+/-
+  ((TH2F*)(fListMeasureCF->At(7)))->Fill(cent, par[7]);
+  ((TH2F*)(fListMeasureCF->At(8)))->Fill(pCharge,nCharge); 
+  ((TH3F*)(fListMeasureCF->At(9)))->Fill(cent, pCharge,nCharge); 
+  
 }
index a87bad2a1323d5f1642d48bbfdbe146c813a9505..4f08dbec6125b9640e80393f7f5813804dcf6086 100644 (file)
@@ -37,12 +37,12 @@ class AliEbyEChargeFluctuationAnalysis : public TObject {
   
   AliEbyEChargeFluctuationAnalysis();
   virtual ~AliEbyEChargeFluctuationAnalysis();
-
+  
   void SetBaseAnalysis(AliEbyEEventBase * const baseAnalysis) {
     fEbyEBase = baseAnalysis;}
   AliEbyEEventBase *GetEbyEEventBaseObject() const {
     return fEbyEBase;}
-
+  
   void InitHistos();
   
   void Analyze(AliESDEvent *esd);
@@ -52,17 +52,26 @@ class AliEbyEChargeFluctuationAnalysis : public TObject {
   void Calculate(TObjArray *gTrackArray, Int_t cent);
   TList *GetListCFQA() const {return fListCFQA;}
   TList *GetListMeasureCF() const {return fListMeasureCF;}
+    
+  void ReadFromFile();
   
  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
+  
+  TList *fListCFQA;           //! Global list
+  TList *fListMeasureCF;      //! List Of Mesures for Multiplisity Fluctuation
+  AliEbyEEventBase *fEbyEBase;//! EbyE Events base
+  
+  TH1F *fhNpAverage;   
+  TH1F *fhNnAverage;   
+  TH1F *fhNCAverage;   
+  TH1F *fhNetAverage;  
+  TH1F *fhNnSNpAverage;
 
-ClassDef(AliEbyEChargeFluctuationAnalysis,1);
+  
+  AliEbyEChargeFluctuationAnalysis(const AliEbyEChargeFluctuationAnalysis&);            //! Not implemented
+  AliEbyEChargeFluctuationAnalysis& operator=(const AliEbyEChargeFluctuationAnalysis&); //! Not implemented
+  
+  ClassDef(AliEbyEChargeFluctuationAnalysis,1);
 };
 
 #endif
index b125be4ea300cdb1d684a204bba23123e16186ac..e82e63033cdcf55afbaf337a02e1348d8b926a93 100644 (file)
@@ -33,8 +33,7 @@
 #include <AliTPCPIDResponse.h>
 #include <AliAODTrack.h>
 #include <AliMCParticle.h>
-#include <AliESDCentrality.h>
-#include <AliCentralitySelectionTask.h>
+
 #include <AliESDVZERO.h>
 class AliLog;
 class AliESDVertex;
@@ -61,40 +60,52 @@ AliEbyEEventBase::AliEbyEEventBase() : TObject(),
   fVzMax(20.),
   fCentralityType(kFlat),
   fCentralityBin(50),  
-  fCentralityEstimator("V0M"),
-  fCentralityPointer(0),
-  fFile1(""),
-  fFile2("") {
+  fCentralityEstimator("V0M")
+{
+
+  printf(" AliEbyEEventBase ========== \n");
   //Default constructor
+  InitQA();
+}
+
+//____________________________________________________________________//
+AliEbyEEventBase::~AliEbyEEventBase() {
+  //Destructor
+  if(fListQA) delete fListQA;
+
+}
 
+//____________________________________________________________________//
+void AliEbyEEventBase::InitQA() {
+  //Initialize QA objects
   fListQA = new TList();
   fListQA->SetName("fListQA"); 
   TH1F *gHistVx = new TH1F("gHistVx",
                           "Vx distribution;V_{x} [cm];Entries",
-                          100,-5.,5.);
+                          500,-5.,5.);
   gHistVx->SetFillColor(kRed-2);
   fListQA->Add(gHistVx);//0
   TH1F *gHistVxAccepted = new TH1F("gHistVxaccepted",
                                   "Vx distribution;V_{x} [cm];Entries",
-                                  100,-5.,5.);
+                                  500,-2.5,2.5);
   fListQA->Add(gHistVxAccepted); //1
   TH1F *gHistVy = new TH1F("gHistVy",
                           "Vy distribution;V_{y} [cm];Entries",
-                          100,-5.,5.);
+                          500,-5.,5.);
   gHistVy->SetFillColor(kRed-2);
   fListQA->Add(gHistVy);//2
   TH1F *gHistVyAccepted = new TH1F("gHistVyaccepted",
                                   "Vy distribution;V_{y} [cm];Entries",
-                                  100,-5.,5.);
+                                  200,-5.,5.);
   fListQA->Add(gHistVyAccepted);//3
   TH1F *gHistVz = new TH1F("gHistVz",
                           "Vz distribution;V_{z} [cm];Entries",
-                          100,-25.,25.);
+                          500,-25.,25.);
   gHistVz->SetFillColor(kRed-2);
   fListQA->Add(gHistVz);//4
   TH1F *gHistVzAccepted = new TH1F("gHistVzaccepted",
                                   "Vz distribution;V_{z} [cm];Entries",
-                                  100,-25.,25.);
+                                  500,-25.,25.);
   fListQA->Add(gHistVzAccepted);//5
  
 
@@ -102,10 +113,54 @@ AliEbyEEventBase::AliEbyEEventBase() : TObject(),
   fListQA->Add(hCentralityQA);//6
 }
 
+
+
 //____________________________________________________________________//
-AliEbyEEventBase::~AliEbyEEventBase() {
-  if(fListQA) delete fListQA;
+Bool_t AliEbyEEventBase::IsInPhaseSpace(AliESDtrack* const track) {
+  //Check if particle is in phase space
+  Double_t gDca = 0.0, gPt = 0.0, gNclus = 0.0, gChi = 0.0;
+  Double_t eta = 0.0;
+
+  if((fAnalysisMode == kTPC) || (fAnalysisMode == kTPCnITS) ) {
+    AliExternalTrackParam *tpcTrack = (AliExternalTrackParam *)track->GetTPCInnerParam();
+    if(!tpcTrack) {
+      gDca = 0.0; gPt = 0.0; gNclus = 0.0; gChi = 0.0; eta = -10.0;
+    }
+    else {
+      //  gDca = tpcTrack->GetDCA();
+      gPt  = tpcTrack->Pt();
+      gNclus  = tpcTrack->GetTPCNcls();
+      gChi  = track->GetTPCchi2()/gNclus;
+      eta  = tpcTrack->Eta();
+    }
+  }//standalone TPC 
+
+  // eta, ptmin, ptmax, dcaxyz, TPC clusters, kisquare/clustertpc
+
+  if( TMath::Abs(eta) > fNBinsX ) {
+    return kFALSE;
+  }
+
+  if( gPt < fMinX || gPt > fMaxX) {
+    return kFALSE;
+  }
+  
+  /*  if(TMath::Abs(gDca) > fNBinsY ){
+    return kFALSE;
+  }
+  */
 
+  if(gNclus < fMaxY) {
+    return kFALSE;
+  }
+
+  if(gChi > fMinY) {
+    return kFALSE;
+  }
+  
+
+
+  return kTRUE;
 }
 
 //____________________________________________________________________//
@@ -180,44 +235,47 @@ const AliESDVertex* AliEbyEEventBase::GetVertex(AliESDEvent* esd,
 //____________________________________________________________________//
 Int_t AliEbyEEventBase::GetCentrality(AliESDEvent *esd) const {
   //Get the centrality
-  AliESDCentrality *centrality = esd->GetCentrality();
+  //  AliCentrality *centrality = esd->GetCentrality();
   Int_t cent = -1;
-
-  if(fCentralityType == kHardFlat) {
+  
+  if(fCentralityType == AliEbyEEventBase::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 == "ESD") cent = FindCentralityESD10(mult);
     if(fAnalysisLevel == "MC") cent = FindCentralityMC(mult);
     if(cent > -1)  ((TH2F *)(fListQA->At(6)))->Fill(cent,mult);
+  
     return cent;
   }
 
if(fCentralityType == kHardAcc) {
 if(fCentralityType == AliEbyEEventBase::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 == "ESD") cent = FindCentralityESD10(mult);
    if(fAnalysisLevel == "MC") cent = FindCentralityMC(mult);
    if(cent > -1)  ((TH2F *)(fListQA->At(6)))->Fill(cent,mult);
    return cent;
  }
 
-  if(fCentralityType == kAll) {
+  
+  /* 
+  if(fCentralityType == AliEbyEEventBase::kAll) {
     if(centrality->IsEventInCentralityClass(0,100,fCentralityEstimator)) return 0;
   }
-  if(fCentralityType == kFlat) {
+  if(fCentralityType ==AliEbyEEventBase::kFlat) {
     for(int i = 0; i < 50; i++) {
-       if(centrality->IsEventInCentralityClass(i*2,i*2+2,fCentralityEstimator)) {
-           cent = i;
-           break;
-       }
+      if(centrality->IsEventInCentralityClass(i*2,i*2+2,fCentralityEstimator)) {
+    cent = i;
+    break;
+      }
     }
   }
   
-  if(fCentralityType == kAcc) {
+  if(fCentralityType == AliEbyEEventBase::kAcc) {
     for(int i = 0; i < 50; i++) {
       if(centrality->IsEventInCentralityClass(0,i*2+2,fCentralityEstimator)) {
        cent = i;
@@ -226,6 +284,8 @@ Int_t AliEbyEEventBase::GetCentrality(AliESDEvent *esd) const {
     }
   }
   
+  */
+  printf("on to %d p\n",cent);
   return cent;
 }
 
@@ -255,14 +315,14 @@ Int_t AliEbyEEventBase::FindCentralityESD(Double_t mult) const {
                         80.0,     80.0,     70.0,     70.0,     70.0 };
   
 
- if(fCentralityType == kHardFlat) { 
+ if(fCentralityType ==  AliEbyEEventBase::kHardFlat) { 
     for(Int_t i = 0; i < 100; i+=2) {
       
       if( (mult < data[i]) && (mult >= data[i+2]) ) 
        return i/2;
       }
   }
-  if(fCentralityType == kHardAcc) {
+  if(fCentralityType ==  AliEbyEEventBase::kHardAcc) {
     for(int i = 0; i < 100; i+=2) {
       if((mult < data[0]) && (mult >data[i+2]) ) {
        return i/2; 
@@ -280,34 +340,33 @@ 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) { 
+                        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 ==  AliEbyEEventBase::kHardFlat) { 
     for(Int_t i = 0; i < 100; i+=2) {
       if( (mult < data[i]) && (mult >= data[i+2]) ) 
        return i/2;
       }
   }
-  if(fCentralityType == kHardAcc) {
+  if(fCentralityType ==  AliEbyEEventBase::kHardAcc) {
     for(int i = 0; i < 100; i+=2) {
       if((mult < data[0]) && (mult >= data[i+2]) ) {
        return i/2; 
@@ -318,3 +377,96 @@ Int_t AliEbyEEventBase::FindCentralityMC(Double_t mult) const {
   return -3;
 }
 
+
+//____________________________________________________________________//
+Int_t AliEbyEEventBase::FindCentralityESD5(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 ==  AliEbyEEventBase::kHardFlat) { 
+    for(Int_t i = 0; i < 100; i+=5) {
+      
+      if( (mult < data[i]) && (mult >= data[i+5]) ) 
+       return i/5;
+      }
+  }
+  if(fCentralityType ==  AliEbyEEventBase::kHardAcc) {
+    for(int i = 0; i < 100; i+=5) {
+      if((mult < data[0]) && (mult >data[i+5]) ) {
+       return i/5; 
+      }
+    }
+  } 
+  
+return -2;
+  
+  
+}
+
+
+//____________________________________________________________________//
+Int_t AliEbyEEventBase::FindCentralityESD10(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 ==  AliEbyEEventBase::kHardFlat) { 
+    for(Int_t i = 0; i < 100; i+=10) {
+      
+      if( (mult < data[i]) && (mult >= data[i+10]) ) 
+       return i/10;
+      }
+  }
+  if(fCentralityType ==  AliEbyEEventBase::kHardAcc) {
+    for(int i = 0; i < 100; i+=10) {
+      if((mult < data[0]) && (mult >data[i+10]) ) {
+       return i/10; 
+      }
+    }
+  } 
+  
+return -2;
+  
+  
+}
index d64aede80a835cbbdbf232b48272e20f669d4935..504986377fc192881283d8f938eb0a17f801bc75 100644 (file)
@@ -21,8 +21,7 @@ class TList;
 #include "AliPhysicsSelection.h"
 #include "AliBackgroundSelection.h"
 #include "AliPID.h"
-#include "AliESDCentrality.h"
-#include "AliCentralitySelectionTask.h"
+
 class AliESDEvent;
 class AliESDtrack;
 class AliESDVertex;
@@ -31,30 +30,27 @@ class AliMCParticle;
 
 class AliEbyEEventBase : public TObject {
  public:
-  enum TriggerMode { kMB1 = 0, kMB2, kSPDFASTOR };
+  
   enum AnalysisMode { kInvalid = -1, kTPC = 0, kITS, kTPCnITS, kForward, kGlobal };
+  // Global all: TPC: TPC standalone: ITC its only: TPCnITC both tpc and its: Forward  Forward det
+
   enum CentralityType { kHardFlat = 0, kHardAcc, kAll, kFlat, kAcc};
-  //____________________________________________________________________________//
+
+  //kHard : own calculation
+  //All : centrality frame work
+  //Flat:: one centrality by hand
+
+  
   AliEbyEEventBase();
   virtual ~AliEbyEEventBase();
-  //____________________________________________________________________________//
-  void SetAnalysisLevel(const char* type) {fAnalysisLevel = type; }
+  void InitQA();
+  
+  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;
@@ -68,9 +64,7 @@ class AliEbyEEventBase : public TObject {
   Double_t GetMaxX()   const {return fMaxX;}
   Double_t GetMaxY()   const {return fMaxY;}
 
-  // Bool_t IsInPhaseSpace(AliESDtrack *track);
-
-  //____________________________________________________________________________//
+  Bool_t IsInPhaseSpace(AliESDtrack *track);
 
   const  AliESDVertex *GetVertex(AliESDEvent *esd,
                                 AnalysisMode mode,
@@ -86,26 +80,26 @@ class AliEbyEEventBase : public TObject {
   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();}
+  void SetCentralityBin(Int_t cBin) { fCentralityBin = cBin;}
   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 FindCentralityESD5(Double_t mult) const;
+  Int_t FindCentralityESD10(Double_t mult) const;
   Int_t FindCentralityMC(Double_t mult) const;
- //____________________________________________________________________________//
+
  private:
 
   TString      fAnalysisLevel; //! ESD or AOD or MC
@@ -130,9 +124,7 @@ class AliEbyEEventBase : public TObject {
   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
diff --git a/PWG2/EBYE/Fluctuations/AliEbyEFluctuationAnalysis.cxx b/PWG2/EBYE/Fluctuations/AliEbyEFluctuationAnalysis.cxx
new file mode 100644 (file)
index 0000000..7de99ea
--- /dev/null
@@ -0,0 +1,179 @@
+
+/**************************************************************************
+ * 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.                  *
+ **************************************************************************/
+
+/*-------------------------------------------------------------------------
+ *
+ *             AliEbyEFluctuationAnalysis 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 "TH1F.h"
+#include "TH2F.h"
+#include <TH3I.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 "AliESDtrackCuts.h"
+#include "AliEbyEEventBase.h"
+#include "AliEbyEFluctuationAnalysis.h"
+
+ClassImp(AliEbyEFluctuationAnalysis)
+
+//____________________________________________________________________//
+AliEbyEFluctuationAnalysis::AliEbyEFluctuationAnalysis() : 
+  TObject(), 
+  fListMeasure(0),
+  fEbyEBase(0),
+  fESDtrackCuts(0)
+{
+  //Default constructor
+  InitHistos();
+}
+
+//____________________________________________________________________//
+AliEbyEFluctuationAnalysis::~AliEbyEFluctuationAnalysis() {
+  //Default destructor
+  if(fListMeasure) delete fListMeasure;
+  if(fEbyEBase) delete fEbyEBase;
+  if(fESDtrackCuts) delete fESDtrackCuts;
+}
+
+//____________________________________________________________________//
+void AliEbyEFluctuationAnalysis::InitHistos() {
+  fListMeasure = new TList();
+  fListMeasure->SetName("MeasuresList");
+  Int_t cent = 50;
+
+  // cent = fEbyEBase->GetCentralityBin();  
+
+  TH1F *fEvtStat = new TH1F("hEventStatistuc","Analysis Event Counter", 10,0,10);
+  fListMeasure->Add(fEvtStat); // 
+  
+  TH2F *fCvsM = new TH2F("hCentralityVsMultiplisity", "Correlation Plots; Centrality; Multiplicity",
+                                            6000,0,6000,cent,0,(Double_t)cent);
+  fListMeasure->Add(fCvsM);  // Correlation Histo centrality and Multiplicity
+  
+  TH2F *fCharge[cent];
+  
+  char hname[40]; char htitle[100]; 
+  Int_t binm = 100/cent;
+  
+  for(Int_t i = 0; i < cent; i++ ) {  // Preparing Histograms for Each Centrality Bin
+    
+    sprintf(hname,"hNPinCent%02d",i);
+    sprintf(htitle,"N_{+} vs N_{-} in Centrality %02d%% - %02d%%; N_{+}; N_{-}\n",i*binm, (i+1)*binm);
+    
+    fCharge[i] = new TH2F(hname,htitle,3000,0.5,3000.5,3000,0.5,3000.5);
+    fListMeasure->Add(fCharge[i]); 
+  }
+  
+  
+}
+
+
+//____________________________________________________________________//
+void AliEbyEFluctuationAnalysis::Analyze(AliESDEvent* esd) {
+
+  // Analysis from ESD
+  ((TH1F*)(fListMeasure->At(0)))->Fill(1);  
+  
+  Int_t kCent = 1;
+   kCent =  fEbyEBase->GetCentrality(esd);
+   
+  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;
+      if(!fESDtrackCuts->AcceptTrack(track)) continue;
+      array->Add(track);
+    }
+
+  Calculate(array,kCent);
+
+  delete array;
+}
+
+
+//____________________________________________________________________//
+void AliEbyEFluctuationAnalysis::Analyze(AliAODEvent* aod) {
+  // Analysis from AOD
+  printf("%d\n",aod->GetNTracks());
+  
+
+}
+
+
+//____________________________________________________________________//
+void AliEbyEFluctuationAnalysis::Analyze(AliStack* stack) {
+  // Analysis from MC stack
+
+
+  printf("%d \n",stack->GetNtrack());
+
+}
+
+//____________________________________________________________________________//
+void AliEbyEFluctuationAnalysis::Calculate(TObjArray *gTrackArray, Int_t cent){
+
+  ((TH1F*)(fListMeasure->At(0)))->Fill(1,1); 
+  if(cent < 0) return;
+  ((TH1F*)(fListMeasure->At(0)))->Fill(2,1); 
+  Int_t gNtrack = gTrackArray->GetEntries();
+  if(gNtrack < 1) return;
+  ((TH1F*)(fListMeasure->At(0)))->Fill(3,1); 
+
+  AliVParticle* track = 0;
+  Int_t pCharge = 0;
+  Int_t nCharge = 0;
+  ((TH1F*)(fListMeasure->At(1)))->Fill(3,1); 
+  
+  TString gAnalysisLevel = fEbyEBase->GetAnalysisLevel();  
+  for(Int_t i = 0; i < gNtrack; i++) {
+    if(gAnalysisLevel == "ESD")
+      track = dynamic_cast<AliESDtrack*>(gTrackArray->At(i));
+    Short_t charge = track->Charge();
+    if(charge > 0) pCharge += 1; 
+    if(charge < 0) nCharge += 1; 
+  }
+  
+  ((TH2F*)(fListMeasure->At(2)))->Fill(cent,pCharge, nCharge); //+ vs -
+  
+}
diff --git a/PWG2/EBYE/Fluctuations/AliEbyEFluctuationTask.cxx b/PWG2/EBYE/Fluctuations/AliEbyEFluctuationTask.cxx
new file mode 100644 (file)
index 0000000..f401541
--- /dev/null
@@ -0,0 +1,127 @@
+/**************************************************************************
+ * 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.                  *
+ **************************************************************************/
+
+/* $Id$ */
+
+
+#include "Riostream.h"
+#include "TChain.h"
+#include "TTree.h"
+#include "TH1F.h"
+#include "TH2F.h"
+#include "TCanvas.h"
+#include "TList.h"
+#include "AliAnalysisTaskSE.h"
+#include "AliAnalysisManager.h"
+#include "AliStack.h"
+#include "AliESDtrackCuts.h"
+#include "AliESDEvent.h"
+#include "AliESDInputHandler.h"
+#include "AliAODEvent.h"
+#include "AliMCEvent.h"
+#include "AliMultiplicity.h"
+#include "AliEbyEFluctuationAnalysis.h"
+#include "AliEbyEEventBase.h"
+
+#include "AliEbyEFluctuationTask.h"
+
+ClassImp(AliEbyEFluctuationTask)
+
+//________________________________________________________________________
+AliEbyEFluctuationTask::AliEbyEFluctuationTask() 
+:AliAnalysisTaskSE(),
+  fListPhy(0),
+  fEbyEMFBase(0),  
+  fEvtCounter(0),
+  fECnt(0)
+{
+  // Dummy constructor ALWAYS needed for I/O.
+}
+
+//________________________________________________________________________
+AliEbyEFluctuationTask::AliEbyEFluctuationTask(const char *name) 
+  :AliAnalysisTaskSE(name),
+   fListPhy(0),
+   fEbyEMFBase(0),  
+   fEvtCounter(0),
+   fECnt(0)
+{
+  
+  DefineOutput(1, TList::Class());                                         
+}
+
+//________________________________________________________________________
+AliEbyEFluctuationTask::~AliEbyEFluctuationTask()
+{
+   
+    if (fListPhy && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {
+        delete fListPhy;
+    }
+}
+
+//________________________________________________________________________
+void AliEbyEFluctuationTask::UserCreateOutputObjects()
+{
+  
+    fListPhy = new TList();
+    fListPhy->SetOwner();  
+    fEvtCounter = new TH1F("hEvtCounter","Event Statistic",50,0,50);
+    fListPhy->Add(fEvtCounter);
+    
+    fListPhy->Add(dynamic_cast<AliEbyEEventBase*>(fEbyEMFBase->GetEbyEEventBaseObject())->GetQA());
+    fListPhy->Add(fEbyEMFBase->GetListMeasure());
+    
+    PostData(1, fListPhy); 
+}
+
+//________________________________________________________________________
+void AliEbyEFluctuationTask::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);
+      }
+
+    }
+
+}
+
+
+//________________________________________________________________________
+void AliEbyEFluctuationTask::Terminate(Option_t *) 
+{
+    // Draw result to screen, or perform fitting, normalizations
+    // Called once at the end of the query
+        
+  fListPhy = dynamic_cast<TList*> (GetOutputData(1));
+  if(!fListPhy) { Printf("ERROR: could not retrieve TList fOutput"); return; }
+        
+
+}
index 4b71a6aae3af797ca8bc08c12d70f39bc7a4a865..3d0f25b931c30dee599b5b2b3582ba5a3e60f7b5 100755 (executable)
  *                     AliEbyEMFAnalysisTask Class  
  *       This class deals with runing  Multiplicity Fluctuation Task 
  *                 origin: Satyajit Jena <sjena@cern.ch>
- *       MF: Multiplicity Fluctuation 
+ *       MF: Multiplicity Fluctuation
  *------------------------------------------------------------------------*/
  
 #include "TChain.h"
 #include "TString.h"
 #include "TList.h"
 #include "AliESD.h"
 #include "AliESDEvent.h"
 #include "AliAODEvent.h"
-#include "AliEbyEEventBase.h"
+
 #include "AliEbyEMultiplicityFluctuationAnalysis.h"
 #include "AliEbyEMFAnalysisTask.h"
+#include "AliEbyEEventBase.h"
 
 ClassImp(AliEbyEMFAnalysisTask)
 
@@ -48,7 +50,7 @@ AliEbyEMFAnalysisTask::AliEbyEMFAnalysisTask(const char *name)
   fEbyEMFBase(0),  
   fEvtCounter(0),
   fECnt(0)
-  
 {
   // DefineInput(0, TChain::Class());
   DefineOutput(1, TList::Class());
@@ -61,7 +63,8 @@ void AliEbyEMFAnalysisTask::UserCreateOutputObjects()
 
   fEvtCounter = new TH1F("hEvtCounter","Event Statistic",50,0,50);
   fListPhy->Add(fEvtCounter);
-  fListPhy->Add(dynamic_cast<AliEbyEEventBase*>(fEbyEMFBase->GetEbyEEventBaseObject())->GetQA());
+  // fListPhy->Add(dynamic_cast<AliEbyEEventBase*>(fEbyEMFBase->GetEbyEEventBaseObject())->GetQA());
   fListPhy->Add(fEbyEMFBase->GetListMFQA());
   fListPhy->Add(fEbyEMFBase->GetListMeasureMF());
 
@@ -84,17 +87,15 @@ void AliEbyEMFAnalysisTask::UserExec(Option_t *)
        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); 
+  
 
 }
 
@@ -107,6 +108,6 @@ fListPhy = dynamic_cast<TList*> (GetOutputData(1));
     return;
   }
 
-  Info("AliEbyEMFAnalysisTask"," AliEbyEMFAnalysisTask Successfully finished");
+  Info("AliEbyEMFAnalysisTask","Multiplicity  Fluctuation Job Successfully finished");
   
 }
index dc304deac5566305b02dbf47ba3f8c14442e2b51..32d232f8a6ea50c24692b3d07b3d7f7c5d20906a 100755 (executable)
@@ -12,7 +12,6 @@
  * \r
  *------------------------------------------------------------------------*/\r
 \r
-\r
 class TString;\r
 class TH1F;\r
 class TH2F;\r
@@ -21,7 +20,7 @@ class TList;
 \r
 #include "AliAnalysisTaskSE.h"\r
 \r
-class AliEbyEEventBase;\r
+//class AliEbyEEventBase;\r
 class AliEbyEMultiplicityFluctuationAnalysis;\r
 \r
 class  AliEbyEMFAnalysisTask: public AliAnalysisTaskSE {\r
@@ -35,6 +34,8 @@ class  AliEbyEMFAnalysisTask: public AliAnalysisTaskSE {
  \r
   void SetAnalysisObject(AliEbyEMultiplicityFluctuationAnalysis *const analysis) { fEbyEMFBase = analysis;}\r
 \r
\r
+\r
  private:\r
 \r
   TList *fListPhy;\r
@@ -42,7 +43,7 @@ class  AliEbyEMFAnalysisTask: public AliAnalysisTaskSE {
   AliEbyEMultiplicityFluctuationAnalysis *fEbyEMFBase;\r
   TH1F *fEvtCounter;\r
   Int_t fECnt;\r
-    \r
\r
   AliEbyEMFAnalysisTask(const AliEbyEMFAnalysisTask&); \r
   AliEbyEMFAnalysisTask& operator=(const AliEbyEMFAnalysisTask&); \r
   \r
diff --git a/PWG2/EBYE/Fluctuations/AliEbyEMFAnalysisTaskT.cxx b/PWG2/EBYE/Fluctuations/AliEbyEMFAnalysisTaskT.cxx
new file mode 100644 (file)
index 0000000..a7f7657
--- /dev/null
@@ -0,0 +1,139 @@
+/**************************************************************************
+ * 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.                  *
+ **************************************************************************/
+
+/* $Id$ */
+
+#include "AliEbyEMFAnalysisTaskT.h"
+#include "Riostream.h"
+#include "TChain.h"
+#include "TTree.h"
+#include "TH1F.h"
+#include "TH2F.h"
+#include "TCanvas.h"
+#include "TList.h"
+#include "AliAnalysisTaskSE.h"
+#include "AliAnalysisManager.h"
+#include "AliStack.h"
+#include "AliESDtrackCuts.h"
+#include "AliESDEvent.h"
+#include "AliESDInputHandler.h"
+#include "AliAODEvent.h"
+#include "AliMCEvent.h"
+#include "AliMultiplicity.h"
+#include "AliEbyEMultiplicityFluctuationAnalysis.h"
+#include "AliEbyEEventBase.h"
+
+
+ClassImp(AliEbyEMFAnalysisTaskT)
+
+//________________________________________________________________________
+AliEbyEMFAnalysisTaskT::AliEbyEMFAnalysisTaskT() 
+:AliAnalysisTaskSE(),
+  fListPhy(0),
+  fEbyEMFBase(0),  
+  fEvtCounter(0),
+  fECnt(0),
+  fTree(0)
+{
+    // Dummy constructor ALWAYS needed for I/O.
+}
+
+//________________________________________________________________________
+AliEbyEMFAnalysisTaskT::AliEbyEMFAnalysisTaskT(const char *name) 
+   :AliAnalysisTaskSE(name),
+    fListPhy(0),
+    fEbyEMFBase(0),  
+    fEvtCounter(0),
+    fECnt(0),
+    fTree(0)
+{
+  
+  DefineOutput(1, TList::Class());                                         
+  DefineOutput(2, TTree::Class());                                         
+}
+
+//________________________________________________________________________
+AliEbyEMFAnalysisTaskT::~AliEbyEMFAnalysisTaskT()
+{
+   
+    if (fListPhy && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {
+        delete fListPhy;
+    }
+    if(fTree) delete fTree;
+}
+
+//________________________________________________________________________
+void AliEbyEMFAnalysisTaskT::UserCreateOutputObjects()
+{
+  
+    fListPhy = new TList();
+    fListPhy->SetOwner();  
+    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());
+    
+    //  fTree = new TTree("thisss","mine");
+
+     fTree = fEbyEMFBase->GetFluctuationTree();
+
+    
+
+    PostData(1, fListPhy); 
+    //  PostData(2,fEbyEMFBase->GetFluctuationTree());
+     PostData(2, fTree); 
+}
+
+//________________________________________________________________________
+void AliEbyEMFAnalysisTaskT::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);
+      }
+
+    }
+
+}
+
+
+//________________________________________________________________________
+void AliEbyEMFAnalysisTaskT::Terminate(Option_t *) 
+{
+    // Draw result to screen, or perform fitting, normalizations
+    // Called once at the end of the query
+        
+  fListPhy = dynamic_cast<TList*> (GetOutputData(1));
+  if(!fListPhy) { Printf("ERROR: could not retrieve TList fOutput"); return; }
+        
+
+}
index 842af498c380022d3d5a8e8f96d8615d744129af..5276147b7844455d74968ee2706f8ee58b251cf9 100644 (file)
@@ -1,3 +1,4 @@
+
 /**************************************************************************
  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
  *                                                                        *
@@ -15,9 +16,9 @@
 
 /*-------------------------------------------------------------------------
  *
- *           AliEbyEMultiplicityFluctuationAnalysis base class
- *        This class deals with the multiplicity  fluctuation 
- *              Origin: Satyajit Jena <sjena@cern.ch>
+ *             AliEbyEMultiplicityFluctuationAnalysis base class
+ *           This class deals with the Multiplicity   fluctuation 
+ *                Origin: Satyajit Jena <sjena@cern.ch>
  *
  ------------------------------------------------------------------------*/
 
@@ -45,6 +46,8 @@
 #include <AliCFDataGrid.h>
 #include <AliTPCPIDResponse.h>
 #include <AliESDpid.h>
+
+#include "AliESDtrackCuts.h"
 #include "AliEbyEEventBase.h"
 #include "AliEbyEMultiplicityFluctuationAnalysis.h"
 
@@ -55,39 +58,111 @@ AliEbyEMultiplicityFluctuationAnalysis::AliEbyEMultiplicityFluctuationAnalysis()
   TObject(), 
   fListMFQA(0),
   fListMeasureMF(0),
-  fEbyEBase(0)
+  fEbyEBase(0),
+  fESDtrackCuts(0),
+  fIsTreeMode(kFALSE),
+  iNpossitive(0),
+  iNnegative(0),
+  iCentrality(0)
 {
-  //Default constructor
+  if(fIsTreeMode) fFluctuationTree = NULL;
   InitHistos();
-
+  //Default constructor
 }
 
+
 //____________________________________________________________________//
 AliEbyEMultiplicityFluctuationAnalysis::~AliEbyEMultiplicityFluctuationAnalysis() {
-
   //Default destructor
-  if(fEbyEBase) delete fEbyEBase;
   if(fListMFQA) delete fListMFQA;
   if(fListMeasureMF) delete fListMeasureMF;
-
+  if(fEbyEBase) delete fEbyEBase;
+  if(fESDtrackCuts) delete fESDtrackCuts;
+  if(fFluctuationTree) delete fFluctuationTree;
+  /*  if(fIsTreeMode) delete fIsTreeMode;
+  if(iNpossitive) delete iNpossitive;
+  if(iNnegative) delete iNnegative;
+  if(iCentrality) delete iCentrality;
+  */
 }
 
 //____________________________________________________________________//
 void AliEbyEMultiplicityFluctuationAnalysis::InitHistos() {
 
+  if(fIsTreeMode) { 
+    fFluctuationTree = new TTree("EbyET","FluctaionContainer");
+    fFluctuationTree->Branch("Positive",&iNpossitive,"iNpossitive/I");
+    fFluctuationTree->Branch("Negative",&iNnegative,"iNnegative/I");
+    fFluctuationTree->Branch("Centrality",&iCentrality,"iCentrality/I");
+  }
+
   fListMFQA = new TList();
   fListMFQA->SetName("MFQaList");
 
   fListMeasureMF = new TList();
   fListMeasureMF->SetName("MFMeasureList");
 
+  // Int_t kCentBin = fEbyEBase->GetCentralityBin();
+  Int_t kCentBin = 50;  
+  Int_t kMultBin = 6000;
+  Double_t kMultMin = 0.0;
+  Double_t kMultMax = 6000;  
+  
+  
   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
+
+  TH2F *fhCentralityV0 = new TH2F("hCentralityV0", "Total Charge Fuctuation", kCentBin,0, (Double_t)kCentBin, 3000,0,30000);
+  fListMFQA->Add(fhCentralityV0); // --:1
+
+  TH1F *fhCentDist= new TH1F("hCentDist", "Total Charge Fuctuation", kCentBin,0, (Double_t)kCentBin);
+  fListMFQA->Add(fhCentDist); // --:2
 
 
+  TH1F *fEvtStat1 = new TH1F("hEventNp"," Event Counters for +", 60,0,60);
+  fListMFQA->Add(fEvtStat1); // --:3
+  
+  TH1F *fEvtStat2 = new TH1F("hEventNn"," Event Counters for +", 60,0,60);
+  fListMFQA->Add(fEvtStat2); // --:4
+
+  TH1F *fEvtStat3 = new TH1F("hEventNppNn"," Event Counters for + + -", 60,0,60);
+  fListMFQA->Add(fEvtStat3); // --:5
+
+  
+  
+  TH2F *fNpCharge = new TH2F("hNpCharge", "Possitive Charge ",kCentBin,0, (Double_t)kCentBin, kMultBin,kMultMin, kMultMax);
+  fListMeasureMF->Add(fNpCharge); // -->:0
+  
+  TH2F *fNnCharge = new TH2F("hNnCharge", "Negative Charge ", kCentBin,0, (Double_t)kCentBin, kMultBin,kMultMin, kMultMax);
+  fListMeasureMF->Add(fNnCharge); // -->:1
+  
+  TH2F *fNCharge = new TH2F("hNCharge", "Total Charge [+ + -]",kCentBin,0, (Double_t)kCentBin, 2*kMultBin,kMultMin, 2*kMultMax);
+  fListMeasureMF->Add(fNCharge); // -->:2
+
+  TH2F *fNetCharge = new TH2F("hNetCharge", "Net Charge [+ - -]",kCentBin,0, (Double_t)kCentBin, kMultBin,kMultMin, kMultMax);
+  fListMeasureMF->Add(fNetCharge); // -->:3
+
+  TH2F *fNnbp = new TH2F("hNnbp", "[-/+] ",kCentBin,0, (Double_t)kCentBin, 1000,0,20); 
+  fListMeasureMF->Add(fNnbp); // -->:4
+  
+  TH2F *fNpbn = new TH2F("hNpbn", "[+/-] ",kCentBin,0, (Double_t)kCentBin, 1000,0,20);
+  fListMeasureMF->Add(fNpbn); // -->:5
+  
+  TH2F *fNpbyNnmNnbyNp = new TH2F("hNpbyNnmNnbyNp", "[(+/-) - (-/+)] ",kCentBin,0, (Double_t)kCentBin,100,-5,5);
+  fListMeasureMF->Add(fNpbyNnmNnbyNp); // -->:6
+
+  TH2F *fNpStarNn = new TH2F("hNpbyNnmNnbyNp", "[(+)(-)] ",kCentBin,0, (Double_t)kCentBin,kMultBin,kMultMin, kMultMax*kMultMax);
+  fListMeasureMF->Add(fNpStarNn); // -->:7
+
+  TH2F *fCorrPvsN = new TH2F("hCorrPvsN", " + ~ -",200,0,6000,200,0,6000);
+  fListMeasureMF->Add(fCorrPvsN); // -->:8
+
+  TH3F *fCorCent = new TH3F("hCorrCentrality", "Number of +ve ~ Number of -ve",kCentBin,0, (Double_t)kCentBin,200,0,6000,200,0,6000);
+  fListMeasureMF->Add(fCorCent); // -->:9
+
+  
+  
 }
 
 
@@ -95,30 +170,133 @@ void AliEbyEMultiplicityFluctuationAnalysis::InitHistos() {
 void AliEbyEMultiplicityFluctuationAnalysis::Analyze(AliESDEvent* esd) {
 
   // Analysis from ESD
-  Int_t cent = 0;
-
   ((TH1F*)(fListMFQA->At(0)))->Fill(1.);  
+
+  Int_t kCent = 1;
+   kCent =  fEbyEBase->GetCentrality(esd);
+  ((TH1F*)(fListMFQA->At(2)))->Fill(kCent);  
+  
+  TObjArray *array = new TObjArray();
   Int_t itr = esd->GetNumberOfTracks();
-  ((TH2F*)(fListMeasureMF->At(0)))->Fill(cent,itr); 
+  
+  for (Int_t iTracks = 0; iTracks < itr; iTracks++) 
+    {
+      AliESDtrack* track = esd->GetTrack(iTracks);
+      if (!track) continue;
+      if(!fESDtrackCuts->AcceptTrack(track)) continue;
+      array->Add(track);
+    }
 
+  Calculate(array,kCent);
+
+  delete array;
 }
 
 
 //____________________________________________________________________//
 void AliEbyEMultiplicityFluctuationAnalysis::Analyze(AliAODEvent* aod) {
   // Analysis from AOD
-  ((TH1F*)(fListMFQA->At(0)))->Fill(1.);  
-  printf("%d\n",aod->GetNTracks());
+  ((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.);
+  ((TH1F*)(fListMFQA->At(0)))->Fill(1.);  
 
   printf("%d \n",stack->GetNtrack());
 
+}
+
+//____________________________________________________________________________//
+void AliEbyEMultiplicityFluctuationAnalysis::Calculate(TObjArray *gTrackArray, Int_t cent){
+
+  ((TH1F*)(fListMFQA->At(0)))->Fill(1,1); 
+  if(cent < 0) return;
+  ((TH1F*)(fListMFQA->At(0)))->Fill(10,1); 
+
+  Int_t gNtrack = gTrackArray->GetEntries();
+  if(gNtrack < 1) return;
+
+  ((TH1F*)(fListMFQA->At(0)))->Fill(20,1); 
+
+  iNpossitive = 0;
+  iNnegative = 0;
+  iCentrality = 0;
+
+  AliVParticle* track = 0;
+  Int_t pCharge = 0;
+  Int_t nCharge = 0;
+
+
+  TString gAnalysisLevel = fEbyEBase->GetAnalysisLevel();  
+  Double_t par[8];
+  for(Int_t i = 0; i < 8; i++) par[i] = 0.0;
+  Double_t pr[8];
+  for(Int_t i = 0; i < 8; i++) pr[i] = 0.0;
+
+   
+
+  for(Int_t i = 0; i < gNtrack; i++) {
+    if(gAnalysisLevel == "ESD")
+      track = dynamic_cast<AliESDtrack*>(gTrackArray->At(i));
+    Short_t charge = track->Charge();
+    if(charge > 0) {
+      pCharge += 1; 
+      ((TH1F*)(fListMFQA->At(3)))->Fill(cent,1);  
+      ((TH1F*)(fListMFQA->At(5)))->Fill(cent,1);  
+    }
+    if(charge < 0) {
+      nCharge += 1; 
+      ((TH1F*)(fListMFQA->At(4)))->Fill(cent,1); 
+      ((TH1F*)(fListMFQA->At(5)))->Fill(cent,1);   
+    }
+  }
+  
+  ((TH1F*)(fListMFQA->At(0)))->Fill(131+cent,pCharge);  
+  ((TH1F*)(fListMFQA->At(0)))->Fill(5,nCharge);  
+  ((TH1F*)(fListMFQA->At(0)))->Fill(6,pCharge+nCharge);  
+  ((TH2F*)(fListMFQA->At(1)))->Fill(cent,pCharge+nCharge);  
+
+
+  par[0] = (Double_t)pCharge;
+  par[1] = (Double_t)nCharge;
+  par[2] = (Double_t)pCharge + (Double_t)nCharge;
+  par[3] = (Double_t)pCharge - (Double_t)nCharge;
+  
+  if(pCharge != 0 ) par[4]   = (Double_t)pCharge/(Double_t)nCharge;
+  if(nCharge != 0 ) par[5]  = (Double_t)nCharge/(Double_t)pCharge;
+  
+  par[6] = (Double_t)pCharge - (Double_t)nCharge;
+  par[7] = (Double_t)pCharge*(Double_t)nCharge;
+
+  //  printf("Centrality: %2d  NTrack: %8d  +ve : %8d  -ve : %8d  %10.6f %10.6f %10.6f\n",
+  //cent, gNtrack, pCharge, nCharge, pr[0], pr[1],value);
+
+
+  ((TH2F*)(fListMeasureMF->At(0)))->Fill(cent, par[0]); //+
+  ((TH2F*)(fListMeasureMF->At(1)))->Fill(cent, par[1]); //-
+  ((TH2F*)(fListMeasureMF->At(2)))->Fill(cent, par[2]); //++-
+  ((TH2F*)(fListMeasureMF->At(3)))->Fill(cent, par[3]); //+--
+  ((TH2F*)(fListMeasureMF->At(4)))->Fill(cent, par[4]); //+/-
+  ((TH2F*)(fListMeasureMF->At(5)))->Fill(cent, par[5]); //-/+
+  ((TH2F*)(fListMeasureMF->At(6)))->Fill(cent, par[6]); //+/-
+  ((TH2F*)(fListMeasureMF->At(7)))->Fill(cent, par[7]);
+  ((TH2F*)(fListMeasureMF->At(8)))->Fill(pCharge,nCharge); 
+  ((TH3F*)(fListMeasureMF->At(9)))->Fill(cent, pCharge,nCharge); 
+  
+    if(fIsTreeMode) {
+      iNpossitive = pCharge;
+      iNnegative = nCharge;
+      iCentrality = cent;
+      //   fFluctuationTree->Fill();
+    
+    }
   
 }
index 3013d59c6c208f0daba75723bcda62fccdff5ce4..aa27b61d4c98b509820c1be42e5b2ecbdb5cff52 100644 (file)
@@ -1,7 +1,6 @@
 #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>
+ *             AliEbyEMultiplicityFluctuationAnalysis base class
+ *           This class deals with the Multiplicity   fluctuation 
+ *                Origin: Satyajit Jena <sjena@cern.ch>
  *
  ------------------------------------------------------------------------*/
 
-
 #include "TObject.h"
 #include "TH1I.h"
 
@@ -24,22 +22,29 @@ class TF1;
 class TH2D;
 class TH1F;
 class TList;
+class TTree;
 class AliAODEvent;
 class AliAODtrack;
 class AliESDEvent;
 class AliESDtrack;
 class AliStack;
-
+class AliESDVertex;
+class AliESDtrackCuts;
 class AliEbyEEventBase;
 
+
 class AliEbyEMultiplicityFluctuationAnalysis : public TObject {
  public:
   
   AliEbyEMultiplicityFluctuationAnalysis();
   virtual ~AliEbyEMultiplicityFluctuationAnalysis();
 
-  void SetBaseAnalysis(AliEbyEEventBase * const baseAnalysis) { fEbyEBase = baseAnalysis;}
-  AliEbyEEventBase *GetEbyEEventBaseObject() const { return fEbyEBase;}
+  void SetBaseAnalysis(AliEbyEEventBase * const baseAnalysis) {
+    fEbyEBase = baseAnalysis;}
+
+
+  AliEbyEEventBase *GetEbyEEventBaseObject() const {
+    return fEbyEBase;}
 
   void InitHistos();
   
@@ -47,21 +52,31 @@ class AliEbyEMultiplicityFluctuationAnalysis : public TObject {
   void Analyze(AliAODEvent *aod);
   void Analyze(AliStack *stack);
   
+  void Calculate(TObjArray *gTrackArray, Int_t cent);
   TList *GetListMFQA() const {return fListMFQA;}
-  TList *GetListMeasureMF() {return fListMeasureMF;}
+  TList *GetListMeasureMF() const {return fListMeasureMF;}
+  void SetAnalysisCutObject(AliESDtrackCuts *const trackCuts) {
+    fESDtrackCuts = trackCuts;}
   
+  void SetTreeMode(Bool_t istree) { fIsTreeMode = istree;}
+  
+  TTree *GetFluctuationTree() const {return fFluctuationTree;}
+
  private:
+  TList *fListMFQA;           //! Global list
+  TList *fListMeasureMF;      //! List Of Mesures for Multiplisity Fluctuation
+  AliEbyEEventBase *fEbyEBase;//! EbyE Events base
+  AliESDtrackCuts *fESDtrackCuts;  
+  Bool_t fIsTreeMode;
+  Int_t iNpossitive;
+  Int_t iNnegative;
+  Int_t iCentrality;
+  TTree *fFluctuationTree;
 
-  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);
+AliEbyEMultiplicityFluctuationAnalysis(const AliEbyEMultiplicityFluctuationAnalysis&);            //! Not implemented
+AliEbyEMultiplicityFluctuationAnalysis& operator=(const AliEbyEMultiplicityFluctuationAnalysis&); //! Not implemented
+
+ClassDef(AliEbyEMultiplicityFluctuationAnalysis,1);
 };
 
 #endif
diff --git a/PWG2/EBYE/Fluctuations/macro/AddFluctuationTask.C b/PWG2/EBYE/Fluctuations/macro/AddFluctuationTask.C
new file mode 100644 (file)
index 0000000..e3261f9
--- /dev/null
@@ -0,0 +1,294 @@
+/************************************************
+ 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("AddTask", "ERROR: No Analysis Manager");
+      return NULL;
+   }
+
+   if (!mgr->GetInputEventHandler()) {
+     Error("AddTaskMF", "ERROR: No input event handler");
+     return NULL;
+   }
+
+     
+   // AliEbyEEventBase *base =  GetEbyEAnalysisBaseObject();
+   AliEbyEMultiplicityFluctuationAnalysis *analysis = GetAnalysisMFObject();
+   AliESDtrackCuts *trackCuts = GetTrackCutsObject();
+   //  analysis->SetBaseAnalysis(base);   
+   analysis->SetAnalysisCutObject(trackCuts);
+   
+   AliEbyEMFAnalysisTask *taskMF  = new AliEbyEMFAnalysisTask("AliEbyEMFAnalysisTask");
+   taskMF->SetAnalysisObject(analysis);        
+   mgr->AddTask(taskMF);
+   
+   AliAnalysisDataContainer *cout 
+     = mgr->CreateContainer("MF", TList::Class(), 
+                           AliAnalysisManager::kOutputContainer,
+                           "AnalysisOutput.mf.root");
+   
+   mgr->ConnectInput(taskMF, 0, mgr->GetCommonInputContainer());
+   mgr->ConnectOutput(taskMF, 1, cout);
+   return taskMF;
+
+}
+
+//_______________________________________________________________________________//
+AliEbyEFluctuationTask *AddTaskF()
+{
+   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+   if (!mgr) {
+      Error("AddTaskF", "ERROR: No Analysis Manager");
+      return NULL;
+   }
+
+   if (!mgr->GetInputEventHandler()) {
+     Error("AddTaskF", "ERROR: No input event handler");
+     return NULL;
+   }
+
+     
+   //  AliEbyEEventBase *base =  GetEbyEAnalysisBaseObject();
+   AliEbyEFluctuationAnalysis *analysis = GetAnalysisFluctuationObject();
+   AliESDtrackCuts *trackCuts = GetTrackCutsObject();
+   //  analysis->SetBaseAnalysis(base);   
+   analysis->SetAnalysisCutObject(trackCuts);
+   
+   AliEbyEFluctuationTask *taskF  = new AliEbyEFluctuationTask("AliEbyEFluctuationTask");
+   taskF->SetAnalysisObject(analysis); 
+   mgr->AddTask(taskF);
+   
+   AliAnalysisDataContainer *cout 
+     = mgr->CreateContainer("Fluc", TList::Class(), 
+                           AliAnalysisManager::kOutputContainer,
+                           "AnalysisOutput.root");
+   
+   mgr->ConnectInput(taskF, 0, mgr->GetCommonInputContainer());
+   mgr->ConnectOutput(taskF, 1, cout);
+   return taskF;
+
+}
+
+//_______________________________________________________________________________//
+
+
+AliEbyEMFAnalysisTaskT *AddTaskMFT()
+{
+   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+   if (!mgr) {
+      Error("AddTask", "ERROR: No Analysis Manager");
+      return NULL;
+   }
+
+   if (!mgr->GetInputEventHandler()) {
+     Error("AddTaskMFT", "ERROR: No input event handler");
+     return NULL;
+   }
+
+     
+   //  AliEbyEEventBase *base =  GetEbyEAnalysisBaseObject();
+   AliEbyEMultiplicityFluctuationAnalysis *analysis = GetAnalysisMFObject();
+   AliESDtrackCuts *trackCuts = GetTrackCutsObject();
+
+   // analysis->SetBaseAnalysis(base);   
+   analysis->SetTreeMode(kTRUE);
+   analysis->SetAnalysisCutObject(trackCuts);
+   
+   AliEbyEMFAnalysisTaskT *taskMF  = new AliEbyEMFAnalysisTaskT("AliEbyEMFAnalysisTaskT");
+   taskMF->SetAnalysisObject(analysis);        
+   mgr->AddTask(taskMF);
+   
+   AliAnalysisDataContainer *cout 
+     = mgr->CreateContainer("MFT", TList::Class(), 
+                           AliAnalysisManager::kOutputContainer,
+                           "AnalysisOutput.mf.root");
+
+   AliAnalysisDataContainer *cout1 
+     = mgr->CreateContainer("EbyET", TTree::Class(), 
+                           AliAnalysisManager::kOutputContainer,
+                           "IntermediateMf.root");
+   
+   mgr->ConnectInput(taskMF, 0, mgr->GetCommonInputContainer());
+   mgr->ConnectOutput(taskMF, 1, cout);
+   mgr->ConnectOutput(taskMF, 2, cout1);
+   return taskMF;
+
+}
+
+//_______________________________________________________________________________//
+
+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;
+   }
+
+   
+   AliEbyEChargeFluctuationAnalysis *analysis = GetAnalysisCFObject();
+   AliEbyECFAnalysisTask *taskCF = new AliEbyECFAnalysisTask("AliEbyECFAnalysisTask");
+  
+   taskCF->SetAnalysisObject(analysis);        
+   
+   mgr->AddTask(taskCF);
+   
+   AliAnalysisDataContainer *cout 
+     = mgr->CreateContainer("CF", TList::Class(), 
+                           AliAnalysisManager::kOutputContainer,
+                           "AnalysisOutput.cf.root");
+   
+   mgr->ConnectInput(taskCF, 0, mgr->GetCommonInputContainer());
+   mgr->ConnectOutput(taskCF, 1, cout);
+   return taskCF;
+
+}
+
+
+//_______________________________________________________________________________//
+AliEbyEEventBase *GetEbyEAnalysisBaseObject(const char* analysisLevel = "ESD",
+                                           const char* esdAnalysisType = "TPC",
+                                           const char* CentralityType = "HardType",
+                                           const char* centEstimator = "V0M") 
+
+{
+
+  printf(" Configuring Base Class \n");
+  /*---------------------------------------------------
+  | analysisLevel : ESD, AOD, MC
+  | esdAnalysisType: TPC, ITC, TPCnITS, FORWARD, GLOBAL
+  | CentralityType: 
+  | HardType: Hard Coded [ from vzero multiplicity ]
+  | Acc:
+  | Flat:
+  | All :
+  | Centrality Estimator: V0M, ZDC, ..... decided later
+  | Centrality Bin: 10(10%), 20(5%) , 50(2%)
+  ------------------------------------------------------*/
+  
+  AliEbyEEventBase *base = new AliEbyEEventBase();
+  // base->InitQA();
+  base->SetAnalysisLevel(analysisLevel);
+  
+  base->SetCentralityBin(50);
+  if(CentralityType == "HardType") {
+    
+    base->SetCentralityType(AliEbyEEventBase::kHardFlat);
+    base->SetCentralityEstimator("V0M");
+    
+  }
+
+  if (CentralityType == "Central") {
+      base->SetCentralityType(AliEbyEEventBase::kFlat);
+     base->SetCentralityEstimator("V0M");
+  }
+
+  if(analysisLevel == "ESD") {
+    switch(esdAnalysisType) {
+    case "TPC":
+      base->SetAnalysisMode(AliEbyEEventBase::kTPC);
+      base->SetPhaseSpace(0.5, 0.3, 1.5, 3.0, 70, 4);
+      // eta, ptmin, ptmax, dcaxyz, TPC clusters, kisquare/clustertpc
+      break;
+      
+    case "ITS":
+      base->SetAnalysisMode(AliEbyEEventBase::kITS);
+      base->SetPhaseSpace(9, -0.9, 0.9, 6, 0.45, 1.05);
+      break;
+      
+    case "TPCnITS":
+      base->SetAnalysisMode(AliEbyEEventBase::kTPCnITS);
+      base->SetPhaseSpace(9, -0.9, 0.9, 6, 0.45, 1.05);
+      break;
+      
+    case "Global":
+      base->SetAnalysisMode(AliEbyEEventBase::kGlobal);
+      base->SetPhaseSpace(20, -1.0, 1.0, 48, 0.3, 1.5);
+      break;
+
+    case "Forward":
+      base->SetAnalysisMode(AliEbyEEventBase::kForward);
+      base->SetPhaseSpace(20, -1.0, 1.0, 48, 0.3, 1.5);
+      break;
+      
+    default:
+      break;
+    }
+   base->SetAcceptedVertexDiamond(10.,10.,25.);
+     
+  }
+  if(analysisLevel == "MC") 
+    base->SetPhaseSpace(10, -0.5, 0.5, 16, 0.5, 0.9);
+  if(analysisLevel == "AOD")
+    base->SetPhaseSpace(10, -0.5, 0.5, 16, 0.5, 0.9);
+  printf("Event Base Created ---------------- OK\n");
+  return base;
+}
+
+
+//_______________________________________________________________________________//
+AliEbyEChargeFluctuationAnalysis *GetAnalysisCFObject() {
+  AliEbyEEventBase *base =  GetEbyEAnalysisBaseObject();
+  AliEbyEChargeFluctuationAnalysis *analysis = new AliEbyEChargeFluctuationAnalysis();
+  
+
+  analysis->SetBaseAnalysis(base);
+  printf("TaskCF: Charge Fluctuation Base Created ---------------- OK\n");
+  return analysis;
+}
+
+//_________________________________________________________________________________//
+AliEbyEMultiplicityFluctuationAnalysis *GetAnalysisMFObject() {
+   AliEbyEEventBase *base =  GetEbyEAnalysisBaseObject();
+   AliEbyEMultiplicityFluctuationAnalysis *analysis = new AliEbyEMultiplicityFluctuationAnalysis();
+   analysis->SetBaseAnalysis(base);
+   printf("TaskMF: Multiplicity Fluctuation Base Created ---------------- OK\n");
+   return analysis;
+}
+
+//_________________________________________________________________________________//
+AliEbyEFluctuationAnalysis *GetAnalysisFluctuationObject() {
+   AliEbyEEventBase *base =  GetEbyEAnalysisBaseObject();
+   AliEbyEFluctuationAnalysis *analysis = new AliEbyEFluctuationAnalysis();
+   analysis->SetBaseAnalysis(base);
+   printf("TaskF: Fluctuation Base Created ---------------- OK\n");
+   return analysis;
+}
+
+//_________________________________________________________________________________//
+
+AliESDtrackCuts *GetTrackCutsObject() {
+
+  AliESDtrackCuts *cuts = new AliESDtrackCuts("bfTrackCuts","bfTrackCuts");
+  // cuts->SetMinNClustersTPC(80);
+  // cuts->SetMinNClustersITS(2);
+  // cuts->SetMaxChi2PerClusterTPC(4.0);
+  
+  // cuts->SetRequireTPCRefit();
+  // cuts->SetRequireITSRefit();
+  // cuts->SetAcceptKinkDaughters(kFALSE);
+  
+  // 
+
+  cuts->SetMaxDCAToVertexXY(0.3);
+  cuts->SetMaxDCAToVertexZ(3);
+  cuts->SetPtRange(0.0,1.5);
+  cuts->SetEtaRange(-0.8,0.8);
+  cuts->SaveHistograms("EbyECuts");
+  
+  return cuts;
+}
diff --git a/PWG2/EBYE/Fluctuations/macro/AddTaskCentrality.C b/PWG2/EBYE/Fluctuations/macro/AddTaskCentrality.C
new file mode 100644 (file)
index 0000000..4b22f60
--- /dev/null
@@ -0,0 +1,33 @@
+AliCentralitySelectionTask *AddTaskCentrality()
+{
+// Macro to connect a centrality selection task to an existing analysis manager.
+  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+  if (!mgr) {
+    ::Error("AddTaskCentrality", "No analysis manager to connect to.");
+    return NULL;
+  }    
+  // Check the analysis type using the event handlers connected to the analysis manager.
+  //==============================================================================
+  if (!mgr->GetInputEventHandler()) {
+    ::Error("AddTaskCentrality", "This task requires an input event handler");
+    return NULL;
+  }
+  TString inputDataType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
+  if (inputDataType != "ESD") {
+    ::Error("AddTaskCentrality", "This task works only on ESD analysis");
+    return NULL;
+  }
+  AliCentralitySelectionTask *centralityTask = new AliCentralitySelectionTask("CentralitySelection");
+  centralityTask->SelectCollisionCandidates(AliVEvent::kMB);
+  mgr->AddTask(centralityTask);
+  
+  AliAnalysisDataContainer *cinput0 = mgr->GetCommonInputContainer();
+  AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("CentralityStat",
+                TList::Class(), AliAnalysisManager::kOutputContainer,
+                "EventStat_temp.root");
+  
+  mgr->ConnectInput(centralityTask, 0, mgr->GetCommonInputContainer());
+  mgr->ConnectOutput(centralityTask,1,coutput1);
+
+  return centralityTask;
+}   
diff --git a/PWG2/EBYE/Fluctuations/macro/AddTaskPhysicsSelection.C b/PWG2/EBYE/Fluctuations/macro/AddTaskPhysicsSelection.C
new file mode 100644 (file)
index 0000000..ceb4488
--- /dev/null
@@ -0,0 +1,43 @@
+AliPhysicsSelectionTask* AddTaskPhysicsSelection(Bool_t mCAnalysisFlag = kFALSE, Bool_t withBckgndRejection = kTRUE, UInt_t computeBG = 0) 
+{
+  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+  if (!mgr) {
+    ::Error("AddTaskPhysicsSelection", "No analysis manager to connect to.");
+    return NULL;
+  }  
+  
+  // Check the analysis type using the event handlers connected to the analysis manager.
+  //==============================================================================
+  if (!mgr->GetInputEventHandler()) {
+    ::Error("AddTaskPhysicsSelection", "This task requires an input event handler");
+    return NULL;
+  }
+  TString inputDataType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
+  
+  // Configure analysis
+  //===========================================================================
+    
+    
+
+  AliPhysicsSelectionTask *task = new AliPhysicsSelectionTask("");
+  mgr->AddTask(task);
+  
+  AliPhysicsSelection* physSel = task->GetPhysicsSelection();
+  if (withBckgndRejection) 
+    physSel->AddBackgroundIdentification(new AliBackgroundSelection());
+  if (mCAnalysisFlag)      
+    physSel->SetAnalyzeMC();
+  if (computeBG)
+    physSel->SetComputeBG(computeBG);
+
+  AliAnalysisDataContainer *cinput0 = mgr->GetCommonInputContainer();
+  AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("cstatsout",
+                TList::Class(),
+                AliAnalysisManager::kOutputContainer,
+                "EventStat_temp.root");
+
+  mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
+  mgr->ConnectOutput(task,1,coutput1);
+
+  return task;
+}   
diff --git a/PWG2/EBYE/Fluctuations/macro/TestCompile.C b/PWG2/EBYE/Fluctuations/macro/TestCompile.C
new file mode 100644 (file)
index 0000000..9cd488d
--- /dev/null
@@ -0,0 +1,40 @@
+void TestCompile()
+{
+
+  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");
+
+
+  gROOT->LoadMacro("../AliEbyEEventBase.cxx++g");  
+  gROOT->LoadMacro("../AliEbyEMultiplicityFluctuationAnalysis.cxx++g"); 
+  gROOT->LoadMacro("../AliEbyEMFAnalysisTask.cxx++g"); 
+  gROOT->LoadMacro("../AliEbyEFluctuationAnalysis.cxx++g"); 
+  gROOT->LoadMacro("../AliEbyEFluctuationTask.cxx++g"); 
+  gROOT->LoadMacro("../AliEbyEMFAnalysisTaskT.cxx++g"); 
+  gROOT->LoadMacro("../AliEbyEChargeFluctuationAnalysis.cxx++g");  
+  gROOT->LoadMacro("../AliEbyECFAnalysisTask.cxx++g");  
+
+  gROOT->LoadMacro("AddFluctuationTask.C");
+
+  AliAnalysisManager *mgr = new AliAnalysisManager("Analysis");
+  AliVEventHandler* esdH = new AliESDInputHandler();
+  mgr->SetInputEventHandler(esdH);
+
+  AddTaskMF();
+  AddTaskMFT();
+  AddTaskCF();
+  AddTaskF();
+
+  mgr->InitAnalysis();
+  mgr->PrintStatus();
+
+
+
+}
diff --git a/PWG2/EBYE/Fluctuations/macro/runFluctuationTask.C b/PWG2/EBYE/Fluctuations/macro/runFluctuationTask.C
new file mode 100644 (file)
index 0000000..4d0ed00
--- /dev/null
@@ -0,0 +1,343 @@
+/****************************************************************
+
+Lunch the Analysis Task for Fluctuation Study 
+Author: Satyajit Jena
+Email:  sjena@cern.ch
+
+Task : MF, MFT, CF, OF
+Running in Local = analmode = local, proof, grid 
+
+*******************************************************************/
+
+
+TString tasktype = "MF"; //OF, MF, MFT, CF
+
+//CAF-AAF Related
+TString dataset      = "/alice/data/LHC10h_000137162_p1_3plus";
+TString proofCluster = "alice-caf.cern.ch";
+TString alirootVer   = "VO_ALICE@AliRoot::v4-21-12-AN";
+
+
+Bool_t UsePar        = kFALSE; // Do you want to use par
+Bool_t UseTrigger    = kFALSE; // activate trigger seletction
+Bool_t UseCentrality = kFALSE; // activate centrality slection
+
+
+void runFluctuationTask(TString analmode = "local")
+{
+  if(analmode.CompareTo("local") == 0 ) {
+    if(!LoadLibraries(analmode)) {
+      printf("Library Not loaded\n");
+      return;
+    }
+    runLocal("file.txt",1000);
+    
+ }
+  else  if(analmode.CompareTo("proof") == 0) {
+    if(!LoadLibraries(analmode)) return;
+    runproof(dataset);
+ }
+  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) {
+    gEnv->SetValue("XSec.GSI.DelegProxy","2");
+    TProof *p = TProof::Open(proofCluster.Data());
+    p->ShowPackages();
+    p->EnablePackage(alirootVer.Data());
+    return kTRUE;
+  }
+  else if(mode.CompareTo("proof") == 0) {
+    printf("Satya FIXME \n");
+  }
+  else {
+    printf(" ERROR: Give proper running mode \n");
+    return kFALSE;
+  }
+  
+}
+
+//______________________________________________________________________
+Bool_t LoadIfParAnalysis(TString mode = "local") {
+  // FIXME: For par file upload methods..
+  
+
+
+}
+
+//______________________________________________________________________
+// Running local
+void runLocal(TString input,int nfile)
+{
+
+  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("AddTaskPhysicsSelection.C");
+  //  gROOT->LoadMacro("AddTaskCentrality.C");
+  
+  //  AliPhysicsSelectionTask* physicsSelTask = AddTaskPhysicsSelection();
+  //  AliCentralitySelectionTask *taskCentrality = AddTaskCentrality();
+
+
+  if(!UsePar) gROOT->LoadMacro("../AliEbyEEventBase.cxx++g");  
+  
+  if(tasktype.CompareTo("CF") == 0) {
+    if(!par) {
+      gROOT->LoadMacro("../AliEbyEMultiplicityFluctuationAnalysis.cxx++g"); 
+      gROOT->LoadMacro("../AliEbyEChargeFluctuationAnalysis.cxx++g");  
+    }
+   
+    gROOT->LoadMacro("AddFluctuationTask.C");
+    AddTaskCF();
+  }
+  else if(tasktype.CompareTo("MF") == 0) {
+    if(!UsePar) {
+      gROOT->LoadMacro("../AliEbyEMultiplicityFluctuationAnalysis.cxx++g"); 
+      gROOT->LoadMacro("../AliEbyEMFAnalysisTask.cxx++g"); 
+    }
+    gROOT->LoadMacro("AddFluctuationTask.C");
+    AddTaskMF();
+  }
+  else if(tasktype.CompareTo("OF") == 0) {
+    if(!UsePar) {
+      gROOT->LoadMacro("../AliEbyEFluctuationAnalysis.cxx++g"); 
+      gROOT->LoadMacro("../AliEbyEFluctuationTask.cxx++g"); 
+    }
+    gROOT->LoadMacro("AddFluctuationTask.C");
+    AddTaskF();
+  }
+  else if (tasktype.CompareTo("MFT") == 0) {
+    if(!UsePar) {
+      gROOT->LoadMacro("../AliEbyEMultiplicityFluctuationAnalysis.cxx++g"); 
+      gROOT->LoadMacro("../AliEbyEMFAnalysisTaskT.cxx++g"); 
+    }
+    gROOT->LoadMacro("AddFluctuationTask.C");
+    AddTaskMFT();
+  }
+  else return;
+
+   
+  
+
+  mgr->SetDebugLevel(0);
+  if (!mgr->InitAnalysis()) return;
+  mgr->PrintStatus();
+  mgr->StartAnalysis("local", chain);
+
+
+}
+
+
+//________________________________________________________
+//Running in proof
+
+void runproof(TString dataset)
+{
+
+     AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+     if (!mgr) mgr = new AliAnalysisManager("FirstCheck");
+     
+     AliVEventHandler* esdH = new AliESDInputHandler();
+     mgr->SetInputEventHandler(esdH);
+     
+     if(UseTrigger) {
+       gProof->Load("AddTaskPhysicsSelection.C");
+       AliPhysicsSelectionTask* physicsSelTask = AddTaskPhysicsSelection();
+     }
+
+     if(UseCentrality) {
+       gProof->Load("AddTaskCentrality.C");    
+       AliCentralitySelectionTask *taskCentrality = AddTaskCentrality();
+     }
+
+     if(!UsePar) gProof->Load("../AliEbyEEventBase.cxx++g");  
+     
+     if(tasktype.CompareTo("CF") == 0) {
+       if(!UsePar) {
+        gProof->Load("../AliEbyEMultiplicityFluctuationAnalysis.cxx++g"); 
+        gProof->Load("../AliEbyEChargeFluctuationAnalysis.cxx++g"); 
+       } 
+       gProof->Load("AddFluctuationTask.C");
+       AddTaskCF();
+     }
+     else if(tasktype.CompareTo("MF") == 0) {
+       if(!UsePar) {
+        gProof->Load("../AliEbyEMultiplicityFluctuationAnalysis.cxx++g"); 
+        gProof->Load("../AliEbyEMFAnalysisTask.cxx++g"); 
+       }
+       gProof->Load("AddFluctuationTask.C");
+       AddTaskMF();
+     }
+
+     else if(tasktype.CompareTo("OF") == 0) {
+       if(!UsePar) {
+        gProof->Load("../AliEbyEFluctuationAnalysis.cxx++g"); 
+        gProof->Load("../AliEbyEAnalysisTask.cxx++g"); 
+       }
+       gProof->Load("AddFluctuationTask.C");
+       AddTaskF();
+     }
+     
+     else if (tasktype.CompareTo("MFT") == 0) {
+       if(!UsePar) {
+        gProof->Load("../AliEbyEMultiplicityFluctuationAnalysis.cxx++g"); 
+        gProof->Load("../AliEbyEMFAnalysisTaskT.cxx++g"); 
+       }
+       gProof->Load("AddFluctuationTask.C");
+       AddTaskMFT();
+     }
+     else return;
+          
+     mgr->SetDebugLevel(0);
+     if (!mgr->InitAnalysis()) 
+       return;
+     
+     mgr->PrintStatus();
+        
+     mgr->StartAnalysis("proof",dataset.Data());
+  
+}
+
+
+//______________________________________________________________________________
+AliAnalysisGrid* CreateAlienHandler(const char *taskname, const char *gridmode, 
+                                   const char *proofcluster, const char *proofdataset)
+{
+    AliAnalysisAlien *plugin = new AliAnalysisAlien();
+    // Set the run mode (can be "full", "test", "offline", "submit" or "terminate")
+    plugin->SetRunMode(gridmode);
+
+    // Set versions of used packages
+    plugin->SetAPIVersion("V1.1x");
+    plugin->SetROOTVersion("v5-27-06b");
+    plugin->SetAliROOTVersion("v4-21-08-AN");
+
+    // Declare input data to be processed.
+
+    // Method 1: Create automatically XML collections using alien 'find' command.
+    // Define production directory LFN
+    plugin->SetGridDataDir("/alice/data/2010/LHC10b");
+    // On real reconstructed data:
+    // plugin->SetGridDataDir("/alice/data/2009/LHC09d");
+    // Set data search pattern
+    //plugin->SetDataPattern("*ESDs.root"); // THIS CHOOSES ALL PASSES
+    // Data pattern for reconstructed data
+    plugin->SetDataPattern("*ESDs/pass2/*ESDs.root"); // CHECK LATEST PASS OF DATA SET IN ALIENSH
+    plugin->SetRunPrefix("000");   // real data, comment out for MC
+    // ...then add run numbers to be considered
+    plugin->AddRunNumber(115514);
+    //plugin->SetRunRange(114917,115322);
+    plugin->SetNrunsPerMaster(1);
+    plugin->SetOutputToRunNo();
+    // comment out the next line when using the "terminate" option, unless
+    // you want separate merged files for each run
+    plugin->SetMergeViaJDL();
+
+    // Method 2: Declare existing data files (raw collections, xml collections, root file)
+    // If no path mentioned data is supposed to be in the work directory (see SetGridWorkingDir())
+    // XML collections added via this method can be combined with the first method if
+    // the content is compatible (using or not tags)
+    //   plugin->AddDataFile("tag.xml");
+    //   plugin->AddDataFile("/alice/data/2008/LHC08c/000057657/raw/Run57657.Merged.RAW.tag.root");
+
+    // Define alien work directory where all files will be copied. Relative to alien $HOME.
+    plugin->SetGridWorkingDir(taskname);
+
+    // Declare alien output directory. Relative to working directory.
+    plugin->SetGridOutputDir("out"); // In this case will be $HOME/taskname/out
+
+    // Declare the analysis source files names separated by blancs. To be compiled runtime
+    // using ACLiC on the worker nodes.
+    plugin->SetAnalysisSource("AliAnalysisTaskEx01.cxx");
+
+    // Declare all libraries (other than the default ones for the framework. These will be
+    // loaded by the generated analysis macro. Add all extra files (task .cxx/.h) here.
+    plugin->SetAdditionalLibs("AliAnalysisTaskEx01.h AliAnalysisTaskEx01.cxx");
+
+    // Declare the output file names separated by blancs.
+    // (can be like: file.root or file.root@ALICE::Niham::File)
+    // To only save certain files, use SetDefaultOutputs(kFALSE), and then
+    // SetOutputFiles("list.root other.filename") to choose which files to save
+    plugin->SetDefaultOutputs();
+    //plugin->SetOutputFiles("list.root");
+
+    // Optionally set a name for the generated analysis macro (default MyAnalysis.C)
+    plugin->SetAnalysisMacro(Form("%s.C",taskname));
+
+    // Optionally set maximum number of input files/subjob (default 100, put 0 to ignore)
+    plugin->SetSplitMaxInputFileNumber(100);
+
+    // Optionally modify the executable name (default analysis.sh)
+    plugin->SetExecutable(Form("%s.sh",taskname));
+
+    // set number of test files to use in "test" mode
+    plugin->SetNtestFiles(10);
+
+    // Optionally resubmit threshold.
+    plugin->SetMasterResubmitThreshold(90);
+
+    // Optionally set time to live (default 30000 sec)
+    plugin->SetTTL(30000);
+
+    // Optionally set input format (default xml-single)
+    plugin->SetInputFormat("xml-single");
+
+    // Optionally modify the name of the generated JDL (default analysis.jdl)
+    plugin->SetJDLName(Form("%s.jdl",taskname));
+
+    // Optionally modify job price (default 1)
+    plugin->SetPrice(1);      
+
+    // Optionally modify split mode (default 'se')    
+    plugin->SetSplitMode("se");
+    
+    //----------------------------------------------------------
+    //---      PROOF MODE SPECIFIC SETTINGS         ------------
+    //---------------------------------------------------------- 
+    // Proof cluster
+    plugin->SetProofCluster(proofcluster);
+    // Dataset to be used   
+    plugin->SetProofDataSet(proofdataset);
+    // May need to reset proof. Supported modes: 0-no reset, 1-soft, 2-hard
+    plugin->SetProofReset(0);
+    // May limit number of workers
+    plugin->SetNproofWorkers(0);
+    // May limit the number of workers per slave
+    plugin->SetNproofWorkersPerSlave(1);   
+    // May use a specific version of root installed in proof
+    plugin->SetRootVersionForProof("current");
+    // May set the aliroot mode. Check http://aaf.cern.ch/node/83 
+    plugin->SetAliRootMode("default"); // Loads AF libs by default
+    // May request ClearPackages (individual ClearPackage not supported)
+    plugin->SetClearPackages(kFALSE);
+    // Plugin test mode works only providing a file containing test file locations, used in "local" mode also
+    plugin->SetFileForTestMode("file1.text"); // file should contain path name to a local directory containg *ESDs.root etc
+    // Request connection to alien upon connection to grid
+    plugin->SetProofConnectGrid(kFALSE);
+
+    return plugin;
+}
+