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

// ****************************************************************
//
//	Trigger class for ZDC
//
// ****************************************************************

#include <TTree.h>
#include "AliLog.h"
#include "AliRun.h"
#include "AliLoader.h"
#include "AliRunLoader.h"
#include "AliTriggerInput.h"

#include "AliZDC.h"
#include "AliZDCDigit.h"
#include "AliZDCTrigger.h"

//________________________________________________________________
using std::cerr;
ClassImp(AliZDCTrigger)

//________________________________________________________________
AliZDCTrigger::AliZDCTrigger() : 
   AliTriggerDetector(), 
   fZDCLeftMinCut(0),
   fZDCRightMinCut(0),
   fZEMMinCut(0),
   fZDCLeftMBCut(0),
   fZDCRightMBCut(0),
   fZDCLeftCentrCut(0),
   fZDCRightCentrCut(0),
   fZDCLeftSemiCentrCut(0),
   fZDCRightSemiCentrCut(0),
   fZEMCentrCut(0)
{  
   // Constructor
   SetName("ZDC");
   CreateInputs();
   //
   SetZDCLeftEMDCuts(0,0);
   SetZDCRightEMDCuts(0,0);

}

//________________________________________________________________
void AliZDCTrigger::CreateInputs()
{
   // Trigger inputs
   
   // Do not create inputs again!!
   if( fInputs.GetEntriesFast() > 0 ) return;
   
   fInputs.AddLast(new AliTriggerInput("ZDC_1_L1",   "ZDC", 1));
   fInputs.AddLast(new AliTriggerInput("ZDC_2_L1", "ZDC", 1));
   fInputs.AddLast(new AliTriggerInput("ZDC_3_L1", "ZDC", 1));
   fInputs.AddLast(new AliTriggerInput("ZDC_EMD_L1",  "ZDC", 1));
}

//________________________________________________________________
void AliZDCTrigger::Trigger()
{

   // Trigger selection
   //
   AliRunLoader *runLoader = AliRunLoader::Instance();

   AliLoader *aZDCLoader = runLoader->GetLoader("ZDCLoader");
   
   aZDCLoader->LoadDigits("READ");
   AliZDCDigit digit;
   AliZDCDigit* pdigit = &digit;
   TTree* tD = aZDCLoader->TreeD();
   if (!tD) {
     cerr<<"AliZDCTrigger: digits tree not found\n";
     return;
   }
   tD->SetBranchAddress("ZDC", &pdigit);
   //
   Float_t signalZNLeft[]={0,0}, signalZPLeft[]={0,0}, signalZDCLeftSum[]={0,0};
   Float_t signalZNRight[]={0,0}, signalZPRight[]={0,0}, signalZDCRightSum[]={0,0};
   Float_t signalZEMSum[]={0,0};
   for(Int_t iDigit=0; iDigit<tD->GetEntries(); iDigit++){
      tD->GetEntry(iDigit);
      //
      // *** ZDC LEFT
      if(digit.GetSector(0)==1)
         for(Int_t i=0; i<2; i++){ //0=high range; 1=low range
	    signalZNLeft[i] += digit.GetADCValue(i);
	    signalZDCLeftSum[i] += digit.GetADCValue(i);
	  }
      else if(digit.GetSector(0)==2)
         for(Int_t i=0; i<2; i++){
	    signalZPLeft[i] += digit.GetADCValue(i);
	    signalZDCLeftSum[i] += digit.GetADCValue(i);
	  }
      else if(digit.GetSector(0)==3)
         for(Int_t i=0; i<2; i++) signalZEMSum[i] += digit.GetADCValue(i);
      // *** ZDC RIGHT
      else if(digit.GetSector(0)==4)
         for(Int_t i=0; i<2; i++){ //0=high range; 1=low range
	    signalZNRight[i] += digit.GetADCValue(i);
	    signalZDCRightSum[i] += digit.GetADCValue(i);
	  }
      else if(digit.GetSector(0)==5)
         for(Int_t i=0; i<2; i++){
	    signalZPRight[i] += digit.GetADCValue(i);
	    signalZDCRightSum[i] += digit.GetADCValue(i);
	  }
   }
   // *******************************************************************
   if(signalZDCLeftSum[1]>fZDCLeftMBCut && signalZDCRightSum[1]>fZDCRightMBCut) 
       // *** ZDC minimum bias trigger
       SetInput("ZDC_1_L1");
   // *******************************************************************
   if(signalZDCLeftSum[1]>fZDCLeftCentrCut && signalZDCLeftSum[1]<fZDCLeftSemiCentrCut &&
      signalZDCRightSum[1]>fZDCRightCentrCut && signalZDCRightSum[1]<fZDCRightSemiCentrCut
      && signalZEMSum[1]>fZEMCentrCut) 
       // *** ZDC semi-central (10-40%)
       SetInput("ZDC_2_L1");
   // *******************************************************************
   if(signalZDCLeftSum[1]>fZDCLeftMinCut && signalZDCLeftSum[1]<fZDCLeftCentrCut &&
      signalZDCRightSum[1]>fZDCRightMinCut && signalZDCRightSum[1]<fZDCRightCentrCut &&
      signalZEMSum[1]>fZEMCentrCut) 
       // *** ZDC central (0-10%)
       SetInput("ZDC_3_L1");
   // *******************************************************************
   if(signalZNLeft[0]>fZDCLeftEMDCuts[0] && signalZNLeft[0]<fZDCLeftEMDCuts[1] && 
      signalZNRight[0]>fZDCRightEMDCuts[0] && signalZNRight[0]<fZDCRightEMDCuts[1] &&
      signalZEMSum[1]<fZEMMinCut){ // *** 1n EMD trigger
        SetInput("ZDC_EMD_L1");
   }
   
}

//________________________________________________________________
void AliZDCTrigger::SetZDCLeftMinCut(Float_t ZDCLeftMinCut) 
{
  // Set default cut values for ZDC trigger
  //
  if(ZDCLeftMinCut)  fZDCLeftMinCut = ZDCLeftMinCut;
  else  fZDCLeftMinCut = 800.;
}
//________________________________________________________________
void AliZDCTrigger::SetZDCRightMinCut(Float_t ZDCRightMinCut) 
{
  // Set default cut values for ZDC trigger
  //
  if(ZDCRightMinCut)  fZDCRightMinCut = ZDCRightMinCut;
  else  fZDCRightMinCut = 800.;
}

//________________________________________________________________
void AliZDCTrigger::SetZEMMinCut(Float_t ZEMMinCut) 
{
  // Set default cut values for ZDC trigger
  //
  if(ZEMMinCut)  fZEMMinCut = ZEMMinCut;
  else  fZEMMinCut = 80.;
}
//________________________________________________________________
void AliZDCTrigger::SetZDCLeftEMDCuts(Float_t* ZDCLeftEMDCuts) 
{
  // Set default cut values for ZDC trigger
  //
  if(ZDCLeftEMDCuts) for(int j=0; j<2; j++) fZDCLeftEMDCuts[j] = ZDCLeftEMDCuts[j];
  else{
    fZDCLeftEMDCuts[0] = 600.;
    fZDCLeftEMDCuts[1] = 1000.;
  }
}
//________________________________________________________________
void AliZDCTrigger::SetZDCLeftEMDCuts(Float_t ZDCLeftEMDCutInf, 
	Float_t ZDCLeftEMDCutSup) 
{
  // Set default cut values for ZDC trigger
  //
  if(ZDCLeftEMDCutInf && ZDCLeftEMDCutSup){
    fZDCLeftEMDCuts[0]=ZDCLeftEMDCutInf; 
    fZDCLeftEMDCuts[1]=ZDCLeftEMDCutSup;
  } 	
  else{
    fZDCLeftEMDCuts[0] = 600.;
    fZDCLeftEMDCuts[1] = 1000.;
  }
}
//________________________________________________________________
void AliZDCTrigger::SetZDCRightEMDCuts(Float_t* ZDCRightEMDCuts) 
{
  // Set default cut values for ZDC trigger
  //
  if(ZDCRightEMDCuts) for(int j=0; j<2; j++) fZDCRightEMDCuts[j] = ZDCRightEMDCuts[j];
  else{
    fZDCRightEMDCuts[0] = 600.;
    fZDCRightEMDCuts[1] = 1000.;
  }
}
//________________________________________________________________
void AliZDCTrigger::SetZDCRightEMDCuts(Float_t ZDCRightEMDCutInf, 
	Float_t ZDCRightEMDCutSup) 
{
  // Set default cut values for ZDC trigger
  //
  if(ZDCRightEMDCutInf && ZDCRightEMDCutSup){
    fZDCRightEMDCuts[0]=ZDCRightEMDCutInf; 
    fZDCRightEMDCuts[1]=ZDCRightEMDCutSup;
  } 	
  else{
    fZDCRightEMDCuts[0] = 600.;
    fZDCRightEMDCuts[1] = 1000.;
  }
}
//________________________________________________________________
void AliZDCTrigger::SetZDCLeftMBCut(Float_t ZDCLeftMBCut) 
{
  // Set default cut values for ZDC trigger
  //
  if(ZDCLeftMBCut) fZDCLeftMBCut = ZDCLeftMBCut;
  else fZDCLeftMBCut = 800.;
}
//________________________________________________________________
void AliZDCTrigger::SetZDCRightMBCut(Float_t ZDCRightMBCut) 
{
  // Set default cut values for ZDC trigger
  //
  if(ZDCRightMBCut) fZDCRightMBCut = ZDCRightMBCut;
  else fZDCRightMBCut = 800.;
}
//________________________________________________________________
void AliZDCTrigger::SetZDCLeftCentrCut(Float_t ZDCLeftCentrCut) 
{
  // Set default cut values for ZDC trigger
  //
  if(ZDCLeftCentrCut) fZDCLeftCentrCut = ZDCLeftCentrCut;
  else fZDCLeftCentrCut = 10000.;
}
//________________________________________________________________
void AliZDCTrigger::SetZDCRightCentrCut(Float_t ZDCRightCentrCut) 
{
  // Set default cut values for ZDC trigger
  //
  if(ZDCRightCentrCut) fZDCRightCentrCut = ZDCRightCentrCut;
  else fZDCRightCentrCut = 10000.;
}
//________________________________________________________________
void AliZDCTrigger::SetZDCLeftSemiCentrCut(Float_t ZDCLeftSemiCentrCut) 
{
  // Set default cut values for ZDC trigger
  //
  if(ZDCLeftSemiCentrCut) fZDCLeftSemiCentrCut = ZDCLeftSemiCentrCut;
  else fZDCLeftSemiCentrCut = 18500.;
}
//________________________________________________________________
void AliZDCTrigger::SetZDCRightSemiCentrCut(Float_t ZDCRightSemiCentrCut) 
{
  // Set default cut values for ZDC trigger
  //
  if(ZDCRightSemiCentrCut) fZDCRightSemiCentrCut = ZDCRightSemiCentrCut;
  else fZDCRightSemiCentrCut = 18500.;
}
//________________________________________________________________
void AliZDCTrigger::SetZEMCentrCut(Float_t ZEMCentrCut) 
{
  // Set default cut values for ZDC trigger
  //
  if(ZEMCentrCut) fZEMCentrCut = ZEMCentrCut;
  else fZEMCentrCut = 210.;
}
 AliZDCTrigger.cxx:1
 AliZDCTrigger.cxx:2
 AliZDCTrigger.cxx:3
 AliZDCTrigger.cxx:4
 AliZDCTrigger.cxx:5
 AliZDCTrigger.cxx:6
 AliZDCTrigger.cxx:7
 AliZDCTrigger.cxx:8
 AliZDCTrigger.cxx:9
 AliZDCTrigger.cxx:10
 AliZDCTrigger.cxx:11
 AliZDCTrigger.cxx:12
 AliZDCTrigger.cxx:13
 AliZDCTrigger.cxx:14
 AliZDCTrigger.cxx:15
 AliZDCTrigger.cxx:16
 AliZDCTrigger.cxx:17
 AliZDCTrigger.cxx:18
 AliZDCTrigger.cxx:19
 AliZDCTrigger.cxx:20
 AliZDCTrigger.cxx:21
 AliZDCTrigger.cxx:22
 AliZDCTrigger.cxx:23
 AliZDCTrigger.cxx:24
 AliZDCTrigger.cxx:25
 AliZDCTrigger.cxx:26
 AliZDCTrigger.cxx:27
 AliZDCTrigger.cxx:28
 AliZDCTrigger.cxx:29
 AliZDCTrigger.cxx:30
 AliZDCTrigger.cxx:31
 AliZDCTrigger.cxx:32
 AliZDCTrigger.cxx:33
 AliZDCTrigger.cxx:34
 AliZDCTrigger.cxx:35
 AliZDCTrigger.cxx:36
 AliZDCTrigger.cxx:37
 AliZDCTrigger.cxx:38
 AliZDCTrigger.cxx:39
 AliZDCTrigger.cxx:40
 AliZDCTrigger.cxx:41
 AliZDCTrigger.cxx:42
 AliZDCTrigger.cxx:43
 AliZDCTrigger.cxx:44
 AliZDCTrigger.cxx:45
 AliZDCTrigger.cxx:46
 AliZDCTrigger.cxx:47
 AliZDCTrigger.cxx:48
 AliZDCTrigger.cxx:49
 AliZDCTrigger.cxx:50
 AliZDCTrigger.cxx:51
 AliZDCTrigger.cxx:52
 AliZDCTrigger.cxx:53
 AliZDCTrigger.cxx:54
 AliZDCTrigger.cxx:55
 AliZDCTrigger.cxx:56
 AliZDCTrigger.cxx:57
 AliZDCTrigger.cxx:58
 AliZDCTrigger.cxx:59
 AliZDCTrigger.cxx:60
 AliZDCTrigger.cxx:61
 AliZDCTrigger.cxx:62
 AliZDCTrigger.cxx:63
 AliZDCTrigger.cxx:64
 AliZDCTrigger.cxx:65
 AliZDCTrigger.cxx:66
 AliZDCTrigger.cxx:67
 AliZDCTrigger.cxx:68
 AliZDCTrigger.cxx:69
 AliZDCTrigger.cxx:70
 AliZDCTrigger.cxx:71
 AliZDCTrigger.cxx:72
 AliZDCTrigger.cxx:73
 AliZDCTrigger.cxx:74
 AliZDCTrigger.cxx:75
 AliZDCTrigger.cxx:76
 AliZDCTrigger.cxx:77
 AliZDCTrigger.cxx:78
 AliZDCTrigger.cxx:79
 AliZDCTrigger.cxx:80
 AliZDCTrigger.cxx:81
 AliZDCTrigger.cxx:82
 AliZDCTrigger.cxx:83
 AliZDCTrigger.cxx:84
 AliZDCTrigger.cxx:85
 AliZDCTrigger.cxx:86
 AliZDCTrigger.cxx:87
 AliZDCTrigger.cxx:88
 AliZDCTrigger.cxx:89
 AliZDCTrigger.cxx:90
 AliZDCTrigger.cxx:91
 AliZDCTrigger.cxx:92
 AliZDCTrigger.cxx:93
 AliZDCTrigger.cxx:94
 AliZDCTrigger.cxx:95
 AliZDCTrigger.cxx:96
 AliZDCTrigger.cxx:97
 AliZDCTrigger.cxx:98
 AliZDCTrigger.cxx:99
 AliZDCTrigger.cxx:100
 AliZDCTrigger.cxx:101
 AliZDCTrigger.cxx:102
 AliZDCTrigger.cxx:103
 AliZDCTrigger.cxx:104
 AliZDCTrigger.cxx:105
 AliZDCTrigger.cxx:106
 AliZDCTrigger.cxx:107
 AliZDCTrigger.cxx:108
 AliZDCTrigger.cxx:109
 AliZDCTrigger.cxx:110
 AliZDCTrigger.cxx:111
 AliZDCTrigger.cxx:112
 AliZDCTrigger.cxx:113
 AliZDCTrigger.cxx:114
 AliZDCTrigger.cxx:115
 AliZDCTrigger.cxx:116
 AliZDCTrigger.cxx:117
 AliZDCTrigger.cxx:118
 AliZDCTrigger.cxx:119
 AliZDCTrigger.cxx:120
 AliZDCTrigger.cxx:121
 AliZDCTrigger.cxx:122
 AliZDCTrigger.cxx:123
 AliZDCTrigger.cxx:124
 AliZDCTrigger.cxx:125
 AliZDCTrigger.cxx:126
 AliZDCTrigger.cxx:127
 AliZDCTrigger.cxx:128
 AliZDCTrigger.cxx:129
 AliZDCTrigger.cxx:130
 AliZDCTrigger.cxx:131
 AliZDCTrigger.cxx:132
 AliZDCTrigger.cxx:133
 AliZDCTrigger.cxx:134
 AliZDCTrigger.cxx:135
 AliZDCTrigger.cxx:136
 AliZDCTrigger.cxx:137
 AliZDCTrigger.cxx:138
 AliZDCTrigger.cxx:139
 AliZDCTrigger.cxx:140
 AliZDCTrigger.cxx:141
 AliZDCTrigger.cxx:142
 AliZDCTrigger.cxx:143
 AliZDCTrigger.cxx:144
 AliZDCTrigger.cxx:145
 AliZDCTrigger.cxx:146
 AliZDCTrigger.cxx:147
 AliZDCTrigger.cxx:148
 AliZDCTrigger.cxx:149
 AliZDCTrigger.cxx:150
 AliZDCTrigger.cxx:151
 AliZDCTrigger.cxx:152
 AliZDCTrigger.cxx:153
 AliZDCTrigger.cxx:154
 AliZDCTrigger.cxx:155
 AliZDCTrigger.cxx:156
 AliZDCTrigger.cxx:157
 AliZDCTrigger.cxx:158
 AliZDCTrigger.cxx:159
 AliZDCTrigger.cxx:160
 AliZDCTrigger.cxx:161
 AliZDCTrigger.cxx:162
 AliZDCTrigger.cxx:163
 AliZDCTrigger.cxx:164
 AliZDCTrigger.cxx:165
 AliZDCTrigger.cxx:166
 AliZDCTrigger.cxx:167
 AliZDCTrigger.cxx:168
 AliZDCTrigger.cxx:169
 AliZDCTrigger.cxx:170
 AliZDCTrigger.cxx:171
 AliZDCTrigger.cxx:172
 AliZDCTrigger.cxx:173
 AliZDCTrigger.cxx:174
 AliZDCTrigger.cxx:175
 AliZDCTrigger.cxx:176
 AliZDCTrigger.cxx:177
 AliZDCTrigger.cxx:178
 AliZDCTrigger.cxx:179
 AliZDCTrigger.cxx:180
 AliZDCTrigger.cxx:181
 AliZDCTrigger.cxx:182
 AliZDCTrigger.cxx:183
 AliZDCTrigger.cxx:184
 AliZDCTrigger.cxx:185
 AliZDCTrigger.cxx:186
 AliZDCTrigger.cxx:187
 AliZDCTrigger.cxx:188
 AliZDCTrigger.cxx:189
 AliZDCTrigger.cxx:190
 AliZDCTrigger.cxx:191
 AliZDCTrigger.cxx:192
 AliZDCTrigger.cxx:193
 AliZDCTrigger.cxx:194
 AliZDCTrigger.cxx:195
 AliZDCTrigger.cxx:196
 AliZDCTrigger.cxx:197
 AliZDCTrigger.cxx:198
 AliZDCTrigger.cxx:199
 AliZDCTrigger.cxx:200
 AliZDCTrigger.cxx:201
 AliZDCTrigger.cxx:202
 AliZDCTrigger.cxx:203
 AliZDCTrigger.cxx:204
 AliZDCTrigger.cxx:205
 AliZDCTrigger.cxx:206
 AliZDCTrigger.cxx:207
 AliZDCTrigger.cxx:208
 AliZDCTrigger.cxx:209
 AliZDCTrigger.cxx:210
 AliZDCTrigger.cxx:211
 AliZDCTrigger.cxx:212
 AliZDCTrigger.cxx:213
 AliZDCTrigger.cxx:214
 AliZDCTrigger.cxx:215
 AliZDCTrigger.cxx:216
 AliZDCTrigger.cxx:217
 AliZDCTrigger.cxx:218
 AliZDCTrigger.cxx:219
 AliZDCTrigger.cxx:220
 AliZDCTrigger.cxx:221
 AliZDCTrigger.cxx:222
 AliZDCTrigger.cxx:223
 AliZDCTrigger.cxx:224
 AliZDCTrigger.cxx:225
 AliZDCTrigger.cxx:226
 AliZDCTrigger.cxx:227
 AliZDCTrigger.cxx:228
 AliZDCTrigger.cxx:229
 AliZDCTrigger.cxx:230
 AliZDCTrigger.cxx:231
 AliZDCTrigger.cxx:232
 AliZDCTrigger.cxx:233
 AliZDCTrigger.cxx:234
 AliZDCTrigger.cxx:235
 AliZDCTrigger.cxx:236
 AliZDCTrigger.cxx:237
 AliZDCTrigger.cxx:238
 AliZDCTrigger.cxx:239
 AliZDCTrigger.cxx:240
 AliZDCTrigger.cxx:241
 AliZDCTrigger.cxx:242
 AliZDCTrigger.cxx:243
 AliZDCTrigger.cxx:244
 AliZDCTrigger.cxx:245
 AliZDCTrigger.cxx:246
 AliZDCTrigger.cxx:247
 AliZDCTrigger.cxx:248
 AliZDCTrigger.cxx:249
 AliZDCTrigger.cxx:250
 AliZDCTrigger.cxx:251
 AliZDCTrigger.cxx:252
 AliZDCTrigger.cxx:253
 AliZDCTrigger.cxx:254
 AliZDCTrigger.cxx:255
 AliZDCTrigger.cxx:256
 AliZDCTrigger.cxx:257
 AliZDCTrigger.cxx:258
 AliZDCTrigger.cxx:259
 AliZDCTrigger.cxx:260
 AliZDCTrigger.cxx:261
 AliZDCTrigger.cxx:262
 AliZDCTrigger.cxx:263
 AliZDCTrigger.cxx:264
 AliZDCTrigger.cxx:265
 AliZDCTrigger.cxx:266
 AliZDCTrigger.cxx:267
 AliZDCTrigger.cxx:268
 AliZDCTrigger.cxx:269
 AliZDCTrigger.cxx:270
 AliZDCTrigger.cxx:271
 AliZDCTrigger.cxx:272
 AliZDCTrigger.cxx:273
 AliZDCTrigger.cxx:274
 AliZDCTrigger.cxx:275
 AliZDCTrigger.cxx:276
 AliZDCTrigger.cxx:277
 AliZDCTrigger.cxx:278
 AliZDCTrigger.cxx:279
 AliZDCTrigger.cxx:280
 AliZDCTrigger.cxx:281
 AliZDCTrigger.cxx:282