Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-05 08:17:43

0001 // Tell emacs that this is a C++ source
0002 //  -*- C++ -*-.
0003 #ifndef G4DETECTORS_PHG4CELLDEFS_H
0004 #define G4DETECTORS_PHG4CELLDEFS_H
0005 
0006 #include <cstdint>
0007 
0008 namespace PHG4CellDefs
0009 {
0010   // we rely on 64 bit keys - no point using
0011   // unsigned long long or whatever else C++ types
0012   // are currently implemented as 64 bit
0013   typedef uint64_t keytype;
0014 
0015   // key layout
0016   // bit
0017   // 48-64 detector id (scintillator slat id, layer,...)
0018   // 32-48 binning method
0019   //
0020   // 16-32 binning dependant 1st key
0021   // 0-16 binning dependant 2nd key
0022 
0023   /* static unsigned int layer_bits = 16; */
0024   /* static unsigned int keybits = 16; */
0025   // __attribute__((unused)) prevents warnings about unused variables
0026   // common upper 32 bits
0027   static unsigned int bitshift_layer __attribute__((unused)) = 64 - 16;
0028   static unsigned int bitshift_binning __attribute__((unused)) = bitshift_layer - 16;
0029   // binning dependeant bit shifts for lower 32 bits
0030   static unsigned int bitshift_upperkey __attribute__((unused)) = 16;
0031   static unsigned int bitshift_row __attribute__((unused)) = 16;
0032   static unsigned int bitshift_phi __attribute__((unused)) = 16;
0033 
0034   enum CellBinning
0035   {
0036     undefined = 0,
0037     sizebinning = 1,
0038     etaphibinning = 2,
0039     etaslatbinning = 3,
0040     spacalbinning = 4,
0041     scintillatorslatbinning = 5,
0042     etaxsizebinning = 6,
0043     mvtxbinning = 7,
0044     tpcbinning = 8
0045   };
0046   bool has_binning(PHG4CellDefs::keytype key, PHG4CellDefs::CellBinning binning);
0047   short get_binning(const PHG4CellDefs::keytype key);
0048   short int get_detid(const PHG4CellDefs::keytype key);
0049 
0050   namespace SizeBinning
0051   {
0052     keytype genkey(const unsigned short layer, const unsigned short zbin, const unsigned short iphibin);
0053     unsigned short int get_zbin(const PHG4CellDefs::keytype key);
0054     unsigned short int get_phibin(const PHG4CellDefs::keytype key);
0055   }  // namespace SizeBinning
0056 
0057   namespace EtaPhiBinning
0058   {
0059     keytype genkey(const unsigned short layer, const unsigned short etabin, const unsigned short phibin);
0060     unsigned short int get_etabin(const PHG4CellDefs::keytype key);
0061     unsigned short int get_phibin(const PHG4CellDefs::keytype key);
0062   }  // namespace EtaPhiBinning
0063 
0064   namespace SpacalBinning
0065   {
0066     keytype genkey(const unsigned short etabin, const unsigned short phibin, const unsigned short fiberid);
0067     unsigned short get_etabin(const PHG4CellDefs::keytype key);
0068     unsigned short get_phibin(const PHG4CellDefs::keytype key);
0069     unsigned short get_fiberid(const PHG4CellDefs::keytype key);
0070   }  // namespace SpacalBinning
0071 
0072   namespace ScintillatorSlatBinning
0073   {
0074     keytype genkey(const unsigned short layer, const unsigned short irow, const unsigned short icolumn);
0075     unsigned short int get_row(const PHG4CellDefs::keytype key);
0076     unsigned short int get_column(const PHG4CellDefs::keytype key);
0077   }  // namespace ScintillatorSlatBinning
0078 
0079   namespace EtaXsizeBinning
0080   {
0081     keytype genkey(const unsigned short layer, const unsigned short etabin, const unsigned short xbin);
0082     unsigned short int get_etabin(const PHG4CellDefs::keytype key);
0083     unsigned short int get_xsizebin(const PHG4CellDefs::keytype key);
0084   }  // namespace EtaXsizeBinning
0085 
0086   namespace MVTXBinning
0087   {
0088     keytype genkey(const unsigned short layer, const unsigned int bit32_index);
0089     unsigned int get_index(const PHG4CellDefs::keytype key);
0090   }  // namespace MVTXBinning
0091 
0092   namespace TPCBinning
0093   {
0094     keytype genkey(const unsigned short lyr, const unsigned short mod, const unsigned short pad);
0095     unsigned short get_radbin(const PHG4CellDefs::keytype key);
0096     unsigned short get_phibin(const PHG4CellDefs::keytype key);
0097   }  // namespace TPCBinning
0098 
0099 }  // namespace PHG4CellDefs
0100 
0101 #endif  // G4DETECTORS_PHG4CELLDEFS_H