ROOT logo
////////////////////////////////////////////////////////////////////////////////
//                                                                            //
// AliFemtoEventCutEstimators - the basic cut for events.                          //
// Only cuts on event multiplicity and z-vertex position                      //
//                                                                            //
////////////////////////////////////////////////////////////////////////////////

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

#ifdef __ROOT__
ClassImp(AliFemtoEventCutEstimators)
#endif

AliFemtoEventCutEstimators::AliFemtoEventCutEstimators() :
  AliFemtoEventCut(),
  fEventMultEst1(),
  fEventMultEst2(),
  fEventMultEst3(),
  fUseMultEst1(0), 
  fUseMultEst2(0), 
  fUseMultEst3(0), 
  fEventCentEst1(),
  fEventCentEst2(),
  fEventCentEst3(),
  fEventCentEst4(),
  fUseCentEst1(0), 
  fUseCentEst2(0), 
  fUseCentEst3(0), 
  fUseCentEst4(0),
  fNEventsPassed(0), 
  fNEventsFailed(0) 
{
  // Default constructor
  fEventMultEst1[0] = 0;  fEventMultEst1[1] = 10000;
  fEventMultEst2[0] = 0;  fEventMultEst2[1] = 10000;
  fEventMultEst3[0] = 0;  fEventMultEst3[1] = 10000;
  fEventCentEst1[0] = 0;  fEventCentEst1[1] = 1000.0;
  fEventCentEst2[0] = 0;  fEventCentEst2[1] = 1000.0;
  fEventCentEst3[0] = 0;  fEventCentEst3[1] = 1000.0;
  fEventCentEst4[0] = 0;  fEventCentEst4[1] = 1000.0;
  fVertZPos[0] = -100.0;
  fVertZPos[1] = 100.0;
} 
//------------------------------
AliFemtoEventCutEstimators::~AliFemtoEventCutEstimators(){
  // Default destructor
}
//------------------------------
AliFemtoEventCutEstimators& AliFemtoEventCutEstimators::operator=(AliFemtoEventCutEstimators& c)
{
  if (this != &c) {
    fEventMultEst1[0] = c.fEventMultEst1[0];  fEventMultEst1[1] = c.fEventMultEst1[1];
    fEventMultEst2[0] = c.fEventMultEst2[0];  fEventMultEst2[1] = c.fEventMultEst2[1];
    fEventMultEst3[0] = c.fEventMultEst3[0];  fEventMultEst3[1] = c.fEventMultEst3[1];
    fEventCentEst1[0] = c.fEventCentEst1[0];  fEventCentEst1[1] = c.fEventCentEst1[1];
    fEventCentEst2[0] = c.fEventCentEst2[0];  fEventCentEst2[1] = c.fEventCentEst2[1];
    fEventCentEst3[0] = c.fEventCentEst3[0];  fEventCentEst3[1] = c.fEventCentEst3[1];
    fEventCentEst4[0] = c.fEventCentEst4[0];  fEventCentEst4[1] = c.fEventCentEst4[1];
    fVertZPos[0] = c.fVertZPos[0];
    fVertZPos[1] = c.fVertZPos[1];
  }

  return *this;
}

//------------------------------
bool AliFemtoEventCutEstimators::Pass(const AliFemtoEvent* event){
  // Pass events if they fall within the multiplicity and z-vertex
  // position range. Fail otherwise
  //  int mult =  event->NumberOfTracks();
  
  bool goodEvent = true;

  printf("Cutting event with %i %i %i - %i %i %i %i\n", fUseMultEst1, fUseMultEst2, fUseMultEst3, fUseCentEst1, fUseCentEst2, fUseCentEst3, fUseCentEst4);
  printf("  On %i %i %i - %f %f %f %f\n", event->MultiplicityEstimateTracklets(), event->MultiplicityEstimateITSTPC(), event->MultiplicityEstimateITSPure(),
	 event->CentralityV0(), event->CentralityFMD(), event->CentralitySPD1(), event->CentralityTrk());

  if (fUseMultEst1) { goodEvent &= ((event->MultiplicityEstimateTracklets() >= fEventMultEst1[0]) &&
				    (event->MultiplicityEstimateTracklets() <= fEventMultEst1[1])); }
  if (fUseMultEst2) { goodEvent &= ((event->MultiplicityEstimateITSTPC() >= fEventMultEst2[0]) &&
				    (event->MultiplicityEstimateITSTPC() <= fEventMultEst2[1])); }
  if (fUseMultEst3) { goodEvent &= ((event->MultiplicityEstimateITSPure() >= fEventMultEst3[0]) &&
				    (event->MultiplicityEstimateITSPure() <= fEventMultEst3[1])); }

  if (fUseCentEst1) { goodEvent &= ((event->CentralityV0() > fEventCentEst1[0]) &&
				    (event->CentralityV0() < fEventCentEst1[1])); }
  if (fUseCentEst2) { goodEvent &= ((event->CentralityFMD() > fEventCentEst2[0]) &&
				    (event->CentralityFMD() < fEventCentEst2[1])); }
  if (fUseCentEst3) { goodEvent &= ((event->CentralitySPD1() > fEventCentEst3[0]) &&
				    (event->CentralitySPD1() < fEventCentEst3[1])); }
  if (fUseCentEst4) { goodEvent &= ((event->CentralityTrk() > fEventCentEst4[0]) &&
				    (event->CentralityTrk() < fEventCentEst4[1])); }
  double vertexZPos = event->PrimVertPos().z();
  //   cout << "AliFemtoEventCutEstimators:: mult:       " << fEventMult[0] << " < " << mult << " < " << fEventMult[1] << endl;
  //   cout << "AliFemtoEventCutEstimators:: VertexZPos: " << fVertZPos[0] << " < " << vertexZPos << " < " << fVertZPos[1] << endl;
  //   cout << "AliFemtoEventCutEstimators:: VertexZErr: " << event->PrimVertCov()[4] << endl;
  goodEvent &=
    ((vertexZPos > fVertZPos[0]) &&
     (vertexZPos < fVertZPos[1]));
  goodEvent ? fNEventsPassed++ : fNEventsFailed++ ;
  //   cout << "AliFemtoEventCutEstimators:: return : " << goodEvent << endl;
  //     (fAcceptBadVertex || (event->PrimVertCov()[4] > -1000.0)) &&
  return (goodEvent);
}
  //------------------------------
AliFemtoString AliFemtoEventCutEstimators::Report(){
  // Prepare report
  string stemp;
  char ctemp[100];
  snprintf(ctemp , 100, "\nMultiplicity:\t %d-%d",fEventMultEst2[0],fEventMultEst2[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;
}
 AliFemtoEventCutEstimators.cxx:1
 AliFemtoEventCutEstimators.cxx:2
 AliFemtoEventCutEstimators.cxx:3
 AliFemtoEventCutEstimators.cxx:4
 AliFemtoEventCutEstimators.cxx:5
 AliFemtoEventCutEstimators.cxx:6
 AliFemtoEventCutEstimators.cxx:7
 AliFemtoEventCutEstimators.cxx:8
 AliFemtoEventCutEstimators.cxx:9
 AliFemtoEventCutEstimators.cxx:10
 AliFemtoEventCutEstimators.cxx:11
 AliFemtoEventCutEstimators.cxx:12
 AliFemtoEventCutEstimators.cxx:13
 AliFemtoEventCutEstimators.cxx:14
 AliFemtoEventCutEstimators.cxx:15
 AliFemtoEventCutEstimators.cxx:16
 AliFemtoEventCutEstimators.cxx:17
 AliFemtoEventCutEstimators.cxx:18
 AliFemtoEventCutEstimators.cxx:19
 AliFemtoEventCutEstimators.cxx:20
 AliFemtoEventCutEstimators.cxx:21
 AliFemtoEventCutEstimators.cxx:22
 AliFemtoEventCutEstimators.cxx:23
 AliFemtoEventCutEstimators.cxx:24
 AliFemtoEventCutEstimators.cxx:25
 AliFemtoEventCutEstimators.cxx:26
 AliFemtoEventCutEstimators.cxx:27
 AliFemtoEventCutEstimators.cxx:28
 AliFemtoEventCutEstimators.cxx:29
 AliFemtoEventCutEstimators.cxx:30
 AliFemtoEventCutEstimators.cxx:31
 AliFemtoEventCutEstimators.cxx:32
 AliFemtoEventCutEstimators.cxx:33
 AliFemtoEventCutEstimators.cxx:34
 AliFemtoEventCutEstimators.cxx:35
 AliFemtoEventCutEstimators.cxx:36
 AliFemtoEventCutEstimators.cxx:37
 AliFemtoEventCutEstimators.cxx:38
 AliFemtoEventCutEstimators.cxx:39
 AliFemtoEventCutEstimators.cxx:40
 AliFemtoEventCutEstimators.cxx:41
 AliFemtoEventCutEstimators.cxx:42
 AliFemtoEventCutEstimators.cxx:43
 AliFemtoEventCutEstimators.cxx:44
 AliFemtoEventCutEstimators.cxx:45
 AliFemtoEventCutEstimators.cxx:46
 AliFemtoEventCutEstimators.cxx:47
 AliFemtoEventCutEstimators.cxx:48
 AliFemtoEventCutEstimators.cxx:49
 AliFemtoEventCutEstimators.cxx:50
 AliFemtoEventCutEstimators.cxx:51
 AliFemtoEventCutEstimators.cxx:52
 AliFemtoEventCutEstimators.cxx:53
 AliFemtoEventCutEstimators.cxx:54
 AliFemtoEventCutEstimators.cxx:55
 AliFemtoEventCutEstimators.cxx:56
 AliFemtoEventCutEstimators.cxx:57
 AliFemtoEventCutEstimators.cxx:58
 AliFemtoEventCutEstimators.cxx:59
 AliFemtoEventCutEstimators.cxx:60
 AliFemtoEventCutEstimators.cxx:61
 AliFemtoEventCutEstimators.cxx:62
 AliFemtoEventCutEstimators.cxx:63
 AliFemtoEventCutEstimators.cxx:64
 AliFemtoEventCutEstimators.cxx:65
 AliFemtoEventCutEstimators.cxx:66
 AliFemtoEventCutEstimators.cxx:67
 AliFemtoEventCutEstimators.cxx:68
 AliFemtoEventCutEstimators.cxx:69
 AliFemtoEventCutEstimators.cxx:70
 AliFemtoEventCutEstimators.cxx:71
 AliFemtoEventCutEstimators.cxx:72
 AliFemtoEventCutEstimators.cxx:73
 AliFemtoEventCutEstimators.cxx:74
 AliFemtoEventCutEstimators.cxx:75
 AliFemtoEventCutEstimators.cxx:76
 AliFemtoEventCutEstimators.cxx:77
 AliFemtoEventCutEstimators.cxx:78
 AliFemtoEventCutEstimators.cxx:79
 AliFemtoEventCutEstimators.cxx:80
 AliFemtoEventCutEstimators.cxx:81
 AliFemtoEventCutEstimators.cxx:82
 AliFemtoEventCutEstimators.cxx:83
 AliFemtoEventCutEstimators.cxx:84
 AliFemtoEventCutEstimators.cxx:85
 AliFemtoEventCutEstimators.cxx:86
 AliFemtoEventCutEstimators.cxx:87
 AliFemtoEventCutEstimators.cxx:88
 AliFemtoEventCutEstimators.cxx:89
 AliFemtoEventCutEstimators.cxx:90
 AliFemtoEventCutEstimators.cxx:91
 AliFemtoEventCutEstimators.cxx:92
 AliFemtoEventCutEstimators.cxx:93
 AliFemtoEventCutEstimators.cxx:94
 AliFemtoEventCutEstimators.cxx:95
 AliFemtoEventCutEstimators.cxx:96
 AliFemtoEventCutEstimators.cxx:97
 AliFemtoEventCutEstimators.cxx:98
 AliFemtoEventCutEstimators.cxx:99
 AliFemtoEventCutEstimators.cxx:100
 AliFemtoEventCutEstimators.cxx:101
 AliFemtoEventCutEstimators.cxx:102
 AliFemtoEventCutEstimators.cxx:103
 AliFemtoEventCutEstimators.cxx:104
 AliFemtoEventCutEstimators.cxx:105
 AliFemtoEventCutEstimators.cxx:106
 AliFemtoEventCutEstimators.cxx:107
 AliFemtoEventCutEstimators.cxx:108
 AliFemtoEventCutEstimators.cxx:109
 AliFemtoEventCutEstimators.cxx:110
 AliFemtoEventCutEstimators.cxx:111
 AliFemtoEventCutEstimators.cxx:112
 AliFemtoEventCutEstimators.cxx:113
 AliFemtoEventCutEstimators.cxx:114
 AliFemtoEventCutEstimators.cxx:115
 AliFemtoEventCutEstimators.cxx:116
 AliFemtoEventCutEstimators.cxx:117
 AliFemtoEventCutEstimators.cxx:118
 AliFemtoEventCutEstimators.cxx:119