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

///////////////////////////////////////////////////////////////////////////
//          ----   CORRECTION FRAMEWORK   ----
// Class to cut on the number of AliTrackReference's 
// for each detector. Applies on pair of tracks (AliCFPair)
///////////////////////////////////////////////////////////////////////////
// author : R. Vernet (renaud.vernet@cern.ch)
///////////////////////////////////////////////////////////////////////////

#include "AliMCParticle.h"
#include "AliCFPairAcceptanceCuts.h"
#include "AliMCEvent.h"
#include "TBits.h"
#include "AliLog.h"

ClassImp(AliCFPairAcceptanceCuts)

//______________________________
AliCFPairAcceptanceCuts::AliCFPairAcceptanceCuts() : 
  AliCFCutBase(),
  fMCInfo(0x0),
  fCutNeg(new AliCFAcceptanceCuts()),
  fCutPos(new AliCFAcceptanceCuts()),
  fBitmap(new TBits(0))
{
  //
  //Default Constructor
  //
}

//______________________________
AliCFPairAcceptanceCuts::AliCFPairAcceptanceCuts(const Char_t* name, const Char_t* title) : 
  AliCFCutBase(name,title),
  fMCInfo(0x0),
  fCutNeg(new AliCFAcceptanceCuts(name,title)),
  fCutPos(new AliCFAcceptanceCuts(name,title)),
  fBitmap(new TBits(0))
{
  //
  //Named Constructor
  //
}

//______________________________
AliCFPairAcceptanceCuts::AliCFPairAcceptanceCuts(const AliCFPairAcceptanceCuts& c) : 
  AliCFCutBase(c),
  fMCInfo(c.fMCInfo),
  fCutNeg(c.fCutNeg),
  fCutPos(c.fCutPos),
  fBitmap(c.fBitmap)
{
  //
  //Copy Constructor
  //
}

//______________________________
AliCFPairAcceptanceCuts& AliCFPairAcceptanceCuts::operator=(const AliCFPairAcceptanceCuts& c)
{
  //
  // Assignment operator
  //
  if (this != &c) {
    AliCFCutBase::operator=(c) ;
    fMCInfo = c.fMCInfo ;
    fCutNeg = c.fCutNeg ;
    fCutPos = c.fCutPos ;
    fBitmap = c.fBitmap ;
  }
  return *this ;
}

//__________________________________________________________
Bool_t AliCFPairAcceptanceCuts::IsSelected(TObject* obj) {
  //
  // checks the number of track references associated to 'obj'
  // 'obj' must be an AliMCParticle
  //
  //
  // check if selections on 'obj' are passed
  // 'obj' must be an AliMCParticle
  //
  
  SelectionBitMap(obj);

  //   if (fIsQAOn) FillHistograms(obj,kFALSE);
  Bool_t isSelected = kTRUE;

  for (UInt_t icut=0; icut<fBitmap->GetNbits(); icut++) {
    if (!fBitmap->TestBitNumber(icut)) {
      isSelected = kFALSE;
      break;
    }
  }  

  if (!isSelected) return kFALSE ;
  //   if (fIsQAOn) FillHistograms(obj,kTRUE);
  return kTRUE;
}

//__________________________________________________________
void AliCFPairAcceptanceCuts::SelectionBitMap(TObject* obj) 
{
  //
  // test if the track passes the single cuts
  // and store the information in a bitmap
  //

  for (UInt_t i=0; i<kNCuts; i++) fBitmap->SetBitNumber(i,kFALSE);

  AliMCParticle* mcpart = dynamic_cast<AliMCParticle*>(obj) ;

  if (!mcpart) return;
  TString className(mcpart->ClassName());
  if (className.CompareTo("AliMCParticle") != 0) {
    AliError("obj must point to an AliMCParticle !");
    return ;
  }

  TParticle* part = mcpart->Particle() ;
  if (!part || part->GetNDaughters() !=2) return ;

  Int_t lab0 = part->GetDaughter(0);
  Int_t lab1 = part->GetDaughter(1);
  AliMCParticle* negDaughter =  (AliMCParticle*) fMCInfo->GetTrack(lab0) ;
  AliMCParticle* posDaughter =  (AliMCParticle*) fMCInfo->GetTrack(lab1) ;

  Int_t iCutBit = 0;

  if (fCutNeg->IsSelected(negDaughter)) fBitmap->SetBitNumber(iCutBit,kTRUE);
  iCutBit++;
  
  if (fCutPos->IsSelected(posDaughter)) fBitmap->SetBitNumber(iCutBit,kTRUE);
}

//______________________________
void AliCFPairAcceptanceCuts::SetMCEventInfo(const TObject* mcInfo) {
  //
  // Sets pointer to MC event information (AliMCEvent)
  //

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