ROOT logo
//
// *** Class AliRsnPair ***
//
// "Core" method for defining the work on a pari of particles.
// For one analysis, one must setup one of this for each pair he wants to analyze,
// adding to it all analysis which he desires to do.
// Here he defines the cuts, and the particle types and charges, and can add
// functions which do different operations on the same pair, and some binning
// with respect to some kinematic variables (eta, momentum)
//
// authors: A. Pulvirenti (email: alberto.pulvirenti@ct.infn.it)
//          M. Vala (email: martin.vala@cern.ch)
//

#include "Riostream.h"
#include "AliLog.h"
#include "AliRsnLoopEff.h"

ClassImp(AliRsnLoopEff)

//_____________________________________________________________________________
AliRsnLoopEff::AliRsnLoopEff(const char *name, Int_t nSteps, Double_t maxDist) :
   AliRsnLoop(name),
   fAddSteps(nSteps),
   fSteps(0),
   fOutput(0),
   fMaxDistPV(maxDist)
{
//
// Default constructor
//

   fVertex[0] = fVertex[1] = fVertex[2] = 0.0;
}

//_____________________________________________________________________________
AliRsnLoopEff::AliRsnLoopEff(const AliRsnLoopEff &copy) :
   AliRsnLoop(copy),
   fAddSteps(copy.fAddSteps),
   fSteps(copy.fSteps),
   fOutput(copy.fOutput),
   fMaxDistPV(copy.fMaxDistPV)
{
//
// Copy constructor
//

   fVertex[0] = fVertex[1] = fVertex[2] = 0.0;
}

//_____________________________________________________________________________
AliRsnLoopEff &AliRsnLoopEff::operator=(const AliRsnLoopEff &copy)
{
//
// Assignment operator
//

   AliRsnLoop::operator=(copy);
   if (this == &copy)
      return *this;
   fAddSteps = copy.fAddSteps;
   fSteps = copy.fSteps;
   fOutput = copy.fOutput;

   return (*this);
}

//_____________________________________________________________________________
AliRsnLoopEff::~AliRsnLoopEff()
{
//
// Destructor
//

   fSteps.Delete();
   delete fOutput;
}

//_____________________________________________________________________________
void AliRsnLoopEff::CreateOutput()
{
//
// Create the unique output object of this loop
//

   fOutput = new AliRsnListOutput(Form("%s_out", GetName()), AliRsnListOutput::kCFContainer);
}

//_____________________________________________________________________________
void AliRsnLoopEff::AddStep(TObject *cuts)
{
//
// Add a step on reconstruction
//

   fSteps.AddLast(cuts);
}

//_____________________________________________________________________________
Bool_t AliRsnLoopEff::Init(const char *prefix, TList *list)
{
//
// Initialization function.
// Loops on all functions and eventual the ntuple, to initialize output objects.
//

   if (!fOutputs.IsEmpty()) {
      AliInfo("Clearing container of this efficiency loop.");
      fOutputs.Delete();
   }

   Int_t nSteps = (Int_t)fSteps.GetEntries();
   nSteps += fAddSteps;

   fOutput->SetSteps(nSteps);
   fOutput->SetSkipFailed(kFALSE);
   AliRsnLoop::AddOutput(fOutput);

   if (AliRsnLoop::Init(Form("%s_%s", prefix, GetName()), list)) {
      fOutput = (AliRsnListOutput *)fOutputs[0];
      return kTRUE;
   } else {
      fOutput = 0x0;
      return kFALSE;
   }
}

//_____________________________________________________________________________
Int_t AliRsnLoopEff::FindTrack(Int_t label, const AliVEvent *event)
{
//
// Loops an event and find all tracks which have a label
// equal to that passed as first argument.
//

   Int_t   i = 0;
   Int_t   ntracks = event->GetNumberOfTracks();
   TArrayI array(100);

   for (i = 0; i < ntracks; i++) {
      AliVParticle *track = event->GetTrack(i);
      if (TMath::Abs(track->GetLabel()) != label) continue;
      return i;
   }

   return -1;
}

//__________________________________________________________________________________________________
Int_t AliRsnLoopEff::GetMatchedDaughter(Int_t label, AliRsnEvent *event)
{
//
// Searches an object among all possible daughters which matches the corresponding label
// and if it is found, assigns to the daughter and returns it
//

   if (!event) return -1;

   AliRsnDaughter out;

   Int_t i, imax = event->GetAbsoluteSum();
   for (i = 0; i < imax; i++) {
      event->SetDaughter(out, i);
      if (out.IsOK() && out.GetLabel() == label) return i;
   }

   return -1;
}

//__________________________________________________________________________________________________
Double_t AliRsnLoopEff::DistanceFromPV(Double_t x, Double_t y, Double_t z)
{
//
// Compute distance from current primary vertex
//

   AliDebugClass(1, Form("Vertex = %.3f %.3f %.3f -- vprod = %.3f %.3f %.3f", fVertex[0], fVertex[1], fVertex[2], x, y, z));

   x -= fVertex[0];
   y -= fVertex[1];
   z -= fVertex[2];

   return TMath::Sqrt(x*x + y*y + z*z);
}


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