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: AliADReconstructor.cxx 20956 2007-09-26 14:22:18Z mrodrigu $ */
//////////////////////////////////////////////////////////////////////////////
//                                                                          //
//  Class for AD reconstruction                                         //
//////////////////////////////////////////////////////////////////////////////
#include <TParameter.h>

#include "AliRawReader.h"
#include "AliGRPObject.h"
#include "AliCDBManager.h"
#include "AliCDBStorage.h"
#include "AliCDBEntry.h"
#include "AliESDEvent.h"

#include "AliADReconstructor.h"
#include "AliADdigit.h"
#include "AliESDAD.h"
#include "AliADConst.h"
#include "AliADCalibData.h"
#include "AliADRawStream.h"

ClassImp(AliADReconstructor)
//_____________________________________________________________________________
AliADReconstructor:: AliADReconstructor():
  AliReconstructor(),
  fESDAD(0x0),
  fCalibData(NULL),
  fDigitsArray(0)

{
  fCalibData = GetCalibData();
  // Default constructor  
  // Get calibration data

}

//_____________________________________________________________________________
AliADReconstructor& AliADReconstructor::operator = 
  (const AliADReconstructor& /*reconstructor*/)
{
// assignment operator

  Fatal("operator =", "assignment operator not implemented");
  return *this;
}

//_____________________________________________________________________________
AliADReconstructor::~AliADReconstructor()
{
// destructor
  delete fESDAD;
  delete fDigitsArray;
}

//_____________________________________________________________________________
void AliADReconstructor::Init()
{
// initializer
    fESDAD  = new AliESDAD;
}

//_____________________________________________________________________________
void AliADReconstructor::ConvertDigits(AliRawReader* rawReader, TTree* digitsTree) const
{
// converts RAW to digits 

  if (!digitsTree) {
    AliError("No digits tree!");
    return;
  }

  if (!fDigitsArray){
    fDigitsArray = new TClonesArray("AliADdigit", 16);
    digitsTree->Branch("ADDigit", &fDigitsArray);
    }

  rawReader->Reset();
  AliADRawStream rawStream(rawReader);
  if (rawStream.Next()) { 

    for(Int_t iChannel=0; iChannel < 16; ++iChannel) {
      Int_t offlineCh = rawStream.GetOfflineChannel(iChannel);
      // ADC charge samples
      Short_t chargeADC[kNClocks];
      for(Int_t iClock=0; iClock < kNClocks; ++iClock) {
	chargeADC[iClock] = rawStream.GetPedestal(iChannel,iClock);
      }
      // Integrator flag
      Bool_t integrator = rawStream.GetIntegratorFlag(iChannel,kNClocks/2);
      Bool_t BBflag = rawStream.GetBBFlag(iChannel,kNClocks/2); 
      Bool_t BGflag = rawStream.GetBGFlag(iChannel,kNClocks/2);
   
      // HPTDC data (leading time and width)
      Int_t board = AliADCalibData::GetBoardNumber(offlineCh);
      Float_t time = rawStream.GetTime(iChannel)*fCalibData->GetTimeResolution(board);
      Float_t width = rawStream.GetWidth(iChannel)*fCalibData->GetWidthResolution(board);
      // Add a digit
      if(!fCalibData->IsChannelDead(iChannel)){
	  new ((*fDigitsArray)[fDigitsArray->GetEntriesFast()]) AliADdigit(offlineCh, time, width,integrator, chargeADC, BBflag, BGflag);
      }
    }

    digitsTree->Fill();
  }

  fDigitsArray->Clear();

}

//_____________________________________________________________________________
void AliADReconstructor::FillESD(TTree* digitsTree, TTree* /*clustersTree*/,AliESDEvent* esd) const
{

  printf("Running AD Reconstruction \n");

  // fills ESD with AD Digits

  if (!digitsTree)
    {
      AliError("No digits tree!");
      return;
    }

  TBranch* digitBranch = digitsTree->GetBranch("ADdigit");
  if (!digitBranch) {
    AliError("No AD digits branch found!");
    return;
  }
  digitBranch->SetAddress(&fDigitsArray);

  digitsTree->GetEvent(0);

  Bool_t ADHits[16];
  for(Int_t i = 0; i < 16; i++) { ADHits[i] = kFALSE; }

  Int_t nDigits = fDigitsArray->GetEntriesFast();
    
  for (Int_t d=0; d<nDigits; d++) {    
    AliADdigit* digit = (AliADdigit*) fDigitsArray->At(d);
    Int_t module = digit->PMNumber();
 //   printf("AD Module: %d\n",module);
    ADHits[module] = kTRUE;
  }  
  if (!esd) {
	AliError("NO AD ESD branch found!");
	return;
}
  fESDAD->SetADBitCell(ADHits);

  if (esd)
    {
      AliDebug(1, Form("Writing AD data to ESD Tree"));
      esd->SetADData(fESDAD);
    }

  fDigitsArray->Clear();
}

//_____________________________________________________________________________
AliADCalibData* AliADReconstructor::GetCalibData() const
{
  AliCDBManager *man = AliCDBManager::Instance();

  AliCDBEntry *entry=0;

  //entry = man->Get("AD/Calib/Data");
  //if(!entry){
    //AliWarning("Load of calibration data from default storage failed!");
    //AliWarning("Calibration data will be loaded from local storage ($ALICE_ROOT)");
	
    man->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
    man->SetRun(1);
    entry = man->Get("AD/Calib/Data");
  //}
  // Retrieval of data in directory AD/Calib/Data:

  AliADCalibData *calibdata = 0;

  if (entry) calibdata = (AliADCalibData*) entry->GetObject();
  if (!calibdata)  AliFatal("No calibration data from calibration database !");

  return calibdata;
}


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