Back to index

See source file

CSidc.h

 
//----------------------------------------------------------------------------- 
//  $Header: /asis/offline/ceres/cool/project/RCS/CSidc.h,v 3.15 1997/07/16 15:12:05 messer Exp $ 
// 
//  COOL Program Library   
//  Copyright (C) CERES collaboration, 1996 
// 
//  Declarations of CSidc class. 
// 
//----------------------------------------------------------------------------- 
#ifndef CSIDC_H 
#define CSIDC_H 
 
#include "cool.h" 
#include "CMCcool.h" 
#include "CDetector.h" 
#include "CCyclicCollection.h" 
#include "CDrawable.h" 
#include "CCell.h" 
#include "CSidcHit.h" 
#include "CCoGPulse.h" 
#include "CSidcCluster.h" 
#include "CSidcLookupItem.h" 
#include "CLookupDeltaRadius.h" 
#include "CMCSplittedHit.h" 
#include "CSortedList.h" 
#include "CSidcSetup.h" 
#include "CList.h" 
#include <rw/tpordvec.h> 
#include <rw/tpsrtvec.h> 
 
class CSidcDeltaR; 
class CMCServer; 
class CEventServer; 
class CCoordinate; 
 
class CSidc : public CDetector, public CDrawable { 
public: 
   CSidc(); 
   virtual ~CSidc(); 
 
public: 
   virtual CBoolean unpack(CEventServer&);    
   virtual CBoolean makeClusters(float = 1.0); 
   virtual CBoolean makeCoGHits();              // also makes cog-pulses 
   virtual CBoolean makeFittedHits();           // uses pulse-fitting 
   void printHitSummary(ostream& = cout); 
    
   void transform(CSidcCellCoord&, const CLabCylinderCoord&) const;    // see CCoordinate.h 
   void transform(CLabCylinderCoord&, const CSidcCellCoord&) const;    // see CCoordinate.h 
 
   const CCyclicCollection<CCell>&             getCells()       const { return cells; } 
   const RWTPtrOrderedVector<CSidcCluster>&    getClusters()    const { return clusters; } 
   const CSortedList<CCoGPulse>&               getPulses()      const { return pulses; } 
   const CSortedList<CSidcHit>&                getHits()        const { return hits; } 
   const RWTPtrOrderedVector<CSidcLookupItem>& getLookupItems() const { return lookupItems; } 
    
   double getStopPulseCoG(int i) const { return stopPulseCoG[i]; } 
   double getReadoutThreshold() const { return readoutThreshold; } 
    
   CSidcSetup* getSetup() const { return setup; } 
 
   CBoolean writeLookupItemsToFile(const char*); 
   void setLookupItemsToDefault(); 
    
public: 
   virtual void     makeDigiHits(CMCServer&); 
   virtual CBoolean digitize(CMCServer&, CMCDigiMode);    
   virtual CBoolean makeHitsFromMC(CMCServer&, CMCDigiMode);    
   virtual double   calculateAmplitude(double, double, double, double) = 0; 
    
   inline const RWTPtrOrderedVector<CLookupDeltaRadius>& getDeltaRadius() const { return deltaRLookupTable; }; 
    
private: 
   double ballisticDeficitFunction(double); 
 
public: 
   // 
   //  The following member functions are needed in order 
   //  to allow drawing. They are declared pure virtual in 
   //  the CDrawable base class. 
   // 
   virtual void draw(const char*); 
   float getLeft() const; 
   float getRight() const; 
   float getBottom() const; 
   float getTop() const; 
   const CString& getName() const { return name; }                         
    
protected: 
   CBoolean readLookupItemsFromFile(const char*); 
   virtual CBoolean unpackPedestals(CEventServer&); 
   virtual void getNextNeighbourCells(CCell*, CSidcCluster*, float); 
   virtual CBoolean appendCellToCluster(CCell*, CSidcCluster*, float); 
   virtual void makePulses(CSidcCluster*, CList<CCoGPulse>&); 
   virtual void makeSplittedPulses(CSidcCluster*, CList<CCoGPulse>&); 
   virtual void getHitsFromPulses(CSidcCluster*, CList<CCoGPulse>&); 
   virtual CBoolean doBallisticDeficitCorrection(); 
    
protected: 
   // 
   //  Collections: 
   //  Note the order and ranges: 
   //     cells(anode, time bin)  where  anode [0-359], time bin [0-255]    
   //     nims(nim, time bin)     where  nim [0-23] 
   //   
   RWTPtrOrderedVector<CSidcLookupItem> lookupItems; // pedestal and sigma  
   CCyclicCollection<CCell>           cells;     // circular array and list (anode, time bin) 
   CCollection<CCell>                 nims;      // stop pulses array and list (nim, time bin)  
 
protected: 
   int      *lookupSidcAnode;                 // anode lookup table (used for unpacking) 
   double   stopPulseCoG[4];                  // center-of-gravity of stop pulses for the 4 crates         
   double   stopPulseCoGOffset[4];            // offset of stop pulses 
   double   stopPulsePedestal[4]; 
   double   readoutThreshold; 
   double   stopPulsePhaseCorrection;        // TDC value to correct for stop pulse phase 
    
   RWTPtrOrderedVector<CSidcCluster> clusters; 
   CSortedList<CCoGPulse>            pulses;     // pulse list sorted in anodes 
   CSortedList<CSidcHit>             hits;       // hit list sorted by phi 
 
protected: 
  CSidcSetup  *setup; 
  CSidcDeltaR *deltaRcorrection; 
  CBoolean readDeltaRadiusFromFile(const char*); 
  RWTPtrOrderedVector<CLookupDeltaRadius> deltaRLookupTable;   
 
protected: 
   inline int MarkerSet(unsigned short u) {return (u & 0x8000) != 0;}   
}; 
 
#endif /* CSIDC_H */ 

Back to index

See source file