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 "AliLog.h"
#include "AliESDEvent.h"
#include "AliESDVertex.h"
#include "AliMCEvent.h"
#include "AliHeader.h"
#include "AliGenEventHeader.h"

#include "AlidNdPtEventCuts.h"

using namespace std;

ClassImp(AlidNdPtEventCuts)

//_____________________________________________________________________________
AlidNdPtEventCuts::AlidNdPtEventCuts(const Char_t* name,const Char_t *title) : 
AliAnalysisCuts(name, title)
, fTriggerRequired(kTRUE)
, fRecVertexRequired(kTRUE)
, fEventProcessType(AliPWG0Helper::kInvalidProcess)
, fMinNContributors(0)
, fMaxNContributors(0)
, fMaxR(0)
, fMinZv(0)
, fMaxZv(0)
, fMeanXv(0)
, fMeanYv(0)
, fMeanZv(0)
, fSigmaMeanXv(0)
, fSigmaMeanYv(0)
, fSigmaMeanZv(0)
, fRedoTPCVertex(kTRUE)
, fUseBeamSpotConstraint(kTRUE)
, fEventSelectedRequired(kFALSE)
{
  // default constructor 
  
  // init data members with defaults
  Init();
}

//_____________________________________________________________________________
AlidNdPtEventCuts::~AlidNdPtEventCuts()  
{
  // destructor
}

//_____________________________________________________________________________
void AlidNdPtEventCuts::Init()  
{
  // set default values
  SetTriggerRequired();
  SetRecVertexRequired();
  SetEventProcessType();
  SetNContributorsRange();
  SetMaxR();
  SetZvRange();
  SetMeanXYZv();
  SetSigmaMeanXYZv();
  SetRedoTPCVertex();
  SetUseBeamSpotConstraint();
}

//_____________________________________________________________________________
Bool_t AlidNdPtEventCuts::AcceptEvent(AliESDEvent *esdEvent,AliMCEvent *mcEvent, const AliESDVertex *vtx)
{
  // Check event selection cuts
  Bool_t retValue=kTRUE;

  if(!esdEvent) return kFALSE;
  if(!IsRecVertexRequired()) return kTRUE;
  if(!vtx) return kFALSE;
  if(!vtx->GetStatus()) return kFALSE;

  if(mcEvent) {
   // check MC event conditions
   AliHeader* header = mcEvent->Header();
   if(!header) return kFALSE;
  
    // select event type (ND-non diffractive, SD-single diffractive, DD-double diffractive)
    if(fEventProcessType == AliPWG0Helper::kInvalidProcess) { 
      retValue=kTRUE;
    } 
    else if(fEventProcessType == AliPWG0Helper::kSD || fEventProcessType == AliPWG0Helper::kDD) {
      AliPWG0Helper::MCProcessType processType = AliPWG0Helper::GetEventProcessType(header);
      if(processType == AliPWG0Helper::kND) retValue=kFALSE;
      else retValue=kTRUE;
    }
    else if(fEventProcessType == AliPWG0Helper::GetEventProcessType(header)) { 
      retValue=kTRUE;
    }
    else 
      retValue=kFALSE;
  }

  if(vtx->GetZ() < fMinZv) return kFALSE; 
  if(vtx->GetZ() > fMaxZv) return kFALSE; 

return retValue;  
}

//_____________________________________________________________________________
Bool_t AlidNdPtEventCuts::AcceptMCEvent(AliMCEvent *mcEvent)
{
  // Check event selection cuts
  if(!mcEvent) return kFALSE;

  Bool_t retValue=kTRUE;

  // check MC event conditions
  AliHeader* header = mcEvent->Header();
  if(!header) return kFALSE;

  AliGenEventHeader* genHeader = header->GenEventHeader();
  if (!genHeader) {
    AliDebug(AliLog::kError, "Could not retrieve genHeader from Header");
    return kFALSE;
  }
  TArrayF vtxMC(3);
  genHeader->PrimaryVertex(vtxMC);
  
  // select event type (ND-non diffractive, SD-single diffractive, DD-double diffractive)
  if(fEventProcessType == AliPWG0Helper::kInvalidProcess) { 
     retValue=kTRUE;
  } else {
     if(fEventProcessType == AliPWG0Helper::GetEventProcessType(header)) retValue=kTRUE;
     else retValue=kFALSE;
  }

  /*
  Float_t R = TMath::Sqrt(vtxMC[0]*vtxMC[0]+vtxMC[1]*vtxMC[1]);
  if(R > fMaxR) return kFALSE; 
  */

  if(vtxMC[2] < fMinZv) return kFALSE; 
  if(vtxMC[2] > fMaxZv) return kFALSE; 

return retValue;  
}

//_____________________________________________________________________________
Long64_t AlidNdPtEventCuts::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) 
  {
    AlidNdPtEventCuts* entry = dynamic_cast<AlidNdPtEventCuts*>(obj);
    if (entry == 0)  
      continue; 

  count++;
  }

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