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

///////////////////////////////////////////////////////////////////////////
//                                                                       //
//  T0 Tender supply    //
//  //
//                                                                       //
///////////////////////////////////////////////////////////////////////////

#include <AliESDEvent.h>
#include <AliESDtrack.h>
#include <AliTender.h>
#include <AliT0TenderSupply.h>
#include <AliCDBManager.h>
#include <AliCDBEntry.h>
#include <AliT0CalibSeasonTimeShift.h>
#include <AliESDInputHandler.h>

ClassImp(AliT0TenderSupply)

//________________________________________________________________________
AliT0TenderSupply::AliT0TenderSupply():
  AliTenderSupply(),
  fCorrectMeanTime(kFALSE),
  fCorrectStartTimeOnAmplSatur(kFALSE),
  fAmplitudeThreshold(100), 
  fPass4LHC11aCorrection(kFALSE)
{
  //
  // default constructor
  //
  for(int i=0; i<4; i++) fTimeOffset[i]=0;
}

//________________________________________________________________________
AliT0TenderSupply::AliT0TenderSupply(const char *name, const AliTender *tender):
  AliTenderSupply(name,tender),
  fCorrectMeanTime(kFALSE),
  fCorrectStartTimeOnAmplSatur(kFALSE),
  fAmplitudeThreshold(100),
  fPass4LHC11aCorrection(kFALSE)
{
  //
  // constructor
  //
  for(int i=0; i<4; i++) fTimeOffset[i]=0;

}

//________________________________________________________________________
AliT0TenderSupply::~AliT0TenderSupply(){
  //
  // destructor
  //
  
}

//________________________________________________________________________
void AliT0TenderSupply::Init(){
  // Init
  //
  Int_t run = fTender->GetRun();
  if (run == 0) return;    // to skip first init, when we don't have yet a run number
  Printf("----------- TZERO Tender ----------------");

  fCorrectMeanTime = kFALSE; //reset
  for(int i=0; i<4; i++) fTimeOffset[i]=0;

  // align T0s for LHC10def periods 
  if (fTender->GetRun()>=122195 &&  fTender->GetRun()<=130850){
    Printf("Loading TZERO OCBD entries");
    fCorrectMeanTime=kTRUE;
    Printf("fCorrectMeanTime %i \n", fCorrectMeanTime);
 
    AliCDBManager* ocdbMan = AliCDBManager::Instance();
    ocdbMan->SetRun(fTender->GetRun());    
    AliCDBEntry *entry = ocdbMan->Get("T0/Calib/TimeAdjust/");
    if(entry) {
      AliT0CalibSeasonTimeShift *clb = (AliT0CalibSeasonTimeShift*) entry->GetObject();
      Float_t *t0means = clb->GetT0Means();
      for (Int_t i=0;i<4;i++) fTimeOffset[i] = t0means[i];
    } else {
      for (Int_t i=0;i<4;i++) fTimeOffset[i] = 0;
      AliWarning("T0Tender no T0 entry found T0shift set to 0");
    }
  }  
	
  // LHC11h
  fCorrectStartTimeOnAmplSatur = kFALSE;
  fAmplitudeThreshold = 100; //in mips
  if(167693<= run && run<=170593){  
    fCorrectStartTimeOnAmplSatur = kTRUE;
    fAmplitudeThreshold = 50; //in mips
  }



}

//________________________________________________________________________
void AliT0TenderSupply::ProcessEvent(){

    //
    // loop over all online T0 candidates and flag
    // selected daughter tracks using the status bis of the TObject
    //

    AliESDEvent *event=fTender->GetEvent();
    if (!event) return;
     //...........................................
   //Do something when the run number changed, like loading OCDB entries etc.
     if(fTender->RunChanged()) Init();
    
   if(fTender->RunChanged()){
      Init();
      if (fTender->GetRun()>=139699&&  fTender->GetRun()<=146860){
        AliESDInputHandler *esdIH = dynamic_cast<AliESDInputHandler*>  (fTender->GetESDhandler());
        if (esdIH) {
          TTree *tree= (TTree*)esdIH->GetTree();
          TFile *file= (TFile*)tree->GetCurrentFile();
         if (file){
            TString fileName(file->GetName());
	    if (fileName.Contains("pass4") ) fPass4LHC11aCorrection=kTRUE;
	  }
	}
      }
    }
    
    if(fPass4LHC11aCorrection) {
      const Double32_t* mean = event->GetT0TOF();
      event->SetT0TOF(0, (mean[1]+mean[2])/2.);
 
    }
    //...........................................
    if(fCorrectStartTimeOnAmplSatur){
        //correct A side ORA on amplitude saturation
        const Double32_t* time = event->GetT0time();
        const Double32_t* amplitude = event->GetT0amplitude();

        Int_t idxOfFirstPmtA = -1;
        Double32_t timeOrA   = 99999;
        for(int ipmt=12; ipmt<24; ipmt++){ //loop over A side
            if( amplitude[ipmt] < fAmplitudeThreshold){
                if( time[ipmt] > -200 && time[ipmt]!=0 && time[ipmt] < timeOrA ){ 
                    timeOrA        = time[ipmt];
                    idxOfFirstPmtA = ipmt;
                }
            }
        }

        if(idxOfFirstPmtA>-1){ //a hit in aside with less than 40 mips
            const Double32_t* mean = event->GetT0TOF();
            Double32_t timeOrC = mean[2];
            Double32_t timeOrAplusOrC = (timeOrA+timeOrC)/2;

            event->SetT0TOF(0, timeOrAplusOrC);
            event->SetT0TOF(1, timeOrA);
        }
    }

    //...........................................
    if(fCorrectMeanTime) {
      // correct mean time offsets  
      const Double32_t* mean = event->GetT0TOF();
      for(int it0=0; it0<3; it0++){
	if( mean[it0] < 10000 || (mean[it0]>6499000 && mean[it0]<6555000 ) )
	  event->SetT0TOF(it0, mean[it0] - fTimeOffset[it0]); 
      }
    }
    //...........................................


}


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