ROOT logo
/*************************************************************************
* Copyright(c) 1998-2009, 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.                  *
**************************************************************************/

///////////////////////////////////////////////////////////////////////////
//                Dielectron TrackRotator                                  //
//                                                                       //
//                                                                       //
/*
Detailed description


*/
//                                                                       //
///////////////////////////////////////////////////////////////////////////

#include <TMath.h>
#include <TRandom3.h>
#include <TObjArray.h>

#include <AliVTrack.h>

#include "AliDielectronHelper.h"

#include "AliDielectronTrackRotator.h"

ClassImp(AliDielectronTrackRotator)

AliDielectronTrackRotator::AliDielectronTrackRotator() :
  TNamed(),
  fIterations(1),
  fRotationType(kRotateBothRandom),
  fStartAnglePhi(TMath::Pi()),
  fConeAnglePhi(TMath::Pi()/6.),
  fkArrTracksP(0x0),
  fkArrTracksN(0x0),
  fCurrentIteration(0),
  fCurrentTackP(0),
  fCurrentTackN(0),
  fEvent(0x0),
  fTrackP(),
  fTrackN(),
  fVTrackP(0x0),
  fVTrackN(0x0),
  fPdgLeg1(-11),
  fPdgLeg2(11)
{
  //
  // Default Constructor
  //
  gRandom->SetSeed();
}

//______________________________________________
AliDielectronTrackRotator::AliDielectronTrackRotator(const char* name, const char* title) :
  TNamed(name, title),
  fIterations(1),
  fRotationType(kRotateBothRandom),
  fStartAnglePhi(TMath::Pi()),
  fConeAnglePhi(TMath::Pi()/6.),
  fkArrTracksP(0x0),
  fkArrTracksN(0x0),
  fCurrentIteration(0),
  fCurrentTackP(0),
  fCurrentTackN(0),
  fEvent(0x0),
  fTrackP(),
  fTrackN(),
  fVTrackP(0x0),
  fVTrackN(0x0),
  fPdgLeg1(-11),
  fPdgLeg2(11)
{
  //
  // Named Constructor
  //
  gRandom->SetSeed();
}

//______________________________________________
AliDielectronTrackRotator::~AliDielectronTrackRotator()
{
  //
  // Default Destructor
  //
  
}

//______________________________________________
void AliDielectronTrackRotator::Reset()
{
  //
  // Reset the current iterators
  //
  fCurrentIteration=0;
  fCurrentTackP=0;
  fCurrentTackN=0;
}

//______________________________________________
Bool_t AliDielectronTrackRotator::NextCombination()
{
  //
  // Perform track rotation of the tracks in the track arrays as long as there are possible combinations
  //
  if (!fkArrTracksP || !fkArrTracksP) {
    Reset();
    return kFALSE;
  }

  Int_t nP=fkArrTracksP->GetEntriesFast();
  Int_t nN=fkArrTracksN->GetEntriesFast();
  if (nP==0||nN==0){
    Reset();
    return kFALSE;
  }
  
  if (fCurrentIteration==fIterations){
    fCurrentIteration=0;
    ++fCurrentTackP;
  }
  
  if (fCurrentTackP==nP){
    ++fCurrentTackN;
    fCurrentTackP=0;
  }
  
  if (fCurrentTackN==nN){
    Reset();
    return kFALSE;
  }
  
  if (!RotateTracks()){
    Reset();
    return kFALSE;
  }
  
  ++fCurrentIteration;
  return kTRUE;
}

//______________________________________________
Bool_t AliDielectronTrackRotator::RotateTracks()
{
  //
  // Actual track rotation
  // Find out particle type and perform the rotation
  //

  AliVTrack *trackP=dynamic_cast<AliVTrack*>(fkArrTracksP->UncheckedAt(fCurrentTackP));
  AliVTrack *trackN=dynamic_cast<AliVTrack*>(fkArrTracksN->UncheckedAt(fCurrentTackN));
  fTrackP.Initialize();
  fTrackN.Initialize();
  fVTrackP=0x0;
  fVTrackN=0x0;
  if (!trackP||!trackN) return kFALSE;
  fTrackP+=AliKFParticle(*trackP,fPdgLeg1);
  fTrackN+=AliKFParticle(*trackN,fPdgLeg2);

  fVTrackP=trackP;
  fVTrackN=trackN;
  
  Double_t angle  = fStartAnglePhi+(2*gRandom->Rndm()-1)*fConeAnglePhi;
  Int_t    charge = TMath::Nint(gRandom->Rndm());
  
  if (fRotationType==kRotatePositive||(fRotationType==kRotateBothRandom&&charge==0)){
    AliDielectronHelper::RotateKFParticle(&fTrackP, angle, fEvent);
  }
  
  if (fRotationType==kRotateNegative||(fRotationType==kRotateBothRandom&&charge==1)){
    AliDielectronHelper::RotateKFParticle(&fTrackN, angle, fEvent);
  }

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