ROOT logo

/* $Id$ */

#include "AliEventPoolMuon.h"
#include "AliRunTagCuts.h"
#include "AliLHCTagCuts.h"
#include "AliDetectorTagCuts.h"
#include "AliEventTagCuts.h"
#include "AliTagAnalysis.h"

// Realisation of an AliVEventPool via
// on the flight generation of the bin using AliTagAnalysis.
// Created expanding AliEventPoolOTF functionalities
//
// Authors Alessandro De Falco and Antonio Uras, INFN Cagliari
// alessandro.de.falco@ca.infn.it  antonio.uras@ca.infn.it

#define AliEventPoolMuon_CXX

ClassImp(AliEventPoolMuon)

//=====================================================================================================

AliEventPoolMuon::AliEventPoolMuon():
  AliVEventPool(),
  fTagAnalysis(0),
  fRunCuts(0),
  fLHCCuts(0),
  fDetectorCuts(0),
  fEventCuts(0),
  fTagDirectory(0),
  fMultiplicityMin(0),
  fMultiplicityMax(0),
  fMultiplicityStep(0),
  fMultiplicity(0),
  fNFWMuonMin(0),
  fNFWMuonMax(0),
  fNFWMuonStep(0),
  fNFWMuon(0),
  fPrimaryVertexZMin(0),
  fPrimaryVertexZMax(0),
  fPrimaryVertexZStep(0),
  fPrimaryVertexZ(0),
  fBinNumber(0) {
  
  // Default constructor

}

//=====================================================================================================

AliEventPoolMuon::AliEventPoolMuon(const Char_t *name, const Char_t *title):
  AliVEventPool(name, title),
  fTagAnalysis(new AliTagAnalysis(title)),
  fRunCuts(new AliRunTagCuts()),
  fLHCCuts(new AliLHCTagCuts()),
  fDetectorCuts(new AliDetectorTagCuts()),
  fEventCuts(new AliEventTagCuts()),
  fTagDirectory("."),
  fMultiplicityMin(0),
  fMultiplicityMax(0),
  fMultiplicityStep(0),
  fMultiplicity(0),
  fNFWMuonMin(0),
  fNFWMuonMax(0),
  fNFWMuonStep(0),
  fNFWMuon(0),
  fPrimaryVertexZMin(0),
  fPrimaryVertexZMax(0),
  fPrimaryVertexZStep(0),
  fPrimaryVertexZ(0),
  fBinNumber(0) {

  // Constructor

}

//=====================================================================================================

AliEventPoolMuon::AliEventPoolMuon(const AliEventPoolMuon& obj):
  AliVEventPool(obj),
  fTagAnalysis(0),
  fRunCuts(0),
  fLHCCuts(0),
  fDetectorCuts(0),
  fEventCuts(0),
  fTagDirectory(0),
  fMultiplicityMin(0),
  fMultiplicityMax(0),
  fMultiplicityStep(0),
  fMultiplicity(0),
  fNFWMuonMin(0),
  fNFWMuonMax(0),
  fNFWMuonStep(0),
  fNFWMuon(0),
  fPrimaryVertexZMin(0),
  fPrimaryVertexZMax(0),
  fPrimaryVertexZStep(0),
  fPrimaryVertexZ(0),
  fBinNumber(0) {

  // Copy constructor

}

//=====================================================================================================

AliEventPoolMuon& AliEventPoolMuon::operator=(const AliEventPoolMuon& other) {

  // Assignment operator
  AliVEventPool::operator=(other);
  return *this;

}

//=====================================================================================================

void AliEventPoolMuon::Init() {
  
  fTagAnalysis -> ChainLocalTags(fTagDirectory);

  fMultiplicity   = fMultiplicityMin;
  fNFWMuon        = fNFWMuonMin;
  fPrimaryVertexZ = fPrimaryVertexZMin;

}

//=====================================================================================================

TChain* AliEventPoolMuon::GetNextChain() {
  
  TChain *chain = 0;
  fBinNumber++;

  // hierarchic order of variables: multiplicity -> nFWMuons -> primaryVertexZ
  
  Double_t primaryVertexZMax_TMP = fPrimaryVertexZ + fPrimaryVertexZStep;
  if (primaryVertexZMax_TMP > fPrimaryVertexZMax) {
    fPrimaryVertexZ = fPrimaryVertexZMin;
    primaryVertexZMax_TMP = fPrimaryVertexZ + fPrimaryVertexZStep;
    fNFWMuon += fNFWMuonStep;
  }

  Int_t nFWMuonMax_TMP = fNFWMuon + fNFWMuonStep - 1;
  if (nFWMuonMax_TMP > fNFWMuonMax) {
    fNFWMuon = fNFWMuonMin;
    nFWMuonMax_TMP = fNFWMuon + fNFWMuonStep - 1;
    fMultiplicity += fMultiplicityStep;
  }

  Int_t multiplicityMax_TMP = fMultiplicity + fMultiplicityStep - 1;
  if (multiplicityMax_TMP > fMultiplicityMax) return 0;
  else {
    printf("\n");
    printf("mixing events in pool #%02d:  multiplicity    %d -> %d\n",fBinNumber,fMultiplicity,multiplicityMax_TMP);
    printf("                            nFWMuons        %d -> %d\n",fNFWMuon,nFWMuonMax_TMP);
    printf("                            vertexZ         %f -> %f\n\n",fPrimaryVertexZ, primaryVertexZMax_TMP);
    fEventCuts->SetPrimaryVertexZRange(fPrimaryVertexZ, primaryVertexZMax_TMP);
    fEventCuts->SetNFWMuonRange(fNFWMuon, nFWMuonMax_TMP);
    fEventCuts->SetMultiplicityRange(fMultiplicity, multiplicityMax_TMP);
    chain = fTagAnalysis->QueryTags(fRunCuts, fLHCCuts, fDetectorCuts, fEventCuts);
    fPrimaryVertexZ += fPrimaryVertexZStep;     // here the innermost bin-variable has to be increased
    return chain;
  }
  
}

//=====================================================================================================

void  AliEventPoolMuon::GetCurrentBin(Float_t* /*bin*/) {

  //

}

//=====================================================================================================

Int_t AliEventPoolMuon::GetDimension() {

  return (1);

}

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