ROOT logo
/**************************************************************************
* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
*                                                                        *
* Author: The ALICE Off-line Project.                                    *
* Contributors are mentioned in the code where appropriate.              *
*                                                                        *
* Permission to use, copy, modify and distribute this software and its   *
* documentation strictly for non-commercial purposes is hereby granted   *
* without fee, provided that the above copyright notice appears in all   *
* copies and that both the copyright notice and this permission notice   *
* appear in the supporting documentation. The authors make no claims     *
* about the suitability of this software for any purpose. It is          *
* provided "as is" without express or implied warranty.                  *
**************************************************************************/

#include <iostream>
#include <TList.h>
#include <TAxis.h>
#include <THnSparse.h>

#include "AliLog.h"
#include "AliESDtrack.h"
#include "AliExternalTrackParam.h"
#include "TParticle.h"

#include "AlidNdPtBackgroundCuts.h"

using namespace std;

ClassImp(AlidNdPtBackgroundCuts)

//_____________________________________________________________________________
AlidNdPtBackgroundCuts::AlidNdPtBackgroundCuts(const Char_t* name,const Char_t *title) : 
AliAnalysisCuts(name, title)
, fMinEta(0)
, fMaxEta(0)
, fMinPhi(0)
, fMaxPhi(0)
, fMinPt(0)
, fMaxPt(0)
, fMaxFracSharedClust(0)
, fFillControlHisto(kFALSE)
, fControlHisto(0)
{
  // default constructor 
  
  // init data members with defaults
  Init();
}

//_____________________________________________________________________________
AlidNdPtBackgroundCuts::~AlidNdPtBackgroundCuts()  
{
  // destructor
  if(fControlHisto) delete fControlHisto;
}

//_____________________________________________________________________________
void AlidNdPtBackgroundCuts::Init()  
{
  // set default values
  SetEtaWindow();
  SetPhiWindow();
  SetPtWindow();
  SetMaxFracSharedClust();

  const Int_t ptNbins = 56;
  Double_t binsPt[ptNbins+1] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,2.8,3.0,3.2,3.4,3.6,3.8,4.0,4.5,5.0,5.5,6.0,6.5,7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0};

  //etasum:dphi:dpt:eta1:eta2:pt1:fracSharedClust1:qsum
  Int_t binsControlHisto[8]=  { 201,  401,              101,  30,   30,  ptNbins, 101, 3 };
  Double_t minControlHisto[8]={-3.0, -2.*TMath::Pi(),  -10,  -1.5, -1.5, 0.,      0.,  0.}; 
  Double_t maxControlHisto[8]={ 3.0,  2.*TMath::Pi(),   10,   1.5,  1.5, 16.,     1.,  3.}; 
  
  fControlHisto = new THnSparseF("fControlHisto","etasum:dphi:dpt:eta1:eta2:pt1:fracSharedClust1:qsum",8,binsControlHisto,minControlHisto,maxControlHisto);
  fControlHisto->SetBinEdges(5,binsPt);
  fControlHisto->GetAxis(0)->SetTitle("#eta1+#eta2");
  fControlHisto->GetAxis(1)->SetTitle("#phi1-#phi2 (rad)");
  fControlHisto->GetAxis(2)->SetTitle("pt1-pt2 (GeV/c)");
  fControlHisto->GetAxis(3)->SetTitle("#eta1");
  fControlHisto->GetAxis(4)->SetTitle("#eta2");
  fControlHisto->GetAxis(5)->SetTitle("pt1 (GeV/c)");
  fControlHisto->GetAxis(6)->SetTitle("fracSharedClust1");
  fControlHisto->GetAxis(7)->SetTitle("q1+q2");
  fControlHisto->Sumw2();
}

//_____________________________________________________________________________
Bool_t AlidNdPtBackgroundCuts::IsBackgroundTrack(AliESDtrack *track1, AliESDtrack *track2)
{
  // 
  // check whether track is cosmic or splitted one
  //
  if(!track1) return kFALSE;
  if(!track2) return kFALSE;
  const AliExternalTrackParam *tpcTrack1 =  track1->GetTPCInnerParam();
  const AliExternalTrackParam *tpcTrack2 =  track2->GetTPCInnerParam();
  if(!tpcTrack1) return kFALSE;
  if(!tpcTrack2) return kFALSE;

  if( IsHistogramsOn() ) 
  {
    Float_t etasum = tpcTrack1->Eta() + tpcTrack2->Eta();
    Float_t dphi   = tpcTrack1->Phi() - tpcTrack2->Phi();
    Float_t dpt    = tpcTrack1->Pt()  - tpcTrack2->Pt();
    Float_t pt1    = tpcTrack1->Pt();
    Float_t qsum   = track1->Charge() + track2->Charge();
    if(qsum == -2) qsum = 1;

    Float_t nclust1 =  track1->GetTPCNclsIter1() ; // first tracking pass
    Float_t nclust2 =  track2->GetTPCNclsIter1() ; // first tracking pass
    Float_t fracSharedClust1 = 0.0;
    if(nclust1) fracSharedClust1 = track1->GetTPCnclsS()/Float_t(nclust1); 
  
    //Float_t dsphi = (tpcTrack1->GetSnp()-tpcTrack2->GetSnp()) / TMath::Sqrt(tpcTrack1->GetSigmaSnp2()+tpcTrack2->GetSigmaSnp2());    
    //Float_t dtanl = (tpcTrack1->GetTgl()-tpcTrack2->GetTgl()) / TMath::Sqrt(tpcTrack1->GetSigmaTgl2()+tpcTrack2->GetSigmaTgl2());
    //Float_t dsphi = tpcTrack1->GetSnp()-tpcTrack2->GetSnp();
    //Float_t dtanl = tpcTrack1->GetTgl()-tpcTrack2->GetTgl();
    //


    /*
    printf("tpcTrack1->GetSnp() %e, track1->Pt() %f, track1->Theta() %f, track1->Eta() %f, track1->Phi() %f, track1->Charge() %d  \n", tpcTrack1->GetSnp(), track1->Pt(), track1->Theta(), track1->Eta(), track1->Phi(), track1->Charge());

    printf("tpcTrack2->GetSnp() %e, track2->Pt() %f, track2->Theta() %f, track2->Eta() %f, track2->Phi() %f, track2->Charge() %d  \n", tpcTrack2->GetSnp(), track2->Pt(), track2->Theta(), track2->Eta(), track2->Phi(), track2->Charge());
    */

    Double_t vControlHisto[8] = {etasum, dphi, dpt, tpcTrack1->Eta(), tpcTrack2->Eta(), pt1, fracSharedClust1,qsum};
    if(nclust1 > 70 && nclust2 > 70)
       fControlHisto->Fill(vControlHisto);
  }

  if ( IsCosmicTrack(track1,track2) || IsSplittedTrack(track1,track2) ) return kTRUE;
  else return kFALSE;

return kFALSE;
}

//_____________________________________________________________________________
Bool_t AlidNdPtBackgroundCuts::IsCosmicTrack(AliESDtrack *track1, AliESDtrack *track2)
{
  // 
  // check whether track is cosmic
  //
  if(!track1) return kFALSE;
  if(!track2) return kFALSE;
  const AliExternalTrackParam *tpcTrack1 =  track1->GetTPCInnerParam();
  const AliExternalTrackParam *tpcTrack2 =  track2->GetTPCInnerParam();
  if(!tpcTrack1) return kFALSE;
  if(!tpcTrack2) return kFALSE;

 /*
  Float_t etasum = tpcTrack1->Eta() + tpcTrack2->Eta();
  Float_t dphi = tpcTrack1->Phi() - tpcTrack2->Phi();
  Float_t dpt  = tpcTrack1->Pt()  - tpcTrack2->Pt();
  Float_t pt1  = tpcTrack1->Pt();
  */
  Float_t qsum = track1->Charge() + track2->Charge();

  Float_t nclust =  track1->GetTPCNclsIter1() ; // first tracking pass
  Float_t fracSharedClust = 0.0;
  if(nclust) fracSharedClust = track1->GetTPCnclsS()/Float_t(nclust); 

  if( qsum != 0) return kFALSE;

return kFALSE;
}

//_____________________________________________________________________________
Bool_t AlidNdPtBackgroundCuts::IsSplittedTrack(AliESDtrack *track1, AliESDtrack *track2)
{
  // 
  // check whether track is splitted
  //
  if(!track1) return kFALSE;
  if(!track2) return kFALSE;
  const AliExternalTrackParam *tpcTrack1 =  track1->GetTPCInnerParam();
  const AliExternalTrackParam *tpcTrack2 =  track2->GetTPCInnerParam();
  if(!tpcTrack1) return kFALSE;
  if(!tpcTrack2) return kFALSE;

  /*
  Float_t etasum = tpcTrack1->Eta() + tpcTrack2->Eta();
  Float_t dphi = tpcTrack1->Phi() - tpcTrack2->Phi();
  Float_t dpt  = tpcTrack1->Pt()  - tpcTrack2->Pt();
  Float_t pt1  = tpcTrack1->Pt();
  Float_t qsum = track1->Charge() + track2->Charge();

  Float_t nclust =  track1->GetTPCNclsIter1() ; // first tracking pass
  Float_t fracSharedClust = 0.0;
  if(nclust) fracSharedClust = track1->GetTPCnclsS()/Float_t(nclust); 
  */

return kFALSE;
}



//_____________________________________________________________________________
Long64_t AlidNdPtBackgroundCuts::Merge(TCollection* list) 
{
  // Merge list of objects (needed by PROOF)
  if (!list)
  return 0;

  if (list->IsEmpty())
  return 1;

  TIterator* iter = list->MakeIterator();
  TObject* obj = 0;

  Int_t count=0;
  while((obj = iter->Next()) != 0) 
  {
    AlidNdPtBackgroundCuts* entry = dynamic_cast<AlidNdPtBackgroundCuts*>(obj);
    if (entry == 0)  
      continue; 
  
    fControlHisto->Add(entry->fControlHisto);

  count++;
  }

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