LCOV - code coverage report
Current view: top level - STEER/AOD - AliAODZDC.cxx (source / functions) Hit Total Coverage
Test: coverage.info Lines: 49 212 23.1 %
Date: 2016-06-14 17:26:59 Functions: 7 14 50.0 %

          Line data    Source code
       1             : /**************************************************************************
       2             :  * Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
       3             :  *                                                                        *
       4             :  * Author: The ALICE Off-line Project.                                    *
       5             :  * Contributors are mentioned in the code where appropriate.              *
       6             :  *                                                                        *
       7             :  * Permission to use, copy, modify and distribute this software and its   *
       8             :  * documentation strictly for non-commercial purposes is hereby granted   *
       9             :  * without fee, provided that the above copyright notice appears in all   *
      10             :  * copies and that both the copyright notice and this permission notice   *
      11             :  * appear in the supporting documentation. The authors make no claims     *
      12             :  * about the suitability of this software for any purpose. It is          *
      13             :  * provided "as is" without express or implied warranty.                  *
      14             :  **************************************************************************/
      15             : 
      16             : //-------------------------------------------------------------------------
      17             : //     Class for AOD ZDC data
      18             : //     Author: Chiara Oppedisano
      19             : //     Chiara.Oppedisano@cern.ch March 2011
      20             : //-------------------------------------------------------------------------
      21             : 
      22             : #include <TMath.h>
      23             : #include "AliAODZDC.h"
      24             : 
      25         170 : ClassImp(AliAODZDC)
      26             : 
      27             : AliAODZDC::AliAODZDC() :
      28           2 :   AliVZDC(),
      29           2 :   fZNCEnergy(-999.),
      30           2 :   fZNAEnergy(-999.),
      31           2 :   fZPCEnergy(-999.),
      32           2 :   fZPAEnergy(-999.),
      33           2 :   fZEM1Energy(0.),
      34           2 :   fZEM2Energy(0.),
      35           2 :   fZDCParticipants(0),
      36           2 :   fZDCPartSideA(0),
      37           2 :   fZDCPartSideC(0),
      38           2 :   fImpactParameter(0),
      39           2 :   fImpactParamSideA(0),
      40           2 :   fImpactParamSideC(0),
      41           2 :   fZDCTDCSum(0),         
      42           2 :   fZDCTDCDifference(0),
      43           2 :   fZNCTDC(-999.),
      44           2 :   fZNATDC(-999.),
      45           2 :   fZPCTDC(-999.),
      46           2 :   fZPATDC(-999.),
      47           2 :   fIsZNAfired(kFALSE),
      48           2 :   fIsZNCfired(kFALSE),
      49           2 :   fIsZPAfired(kFALSE),
      50           2 :   fIsZPCfired(kFALSE)
      51          10 : {
      52             : // Default constructor
      53          24 :   for(Int_t i=0; i<5; i++){
      54          10 :     fZNCTowerEnergy[i] = fZNATowerEnergy[i] = 0.;
      55          10 :     fZPCTowerEnergy[i] = fZPATowerEnergy[i] = 0.;
      56          10 :     fZNCTowerEnergyLR[i] = fZNATowerEnergyLR[i] = 0.;
      57          10 :     fZPCTowerEnergyLR[i] = fZPATowerEnergyLR[i] = 0.;
      58             :   }
      59          20 :   for(Int_t i=0; i<4; i++){
      60           8 :      fZNCTDCm[i] =  fZNATDCm[i] =  fZPCTDCm[i] = fZPATDCm[i] = -999.;
      61             :   }
      62           4 : }
      63             : 
      64             : //__________________________________________________________________________
      65             : AliAODZDC::AliAODZDC(const AliAODZDC &zdcAOD) :
      66           0 :   AliVZDC(zdcAOD),
      67           0 :   fZNCEnergy(zdcAOD.fZNCEnergy),
      68           0 :   fZNAEnergy(zdcAOD.fZNAEnergy),
      69           0 :   fZPCEnergy(zdcAOD.fZPCEnergy),
      70           0 :   fZPAEnergy(zdcAOD.fZPAEnergy),
      71           0 :   fZEM1Energy(zdcAOD.fZEM1Energy),
      72           0 :   fZEM2Energy(zdcAOD.fZEM2Energy),
      73           0 :   fZDCParticipants(zdcAOD.fZDCParticipants),
      74           0 :   fZDCPartSideA(zdcAOD.fZDCPartSideA),
      75           0 :   fZDCPartSideC(zdcAOD.fZDCPartSideC),
      76           0 :   fImpactParameter(zdcAOD.fImpactParameter),
      77           0 :   fImpactParamSideA(zdcAOD.fImpactParamSideA),
      78           0 :   fImpactParamSideC(zdcAOD.fImpactParamSideC),
      79           0 :   fZDCTDCSum(zdcAOD.fZDCTDCSum),         
      80           0 :   fZDCTDCDifference(zdcAOD.fZDCTDCDifference),
      81           0 :   fZNCTDC(zdcAOD.fZNCTDC),
      82           0 :   fZNATDC(zdcAOD.fZNATDC),
      83           0 :   fZPCTDC(zdcAOD.fZPCTDC),
      84           0 :   fZPATDC(zdcAOD.fZPATDC),
      85           0 :   fIsZNAfired(zdcAOD.fIsZNAfired),
      86           0 :   fIsZNCfired(zdcAOD.fIsZNCfired),
      87           0 :   fIsZPAfired(zdcAOD.fIsZPAfired),
      88           0 :   fIsZPCfired(zdcAOD.fIsZPCfired)
      89             : 
      90           0 : {
      91             : // Constructor
      92           0 :   for(Int_t i=0; i<5; i++){
      93           0 :     fZNCTowerEnergy[i] = zdcAOD.fZNCTowerEnergy[i];
      94           0 :     fZNATowerEnergy[i] = zdcAOD.fZNATowerEnergy[i];
      95           0 :     fZPCTowerEnergy[i] = zdcAOD.fZPCTowerEnergy[i];
      96           0 :     fZPATowerEnergy[i] = zdcAOD.fZPATowerEnergy[i];
      97           0 :     fZNCTowerEnergyLR[i] = zdcAOD.fZNCTowerEnergyLR[i];
      98           0 :     fZNATowerEnergyLR[i] = zdcAOD.fZNATowerEnergyLR[i];
      99           0 :     fZPCTowerEnergyLR[i] = zdcAOD.fZPCTowerEnergyLR[i];
     100           0 :     fZPATowerEnergyLR[i] = zdcAOD.fZPATowerEnergyLR[i];
     101             :   }
     102           0 :   for(Int_t i=0; i<4; i++){
     103           0 :      fZNCTDCm[i] =  zdcAOD.fZNCTDCm[i];
     104           0 :      fZNATDCm[i] =  zdcAOD.fZNATDCm[i];
     105           0 :      fZPCTDCm[i] =  zdcAOD.fZPCTDCm[i];
     106           0 :      fZPATDCm[i] =  zdcAOD.fZPATDCm[i];
     107             :   }
     108           0 : }
     109             : 
     110             : //__________________________________________________________________________
     111             : AliAODZDC& AliAODZDC::operator=(const AliAODZDC& zdcAOD)
     112             : {
     113             :   // Assignment operator
     114             :   //
     115           0 :   if(this!=&zdcAOD) {
     116           0 :     TObject::operator=(zdcAOD);
     117           0 :     fZNCEnergy  = zdcAOD.fZNCEnergy;
     118           0 :     fZNAEnergy  = zdcAOD.fZNAEnergy;
     119           0 :     fZPCEnergy  = zdcAOD.fZPCEnergy;
     120           0 :     fZPAEnergy  = zdcAOD.fZPAEnergy;
     121           0 :     fZEM1Energy = zdcAOD.fZEM1Energy;
     122           0 :     fZEM2Energy = zdcAOD.fZEM2Energy;
     123           0 :     for(Int_t i=0; i<5; i++){
     124           0 :        fZNCTowerEnergy[i] = zdcAOD.fZNCTowerEnergy[i];
     125           0 :        fZNATowerEnergy[i] = zdcAOD.fZNATowerEnergy[i];
     126           0 :        fZPCTowerEnergy[i] = zdcAOD.fZPCTowerEnergy[i];
     127           0 :        fZPATowerEnergy[i] = zdcAOD.fZPATowerEnergy[i];
     128           0 :        fZNCTowerEnergyLR[i] = zdcAOD.fZNCTowerEnergyLR[i];
     129           0 :        fZNATowerEnergyLR[i] = zdcAOD.fZNATowerEnergyLR[i];
     130           0 :        fZPCTowerEnergyLR[i] = zdcAOD.fZPCTowerEnergyLR[i];
     131           0 :        fZPATowerEnergyLR[i] = zdcAOD.fZPATowerEnergyLR[i];
     132             :     }
     133             :     //
     134           0 :     fZDCParticipants = zdcAOD.fZDCParticipants;
     135           0 :     fZDCPartSideA = zdcAOD.fZDCPartSideA;
     136           0 :     fZDCPartSideC = zdcAOD.fZDCPartSideC;
     137           0 :     fImpactParameter = zdcAOD.fImpactParameter;
     138           0 :     fImpactParamSideA = zdcAOD.fImpactParamSideA;
     139           0 :     fImpactParamSideC = zdcAOD.fImpactParamSideC;
     140             :     //
     141           0 :     fZDCTDCSum = zdcAOD.fZDCTDCSum;    
     142           0 :     fZDCTDCDifference = zdcAOD.fZDCTDCDifference;
     143           0 :     fZNCTDC = zdcAOD.fZNCTDC;
     144           0 :     fZNATDC = zdcAOD.fZNATDC;
     145           0 :     fZPCTDC = zdcAOD.fZPCTDC;
     146           0 :     fZPATDC = zdcAOD.fZPATDC;
     147           0 :     for(Int_t i=0; i<4; i++){
     148           0 :        fZNCTDCm[i] =  zdcAOD.fZNCTDCm[i];
     149           0 :        fZNATDCm[i] =  zdcAOD.fZNATDCm[i];
     150           0 :        fZPCTDCm[i] =  zdcAOD.fZPCTDCm[i];
     151           0 :        fZPATDCm[i] =  zdcAOD.fZPATDCm[i];
     152             :     }
     153           0 :     fIsZNAfired = zdcAOD.fIsZNAfired;
     154           0 :     fIsZNCfired = zdcAOD.fIsZNCfired;
     155           0 :     fIsZPAfired = zdcAOD.fIsZPAfired;
     156           0 :     fIsZPCfired = zdcAOD.fIsZPCfired;
     157           0 :   } 
     158           0 :   return *this;
     159             : }
     160             : 
     161             : //______________________________________________________________________________
     162             : void  AliAODZDC::SetZNCTowers(const Double_t value[5], const Double_t valueLR[5])
     163             : {
     164             :   // Sets ZNC towers
     165         104 :   for(Int_t i=0; i<5; i++){
     166          40 :     fZNCTowerEnergy[i] = value[i];
     167          40 :     fZNCTowerEnergyLR[i] = valueLR[i];
     168             :   }
     169           8 : }
     170             : 
     171             : //______________________________________________________________________________
     172             : void  AliAODZDC::SetZNATowers(const Double_t value[5], const Double_t valueLR[5])
     173             : {
     174             :   // Sets ZNA towers
     175         104 :   for(Int_t i=0; i<5; i++){
     176          40 :     fZNATowerEnergy[i] = value[i];
     177          40 :     fZNATowerEnergyLR[i] = valueLR[i];
     178             :   }
     179           8 : }
     180             : 
     181             : //______________________________________________________________________________
     182             : void  AliAODZDC::SetZPCTowers(const Double_t value[5], const Double_t valueLR[5])
     183             : {
     184             :   // Sets ZPC towers
     185         104 :   for(Int_t i=0; i<5; i++){
     186          40 :     fZPCTowerEnergy[i] = value[i];
     187          40 :     fZPCTowerEnergyLR[i] = valueLR[i];
     188             :   }
     189           8 : }
     190             : 
     191             : //______________________________________________________________________________
     192             : void  AliAODZDC::SetZPATowers(const Double_t value[5], const Double_t valueLR[5])
     193             : {
     194             :   // Sets ZPA towers
     195         104 :   for(Int_t i=0; i<5; i++){
     196          40 :     fZPATowerEnergy[i] = value[i];
     197          40 :     fZPATowerEnergyLR[i] = valueLR[i];
     198             :   }
     199           8 : }
     200             : 
     201             : //______________________________________________________________________________
     202             : Bool_t AliAODZDC::GetZNCentroidInPbPb(Float_t beamEne, Double_t centrZNC[2], Double_t centrZNA[2]) 
     203             : {
     204             :   // Provides coordinates of centroid over ZN (side C) front face in PbPb
     205           0 :    if(beamEne==0){
     206           0 :     printf(" ZDC centroid in PbPb can't be calculated with E_beam = 0 !!!\n");
     207             :     //for(Int_t jj=0; jj<2; jj++) fZNCCentrCoord[jj] = 999.;
     208           0 :     return kFALSE;
     209             :   }
     210             : 
     211             :   const Float_t x[4] = {-1.75, 1.75, -1.75, 1.75};
     212             :   const Float_t y[4] = {-1.75, -1.75, 1.75, 1.75};
     213             :   const Float_t alpha=0.395;
     214             :   Float_t numXZNC=0., numYZNC=0., denZNC=0., cZNC, wZNC; 
     215             :   Float_t numXZNA=0., numYZNA=0., denZNA=0., cZNA, wZNA; 
     216             :   Float_t zncEnergy=0., znaEnergy=0.;
     217             :   //
     218           0 :   for(Int_t i=0; i<5; i++){
     219           0 :     zncEnergy += fZNCTowerEnergy[i];
     220           0 :     znaEnergy += fZNATowerEnergy[i];
     221             :   }
     222           0 :   for(Int_t i=0; i<4; i++){
     223           0 :     if(fZNCTowerEnergy[i+1]>0.) {
     224           0 :       wZNC = TMath::Power(fZNCTowerEnergy[i+1], alpha);
     225           0 :       numXZNC += x[i]*wZNC;
     226           0 :       numYZNC += y[i]*wZNC;
     227           0 :       denZNC += wZNC;
     228           0 :     }
     229           0 :     if(fZNATowerEnergy[i+1]>0.) {
     230           0 :       wZNA = TMath::Power(fZNATowerEnergy[i+1], alpha);
     231           0 :       numXZNA += x[i]*wZNA;
     232           0 :       numYZNA += y[i]*wZNA;
     233           0 :       denZNA += wZNA;
     234           0 :     }
     235             :   }
     236             :   //
     237           0 :   if(denZNC!=0){
     238           0 :     Float_t nSpecnC = zncEnergy/beamEne;
     239           0 :     cZNC = 1.89358-0.71262/(nSpecnC+0.71789);
     240           0 :     centrZNC[0] = cZNC*numXZNC/denZNC;
     241           0 :     centrZNC[1] = cZNC*numYZNC/denZNC;
     242           0 :   } 
     243             :   else{
     244           0 :     centrZNC[0] = centrZNC[1] = 999.;
     245             :   }
     246           0 :   if(denZNA!=0){
     247           0 :     Float_t nSpecnA = znaEnergy/beamEne;
     248           0 :     cZNA = 1.89358-0.71262/(nSpecnA+0.71789);
     249           0 :     centrZNA[0] = cZNA*numXZNA/denZNA;
     250           0 :     centrZNA[1] = cZNA*numYZNA/denZNA;
     251           0 :   } 
     252             :   else{
     253           0 :     centrZNA[0] = centrZNA[1] = 999.;
     254             :   }
     255             :  
     256             :   
     257             :   return kTRUE;
     258           0 : }
     259             : 
     260             : //______________________________________________________________________________
     261             : Bool_t AliAODZDC::GetZNCentroidInpp(Double_t centrZNC[2], Double_t centrZNA[2]) 
     262             : {
     263             :   // Provides coordinates of centroid over ZN (side C) front face in pp
     264             :   const Float_t x[4] = {-1.75, 1.75, -1.75, 1.75};
     265             :   const Float_t y[4] = {-1.75, -1.75, 1.75, 1.75};
     266             :   const Float_t alpha=0.5;
     267             :   Float_t numXZNC=0., numYZNC=0., denZNC=0., wZNC; 
     268             :   Float_t numXZNA=0., numYZNA=0., denZNA=0., wZNA; 
     269             :   //
     270           0 :   for(Int_t i=0; i<4; i++){
     271           0 :     if(fZNCTowerEnergy[i+1]>0.) {
     272           0 :       wZNC = TMath::Power(fZNCTowerEnergy[i+1], alpha);
     273           0 :       numXZNC += x[i]*wZNC;
     274           0 :       numYZNC += y[i]*wZNC;
     275           0 :       denZNC += wZNC;
     276           0 :     }
     277           0 :     if(fZNATowerEnergy[i+1]>0.) {
     278           0 :       wZNA = TMath::Power(fZNATowerEnergy[i+1], alpha);
     279           0 :       numXZNA += x[i]*wZNA;
     280           0 :       numYZNA += y[i]*wZNA;
     281           0 :       denZNA += wZNA;
     282           0 :     }
     283             :   }
     284             :   //
     285           0 :   if(denZNC!=0){
     286           0 :     centrZNC[0] = numXZNC/denZNC;
     287           0 :     centrZNC[1] = numYZNC/denZNC;
     288           0 :   } 
     289             :   else{
     290           0 :     centrZNC[0] = centrZNC[1] = 999.;
     291             :   }
     292           0 :   if(denZNA!=0){
     293           0 :     centrZNA[0] = numXZNA/denZNA;
     294           0 :     centrZNA[1] = numYZNA/denZNA;
     295           0 :   } 
     296             :   else{
     297           0 :     centrZNA[0] = centrZNA[1] = 999.;
     298             :   }
     299             :   
     300           0 :   return kTRUE;
     301             : }
     302             : 
     303             : //______________________________________________________________________________
     304             : Bool_t AliAODZDC::GetTDCSum(Float_t sum[4]) 
     305             : {
     306             :   // Provides value(s) != -999 if both ZN are fired
     307           0 :   for(int i=0; i<4; i++) sum[i] = -999.;
     308             :   int ind=0;
     309           0 :   if(IsZNANDfired()){
     310           0 :     for(Int_t i=0;i<4;++i){
     311           0 :       if(fZNCTDCm[i]>-999){
     312           0 :         for(Int_t j=0;j<4;++j){
     313           0 :           if(fZNATDCm[j]>-999){
     314           0 :             sum[ind] = fZNCTDCm[i]+fZNATDCm[j];
     315           0 :             ind++;
     316           0 :           } // if ZNA[j] is hit
     317             :         } // Loop over ZNA TDC hits
     318           0 :       } // if ZNC[i] is hit
     319             :     } // Loop over ZNC TDC hits
     320           0 :     return kTRUE;
     321             :   } // ZN AND
     322           0 :   else return kFALSE;
     323           0 : }
     324             : 
     325             : //______________________________________________________________________________
     326             : Bool_t AliAODZDC::GetTDCDiff(Float_t diff[4]) 
     327             : {
     328             :   // Provides value(s) != -999 if both ZN are fired
     329           0 :   for(int i=0; i<4; i++) diff[i] = -999.;
     330             :   int ind=0;
     331           0 :   if(IsZNANDfired()){
     332           0 :     for(Int_t i=0;i<4;++i){
     333           0 :       if(fZNCTDCm[i]>-999){
     334           0 :         for(Int_t j=0;j<4;++j){
     335           0 :           if(fZNATDCm[j]>-999){
     336           0 :             diff[ind] = fZNCTDCm[i]-fZNATDCm[j];
     337           0 :             ind++;
     338           0 :           } // if ZNA[j] is hit
     339             :         } // Loop over ZNA TDC hits
     340           0 :       } // if ZNC[i] is hit
     341             :     } // Loop over ZNC TDC hits
     342           0 :     return kTRUE;
     343             :   } // ZN AND
     344           0 :   else return kFALSE;
     345           0 : }

Generated by: LCOV version 1.11