#ifndef SimpleEcalDigi_h #define SimpleEcalDigi_h 1 #include "marlin/Processor.h" #include "lcio.h" #include #include "EVENT/SimCalorimeterHit.h" // Old scheme #define oldSHIFT_M 0 #define oldSHIFT_S 3 #define oldSHIFT_I 6 #define oldSHIFT_J 15 #define oldSHIFT_K 24 #define oldSHIFT_2 30 #define oldSHIFT_1 31 #define oldMASK_M (unsigned int) 0x00000007 #define oldMASK_S (unsigned int) 0x00000038 #define oldMASK_I (unsigned int) 0x00007FC0 #define oldMASK_J (unsigned int) 0x00FF8000 #define oldMASK_K (unsigned int) 0x3F000000 #define oldMASK_2 (unsigned int) 0x40000000 #define oldMASK_1 (unsigned int) 0x80000000 //New scheme #define SHIFT_S 0 //Stave = 3 bits #define SHIFT_M 3 //Module = 3 bits #define SHIFT_K 6 //Layer = 6 bits #define SHIFT_I 12 //Cell X index = 16 bits #define SHIFT_Z 28 //Guard-ring zone = 3 bits #define SHIFT_1 31 //Sign = 1 bit #define SHIFT_J 0 //Cell Z index = 16 bits #define SHIFT_P 16 //Provision = 15 bits #define SHIFT_2 31 //Sign = 1 bit #define MASK_S (unsigned int) 0x00000007 #define MASK_M (unsigned int) 0x00000038 #define MASK_K (unsigned int) 0x00000FC0 #define MASK_I (unsigned int) 0x0FFFF000 #define MASK_Z (unsigned int) 0x70000000 #define MASK_1 (unsigned int) 0x80000000 #define MASK_J (unsigned int) 0x0000FFFF #define MASK_P (unsigned int) 0x7FFF0000 #define MASK_2 (unsigned int) 0x80000000 using namespace lcio ; using namespace marlin ; /** Based on example processor for marlin. */ class SimpleEcalDigi : public Processor { public: virtual Processor* newProcessor() { return new SimpleEcalDigi ; } SimpleEcalDigi() ; /** Called at the begin of the job before anything is read. * Use to initialize the processor, e.g. book histograms. */ virtual void init() ; /** Called for every run. */ virtual void processRunHeader( LCRunHeader* run ) ; /** Called for every event - the working horse. */ virtual void processEvent( LCEvent * evt ) ; virtual void check( LCEvent * evt ) ; /** Called after data processing for clean up. */ virtual void end() ; private: float Emap[19][19][31]; int hitIndex[19][19][31]; int Nhits; float Emip[2000]; float X[2000]; float Y[2000]; float Z[2000]; int IJK[2000]; bool isMC ; float MIP; float emax; float ERawMin; float ERawMax; float Chi2Max; float Eraw; float Eraw2; float xav; float yav; float zav; float Xbar; float Ybar; float Zbar; float Xrms; float Yrms; float rms18; float chi2; float EcalSmear; float EcalMIP; float HcalMIP; float EcalThresh; float HcalThresh; float Ehit; float Rhit; float rrr; float phi; float xyz[3]; float xyzImpact[3]; float xyzAngle[3]; bool HCAL; bool MIPset; int Piece; int WI; int WJ; int LayerMax; int GapMin; int GapMax; int WJMin; int I; int J; int K; unsigned int cellID; unsigned int cellID1; int GRZone; protected: /** Input collection name. */ std::string _MCcolName ; std::string _EcalInputHitsColName ; std::string _EcalOutputHitsColName ; int _nRun ; int _nEvt ; } ; #endif