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

/*




Author: R. GUERNANE LPSC Grenoble CNRS/IN2P3
*/

#include "AliEMCALTriggerSTU.h"
#include "AliCDBManager.h"
#include "AliCDBEntry.h"
#include "AliEMCALTriggerSTUDCSConfig.h"
#include "AliVZEROCalibData.h"
#include "AliVZEROdigit.h"
#include "AliEMCALTriggerPatch.h"
#include "AliESDVZERO.h"
#include "AliLog.h"

#include <TClonesArray.h>
#include <TSystem.h>
#include <TH2F.h>
#include <TFile.h>
#include <TTree.h>

#include <fstream>
#include <Riostream.h>
#include <cstdlib>

ClassImp(AliEMCALTriggerSTU)

//_______________
AliEMCALTriggerSTU::AliEMCALTriggerSTU() : AliEMCALTriggerBoard()
,fDCSConfig(0x0)
{
	// Ctor
	fGammaTh[0] = fGammaTh[1] = 0;
	fJetTh[0] = fJetTh[1] = 0;
}

//_______________
AliEMCALTriggerSTU::AliEMCALTriggerSTU(AliEMCALTriggerSTUDCSConfig *dcsConf, const TVector2& RS) : AliEMCALTriggerBoard(RS)
,fDCSConfig(dcsConf)
{
	// Ctor
	fGammaTh[0] = fGammaTh[1] = 0;
	fJetTh[0] = fJetTh[1] = 0;	
}

//_______________
AliEMCALTriggerSTU::~AliEMCALTriggerSTU()
{
	// Dtor
}

//_______________
void AliEMCALTriggerSTU::Build( TString& str, Int_t iTRU, Int_t** M, const TVector2* rSize )
{
	// Build
	
	str.ToLower();
	
	Int_t ix = (iTRU % 2) ? 24 : 0;

	Int_t iy =  iTRU / 2;
	
	Int_t** v = 0x0;
	
	if (str.Contains("map"))
	{
		v = fMap;
	}
	else if (str.Contains("region"))
	{
		v = fRegion;
	}
	else
	{
		AliError("Operation not allowed: STU won't be configured properly!");
	}
  
  if(v){	
    for (Int_t i=0; i<rSize->X(); i++)
      for (Int_t j=0; j<rSize->Y(); j++) v[i + ix][j + iy * 4] = M[i][j];
  }
}

//_______________
void AliEMCALTriggerSTU::L1(int type)
{
	// L1
	
	TVector2 s1, s2, s3, s4;
	fDCSConfig->GetSegmentation(s1, s2, s3, s4);
	
	switch (type)
	{
		case kL1GammaHigh:
		case kL1GammaLow:
			SetSubRegionSize(s1); 
			SetPatchSize(s2);
			break;
		case kL1JetHigh:
		case kL1JetLow:
			SetSubRegionSize(s3);
			SetPatchSize(s4);
			break;
		default:
			AliError("Not supported L1 trigger type");
			return;
			break;
	}
	
	SlidingWindow(GetThreshold(type));	
	AliDebug(999, Form("STU type %d sliding window w/ thr %d found %d patches", type, GetThreshold(type), fPatches->GetEntriesFast()));
}

//___________
void AliEMCALTriggerSTU::ComputeThFromV0(int type, const Int_t M[])
{
	// Compute threshold from V0
	
	Short_t P[3] = {0};
	
	switch (type)
	{
		case kL1GammaHigh:
			P[0] = fDCSConfig->GetG(0, 0);
			P[1] = fDCSConfig->GetG(1, 0);
			P[2] = fDCSConfig->GetG(2, 0);			
			break;
		case kL1GammaLow:
			P[0] = fDCSConfig->GetG(0, 1);
			P[1] = fDCSConfig->GetG(1, 1);
			P[2] = fDCSConfig->GetG(2, 1);			
			break;
		case kL1JetHigh:
			P[0] = fDCSConfig->GetJ(0, 0);
			P[1] = fDCSConfig->GetJ(1, 0);
			P[2] = fDCSConfig->GetJ(2, 0);			
			break;
		case kL1JetLow:
			P[0] = fDCSConfig->GetJ(0, 1);
			P[1] = fDCSConfig->GetJ(1, 1);
			P[2] = fDCSConfig->GetJ(2, 1);			
			break;
		default:
			AliError("AliEMCALTriggerSTU::ComputeThFromV0(): Undefined trigger type, pls check!");
			return;
	}
	
	ULong64_t v0sum = M[0] + M[1];
	
	ULong64_t sqrV0 = v0sum * v0sum;
	
	sqrV0 *= P[0];	
	
	sqrV0 >>= 32;
	
	v0sum *= P[1];
	
	v0sum >>= 16;
	
	SetThreshold(type, (UShort_t)(sqrV0 + v0sum + P[2]));
}

//___________
void AliEMCALTriggerSTU::SetThreshold(int type, Int_t v)
{
	// Set threshold
	
	switch (type)
	{
		case kL1GammaHigh:
			fGammaTh[0] = v;
			break;
		case kL1GammaLow:
			fGammaTh[1] = v;
			break;
		case kL1JetHigh:
			fJetTh[0] = v;		
			break;
		case kL1JetLow:
			fJetTh[1] = v;		
			break;
		default:
			AliError("AliEMCALTriggerSTU::SetThreshold(): Undefined trigger type, pls check!");
	}
}

//___________
Int_t AliEMCALTriggerSTU::GetThreshold(int type)
{	
	// Compute threshold FIXME: need an access to the OCDB
	// to get f(V0) parameters depending on trigger type
	
	switch (type)
	{
		case kL1GammaHigh:
			return fGammaTh[0];
			break;
		case kL1GammaLow:
			return fGammaTh[1];
			break;
		case kL1JetHigh:
			return fJetTh[0];		
			break;
		case kL1JetLow:
			return fJetTh[1];		
			break;
		default:
			AliError("AliEMCALTriggerSTU::GetThreshold(): Undefined trigger type, pls check!");
	}
	
	return 0;
}

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