CMS 3D CMS Logo

Public Member Functions

TotemNumberMerger Class Reference

#include <SimG4CMS/Forward/interface/TotemNumberMerger.h>

List of all members.

Public Member Functions

unsigned long Merge (unsigned long value1, unsigned long value2) const
unsigned long Merge (unsigned long value1, unsigned long value2, unsigned long value3) const
unsigned long Merge (unsigned long value1, unsigned long value2, unsigned long value3, unsigned long value4) const
void Split (unsigned long source, unsigned long &value1, unsigned long &value2, unsigned long &value3) const
void Split (unsigned long source, unsigned long &value1, unsigned long &value2, unsigned long &value3, unsigned long &value4) const
void Split (unsigned long source, unsigned long &value1, unsigned long &value2) const
 TotemNumberMerger ()
 ~TotemNumberMerger ()

Detailed Description

Description: Takes two integers and merges them together in only an integer! It's also possible the opposite operation.

Usage: Used in TotemOrganizations to get unique ID of sensitive detector element

Definition at line 29 of file TotemNumberMerger.h.


Constructor & Destructor Documentation

TotemNumberMerger::TotemNumberMerger ( )

Definition at line 23 of file TotemNumberMerger.cc.

References LogDebug.

                                       {
#ifdef SCRIVI
  LogDebug("ForwardSim") << "Creating TotemNumberMerger";
#endif
}
TotemNumberMerger::~TotemNumberMerger ( )

Definition at line 29 of file TotemNumberMerger.cc.

References LogDebug.

                                        {
#ifdef SCRIVI
  LogDebug("ForwardSim") << "Destruction of TotemNumberMerger";
#endif
}

Member Function Documentation

unsigned long TotemNumberMerger::Merge ( unsigned long  value1,
unsigned long  value2 
) const

Definition at line 39 of file TotemNumberMerger.cc.

References trackerHits::c, LogDebug, query::result, and Split().

Referenced by TotemT1Organization::_FromDataToUnitID(), and Merge().

                                                                     {

  unsigned long c(value1+value2);
  unsigned long result(((c*(c+1))>>1)+value1);

#ifdef SCRIVI
  LogDebug("ForwardSim") << "Merge(value1=" << value1
                         << ", value2=" << value2 << ")=" << result;
  
  unsigned long invValue1, invValue2;
  Split(result, invValue1, invValue2);
  
  assert(invValue1==value1);
  assert(invValue2==value2);                                  
#endif

  return result;
}
unsigned long TotemNumberMerger::Merge ( unsigned long  value1,
unsigned long  value2,
unsigned long  value3 
) const

Definition at line 59 of file TotemNumberMerger.cc.

References Merge().

                                                                     {
  return Merge(Merge(value1, value2), value3);
}
unsigned long TotemNumberMerger::Merge ( unsigned long  value1,
unsigned long  value2,
unsigned long  value3,
unsigned long  value4 
) const

Definition at line 65 of file TotemNumberMerger.cc.

References Merge().

                                                                     {
  return Merge(Merge(value1, value2), Merge(value3, value4));
}
void TotemNumberMerger::Split ( unsigned long  source,
unsigned long &  value1,
unsigned long &  value2 
) const

Definition at line 72 of file TotemNumberMerger.cc.

References trackerHits::c, LogDebug, and mathSSE::sqrt().

Referenced by TotemT1Organization::_FromUnitIDToData(), Merge(), and Split().

                                                             {
  unsigned long c(static_cast<unsigned long>(floor(sqrt(1.+8.*static_cast<float>(source))*0.5-0.5)));
 
  value1 = source-((c*(c+1))>>1);
  value2 = c - value1;
 
#ifdef SCRIVI
  LogDebug("ForwardSim") << "source=" << source << ", c=" << c
                         << ", value1=" << value1 << ", value2=" << value2;
#endif
}
void TotemNumberMerger::Split ( unsigned long  source,
unsigned long &  value1,
unsigned long &  value2,
unsigned long &  value3 
) const

Definition at line 85 of file TotemNumberMerger.cc.

References Split().

                                                             {
  unsigned long mix12;
 
  Split(source, mix12, value3);
  Split(mix12, value1, value2);
}
void TotemNumberMerger::Split ( unsigned long  source,
unsigned long &  value1,
unsigned long &  value2,
unsigned long &  value3,
unsigned long &  value4 
) const

Definition at line 94 of file TotemNumberMerger.cc.

References Split().

                                                             {
  unsigned long mix12, mix34;
 
  Split(source, mix12, mix34);
  Split(mix12, value1, value2);
  Split(mix34, value3, value4);
}