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.                  *
 **************************************************************************/

/* $Id$ */
 

// Realisation of an AliVEventPool via
// on the flight (OTF) generation of the bin using AliTagAnalysis.
// Author Andreas Morsch
// andreas.morsch@cern.ch

#include "AliEventPoolOTF.h"

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

#include <TMath.h>
#include <TChain.h>
#include <TGridResult.h>

ClassImp(AliEventPoolOTF)


////////////////////////////////////////////////////////////////////////

AliEventPoolOTF::AliEventPoolOTF():
    AliVEventPool(),
    fTagAnalysis(0),
    fRunCuts(0),
    fLHCCuts(0),
    fDetectorCuts(0),
    fEventCuts(0),
    fGridTags(0),
    fChain(0),
    fTagDirectory(0),
    fValueMin(),
    fValueMax(),
    fValueStep(),
    fValue(),    
    fBinNumber(0),
    fNoMore(0)

{
  // Default constructor
    InitArrays();
}

AliEventPoolOTF::AliEventPoolOTF(const char* name, const char* title):
    AliVEventPool(name, title),
    fTagAnalysis(new AliTagAnalysis(title)),
    fRunCuts(new AliRunTagCuts()),
    fLHCCuts(new AliLHCTagCuts()),
    fDetectorCuts(new AliDetectorTagCuts()),
    fEventCuts(new AliEventTagCuts()),
    fGridTags(0),
    fChain(0),
    fTagDirectory("."),
    fValueMin(),
    fValueMax(),
    fValueStep(),
    fValue(),    
    fBinNumber(0),
    fNoMore(0)

{
  // Constructor
    InitArrays();
}


AliEventPoolOTF::AliEventPoolOTF(const AliEventPoolOTF& obj):
    AliVEventPool(obj),
    fTagAnalysis(0),
    fRunCuts(0),
    fLHCCuts(0),
    fDetectorCuts(0),
    fEventCuts(0),
    fGridTags(0),
    fChain(0),
    fTagDirectory(0),
    fValueMin(),
    fValueMax(),
    fValueStep(),
    fValue(),    
    fBinNumber(0),
    fNoMore(0)
{
    // Copy constructor
    InitArrays();
}


AliEventPoolOTF::~AliEventPoolOTF()
{
    // Destructor
    delete fTagAnalysis;
    delete fRunCuts;
    delete fEventCuts;
    delete fLHCCuts;
    delete fDetectorCuts;
    delete fChain;
}

AliEventPoolOTF& AliEventPoolOTF::operator=(const AliEventPoolOTF& other)
{
// Assignment operator
    AliVEventPool::operator=(other);
    return *this;
}


void AliEventPoolOTF::Init()
{
    // Initialisation
    if (!fGridTags) {
	fTagAnalysis->ChainLocalTags(fTagDirectory);
    } else {
	fTagAnalysis->ChainGridTags(fGridTags);
    }
    
    
    for (Int_t i = 0; i < 5; i++) fValue[i] = fValueMin[i];    
}

TChain* AliEventPoolOTF::GetNextChain()
{
    // Get Next Chain
    if (fChain) {
	delete fChain;
	fChain = 0;
    }

    fBinNumber++;
    if (fNoMore) {
 	return 0;
    } else {
    printf("Current bin (lower) %13.3f %13.3f %13.3f %13.3f %13.3f \n", fValue[kMultiplicity], fValue[kZVertex], fValue[kEventPlane],fValue[kLeadingParticleEta],fValue[kLeadingParticlePhi]);
    printf("Current bin (upper) %13.3f %13.3f %13.3f %13.3f %13.3f \n", fValue[kMultiplicity] + fValueStep[kMultiplicity] - 1, 
	   fValue[kZVertex]      + fValueStep[kZVertex], 
	   fValue[kEventPlane]   + fValueStep[kEventPlane],
	   fValue[kLeadingParticleEta]   + fValueStep[kLeadingParticleEta],
           fValue[kLeadingParticlePhi]   + fValueStep[kLeadingParticlePhi]
    
	   );

	fEventCuts->SetMultiplicityRange(Int_t(fValue[kMultiplicity]) , Int_t(fValue[kMultiplicity] + fValueStep[kMultiplicity] - 1));
	fEventCuts->SetPrimaryVertexZRange(fValue[kZVertex] , fValue[kZVertex] + fValueStep[kZVertex]);
        fEventCuts->SetEtaLeadingParticleRange(fValue[kLeadingParticleEta] , fValue[kLeadingParticleEta] + fValueStep[kLeadingParticleEta]);
        fEventCuts->SetPhiLeadingParticleRange(fValue[kLeadingParticlePhi] , fValue[kLeadingParticlePhi] + fValueStep[kLeadingParticlePhi]);
        fEventCuts->SetEventPlaneAngleRange(fValue[kEventPlane] , fValue[kEventPlane] + fValueStep[kEventPlane]);
    
	fChain = fTagAnalysis->QueryTags(fRunCuts, fLHCCuts, fDetectorCuts, fEventCuts);
//
//      Next bin 
//
	for (Int_t i = 5; i >= 0; i--) 
	{
	    fValue[i] += fValueStep[i];
	    if (i > 0  && fValue[i] >= fValueMax[i]) {
		fValue[i] = fValueMin[i];
	    } else if (i == 0 && fValue[i] >= fValueMax[i]) {
		fNoMore = kTRUE;
	    } else {
		break;
	    }
	}
	return fChain;
    }
}

void  AliEventPoolOTF::GetCurrentBin(Float_t* /*bin*/)
{
    //
}

Int_t AliEventPoolOTF::GetDimension()
{
    //
    return (5);
}

void AliEventPoolOTF::InitArrays()
{
    // Initializes the pool axis
    
    SetMultiplicityBinning(0, 20000, 20000);
    SetZVertexBinning(-1000., 1000., 2000.);
    SetEventPlaneBinning(-1000., 1000., 2000.);
    SetLeadingParticleEtaBinning(-13.0, 13.0, 27.);
    SetLeadingParticlePhiBinning(0., 2*(TMath::Pi()),2*(TMath::Pi()));
    for (Int_t i = 0; i < 5; i++) fValue[i] = fValueMin[i];
}


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