CMS 3D CMS Logo

Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes | Friends

PFResolutionMap Class Reference

Resolution Map (resolution as a function of eta and E) More...

#include <PFResolutionMap.h>

List of all members.

Public Member Functions

int FindBin (double eta, double e)
 extrapolation requires overloading of this function
const char * GetMapFile () const
double getRes (double eta, double phi, double e, int MapEta=-1)
 PFResolutionMap (const char *name, unsigned nbinseta, double mineta, double maxeta, unsigned nbinse, double mine, double maxe, double value=-1)
 create an empty map and initialize it
 PFResolutionMap (const TH2D &h)
 create a map from a 2d histogram
 PFResolutionMap (const char *name, const char *mapfile)
 create a map from text file mapfile
 PFResolutionMap ()
 default constructor
bool ReadMapFile (const char *mapfile)
 read text file
bool WriteMapFile (const char *mapfile)

Private Member Functions

double dCrackPhi (double phi, double eta)
bool IsInAPhiCrack (double phi, double eta)
double minimum (double a, double b)

Private Attributes

std::string mapFile_

Static Private Attributes

static const unsigned lineSize_ = 10000

Friends

std::ostream & operator<< (std::ostream &out, const PFResolutionMap &rm)
 print this map

Detailed Description

Resolution Map (resolution as a function of eta and E)

Basically just a TH2D with text I/O

Author:
Colin Bernet
Date:
January 2006

Definition at line 18 of file PFResolutionMap.h.


Constructor & Destructor Documentation

PFResolutionMap::PFResolutionMap ( ) [inline]

default constructor

Definition at line 23 of file PFResolutionMap.h.

: TH2D() {}
PFResolutionMap::PFResolutionMap ( const char *  name,
const char *  mapfile 
)

create a map from text file mapfile

Definition at line 72 of file PFResolutionMap.cc.

References ReadMapFile().

                                                                      { 
  SetTitle(name);
  GetXaxis()->SetTitle("#eta");
  GetYaxis()->SetTitle("E");
  if( ! ReadMapFile(mapfile) ) {
    string err = "PFResolutionMap::PFResolutionMap : cannot read file ";
    err += mapfile;
    throw invalid_argument(err);
  }
}
PFResolutionMap::PFResolutionMap ( const char *  name,
unsigned  nbinseta,
double  mineta,
double  maxeta,
unsigned  nbinse,
double  mine,
double  maxe,
double  value = -1 
)

create an empty map and initialize it

Definition at line 16 of file PFResolutionMap.cc.

  : TH2D(name, name, nbinseta, mineta, maxeta, nbinse, mine, maxe) {
  // fNbinsEta(nbinseta), fMinEta(mineta), fMaxEta(maxeta),
  //    fNbinsE(nbinse), fMinE(mine), fMaxE(maxe) {

  GetXaxis()->SetTitle("#eta");
  GetYaxis()->SetTitle("E");

  if(value>0) {
    for(int ie=1; ie<=GetNbinsY(); ie++) {
      for(int ieta=1; ieta<=GetNbinsX(); ieta++) {
        SetBinContent(ieta,ie, value);
      }
    }  
  }
  // cout<<"creating resolution map "<<endl;
  // Print("all");
  
}
PFResolutionMap::PFResolutionMap ( const TH2D &  h) [inline]

create a map from a 2d histogram

Definition at line 34 of file PFResolutionMap.h.

: TH2D(h) {}

Member Function Documentation

double PFResolutionMap::dCrackPhi ( double  phi,
double  eta 
) [private]

Definition at line 307 of file PFResolutionMap.cc.

References gather_cfg::cout, i, m, M_PI, minimum(), and pi.

Referenced by IsInAPhiCrack().

                                                       {

  static double pi= M_PI;// 3.14159265358979323846;
  
  //Location of the 18 phi-cracks
  static std::vector<double> cPhi;
  cPhi.resize(18,0);
  cPhi[0]=2.97025;
  for(unsigned i=1;i<=17;i++) cPhi[i]=cPhi[0]-2*i*pi/18;

  //Shift of this location if eta<0
  static double delta_cPhi=0.00638;

  double m; //the result

  //the location is shifted
  if(eta<0){ 
    phi +=delta_cPhi;
    if(phi>pi) phi-=2*pi;
  }
  if (phi>=-pi && phi<=pi){

    //the problem of the extrema
    if (phi<cPhi[17] || phi>=cPhi[0]){
      if (phi<0) phi+= 2*pi;
      m = minimum(phi -cPhi[0],phi-cPhi[17]-2*pi);              
    }

    //between these extrema...
    else{
      bool OK = false;
      unsigned i=16;
      while(!OK){
        if (phi<cPhi[i]){
          m=minimum(phi-cPhi[i+1],phi-cPhi[i]);
          OK=true;
        }
        else i-=1;
      }
    }
  }
  else{
    m=0.;        //if there is a problem, we assum that we are in a crack
    std::cout<<"Problem in dminphi"<<std::endl;
  }
  if(eta<0) m=-m;   //because of the disymetry
  return m;
}
int PFResolutionMap::FindBin ( double  eta,
double  e 
)

extrapolation requires overloading of this function

Definition at line 257 of file PFResolutionMap.cc.

Referenced by getRes(), and GoodSeedProducer::produce().

                                                 {
  if(e >= GetYaxis()->GetXmax() )
    e = GetYaxis()->GetXmax() - 0.001;
  
  return TH2D::FindBin(eta,e);
}
const char* PFResolutionMap::GetMapFile ( ) const [inline]

Definition at line 49 of file PFResolutionMap.h.

References mapFile_.

{return mapFile_.c_str();}
double PFResolutionMap::getRes ( double  eta,
double  phi,
double  e,
int  MapEta = -1 
)

Definition at line 231 of file PFResolutionMap.cc.

References newFWLiteAna::bin, FindBin(), and IsInAPhiCrack().

                                                                          {
  static double fMinEta = -2.95;
  static double fMaxEta = 2.95;
  static double fMinE=0;
  static double fMaxE=100;

  if( eta<fMinEta ) eta = fMinEta+0.001;
  if( eta>fMaxEta ) eta = fMaxEta-0.001;
 
  if( e<fMinE ) e = fMinE+0.001;
  if( e>fMaxE ) e = fMaxE-0.001;

  unsigned bin = FindBin(TMath::Abs(eta),e);

  double res= GetBinContent(bin);
  if(MapEta>-1){
    if((eta<1.48) && IsInAPhiCrack(phi,eta)) {
      if(MapEta==1) res *= 1.88;
      else res *= 1.65;
    }
  }
  return res;
}
bool PFResolutionMap::IsInAPhiCrack ( double  phi,
double  eta 
) [private]

Definition at line 289 of file PFResolutionMap.cc.

References dCrackPhi().

Referenced by getRes().

                                                         {
  double dminPhi = dCrackPhi(phi,eta);
  bool Is = (TMath::Abs(dminPhi)<0.005);
  return Is;
}
double PFResolutionMap::minimum ( double  a,
double  b 
) [private]

Definition at line 296 of file PFResolutionMap.cc.

References a, and b.

Referenced by dCrackPhi().

                                                {
  if(TMath::Abs(b)<TMath::Abs(a)) a=b;
  return a;
}
bool PFResolutionMap::ReadMapFile ( const char *  mapfile)

read text file

Definition at line 110 of file PFResolutionMap.cc.

References relativeConstraints::empty, i, EcalCondDB::inf, j, lineSize_, mapFile_, pos, and asciidump::s.

Referenced by PFResolutionMap().

                                                     {
  
  // open the file

  ifstream inf(mapfile);
  if( !inf.good() ) {
    // cout<<"PFResolutionMap::Read : cannot open file "<<mapfile<<endl;
    return false;
  }
  
  // first data describes the map

  int nbinseta=0;
  double mineta=0;
  double maxeta=0;
  
  int nbinse=0;
  double mine=0;
  double maxe=0;
  
  inf>>nbinseta;
  inf>>mineta;
  inf>>maxeta;

  inf>>nbinse;
  inf>>mine;
  inf>>maxe;

  SetBins(nbinseta, mineta, maxeta, nbinse, mine, maxe);

  // Init(fNbinsEta,fMinEta,fMaxEta,fNbinsE,fMinE,fMaxE);

  // char data[lineSize_];
  char s[lineSize_];
  int pos=inf.tellg();

  // parse map data
  int i=1;
  do { 
    inf.seekg(pos);
    inf.getline(s,lineSize_);
    
    pos = inf.tellg();     
 
    if(string(s).empty()) {
      continue; // remove empty lines
    }

    istringstream lin(s);  

    double dataw;
    int j=1;
    do {
      lin>>dataw;
      SetBinContent(j, i, dataw);
      j++;
    } while (lin.good() );
    i++;
  } while(inf.good());
  
  if(inf.eof()) {
    mapFile_ = mapfile;  
    return true;
  }
  else {
    // cout<<"error"<<endl;
    return false;
  }
  
  mapFile_ = mapfile;  
  return true;
}
bool PFResolutionMap::WriteMapFile ( const char *  mapfile)

write text file is not const because mapFile_ will be updated

Definition at line 84 of file PFResolutionMap.cc.

References benchmark_cfg::cerr, gather_cfg::cout, and mapFile_.

                                                      {

  //  assert(fData.size() == fNbinsEta*fNbinsE);


  // open the file

  ofstream outf(mapfile);
  if( !outf.good() ) {
    cout<<"PFResolutionMap::Write : cannot open file "<<mapfile<<endl;
    return false;
  }
  
  outf<<(*this)<<endl;
  if(!outf.good() ) {
    cerr<<"PFResolutionMap::Write : corrupted file "<<mapfile<<endl;
    return false;
  }
  else {
    mapFile_ = mapfile;
    return true;
  }
}

Friends And Related Function Documentation

std::ostream& operator<< ( std::ostream &  out,
const PFResolutionMap rm 
) [friend]

print this map


Member Data Documentation

const unsigned PFResolutionMap::lineSize_ = 10000 [static, private]

Definition at line 58 of file PFResolutionMap.h.

Referenced by ReadMapFile().

std::string PFResolutionMap::mapFile_ [private]

Definition at line 59 of file PFResolutionMap.h.

Referenced by GetMapFile(), ReadMapFile(), and WriteMapFile().