* about the suitability of this software for any purpose. It is *
* provided "as is" without express or implied warranty. *
**************************************************************************/
+
+/* $Id$ */
+
//_________________________________________________________________________
// An analysis task to check the PHOS photon data in simulated data
+// An analysis task to check the PHOS photon data in simulated data
+// An analysis task to check the PHOS photon data in simulated data
+// An analysis task to check the PHOS photon data in simulated data
+// An analysis task to check the PHOS photon data in simulated data
+// An analysis task to check the PHOS photon data in simulated data
//
//*-- Yves Schutz
//////////////////////////////////////////////////////////////////////////////
+#include <TCanvas.h>
#include <TChain.h>
+#include <TFile.h>
#include <TH1.h>
-#include <TH1F.h>
-#include <TH1I.h>
#include <TNtuple.h>
-#include <TCanvas.h>
-#include <TLegend.h>
+#include <TROOT.h>
#include <TVector3.h>
-#include <TFile.h>
+#include <TString.h>
#include "AliPHOSQATask.h"
#include "AliESD.h"
AliAnalysisTask(name,""),
fChain(0),
fESD(0),
+ fOutputContainer(0),
+ fhPHOSPos(0),
fhPHOS(0),
fhPHOSEnergy(0),
fhPHOSDigits(0),
DefineOutput(0, TObjArray::Class()) ;
}
+//____________________________________________________________________________
+AliPHOSQATask::AliPHOSQATask(const AliPHOSQATask& ta) :
+ AliAnalysisTask(ta.GetName(),""),
+ fChain(ta.fChain),
+ fESD(ta.fESD),
+ fOutputContainer(ta.fOutputContainer),
+ fhPHOSPos(ta.fhPHOSPos),
+ fhPHOS(ta.fhPHOS),
+ fhPHOSEnergy(ta.fhPHOSEnergy),
+ fhPHOSDigits(ta.fhPHOSDigits),
+ fhPHOSRecParticles(ta.fhPHOSRecParticles),
+ fhPHOSPhotons(ta.fhPHOSPhotons),
+ fhPHOSInvariantMass(ta.fhPHOSInvariantMass),
+ fhPHOSDigitsEvent(ta.fhPHOSDigitsEvent)
+{
+ // cpy ctor
+}
+
+//_____________________________________________________________________________
+AliPHOSQATask& AliPHOSQATask::operator = (const AliPHOSQATask& ap)
+{
+// assignment operator
+
+ this->~AliPHOSQATask();
+ new(this) AliPHOSQATask(ap);
+ return *this;
+}
+
//______________________________________________________________________________
AliPHOSQATask::~AliPHOSQATask()
{
//______________________________________________________________________________
-void AliPHOSQATask::Init(const Option_t*)
+void AliPHOSQATask::ConnectInputData(const Option_t*)
{
// Initialisation of branch container and histograms
return ;
}
- if (!fESD) {
- // One should first check if the branch address was taken by some other task
- char ** address = (char **)GetBranchAddress(0, "ESD") ;
- if (address)
- fESD = (AliESD *)(*address) ;
- if (!fESD)
- fChain->SetBranchAddress("ESD", &fESD) ;
+ // One should first check if the branch address was taken by some other task
+ char ** address = (char **)GetBranchAddress(0, "ESD");
+ if (address) {
+ fESD = (AliESD*)(*address);
+ } else {
+ fESD = new AliESD();
+ SetBranchAddress(0, "ESD", &fESD);
}
- // The output objects will be written to
- TDirectory * cdir = gDirectory ;
- // Open a file for output #0
- char outputName[1024] ;
- sprintf(outputName, "%s.root", GetName() ) ;
- OpenFile(0, outputName , "RECREATE") ;
- if (cdir)
- cdir->cd() ;
-
+}
+
+//________________________________________________________________________
+void AliPHOSQATask::CreateOutputObjects()
+{
// create histograms
+ OpenFile(0) ;
+
fhPHOSPos = new TNtuple("PHOSPos" , "Position in PHOS" , "x:y:z");
fhPHOS = new TNtuple("PHOS" , "PHOS" , "event:digits:clusters:photons");
fhPHOSEnergy = new TH1D("PHOSEnergy" , "PHOSEnergy" , 1000, 0., 10. ) ;
//************************ PHOS *************************************
Int_t firstPhosCluster = fESD->GetFirstPHOSCluster() ;
- const Int_t numberOfPhosClusters = fESD->GetNumberOfPHOSClusters() ;
+ const Int_t kNumberOfPhosClusters = fESD->GetNumberOfPHOSClusters() ;
- TVector3 ** phosVector = new TVector3*[numberOfPhosClusters] ;
- Float_t * phosPhotonsEnergy = new Float_t[numberOfPhosClusters] ;
+ TVector3 ** phosVector = new TVector3*[kNumberOfPhosClusters] ;
+ Float_t * phosPhotonsEnergy = new Float_t[kNumberOfPhosClusters] ;
Int_t phosCluster ;
Int_t numberOfPhotonsInPhos = 0 ;
Int_t numberOfDigitsInPhos = 0 ;
// loop over the PHOS Cluster
- for(phosCluster = firstPhosCluster ; phosCluster < firstPhosCluster + numberOfPhosClusters ; phosCluster++) {
+ for(phosCluster = firstPhosCluster ; phosCluster < firstPhosCluster + kNumberOfPhosClusters ; phosCluster++) {
AliESDCaloCluster * caloCluster = fESD->GetCaloCluster(phosCluster) ;
if (caloCluster) {
Float_t pos[3] ;
- caloCluster->GetGlobalPosition( pos ) ;
- fhPHOSEnergy->Fill( caloCluster->GetClusterEnergy() ) ;
+ caloCluster->GetPosition( pos ) ;
+ fhPHOSEnergy->Fill( caloCluster->E() ) ;
fhPHOSPos->Fill( pos[0], pos[1], pos[2] ) ;
- fhPHOSDigits->Fill(entry, caloCluster->GetNumberOfDigits() ) ;
- numberOfDigitsInPhos += caloCluster->GetNumberOfDigits() ;
- Float_t * pid = caloCluster->GetPid() ;
+ fhPHOSDigits->Fill(entry, caloCluster->GetNCells() ) ;
+ numberOfDigitsInPhos += caloCluster->GetNCells() ;
+ const Double_t * pid = caloCluster->GetPID() ;
if(pid[AliPID::kPhoton] > 0.9) {
phosVector[numberOfPhotonsInPhos] = new TVector3(pos[0],pos[1],pos[2]) ;
- phosPhotonsEnergy[numberOfPhotonsInPhos]=caloCluster->GetClusterEnergy() ;
+ phosPhotonsEnergy[numberOfPhotonsInPhos]=caloCluster->E() ;
numberOfPhotonsInPhos++;
}
}
} //PHOS clusters
- fhPHOSRecParticles->Fill(numberOfPhosClusters);
+ fhPHOSRecParticles->Fill(kNumberOfPhosClusters);
fhPHOSPhotons->Fill(numberOfPhotonsInPhos);
fhPHOSDigitsEvent->Fill(numberOfDigitsInPhos);
- fhPHOS->Fill(entry, numberOfDigitsInPhos, numberOfPhosClusters, numberOfPhotonsInPhos) ;
+ fhPHOS->Fill(entry, numberOfDigitsInPhos, kNumberOfPhosClusters, numberOfPhotonsInPhos) ;
// invariant Mass
if (numberOfPhotonsInPhos > 1 ) {
void AliPHOSQATask::Terminate(Option_t *)
{
// Processing when the event loop is ended
-
- printf("PHOSEnergy Mean : %5.3f , RMS : %5.3f \n", fhPHOSEnergy->GetMean(), fhPHOSEnergy->GetRMS() ) ;
- printf("PHOSDigits Mean : %5.3f , RMS : %5.3f \n", fhPHOSDigits->GetMean(), fhPHOSDigits->GetRMS() ) ;
- printf("PHOSRecParticles Mean : %5.3f , RMS : %5.3f \n", fhPHOSRecParticles->GetMean(), fhPHOSRecParticles->GetRMS() ) ;
- printf("PHOSPhotons Mean : %5.3f , RMS : %5.3f \n", fhPHOSPhotons->GetMean(), fhPHOSPhotons->GetRMS() ) ;
- printf("PHOSInvariantMass Mean : %5.3f , RMS : %5.3f \n", fhPHOSInvariantMass->GetMean(), fhPHOSInvariantMass->GetRMS() ) ;
- printf("PHOSDigitsEvent Mean : %5.3f , RMS : %5.3f \n", fhPHOSDigitsEvent->GetMean(), fhPHOSDigitsEvent->GetRMS() ) ;
+
+ fOutputContainer = (TObjArray*)GetOutputData(0);
+ fhPHOSPos = (TNtuple*)fOutputContainer->At(0);
+ fhPHOS = (TNtuple*)fOutputContainer->At(1);
+ fhPHOSEnergy = (TH1D*)fOutputContainer->At(2);
+ fhPHOSDigits = (TH1I*)fOutputContainer->At(3);
+ fhPHOSRecParticles = (TH1D*)fOutputContainer->At(4);
+ fhPHOSPhotons = (TH1I*)fOutputContainer->At(5);
+ fhPHOSInvariantMass = (TH1D*)fOutputContainer->At(6);
+ fhPHOSDigitsEvent = (TH1I*)fOutputContainer->At(7);
+
+ Bool_t problem = kFALSE ;
+ AliInfo(Form(" *** %s Report:", GetName())) ;
+ printf(" PHOSEnergy Mean : %5.3f , RMS : %5.3f \n", fhPHOSEnergy->GetMean(), fhPHOSEnergy->GetRMS() ) ;
+ printf(" PHOSDigits Mean : %5.3f , RMS : %5.3f \n", fhPHOSDigits->GetMean(), fhPHOSDigits->GetRMS() ) ;
+ printf(" PHOSRecParticles Mean : %5.3f , RMS : %5.3f \n", fhPHOSRecParticles->GetMean(), fhPHOSRecParticles->GetRMS() ) ;
+ printf(" PHOSPhotons Mean : %5.3f , RMS : %5.3f \n", fhPHOSPhotons->GetMean(), fhPHOSPhotons->GetRMS() ) ;
+ printf(" PHOSInvariantMass Mean : %5.3f , RMS : %5.3f \n", fhPHOSInvariantMass->GetMean(), fhPHOSInvariantMass->GetRMS() ) ;
+ printf(" PHOSDigitsEvent Mean : %5.3f , RMS : %5.3f \n", fhPHOSDigitsEvent->GetMean(), fhPHOSDigitsEvent->GetRMS() ) ;
TCanvas * cPHOS = new TCanvas("cPHOS", "PHOS ESD Test", 400, 10, 600, 700) ;
cPHOS->Divide(3, 2);
cPHOS->cd(1) ;
- gPad->SetLogy();
+ if ( fhPHOSEnergy->GetMaximum() > 0. )
+ gPad->SetLogy();
fhPHOSEnergy->SetAxisRange(0, 25.);
fhPHOSEnergy->SetLineColor(2);
fhPHOSEnergy->Draw();
fhPHOSDigits->Draw();
cPHOS->cd(3) ;
- gPad->SetLogy();
+ if ( fhPHOSRecParticles->GetMaximum() > 0. )
+ gPad->SetLogy();
fhPHOSRecParticles->SetAxisRange(0, 25.);
fhPHOSRecParticles->SetLineColor(2);
fhPHOSRecParticles->Draw();
cPHOS->cd(4) ;
- gPad->SetLogy();
+ if ( fhPHOSPhotons->GetMaximum() > 0. )
+ gPad->SetLogy();
fhPHOSPhotons->SetAxisRange(0,25.);
fhPHOSPhotons->SetLineColor(2);
fhPHOSPhotons->Draw();
fhPHOSInvariantMass->Draw();
cPHOS->cd(6) ;
- gPad->SetLogy();
+ if ( fhPHOSDigitsEvent->GetMaximum() > 0. )
+ gPad->SetLogy();
fhPHOSDigitsEvent->SetAxisRange(0,40.);
fhPHOSDigitsEvent->SetLineColor(2);
fhPHOSDigitsEvent->Draw();
cPHOS->Print("PHOS.eps");
char line[1024] ;
- sprintf(line, ".!tar -zcvf %s.tar.gz *.eps", GetName()) ;
+ sprintf(line, ".!tar -zcf %s.tar.gz *.eps", GetName()) ;
gROOT->ProcessLine(line);
sprintf(line, ".!rm -fR *.eps");
gROOT->ProcessLine(line);
- AliInfo(Form("!!! All the eps files are in %s.tar.gz !!! \n", GetName())) ;
+ AliInfo(Form("!!! All the eps files are in %s.tar.gz !!!", GetName())) ;
+
+ TString report ;
+ if(problem)
+ report="Problems found, please check!!!";
+ else
+ report="OK";
+
+ AliInfo(Form("*** %s Summary Report: %s \n",GetName(), report.Data())) ;
}