ROOT logo
/***************************************************************************
              adash@cern.ch - last modified on 03/04/2013

// *** Configuration script for Phi-Meson analysis with 2013 PPb runs ***
// 
// A configuration script for RSN package needs to define the followings:
//
// (1) decay tree of each resonance to be studied, which is needed to select
//     true pairs and to assign the right mass to all candidate daughters
// (2) cuts at all levels: single daughters, tracks, events
// (3) output objects: histograms or trees
****************************************************************************/

Bool_t ConfigPhiPPb_TPC(  
		       AliRsnMiniAnalysisTask *task, 
		       Bool_t                 isMC, 
		       Bool_t                 isPP,
		       const char             *suffix,
		       AliRsnCutSet           *cutsPair,
		       AliPID::EParticleType  type,
		       Float_t                nsigmaKp = 2.0,
		       Bool_t                 enableMonitor = kTRUE,
		       TString                optSyt="Default"
			 )
{

  //These are the Default values for 2011 ESD track cuts
  
  Double_t  dcaxymax                  = 2.0;
  TString   PtDcaFormula              = "0.0105+0.0350/pt^1.1";//7sigma
  Double_t  dcazmax                   = 2.0;
  Double_t  minNcls                   = 50;
  Double_t  maxX2TPCcls               = 4.0;
  Double_t  maxX2ITScls               = 36.0;
  Double_t  minCrossedRows            = 70.0;
  Double_t  minRatioClsCrRowsOverFCls = 0.8;
  
  if(optSyt.Contains("PtDCAXY5s")) {PtDcaFormula = "0.0075+0.025/pt^1.1";}
  if(optSyt.Contains("PtDCAXY6s")) {PtDcaFormula = "0.0090+0.030/pt^1.1";}
  if(optSyt.Contains("PtDCAXY7s")) {PtDcaFormula = "0.0105+0.035/pt^1.1";}
  if(optSyt.Contains("PtDCAXY8s")) {PtDcaFormula = "0.0120+0.040/pt^1.1";}
  if(optSyt.Contains("PtDCAXY9s")) {PtDcaFormula = "0.0135+0.045/pt^1.1";}

  if(optSyt.Contains("FixDCAZ1")) {dcazmax = 1.;}
  if(optSyt.Contains("FixDCAZ2")) {dcazmax = 2.;}
  if(optSyt.Contains("FixDCAZ3")) {dcazmax = 3.;}
  
  if(optSyt.Contains("NCrRows60")){minCrossedRows = 60;}
  if(optSyt.Contains("NCrRows70")){minCrossedRows = 70;}
  if(optSyt.Contains("NCrRows80")){minCrossedRows = 80;}
  if(optSyt.Contains("NCrRows90")){minCrossedRows = 90;}

  if(optSyt.Contains("RClsCrRowsOvFCls0.7")){minRatioClsCrRowsOverFCls = 0.7;}
  if(optSyt.Contains("RClsCrRowsOvFCls0.8")){minRatioClsCrRowsOverFCls = 0.8;}
  if(optSyt.Contains("RClsCrRowsOvFCls0.9")){minRatioClsCrRowsOverFCls = 0.9;}

  if(optSyt.Contains("ChiSqrPerTPCCls3")) {maxX2TPCcls = 3.0;}
  if(optSyt.Contains("ChiSqrPerTPCCls4")) {maxX2TPCcls = 4.0;}
  if(optSyt.Contains("ChiSqrPerTPCCls5")) {maxX2TPCcls = 5.0;}

  if(optSyt.Contains("ChiSqrPerITSCls30")) {maxX2ITScls = 30.0;}
  if(optSyt.Contains("ChiSqrPerITSCls36")) {maxX2ITScls = 36.0;}
  if(optSyt.Contains("ChiSqrPerITSCls45")) {maxX2ITScls = 45.0;}
  
  // manage suffix
  if (strlen(suffix) > 0) suffix = Form("_%s", suffix);
  
  // retrieve mass from PDG database
  Int_t         pdg  = 333;
  TDatabasePDG *db   = TDatabasePDG::Instance();
  TParticlePDG *part = db->GetParticle(pdg);
  Double_t mass      = part->Mass();
  
  TString opt = "PPb";
  TString scheme="";  
  TString cutname = "K_Phi";
  if (!opt.IsNull()) cutname += Form("_%s",opt.Data());

  AliRsnCutSet * cutSetKaon = new AliRsnCutSet(cutname.Data(), AliRsnTarget::kDaughter);
  AliRsnCutTrackQuality *fQualityTrackCut = new AliRsnCutTrackQuality("AliRsnCutTrackQuality");
  //
  AliESDtrackCuts* esdTrackCuts = new AliESDtrackCuts;
  
  if(optSyt.Contains("Default")){
    ::Info("ConfigPhipPbTPC", Form("Default 2011 ESD track cuts used : %s\n",optSyt.Data()));
    Int_t clusterCut = 1;
    Bool_t selPrimaries = kTRUE;  
    if(clusterCut == 0)  esdTrackCuts->SetMinNClustersTPC(50);
    else if (clusterCut == 1) {
      esdTrackCuts->SetMinNCrossedRowsTPC(70);
      esdTrackCuts->SetMinRatioCrossedRowsOverFindableClustersTPC(0.8);
    }
    esdTrackCuts->SetMaxChi2PerClusterTPC(4);
    esdTrackCuts->SetAcceptKinkDaughters(kFALSE);
    esdTrackCuts->SetRequireTPCRefit(kTRUE);
    // ITS
    esdTrackCuts->SetRequireITSRefit(kTRUE);
    esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
					   AliESDtrackCuts::kAny);
    if(selPrimaries) {
      // 7*(0.0015+0.0050/pt^1.1)
      esdTrackCuts->SetMaxDCAToVertexXYPtDep("0.0105+0.0350/pt^1.1");
      esdTrackCuts->SetMaxChi2TPCConstrainedGlobal(36);
    }
    esdTrackCuts->SetMaxDCAToVertexZ(2);
    esdTrackCuts->SetDCAToVertex2D(kFALSE);
    esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
    esdTrackCuts->SetMaxChi2PerClusterITS(36);
  }
  else{
    ::Info("ConfigPhipPbTPC", Form("User Defined ESD track cuts used for Sys : %s\n",optSyt.Data()));
    Int_t clusterCut = 1;
    Bool_t selPrimaries = kTRUE;  
    if(clusterCut == 0)  esdTrackCuts->SetMinNClustersTPC(50);
    else if (clusterCut == 1) {
      esdTrackCuts->SetMinNCrossedRowsTPC(minCrossedRows);
      esdTrackCuts->SetMinRatioCrossedRowsOverFindableClustersTPC(minRatioClsCrRowsOverFCls);
    }
    esdTrackCuts->SetMaxChi2PerClusterTPC(maxX2TPCcls);
    esdTrackCuts->SetAcceptKinkDaughters(kFALSE);
    esdTrackCuts->SetRequireTPCRefit(kTRUE);
    // ITS
    esdTrackCuts->SetRequireITSRefit(kTRUE);
    esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
					   AliESDtrackCuts::kAny);
    if(selPrimaries) {
      // 7*(0.0015+0.0050/pt^1.1)
      esdTrackCuts->SetMaxDCAToVertexXYPtDep(PtDcaFormula.Data());
      esdTrackCuts->SetMaxChi2TPCConstrainedGlobal(36);
    }
    //esdTrackCuts->SetMaxDCAToVertexXY(2)
    esdTrackCuts->SetMaxDCAToVertexZ(dcazmax);
    esdTrackCuts->SetDCAToVertex2D(kFALSE);
    esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
    esdTrackCuts->SetMaxChi2PerClusterITS(maxX2ITScls);
  }
  
    fQualityTrackCut->SetESDtrackCuts(esdTrackCuts);
    fQualityTrackCut->SetPtRange(0.15,10);
    fQualityTrackCut->SetEtaRange(-0.8,0.8); 
    
  //fQualityTrackCut->Print();
  cutSetKaon->AddCut(fQualityTrackCut);
  if (!scheme.IsNull()) scheme += "&";
  scheme += fQualityTrackCut->GetName(); 

  //AliRsnCutPIDNSigma *cutKTPC = new AliRsnCutPIDNSigma("cutNSigmaTPCK",AliPID::kKaon,AliRsnCutPIDNSigma::kTPC);
  AliRsnCutPIDNSigma *cutKTPC = new AliRsnCutPIDNSigma("cutNSigmaTPCK",type,AliRsnCutPIDNSigma::kTPC);
  cutKTPC->SinglePIDRange(nsigmaKp);
  cutSetKaon->AddCut(cutKTPC);
  if (!scheme.IsNull()) scheme += "&";
  scheme += cutKTPC->GetName();
  //Printf ("CUT Scheme for KAON is '%s'",scheme.Data());
  cutSetKaon->SetCutScheme(scheme.Data());
  
  Int_t iCutK = task->AddTrackCuts(cutSetKaon);
  
  if(enableMonitor){
    Printf("======== Monitoring cut AliRsnCutSetDaughterParticle enabled");
    gROOT->LoadMacro("$ALICE_ROOT/PWGLF/RESONANCES/macros/mini/AddMonitorOutput.C");
    AddMonitorOutput(isMC, cutSetKaon->GetMonitorOutput());
  }  
  // -- Values ------------------------------------------------------------------------------------
  /* invariant mass   */ Int_t imID   = task->CreateValue(AliRsnMiniValue::kInvMass,    kFALSE);
  /* IM resolution    */ Int_t resID  = task->CreateValue(AliRsnMiniValue::kInvMassRes, kTRUE);
  /* transv. momentum */ Int_t ptID   = task->CreateValue(AliRsnMiniValue::kPt,         kFALSE);
  /* centrality       */ Int_t centID = task->CreateValue(AliRsnMiniValue::kMult,       kFALSE);
  /* pseudorapidity   */ Int_t etaID  = task->CreateValue(AliRsnMiniValue::kEta,        kFALSE);
  /* rapidity         */ Int_t yID    = task->CreateValue(AliRsnMiniValue::kY,          kFALSE);
  // -- Create all needed outputs -----------------------------------------------------------------
  // use an array for more compact writing, which are different on mixing and charges
  // [0] = unlike
  // [1] = mixing
  // [2] = like ++
  // [3] = like --

  Bool_t  use     [7] = { 1      , 1       , 1       , 1       , isMC    , isMC    , isMC    };
  Bool_t  useIM   [7] = { 1      , 1       , 1       , 1       , 1       , 1       , 0       };
  TString name    [7] = {"Unlike", "Mixing", "LikePP", "LikeMM", "MCGen" , "Trues" , "Res"   };
  TString comp    [7] = {"PAIR"  , "MIX"   , "PAIR"  , "PAIR"  , "MOTHER", "TRUE"  , "TRUE"  };
  TString output  [7] = {"SPARSE", "SPARSE", "SPARSE", "SPARSE", "SPARSE", "SPARSE", "SPARSE"};
  Char_t  charge1 [7] = {'+'     , '+'     , '+'     , '-'     , '+'     , '+'       , '+'   };
  Char_t  charge2 [7] = {'-'     , '-'     , '+'     , '-'     , '-'     , '-'       , '-'   };
  Int_t   cutID   [7] = {iCutK   , iCutK   , iCutK   , iCutK   , iCutK   , iCutK     , iCutK };
  
  for (Int_t i = 0; i < 7; i++) {
    if (!use[i]) continue;
    AliRsnMiniOutput *out = task->CreateOutput(Form("PhiMeson_%s%s", name[i].Data(), suffix), output[i].Data(), comp[i].Data());
    out->SetCutID(0, cutID[i]);
    out->SetCutID(1, cutID[i]);
    out->SetDaughter(0, AliRsnDaughter::kKaon);
    out->SetDaughter(1, AliRsnDaughter::kKaon);
    out->SetCharge(0, charge1[i]);
    out->SetCharge(1, charge2[i]);
    out->SetMotherPDG(pdg);
    out->SetMotherMass(mass);
    out->SetPairCuts(cutsPair);

    // axis X: invmass (or resolution)
    if (useIM[i]) 
      out->AddAxis(imID, 120, 0.98, 1.1);
    else
      out->AddAxis(resID, 200, -0.02, 0.02);
    
    // axis Y: transverse momentum
    out->AddAxis(ptID, 100, 0.0, 10.0);
    
    // axis Z: centrality-multiplicity
    if (!isPP)
      out->AddAxis(centID, 100, 0.0, 100.0);
    else 
      out->AddAxis(centID, 400, 0.0, 400.0);
      
    // axis W: pseudorapidity
    // out->AddAxis(etaID, 20, -1.0, 1.0);
    // axis J: rapidity
    //out->AddAxis(yID, 90, -4.5, 4.5);
    
  }
  return kTRUE;
}
 ConfigPhiPPb_TPC.C:1
 ConfigPhiPPb_TPC.C:2
 ConfigPhiPPb_TPC.C:3
 ConfigPhiPPb_TPC.C:4
 ConfigPhiPPb_TPC.C:5
 ConfigPhiPPb_TPC.C:6
 ConfigPhiPPb_TPC.C:7
 ConfigPhiPPb_TPC.C:8
 ConfigPhiPPb_TPC.C:9
 ConfigPhiPPb_TPC.C:10
 ConfigPhiPPb_TPC.C:11
 ConfigPhiPPb_TPC.C:12
 ConfigPhiPPb_TPC.C:13
 ConfigPhiPPb_TPC.C:14
 ConfigPhiPPb_TPC.C:15
 ConfigPhiPPb_TPC.C:16
 ConfigPhiPPb_TPC.C:17
 ConfigPhiPPb_TPC.C:18
 ConfigPhiPPb_TPC.C:19
 ConfigPhiPPb_TPC.C:20
 ConfigPhiPPb_TPC.C:21
 ConfigPhiPPb_TPC.C:22
 ConfigPhiPPb_TPC.C:23
 ConfigPhiPPb_TPC.C:24
 ConfigPhiPPb_TPC.C:25
 ConfigPhiPPb_TPC.C:26
 ConfigPhiPPb_TPC.C:27
 ConfigPhiPPb_TPC.C:28
 ConfigPhiPPb_TPC.C:29
 ConfigPhiPPb_TPC.C:30
 ConfigPhiPPb_TPC.C:31
 ConfigPhiPPb_TPC.C:32
 ConfigPhiPPb_TPC.C:33
 ConfigPhiPPb_TPC.C:34
 ConfigPhiPPb_TPC.C:35
 ConfigPhiPPb_TPC.C:36
 ConfigPhiPPb_TPC.C:37
 ConfigPhiPPb_TPC.C:38
 ConfigPhiPPb_TPC.C:39
 ConfigPhiPPb_TPC.C:40
 ConfigPhiPPb_TPC.C:41
 ConfigPhiPPb_TPC.C:42
 ConfigPhiPPb_TPC.C:43
 ConfigPhiPPb_TPC.C:44
 ConfigPhiPPb_TPC.C:45
 ConfigPhiPPb_TPC.C:46
 ConfigPhiPPb_TPC.C:47
 ConfigPhiPPb_TPC.C:48
 ConfigPhiPPb_TPC.C:49
 ConfigPhiPPb_TPC.C:50
 ConfigPhiPPb_TPC.C:51
 ConfigPhiPPb_TPC.C:52
 ConfigPhiPPb_TPC.C:53
 ConfigPhiPPb_TPC.C:54
 ConfigPhiPPb_TPC.C:55
 ConfigPhiPPb_TPC.C:56
 ConfigPhiPPb_TPC.C:57
 ConfigPhiPPb_TPC.C:58
 ConfigPhiPPb_TPC.C:59
 ConfigPhiPPb_TPC.C:60
 ConfigPhiPPb_TPC.C:61
 ConfigPhiPPb_TPC.C:62
 ConfigPhiPPb_TPC.C:63
 ConfigPhiPPb_TPC.C:64
 ConfigPhiPPb_TPC.C:65
 ConfigPhiPPb_TPC.C:66
 ConfigPhiPPb_TPC.C:67
 ConfigPhiPPb_TPC.C:68
 ConfigPhiPPb_TPC.C:69
 ConfigPhiPPb_TPC.C:70
 ConfigPhiPPb_TPC.C:71
 ConfigPhiPPb_TPC.C:72
 ConfigPhiPPb_TPC.C:73
 ConfigPhiPPb_TPC.C:74
 ConfigPhiPPb_TPC.C:75
 ConfigPhiPPb_TPC.C:76
 ConfigPhiPPb_TPC.C:77
 ConfigPhiPPb_TPC.C:78
 ConfigPhiPPb_TPC.C:79
 ConfigPhiPPb_TPC.C:80
 ConfigPhiPPb_TPC.C:81
 ConfigPhiPPb_TPC.C:82
 ConfigPhiPPb_TPC.C:83
 ConfigPhiPPb_TPC.C:84
 ConfigPhiPPb_TPC.C:85
 ConfigPhiPPb_TPC.C:86
 ConfigPhiPPb_TPC.C:87
 ConfigPhiPPb_TPC.C:88
 ConfigPhiPPb_TPC.C:89
 ConfigPhiPPb_TPC.C:90
 ConfigPhiPPb_TPC.C:91
 ConfigPhiPPb_TPC.C:92
 ConfigPhiPPb_TPC.C:93
 ConfigPhiPPb_TPC.C:94
 ConfigPhiPPb_TPC.C:95
 ConfigPhiPPb_TPC.C:96
 ConfigPhiPPb_TPC.C:97
 ConfigPhiPPb_TPC.C:98
 ConfigPhiPPb_TPC.C:99
 ConfigPhiPPb_TPC.C:100
 ConfigPhiPPb_TPC.C:101
 ConfigPhiPPb_TPC.C:102
 ConfigPhiPPb_TPC.C:103
 ConfigPhiPPb_TPC.C:104
 ConfigPhiPPb_TPC.C:105
 ConfigPhiPPb_TPC.C:106
 ConfigPhiPPb_TPC.C:107
 ConfigPhiPPb_TPC.C:108
 ConfigPhiPPb_TPC.C:109
 ConfigPhiPPb_TPC.C:110
 ConfigPhiPPb_TPC.C:111
 ConfigPhiPPb_TPC.C:112
 ConfigPhiPPb_TPC.C:113
 ConfigPhiPPb_TPC.C:114
 ConfigPhiPPb_TPC.C:115
 ConfigPhiPPb_TPC.C:116
 ConfigPhiPPb_TPC.C:117
 ConfigPhiPPb_TPC.C:118
 ConfigPhiPPb_TPC.C:119
 ConfigPhiPPb_TPC.C:120
 ConfigPhiPPb_TPC.C:121
 ConfigPhiPPb_TPC.C:122
 ConfigPhiPPb_TPC.C:123
 ConfigPhiPPb_TPC.C:124
 ConfigPhiPPb_TPC.C:125
 ConfigPhiPPb_TPC.C:126
 ConfigPhiPPb_TPC.C:127
 ConfigPhiPPb_TPC.C:128
 ConfigPhiPPb_TPC.C:129
 ConfigPhiPPb_TPC.C:130
 ConfigPhiPPb_TPC.C:131
 ConfigPhiPPb_TPC.C:132
 ConfigPhiPPb_TPC.C:133
 ConfigPhiPPb_TPC.C:134
 ConfigPhiPPb_TPC.C:135
 ConfigPhiPPb_TPC.C:136
 ConfigPhiPPb_TPC.C:137
 ConfigPhiPPb_TPC.C:138
 ConfigPhiPPb_TPC.C:139
 ConfigPhiPPb_TPC.C:140
 ConfigPhiPPb_TPC.C:141
 ConfigPhiPPb_TPC.C:142
 ConfigPhiPPb_TPC.C:143
 ConfigPhiPPb_TPC.C:144
 ConfigPhiPPb_TPC.C:145
 ConfigPhiPPb_TPC.C:146
 ConfigPhiPPb_TPC.C:147
 ConfigPhiPPb_TPC.C:148
 ConfigPhiPPb_TPC.C:149
 ConfigPhiPPb_TPC.C:150
 ConfigPhiPPb_TPC.C:151
 ConfigPhiPPb_TPC.C:152
 ConfigPhiPPb_TPC.C:153
 ConfigPhiPPb_TPC.C:154
 ConfigPhiPPb_TPC.C:155
 ConfigPhiPPb_TPC.C:156
 ConfigPhiPPb_TPC.C:157
 ConfigPhiPPb_TPC.C:158
 ConfigPhiPPb_TPC.C:159
 ConfigPhiPPb_TPC.C:160
 ConfigPhiPPb_TPC.C:161
 ConfigPhiPPb_TPC.C:162
 ConfigPhiPPb_TPC.C:163
 ConfigPhiPPb_TPC.C:164
 ConfigPhiPPb_TPC.C:165
 ConfigPhiPPb_TPC.C:166
 ConfigPhiPPb_TPC.C:167
 ConfigPhiPPb_TPC.C:168
 ConfigPhiPPb_TPC.C:169
 ConfigPhiPPb_TPC.C:170
 ConfigPhiPPb_TPC.C:171
 ConfigPhiPPb_TPC.C:172
 ConfigPhiPPb_TPC.C:173
 ConfigPhiPPb_TPC.C:174
 ConfigPhiPPb_TPC.C:175
 ConfigPhiPPb_TPC.C:176
 ConfigPhiPPb_TPC.C:177
 ConfigPhiPPb_TPC.C:178
 ConfigPhiPPb_TPC.C:179
 ConfigPhiPPb_TPC.C:180
 ConfigPhiPPb_TPC.C:181
 ConfigPhiPPb_TPC.C:182
 ConfigPhiPPb_TPC.C:183
 ConfigPhiPPb_TPC.C:184
 ConfigPhiPPb_TPC.C:185
 ConfigPhiPPb_TPC.C:186
 ConfigPhiPPb_TPC.C:187
 ConfigPhiPPb_TPC.C:188
 ConfigPhiPPb_TPC.C:189
 ConfigPhiPPb_TPC.C:190
 ConfigPhiPPb_TPC.C:191
 ConfigPhiPPb_TPC.C:192
 ConfigPhiPPb_TPC.C:193
 ConfigPhiPPb_TPC.C:194
 ConfigPhiPPb_TPC.C:195
 ConfigPhiPPb_TPC.C:196
 ConfigPhiPPb_TPC.C:197
 ConfigPhiPPb_TPC.C:198
 ConfigPhiPPb_TPC.C:199
 ConfigPhiPPb_TPC.C:200
 ConfigPhiPPb_TPC.C:201
 ConfigPhiPPb_TPC.C:202
 ConfigPhiPPb_TPC.C:203
 ConfigPhiPPb_TPC.C:204
 ConfigPhiPPb_TPC.C:205
 ConfigPhiPPb_TPC.C:206
 ConfigPhiPPb_TPC.C:207
 ConfigPhiPPb_TPC.C:208
 ConfigPhiPPb_TPC.C:209
 ConfigPhiPPb_TPC.C:210
 ConfigPhiPPb_TPC.C:211
 ConfigPhiPPb_TPC.C:212
 ConfigPhiPPb_TPC.C:213
 ConfigPhiPPb_TPC.C:214
 ConfigPhiPPb_TPC.C:215
 ConfigPhiPPb_TPC.C:216
 ConfigPhiPPb_TPC.C:217
 ConfigPhiPPb_TPC.C:218
 ConfigPhiPPb_TPC.C:219
 ConfigPhiPPb_TPC.C:220
 ConfigPhiPPb_TPC.C:221
 ConfigPhiPPb_TPC.C:222