00001
00002
00003
00004
00005
00006 #include "DataFormats/Scalers/interface/L1TriggerScalers.h"
00007 #include "DataFormats/Scalers/interface/ScalersRaw.h"
00008
00009 #include <iostream>
00010 #include <time.h>
00011
00012 L1TriggerScalers::L1TriggerScalers():
00013 version_(0),
00014 orbitNumber_(0),
00015 luminositySection_(0),
00016 bunchCrossingErrors_(0),
00017 triggerNumber_(0),
00018 eventNumber_(0),
00019 finalTriggersDistributed_(0),
00020 calibrationTriggers_(0),
00021 randomTriggers_(0),
00022 totalTestTriggers_(0),
00023 finalTriggersGenerated_(0),
00024 finalTriggersInvalidBC_(0),
00025 deadTime_(0),
00026 lostFinalTriggers_(0),
00027 deadTimeActive_(0),
00028 lostFinalTriggersActive_(0),
00029 deadTimeActivePrivate_(0),
00030 deadTimeActivePartition_(0),
00031 deadTimeActiveThrottle_(0),
00032 deadTimeActiveCalibration_(0),
00033 deadTimeActiveTimeSlot_(0),
00034 numberResets_(0),
00035 triggers_(nL1Triggers),
00036 testTriggers_(nL1TestTriggers)
00037 {
00038 collectionTimeSpecial_.tv_sec = 0;
00039 collectionTimeSpecial_.tv_nsec = 0;
00040 collectionTimeSummary_.tv_sec = 0;
00041 collectionTimeSummary_.tv_nsec = 0;
00042 collectionTimeDetails_.tv_sec = 0;
00043 collectionTimeDetails_.tv_nsec = 0;
00044 }
00045
00046 L1TriggerScalers::L1TriggerScalers(const unsigned char * rawData)
00047 {
00048 L1TriggerScalers();
00049
00050 ScalersEventRecordRaw_v1 * raw
00051 = (struct ScalersEventRecordRaw_v1 *)rawData;
00052
00053 trigType_ = ( raw->header >> 56 ) & 0xFULL;
00054 eventID_ = ( raw->header >> 32 ) & 0x00FFFFFFULL;
00055 sourceID_ = ( raw->header >> 8 ) & 0x00000FFFULL;
00056 bunchNumber_ = ( raw->header >> 20 ) & 0xFFFULL;
00057
00058 version_ = raw->version;
00059 if ( version_ >= 1 )
00060 {
00061 collectionTimeSpecial_.tv_sec
00062 = raw->trig.collectionTimeSpecial.tv_sec;
00063 collectionTimeSpecial_.tv_nsec
00064 = raw->trig.collectionTimeSpecial.tv_nsec;
00065 orbitNumber_ = raw->trig.ORBIT_NUMBER;
00066 luminositySection_ = raw->trig.LUMINOSITY_SEGMENT;
00067 bunchCrossingErrors_ = raw->trig.BC_ERRORS;
00068
00069 collectionTimeSummary_.tv_sec
00070 = raw->trig.collectionTimeSummary.tv_sec;
00071 collectionTimeSummary_.tv_nsec
00072 = raw->trig.collectionTimeSummary.tv_nsec;
00073
00074 triggerNumber_ = raw->trig.TRIGGER_NR;
00075 eventNumber_ = raw->trig.EVENT_NR;
00076 finalTriggersDistributed_ = raw->trig.FINOR_DISTRIBUTED;
00077 calibrationTriggers_ = raw->trig.CAL_TRIGGER;
00078 randomTriggers_ = raw->trig.RANDOM_TRIGGER;
00079 totalTestTriggers_ = raw->trig.TEST_TRIGGER;
00080
00081 finalTriggersGenerated_ = raw->trig.FINOR_GENERATED;
00082 finalTriggersInvalidBC_ = raw->trig.FINOR_IN_INVALID_BC;
00083
00084 deadTime_ = raw->trig.DEADTIME;
00085 lostFinalTriggers_ = raw->trig.LOST_FINOR;
00086 deadTimeActive_ = raw->trig.DEADTIMEA;
00087 lostFinalTriggersActive_ = raw->trig.LOST_FINORA;
00088 deadTimeActivePrivate_ = raw->trig.PRIV_DEADTIMEA;
00089 deadTimeActivePartition_ = raw->trig.PTCSTATUS_DEADTIMEA;
00090 deadTimeActiveThrottle_ = raw->trig.THROTTLE_DEADTIMEA;
00091 deadTimeActiveCalibration_ = raw->trig.CALIBRATION_DEADTIMEA;
00092 deadTimeActiveTimeSlot_ = raw->trig.TIMESLOT_DEADTIMEA;
00093 numberResets_ = raw->trig.NR_OF_RESETS;
00094
00095 collectionTimeDetails_.tv_sec
00096 = raw->trig.collectionTimeDetails.tv_sec;
00097 collectionTimeDetails_.tv_nsec
00098 = raw->trig.collectionTimeDetails.tv_nsec;
00099
00100 for ( int i=0; i<ScalersRaw::N_L1_TRIGGERS_v1; i++)
00101 { triggers_.push_back( raw->trig.ALGO_RATE[i]);}
00102
00103 for ( int i=0; i<ScalersRaw::N_L1_TEST_TRIGGERS_v1; i++)
00104 { testTriggers_.push_back( raw->trig.TEST_RATE[i]);}
00105 }
00106 }
00107
00108 L1TriggerScalers::~L1TriggerScalers() { }
00109
00110
00112 std::ostream& operator<<(std::ostream& s,L1TriggerScalers const &c)
00113 {
00114 s << "L1TriggerScalers Version:" << c.version() <<
00115 " SourceID: " << c.sourceID() << std::endl;
00116 char line[128];
00117 char zeitHeaven[128];
00118 char zeitHell[128];
00119 char zeitLimbo[128];
00120 struct tm * horaHeaven;
00121 struct tm * horaHell;
00122 struct tm * horaLimbo;
00123
00124 sprintf(line, " TrigType: %d EventID: %d BunchNumber: %d",
00125 c.trigType(), c.eventID(), c.bunchNumber());
00126 s << line << std::endl;
00127
00128 struct timespec secondsToHeaven = c.collectionTimeSummary();
00129 horaHeaven = gmtime(&secondsToHeaven.tv_sec);
00130 strftime(zeitHeaven, sizeof(zeitHeaven), "%Y.%m.%d %H:%M:%S", horaHeaven);
00131 sprintf(line, " CollectionTimeSummary: %s.%9.9d" ,
00132 zeitHeaven, (int)secondsToHeaven.tv_nsec);
00133 s << line << std::endl;
00134
00135 struct timespec secondsToHell= c.collectionTimeDetails();
00136 horaHell = gmtime(&secondsToHell.tv_sec);
00137 strftime(zeitHell, sizeof(zeitHell), "%Y.%m.%d %H:%M:%S", horaHell);
00138 sprintf(line, " CollectionTimeDetails: %s.%9.9d" ,
00139 zeitHell, (int)secondsToHell.tv_nsec);
00140 s << line << std::endl;
00141
00142 struct timespec secondsToLimbo= c.collectionTimeDetails();
00143 horaLimbo = gmtime(&secondsToLimbo.tv_sec);
00144 strftime(zeitLimbo, sizeof(zeitLimbo), "%Y.%m.%d %H:%M:%S", horaLimbo);
00145 sprintf(line, " CollectionTimeDetails: %s.%9.9d" ,
00146 zeitLimbo, (int)secondsToLimbo.tv_nsec);
00147 s << line << std::endl;
00148
00149 sprintf(line,
00150 " LuminositySection: %15d BunchCrossingErrors: %15d",
00151 c.luminositySection(), c.bunchCrossingErrors());
00152 s << line << std::endl;
00153
00154 sprintf(line,
00155 " TriggerNumber: %15d EventNumber: %15d",
00156 c.triggerNumber(), c.eventNumber());
00157 s << line << std::endl;
00158
00159 sprintf(line,
00160 " TriggersDistributed: %10d TriggersGenerated: %15d",
00161 c.finalTriggersDistributed(),
00162 c.finalTriggersGenerated());
00163 s << line << std::endl;
00164
00165 sprintf(line,
00166 " TriggersInvalidBC: %15d CalibrationTriggers: %15d",
00167 c.finalTriggersInvalidBC(), c.calibrationTriggers());
00168 s << line << std::endl;
00169
00170 sprintf(line,
00171 " TestTriggers: %15d RandomTriggers: %15d",
00172 c.totalTestTriggers(), c.randomTriggers());
00173 s << line << std::endl;
00174
00175 sprintf(line,
00176 " DeadTime: %15d DeadTimeActiveTimeSlot: %15ld",
00177 c.numberResets(), (long int)c.deadTime());
00178 s << line << std::endl;
00179
00180 sprintf(line,
00181 " DeadTimeActive: %15ld DeadTimeActiveCalibration:%15ld",
00182 (long int)c.deadTimeActive(),
00183 (long int)c.deadTimeActiveCalibration());
00184 s << line << std::endl;
00185
00186 sprintf(line,
00187 " LostTriggers: %15ld DeadTimeActivePartition: %15ld",
00188 (long int)c.lostFinalTriggers(),
00189 (long int)c.deadTimeActivePartition());
00190 s << line << std::endl;
00191
00192 sprintf(line,
00193 " LostTriggersActive:%15ld DeadTimeActiveThrottle: %15ld",
00194 (long int)c.lostFinalTriggersActive(),
00195 (long int)c.deadTimeActiveThrottle());
00196 s << line << std::endl;
00197
00198 sprintf(line,
00199 " NumberResets: %15d DeadTimeActivePrivate: %15ld",
00200 c.numberResets(),
00201 (long int)c.deadTimeActivePrivate());
00202 s << line << std::endl;
00203
00204 s << "Physics Triggers" << std::endl;
00205 std::vector<unsigned int> triggers = c.triggers();
00206 int length = triggers.size() / 4;
00207 for ( int i=0; i<length; i++)
00208 {
00209 sprintf(line," %3.3d: %10d %3.3d: %10d %3.3d: %10d %3.3d: %10d",
00210 i, triggers[i],
00211 (i+length), triggers[i+length],
00212 (i+(length*2)), triggers[i+(length*2)],
00213 (i+(length*3)), triggers[i+(length*3)]);
00214 s << line << std::endl;
00215 }
00216
00217 s << "Test Triggers" << std::endl;
00218 std::vector<unsigned int> testTriggers = c.testTriggers();
00219 length = testTriggers.size() / 4;
00220 for ( int i=0; i<length; i++)
00221 {
00222 sprintf(line," %3.3d: %10d %3.3d: %10d %3.3d: %10d %3.3d: %10d",
00223 i, testTriggers[i],
00224 (i+length), testTriggers[i+length],
00225 (i+(length*2)), testTriggers[i+(length*2)],
00226 (i+(length*3)), testTriggers[i+(length*3)]);
00227 s << line << std::endl;
00228 }
00229 return s;
00230 }