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: AliCorrQADataMakerRec.cxx 27570 2008-07-24 21:49:27Z cvetan $ */

/*
  Produces the data needed to calculate the quality assurance. 
  All data must be mergeable objects.
  Y. Schutz CERN July 2007
*/

// --- ROOT system ---
#include <TClonesArray.h>
#include <TFile.h> 
#include <TH1F.h> 
#include <TH1I.h> 
#include <TH2F.h> 
#include <TNtupleD.h>
#include <TParameter.h>
#include <TMath.h> 

// --- Standard library ---

// --- AliRoot header files ---
#include "AliLog.h"
#include "AliCorrQADataMakerRec.h"
#include "AliQAChecker.h"

ClassImp(AliCorrQADataMakerRec)
           
//____________________________________________________________________________ 
AliCorrQADataMakerRec::AliCorrQADataMakerRec(AliQADataMaker ** qadm ) : 
AliQADataMakerRec(AliQAv1::GetDetName(AliQAv1::kCORR), "Corr Quality Assurance Data Maker"),
  fMaxRawVar(0),  
  fqadm(qadm),
  fVarvalue(NULL)
{
  // ctor
  fCorrNt = new TNtupleD *[AliRecoParam::kNSpecies] ; 
  for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) 
    fCorrNt[specie] = NULL ; 
}

//____________________________________________________________________________ 
AliCorrQADataMakerRec::AliCorrQADataMakerRec(const AliCorrQADataMakerRec& qadm) :
  AliQADataMakerRec(qadm),
  fMaxRawVar(qadm.fMaxRawVar), 
  fqadm(qadm.fqadm),
  fVarvalue(NULL)
{
  //copy ctor 
  if ( fMaxRawVar > 0 ) {
    fVarvalue = new Double_t[fMaxRawVar] ;
    memcpy(fVarvalue, qadm.fVarvalue, fMaxRawVar*sizeof(Double_t));
  }

  // Replace shallow copy done by AliQADataMakerRec by a semi-deep
  // copy where the pointer container is recreated but the Ntuples pointed 
  // to are simply copied
  fCorrNt = new TNtupleD *[AliRecoParam::kNSpecies] ; 
  for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) 
    fCorrNt[specie] = qadm.fCorrNt[specie] ; 

}

//__________________________________________________________________
AliCorrQADataMakerRec& AliCorrQADataMakerRec::operator = (const AliCorrQADataMakerRec& qadm )
{
  // assign operator.
  if(this != &qadm) {
    AliQADataMakerRec::operator=(qadm);
    fMaxRawVar = qadm.fMaxRawVar;
    fqadm = qadm.fqadm;
    delete [] fVarvalue;
    if ( fMaxRawVar > 0 ) {
      fVarvalue = new Double_t[fMaxRawVar] ;
      memcpy(fVarvalue, qadm.fVarvalue, fMaxRawVar*sizeof(Double_t));
    } else fVarvalue = 0;

    // Replace shallow copy done by AliQADataMakerRec by a semi-deep
    // copy where the pointer container is recreated but the Ntuples pointed 
    // to are simply copied
    fCorrNt = new TNtupleD *[AliRecoParam::kNSpecies] ; 
    for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) 
      fCorrNt[specie] = qadm.fCorrNt[specie] ; 
  }
  return *this;
}
   
//____________________________________________________________________________ 
AliCorrQADataMakerRec::~AliCorrQADataMakerRec()  
{
  //
  // dtor only destroy the ntuple otherwise it would violate ownership...
  // however when the last AliCorrQADataMakerRec is deleted there is
  // a leak
  //
  //  if ( fCorrNt ) 
  //    for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; ++specie) 
  //        delete fCorrNt[specie] ; 
  //  
  delete [] fCorrNt ; 
  delete [] fVarvalue ;
}
  
//____________________________________________________________________________ 
void AliCorrQADataMakerRec::EndOfDetectorCycle(AliQAv1::TASKINDEX_t task, TObjArray ** /*list*/)
{
  //Detector specific actions at end of cycle
  // do the QA checking
  if (task == AliQAv1::kRAWS) {
     AliQAChecker::Instance()->Run(AliQAv1::kCORR, task, fCorrNt) ; 
  }
}

//____________________________________________________________________________ 
void AliCorrQADataMakerRec::InitESDs()
{
  //Create histograms to controll ESD

  AliInfo("TO BE IMPLEMENTED") ; 
  //
  ClonePerTrigClass(AliQAv1::kESDS); // this should be the last line
}


//____________________________________________________________________________ 
void AliCorrQADataMakerRec::InitRaws()
{
  // createa ntuple taking all the parameters declared by detectors
  if (fCorrNt && fCorrNt[AliRecoParam::AConvert(fEventSpecie)]) 
    return ; 

  if (!fCorrNt) {
    fCorrNt = new TNtupleD *[AliRecoParam::kNSpecies] ; ;
    for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) 
      fCorrNt[specie] = NULL ;
  } 

  if ( fRawsQAList ) 
  {
    delete[] fRawsQAList ; // not needed for the time being 
    fRawsQAList = NULL ; 
  }
  TString varlist("") ;
  for ( Int_t detIndex = 0 ; detIndex < AliQAv1::kNDET ; detIndex++ ) {
    AliQADataMaker * qadm = fqadm[detIndex] ; 
    if ( ! qadm ) 
      continue ;
    TList * list = qadm->GetParameterList() ; 
    if (list) {
      TIter next(list) ; 
      TParameter<double> * p ; 
      while ( (p = static_cast<TParameter<double>*>(next()) ) ) {
        varlist.Append(p->GetName()) ; 
        varlist.Append(":") ; 
        fMaxRawVar++ ; 
      }
    }
  }
  varlist = varlist.Strip(TString::kTrailing, ':') ; 
  if (fMaxRawVar == 0) { 
    AliWarning("NTUPLE not created") ; 
  } else {
    char * name = Form("%s_%s", AliQAv1::GetQACorrName(), AliRecoParam::GetEventSpecieName(fEventSpecie)) ; 
    fCorrNt[AliRecoParam::AConvert(fEventSpecie)] = new TNtupleD(name, "Raws data correlation among detectors", varlist.Data()) ;  
    fVarvalue = new Double_t[fMaxRawVar] ;
  }  
  //
  ClonePerTrigClass(AliQAv1::kRAWS); // this should be the last line
}

//____________________________________________________________________________ 
void AliCorrQADataMakerRec::InitRecPoints()
{
    // create Reconstructed Points histograms in RecPoints subdir
  
  AliInfo("TO BE IMPLEMENTED") ; 
  ClonePerTrigClass(AliQAv1::kRECPOINTS); // this should be the last line
}

//____________________________________________________________________________ 
void AliCorrQADataMakerRec::InitRecoParams()
{
    // Get the recoparam form the OCDB for every detector involved in CORR
  
  AliInfo("TO BE IMPLEMENTED") ; 
}

//____________________________________________________________________________
void AliCorrQADataMakerRec::MakeESDs(AliESDEvent * /*esd*/)
{
  // make QA data from ESDs

  AliInfo("TO BE IMPLEMENTED") ; 
  IncEvCountCycleESDs();
  IncEvCountTotalESDs();
  //
}

//____________________________________________________________________________
void AliCorrQADataMakerRec::MakeRaws(AliRawReader *)
{
  //Fill prepared histograms with Raw digit properties
  
  if ( !fCorrNt || ! fCorrNt[AliRecoParam::AConvert(fEventSpecie)])
      InitRaws() ; 
  
  if ( fMaxRawVar > 0 ) {
    Int_t index = 0 ;
    for ( Int_t detIndex = 0 ; detIndex < AliQAv1::kNDET ; detIndex++ ) {
      AliQADataMaker * qadm = fqadm[detIndex] ; 
      if ( ! qadm ) 
        continue ;
      TList * list = qadm->GetParameterList() ; 
      if (list) {
	TIter next(list) ; 
	TParameter<double> * p ; 
	while ( (p = static_cast<TParameter<double>*>(next()) ) ) {
	  if (index >= fMaxRawVar) {
	    AliError(Form("Variables list size exceeded (%d) !",index));
	    break;
	  }
	  fVarvalue[index] = p->GetVal() ; 
	  index++ ; 
	}
      }
    }
    static_cast<TNtupleD*>(fCorrNt[AliRecoParam::AConvert(fEventSpecie)])->Fill(fVarvalue);
  }
  //
  IncEvCountCycleRaws();
  IncEvCountTotalRaws();
  //
}

//____________________________________________________________________________
void AliCorrQADataMakerRec::MakeRecPoints(TTree * /*clustersTree*/)
{
  AliInfo("TO BE IMPLEMENTED") ; 
  IncEvCountCycleRecPoints();
  IncEvCountTotalRecPoints();
  //
}

//____________________________________________________________________________ 
void AliCorrQADataMakerRec::StartOfDetectorCycle()
{
  //Detector specific actions at start of cycle  

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