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

//_________________________________________________________________________
// A basic analysis task to scale histograms to a given cross section
//
//*-- Yves Schutz 
//////////////////////////////////////////////////////////////////////////////

//Root system
#include <TH1.h>
#include <TH1F.h>

//Analysis system
#include "AliAnaScale.h" 

//__________________________
AliAnaScale::AliAnaScale() : 
  fDebug(0),
  fScale(1.0),
  fInputList(0x0), 
  fOutputList(0x0),
  fSumw2(0),
  fhCount() 
{
  //Default constructor
}

//__________________________________________
AliAnaScale::AliAnaScale(const char *name) : 
  AliAnalysisTask(name,""),  
  fDebug(0),
  fScale(1.0), 
  fInputList(0x0), 
  fOutputList(0x0), 
  fSumw2(0),
  fhCount(0) 
{
  // Constructor
  
  // Called only after the event loop
  SetPostEventLoop(kTRUE);
  
  // Input slot #0 
  DefineInput(0,  TList::Class()) ; 
  
  // Output slot 
  DefineOutput(0,  TList::Class()) ;
  
}

//_________________________________________________
void AliAnaScale::ConnectInputData(const Option_t*)
{
  // Initialisation of branch container and histograms 
    
  if(fDebug > 1) printf("*** Initialization of %s \n", GetName()) ; 
  fInputList     = dynamic_cast<TList*>(GetInputData(0)) ; 
  
}

//_____________________________________
void AliAnaScale::CreateOutputObjects()
{  
  // Create the outputs containers

  fOutputList = new TList() ; 
  fOutputList->SetName(GetName()) ; 

  fhCount =new TH1F("hCount","count files",1,0,1);  
  fOutputList->Add(fhCount);

  fOutputList->SetOwner(kTRUE);
  
  PostData(0, fOutputList);
  
}

//________________________________
void AliAnaScale::Exec(Option_t *) 
{
  // Do the Scaling
  
  if(fDebug > 0 ) printf(">>>>> Scaling factor %e, do Sumw2 %d <<<<< \n",fScale,fSumw2) ;
  
  const Int_t buffersize = 255;
  char name[buffersize] ; 
  
  TIter next(fInputList) ; 	
  TObject * h ; 
  while ( (h = next()) ) 
  { 
    if(h)
    {
      if ( !strncmp(h->ClassName(),"TH",2) ) 
      {
        snprintf(name, buffersize, "%sScaled", h->GetName()) ; 
        
        TH1 * hout = dynamic_cast<TH1*> (h->Clone(name)) ; 
        
        if(hout)
        {
          if(fSumw2) hout->Sumw2();
          hout->Scale(fScale) ;  
          fOutputList->Add(hout) ;
        }// casting not null
      } 
      else  fOutputList->Add(h) ; 
    }
  }
  // number of files
  
  //File scaled, needed for file merging on grid
  fhCount->Fill(0);
  
  PostData(0, fOutputList);
  
}


//______________________
void AliAnaScale::Init()
{
  // Intialisation of parameters
  
  if(fDebug > 0 )printf("No initialization in scale class \n") ;

}

 AliAnaScale.cxx:1
 AliAnaScale.cxx:2
 AliAnaScale.cxx:3
 AliAnaScale.cxx:4
 AliAnaScale.cxx:5
 AliAnaScale.cxx:6
 AliAnaScale.cxx:7
 AliAnaScale.cxx:8
 AliAnaScale.cxx:9
 AliAnaScale.cxx:10
 AliAnaScale.cxx:11
 AliAnaScale.cxx:12
 AliAnaScale.cxx:13
 AliAnaScale.cxx:14
 AliAnaScale.cxx:15
 AliAnaScale.cxx:16
 AliAnaScale.cxx:17
 AliAnaScale.cxx:18
 AliAnaScale.cxx:19
 AliAnaScale.cxx:20
 AliAnaScale.cxx:21
 AliAnaScale.cxx:22
 AliAnaScale.cxx:23
 AliAnaScale.cxx:24
 AliAnaScale.cxx:25
 AliAnaScale.cxx:26
 AliAnaScale.cxx:27
 AliAnaScale.cxx:28
 AliAnaScale.cxx:29
 AliAnaScale.cxx:30
 AliAnaScale.cxx:31
 AliAnaScale.cxx:32
 AliAnaScale.cxx:33
 AliAnaScale.cxx:34
 AliAnaScale.cxx:35
 AliAnaScale.cxx:36
 AliAnaScale.cxx:37
 AliAnaScale.cxx:38
 AliAnaScale.cxx:39
 AliAnaScale.cxx:40
 AliAnaScale.cxx:41
 AliAnaScale.cxx:42
 AliAnaScale.cxx:43
 AliAnaScale.cxx:44
 AliAnaScale.cxx:45
 AliAnaScale.cxx:46
 AliAnaScale.cxx:47
 AliAnaScale.cxx:48
 AliAnaScale.cxx:49
 AliAnaScale.cxx:50
 AliAnaScale.cxx:51
 AliAnaScale.cxx:52
 AliAnaScale.cxx:53
 AliAnaScale.cxx:54
 AliAnaScale.cxx:55
 AliAnaScale.cxx:56
 AliAnaScale.cxx:57
 AliAnaScale.cxx:58
 AliAnaScale.cxx:59
 AliAnaScale.cxx:60
 AliAnaScale.cxx:61
 AliAnaScale.cxx:62
 AliAnaScale.cxx:63
 AliAnaScale.cxx:64
 AliAnaScale.cxx:65
 AliAnaScale.cxx:66
 AliAnaScale.cxx:67
 AliAnaScale.cxx:68
 AliAnaScale.cxx:69
 AliAnaScale.cxx:70
 AliAnaScale.cxx:71
 AliAnaScale.cxx:72
 AliAnaScale.cxx:73
 AliAnaScale.cxx:74
 AliAnaScale.cxx:75
 AliAnaScale.cxx:76
 AliAnaScale.cxx:77
 AliAnaScale.cxx:78
 AliAnaScale.cxx:79
 AliAnaScale.cxx:80
 AliAnaScale.cxx:81
 AliAnaScale.cxx:82
 AliAnaScale.cxx:83
 AliAnaScale.cxx:84
 AliAnaScale.cxx:85
 AliAnaScale.cxx:86
 AliAnaScale.cxx:87
 AliAnaScale.cxx:88
 AliAnaScale.cxx:89
 AliAnaScale.cxx:90
 AliAnaScale.cxx:91
 AliAnaScale.cxx:92
 AliAnaScale.cxx:93
 AliAnaScale.cxx:94
 AliAnaScale.cxx:95
 AliAnaScale.cxx:96
 AliAnaScale.cxx:97
 AliAnaScale.cxx:98
 AliAnaScale.cxx:99
 AliAnaScale.cxx:100
 AliAnaScale.cxx:101
 AliAnaScale.cxx:102
 AliAnaScale.cxx:103
 AliAnaScale.cxx:104
 AliAnaScale.cxx:105
 AliAnaScale.cxx:106
 AliAnaScale.cxx:107
 AliAnaScale.cxx:108
 AliAnaScale.cxx:109
 AliAnaScale.cxx:110
 AliAnaScale.cxx:111
 AliAnaScale.cxx:112
 AliAnaScale.cxx:113
 AliAnaScale.cxx:114
 AliAnaScale.cxx:115
 AliAnaScale.cxx:116
 AliAnaScale.cxx:117
 AliAnaScale.cxx:118
 AliAnaScale.cxx:119
 AliAnaScale.cxx:120
 AliAnaScale.cxx:121
 AliAnaScale.cxx:122
 AliAnaScale.cxx:123
 AliAnaScale.cxx:124
 AliAnaScale.cxx:125
 AliAnaScale.cxx:126
 AliAnaScale.cxx:127
 AliAnaScale.cxx:128
 AliAnaScale.cxx:129
 AliAnaScale.cxx:130
 AliAnaScale.cxx:131
 AliAnaScale.cxx:132
 AliAnaScale.cxx:133
 AliAnaScale.cxx:134
 AliAnaScale.cxx:135
 AliAnaScale.cxx:136
 AliAnaScale.cxx:137
 AliAnaScale.cxx:138
 AliAnaScale.cxx:139
 AliAnaScale.cxx:140
 AliAnaScale.cxx:141