Main Page   Modules   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members  

mMuiRawUnpack Class Reference
[Analysis Modules]

Parses the MuID DCM packet data, and fills the TMuiRawMapO table for those channels that have signals. More...

#include <mMuiRawUnpack.h>

List of all members.

Public Methods

 mMuiRawUnpack ()
 Constructor. More...

 ~mMuiRawUnpack ()
 Destructor. More...

PHBoolean event (PHCompositeNode *basenode)
 Fill the TMuiRawO table. More...

PHBoolean event (Event *evt, PHCompositeNode *basenode)

Private Methods

unsigned int getbits (unsigned int word, int start, int length)

Private Attributes

const mMuiRawUnpackPar_mod_par
PHTimeServer::timer _timer


Detailed Description

Parses the MuID DCM packet data, and fills the TMuiRawMapO table for those channels that have signals.

\

Definition at line 22 of file mMuiRawUnpack.h.


Constructor & Destructor Documentation

mMuiRawUnpack  
 

Constructor.

Definition at line 19 of file mMuiRawUnpack.cxx.

00019                             :
00020   _timer( PHTimeServer::get()->insert_new( "mMuiRawUnpack" ) )
00021  {}

~mMuiRawUnpack  
 

Destructor.

Definition at line 23 of file mMuiRawUnpack.cxx.

00023 {}


Member Function Documentation

PHBoolean event Event *    evt,
PHCompositeNode *    basenode
 

Definition at line 48 of file mMuiRawUnpack.cxx.

References _mod_par, mMuiRawUnpackPar::get_id_base, mMuiRawUnpackPar::get_module_id, getbits, TMuiHitMapO::insert_new, and MUIOO::TRACE.

00049 {
00050   if(evt == 0)
00051   {
00052     cout<<PHWHERE<<" Null event pointer.\n";
00053     return False;
00054   }
00055   
00056    // module runtime parameters
00057   _mod_par = TMutNode<mMuiRawUnpackPar>::find_node(baseNode,"mMuiRawUnpackPar");
00058 
00059   //Find or create the new TMuiHitO objects
00060   TMuiHitMapO* _muihitmap = 0;
00061   try{
00062     _muihitmap = TMutNode<TMuiHitMapO>::find_node(baseNode,"TMuiHitMapO");
00063   } catch(std::exception& e){
00064     MUIOO::TRACE(e.what());
00065     return False;
00066   }
00067   
00068   TMuiAddressTable* pAddress = TMuiAddressTable::Table();
00069   if (!pAddress) return False;
00070 
00071   int packetdata[MUIOO::kWordsPerFEM]={0};
00072   
00073   unsigned int row = 0;
00074   //static const unsigned long dcm_words_max = 136;  // size of DCM array
00075   // Assign module ID to associated packet ID, then get Module ID
00076   // according to current packet ID instead extract it from
00077   // DCM word. Warning!!!! If assigned packet ID for MuID DCMs are
00078   // changed, we need to modifiy assignment in par file.
00079 
00080   for (int dcm=0; dcm<MUIOO::kFEMsTotal; dcm++) {
00081 
00082     unsigned int packetid = _mod_par->get_id_base() + dcm;
00083     Packet* muipacket = evt->getPacket(packetid);
00084     int numwords = 0;  //Number of words actually returned by packet accessor
00085     
00086     //All muid packets are not necessarily present
00087     if(muipacket<=0) continue;
00088     
00089     TMuiReadoutID idHard;
00090     TMuiChannelId idSoft;
00091 
00092     unsigned int moduleID = _mod_par->get_module_id(dcm);
00093     
00094     short Arm      = pAddress->Arm(moduleID);
00095     short orient   = pAddress->Orient(moduleID);
00096 
00097     muipacket->fillIntArray(packetdata,
00098                             MUIOO::kWordsPerFEM,
00099                             &numwords,
00100                             "SPARSE");
00101     delete muipacket;
00102     
00103     // Sanity check of the word count ...
00104     if (numwords > MUIOO::kWordsPerFEM) {
00105       cout << PHWHERE << packetid
00106            << " has " << numwords
00107            << " words, maximum allowed is " << MUIOO::kWordsPerFEM << endl;
00108       continue;
00109     }
00110 
00111     for (unsigned int j=0; j<(unsigned int)numwords; j++) {
00112       unsigned int pattern = packetdata[j];
00113 
00114         short roc  = getbits(pattern,30,7);
00115         short word = getbits(pattern,23,4);
00116 
00117         if (    (roc < 0) || (roc >= TMuiReadoutID::kROCsPerFEM)
00118              || (word < 0) || (word >= TMuiReadoutID::kWordsPerROC) ) {
00119           cout << "mMuiDCMUnpack-E1  ROC id " << roc
00120                << " or word-in-ROC id " << word << " out of range" << endl;
00121         }
00122         else {
00123 
00124           for (short bit=0; bit<16; bit++) {
00125             if (getbits(pattern,bit,1) == 1) {
00126               idHard.Set(moduleID,roc,word,bit);
00127               idSoft = pAddress->SoftwareAddress(idHard);
00128 
00129               if ( (idSoft.Arm() != Arm) || (idSoft.Orient() != orient) ) {
00130                 cout << "mMuiDCMUnpack-E3  DCM arm, orient = "
00131                      << Arm << "  " << orient
00132                      << "  Lookup arm, orient = "
00133                      << idSoft.Arm() << "  " << idSoft.Orient() << endl;
00134               }
00135               else {
00136 #ifdef MUIOO_DEBUG                
00137                 TMuiHitMapO::iterator hitIter =
00138 #endif
00139                 _muihitmap->insert_new(
00140                                        idSoft.Arm(),
00141                                        idSoft.Plane(),
00142                                        idSoft.Panel(),
00143                                        idSoft.Orient(),
00144                                        idSoft.TwoPack()
00145                                        );
00146 #ifdef MUIOO_DEBUG
00147                 hitIter->get()->print();
00148 #endif
00149 
00150                 row++;
00151               }
00152             }
00153 
00154           } // for (bit=0 ...)
00155         } // if roc and word in range
00156     } // for (j=0 ...)
00157   } // for (dcm=0 ...)
00158 
00159   return True;
00160 }

PHBoolean event PHCompositeNode *    basenode
 

Fill the TMuiRawO table.

Definition at line 27 of file mMuiRawUnpack.cxx.

References _timer, and MUIOO::TRACE.

00028 {
00029   
00030   _timer.get()->restart();
00031   
00032   Event* evt = 0;
00033   
00034   // Find the prdf node.
00035   try{
00036     evt = TMutNode<Event>::find_node(baseNode,"PRDF");
00037   } catch(std::exception& e){
00038     MUIOO::TRACE(e.what());
00039     return False;
00040   }
00041   PHBoolean out = event(evt, baseNode);
00042   _timer.get()->stop();
00043   
00044   return out;
00045 }

unsigned int getbits unsigned int    word,
int    start,
int    length
[private]
 

Definition at line 162 of file mMuiRawUnpack.cxx.

Referenced by event.

00162                                                                            {
00163   return (word >> (start+1-length)) & ~(~0 << length);
00164 }


Member Data Documentation

const mMuiRawUnpackPar* _mod_par [private]
 

Definition at line 39 of file mMuiRawUnpack.h.

Referenced by event.

PHTimeServer::timer _timer [private]
 

Definition at line 41 of file mMuiRawUnpack.h.

Referenced by event.


The documentation for this class was generated from the following files:
MUIOO: PHENIX Muon Identifier Analysis Framework. Documentation by doxygen
Last modified: