ROOT logo
//
void runAAFMulti(TString dataset="/alice/sim/LHC10h8_000137161", //"/alice/sim/LHC10h6_000137161",
		 TString outFName = "trbg.root",
		 Int_t   nEvents    = -1,//3000,
		 Float_t etaMin     =-0.5,        // min eta range to fill in histos
		 Float_t etaMax     = 0.5,        // max eta range to fill in histos
		 Float_t zMin       = -7,         // process events with Z vertex min
		 Float_t zMax       =  7,         //                     max positions
		 Int_t   useCentVar = 0,          // centrality variable to use: enum {kCentSPD2, kCentV0,  kCentV0CR, kCentTrTPC}
		 Float_t scaleMCV0  = 0.8,     // rescale MC V0 to match data
		 //
		 //
		 Float_t cutSigNStd  = 1.5,       // cut on weighed distance used to extract signal
		 Float_t cutSigDPhiS = -1,        // cut on dPhi-phiBent used to extract signal (if negative -> dphi*sqrt(cutSigNStd)
		 Bool_t  useMC  = kTRUE,          // fill MC info (doRec=kTRUE)
		 //
		 Bool_t doRec  = kTRUE,//kTRUE,           // fill data histos from new reco
		 Bool_t doInj  = kTRUE,//kTRUE,           // create Inj. bg
		 Bool_t doRot  = kFALSE,          // create Rot. bg
		 Bool_t doMix  = kFALSE,//kTRUE,  // create Mix. bg
		 // 
		 // specific parameters for reconstruction
		 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  nEventsSkip = 0,
		 //----------------------- 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
		 //----------------------- Zv selection parameters important for mixing, to be tuned
		 Float_t zMixBinSz  =  14,       //0.1,  // Zv. bin for mixing
		 //---------------------------------------------------------------------------------
		 //
		 Bool_t checkReconstructables = kFALSE,//kTRUE, // fill histos for reconstructable (needs useMC and doRec) 
		 //
		 TString alirootVer = "VO_ALICE@AliRoot::v5-03-24-AN",
		 TString rootVer    = "VO_ALICE@ROOT::v5-33-02b",
		 //
		 //TString proofCluster="shahoian@skaf.saske.sk"
		 TString proofCluster="shahoian@alice-caf.cern.ch"
		 ) 
{ 
  //  
  Bool_t runLocal = kFALSE;//kTRUE; // true only for local test mode
  if (runLocal) {
    //    dataset = "/default/shahoian/test_pp";//"/default/shahoian/test";
    dataset = "default/shahoian/test137366";
    proofCluster = "";
    alirootVer = "$ALICE_ROOT/ANALYSIS/macros/AliRootProofLite";
    gSystem->ExpandPathName(alirootVer);
    nEvents = 500;
  }
  //
  if ((!dataset.Contains("alice/sim")) && useMC) {
    printf("Running with read data dataset, switching OFF useMC\n");
    useMC = kFALSE;
  }
  //
  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:OADB: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_EXTRA_INCLUDES", "ITS:include"));
  if (doRec || doInj || doRot || doMix) 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("runAAFMulti.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);
  //  gProof->EnablePackage(alirootVer.Data());
  //
  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);
  }
  //
  gROOT->LoadMacro("MyAnalysisMacroTrackletMulti.C");
  TStopwatch sw;
  sw.Start();
  MyAnalysisMacroTrackletMulti(dataset,outFName,nEvents,etaMin,etaMax,zMin,zMax,useCentVar,
			       cutSigNStd,cutSigDPhiS,useMC,scaleMCV0,
			       doRec,doInj,doRot,doMix,
			       phiRot,injScale,scaleDTheta,nStdDev,dphi,dtht,
			       phishift,remOvl,ovlPhiCut,ovlZetaCut,nEventsSkip,
			       ntMin,ntMax,ntMixBinSz,zMixBinSz,
			       checkReconstructables);
  //
  sw.Stop();
  sw.Print();
}
 runAAFMulti.C:1
 runAAFMulti.C:2
 runAAFMulti.C:3
 runAAFMulti.C:4
 runAAFMulti.C:5
 runAAFMulti.C:6
 runAAFMulti.C:7
 runAAFMulti.C:8
 runAAFMulti.C:9
 runAAFMulti.C:10
 runAAFMulti.C:11
 runAAFMulti.C:12
 runAAFMulti.C:13
 runAAFMulti.C:14
 runAAFMulti.C:15
 runAAFMulti.C:16
 runAAFMulti.C:17
 runAAFMulti.C:18
 runAAFMulti.C:19
 runAAFMulti.C:20
 runAAFMulti.C:21
 runAAFMulti.C:22
 runAAFMulti.C:23
 runAAFMulti.C:24
 runAAFMulti.C:25
 runAAFMulti.C:26
 runAAFMulti.C:27
 runAAFMulti.C:28
 runAAFMulti.C:29
 runAAFMulti.C:30
 runAAFMulti.C:31
 runAAFMulti.C:32
 runAAFMulti.C:33
 runAAFMulti.C:34
 runAAFMulti.C:35
 runAAFMulti.C:36
 runAAFMulti.C:37
 runAAFMulti.C:38
 runAAFMulti.C:39
 runAAFMulti.C:40
 runAAFMulti.C:41
 runAAFMulti.C:42
 runAAFMulti.C:43
 runAAFMulti.C:44
 runAAFMulti.C:45
 runAAFMulti.C:46
 runAAFMulti.C:47
 runAAFMulti.C:48
 runAAFMulti.C:49
 runAAFMulti.C:50
 runAAFMulti.C:51
 runAAFMulti.C:52
 runAAFMulti.C:53
 runAAFMulti.C:54
 runAAFMulti.C:55
 runAAFMulti.C:56
 runAAFMulti.C:57
 runAAFMulti.C:58
 runAAFMulti.C:59
 runAAFMulti.C:60
 runAAFMulti.C:61
 runAAFMulti.C:62
 runAAFMulti.C:63
 runAAFMulti.C:64
 runAAFMulti.C:65
 runAAFMulti.C:66
 runAAFMulti.C:67
 runAAFMulti.C:68
 runAAFMulti.C:69
 runAAFMulti.C:70
 runAAFMulti.C:71
 runAAFMulti.C:72
 runAAFMulti.C:73
 runAAFMulti.C:74
 runAAFMulti.C:75
 runAAFMulti.C:76
 runAAFMulti.C:77
 runAAFMulti.C:78
 runAAFMulti.C:79
 runAAFMulti.C:80
 runAAFMulti.C:81
 runAAFMulti.C:82
 runAAFMulti.C:83
 runAAFMulti.C:84
 runAAFMulti.C:85
 runAAFMulti.C:86
 runAAFMulti.C:87
 runAAFMulti.C:88
 runAAFMulti.C:89
 runAAFMulti.C:90
 runAAFMulti.C:91
 runAAFMulti.C:92
 runAAFMulti.C:93
 runAAFMulti.C:94
 runAAFMulti.C:95
 runAAFMulti.C:96
 runAAFMulti.C:97
 runAAFMulti.C:98
 runAAFMulti.C:99
 runAAFMulti.C:100
 runAAFMulti.C:101
 runAAFMulti.C:102
 runAAFMulti.C:103
 runAAFMulti.C:104
 runAAFMulti.C:105
 runAAFMulti.C:106
 runAAFMulti.C:107
 runAAFMulti.C:108
 runAAFMulti.C:109
 runAAFMulti.C:110
 runAAFMulti.C:111
 runAAFMulti.C:112
 runAAFMulti.C:113
 runAAFMulti.C:114
 runAAFMulti.C:115
 runAAFMulti.C:116
 runAAFMulti.C:117
 runAAFMulti.C:118
 runAAFMulti.C:119
 runAAFMulti.C:120
 runAAFMulti.C:121
 runAAFMulti.C:122