]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Example Macro updated to the new analysis schema
authorskowron <skowron@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 4 Jul 2004 13:56:53 +0000 (13:56 +0000)
committerskowron <skowron@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 4 Jul 2004 13:56:53 +0000 (13:56 +0000)
HBTAN/hbtanalysis.C

index d4491dee2019b27911ce14a90aeec76badfc8558..a4175d4fa03a9d8e8b4e53d3005416f761877593 100644 (file)
@@ -1,85 +1,63 @@
-#ifndef __MAKECINT__
+#ifndef __MAKECINT__ 
  #ifndef __CINT__
-
-  #include "AliHBTAnalysis.h"
-//  #include "alles.h"
-  #include "AliLoader.h"
+  #include "alles.h"
+  #include <TPDGCode.h>
+  #include "AliRunAnalysis.h"  
+  #include "AliHBTAnalysis.h"  
   #include "AliReader.h"
   #include "AliReaderESD.h"
   #include "AliReaderKineTree.h"
+  #include "AliParticleCut.h"
   #include "AliAOD.h"
   #include "AliAODPairCut.h"
+  #include "AliAODParticleCut.h"
   #include "AliHBTQResolutionFctns.h"
   #include "AliHBTQDistributionFctns.h"
+  #include "AliHBTMonDistributionFctns.h"
   #include "AliHBTTwoTrackEffFctn.h"
   #include "AliHBTCorrelFctn.h"
-  #include "AliHBTLLWeights.h"
+  #include "AliHBTWeightFctn.h"
   #include "AliHBTWeightTheorFctn.h"
+  #include "AliHBTWeights.h"
+  #include "AliHBTLLWeights.h"
   #include "TSystem.h"
   #include "TObjString.h"
   #include "TString.h"
-  #include "TPDGCode.h"
-  #include "TFile.h"
+  #include "AliPDG.h"
   #include "AliHBTMonDistributionFctns.h"
   #include "AliHBTMonResolutionFctns.h"
- #endif
+ #endif 
 #endif
-  
-void hbtanalysis(Option_t* datatype, Option_t* processopt="TracksAndParticles", 
+
+//This macro can not be executed from 
+AliHBTAnalysis* buildanalysis(Int_t pid1, Int_t pid2, Bool_t threeDcuts, Float_t qinvmax, const char* anasuffix = "");
+
+
+void hbtanalysis(Option_t* datatype="Kine", Option_t* processopt="TracksAndParticles",
                 Int_t first = -1,Int_t last = -1, 
-                char *outfile = "hbtanalysis.root")
+                char *prefname = "")
  {
-   
-  AliVAODParticle::SetDebug(0);
-  AliLoader::SetDebug(0);
-  
-  AliAODParticleCut c1;
-  AliAODParticleCut c2 = c1;
-
-//HBT Anlysis Macro
-//Anlyzes TPC recontructed tracks and simulated particles that corresponds to them
-
-//datatype defines type of data to be read
-//  Kine  - analyzes Kine Tree: simulated particles
-//  TPC   - analyzes TPC   tracking + particles corresponding to these tracks
-//  ITSv1 - analyzes ITSv1 ----------------------//--------------------------
-//  ITSv2 - analyzes ITSv2 ----------------------//--------------------------
-
-//processopt defines option passed to AliHBTAnlysis::Process method
-// default: TracksAndParticles - process both recontructed tracks and sim. particles corresponding to them 
-//          Tracks - process only recontructed tracks
-//          Particles - process only simulated particles
-
-//Reads data from diroctories from first to last(including)
-// For examples if first=3 and last=5 it reads from
-//  ./3/
-//  ./4/
-//  ./5/
-//if first or last is negative (or both), it reads from current directory
-//
-//these names I use when analysis is done directly from CASTOR files via RFIO
-//  const char* basedir="rfio:/castor/cern.ch/user/s/skowron/";
-//  const char* serie="standard";
-//  const char* field = "0.4";
-
   const char* basedir=".";
-  const char* serie="";
-  const char* field = "";
+  const char* serie=".";
+  const char* field = ".";
  
-  Bool_t threeDcuts = kFALSE;
-
-  // Dynamically link some shared libs                    
+  Int_t PID[10];
+  PID[0]=kPiPlus;
+  PID[1]=kPiMinus;
+  PID[1]=0;
+
+  Bool_t ident = kTRUE;//identical particles 
+  Bool_t nonident = kFALSE;//non identical particles analysis
+// Dynamically link some shared libs                    
 //  gROOT->LoadMacro("loadlibs.C");
 //  loadlibs();
-  
+  gSystem->Load("$(ALICE_ROOT)/lib/tgt_$(ALICE_TARGET)/libANALYSIS");
   gSystem->Load("$(ALICE_ROOT)/lib/tgt_$(ALICE_TARGET)/libHBTAN");
   
-
   /***********************************************************/
   //Create analysis and reader
-  AliHBTAnalysis * analysis = new AliHBTAnalysis();
-  analysis->SetCutsOnTracks();
   
+  TString dataname;
   AliReader* reader;
   Int_t kine = strcmp(datatype,"Kine");
   Int_t ESD = strcmp(datatype,"ESD");
@@ -89,15 +67,17 @@ void hbtanalysis(Option_t* datatype, Option_t* processopt="TracksAndParticles",
    {
     reader = new AliReaderKineTree();
     processopt="Particles"; //this reader by definition reads only simulated particles
+    dataname = "Kine";
    }
   else if(!ESD)
    {
-    AliReaderESD* esdreader = new AliReaderESD();
-    esdreader->MustTPC(kTRUE);
-    esdreader->ReadSimulatedData(kTRUE);
-    esdreader->SetNumberOfTrackPoints(5,30.);
-    esdreader->SetClusterMap();
-    reader = esdreader;
+    reader = new AliReaderESD();
+    dataname = "TPC";
+   }
+  else if(!intern)
+   {
+//    dataname = "TPC";
+//    reader = new AliReaderAOD(dataname+".data.root");
    }
   else
    {
@@ -105,6 +85,8 @@ void hbtanalysis(Option_t* datatype, Option_t* processopt="TracksAndParticles",
     return;
    }
 
+  cout<<"hbtanalysis.C: Reader Set, "<<reader->Class()->GetName()<<" dataname: "<<dataname<<endl;
+  cout<<"hbtanalysis.C: Setting dirs\n";
   TObjArray* dirs=0;
   if ( (first >= 0) && (last>=0) && ( (last-first)>=0 ) )
    {//read from many dirs dirs
@@ -112,311 +94,399 @@ void hbtanalysis(Option_t* datatype, Option_t* processopt="TracksAndParticles",
      dirs = new TObjArray(last-first+1);
      for (Int_t i = first; i<=last; i++)
       {
+//        sprintf(buff,"%s/%s/%s/%05.5d",basedir,field,serie,i);
         sprintf(buff,"%s/%s/%s/%d",basedir,field,serie,i);
         TObjString *odir= new TObjString(buff);
         dirs->Add(odir);
       }
     }
    reader->SetDirs(dirs);
-   
+   reader->SetName("READER");
+   reader->SetTitle("Reader Used in HBT Analysis");
+   cout<<"hbtanalysis.C: Dirs set\n";
   /***********************************************************/    
   /*****   R E A D E R ***************************************/    
   /***********************************************************/    
   
   //we want have only low pt pi+ so set a cut to reader
   AliAODParticleCut* readerpartcut= new AliAODParticleCut();
-  readerpartcut->SetPtRange(0.0,10.0);
-  readerpartcut->SetPID(kPiPlus);
-  reader->AddParticleCut(readerpartcut);//read this particle type with this cut
+  readerpartcut->SetPtRange(0.0,10000.0);
+//  readerpartcut->SetThetaRange(0.25*TMath::Pi(), 0.75*TMath::Pi());//45->135 deg.
+  readerpartcut->SetYRange(-1.0,1.0);
   
-//  readerpartcut->SetPtRange(0.0,10.0);
-//  readerpartcut->SetPID(kPiMinus);
-//  reader->AddParticleCut(readerpartcut);//read this particle type with this cut
+  Int_t l = 0;
+  while (PID[l] != 0)
+   {
+     readerpartcut->SetPID(PID[l]);
+     reader->AddParticleCut(readerpartcut);//read this particle type with this cut
+     l++;
+   }
   
-  analysis->SetReader(reader);
+  TString filename = prefname + dataname + ".anal.";
+  TString fn;
+  TParticlePDG* pdg1;  
+  TParticlePDG* pdg2;  
+  TString p2name;  
+  TString p1name ;
 
-  AliAODPairCut *paircut = new AliAODPairCut();
-  Float_t qinvmin = 0.0;
-  Float_t qinvmax = 0.05;//50MeV
-  paircut->SetQInvRange(qinvmin,qinvmax);  
-  
- // paircut->SetAvSeparationRange(10.); //AntiMerging
-  paircut->SetClusterOverlapRange(-.5,1.0);//AntiSplitting
-  
-//  AliVAODParticleCut* partcut= new AliVAODParticleCut();
-//  partcut->SetPID(kPiPlus);
-//  paircut->SetFirstPartCut(partcut);
-//  partcut->SetPID(kPiMinus);
-//  paircut->SetSecondPartCut(partcut);
+  /************************************************************/
+  /****   P R O C E S S                 ***********************/
+  /************************************************************/
+  AliHBTAnalysis* hbtanalysis = 0x0;
   
-  analysis->SetGlobalPairCut(paircut);
+  l = 0;
+  Int_t k;
+  while (PID[l] != 0)
+   {
+     pdg1 = TDatabasePDG::Instance()->GetParticle(PID[l]);
+     if (pdg1 == 0x0)
+       {
+         cerr<<"ERROR: hbtanalysis.C: Can not find particle type "<<PID[l]<<" in PDG DataBase\n";
+         l++;
+         continue;
+       }
+     p1name= pdg1->GetName();
+     k=l;
+     while (PID[k] != 0)
+      {
+        if ( (k==l)&&(ident==kFALSE) )  { k++;continue;}
+        if ( (k!=l)&&(nonident==kFALSE) ) { k++;continue; }
+        
+        pdg2 = TDatabasePDG::Instance()->GetParticle(PID[k]);
+        if (pdg1 == 0x0)
+         {
+           cerr<<"ERROR: hbtanalysis.C: Can not find particle type "<<PID[k]<<" in PDG DataBase\n";
+           k++;
+           continue;
+         }
+        p2name = pdg2->GetName();
+        cout<<"hbtanalysis.C: buildanalysis for "<<PID[l]<<"("<<p1name<<")  "
+                                  <<PID[k]<<"("<<p2name<<")\n";
+        fn = filename + p1name + p2name + ".root";
+        cout<<"hbtanalysis.C: File Name is: "<<fn<<endl;
+        
+        AliRunAnalysis* analysis = new AliRunAnalysis();
+        analysis->SetReader(reader);
+        
+        cout<<"hbtanalysis.C: buildanalysis "<<endl;
+        hbtanalysis = buildanalysis(PID[l],PID[k],kFALSE,1.0,"-a1");
+        cout<<"hbtanalysis.C: buildanalysis Done"<<endl;
+        if (hbtanalysis == 0x0)
+         {
+           cout<<"ERROR: hbtanalysis.C: buildanalysis function returned NULL pointer\n";
+           cout<<"ERROR: Deleting Run Analysis ..."<<endl;
+           delete analysis;
+           cout<<"ERROR: Deleting Run Analysis Done"<<endl;
+           k++;
+           continue; 
+         }
+        TFile* histoOutput = TFile::Open(fn,"recreate");
+//        hbtanalysis->SetOutputFileName(fn);
+        
+        AliHBTLLWeights::Instance()->SetParticlesTypes(PID[l],PID[k]);
+        AliHBTLLWeights::Instance()->SetColoumb(kFALSE);
+        AliHBTLLWeights::Instance()->SetStrongInterSwitch(kFALSE);
+        AliHBTLLWeights::Instance()->Init();
+        AliHBTLLWeights::Instance()->Set();
+        
+//        AliHBTCrab::Instance()->Init(PID[l],PID[k]);
+//        AliHBTCrab::Instance()->Set();
+        
+        hbtanalysis->SetProcessOption(AliHBTAnalysis::kSimulated);
+        analysis->Add(hbtanalysis);
+
+        histoOutput->cd();
+        cout<<"hbtanalysis.C: Run\n";
+        analysis->Run();
+        
+        cout<<"hbtanalysis.C: Write\n";
+        reader->Write();
+        cout<<"hbtanalysis.C: Delete analysis\n";
+        hbtanalysis->SetOwner(kTRUE);
+        delete analysis;
+        histoOutput->Close();
+        k++;
+      }
+     l++;
+   }
   
-  /***********************************************************/    
-  /*****   W E I G H T S        ******************************/    
-  /***********************************************************/    
-
-  AliHBTLLWeights::Instance()->SetParticlesTypes(kPiPlus,kPiPlus);
-  AliHBTLLWeights::Instance()->SetColoumb(kFALSE);
-  AliHBTLLWeights::Instance()->SetStrongInterSwitch(kFALSE);
-
-  AliHBTLLWeights::Instance()->SetRandomPosition(kFALSE);
-//AliHBTLLWeights::Instance()->SetR1dw(8.0);
-
-  AliHBTLLWeights::Instance()->Init();
-  AliHBTLLWeights::Instance()->Set();
+  delete readerpartcut;
+  if (dirs) 
+   {
+    dirs->SetOwner();
+    delete dirs;
+   }
 
-  //example function
-  AliHBTWeightTheorQInvFctn  *wqinvcfP = new AliHBTWeightTheorQInvFctn(100,qinvmax);
-  wqinvcfP->SetNumberOfBinsToScale(30);
-  wqinvcfP->Rename("wqinvcfP","Lednicky Q_{inv} Theoretical Correlation Function");
-  analysis->AddParticleFunction(wqinvcfP);
+ }
 
+AliHBTAnalysis* buildanalysis(Int_t pid1, Int_t pid2, Bool_t threeDcuts, Float_t qinvmax, const char* anasuffix)
+ {
   /************************************************************/
   /****   Q INV Correlation Function   ************************/
   /************************************************************/
-   
-
-  AliHBTQInvCorrelFctn * qinvcfT = new AliHBTQInvCorrelFctn(100,qinvmax);
-  AliHBTQInvCorrelFctn * qinvcfP = new AliHBTQInvCorrelFctn(100,qinvmax);
   
-  analysis->AddTrackFunction(qinvcfT);
-  analysis->AddParticleFunction(qinvcfP);
   
+  AliHBTAnalysis * analysis = new AliHBTAnalysis();
+  analysis->SetBufferSize(1);
   
-  qinvcfP->Rename("qinvcfP","Particle (simulated) Qinv CF \\pi^{+} \\pi^{+}");
-  qinvcfT->Rename("qinvcfT","Track (recontructed) Qinv CF \\pi^{+} \\pi^{+}");
   
-  /************************************************************/
-  /****   Q OUT Correlation Function   ************************/
-  /************************************************************/
+  AliAODPairCut *paircut = new AliAODPairCut();
   
-  AliHBTQOutLCMSCorrelFctn* qoutP = new AliHBTQOutLCMSCorrelFctn();
-  qoutP->Rename("qoutP","Particle (simulated) Q_{out} CF \\pi^{+} \\pi^{+}");
-  AliHBTQOutLCMSCorrelFctn* qoutT = new AliHBTQOutLCMSCorrelFctn(); 
-  qoutT->Rename("qoutT","Track (recontructed) Q_{out} CF \\pi^{+} \\pi^{+}");
-
-  AliAODPairCut *outPairCut = new AliAODPairCut();
-  outPairCut->SetQOutCMSLRange(0.0,0.15);
-  outPairCut->SetQSideCMSLRange(0.0,0.02);
-  outPairCut->SetQLongCMSLRange(0.0,0.02);
-  qoutP->SetPairCut(outPairCut);
-  qoutT->SetPairCut(outPairCut);
-
-  //analysis->AddTrackFunction(qoutP);
-  //analysis->AddParticleFunction(qoutT);
-
-  /************************************************************/
-  /****   Q SIDE Correlation Function   ***********************/
-  /************************************************************/
+  TString anasfx(anasuffix);
   
-  AliHBTQSideLCMSCorrelFctn* qsideP = new AliHBTQSideLCMSCorrelFctn(100,qinvmax); 
-  qsideP->Rename("qsideP","Particle (simulated) Q_{side} CF \\pi^{+} \\pi^{+}");
-  AliHBTQSideLCMSCorrelFctn* qsideT = new AliHBTQSideLCMSCorrelFctn(100,qinvmax); 
-  qsideT->Rename("qsideT","Track (recontructed) Q_{side} CF \\pi^{+} \\pi^{+}");
-
-  AliAODPairCut *sidePairCut = new AliAODPairCut();
-  sidePairCut->SetQOutCMSLRange(0.0,0.02);
-  sidePairCut->SetQSideCMSLRange(0.0,0.15);
-  sidePairCut->SetQLongCMSLRange(0.0,0.02);
-  qsideP->SetPairCut(sidePairCut);
-  qsideT->SetPairCut(sidePairCut);
-
-  //analysis->AddTrackFunction(qsideP);
-  //analysis->AddParticleFunction(qsideT);
-
-  /************************************************************/
-  /****   Q LONG Correlation Function   ***********************/
-  /************************************************************/
-    
-  AliHBTQLongLCMSCorrelFctn* qlongP = new AliHBTQLongLCMSCorrelFctn(100,qinvmax);
-  qlongP->Rename("qlongP","Particle (simulated) Q_{long} CF \\pi^{+} \\pi^{+}");
-  AliHBTQLongLCMSCorrelFctn* qlongT = new AliHBTQLongLCMSCorrelFctn(100,qinvmax); 
-  qlongT->Rename("qlongT","Track (recontructed) Q_{long} CF \\pi^{+} \\pi^{+}");
-
-  AliAODPairCut *longPairCut = new AliAODPairCut();
-  longPairCut->SetQOutCMSLRange(0.0,0.02);
-  longPairCut->SetQSideCMSLRange(0.0,0.02);
-  longPairCut->SetQLongCMSLRange(0.0,0.15);
-  qlongP->SetPairCut(longPairCut);
-  qlongT->SetPairCut(longPairCut);
-
-  //analysis->AddTrackFunction(qlongT);
-  //analysis->AddParticleFunction(qlongT);
+  Float_t qinvmin = 0.0;
+  paircut->SetQInvRange(qinvmin,1.5*qinvmax);  
 
+  TParticlePDG* pdg1 = TDatabasePDG::Instance()->GetParticle(pid1);
+  TString system = pdg1->GetName();
+  system+=" ";
+  if (pid2)
+   {
+    cout<<"Setting cuts on particles: "<<pid1<<"  "<<pid2<<endl;
+    AliAODParticleCut* partcut = new AliAODParticleCut();
+    partcut->SetPID(pid1);
+    paircut->SetFirstPartCut(partcut);
+    partcut->SetPID(pid2);
+    paircut->SetSecondPartCut(partcut);
+    delete partcut;
+    TParticlePDG* pdg2 = TDatabasePDG::Instance()->GetParticle(pid2);
+    system+=pdg2->GetName();
+   }
+  else
+   {
+    system+=pdg1->GetName();
+   }
+  analysis->SetGlobalPairCut(paircut);
+  paircut->SetName("AnalysisGlobalPairCut");
+  paircut->Write();
 
+  cout<<"Building functions"<<endl;
+  
   /************************************************************/
+  /****   Q INV Correlation Function   ************************/
   /************************************************************/
-  /************************************************************/
-  /****   R E S O L U T I O N S         ***********************/
-  /************************************************************/
-  /************************************************************/
-  /************************************************************/
-
-
-
-  AliHBTQInvResolVsKtFctn qinvVsktF(200,1.0,0.0,300,0.015,-0.015);    //QInvLCMS  Res   Vs   Kt
-  if (threeDcuts)  qinvVsktF.SetPairCut(paircut);
-  //analysis->AddResolutionFunction(&qinvVsktF);
-
-  AliHBTQOutResolVsKtFctn qoutVsktF(200,1.0,0.0,300,0.05,-0.05);    //QOutLCMS  Res   Vs   Kt
-  if (threeDcuts)  qoutVsktF.SetPairCut(outPairCut);
-  //analysis->AddResolutionFunction(&qoutVsktF);
-
-  AliHBTQSideResolVsKtFctn qsideVsktF(200,1.0,0.0,300,0.015,-0.015);   //QSideLCMS Res   Vs   Kt
-  if (threeDcuts)  qsideVsktF.SetPairCut(sidePairCut);
-  //analysis->AddResolutionFunction(&qsideVsktF);
-
-  AliHBTQLongResolVsKtFctn qlongVsktF(200,1.0,0.0,300,0.015,-0.015);   //QLongLCMS Res   Vs   Kt
-  if (threeDcuts)  qlongVsktF.SetPairCut(longPairCut);
-  //analysis->AddResolutionFunction(&qlongVsktF);
-
-  AliHBTQInvResolVsQInvFctn qInvVsqinvF(200,qinvmax,qinvmin,300,0.015,-0.015); //QInvLCMS Res   Vs   QInvLCMS
-  //analysis->AddResolutionFunction(&qInvVsqinvF);
-
-  AliHBTQOutResolVsQInvFctn qoutVsqinvF(200,qinvmax,qinvmin,300,0.05,-0.05);  //QOutLCMS  Res   Vs   QInvLCMS
-  if (threeDcuts)  qoutVsqinvF.SetPairCut(outPairCut);
-  //analysis->AddResolutionFunction(&qoutVsqinvF);
-
-  AliHBTQSideResolVsQInvFctn qsideVsqinvF(200,qinvmax,qinvmin,300,0.015,-0.015); //QSideLCMS Res   Vs   QInvLCMS
-  if (threeDcuts)  qsideVsqinvF.SetPairCut(sidePairCut);
-  //analysis->AddResolutionFunction(&qsideVsqinvF);
-
-  AliHBTQLongResolVsQInvFctn qlongVsqinvF(200,qinvmax,qinvmin,300,0.015,-0.015); //QLongLCMS Res   Vs   QInvLCMS
-  if (threeDcuts)  qlongVsqinvF.SetPairCut(longPairCut);
-  //analysis->AddResolutionFunction(&qlongVsqinvF);
-
-
-  AliHBTPairThetaResolVsQInvFctn pairThetaVsqinv(200,qinvmax,qinvmin,300,0.015,-0.015);
-  if (threeDcuts) pairThetaVsqinv.SetPairCut(longPairCut);
-  //analysis->AddResolutionFunction(&pairThetaVsqinv);
-
-  AliHBTPairThetaResolVsKtFctn pairThetaVsKt(200,1.0,0.0,300,0.015,-0.015);
-  if (threeDcuts) pairThetaVsKt.SetPairCut(longPairCut);
-  //analysis->AddResolutionFunction(&pairThetaVsKt);
+  //general cross check
+  AliHBTQInvCorrelFctn * qinvcfP = new AliHBTQInvCorrelFctn(1000,qinvmax);
+  qinvcfP->SetNumberOfBinsToScale(200);
+  qinvcfP->Rename("qinvcfP"+anasfx,"Particle (simulated) Q_{inv} Correlation Function "+ system + anasfx);
+  analysis->AddParticleFunction(qinvcfP);
 
-  AliAODPairCut phipc;
-  phipc.SetQLongCMSLRange(0.0,0.02);
+//===========================================================================================  
 
-  AliHBTPairPhiResolVsQInvFctn pairPhiVsqinv(200,qinvmax,qinvmin,300,0.015,-0.015);
-  if (threeDcuts) pairPhiVsqinv.SetPairCut(&phipc);
-  //analysis->AddResolutionFunction(&pairPhiVsqinv);
+  AliHBTWeightTheorQInvFctn  *wqinvcf = new AliHBTWeightTheorQInvFctn(1000,qinvmax);
+  wqinvcf->SetNumberOfBinsToScale(200);
+  wqinvcf->Rename("wqinvcf","Particle (simulated) Lednicky Q_{inv} Correlation Function "+system);
+  analysis->AddParticleFunction(wqinvcf);
+   
+  AliHBTWeightTheorOSLFctn *wqoslcf = new AliHBTWeightTheorOSLFctn(60,qinvmax,0.0,60,qinvmax,0.0,60,qinvmax,0.0);
+  wqoslcf->Rename("wqoslcf","Particle (simulated) Lednicky OSL Theoret Correlation Function "+system);
+  wqoslcf->SetNumberOfBinsToScale(20,20,20);
+  analysis->AddParticleFunction(wqoslcf);
 
-  AliHBTPairPhiResolVsKtFctn pairPhiVsKt(200,1.0,0.0,300,0.015,-0.015);
-  if (threeDcuts) pairPhiVsKt.SetPairCut(&phipc);
-  //analysis->AddResolutionFunction(&pairPhiVsKt);
+//===========================================================================================  
+  AliAODPairCut *cfPairCutKt = new AliAODPairCut();
 
+//===========================================================================================  
+  cfPairCutKt->SetKtRange(0.0,0.2);
+  
+  AliHBTWeightTheorQInvFctn  *wqinvcfK11 = new AliHBTWeightTheorQInvFctn(1000,qinvmax);
+  wqinvcfK11->SetNumberOfBinsToScale(200);
+  wqinvcfK11->SetPairCut(cfPairCutKt);
+  wqinvcfK11->Rename("wqinvcfK11","Particle (simulated) Lednicky Q_{inv} Correlation Function 0.0<p_{t}<0.2 "+system);
+  analysis->AddParticleFunction(wqinvcfK11);
+   
+  AliHBTWeightTheorOSLFctn *wqoslcfK11 = new AliHBTWeightTheorOSLFctn(60,qinvmax,0.0,60,qinvmax,0.0,60,qinvmax,0.0);
+  wqoslcfK11->Rename("wqoslcfK11","Particle (simulated) Lednicky OSL Theoret Correlation Function 0.0<p_{t}<0.2 "+system);
+  wqoslcfK11->SetNumberOfBinsToScale(20,20,20);
+  wqoslcfK11->SetPairCut(cfPairCutKt);
+  analysis->AddParticleFunction(wqoslcfK11);
+//===========================================================================================  
+
+  cfPairCutKt->SetKtRange(0.2,0.4);
+  
+  AliHBTWeightTheorQInvFctn  *wqinvcfK12 = new AliHBTWeightTheorQInvFctn(1000,qinvmax);
+  wqinvcfK12->SetNumberOfBinsToScale(200);
+  wqinvcfK12->SetPairCut(cfPairCutKt);
+  wqinvcfK12->Rename("wqinvcfK12","Particle (simulated) Lednicky Q_{inv} Correlation Function 0.2<p_{t}<0.4 "+system);
+  analysis->AddParticleFunction(wqinvcfK12);
+   
+  AliHBTWeightTheorOSLFctn *wqoslcfK12 = new AliHBTWeightTheorOSLFctn(60,qinvmax,0.0,60,qinvmax,0.0,60,qinvmax,0.0);
+  wqoslcfK12->Rename("wqoslcfK12","Particle (simulated) Lednicky OSL Theoret Correlation Function 0.2<p_{t}<0.4 "+system);
+  wqoslcfK12->SetNumberOfBinsToScale(20,20,20);
+  wqoslcfK12->SetPairCut(cfPairCutKt);
+  analysis->AddParticleFunction(wqoslcfK12);
+//=========================================================================================== 
+
+  cfPairCutKt->SetKtRange(0.4,0.6);
+
+  AliHBTWeightTheorQInvFctn  *wqinvcfK21 = new AliHBTWeightTheorQInvFctn(1000,qinvmax);
+  wqinvcfK21->SetNumberOfBinsToScale(200);
+  wqinvcfK21->SetPairCut(cfPairCutKt);
+  wqinvcfK21->Rename("wqinvcfK21","Particle (simulated) Lednicky Q_{inv} Correlation Function 0.4<p_{t}<0.6 "+system);
+  analysis->AddParticleFunction(wqinvcfK21);
+
+  AliHBTWeightTheorOSLFctn *wqoslcfK21 = new AliHBTWeightTheorOSLFctn(60,qinvmax,0.0, 60,qinvmax,0.0, 60,qinvmax,0.0);
+  wqoslcfK21->Rename("wqoslcfK21","Particle (simulated) Lednicky OSL Theoret Correlation Function 0.4<p_{t}<0.6 "+system);
+  wqoslcfK21->SetNumberOfBinsToScale(20,20,20);
+  wqoslcfK21->SetPairCut(cfPairCutKt);
+  analysis->AddParticleFunction(wqoslcfK21);
+//===========================================================================================  
+
+  cfPairCutKt->SetKtRange(0.6,0.8);
+
+  AliHBTWeightTheorQInvFctn  *wqinvcfK22 = new AliHBTWeightTheorQInvFctn(1000,qinvmax);
+  wqinvcfK22->SetNumberOfBinsToScale(200);
+  wqinvcfK22->SetPairCut(cfPairCutKt);
+  wqinvcfK22->Rename("wqinvcfK22","Particle (simulated) Lednicky Q_{inv} Correlation Function 0.6<p_{t}<0.8 "+system);
+  analysis->AddParticleFunction(wqinvcfK22);
+
+  AliHBTWeightTheorOSLFctn *wqoslcfK22 = new AliHBTWeightTheorOSLFctn(60,qinvmax,0.0, 60,qinvmax,0.0, 60,qinvmax,0.0);
+  wqoslcfK22->Rename("wqoslcfK22","Particle (simulated) Lednicky OSL Theoret Correlation Function 0.6<p_{t}<0.8 "+system);
+  wqoslcfK22->SetNumberOfBinsToScale(20,20,20);
+  wqoslcfK22->SetPairCut(cfPairCutKt);
+  analysis->AddParticleFunction(wqoslcfK22);
+//===========================================================================================  
+
+  cfPairCutKt->SetKtRange(0.8,1.2);
+
+  AliHBTWeightTheorQInvFctn  *wqinvcfK3 = new AliHBTWeightTheorQInvFctn(1000,qinvmax);
+  wqinvcfK3->SetNumberOfBinsToScale(200);
+  wqinvcfK3->SetPairCut(cfPairCutKt);
+  wqinvcfK3->Rename("wqinvcfK3","Particle (simulated) Lednicky Q_{inv} Correlation Function 0.8<p_{t}<1.2 "+system);
+  analysis->AddParticleFunction(wqinvcfK3);
+
+  AliHBTWeightTheorOSLFctn *wqoslcfK3 = new AliHBTWeightTheorOSLFctn(60,qinvmax,0.0, 60,qinvmax,0.0, 60,qinvmax,0.0);
+  wqoslcfK3->Rename("wqoslcfK3","Particle (simulated) Lednicky OSL Theoret Correlation Function 0.8<p_{t}<1.2 "+system);
+  wqoslcfK3->SetNumberOfBinsToScale(20,20,20);
+  wqoslcfK3->SetPairCut(cfPairCutKt);
+  analysis->AddParticleFunction(wqoslcfK3);
+//===========================================================================================  
+
+  cfPairCutKt->SetKtRange(1.2,100000.);
+
+  AliHBTWeightTheorQInvFctn  *wqinvcfK4 = new AliHBTWeightTheorQInvFctn(1000,qinvmax);
+  wqinvcfK4->SetNumberOfBinsToScale(200);
+  wqinvcfK4->SetPairCut(cfPairCutKt);
+  wqinvcfK4->Rename("wqinvcfK4","Particle (simulated) Lednicky Q_{inv} Correlation Function 1.2<p_{t} "+system);
+  analysis->AddParticleFunction(wqinvcfK4);
+
+  AliHBTWeightTheorOSLFctn *wqoslcfK4 = new AliHBTWeightTheorOSLFctn(60,qinvmax,0.0, 60,qinvmax,0.0, 60,qinvmax,0.0);
+  wqoslcfK4->Rename("wqoslcfK4","Particle (simulated) Lednicky OSL Theoret Correlation Function 1.2<p_{t} "+system);
+  wqoslcfK4->SetNumberOfBinsToScale(20,20,20);
+  wqoslcfK4->SetPairCut(cfPairCutKt);
+  analysis->AddParticleFunction(wqoslcfK4);
+//===========================================================================================  
+  
 
-  AliHBTQOutResolVsQOutFctn qoutVsqoutF;  //QOutLCMS  Res   Vs   QOut
-  if (threeDcuts) qoutVsqoutF.SetPairCut(outPairCut);
-  //analysis->AddResolutionFunction(&qoutVsqoutF);
+  AliHBTMonVyDistributionVsVxFctn* vydistrvsvx = new  AliHBTMonVyDistributionVsVxFctn(800,1.0e-11,-1.0e-11,800,1.0e-11,-1.0e-11);
+  AliHBTMonRtDistributionVsVzFctn* rtdistrvsvz = new  AliHBTMonRtDistributionVsVzFctn(800,1.0e-11,-1.0e-11,800,1.0e-11,0.0);
+  analysis->AddParticleMonitorFunction(vydistrvsvx);
+  analysis->AddParticleMonitorFunction(rtdistrvsvz);
 
-  AliHBTQSideResolVsQSideFctn qsideVsqsideF;//QSideLCMS Res   Vs   QSide
-  if (threeDcuts) qsideVsqsideF.SetPairCut(sidePairCut);
-  //analysis->AddResolutionFunction(&qsideVsqsideF);
+  AliHBTMonPhiDistributionVsPtFctn*  phidistr  = new AliHBTMonPhiDistributionVsPtFctn(800,0,4,200,6.3,-3.2);
+  AliHBTMonThetaDistributionVsPtFctn* thetadistr = new AliHBTMonThetaDistributionVsPtFctn();
+  analysis->AddParticleMonitorFunction(phidistr);
+  analysis->AddParticleMonitorFunction(thetadistr);
 
+  cout<<"Building functions Done "<<endl;
+  delete paircut;
   
-  AliHBTQLongResolVsQLongFctn qlongVsqlongF;//QLongLCMS Res   Vs   QLong
-  if (threeDcuts) qlongVsqlongF.SetPairCut(longPairCut);
-  //analysis->AddResolutionFunction(&qlongVsqlongF);
-
+  return analysis;
 
+//===========================================================================================  
+//  EEEE   N   N   DDD   =====================================================================  
+//  E      NN  N   D  D  =====================================================================  
+//  EEE    N N N   D  D  =====================================================================  
+//  E      N  NN   D  D  =====================================================================  
+//  EEEE   N   N   DDD   =====================================================================  
+//===========================================================================================  
   /************************************************************/
+  /****   Q OUT Correlation Function   ************************/
   /************************************************************/
-  /************************************************************/
-  /****   D I S T R B U T I O N S         ***********************/
-  /************************************************************/
-  /************************************************************/
-  /************************************************************/
+  AliAODPairCut *outPairCut = new AliAODPairCut();
+  outPairCut->SetQSideCMSLRange(-0.01,0.01);
+  outPairCut->SetQLongCMSLRange(-0.01,0.01);
+  outPairCut->SetKtRange(0.0,0.8);
 
-  /************************************************************/
-  /****   OUT VS KT                 ***********************/
-  /************************************************************/
-  AliHBTQOutDistributionVsKtFctn qoutVsKtDistP;
-  qoutVsKtDistP.Rename("qoutVsKtDistP",qoutVsKtDistP.GetTitle());
-  AliHBTQOutDistributionVsKtFctn qoutVsKtDistT;
-  qoutVsKtDistT.Rename("qoutVsKtDistT",qoutVsKtDistT.GetTitle());
-  if (threeDcuts)  qoutVsKtDistP.SetPairCut(outPairCut);
-  if (threeDcuts)  qoutVsKtDistT.SetPairCut(outPairCut);
-  //analysis->AddParticleFunction(&qoutVsKtDistP);
-  //analysis->AddTrackFunction(&qoutVsKtDistT);
-  /************************************************************/
-  /****   Side VS KT                 ***********************/
-  /************************************************************/
-  AliHBTQSideDistributionVsKtFctn qSideVsKtDistP;
-  qSideVsKtDistP.Rename("qSideVsKtDistP",qSideVsKtDistP.GetTitle());
-  AliHBTQSideDistributionVsKtFctn qSideVsKtDistT;
-  qSideVsKtDistT.Rename("qSideVsKtDistT",qSideVsKtDistT.GetTitle());
-  if (threeDcuts)  qSideVsKtDistP.SetPairCut(sidePairCut);
-  if (threeDcuts)  qSideVsKtDistT.SetPairCut(sidePairCut);
-  //analysis->AddParticleFunction(&qSideVsKtDistP);
-  //analysis->AddTrackFunction(&qSideVsKtDistT);
-  /************************************************************/
-  /****   Long VS KT                 ***********************/
-  /************************************************************/
-  AliHBTQLongDistributionVsKtFctn qLongVsKtDistP;
-  qLongVsKtDistP.Rename("qLongVsKtDistP",qLongVsKtDistP.GetTitle());
-  AliHBTQLongDistributionVsKtFctn qLongVsKtDistT;
-  qLongVsKtDistT.Rename("qLongVsKtDistT",qLongVsKtDistT.GetTitle());
-  if (threeDcuts)  qLongVsKtDistP.SetPairCut(longPairCut);
-  if (threeDcuts)  qLongVsKtDistT.SetPairCut(longPairCut);
-  //analysis->AddParticleFunction(&qLongVsKtDistP);
-  //analysis->AddTrackFunction(&qLongVsKtDistT);
+  AliHBTWeightTheorQOutFctn *wqcfoutP = new AliHBTWeightTheorQOutFctn(1000,qinvmax,-qinvmax);
+  wqcfoutP->SetNumberOfBinsToScale(200);
+  wqcfoutP->SetPairCut(outPairCut);
+  analysis->AddParticleFunction(wqcfoutP);
 
   /************************************************************/
+  /****   Q SIDE Correlation Function   ************************/
   /************************************************************/
+  AliAODPairCut *sidePairCut = new AliAODPairCut();
+  sidePairCut->SetQOutCMSLRange(-0.01,0.01);
+  sidePairCut->SetQLongCMSLRange(-0.01,0.01);
+  sidePairCut->SetKtRange(0.0,0.8);
+  
+  AliHBTWeightTheorQSideFctn *wqcfsideP = new AliHBTWeightTheorQSideFctn(1000,qinvmax,-qinvmax);
+  wqcfsideP->SetNumberOfBinsToScale(200);
+  wqcfsideP->SetPairCut(sidePairCut);
+  analysis->AddParticleFunction(wqcfsideP);
+
   /************************************************************/
-  /****    M O N I T O R  R E S O L U T I O N S   *************/
-  /************************************************************/
-  /************************************************************/
+  /****   Q LONG Correlation Function   ************************/
   /************************************************************/
+  AliAODPairCut *longPairCut = new AliAODPairCut();
+  longPairCut->SetQOutCMSLRange(-0.01,0.01);
+  longPairCut->SetQSideCMSLRange(-0.01,0.01);
+  longPairCut->SetKtRange(0.0,0.8);
   
-  AliHBTMonPxResolutionVsPtFctn PxVsPtResF(200,1.0,0.0,300,0.05,-0.05);
-  //analysis->AddParticleAndTrackMonitorFunction(&PxVsPtResF);
-  
-  AliHBTMonPyResolutionVsPtFctn PyVsPtResF(200,1.0,0.0,300,0.05,-0.05);
-  //analysis->AddParticleAndTrackMonitorFunction(&PyVsPtResF);
-  
-  AliHBTMonPzResolutionVsPtFctn PzVsPtResF(200,1.0,0.0,300,0.05,-0.05);
-  //analysis->AddParticleAndTrackMonitorFunction(&PzVsPtResF);
-
-  AliHBTMonPResolutionVsPtFctn PVsPtResF(200,1.0,0.0,300,0.05,-0.05);
-  //analysis->AddParticleAndTrackMonitorFunction(&PVsPtResF);
-
-  AliHBTMonPtResolutionVsPtFctn PtVsPtResF(400,4.0,0.0,300,0.07,-0.07);
-  analysis->AddParticleAndTrackMonitorFunction(&PtVsPtResF);
+  AliHBTWeightTheorQLongFctn *wqcflongP = new AliHBTWeightTheorQLongFctn(1000,qinvmax,-qinvmax);
+  wqcflongP->SetNumberOfBinsToScale(200);
+  wqcfsideP->SetPairCut(longPairCut);
+  analysis->AddParticleFunction(wqcflongP);
 
-  AliHBTMonPhiResolutionVsPtFctn PhiVsPtResF(200,1.0,0.0,300,0.02,-0.02);
-  analysis->AddParticleAndTrackMonitorFunction(&PhiVsPtResF);
-
-  AliHBTMonThetaResolutionVsPtFctn ThetaVsPtResF(200,1.0,0.0,300,0.02,-0.02);
-  analysis->AddParticleAndTrackMonitorFunction(&ThetaVsPtResF);
   
+  AliHBTMonPxDistributionFctn* pxdistr = new AliHBTMonPxDistributionFctn();
+  AliHBTMonPyDistributionFctn* pydistr = new AliHBTMonPyDistributionFctn();
+  AliHBTMonPzDistributionFctn* pzdistr = new AliHBTMonPzDistributionFctn();
+  AliHBTMonPDistributionFctn*  pdistr  = new AliHBTMonPDistributionFctn();
+  analysis->AddParticleMonitorFunction(pxdistr);
+  analysis->AddParticleMonitorFunction(pydistr);
+  analysis->AddParticleMonitorFunction(pzdistr);
+  analysis->AddParticleMonitorFunction(pdistr);
   
+  AliHBTMonVxDistributionFctn* vxdistr = new AliHBTMonVxDistributionFctn(800,1.0e-11,-1.0e-11);
+  AliHBTMonVyDistributionFctn* vydistr = new AliHBTMonVyDistributionFctn(800,1.0e-11,-1.0e-11);
+  AliHBTMonVzDistributionFctn* vzdistr = new AliHBTMonVzDistributionFctn(800,1.0e-11,-1.0e-11);
+  AliHBTMonRDistributionFctn*  vrdistr = new AliHBTMonRDistributionFctn (800,1.0e-11,-1.0e-11);
+  analysis->AddParticleMonitorFunction(vxdistr);
+  analysis->AddParticleMonitorFunction(vydistr);
+  analysis->AddParticleMonitorFunction(vzdistr);
+  analysis->AddParticleMonitorFunction(vrdistr);
   
   
-  /************************************************************/
-  /****   P R O C E S S                 ***********************/
-  /************************************************************/
-  analysis->SetBufferSize(2);
-  analysis->SetCutsOnTracks();
-  analysis->Init();
-  analysis->Process(processopt);
+  AliAODParticleCut* vxycut = new AliAODParticleCut();
+  AliHBTMonVyDistributionVsVxFctn* vydistrvsvx1 = new  AliHBTMonVyDistributionVsVxFctn(800,1.0e-11,-1.0e-11,800,1.0e-11,-1.0e-11);
+  vydistrvsvx1->Rename("vydistrvsvx1","Vx:Vy 0.2 < Pt < 1.8");
+  vxycut->SetPtRange(0.2,0.8);
+  vydistrvsvx1->SetParticleCut(vxycut);
+  analysis->AddParticleMonitorFunction(vydistrvsvx1);
+
+  AliHBTMonVyDistributionVsVxFctn* vydistrvsvx2 = new  AliHBTMonVyDistributionVsVxFctn(800,1.0e-11,-1.0e-11,800,1.0e-11,-1.0e-11);
+  vydistrvsvx2->Rename("vydistrvsvx2","Vx:Vy 0.8 < Pt < 1.2");
+  vxycut->SetPtRange(0.8,1.2);
+  vydistrvsvx2->SetParticleCut(vxycut);
+  analysis->AddParticleMonitorFunction(vydistrvsvx2);
+
+  AliHBTMonVyDistributionVsVxFctn* vydistrvsvx3 = new  AliHBTMonVyDistributionVsVxFctn(800,1.0e-11,-1.0e-11,800,1.0e-11,-1.0e-11);
+  vydistrvsvx3->Rename("vydistrvsvx3","Vx:Vy 1.2 < Pt ");
+  vxycut->SetPtRange(1.2,10000.0);
+  vydistrvsvx3->SetParticleCut(vxycut);
+  analysis->AddParticleMonitorFunction(vydistrvsvx3);
   
-  TFile histoOutput(outfile,"recreate"); 
-  analysis->WriteFunctions();
-  histoOutput.Close();
+//  AliHBTTwoKStarCorrelFctn* kstarP = new AliHBTTwoKStarCorrelFctn(600,qinvmax);
+//  kstarP->Rename("kstarP","Particle (simulated) 2K^{*} Correlation Function "+system);
+//  analysis->AddParticleFunction(kstarP);
   
-  delete qinvcfP;
-  delete qinvcfT;
-  delete paircut;
-  delete readerpartcut;
-  if (dirs) 
-   {
-    dirs->SetOwner();
-    delete dirs;
-   }
-  delete reader;
-  delete analysis;
   
+  delete paircut;
+//  delete outPairCut;
+//  delete sidePairCut;
+//  delete longPairCut;
+  return analysis;
  }
-