ROOT logo
////////////////////////////////////////////////////////////////////////////////
//                                                                            //
// AliFemtoSphericityEventCut - the basic cut for events.                     //
// Only cuts on event multiplicity, z-vertex position and                     //
// transverse sphericity are accepted.                                        //
//                                                                            //
////////////////////////////////////////////////////////////////////////////////

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

#ifdef __ROOT__
ClassImp(AliFemtoSphericityEventCut)
#endif

AliFemtoSphericityEventCut::AliFemtoSphericityEventCut() :
  AliFemtoEventCut(),
  fEventMult(),
  fVertZPos(),
  fAcceptBadVertex(false), 
  fNEventsPassed(0), 
  fNEventsFailed(0),
  fAcceptOnlyPhysics(0),
  fStCutMin(0.0),
  fStCutMax(1.0),
  fSelectTrigger(0)
{
  // Default constructor
  fEventMult[0] = 0;
  fEventMult[1] = 100000;
  fVertZPos[0] = -100.0;
  fVertZPos[1] = 100.0;
  fPsiEP[0] = -100.0;
  fPsiEP[1] = 100.0;
  fStCutMin = 0.0;
  fStCutMax = 1.0;
} 
//------------------------------
AliFemtoSphericityEventCut::~AliFemtoSphericityEventCut(){
  // Default destructor
}
//------------------------------
bool AliFemtoSphericityEventCut::Pass(const AliFemtoEvent* event){  

  // Pass events if they fall within the multiplicity, z-vertex position range
  // and transverse sphericity. Fail otherwise
  //  int mult =  event->NumberOfTracks();
  int mult = (int) event->UncorrectedNumberOfPrimaries();
  double vertexZPos = event->PrimVertPos().z();

  // Double_t qxEPVZERO = 0, qyEPVZERO = 0;
  // Double_t qVZERO = -999;
  double epvzero = event->ReactionPlaneAngle();

  // cout << "AliFemtoSphericityEventCut:: epvzero:       " << fPsiEP[0] << " < " << epvzero << " < " << fPsiEP[1] << endl;
//   cout << "AliFemtoSphericityEventCut:: mult:       " << fEventMult[0] << " < " << mult << " < " << fEventMult[1] << endl;
//   cout << "AliFemtoSphericityEventCut:: VertexZPos: " << fVertZPos[0] << " < " << vertexZPos << " < " << fVertZPos[1] << endl;
//   cout << "AliFemtoSphericityEventCut:: VertexZErr: " << event->PrimVertCov()[4] << endl;

  // cout << "AliFemtoSphericityEventCut:: MagneticField: " << event->MagneticField() << endl;
  // cout << "AliFemtoSphericityEventCut:: IsCollisionCandidate: " << event->IsCollisionCandidate() << endl;
  // cout << "AliFemtoSphericityEventCut:: TriggerCluster: " << event->TriggerCluster() << endl;
  // cout << "AliFemtoSphericityEventCut:: fSelectTrigger: " << fSelectTrigger << endl;
  // cout << "AliFemtoSphericityEventCut:: " << endl;


  Int_t ParticleNumber = 0;
  Double_t SumPt = 0;
  Double_t S00=0; 
  Double_t S11=0;
  Double_t S10=0;
  Double_t Lambda1 = 0;
  Double_t Lambda2 = 0;
  Double_t St = 0;	 

   AliFemtoTrackCollection * tracks = event->TrackCollection(); 
   
   
  for (AliFemtoTrackIterator iter=tracks->begin();iter!=tracks->end();iter++){
  
  
    Double_t NewPhi = (*iter)->P().Phi();
    Double_t NewPt =  (*iter)->Pt();
    Double_t NewEta = (*iter)->P().PseudoRapidity();
   
    
    if(TMath::Abs(NewEta)>0.8 || NewPt<0.5){continue;}
    
    Double_t Px;
    Double_t Py;
    
    Px= NewPt * TMath::Cos(NewPhi);
    Py= NewPt * TMath::Sin(NewPhi);
    
    S00 = S00 + Px*Px/(NewPt);  // matrix elements of the transverse shpericity matrix S(i,j)
    S11 = S11 + Py*Py/(NewPt);  // i,j /in [0,1]
    S10 = S10 + Px*Py/(NewPt);
    SumPt = SumPt + NewPt;
    ParticleNumber++;
    
  }  	// end of track loop

    if(SumPt==0){return kFALSE;}
      
  S00 = S00/SumPt; // normalize
  S11 = S11/SumPt;
  S10 = S10/SumPt;
  
  Lambda1 = (S00 + S11 + TMath::Sqrt((S00+S11)*(S00+S11)-4.0*(S00*S11-S10*S10)))/2.0;
  Lambda2 = (S00 + S11 - TMath::Sqrt((S00+S11)*(S00+S11)-4.0*(S00*S11-S10*S10)))/2.0;
  
     if(Lambda1+Lambda2!=0 && ParticleNumber>2)
	{
		St = 2*Lambda2/(Lambda1+Lambda2);
	}
     else{return kFALSE;};
  
  
  //cout<<"St  = "<<St<<endl;
  
  if(St>fStCutMax || St<fStCutMin){
	//cout<<"Event kicked out !"<<"StCutMax= "<<fStCutMax<<"  StCutMin= "<<fStCutMin<<endl;
	//cout<<"St = "<<St<<endl;		  
  return kFALSE;}  

  bool goodEvent =
    ((mult >= fEventMult[0]) && 
     (mult <= fEventMult[1]) && 
     (vertexZPos > fVertZPos[0]) &&
     (vertexZPos < fVertZPos[1]) &&
     (epvzero > fPsiEP[0]) &&
     (epvzero < fPsiEP[1]) &&
     ((!fAcceptBadVertex) || (event->ZDCParticipants() > 1.0)) &&
      ((!fSelectTrigger) || (event->TriggerCluster() == fSelectTrigger))
);

  // cout << "AliFemtoSphericityEventCut:: goodEvent" <<goodEvent << endl;

  goodEvent ? fNEventsPassed++ : fNEventsFailed++ ;
  //  cout << "AliFemtoSphericityEventCut:: return : " << goodEvent << endl;
//     (fAcceptBadVertex || (event->PrimVertCov()[4] > -1000.0)) &&

  return (goodEvent);
}
//------------------------------
AliFemtoString AliFemtoSphericityEventCut::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 AliFemtoSphericityEventCut::SetAcceptBadVertex(bool b)
{
  fAcceptBadVertex = b;
}
bool AliFemtoSphericityEventCut::GetAcceptBadVertex()
{
  return fAcceptBadVertex;
}

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