14 if ((!dbParams_.usingDbCache() && !deviceFactory(__func__)) ||
15 (dbParams_.usingDbCache() && !databaseCache(__func__))) {
16 return feds_.emptyRange();
20 if (!dbParams_.usingDbCache()) {
21 SiStripDbParams::SiStripPartitions::const_iterator iter = dbParams_.partitions().begin();
22 SiStripDbParams::SiStripPartitions::const_iterator jter = dbParams_.partitions().end();
23 for (; iter != jter; ++iter) {
24 if (partition.empty() || partition == iter->second.partitionName()) {
30 if (
range == feds_.emptyRange()) {
32 deviceFactory(__func__)->setUsingStrips(usingStrips_);
33 int16_t major = iter->second.fedVersion().first;
34 int16_t minor = iter->second.fedVersion().second;
35 if (iter->second.fedVersion().first == 0 && iter->second.fedVersion().second == 0) {
42 tmp1 = *(deviceFactory(__func__)->getFed9UDescriptions(iter->second.partitionName(), major, minor));
46 Fed9U::Fed9UDeviceFactory::vectorCopy(tmp2, tmp1);
49 feds_.loadNext(iter->second.partitionName(), tmp2);
54 ss <<
"[SiStripConfigDb::" << __func__ <<
"]"
55 <<
" Downloaded " <<
feds.size() <<
" FED descriptions to local cache for partition \""
56 << iter->second.partitionName() <<
"\"" << std::endl;
57 ss <<
"[SiStripConfigDb::" << __func__ <<
"]"
58 <<
" Cache holds FED descriptions for " << feds_.size() <<
" partitions.";
71 Fed9U::Fed9UDeviceFactory::vectorCopy(tmp2, *tmp1);
78 <<
" NULL pointer to FED descriptions vector!";
83 handleException(__func__);
90 if (!partition.empty()) {
91 feds = feds_.find(partition);
97 feds_.find((--(dbParams_.partitions().end()))->second.partitionName()).
end());
99 feds = feds_.emptyRange();
106 ss <<
"[SiStripConfigDb::" << __func__ <<
"]"
107 <<
" Found " << nc <<
" FED descriptions";
108 if (!dbParams_.usingDb()) {
109 ss <<
" in " << dbParams_.inputFedXmlFiles().size() <<
" 'fed.xml' file(s)";
111 if (!dbParams_.usingDbCache()) {
112 ss <<
" in " <<
np <<
" database partition(s)";
114 ss <<
" from shared memory name '" << dbParams_.sharedMemory() <<
"'";
129 if (!deviceFactory(__func__)) {
133 if (partition.empty()) {
135 ss <<
"[SiStripConfigDb::" << __func__ <<
"]"
136 <<
" Partition string is empty,"
137 <<
" therefore cannot add FED descriptions to local cache!";
144 ss <<
"[SiStripConfigDb::" << __func__ <<
"]"
145 <<
" Vector of FED descriptions is empty,"
146 <<
" therefore cannot add FED descriptions to local cache!";
151 SiStripDbParams::SiStripPartitions::const_iterator iter = dbParams_.partitions().begin();
152 SiStripDbParams::SiStripPartitions::const_iterator jter = dbParams_.partitions().end();
153 for (; iter != jter; ++iter) {
154 if (partition == iter->second.partitionName()) {
158 if (iter == dbParams_.partitions().end()) {
160 ss <<
"[SiStripConfigDb::" << __func__ <<
"]"
161 <<
" Partition \"" << partition <<
"\" not found in partition list, "
162 <<
" therefore cannot add FED descriptions!";
168 if (
range == feds_.emptyRange()) {
171 Fed9U::Fed9UDeviceFactory::vectorCopy(
tmp,
feds);
174 feds_.loadNext(partition,
tmp);
177 std::stringstream
ss;
178 ss <<
"[SiStripConfigDb::" << __func__ <<
"]"
179 <<
" Added " <<
feds.size() <<
" FED descriptions to local cache for partition \""
180 << iter->second.partitionName() <<
"\"" << std::endl;
181 ss <<
"[SiStripConfigDb::" << __func__ <<
"]"
182 <<
" Cache holds FED descriptions for " << feds_.size() <<
" partitions.";
187 ss <<
"[SiStripConfigDb::" << __func__ <<
"]"
188 <<
" Partition \"" << partition <<
"\" already found in local cache, "
189 <<
" therefore cannot add new FED descriptions!";
198 if (dbParams_.usingDbCache()) {
200 <<
" Using database cache! No uploads allowed!";
204 if (!deviceFactory(__func__)) {
210 ss <<
"[SiStripConfigDb::" << __func__ <<
"]"
211 <<
" Found no cached FED descriptions, therefore no upload!";
217 SiStripDbParams::SiStripPartitions::const_iterator iter = dbParams_.partitions().begin();
218 SiStripDbParams::SiStripPartitions::const_iterator jter = dbParams_.partitions().end();
219 for (; iter != jter; ++iter) {
220 if (partition.empty() || partition == iter->second.partitionName()) {
222 if (
range != feds_.emptyRange()) {
226 deviceFactory(__func__)->setFed9UDescriptions(
feds,
227 iter->second.partitionName(),
228 (uint16_t*)(&(fedVersion.first)),
229 (uint16_t*)(&(fedVersion.second)),
233 std::stringstream
ss;
234 ss <<
"[SiStripConfigDb::" << __func__ <<
"]"
235 <<
" Uploaded " <<
feds.size() <<
" FED descriptions to database for partition \""
236 << iter->second.partitionName() <<
"\"";
241 ss <<
"[SiStripConfigDb::" << __func__ <<
"]"
242 <<
" Vector of FED descriptions is empty for partition \"" << iter->second.partitionName()
243 <<
"\", therefore aborting upload for this partition!";
260 handleException(__func__);
263 allowCalibUpload_ =
true;
273 ss <<
"[SiStripConfigDb::" << __func__ <<
"]"
274 <<
" Found no cached FED descriptions!";
281 if (partition.empty()) {
284 SiStripDbParams::SiStripPartitions::const_iterator iter = dbParams_.partitions().begin();
285 SiStripDbParams::SiStripPartitions::const_iterator jter = dbParams_.partitions().end();
286 for (; iter != jter; ++iter) {
287 if (partition != iter->second.partitionName()) {
289 if (
range != feds_.emptyRange()) {
294 if (
range != feds_.emptyRange()) {
296 <<
" Deleting FED descriptions for partition \"" << iter->second.partitionName()
297 <<
"\" from local cache...";
305 if (partition.empty()) {
306 if (!feds_.empty()) {
308 feds_.find((--(dbParams_.partitions().end()))->second.partitionName()).
end());
310 feds = feds_.emptyRange();
313 SiStripDbParams::SiStripPartitions::const_iterator iter = dbParams_.partitions().begin();
314 SiStripDbParams::SiStripPartitions::const_iterator jter = dbParams_.partitions().end();
315 for (; iter != jter; ++iter) {
316 if (partition == iter->second.partitionName()) {
320 feds = feds_.find(iter->second.partitionName());
323 if (
feds != feds_.emptyRange()) {
324 FedDescriptionsV::const_iterator ifed =
feds.begin();
325 FedDescriptionsV::const_iterator jfed =
feds.end();
326 for (; ifed != jfed; ++ifed) {
333 ss <<
"[SiStripConfigDb::" << __func__ <<
"]";
334 if (partition.empty()) {
335 ss <<
" Found no FED descriptions in local cache!";
337 ss <<
" Found no FED descriptions in local cache for partition \"" << partition <<
"\"!";
343 feds_ = temporary_cache;
349 std::stringstream
ss;
350 ss <<
"[SiStripConfigDb::" << __func__ <<
"]"
351 <<
" Contents of FedDescriptions container:" << std::endl;
352 ss <<
" Number of partitions: " << feds_.size() << std::endl;
358 for (; iconn != jconn; ++iconn) {
360 if (partition.empty() || partition == iconn->first) {
361 ss <<
" Partition number : " << cntr <<
" (out of " << feds_.size() <<
")" << std::endl;
362 ss <<
" Partition name : \"" << iconn->first <<
"\"" << std::endl;
363 ss <<
" Num of FED ids : " << iconn->second.size() << std::endl;
366 std::map<uint16_t, vector<uint16_t> >
feds;
367 FedDescriptionsV::const_iterator iter = iconn->second.begin();
368 FedDescriptionsV::const_iterator jter = iconn->second.end();
369 for (; iter != jter; ++iter) {
371 uint16_t
key = (*iter)->getCrateNumber();
372 uint16_t
data = (*iter)->getFedId();
380 std::map<uint16_t, std::vector<uint16_t> >
tmp;
381 std::map<uint16_t, std::vector<uint16_t> >::const_iterator
ii =
feds.begin();
382 std::map<uint16_t, std::vector<uint16_t> >::const_iterator
jj =
feds.end();
384 std::vector<uint16_t>
temp =
ii->second;
385 std::sort(
temp.begin(),
temp.end());
386 std::vector<uint16_t>::const_iterator iii =
temp.begin();
387 std::vector<uint16_t>::const_iterator jjj =
temp.end();
388 for (; iii != jjj; ++iii) {
389 tmp[
ii->first].push_back(*iii);
396 std::map<uint16_t, std::vector<uint16_t> >::const_iterator ifed =
feds.begin();
397 std::map<uint16_t, std::vector<uint16_t> >::const_iterator jfed =
feds.end();
398 for (; ifed != jfed; ++ifed) {
399 ss <<
" Found " << std::setw(2) << ifed->second.size() <<
" FED ids for crate number " << std::setw(2)
400 << ifed->first <<
" : ";
401 if (!ifed->second.empty()) {
402 uint16_t
first = ifed->second.front();
403 uint16_t
last = ifed->second.front();
404 std::vector<uint16_t>::const_iterator icrate = ifed->second.begin();
405 std::vector<uint16_t>::const_iterator jcrate = ifed->second.end();
406 for (; icrate != jcrate; ++icrate) {
407 if (icrate != ifed->second.begin()) {
408 if (*icrate !=
last + 1) {
409 ss << std::setw(2) <<
first <<
"->" << std::setw(2) <<
last <<
", ";
410 if (icrate != ifed->second.end()) {
411 first = *(icrate + 1);
418 ss << std::setw(2) <<
first <<
"->" << std::setw(2) <<
last;
434 if ((!dbParams_.usingDbCache() && !deviceFactory(__func__)) ||
435 (dbParams_.usingDbCache() && !databaseCache(__func__))) {
441 bool using_strips = usingStrips_;
443 factory_->setUsingStrips(
false);
447 factory_->setUsingStrips(using_strips);
451 FedDescriptionsV::const_iterator ifed =
feds.begin();
452 FedDescriptionsV::const_iterator jfed =
feds.end();
453 for (; ifed != jfed; ++ifed) {
455 fedIds_.push_back((*ifed)->getFedId());
458 <<
" NULL pointer to FedDescription!";
465 handleException(__func__);
468 if (fedIds_.empty()) {
470 <<
" No FED ids found!";
473 return FedIdsRange(fedIds_.begin(), fedIds_.end());