45 #include "git-revision.h" 53 std::cout << std::endl <<
"usage: write_musrRoot_runHeader [<fileName>] | --version";
54 std::cout << std::endl <<
" <fileName> is the file name including the extention root, e.g. test.root";
55 std::cout << std::endl << std::endl;
58 int main(
int argc,
char *argv[])
65 if (!strcmp(argv[1],
"--version")) {
68 std::cout << std::endl <<
"write_musrRoot_runHeader version: " << PACKAGE_VERSION <<
", git-branch: " << GIT_BRANCH <<
", git-rev: " << GIT_CURRENT_SHA1 <<
" (" << BUILD_TYPE <<
"), ROOT version: " << ROOT_VERSION_USED << std::endl << std::endl;
70 std::cout << std::endl <<
"write_musrRoot_runHeader version: " << PACKAGE_VERSION <<
" (" << BUILD_TYPE <<
"), ROOT version: " << ROOT_VERSION_USED << std::endl << std::endl;
74 std::cout << std::endl <<
"write_musrRoot_runHeader git-branch: " << GIT_BRANCH <<
", git-rev: " << GIT_CURRENT_SHA1 << std::endl << std::endl;
76 std::cout << std::endl <<
"write_musrRoot_runHeader version: unknown." << std::endl << std::endl;
87 header->
Set(
"RunInfo/Generic Validator URL",
"http://lmu.web.psi.ch/facilities/software/MusrRoot/Validation/MusrRoot.xsd");
88 header->
Set(
"RunInfo/Specific Validator URL",
"http://lmu.web.psi.ch/facilities/software/MusrRoot/Validation/MusrRootGPS.xsd");
89 header->
Set(
"RunInfo/Generator",
"any2many");
90 header->
Set(
"RunInfo/File Name",
"deltat_tdc_gps_2871.root");
91 header->
Set(
"RunInfo/Run Title",
"here comes the run title");
92 header->
Set(
"RunInfo/Run Number", 2871);
95 TString startTime(
"2012-04-19 14:25:22"), stopTime(
"2012-04-19 19:13:47");
96 struct tm tm_start, tm_stop;
97 header->
Set(
"RunInfo/Run Start Time", startTime);
98 header->
Set(
"RunInfo/Run Stop Time", stopTime);
100 memset(&tm_start, 0,
sizeof(tm_start));
101 strptime(startTime.Data(),
"%Y-%m-%d %H:%M:%S", &tm_start);
102 memset(&tm_stop, 0,
sizeof(tm_stop));
103 strptime(stopTime.Data(),
"%Y-%m-%d %H:%M:%S", &tm_stop);
104 Double_t duration = difftime(mktime(&tm_stop), mktime(&tm_start));
105 prop.
Set(
"Run Duration", (Int_t)duration,
"sec");
106 header->
Set(
"RunInfo/Run Duration", prop);
108 header->
Set(
"RunInfo/Laboratory",
"PSI");
109 header->
Set(
"RunInfo/Instrument",
"GPS");
111 prop.
Set(
"Muon Beam Momentum", 28.1,
"MeV/c");
112 header->
Set(
"RunInfo/Muon Beam Momentum", prop);
114 header->
Set(
"RunInfo/Muon Species",
"positive muon");
115 header->
Set(
"RunInfo/Muon Source",
"target M");
116 header->
Set(
"RunInfo/Setup",
"a very special setup with Heliox");
117 header->
Set(
"RunInfo/Comment",
"nothing more to be said");
118 header->
Set(
"RunInfo/Sample Name",
"the best ever");
120 prop.
Set(
"Sample Temperature", 3.2, 3.21, 0.05,
"K",
"CF1");
121 header->
Set(
"RunInfo/Sample Temperature", prop);
123 prop.
Set(
"Sample Magnetic Field", 350.0, 350.002, 0.005,
"G",
"WXY");
124 header->
Set(
"RunInfo/Sample Magnetic Field", prop);
126 header->
Set(
"RunInfo/No of Histos", 4);
128 prop.
Set(
"Time Resolution", 0.1953125,
"ns",
"TDC 9999");
129 header->
Set(
"RunInfo/Time Resolution", prop);
131 header->
Set(
"DetectorInfo/Detector000/Name",
"Left - NPP");
132 header->
Set(
"DetectorInfo/Detector000/Histo Number", 0);
133 header->
Set(
"DetectorInfo/Detector000/Histo Length", 66661);
134 header->
Set(
"DetectorInfo/Detector000/Time Zero Bin", 3419.0);
135 header->
Set(
"DetectorInfo/Detector000/First Good Bin", 3419);
136 header->
Set(
"DetectorInfo/Detector000/Last Good Bin", 66661);
138 header->
Set(
"DetectorInfo/Detector001/Name",
"Top - NPP");
139 header->
Set(
"DetectorInfo/Detector001/Histo Number", 1);
140 header->
Set(
"DetectorInfo/Detector001/Histo Length", 66661);
141 header->
Set(
"DetectorInfo/Detector001/Time Zero Bin", 3419.0);
142 header->
Set(
"DetectorInfo/Detector001/First Good Bin", 3419);
143 header->
Set(
"DetectorInfo/Detector001/Last Good Bin", 66661);
145 header->
Set(
"DetectorInfo/Detector002/Name",
"Right - NPP");
146 header->
Set(
"DetectorInfo/Detector002/Histo Number", 2);
147 header->
Set(
"DetectorInfo/Detector002/Histo Length", 66661);
148 header->
Set(
"DetectorInfo/Detector002/Time Zero Bin", 3419.0);
149 header->
Set(
"DetectorInfo/Detector002/First Good Bin", 3419);
150 header->
Set(
"DetectorInfo/Detector002/Last Good Bin", 66661);
152 header->
Set(
"DetectorInfo/Detector003/Name",
"Bottom - NPP");
153 header->
Set(
"DetectorInfo/Detector003/Histo Number", 3);
154 header->
Set(
"DetectorInfo/Detector003/Histo Length", 66661);
155 header->
Set(
"DetectorInfo/Detector003/Time Zero Bin", 3419.0);
156 header->
Set(
"DetectorInfo/Detector003/First Good Bin", 3419);
157 header->
Set(
"DetectorInfo/Detector003/Last Good Bin", 66661);
159 header->
Set(
"DetectorInfo/Detector004/Name",
"Left - PPC");
160 header->
Set(
"DetectorInfo/Detector004/Histo Number", 20);
161 header->
Set(
"DetectorInfo/Detector004/Histo Length", 66661);
162 header->
Set(
"DetectorInfo/Detector004/Time Zero Bin", 3419.0);
163 header->
Set(
"DetectorInfo/Detector004/First Good Bin", 3419);
164 header->
Set(
"DetectorInfo/Detector004/Last Good Bin", 66661);
166 header->
Set(
"DetectorInfo/Detector005/Name",
"Top - PPC");
167 header->
Set(
"DetectorInfo/Detector005/Histo Number", 21);
168 header->
Set(
"DetectorInfo/Detector005/Histo Length", 66661);
169 header->
Set(
"DetectorInfo/Detector005/Time Zero Bin", 3419.0);
170 header->
Set(
"DetectorInfo/Detector005/First Good Bin", 3419);
171 header->
Set(
"DetectorInfo/Detector005/Last Good Bin", 66661);
173 header->
Set(
"DetectorInfo/Detector006/Name",
"Right - PPC");
174 header->
Set(
"DetectorInfo/Detector006/Histo Number", 22);
175 header->
Set(
"DetectorInfo/Detector006/Histo Length", 66661);
176 header->
Set(
"DetectorInfo/Detector006/Time Zero Bin", 3419.0);
177 header->
Set(
"DetectorInfo/Detector006/First Good Bin", 3419);
178 header->
Set(
"DetectorInfo/Detector006/Last Good Bin", 66661);
180 header->
Set(
"DetectorInfo/Detector007/Name",
"Bottom - PPC");
181 header->
Set(
"DetectorInfo/Detector007/Histo Number", 23);
182 header->
Set(
"DetectorInfo/Detector007/Histo Length", 66661);
183 header->
Set(
"DetectorInfo/Detector007/Time Zero Bin", 3419.0);
184 header->
Set(
"DetectorInfo/Detector007/First Good Bin", 3419);
185 header->
Set(
"DetectorInfo/Detector007/Last Good Bin", 66661);
188 scHistoNames.push_back(
"Sample Temperature");
189 scHistoNames.push_back(
"Sample Magnetic Field");
190 header->
Set(
"RunInfo/Slow Control Histo Names", scHistoNames);
193 dummyTest.push_back(
"dummy1");
194 dummyTest.push_back(
"dummy2");
195 dummyTest.push_back(
"dummy3");
196 header->
Set(
"RunInfo/Dummy Test", dummyTest);
199 header->
Set(
"SampleEnvironmentInfo/Cryo",
"Konti-1");
200 header->
Set(
"SampleEnvironmentInfo/Insert",
"X123");
201 header->
Set(
"SampleEnvironmentInfo/Orientation",
"c-axis perp spin, perp field. spin perp field");
203 prop.
Set(
"CF2", 3.2, 3.22, 0.04,
"K");
204 header->
Set(
"SampleEnvironmentInfo/CF2", prop);
207 header->
Set(
"SampleEnvironmentInfo/CF3", prop);
209 prop.
Set(
"CF4", 3.25, 3.28,
"K");
210 header->
Set(
"SampleEnvironmentInfo/CF4", prop);
212 prop.
Set(
"CF5", 3.26, 3.29,
"K",
"another strange temperature");
213 header->
Set(
"SampleEnvironmentInfo/CF5", prop);
215 prop.
Set(
"Dummy Prop", -2.0, -2.001, 0.002,
"SI-unit");
216 header->
Set(
"SampleEnvironmentInfo/Dummy Prop", prop);
219 header->
Set(
"MagneticFieldEnvironmentInfo/Magnet Name",
"Bpar");
220 prop.
Set(
"Current", 1.34,
"A");
221 header->
Set(
"MagneticFieldEnvironmentInfo/Current", prop);
224 header->
Set(
"BeamlineInfo/Name",
"piM3.2");
225 header->
Set(
"BeamlineInfo/WSX61a",
"DAC = 3289, ADC = 0.800");
228 for (UInt_t i=0; i<3; i++) dummyInt.push_back(i+1000);
229 header->
Set(
"BeamlineInfo/Dummy Int", dummyInt);
233 header->
Set(
"ScalerInfo/Ip", 12332123);
236 header->
Set(
"aa/bb/cc/dd/ee/ff/name",
"funny");
237 header->
Set(
"aa/bb/cc/dd/ee/ff/gg/xyz", 123);
239 TFile *f =
new TFile(argv[1],
"RECREATE",
"write_musrRoot_runHeader");
246 TFolder *runHeader =
new TFolder(
"RunHeader",
"MusrRoot Run Header Info");
virtual void Set(TString label, Double_t demand, Double_t value, Double_t error, TString unit, TString description=TString("n/a"))