ROOT logo
void SetupTrackCutsDieleFilter(AliDielectron *diele, Bool_t isAOD);
void SetupPairCutsDieleFilter(AliDielectron *diele, Bool_t isAOD);
void SetupEventCutsDieleFilter(AliDielectron *diele, Int_t cutDefinition);

void InitHistogramsDieleFilter(AliDielectron *diele);

AliESDtrackCuts *SetupESDtrackCutsDieleFilter();


AliDielectron* ConfigJpsi2eeFilter(Bool_t isAOD=kFALSE)
{
  //
  // Setup the instance of AliDielectron
  //

  // create the actual framework object
  TString name="trackQ+Pt>0.6+60<dEdx<100";
  AliDielectron *diele = new AliDielectron(Form("%s",name.Data()),
                             Form("Track cuts: %s",name.Data()));
  
  // cut setup
  SetupEventCutsDieleFilter(diele);
  
  SetupTrackCutsDieleFilter(diele, isAOD);
  SetupPairCutsDieleFilter(diele, isAOD);
  
  //
  // QA histogram setup
  //
  InitHistogramsDieleFilter(diele, isAOD);
  
  return diele;
}

//______________________________________________________________________________________
void SetupEventCutsDieleFilter(AliDielectron *diele)
{
  //
  // Setup the event cuts
  //
  AliDielectronVarCuts *vtxZ = new AliDielectronVarCuts("vtxZ","Vertex z cut");
  vtxZ->AddCut(AliDielectronVarManager::kZvPrim,-15.,15.);
  diele->GetEventFilter().AddCuts(vtxZ);
}

//______________________________________________________________________________________
void SetupTrackCutsDieleFilter(AliDielectron *diele, Bool_t isAOD)
{
  //
  // Setup the track cuts
  //
  
  //ESD quality cuts DielectronTrackCuts
  if (!isAOD) {
    diele->GetTrackFilter().AddCuts(SetupESDtrackCutsDieleFilter());
  } else {
    AliDielectronTrackCuts *trackCuts=new AliDielectronTrackCuts("trackCuts","trackCuts");
    trackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
    trackCuts->SetRequireTPCRefit(kTRUE);
    trackCuts->SetRequireITSRefit(kTRUE);
    diele->GetTrackFilter().AddCuts(trackCuts);
  }
  
  //Pt cut
  AliDielectronVarCuts *pt = new AliDielectronVarCuts("Pt>.5+60<dEdx<100","Pt>.6 && 60<dEdx<100");
  // pt > 0.7GeV
  pt->AddCut(AliDielectronVarManager::kPt,.7,1e30);
  pt->AddCut(AliDielectronVarManager::kTPCsignal,60.,100.);

  if (isAOD){
      // TPC #clusteres cut
    pt->AddCut(AliDielectronVarManager::kNclsTPC,90.,160.);
//     pt->AddCut(AliDielectronVarManager::kEta,-0.88,0.88);
    //TODO: DCA cuts to be investigated!!!
//     pt->AddCut(AliDielectronVarManager::kImpactParXY,-1.,1.);
//     pt->AddCut(AliDielectronVarManager::kImpactParZ,-3.,3.);
  }
  diele->GetTrackFilter().AddCuts(pt);

  // PID cuts ---------------------------------------------------
  AliDielectronPID *pid = new AliDielectronPID("PID","TPC nSigma |e|<3. + |Pi|>3 + |P|>3");
  pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,3);
  pid->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3.,3.,0,0,kTRUE);
  pid->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-3.,3.,0,0,kTRUE);
  
  diele->GetTrackFilter().AddCuts(pid);
}

//______________________________________________________________________________________
void SetupPairCutsDieleFilter(AliDielectron *diele, Bool_t isAOD)
{
  //
  // Setup the pair cuts
  //
  //Invarian mass selection
  AliDielectronVarCuts *invMassCut=new AliDielectronVarCuts("InvMass","2<M<4");
  // Minv > 1.8
  invMassCut->AddCut(AliDielectronVarManager::kM,1.8,1e30);
//invMassCut->AddCut(AliDielectronVarManager::kPairType,1.);
  // ptJpsi > 1GeV
  invMassCut->AddCut(AliDielectronVarManager::kPt,1.,1e30);
  diele->GetPairFilter().AddCuts(invMassCut);

}

//______________________________________________________________________________________
AliESDtrackCuts *SetupESDtrackCutsDieleFilter()
{
  //
  // Setup default AliESDtrackCuts
  //
  AliESDtrackCuts *esdTrackCuts = new AliESDtrackCuts;
  
  esdTrackCuts->SetMaxDCAToVertexZ(3.0);
  esdTrackCuts->SetMaxDCAToVertexXY(1.0); 
  esdTrackCuts->SetRequireTPCRefit(kTRUE);
  esdTrackCuts->SetRequireITSRefit(kTRUE);
  esdTrackCuts->SetAcceptKinkDaughters(kFALSE);
  esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
 
  esdTrackCuts->SetMinNClustersTPC(70);
  esdTrackCuts->SetMaxChi2PerClusterTPC(4);

  return esdTrackCuts;
}


//______________________________________________________________________________________
void InitHistogramsDieleFilter(AliDielectron *diele, Bool_t isAOD)
{
  //
  // Initialise the histograms
  //
  
//Setup histogram classes
  AliDielectronHistos *histos=
    new AliDielectronHistos(diele->GetName(),
                            diele->GetTitle());
  
  //Initialise histogram classes
  histos->SetReservedWords("Track;Pair");

  histos->AddClass("Event");
  //Track classes
  //to fill also track info from 2nd event loop until 2
  for (Int_t i=0; i<2; ++i){
    histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
  }
  
  //Pair classes
  // to fill also mixed event histograms loop until 10
  for (Int_t i=0; i<3; ++i){
    histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(i)));
  }

  //add histograms to event class
  histos->UserHistogram("Event","VtxZ","Vertex Z;Z[cm]",300,-15.,15.,AliDielectronVarManager::kZvPrim);
  
  //add histograms to Track classes
  histos->UserHistogram("Track","Pt","Pt;Pt [GeV];#tracks",400,0,20.,AliDielectronVarManager::kPt);
  histos->UserHistogram("Track","TPCnCls","Number of Clusters TPC;TPC number clusteres;#tracks",160,-0.5,159.5,AliDielectronVarManager::kNclsTPC);
  
  histos->UserHistogram("Track","dXY","dXY;dXY [cm];#tracks",500,-1.,1.,AliDielectronVarManager::kImpactParXY);
  histos->UserHistogram("Track","dZ","dZ;dZ [cm];#tracks",600,-3.,3.,AliDielectronVarManager::kImpactParZ);
  histos->UserHistogram("Track","Eta_Phi","Eta Phi Map; Eta; Phi;#tracks",
                        100,-1,1,144,0,6.285,AliDielectronVarManager::kEta,AliDielectronVarManager::kPhi);
  
  histos->UserHistogram("Track","dEdx_P","dEdx;P [GeV];TPC signal (arb units);#tracks",
                        200,0.2,20.,100,0.,200.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE);
  histos->UserHistogram("Track","TPCnSigmaEle_P","TPC number of sigmas Electrons;P [GeV];TPC number of sigmas Electrons;#tracks",
                        200,0.2,20.,100,-10.,10.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
  
  //add histograms to Pair classes
  histos->UserHistogram("Pair","InvMass","Inv.Mass;Inv. Mass [GeV];#pairs",
                        201,-.01,4.01,AliDielectronVarManager::kM);
  histos->UserHistogram("Pair","Rapidity","Rapidity;Rapidity;#pairs",
                        100,-1.,1.,AliDielectronVarManager::kY);
  histos->UserHistogram("Pair","OpeningAngle","Opening angle;angle",
                        100,0.,3.15,AliDielectronVarManager::kOpeningAngle);
  
  diele->SetHistogramManager(histos);
}
 ConfigJpsi2eeFilter.C:1
 ConfigJpsi2eeFilter.C:2
 ConfigJpsi2eeFilter.C:3
 ConfigJpsi2eeFilter.C:4
 ConfigJpsi2eeFilter.C:5
 ConfigJpsi2eeFilter.C:6
 ConfigJpsi2eeFilter.C:7
 ConfigJpsi2eeFilter.C:8
 ConfigJpsi2eeFilter.C:9
 ConfigJpsi2eeFilter.C:10
 ConfigJpsi2eeFilter.C:11
 ConfigJpsi2eeFilter.C:12
 ConfigJpsi2eeFilter.C:13
 ConfigJpsi2eeFilter.C:14
 ConfigJpsi2eeFilter.C:15
 ConfigJpsi2eeFilter.C:16
 ConfigJpsi2eeFilter.C:17
 ConfigJpsi2eeFilter.C:18
 ConfigJpsi2eeFilter.C:19
 ConfigJpsi2eeFilter.C:20
 ConfigJpsi2eeFilter.C:21
 ConfigJpsi2eeFilter.C:22
 ConfigJpsi2eeFilter.C:23
 ConfigJpsi2eeFilter.C:24
 ConfigJpsi2eeFilter.C:25
 ConfigJpsi2eeFilter.C:26
 ConfigJpsi2eeFilter.C:27
 ConfigJpsi2eeFilter.C:28
 ConfigJpsi2eeFilter.C:29
 ConfigJpsi2eeFilter.C:30
 ConfigJpsi2eeFilter.C:31
 ConfigJpsi2eeFilter.C:32
 ConfigJpsi2eeFilter.C:33
 ConfigJpsi2eeFilter.C:34
 ConfigJpsi2eeFilter.C:35
 ConfigJpsi2eeFilter.C:36
 ConfigJpsi2eeFilter.C:37
 ConfigJpsi2eeFilter.C:38
 ConfigJpsi2eeFilter.C:39
 ConfigJpsi2eeFilter.C:40
 ConfigJpsi2eeFilter.C:41
 ConfigJpsi2eeFilter.C:42
 ConfigJpsi2eeFilter.C:43
 ConfigJpsi2eeFilter.C:44
 ConfigJpsi2eeFilter.C:45
 ConfigJpsi2eeFilter.C:46
 ConfigJpsi2eeFilter.C:47
 ConfigJpsi2eeFilter.C:48
 ConfigJpsi2eeFilter.C:49
 ConfigJpsi2eeFilter.C:50
 ConfigJpsi2eeFilter.C:51
 ConfigJpsi2eeFilter.C:52
 ConfigJpsi2eeFilter.C:53
 ConfigJpsi2eeFilter.C:54
 ConfigJpsi2eeFilter.C:55
 ConfigJpsi2eeFilter.C:56
 ConfigJpsi2eeFilter.C:57
 ConfigJpsi2eeFilter.C:58
 ConfigJpsi2eeFilter.C:59
 ConfigJpsi2eeFilter.C:60
 ConfigJpsi2eeFilter.C:61
 ConfigJpsi2eeFilter.C:62
 ConfigJpsi2eeFilter.C:63
 ConfigJpsi2eeFilter.C:64
 ConfigJpsi2eeFilter.C:65
 ConfigJpsi2eeFilter.C:66
 ConfigJpsi2eeFilter.C:67
 ConfigJpsi2eeFilter.C:68
 ConfigJpsi2eeFilter.C:69
 ConfigJpsi2eeFilter.C:70
 ConfigJpsi2eeFilter.C:71
 ConfigJpsi2eeFilter.C:72
 ConfigJpsi2eeFilter.C:73
 ConfigJpsi2eeFilter.C:74
 ConfigJpsi2eeFilter.C:75
 ConfigJpsi2eeFilter.C:76
 ConfigJpsi2eeFilter.C:77
 ConfigJpsi2eeFilter.C:78
 ConfigJpsi2eeFilter.C:79
 ConfigJpsi2eeFilter.C:80
 ConfigJpsi2eeFilter.C:81
 ConfigJpsi2eeFilter.C:82
 ConfigJpsi2eeFilter.C:83
 ConfigJpsi2eeFilter.C:84
 ConfigJpsi2eeFilter.C:85
 ConfigJpsi2eeFilter.C:86
 ConfigJpsi2eeFilter.C:87
 ConfigJpsi2eeFilter.C:88
 ConfigJpsi2eeFilter.C:89
 ConfigJpsi2eeFilter.C:90
 ConfigJpsi2eeFilter.C:91
 ConfigJpsi2eeFilter.C:92
 ConfigJpsi2eeFilter.C:93
 ConfigJpsi2eeFilter.C:94
 ConfigJpsi2eeFilter.C:95
 ConfigJpsi2eeFilter.C:96
 ConfigJpsi2eeFilter.C:97
 ConfigJpsi2eeFilter.C:98
 ConfigJpsi2eeFilter.C:99
 ConfigJpsi2eeFilter.C:100
 ConfigJpsi2eeFilter.C:101
 ConfigJpsi2eeFilter.C:102
 ConfigJpsi2eeFilter.C:103
 ConfigJpsi2eeFilter.C:104
 ConfigJpsi2eeFilter.C:105
 ConfigJpsi2eeFilter.C:106
 ConfigJpsi2eeFilter.C:107
 ConfigJpsi2eeFilter.C:108
 ConfigJpsi2eeFilter.C:109
 ConfigJpsi2eeFilter.C:110
 ConfigJpsi2eeFilter.C:111
 ConfigJpsi2eeFilter.C:112
 ConfigJpsi2eeFilter.C:113
 ConfigJpsi2eeFilter.C:114
 ConfigJpsi2eeFilter.C:115
 ConfigJpsi2eeFilter.C:116
 ConfigJpsi2eeFilter.C:117
 ConfigJpsi2eeFilter.C:118
 ConfigJpsi2eeFilter.C:119
 ConfigJpsi2eeFilter.C:120
 ConfigJpsi2eeFilter.C:121
 ConfigJpsi2eeFilter.C:122
 ConfigJpsi2eeFilter.C:123
 ConfigJpsi2eeFilter.C:124
 ConfigJpsi2eeFilter.C:125
 ConfigJpsi2eeFilter.C:126
 ConfigJpsi2eeFilter.C:127
 ConfigJpsi2eeFilter.C:128
 ConfigJpsi2eeFilter.C:129
 ConfigJpsi2eeFilter.C:130
 ConfigJpsi2eeFilter.C:131
 ConfigJpsi2eeFilter.C:132
 ConfigJpsi2eeFilter.C:133
 ConfigJpsi2eeFilter.C:134
 ConfigJpsi2eeFilter.C:135
 ConfigJpsi2eeFilter.C:136
 ConfigJpsi2eeFilter.C:137
 ConfigJpsi2eeFilter.C:138
 ConfigJpsi2eeFilter.C:139
 ConfigJpsi2eeFilter.C:140
 ConfigJpsi2eeFilter.C:141
 ConfigJpsi2eeFilter.C:142
 ConfigJpsi2eeFilter.C:143
 ConfigJpsi2eeFilter.C:144
 ConfigJpsi2eeFilter.C:145
 ConfigJpsi2eeFilter.C:146
 ConfigJpsi2eeFilter.C:147
 ConfigJpsi2eeFilter.C:148
 ConfigJpsi2eeFilter.C:149
 ConfigJpsi2eeFilter.C:150
 ConfigJpsi2eeFilter.C:151
 ConfigJpsi2eeFilter.C:152
 ConfigJpsi2eeFilter.C:153
 ConfigJpsi2eeFilter.C:154
 ConfigJpsi2eeFilter.C:155
 ConfigJpsi2eeFilter.C:156
 ConfigJpsi2eeFilter.C:157
 ConfigJpsi2eeFilter.C:158
 ConfigJpsi2eeFilter.C:159
 ConfigJpsi2eeFilter.C:160
 ConfigJpsi2eeFilter.C:161
 ConfigJpsi2eeFilter.C:162
 ConfigJpsi2eeFilter.C:163
 ConfigJpsi2eeFilter.C:164
 ConfigJpsi2eeFilter.C:165
 ConfigJpsi2eeFilter.C:166
 ConfigJpsi2eeFilter.C:167
 ConfigJpsi2eeFilter.C:168
 ConfigJpsi2eeFilter.C:169
 ConfigJpsi2eeFilter.C:170
 ConfigJpsi2eeFilter.C:171
 ConfigJpsi2eeFilter.C:172
 ConfigJpsi2eeFilter.C:173
 ConfigJpsi2eeFilter.C:174
 ConfigJpsi2eeFilter.C:175
 ConfigJpsi2eeFilter.C:176
 ConfigJpsi2eeFilter.C:177
 ConfigJpsi2eeFilter.C:178
 ConfigJpsi2eeFilter.C:179
 ConfigJpsi2eeFilter.C:180
 ConfigJpsi2eeFilter.C:181
 ConfigJpsi2eeFilter.C:182
 ConfigJpsi2eeFilter.C:183