#include <Centaure.hh>
Inheritance diagram for Centaure:
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 |
Definition at line 27 of file Centaure.hh.
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] |
static const char* Centaure::type | ( | const int | subtype = 0 |
) | [inline, static] |
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 }
bool Centaure::newConfig [private] |
ui32 Centaure::globalTriggerCounter [private] |