TVldRange.cxx
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include "TVldRange.hxx"
00014 #include "TVldContext.hxx"
00015
00016 #include <TSK_DBI_Log.hxx>
00017 #include <MsgFormat.h>
00018 using std::endl;
00019
00020
00021 ClassImp(TVldRange)
00022
00023
00024 std::ostream& operator<<(std::ostream& os, const TVldRange& vldr)
00025 {
00026 return os << vldr.AsString();
00027 }
00028
00029
00030 TVldRange::TVldRange()
00031 : fDetectorMask(0), fSimMask(0),
00032 fTimeStart(), fTimeEnd(), fDataSource("unknown")
00033 {
00034
00035 }
00036
00037 TVldRange::TVldRange(const Int_t detMask, const Int_t simMask,
00038 const TVldTimeStamp &tstart,
00039 const TVldTimeStamp &tend,
00040 const TString &source)
00041 : fDetectorMask(detMask), fSimMask(simMask),
00042 fTimeStart(tstart), fTimeEnd(tend), fDataSource(source)
00043 {
00044
00045 }
00046
00047
00048 TVldRange::~TVldRange()
00049 {
00050
00051
00052 }
00053
00054
00055 const char* TVldRange::AsString(Option_t *option) const
00056 {
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069 static char newstring[255] = " ";
00070
00071 TString opt = option;
00072 opt.ToLower();
00073
00074 Bool_t opt_a = opt.Contains("a");
00075 Bool_t opt_c = opt.Contains("c");
00076
00077 TString detbits;
00078 if (opt_a) {
00079 detbits = DbiDetector::MaskToString(fDetectorMask);
00080 }
00081 else {
00082 sprintf(newstring,"det %#4.4x",fDetectorMask);
00083 detbits = newstring;
00084 }
00085
00086 TString simbits;
00087 if (opt_a) {
00088 simbits = DbiSimFlag::MaskToString(fSimMask);
00089 }
00090 else {
00091 sprintf(newstring,"sim %#4.4x",fSimMask);
00092 simbits = newstring;
00093 }
00094
00095
00096
00097 static char timeopt[4] = "c ";
00098 timeopt[0] = (opt.Contains("s")?'s':'c');
00099 TString start_str = fTimeStart.AsString(timeopt);
00100 TString end_str;
00101 if ( ! opt.Contains("1")) {
00102 end_str = fTimeEnd.AsString(timeopt);
00103 if ( !opt_c ) end_str.Prepend("\n\t ");
00104 else end_str.Prepend(" ");
00105 }
00106 if ( ! opt_c ) start_str.Prepend("\n\t ");
00107
00108 TString source;
00109 if ( ! opt.Contains("-")) {
00110 source += (opt_c) ? " '" : "\n\t from source: ";
00111 source += fDataSource;
00112 source += (opt_c) ? "'" : "";
00113 }
00114
00115 sprintf(newstring,
00116 "|%s|%s|%s%s%s",
00117 (const char*)detbits,
00118 (const char*)simbits,
00119 (const char*)start_str,
00120 (const char*)end_str,
00121 (const char*)source);
00122
00123 return newstring;
00124 }
00125
00126
00127 Bool_t TVldRange::IsCompatible(const TVldContext &vldc) const
00128 {
00129
00130
00131
00132 Int_t detector = (Int_t)vldc.GetDetector();
00133 Int_t simflag = (Int_t)vldc.GetSimFlag();
00134
00135
00136
00137 if ( ! (detector & fDetectorMask) &&
00138 (detector != DbiDetector::kUnknown ||
00139 fDetectorMask != DbiDetector::kUnknown ) ) return kFALSE;
00140 if ( ! (simflag & fSimMask) &&
00141 (simflag != DbiSimFlag::kUnknown ||
00142 fSimMask != DbiSimFlag::kUnknown ) ) return kFALSE;
00143
00144
00145
00146 if ( vldc.GetTimeStamp() < fTimeStart ) return kFALSE;
00147 if ( vldc.GetTimeStamp() >= fTimeEnd ) return kFALSE;
00148
00149 return kTRUE;
00150 }
00151
00152
00153 Bool_t TVldRange::IsCompatible(const TVldContext *vldc) const
00154 {
00155
00156
00157
00158 return IsCompatible(*vldc);
00159 }
00160
00161
00162 void TVldRange::Print(Option_t *option) const
00163 {
00164
00165
00166 printf("%s\n",AsString(option));
00167 }
00168
00169
00170 void TVldRange::TrimTo(const TVldRange& vldr)
00171 {
00172
00173
00174
00175 fDetectorMask &= vldr.fDetectorMask;
00176 fSimMask &= vldr.fSimMask;
00177 if (fTimeStart < vldr.fTimeStart) fTimeStart = vldr.fTimeStart;
00178 if (fTimeEnd > vldr.fTimeEnd ) fTimeEnd = vldr.fTimeEnd;
00179 if (!fDataSource.Contains(vldr.fDataSource)) {
00180 fDataSource += ", ";
00181 fDataSource += vldr.fDataSource;
00182 }
00183 }
00184
00185
00186