ROOT logo
//
// This macro add an analysis task for computing efficiency.
// It will have as output an AliCFContainer with several steps:
//
//  0) all resonances in MC which decay in the pair specified
//  1) subset of (0) whose daughters are in acceptance
//  2) subset of (1) whose daughters satisfy quality track cuts (covariance, chi square && nTPCclusters)
//  3) subset of (2) whose daughters satisfy primary track cuts (nsigma to vertex, no kink daughters)
//  4) subset of (3) whose daughters satisty the BB TPC compatibility cut at 3 sigma
//
Bool_t AddRsnAnalysisTaskEffPhi
(
   const char *evtopts,
   const char *options, 
   const char *path = "$(ALICE_ROOT)/PWG2/RESONANCES/macros/train"
)
{
   // ==================================================================================================================
   // == OPTIONS =======================================================================================================
   // ==================================================================================================================
   
   // Instead or getting confused with plenty of arguments in the macro (with default values),
   // we use a unique string of options with a set of conventional strings to set up the job:
   // -- "MC"/"DATA" --> what kind of sample
   // -- "ITS"/"TPC" --> what tracks to use (ITS standalone and/or TPC+ITS)
   // -- "xxxPID"    --> add the PID cuts for the detector xxx.
   //
   // In this point, these options are converted into boolean variables.
   
   TString opt(options);
   opt.ToUpper();
   opt.ReplaceAll(" ", "");
   
   Bool_t addITS = opt.Contains("ITS");
   Bool_t addTPC = opt.Contains("TPC");
   Bool_t useITS = opt.Contains("ITSPID");
   Bool_t useTPC = opt.Contains("TPCPID");
   Bool_t useTOF = opt.Contains("TOFPID");
   
   // correct options when needed
   if (!addITS) useITS = kFALSE;
   if (!addTPC) useTPC = useTOF = kFALSE;
   
   // ==================================================================================================================
   // == DEFINITIONS ===================================================================================================
   // ==================================================================================================================
   
   // We put here the definitions of all objects which are needed in the following, in order to have then
   // a more readable code in the points where these objects are added to the analysis manager.
   
   // pair definition:
   // phi --> K+ K-
   AliRsnPairDef *pairPhi = new AliRsnPairDef(AliPID::kKaon, '+', AliPID::kKaon, '-', 333, 1.019455);
   
   // ==================================================================================================================
   // == CUTS AND AXES =================================================================================================
   // ==================================================================================================================
   
   //
   // Track quality for ITS standalone:
   // this cut is used to select tracks of good quality, irrespective of the PID.
   // When adding status flags, the second argument tells if each considered flag
   // must be active or not in the track status, since the ITS-SA tracks need that
   // some of them are OFF (e.g.: kTPCin)
   //
   AliRsnCutTrackQuality *cutQualityITS = new AliRsnCutTrackQuality("cutQualityITS");
   cutQualityITS->AddStatusFlag(AliESDtrack::kITSin    , kTRUE);
   cutQualityITS->AddStatusFlag(AliESDtrack::kTPCin    , kFALSE);
   cutQualityITS->AddStatusFlag(AliESDtrack::kITSrefit , kTRUE);
   cutQualityITS->AddStatusFlag(AliESDtrack::kTPCrefit , kFALSE);
   cutQualityITS->AddStatusFlag(AliESDtrack::kITSpureSA, kFALSE);
   cutQualityITS->AddStatusFlag(AliESDtrack::kITSpid   , kTRUE);
   cutQualityITS->SetPtRange(0.15, 1E+20);
   cutQualityITS->SetEtaRange(-0.8, 0.8);
   cutQualityITS->SetDCARPtFormula("0.0595+0.0182/pt^1.55");
   cutQualityITS->SetDCAZmax(2.0);
   cutQualityITS->SetSPDminNClusters(1);
   cutQualityITS->SetITSminNClusters(4);
   cutQualityITS->SetITSmaxChi2(2.0);
   cutQualityITS->SetTPCminNClusters(0);
   cutQualityITS->SetTPCmaxChi2(1E+10);
   cutQualityITS->SetRejectKinkDaughters();
      
   //
   // Track quality for TPC+ITS:
   // works exactly like the one above, but has settings for selecting TPC+ITS tracks
   // in this case, the flags required are all necessary, so here the procedure is simpler
   //
   AliRsnCutTrackQuality *cutQualityTPC = new AliRsnCutTrackQuality("cutQualityTPC");
   cutQualityTPC->AddStatusFlag(AliESDtrack::kTPCin   , kTRUE);
   cutQualityTPC->AddStatusFlag(AliESDtrack::kTPCrefit, kTRUE);
   cutQualityTPC->AddStatusFlag(AliESDtrack::kITSrefit, kTRUE);
   cutQualityTPC->SetPtRange(0.15, 1E+20);
   cutQualityTPC->SetEtaRange(-0.8, 0.8);
   cutQualityTPC->SetDCARPtFormula("0.0182+0.0350/pt^1.01");
   cutQualityTPC->SetDCAZmax(2.0);
   cutQualityTPC->SetSPDminNClusters(1);
   cutQualityTPC->SetITSminNClusters(0);
   cutQualityTPC->SetITSmaxChi2(1E+20);
   cutQualityTPC->SetTPCminNClusters(70);
   cutQualityTPC->SetTPCmaxChi2(4.0);
   cutQualityTPC->SetRejectKinkDaughters();
   
   //
   // ITS PID
   // In this implementation, it is a 3sigma cut around the Bethe-Bloch value.
   //
   // NOTE:
   // --> The initialization of the BB is different between data and MC.
   // --> The cut is the same for all momenta.
   //
   AliRsnCutPIDITS *cutPIDITSkaon = new AliRsnCutPIDITS("cutPIDITSkaon", AliPID::kKaon, -3.0, 3.0);
   cutPIDITSkaon->SetMC(kTRUE);
   cutPIDITSkaon->SetMomentumRange(0.0, 1E20);
   
   //
   // TPC PID
   // In this implementation, there are two instances:
   // - below 350 MeV --> 5 sigma cut
   // - above 350 MeV --> 3 sigma cut
   //
   // NOTE:
   // --> The initialization of the BB is different between data and MC.
   //
   AliRsnCutPIDTPC *cutPIDTPCkaonLow  = new AliRsnCutPIDTPC("cutPIDTPCkaonLow" , AliPID::kKaon, -5.0, 5.0);
   AliRsnCutPIDTPC *cutPIDTPCkaonHigh = new AliRsnCutPIDTPC("cutPIDTPCkaonHigh", AliPID::kKaon, -3.0, 3.0);
   
   // assign the momentum range and tell to reject tracks outside it
   cutPIDTPCkaonLow ->SetMomentumRange(0.00, 0.35);
   cutPIDTPCkaonHigh->SetMomentumRange(0.35, 1E20);
   cutPIDTPCkaonLow ->SetRejectOutside(kTRUE);
   cutPIDTPCkaonHigh->SetRejectOutside(kTRUE);
   
   // BB parameterization depends on data sample (MC, data)
   // the momentum range is passed and tracks outside it are rejected
   Double_t bbPar[5];
   bbPar[0] = 2.15898 / 50.0;
   bbPar[1] = 1.75295E1;
   bbPar[2] = 3.40030E-9;
   bbPar[3] = 1.96178;
   bbPar[4] = 3.91720;
   cutPIDTPCkaonLow ->SetBBParam(bbPar);
   cutPIDTPCkaonHigh->SetBBParam(bbPar);
   
   //
   // TOF PID
   // In this implementation it is a 3sigma cout aroung expected kaon time.
   //
   // NOTE:
   // --> It is important to choose if this cut must reject tracks not matched in TOF.
   //     Usually, if TPC pid is used, we can accept them, otherwise we must reject.
   //     (here we assume TPC is used)
   //
   AliRsnCutPIDTOF *cutPIDTOFkaon = new AliRsnCutPIDTOF("cutPIDTOFkaon", AliPID::kKaon, -3.0, 3.0);
   cutPIDTOFkaon->SetRejectUnmatched(!useTPC);
   
   //
   // Rapidity cut
   // Only thing to consider is that it needs a support object to define mass
   //
   AliRsnCutValue *cutRapidity = new AliRsnCutValue("cutY", AliRsnValue::kPairY, -0.5, 0.5);
   cutRapidity->GetValueObj()->SetSupportObject(pairPhi);
   
   //
   // Axes
   //
   // NOTE:
   // --> multiplicity has variable bins, defined by array below
   //
   
   Double_t mult[] = { 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10., 11., 12., 13.,  14.,  15.,  16.,  17.,  18.,  19., 
                      20., 21., 22., 23., 24., 25., 30., 35., 40., 50., 60., 70., 80., 90., 100., 120., 140., 160., 180., 200., 500.};
   Int_t    nmult  = sizeof(mult) / sizeof(mult[0]);
   
   AliRsnValue *axisIM      = new AliRsnValue("IM"  , AliRsnValue::kPairInvMass   ,  0.9, 1.4, 0.001);
   AliRsnValue *axisRes     = new AliRsnValue("Res" , AliRsnValue::kPairInvMassRes, -0.5, 0.5, 0.001);
   AliRsnValue *axisPt      = new AliRsnValue("PT"  , AliRsnValue::kPairPt        ,  0.0, 5.0, 0.1  );
   AliRsnValue *axisY       = new AliRsnValue("Y"   , AliRsnValue::kPairY         , -1.1, 1.1, 0.1  );
   AliRsnValue *axisMultESD = new AliRsnValue("MESD", AliRsnValue::kEventMultESDCuts, nmult, mult);
   AliRsnValue *axisMultSPD = new AliRsnValue("MSPD", AliRsnValue::kEventMultSPD    , nmult, mult);
   AliRsnValue *axisMultMC  = new AliRsnValue("MMC" , AliRsnValue::kEventMultMC     , nmult, mult);
   
   // ==================================================================================================================
   // == PRELIMINARY OPERATIONS ========================================================================================
   // ==================================================================================================================

   // retrieve analysis manager
   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();

   // create task
   AliRsnAnalysisTaskEffPair *task = new AliRsnAnalysisTaskEffPair(Form("RsnEff_%s", options));
   task->SelectCollisionCandidates();

   // add pair definition, to choose the checked resonance
   task->AddDef(pairPhi);

   // add the output histogram axis
   task->AddAxis(axisIM);
   task->AddAxis(axisRes);
   task->AddAxis(axisPt);
   task->AddAxis(axisY);
   task->AddAxis(axisMultSPD);
   task->AddAxis(axisMultMC);

   // ==================================================================================================================
   // == EVENT CUTS ====================================================================================================
   // ==================================================================================================================

   gROOT->LoadMacro(Form("%s/AddRsnEventComputations.C", path));
   AddRsnEventComputations(kTRUE, evtopts);

   // ==================================================================================================================
   // == STEPS =========================================================================================================
   // ==================================================================================================================
   
   Char_t qualityITS[255], qualityTPC[255];
   Char_t pidITS[255], pidTPC[255], pidTOF[255];
   Char_t schemeITS[255], schemeTPC[255], scheme[255];
   
   sprintf(qualityITS, "%s"     , cutQualityITS->GetName());
   sprintf(qualityTPC, "%s"     , cutQualityTPC->GetName());
   sprintf(pidITS    , "%s"     , cutPIDITSkaon->GetName());
   sprintf(pidTPC    , "(%s|%s)", cutPIDTPCkaonHigh->GetName(), cutPIDTPCkaonLow->GetName());
   sprintf(pidTOF    , "%s"     , cutPIDTOFkaon->GetName());
   sprintf(schemeITS , "");
   sprintf(schemeTPC , "");
   sprintf(scheme    , "");

   //
   // *** STEP 0 - All resonances which decay in the specified pair
   //
   // This step does not need any kind of definition, since
   // its requirement is automatically checked during execution,
   // but to avoid segfaults, it is needed to initialize a cut manager.
   //
   AliRsnCutManager *mgr_step0 = new AliRsnCutManager("mc_step0", "");

   //
   // *** STEP 1 - Track quality
   //
   // All resonances whose daughters were reconstructed
   // and pass quality track cuts will enter this step
   //
   AliRsnCutManager *mgr_step1 = new AliRsnCutManager("rec_step1", "");
   AliRsnCutSet     *set_step1 = mgr_step1->GetCommonDaughterCuts();

   if (addTPC && addITS) {
      set_step1->AddCut(cutQualityTPC);
      set_step1->AddCut(cutQualityITS);
      set_step1->SetCutScheme(Form("%s|%s", qualityTPC, qualityITS));
   } else if (addTPC) {
      set_step1->AddCut(cutQualityTPC);
      set_step1->SetCutScheme(qualityTPC);
   } else if (addITS) {
      set_step1->AddCut(cutQualityITS);
      set_step1->SetCutScheme(qualityITS);
   } else {
      ::Error("Need to ad at least one between ITS and TPC tracks");
      return kFALSE;
   }
   ::Info("AddRsnAnalysisTaskEffPhi", "Cut scheme for step #1: %s", set_step1->GetCutScheme().Data());

   //
   // *** STEP 2 - PID
   //
   // Add all TPC cuts, according to options
   //
   AliRsnCutManager *mgr_step2 = new AliRsnCutManager("esd_step2", "");
   AliRsnCutSet     *set_step2 = mgr_step2->GetCommonDaughterCuts();

   if (addITS && useITS) {
      sprintf(schemeITS, "%s & %s", qualityITS, pidITS);
      set_step2->AddCut(cutPIDITSkaon);
   }
   if (addTPC) {
      if (useTPC && useTOF) {
         set_step2->AddCut(cutPIDTPCkaonLow);
         set_step2->AddCut(cutPIDTPCkaonHigh);
         set_step2->AddCut(cutPIDTOFkaon);
         sprintf(schemeTPC, "%s & %s", pidTPC, pidTOF);
      } else if (useTPC) {
         set_step2->AddCut(cutPIDTPCkaonLow);
         set_step2->AddCut(cutPIDTPCkaonHigh);
         sprintf(schemeTPC, "%s & %s", pidTPC);
      } else if (useTOF) {
         set_step2->AddCut(cutPIDTOFkaon);
         sprintf(schemeTPC, "%s & %s", pidTOF);
      }
   }
      
   // final scheme depends on what of the above were added
   // in case both ITS-SA and TPC tracks are added, the scheme
   // is the OR of the cuts for the first and those for the second
   // category of tracks
   if (strlen(schemeITS) > 0 && strlen(schemeTPC) > 0) {
      sprintf(scheme, "(%s) | (%s)", schemeITS, schemeTPC);
   } else if (strlen(schemeITS) > 0) {
      sprintf(scheme, "%s", schemeITS);
   } else if (strlen(schemeTPC) > 0) {
      sprintf(scheme, "%s", schemeTPC);
   } else {
      ::Error("Scheme is empty!");
      return kFALSE;
   }
   // check scheme
   set_step2->SetCutScheme(scheme);
   ::Info("AddRsnAnalysisTaskEffPhi", "Cut scheme for step #1: %s", set_step2->GetCutScheme().Data());

   // add all steps to the task:
   // - first step computed on MC
   // - all other steps computed on reconstruction
   task->AddStepMC(mgr_step0);
   task->AddStepRec(mgr_step1);
   task->AddStepRec(mgr_step2);

   // add the task to the manager and connect to input
   mgr->AddTask(task);
   mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());

   // create paths for the output in the common file
   TString infoname(task->GetName());
   TString histname(task->GetName());
   infoname.Append("_Info");
   histname.Append("_Hist");
   AliAnalysisDataContainer *outputInfo = mgr->CreateContainer(infoname.Data(), TList::Class(), AliAnalysisManager::kOutputContainer, mgr->GetCommonFileName());
   AliAnalysisDataContainer *outputHist = mgr->CreateContainer(histname.Data(), TList::Class(), AliAnalysisManager::kOutputContainer, mgr->GetCommonFileName());
   mgr->ConnectOutput(task, 1, outputInfo);
   mgr->ConnectOutput(task, 2, outputHist);

   return kTRUE;
}
 AddRsnAnalysisTaskEffPhi.C:1
 AddRsnAnalysisTaskEffPhi.C:2
 AddRsnAnalysisTaskEffPhi.C:3
 AddRsnAnalysisTaskEffPhi.C:4
 AddRsnAnalysisTaskEffPhi.C:5
 AddRsnAnalysisTaskEffPhi.C:6
 AddRsnAnalysisTaskEffPhi.C:7
 AddRsnAnalysisTaskEffPhi.C:8
 AddRsnAnalysisTaskEffPhi.C:9
 AddRsnAnalysisTaskEffPhi.C:10
 AddRsnAnalysisTaskEffPhi.C:11
 AddRsnAnalysisTaskEffPhi.C:12
 AddRsnAnalysisTaskEffPhi.C:13
 AddRsnAnalysisTaskEffPhi.C:14
 AddRsnAnalysisTaskEffPhi.C:15
 AddRsnAnalysisTaskEffPhi.C:16
 AddRsnAnalysisTaskEffPhi.C:17
 AddRsnAnalysisTaskEffPhi.C:18
 AddRsnAnalysisTaskEffPhi.C:19
 AddRsnAnalysisTaskEffPhi.C:20
 AddRsnAnalysisTaskEffPhi.C:21
 AddRsnAnalysisTaskEffPhi.C:22
 AddRsnAnalysisTaskEffPhi.C:23
 AddRsnAnalysisTaskEffPhi.C:24
 AddRsnAnalysisTaskEffPhi.C:25
 AddRsnAnalysisTaskEffPhi.C:26
 AddRsnAnalysisTaskEffPhi.C:27
 AddRsnAnalysisTaskEffPhi.C:28
 AddRsnAnalysisTaskEffPhi.C:29
 AddRsnAnalysisTaskEffPhi.C:30
 AddRsnAnalysisTaskEffPhi.C:31
 AddRsnAnalysisTaskEffPhi.C:32
 AddRsnAnalysisTaskEffPhi.C:33
 AddRsnAnalysisTaskEffPhi.C:34
 AddRsnAnalysisTaskEffPhi.C:35
 AddRsnAnalysisTaskEffPhi.C:36
 AddRsnAnalysisTaskEffPhi.C:37
 AddRsnAnalysisTaskEffPhi.C:38
 AddRsnAnalysisTaskEffPhi.C:39
 AddRsnAnalysisTaskEffPhi.C:40
 AddRsnAnalysisTaskEffPhi.C:41
 AddRsnAnalysisTaskEffPhi.C:42
 AddRsnAnalysisTaskEffPhi.C:43
 AddRsnAnalysisTaskEffPhi.C:44
 AddRsnAnalysisTaskEffPhi.C:45
 AddRsnAnalysisTaskEffPhi.C:46
 AddRsnAnalysisTaskEffPhi.C:47
 AddRsnAnalysisTaskEffPhi.C:48
 AddRsnAnalysisTaskEffPhi.C:49
 AddRsnAnalysisTaskEffPhi.C:50
 AddRsnAnalysisTaskEffPhi.C:51
 AddRsnAnalysisTaskEffPhi.C:52
 AddRsnAnalysisTaskEffPhi.C:53
 AddRsnAnalysisTaskEffPhi.C:54
 AddRsnAnalysisTaskEffPhi.C:55
 AddRsnAnalysisTaskEffPhi.C:56
 AddRsnAnalysisTaskEffPhi.C:57
 AddRsnAnalysisTaskEffPhi.C:58
 AddRsnAnalysisTaskEffPhi.C:59
 AddRsnAnalysisTaskEffPhi.C:60
 AddRsnAnalysisTaskEffPhi.C:61
 AddRsnAnalysisTaskEffPhi.C:62
 AddRsnAnalysisTaskEffPhi.C:63
 AddRsnAnalysisTaskEffPhi.C:64
 AddRsnAnalysisTaskEffPhi.C:65
 AddRsnAnalysisTaskEffPhi.C:66
 AddRsnAnalysisTaskEffPhi.C:67
 AddRsnAnalysisTaskEffPhi.C:68
 AddRsnAnalysisTaskEffPhi.C:69
 AddRsnAnalysisTaskEffPhi.C:70
 AddRsnAnalysisTaskEffPhi.C:71
 AddRsnAnalysisTaskEffPhi.C:72
 AddRsnAnalysisTaskEffPhi.C:73
 AddRsnAnalysisTaskEffPhi.C:74
 AddRsnAnalysisTaskEffPhi.C:75
 AddRsnAnalysisTaskEffPhi.C:76
 AddRsnAnalysisTaskEffPhi.C:77
 AddRsnAnalysisTaskEffPhi.C:78
 AddRsnAnalysisTaskEffPhi.C:79
 AddRsnAnalysisTaskEffPhi.C:80
 AddRsnAnalysisTaskEffPhi.C:81
 AddRsnAnalysisTaskEffPhi.C:82
 AddRsnAnalysisTaskEffPhi.C:83
 AddRsnAnalysisTaskEffPhi.C:84
 AddRsnAnalysisTaskEffPhi.C:85
 AddRsnAnalysisTaskEffPhi.C:86
 AddRsnAnalysisTaskEffPhi.C:87
 AddRsnAnalysisTaskEffPhi.C:88
 AddRsnAnalysisTaskEffPhi.C:89
 AddRsnAnalysisTaskEffPhi.C:90
 AddRsnAnalysisTaskEffPhi.C:91
 AddRsnAnalysisTaskEffPhi.C:92
 AddRsnAnalysisTaskEffPhi.C:93
 AddRsnAnalysisTaskEffPhi.C:94
 AddRsnAnalysisTaskEffPhi.C:95
 AddRsnAnalysisTaskEffPhi.C:96
 AddRsnAnalysisTaskEffPhi.C:97
 AddRsnAnalysisTaskEffPhi.C:98
 AddRsnAnalysisTaskEffPhi.C:99
 AddRsnAnalysisTaskEffPhi.C:100
 AddRsnAnalysisTaskEffPhi.C:101
 AddRsnAnalysisTaskEffPhi.C:102
 AddRsnAnalysisTaskEffPhi.C:103
 AddRsnAnalysisTaskEffPhi.C:104
 AddRsnAnalysisTaskEffPhi.C:105
 AddRsnAnalysisTaskEffPhi.C:106
 AddRsnAnalysisTaskEffPhi.C:107
 AddRsnAnalysisTaskEffPhi.C:108
 AddRsnAnalysisTaskEffPhi.C:109
 AddRsnAnalysisTaskEffPhi.C:110
 AddRsnAnalysisTaskEffPhi.C:111
 AddRsnAnalysisTaskEffPhi.C:112
 AddRsnAnalysisTaskEffPhi.C:113
 AddRsnAnalysisTaskEffPhi.C:114
 AddRsnAnalysisTaskEffPhi.C:115
 AddRsnAnalysisTaskEffPhi.C:116
 AddRsnAnalysisTaskEffPhi.C:117
 AddRsnAnalysisTaskEffPhi.C:118
 AddRsnAnalysisTaskEffPhi.C:119
 AddRsnAnalysisTaskEffPhi.C:120
 AddRsnAnalysisTaskEffPhi.C:121
 AddRsnAnalysisTaskEffPhi.C:122
 AddRsnAnalysisTaskEffPhi.C:123
 AddRsnAnalysisTaskEffPhi.C:124
 AddRsnAnalysisTaskEffPhi.C:125
 AddRsnAnalysisTaskEffPhi.C:126
 AddRsnAnalysisTaskEffPhi.C:127
 AddRsnAnalysisTaskEffPhi.C:128
 AddRsnAnalysisTaskEffPhi.C:129
 AddRsnAnalysisTaskEffPhi.C:130
 AddRsnAnalysisTaskEffPhi.C:131
 AddRsnAnalysisTaskEffPhi.C:132
 AddRsnAnalysisTaskEffPhi.C:133
 AddRsnAnalysisTaskEffPhi.C:134
 AddRsnAnalysisTaskEffPhi.C:135
 AddRsnAnalysisTaskEffPhi.C:136
 AddRsnAnalysisTaskEffPhi.C:137
 AddRsnAnalysisTaskEffPhi.C:138
 AddRsnAnalysisTaskEffPhi.C:139
 AddRsnAnalysisTaskEffPhi.C:140
 AddRsnAnalysisTaskEffPhi.C:141
 AddRsnAnalysisTaskEffPhi.C:142
 AddRsnAnalysisTaskEffPhi.C:143
 AddRsnAnalysisTaskEffPhi.C:144
 AddRsnAnalysisTaskEffPhi.C:145
 AddRsnAnalysisTaskEffPhi.C:146
 AddRsnAnalysisTaskEffPhi.C:147
 AddRsnAnalysisTaskEffPhi.C:148
 AddRsnAnalysisTaskEffPhi.C:149
 AddRsnAnalysisTaskEffPhi.C:150
 AddRsnAnalysisTaskEffPhi.C:151
 AddRsnAnalysisTaskEffPhi.C:152
 AddRsnAnalysisTaskEffPhi.C:153
 AddRsnAnalysisTaskEffPhi.C:154
 AddRsnAnalysisTaskEffPhi.C:155
 AddRsnAnalysisTaskEffPhi.C:156
 AddRsnAnalysisTaskEffPhi.C:157
 AddRsnAnalysisTaskEffPhi.C:158
 AddRsnAnalysisTaskEffPhi.C:159
 AddRsnAnalysisTaskEffPhi.C:160
 AddRsnAnalysisTaskEffPhi.C:161
 AddRsnAnalysisTaskEffPhi.C:162
 AddRsnAnalysisTaskEffPhi.C:163
 AddRsnAnalysisTaskEffPhi.C:164
 AddRsnAnalysisTaskEffPhi.C:165
 AddRsnAnalysisTaskEffPhi.C:166
 AddRsnAnalysisTaskEffPhi.C:167
 AddRsnAnalysisTaskEffPhi.C:168
 AddRsnAnalysisTaskEffPhi.C:169
 AddRsnAnalysisTaskEffPhi.C:170
 AddRsnAnalysisTaskEffPhi.C:171
 AddRsnAnalysisTaskEffPhi.C:172
 AddRsnAnalysisTaskEffPhi.C:173
 AddRsnAnalysisTaskEffPhi.C:174
 AddRsnAnalysisTaskEffPhi.C:175
 AddRsnAnalysisTaskEffPhi.C:176
 AddRsnAnalysisTaskEffPhi.C:177
 AddRsnAnalysisTaskEffPhi.C:178
 AddRsnAnalysisTaskEffPhi.C:179
 AddRsnAnalysisTaskEffPhi.C:180
 AddRsnAnalysisTaskEffPhi.C:181
 AddRsnAnalysisTaskEffPhi.C:182
 AddRsnAnalysisTaskEffPhi.C:183
 AddRsnAnalysisTaskEffPhi.C:184
 AddRsnAnalysisTaskEffPhi.C:185
 AddRsnAnalysisTaskEffPhi.C:186
 AddRsnAnalysisTaskEffPhi.C:187
 AddRsnAnalysisTaskEffPhi.C:188
 AddRsnAnalysisTaskEffPhi.C:189
 AddRsnAnalysisTaskEffPhi.C:190
 AddRsnAnalysisTaskEffPhi.C:191
 AddRsnAnalysisTaskEffPhi.C:192
 AddRsnAnalysisTaskEffPhi.C:193
 AddRsnAnalysisTaskEffPhi.C:194
 AddRsnAnalysisTaskEffPhi.C:195
 AddRsnAnalysisTaskEffPhi.C:196
 AddRsnAnalysisTaskEffPhi.C:197
 AddRsnAnalysisTaskEffPhi.C:198
 AddRsnAnalysisTaskEffPhi.C:199
 AddRsnAnalysisTaskEffPhi.C:200
 AddRsnAnalysisTaskEffPhi.C:201
 AddRsnAnalysisTaskEffPhi.C:202
 AddRsnAnalysisTaskEffPhi.C:203
 AddRsnAnalysisTaskEffPhi.C:204
 AddRsnAnalysisTaskEffPhi.C:205
 AddRsnAnalysisTaskEffPhi.C:206
 AddRsnAnalysisTaskEffPhi.C:207
 AddRsnAnalysisTaskEffPhi.C:208
 AddRsnAnalysisTaskEffPhi.C:209
 AddRsnAnalysisTaskEffPhi.C:210
 AddRsnAnalysisTaskEffPhi.C:211
 AddRsnAnalysisTaskEffPhi.C:212
 AddRsnAnalysisTaskEffPhi.C:213
 AddRsnAnalysisTaskEffPhi.C:214
 AddRsnAnalysisTaskEffPhi.C:215
 AddRsnAnalysisTaskEffPhi.C:216
 AddRsnAnalysisTaskEffPhi.C:217
 AddRsnAnalysisTaskEffPhi.C:218
 AddRsnAnalysisTaskEffPhi.C:219
 AddRsnAnalysisTaskEffPhi.C:220
 AddRsnAnalysisTaskEffPhi.C:221
 AddRsnAnalysisTaskEffPhi.C:222
 AddRsnAnalysisTaskEffPhi.C:223
 AddRsnAnalysisTaskEffPhi.C:224
 AddRsnAnalysisTaskEffPhi.C:225
 AddRsnAnalysisTaskEffPhi.C:226
 AddRsnAnalysisTaskEffPhi.C:227
 AddRsnAnalysisTaskEffPhi.C:228
 AddRsnAnalysisTaskEffPhi.C:229
 AddRsnAnalysisTaskEffPhi.C:230
 AddRsnAnalysisTaskEffPhi.C:231
 AddRsnAnalysisTaskEffPhi.C:232
 AddRsnAnalysisTaskEffPhi.C:233
 AddRsnAnalysisTaskEffPhi.C:234
 AddRsnAnalysisTaskEffPhi.C:235
 AddRsnAnalysisTaskEffPhi.C:236
 AddRsnAnalysisTaskEffPhi.C:237
 AddRsnAnalysisTaskEffPhi.C:238
 AddRsnAnalysisTaskEffPhi.C:239
 AddRsnAnalysisTaskEffPhi.C:240
 AddRsnAnalysisTaskEffPhi.C:241
 AddRsnAnalysisTaskEffPhi.C:242
 AddRsnAnalysisTaskEffPhi.C:243
 AddRsnAnalysisTaskEffPhi.C:244
 AddRsnAnalysisTaskEffPhi.C:245
 AddRsnAnalysisTaskEffPhi.C:246
 AddRsnAnalysisTaskEffPhi.C:247
 AddRsnAnalysisTaskEffPhi.C:248
 AddRsnAnalysisTaskEffPhi.C:249
 AddRsnAnalysisTaskEffPhi.C:250
 AddRsnAnalysisTaskEffPhi.C:251
 AddRsnAnalysisTaskEffPhi.C:252
 AddRsnAnalysisTaskEffPhi.C:253
 AddRsnAnalysisTaskEffPhi.C:254
 AddRsnAnalysisTaskEffPhi.C:255
 AddRsnAnalysisTaskEffPhi.C:256
 AddRsnAnalysisTaskEffPhi.C:257
 AddRsnAnalysisTaskEffPhi.C:258
 AddRsnAnalysisTaskEffPhi.C:259
 AddRsnAnalysisTaskEffPhi.C:260
 AddRsnAnalysisTaskEffPhi.C:261
 AddRsnAnalysisTaskEffPhi.C:262
 AddRsnAnalysisTaskEffPhi.C:263
 AddRsnAnalysisTaskEffPhi.C:264
 AddRsnAnalysisTaskEffPhi.C:265
 AddRsnAnalysisTaskEffPhi.C:266
 AddRsnAnalysisTaskEffPhi.C:267
 AddRsnAnalysisTaskEffPhi.C:268
 AddRsnAnalysisTaskEffPhi.C:269
 AddRsnAnalysisTaskEffPhi.C:270
 AddRsnAnalysisTaskEffPhi.C:271
 AddRsnAnalysisTaskEffPhi.C:272
 AddRsnAnalysisTaskEffPhi.C:273
 AddRsnAnalysisTaskEffPhi.C:274
 AddRsnAnalysisTaskEffPhi.C:275
 AddRsnAnalysisTaskEffPhi.C:276
 AddRsnAnalysisTaskEffPhi.C:277
 AddRsnAnalysisTaskEffPhi.C:278
 AddRsnAnalysisTaskEffPhi.C:279
 AddRsnAnalysisTaskEffPhi.C:280
 AddRsnAnalysisTaskEffPhi.C:281
 AddRsnAnalysisTaskEffPhi.C:282
 AddRsnAnalysisTaskEffPhi.C:283
 AddRsnAnalysisTaskEffPhi.C:284
 AddRsnAnalysisTaskEffPhi.C:285
 AddRsnAnalysisTaskEffPhi.C:286
 AddRsnAnalysisTaskEffPhi.C:287
 AddRsnAnalysisTaskEffPhi.C:288
 AddRsnAnalysisTaskEffPhi.C:289
 AddRsnAnalysisTaskEffPhi.C:290
 AddRsnAnalysisTaskEffPhi.C:291
 AddRsnAnalysisTaskEffPhi.C:292
 AddRsnAnalysisTaskEffPhi.C:293
 AddRsnAnalysisTaskEffPhi.C:294
 AddRsnAnalysisTaskEffPhi.C:295
 AddRsnAnalysisTaskEffPhi.C:296
 AddRsnAnalysisTaskEffPhi.C:297
 AddRsnAnalysisTaskEffPhi.C:298
 AddRsnAnalysisTaskEffPhi.C:299
 AddRsnAnalysisTaskEffPhi.C:300
 AddRsnAnalysisTaskEffPhi.C:301
 AddRsnAnalysisTaskEffPhi.C:302
 AddRsnAnalysisTaskEffPhi.C:303
 AddRsnAnalysisTaskEffPhi.C:304
 AddRsnAnalysisTaskEffPhi.C:305
 AddRsnAnalysisTaskEffPhi.C:306
 AddRsnAnalysisTaskEffPhi.C:307
 AddRsnAnalysisTaskEffPhi.C:308
 AddRsnAnalysisTaskEffPhi.C:309
 AddRsnAnalysisTaskEffPhi.C:310
 AddRsnAnalysisTaskEffPhi.C:311
 AddRsnAnalysisTaskEffPhi.C:312
 AddRsnAnalysisTaskEffPhi.C:313
 AddRsnAnalysisTaskEffPhi.C:314
 AddRsnAnalysisTaskEffPhi.C:315
 AddRsnAnalysisTaskEffPhi.C:316
 AddRsnAnalysisTaskEffPhi.C:317
 AddRsnAnalysisTaskEffPhi.C:318
 AddRsnAnalysisTaskEffPhi.C:319
 AddRsnAnalysisTaskEffPhi.C:320
 AddRsnAnalysisTaskEffPhi.C:321
 AddRsnAnalysisTaskEffPhi.C:322
 AddRsnAnalysisTaskEffPhi.C:323
 AddRsnAnalysisTaskEffPhi.C:324
 AddRsnAnalysisTaskEffPhi.C:325
 AddRsnAnalysisTaskEffPhi.C:326
 AddRsnAnalysisTaskEffPhi.C:327
 AddRsnAnalysisTaskEffPhi.C:328
 AddRsnAnalysisTaskEffPhi.C:329
 AddRsnAnalysisTaskEffPhi.C:330
 AddRsnAnalysisTaskEffPhi.C:331
 AddRsnAnalysisTaskEffPhi.C:332