ROOT logo
//
void runAAF(TString dataset="/alice/sim/LHC10f8c_130844",
	    TString outFName = "trbg.root",
	    Bool_t doRec  = kTRUE,           // fill data histos from new reco
	    Bool_t doInj  = kTRUE,           // create Inj. bg
	    Bool_t doRot  = kTRUE,           // create Rot. bg
	    Bool_t doMix  = kFALSE,//kTRUE,  // create Mix. bg
	    Bool_t useMC  = kTRUE,           // fill MC info (doRec=kTRUE)
	    Bool_t checkReconstructables = kFALSE,//kTRUE, // fill histos for reconstructable (needs useMC and doRec) 
	    // 
	    Float_t etaCut     = 3.0,        // max |eta| range to fill in histos
	    //
	    // specific parameters for reconstruction
	    //----------------------- Zv selection parameters important for mixing, to be tuned
	    Float_t zMin       = -20,        // process events with Z vertex min
	    Float_t zMax       =  20,        //                     max positions
	    Float_t zMixBinSz  =  20, //0.1,  // Zv. bin for mixing
	    //---------------------------------------------------------------------------------
	    //
	    //----------------------- Ntracklets selection parameters important for mixing, to be tuned
	    Float_t ntMin      =   1,         // process events with ESDmult 
	    Float_t ntMax      = 20000,       // within this range
	    Float_t ntMixBinSz = 20000,       // ESDMult bin size for mixing
	    //---------------------------------------------------------------------------------
	    float  phiRot      = 3.14159e+00, // angle for bg. generation with rotation
	    float  injScale    = 1.,//0.7,    // inject injScale*Ncl(Lr1/Lr2) hits
	    Bool_t scaleDTheta = kTRUE,       // scale dTheta by 1/sin^2(theta) in trackleting
	    float  nStdDev     = 25.,         // number of st.dev. for tracklet cut to keep
	    float  dphi        = 0.06,        // dphi window (sigma of tracklet cut)
	    float  dtht        = 0.025,       // dtheta .... (if negative, abs will be used with additional cut on |dthetaX|, apart from w.distance
	    float  phishift    = 0.0045,      // bending shift
	    Bool_t remOvl      = kTRUE,       
	    float  ovlPhiCut   = 0.005, 
	    float  ovlZetaCut  = 0.05,
            Int_t  nEvents     = 50000000,
	    Int_t  nEventsSkip = 0,
	    TString alirootVer = "VO_ALICE@AliRoot::v4-21-05-AN",
	    TString rootVer    = "default",//"VO_ALICE@ROOT::v5-27-06b",
	    //
	    TString proofCluster="shahoian@alice-caf.cern.ch"
	    ) 
{ 
  //  
  Bool_t runLocal = kFALSE; // true only for local test mode
  if (runLocal) {
    dataset = "/default/shahoian/test_pp";
    //dataset = "/default/shahoian/test";
    proofCluster = "";
    alirootVer = "AliRootProofLite";
    nEvents = 500;
  }
  //
  if (dataset.Contains("alice/data") && useMC) {
    printf("Running with read data dataset, switching OFF useMC\n");
    useMC = kFALSE;
  }
  //
  printf("Start Analysis for %s, max %d Events skipping %d\n"
	 "Event Cuts: |eta|<%.1f, %.2f<Zv<%.2f (Mix.Bin:%.2f), %.0f<Mult<%0.f (Mix.Bin:%.0f)\n"
	 "Reco:%d Inj:%d Rot:%d Mix:%d | MCinfo:%d CheckReconstructables:%d\n"
	 "PhiRot:%.4f InjScale:%.2f ScaleDTheta:%d NStdDev:%.1f DPhi:%.4f DTheta:%.4f PhiShift:%.4f\n"
	 "RemoveOverlaps:%d PhiOvl:%.4f ZEtaOvl:%.4f\n",
	 dataset.Data(),nEvents,nEventsSkip,
	 etaCut,zMin,zMax,zMixBinSz,ntMin,ntMax,ntMixBinSz,
	 doRec,doInj,doRot,doMix,useMC,checkReconstructables,
	 phiRot,injScale,scaleDTheta,nStdDev,dphi,dtht,phishift,
	 remOvl,ovlPhiCut,ovlZetaCut);
  //
  printf("Requested: %s %s\n",alirootVer.Data(), rootVer.Data());
  printf("Output expected in %s\n",outFName.Data());
  //
  gEnv->SetValue("XSec.GSI.DelegProxy","2");
  //
  TString alirootMode="REC";
  TString extraLibs = "ITSrec:CDB:Geom:"; // not needed in default aliroot mode
  //extraLibs+= "ANALYSIS:ANALYSISalice";
  extraLibs+= "ANALYSIS:ANALYSISalice:EventMixing";
  TList *list = new TList();
  // sets $ALIROOT_MODE on each worker to let proof to know to run in special mode
  list->Add(new TNamed("ALIROOT_MODE"      , alirootMode.Data()));
  list->Add(new TNamed("ALIROOT_EXTRA_LIBS", extraLibs.Data()));
  list->Add(new TNamed("ALIROOT_ENABLE_ALIEN","1"));
  //
  //REM: same version of AliRoot on client!!!!! Otherwise error!! 
  TProof::Mgr(proofCluster.Data())->SetROOTVersion(rootVer.Data());
  TProof::Open(proofCluster.Data());//,"workers=10x");
  //  TProof::Open(proofCluster.Data(),"workers=1x");
  if (!gProof) {
    Error("runAAF.C","Connection to AF failed.");
    return;
  }
  gProof->Exec("TObject *o = gEnv->GetTable()->FindObject(\"Proof.UseMergers\");"
	       "gEnv->GetTable()->Remove(o);", kTRUE);
  //  gProof->SetParameter("PROOF_UseMergers", 0);
  // Lets enable aliroot + extra libs on proof cluster
  if (runLocal) gProof->UploadPackage(alirootVer.Data());
  gProof->EnablePackage(alirootVer.Data(), list);
  //
  gROOT->LoadMacro("MyAnalysisMacro.C");

  if (runLocal) {
    Int_t numWorkers = gProof->GetParallel();
    if (numWorkers<1) {printf("No workers\n"); return;}
    gProof->SetParameter("PROOF_PacketizerStrategy", (Int_t)0);
    int frac = (Int_t) 5 / numWorkers;
    if (frac<1) frac = 1;
    gProof->SetParameter("PROOF_PacketAsAFraction", frac);
  }
  MyAnalysisMacro(dataset,outFName,doRec,doInj,doRot,doMix,useMC,checkReconstructables,
		  etaCut,zMin,zMax,zMixBinSz,ntMin,ntMax,ntMixBinSz,
		  phiRot,injScale,scaleDTheta,nStdDev,dphi,dtht,
		  phishift,remOvl,ovlPhiCut,ovlZetaCut,nEvents,nEventsSkip);
  //
}
 runAAF.C:1
 runAAF.C:2
 runAAF.C:3
 runAAF.C:4
 runAAF.C:5
 runAAF.C:6
 runAAF.C:7
 runAAF.C:8
 runAAF.C:9
 runAAF.C:10
 runAAF.C:11
 runAAF.C:12
 runAAF.C:13
 runAAF.C:14
 runAAF.C:15
 runAAF.C:16
 runAAF.C:17
 runAAF.C:18
 runAAF.C:19
 runAAF.C:20
 runAAF.C:21
 runAAF.C:22
 runAAF.C:23
 runAAF.C:24
 runAAF.C:25
 runAAF.C:26
 runAAF.C:27
 runAAF.C:28
 runAAF.C:29
 runAAF.C:30
 runAAF.C:31
 runAAF.C:32
 runAAF.C:33
 runAAF.C:34
 runAAF.C:35
 runAAF.C:36
 runAAF.C:37
 runAAF.C:38
 runAAF.C:39
 runAAF.C:40
 runAAF.C:41
 runAAF.C:42
 runAAF.C:43
 runAAF.C:44
 runAAF.C:45
 runAAF.C:46
 runAAF.C:47
 runAAF.C:48
 runAAF.C:49
 runAAF.C:50
 runAAF.C:51
 runAAF.C:52
 runAAF.C:53
 runAAF.C:54
 runAAF.C:55
 runAAF.C:56
 runAAF.C:57
 runAAF.C:58
 runAAF.C:59
 runAAF.C:60
 runAAF.C:61
 runAAF.C:62
 runAAF.C:63
 runAAF.C:64
 runAAF.C:65
 runAAF.C:66
 runAAF.C:67
 runAAF.C:68
 runAAF.C:69
 runAAF.C:70
 runAAF.C:71
 runAAF.C:72
 runAAF.C:73
 runAAF.C:74
 runAAF.C:75
 runAAF.C:76
 runAAF.C:77
 runAAF.C:78
 runAAF.C:79
 runAAF.C:80
 runAAF.C:81
 runAAF.C:82
 runAAF.C:83
 runAAF.C:84
 runAAF.C:85
 runAAF.C:86
 runAAF.C:87
 runAAF.C:88
 runAAF.C:89
 runAAF.C:90
 runAAF.C:91
 runAAF.C:92
 runAAF.C:93
 runAAF.C:94
 runAAF.C:95
 runAAF.C:96
 runAAF.C:97
 runAAF.C:98
 runAAF.C:99
 runAAF.C:100
 runAAF.C:101
 runAAF.C:102
 runAAF.C:103
 runAAF.C:104
 runAAF.C:105
 runAAF.C:106
 runAAF.C:107
 runAAF.C:108
 runAAF.C:109
 runAAF.C:110
 runAAF.C:111
 runAAF.C:112
 runAAF.C:113
 runAAF.C:114
 runAAF.C:115