| 1 |
/** @file |
/** @file |
| 2 |
* $Author: kusanagi $ |
* $Author: kusanagi $ |
| 3 |
* $Date: 2004/09/24 11:57:32 $ |
* $Date: 2004/10/17 12:28:15 $ |
| 4 |
* $Revision: 2.1 $ |
* $Revision: 2.2 $ |
| 5 |
* |
* |
| 6 |
* Implementation of the PamelaRun class. |
* Implementation of the PamelaRun class. |
| 7 |
*/ |
*/ |
| 194 |
std::list<std::string> files; |
std::list<std::string> files; |
| 195 |
DIR *dir = opendir(path.c_str()); |
DIR *dir = opendir(path.c_str()); |
| 196 |
if (dir == 0) { |
if (dir == 0) { |
| 197 |
oss.flush(); |
oss.str(""); |
| 198 |
oss << "Could not open " << path; |
oss << "Could not open " << path; |
| 199 |
logger->debug(oss.str().c_str()); |
logger->debug(oss.str().c_str()); |
| 200 |
throw Exception("Could not open " + path); |
//throw Exception("Could not open " + path); |
| 201 |
} |
} |
| 202 |
|
|
| 203 |
for (struct dirent *d = readdir(dir); d != NULL; d = readdir(dir)) { |
for (struct dirent *d = readdir(dir); d != NULL; d = readdir(dir)) { |
| 217 |
if (stat(nextfilename.c_str(), &buf) == 0) { |
if (stat(nextfilename.c_str(), &buf) == 0) { |
| 218 |
filename.insert(filename.size()-5, "*"); |
filename.insert(filename.size()-5, "*"); |
| 219 |
} |
} |
| 220 |
oss.flush(); |
oss.str(""); |
| 221 |
oss << "Using " << filename; |
oss << "Using " << filename; |
| 222 |
logger->debug(oss.str().c_str()); |
logger->debug(oss.str().c_str()); |
| 223 |
files.push_back(filename); |
files.push_back(filename); |
| 257 |
} |
} |
| 258 |
TFile* File = new TFile(BaseFileName.c_str(), "read"); |
TFile* File = new TFile(BaseFileName.c_str(), "read"); |
| 259 |
if (!File->IsOpen()) { |
if (!File->IsOpen()) { |
| 260 |
oss.flush(); |
oss.str(""); |
| 261 |
oss << "Could not open file " << BaseFileName << " for reading."; |
oss << "Could not open file " << BaseFileName << " for reading."; |
| 262 |
logger->warn(oss.str().c_str()); |
logger->warn(oss.str().c_str()); |
| 263 |
return; |
return; |
| 270 |
TChain* FriendChain = new TChain(TreeName.c_str()); |
TChain* FriendChain = new TChain(TreeName.c_str()); |
| 271 |
FriendChain->Add(FileName.c_str()); |
FriendChain->Add(FileName.c_str()); |
| 272 |
tree->AddFriend(FriendChain, TreeName.c_str()); |
tree->AddFriend(FriendChain, TreeName.c_str()); |
| 273 |
oss.flush(); |
oss.str(""); |
| 274 |
oss << "Adding chain " << TreeName << " with " |
oss << "Adding chain " << TreeName << " with " |
| 275 |
<< FriendChain->GetEntries() << " entries as Friend"; |
<< FriendChain->GetEntries() << " entries as Friend"; |
| 276 |
logger->warn(oss.str().c_str()); |
logger->warn(oss.str().c_str()); |
| 283 |
std::string TreeName = k->GetName(); |
std::string TreeName = k->GetName(); |
| 284 |
TTree* FriendTree = (TTree *)File->Get(TreeName.c_str()); |
TTree* FriendTree = (TTree *)File->Get(TreeName.c_str()); |
| 285 |
tree->AddFriend(FriendTree, TreeName.c_str()); |
tree->AddFriend(FriendTree, TreeName.c_str()); |
| 286 |
oss.flush(); |
oss.str(""); |
| 287 |
oss << "Adding tree " << TreeName << " with " |
oss << "Adding tree " << TreeName << " with " |
| 288 |
<< FriendTree->GetEntries() << " entries as Friend"; |
<< FriendTree->GetEntries() << " entries as Friend"; |
| 289 |
logger->debug(oss.str().c_str()); |
logger->debug(oss.str().c_str()); |
| 299 |
* @return The root trees with the friends. |
* @return The root trees with the friends. |
| 300 |
*/ |
*/ |
| 301 |
TTree* PamelaRun::ReadTTree(const PacketType* type) { |
TTree* PamelaRun::ReadTTree(const PacketType* type) { |
| 302 |
oss.flush(); |
oss.str(""); |
| 303 |
oss << "Getting root files of " << type->GetName(); |
oss << "Getting root files of " << type->GetName(); |
| 304 |
logger->debug(oss.str().c_str()); |
logger->debug(oss.str().c_str()); |
| 305 |
RootTreeMap::iterator t = TTreeMap.find(type); |
RootTreeMap::iterator t = TTreeMap.find(type); |
| 306 |
if (t != TTreeMap.end()) { |
if (t != TTreeMap.end()) { |
| 307 |
return t->second; |
return t->second; |
| 308 |
} else { |
} else { |
| 309 |
oss.flush(); |
oss.str(""); |
| 310 |
oss << "Reading root files of " << type->GetName(); |
oss << "Reading root files of " << type->GetName(); |
| 311 |
logger->debug(oss.str().c_str()); |
logger->debug(oss.str().c_str()); |
| 312 |
EventHeader header(type); |
EventHeader header(type); |
| 346 |
branch->SetAddress(subpacket); |
branch->SetAddress(subpacket); |
| 347 |
SubPacketAddresses.insert(SubPacketMap::value_type(FullName, packet)); |
SubPacketAddresses.insert(SubPacketMap::value_type(FullName, packet)); |
| 348 |
} else { |
} else { |
| 349 |
oss.flush(); |
oss.str(""); |
| 350 |
oss << "Could not find data for " << packet->GetPacketType()->GetName() << "/" << name ; |
oss << "Could not find data for " << packet->GetPacketType()->GetName() << "/" << name ; |
| 351 |
logger->error(oss.str().c_str()); |
logger->error(oss.str().c_str()); |
| 352 |
} |
} |
| 405 |
TFile* File = new TFile(FileName.c_str(), "create"); |
TFile* File = new TFile(FileName.c_str(), "create"); |
| 406 |
File->SetCompressionLevel(5); |
File->SetCompressionLevel(5); |
| 407 |
if (!File->IsOpen()) { |
if (!File->IsOpen()) { |
| 408 |
oss.flush(); |
oss.str(""); |
| 409 |
oss << "Could not open file " << FileName ; |
oss << "Could not open file " << FileName ; |
| 410 |
logger->error(oss.str().c_str()); |
logger->error(oss.str().c_str()); |
| 411 |
throw Exception("Could not open file " + FileName); |
//throw Exception("Could not open file " + FileName); |
| 412 |
} |
} |
| 413 |
std::string TreeName = GetTreeName(packet); |
std::string TreeName = GetTreeName(packet); |
| 414 |
TTree *tree = new TTree(TreeName.c_str(), algo->GetAlgorithmName().c_str()); |
TTree *tree = new TTree(TreeName.c_str(), algo->GetAlgorithmName().c_str()); |
| 417 |
AlgorithmInfo ai(algo); |
AlgorithmInfo ai(algo); |
| 418 |
ai.Write(); |
ai.Write(); |
| 419 |
info.Write(); |
info.Write(); |
| 420 |
oss.flush(); |
oss.str(""); |
| 421 |
oss << "Creating file " << FileName << " with Tree " << TreeName; |
oss << "Creating file " << FileName << " with Tree " << TreeName; |
| 422 |
logger->info(oss.str().c_str()); |
logger->info(oss.str().c_str()); |
| 423 |
return tree; |
return tree; |
| 437 |
void PamelaRun::WriteSubPacket(Algorithm *algo, void* subpacket, |
void PamelaRun::WriteSubPacket(Algorithm *algo, void* subpacket, |
| 438 |
const TClass *c, std::string name) { |
const TClass *c, std::string name) { |
| 439 |
SubPacket *packet = *(SubPacket **)subpacket; |
SubPacket *packet = *(SubPacket **)subpacket; |
| 440 |
oss.flush(); |
oss.str(""); |
| 441 |
oss << "Register: " << name << " for " << algo->GetAlgorithmName() << " (writing)"; |
oss << "Register: " << name << " for " << algo->GetAlgorithmName() << " (writing)"; |
| 442 |
logger->debug(oss.str().c_str()); |
logger->debug(oss.str().c_str()); |
| 443 |
TTree* HeaderTree = ReadTTree(packet->GetPacketType()); |
TTree* HeaderTree = ReadTTree(packet->GetPacketType()); |
| 444 |
TTree* tree = CreateTTree(algo, packet, name); |
TTree* tree = CreateTTree(algo, packet, name); |
| 445 |
oss.flush(); |
oss.str(""); |
| 446 |
oss << "Branch: " << name << " Class: " << c->GetName(); |
oss << "Branch: " << name << " Class: " << c->GetName(); |
| 447 |
logger->debug(oss.str().c_str()); |
logger->debug(oss.str().c_str()); |
| 448 |
tree->Branch(name.c_str(), c->GetName(), subpacket); |
tree->Branch(name.c_str(), c->GetName(), subpacket); |
| 476 |
*/ |
*/ |
| 477 |
void PamelaRun::WriteHeader(Algorithm* algo, EventHeader** subpacket, |
void PamelaRun::WriteHeader(Algorithm* algo, EventHeader** subpacket, |
| 478 |
const PacketType* type) { |
const PacketType* type) { |
|
oss.flush(); |
|
|
oss << "Creating header tree for " << type->GetName(); |
|
|
logger->debug(oss.str().c_str()); |
|
| 479 |
EventHeader header(type); |
EventHeader header(type); |
| 480 |
std::string FileName = GetFileName(&header, GetDefaultBranchName(&header)); |
std::string FileName = GetFileName(&header, GetDefaultBranchName(&header)); |
| 481 |
std::string EventType = (&header)->GetPacketType()->GetName(); |
std::string EventType = (&header)->GetPacketType()->GetName(); |
| 482 |
CreateDirectoryStructure(FileName.c_str()); |
CreateDirectoryStructure(FileName.c_str()); |
| 483 |
TFile* File = new TFile(FileName.c_str(), "create"); |
TFile* File = new TFile(FileName.c_str(), "create"); |
| 484 |
if (!File->IsOpen()) { |
if (!File->IsOpen()) { |
| 485 |
oss.flush(); |
oss.str(""); |
| 486 |
oss << "Could not open file " << FileName ; |
oss << "Could not open file " << FileName ; |
| 487 |
logger->error(oss.str().c_str()); |
logger->error(oss.str().c_str()); |
| 488 |
throw Exception("Could not open file " + FileName); |
//throw Exception("Could not open file " + FileName); |
| 489 |
} |
} |
| 490 |
//std::string TreeName = GetTreeName(packet); |
//std::string TreeName = GetTreeName(packet); |
| 491 |
TTree *tree = new TTree("Pscu", algo->GetAlgorithmName().c_str()); |
TTree *tree = new TTree("Pscu", algo->GetAlgorithmName().c_str()); |
| 494 |
AlgorithmInfo ai(algo); |
AlgorithmInfo ai(algo); |
| 495 |
ai.Write(); |
ai.Write(); |
| 496 |
info.Write(); |
info.Write(); |
| 497 |
oss.flush(); |
oss.str(""); |
| 498 |
oss << "Creating file " << FileName << " with Tree Pscu"; |
oss << "Created file " << FileName << " with Tree Pscu"; |
| 499 |
logger->info(oss.str().c_str()); |
logger->info(oss.str().c_str()); |
| 500 |
tree->Branch(GetDefaultBranchName(&header).c_str(), |
tree->Branch(GetDefaultBranchName(&header).c_str(), |
| 501 |
(*subpacket)->Class()->GetName(), subpacket); |
(*subpacket)->Class()->GetName(), subpacket); |