12 #include "TG4PrimaryParticle.hxx"
13 #include "TG4PrimaryVertex.hxx"
14 #include "TIntegerDatum.hxx"
15 #include "TND280MCHeader.hxx"
16 #include "TRealDatum.hxx"
21 #include "../cvstags/TBasicHeaderModule.cxx"
31 "Standard module which fills the standard header information "
38 ND::TFieldManager::InitializeFieldManager();
46 ND280NamedWarn(
"TBasicHeaderModule",
" Configure");
47 ND280NamedWarn(
"TBasicHeaderModule",
" options"<<option);
50 if (option ==
"noVersion") {
51 ND280NamedWarn(
"TBasicHeaderModule",
" NOT storing software version number in output TTree");
56 if (option.find(
"OverrideSWVersion") == 0)
58 TRegexp OverrideVersionREGEXOld(
"^OverrideSWVersion_v[0-9]+r?[0-9]*p?[0-9]*$");
59 TRegexp OverrideVersionREGEXNew(
"^OverrideSWVersion_[0-9]+[.][0-9]+[.]*[0-9]*$");
60 TString optTS = option;
63 if (optTS.Contains(OverrideVersionREGEXOld) )OldStyle=kTRUE;
64 if (optTS.Contains(OverrideVersionREGEXNew) )NewStyle=kTRUE;
65 if(OldStyle || NewStyle) fSoftwareUseOverrideVersion =
true;
67 size_t len = (option.size() - option.find_first_of(
'_'));
71 "The supplied option "
72 << option.substr(option.find_first_of(
'_'), std::string::npos)
73 <<
" is too long, please use a shorter version numb"
77 if (fSoftwareUseOverrideVersion)
79 fSoftwareOverrideVersionString =
80 option.substr(option.find_first_of(
'_') + 1, std::string::npos);
81 ND280NamedLog(
"TBasicHeaderModule",
82 "Software Version override found version : " << fSoftwareOverrideVersionString);
87 ND280NamedError(
"TBasicHeaderModule",
88 "Found option \"" << option
90 " which is malformed, should be "
91 "matched by ^OverrideVersion_v[0-9]+"
95 "[0-9]+[.][0-9]+[.]*[0-9]*$"
101 if (option ==
"software_version") {
102 ND280NamedWarn(
"TBasicHeaderModule",
" Storing software version deduced from environment variables");
108 ND280Error(
""<<
"TBasicHeaderModule argument \""<<option<<
"\" is not valid. "<<std::endl<<
" Valid values are: noVersion, software_version ( uses environment variables) , or "<<std::endl<<
109 " matching regular expression: OverrideVersion_v[0-9]+r?[0-9]*p?[0-9] or OverrideSWVersion_[0-9]+[.][0-9]+[.]*[0-9]"
115 fOutputTree->Branch(
"EventTime", &fEventTime,
"EventTime/i", fBufferSize);
116 fOutputTree->Branch(
"TriggerWord", &fTriggerWord,
"TriggerWord/l",
118 fOutputTree->Branch(
"FGDCosmicEvent", &fFGDCosmicEvent,
"FGDCosmicEvent/O",
120 fOutputTree->Branch(
"TripTCosmicEvent", &fTripTCosmicEvent,
121 "TripTCosmicEvent/O", fBufferSize);
122 fOutputTree->Branch(
"CTMTriggerPattern", fCTMTriggerPattern,
123 "CTMTriggerPattern[3]/l", fBufferSize);
124 fOutputTree->Branch(
"TripTCosmicTriggerType", &fTripTCosmicTriggerType,
125 "TripTCosmicTriggerType/I", fBufferSize);
126 fOutputTree->Branch(
"TripTCosmicTriggerUpward", &fTripTCosmicTriggerUpward,
127 "TripTCosmicTriggerUpward/I", fBufferSize);
128 fOutputTree->Branch(
"CosmicPrescaleWeight", &fCosmicPrescaleWeight,
129 "CosmicPrescaleWeight/D", fBufferSize);
130 fOutputTree->Branch(
"SoftwareVersion", fSoftwareVersion,
"SoftwareVersion/C",
132 fOutputTree->Branch(
"MagneticFieldStrength", &fMagneticFieldStrength,
133 "MagneticFieldStrength/D", fBufferSize);
135 fOutputTree->Branch(
"Partition", &fPartition,
"Partition/I", fBufferSize);
136 fOutputTree->Branch(
"Spill", &fSpill,
"Spill/I", fBufferSize);
137 fOutputTree->Branch(
"TimeStamp", &fTimeStamp,
"TimeStamp/I", fBufferSize);
138 fOutputTree->Branch(
"IsDetector", &fIsDetector,
"IsDetector/O", fBufferSize);
139 fOutputTree->Branch(
"IsMC", &fIsMC,
"IsMC/O", fBufferSize);
142 fOutputTree->Branch(
"P0DWaterStatus", &fP0DWaterStatus,
"P0DWaterStatus/O",
144 fOutputTree->Branch(
"GeometryHash", fGeometryHash,
"GeometryHash[5]/i",
146 fOutputTree->Branch(
"AlignmentId", fAlignmentId,
"fAlignmentId[5]/i",
149 fOutputTree->Branch(
"POTPerSpill", &fMCIntensity,
"POTPerSpill/F",
155 ND280Warn(
" entered ND::TBasicHeaderModule::FillTree ");
156 ND280NamedWarn(
"TBasicHeaderModule",
157 "Entered ND::TBasicHeaderModule::FillTree ");
158 ND::TND280Context context =
event.GetContext();
160 fPartition = context.GetPartition();
161 fSpill = context.GetSpill();
162 fTimeStamp = context.GetTimeStamp();
163 fIsDetector = context.IsDetector();
164 fIsMC = context.IsMC();
165 fIsSand = fIsMC && ((context.GetRun() / 1000) % 10 == 7);
166 fP0DWaterStatus = this->P0DWaterStatus();
168 ND::TSHAHashValue geoHash =
event.GetGeometryHash();
169 ND::TAlignmentId alignId =
event.GetAlignmentId();
170 for (std::size_t i = 0; i < 5; ++i) {
171 fGeometryHash[i] = geoHash(i);
172 fAlignmentId[i] = alignId(i);
176 if (event.Get<ND::TND280MCHeader>(
"truth/mcHeader")) {
178 event.Get<ND::TND280MCHeader>(
"truth/mcHeader")->GetIntensity();
182 ND280NamedWarn(
"TBasicHeaderModule",
" fSoftware is true ");
184 ND280NamedWarn(
"TBasicHeaderModule",
" fSoftware is false ");
185 if(fSoftwareUseOverrideVersion)
186 ND280NamedWarn(
"TBasicHeaderModule",
187 " fSoftwareUseOverrideVersion is true - will use value from command line. ");
190 if ( fSoftwareUseOverrideVersion){
191 strcpy(fSoftwareVersion, fSoftwareOverrideVersionString.c_str());
192 ND280NamedInfo(
"TBasicHeaderModule",
193 "SoftwareVersion branch will be set "
195 << fSoftwareOverrideVersionString);
199 char *softwareVersionCharOld = getenv(
"ND280ROOT");
200 char *softwareVersionCharNew = getenv(
"ND280SOFTWAREMASTERROOT");
202 if( softwareVersionCharNew != NULL )
204 std::string softwareVersionString = softwareVersionCharNew;
205 size_t lastUnderscore = softwareVersionString.find_last_of(
"_");
206 softwareVersionString = softwareVersionString.substr(lastUnderscore + 1);
208 TRegexp VersionREGEXNew(
"^[0-9]+[.][0-9]+[.]*[0-9]*$");
209 TString optTS(softwareVersionString);
210 if (optTS.Contains(VersionREGEXNew) )
212 strcpy(fSoftwareVersion, softwareVersionString.c_str());
213 ND280NamedInfo(
"TBasicHeaderModule",
214 "Software Version found from ND280SOFTWAREMASTERROOT : " << softwareVersionString);
218 strcpy(fSoftwareVersion,
"NULL");
219 ND280NamedWarn(
"TBasicHeaderModule",
220 "Software version number "<<optTS<<
" found from ND280SOFTWAREMASTERROOT is not correctly formatted "<<
221 "so setting fSoftwareVersion to \"NULL\"");
224 else if (softwareVersionCharOld != NULL )
226 std::string softwareVersionString = softwareVersionCharOld;
227 size_t lastSlash = softwareVersionString.find_last_of(
"/");
228 softwareVersionString = softwareVersionString.substr(lastSlash + 1);
229 strcpy(fSoftwareVersion, softwareVersionString.c_str());
230 ND280NamedInfo(
"TBasicHeaderModule",
231 "Software Version found from ND280ROOT: " << softwareVersionString);
235 strcpy(fSoftwareVersion,
"NULL");
236 ND280NamedWarn(
"TBasicHeaderModule",
237 "Couldn't find ND280ROOT or ND280SOFTWAREMASTERROOT, setting "
238 "fSoftwareVersion to \"NULL\"");
244 strcpy(fSoftwareVersion,
"NULL");
245 ND280NamedWarn(
"TBasicHeaderModule",
246 "Software version command line option noVersion "
247 "set so , setting fSoftwareVersion to \"NULL\"");
249 fEventTime =
event.GetHeader().GetMCMSecond();
251 fTriggerWord =
event.GetHeader().GetTriggerWord();
253 ULong64_t shift = one << 55;
254 fTripTCosmicEvent = shift & fTriggerWord;
256 fFGDCosmicEvent = shift & fTriggerWord;
258 fMagneticFieldStrength =
259 ND::TFieldManager::GetFieldValue(TVector3(0, 0, -400.0)).Mag();
261 for (
int i = 0; i < 3; i++) {
262 fCTMTriggerPattern[i] =
event.GetHeader().GetCTMTriggerPattern(i);
265 fTripTCosmicTriggerType = -1;
266 if (event.Has<ND::TIntegerDatum>(
"triptCosmicTriggerType")) {
267 fTripTCosmicTriggerType =
268 event.Get<ND::TIntegerDatum>(
"triptCosmicTriggerType")->GetValue();
271 fTripTCosmicTriggerUpward = -1;
272 if (event.Has<ND::TIntegerDatum>(
"triptCosmicTriggerUpward")) {
273 fTripTCosmicTriggerUpward =
274 event.Get<ND::TIntegerDatum>(
"triptCosmicTriggerUpward")->GetValue();
277 fCosmicPrescaleWeight = 1;
278 if (event.Has<ND::TRealDatum>(
"CosmicPrescaleWeight")) {
279 fCosmicPrescaleWeight =
280 event.Get<ND::TRealDatum>(
"CosmicPrescaleWeight")->GetValue();
291 double depth = ND::TGeomInfo::Get().P0D().TargetDepth();
292 if (depth < 1000.0) {
std::string fDescription
A longish descrition of the analysis.
std::string fCVSID
Defined if an official tagged version.
void SetNameTitle(char const *name, char const *title)
std::string fCVSTagName
Defined if an official tagged version.