ROOT logo
void MyAnalysisMacro(TString dataset="/alice/sim/LHC10f8f_130844",
		     TString outFName="trbg.root",
		     Bool_t doRec  = kTRUE,
		     Bool_t doInj  = kTRUE,
		     Bool_t doRot  = kTRUE,
		     Bool_t doMix  = kFALSE,
		     Bool_t useMC  = kTRUE,
		     Bool_t checkReconstructables = kTRUE,
		     // 
		     Float_t etaCut     = 2.5,
		     //
		     // specific parameters for reconstruction
		     //----------------------- Zv selection parameters important for mixing, to be tuned
		     Float_t zMin       = -20,
		     Float_t zMax       =  20,
		     Float_t zMixBinSz  =  5, //0.1,
		     //---------------------------------------------------------------------------------
		     //
		     //----------------------- Ntracklets selection parameters important for mixing, to be tuned
		     Float_t ntMin      =   1,
		     Float_t ntMax      = 15000,
		     Float_t ntMixBinSz =  5000, 
		     //---------------------------------------------------------------------------------
		     //
		     float  phiRot      = 3.14159e+00,
		     float  injScale    = 0.7,
		     Bool_t scaleDTheta = kTRUE,
		     float  nStdDev     = 25.,
		     float  dphi        = 0.08, 
		     float  dtht        = 0.025, 
		     float  phishift    = 0.0045, 
		     Bool_t remOvl      = kTRUE, 
		     float  ovlPhiCut   = 0.005, 
		     float  ovlZetaCut  = 0.05,
		     Int_t  nEvents     = 50000,
		     Int_t  nEventsSkip = 0) 
{
  //  
  TString format = GetFormatFromDataSet(dataset);
  //
  // ALICE stuff
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr) mgr = new AliAnalysisManager("Test train");
  //
  InputHandlerSetup(format,useMC);
  if (doMix) MixHandlerSetup(ntMin,ntMax,ntMixBinSz, zMin,zMax,zMixBinSz);
  // compile our task
  gProof->Load("AliITSMultRecBg.cxx++");
  gProof->Load("AliTrackletTaskUni.cxx++");
  //
  // load and run AddTask macro
  gROOT->LoadMacro("AddMultTaskRS.C");
  //
  // create our task
  AliTrackletTaskUni *mltTask = AddMultTaskRS(outFName.Data());
  //
  mltTask->SetDoNormalReco(doRec);
  mltTask->SetDoInjection(doInj);
  mltTask->SetDoRotation(doRot);
  mltTask->SetDoMixing(doMix);  
  //
  mltTask->SetUseMC(useMC);
  mltTask->SetCheckReconstructables(checkReconstructables);
  //
  mltTask->SetEtaCut(etaCut);
  mltTask->SetZVertexMin(zMin);
  mltTask->SetZVertexMax(zMax);
  mltTask->SetMultCutMin(ntMin);
  mltTask->SetMultCutMax(ntMax);
  //
  mltTask->SetScaleDThetaBySin2T(scaleDTheta);
  mltTask->SetNStdDev(nStdDev);
  mltTask->SetPhiWindow(dphi);
  mltTask->SetThetaWindow(dtht);
  mltTask->SetPhiShift(phishift);
  mltTask->SetPhiOverlapCut(ovlPhiCut);
  mltTask->SetZetaOverlapCut(ovlZetaCut);
  mltTask->SetPhiRot(phiRot);
  mltTask->SetInjScale(injScale);
  mltTask->SetRemoveOverlaps(remOvl);
  //
  printf("new Task: %p\n",mltTask);
  //
  AddPhysicsSelection(useMC);
  mltTask->SelectCollisionCandidates(useMC ? (AliVEvent::kMB) : (AliVEvent::kUserDefined) );
  //
  // Run analysis
  mgr->InitAnalysis();
  // process dataset  
  mgr->StartAnalysis("proof", dataset.Data(), nEvents, nEventsSkip); 
  //
  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 ...");
      esdInputHandler = new AliESDInputHandlerRP();
      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
  printf("Requesting physics selection in %s mode\n",isMC ? "MC":"Data");
  gROOT->ProcessLine(".L $ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
  //isMC is true when processing monte carlo, the second 0 disables the cluster vs tracklets
  AliPhysicsSelectionTask* physicsSelectionTask = AddTaskPhysicsSelection(isMC,0);
  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);
  //
  //Alternatively, in the UserExec of your task:
  //Bool_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kUserDefined);
  //
}
 MyAnalysisMacro.C:1
 MyAnalysisMacro.C:2
 MyAnalysisMacro.C:3
 MyAnalysisMacro.C:4
 MyAnalysisMacro.C:5
 MyAnalysisMacro.C:6
 MyAnalysisMacro.C:7
 MyAnalysisMacro.C:8
 MyAnalysisMacro.C:9
 MyAnalysisMacro.C:10
 MyAnalysisMacro.C:11
 MyAnalysisMacro.C:12
 MyAnalysisMacro.C:13
 MyAnalysisMacro.C:14
 MyAnalysisMacro.C:15
 MyAnalysisMacro.C:16
 MyAnalysisMacro.C:17
 MyAnalysisMacro.C:18
 MyAnalysisMacro.C:19
 MyAnalysisMacro.C:20
 MyAnalysisMacro.C:21
 MyAnalysisMacro.C:22
 MyAnalysisMacro.C:23
 MyAnalysisMacro.C:24
 MyAnalysisMacro.C:25
 MyAnalysisMacro.C:26
 MyAnalysisMacro.C:27
 MyAnalysisMacro.C:28
 MyAnalysisMacro.C:29
 MyAnalysisMacro.C:30
 MyAnalysisMacro.C:31
 MyAnalysisMacro.C:32
 MyAnalysisMacro.C:33
 MyAnalysisMacro.C:34
 MyAnalysisMacro.C:35
 MyAnalysisMacro.C:36
 MyAnalysisMacro.C:37
 MyAnalysisMacro.C:38
 MyAnalysisMacro.C:39
 MyAnalysisMacro.C:40
 MyAnalysisMacro.C:41
 MyAnalysisMacro.C:42
 MyAnalysisMacro.C:43
 MyAnalysisMacro.C:44
 MyAnalysisMacro.C:45
 MyAnalysisMacro.C:46
 MyAnalysisMacro.C:47
 MyAnalysisMacro.C:48
 MyAnalysisMacro.C:49
 MyAnalysisMacro.C:50
 MyAnalysisMacro.C:51
 MyAnalysisMacro.C:52
 MyAnalysisMacro.C:53
 MyAnalysisMacro.C:54
 MyAnalysisMacro.C:55
 MyAnalysisMacro.C:56
 MyAnalysisMacro.C:57
 MyAnalysisMacro.C:58
 MyAnalysisMacro.C:59
 MyAnalysisMacro.C:60
 MyAnalysisMacro.C:61
 MyAnalysisMacro.C:62
 MyAnalysisMacro.C:63
 MyAnalysisMacro.C:64
 MyAnalysisMacro.C:65
 MyAnalysisMacro.C:66
 MyAnalysisMacro.C:67
 MyAnalysisMacro.C:68
 MyAnalysisMacro.C:69
 MyAnalysisMacro.C:70
 MyAnalysisMacro.C:71
 MyAnalysisMacro.C:72
 MyAnalysisMacro.C:73
 MyAnalysisMacro.C:74
 MyAnalysisMacro.C:75
 MyAnalysisMacro.C:76
 MyAnalysisMacro.C:77
 MyAnalysisMacro.C:78
 MyAnalysisMacro.C:79
 MyAnalysisMacro.C:80
 MyAnalysisMacro.C:81
 MyAnalysisMacro.C:82
 MyAnalysisMacro.C:83
 MyAnalysisMacro.C:84
 MyAnalysisMacro.C:85
 MyAnalysisMacro.C:86
 MyAnalysisMacro.C:87
 MyAnalysisMacro.C:88
 MyAnalysisMacro.C:89
 MyAnalysisMacro.C:90
 MyAnalysisMacro.C:91
 MyAnalysisMacro.C:92
 MyAnalysisMacro.C:93
 MyAnalysisMacro.C:94
 MyAnalysisMacro.C:95
 MyAnalysisMacro.C:96
 MyAnalysisMacro.C:97
 MyAnalysisMacro.C:98
 MyAnalysisMacro.C:99
 MyAnalysisMacro.C:100
 MyAnalysisMacro.C:101
 MyAnalysisMacro.C:102
 MyAnalysisMacro.C:103
 MyAnalysisMacro.C:104
 MyAnalysisMacro.C:105
 MyAnalysisMacro.C:106
 MyAnalysisMacro.C:107
 MyAnalysisMacro.C:108
 MyAnalysisMacro.C:109
 MyAnalysisMacro.C:110
 MyAnalysisMacro.C:111
 MyAnalysisMacro.C:112
 MyAnalysisMacro.C:113
 MyAnalysisMacro.C:114
 MyAnalysisMacro.C:115
 MyAnalysisMacro.C:116
 MyAnalysisMacro.C:117
 MyAnalysisMacro.C:118
 MyAnalysisMacro.C:119
 MyAnalysisMacro.C:120
 MyAnalysisMacro.C:121
 MyAnalysisMacro.C:122
 MyAnalysisMacro.C:123
 MyAnalysisMacro.C:124
 MyAnalysisMacro.C:125
 MyAnalysisMacro.C:126
 MyAnalysisMacro.C:127
 MyAnalysisMacro.C:128
 MyAnalysisMacro.C:129
 MyAnalysisMacro.C:130
 MyAnalysisMacro.C:131
 MyAnalysisMacro.C:132
 MyAnalysisMacro.C:133
 MyAnalysisMacro.C:134
 MyAnalysisMacro.C:135
 MyAnalysisMacro.C:136
 MyAnalysisMacro.C:137
 MyAnalysisMacro.C:138
 MyAnalysisMacro.C:139
 MyAnalysisMacro.C:140
 MyAnalysisMacro.C:141
 MyAnalysisMacro.C:142
 MyAnalysisMacro.C:143
 MyAnalysisMacro.C:144
 MyAnalysisMacro.C:145
 MyAnalysisMacro.C:146
 MyAnalysisMacro.C:147
 MyAnalysisMacro.C:148
 MyAnalysisMacro.C:149
 MyAnalysisMacro.C:150
 MyAnalysisMacro.C:151
 MyAnalysisMacro.C:152
 MyAnalysisMacro.C:153
 MyAnalysisMacro.C:154
 MyAnalysisMacro.C:155
 MyAnalysisMacro.C:156
 MyAnalysisMacro.C:157
 MyAnalysisMacro.C:158
 MyAnalysisMacro.C:159
 MyAnalysisMacro.C:160
 MyAnalysisMacro.C:161
 MyAnalysisMacro.C:162
 MyAnalysisMacro.C:163
 MyAnalysisMacro.C:164
 MyAnalysisMacro.C:165
 MyAnalysisMacro.C:166
 MyAnalysisMacro.C:167
 MyAnalysisMacro.C:168
 MyAnalysisMacro.C:169
 MyAnalysisMacro.C:170
 MyAnalysisMacro.C:171
 MyAnalysisMacro.C:172
 MyAnalysisMacro.C:173
 MyAnalysisMacro.C:174
 MyAnalysisMacro.C:175
 MyAnalysisMacro.C:176
 MyAnalysisMacro.C:177
 MyAnalysisMacro.C:178
 MyAnalysisMacro.C:179
 MyAnalysisMacro.C:180
 MyAnalysisMacro.C:181
 MyAnalysisMacro.C:182
 MyAnalysisMacro.C:183
 MyAnalysisMacro.C:184
 MyAnalysisMacro.C:185
 MyAnalysisMacro.C:186
 MyAnalysisMacro.C:187
 MyAnalysisMacro.C:188
 MyAnalysisMacro.C:189
 MyAnalysisMacro.C:190
 MyAnalysisMacro.C:191
 MyAnalysisMacro.C:192
 MyAnalysisMacro.C:193
 MyAnalysisMacro.C:194
 MyAnalysisMacro.C:195
 MyAnalysisMacro.C:196
 MyAnalysisMacro.C:197
 MyAnalysisMacro.C:198
 MyAnalysisMacro.C:199
 MyAnalysisMacro.C:200
 MyAnalysisMacro.C:201
 MyAnalysisMacro.C:202
 MyAnalysisMacro.C:203
 MyAnalysisMacro.C:204
 MyAnalysisMacro.C:205
 MyAnalysisMacro.C:206
 MyAnalysisMacro.C:207
 MyAnalysisMacro.C:208
 MyAnalysisMacro.C:209
 MyAnalysisMacro.C:210
 MyAnalysisMacro.C:211
 MyAnalysisMacro.C:212
 MyAnalysisMacro.C:213
 MyAnalysisMacro.C:214
 MyAnalysisMacro.C:215
 MyAnalysisMacro.C:216
 MyAnalysisMacro.C:217
 MyAnalysisMacro.C:218
 MyAnalysisMacro.C:219
 MyAnalysisMacro.C:220
 MyAnalysisMacro.C:221
 MyAnalysisMacro.C:222
 MyAnalysisMacro.C:223
 MyAnalysisMacro.C:224
 MyAnalysisMacro.C:225
 MyAnalysisMacro.C:226
 MyAnalysisMacro.C:227
 MyAnalysisMacro.C:228
 MyAnalysisMacro.C:229
 MyAnalysisMacro.C:230
 MyAnalysisMacro.C:231
 MyAnalysisMacro.C:232
 MyAnalysisMacro.C:233
 MyAnalysisMacro.C:234
 MyAnalysisMacro.C:235
 MyAnalysisMacro.C:236
 MyAnalysisMacro.C:237
 MyAnalysisMacro.C:238
 MyAnalysisMacro.C:239
 MyAnalysisMacro.C:240
 MyAnalysisMacro.C:241
 MyAnalysisMacro.C:242
 MyAnalysisMacro.C:243
 MyAnalysisMacro.C:244
 MyAnalysisMacro.C:245
 MyAnalysisMacro.C:246
 MyAnalysisMacro.C:247
 MyAnalysisMacro.C:248
 MyAnalysisMacro.C:249
 MyAnalysisMacro.C:250
 MyAnalysisMacro.C:251
 MyAnalysisMacro.C:252
 MyAnalysisMacro.C:253
 MyAnalysisMacro.C:254
 MyAnalysisMacro.C:255
 MyAnalysisMacro.C:256
 MyAnalysisMacro.C:257