]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PHOS/AliPHOSAnalyze.cxx
Add virtual 'void FillClusterArray(TObjArray* array)' that will allow for extraction...
[u/mrichter/AliRoot.git] / PHOS / AliPHOSAnalyze.cxx
index d1c00684761fc915d1b76a3f34a435f0706bb3b9..d6254482c932cac34bf0d32ff6bef7465e8066bc 100644 (file)
@@ -159,7 +159,7 @@ void AliPHOSAnalyze::DrawRecon(Int_t Nevent,Int_t Nmod){
     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() ;
@@ -204,6 +204,10 @@ void AliPHOSAnalyze::DrawRecon(Int_t Nevent,Int_t Nmod){
     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
   
@@ -228,7 +232,7 @@ void AliPHOSAnalyze::DrawRecon(Int_t Nevent,Int_t Nmod){
       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()) ;
       }
@@ -256,8 +260,7 @@ void AliPHOSAnalyze::DrawRecon(Int_t Nevent,Int_t Nmod){
        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 e = sdigit->GetEnergy() ;
        nsdig[relid[0]-1]++ ;
        if(relid[0]==Nmod){
          if(relid[1]==0)  //EMC
@@ -284,8 +287,7 @@ void AliPHOSAnalyze::DrawRecon(Int_t Nevent,Int_t Nmod){
        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 e = digit->GetEnergy() ;
        if(relid[0]==Nmod){
          if(relid[1]==0)  //EMC
            emcDigits->Fill(x,z,e) ;
@@ -332,7 +334,7 @@ void AliPHOSAnalyze::DrawRecon(Int_t Nevent,Int_t Nmod){
        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. ;
@@ -350,7 +352,7 @@ void AliPHOSAnalyze::DrawRecon(Int_t Nevent,Int_t Nmod){
            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)
              distance = TMath::Sqrt((recX-primX)*(recX-primX)+(recZ-primZ)*(recZ-primZ) ) ;
            if(minDistance > distance)
@@ -677,7 +679,7 @@ void AliPHOSAnalyze::Ls(){
    } 
 
 
-  const AliPHOSGeometry * phosgeom = gime->PHOSGeometry();
+  AliPHOSGeometry * phosgeom =  AliPHOSGeometry::GetInstance() ;
 
   Int_t ievent;
   Int_t maxevent = (Int_t)fRunLoader->TreeE()->GetEntries();
@@ -690,6 +692,8 @@ void AliPHOSAnalyze::Ls(){
     //read the current event
     fRunLoader->GetEvent(ievent) ;
 
+    Double_t vtx[3]={0.,0.,0.} ;  
+
     const AliPHOSRecParticle * recParticle ;
     Int_t iRecParticle ;
     TClonesArray * rp = gime->RecParticles() ;
@@ -714,7 +718,7 @@ void AliPHOSAnalyze::Ls(){
       //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 ;
@@ -736,7 +740,7 @@ void AliPHOSAnalyze::Ls(){
 
        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;
@@ -831,7 +835,7 @@ void AliPHOSAnalyze::PositionResolution()
   
   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() ; 
@@ -839,6 +843,10 @@ void AliPHOSAnalyze::PositionResolution()
     
     //read the current event
     fRunLoader->GetEvent(ievent) ;
+
+    //DP:Extract vertex position
+    Double_t vtx[3]={0.,0.,0.} ;  
+
     TClonesArray * rp = gime->RecParticles() ;
     if(!rp) {
       AliError(Form("Event %d,  Can't find RecParticles", ievent)) ;
@@ -864,7 +872,7 @@ void AliPHOSAnalyze::PositionResolution()
       //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 ;
@@ -885,7 +893,7 @@ void AliPHOSAnalyze::PositionResolution()
        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;
@@ -1052,7 +1060,7 @@ void AliPHOSAnalyze::Contamination(){
    } 
   
   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() ; 
@@ -1060,6 +1068,9 @@ void AliPHOSAnalyze::Contamination(){
     
     fRunLoader->GetEvent(ievent) ;
     
+    //DP:Extract vertex position
+    Double_t vtx[3]={0.,0.,0.} ;
+
     TClonesArray * rp = gime->RecParticles() ;
     if(!rp) {
       AliError(Form("Event %d,  Can't find RecParticles", ievent)) ;
@@ -1087,7 +1098,7 @@ void AliPHOSAnalyze::Contamination(){
        //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()) ;
        
@@ -1106,7 +1117,7 @@ void AliPHOSAnalyze::Contamination(){
       //==========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 ;
@@ -1125,7 +1136,7 @@ void AliPHOSAnalyze::Contamination(){
        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;