ROOT logo
////////////////////////////////////////////////////////////////////////////////
//                                                                            //
// AliFemtoQAEventCut - the basic cut to check QA for event cuts.             //
// Only cuts on event multiplicity and z-vertex position                      //
//                                                                            //
////////////////////////////////////////////////////////////////////////////////

#include "AliFemtoQAEventCut.h"
//#include <cstdio>

#ifdef __ROOT__
ClassImp(AliFemtoQAEventCut)
#endif

AliFemtoQAEventCut::AliFemtoQAEventCut() :
  AliFemtoEventCut(),
  fEventMult(),
  fVertZPos(),
  fAcceptBadVertex(false), 
  fNEventsPassed(0), 
  fNEventsFailed(0),
  fHighOrLowSwitch(0), 
  fEventMultQASwitch(kFALSE), 
  fEventZPosQASwitch(kFALSE)
{
  // Default constructor
  fEventMult[0] = 0;
  fEventMult[1] = 100000;
  fVertZPos[0] = -100.0;
  fVertZPos[1] = 100.0;
  
  fHighOrLowSwitch = 1;
  fEventMultQASwitch = false;
  fEventZPosQASwitch = false;
  fEventMultQAExclusionZone[0] = 0;
  fEventMultQAExclusionZone[1] = 100000;
  fEventZPosQAExclusionZone[0] = -100.0;
  fEventZPosQAExclusionZone[1] = 100.0;

} 
//------------------------------
AliFemtoQAEventCut::~AliFemtoQAEventCut(){
  // Default destructor
}
//------------------------------
AliFemtoQAEventCut& AliFemtoQAEventCut::operator=(AliFemtoQAEventCut& c)
{
  if (this != &c) {
    fEventMult[0] = c.fEventMult[0];
    fEventMult[1] = c.fEventMult[1];
    fVertZPos[0] = c.fVertZPos[0];
    fVertZPos[1] = c.fVertZPos[1];
    
    fHighOrLowSwitch = c.fHighOrLowSwitch;
    fEventMultQASwitch = c.fEventMultQASwitch;
    fEventZPosQASwitch = c.fEventZPosQASwitch;
    fEventMultQAExclusionZone[0] = c.fEventMultQAExclusionZone[0];
    fEventMultQAExclusionZone[1] = c.fEventMultQAExclusionZone[1];
    fEventZPosQAExclusionZone[0] = c.fEventZPosQAExclusionZone[0];
    fEventZPosQAExclusionZone[1] = c.fEventZPosQAExclusionZone[1];
  }

  return *this;
}
//------------------------------
bool AliFemtoQAEventCut::Pass(const AliFemtoEvent* event){
  // Pass events if they fall within the multiplicity and z-vertex
  // position range. If QA cutting on quantity, pass if outside 
  // exclusion zone between low and high cut values. Fail otherwise.
  int mult =  event->NumberOfTracks();
  double vertexZPos = event->PrimVertPos().z();
  cout << "AliFemtoQAEventCut:: mult:       " << fEventMult[0] << " < " << mult << " < " << fEventMult[1] << endl;
  cout << "AliFemtoQAEventCut:: VertexZPos: " << fVertZPos[0] << " < " << vertexZPos << " < " << fVertZPos[1] << endl;
  
  bool goodEvent;
  
  if (fEventMultQASwitch) {
    goodEvent =
      ( (((mult < fEventMultQAExclusionZone[0]) && (fHighOrLowSwitch > 0))  ||
	 ((mult > fEventMultQAExclusionZone[1]) && (fHighOrLowSwitch < 0))) &&
      (mult > fEventMult[0]) && 
      (mult < fEventMult[1]) && 
      (vertexZPos > fVertZPos[0]) &&
      (vertexZPos < fVertZPos[1]) &&
      (fAcceptBadVertex || (event->PrimVertCov()[4] > -1000.0)));
  }
  else if (fEventZPosQASwitch) {
    goodEvent =
      ((((vertexZPos < fEventZPosQAExclusionZone[0]) && (fHighOrLowSwitch > 0))  ||
	((vertexZPos > fEventZPosQAExclusionZone[1]) && (fHighOrLowSwitch < 0))) &&
      (mult > fEventMult[0]) && 
      (mult < fEventMult[1]) && 
      (vertexZPos > fVertZPos[0]) &&
      (vertexZPos < fVertZPos[1]) &&
      (fAcceptBadVertex || (event->PrimVertCov()[4] > -1000.0)));
  }
  else {
  goodEvent =
    ((mult > fEventMult[0]) && 
     (mult < fEventMult[1]) && 
     (vertexZPos > fVertZPos[0]) &&
     (vertexZPos < fVertZPos[1]) &&
     (fAcceptBadVertex || (event->PrimVertCov()[4] > -1000.0)));
  }
  
  if (goodEvent) fHighOrLowSwitch *= -1;
  goodEvent ? fNEventsPassed++ : fNEventsFailed++ ;
  //cout << "AliFemtoQAEventCut:: return : " << goodEvent << endl;
  return (goodEvent);
}
//------------------------------
AliFemtoString AliFemtoQAEventCut::Report(){
  // Prepare report
  string stemp;
  char ctemp[100];
  snprintf(ctemp , 100, "\nMultiplicity:\t %d-%d",fEventMult[0],fEventMult[1]);
  stemp = ctemp;
  snprintf(ctemp , 100, "\nVertex Z-position:\t %E-%E",fVertZPos[0],fVertZPos[1]);
  stemp += ctemp;
  snprintf(ctemp , 100, "\nNumber of events which passed:\t%ld  Number which failed:\t%ld",fNEventsPassed,fNEventsFailed);
  stemp += ctemp;
  AliFemtoString returnThis = stemp;
  return returnThis;
}
void AliFemtoQAEventCut::SetAcceptBadVertex(bool b)
{
  fAcceptBadVertex = b;
}
bool AliFemtoQAEventCut::GetAcceptBadVertex()
{
  return fAcceptBadVertex;
}
 AliFemtoQAEventCut.cxx:1
 AliFemtoQAEventCut.cxx:2
 AliFemtoQAEventCut.cxx:3
 AliFemtoQAEventCut.cxx:4
 AliFemtoQAEventCut.cxx:5
 AliFemtoQAEventCut.cxx:6
 AliFemtoQAEventCut.cxx:7
 AliFemtoQAEventCut.cxx:8
 AliFemtoQAEventCut.cxx:9
 AliFemtoQAEventCut.cxx:10
 AliFemtoQAEventCut.cxx:11
 AliFemtoQAEventCut.cxx:12
 AliFemtoQAEventCut.cxx:13
 AliFemtoQAEventCut.cxx:14
 AliFemtoQAEventCut.cxx:15
 AliFemtoQAEventCut.cxx:16
 AliFemtoQAEventCut.cxx:17
 AliFemtoQAEventCut.cxx:18
 AliFemtoQAEventCut.cxx:19
 AliFemtoQAEventCut.cxx:20
 AliFemtoQAEventCut.cxx:21
 AliFemtoQAEventCut.cxx:22
 AliFemtoQAEventCut.cxx:23
 AliFemtoQAEventCut.cxx:24
 AliFemtoQAEventCut.cxx:25
 AliFemtoQAEventCut.cxx:26
 AliFemtoQAEventCut.cxx:27
 AliFemtoQAEventCut.cxx:28
 AliFemtoQAEventCut.cxx:29
 AliFemtoQAEventCut.cxx:30
 AliFemtoQAEventCut.cxx:31
 AliFemtoQAEventCut.cxx:32
 AliFemtoQAEventCut.cxx:33
 AliFemtoQAEventCut.cxx:34
 AliFemtoQAEventCut.cxx:35
 AliFemtoQAEventCut.cxx:36
 AliFemtoQAEventCut.cxx:37
 AliFemtoQAEventCut.cxx:38
 AliFemtoQAEventCut.cxx:39
 AliFemtoQAEventCut.cxx:40
 AliFemtoQAEventCut.cxx:41
 AliFemtoQAEventCut.cxx:42
 AliFemtoQAEventCut.cxx:43
 AliFemtoQAEventCut.cxx:44
 AliFemtoQAEventCut.cxx:45
 AliFemtoQAEventCut.cxx:46
 AliFemtoQAEventCut.cxx:47
 AliFemtoQAEventCut.cxx:48
 AliFemtoQAEventCut.cxx:49
 AliFemtoQAEventCut.cxx:50
 AliFemtoQAEventCut.cxx:51
 AliFemtoQAEventCut.cxx:52
 AliFemtoQAEventCut.cxx:53
 AliFemtoQAEventCut.cxx:54
 AliFemtoQAEventCut.cxx:55
 AliFemtoQAEventCut.cxx:56
 AliFemtoQAEventCut.cxx:57
 AliFemtoQAEventCut.cxx:58
 AliFemtoQAEventCut.cxx:59
 AliFemtoQAEventCut.cxx:60
 AliFemtoQAEventCut.cxx:61
 AliFemtoQAEventCut.cxx:62
 AliFemtoQAEventCut.cxx:63
 AliFemtoQAEventCut.cxx:64
 AliFemtoQAEventCut.cxx:65
 AliFemtoQAEventCut.cxx:66
 AliFemtoQAEventCut.cxx:67
 AliFemtoQAEventCut.cxx:68
 AliFemtoQAEventCut.cxx:69
 AliFemtoQAEventCut.cxx:70
 AliFemtoQAEventCut.cxx:71
 AliFemtoQAEventCut.cxx:72
 AliFemtoQAEventCut.cxx:73
 AliFemtoQAEventCut.cxx:74
 AliFemtoQAEventCut.cxx:75
 AliFemtoQAEventCut.cxx:76
 AliFemtoQAEventCut.cxx:77
 AliFemtoQAEventCut.cxx:78
 AliFemtoQAEventCut.cxx:79
 AliFemtoQAEventCut.cxx:80
 AliFemtoQAEventCut.cxx:81
 AliFemtoQAEventCut.cxx:82
 AliFemtoQAEventCut.cxx:83
 AliFemtoQAEventCut.cxx:84
 AliFemtoQAEventCut.cxx:85
 AliFemtoQAEventCut.cxx:86
 AliFemtoQAEventCut.cxx:87
 AliFemtoQAEventCut.cxx:88
 AliFemtoQAEventCut.cxx:89
 AliFemtoQAEventCut.cxx:90
 AliFemtoQAEventCut.cxx:91
 AliFemtoQAEventCut.cxx:92
 AliFemtoQAEventCut.cxx:93
 AliFemtoQAEventCut.cxx:94
 AliFemtoQAEventCut.cxx:95
 AliFemtoQAEventCut.cxx:96
 AliFemtoQAEventCut.cxx:97
 AliFemtoQAEventCut.cxx:98
 AliFemtoQAEventCut.cxx:99
 AliFemtoQAEventCut.cxx:100
 AliFemtoQAEventCut.cxx:101
 AliFemtoQAEventCut.cxx:102
 AliFemtoQAEventCut.cxx:103
 AliFemtoQAEventCut.cxx:104
 AliFemtoQAEventCut.cxx:105
 AliFemtoQAEventCut.cxx:106
 AliFemtoQAEventCut.cxx:107
 AliFemtoQAEventCut.cxx:108
 AliFemtoQAEventCut.cxx:109
 AliFemtoQAEventCut.cxx:110
 AliFemtoQAEventCut.cxx:111
 AliFemtoQAEventCut.cxx:112
 AliFemtoQAEventCut.cxx:113
 AliFemtoQAEventCut.cxx:114
 AliFemtoQAEventCut.cxx:115
 AliFemtoQAEventCut.cxx:116
 AliFemtoQAEventCut.cxx:117
 AliFemtoQAEventCut.cxx:118
 AliFemtoQAEventCut.cxx:119
 AliFemtoQAEventCut.cxx:120
 AliFemtoQAEventCut.cxx:121
 AliFemtoQAEventCut.cxx:122
 AliFemtoQAEventCut.cxx:123
 AliFemtoQAEventCut.cxx:124
 AliFemtoQAEventCut.cxx:125
 AliFemtoQAEventCut.cxx:126
 AliFemtoQAEventCut.cxx:127
 AliFemtoQAEventCut.cxx:128
 AliFemtoQAEventCut.cxx:129
 AliFemtoQAEventCut.cxx:130
 AliFemtoQAEventCut.cxx:131
 AliFemtoQAEventCut.cxx:132