ROOT logo
Bool_t needRecPoints = kFALSE;

void MyAnalysisMacroUni
(
 TString dataset="/alice/sim/LHC10f8c_130844",
 TString outFName = "trbg.root",
 TString noMergeDir = "",
 Int_t   nEvents   = -1,
 Bool_t  useMC     = kTRUE,          // fill MC info (doRec=kTRUE)
 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  ntMin       = 1,
 Int_t  ntMax       = 999999,
 float  injScale    = 1.,     // 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,
 Float_t scaleMCV0  = 0.8,     // rescale MC V0 to match data
 Bool_t checkReconstructables = kFALSE//kTRUE, // fill histos for reconstructable (needs useMC and doRec) 
 )
{
  //  
  //
  needRecPoints = kTRUE; //doRec || doInj || doRot || doMix;
    //
  printf("Start Analysis for %s, max %d Events, Event Cuts: %.1f<eta<%.1f, %.2f<Zv<%.2f\n",
	 dataset.Data(),nEvents,etaMin,etaMax,zMin,zMax);
  printf("Tracklet cuts: dPhi:%.3f dTheta:%.3f phiShift:%.4f | Keep %.1f NstDev\n"
	 "Scale dTheta: %s\n", 
	 dphi,dtht,phishift,nStdDev,scaleDTheta ? "ON":"OFF");
  //
  printf("UseMC: %s. V0 scale: %.4f\n",useMC ? "ON":"OFF",scaleMCV0);
  //
  if (nEvents<0) nEvents = int(1e9);
  TString format = GetFormatFromDataSet(dataset);
  //
  // ALICE stuff
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr) mgr = new AliAnalysisManager("Test train");
  //
  InputHandlerSetup(format,useMC);
  // compile our task
  gProof->Load("AliITSMultRecBg.cxx++");
  gProof->Load("AliTrackletTaskUni.cxx++");
  //
  // load and run AddTask macro
  gROOT->LoadMacro("AddMultTaskTrackletUni.C");
  //
  // create our task
  AliTrackletTaskUni *mltTask = AddMultTaskTrackletUni(outFName.Data(),noMergeDir);
  
  //
  mltTask->SetDoNormalReco(kTRUE);
  mltTask->SetDoInjection(kTRUE);
  mltTask->SetDoRotation(kFALSE);
  mltTask->SetDoMixing(kFALSE);  
  //
  mltTask->SetUseMC(useMC);
  mltTask->SetCheckReconstructables(checkReconstructables);
  //
  mltTask->SetEtaMin(etaMin);
  mltTask->SetEtaMax(etaMax);
  mltTask->SetZVertexMin(zMin);
  mltTask->SetZVertexMax(zMax);
  //
  mltTask->SetMultCutMin(ntMin);
  mltTask->SetMultCutMax(ntMax);
  //
  //  mltTask->SetNStdCut(cutSigNStd);
  mltTask->SetScaleMCV0(scaleMCV0);
  //
  mltTask->SetScaleDThetaBySin2T(scaleDTheta);
  mltTask->SetNStdDev(nStdDev);
  mltTask->SetPhiWindow(dphi);
  mltTask->SetThetaWindow(dtht);
  mltTask->SetPhiShift(phishift);
  mltTask->SetPhiOverlapCut(ovlPhiCut);
  mltTask->SetZetaOverlapCut(ovlZetaCut);
  mltTask->SetInjScale(injScale);
  mltTask->SetRemoveOverlaps(remOvl);
  //
  printf("new Task: %p\n",mltTask);
  //
  printf("Requesting physics selection in %s mode\n",useMC ? "MC":"Data");
  gROOT->ProcessLine(".L $ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
  //  /*
  //gROOT->ProcessLine(".L AddTaskPhysicsSelection.C");
  AliPhysicsSelectionTask* physicsSelectionTask = AddTaskPhysicsSelection(useMC,0);
  mltTask->SelectCollisionCandidates();//AliVEvent::kMB);
  //
  //  */
  // Run analysis
  mgr->InitAnalysis();
  // process dataset  
  mgr->StartAnalysis("proof", dataset.Data(), nEvents, 0); 
  //
  TString evstCmd = "if [ -e event_stat.root ]; then \nmv event_stat.root evstat_"; 
  evstCmd += outFName;  evstCmd += " \nfi";
  gSystem->Exec( evstCmd.Data() );
  
}


TString GetFormatFromDataSet(TString dataset) {
  
//   Info("runAAF.C","Detecting format from dataset (may take while, depends on network connection)...");
  TString dsTreeName;
  if (dataset.Contains("#")) {
    Info("runAAF.C",Form("Detecting format from dataset name '%s' ...",dataset.Data()));
    dsTreeName=dataset(dataset.Last('#'),dataset.Length());
  } else {
    Info("runAAF.C",Form("Detecting format from dataset '%s' (may take while, depends on network connection) ...",dataset.Data()));
    TFileCollection *ds = gProof->GetDataSet(dataset.Data());
    if (!ds) {
      Error(Form("Dataset %s doesn't exist on proof cluster!!!!",dataset.Data()));
      return "";
    }
    dsTreeName = ds->GetDefaultTreeName();
  }

  if (dsTreeName.Contains("esdTree")) {
    Info("runAAF.C","ESD input format detected ...");
    return "ESD";
  } else if (dsTreeName.Contains("aodTree"))  {
    Info("runAAF.C","AOD input format detected ...");
    return "AOD";
  } else {
    Error("runAAF.C",Form("Tree %s is not supported !!!",dsTreeName.Data()));
    Error("runAAF.C",Form("Maybe set your DS to %s#esdTree or %s#aodTree",dataset.Data(),dataset.Data()));
  }
  
  return "";
}

Bool_t InputHandlerSetup(TString format = "esd", Bool_t useKine = kTRUE)
{
  format.ToLower();

  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();

  AliAnalysisDataContainer *cin = mgr->GetCommonInputContainer();

  if (cin) return;

  if (!format.CompareTo("esd"))
  {
    AliESDInputHandler *esdInputHandler = dynamic_cast<AliESDInputHandler*>(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());

    if (!esdInputHandler)
    {
      Info("CustomAnalysisTaskInputSetup", "Creating esdInputHandler ...");
      if (needRecPoints)
	esdInputHandler = new AliESDInputHandlerRP();
      else 
	esdInputHandler = new AliESDInputHandler();
      //
      mgr->SetInputEventHandler(esdInputHandler);
    }
    //
    if (useKine)
    {
      AliMCEventHandler* mcInputHandler = dynamic_cast<AliMCEventHandler*>(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());

      if (!mcInputHandler)
      {
        Info("CustomAnalysisTaskInputSetup", "Creating mcInputHandler ...");
        AliMCEventHandler* mcInputHandler = new AliMCEventHandler();
        mgr->SetMCtruthEventHandler(mcInputHandler);
      }
    }

  }
  else if (!format.CompareTo("aod"))
  {
    AliAODInputHandler *aodInputHandler = dynamic_cast<AliAODInputHandler*>(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());

    if (!aodInputHandler)
    {
      Info("CustomAnalysisTaskInputSetup", "Creating aodInputHandler ...");
      aodInputHandler = new AliAODInputHandler();
      mgr->SetInputEventHandler(aodInputHandler);
    }
  }
  else
  {
    Info("Wrong input format!!! Only ESD and AOD are supported. Skipping Task ...");
    return kFALSE;
  }

  return kTRUE;
}

void MixHandlerSetup(float ntMin,float ntMax,float ntMixBinSz,
		     float zMin, float zMax, float zMixBinSz)
{
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr) return;
  int bufferSize = 1;
  AliESDInputHandlerRP *esdH = dynamic_cast<AliESDInputHandlerRP*>(mgr->GetInputEventHandler());
  if (!esdH) return;
  //
  AliMixEventInputHandler *esdMixH = new AliMixEventInputHandler(bufferSize);
  esdMixH->SetInputHandlerForMixing(esdH);
  AliMixEventPool *evPool = new AliMixEventPool("MyPool");
  AliMixEventCutObj *tracklets = new AliMixEventCutObj(AliMixEventCutObj::kNumberTracklets, ntMin,ntMax,ntMixBinSz);
  AliMixEventCutObj *zvertex = new AliMixEventCutObj(AliMixEventCutObj::kZVertex, zMin,zMax, zMixBinSz);
  //  evPool->AddCut(tracklets);
  evPool->AddCut(zvertex);
  //evPool->Init();
  evPool->Print();
  esdMixH->SetEventPool(evPool);
  esdH->SetMixingHandler(esdMixH);
}

void AddPhysicsSelection(Bool_t isMC)
{
  // physics selection a la Michele
  if(!isMC) {
    //AliPhysicsSelection * physSel = physicsSelectionTask->GetPhysicsSelection();
    //    physSel->AddCollisionTriggerClass("+CMBAC-B-NOPF-ALL");
    /*
    physSel->AddCollisionTriggerClass("+CMBS1C-B-NOPF-ALL");
    physSel->AddCollisionTriggerClass("+CMBS1A-B-NOPF-ALL");
    */
    //
    //    physSel->AddCollisionTriggerClass("+CMBS2C-B-NOPF-ALL");
    //    physSel->AddCollisionTriggerClass("+CMBS2A-B-NOPF-ALL");
    //
    // This are needed only to fill the statistics tables
    //    physSel->AddBGTriggerClass("+CMBAC-C-NOPF-ALL");
    //    physSel->AddBGTriggerClass("+CMBAC-A-NOPF-ALL");
    //    physSel->AddBGTriggerClass("+CMBAC-E-NOPF-ALL");
    //
    /*
    physSel->AddBGTriggerClass("+CMBS1C-C-NOPF-ALL");
    physSel->AddBGTriggerClass("+CMBS1C-A-NOPF-ALL");
    physSel->AddBGTriggerClass("+CMBS1C-E-NOPF-ALL");
    //
    physSel->AddBGTriggerClass("+CMBS1A-C-NOPF-ALL");
    physSel->AddBGTriggerClass("+CMBS1A-A-NOPF-ALL");
    physSel->AddBGTriggerClass("+CMBS1A-E-NOPF-ALL");
    //
    */
    /*
    //
    physSel->AddBGTriggerClass("+CMBS2C-C-NOPF-ALL");
    physSel->AddBGTriggerClass("+CMBS2C-A-NOPF-ALL");
    physSel->AddBGTriggerClass("+CMBS2C-E-NOPF-ALL");
    //
    physSel->AddBGTriggerClass("+CMBS2A-C-NOPF-ALL");
    physSel->AddBGTriggerClass("+CMBS2A-A-NOPF-ALL");
    physSel->AddBGTriggerClass("+CMBS2A-E-NOPF-ALL");
    */
  } 
  // if you use the following line, your task only gets the selected events
  //  task->SelectCollisionCandidates(AliVEvent::kUserDefined);
  //  task->SelectCollisionCandidates();
  //
  //Alternatively, in the UserExec of your task:
  //Bool_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kUserDefined);
  //
}
 MyAnalysisMacroUni.C:1
 MyAnalysisMacroUni.C:2
 MyAnalysisMacroUni.C:3
 MyAnalysisMacroUni.C:4
 MyAnalysisMacroUni.C:5
 MyAnalysisMacroUni.C:6
 MyAnalysisMacroUni.C:7
 MyAnalysisMacroUni.C:8
 MyAnalysisMacroUni.C:9
 MyAnalysisMacroUni.C:10
 MyAnalysisMacroUni.C:11
 MyAnalysisMacroUni.C:12
 MyAnalysisMacroUni.C:13
 MyAnalysisMacroUni.C:14
 MyAnalysisMacroUni.C:15
 MyAnalysisMacroUni.C:16
 MyAnalysisMacroUni.C:17
 MyAnalysisMacroUni.C:18
 MyAnalysisMacroUni.C:19
 MyAnalysisMacroUni.C:20
 MyAnalysisMacroUni.C:21
 MyAnalysisMacroUni.C:22
 MyAnalysisMacroUni.C:23
 MyAnalysisMacroUni.C:24
 MyAnalysisMacroUni.C:25
 MyAnalysisMacroUni.C:26
 MyAnalysisMacroUni.C:27
 MyAnalysisMacroUni.C:28
 MyAnalysisMacroUni.C:29
 MyAnalysisMacroUni.C:30
 MyAnalysisMacroUni.C:31
 MyAnalysisMacroUni.C:32
 MyAnalysisMacroUni.C:33
 MyAnalysisMacroUni.C:34
 MyAnalysisMacroUni.C:35
 MyAnalysisMacroUni.C:36
 MyAnalysisMacroUni.C:37
 MyAnalysisMacroUni.C:38
 MyAnalysisMacroUni.C:39
 MyAnalysisMacroUni.C:40
 MyAnalysisMacroUni.C:41
 MyAnalysisMacroUni.C:42
 MyAnalysisMacroUni.C:43
 MyAnalysisMacroUni.C:44
 MyAnalysisMacroUni.C:45
 MyAnalysisMacroUni.C:46
 MyAnalysisMacroUni.C:47
 MyAnalysisMacroUni.C:48
 MyAnalysisMacroUni.C:49
 MyAnalysisMacroUni.C:50
 MyAnalysisMacroUni.C:51
 MyAnalysisMacroUni.C:52
 MyAnalysisMacroUni.C:53
 MyAnalysisMacroUni.C:54
 MyAnalysisMacroUni.C:55
 MyAnalysisMacroUni.C:56
 MyAnalysisMacroUni.C:57
 MyAnalysisMacroUni.C:58
 MyAnalysisMacroUni.C:59
 MyAnalysisMacroUni.C:60
 MyAnalysisMacroUni.C:61
 MyAnalysisMacroUni.C:62
 MyAnalysisMacroUni.C:63
 MyAnalysisMacroUni.C:64
 MyAnalysisMacroUni.C:65
 MyAnalysisMacroUni.C:66
 MyAnalysisMacroUni.C:67
 MyAnalysisMacroUni.C:68
 MyAnalysisMacroUni.C:69
 MyAnalysisMacroUni.C:70
 MyAnalysisMacroUni.C:71
 MyAnalysisMacroUni.C:72
 MyAnalysisMacroUni.C:73
 MyAnalysisMacroUni.C:74
 MyAnalysisMacroUni.C:75
 MyAnalysisMacroUni.C:76
 MyAnalysisMacroUni.C:77
 MyAnalysisMacroUni.C:78
 MyAnalysisMacroUni.C:79
 MyAnalysisMacroUni.C:80
 MyAnalysisMacroUni.C:81
 MyAnalysisMacroUni.C:82
 MyAnalysisMacroUni.C:83
 MyAnalysisMacroUni.C:84
 MyAnalysisMacroUni.C:85
 MyAnalysisMacroUni.C:86
 MyAnalysisMacroUni.C:87
 MyAnalysisMacroUni.C:88
 MyAnalysisMacroUni.C:89
 MyAnalysisMacroUni.C:90
 MyAnalysisMacroUni.C:91
 MyAnalysisMacroUni.C:92
 MyAnalysisMacroUni.C:93
 MyAnalysisMacroUni.C:94
 MyAnalysisMacroUni.C:95
 MyAnalysisMacroUni.C:96
 MyAnalysisMacroUni.C:97
 MyAnalysisMacroUni.C:98
 MyAnalysisMacroUni.C:99
 MyAnalysisMacroUni.C:100
 MyAnalysisMacroUni.C:101
 MyAnalysisMacroUni.C:102
 MyAnalysisMacroUni.C:103
 MyAnalysisMacroUni.C:104
 MyAnalysisMacroUni.C:105
 MyAnalysisMacroUni.C:106
 MyAnalysisMacroUni.C:107
 MyAnalysisMacroUni.C:108
 MyAnalysisMacroUni.C:109
 MyAnalysisMacroUni.C:110
 MyAnalysisMacroUni.C:111
 MyAnalysisMacroUni.C:112
 MyAnalysisMacroUni.C:113
 MyAnalysisMacroUni.C:114
 MyAnalysisMacroUni.C:115
 MyAnalysisMacroUni.C:116
 MyAnalysisMacroUni.C:117
 MyAnalysisMacroUni.C:118
 MyAnalysisMacroUni.C:119
 MyAnalysisMacroUni.C:120
 MyAnalysisMacroUni.C:121
 MyAnalysisMacroUni.C:122
 MyAnalysisMacroUni.C:123
 MyAnalysisMacroUni.C:124
 MyAnalysisMacroUni.C:125
 MyAnalysisMacroUni.C:126
 MyAnalysisMacroUni.C:127
 MyAnalysisMacroUni.C:128
 MyAnalysisMacroUni.C:129
 MyAnalysisMacroUni.C:130
 MyAnalysisMacroUni.C:131
 MyAnalysisMacroUni.C:132
 MyAnalysisMacroUni.C:133
 MyAnalysisMacroUni.C:134
 MyAnalysisMacroUni.C:135
 MyAnalysisMacroUni.C:136
 MyAnalysisMacroUni.C:137
 MyAnalysisMacroUni.C:138
 MyAnalysisMacroUni.C:139
 MyAnalysisMacroUni.C:140
 MyAnalysisMacroUni.C:141
 MyAnalysisMacroUni.C:142
 MyAnalysisMacroUni.C:143
 MyAnalysisMacroUni.C:144
 MyAnalysisMacroUni.C:145
 MyAnalysisMacroUni.C:146
 MyAnalysisMacroUni.C:147
 MyAnalysisMacroUni.C:148
 MyAnalysisMacroUni.C:149
 MyAnalysisMacroUni.C:150
 MyAnalysisMacroUni.C:151
 MyAnalysisMacroUni.C:152
 MyAnalysisMacroUni.C:153
 MyAnalysisMacroUni.C:154
 MyAnalysisMacroUni.C:155
 MyAnalysisMacroUni.C:156
 MyAnalysisMacroUni.C:157
 MyAnalysisMacroUni.C:158
 MyAnalysisMacroUni.C:159
 MyAnalysisMacroUni.C:160
 MyAnalysisMacroUni.C:161
 MyAnalysisMacroUni.C:162
 MyAnalysisMacroUni.C:163
 MyAnalysisMacroUni.C:164
 MyAnalysisMacroUni.C:165
 MyAnalysisMacroUni.C:166
 MyAnalysisMacroUni.C:167
 MyAnalysisMacroUni.C:168
 MyAnalysisMacroUni.C:169
 MyAnalysisMacroUni.C:170
 MyAnalysisMacroUni.C:171
 MyAnalysisMacroUni.C:172
 MyAnalysisMacroUni.C:173
 MyAnalysisMacroUni.C:174
 MyAnalysisMacroUni.C:175
 MyAnalysisMacroUni.C:176
 MyAnalysisMacroUni.C:177
 MyAnalysisMacroUni.C:178
 MyAnalysisMacroUni.C:179
 MyAnalysisMacroUni.C:180
 MyAnalysisMacroUni.C:181
 MyAnalysisMacroUni.C:182
 MyAnalysisMacroUni.C:183
 MyAnalysisMacroUni.C:184
 MyAnalysisMacroUni.C:185
 MyAnalysisMacroUni.C:186
 MyAnalysisMacroUni.C:187
 MyAnalysisMacroUni.C:188
 MyAnalysisMacroUni.C:189
 MyAnalysisMacroUni.C:190
 MyAnalysisMacroUni.C:191
 MyAnalysisMacroUni.C:192
 MyAnalysisMacroUni.C:193
 MyAnalysisMacroUni.C:194
 MyAnalysisMacroUni.C:195
 MyAnalysisMacroUni.C:196
 MyAnalysisMacroUni.C:197
 MyAnalysisMacroUni.C:198
 MyAnalysisMacroUni.C:199
 MyAnalysisMacroUni.C:200
 MyAnalysisMacroUni.C:201
 MyAnalysisMacroUni.C:202
 MyAnalysisMacroUni.C:203
 MyAnalysisMacroUni.C:204
 MyAnalysisMacroUni.C:205
 MyAnalysisMacroUni.C:206
 MyAnalysisMacroUni.C:207
 MyAnalysisMacroUni.C:208
 MyAnalysisMacroUni.C:209
 MyAnalysisMacroUni.C:210
 MyAnalysisMacroUni.C:211
 MyAnalysisMacroUni.C:212
 MyAnalysisMacroUni.C:213
 MyAnalysisMacroUni.C:214
 MyAnalysisMacroUni.C:215
 MyAnalysisMacroUni.C:216
 MyAnalysisMacroUni.C:217
 MyAnalysisMacroUni.C:218
 MyAnalysisMacroUni.C:219
 MyAnalysisMacroUni.C:220
 MyAnalysisMacroUni.C:221
 MyAnalysisMacroUni.C:222
 MyAnalysisMacroUni.C:223
 MyAnalysisMacroUni.C:224
 MyAnalysisMacroUni.C:225
 MyAnalysisMacroUni.C:226
 MyAnalysisMacroUni.C:227
 MyAnalysisMacroUni.C:228
 MyAnalysisMacroUni.C:229
 MyAnalysisMacroUni.C:230
 MyAnalysisMacroUni.C:231
 MyAnalysisMacroUni.C:232
 MyAnalysisMacroUni.C:233
 MyAnalysisMacroUni.C:234
 MyAnalysisMacroUni.C:235
 MyAnalysisMacroUni.C:236
 MyAnalysisMacroUni.C:237
 MyAnalysisMacroUni.C:238
 MyAnalysisMacroUni.C:239
 MyAnalysisMacroUni.C:240
 MyAnalysisMacroUni.C:241
 MyAnalysisMacroUni.C:242
 MyAnalysisMacroUni.C:243
 MyAnalysisMacroUni.C:244
 MyAnalysisMacroUni.C:245
 MyAnalysisMacroUni.C:246
 MyAnalysisMacroUni.C:247
 MyAnalysisMacroUni.C:248
 MyAnalysisMacroUni.C:249
 MyAnalysisMacroUni.C:250
 MyAnalysisMacroUni.C:251
 MyAnalysisMacroUni.C:252
 MyAnalysisMacroUni.C:253
 MyAnalysisMacroUni.C:254
 MyAnalysisMacroUni.C:255
 MyAnalysisMacroUni.C:256
 MyAnalysisMacroUni.C:257
 MyAnalysisMacroUni.C:258
 MyAnalysisMacroUni.C:259
 MyAnalysisMacroUni.C:260
 MyAnalysisMacroUni.C:261
 MyAnalysisMacroUni.C:262
 MyAnalysisMacroUni.C:263
 MyAnalysisMacroUni.C:264
 MyAnalysisMacroUni.C:265
 MyAnalysisMacroUni.C:266
 MyAnalysisMacroUni.C:267
 MyAnalysisMacroUni.C:268
 MyAnalysisMacroUni.C:269
 MyAnalysisMacroUni.C:270