#include "TH2.h"
#include "TH2.h"
#include "TParticle.h"
+#include "TDatabasePDG.h"
#include "TClonesArray.h"
-#include "TTree.h"
#include "TMath.h"
#include "TROOT.h"
-#include "TFolder.h"
// --- Standard library ---
// --- AliRoot header files ---
-#include "AliRun.h"
+#include "AliLog.h"
#include "AliStack.h"
-#include "AliPHOSv1.h"
+#include "AliPHOSGeometry.h"
#include "AliPHOSAnalyze.h"
#include "AliPHOSDigit.h"
#include "AliPHOSSDigitizer.h"
+#include "AliPHOSEmcRecPoint.h"
+#include "AliPHOSCpvRecPoint.h"
#include "AliPHOSTrackSegment.h"
#include "AliPHOSRecParticle.h"
-#include "AliPHOSCpvRecPoint.h"
#include "AliPHOSLoader.h"
ClassImp(AliPHOSAnalyze)
//____________________________________________________________________________
- AliPHOSAnalyze::AliPHOSAnalyze()
+AliPHOSAnalyze::AliPHOSAnalyze():
+ fCorrection(1.2), //Value calculated for default parameters of reconstruction
+ fEvt(0),
+ ffileName(),
+ fRunLoader(0)
{
// default ctor (useless)
- fCorrection = 1.2 ; //Value calculated for default parameters of reconstruction
- fRunLoader = 0x0;
}
//____________________________________________________________________________
-AliPHOSAnalyze::AliPHOSAnalyze(Text_t * fileName)
+AliPHOSAnalyze::AliPHOSAnalyze(Text_t * fileName):
+ fCorrection(1.05), //Value calculated for default parameters of reconstruction
+ fEvt(0),
+ ffileName(fileName),
+ fRunLoader(0)
{
// ctor: analyze events from root file "name"
- ffileName = fileName;
- fCorrection = 1.05 ; //Value calculated for default parameters of reconstruction
fRunLoader = AliRunLoader::Open(fileName,"AliPHOSAnalyze");
if (fRunLoader == 0x0)
{
- Error("AliPHOSAnalyze","Error Loading session");
+ AliError(Form("Error Loading session"));
}
}
//____________________________________________________________________________
-AliPHOSAnalyze::AliPHOSAnalyze(const AliPHOSAnalyze & ana)
+AliPHOSAnalyze::AliPHOSAnalyze(const AliPHOSAnalyze & ana):
+ TObject(ana),
+ fCorrection(0.),
+ fEvt(0),
+ ffileName(),
+ fRunLoader(0)
{
// copy ctor
( (AliPHOSAnalyze &)ana ).Copy(*this) ;
}
//____________________________________________________________________________
-void AliPHOSAnalyze::DrawRecon(Int_t Nevent,Int_t Nmod,const char * branchName,const char* branchTitle){
+void AliPHOSAnalyze::DrawRecon(Int_t Nevent,Int_t Nmod){
//Draws pimary particles and reconstructed
//digits, RecPoints, RecPartices etc
//for event Nevent in the module Nmod.
//========== Create ObjectLoader
if (fRunLoader == 0x0)
{
- Error("DrawRecon","Error Loading session");
+ AliError(Form("Error Loading session"));
return;
}
AliPHOSLoader* gime = dynamic_cast<AliPHOSLoader*>(fRunLoader->GetLoader("PHOSLoader"));
if ( gime == 0 )
{
- Error("DrawRecon","Could not obtain the Loader object !");
+ AliError(Form("Could not obtain the Loader object !"));
return ;
}
if(Nevent >= fRunLoader->GetNumberOfEvents() ) {
- Error("DrawRecon", "There is no event %d only %d events available", Nevent, fRunLoader->GetNumberOfEvents() ) ;
+ AliError(Form("There is no event %d only %d events available", Nevent, fRunLoader->GetNumberOfEvents() )) ;
return ;
}
- const AliPHOSGeometry * phosgeom = gime->PHOSGeometry() ;
+ AliPHOSGeometry * phosgeom = AliPHOSGeometry::GetInstance() ;
fRunLoader->GetEvent(Nevent);
Int_t nx = phosgeom->GetNPhi() ;
Int_t nz = phosgeom->GetNZ() ;
- Float_t * cri= phosgeom->GetEMCAGeometry()->GetCrystalHalfSize() ;
+ const Float_t * cri= phosgeom->GetEMCAGeometry()->GetCrystalHalfSize() ;
Float_t x = nx*cri[0] ;
Float_t z = nz*cri[2] ;
Int_t nxCPV = (Int_t) (nx*phosgeom->GetPadSizePhi()/(2.*cri[0])) ;
recPhot->Delete() ;
recPhot = new TH2F("recPhot","RecParticles with primary Photon",nx,-x,x,nz,-z,z);
+ //Get Vertex
+ Double_t vtx[3]={0.,0.,0.} ;
+//DP: extract vertex either from Generator or from data
+
//Plot Primary Particles
if( primaryType == 22 ) {
Int_t moduleNumber ;
Double_t primX, primZ ;
- phosgeom->ImpactOnEmc(primary->Theta(), primary->Phi(), moduleNumber, primX, primZ) ;
+ phosgeom->ImpactOnEmc(vtx,primary->Theta(), primary->Phi(), moduleNumber, primX, primZ) ;
if(moduleNumber==Nmod)
phot->Fill(primZ,primX,primary->Energy()) ;
}
sdigit = (AliPHOSDigit *) sdigits->At(iSDigit) ;
Int_t relid[4];
phosgeom->AbsToRelNumbering(sdigit->GetId(), relid) ;
- Float_t x,z ;
- phosgeom->RelPosInModule(relid,x,z);
- AliPHOSSDigitizer* sd = dynamic_cast<AliPHOSSDigitizer*>(gime->SDigitizer());
- Float_t e = sd->Calibrate(sdigit->GetAmp()) ;
+ Float_t xd,zd ;
+ phosgeom->RelPosInModule(relid,xd,zd);
+ Float_t e = sdigit->GetEnergy() ;
nsdig[relid[0]-1]++ ;
if(relid[0]==Nmod){
if(relid[1]==0) //EMC
- emcSdigits->Fill(x,z,e) ;
+ emcSdigits->Fill(xd,zd,e) ;
if( relid[1]!=0 )
- cpvSdigits->Fill(x,z,e) ;
+ cpvSdigits->Fill(xd,zd,e) ;
}
}
}
TString message ;
message = "Number of EMC + CPV SDigits per module: \n" ;
message += "%d %d %d %d %d\n";
- Info("DrawRecon", message.Data(), nsdig[0], nsdig[1], nsdig[2], nsdig[3], nsdig[4] ) ;
+ AliInfo(Form(message.Data(), nsdig[0], nsdig[1], nsdig[2], nsdig[3], nsdig[4] )) ;
//Plot digits
Int_t iDigit ;
digit = (AliPHOSDigit *) digits->At(iDigit) ;
Int_t relid[4];
phosgeom->AbsToRelNumbering(digit->GetId(), relid) ;
- Float_t x,z ;
- phosgeom->RelPosInModule(relid,x,z) ;
- AliPHOSSDigitizer* sd = dynamic_cast<AliPHOSSDigitizer*>(gime->SDigitizer());
- Float_t e = sd->Calibrate(digit->GetAmp()) ;
+ Float_t xd,zd ;
+ phosgeom->RelPosInModule(relid,xd,zd) ;
+ Float_t e = digit->GetEnergy() ;
if(relid[0]==Nmod){
if(relid[1]==0) //EMC
- emcDigits->Fill(x,z,e) ;
+ emcDigits->Fill(xd,zd,e) ;
if( relid[1]!=0 )
- cpvDigits->Fill(x,z,e) ;
+ cpvDigits->Fill(xd,zd,e) ;
}
}
}
recParticle = (AliPHOSRecParticle *) rp->At(iRecParticle) ;
Int_t moduleNumberRec ;
Double_t recX, recZ ;
- phosgeom->ImpactOnEmc(recParticle->Theta(), recParticle->Phi(), moduleNumberRec, recX, recZ) ;
+ phosgeom->ImpactOnEmc(vtx,recParticle->Theta(), recParticle->Phi(), moduleNumberRec, recX, recZ) ;
if(moduleNumberRec == Nmod){
Double_t minDistance = 5. ;
Int_t numberofprimaries ;
Int_t * listofprimaries = ((AliPHOSRecPoint*) emcrp->At(emcIndex))->GetPrimaries(numberofprimaries) ;
Int_t index ;
- const TParticle * primary ;
+ const TParticle * primPart ;
Double_t distance = minDistance ;
for ( index = 0 ; index < numberofprimaries ; index++){
- primary = fRunLoader->Stack()->Particle(listofprimaries[index]) ;
+ primPart = fRunLoader->Stack()->Particle(listofprimaries[index]) ;
Int_t moduleNumber ;
Double_t primX, primZ ;
- phosgeom->ImpactOnEmc(primary->Theta(), primary->Phi(), moduleNumber, primX, primZ) ;
+ phosgeom->ImpactOnEmc(vtx,primPart->Theta(), primPart->Phi(), moduleNumber, primX, primZ) ;
if(moduleNumberRec == moduleNumber)
distance = TMath::Sqrt((recX-primX)*(recX-primX)+(recZ-primZ)*(recZ-primZ) ) ;
if(minDistance > distance)
if (fRunLoader == 0x0)
{
- Error("Ls","Error Loading session");
+ AliError(Form("Error Loading session"));
return;
}
AliPHOSLoader* gime = dynamic_cast<AliPHOSLoader*>(fRunLoader->GetLoader("PHOSLoader"));
if ( gime == 0 )
{
- Error("Ls","Could not obtain the Loader object !");
+ AliError(Form("Could not obtain the Loader object !"));
return ;
}
{
if (gime->LoadSDigits("READ"))
{
- Error("Ls","Problems with loading summable digits");
+ AliError(Form("Problems with loading summable digits"));
return;
}
}
{
if (gime->LoadDigits("READ"))
{
- Error("Ls","Problems with loading digits");
+ AliError(Form("Problems with loading digits"));
return;
}
}
{
if (gime->LoadRecPoints("READ"))
{
- Error("Ls","Problems with loading rec points");
+ AliError(Form("Problems with loading rec points"));
return;
}
}
message += "\n" ;
}
}
- Info("LS", message.Data()) ;
+ AliInfo(Form(message.Data())) ;
}
//____________________________________________________________________________
- void AliPHOSAnalyze::InvariantMass(const char* branchTitle)
+ void AliPHOSAnalyze::InvariantMass()
{
// Calculates Real and Mixed invariant mass distributions
if (fRunLoader == 0x0)
{
- Error("DrawRecon","Error Loading session");
+ AliError(Form("Error Loading session"));
return;
}
AliPHOSLoader* gime = dynamic_cast<AliPHOSLoader*>(fRunLoader->GetLoader("PHOSLoader"));
if ( gime == 0 )
{
- Error("DrawRecon","Could not obtain the Loader object !");
+ AliError(Form("Could not obtain the Loader object !"));
return ;
}
Int_t iRecParticle ;
TClonesArray * rp = gime->RecParticles() ;
if(!rp){
- Error("InvariantMass", "Can't find RecParticles") ;
+ AliError(Form("Can't find RecParticles")) ;
return ;
}
nRecParticles[mevent] = iRecPhot-1 ;
//check, if it is time to calculate invariant mass?
- Int_t maxevent = (Int_t)gAlice->TreeE()->GetEntries() ;
if((mevent == 0) && (event +1 == maxevent)){
// if((mevent == 0) && (event +1 == gime->MaxEvent())){
}
//____________________________________________________________________________
- void AliPHOSAnalyze::EnergyResolution(const char * branchTitle)
+ void AliPHOSAnalyze::EnergyResolution()
{
//fills two dimentional histo: energy of primary vs. energy of reconstructed
if (fRunLoader == 0x0)
{
- Error("DrawRecon","Error Loading session");
+ AliError(Form("Error Loading session"));
return;
}
AliPHOSLoader* gime = dynamic_cast<AliPHOSLoader*>(fRunLoader->GetLoader("PHOSLoader"));
if ( gime == 0 )
{
- Error("DrawRecon","Could not obtain the Loader object !");
+ AliError(Form("Could not obtain the Loader object !"));
return ;
}
- const AliPHOSGeometry * phosgeom = gime->PHOSGeometry();
+ AliPHOSGeometry * phosgeom = AliPHOSGeometry::GetInstance() ;
Int_t ievent;
Int_t maxevent = (Int_t)fRunLoader->TreeE()->GetEntries();
//read the current event
fRunLoader->GetEvent(ievent) ;
+ Double_t vtx[3]={0.,0.,0.} ;
+
const AliPHOSRecParticle * recParticle ;
Int_t iRecParticle ;
TClonesArray * rp = gime->RecParticles() ;
if(!rp) {
- Error("EnergyResolution", "Event %d, Can't find RecParticles ", ievent) ;
+ AliError(Form("Event %d, Can't find RecParticles ", ievent)) ;
return ;
}
TClonesArray * ts = gime->TrackSegments() ;
if(!ts) {
- Error("EnergyResolution", "Event %d, Can't find TrackSegments", ievent) ;
+ AliError(Form("Event %d, Can't find TrackSegments", ievent)) ;
return ;
}
TObjArray * emcrp = gime->EmcRecPoints() ;
if(!emcrp){
- Error("EnergyResolution", "Event %d, Can't find EmcRecPoints") ;
+ AliError(Form("Event %d, Can't find EmcRecPoints")) ;
return ;
}
//find the closest primary
Int_t moduleNumberRec ;
Double_t recX, recZ ;
- phosgeom->ImpactOnEmc(recParticle->Theta(), recParticle->Phi(), moduleNumberRec, recX, recZ) ;
+ phosgeom->ImpactOnEmc(vtx,recParticle->Theta(), recParticle->Phi(), moduleNumberRec, recX, recZ) ;
Double_t minDistance = 100. ;
Int_t closestPrimary = -1 ;
Int_t moduleNumber ;
Double_t primX, primZ ;
- phosgeom->ImpactOnEmc(primary->Theta(), primary->Phi(), moduleNumber, primX, primZ) ;
+ phosgeom->ImpactOnEmc(vtx,primary->Theta(), primary->Phi(), moduleNumber, primX, primZ) ;
if(moduleNumberRec == moduleNumber) {
dX = recX - primX;
dZ = recZ - primZ;
//if found primary, fill histograms
if(closestPrimary >=0 ){
- const TParticle * primary = fRunLoader->Stack()->Particle(closestPrimary) ;
+ primary = fRunLoader->Stack()->Particle(closestPrimary) ;
if(primary->GetPdgCode() == 22){
hAllEnergy->Fill(primary->Energy(), recParticle->Energy()) ;
if(recParticle->GetType() == AliPHOSFastRecParticle::kNEUTRALEMFAST){
}
//____________________________________________________________________________
-void AliPHOSAnalyze::PositionResolution(const char * branchTitle)
+void AliPHOSAnalyze::PositionResolution()
{
//fills two dimentional histo: energy vs. primary - reconstructed distance
if (fRunLoader == 0x0)
{
- Error("DrawRecon","Error Loading session");
+ AliError(Form("Error Loading session"));
return;
}
AliPHOSLoader* gime = dynamic_cast<AliPHOSLoader*>(fRunLoader->GetLoader("PHOSLoader"));
if ( gime == 0 )
{
- Error("DrawRecon","Could not obtain the Loader object !");
+ AliError(Form("Could not obtain the Loader object !"));
return ;
}
if (fRunLoader->TreeE() == 0x0) fRunLoader->LoadHeader();
- const AliPHOSGeometry * phosgeom = gime->PHOSGeometry() ;
+ AliPHOSGeometry * phosgeom = AliPHOSGeometry::GetInstance() ;
Int_t ievent;
Int_t maxevent = (Int_t)fRunLoader->TreeE()->GetEntries() ;
//read the current event
fRunLoader->GetEvent(ievent) ;
+
+ //DP:Extract vertex position
+ Double_t vtx[3]={0.,0.,0.} ;
+
TClonesArray * rp = gime->RecParticles() ;
if(!rp) {
- Error("PositionResolution", "Event %d, Can't find RecParticles", ievent) ;
+ AliError(Form("Event %d, Can't find RecParticles", ievent)) ;
return ;
}
TClonesArray * ts = gime->TrackSegments() ;
if(!ts) {
- Error("PositionResolution", "Event %d, Can't find TrackSegments", ievent) ;
+ AliError(Form("Event %d, Can't find TrackSegments", ievent)) ;
return ;
}
TObjArray * emcrp = gime->EmcRecPoints() ;
if(!emcrp){
- Error("PositionResolution", "Event %d, Can't find EmcRecPoints", ievent) ;
+ AliError(Form("Event %d, Can't find EmcRecPoints", ievent)) ;
return ;
}
//find the closest primary
Int_t moduleNumberRec ;
Double_t recX, recZ ;
- phosgeom->ImpactOnEmc(recParticle->Theta(), recParticle->Phi(), moduleNumberRec, recX, recZ) ;
+ phosgeom->ImpactOnEmc(vtx,recParticle->Theta(), recParticle->Phi(), moduleNumberRec, recX, recZ) ;
Double_t minDistance = 100. ;
Int_t closestPrimary = -1 ;
primary = fRunLoader->Stack()->Particle(listofprimaries[index]) ;
Int_t moduleNumber ;
Double_t primX, primZ ;
- phosgeom->ImpactOnEmc(primary->Theta(), primary->Phi(), moduleNumber, primX, primZ) ;
+ phosgeom->ImpactOnEmc(vtx,primary->Theta(), primary->Phi(), moduleNumber, primX, primZ) ;
if(moduleNumberRec == moduleNumber) {
dX = recX - primX;
dZ = recZ - primZ;
//if found primary, fill histograms
if(closestPrimary >=0 ){
- const TParticle * primary = fRunLoader->Stack()->Particle(closestPrimary) ;
+ primary = fRunLoader->Stack()->Particle(closestPrimary) ;
if(primary->GetPdgCode() == 22){
hAllPosition->Fill(primary->Energy(), minDistance) ;
hAllPositionX->Fill(primary->Energy(), dX) ;
}
//____________________________________________________________________________
-void AliPHOSAnalyze::Contamination(const char* RecPointsTitle){
+void AliPHOSAnalyze::Contamination(){
// fills spectra of primary photons and several kinds of
// reconstructed particles, so that analyzing them one can
// estimate conatmination, efficiency of registration etc.
if (fRunLoader == 0x0)
{
- Error("DrawRecon","Error Loading session");
+ AliError(Form("Error Loading session"));
return;
}
AliPHOSLoader* gime = dynamic_cast<AliPHOSLoader*>(fRunLoader->GetLoader("PHOSLoader"));
if ( gime == 0 )
{
- Error("DrawRecon","Could not obtain the Loader object !");
+ AliError(Form("Could not obtain the Loader object !"));
return ;
}
if (fRunLoader->TreeE() == 0x0) fRunLoader->LoadHeader();
- const AliPHOSGeometry * phosgeom = gime->PHOSGeometry() ;
+ AliPHOSGeometry * phosgeom = AliPHOSGeometry::GetInstance() ;
Int_t ievent;
Int_t maxevent = (Int_t)fRunLoader->TreeE()->GetEntries() ;
fRunLoader->GetEvent(ievent) ;
+ //DP:Extract vertex position
+ Double_t vtx[3]={0.,0.,0.} ;
+
TClonesArray * rp = gime->RecParticles() ;
if(!rp) {
- Error("Contamination", "Event %d, Can't find RecParticles", ievent) ;
+ AliError(Form("Event %d, Can't find RecParticles", ievent)) ;
return ;
}
TClonesArray * ts = gime->TrackSegments() ;
if(!ts) {
- Error("Contamination", "Event %d, Can't find TrackSegments", ievent) ;
+ AliError(Form("Event %d, Can't find TrackSegments", ievent)) ;
return ;
}
TObjArray * emcrp = gime->EmcRecPoints() ;
if(!emcrp){
- Error("Contamination", "Event %d, Can't find EmcRecPoints", ievent) ;
+ AliError(Form("Event %d, Can't find EmcRecPoints", ievent)) ;
return ;
}
//check, if photons folls onto PHOS
Int_t moduleNumber ;
Double_t primX, primZ ;
- phosgeom->ImpactOnEmc(primary->Theta(), primary->Phi(), moduleNumber, primX, primZ) ;
+ phosgeom->ImpactOnEmc(vtx,primary->Theta(), primary->Phi(), moduleNumber, primX, primZ) ;
if(moduleNumber)
hPrimary->Fill(primary->Energy()) ;
//==========find the closest primary
Int_t moduleNumberRec ;
Double_t recX, recZ ;
- phosgeom->ImpactOnEmc(recParticle->Theta(), recParticle->Phi(), moduleNumberRec, recX, recZ) ;
+ phosgeom->ImpactOnEmc(vtx,recParticle->Theta(), recParticle->Phi(), moduleNumberRec, recX, recZ) ;
Double_t minDistance = 100. ;
Int_t closestPrimary = -1 ;
Int_t numberofprimaries ;
Int_t * listofprimaries = ((AliPHOSEmcRecPoint *) emcrp->At(emcIndex))->GetPrimaries(numberofprimaries) ;
Int_t index ;
- const TParticle * primary ;
Double_t distance = minDistance ;
Double_t dX, dZ;
Double_t dXmin = 0.;
primary = fRunLoader->Stack()->Particle(listofprimaries[index]) ;
Int_t moduleNumber ;
Double_t primX, primZ ;
- phosgeom->ImpactOnEmc(primary->Theta(), primary->Phi(), moduleNumber, primX, primZ) ;
+ phosgeom->ImpactOnEmc(vtx,primary->Theta(), primary->Phi(), moduleNumber, primX, primZ) ;
if(moduleNumberRec == moduleNumber) {
dX = recX - primX;
dZ = recZ - primZ;
//===========define the "type" of closest primary
if(closestPrimary >=0 ){
Int_t primaryCode = -1;
- const TParticle * primary = fRunLoader->Stack()->Particle(closestPrimary) ;
+ primary = fRunLoader->Stack()->Particle(closestPrimary) ;
Int_t primaryType = primary->GetPdgCode() ;
if(primaryType == 22) // photon ?
primaryCode = 0 ;
//print Final Table
- maxevent = (Int_t)gAlice->TreeE()->GetEntries() ;
+ maxevent = (Int_t)AliRunLoader::Instance()->TreeE()->GetEntries() ;
TString message ;
message = "Resolutions: Analyzed %d event(s)\n" ;
totalInd+=counter[i1][i2] ;
message += "Indentified particles: %d" ;
- Info("Contamination", message.Data(), maxevent,
+ AliInfo(Form(message.Data(), maxevent,
counter[2][0], counter[2][1], counter[2][2], counter[2][3], counter[2][4],
counter[3][0], counter[3][1], counter[3][2], counter[3][3], counter[3][4],
counter[0][0], counter[0][1], counter[0][2], counter[0][3], counter[0][4],
counter[5][0], counter[5][1], counter[5][2], counter[5][3], counter[5][4],
counter[6][0], counter[6][1], counter[6][2], counter[6][3], counter[6][4],
counter[7][0], counter[7][1], counter[7][2], counter[7][3], counter[7][4],
- totalInd ) ;
+ totalInd )) ;
}