Centaure Class Reference

#include <Centaure.hh>

Inheritance diagram for Centaure:

Inheritance graph
[legend]
Collaboration diagram for Centaure:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 Centaure (Run &aRun, FILE *aFile, ui32 lastEventId)
virtual ~Centaure ()
int getNextEvent (Event &eventToFill)

Static Public Member Functions

static const char * type (const int subtype=0)

Private Attributes

bool newConfig
ui32 globalTriggerCounter

Detailed Description

CLASS DATAREADER //

Definition at line 27 of file Centaure.hh.


Constructor & Destructor Documentation

Centaure::Centaure ( Run aRun,
FILE *  aFile,
ui32  lastEventId 
)

Definition at line 28 of file Centaure.cpp.

00028                                                            : AcquisitionParser(aRun, aFile, lastEventId)
00029 {
00030   //FILE_LOG(logDEBUG) << "--Centaure constructor()"<< endl;
00031     newConfig =true;
00032                 globalTriggerCounter = 1;
00033 }

Centaure::~Centaure (  )  [virtual]

Definition at line 36 of file Centaure.cpp.

00037 {
00038   //FILE_LOG(logDEBUG)<< "----Centaure destructeur"<< endl;
00039 }


Member Function Documentation

static const char* Centaure::type ( const int  subtype = 0  )  [inline, static]

Definition at line 32 of file Centaure.hh.

Referenced by main().

00032 { return(CENTAURE); };

int Centaure::getNextEvent ( Event eventToFill  )  [virtual]

Implements AcquisitionParser.

Definition at line 41 of file Centaure.cpp.

00042 {
00043   if ( newConfig == true)
00044   {
00045       newConfig = false;
00046       return NEW_CONFIG;
00047   }
00048   Detector& aDet = run.getDetector();
00049 
00050 // --- totalGassiplex96 = TOTAL Nb of Gassiplex Cards ---
00051 ui32 totalGassiplex96 = 0;
00052 
00053 
00054 totalGassiplex96 = aDet.getNumberOfGaziplex96();
00055 //FILE_LOG(logDEBUG) << "TOTAL Nb of Gassiplex Cards  " << totalGassiplex96 << endl;
00056 
00057 
00058 // Data File Variables
00059 //ui16 readValue = 0;    // 16bit equivalent UShort_t? yes
00060 ui16 readValue = 0;          // 16bit equivalent UShort_t? yes
00061 ui16 eventLength = 0;
00062 ui32 centaureEvtId =0;     // 32 bits = 4 octets
00063 ui64  value = 0;        // 64bit? no it seems to be 32 bits as well
00064 //ULong64_t  timestamp = 0;        //this one is 64bit!! ;)
00065 ui64  timestamp = 0;        //this one is 64bit!! ;)
00066 
00067 // Tree Variables
00068 i32 eventId = 0;
00069 
00070 ui32 nbHiChannels[totalGassiplex96]; // number of channels above VME threshold
00071 i32 nEvents  = lastEventId ;    // number of events  in DATA Files
00072 double GoodRate = 0.0;  // (number of entries in Tree)/(number of events  in DATA Files)
00073 ui32 checklength=0;        // expected event length
00074 
00075 // Start data reconstruction
00076 
00077   // LOOP over the DATA Files
00078 bool finish = false;
00079 
00080   checklength=0;
00081   // get CENTAURE event ID
00082   fread(&readValue,sizeof(i16),1,inputFile);  // char -> 8 bits
00083   centaureEvtId = bigTolittle(readValue);//// WATCH OUT EVENTID CAN START AT N != 0  !!!!
00084   nEvents++;
00085   // eventId = COUTING event ID
00086   eventId = nEvents;
00087   // get event Length
00088   fread(&readValue,sizeof(i16),1,inputFile);
00089   eventLength =  bigTolittle(readValue);
00090 
00091   if ( centaureEvtId == 0 && eventLength == 0 ) // Last event code
00092   {
00093     return LAST_FILE_EVENT;
00094   }
00095 
00096   else  // Start a new event
00097     {
00098         //FILE_LOG(logDEBUG) << "START EVENT --------------------  "  <<endl;
00099         //FILE_LOG(logDEBUG) << "  centaureEvtId  " << centaureEvtId <<endl;
00100         //FILE_LOG(logDEBUG) << "  nEvents    " << nEvents <<endl;
00101         //FILE_LOG(logDEBUG) << "  eventId     " << eventId <<endl;
00102         //FILE_LOG(logDEBUG) << "  event length " << eventLength << endl;
00103 
00104 //    const map<ui16, Chamber*> &chambers = aDet.getChambers();
00105 //    for (map<ui16, Chamber*>::const_iterator iter=chambers.begin(); iter!=chambers.end(); iter++)
00106     const ChamberMap_t &chambers = aDet.getChambers();
00107     for (ChamberMap_t::const_iterator iter=chambers.begin(); iter!=chambers.end(); iter++)
00108     {
00109          Chamber& chamber = *(*iter).second;
00110 
00111          // LOOP over number of Gassiplex96 per chamber
00112          for ( ui32 jj = 0; jj < chamber.getNumberOfGassiplexBoards(); jj++ )
00113             {
00114                 // Get number of channels above VME threshold for each Gassiplex card :
00115                 fread(&readValue,sizeof(i16),1,inputFile);  // word count
00116                 nbHiChannels[jj] = 1023 & bigTolittle(readValue); // get rid of MSB, 1023=0x3FF
00117                 checklength += nbHiChannels[jj];
00118 
00119                  //FILE_LOG(logINFO)<< "nbHiChannels["<<jj<<"] : " << nbHiChannels[jj] << " HIT for chamber id["<< chamber.getId() << " ,pos: "<< chamber.getZ() <<endl;
00120 
00121 
00122                 // LOOP over number of Channels above VME threshold for each Gassiplex card
00123                 for ( ui32 j = 0 ; j < nbHiChannels[jj] ; j++  )
00124                 {
00125                   // Get Channel number and its corresponding channel value
00126                   //Get  bit 16  to 31
00127                   fread(&readValue,sizeof(i16),1,inputFile);
00128                   readValue = bigTolittle(readValue);
00129                   // fill 32 bit data with  bit 16  to 31
00130                   value = ( readValue << 16)  ;
00131                   // Get  bit 0 a 15
00132                   fread(&readValue,sizeof(i16),1,inputFile);
00133                   readValue = bigTolittle(readValue);
00134 
00135                   // fill 32 bit data with  bit 0  to 15
00136                   value = value + readValue;
00137 
00138                   ui16 channelData = value & Toolbox::MASK_CHANNEL_DATA;
00139                   ui16 channelNumber = ( ( value & Toolbox::MASK_CHANNEL_NUMBER) >> 12 ) & Toolbox::MASK_12BIT;
00140 
00141                 //FILE_LOG(logDEBUG) << "ChannelNumber[" << channelNumber << "]type:  ["<<  chamber.getType() << endl;
00142                 if ( chamber.getType() == GASSIPLEXCHAMBER4 )
00143                 {
00144                   channelNumber = channelNumber + 96*jj ;
00145                 }
00146 
00147             i16 channelValue = channelData;  // to have the negative values as well
00148               if (channelValue>2000)
00149                 {
00150                   channelValue=channelValue-4096;
00151                 }
00152               //chmax = max(chmax,channelValue);
00153               i16 channelNumber2 = channelNumber ;
00154 //              i32 posX, posY, posZ = 0;
00155   
00156 
00157                     try
00158                     {
00159                         const Channel&  channel = chamber.getChannelById(channelNumber);
00160  //                       posX = channel.getX();
00161   //                      posY = channel.getY();
00162    //                     posZ=chamber.getZ(); //distance between chambers, should be entered by steering file
00163 
00164                         i32 digitalValue = 0;
00165                                                                                                 ChannelHit *chHit =new ChannelHit(channel,digitalValue, channelValue) ;
00166                         event.insertHit(chamber,chHit);
00167                     }
00168                       catch ( MicroException &e)
00169                     {
00170                         FILE_LOG(logERROR) << "---------------" << "Chamber->id=["<< chamber.getId() << "], channelNuber[" << channelNumber << "]"  << e.getMessage() << endl;
00171                     }
00172 
00173                 }//end of LOOP over number of Channels above VME threshold
00174             } // end of LOOP over number of GassiplexChamber1 cards in current chamber
00175     } // end of loop over chamber
00176 
00177 
00178     checklength=checklength*2+3+4+totalGassiplex96;
00179     FILE_LOG(logDEBUG) <<"  checklength: " << checklength<< endl;
00180     FILE_LOG(logDEBUG) <<"  eventLength: " << eventLength<< endl;
00181     FILE_LOG(logDEBUG) <<"  totalGassiplex96: " << totalGassiplex96<< endl;
00182     //FILE_LOG(logDEBUG) << "END EVENT ------------------  "  <<endl;
00183     if (checklength != eventLength)
00184           {
00185             FILE_LOG(logERROR) << "CRAP EVENT checklength != eventLength: NOTHING CAN BE DONE!" << endl;
00186             FILE_LOG(logERROR) << "totalGassiplex96[" << totalGassiplex96 << "]" << endl;
00187           }
00188           else
00189           {
00190           //now read the timestamp and store it via event.SetTimestamp(timestamp)
00191             fread(&readValue,sizeof(i16),1,inputFile);
00192             readValue = bigTolittle(readValue);
00193             timestamp = ((i64) readValue<<48);
00194             fread(&readValue,sizeof(i16),1,inputFile);
00195             readValue = bigTolittle(readValue);
00196             timestamp =timestamp+ ((i64) readValue<<32);
00197             fread(&readValue,sizeof(i16),1,inputFile);
00198             readValue = bigTolittle(readValue);
00199             timestamp =timestamp+ ((i64) readValue<<16);
00200             fread(&readValue,sizeof(i16),1,inputFile);
00201             readValue = bigTolittle(readValue);
00202             timestamp =timestamp+(i64) readValue;
00203             timestamp = timestamp - TIMEREF_OFFSET  ;  // TIMEREF_OFFSET diff from 1904 to 1970
00204 
00205           }
00206 
00207           // Read end event code  0xffff
00208           fread(&readValue,sizeof(i16),1,inputFile);
00209           if ( readValue != 0xffff )
00210           {
00211               FILE_LOG(logDEBUG) << "ERROR last code event != 0xffff: "<< readValue << endl;
00212               return EVENT_ERROR;
00213           }
00214           else
00215           {
00216               FILE_LOG(logDEBUG) <<   "last code event == 0xffff -> reconstruction successfull"<< endl;
00217               // CREATE EVENT  for current Run
00218               event.setTimeStamp(timestamp);
00219               event.setId(eventId);
00220                                                         event.setGlobalTriggerCounter(globalTriggerCounter);
00221                                                         event.setDifTriggerCounter(globalTriggerCounter++);
00222 
00223 
00224           }
00225      } //end of event
00226      lastEventId = eventId;
00227      return EVENT_CORRECT;
00228 }


Member Data Documentation

bool Centaure::newConfig [private]

Definition at line 38 of file Centaure.hh.

Referenced by Centaure(), and getNextEvent().

ui32 Centaure::globalTriggerCounter [private]

Definition at line 39 of file Centaure.hh.

Referenced by Centaure(), and getNextEvent().


The documentation for this class was generated from the following files:
Generated on Mon Jan 7 13:18:03 2013 for MicromegasFramework by  doxygen 1.4.7